diff --git a/.bzrignore b/.bzrignore index 4b6b0411a47c941d2ef90a46c61ee783c429a7bd..751b823f1eac1d4275a10800a7c9eaedac840681 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1759,3 +1759,8 @@ vio/viotest.cpp zlib/*.ds? zlib/*.vcproj mysql-test/r/*.log +client/mysql_upgrade +unittest/examples/*.t +unittest/mysys/*.t +unittest/mytap/t/*.t +unittest/unit diff --git a/BUILD/compile-dist b/BUILD/compile-dist index 6cc537cdf9c5397a1ff01beaa1e0587ff581b001..dea29d4612b6a0141a67f4fc09c29c790775fc02 100755 --- a/BUILD/compile-dist +++ b/BUILD/compile-dist @@ -52,7 +52,9 @@ fi --with-federated-storage-engine \ --with-berkeley-db \ --with-innodb \ + --with-yassl \ --enable-thread-safe-client \ --with-extra-charsets=complex \ - --with-ndbcluster + --with-ndbcluster \ + --with-zlib-dir=bundled make diff --git a/BUILD/test-alpha-ccc b/BUILD/test-alpha-ccc deleted file mode 100755 index c6f4abc09738e345cae987f4f431406003ada760..0000000000000000000000000000000000000000 --- a/BUILD/test-alpha-ccc +++ /dev/null @@ -1,11 +0,0 @@ -cd /usr/local/mysql -bin/mysqladmin shutdown -libexec/mysqld --basedir . & -cd sql-bench -rm output/* -perl run-all-tests --comment "Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; egcs 1.1.2 + ccc" --user=monty --password="ds20-gryta" -perl run-all-tests --comment "Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; egcs 1.1.2 + ccc" --user=monty --password="ds20-gryta" --log --use-old -mv output/* output-ccc -perl run-all-tests --comment "Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; egcs 1.1.2 + ccc" --user=monty --password="ds20-gryta" --fast -perl run-all-tests --comment "Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; egcs 1.1.2 + ccc" --user=monty --password="ds20-gryta" --log --use-old --fast -mv output/* output-ccc diff --git a/Docs/Books/algor.eps b/Docs/Books/algor.eps deleted file mode 100644 index b202f02d12a2ede7cafaf8e6a849d65de7f8513c..0000000000000000000000000000000000000000 --- a/Docs/Books/algor.eps +++ /dev/null @@ -1,1419 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /home/mwagner/work/bk/mysql/Docs/Flags/algor.eps -%%CreationDate: Sun Dec 31 14:27:48 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 254 383 -%%EndComments -%%BeginPreview: 100 154 1 154 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -% ffffffffff7ffffffffffffbb0 -% fbbbefffbbfefffffffffffff0 -% fffffff7fffffbdeefffffeff0 -% f7ffbf7ffffbffffffbff7bf70 -% ffffffffbeefffffffffbffff0 -% f77bfffbfffff7fffffffffdf0 -% fffffffffdffbfbffefeff7ff0 -% dfffeefffffeffffdffffffbf0 -% fb77bff7b7effffdfffbfdfff0 -% ffde3ffffde3f7bfff7ff785d0 -% 6f9f3feff977bfffff3fbf38f0 -% fe8f3f7fff33fffffbfffe7ff0 -% 774f31eb5532f4d75fb6fcfed0 -% 7e6f2c18011222224e2034fff0 -% fee72e9d3d333332ff33bcdbf0 -% 760724bc3933b3321f331cffb0 -% fcf3259cb933337b8733bc7ff0 -% 79f32f9d39373332ef333e7df0 -% f5e12049391323324e339b02f0 -% 7effce77def7deddbfd7bfd7f0 -% ffffdf7fffffffffffffffffd0 -% 6fefce7ffffffffffffffffff0 -% feff61fdfff7dffffffffffef0 -% 7ffffff7ddeffdff7efffbb7f0 -% f7deffffffff7ffdfbfbefffd0 -% 7effffdfffffffeffffffffdf0 -% 7fffeefedffbffffffefffbff0 -% f7fbffffff7f6dfdbfff7bf770 -% ffdfbffffff7ffeffffffffef0 -% 6ffffff77ffffffffdfffffff0 -% 7efffd7dfdfdddfef7dff7eff0 -% fffbfe9cffb2fdfffb9eff7f70 -% 7befbcb6aab7b955af5bfffdf0 -% effffe689138a548b0affbf7f0 -% 7fbff6ad9dbe4d568bcffffff0 -% 7ffefc88aab2b2355893bfbfb0 -% fbffeffff7dfdecbff7ffffff0 -% ffbbffffffffff5ffffffff6f0 -% 7ffffffffffffdffffffffbff0 -% 77fffffddfdfbffff7fffdfff0 -% ff7fbdfffefdfbf6ffef7fffb0 -% 7ff7ffffffffffffffbffffef0 -% f7ffffefdfffffefeffffffbf0 -% 7f7f7dfffffdfbfffffffdeff0 -% 6ffdfffffeffefdefff6fffff0 -% fef7ffdf7ff7ffffff7fffffb0 -% fffff7fffbffffbff7fffddef0 -% 6dffdffdfffffffdfffff7fff0 -% 7fefffbfefdfbeffdf77bffff0 -% ffff7fffff7ef7ffffffffbbf0 -% 6bbdff7bdffffff7bdffffffb0 -% fffffbffffffeffffffdfffff0 -% 6f7ffff7bdedbeeef7b7edddf0 -% fffbefffffffffffffffffffd0 -% 7daebaaaaaad6aad5addb77ff0 -% 6ffffffffffffffbf7b76ddbb0 -% ff756bbadb55aab6fffffffff0 -% 6db4d62100000000008a515ff0 -% fffdabbaad250896555ce7ff70 -% 6f6d76a9a449084233d7565df0 -% ffeaa73521004210891cd57ff0 -% 7da44a400a5494842041215ff0 -% 77fae53ad08021294a9e6afbb0 -% ff6dbf51442208423195b5aff0 -% 6ffd653a8c4110862adad77ff0 -% fdaaeb51410842105154a55fb0 -% 6f644044100210008401287df0 -% ffedaf29429442290956576ff0 -% 6ebad2b98c2108c6318cb57f70 -% ffeeee914a210844335aebdff0 -% bb68a10a484000814914a67bd0 -% 77ca4a50108451100221095ff0 -% ff74a4a5420800054846657f70 -% 6feeeb198c6314c4318cd6dbf0 -% 7d6aa6b08a210846229a657ff0 -% ffd4a90450882109445292df70 -% 6da40049010000100100087bf0 -% ff6aed225a52a5214a56e55ff0 -% 6feca330842288c6308c537fb0 -% fd6ad62986631844118a556ef0 -% 6fc80088204842884a50927ff0 -% ff65504208800011000104dff0 -% 7de885292252aaa44a54517bd0 -% 6f6d6611845318c4118c465ff0 -% ffd242b14c229482310852ff70 -% 7d649404209021114452885df0 -% efd1004002444224000012fff0 -% 7f645529589294894a52445fd0 -% edcd4210c4231892318c4afdf0 -% 7f6042914a4892662100515ff0 -% 7bd51424014950084849087bb0 -% ef62008020120550800012dff0 -% bfc928214ac4b2252a42887ff0 -% 7d6843188c2998c6218c425b70 -% efe110014a622545280028fff0 -% 7f4288a4108aa4100022815ff0 -% 7de524002104a9208a40947bb0 -% ef600952ca7244c62011085ff0 -% 7fcc621086251aa5318c637f70 -% fb6101154a49b04a2900005df0 -% 6fca944010820510802114fff0 -% fea21084211454000402115fd0 -% 6fe945298e61916f5150847bf0 -% fd6c4210c8451842310c635fb0 -% 7fc125294932a5922140087ff0 -% eb6a884210840000840292ddf0 -% 7fd020842108a5284020047fd0 -% 77654a3148329483294aa95bf0 -% ff6c6310866318c6318c42ffb0 -% 6dd14529245294a80908525ff0 -% ff64104411040001002204fdf0 -% 77c94482204842104400915fd0 -% ff74a539865298c4199a467bf0 -% 6f6d67208c6314a6310c6adfd0 -% fdd0a4a55210042540d2a2ff70 -% 77650840008040000a00085bf0 -% efca528a52048229405552fff0 -% 7f7ce7308c6318c6259a655fb0 -% edd5542984510844310cd7fdf0 -% 7f5aa555520200894aa4a45ff0 -% dde452000088421000020affd0 -% 7b5aad5aa81000214a28e25b70 -% f7eee6918a6218c63196affff0 -% bf5ad5394c210844294cb55ff0 -% 76eca54541004102529466fdd0 -% efca4a50100a12100022485ff0 -% 7d75e2aa820040014a94d3ffb0 -% 6fdebb315c62088a32daa6bbf0 -% fb69d6aa842110462995fb7ff0 -% 6fdaa52949084210529e455fb0 -% ff64524200509081002052fef0 -% 6dd6e739528022122a8d445ff0 -% ff6d6dd58c25084452dad7fdd0 -% 6fdad731204108822956b55ff0 -% 7d6aaa548a8841145298a3dfd0 -% fffffffffffffffffff7fefdf0 -% ed55555555555555555eadbff0 -% 7ffffffffffffffffff7fbf7b0 -% 77ffffffffffffffff7ffffff0 -% ff7fdfeeef7dbf7bb7feefdef0 -% 6fedff7ffff7fdfffffffffff0 -% fdfffdffbffff7ffffb7ff7bd0 -% 7fdfb7fffbff7fefbdff6ffff0 -% efffffedffb7ffbefffffeef70 -% 7dbbffffdfffeefff7eefffdf0 -% ffff7ddffeff7ffdfffff7ffd0 -% 6dffeffffff7fdffdeffffdbf0 -% 7ff7ffff6dffffeffff7df7fd0 -% fbbffedfffefdffefbffffff70 -% 77ff7bfdffffffffffef7efbf0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -239.288271 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 154 8 -% Transformation matrix -[ 100 0 0 154 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404 -0404045c0c735c0c735c04745c0c735c0c735c04745c04745c0c735c0c735c0c735c046c540b6c -540b6c5c0c73540b6c540b6c5c0c735c046c5004645c046c500464540b6c540b6c540b74540b74 -540b6c500464540b6c500464540b6c540b6c5004645c0c73540b6c540b6c5c15745c15745c1574 -5c1574540b74500464500464540b6c540b6c5c0c73500464540b74500464500464540b6c500464 -540b6c500464540b74540b6c540b6c540b6c540b6c500464500464540b6c540b6c5004645c0c73 -540b6c540b74540b6c500464540b6c500464500464540b6c4c086c5004644c086c5004644c086c -4c086c540b6c540b74540b6c540b6c500464540b745004644c0b74500464540b744c086c55146c -5415745415745415745c1574541574540b6c55146c541574040404 -0404045c0c7c5c0c7c5c0c735c0c73640c795c0c735c0c735c0c735c0c735c04745c0c73640c79 -5c046c5c0c735c046c5c0c73540b6c5c0c735c0c735c0c735c046c5c0c73500464540b6c5c0c73 -5004645c0c735c0c735004645c0c73540b745c0c73540b6c540b6c5c0c73540b6c540b6c5c1574 -5c1574540b6c540b6c540b74540b6c5c0c73540b74540b74540b6c5c0c73540b6c540b74540b74 -540b74540b6c540b6c540b6c540b6c540b6c540b6c540b745c0c73540b6c540b74540b6c540b74 -540b6c540b6c540b74540b74540b6c540b74540b74500464500464540b6c500464540b6c540b6c -540b6c4c086c541574540b6c540b744c086c540b6c4c086c540b6c4c0b74540b6c540b6c4c086c -5415745415745c157454157454157454157454157455146c040404 -0404045c0c735c0c735c04745c0c735c0c73640c795c0c735c04745c04745c0c73640c79540b6c -5c0c73540b6c5c0c735c0c73540b6c5c0c735c0c73540b6c5c046c5004645c04745c0c73500464 -5004645c0c735004645c0c73541574540b6c540b6c540b6c5c0c73540b6c540b6c540b6c5c0c73 -540b6c5c1574540b74500464540b6c5c1574540b74500464540b6c540b74500464540b6c540b6c -540b6c540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b6c5c0c73540b6c540b6c540b6c -540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74540b74540b6c4c086c540b6c -540b6c540b6c540b6c4c086c5004644c086c5004644c086c4c086c5004644c086c540b6c540b6c -55146c54157454157455146c5c1574541574541574540b6c040404 -0404045c0c73640c795c0c735c04745c0c735c0c73640c795c0c735c0c735c0c735c04745c0c73 -660b655c04745c0c73540b6c5c046c540b6c5c0c735c0c735004645c0474540b6c5004645c0c73 -540b74540b6c5c0c735004645c0c73540b74540b6c5c0c73540b6c540b6c5c0c735c1574540b6c -540b6c540b6c540b6c540b745c0c73540b6c5c0c73540b6c5c1574540b6c540b74540b74540b6c -540b6c540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c -5c0c73540b6c540b6c540b6c540b6c540b6c540b6c500464540b6c500464540b6c5004644c086c -540b6c4c086c4c086c540b6c540b6c540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c -540b6c5415745c1574541574541574540b6c55146c540b74040404 -040404540b6c5c0c735c0c736414745c0c7c5c0c735c0c735c0c735c04745c0474540b745c0474 -540b6c540b6c5c0c73540b6c5c046c540b6c5004645c0c735c0c73540b6c5004645c0c73540b6c -5c046c540b6c5c0c735c0c73540b6c540b6c540b6c5c0c73540b74540b6c540b6c540b6c540b74 -540b6c540b6c540b74540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c5c0c73 -540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b6c -540b74540b6c5c0c73540b6c540b74540b6c540b6c500464500464500464540b74540b6c540b6c -540b6c500464540b6c4c086c540b6c4c086c540b6c540b6c540b6c540b6c4c086c540b6c540b6c -540b6c540b74541574541574541574541574541574540b74040404 -0404045c1574640c795c0c735c15746414745c0c7c5c0c735c0c735c04745c0c735c04745c046c -5c0c73540b6c5c0c73540b6c5c0c735c0c735c0c73500464540b6c540b6c5c0c735c0c73500464 -540b6c540b6c5c1574540b6c540b6c540b6c540b6c540b6c5c0c73540b6c540b6c540b745c1574 -5c0c73540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c540b74 -540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b6c540b74500464540b6c500464540b74 -5c0c73540b6c540b6c540b6c540b6c540b6c540b74540b6c540b74500464540b6c540b6c540b6c -4c086c540b6c4c086c540b6c540b6c4c086c540b6c540b6c540b6c540b6c540b6c55146c4c086c -540b6c540b6c54157455146c540b74541574541574540b6c040404 -0404046414745c0c7c5c15745c147c6414745c0c735c0c735c0c735c0c735c04745c04745c0c73 -5c0c735c0c73540b6c5c0c735c0c735c0c73500464540b6c5c04745004645c046c540b6c500464 -5c0c7355146c5c0c73540b6c540b745c0c73540b6c5c15745c1574540b6c540b6c5c0c73540b6c -5c1574540b74540b6c540b6c5c0c73540b6c540b6c540b6c540b6c5c1574540b6c540b6c540b6c -540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b74540b74500464 -540b6c540b74500464540b6c540b74540b6c540b6c540b74500464500464540b6c540b6c540b6c -540b6c4c086c540b6c540b7454157455146c4c086c540b6c4c086c540b6c540b74540b74541574 -541c6c541574540b6c540b7455146c540b74540b6c540b6c040404 -0404045c0c735c0c735c0c73641a7c641a7c5c147c5c0c735c0c735c15745c0c73540b6c540b6c -5c0c735c046c540b6c5c0c735c046c500464540b745c0c735004645c046c5004645c0c73500464 -5c0c7c540b6c5c0c735c15745c15745c15745004645c0c735c15745c1574540b6c540b6c540b6c -5c1574540b6c500464540b74540b6c540b6c540b6c540b7455146c540b6c540b6c500464540b6c -540b6c5c0c73540b6c540b74540b6c540b6c5c0c73540b6c500464540b74500464540b74500464 -540b74540b6c540b6c540b74540b74540b74540b6c540b6c540b6c540b74540b6c4c086c540b6c -4c086c540b6c540b6c5415745415744c086c4c086c4c086c540b6c4c086c55146c540b6c540b6c -541574541574541574541574540b74541574540b6c541574040404 -0404045c147c6414745c0c73641a7c5c15745c15745c04746414745c0c735c0c735c04745c0c73 -540b6c5c0c735c046c540b6c5c046c5c0c735004645c0c735c0c735004645c0c73540b745c046c -540b6c540b6c540b6c5c0c73540b745c0c73540b745004645c0c73540b6c540b6c540b6c5c1574 -5c0c73540b6c5c1574540b6c540b6c5c0c735c0c73540b6c5c157455146c5c0c73540b6c500464 -540b6c540b6c540b6c5c0c735004645c15745c0c73540b6c540b74540b74540b74500464540b74 -540b74540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c500464540b6c -540b74540b74540b6c540b6c4c086c4c086c540b6c540b6c54157454157455146c4c086c4c086c -540b6c55146c540b6c541574540b6c541574540b74540b74040404 -0404046414746414745c0c73641a7c5c15745c0c735c0c735c0c73540b6c5c0c73660b65540b6c -640c79540b6c5c046c5c046c540b74540b6c5c0c735004645c046c5c04745c0c73500464500464 -5004645c046c5c0c735c1574540b6c5c15745c0c735c0c735c0c73540b6c540b6c5c0c735c1574 -5c1574540b6c5c15745c1574540b6c541574540b6c540b6c5c15745c0c73500464540b74540b74 -540b6c540b6c540b6c540b74540b745c1574540b6c540b6c540b6c540b74500464540b74500464 -540b6c540b74540b6c540b74540b6c540b74540b6c540b6c540b6c540b74540b6c540b74540b6c -540b6c540b74540b6c540b6c55146c4c086c4c086c540b6c540b745c15744c086c55146c55146c -4c086c540b7455146c540b6c540b6c540b6c541574540b6c040404 -0404045c147c641a7c641a7c5c15746414745c0c735c0c735c15745c0c735c0c73540b745c0c73 -5c0c735c046c5c046c5c0c73641474540b6c5c046c5c0474540b6c5c046c540b6c5c0c73540b74 -5c0474540b6c5c0c735c1574540b6c5c1574540b6c5c15745c0c735c15745c0c73540b6c540b6c -5c147c540b6c540b6c540b6c5415745c15745c0c735c0c73500464540b6c540b6c5c0c73540b6c -541574540b6c540b6c540b6c540b6c5c1574540b6c500464540b6c540b6c540b74540b6c540b6c -540b74540b6c540b6c540b6c540b6c540b6c55146c4c086c540b6c540b74540b6c540b6c540b74 -541574540b6c4c146c5415745415744c086c540b6c540b6c540b74541574540b6c4c0b74440458 -4c086c4c086c5004644c086c54157455146c540b74540b74040404 -0404045c0c73641474641a7c5c2479641a7c5c15745c0c735c0c73885b87b986805c046c5c0c73 -5c0c735c04747c4b82c8b7a8e9b899872164500464540b6c5c046c540b6c5c0c735c046c540b6c -540b6c5c15745c0c73540b6c5c0c735c0c73540b6c540b6c540b74540b6c540b6c7c4b82a37483 -6817695c0c735004645c157494788fcac4b7ca83775c0460540b6c5c15745c1574540b6c55146c -5c15745c1e6c540b6c540b6c540b7455146c540b6c500464540b74540b6c540b6c540b6c500464 -5c0c73540b6c540b6c540b74540b6c540b6c540b746b3779874d7a540b6c540b6c540b74540b74 -540b6c540b6c540b6c540b6c540b6c4c086c54157455146c55146c540b6c55146c7c4b8294788f -a48899a48899a37483885b87641c7454157455146c541574040404 -0404045c0c7c5c147c641474641a7c6414745c147c5c0c735c1574c7b8b7fad9a581205c540b74 -5c0c735c0c73540b74c19ba5fad9a5872164540b745c0474540b6c5c0474540b6c5c0c73540b6c -5c0c735c0c735c0c735c157455146c540b6c540b6c5c0c735c0c73540b6c4c086ca69798f7d8b8 -81205c6b3779885b876817696b3779faecc9c78c825c0460540b6c5c1574641c74540b6c55146c -5c157455146c540b6c540b6c5c0c735c1574540b6c540b74540b74540b6c5c0c73540b74540b74 -540b6c540b6c540b6c540b6c5c0c73540b6c55146cc7b8b7e9b8996f175c540b744c086c5c1574 -5c0c7355146c55146c55146c55146c55146c5c1574541574540b6c541c6cb8a8a7e7c7a594788f -773c7c7c4b8294788fe8dab9ca83774c146c54157455146c040404 -040404641474641a7c641474641a7c6414745c0c735c0c73773c7ce9b899f9ebb6ca83775c046c -540b745c0c734c086ca48899fad9a581205c540b745c04745004644c086c540b745c0c735c0c73 -5c04745c046c500464540b6c5c0c735c0c73500464540b6c540b74500464540b6c641c746a2976 -4c086cb8a8a7f8d094660b65541574e8dab9ca8377500464540b74500464540b745c0c73540b6c -540b74540b74540b74500464540b6c541574500464500464500464540b74540b745c0c73500464 -540b74500464540b6c540b7455146c540b6c540b6c6b3779773c7c540b6c540b6c540b74500464 -540b74500464540b6c541574540b744c146c5c1574541c6c4c1575c7b8b7f7c7a87926664c086c -540b74540b7444045894788fab5f70540b74541574541574040404 -0404046414745c0c7c641a7c641a7c6414745c147c5c0c73b89898ab5f70c8b7a8f8d0946f175c -5c147c5c0c73500464a48899fad9a5781a66540c7c7c4b8294788fa37483773372641c74641474 -641a7c885b8794788f885b87681769641c74773c7c773c7c6a2976885b877733726b3779874d7a -5c1464b8a8a7f7be9a69256b641c74e8dab9ca83776a297694788f874d7a681769540b745c1c7c -6b37797733726b377994788f773c7c5c0c64672784885b87874d7a540b6c540b74540b746a2976 -885b87885b8779266655146c540b6c5415745415745c15746a2976540b6c5c157464257c6a2976 -5c1574885b87773c7c55146c540b74540b6c55146c4c086c867389faecc9ab5f704c0b7455146c -55146c55146c540b745c2479641c7455146c5c15745c2479040404 -0404045c0c735c147c640c795c147c5c0c7c5c0c73773c7cd7a899781a66885b87f9ebb6ab5f70 -5c046c5c0c73540b74a48899fad9a5792666b89898c78c82773c7cc8a9a7f9ebb6c9a799b98680 -d9b899ab5f70773c7cc8b7a8e9b899ae7b74d9d5b8f7be9ad7a899faecc9c78c82c8b7a8fad9a5 -ab5f70d9d5b8f7d8b8c9a79992655fd8c7b8e6aa9dc78c82c8a9a7faecc9c89887681769885b87 -e8dab9e9b899c89887c8b7a8f9ebb6b98680b7898fc8b7a8f9ebb6c78c825c0c64885b87d7a899 -885b87a48899e9b899792666540b74540b74885b87d9d5b8e9b8996f175c867389e8dab9d9b899 -b99886c8b7a8f9ebb6d6998669256b5c15745415744c1575b8a8a7f9ebb68a2f624c157555146c -54157455146c55146c5415745c157454157455146c5c1574040404 -0404045c0c7c6414745c147c640c795c147c540b74a48899ca8377640c79641c74d9d5b8e6aa87 -660b655c0c7c500464a48899fad9a5ab5f70f9ebb68a2f62540b74773c7cfaecc9ab5f70b9b6a8 -e6aa875c0460540b7464257cfaecc9ca8377b89898f9ebb68f416b7c4b82792666a48899fad9a5 -8a2f62b9b6a8f7be9a681769641a7cd9d5b8e8bb88781a664c1575a48899f9ebb68a2f624c086c -c8b7a8fad9a57926664c086cb8a8a7fad9a58a2f624c086cac99a7fad9a58a2f62c7b8b7d88e7d -500464500464ab5f706817695415745c15744c146cb9b6a8f7be9a6f175c541574d8c7b8f8d094 -7926664c157594788ffaecc98f416b5415745c157455146cc8b7a8f9ebb68f416b541574541c6c -55146c5415745c15745415745c1574541574541574541574040404 -0404046414745c0c7c6414746414745c0c7c672784e7c7a5c8a886a69798b89898dad4a8f9ebb6 -99275e5c0c73540b74ac99a7fad9a5ab5f70f9ebb6ab5f70540b74885b87f8d0948f416be9d8c8 -ca83775c046c5c15745c1574d7c8a8e6aa87b89898f8d0946f175c540b74540b74a48899fad9a5 -81205cb9b6a8f7bb86660b655c1574e8dab9d699865c0c64540b6c94788ff9ebb68a2f62541574 -c8b7a8efad935c0c644c086ca48899f7be9a68176950046494788ff9ebb68a2f62a48899f9ebb6 -d9b899a4889977337255146c540b6c540b6c541574b8a8a7f7be9a6f175c55146cc7b8b7efad93 -660b654c0b747c4b82f9ebb6ab5f704c146c54157455146cc8a9a7f9ebb68f416b541c7c5c1574 -55146c541c6c54157455146c55146c5c1574541574540b74040404 -040404640c796414745c147c641a7c5c0c7ca48899d699866c1c7c6a29766c1c7c6b3779f9ebb6 -e59b87540b6c4c086cac99a7f8d094781a66a48899e9b899a3748394788f8f416b641c74f9ebb6 -e09e75660b65641474540b74c8b7a8e6aa87b89898f7be9a781a665c0c73500464a48899fad9a5 -872164c8b7a8efad935c04605c1e6cd9d5b8d69986660b65540b7494788ff9ebb68a2f62541574 -cac4a7e9b8995c1464500464a48899f7be9a6817694c0b7494788ff9ebb68a2f625c1574885b87 -a48899cac4b7f9ebb6ab5f70540b6c540b74540b6cb8a8a7f7be9a6817694c0b74c7b8b7efad93 -5c0c644c086c7c4b82faecc9ab5f704c086c5c157455146c867389faecc9d88e7d5c1e6c541574 -5415745c15745c15745c157454157454157455146c541574040404 -0404045c0c736414745c147c5c147c672784e7c7a599275e5c047c5c0c7c5c15744c0b74a69798 -f9ebb68a2f624c086ca48899fad9a56f175ca48899c898877926666414745c147c5c0c73b9b6a8 -fad9a581205c4c0b745c1574e8dab9ab5f70a48899f8d0946817695c147c540b7494788ffad9a5 -781a66b9b6a8efad93681769541c6ce8dab9d88e7d5c0460540b7494788ff9ebb699275e4c086c -c8b7a8efad9364105c4c086ca48899f7bb86660b654c086c94788ff9ebb681205ca37483781a66 -4c086c541c6ce8dab9ab5f70500464541574500464ac99a7f7be9a6f175c4c0b74cac4b7e9b899 -5c0460540b747c4b82f9ebb6ab5f705415745c1e6c55146c541574b9b6a8faecc9ae7b74540b6c -4c086c540b6c4c086c541c6c641c745c15745415745c1574040404 -040404640c79641474640c796a2976c19ba5e9d9a6ae7b747926665c0c7c5c0c73773c7cc8a9a7 -f9ebb6c89887874d7ad8b7a8fad9a5ab5f70c8b7a8f9ebb6d7c8a8d7c8a8dad4a8c89997874d7a -d9d5b8d9b899874d7aa69798c78c82773372cac4a7fad9a5ab5f706414746a2976b9b6a8f9ebb6 -ab5f70b7898ff9ebb6d7a899a37483e8dab9e9b8998f416b50046494788ff9ebb6ab5f707c4b82 -d9d5b8e7c7a58f416b6b3779b8a8a7fad9a58f416b50046494788ff9ebb6ab5f70c5b699c78c82 -773c7c94788fd7a899792666540b6c540b6c6b3779cac4a7fad9a5874d7a773c7cd9d5b8e7c7a5 -773372540b6c885b87faecc9ca83776a297654157455146c541574541c6cb89898faecc9d9b899 -a8878694788f94788fb8a8a7a3748355146c5415745c1574040404 -0404045c0c7c5c0c7c5c0c7c6c1c7c6b37796a2976773c7c6c14745c0c735c0c7c64257c773c7c -6a29766b37797733726b377964257c885b87c9a799a374837c4b827c4b82a48899f9ebb6ab5f70 -641c74885b87885b87773c7c540b6c773c7c773c7c6b37797c4b82641c746a2976773c7c773c7c -7c4b82681769885b877c4b82773c7c773c7c7c4b826b37795c0c736a2976885b877c4b82773c7c -7c4b827c4b827733727733727c4b82885b87874d7a5c0c7364257c885b87885b87874d7a94788f -94788f885b87681769540b74540b6c540b6c773c7c885b87885b87874d7a874d7a885b87885b87 -874d7a55146c5c2479885b87885b8769256b55146c540b6c5415744c086c4c146c6b377994788f -a69798a4889994788f874d7a5c15745c1574541574541574040404 -0404045c0c7c640c795c147c5c047c5c0474640c795c0c7c5c0c7c5c0c735c0c735c0c73540c7c -5c0c735c04745c04745c0474500464ac99a7e6aa875c0460540b74540b74540b6cf9ebb6ab5f70 -5004645004645c0c735c046c540b6c5c0c73500464540b74540b745c147c5c0c73540b74540b74 -540b74500464540b74540b745c0c73540b6c4c086c540b745c0c735c0474540b74540b6c540b6c -540b6c540b6c4c086c540b745004645004644c086c5c0c735004644c086c4c086c4c0b744c086c -4c0b74500464540b6c540b6c540b6c540b6c4c086c540b744c086c4c0b744c0b744c086c4c086c -4c086c540b74540b744c086c440458540b74541574540b74540b6c540b6c541574541574540b74 -4c0b74540b6c4c086c540b7455146c541574541574541574040404 -0404045c0c735c0c7c6414745c0c735c0c735c0c7c5c0c735c15745c0c735c0c735c0c735c0c73 -5c15745c0c735c0c735c0c73500464b89898f8d0946f175c50046450046494788fe9b89981205c -540b745c0c735c0c735c0c735c0c735c15745c0474540b6c6414745c0c73540b6c540b6c540b6c -5c0c73540b745004645c0c73540b6c5c0c735004645c0c73540b6c540b745c0c735c1574540b6c -540b74540b6c540b74540b6c5c0c735c0c73500464540b6c540b74540b6c5004645c0c735c0c73 -500464540b74540b74540b6c540b6c4c086c540b6c5c0c73540b74500464500464500464540b74 -500464540b6c500464500464540b74540b74540b6c540b6c540b6c540b6c540b74540b74541574 -541574540b745c1574540b74541574540b6c5c15745c1574040404 -0404046414745c147c6414746414745c0c7c640c795c0c735c0c73540b6c540b6c5c0c735c0c73 -5c0c735c0c73540b6c5c0c735c04745c1c7cb89898d7aaa794788fa48899b7898f773372540b74 -5c0c735c0c735c0c735c0c735c15745c1574540b6c5c0c73540b6c5c0c73540b74540b6c5c046c -5004645c0c735004645c0c73540b6c5c15745c1574540b74540b6c540b6c540b6c5c15745c1574 -5c1574540b74540b6c540b6c5c1574540b74540b74500464540b6c5c15745c0c73540b6c540b6c -540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c540b6c540b74540b6c540b74540b6c -540b6c4c086c540b6c540b74500464540b6c540b6c540b6c4c086c540b6c540b6c540b6c540b6c -54157454157454157455146c541574541574540b74541574040404 -0404046414745c0c7c5c0c7c6414745c0c735c0c735c0c736414745c0c735c0c735c0c735c0c73 -540b745c0c735c0c73540b745c0c735c0c73540b6c6c1c7c6b37796a29765c04745004645c0c73 -5c0c735c0c735c0c735c15745c15745c0c735004645c0c735c1574540b6c5c0c73540b6c5c0c73 -540b745c0c735c0c73540b745c1e6c5c1574540b74540b6c5c1574540b745c0c735c1574540b6c -5c15745c15745c15745c0c73540b74540b6c540b6c540b6c500464540b74540b6c540b745c1574 -540b74540b6c540b6c540b74540b6c540b6c540b74541574540b6c540b6c540b6c540b6c540b6c -540b74540b6c4c086c540b6c540b6c540b744c086c541574540b74540b6c4c086c5c157455146c -54157455146c5c15745c15745c1c7c54157455146c5c1574040404 -0404045c0c7c5c0c7c6414745c0c7c641474641a7c6414745c0c735c0c735c15745c0c73540b6c -5c0c735c0c735c0c73540b6c540b6c5c0c735c0c73540b6c5c046c5c0c73540b6c5c04745c046c -5c0c73540b6c540b745c15745c0c73540b6c5c0c735c0c735c0c735c0c73540b745c0c73540b6c -540b6c540b6c5c1574540b6c5415745c15745c0c735004645c0c735c0c735c15745c15745c0c73 -540b6c540b6c540b74540b6c540b6c5c0c73540b74540b6c540b6c540b6c5c15745c15745c1574 -540b6c540b6c540b6c540b74540b6c540b745c1574540b74540b6c540b744c086c540b6c540b6c -540b6c540b6c540b6c540b6c540b6c54157454157455146c540b6c540b74540b6c540b7455146c -55146c5415745415745c24795c1574541574541574541574040404 -0404045c0c735c0c735c147c640c795c147c5c0c736414746414746414745c0c735c0c735c0c73 -5c0c735c0c73540b745c0c735c0c735c0c735c0c735c0c735c0c735c0c73540b6c540b6c540b6c -5c0c735c0c736414745c0c73540b745c0c735c0c73540b6c5c0c73541574540b6c540b6c5c046c -540b6c540b6c5c0c735c0c735c0c735c15745415745c15745c1574540b74540b6c5c0c73540b74 -540b6c540b6c540b6c540b6c5c0c73540b74540b6c540b6c5c0c73540b6c541574540b6c5c1574 -5c1574540b6c540b745c1574540b74540b6c540b6c540b6c540b74540b6c540b74540b74540b74 -540b6c540b74540b6c540b6c540b74540b6c540b6c541574540b6c540b6c540b74541574540b74 -540b7455146c5c2479541c6c5415745415745c15745c1574040404 -0404045c0c735c15745c0c735c0c735c0c735c0c736414745c147c5c147c5c0c735c0c735c147c -5c0c735c0c735c0c735c0c73540b6c6414745c0c73540b6c540b6c5c0c73640c79640c79641474 -5c0c735c0c735c15745c157455146c5c15745c15745c0c735c15745c0c73540b74540b6c540b6c -5c046c540b74540b6c540b6c540b6c540b6c5415745c15745c15745c15745c1c7c5c1574540b6c -540b74540b6c540b6c540b7455146c540b74540b6c540b6c5c15745c0c735c1574540b6c540b6c -541574540b6c540b6c5c0c73540b6c540b6c4c086c540b6c5c1574540b6c5415745c1574540b6c -540b6c540b6c540b744c086c540b6c540b6c4c146c541574540b74540b6c55146c541574540b6c -5415745415745415745c15745c1574541574541574541c6c040404 -0404046414746414746414745c0c7c5c0c735c0c735c0c7c5c0c735c0c735c0c73540b745c0c73 -5c0c73540b6c640c79540b6c5c0c735c0c735c0c735c0c735c0c735c0c73540b6c540b745c0c73 -5c1574540b6c540b74540b6c5415745c15745c0c73540b6c540b74540b6c540b6c5004645c0c73 -540b6c5c0c735c0c73540b74540b6c5c1574540b6c5c15745c15745c15745c157455146c5c1574 -540b6c540b6c5c15745c0c735c0c73540b6c540b6c540b6c5415745c15745c1c7c5c15745c1e6c -5c1574541574500464540b6c4c086c540b6c540b6c540b6c540b6c540b6c500464540b745c1574 -540b6c540b745c1574540b74540b6c540b7455146c55146c540b6c540b74541574541574540b6c -540b6c5c24795c24795c24795c2479541c6c5415745c1c7c040404 -0404046414745c147c6414745c147c5c0c735c0c735c0c735c0474540b745c0c735c0c735c0c73 -5c0c735c0c73660b65540b6c5c0c735c0c73540b6c5c0c73540b6c540b6c5c0c735c0c73540b6c -540b745c0c735c0c73540b6c540b745c15745c15745c1574540b6c540b6c540b6c5c0c73500464 -5c0c73540b6c5c0c73500464540b6c5c15745c1574540b6c540b6c5c1574540b6c5c15745c1574 -540b6c5c0c73540b745c1574540b6c5c0c73540b6c5c0c73540b745c0c735c15745c15745c1574 -5c15745c15745c0c73540b6c540b6c540b6c540b74540b74540b6c540b74540b6c540b6c540b6c -540b74540b6c540b6c540b6c540b6c540b6c541574541574540b6c540b6c540b745415744c086c -55146c5c15745415745c15745c24795c1574541574541c6c040404 -0404045c0c736414745c0c7c5c0c7c5c0c735c0c7c5c0c73540b745c0c735c04745c04745c0c73 -5c046c5c0c735c0c735c0c735c04745c0c735c046c540b6c5c04745c0474540b745c046c540b74 -540b6c540b6c5c0c735c0c7350046454047c5c0c73540b745c046c540b6c5c046c540b6c5c0c73 -540b745c15745c0c73540b745004645c0c73540b6c5004645c0c735c0c735c15745c15745c1574 -540b6c5c0c73500464540b745c0c73540b6c540b745c0c735c15745c157455146c5c0c73541574 -5c1574540b6c5415745c0c73540b6c540b6c540b74540b6c540b74500464540b74540b74540b6c -540b6c540b6c540b74540b6c540b6c4c086c55146c55146c540b7455146c540b6c55146c540b6c -55146c54157455146c54157454157454157455146c541574040404 -0404045c0c735c147c5c0c7c6414745c0c735c147c5c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73540b6c5c0c735c04745c0c735c0c73540b6c5c0c73540b74641c746b37796b3779792666 -540b6c5c0c735c0c735c0c736b3779773c7c6414745c0c73540b745c0c73540b6c540b6c540b74 -540b745c1574500464540b74540b6c5004646a29767c4b8269256b5c0c735c157455146c540b6c -500464540b746b3779773372540b745c0c73540b6c5c15745c1574540b6c5415745c15745c1574 -540b6c540b6c540b6c54157455146c55146c540b74540b745415746b377955146c540b6c540b74 -540b6c540b6c540b6c540b74540b6c540b6c54157455146c4c1575540b6c4c086c4c086c540b74 -55146c54157455146c540b6c55146c540b7455146c540b6c040404 -0404046414746414746414745c0c735c0c735c0c7c6414745c0c735c0c735c0c735c0474640c79 -5c0c73640c795c046c5c0c735c0c735c0c735c0c73540b6c540b747c4b82e7c7a5874d7ab8a8a7 -a37483500464540b74540b7494788fd69986500464540b74540b6c540b74500464540b74540b74 -540b74540b74885b876817694c0b74885b87b7898f7c4b82b7898f681769540b74540b745c0c73 -5c04744c086cb89898a374835004644c086c540b745c0474540b74500464500464540b74540b6c -540b6c540b74540b6c540b7494788f8f416b4c086c4c086c6a2976d8b7a88a2f62540b74541574 -540b6c540b74540b6c540b6c540b74540b6c541574541574540b6c55146c54157455146c5c1574 -5415745415745c1574541574540b7455146c540b74541574040404 -0404045c147c6414745c147c5c0c736414745c15745c0c735c147c5c15745c0c735c0c735c0c73 -640c795c0c735c0c735c0c735c0c735c0c735c0c735c0c7c5004646b3779e9b89964105c94788f -d88e7d640c797c4b82874d7a7c4b82d69986885b87874d7a540b6c773c7c885b876a2976773c7c -874d7a874d7ad8b7a88f416b4c0b74b89898ab5f70540b6c69256b55146c773c7c874d7a681769 -5c24797c4b82c89997ab5f705c1e6c7c4b827733726817696a2976885b876b3779773c7c69256b -5c24796817696b3779773c7c773c7c69256b5c1574885b87773c7cc9a7997733726b37796a2976 -540b6c55146c540b7455146c540b6c540b74541574541574540b74540b7455146c540b74541574 -5c1574541574541574541574541574541574541574541574040404 -0404045c15745c147c6414746414745c147c5c0c735c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73540b6c540b6c5c0c735c0c735c15745c15745c0c735c04746b3779d8b7a8b89898b7898f -6a2976b7898f773372a48899d7a899d7a899885b87c8a9a7c89887ae7b74a37483d7a899c5b699 -c89887a37483d8b7a8ab5f70540b747c4b82c8b7a8c8a9a7a37483a37483a37483a48899c89887 -b98680773c7cc8a9a7b98680b7898f874d7ad7c8a8b7898fb99886885b87d9b899d9b8998f416b -a48899ab5f70885b87b98680b5a898a37483a37483885b87a37483c89997a37483a374836b3779 -55146c541574540b6c540b6c540b6c540b6c540b6c55146c540b7455146c540b6c55146c540b6c -5415745c1574540b6c5c157455146c541574541574541574040404 -0404045c0c735c0c735c147c6414745c0c7c640c795c0c735c0c735c0c735c0c73640c795c0474 -5c04745c0c735c0c735c0c735c0c736414745c15746414745c04746b3779e6aa9da37483d7a899 -773372e6b8ab64105c885b87f7c7a8d88e7d44045894788ff9ebb6b7898f7c4b82874d7ac89997 -8f416b4c086cc9a799792666540b7468176955146c6b3779d8b7a8fad9a5a374837c4b82b8a8a7 -d6998644045894788fb7898fc89997885b87a37483a37483d7a8997c4b82936f72a48899c78c82 -b7898fd7a899a3748369256ba69798d7a899a37483500464541574c9a799e7c7a5874d7a4c086c -540b7455146c541574540b6c540b74540b6c540b74541574540b6c541574540b6c4c086c55146c -540b6c541574540b6c540b6c55146c54157455146c55146c040404 -0404045c0c735c0c735c0c735c0c7c5c0c735c0c73640c795c0c735c15745c0c735c0c735c0c73 -5c0c7c5c0c735c0c735c0c735c0c735c0c735c0c73540b6c5c04747c4b82e7c7a579266694788f -c9a799d9b899ab5f7094788fb98680d9b899874d7aa37483a37483c89997874d7a773c7cc19ba5 -ab5f705c0c73c8a9a7a37483540b74a37483a374837c4b82a88786b7898fc89887773c7c874d7a -d7aaa7936f72c19ba5b98680a69798c8a886885b87885b87d9b899874d7a7733726b3779e7c7a5 -792666ac99a7ca8377540b6cb8a8a7c89887c9a799874d7a773c7cc5b699ae7b74c9a799ab5f70 -540b74540b6c541574541574541574540b6c540b6c540b744c146c540b6c54157455146c4c086c -55146c5415744c086c55146c540b74541574541574541574040404 -0404045c0c735c0c735c0c73641474640c79640c795c0c7c5c0c736414745c0c735c0c735c0c7c -5c0474540b6c540b745c0c73540b6c5c0c735c0c735c0c735c0c736c1c7c773c7c6a29765c0c73 -773c7c6a29767c4b82773372641474773c7c874d7a640c79540b74773c7c7c4b826a2976773c7c -6b3779500464773c7c7c4b825c157464257c7c4b827c4b82641474540b747c4b827c4b82641c74 -6b3779885b87773c7c885b87c89887885b87b89898c78c826b3779885b876b3779541574773372 -540b6c6b37796a29765c15747c4b82773c7c773c7c885b87773c7c7c4b826a29766b37797c4b82 -540b6c540b6c540b6c540b6c540b6c540b6c540b744c086c540b6c4c086c540b6c540b6c540b6c -5415745c1574541574540b6c541574541574540b744c146c040404 -0404045c0c7c5c0c735c0c736414745c0c7c640c796414745c0c73540b745c0c735c04745c0474 -5c0c735c04745c046c5c04745c0c735c04745c0c735c04745004645c0c735004645c04745c0474 -500464540b74540b745c04745c0c73540b744c086c5004645c0c735004645004645c0c73540b74 -5004645c0c7c500464540b745c15745c0474500464540b745c0c735c0c73540b74540b6c540b74 -540b7450046455146c6b3779c8999768176994788f874d7a500464540b74500464540b6c4c086c -5c157455146c540b6c540b6c4c086c540b6c540b6c4c086c540b6c4c0b744c0b745415744c086c -4c0b74540b6c4c086c540b6c4c086c540b6c540b6c4c086c540b6c540b6c540b744c086c55146c -541574541574540b6c540b6c54157454157455146c541574040404 -0404045c147c5c0c735c0c7c5c04745c0c735c0c735c0c7c5c0c735c0c735c0c735c0c7c5c0474 -5c04745c0c735c0c735c046c5c04745c0c735c0474540b745c0c735c0c735c04745c04745c0474 -5c04745c046c5c04745c046c540b74540b6c540b6c5c1574540b745c0c735c147c5c0c735c046c -540b745004645c0c735415745c0c73500464500464540b6c540b6c540b6c540b74541574540b6c -540b6c5415745c157455146c6b37797c4b826b37795c04745c0c73540b6c540b74540b6c5c1574 -540b6c540b6c540b6c540b74540b6c540b7455146c55146c500464540b6c540b6c55146c540b6c -500464540b74540b6c540b6c540b6c540b6c4c086c540b6c4c086c540b6c4c086c5c1574541574 -540b6c541574540b6c4c146c55146c540b6c5415744c146c040404 -0404045c0c735c147c640c795c0c735c0c73640c795c0c735c0c735c0c735c0c735c04745c0c7c -5c0c735c0c735c0c735c0c735c0c735c04745c0c735c046c5c0c735c04745c0c735c0c735c0474 -5c0474540b74540b745c04745c0c735c0474540b745c0c735c1574540b6c5c15745c15745c0c73 -5004645c0c73540b745c15745c0c73540b74540b74540b6c540b6c540b6c5c0c73540b6c5c1574 -540b6c5004645c1574540b74540b74500464540b745415745c15745c1574540b6c5c1574541574 -540b6c540b6c540b6c540b74540b6c540b74540b6c5c0c73540b6c4c086c55146c540b74500464 -540b6c4c086c540b6c5004644c086c540b6c500464540b6c540b74540b6c540b6c540b6c540b74 -540b6c541574540b6c540b745415744c086c55146c541574040404 -0404045c0c735c147c6414745c0c7c5c0c735c0c73640c795c0c7c5c0c7c5c0c7c5c04745c0c73 -5c0c735c0c735c0c73540b745c0c735c0c735c04745c0c735c04745c0c735c0c735c04745c0474 -5c0474540b745c0474540b745c04745c04745c0c735c0c73540b745c0c73540b6c5c0c73540b6c -5c0c735c0c735c0c735c0c73540b6c540b6c5c04745c15745c1574540b6c540b6c5c0c735c0c73 -5c15745c1574540b6c540b6c540b6c5c0c73540b6c540b6c5c15745c15745c15745c1574540b6c -540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b7454157455146c540b74 -500464540b6c540b6c4c086c540b6c540b6c540b74540b74541574540b6c540b74540b6c540b6c -540b6c540b6c4c086c541574541574541574541574541574040404 -0404045c0c735c0c735c147c5c0c7c5c0c735c0c735c0c735c0c735c15745c0c735c0c735c0c73 -5c0c735c0c73540b745c0c73540b745c04745c0c735c0c735c04745c0c735c0c735c0474540b74 -5c04745c04745c04745c04745c0474540b74540b745c0c735c1574540b6c540b74540b6c5c046c -5004645c04745c0c73540b74500464540b74540b6c5c0c7355146c540b745c0c73540b6c540b74 -5c15745c24795c0c73540b6c540b6c540b6c540b6c540b74540b6c5c15745c15745c1574540b74 -5c15745c1574540b6c540b74540b6c540b6c4c0b74540b74540b6c540b74641c74541574540b6c -540b74540b6c4c086c540b6c4c086c540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c -540b6c4c086c55146c540b6c541574540b6c55146c55146c040404 -0404045c0c735c0c7c5c0c735c0c735c0c735c0c73540b745c0c735c0c735c0c735c0c735c0c73 -5c0c735c0c735c0c735c04745c0474540b745c04745c0c735c0c735c0c735c0c735c04745c0474 -5c0474540b745c046c540b74540b745c04745c0474540b745c1574540b745c0c735c0c73540b74 -540b74540b74540b745c0474540b745004645c0c735c1574540b74540b6c540b74540b6c540b6c -5c0c735c15745415745c0c73540b6c540b6c540b6c5c0c735c0c735c15745c1574541574540b74 -540b6c540b6c540b74540b6c540b74540b6c540b6c540b6c540b6c540b6c541574540b6c540b6c -540b6c540b6c540b6c4c086c500464540b6c540b74540b6c540b74540b6c4c086c540b6c540b6c -540b74540b74540b7454157455146c541574540b6c541574040404 -0404045c147c6414745c0c7c5c0c735c0c735c0c736414745c0c735c0c735c0c735c0c73540b74 -5c0c73640c795c0c735c0c735c0c735c046c5c0c735c046c5c04745c0c735c04745c0c735c0c73 -5c04745c046c5c04745c04745c04745c0474540b745c0c735c0c735c0c73540b745c0c73540b74 -5c0474500464540b745c046c540b745c0c73540b745c15745c0c73540b6c540b6c5c0c73540b6c -540b6c5c1574540b74540b74540b74540b6c5c0c73540b6c540b6c5c147c5c1574540b6c540b6c -540b6c540b74540b6c540b6c540b6c540b74500464540b6c540b6c540b74540b6c55146c540b6c -540b6c540b74540b6c540b74540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74 -54157455146c4c086c541574540b6c541574540b6c541574040404 -0404045c1574641a7c641a7c5c0c735c0c735c0c735c0c7c5c0c735c15745c0c73540b745c0c73 -5c0c735c0c735c0c735c0c735c0c735c0c735c046c540b745c04745c0c735c0c735c0474540b6c -5c0c735c0c735c0c735c0474540b745c0474540b74540b6c540b6c5c04745c0474500464540b74 -5c0c735c0c735c0474540b745c0474540b6c540b6c540b74540b6c540b6c540b6c540b6c540b74 -5c0c73541574540b6c5c0c73540b6c540b6c5415745c1574540b6c540b6c5c1574541574540b6c -540b6c540b74540b74540b6c540b6c5c1574540b74540b74540b6c540b6c4c086c5c15744c146c -5c1574541574540b6c540b74540b6c540b6c4c086c540b6c4c086c540b6c4c086c540b6c540b6c -540b6c540b6c55146c540b6c540b7455146c541574541574040404 -040404641a7c641a7c641a7c64257c6414745c147c5c15745c0c735c0c735c0c735c0c735c0c73 -5c0c735c04745c0c735c0c735c0c735c0c735c04745c04745c0c735c04745c047c5c0c735c0c73 -5c0c735415745c1574540b74540b74540b74540b6c5c0c735c046c540b6c540b6c5c0c735c0c73 -5c15745c147c540b745c0474540b6c540b745c04745c046c5c0c73540b6c540b745004645c0c73 -540b6c540b6c5c0c73540b6c5c0c73540b74540b6c540b6c540b74540b6c5c0c73540b6c540b74 -540b6c540b6c5c1574540b6c540b6c540b6c540b6c540b6c540b74540b6c500464541574540b74 -55146c540b74540b6c540b6c540b6c540b6c540b6c4c086c540b6c54157455146c55146c4c086c -540b6c4c1575540b6c541574541574541574541574541574040404 -0404045c15745c147c641474641474640c795c0c735c15745c0c735c15745c0c735c0c735c0c73 -5c0c735c0c735c04745c0c735c0c7c5c0c735c0c735c0c735c04745c04745c0c735c0c735c0c73 -5c0c735c046c5c0c735c046c5c04745c0c735c0c73540b6c5c0c735c0c735c0c735c15745c1574 -5c0c735c0c735c04745004645c0474540b74540b6c540b745c0c73540b6c540b6c5c0c73540b6c -5c0c73540b745c0c735c1574540b6c5c15745c0c73540b6c5c15745c1574541574540b6c5c1574 -541574540b6c540b74540b74540b74540b6c540b6c5c15745c1574540b74540b6c540b7455146c -540b6c540b6c540b6c540b74540b6c540b6c4c086c540b6c5c15744c086c5415744c146c55146c -540b6c540b6c4c086c540b7454157454157455146c5c1574040404 -0404046414746414745c147c5c147c5c147c5c147c6414745c15745c0c735c0c735c0c735c0c73 -5c0c735c046c5c0c735c0c73540b745c0c735c04745c04745c0c735c0474540b745c04745c0c73 -5c0c735c0c735c0c73540b745c0c735c15745c0c735c0c73540b74540b6c540b745c0c73541574 -540b6c5c0c73540b745c0c73540b745c04745c0c735c0c73540b74540b74500464540b6c5c0c73 -5c0c73540b6c540b74540b6c5c0c735c1574540b74540b745c0c73540b6c5c1574540b74540b6c -540b6c540b7455146c540b6c541574540b74540b745c15745c1574540b6c540b74540b74540b6c -541574541574540b74540b6c540b74540b6c540b6c540b6c540b7455146c4c086c5415745c1574 -4c15754c0b745415744c086c4c146c55146c540b7455146c040404 -040404641a7c5c0c7c5c147c5c15746414745c15745c147c5c0c735c0c735c0c735c15745c0c73 -540b6c540b6c540b6c5c0c735c0474540b745c04745c0474540b745c0c735c0474540b745c0c7c -5c047c5c0c73540b745c0c735c0c735c0c735c15745c157455146c5c0c735c1574540b6c5c0c73 -5c1574540b745c0474540b745c0c73540b6c5c0c73540b6c5c0c73540b6c5c0c735c15745c1574 -540b6c540b6c540b6c540b745c0c73540b74540b74540b6c540b74540b6c5c15745c1574540b74 -540b6c5c1574541574540b6c540b6c540b6c5c157455146c540b74540b6c5c15745c0c73540b74 -540b6c540b6c540b745c1574540b74540b6c540b6c540b74540b6c540b6c5415745c157455146c -4c086c540b6c540b74540b6c540b6c540b7455146c541574040404 -0404046414746414745c1574641a7c641474641a7c5c147c540b6c5c0c735c15745c0c735c0c73 -6414745c0c735c04745c0c73540b6c5c04745c0474540b745c04745c046c5c0c735c04745c0474 -5c0c735c0c735c0c73540b745c0c735c147c5c0c735c0c73540b745c0c735c0c735c0c735c0c73 -5c0c735c0c73540b745c046c540b74540b74540b6c5c0c735c0c73540b6c5c1c7c5c147c5c1574 -5415745c0c735c0c73540b6c540b6c540b6c540b74540b74540b6c5c0c735c0c735c0c73541574 -5c15745c15745c15745c1574540b745c15745c1574540b6c540b6c540b74541574540b6c540b74 -55146c540b74540b6c5c1574540b74540b6c4c086c540b6c540b6c540b6c55146c541574541574 -5c157454157455146c5415745415745415745415744c1575040404 -0404046414745c0c7c641a7c64257c6727846414745c0c735c0c735c147c5c0c735c0c735c0c73 -5c147c5c0c735c0c73540b745c0474540b745c0c73640c795c04745c04745c0c735c0c7c5c0474 -5c0c735c0c735c0c735c0c735c0c735c0c735c0c73540b745c0c735c0c73540b6c5c0c73540b74 -5c0c7c540b745c046c540b74540b6c540b6c5c0c735c15745c0c735415745c15745c15745c1c7c -5c15745c0c735c0c73540b74540b74540b74540b6c540b6c5c0c73540b74540b6c540b6c540b6c -5c1574541574540b7455146c5c15745c15745c1574540b74540b6c540b6c540b6c540b745c1574 -540b74540b6c540b745c1574540b74540b6c540b6c55146c540b74540b74540b6c54157455146c -5415745c157454157455146c54157454157454157455146c040404 -040404641a7c641a7c64257c64257c641a7c641a7c5c0c7c5c0c735c0c735c0c7c5c0c735c0c7c -5c15745c0c735c04745c0c735c046c640c79540b6c5c0c735c0c735c046c640c795c0c735c046c -540b745c0c735c0c735c0c73540b6c5c0c73540b745c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73500464540b745c0c735c15745c0c73540b6c540b745c0c7355146c5c15745c15745c1574 -5c1574540b745c15745c15745c0c735c0c73540b6c540b745c1574540b6c5c0c735c0c73541574 -5c15745c15745c1574540b74540b6c5c0c735415745c1574540b6c540b74540b6c540b6c540b6c -5c15745c1574540b6c540b74540b6c540b6c540b6c540b74540b74540b74540b6c540b6c5c1574 -5c157454157454157454157454157455146c541574541574040404 -04040464257c5c1c7c64257c641c74641a7c5c15745c15745c15745c0c735c0c735c0c735c0c73 -5c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c15745c0c73 -5c0c735c15745c1574540b6c540b6c5c0c735c0c73640c795c0c73540b6c5c0c735c0c735c1574 -5c15745c0c7c5c0c735c04745c15745c0c73540b745c15745c15745c0c73641c745c15745c1574 -55146c5c15745c15745c1574540b745c0c73540b746414745c1574540b6c5c15745c157455146c -5415745c15745c15745c1574540b6c5415745c15745c15745c1574540b6c540b6c5c1574540b74 -540b6c5c1574540b74540b6c540b6c540b74540b6c5c15745c1574540b74540b6c540b74541574 -54157455146c540b7455146c541574541574541574541574040404 -040404641a7c641a7c641a7c5c147c5c15745c147c6414745c0c7c54147c540c7c540c7c540c7c -5c0c7c540c7c540b74540b74540c7c540c7c540c7c540c7c54047c54047c540c7c540b74540b74 -54147c5c0c7c540c7c540c7c540c7c540c7c540b74540b74540c7c540c7c540b744c0b745c147c -540c7c540c7c540b74540b74540b74540b74540c7c54157454157454147c54147c5415745c1574 -5c1574541574540b744c0b7454147c540c7c540c7c54147c540b7454157454147c541c7c54147c -5c1c7c5415745415744c0b744c0b7454147c54147c540b744c0b74540b74540b74540b74540b74 -4c0b744c0b74540b74540b744c0b744c086c4c15754c0b744c0b744c15754c0b74540b744c1575 -541574540b6c55146c541574540b6c54157455146c541574040404 -040404641a7c641a7c6414746414746414745c147c5c147c681769b0254eb0254eb0254eb0254e -b0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254ea52357 -a52357b0254eb0254ea52357a52357a52357a52357a52357a52357a52357a52357a52357a52357 -a52357a52357a5235799275ea52357a52357a5235799275ea5235799275e99275e99275e99275e -99275e99275e99275e99275e99275e99275e8d1d5c99275e99275e8d1d5c99275e99275e99275e -99275e8d1d5c8d1d5c8d1d5c8d1d5c8721648d1d5c8721648d1d5c872164872164872164872164 -87216481205c872164872164781a66872164872164872164781a66781a66781a66781a66781a66 -5c1574541574540b74540b6c541574541574541574541574040404 -040404641a7c5c147c5c147c6414745c147c6414745c147c8d1d5ccd342a852415852415472415 -852415472415852415472415852415852415472415852415852415852415852415852415852415 -852415852415852415852415852415852415852415852415852415852415852415852415852415 -852415852415852415852415852415852415852415852415852415852415852415852415852415 -852415a82916852415a82916852415a82916852415a82916852415a82916b63024b63024852415 -a82916852415a82916a82916a82916a82916b63024a82916a82916a82916a82916b63024b63024 -a82916b63024a82916a82916b63024b63024b63024b63024b63024b63024b63024cd342adb3738 -81205c54147c541574541574541574540b6c5c157455146c040404 -040404641a7c641c745c147c5c147c641474641a7c54147c8d1d5ccd342a141c104d3d2c5d4c36 -5d4c366c545646423b5d4c36472f223d363051524b45535b30444339291f3d363030444345535b -30444339291f3d363045535b51524b51524b472f2251524b45535b51524b40474b4d3d2c4d3d2c -51524b51524b595c59675f464d3d2c5d4c3645535b40474b51524b4d3d2c51524b51524b51524b -675f4651524b51524b45535b595c5951524b46423b40474b40474b40474b51524b51524b40474b -40474b3d363039291f46423b30444340474b3d363039291f304443302f2a30444319271c302f2a -304443302f2a3d3630302f2a302f2a3044433d3630302f2a39291f39291f19271c141c10b63024 -8d1d5c4c0b7455146c540b74540b6c55146c540b6c55146c040404 -040404641a7c64257c64257c6414746414746414745c147c8d1d5ccd342a39291f4d3d2c8c6540 -a37483b99886d9b899666178815a556f596f9588a7d9d5b85f6b976c5456666178a8b1c9dad4a8 -7472977a687994788fc6c2cae8bb88a48899b98680c7abb5d8c7b8e8bb88d8b9b7e6aa87f7be9a -d8b9b7efad93f7c8c8f7c7a8f6c5b7d7aaa7d7aaa7f5eae7f9ebb6f8ecd8d8b9b7c8a9a7fcf8e7 -f7d8b8f8ecd8d8b7a8e6aa9df7c8c8f6c5b7f6c5b7c7b8b7e6b8abe6b8abe6aa87e6b8abe8dab9 -d8b9b7c19ba5c78c82c19ba5d8c7b8c8b7a894788f92655f82839bccd6c69897a86c5456815a55 -747297c6c2ca878aa77a687992655f7a6879c8a886a48899a37483675f465d4c364d3d2ca82916 -8d1d5c4c0b74540b74541574541574540b744c146c541574040404 -040404641a7c64257c641a7c641a7c5c147c5c147c5c147c8d1d5cb63024472f225d4c3619271c -565b68a37357c78b4f5c495a40474b4b4b6492655fa373575c495a45535b4b4b647c6267ae845d -6f596f565b687a6879be8b70d2966d7b7779595c59a48899d69986df9b5ac898877a6879c19ba5 -e6aa87e6aa87e6aa9d7b7779e6b8abe7c7a5f7be9ad8c7b8878283e8d8d8e9d8c8e9d8c8c6c2ca -878283e7c8c8e6b8abf7c7a8c8a9a7878283f6c5b7d9b899e6b8abc89997878283d7aaa7efad93 -d9a887a48899696f7aa48899d9a887be8b707a68795a6889776a86c898877c6267535f83565b77 -605170c8a886936f72565b774b4b646c5456d2966dae7b74666178302f2a8c654046423bb63024 -8d1d5c540b745c15745c0c73540b6c541574540b745c1c7c040404 -040404641474641a7c641a7c6414746414745c147c5c147ca52357a8291639291f92655f45535b -3d363092655fc78b4f92655f565b6840474b815a55ae845d40474b45535b4b5967675f46be8b70 -6051704b5967605170be8b70c8988778798859667894788fc78d61df9b5ab8989870706aa69798 -d88e7de8bb88d7aaa770706ad8b9b7e6aa9de7c7a5c8a9a77b7779e8d8d8d7a899e9d8c8d7c8c8 -7b7779e6b8abe6aa87e7c8c8b8a8a7878283e6b8abe6aa87e9c8b8a48899696f7ac89997f0ac7d -d699867b7779596678a37483d69986ae7b74596678565b776f596fae98706c5456565b774b5976 -5c495aa373577c62674b4b64666178936f72c78d6192655f40474b616568a887865d4c36a82916 -8d1d5c4c1575540b74541574540b745415745415745c1574040404 -0404045c147c6414746414745c0c7c5c147c5c15745c0c7c8d1d5ca829163d3630878283936f72 -5d4c36827668d9a8878f8b977c62675c495a878283c8a88666617840474b565b77a59887c5b699 -776a86815a55878283b8a8a7c8b7a8a37483be8b70ac99a7ca8377df9b5ad69b98d69986d6acb4 -d7a899d7aaa7e6b8abe9c8b8f7c8c8d88e7dc89997f6c5b7f8ecd8f5eae7b98680c8a9a7f7c8c8 -f8ecd8f7c8c8c78c82d7aaa7f6c5b7f7c8c8f7c8c8d69b98d3bac4d7aaa7d8b9b7d8b9b7efad93 -c7abb5b7898fb7898f999cb5d8c7b8999cb57a68797c6267747297d7c8a882839b565b685c495a -676a88c8b688867389605170936f729588a7d9b888766a4d815a55936f72a6979851524bb63024 -8d1d5c4c0b7454157455146c54157454157455146c5c1574040404 -0404045c15746414745c147c5c0c735c0c736414745c147c8d1d5ca82916472f22d9a887c78b4f -c78d61c8a671ae9870d9a887ab7b45c78d61b6a788a88786c8a6718c6540c8a671c5b699a69798 -e8bb88c78d61e9b899b9b7b4b5a898e8bb88d2966de9b899d8b7a8d7a899e6aa87f0ac7dd9a887 -d7a899d69b98e09e75efad93c89887c89997c89997c89887e7c8c8ae7b74c89887c78c82a59887 -e7c8c8c78c82c78c82d69986c89887e9b899d7a899d7aaa7d7a899e6aa87f7be9ae6b8abd8b7a8 -d8b7a8e6aa87e6aa87e9c8b8c7b8b7cac4b7e9b899d2966de7c7a5a8a6a9cac4a7ae9870a37357 -d9b899988884c8b7a8be8b70a37357d9b899b89898d9b888d2966dd2966dc9a79940474bb63024 -8d1d5c4c15755c1574540b745415745c1574541574541574040404 -040404640c796414745c147c6414745c15745c0c7c5c0c7c8d1d5ca82916302f2a6c5456815a55 -92655fb99886b6a7886c54565d4c367a6879a48899b6a7887c6267815a557c6267a59887c8b688 -747297936f72936f72b8aab7c8a9a79588a7ca8377b98680c7b8b7d9a887b8aab7e6b8abd7a899 -c8a9a7d69986d7c8c8f7c7a8e9b899c8a9a7d69b98ebdae5f5eae7f6c5b7c89997c78c82e8d8d8 -f5ebf5f6c5b7c89997d69b98e7c8c8f7c7a8d7aaa7d7aaa7d7aaa7e7c8c8e6b8abc8a9a7d8b9b7 -ac99a7c8a9a7d88e7da48899cac4b7b8aab7a48899ae7b74988884d7c8a8a697987a687992655f -936f72c5b699a69798815a556c5456776a86c9a799b5a898a37357936f7287828346423bb63024 -8d1d5c4c15755415745c157455146c54157455146c541574040404 -0404045c147c6414745c0c7c6414746414745c147c5c0c7c8d1d5cb630244724155c495a40474b -6661788c6540a3735740474b4b4b64565b77675f46a373575c495a45535b4b5976a88786e09e75 -6f596f4b5967666178c9a799e09e7586738961656882839be6b8abf7bb86a488997a6879b8aab7 -e7c8c8f7bb86c8b7a8988884e7c8c8e7c8c8e7c8c8d8b9b7878283e7c8c8c6c2cad8b9b7e7c8c8 -878283e6c9d9e8d8d8e9c8b8c7abb57b7779d3bac4e7c7a5f7be9aac99a7787988c7abb5f8d094 -d7a899776a865a688994788fe9b899c78c82666178666178867389e8bb8892655f565b774b4b64 -5c495abe8b707a68795966784b59675c495ac78d6194788f7a68794b4b64815a554d3d2cb63024 -8721644c0b7454157455146c540b745c15745415745c1574040404 -04040467278464257c641a7c672784641a7c6414745c0c7c8d1d5ca8291639291f6c545640474b -304443815a55a3735751524b45535b45535b5d4c36ab7b457a6879595c594b4b64a37357d2966d -6f596f4b5967565b77d2966dd9a8877a68794b5967787988e6aa87f7c7a8988884565b688f8b97 -f7be9afad9a5b89898616568d3bac4e9c8b8f5eae7c7abb570706ae7c8c8e7c8c8e8d8d8c7b8b7 -616568c7b8b7f6d8c8f8ecd8a8a6a9696f7ad6acb4f7be9af6d8c882839b565b68b8a8a7f7c7a8 -e6aa9d696f7a4b5967a37483f0ac7dd88e7d6661784b5976936f72e09e7592655f4b5967696f7a -936f72ab7b45675f464b59675966786f596fa37357815a5545535b565b68936f7246423bb63024 -8d1d5c541574541574540b6c54157455146c541574541574040404 -04040464257c6a2976672784641a7c641a7c5c1c7c541c7c8d1d5ccd342a39291f696f7a6c5456 -5c495a936f72c8a67178798851524b4b4b64827668d9b56ab8989892655f5c495aae9870c8b688 -696f7a936f72867389b6a788c9a799878283b998869588a7b5a898e9c8b8ac99a7d8b7a8b9b6c0 -c9a799e9c8b8c7b8b7e8d8d8d8d7dad69986d8b9b7f7c8c8ebdae5ebdae5d69b98c8a9a7f7c8c8 -e8d8d8ebdae5e59b87d8b9b7e7c8c8e8d8d8d6c8d5f7be9ac7b8b7c8a9a7cac4b7a9a7baf7c7a8 -a9a7baa69798b8989882839bdac896999cb5867389a37483676a88dac8968673896f596fa37483 -c19ba5e8bb88867389565b776c5456787988d9b8997a687960517060517077809751524bb63024 -8a2f624c1575541574541574541574540b745415745c1574040404 -04040464257c64257c641a7c641a7c5c1c7c6414745c1c7c99275ea829163d3630dac896ae9870 -c78d61c5b699a59887d9b8888c6540c78b4fc8a671c8a671efad5ec78b4fd2966db6a788ae9870 -e8bb88df9b5af7bb86b5a898b5a898f8d094f7be9af7d8b8b9b6c0b9b6a8fad9a5fad9a5f7c7a8 -d8b7a8d7aaa7f7c7a8faecc9e6b8abd8b7a8e6aa9dd8b7a8e9e7e8d6acb4d69b98d69b98d7aaa7 -e8d8d8d8b7a8d7aaa7d7aaa7e6b8abf6d8c8e9c8b8d8b9b7e9b899f7c7a8f7d8b8f7d8b8b9b6c0 -d7c8c8f7d8b8f8d094fad9a5b9b6a8cac4a7e9b899f0ac7ddac896b5a898c8b7a8d9b888c78d61 -e8bb88c8b688d9b888c78b4fa37357d9b899b5a898c8b688c78d61c9a799b9b7b440474bb63024 -87216454147c5c15745415745c15745415745c1574541574040404 -04040464257c641a7c641a7c641a7c5c147c5c157454147c99275ecd342a3d36306775886c5456 -5c495a988884c8a6716c5456815a55a37357d9a887c8a671776a86ae7b74936f72a59887b6a788 -7b7779ae7b74936f72a8a6a9c5b6999588a7d7a899a48899b9b6c0c7b8b7ac99a7e7c7a5c89997 -c7b8b7d9b899c6c2cae9e7e8d8b9b7d6acb4d7aaa7ebdae5f5ebf5f7c8c8d7aaa7d69b98e8d8d8 -f5ebf5e6b8abd8b9b7d7aaa7d8d7dae9e7e8c8a9a7d7c8c8c19ba5d7c8c8e7c7a5a69798ccd6c6 -a8a6a9c7abb5e9b899a59887cac4a79fa19ac89997be8b70988884d9b899b5a898ae7b74ae7b74 -988884c8b688d9b899ae7b7492655f787988c8b688988884815a557b7779999cb540474bcd342a -8721645415745415745c1c7c5415745415745c15745c1574040404 -040404641a7c5c1c7c641a7c64257c6414745c15745c1c7c99275ecd342a39291f4b4b644b5967 -45535b675f46a373575c495a40474b867389a37357c78b4f7a68794b5967596678be8b70f0af71 -6f596f4b5967666178e9b899f6c77c778097565b77778097e9c8b8f8d09482839b696f7a999cb5 -f8ecd8f8ecd8b8aab7787988b9b6c0e8d8d8e9d8c8b9b6c0988884e6c9d9d8d7dae9c8b8d7c8c8 -988884d6c8d5f5eae7e9c8b8b8aab7787988b5c0d5f8ecd8d8b9b7787988676a88ac99a7faecc9 -d8c7b8676a885966789588a7fad9a5c8a886535f834b4b64936f72f0ac7db99886666178565b77 -776a86d2966db986808f8b97565b775c495ac78d6170706a4b5976565b777b777946423bb63024 -8721644c15755415745415745415745c2479541c7c541c6c040404 -0404045c147c641a7c641c745c24795c1574641a7c5c1c7c99275eb6302439291f565b684b5967 -4b4b64675f46ae845d60517045535b45535ba37357c78b4f7c62674b5967666178ae845ddf9b5a -c78c82616568666178e6aa87e8bb88776a8645535b687798e9b899fad9a582839b4b596782839b -f7d8b8f5eae7a9a7ba616568a9a7baf6d9d9f5eae7a8a6a9616568c6c2caf6d8c8f5eae7b9b6c0 -696f7ab9b6c0f6d9d9f5eae7ac99a7565b68b9b6c0f8ecd8e8d8d8696f7a4b5967a8a6a9fad9a5 -e9c8b8676a884b5967a48899f8d094e6aa9d6051707b7779c89997df9b5aca83775966784b5967 -867389d2966da373574b4b644b59676f596fae845d6c54564b5967565b775c495a39291fb63024 -8721644c15755c15745415745415745415745415745c2479040404 -040404641a7c64257c64257c641a7c64257c641c745c1c7ca52357a8291640474b7b777951524b -565b68988884c8b688666178815a556c5456936f72c8a671867389ae7b74936f72ae7b74efad5e -e6b8abd699867a6879ae9870c8a886778097c8a9a79588a7b5a898c8b7a882839bcbcdc0a9a7ba -c9a799e9d8c8a9a7bac6d2e1c8c9d8d7aaa7e7c8c8d7c8c8ebdae5ebdae5d69b98d8b9b7e7c8c8 -e9e7e8d6c8d5e6b8abd7c8c8b8aab7c8c9d8a9a7bae9d9a6b9b6c0999cb5b9b6c09588a7e9d9a6 -999cb5878aa7b8aab782839bdac896a48899867389d7aaa7d8b7a8efad5e988884867389a37483 -747297d9b899936f726f596f7c6267776a86dac8968f8b974b4b6460517082839b5d4c36b63024 -8721645415745415745c15745415745415745415745c2479040404 -040404641a7c641a7c64257c64257c641a7c5c1c7c5c1c7ca52357a8291646423bd7c8a8a37357 -ae9870c5b699a69798d9b888c78b4fd9b56ac8a671a59887d9b56adf9b5adf9b5ad9b56ac89887 -f0af71f0af71f8d094b5a898b6a788f8d094fad9a5fad9a5c8b7a8b5a898fad9a5f8ecd8f8ecd8 -c7b8b7c7b8b7f7d8b8fcf8e7f6d8c8d8b7a8d8b7a8f7c8c8fcf8e7d8b9b7e6aa9dd7aaa7d8b7a8 -f8f6f7f6d8c8e6b8abd8b7a8fad9a5fcf8e7e9d8c8c7abb5c6c2caf8ecd8f8ecd8e9d9a6b9b6a8 -cac4b7f9ebb6fad9a5e9d9a6b5a898c8b7a8fad9a5f7bb86f7bb86d7a899c8a671efad5ee09e75 -d9b899a69798c8b688e09e75d2966ddac896b5a898c5b699ae845db6a788cac4b740474bb63024 -8a2f6254147c5415745c1574541574541574541c6c5c2479040404 -040404641a7c641c74641a7c641a7c641a7c5c157454147ca52357a829163d36308673896f596f -6c5456988884c8b68886738992655f827668988884c8a6717c6267ae7b74d9a887e6aa87d69986 -988884d7a899a48899a69798b5a898878283d9b899a59887a8a6a9c8b7a8a9a7bad8d7daa9a7ba -b8aab7c7b8b7a8b1c9d8d7dab8a8a7d8b9b7d8b7a8c8c9d8e9e7e8d8b9b7d6acb4d7aaa7d2dae7 -e9e7e8c7b8b7d8c7b8c19ba5c8c9d8dbe1e7ac99a7d7c8c8a8a6a9b5c0d5e8d8d89fa19acac4b7 -a8a6a9c8a9a7dac896988884d9b888a8a6a9c89997e6aa9da69798d9a887e6b8abe6aa87c78c82 -867389c8b688a59887a37483ae7b748f8b97c8b7a8a69798936f7292655f9fa19a45535bb63024 -8721644c15755c15745c15745415745415745c15745c2479040404 -040404641a7c5c1c7c5c147c5c1574641a7c641a7c5c1c7c99275eb6302439291f6c5456565b68 -4b5967936f72c78d617c62674b59674b4b64ae7b74efad5e7c626745535b94788fe09e75f0af71 -988884565b77676a88e8bb88f8d094867389565b68687798e9d8c8faecc9878aa7596678687798 -e9e7e8f5eae7878aa7696f7aa9a7baf2f4eaf8ecd89897a870706ab9b6c0e9e7e8e9d8c8a9a7ba -7b7779a8b1c9fcf8e7e9d8c8999cb566617898a8c2f8f6f7e8d8d868779859667898a8c2fcf8e7 -d8c7b85a6889565b778f8b97f8d094d8c7b8676a88676a88a48899f7bb86e9b899a48899605170 -7a6879f0af71a88786535f83596678867389e6aa87936f724b597659667886738951524bb63024 -81205c5415745c15745415745415745c1574541574541574040404 -0404045c1c7c641a7c641a7c5c1c7c641a7c5c24795c1c7c99275eb630243d36307c6267565b68 -4b596792655fd9a8877a68794b5967605170be8b70f0ac7d7a6879565b684b5967b99886f7bb86 -867389565b778f8b97e8bb88f0af71e6b8ab70706a676a88e8dab9faecc97887a8596678687798 -d9d5b8f8ecd87b8db45966788896b8f6d9d9f2f4ea999cb5677588a8b1c9e8d8d8e9e7e89897a8 -696f7a999cb5f8ecd8e9e7e8878aa75a68898896b8faecc9c8c9d86877985966788896b8faecc9 -d8c7b8565b777b7779f7c8c8f7bb86f7bb868782834b59769897a8f8d094c78c824b59764b5967 -94788ff0af71b7898f596678565b77936f72d9a887a37483565b685966787c62674d3d2ccd342a -8721645415745415745c15745c15745415745c15745c1c7c040404 -0404045c1c7c641a7c641a7c641a7c641a7c64257c541c7ca52357b6302446423b988884a37357 -936f72b5a898c8b7a8988884ae7b749888848f8b97b5a898988884c89887a88786988884c8a886 -9897a8d9b899d9a887ca8377df9b5af7c7a8e9d8c8a69798988884c8b7a89897a8d8d7daa8b1c9 -b5a898b9b7b49897a8d2dae7a8b1c9c8b7a8c7b8b7b9b6c0dbe1e7c8c9d8d8b7a8d8b9b7c6c2ca -dbe1e7b5c0d5d7c8a8b9b6c0b9b6c0dbe1e7a8b1c9d7c8a8999cb5a8b1c9c8c9d88a95a9dac896 -8f8b97a9a7baf6d8c8f6c5b7f0af71b99886c7abb5d8b7a8878aa7d8b7a8878283a88786b89898 -867389cac4a78f8b97a37483a3748382839bd3bac4999cb5936f72a374839897a846423bcd342a -781a664c15755c15745c1c7c5c1574541574541574541574040404 -040404641a7c5c1c7c641a7c641a7c5c1574641a7c5c1c7c99275eb6302451524bdac896c78d61 -d2966dc8b7a8b5a898d7c8a8e09e75f0af71b6a788b5a898e8bb88f6c77cf6c77cc8b688a59887 -f6c77cf6c77cefad5edf9b5ad2966defad5ef6d8c8f9ebb6b5a898a59887e9d9a6fcf8e7faecc9 -b9b6a8b9b6a8f9ebb6fcf8e7f8ecd8c7b8b7c7b8b7faecc9f2f4eaf6c5b7d8c7b8d8b9b7e9d8c8 -f2f4eae9d8c8c7b8b7c7b8b7fcf8e7fcf8e7e9d9a6acb4accac4a7fcf8e7fcf8e7e9d9a6b5a898 -c8b7a8faecc9f7d8b8efad5ef0ac7de09e75f0af71fad9a5e7c7a5a59887c8b688f6c77cf8d094 -e9d9a6b5a898cac4a7f7bb86e8bb88d7c8c8ac99a7d8c7b8d69986d9a887cac4a746423bb63024 -7926665415745c15745415745c15745c15745415745c1574040404 -040404641a7c641c745c1c7c641a7c641a7c5c15745c1c7ca52357b6302446423b988884936f72 -936f72ac99a7d9a887867389ae7b74827668a69798d9b888778097b99886a37483988884c8b688 -696f7ab99886f7c7a8f0ac7dd2966db9b6c0c6c2ca7b8db4b89898c8b7a8687798b8aab7878aa7 -a9a7bad7c8a88896b8c8c9d88a95a9c6c2cac7b8b798a8c2b5c0d5a9a7bad7c8c8c5b699a8b1c9 -b5c0d58896b8d7c8c8b9b7b48896b8b5c0d58a95a9d9d5b89fa19aa8b1c9b9b6c082839bdac896 -9897a898a8c2ebdae5c7abb5df9b5aefad93f6c5b7c9a7998f8b97d9b56a878283a48899b89898 -82839bd7c8a8a4889994788fae7b74878aa7d8b9b7a69798a37483ae7b74ac99a746423bcd342a -8721644c15755415745415745415745415745415745c1574040404 -040404641a7c641a7c641a7c641a7c641a7c5c1c7c5c1c7ca52357a829164d3d2ca37357595c59 -565b68be8b70df9b5a92655f4b5967565b77c89887f6c77ca374834b5967596678d9b899f6c77c -8782834b5967b89898f7d8b8f7d8b8b8aab7565b68778097e8d8d8fcf8e7878aa745535b687798 -e9e7e8fcf8e78a95a9565b688896b8f8f6f7dbe1e77b8db46661788896b8dbe1e7d8d7da8a95a9 -565b688896b8eaebf6f2f4ea7887a84b596798a8c2fcf8e7d8d7da5a6889565b6898a8c2f8ecd8 -dbe1e75a6889696f7ab5c0d5f7d8b8f6d8c8a697984b5967b89898f6c77cd8b7a8565b774b5976 -ac99a7f8d094c89887535f834b597694788fe6aa87b98680596678676a88a374833d3630cd342a -781a665415745c157454157454157455146c5415745c1574040404 -040404641a7c641a7c5c1c7c641a7c64257c5c1c7c5c1c7ca52357a829163d3630a887867b7779 -70706aae7b74e6aa87988884616568596678c89887f8d094878283565b685a6889d8b7a8f8d094 -878283565b685a6889e8dab9f7d8b87887a8696f7aa8b1c9e7c7a5e7c7a5f6d9d98782835a6889 -d9d7c8f8ecd87887a85966787887a8e9d8c8ebdae56b7eab5966787b8db4ccd6c6d2dae77887a8 -5a68897887a8d8d7dae9e7e86b7eab5a68898896b8f8ecd8d7c8c8596678988884ebdae5f7d8b8 -e8d8d8a9a7ba59667898a8c2f8ecd8d8c7b8565b774b5976b5a898f6c77cd8b7a85a6889596678 -a48899f7c7a8c8a9a75a6889696f7aa37483e09e75b7898f616568696f7ab986803d3630b63024 -87216454147c541574540b6c5415745c15745c1574541574040404 -040404641c74641a7c641a7c5c1c7c641c7464257c5c2479a52357a8291651524bc89887c78d61 -b98680b99886c8b7a8a59887c89887b89898ac99a7c8b7a8a69798d9b899a8a6a99fa19ac5b699 -a69798d8c7b89fa19ab6a788c8b688a8a6a9ebdae5d7c8c8d69986f0ac7df6c5b7e9e7e8a9a7ba -b5a898b9b6a88a95a9d2dae798a8c2b9b6a8acb4ac999cb5b5c0d598a8c2b8a8a7cac4b7a8b1c9 -c6d2e198a8c2cac4a7b9b7b498a8c2dbe1e79897a8dac8969fa19aa8b1c9e9e7e8f7c8c8f0af71 -d7a899e8d8d8c8c9d88f8b97c5b699988884b9b7b4c6c2ca878aa7d9b56a988884b8a8a7c7b8b7 -9897a8d7c8c8ac99a7b7898fd7aaa7ac99a7d9b899c19ba5b98680b7898fb8aab746423bcd342a -872164541574540b6c5415745c1574541574541574541574040404 -0404046414745c15745c15746414745c1c7c641a7c541c7ca52357a829165d4c36c5b699d2966d -c78b4fd9a887b5a898e9b899f0ac7df7bb86c8b688b8a8a7e8dab9f8d094f8d094c5b699b5a898 -dad4a8f8ecd8fad9a5b5a898b6a788e9d9a6f8ecd8f7bb86e09e75e09e75d2966df8ecd8faecc9 -c5b699b5a898e8dab9fcf8e7faecc9aab4b8cac4a7faecc9dbe1e7f8ecd8c7b8b7b9b6c0e9e7d7 -dbe1e7e8dab9c8b7a8b9b7b4f8ecd8fcf8e7e9d9a6b5a898b9b6a8f8ecd8faecc9df9b5ad88e7d -e09e75e8bb88f8ecd8e9d9a6a59887c5b699f9ebb6faecc9e9d9a69fa19acac4a7fad9a5f9ebb6 -e9c8b8b8a8a7d8c7b8f7c7a8f7be9ae6b8abc19ba5c9a799d88e7dd9a887c8a9a746423bb63024 -79266654147c541574541574540b6c5415745c1574541574040404 -0404045c147c641a7c5c147c5c15746414745c1c7c5c1c7ca52357a829164d3d2cc89887ae7b74 -b98680c8a9a7d69986a48899b99886a88786a9a7bad9b8998f8b97b89898878283a8a6a9dac896 -878aa7a8b1c97887a8b5a898b6a788747297b9b6c0f6d9d9e6aa87d2966de8d8d8d6c8d57b8db4 -b5a898cac4b777809798a8c27b8db4cac4b7b9b6c08896b8a8b1c97b8db4c6c2cab9b7b47b8db4 -a8b1c97b8db4cbcdc0b9b6a87b8db4a8b1c9687798d9b8999fa19a9897a8ebdae5d3bac4df9b5a -e6aa9df5eae7c6c2ca778097dac8968f8b97a9a7bab5c0d58a95a9d7c8a88f8b97ac99a7c9a799 -9897a8d8c7b8ac99a7c8a9a7d69b98ac99a7d7aaa7c19ba5c89887c78c82b8a8a740474bcd342a -781a665415745c157454157454157455146c540b745c1574040404 -0404045c1574641474641a7c5c147c5c147c5c1574541574b0254ea82916472f22c78d61595c59 -70706ac89887f0af71be8b70565b68696f7ae6b8abf8d094ae98704b5967677588f6d8c8faecc9 -a9a7ba45535b677588e9e7e8f8ecd8778097565b68b8a8a7f6d9d9f6d8c8c8c9d8616568677588 -e9e7e8e9e7e87887a84b59677887a8dbe1e7c6d2e16175a65966787887a8d2dae7d2dae7687798 -4b59767b8db4dbe1e7d8d7da6b7eab565b688896b8e9e7d7dbe1e75a6889787988dbe1e7e7c8c8 -f8ecd8b8a8a7565b6898a8c2fcf8e7d8d7da5a6889565b77b5c0d5faecc9d8c7b8596678565b77 -b8a8a7fad9a5d8b7a8677588676a88c8a9a7efad93d7a8997a6879787988c898873d3630b63024 -7926664c15755c15745c1574540b6c5415745415745c1574040404 -0404045c1c7c6414745c15745c1574641a7c641a7c541c7ca52357a829164d3d2cd2966d988884 -936f72d2966de09e75d8b7a87b7779787988d9a887f7bb86ac99a77b7779778097d7c8a8f8ecd8 -9897a8596678687798ccd6c6faecc96b7eab5966785a6889d9d7c8f6d8c8687798696f7ad7c8c8 -e7c8c8d8b7a8e8d8d8867389687798d8d7dac6c2ca6175a65a68896b7eabccd6c6c6d2e16175a6 -5a68896175a6d9d7c8c6c2ca5a68898f8b97e8d8d8d9b899e8d8d8c7b8b7565b68999cb5f8ecd8 -c8c9d8565b775966789897a8f9ebb6d7c8c85a6889596678b9b6c0f8ecd8d6c8d5676a88677588 -c9a799f7be9ae7c8c8787988878283d7a899e59b87d7aaa77b777994788fd88e7d4d3d2ccd342a -781a66540b745c15745c157454157455146c5415745c1574040404 -040404641a7c5c147c6414746414745c1574641a7c5c1c7ca52357a8291646423bd88e7dd2966d -d9a887b89898c89997c89887f0ac7dd9b899b5a898c9a799a69798e8dab9c6c2cab9b7b4cac4b7 -a8a6a9d8d7dab5c0d5a8a6a9b8a8a79fa19ae9e7e8a8a6a9a8a6a9b5a898999cb5dbe1e7f6d9d9 -e59b87d88e7de9c8b8c6d2e19897a8c5b699c5b69998a8c2c6d2e198a8c2b9b6a8aab4b898a8c2 -b5c0d5999cb5b9b6a89fa19a98a8c2c6d2e1e9c8b8d88e7de6aa9df7c8c8c6d2e18f8b97c5b699 -988884c6c2cad2dae78896b8d9b56aa59887b5c0d5c6d2e1999cb5d7c8c8a8a6a9c7b8b7d8d7da -b8aab7d9b899b8aab7d7aaa7e7c8c8c7abb5c89997c7abb5d69b98d7aaa7c7abb5472f22cd342a -781a665415745415745415745415745415745c1574541574040404 -0404045c1574641c746414745c1c7c641474641a7c54147ca52357a829165d4c36b99886c8a671 -e09e75c89887c8a886d7a899e8bb88f0ac7dd7a899c9a799e7c7a5f8ecd8f7d8b8d8b7a8c8b7a8 -e9d8c8fcf8e7faecc9c5b699b9b6a8e8dab9fcf8e7f9ebb6c5b699b5a898e9d9a6e9e7e8d69986 -e09e75e59b87ca8377d6c8d5e9d8c8b6a788c5b699e8dab9dbe1e7e9d8c8c8b7a8b9b6a8e9e7d7 -dbe1e7dad4a8b5a898c5b699faecc9d3bac4c78d61e59b87d2966dd9a887f5eae7d7c8a8a69798 -cac4a7f9ebb6fcf8e7e9d9a6b9b6a8cac4a7faecc9fcf8e7e9d8c8b9b7b4d8c7b8f8ecd8faecc9 -e6b8abd7aaa7d8b7a8f7c7a8efad93d69b98c8a9a7c89997e6aa87d69986c898873d3630cd342a -7926664c0b745c15745c15745415745415745c15745c2479040404 -0404045c1c7c641a7c5c1c7c6414745c1c7c5c1c7c54147cb0254ea829164d3d2ce6aa9dd9a887 -d69986e6b8abbe8b70d7aaa7d7a899c9a799d6acb4d9b899ac99a7b9b6c0a8a6a9b8aab7e7c7a5 -878aa7a8b1c98a95a9cac4b7dac8968896b8a8b1c97887a8a8a6a9dac896747297b9b6c0f6d9d9 -e6aa9dd88e7df6d9d9a8b1c95a6889b5a898b9b7b468779898a8c26b7eabcbcdc0b9b6a86b7eab -7b8db45f6b97d7c8a8a8a6a9676a88c6c2caf7c8c8ca8377e6aa9debdae598a8c2687798dac896 -9fa19a8896b8c6c2ca8a95a9d9d5b8b5a898b5c0d5b5c0d58896b8e9c8b8b8a8a7c8c9d8d6c8d5 -a9a7bad7aaa7d8b7a8d8b9b7e9b899c8a9a7c89887e6aa9de6b8abefad93d7aaa73d3630cd342a -781a66541574541574541574541574541574541574541574040404 -040404641c7464257c641a7c641a7c5c15745c15745c1c7cb0254ea829165d4c36e09e75766a4d -7c6267e9b899e09e75e8bb88595c597b7779e8dab9f6d8c8c7b8b7595c59787988dbe1e7f8ecd8 -b9b6c0565b68687798f8f6f7fcf8e7a9a7ba4b5967687798e9e7e8e9e7d78a95a9616568b8aab7 -d6c8d5c6c2cab9b6c0616568778097d8d7dac8c9d8677588565b686b7eabc6d2e1b5c0d5687798 -4b59678a95a9c6d2e1d2dae76775887b7779c8c9d8c7b8b7d6c8d5a8a6a9565b6898a8c2f8ecd8 -d8d7da677588596678a8b1c9fcf8e7e9e7d7677588676a88c6d2e1fcf8e7d6c8d5787988696f7a -d6c8d5f6d8c8e7c8c894788f7b7779d8b9b7efad93e6b8ab867389988884d7aaa73d3630db3738 -781a664c1575540b6c55146c5415745c157455146c5c1c7c040404 -040404641a7c64257c641a7c641a7c641a7c5c15745c147cb0254eb6302451524be6aa87b99886 -b99886e6aa87c8a671e6b8aba88786a69798e6b8abe9c8b8c6c2ca87828382839bd8b9b7f7d8b8 -a8b1c9787988778097ccd6c6fcf8e78896b8677588687798ccd6c6e9e7d76b7eab676a885a6889 -c8c9d8d9d5b8565b77878283e8d8d8c89997c7b8b7dbe1e77b77795a6889ccd6c6b9b7b44b5967 -8f8b97eaebf6c8a9a7c7abb5e6c9d9696f7a687798e9e7d7b9b6c0535f835a68898896b8e9e7d7 -d2dae75f6b97596678a8b1c9fcf8e7e9e7e8687798677588c6c2caf6d8c8dbe1e77780978f8b97 -d7c8c8e9c8b8e8d8d8a48899988884e6aa9de09e75e9c8b8a37483a88786e59b8739291fcd342a -7926665415745415745c15745415745415745415745c1574040404 -040404641a7c672784641a7c5c1c7c641a7c5c1c7c5c147cb0254ea829165d4c36d2966df0ac7d -e8bb88c89887b98680c89887fad9a5d8c7b8c19ba5d7a899d7a899e8d8d8d8d7dac9a799d7a899 -b89898e9e7d7c6d2e1b9b7b4c7b8b7aab4b8e9e7e8b5c0d5b9b7b4cac4b7acb4acc6d2e1a9a7ba -a8a6a9b6a7889fa19ab5c0d5d6acb4d88e7dd7a899e7c8c8a8b1c982839bb6a788a598879897a8 -b5c0d5d3bac4d69986d69986e7c8c8b5c0d5988884c5b699a59887aab4b8c6d2e198a8c2d7c8a8 -a8a6a9b9b6c0dbe1e798a8c2d8c7b8b8aab7c6c2cadbe1e7b8aab7d8b7a8c7abb5d7c8c8ebdae5 -d3bac4d7aaa7c7abb5e9c8b8e8d8d8d7aaa7b98680d7aaa7f7be9ae9c8b8d69b98472f22cd342a -7926664c15755415745c15745415745415745c1574541c7c040404 -040404641a7c6414745c15745c1c7c641a7c5c1c7c5c147cb0254ea8291651524bb6a788e09e75 -d2966dc78d61c78c82c9a799e8dab9e6aa87d88e7dc9a799d8b7a8e9e7e8f7c7a8d7a899d7a899 -d8c7b8fcf8e7faecc9d7c8a8c8b7a8e9e7d7f2f4eae9d8c8c8b7a8b9b6a8e8dab9dbe1e7e8dab9 -c5b699b6a788dad4a8d7c8c8ca8377ca8377ca8377ae7b74b5c0d5d9d5b8ae9870b6a788d9d5b8 -a9a7baae7b74c78c82d88e7dc78c82c8c9d8d8c7b8b5a898c5b699e8dab9e9e7e8dad4a8b9b6a8 -cac4a7f8ecd8ecf8fce9d8c8b9b6c0d7c8a8f8ecd8f8ecd8e6b8abd8b7a8d9b899f6d9d9e9d8c8 -c9a799d7aaa7c89997e9c8b8d8b9b7b7898fc89997ca8377d7a899c78c82b898983d3630cd342a -792666541c7c540b7455146c5c15745415745c1574541574040404 -040404641a7c64257c641a7c641a7c641a7c641a7c5c147ca52357a829165d4c36f6c5b7d9b899 -e6aa87e6b8abbe8b70f7c7a8d7c8c8e6b8abd8b9b7c89887d8b9b7c6c2cab9b6c0d7c8c8e9b899 -b8aab7b5c0d5a9a7bac6c2cadac8968896b898a8c27887a8b9b6c0dad4a87b8db48896b87887a8 -b8aab7c5b6996175a6a8b1c9f5eae7b98680d69b98eaebf6878aa745535bc5b69998888445535b -98a8c2f5ebf5c78c82d69b98eaebf698a8c26b7eabdac8969897a87b8db498a8c27887a8d9d5b8 -a8a6a98896b898a8c28896b8d9d7c8c8a9a7c8c9d8c8c9d8b8aab7d8b7a8d8b9b7d2dae7d6c8d5 -d3bac4c89997e6b8abebdae5f6d9d9e6b8abb98680e6aa9df7c7a8f7c7a8d7c8c83d3630cd342a -7926665415745c15745c15745415745415745415745c1574040404 -04040464257c5c1c7c641a7c5c1c7c5c157464257c5c1c7cb0254ea829165d4c36f7be9a7b7779 -827668e7c7a5e7c7a5e7c8c8675f46988884f6d9d9e9d8c8d6c8d5595c598f8b97f5ebf5f5eae7 -c6c2ca595c5982839bf5ebf5e9e7e8999cb5565b68687798d2dae7d8d7da8896b8565b68687798 -c6d2e1d8d7da7887a861656898a8c2b9b6c0a8b1c99897a8616568778097b9b6c0a8b1c9696f7a -70706a98a8c2a9a7bab5c0d598a8c2565b687b8db4dbe1e7c6d2e15f6b9759667898a8c2dbe1e7 -c6d2e15a6889616568a8b1c9f2f4eae9e7e8787988696f7ac6d2e1f8ecd8e8d8d88782837b7779 -d2dae7e6c9d9e8d8d894788f7b7779ebdae5e7c8c8e9c8b87a6879a69798e6b8ab4d3d2ccd342a -641c745415745c15745415745415745415745c1574541574040404 -04040464257c64257c64257c641a7c641474641a7c5c1c7ca52357a8291646423bf6d8c8cac4a7 -d7c8a8e6b8abb99886f7c8c8b5a898d8b7a8e6aa9dc9a799e7c8c8c8a9a7c7b8b7d8b7a8d8c7b8 -d6c8d5ac99a7999cb5d8c7b8e7c8c8999cb58a95a97887a8b9b6c0d8d7da6b7eab7887a86175a6 -aab4b8d8d7da6175a6687798596678c6c2cab5a8983044438a95a9ecf8fcb98680a69798ecf8fc -787988304443cbcdc0b8a8a7565b775f6b976b7eabe9d8c8b5c0d56175a66877987b8db4e9e7d7 -b5c0d56b7eab82839b98a8c2e8d8d8dbe1e78a95a99897a8d7c8c8e9c8b8dbe1e7ac99a7ac99a7 -f7c9d7c8a9a7ebdae5c8a9a7b89898f7c9d7c89997e8d8d8a69798c6c2cae9b89939291fdb3738 -781a665415745415745415745c15745415745c15745c1e6c040404 -04040464257c641a7c5c1574641a7c5c1c7c641a7c5c1c7cb0254ea8291651524bc89887e8bb88 -e9b899c89887be8b70be8b70e9c8b8d3bac4c89887c78c82c89887e9d8c8e8d8d8c9a799c89887 -c9a799e8d8d8ebdae5c8b7a8d7a899c8b7a8d8d7dac8c9d8c7b8b7c7b8b7cac4b7d2dae7c8c9d8 -b9b7b4b8a8a7b9b6a8c6c2cac8b7a8b6a788ae845da0b0a0a8b1c9b89898be8b70ca8377c89997 -a8b1c9ae9870b6a788c8b688b9b6a8b5c0d5b9b6c0cac4b7b8a8a7cbcdc0c6d2e1b9b6c0c6c2ca -b9b6a8ccd6c6d2dae7c6c2cad8b7a8c7b8b7d7c8c8eaebf6d8b9b7d7aaa7c8a9a7e8d8d8f5ebf5 -d6acb4c89887d69b98d8b9b7e8d8d8d7aaa7b98680c8a9a7f6c5b7c6c2cab8a8a73d3630cd342a -7926665415745c157455146c5415745415745415745c1574040404 -040404641a7c64257c5c15745c147c5c15745c1c7c54147cb0254ea829165d4c36c9a799e7c7a5 -e8bb88b99886ae7b74b98680d7c8c8d7a899c78c82c78c82c9a799e8d8d8d8b7a8c89887d7a899 -d8b9b7e9e7e8d7c8c8d7aaa7c8a9a7d7c8c8d2dae7d8c7b8c8b7a8b9b7b4c6c2cad2dae7cbcdc0 -b9b6a8acb4accbcdc0b5c0d5cac4a7b6a788ae9870b5a898a9a7bab98680b98680ae7b74936f72 -a8b1c9cac4b7ae9870c8a886c5b699c6d2e1cac4b7cac4b7b9b6a8d2dae7dbe1e7d7c8c8c7b8b7 -cac4b7dbe1e7d8d7dad8b7a8d8b7a8d8b7a8e9e7d7f6d9d9c19ba5d7aaa7c8a9a7e8d8d8e8d8d8 -c89997c89997c78c82c6c2cad3bac4ae7b74c19ba5b99886d8c7b8d7a899b898983d3630db3738 -6817695415745c15745c15745c157454157455146c5c1574040404 -0404045c1c7c641a7c64257c5c157464147464147454147cb0254ea829164d3d2cf7d8b8c7b8b7 -d8b9b7d8c7b8be8b70f7c7a8c8a9a7e6b8abd8b9b7c89887e6b8abb8aab7b9b6c0d6c8d5d7a899 -d3bac4a9a7ba999cb5d8d7dae7c7a5999cb58896b87887a8c8c9d8d7c8c86b7eab7b8db46b7eab -b9b6c0d9d5b86175a6687798596678c5b699a0b0a030444398a8c2f8f6f7936f72c9a799ecf8fc -7887a8304443b6a788cac4a7535f836175a66b7eabe9d8c8aab4b86b7eab7b8db47b8db4e9e7d7 -b9b6c07b8db48896b8a8b1c9e9d8c8d6acb4a8b1c9b9b6c0c8c9d8d8b7a8d6acb4c6c2cad3bac4 -e6c9d9c89997e6aa9de8d8d8e7c8c8f7c8c8b7898fe7c8c8e8d8d8e8d8d8d7c8c83d3630db3738 -681769541574541574541574541574541574541574541574040404 -0404045c1c7c641474641a7c641a7c5c147c641a7c541574b0254ea829165d4c36f7bb86616568 -827668f7c7a8e9c8b8e9c8b851524b988884f6d9d9e7c8c8d6c8d5595c597b7779e9e7e8f5eae7 -c8c9d8595c59787988e9e7e8dbe1e7999cb5565b68687798c6d2e1d2dae78896b8565b68687798 -c6d2e1c6d2e17b8db46165688896b8a8b1c998a8c278798861656898a8c2a9a7baa8b1c98a95a9 -595c59778097a8b1c9b5c0d5778097565b688896b8d2dae7c6d2e15f6b974b596798a8c2d2dae7 -d2dae77780974b5967a8b1c9e9e7e8eaebf6787988616568dbe1e7f5eae7f5eae77b7779595c59 -d8d7dae8d8d8ebdae5a48899616568ebdae5e7c8c8f7c8c870706a878283e7c7a53d3630cd342a -781a664c1575541574541c6c5415745415745c1574541574040404 -040404641a7c641a7c641a7c5c1c7c641a7c64257c5c147cb0254ea8291651524bf7c7a8d9b899 -d9a887e09e75b99886e7c8c8d7a899c8a9a7e6aa9dc8a9a7d3bac4b8aab7b8aab7d8b9b7e9c8b8 -b9b6c0999cb59897a8c7b8b7e8d8d87887a87887a86b7eabc8b7a8d9d7c86b7eab7780976175a6 -b9b7b4e8dab95f6b978a95a9eaebf6c78c82c8a9a7ecf8fc787988304443ccd6c6a59887304443 -9fa19af5ebf5b7898fb8aab7eaebf67887a86175a6e8dab9a9a7ba6175a67887a86b7eabe8dab9 -b5c0d56b7eab7887a88896b8e8dab9d2dae78a95a98a95a9c6c2cae9c8b8dbe1e7a9a7baa8a6a9 -d6c8d5d8b9b7ebdae5c7abb5c19ba5f7c8c8c89997e7c8c8c89997c7b8b7e9b899472f22db3738 -6817695415745415745415744c157555146c5415745c1574040404 -040404672784641a7c5c1c7c641a7c5c1c7c641a7c5c147cb0254e85241551524bc8a671df9b5a -e09e75c78c82c78c82c78c82e8dab9e9c8b8d69b98c89887d9a887e8d8d8e9d8c8d8b7a8d7aaa7 -c9a799f8ecd8f5eae7c8b7a8b9b7b4cac4b7e9e7e8d8d7dac8b7a8b9b6a8c8b7a8c6d2e1cbcdc0 -b5a898b5a898b9b6a8c8c9d8c8a9a7d88e7dd69b98c19ba5a8b1c9b6a788a59887ae9870acb4ac -98a8c2b89898d88e7dd69986d7aaa7c6d2e1b5a898b6a788b5a898cbcdc0c6d2e1b9b6c0c8b7a8 -c5b699d9d5b8dbe1e7b9b6c0d8b7a8c8b7a8e8d8d8f8f6f7c7b8b7d8b7a8d7aaa7e7c8c8e9e7e8 -d8b9b7d69b98d69b98f6c5b7e9e7e8d7aaa7b7898fd69b98e8bb88e6b8abb8a8a7472f22cd342a -79266654157454157454157455146c55146c5415745c2479040404 -0404045c157464257c641a7c641a7c641a7c5c1c7c5c1c7cb0254ea829165d4c36c89887d9b888 -e09e75be8b70c78c82c89887fad9a5d9a887c78c82c89887c8b7a8e8d8d8d8b7a8c89887c9a799 -c7b8b7f2f4ead8c7b8b8a8a7b8a8a7c8c9d8f2f4eaccd6c6a8a6a99fa19ab9b7b4dbe1e7cac4b7 -b6a788b6a788c8b688d6c8d5d69b98d88e7dd69986b89898b5c0d5c7b8b7b6a788ae9870c7b8b7 -a8b1c9ca8377d69b98d88e7dc19ba5d2dae7cac4b7b5a898b6a788d9d5b8dbe1e7d9d5b8b9b6a8 -acb4ace9e7d7fcf8e7d7c8c8b9b6c0c7b8b7f5eae7f5eae7d8b7a8d8b7a8d8b7a8e8d8d8e9d8c8 -c89997c8a9a7c8a9a7e7c8c8e9c8b8ca8377c89997b7898fd7a899d88e7db7898f3d3630cd342a -6c147454157455146c541574541574540b745415745c2479040404 -040404641a7c641a7c641c745c1c7c5c1c7c641a7c541c7cb0254e8524154d3d2cf0ac7dd69986 -d9a887d9b899c78b4fefad93b5a898c9a799d8c7b8d9a887c7abb5a8a6a99897a8c6c2cae7c7a5 -999cb59897a87887a8d8d7dae8dab97887a87887a8687798b5c0d5dad4a86877987887a85a6889 -a8a6a9d7c8a84b59768a95a9f6d9d9c78c82d7aaa7f5ebf5878aa74b5976dac896b5a8984b5976 -98a8c2f8f6f7c89997d69b98ebdae582839b596678e8dab9a9a7ba5f6b977887a86b7eabe9d8c8 -acb4ac7b8db48896b87b8db4e9e7d7b9b7b48896b8aab4b8a8b1c9e9c8b8c8a9a7b5c0d5c6c2ca -c8c9d8d8b9b7d7aaa7d3bac4d7c8c8e9c8b8c78c82e6aa9de6b8abe6b8abd6acb4302f2adb3738 -68176954157454157454157454157455146c5415745c1574040404 -040404641a7c641a7c5c147c641c74641a7c641a7c5c147cb0254ea829165d4c36f0af71616568 -7c6267e9b899f0af71d9a887595c59878283f7d8b8f7d8b8c7b8b7595c597b7779ebdae5f5eae7 -b9b6c051524b778097f5eae7f8f6f7999cb545535b687798e9e7e8e9e7d77b8db44b59678f8b97 -d8d7dac6c2ca9897a8595c59999cb5c8c9d8c8c9d88a95a9595c596b7eabc6d2e1b5c0d5677588 -61656898a8c2c8c9d8d6c8d59897a8616568a8b1c9c8c9d8d2dae77879884b596798a8c2f2f4ea -e9e7e86775884b5967b5c0d5f8f6f7f2f4ea778097596678d2dae7fcf8e7ebdae5677588696f7a -ebdae5f8ecd8f6d8c87b77797a6879e6b8abe9b899f7c7a87b7779936f72d7a8993d3630cd342a -681769540b745415745c15745c1574540b7455146c5c2479040404 -040404641a7c641a7c5c15745c1c7c641a7c641a7c54147cc3324e8524155d4c36efad93c78c82 -c8a886d9a887d2966dc8b7a8b99886b5a898d7a899e6b8abb8aab7a8a6a9878aa7c8a9a7e9d8c8 -8896b88a95a97887a8cac4a7e9d8c87887a8878aa7687798cac4b7d8c7b85f6b979897a8f6d9d9 -d69b98d69986f6d9d99897a84b5976d9d5b8b8a8a75a68896b7eab5f6b97cbcdc0a8b1c96175a6 -7887a85f6b97d9d7c8b9b6a84b5976b8aab7f7c9d7ca8377d8b9b7e8d8d882839b6175a6e8dab9 -aab4b86877987887a88896b8f9ebb6c8c9d8878aa7878aa7a9a7bafaecc9c8c9d8878aa79897a8 -b9b6c0f7c7a8d8d7daac99a7a69798d7aaa7d7a899e7c8c8b7898fc89997e6aa9d472f22db3738 -68176954157455146c5415745415745415745415745c2479040404 -0404045c1c7c641a7c641a7c641a7c5c24795c1c7c54147cb0254ea8291651524bd69986df9b5a -e09e75c89887c89887be8b70f0af71e9b899d8b7a8c9a799d9b899faecc9e9d8c8c8b7a8b8a8a7 -d7c8a8f5eae7e9d8c8b5a898acb4accac4a7f2f4ead8c7b8b6a788b6a788cac4a7dbe1e7d7a899 -d88e7dd88e7dd69b98c6c2cac9a799b6a788b6a788cac4b7d2dae7ccd6c6b9b6a8b9b6a8d9d5b8 -d2dae7c5b699b5a898b6a788d8d7dac6c2cad69986d88e7de59b87e6b8abe8d8d8b5a898b6a788 -b5a898f9ebb6f2f4eab9b6c0c8b7a8b9b6a8e9d8c8f8f6f7b9b6c0c8b7a8c8b7a8f8ecd8f5eae7 -d8b9b7d6acb4d7aaa7efad93f7c7a8c7abb5d69b98d69b98e6aa87e6aa9dc19ba54d3d2cdb3738 -69256b5415745415745c1574541574540b6c5415745c2479040404 -0404045c1c7c64257c5c15745c247964257c5c15745c1c7cb0254e8524155d4c36c9a799d2966d -d2966dc78c82c8a886c9a799f7be9ad9a887b89898c9a799d8b9b7f6d8c8dac896b5a898b8a8a7 -b9b6c0e9e7e8cac4b7b5a898c5b699d9d7c8fcf8e7d9d5b8a59887b6a788c5b699f5eae7efad93 -d2966de09e75d7a899d8d7dacac4a7b5a898b5a898cac4b7d2dae7b9b7b4b9b6a8b9b6a8c6d2e1 -d2dae7cac4a7c5b699b5a898cbcdc0d7c8c8d88e7de59b87e59b87e9c8b8f8f6f7cac4b7b6a788 -b5a898e8dab9fcf8e7dad4a8b9b6a8b9b6a8f2f4eafcf8e7d8c7b8c7b8b7cac4b7f8ecd8f6d8c8 -d9b899c7b8b7d8b9b7f7d8b8e6b8abc89887c8a9a7c89997e6aa9de59b87b998863d3630db3738 -69256b5415745c15745415745c15745415745c15745c2479040404 -0404045c1574641a7c641c7464257c64257c64257c541c7cc3324ea829165d4c36d69986b98680 -b99886c8b7a8d2966dc9a7999888848f8b97c7b8b7f0ac7da69798a6979882839bc6c2caf7d8b8 -82839b7780976b7eabd6c8d5dad4a87887a8878aa75f6b97c5b699dad4a85f6b978a95a9e6c9d9 -e6b8abd69b98f6d9d99897a85f6b97dad4a8b9b6a86175a67b8db46b7eabd9d7c8b9b7b46b7eab -7887a86175a6d9d5b8b9b6a85a6889b9b6c0ebdae5d69986e6b8abebdae59897a87887a8fad9a5 -a0b0a06877988896b87b8db4faecc9b9b7b47b8db48896b8999cb5f8ecd8999cb5999cb5a8a6a9 -b8aab7f7c7a8c19ba5999cb5c8a9a7d3bac4d7a899d69b98c19ba5d7aaa7c19ba5302f2adb3738 -69256b5415745c15745c15745c15745415745c1574541574040404 -0404045c1c7c641a7c641c7464257c64257c641a7c541574c3324e8524155d4c36d2966d595c59 -70706ae59b87e8bb88b99886595c597b7779f7be9af6c77ca598874b5967677588f7d8b8faecc9 -a9a7ba45535b787988f8ecd8f5eae79897a8595c598f8b97e9e7d7f8ecd8ac99a745535b999cb5 -f5eae7d8d7da9897a845535b7b8db4d2dae7c6d2e16877984b59678896b8d2dae7c6d2e1687798 -4b59677b8db4d2dae7d2dae7676a88565b68c8c9d8e9e7d7e9e7e887828345535bc8c9d8fcf8e7 -f5eae77b77794b5967b9b6c0fcf8e7e9e7e8677588616568d2dae7f8ecd8e7c8c8696f7a596678 -d8b7a8f7c7a8e6b8ab696f7a616568d7aaa7e6aa87c9a7996165687b7779ca837739291fdb3738 -6817695415745415745415745415745c15745c1c7c5c2479040404 -040404641a7c5c157464257c641c745c1c7c6414745c147cb0254ea8291651524bb99886ae7b74 -a59887d69986d9b888ac99a7a88786988884c8a886e7c7a582839b988884747297b5a898e8dab9 -7780978f8b97687798cac4a7d9b8995a68899897a8f7c9d7e59b87d9a887c6c2caa8a6a9687798 -dad4a8d9b8995f6b977780976175a6d9d5b8c6c2ca6175a67887a86b7eabd9d7c8b5c0d56175a6 -7887a86b7eabd9d5b8c6c2ca6175a67780976b7eabf9ebb6ac99a7687798b9b6c0d8d7dae09e75 -f7c8c8e7c8c882839b7887a8f9ebb6a9a7ba7780977887a89897a8f9ebb6a8b1c978798882839b -a48899fad9a5b9b6c094788f8f8b97b89898e9b899c7b8b794788fac99a7c89887472f22db3738 -68176954157454157454157455146c5415745c15745c2479040404 -0404045c24795c157464257c641c745c1574641a7c5c1574c3324e852415595c59d9a887df9b5a -e09e75d9b899c9a799d9a887f0ac7de9b899c8b7a8c8b7a8d9b899f8d094e9b899b5a898b5a898 -dac896faecc9e8dab9a59887b6a788cac4a7f8ecd8e9b899e09e75d2966de6aa87f6d9d9e9d9a6 -b6a788b6a788d7c8a8e9e7e8cbcdc0a8a6a9b9b6a8cbcdc0d2dae7d7c8c8b9b7b4b9b6c0d7c8c8 -d2dae7c6c2cab9b7b4b9b6a8e9d8c8e9e7e8c5b699b6a788b5a898e9e7d7faecc9d69986e09e75 -efad93f6c5b7fcf8e7b6a788b6a788c5b699faecc9fcf8e7c7b8b7b9b6a8b5a898f8d094f7d8b8 -b9b6c0d6acb4c8b7a8e9b899e6b8abd3bac4d7aaa7d7aaa7d2966dd7a899c8a9a73d3630db3738 -68176954157454157454157454157455146c5415745c2479040404 -040404641c7464257c641a7c641a7c641a7c64257c5c147cc3324e852415675f46c9a799b98680 -c78d61b89898c9a799c8a9a7e8bb88c89887b99886b8a8a7b9b7b4f7be9ac8b688b6a788b5a898 -b8a8a7e8dab9c5b699a59887b6a788c9a799f5eae7e9b899e09e75f0ac7de7c7a5f5eae7c7b8b7 -b6a788b6a788cac4a7f2f4eab9b7b4b9b6a8b9b6a8d8d7dadbe1e7cac4b7c7b8b7c7b8b7d2dae7 -dbe1e7cac4a7b9b6a8b9b6a8dbe1e7f2f4eadac896b5a898988884e9d8c8f6d9d9e09e75f0ac7d -e6aa87e8dab9f5eae7cac4a7b6a788b6a788f7d8b8f8ecd8cac4a7b9b6a8b9b7b4f7d8b8f7d8b8 -cac4b7c6c2cac7b8b7f6c5b7f7be9ad7a899c8a9a7c8a9a7d69986d9a887c5b69946423bdb3738 -69256b541c7c541574541574541574540b745415745c2479040404 -0404045c1c7c64257c5c1574641a7c5c147c641a7c541574c3324e8524155d4c36ae7b7470706a -7b7779c89887df9b5a9888847a68797b7779c5b699e8bb887a6879696f7a676a88c8b7a8f6c77c -878283596678666178dac896e8dab96b7eab787988b9b6c0e9c8b8f7c7a8e6c9d9878283687798 -d9d5b8e8dab96b7eab6775887887a8e9e7d7c7b8b76b7eab7887a88896b8d8d7dac7b8b77b8db4 -7887a87b8db4d8d7dad9d5b86b7eab7780977b8db4f9ebb6acb4ac676a88b9b6c0f6d9d9f7bb86 -e7c8c8b9b6c07780977b8db4fad9a5b8a8a77780977780979897a8f9ebb6ac99a77780978f8b97 -9897a8f7d8b8ac99a7778097a48899ac99a7e9b899b8989894788fa48899ac99a73d3630db3738 -69256b5415745415745415745415745415745415745c1574040404 -040404641a7c64257c64257c5c1c7c5c15745c15745c147cc3324e8524155d4c36ae7b74595c59 -616568be8b70e09e75936f72595c59596678e09e75f7bb8698888440474b596678dac896f6c77c -936f7245535bb8a8a7f7d8b8f6d8c89897a851524b778097f8ecd8f8ecd882839b45535b7887a8 -fcf8e7fcf8e77887a845535b8a95a9f8f6f7dbe1e768779861656898a8c2e8d8d8d2dae782839b -45535b8896b8f2f4eaf2f4ea7780974b596798a8c2f8f6f7e9e7e859667845535bc6c2cafcf8e7 -ebdae5677588565b68c8c9d8f8ecd8f6d8c87b777945535bc8b7a8f8d094d6acb44b59764b5967 -c9a799f7c7a8d7aaa7596678596678b98680e6aa87b986805966787b7779ae7b7439291fdb3738 -69256b54157454157454157454157455146c5415745c2479040404 -040404641c74641a7c641a7c641a7c641a7c641a7c54147cb0254e852415595c59a88786ae7b74 -936f72c8a886cac4a7878283ae7b74867389a59887dac89694788fb99886867389a59887c8a671 -787988c89887f7be9af0ac7dd2966db9b6c0c6c2ca7887a8c5b699b99886687798b9b6c08896b8 -cac4a7cac4b78a95a9a8b1c97887a8d8c7b8b9b6c08896b8aab4b898a8c2e7c7a5c8c9d8999cb5 -a8b1c98896b8d9d7c8b9b6c08896b8a8b1c97887a8e8dab998a8c27b8db49897a8687798e7c7a5 -9897a87b8db4b9b6c0b9b6c0f0af71f6c5b7e6b8ab776a8682839bf8d09482839b77809782839b -82839bfad9a5ac99a786738974729794788ff7c7a8999cb586738994788fa6979839291fdb3738 -6817695415745c15745415745415745415745415745c2479040404 -040404641a7c641a7c5c1c7c641c745c1c7c641a7c54147cc3324ea82916595c59d9b888c78d61 -c8a671c8b7a8b5a898dac896e09e75f6c77cb6a788b5a898f8d094f7bb86f6c77cb6a788a59887 -f6c77cf6c77cefad5edf9b5adf9b5af0af71faecc9f8d094b6a788b6a788fad9a5fcf8e7f9ebb6 -b9b6a8b9b6a8f9ebb6f8f6f7e9d8c8b9b6c0c7b8b7e9d8c8f5ebf5e9c8b8d8b9b7d7c8a8e8dab9 -f2f4eae9d8c8c7b8b7c7b8b7f8ecd8fcf8e7e8dab9acb4accac4a7faecc9f8ecd8d9b888b6a788 -c5b699faecc9f7d8b8d2966de09e75f0ac7df7bb86f8d094c8a886a59887c5b699f8d094f7c7a8 -c7b8b7acb4acc8b7a8f0ac7de6b8abb9b6c0c7b8b7d8b9b7d2966dd9b899b9b7b4302f2adb3738 -69256b5415745415745415745415745415745415745c2479040404 -0404045c1c7c641a7c641a7c5c1c7c6414745c1c7c54147cc3324e852415675f46a8a6a9ae7b74 -92655fac99a7b5a898a48899be8b70ae845da69798b6a788988884d69986988884936f72c8a886 -a69798e9b899c89997be8b70f0af71e6b8abe9c8b88f8b97b6a788b6a7889897a8d8d7da999cb5 -b9b7b4b5a898a8b1c9e9e7e8aab4b8d8c7b8c8b7a8d2dae7e9e7e8c7b8b7e6b8abd7aaa7d2dae7 -eaebf6c8b7a8d8b9b7c8b7a8c8c9d8e9e7e89fa19ac8b7a8a8a6a9d2dae7e9e7d79fa19ac8b688 -a88786d8c7b8f7d8b8f7be9ae09e75b99886e9b899e9d9a6b8a8a7c5b699a59887d7a899e9b899 -b5a898b8a8a7a9a7bac89997d69986b8aab7b9b6c0b8aab7b98680be8b70b5a8983d3630db3738 -641c744c1575541574541574541574541574541574541574040404 -04040464257c641a7c641a7c641a7c5c1c7c641a7c54147cc3324e8524155d4c36827668616568 -616568a88786d2966d6661786165685a6889b99886df9b5a666178565b68565b68c8a671f6c77c -8782835966788f8b97f0ac7df0af71e6b8ab696f7a787988fad9a5f9ebb66877985966787887a8 -e9e7e8e9d8c87887a867758898a8c2f8ecd8d9d7c882839b677588b5c0d5faecc9e9c8b8999cb5 -78798898a8c2f5eae7e8dab97887a85a68898896b8f8ecd8b9b6c0687798676a888896b8f9ebb6 -b5a898535f83ac99a7f6c5b7efad5ed8b7a882839b687798a48899f8d094988884565b77676a88 -747297fad9a59888845f6b97676a8882839be6b8ab94788f676a88776a868f8b973d3630db3738 -68176954157454157454157454157455146c5415745c2479040404 -04040464257c64257c64257c641a7c641c74641a7c5c1c7cc3324eb6302451524b7c626745535b -45535ba37357c78d617a687945535b616568c78d61df9b5a7c626745535b988884f0ac7df0af71 -936f7245535b787988e9d9a6f7bb867a687945535b778097f6d8c8f8ecd8878aa745535b82839b -f8ecd8f2f4ea7887a8595c59a9a7bafaecc9e9e7e88f8b9770706ac6c2cae8d8d8eaebf6ac99a7 -565b68a9a7bafcf8e7f8f6f79897a8565b68a8b1c9fcf8e7dbe1e75a68894b5967b5c0d5f8ecd8 -e9d8c85966784b5967b5a898f8d094e9c8b85966784b5976c8a9a7f7bb86e6aa9d696f7a45535b -b98680f0ac7dae7b74565b77596678ae7b74e09e75a374835966786661786c5456472415db3738 -6817694c157555146c5c15745415745415745415745c2479040404 -04040464257c5c2479641a7c64257c641a7c64257c5c1c7cc3324e85241570706a8782836c5456 -6f596fa59887c8b688696f7a92655f7a6879ae9870c8a6717a6879ae845dd69b98e8bb88c78d61 -82839bc89887867389b5a898ae9870787988b6a78882839bb9b6a8c7b8b78a95a9c8c9d8999cb5 -b9b6a8c7b8b79897a8c6c2caa9a7bad7a899c7b8b7c7b8b7d8d7dad6c8d5d7a899d7c8c8d7c8c8 -c6d2e1b9b6c0d8b7a8d3bac4a9a7bab5c0d5999cb5e9d8c8999cb5999cb5a8b1c98896b8e9d9a6 -9897a88f8b97a88786778097dac896a488999588a7a488999897a8f7bb86e6b8abc19ba5885b87 -787988e8bb88867389776a8674729782839be7c7a582839b676a88676a88778097472f22db3738 -681769540b6c5415745415745c15745415745c1574541574040404 -04040464257c64257c64257c5c24795c157464257c5c1c7cc3324e852415595c59dac896ae9870 -ae9870b6a788a59887e8bb88c78b4fefad5eae9870ae9870d9b56adf9b5aefad5ed2966dc8a671 -f0af71f0af71f6c77cae9870b6a788f8d094f8d094fad9a5b5a898c5b699f9ebb6fcf8e7f8ecd8 -c7b8b7c8b7a8fad9a5fcf8e7e9c8b8d8b7a8e9b899f6c5b7f5eae7e6b8abd7aaa7d7a899e7c7a5 -f5eae7e9c8b8d8b7a8e6b8abf7d8b8fcf8e7e9c8b8b9b6c0d8c7b8f8ecd8fcf8e7d9d5b8b9b6a8 -cac4a7fad9a5fad9a5d9b888b99886cac4a7f8d094f7bb86f0ac7dd7a899e8bb88f0af71f0af71 -c8a671b5a898c5b699d2966dd9a887c7b8b7b8a8a7b9b6a8ae7b74d8c7b8aab4b8472f22db3738 -5c1e6c5415745c15745c1574541574541574540b745c2479040404 -04040464257c672784641a7c5c15745c247964257c5c1c7cc3324e852415766a4d8f8b9751524b -595c59a59887b6a7887b7779815a55766a4d936f72ae98707b7779ae845d7b7779ae845df0af71 -d7a899d69986936f72ae9870b6a788a69798d9b8998f8b97b9b7b4b5a898a9a7bae9d8c8a8a6a9 -c7b8b7c8b7a8c8c9d8d8d7dab8aab7d8b9b7e6b8abeaebf6e9e7e8d8b9b7d7aaa7d7aaa7e9e7e8 -f5eae7d8c7b8e9c8b8d7a899d2dae7e8d8d8b8a8a7e9c8b8a8a6a9d8d7dad9d5b8a69798cbcdc0 -a8a6a9d8c7b8e8dab99fa19ac8b688988884d7a899f7be9ae7c7a5e8bb88ae9870c78c82d69986 -b5a898c5b699a59887ae7b74ae7b74b5a898b9b7b49897a8675f46988884a0b0a03d3630db3738 -6817695415745c15745c15745415745415745415745c2479040404 -0404045c157464257c641c7464257c64257c5c24795c2479c3324e852415675f46595c5945535b -45535b6c5456ab7b45565b6845535b4b4b64a37357c78d616661784b5967666178be8b70df9b5a -b99886616568596678e8bb88f0ac7d676a884b5967778097e8dab9f8d09478798859667882839b -f8ecd8f6d8c89897a8696f7ab9b6c0f8ecd8e9e7d7ac99a78f8b97d8d7daf6d9d9f6d9d9b8aab7 -878283c8c9d8f6d9d9e9c8b89897a8787988b5c0d5f8ecd8c7b8b77780976877989897a8f9ebb6 -c5b699687798676a88a48899f8d094b6a7885966789897a8e6aa9defad5ea88786676a88676a88 -94788fe8bb887c62674b4b64565b77776a86c8a8866661784b59764b5976776a8639291fdb3738 -5c1e6c5415745c15745415745c15745415745c15745c2479040404 -04040464257c5c157464257c67278464257c5c24795c1c7cc3324e8524155d4c36595c5945535b -45535b675f46ab7b455c495a40474b936f72ae845dc78b4f6f596f45535b666178d2966ddf9b5a -6f596f45535b696f7ae8bb88e8bb887879884b5967787988f7c7a8f7d8b8787988616568878aa7 -f7d8b8f5eae79897a870706ad6c8d5f7c8c8f5eae7a6979870706ae8d8d8e9d8c8f5eae7b8a8a7 -616568c6c2caf6d9d9f5eae7a8a6a9616568c6c2caf8ecd8e8d8d8787988596678b8a8a7fad9a5 -e9c8b8696f7a4b5967ac99a7f8d094d7aaa7666178565b68b98680f0af71b7898f596678565b77 -ae7b74c78d61ae7b74676a884b4b647c6267a373575c495a4b5976565b685c495a39291fdb3738 -5c1e6c5415745415745415745c15745415745415745c2479040404 -04040464257c64257c64257c64257c64257c6727845c2479c3324e8524156165687879886c5456 -5c495a878283c8a67170706a815a55a37483d9b56abe8b70867389a373577a6879b6a788ae9870 -7b7779c78d6194788fb6a788b8a8a78f8b97c89887778097b8a8a7b9b7b4a48899d9b899b9b6c0 -c9a799d8c7b8c7b8b7ebdae5e6c9d9d7a899d7c8c8e7c8c8ebdae5f7c9d7c89887d6acb4f6d9d9 -e8d8d8e6c9d9d9a887d3bac4e7c8c8d8d7dab8aab7f7c7a8b8aab7b8a8a7b8a8a79897a8e9d8c8 -999cb58f8b97a6979882839be9d9a6ac99a794788f936f72787988e8bb8894788f867389776a86 -687798e8bb88c8a9a7a374836f596f676a88e8bb88676a88605170676a887879884d3d2cdb3738 -5c1e6c540b745415745c1c7c541574541574540b745c2479040404 -0404045c157464257c67278464257c64257c5c24795c2479c3324e85241551524bdac896ae845d -ab7b45ae9870ae9870d9b56aab7b45c78b4fd9b56ad9b56aefad5ec78b4fd9b56aae9870ae9870 -efad5eefad5ee8bb88c5b699c8b7a8f8d094f7bb86f7d8b8b9b7b4c7b8b7fad9a5fad9a5f7c7a8 -d6acb4d8b7a8f8d094f8ecd8e9b899e6aa9dd7a899e6b8abe9e7e8c9a799d69b98d69b98d7a899 -e9e7d7d7aaa7d7aaa7e6aa9de6b8abf8ecd8e9c8b8d8b7a8e9b899f7be9afad9a5e8dab9c7b8b7 -cac4b7f7c7a8f7c7a8e8dab9acb4acd7c8a8f7bb86f7bb86d9b888b5a898cac4a7e09e75d2966d -c9a799c5b699f8d094c78d61c78d61c8a886b6a788b6a788a37357c5b699a9a7ba472f22db3738 -5c1e6c5415745c15745415745415745415745415745c1c7c040404 -04040464257c64257c5c24795c247964257c64257c5c1c7cc3324e852415766a4d7b77796c5456 -595c59a37357ae98707a6879675f46595c59ae845dd9b56ab7898fa37357815a55ae9870b6a788 -7b7779ae7b74867389b9b7b4b6a788ac99a7d7a899a48899c7b8b7d9b899c6c2cae7c7a5c19ba5 -d8b7a8e9b899e8d8d8e9d8c8e6b8abd7a899e6aa9df5eae7f5eae7e6b8abc89997d7a899ebdae5 -f5eae7f6c5b7e6b8abe6aa9de8d8d8f6d8c8e6b8abe6b8abc8a9a7e9d8c8f6c5b7c8b7a8d8c7b8 -a9a7bad6acb4d7a899a69798b9b7b4a8a6a9b99886c898879897a8c8b688988884ae7b74be8b70 -e6b8abd9b8889888846c5456827668b5a898c5b699a5988792655fa8878682839b3d3630db3738 -6817695415745415745415745415745415745c15745c2479040404 -04040467278464257c64257c6b377964257c64257c64257cc3324e852415675f467c626740474b -40474b8c6540ab7b4561656845535b4b4b64766a4dab7b4594788f565b684b4b64ae845ddf9b5a -6f596f4b5967676a88e6aa9ddf9b5a776a86596678878283e7c7a5f0af71867389616568ac99a7 -f6d8c8f7bb86ac99a7878283e8d8d8e8dab9f6d8c8c8a9a7a48899ebdae5d7c8c8f6c5b7d8b9b7 -988884e6c9d9e8d8d8f6c5b7b8aab78f8b97e7c8c8f7c7a8e6b8ab9588a7778097b8aab7fad9a5 -c8a8866877985a688982839bf8d094a88786676a885a6889867389f0af717c6267565b778f8b97 -b7898fc78d61616568535f835a68897a6879c8a6717a68794b5976565b777a6879472f22db3738 -5c1574540b6c54157455146c54157454157455146c541574040404 -04040464257c5c157464257c64257c64257c5c1c7c5c1c7cc3324e852415675f466c5456304443 -666178a373578c654040474b51524b565b68766a4dab7b455c495a45535b605170ae845dd2966d -6661784b5967696f7ae09e75e6aa87787988595c598f8b97f7bb86e8bb88a48899616568c8b7a8 -f7be9afad9a5a69798827668f7c8c8e9c8b8f5eae79fa19a827668e8d8d8d8b9b7e9e7e8b8a8a7 -70706ad7c8c8f6d9d9f8ecd8c8a9a770706ae6b8abf7be9af6d8c88f8b97616568c9a799f7be9a -e6b8ab787988596678b98680efad93c89887596678596678ae7b74e09e75936f724b59764b5967 -7c6267ab7b455c495a596678565b77815a55a3735792655f565b68565b68815a55472415db3738 -55146c55146c5415745c1574540b7455146c5415745c1574040404 -040404641a7c64257c64257c5c15745c1c7c6414745c1574c3324e852415766a4d8276688c6540 -92655fb6a788ae98706165685c495a7c6267b99886be8b70565b68815a556f596fb6a788b5a898 -936f72ae7b7494788fc5b699b8a8a794788fc78c82ac99a7c8a886d8b9b7b89898e9b899d3bac4 -d69986d8b9b7e6b8abf7c7a8e6b8abc89887e7c8c8f6d9d9ebdae5f6d8c8be8b70d6acb4f6d8c8 -ebdae5f6d9d9d7a899d8b9b7f6c5b7e9c8b8d3bac4e6aa87d7c8c8d8b7a8c8a9a7b8aab7e9b899 -b8aab7b7898fa488999588a7e8dab9999cb586738986738982839bdad4a8747297666178605170 -676a88dac8968673896165685c495a677588e8bb889888847a6879605170677588472f22db3738 -641474540b7454157454157455146c540b745415745c2479040404 -040404641a7c641a7c64257c641a7c5c15745c15745c1574c3324e852415675f46d9b56ac78b4f -c78b4fc78d61ae9870df9b5a8c6540df9b5aae9870ae9870d9b56a8c6540c8a671b5a898b8a8a7 -e8bb88c78d61e7c7a5b9b7b4c8a9a7e8bb88e09e75e9b899d8c7b8d8b7a8f7be9af7be9ad7a899 -d7a899d7aaa7e6aa87e9b899c89887d7a899c78c82d9b899e7c8c8b98680c89997c89997c8a886 -e8d8d8c89887d7aaa7d69b98d9a887f7c7a8d7a899e6b8abd7aaa7efad93f7c7a8e6b8abd8b9b7 -e6b8abf7bb86f7c7a8e9d8c8b9b6c0d3bac4d7a899e9b899d8c7b8b9b7b4d7c8a8be8b70c78d61 -c5b699b5a898d9b899ae845dae845dc8a886b5a898dac896be8b70d2966d98888439291fdb3738 -681769541574541574540b6c54157455146c5415745c2479040404 -040404641a7c64257c641a7c64257c64257c641c745c1574c3324e852415766a4d988884827668 -675f468c6540d9b56a8276686c5456595c59827668c8a6716f596f595c59666178a8a6a9b6a788 -7472977c62677a6879c7b8b7b5a8989588a7b98680a88786d7aaa7e8bb88d3bac4d9b899d7a899 -d7aaa7d7a899f6d9d9f7c7a8e6b8abc89887e6b8abe8d8d8faecc9e9d8c8b99886d8b7a8e9e7e8 -f6d8c8e6b8abc89997e6aa9df6d9d9f6c5b7e6b8abd7aaa7d8b9b7e9c8b8e9b899d8b9b7e9c8b8 -c8b7a8c19ba5d69986b8a8a7d7c8c8a9a7baa88786ae7b74b5a898cbcdc0999cb57c6267827668 -9fa19ac5b69998888492655fa37483c7b8b7d9b888936f72ae7b74c9a799a59887472f22db3738 -55146c540b745c1574541574540b6c5415745415745c1c7c040404 -040404641a7c64257c641c7464257c641a7c5c147c5c1c7cc3324e852415675f46a37357304443 -3044438c6540ab7b45815a5545535b40474b815a55ab7b454b4b6445535b4b4b64766a4da37357 -6051704b59677a6879ae845dca83777879884b5967988884e09e75e09e75a48899616568c8a9a7 -e6b8abf7bb86b5a8987b7779e9d8c8e9b899f7be9aa6979882839bf5eae7e9c8b8f6d8c8c6c2ca -7b7779e9c8b8e9b899f7c7a8c8b7a8878283f7c8c8e6aa9df7be9aa48899787988d6acb4efad93 -d88e7d82839b677588a48899e9b899ae7b745a68895966787a6879b6a7886165685a6889565b77 -605170c8a6716f596f4b5976677588ae7b74d9a88770706a45535b778097a37483472f22db3738 -55146c54157454157455146c5415745415745c15745c2479040404 -0404045c1c7c64257c64257c641a7c5c15745c1c7c5c1574c3324e8524158c65405d4c36302f2a -7c6267ae9870df9b5a6c545651524b4b4b64878283c8a671565b77565b68565b77ae9870b5a898 -666178616568787988d9b56ad8b7a88673897b7779b89898d9b888d9b899b5a898878283d8b7a8 -f7bb86f7c7a8d7aaa7988884f6c5b7d9a887e9d8c8b8a8a7878283f5eae7d8b7a8e9e7e8cbcdc0 -878283e9d8c8e6aa87e8dab9c8a9a7988884f6c5b7e9b899f6c5b7ac99a7787988d7a899e8bb88 -d7a8998f8b97696f7ab7898fd9b888b98680696f7a677588867389b99886616568535f83535f83 -616568b998866f596f4b59764b59677a6879d2966dae7b7445535b40474ba373574d3d2cdb3738 -55146c541574540b6c5415745c157454157455146c64257c040404 -0404045c1574641a7c641a7c5c1c7c641a7c5c15745c1574c3324e8524154d3d2c766a4dab7b45 -a373578276688276688276688c65407c62678782839fa19a8782835d4c368782839fa19a9fa19a -8782838c6540878283b5a898b8a8a7ae9870ae845db8a8a7b8a8a7c7b8b7c9a799d88e7dd8b9b7 -c8a886c7b8b7e6b8abe9b899d8b7a8c78c82cbcdc0e8dab9e8dab9e8d8d8b99886d7c8c8e9d8c8 -e8dab9e8d8d8c9a799d8b9b7f6c5b7e9c8b8f7c8c8d7a899d8b9b7efad93d7a899d8b9b7e7c7a5 -d7c8c8c89997b7898fb8a8a7e9d9a6a9a7baa374838673899897a8d9d5b87887a86661786f596f -878aa7d8c7b87780977a68797c6267867389d9b888a48899a374835d4c36595c594d3d2cdb3738 -641c745415745415745415745415745c15745415745c2479040404 -0404045c147c5c1574641a7c641a7c641a7c5c1c7c5c1c7cc3324ea8291639291f472f22472415 -472415472415472415472415472415472415472f22472415472f22472f22472f22472f22472f22 -47241547241547241539291f47241547241539291f39291f472f22472f2247241547241539291f -39291f47241539291f472f223d3630472f2239291f472f224d3d2c4d3d2c3d36303d3630472415 -4d3d2c3d3630472f22302f2a472f22472f223d36304d3d2c4d3d2c4d3d2c4d3d2c3d36303d3630 -4d3d2c4d3d2c4d3d2c46423b46423b46423b472f223d363046423b46423b46423b4d3d2c46423b -40474b3d36304d3d2c472f224d3d2c46423b46423b46423b4d3d2c46423b19271c472415db3738 -641c745415745415745415745415745415745415745c1574040404 -040404641474641474641a7c5c1c7c641a7c641a7c5c1c7cb0254edb3738cd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342acd342adb3738cd342adb3738cd342a -cd342acd342acd342acd342acd342acd342acd342adb3738cd342adb3738cd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342adb3738cd342acd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342ab63024cd342ab63024cd342acd342a -cd342acd342acd342acd342acd342acd342ab63024b63024b63024b63024b63024b63024b63024 -b63024b63024b63024b63024b63024b63024b63024b63024b63024a82916b63024cd342adb3738 -55146c5415745c157454157454157455146c541574541c6c040404 -0404045c147c5c1c7c5c1c7c641a7c641a7c641a7c5c1c7c641c74641c74681769641474681769 -681769681769681769681769681769681769681769681769681769681769681769681769681769 -6817696817695c1464681769660b656817696f175c781a666817696817696817696f175c681769 -6f175c681769681769781a66781a66792666781a667926666a2976681769781a666f175c6f175c -6f175c781a66781a66781a666f175c781a66781a66792666872164781a6687216479266681205c -781a667926668a2f627926667926668721648721648a2f6281205c8d1d5c8721648d1d5c872164 -8721648a2f628721648d1d5c87216487216499275e8721648d1d5c8721648d1d5c8d1d5c872164 -55146c5415745415745c15745415745415745415745c2479040404 -0404045c15745c1574641a7c641a7c5c1c7c5c147c5c1574641a7c5c147c5c0c735c0c735c0c73 -540c7c5c0c73540b745c0c735c0c73540b74540b74540b74540b74540b745c0c735c0c735c0c73 -5c15745c15745c1574540b745c0c735c147c5c147c54157454157455146c5c0c735c1574541574 -540b74540b74540b6c540b744c1575540b74540b745415745c1574540b6c541574541574541574 -540b74540b74540b74540b74540c7c540b74541574540b74541574540b74540b74540b744c0b74 -5415744c157554147c54157454147c4c0b744c1575541c7c5415744c15754c0b744c0b744c1575 -4c0b744c15754c15754c15754c0b744c15754c0b744c0b744c1575540b744c0b744c0b7454147c -54157455146c5415745415745c157454157455146c5c1c7c040404 -040404641a7c641a7c641a7c641a7c641a7c5c15745c147c5c147c5c15745c0c735c15745c0c73 -540b6c5c0c735c1574540b745c15745c15745c15745c0c73540b6c5c0c735c0c73540b74540b74 -5c0c735c1574540b74540b6c5c15745c157455146c5c1e6c5c15745c157455146c5415745c0c73 -5c15745c15745415745c15745c1574540b6c55146c5c24795c24795c15745c15745c157455146c -541574540b6c540b745415745c1574540b74540b74541574540b745c15745415745415745c1574 -55146c540b745c157455146c54157455146c54157454157454157454157455146c541574540b6c -5415745415745c1c7c54157455146c54157454157454157454157455146c540b6c55146c541574 -541574541574541574541c7c54157455146c5415745c2479040404 -040404641a7c641a7c5c147c5c1c7c5c147c5c15745c15745c147c5415745c0c735c15745c0c73 -540b745c1574540b745c0c735c1574540b6c540b6c540b6c5c0c73540b74540b6c5c1574540b6c -5415745c1574540b6c5c0c735c1574540b6c55146c5c24795c15745c15745c0c735c0c73540b6c -5c15745c15745c15745c15745c157455146c5c15745c24795415745c15745415745c15745c1574 -541574540b6c55146c540b74540b6c540b745c15745c0c73540b74540b6c540b6c540b6c541574 -541574540b6c540b6c540b6c54157455146c5415745415745415745c157455146c540b6c541574 -54157455146c5415745415744c157554157455146c541574540b6c4c086c540b6c4c1575541574 -5415745415745415745415745415745415745415745c1574040404 -0404045c1c7c5c147c5c15746414745c15745c15745c15745c147c5c15745c0c735c1574540b74 -540b6c5c1574540b6c5c0c73540b745c157455146c5c0c73540b6c5c15745c0c735c0c73540b6c -5c15745c1574540b6c5c1574540b6c540b6c5c15745c1e6c55146c540b6c55146c5c1574500464 -540b7455146c5c15745c0c735c1574540b74540b6c5415745415745c15745415745415745c1574 -5415745c1574540b74540b6c540b745c15745c1574541574540b6c55146c540b7455146c540b6c -540b6c540b6c4c1575540b6c541574541574540b6c540b6c55146c541574540b7455146c4c146c -54157455146c54157454157455146c55146c541574540b6c55146c540b6c541574541574541574 -54157454157454157454157455146c5415745415745c2479040404 -0404045c1574641a7c641a7c641a7c6414746414745c147c5c15745c15745c15745c0c735c1574 -5c0c735c0c735c0c735c15745c15745c15745c15745c15745c0c73540b745c1574540b6c5c0c73 -5415745c0c7355146c540b74540b6c540b6c540b74540b6c5415745c15745415745c15745c0c73 -540b6c540b74540b6c540b6c540b6c55146c540b6c540b6c5c1574541574540b6c5c157455146c -540b6c5415745c15745c1574541574540b745c15745c15745c0c73540b6c540b6c540b6c540b6c -54157455146c5c157454157454157455146c540b6c540b6c5c157454157455146c541574541574 -540b6c4c1575541574541574540b6c541574540b6c4c086c54157455146c4c1575541574541574 -5415745415745415745415745415745415745415745c2479040404 -040404641a7c641a7c5c1c7c641a7c5c147c5c147c5c15745c15745c15745c0c735c1574641474 -5c1574540b6c5c1574540b74540b6c5c15745c15745c15745c0c73540b6c540b745415745c1574 -5c15745c15745c0c73540b6c5c15745c1574540b6c5c15745c15745c1574541574540b74540b6c -5c157455146c540b74540b6c540b6c5c1574540b6c540b745c15745c15745c1574541574541574 -5c15745415745415745c15745415745415745c1574540b745c15745415745c1574541574541574 -54157455146c5c2479541574541c6c541574540b6c540b6c541574541574541574541574541574 -5415745415745c157455146c541574541574541574540b74540b6c55146c5c2479541574541574 -54157454157454157454157454157454157454157464257c040404 -0404045c15745c147c5c15745c1c7c6414745c15745c1574641a7c5c1574540b745c15745c1574 -5c15745c0c735c157455146c5c1574540b6c540b745c1574540b6c5c0c735c1574540b6c541574 -5c15745c15745415745c157455146c5c1574540b7455146c5c15745415745c1574540b6c55146c -64147455146c540b6c55146c5415745c1574540b6c5c157455146c540b74540b6c541574541574 -5c15745c15745415745415745c15745c1574540b74540b6c540b74540b6c5c0c7355146c541574 -541574541574541574541c6c5415745c1574540b74540b6c54157455146c5415745415744c086c -55146c5415745415744c157555146c5415745c15744c0b74540b6c541574541574541574541574 -5c24795415745415745c2479541574541c7c5c15745c2479040404 -0404045c15745c15745c15746414745c1c7c6414745c0c7c64257c5c15745c0c735c0c73540b74 -540b745c15745c15745c15745c15745c157455146c540b745c15745c15745c1574540b6c5c0c73 -5c15745c15745c1574540b6c540b6c5c1574540b6c540b6c5415745c15745c1574540b6c540b74 -55146c540b6c55146c540b6c540b6c5c15745c15745c1574540b6c5c15745c1574540b6c540b6c -5c15745c157455146c55146c5c157455146c5c15745c15745c15745415745c15745415745c1574 -5c15745c15745415744c146c541574541c6c541574540b6c4c086c55146c540b6c54157455146c -4c086c55146c540b6c55146c540b6c54157455146c540b6c55146c540b6c541574541574541574 -5415745415745415745415745415745415745415745c2479040404 -0404045c0c735c147c5c15745c147c641a7c641a7c5c0c735c15745c1574540b74540b6c5c1574 -5c1574540b745c15745c1574540b745c15745c1574540b6c540b6c5c15745c1574540b745c1574 -5c15745c15745c1574540b74540b6c540b74540b6c5415745c0c735415745c1574540b6c540b6c -540b74540b6c540b7455146c540b6c5c1574541574540b6c540b6c540b6c5c1574540b6c540b6c -5c15745c1574541574540b6c540b745c1574540b6c5c1574540b6c55146c540b74541574541574 -5415745415745415745415745c15745415745c1574541574541574541574540b6c55146c540b74 -540b6c4c086c541574541574540b6c4c086c5415745415744c146c540b7455146c4c146c541574 -5415745415745c1c7c5415745415745415745415745c2479040404 -0404045c0c735c1574641a7c6414745c147c5c15745c0c735c24795c0c735c0c735c0c735c1574 -5c1574540b745c0c73540b74540b6c5c1574540b6c5415745c15745415745c157455146c540b6c -5c15745415745c1574540b6c540b6c540b6c5c15745415745c15745c15745c157455146c5c1574 -5c15745c15745c1574540b6c5c0c73541574540b6c5c1574540b6c540b7455146c5415745c1574 -540b74541574540b6c540b74540b6c55146c540b745c1574540b6c54157455146c5c1574541574 -55146c55146c5415745c15745415744c146c541574541574540b6c540b6c540b6c54157455146c -4c086c55146c540b6c540b7455146c54157455146c4c15754c146c55146c4c1575541574541574 -5415745415745415745415745415745c15745415745c2479040404 -0404045c15746414745c1c7c641a7c641a7c5c15745c15745c15745c15745c0c735c15745c1574 -5c15745c0c73540b745c0c735c0c735c0c735c0c73540b6c5c15745c15745c0c735415745c1574 -5415745c1574541574540b745004645c0c73540b6c540b745c15745c1574540b6c5415745c0c73 -5415745c0c73540b74540b6c55146c540b6c55146c5c0c73540b6c5415745c0c7355146c540b74 -540b6c540b745c0c7355146c540b745c1574540b6c540b6c540b6c540b6c540b74541574540b6c -540b6c540b6c5415745c15745415744c1575540b6c55146c540b6c4c146c540b7455146c4c086c -55146c5415744c086c540b6c55146c540b745415744c146c541574541574541574541574541574 -54157454157455146c5415745415745415745415745c1574040404 -040404641a7c641a7c5c1574641a7c641a7c5c147c5c0c735c147c5c147c5c15745415745c1574 -540b74541574540b745c15745415745c0c73540b6c540b745415745c15745c15745c1574541574 -5c15745415745c15745c0c735c0c73540b74540b6c5c15745c15745c1574540b6c540b6c540b6c -540b6c540b74540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c540b745c157455146c -540b74540b6c540b6c540b74540b6c540b74540b6c5c1574540b74540b74540b6c540b6c540b6c -541574540b6c55146c4c146c541574541574541574541574540b6c540b6c55146c4c086c55146c -540b74540b6c5415744c086c540b7455146c540b6c541574540b6c55146c4c086c55146c4c146c -55146c4c157555146c5415745415745415745415745c2479040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/algor.gif b/Docs/Books/algor.gif deleted file mode 100644 index 6b640dee39cd9434c496d9e7b13955cee01abe19..0000000000000000000000000000000000000000 Binary files a/Docs/Books/algor.gif and /dev/null differ diff --git a/Docs/Books/algor.txt b/Docs/Books/algor.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/dbi.eps b/Docs/Books/dbi.eps deleted file mode 100644 index e636ad315e7b00e71918a27cc65d9b6f580dd201..0000000000000000000000000000000000000000 --- a/Docs/Books/dbi.eps +++ /dev/null @@ -1,1212 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/dbi.eps -%%CreationDate: Sun Dec 31 14:29:02 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 296 383 -%%EndComments -%%BeginPreview: 100 131 1 131 -% fffffffffffffffffffffffff0 -% 80aaaaaaaaaaaaaaaaaaaaa810 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000004401012000000000010 -% 80000000000240200000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80a00000000400000000000010 -% 800552a4251100000000000010 -% 80900411110100000000000010 -% 80000000000000000000000010 -% 80012000020800000000000010 -% 81fedffffdf7fffffffffff810 -% 8112a4924a4a24444444444810 -% 80ed5b6db58adbbbbbbbbbb010 -% 81001555554aa000a000a02810 -% 81638aaaaa8558745c68a85010 -% 81424555554aa8aa2a2a50d410 -% 8152a555554ad4aa145428a810 -% 8142c286a88aa8ab8a5450a810 -% 8162a471484aac548a5458a810 -% 81428491048aa8ab0a01a8a810 -% 815008e14b4ad4ad4a2850a810 -% 8142b0094a8aa855445458a810 -% 8162a9d68aa554aa8a5428a810 -% 8142a92aca8aa8aa8a5728a810 -% 8152a8d54acad4ad145428a810 -% 8142a8aa8a855455165528a810 -% 8162d4514a8aa8542a5450a810 -% 8140aa068282a000d004a72810 -% 8155558935355b6f592f595010 -% 815556b6d5d56a92aadbb75810 -% 8155aaaaaa55556d555faaa810 -% 8155555555aaaaaaaadbeda810 -% 800000000000000000ffdac010 -% 800000000000000001fe754010 -% 800000000000000003dda56010 -% 800000000000000007f9bfe010 -% 80000000000000000fab6f6010 -% 80000000000000001fdb74a010 -% 8000000000000007fedd577010 -% 800000000000003fbfe8aeb010 -% 8000005a954000ff7faebfb810 -% 80000ffffffffffdefd9053810 -% 80001effffffffd52f697b5010 -% 80007bf7ffffffadffdc4fa010 -% 8000f56ab6ddf77b55abda4010 -% 8003b56b6dbbdfd7aff4a10010 -% 8007d66ddbaebcb5b7b1800010 -% 800ea9b6bed7efaedde3000010 -% 801f7abdeada5adb56d2000010 -% 801dca6db555bdfd7aa6000010 -% 803eb6ebeb77eb4eade4000010 -% 803b553dabac9bbb2a68000010 -% 807f4b6bf8d377abbac0000010 -% 807da8976fadd6b7d550000010 -% 80fe9b4af976b7766048000010 -% 80fba4a3bf555bebea90000010 -% 81ff6d54fbfb2bbf4a50000010 -% 81fbe4c15d56ebeaa2a0000010 -% 83ff5a543ffd19df6d00000010 -% 83ffbaa516b3a7bc8b30000010 -% 83f572bd4bfef97aeea0000010 -% 83af7b384eeaabf73c80000010 -% 87a5b97f0055b76af300000010 -% 85a7de7ff29f4ee9f400000010 -% 87e3b57ff925dd5b4100000010 -% 8d23ec7abe1254a76f00000010 -% 876352ef55e445d4ff00000010 -% 8b43fcdce13f5ef7fe00000010 -% 8ac1e5f6a00031b4ea00000010 -% 8f43a935600005dafc00000010 -% 8b435a7a400002b4f600000010 -% 8ac3ec246000036c6900000010 -% 8d235438800002ba5c00000010 -% 8fc3f012c00002ac5a00000010 -% 8563a82a800001d82200000010 -% 8aa36034800001f47600000010 -% 86a3d029000001583000000010 -% 85e3e026000001582e00000010 -% 8797c058000000f43400000010 -% 84afc02ad00001343100000010 -% 83a780c4880000d83500000010 -% 836b805a080000d82a00000010 -% 817380ec080000a41000000010 -% 81688075580000b43500000010 -% 80b62051a80000281900000010 -% 804d486ef00000e81400000010 -% 803dc58e600000241b00000010 -% 8005b96fc00000c80c00000010 -% 801b9b6f800000a80d00000010 -% 801edb7e800000540480000010 -% 801ebbeb000000140400000010 -% 801c055e800000580550000010 -% 801600057000002c02a8000010 -% 801500028c0000240324000010 -% 80160002b40000160294000010 -% 80140001ac0000118174000010 -% 80134000200000154000000010 -% 801540000000000ab000000010 -% 801520000000000a5000000010 -% 8015400000000004e000000010 -% 800fc000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80810000000000000000000010 -% 815a6900000000000000000010 -% 804a4100000000000000000010 -% 81022800000000281080120010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -281.300715 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 131 8 -% Transformation matrix -[ 100 0 0 131 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202 -020202ffffffffffffffffffffffffffffffd9eaec7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecd9eaecffffffffffffffffffffffffffffffd9eaecd9eaecffffffffffffffffff -ffffffffffffd9eaecc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d9eaecffffffffffffd9eaecffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc7c7c9c7c7c99b9b9fc7c7c9afafb2c7c7c99b9b9fc7c7c9afafb2c7c7c9c7c7c9c7c7c9 -afafb2d9eaecc7c7c9c7c7c9afafb2c7c7c9afafb2afafb2c7c7c9c7c7c9afafb2c7c7c99b9b9f -afafb2c7c7c99b9b9fafafb2d9eaecafafb2c7c7c9d9eaecffffffc7c7c9d9eaecd9eaecc7c7c9 -afafb2c7c7c9ffffffc7c7c9c7c7c9c7c7c9d9eaecafafb2ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecffffffd9eaecc7c7c9c7c7c9d9eaecc7c7c9d9eaecd9eaecd9eaecd9eaecc7c7c9 -d9eaecffffffd9eaecffffffd9eaecffffffc7c7c9afafb2d9eaecd9eaecafafb2ffffffd9eaec -c7c7c9d9eaecd9eaecc7c7c9d9eaecd9eaecafafb2afafb2ffffffc7c7c9d9eaecd9eaecd9eaec -d9eaecd9eaecffffffd9eaecd9eaecd9eaecd9eaecc7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffc7c7c9d9eaecafafb2ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff8a8a8ed9eaec7a7b80c7c7c9afafb2 -c7c7c9d9eaecd9eaecc7c7c9c7c7c9ffffffafafb2c7c7c9d9eaecc7c7c9c7c7c9d9eaecafafb2 -d9eaecc7c7c9c7c7c9c7c7c9c7c7c9d9eaecc7c7c9d9eaecafafb2d9eaecd9eaecafafb2c7c7c9 -d9eaecc7c7c9ffffffffffff9b9b9fd9eaec9b9b9fafafb2d9eaecd9eaecc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffd9eaec8a8a8ed9eaecd9eaec9b9b9fd9eaec -8a8a8effffff6c6c71c7c7c9afafb2d9eaec9b9b9fc7c7c9c7c7c9afafb2afafb2afafb2afafb2 -afafb2afafb2c7c7c96c6c719b9b9fc7c7c9c7c7c9d9eaecafafb29b9b9fc7c7c9afafb2c7c7c9 -afafb29b9b9fffffffffffff9b9b9f9b9b9fd9eaecafafb26c6c71d9eaecc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffafafb2afafb2ffffffd9eaecafafb2ffffff -c7c7c9d9eaecc7c7c99b9b9fc7c7c9c7c7c9d9eaecafafb29b9b9fafafb2c7c7c99b9b9fc7c7c9 -c7c7c98a8a8ed9eaecafafb2c7c7c9c7c7c9afafb2c7c7c9c7c7c99b9b9fafafb2afafb2c7c7c9 -8a8a8ed9eaecffffffc7c7c9afafb2afafb2c7c7c9c7c7c98a8a8ec7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc7c7c9ffffffc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafb2 -d9eaecc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffff7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e5d9eaecffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5d9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be7dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e57dd6e57dd6e5d9eaec7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be -09a4be09a4be09a4be09a4be7dd6e5d9eaecd9eaecffffffd9eaec7dd6e57dd6e57dd6e57dd6e5 -7dd6e509a4be09a4be09a4be09a4be09a4be7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4bed9eaecffffff -d9eaec09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffffffffff7dd6e509a4be09a4be09a4be09a4be7dd6e5d9eaecd9eaec7dd6e5 -09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5 -ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e57dd6e5ffffffd9eaec7dd6e509a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5 -ffffff7dd6e509a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4bed9eaecffffff7dd6e509a4be09a4be09a4be7dd6e5 -7dd6e57dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be7dd6e509a4be09a4be7dd6e5 -7dd6e509a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -d9eaecffffff7dd6e509a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be7dd6e5d9eaec09a4be -09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be7dd6e5ffffff -ffffff7dd6e509a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4bed9eaec7dd6e509a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be7dd6e5ffffffffffff7dd6e509a4be7dd6e5 -7dd6e509a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4beffffffffffff7dd6e57dd6e57dd6e57dd6e5d9eaec -d9eaec09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -d9eaec7dd6e57dd6e57dd6e57dd6e5ffffff7dd6e509a4be7dd6e5ffffff7dd6e509a4be09a4be -09a4be09a4be7dd6e5d9eaecffffff09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4beffffffd9eaec7dd6e57dd6e57dd6e57dd6e5d9eaec -ffffff7dd6e509a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be7dd6e57dd6e57dd6e57dd6e509a4be09a4bed9eaecffffff7dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaecd9eaec09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4beffffffd9eaec09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -ffffffd9eaec09a4be09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4beffffffd9eaec09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaec -ffffff7dd6e509a4be09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be -09a4be09a4be09a4be7dd6e57dd6e509a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff7dd6e509a4be09a4be09a4be09a4be09a4be09a4bed9eaecffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffffffff09a4be09a4be09a4be09a4be7dd6e5d9eaec7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be7dd6e5d9eaecffffff -d9eaec7dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5d9eaecffffff -ffffffd9eaecd9eaec7dd6e509a4be09a4be09a4be7dd6e5d9eaecffffffd9eaec7dd6e509a4be -09a4be09a4be7dd6e5d9eaecffffffd9eaec7dd6e509a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e5ffffffffffffffffff7dd6e57dd6e57dd6e57dd6e57dd6e5d9eaec7dd6e509a4be -09a4be09a4be09a4be09a4be7dd6e5d9eaecffffffffffff7dd6e57dd6e57dd6e57dd6e509a4be -c7c7c9d9eaec09a4be09a4be09a4be09a4be7dd6e59b9b9f6c6c716c6c717dd6e57dd6e509a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be7dd6e509a4be09a4be -09a4be7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e509a4be09a4be09a4be09a4be09a4be7dd6e509a4be09a4be7dd6e509a4be09a4be -09a4be09a4be7dd6e509a4be09a4be7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be7dd6e509a4be09a4be09a4be7dd6e509a4be7dd6e57dd6e509a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be7dd6e57dd6e509a4be09a4be7dd6e57dd6e57dd6e56c6c71444348 -1f1f2209a4be09a4be09a4be09a4be09a4be7a7b805d5e62afafb25d5e629b9b9f09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be0202027a7b80 -4443480202025050546c6c714443485050545d5e6250505450505434353909a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be3435391f1f227a7b80 -3435390202023435398a8a8e6c6c718a8a8e6c6c717a7b805d5e626c6c7109a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be5d5e626c6c711f1f221f1f225d5e62 -1f1f221f1f220202021f1f226c6c716c6c718a8a8e5050547a7b805d5e6244434809a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecffffffd9eaec5050544443483435391f1f221f1f221f1f22 -1f1f223435391f1f225050545d5e625050545050546c6c717a7b808a8a8e3435395d5e62afafb2 -d9eaecd9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaec3435391f1f221f1f224443483435391f1f22020202 -5d5e625d5e628a8a8e6c6c715d5e624443487a7b808a8a8e7a7b807a7b808a8a8e5050547a7b80 -d9eaecffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd9eaec5050543435394443483435395d5e623435391f1f221f1f22 -9b9b9f8a8a8e5050545d5e626c6c716c6c719b9b9f6c6c718a8a8e9b9b9f9b9b9f505054343539 -9b9b9fffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec5d5e621f1f221f1f223435393435395050545050540202027a7b80 -c7c7c94443485050548a8a8e7a7b805d5e627a7b805d5e623435393435393435391f1f22020202 -afafb2ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff7a7b803435393435391f1f223435394443486c6c716c6c713435399b9b9f -6c6c715050547a7b808a8a8e3435395050543435393435393435393435396c6c713435391f1f22 -c7c7c9ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaec6c6c713435393435391f1f223435391f1f223435396c6c714443484443488a8a8e -5050545050548a8a8e3435391f1f226c6c715d5e623435397a7b807a7b808a8a8e6c6c71343539 -8a8a8effffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc7c7c9c7c7c98a8a8e505054444348343539 -3435391f1f221f1f221f1f221f1f221f1f223435391f1f224443487a7b807a7b804443486c6c71 -7a7b807a7b807a7b806c6c715050545d5e627a7b803435393435398a8a8e8a8a8e7a7b80343539 -1f1f22ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffafafb26c6c711f1f221f1f221f1f22343539343539343539 -4443484443483435391f1f221f1f220202023435393435393435396c6c716c6c715d5e625d5e62 -afafb29b9b9f8a8a8e7a7b809b9b9f8a8a8e1f1f223435394443489b9b9f3435398a8a8e444348 -1f1f229b9b9fffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecd9eaecc7c7c9afafb29b9b9f -9b9b9f6c6c716c6c717a7b807a7b808a8a8e9b9b9f9b9b9f9b9b9f9b9b9f9b9b9f8a8a8e8a8a8e -8a8a8e9b9b9f9b9b9fafafb2afafb2afafb2afafb2c7c7c9c7c7c9d9eaecd9eaecd9eaecffffff -ffffffffffffd9eaecafafb24443481f1f223435391f1f223435394443483435391f1f225d5e62 -5050543435394443481f1f221f1f220202021f1f224443485d5e627a7b807a7b805050546c6c71 -7a7b809b9b9f7a7b809b9b9f6c6c715d5e624443481f1f225050544443485050548a8a8e343539 -343539343539d9eaecffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd9eaec7a7b801f1f22020202343539020202020202 -1f1f221f1f220202020202021f1f220202021f1f220202020202020202020202021f1f22020202 -0202020202020202020202020202020202020202020202020202020202020202021f1f22343539 -4443485050541f1f220202023435391f1f223435394443483435391f1f225d5e624443485d5e62 -5050544443487a7b804443481f1f221f1f223435394443483435395d5e626c6c711f1f228a8a8e -8a8a8e8a8a8eafafb29b9b9f9b9b9f9b9b9f7a7b804443485d5e621f1f229b9b9fafafb2343539 -1f1f22505054ffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9b9b9f1f1f223435394443484443485d5e62444348343539 -1f1f221f1f223435391f1f221f1f221f1f221f1f221f1f221f1f221f1f221f1f223435391f1f22 -1f1f221f1f220202021f1f221f1f221f1f220202020202021f1f221f1f220202021f1f22020202 -0202021f1f220202021f1f224443483435397a7b805050546c6c715d5e626c6c71505054505054 -7a7b806c6c716c6c713435391f1f221f1f221f1f225d5e625050546c6c717a7b803435398a8a8e -c7c7c97a7b80afafb29b9b9f8a8a8e7a7b806c6c718a8a8e7a7b805050549b9b9fafafb29b9b9f -505054d9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc7c7c95050541f1f223435394443484443485050541f1f225d5e62343539 -1f1f223435394443483435395050544443480202024443481f1f225050543435391f1f22343539 -1f1f224443480202021f1f223435393435393435391f1f223435390202021f1f224443481f1f22 -4443483435390202023435393435397a7b805d5e628a8a8e4443481f1f228a8a8e8a8a8e444348 -5d5e621f1f223435395d5e624443481f1f220202024443485050546c6c718a8a8e4443486c6c71 -9b9b9fc7c7c99b9b9f7a7b807a7b806c6c715d5e625050544443481f1f225050547a7b807a7b80 -afafb2ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff8a8a8e3435391f1f223435395050545050546c6c717a7b805d5e625d5e625d5e62 -3435395050545050548a8a8e7a7b806c6c71505054505054505054343539444348444348444348 -5d5e624443483435395050544443480202024443484443483435391f1f224443483435391f1f22 -5d5e624443480202024443485d5e627a7b804443486c6c714443486c6c715d5e623435395d5e62 -7a7b807a7b805d5e627a7b805d5e623435391f1f223435395050547a7b807a7b803435398a8a8e -8a8a8e6c6c716c6c715d5e626c6c715050546c6c714443481f1f225d5e629b9b9f5d5e628a8a8e -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -afafb23435393435396c6c715d5e625050544443487a7b805d5e628a8a8e9b9b9f6c6c716c6c71 -3435398a8a8e4443488a8a8e5d5e625d5e627a7b805050546c6c715d5e62505054444348505054 -4443480202026c6c713435391f1f225d5e625d5e624443481f1f22444348343539444348343539 -1f1f221f1f221f1f224443485050545050546c6c715d5e627a7b806c6c715d5e62020202505054 -6c6c714443489b9b9f4443481f1f224443483435391f1f225d5e624443485d5e626c6c718a8a8e -afafb28a8a8e3435395d5e628a8a8eafafb2c7c7c9c7c7c9d9eaecafafb2c7c7c9c7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f -1f1f223435394443481f1f224443487a7b807a7b807a7b801f1f227a7b807a7b80afafb27a7b80 -4443486c6c718a8a8e5d5e628a8a8e6c6c715050543435395050547a7b805d5e625d5e625d5e62 -5050545050548a8a8e6c6c716c6c714443481f1f225d5e625d5e625050545050545050545d5e62 -3435390202028a8a8e7a7b805d5e625d5e625d5e623435396c6c713435397a7b805d5e62444348 -6c6c711f1f226c6c716c6c715050545050540202020202028a8a8e5050544443488a8a8ec7c7c9 -9b9b9f8a8a8e505054d9eaecffffffffffffd9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafb2343539 -3435394443485d5e623435396c6c716c6c716c6c717a7b808a8a8e9b9b9f8a8a8e4443487a7b80 -6c6c714443485d5e620202026c6c716c6c716c6c715050543435391f1f22444348343539444348 -8a8a8e5d5e621f1f227a7b806c6c717a7b806c6c714443484443485d5e621f1f22444348505054 -3435394443486c6c713435395050546c6c715d5e626c6c716c6c715d5e625d5e625d5e62444348 -4443487a7b805050543435396c6c716c6c715050541f1f22444348343539505054d9eaecc7c7c9 -6c6c71343539c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec444348343539 -4443481f1f225d5e626c6c716c6c711f1f226c6c714443488a8a8e8a8a8e7a7b807a7b806c6c71 -6c6c711f1f225050545d5e625d5e626c6c713435395050546c6c715050546c6c71505054444348 -9b9b9f4443483435397a7b805d5e624443486c6c716c6c715d5e628a8a8e7a7b808a8a8e6c6c71 -3435395d5e625d5e624443485050545d5e626c6c713435393435397a7b803435391f1f229b9b9f -8a8a8e8a8a8e6c6c716c6c71343539343539afafb23435391f1f226c6c716c6c71d9eaecc7c7c9 -5050547a7b80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f1f1f22343539 -1f1f226c6c715d5e621f1f226c6c715050548a8a8e8a8a8e6c6c719b9b9f7a7b80c7c7c9444348 -4443486c6c715d5e623435397a7b801f1f224443486c6c714443486c6c717a7b808a8a8e9b9b9f -9b9b9f7a7b807a7b806c6c718a8a8e8a8a8e6c6c717a7b807a7b805d5e625d5e62505054444348 -1f1f226c6c717a7b806c6c715050543435396c6c715d5e624443485d5e626c6c717a7b806c6c71 -6c6c711f1f225050544443487a7b807a7b808a8a8e5d5e625d5e62505054afafb2c7c7c9afafb2 -5d5e62d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffff4443481f1f22343539 -3435395d5e626c6c716c6c716c6c719b9b9f5d5e628a8a8e4443486c6c716c6c71afafb25d5e62 -3435396c6c717a7b806c6c716c6c711f1f225050543435391f1f227a7b805d5e626c6c717a7b80 -3435398a8a8e7a7b800202025d5e628a8a8e0202023435396c6c710202024443486c6c717a7b80 -5d5e625d5e621f1f224443485d5e626c6c716c6c716c6c713435393435395d5e627a7b809b9b9f -7a7b803435397a7b803435395050548a8a8e5050545d5e621f1f22343539afafb2c7c7c97a7b80 -afafb2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffc7c7c91f1f223435391f1f22 -5d5e623435393435396c6c716c6c719b9b9f3435398a8a8e8a8a8e6c6c717a7b809b9b9f7a7b80 -5050545d5e624443485d5e625d5e625050543435394443485050547a7b809b9b9f9b9b9f7a7b80 -1f1f225d5e625d5e626c6c715d5e626c6c716c6c717a7b807a7b807a7b806c6c717a7b80444348 -5d5e628a8a8e5050543435396c6c718a8a8e5d5e625050546c6c715d5e623435396c6c718a8a8e -9b9b9f5d5e628a8a8e5050549b9b9f5d5e62c7c7c96c6c711f1f226c6c71afafb27a7b809b9b9f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffff5d5e620202023435391f1f22 -4443484443485050549b9b9f7a7b808a8a8eafafb26c6c717a7b808a8a8e4443489b9b9f7a7b80 -5050546c6c716c6c715050543435395050543435395050544443485d5e621f1f226c6c719b9b9f -9b9b9f7a7b803435399b9b9f6c6c716c6c718a8a8e6c6c711f1f227a7b805d5e62505054343539 -5d5e627a7b805d5e621f1f221f1f228a8a8e7a7b806c6c717a7b805d5e625d5e621f1f226c6c71 -8a8a8e5050546c6c711f1f22afafb25d5e629b9b9f9b9b9f5050549b9b9fd9eaec8a8a8ed9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffc7c7c9020202020202444348444348 -0202025d5e626c6c715050547a7b807a7b809b9b9f8a8a8e9b9b9f9b9b9f9b9b9f9b9b9f6c6c71 -8a8a8e7a7b806c6c716c6c713435395050544443481f1f224443487a7b804443486c6c716c6c71 -5d5e624443488a8a8e5d5e626c6c711f1f228a8a8e9b9b9f5d5e625d5e625d5e628a8a8e6c6c71 -7a7b804443480202025050545d5e628a8a8e5d5e626c6c715050545050545d5e62444348343539 -3435398a8a8e7a7b808a8a8e8a8a8eafafb28a8a8eafafb2505054afafb29b9b9f8a8a8effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff5050540202020202021f1f221f1f22 -3435395d5e625050541f1f229b9b9fc7c7c97a7b805d5e629b9b9f5050549b9b9f5d5e626c6c71 -afafb2d9eaec7a7b807a7b803435395d5e625050543435393435395d5e624443485d5e627a7b80 -5d5e626c6c717a7b801f1f227a7b808a8a8e5050546c6c717a7b806c6c715050545050545d5e62 -6c6c718a8a8e1f1f225050546c6c716c6c715050543435397a7b803435395d5e628a8a8e6c6c71 -5d5e625d5e626c6c719b9b9fafafb2afafb2afafb2c7c7c97a7b80afafb29b9b9f7a7b80ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffc7c7c90202020202021f1f22343539444348 -4443480202025050545d5e627a7b80afafb2afafb28a8a8e7a7b809b9b9f8a8a8e9b9b9f8a8a8e -9b9b9fafafb2afafb2afafb28a8a8e5d5e625050546c6c711f1f221f1f223435393435396c6c71 -5d5e626c6c715d5e627a7b805d5e629b9b9f4443485d5e627a7b809b9b9f8a8a8e8a8a8e343539 -3435397a7b800202024443484443484443483435394443484443488a8a8e3435390202027a7b80 -4443483435397a7b801f1f22c7c7c95d5e62c7c7c9afafb29b9b9fc7c7c99b9b9fafafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec4443480202021f1f220202023435391f1f22 -4443481f1f225050546c6c71505054505054c7c7c99b9b9f3435398a8a8e7a7b808a8a8e505054 -afafb27a7b809b9b9f8a8a8ec7c7c9afafb25050545d5e623435393435393435396c6c716c6c71 -1f1f225d5e623435395d5e620202025d5e627a7b807a7b804443489b9b9f9b9b9f8a8a8e9b9b9f -7a7b807a7b803435391f1f225050544443481f1f227a7b806c6c716c6c715d5e623435397a7b80 -5d5e625d5e62afafb29b9b9fc7c7c98a8a8ec7c7c98a8a8e7a7b80afafb28a8a8eafafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb21f1f221f1f22020202020202343539343539 -5d5e624443481f1f225050544443484443489b9b9f8a8a8e7a7b80afafb2afafb25d5e62343539 -afafb2c7c7c9afafb2afafb2c7c7c99b9b9f9b9b9f5d5e625d5e625d5e623435395050545d5e62 -3435395050545d5e625050545050548a8a8e3435394443485d5e628a8a8e5050545050545d5e62 -7a7b809b9b9f5050541f1f224443481f1f225050545d5e621f1f225050545050546c6c71505054 -6c6c718a8a8eafafb29b9b9fc7c7c96c6c719b9b9f5d5e629b9b9f8a8a8ec7c7c9afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff8a8a8e0202021f1f221f1f220202021f1f221f1f22 -3435391f1f223435395050546c6c715050546c6c716c6c71afafb26c6c719b9b9fafafb26c6c71 -afafb2afafb29b9b9fafafb2c7c7c9c7c7c9afafb2afafb25050543435393435391f1f22444348 -5050543435395d5e620202023435396c6c715050545d5e626c6c718a8a8e9b9b9fafafb27a7b80 -343539afafb29b9b9f1f1f221f1f223435397a7b806c6c714443485d5e620202027a7b806c6c71 -8a8a8e5d5e628a8a8e6c6c717a7b808a8a8e5050548a8a8eafafb2c7c7c99b9b9fc7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff5050540202021f1f221f1f221f1f221f1f22343539 -1f1f221f1f223435394443487a7b801f1f225d5e623435399b9b9f5050547a7b806c6c718a8a8e -7a7b809b9b9f9b9b9f7a7b809b9b9fafafb28a8a8ec7c7c9c7c7c97a7b80343539444348444348 -4443485050545050545050545050545d5e627a7b807a7b806c6c715d5e628a8a8e4443487a7b80 -9b9b9f6c6c718a8a8e1f1f223435398a8a8e5050545050541f1f223435395d5e628a8a8e6c6c71 -6c6c71c7c7c9afafb29b9b9f6c6c711f1f22444348afafb2d9eaec8a8a8e7a7b80ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffd9eaec1f1f221f1f22444348343539343539343539444348 -4443485d5e625050545d5e625050543435395050548a8a8eafafb28a8a8ec7c7c98a8a8e7a7b80 -7a7b805d5e623435395d5e627a7b808a8a8e7a7b80afafb2afafb29b9b9f5d5e627a7b80343539 -1f1f225050540202023435395050541f1f226c6c711f1f227a7b801f1f225050541f1f225d5e62 -5050546c6c718a8a8e3435395d5e625d5e624443483435393435395d5e627a7b809b9b9f5d5e62 -4443485d5e628a8a8e3435394443485050548a8a8e5d5e629b9b9f9b9b9fc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff9b9b9f0202020202024443484443483435398a8a8e9b9b9f -3435393435393435398a8a8e4443483435391f1f225d5e629b9b9f6c6c715050549b9b9f9b9b9f -4443481f1f22343539505054afafb2afafb2afafb28a8a8eafafb2c7c7c97a7b806c6c71505054 -7a7b806c6c714443484443487a7b806c6c716c6c715050547a7b806c6c718a8a8e7a7b808a8a8e -5d5e628a8a8e3435391f1f226c6c714443481f1f221f1f225050543435395050545050548a8a8e -8a8a8e3435396c6c713435394443486c6c71c7c7c99b9b9fc7c7c99b9b9fd9eaecffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff5d5e624443483435394443487a7b804443489b9b9fd9eaec -1f1f226c6c711f1f227a7b808a8a8e6c6c713435393435396c6c71afafb25d5e62c7c7c98a8a8e -1f1f220202021f1f220202023435398a8a8e9b9b9fafafb2c7c7c9d9eaecafafb28a8a8eafafb2 -afafb29b9b9f6c6c717a7b805050546c6c715d5e628a8a8e3435397a7b806c6c718a8a8e505054 -8a8a8e5d5e620202024443486c6c713435394443485d5e629b9b9f7a7b807a7b809b9b9f343539 -3435395d5e621f1f22505054afafb28a8a8e7a7b80c7c7c98a8a8ec7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffd9eaec5050545050540202024443487a7b80444348afafb2ffffff -4443483435393435391f1f225050545d5e625d5e623435393435398a8a8e5d5e62c7c7c95d5e62 -0202021f1f223435393435391f1f221f1f221f1f221f1f225d5e626c6c71d9eaecc7c7c9c7c7c9 -8a8a8e7a7b808a8a8e9b9b9f6c6c715d5e625050545050543435398a8a8e8a8a8e8a8a8e7a7b80 -5050540202026c6c718a8a8e4443483435393435396c6c716c6c719b9b9f9b9b9f5d5e62343539 -5050541f1f224443487a7b80afafb2c7c7c9c7c7c98a8a8ec7c7c9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff9b9b9f1f1f226c6c714443485050544443481f1f22c7c7c9ffffff -9b9b9f0202024443484443485d5e626c6c715d5e623435396c6c716c6c715d5e62afafb2444348 -1f1f223435391f1f223435393435391f1f223435394443481f1f223435395050549b9b9f9b9b9f -7a7b809b9b9fc7c7c99b9b9f8a8a8e8a8a8e6c6c715050547a7b801f1f225d5e628a8a8e7a7b80 -6c6c713435398a8a8e7a7b806c6c716c6c716c6c717a7b805050548a8a8e5050540202028a8a8e -5050545d5e62c7c7c9c7c7c9c7c7c99b9b9f5050549b9b9fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff8a8a8e1f1f226c6c716c6c717a7b807a7b805d5e62d9eaecffffff -afafb20202021f1f224443481f1f223435398a8a8e5d5e625050549b9b9fc7c7c9c7c7c9343539 -3435394443481f1f223435394443485d5e625d5e625050544443481f1f221f1f224443487a7b80 -c7c7c9d9eaecc7c7c9afafb29b9b9f9b9b9fc7c7c99b9b9fc7c7c97a7b805050549b9b9f8a8a8e -8a8a8e3435398a8a8e9b9b9f7a7b806c6c717a7b807a7b808a8a8eafafb20202026c6c717a7b80 -3435396c6c718a8a8e8a8a8e4443480202021f1f22c7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff7a7b805d5e623435394443487a7b80505054505054ffffffffffff -d9eaec3435390202026c6c713435395d5e627a7b808a8a8e9b9b9f9b9b9fc7c7c9afafb21f1f22 -5050545050543435394443486c6c715d5e625d5e626c6c716c6c71343539c7c7c95d5e62444348 -5d5e627a7b807a7b807a7b80c7c7c9afafb2afafb28a8a8ec7c7c9afafb28a8a8eafafb2c7c7c9 -afafb25050548a8a8e7a7b805d5e623435397a7b809b9b9f8a8a8e6c6c715050549b9b9f7a7b80 -3435391f1f221f1f221f1f223435390202025d5e62ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff7a7b807a7b801f1f22343539c7c7c98a8a8e7a7b80ffffffffffff -ffffff5d5e620202026c6c716c6c715050545d5e62505054505054afafb2c7c7c93435391f1f22 -6c6c714443480202025050545d5e627a7b807a7b805d5e623435398a8a8effffffffffffafafb2 -8a8a8e9b9b9f8a8a8e6c6c714443485d5e625050545050546c6c718a8a8e7a7b808a8a8e7a7b80 -6c6c713435395d5e626c6c716c6c713435391f1f224443488a8a8e8a8a8e5d5e624443481f1f22 -3435393435394443483435393435394443489b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e626c6c717a7b80afafb26c6c714443489b9b9fffffffffffff -ffffff7a7b800202021f1f221f1f223435395d5e627a7b805d5e62afafb28a8a8e505054444348 -5050545d5e625050544443486c6c718a8a8e7a7b809b9b9f343539c7c7c9ffffffffffffffffff -ffffffffffffffffffd9eaecc7c7c9c7c7c97a7b80afafb2ffffffd9eaecc7c7c96c6c715d5e62 -c7c7c96c6c719b9b9f4443485d5e628a8a8e5d5e621f1f227a7b808a8a8e7a7b80afafb2020202 -0202021f1f227a7b803435394443487a7b809b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec4443485050543435395d5e627a7b801f1f229b9b9fffffffffffff -ffffff5d5e621f1f225d5e624443486c6c719b9b9f343539afafb2afafb25d5e62d9eaec6c6c71 -1f1f223435396c6c716c6c719b9b9f1f1f228a8a8e5d5e625d5e62d9eaecffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff9b9b9f8a8a8e8a8a8e3435391f1f228a8a8e6c6c713435396c6c719b9b9fffffff1f1f22 -1f1f220202025050543435391f1f227a7b80afafb2ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e626c6c710202023435399b9b9f343539afafb2ffffffffffff -ffffff6c6c711f1f226c6c716c6c716c6c716c6c711f1f22afafb25d5e629b9b9fffffff9b9b9f -1f1f225050545050548a8a8e9b9b9f8a8a8ec7c7c93435395d5e62ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffafafb27a7b807a7b805d5e625050547a7b805050545050548a8a8eafafb2ffffff5d5e62 -1f1f220202023435396c6c715d5e627a7b80afafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec6c6c717a7b808a8a8eafafb28a8a8e5d5e62afafb2ffffffffffff -ffffff5d5e620202025d5e623435393435398a8a8e5050546c6c716c6c71ffffffffffffd9eaec -3435396c6c718a8a8e5050548a8a8ec7c7c9c7c7c99b9b9f7a7b80ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaec7a7b805d5e625d5e626c6c710202025d5e625d5e625d5e62afafb2ffffff9b9b9f -1f1f225d5e625d5e625d5e628a8a8e9b9b9f9b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e624443487a7b808a8a8e9b9b9f6c6c719b9b9fffffffffffff -ffffff5d5e621f1f225050545050545d5e626c6c717a7b807a7b80d9eaecffffffffffffffffff -5050543435396c6c71afafb2d9eaecc7c7c9afafb28a8a8ec7c7c9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff4443488a8a8e8a8a8e6c6c710202025050546c6c714443489b9b9fffffffafafb2 -3435398a8a8e0202020202027a7b809b9b9f9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff6c6c711f1f220202021f1f225050543435396c6c71ffffffffffff -ffffff5050540202023435395050544443480202028a8a8eafafb2ffffffffffffffffffffffff -9b9b9f7a7b809b9b9f9b9b9f6c6c719b9b9f5050546c6c71ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff4443487a7b806c6c719b9b9f8a8a8e5d5e625d5e626c6c719b9b9fffffffd9eaec -6c6c717a7b801f1f221f1f227a7b808a8a8e9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff9b9b9f5d5e627a7b806c6c717a7b807a7b80505054ffffffffffff -ffffff5050541f1f224443487a7b805d5e627a7b809b9b9fc7c7c9ffffffffffffffffffffffff -6c6c717a7b805050549b9b9f505054c7c7c97a7b80c7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffafafb24443481f1f223435396c6c719b9b9f343539444348c7c7c9ffffffffffff -8a8a8e6c6c71afafb2c7c7c9c7c7c97a7b809b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff8a8a8e6c6c719b9b9f7a7b808a8a8e8a8a8e6c6c71d9eaecffffff -ffffff5050541f1f224443484443483435399b9b9f9b9b9fffffffffffffffffffffffffd9eaec -5050545d5e626c6c719b9b9fc7c7c9afafb28a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaec3435393435391f1f220202025d5e625d5e627a7b80c7c7c9ffffffffffff -8a8a8e4443485d5e629b9b9f8a8a8e5d5e628a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffafafb20202025050549b9b9f6c6c717a7b806c6c71c7c7c9ffffff -d9eaec1f1f221f1f221f1f224443486c6c718a8a8effffffffffffffffffffffffffffffafafb2 -6c6c718a8a8e8a8a8e8a8a8eafafb27a7b80c7c7c9ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaec5d5e628a8a8e6c6c715d5e621f1f225d5e629b9b9fc7c7c9ffffffffffff -afafb24443481f1f228a8a8eafafb28a8a8ed9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffafafb24443486c6c713435390202021f1f225050547a7b80ffffff -9b9b9f0202021f1f221f1f223435396c6c71c7c7c9ffffffffffffffffffffffffffffffafafb2 -8a8a8e9b9b9fafafb29b9b9f7a7b806c6c71ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff7a7b805d5e626c6c71c7c7c96c6c714443488a8a8ec7c7c9ffffffffffff -c7c7c94443487a7b809b9b9f5d5e626c6c71d9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffc7c7c96c6c713435391f1f225050548a8a8e9b9b9f8a8a8e9b9b9f -1f1f220202021f1f221f1f223435399b9b9fffffffffffffffffffffffffffffffffffff8a8a8e -6c6c717a7b807a7b80ffffff6c6c71c7c7c9ffffffd9eaecd9eaecc7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9b9b9f8a8a8e5d5e620202025050545050547a7b80d9eaecffffffffffff -ffffff1f1f223435397a7b806c6c718a8a8ec7c7c9ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff6c6c716c6c719b9b9f7a7b80c7c7c97a7b808a8a8e6c6c71 -0202020202021f1f22343539343539ffffffffffffffffffffffffffffffffffffafafb29b9b9f -8a8a8e8a8a8e6c6c718a8a8e6c6c71d9eaec9b9b9f5d5e629b9b9f6c6c71afafb2ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff8a8a8e7a7b80afafb21f1f225050546c6c718a8a8ec7c7c9ffffffffffff -ffffff1f1f220202028a8a8ec7c7c9afafb28a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffafafb25050541f1f221f1f22afafb26c6c719b9b9fafafb2 -3435390202021f1f221f1f228a8a8effffffffffffffffffffffffffffffd9eaec7a7b807a7b80 -7a7b80c7c7c9afafb25d5e629b9b9f9b9b9f8a8a8ec7c7c9c7c7c9c7c7c95d5e62afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffafafb25d5e627a7b808a8a8e7a7b805d5e629b9b9fc7c7c9ffffffffffff -ffffff4443484443489b9b9fafafb2afafb25d5e62ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffd9eaec5d5e623435396c6c718a8a8e5050546c6c71afafb2 -8a8a8e1f1f221f1f221f1f22c7c7c9ffffffffffffffffffffffffffffffafafb28a8a8e5d5e62 -7a7b809b9b9f5d5e628a8a8e6c6c71afafb2c7c7c9c7c7c9d9eaecc7c7c97a7b808a8a8effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc7c7c95d5e621f1f229b9b9f6c6c710202027a7b80d9eaecffffffffffff -ffffff6c6c716c6c715d5e62afafb28a8a8e8a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb25d5e629b9b9f3435391f1f226c6c718a8a8e -c7c7c99b9b9f1f1f221f1f22d9eaecffffffffffffffffffffffffffffffffffff5d5e62505054 -505054c7c7c95d5e625d5e626c6c71d9eaecc7c7c9d9eaecd9eaecc7c7c96c6c71afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec6c6c719b9b9f5050548a8a8e8a8a8e9b9b9fd9eaecffffffffffff -ffffff7a7b805d5e629b9b9fafafb29b9b9fafafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec5d5e626c6c711f1f225d5e626c6c716c6c71 -afafb2c7c7c99b9b9f5d5e62d9eaecffffffffffffffffffffffffffffffffffffafafb2505054 -4443483435396c6c716c6c71afafb2afafb29b9b9fafafb2afafb29b9b9f505054c7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6c6c71c7c7c94443485d5e628a8a8e9b9b9fd9eaecffffffffffff -ffffff8a8a8e5d5e629b9b9f9b9b9fc7c7c99b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffc7c7c95d5e627a7b807a7b805d5e625d5e62 -0202025d5e62afafb2c7c7c9afafb29b9b9fc7c7c9ffffffffffffffffffffffffd9eaec444348 -6c6c715050547a7b80afafb2afafb28a8a8e3435396c6c717a7b806c6c715d5e62ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff7a7b809b9b9f5d5e628a8a8e9b9b9fc7c7c9d9eaecffffffffffff -ffffff9b9b9f4443485d5e626c6c71afafb29b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff9b9b9f5d5e62afafb28a8a8e020202 -0202027a7b805d5e62c7c7c99b9b9f9b9b9f9b9b9f8a8a8eafafb2c7c7c9c7c7c9c7c7c95d5e62 -6c6c718a8a8e8a8a8e7a7b807a7b809b9b9f444348343539505054444348c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff7a7b808a8a8e343539afafb24443488a8a8ed9eaecffffffffffff -ffffffafafb26c6c718a8a8e6c6c71afafb2afafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f7a7b807a7b801f1f22 -6c6c71afafb26c6c714443485d5e629b9b9fd9eaecafafb29b9b9fafafb27a7b808a8a8e9b9b9f -9b9b9fafafb24443481f1f223435398a8a8e8a8a8e4443483435399b9b9fffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6c6c719b9b9f7a7b80c7c7c98a8a8e9b9b9fc7c7c9ffffffffffff -ffffffc7c7c95050546c6c716c6c717a7b806c6c71d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c97a7b809b9b9f -6c6c718a8a8e5d5e620202028a8a8e3435396c6c71343539c7c7c9afafb25d5e62c7c7c96c6c71 -6c6c71afafb23435390202020202024443485050545050546c6c71ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff5050548a8a8e7a7b80afafb28a8a8e9b9b9fafafb2ffffffffffff -ffffffffffffafafb24443484443489b9b9f7a7b80d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec1f1f225d5e62 -8a8a8e6c6c714443481f1f229b9b9fafafb21f1f221f1f229b9b9f1f1f225050548a8a8e1f1f22 -5050547a7b805050541f1f220202021f1f224443487a7b80d9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff5050549b9b9f444348afafb26c6c719b9b9fc7c7c9ffffffffffff -ffffffffffffd9eaec3435395050549b9b9f9b9b9fc7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec1f1f22343539 -3435395d5e625d5e625050546c6c718a8a8e1f1f224443488a8a8e0202025050547a7b80020202 -1f1f225050545d5e623435393435395d5e626c6c71d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffafafb28a8a8e6c6c715d5e627a7b80afafb2afafb2ffffffffffff -ffffffffffffffffff9b9b9f6c6c719b9b9f9b9b9f9b9b9fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec343539444348 -1f1f221f1f228a8a8e8a8a8e5d5e625d5e623435395050548a8a8e5050545050546c6c71343539 -1f1f225d5e625050545d5e626c6c714443486c6c71ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd9eaec8a8a8ec7c7c97a7b807a7b805d5e62afafb2ffffffffffff -ffffffffffffffffffc7c7c95d5e62c7c7c9afafb2afafb2d9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec5d5e62444348 -3435396c6c71c7c7c9ffffffc7c7c9afafb2afafb28a8a8e7a7b806c6c715d5e625d5e625d5e62 -5d5e625d5e625050541f1f224443485d5e627a7b808a8a8ec7c7c9c7c7c9d9eaecffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff8a8a8e8a8a8e6c6c717a7b806c6c71c7c7c9ffffffffffff -ffffffffffffffffffd9eaec6c6c717a7b80c7c7c99b9b9f9b9b9f8a8a8e7a7b80afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec6c6c716c6c71 -3435396c6c719b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecd9eaec4443486c6c718a8a8eafafb27a7b805d5e627a7b808a8a8ec7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffafafb2444348c7c7c95d5e621f1f22c7c7c9ffffffffffff -ffffffffffffffffffffffff8a8a8e0202027a7b809b9b9fc7c7c95d5e62afafb25d5e62afafb2 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95d5e627a7b80 -4443486c6c719b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9b9b9f5d5e62afafb28a8a8e7a7b809b9b9f9b9b9f7a7b807a7b80d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff6c6c718a8a8eafafb27a7b809b9b9fd9eaecffffff -ffffffffffffffffffffffffafafb23435395d5e628a8a8e9b9b9f8a8a8eafafb29b9b9f5d5e62 -d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95050548a8a8e -5050546c6c71c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec5d5e628a8a8e7a7b809b9b9f8a8a8e6c6c718a8a8e343539c7c7c9 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffafafb26c6c719b9b9f6c6c716c6c71afafb2d9eaec -ffffffffffffffffffffffffd9eaec4443487a7b80afafb2afafb2afafb27a7b80afafb21f1f22 -9b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c96c6c719b9b9f -7a7b809b9b9fafafb2d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffafafb25d5e625d5e626c6c716c6c716c6c715d5e626c6c71d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff444348afafb2afafb29b9b9f8a8a8e505054 -9b9b9fd9eaecffffffffffffffffffafafb25050547a7b805d5e626c6c714443487a7b809b9b9f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c96c6c71afafb2 -9b9b9f5d5e625d5e628a8a8eafafb2ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaecc7c7c9afafb29b9b9fc7c7c9c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff5050549b9b9f8a8a8eafafb28a8a8e7a7b80 -9b9b9f8a8a8ec7c7c9ffffffffffffffffffd9eaecd9eaecc7c7c9afafb2afafb2d9eaecffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95050549b9b9f -5050548a8a8e8a8a8e9b9b9f7a7b80c7c7c9ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff9b9b9f6c6c71afafb28a8a8e9b9b9f7a7b80 -c7c7c95d5e627a7b80c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c9343539afafb2 -8a8a8e7a7b809b9b9f5d5e629b9b9f9b9b9fffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc7c7c94443488a8a8e7a7b808a8a8e8a8a8e -5050547a7b804443489b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec6c6c719b9b9f -4443488a8a8e9b9b9f8a8a8e6c6c718a8a8effffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffafafb24443488a8a8eafafb26c6c71 -5d5e626c6c717a7b80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c97a7b80 -3435396c6c713435394443486c6c71d9eaecffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaecc7c7c9 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d9eaecd9eaecd9eaecd9eaecd9eaecffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffafafb29b9b9fc7c7c9ffffffc7c7c99b9b9f -d9eaecc7c7c99b9b9fc7c7c9c7c7c9c7c7c9ffffffc7c7c9d9eaecafafb2ffffffc7c7c9d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb28a8a8ec7c7c96c6c71d9eaec7a7b805d5e62 -9b9b9f8a8a8e9b9b9fc7c7c97a7b806c6c71ffffff8a8a8ed9eaecafafb25d5e62c7c7c9d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff9b9b9fafafb2ffffff5d5e62d9eaec8a8a8e505054 -afafb28a8a8eafafb2d9eaec7a7b806c6c71ffffff8a8a8effffffd9eaec9b9b9fffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaecc7c7c9c7c7c9d9eaecffffffd9eaecd9eaecffffffffffffd9eaec -ffffffd9eaecd9eaecd9eaecffffffffffffd9eaecd9eaecd9eaecffffffd9eaecffffffffffff -d9eaecffffffffffffd9eaecd9eaecd9eaecffffffd9eaecc7c7c9d9eaecffffffffffffd9eaec -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec8a8a8e7a7b809b9b9fffffff9b9b9fc7c7c9 -c7c7c97a7b808a8a8ec7c7c99b9b9f5d5e62afafb28a8a8e9b9b9fc7c7c9c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaecafafb2c7c7c9c7c7c9afafb2c7c7c99b9b9fafafb2d9eaecc7c7c9d9eaec -c7c7c9c7c7c99b9b9fc7c7c9afafb2d9eaecafafb2afafb2d9eaecafafb2c7c7c9d9eaecd9eaec -ffffffffffffc7c7c9d9eaecafafb2afafb2ffffffd9eaec8a8a8eafafb2d9eaecc7c7c9afafb2 -d9eaecc7c7c9ffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffd9eaecffffffffffffd9eaecd9eaecffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/dbi.gif b/Docs/Books/dbi.gif deleted file mode 100644 index de7bc2dae61f251a7bd45aded761cbb7ec433d46..0000000000000000000000000000000000000000 Binary files a/Docs/Books/dbi.gif and /dev/null differ diff --git a/Docs/Books/dbi.txt b/Docs/Books/dbi.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/dubois.eps b/Docs/Books/dubois.eps deleted file mode 100644 index 412693fe4051cbdf9fdfd7b7b95ca133293b1e8a..0000000000000000000000000000000000000000 --- a/Docs/Books/dubois.eps +++ /dev/null @@ -1,1203 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/dubois.eps -%%CreationDate: Sun Dec 31 14:29:20 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 383 -%%EndComments -%%BeginPreview: 100 130 1 130 -% fffffffffffffffffffffffff0 -% fe000000000000000000000010 -% d555242000000000000924aab0 -% fe000600000000000000000010 -% d5488d020000a0070440040950 -% fe00160048010004800011a010 -% d51214c0aa02400a4000437110 -% fe2821404800000940c102d050 -% aa0854410501081010b70d1410 -% fe14810240080222514184a890 -% aa223640b5114000012d4baa10 -% fe1d49140040048aaa42285490 -% ab894040800000000011552ab0 -% feb20a00000010000041215290 -% 55cab4aad28b7552aa94556a90 -% 7e34a5b78a6a555d5d75adb6b0 -% d5dfeaff8fd8ab76aabbfffff0 -% bf501c074235188eab502ff7f0 -% 6aeff76ac031702f56ea4fc9f0 -% dfbd5ad5f54de8556dd9557f70 -% 7577ed6a4aa575aadb76ddd7f0 -% 5fdbbaaaaaa9ca55eedddb6ff0 -% f576ab55554a35522beff6daf0 -% 5fdd6aaa5492852dd29bfdf7b0 -% f55695535aa474a22aaaa6ad70 -% 5f69d55adaa5baaaaaaaadfff0 -% 75debbaaf55aa556ad56daad70 -% df7bd4aad6d55faaaefb7dfbd0 -% 75dd5f75adab6aeaa2ababbf70 -% df77ebdaeadadeddd5d56ebff0 -% 75fd5aff3db7b7f55555556ab0 -% dfffff57effdffdfbabb6fdff0 -% 75d754b55aaa52b2aaa55aaaf0 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e030c01426100000000000010 -% 74030c020c3100000000000010 -% de010c02081100000000000010 -% 7401849b881900000000000010 -% de008cc0c81100000000000010 -% 7402c4406c1100000000000010 -% de044440641100000000000010 -% 74064c26462398000000000010 -% 5e00000001c010000000000010 -% f4000000006000000000000010 -% 5e0000c0001800000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4080000000000000000000010 -% 5e0f9000000000000000000010 -% 740f8000000000000000000010 -% de000000000000000000000010 -% 740d0000000000000000000010 -% de0fe000000000000000000010 -% 740a9000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 7ffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -283.464567 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 130 8 -% Transformation matrix -[ 100 0 0 130 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3 -b3b3b3b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6c9c2c4 -c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4 -b3b3b3c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3 -b3b3b3c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4b3b3b3 -b3b3b3b3b3b3b3b3b3c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4514e4f696869c9c2c4d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6e9e9e9 -e9e9e9e9e9e9d6d6d6d6d6d6e9e9e9d6d6d6e9e9e9d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6e9e9e9 -e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6e9e9e9818181514e4f6968699b9b9bd6d6d6e9e9e9 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6b3b3b3b3b3b3b3b3b3e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e99b9b9b818181818181b3b3b3 -e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6d6d6d6b3b3b3818181514e4f6968698181819b9b9bd6d6d6 -d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9e9e9e9d6d6d69b9b9bc9c2c4d6d6d6c9c2c49b9b9be9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6b3b3b3b3b3b3c9c2c49b9b9bb3b3b3 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffb3b3b3696869696869818181818181 -b3b3b3d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69b9b9b6968699b9b9bc9c2c4818181 -b3b3b3d6d6d6b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6c9c2c4c9c2c4b3b3b3c9c2c4 -d6d6d6c9c2c4d6d6d6c9c2c4d6d6d6c9c2c49b9b9bb3b3b38181818181819b9b9b6968699b9b9b -e9e9e9e9e9e9e9e9e9d6d6d6e9e9e9e9e9e99b9b9b9b9b9b9b9b9b818181818181818181b3b3b3 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9b3b3b39b9b9bc9c2c49b9b9b9b9b9bd6d6d6 -d6d6d6ffffffe9e9e9e9e9e9e9e9e9e9e9e9ffffffd6d6d69b9b9b8181818181819b9b9bb3b3b3 -9b9b9bb3b3b3e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9696869514e4f818181514e4f302f2f -696869d6d6d6c9c2c4d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6c9c2c4c9c2c49b9b9b9b9b9b -c9c2c4d6d6d6d6d6d6d6d6d6d6d6d69b9b9b9b9b9bb3b3b3b3b3b3b3b3b39b9b9b9b9b9b818181 -c9c2c4e9e9e9e9e9e9e9e9e9ffffffc9c2c49b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8181819b9b9b -c9c2c4ffffffe9e9e9e9e9e9ffffffffffffd6d6d6c9c2c4c9c2c4d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6e9e9e9ffffffffffffe9e9e9e9e9e9ffffffb3b3b39b9b9bb3b3b39b9b9b9b9b9b9b9b9b -9b9b9b9b9b9bd6d6d6e9e9e9e9e9e9e9e9e9ffffff9b9b9b696869b3b3b3d6d6d6e9e9e9d6d6d6 -d6d6d6b3b3b3d6d6d6e9e9e9d6d6d6d6d6d6e9e9e9b3b3b3514e4fb3b3b3818181514e4f9b9b9b -514e4f9b9b9bd6d6d6c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6c9c2c4b3b3b3818181 -9b9b9bd6d6d6d6d6d6ffffff9b9b9b9b9b9b9b9b9bc9c2c49b9b9bb3b3b3b3b3b3b3b3b3818181 -c9c2c4e9e9e9e9e9e9ffffffe9e9e99b9b9bb3b3b3b3b3b3b3b3b3d6d6d6d6d6d69b9b9bc9c2c4 -b3b3b3d6d6d6ffffffffffffffffffb3b3b3d6d6d6d6d6d6c9c2c4e9e9e9e9e9e9ffffffc9c2c4 -c9c2c4b3b3b3d6d6d6ffffffffffffffffffc9c2c49b9b9bd6d6d6c9c2c4c9c2c4d6d6d6b3b3b3 -9b9b9bb3b3b3b3b3b3e9e9e9e9e9e9ffffffd6d6d66968696968698181818181819b9b9b818181 -818181514e4f818181e9e9e9d6d6d6e9e9e9b3b3b36968698181819b9b9b8181819b9b9bb3b3b3 -818181696869c9c2c4d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6d6d6d68181819b9b9b -818181c9c2c4d6d6d69b9b9b9b9b9b9b9b9b9b9b9bb3b3b39b9b9bb3b3b3c9c2c49b9b9b9b9b9b -c9c2c4e9e9e9ffffffe9e9e99b9b9b9b9b9bc9c2c48181819b9b9bd6d6d6c9c2c49b9b9bb3b3b3 -b3b3b3c9c2c4ffffffffffffc9c2c49b9b9bd6d6d6d6d6d6b3b3b3d6d6d6e9e9e9e9e9e9b3b3b3 -d6d6d6c9c2c49b9b9be9e9e9ffffffd6d6d68181819b9b9bb3b3b3c9c2c4b3b3b3e9e9e9c9c2c4 -9b9b9b9b9b9b9b9b9bc9c2c4ffffffe9e9e99b9b9b8181819b9b9b9b9b9b9b9b9bb3b3b3c9c2c4 -818181818181514e4fb3b3b3ffffffffffff8181816968699b9b9b9b9b9b9b9b9bb3b3b3818181 -9b9b9b696869696869d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794e9e9e9d6d6d6c9c2c4818181b3b3b3 -b3b3b39b9b9bc9c2c49b9b9bb3b3b39b9b9b818181b3b3b3696869818181d6d6d69b9b9b9b9b9b -b3b3b3c9c2c4d6d6d6c9c2c49b9b9bb3b3b3b3b3b3b3b3b39b9b9b818181b3b3b3b3b3b3b3b3b3 -c9c2c4b3b3b3b3b3b3d6d6d69b9b9bc9c2c4c9c2c4c9c2c4c9c2c48181818181819b9b9bd6d6d6 -e9e9e9d6d6d6c9c2c4c9c2c4ffffffb3b3b3b3b3b3e9e9e9d6d6d6d6d6d6b3b3b3b3b3b3e9e9e9 -c9c2c4d6d6d6c9c2c4b3b3b3e9e9e9c9c2c4818181b3b3b39b9b9b9b9b9bb3b3b3818181818181 -9b9b9b8181819b9b9b696869d6d6d6c9c2c4514e4f9b9b9b9b9b9b696869514e4f818181818181 -9b9b9b818181818181c9c2c4e9e9e9d6d6d6d6d6d6d6d6d6010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6d6d6d69b9b9b514e4f -6968699b9b9b818181b3b3b36968699b9b9bb3b3b3818181b3b3b39b9b9b818181b3b3b39b9b9b -c9c2c49b9b9bb3b3b3b3b3b3b3b3b3d6d6d6b3b3b3c9c2c4c9c2c49b9b9bd6d6d6b3b3b3c9c2c4 -c9c2c4b3b3b3c9c2c49b9b9bb3b3b3c9c2c4c9c2c4c9c2c4b3b3b3b3b3b3c9c2c4d6d6d6d6d6d6 -d6d6d6c9c2c4b3b3b3c9c2c49b9b9bc9c2c4d6d6d6c9c2c4c9c2c4b3b3b3b3b3b39b9b9bc9c2c4 -b3b3b3b3b3b3c9c2c49b9b9b9b9b9b9b9b9bb3b3b3b3b3b3b3b3b3c9c2c49b9b9b9b9b9bb3b3b3 -9b9b9b818181b3b3b39b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b9b9b9b9b9b9b818181818181 -8181818181818181818181819b9b9bb3b3b39b9b9bc9c2c4010101 -010101f50237f50237f50237f50237f50237f50237696869818181d6d6d6c9c2c4d6d6d6696869 -818181d6d6d6696869e9e9e9818181c9c2c4e9e9e99b9b9be9e9e9c9c2c4c9c2c4ffffff9b9b9b -e9e9e9b3b3b3d6d6d6d6d6d6b3b3b3ffffff9b9b9be9e9e9e9e9e9d6d6d6ffffffd6d6d6e9e9e9 -d6d6d6d6d6d6ffffffe9e9e9ffffffe9e9e9ffffffffffffe9e9e9ffffffffffffffffffe9e9e9 -ffffffffffffe9e9e9ffffffc9c2c4e9e9e9e9e9e9d6d6d6e9e9e99b9b9be9e9e9b3b3b3c9c2c4 -c9c2c49b9b9bd6d6d69b9b9be9e9e9b3b3b3c9c2c4c9c2c49b9b9be9e9e9818181ffffffc9c2c4 -c9c2c4696869d6d6d68181819b9b9b9b9b9bb3b3b3696869b3b3b3696869b3b3b39b9b9b9b9b9b -9b9b9b514e4fb3b3b3514e4f9b9b9b514e4f9b9b9bb3b3b3010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869696869696869818181 -b3b3b39b9b9b818181e9e9e9b3b3b3b3b3b3e9e9e9b3b3b3c9c2c4b3b3b3d6d6d6e9e9e9c9c2c4 -d6d6d6b3b3b3e9e9e9e9e9e9c9c2c4d6d6d6c9c2c4d6d6d6c9c2c4c9c2c4e9e9e9e9e9e9ffffff -e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4 -c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffe9e9e9ffffffd6d6d6ffffffe9e9e9e9e9e9 -ffffffc9c2c4ffffffd6d6d6ffffffe9e9e9d6d6d6e9e9e9b3b3b3e9e9e99b9b9be9e9e9c9c2c4 -c9c2c49b9b9bffffff8181819b9b9b696869c9c2c49b9b9bffffff818181c9c2c49b9b9b696869 -818181696869e9e9e9514e4fffffff514e4fb3b3b3d6d6d6010101 -010101f50237f50237f50237f50237f50237f50237514e4f6968696968696968699b9b9b9b9b9b -8181819b9b9b9b9b9b9b9b9b8181818181818181818181818181818181819b9b9b9b9b9b9b9b9b -9b9b9b9b9b9bb3b3b39b9b9bb3b3b39b9b9b696869818181b3b3b3b3b3b3b3b3b3c9c2c4b3b3b3 -b3b3b3b3b3b3c9c2c4b3b3b3d6d6d6b3b3b38181818181818181819b9b9b9b9b9b696869514e4f -6968699b9b9b9b9b9bb3b3b39b9b9b9b9b9b9b9b9b9b9b9bc9c2c4b3b3b39b9b9bb3b3b39b9b9b -b3b3b39b9b9bd6d6d68181819b9b9b9b9b9bb3b3b39b9b9b9b9b9bc9c2c49b9b9bb3b3b39b9b9b -b3b3b3b3b3b3c9c2c48181816968696968699b9b9b9b9b9bd6d6d66968699b9b9b696869302f2f -818181818181d6d6d6696869c9c2c4514e4f9b9b9bc9c2c4010101 -010101f50237f50237f50237f50237f50237f50237696869b78794818181818181818181818181 -8181819b9b9b9b9b9b8181819b9b9b8181818181819b9b9b818181818181818181696869818181 -696869696869818181696869696869302f2f0101019b9b9bc9c2c4c9c2c49b9b9b9b9b9b818181 -8181819b9b9b8181818181819b9b9b6968699b9b9b9b9b9bb3b3b39b9b9b696869696869696869 -8181819b9b9b6968696968698181818181816968696968696968696968696968699b9b9b818181 -6968699b9b9b818181514e4f302f2f818181818181818181696869696869302f2f6968699b9b9b -818181696869696869696869696869818181514e4f514e4f696869010101514e4f696869514e4f -696869696869514e4f696869696869818181818181302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869818181696869514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f696869696869818181818181c9c2c4696869302f2f -302f2f302f2f302f2f302f2f010101010101302f2fb3b3b3d6d6d6e9e9e9818181302f2f302f2f -514e4f514e4f514e4f514e4f010101514e4f818181c9c2c49b9b9b9b9b9bc9c2c4818181696869 -818181d6d6d6818181514e4f696869514e4f302f2f302f2f514e4f302f2f302f2fb3b3b3818181 -8181818181816968696968696968696968698181818181819b9b9b696869010101696869818181 -514e4f514e4f514e4f302f2f302f2f302f2f010101302f2f302f2f302f2f514e4f302f2f302f2f -302f2f302f2f302f2f010101302f2f302f2f010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869818181696869818181 -9b9b9b8181819b9b9b9b9b9b9b9b9b818181696869696869696869818181d6d6d6b3b3b3818181 -9b9b9b9b9b9b818181818181302f2f0101016968699b9b9bb3b3b3ffffffb3b3b3818181818181 -9b9b9bb3b3b39b9b9b9b9b9b302f2f6968699b9b9bb3b3b39b9b9be9e9e9ffffffe9e9e9302f2f -514e4fd6d6d6b3b3b39b9b9b9b9b9b8181819b9b9bb3b3b3696869302f2f302f2f9b9b9b818181 -6968699b9b9b696869818181818181696869696869696869696869696869514e4f818181c9c2c4 -9b9b9bb3b3b39b9b9b9b9b9b818181818181514e4f302f2f302f2f010101302f2f010101010101 -302f2f514e4f514e4f514e4f302f2f010101010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869696869696869514e4f -696869696869818181696869696869696869302f2f514e4f696869696869696869818181818181 -9b9b9b9b9b9b696869818181696869514e4f696869696869818181d6d6d6d6d6d6d6d6d6c9c2c4 -d6d6d6d6d6d6c9c2c4818181302f2f818181e9e9e9d6d6d6696869696869514e4f696869514e4f -c9c2c4c9c2c4d6d6d6e9e9e9d6d6d6c9c2c4c9c2c4b3b3b3514e4f302f2f010101514e4f818181 -818181696869818181696869696869696869696869514e4f514e4f6968698181818181819b9b9b -c9c2c4e9e9e9d6d6d6b3b3b39b9b9bc9c2c4696869302f2f302f2f302f2f010101514e4f818181 -9b9b9b818181696869818181302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f696869514e4f -302f2f514e4f514e4f696869514e4f696869696869514e4f696869696869696869696869514e4f -514e4f696869818181818181696869818181514e4f302f2f6968698181819b9b9bb3b3b3b3b3b3 -b3b3b3b3b3b39b9b9b8181819b9b9b818181818181c9c2c4514e4f514e4f302f2f302f2f514e4f -6968699b9b9be9e9e9d6d6d6c9c2c4b3b3b39b9b9b818181818181514e4f514e4f818181818181 -514e4f696869696869818181696869514e4f696869514e4f302f2f514e4f696869696869818181 -9b9b9b9b9b9b9b9b9b818181818181818181696869696869514e4f696869514e4f514e4f514e4f -514e4f514e4f514e4f302f2f514e4f514e4f514e4f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f302f2f514e4f -696869514e4f302f2f514e4f514e4f514e4f696869514e4f514e4f818181818181696869302f2f -514e4f8181819b9b9b8181818181819b9b9b818181696869818181818181818181818181696869 -8181818181818181819b9b9b9b9b9b9b9b9b6968699b9b9b696869514e4f514e4f514e4f514e4f -6968699b9b9b9b9b9b9b9b9b818181818181818181818181818181696869818181696869514e4f -514e4f514e4f696869696869696869696869514e4f696869514e4f010101514e4f696869696869 -696869696869514e4f696869696869514e4f302f2f514e4f696869514e4f514e4f514e4f514e4f -514e4f514e4f302f2f302f2f302f2f514e4f514e4f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869514e4f514e4f514e4f -696869696869302f2f302f2f696869696869514e4f302f2f696869696869818181818181818181 -8181818181818181818181818181819b9b9b9b9b9b818181818181818181696869818181818181 -8181816968698181818181818181819b9b9b9b9b9b9b9b9b9b9b9b514e4f514e4f696869818181 -9b9b9b8181818181818181818181818181818181819b9b9b9b9b9b818181696869696869514e4f -514e4f514e4f696869514e4f514e4f514e4f696869514e4f696869696869514e4f514e4f514e4f -696869514e4f302f2f514e4f696869514e4f514e4f514e4f696869514e4f514e4f514e4f696869 -818181696869514e4f302f2f302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f696869514e4f514e4f -302f2f696869696869696869696869818181696869696869696869514e4f696869696869696869 -8181816968698181818181818181819b9b9b9b9b9b8181816968696968698181818181819b9b9b -9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b818181818181b3b3b3818181818181818181818181 -8181818181816968698181819b9b9b9b9b9b9b9b9b8181818181819b9b9b9b9b9b818181818181 -818181696869818181818181696869302f2f302f2f302f2f302f2f514e4f696869302f2f302f2f -302f2f302f2f302f2f302f2f514e4f514e4f696869696869696869514e4f514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f302f2f010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869514e4f696869696869514e4f -514e4f514e4f696869696869696869696869818181818181818181696869818181818181818181 -8181818181819b9b9b8181818181818181819b9b9b9b9b9b8181816968698181819b9b9b9b9b9b -9b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bb3b3b3b3b3b3 -9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8181818181819b9b9b9b9b9b818181 -8181819b9b9b8181819b9b9b9b9b9b818181818181696869818181818181514e4f696869514e4f -302f2f302f2f302f2f302f2f302f2f302f2f514e4f514e4f514e4f696869514e4f514e4f514e4f -514e4f696869696869514e4f514e4f514e4f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869696869696869696869696869 -6968696968698181818181818181818181818181818181818181819b9b9b9b9b9b818181696869 -8181819b9b9b9b9b9b9b9b9b8181816968698181819b9b9b818181696869696869818181818181 -9b9b9b8181819b9b9b9b9b9bb3b3b3b3b3b3b3b3b3b3b3b3b3b3b39b9b9b818181818181818181 -8181818181819b9b9b9b9b9b9b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b818181818181818181 -8181816968696968698181819b9b9b9b9b9b8181818181819b9b9b8181818181818181819b9b9b -818181818181696869696869696869818181696869696869696869696869514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f514e4f696869010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869696869696869696869696869 -696869818181696869696869696869818181696869818181818181818181696869696869696869 -818181696869696869818181818181696869696869514e4f696869514e4f514e4f696869818181 -8181818181819b9b9b8181819b9b9bb3b3b39b9b9b9b9b9b9b9b9b818181696869302f2f302f2f -514e4f8181819b9b9b9b9b9b8181818181818181818181818181819b9b9b8181818181819b9b9b -9b9b9b8181819b9b9b8181818181818181819b9b9b818181818181818181818181818181696869 -696869818181696869696869696869696869696869696869696869514e4f514e4f514e4f514e4f -302f2f302f2f302f2f302f2f514e4f514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f514e4f514e4f -696869696869696869514e4f514e4f514e4f514e4f696869696869696869696869696869696869 -818181696869696869818181818181696869302f2f514e4f514e4f514e4f696869818181818181 -696869818181818181818181818181818181818181818181818181696869818181696869818181 -818181696869696869818181696869818181818181696869818181696869514e4f8181819b9b9b -818181818181818181696869514e4f696869818181818181696869696869696869818181696869 -696869818181818181696869696869514e4f696869696869696869696869696869696869514e4f -514e4f514e4f514e4f514e4f696869514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f302f2f302f2f302f2f -514e4f696869514e4f514e4f696869696869696869818181696869696869818181818181696869 -696869818181818181818181818181818181514e4f514e4f818181696869696869696869696869 -696869696869696869818181818181696869696869696869818181696869818181818181818181 -696869514e4f514e4f514e4f6968696968696968698181818181819b9b9b696869696869818181 -818181696869818181514e4f514e4f514e4f696869302f2f514e4f696869514e4f696869818181 -514e4f514e4f696869696869696869514e4f302f2f514e4f696869514e4f514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f302f2f514e4f514e4f302f2f -514e4f696869514e4f696869696869818181696869696869514e4f514e4f696869696869696869 -696869696869696869818181818181818181696869514e4f514e4f696869696869696869696869 -696869696869696869696869696869818181696869818181696869696869696869696869696869 -696869696869514e4f514e4f514e4f514e4f514e4f818181818181818181696869818181818181 -8181818181819b9b9b9b9b9b9b9b9b818181696869514e4f696869696869696869696869696869 -514e4f514e4f514e4f696869514e4f514e4f514e4f514e4f514e4f302f2f514e4f514e4f514e4f -302f2f010101010101302f2f302f2f696869514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f302f2f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f696869696869696869514e4f302f2f302f2f302f2f -696869696869514e4f696869696869696869696869696869514e4f818181514e4f696869696869 -696869514e4f696869696869696869696869696869818181696869514e4f514e4f696869514e4f -514e4f514e4f514e4f696869302f2f302f2f514e4f514e4f696869514e4f696869696869696869 -514e4f8181819b9b9b9b9b9b818181818181818181696869696869696869818181696869818181 -696869514e4f696869696869696869818181818181696869514e4f514e4f696869696869514e4f -302f2f302f2f302f2f302f2f302f2f514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237302f2f302f2f302f2f302f2f302f2f302f2f -514e4f514e4f302f2f514e4f514e4f514e4f302f2f696869696869514e4f514e4f514e4f514e4f -514e4f514e4f302f2f514e4f302f2f514e4f696869818181696869514e4f696869696869696869 -514e4f514e4f696869696869696869514e4f696869696869514e4f514e4f514e4f696869514e4f -514e4f302f2f514e4f514e4f514e4f302f2f514e4f514e4f514e4f696869818181696869696869 -696869696869818181818181818181818181818181818181696869818181818181818181818181 -818181818181818181696869696869696869696869696869696869818181818181696869696869 -696869696869514e4f514e4f514e4f302f2f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237302f2f010101302f2f302f2f302f2f302f2f -010101010101302f2f302f2f302f2f302f2f302f2f302f2f514e4f514e4f696869696869302f2f -514e4f514e4f696869302f2f302f2f514e4f302f2f302f2f696869514e4f302f2f302f2f514e4f -302f2f514e4f514e4f514e4f302f2f302f2f302f2f514e4f514e4f302f2f302f2f302f2f514e4f -514e4f302f2f010101302f2f302f2f302f2f514e4f514e4f302f2f514e4f514e4f514e4f514e4f -818181696869514e4f696869696869696869818181818181696869696869696869514e4f696869 -696869696869696869514e4f696869696869302f2f302f2f302f2f514e4f514e4f302f2f514e4f -514e4f514e4f514e4f514e4f302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f302f2f514e4f514e4f514e4f -696869514e4f514e4f696869514e4f696869696869514e4f514e4f696869818181818181818181 -696869696869818181818181696869514e4f514e4f514e4f696869818181514e4f514e4f696869 -696869696869696869514e4f514e4f514e4f696869818181818181818181818181818181696869 -818181818181696869696869514e4f514e4f696869514e4f696869818181696869696869696869 -6968698181816968696968696968698181818181819b9b9b9b9b9b818181818181818181818181 -818181818181818181696869818181818181696869696869696869514e4f514e4f696869818181 -818181696869696869696869514e4f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -ffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9ffffffffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffffffffffffffffffffe9e9e9 -e9e9e9ffffffffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffffffffffffffe9e9e9e9e9e9 -ffffffffffffe9e9e9e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffff -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -d6d6d6d6d6d6ffffffffffffffffffffffffffffffe9e9e9d6d6d6d6d6d6ffffffffffffffffff -ffffffffffffffffffffffffffffffe9e9e9b3b3b3d6d6d6ffffffffffffffffffffffffffffff -c9c2c4c9c2c4d6d6d6ffffffffffffffffffffffffd6d6d6d6d6d6d6d6d6e9e9e9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -d6d6d6302f2f818181ffffffffffffffffffffffff818181302f2fd6d6d6ffffffffffffffffff -ffffffffffffffffffffffffb3b3b39b9b9bc9c2c4514e4fb3b3b3ffffffffffff9b9b9b696869 -d6d6d6d6d6d6818181696869e9e9e9ffffffffffffb3b3b3302f2f9b9b9be9e9e9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffff302f2f302f2fffffffffffffffffffffffff514e4f010101ffffffffffffffffffffffff -ffffffffffffffffffe9e9e9302f2fe9e9e9ffffffc9c2c4b3b3b3ffffff9b9b9b010101d6d6d6 -ffffffffffffe9e9e9514e4f514e4fffffffffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffff818181010101b3b3b3ffffffffffffd6d6d6696869010101ffffffe9e9e9c9c2c4e9e9e9 -ffffffe9e9e9c9c2c4e9e9e90101019b9b9bffffffffffffffffffffffff302f2f9b9b9bffffff -ffffffffffffffffffd6d6d60101019b9b9bffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffb3b3b3818181514e4fffffffe9e9e9b3b3b3b3b3b3010101ffffffd6d6d60101019b9b9b -ffffff818181514e4fffffff696869010101696869e9e9e9ffffffc9c2c4010101d6d6d6ffffff -ffffffffffffffffffe9e9e9302f2f818181ffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -e9e9e9b3b3b3c9c2c4010101d6d6d6d6d6d6b3b3b3c9c2c4302f2fe9e9e9ffffff696869514e4f -ffffffc9c2c4d6d6d6ffffffffffffb3b3b3010101302f2fe9e9e9c9c2c4010101c9c2c4ffffff -ffffffffffffffffffffffff514e4f696869ffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -c9c2c4b3b3b3ffffff514e4f696869b3b3b3ffffffd6d6d6302f2fe9e9e9ffffffd6d6d6302f2f -d6d6d6c9c2c4ffffffffffffffffffffffffe9e9e9302f2f302f2fffffff302f2f696869ffffff -ffffffffffffffffffe9e9e90101019b9b9bffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -818181b3b3b3ffffff9b9b9b010101b3b3b3ffffffe9e9e9302f2fe9e9e9ffffffffffff302f2f -818181e9e9e9ffffff9b9b9bd6d6d6ffffffffffff514e4f302f2fffffff818181010101c9c2c4 -ffffffffffffffffff9b9b9b302f2fe9e9e9ffffffe9e9e9010101b3b3b3ffffffffffffe9e9e9 -b3b3b3e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -010101514e4fe9e9e9ffffff696869ffffffffffff818181010101818181ffffffffffffb3b3b3 -302f2fffffffffffffb3b3b3514e4fb3b3b3b3b3b3514e4fd6d6d6ffffffffffff818181302f2f -9b9b9bd6d6d6d6d6d6696869c9c2c4ffffffffffff9b9b9b010101696869c9c2c4c9c2c4514e4f -818181ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -b3b3b3b3b3b3e9e9e9ffffffe9e9e9ffffffffffffc9c2c4b3b3b3b3b3b3ffffffffffffffffff -9b9b9bffffffffffffffffffc9c2c4c9c2c4c9c2c4e9e9e9ffffffffffffffffffffffffd6d6d6 -818181302f2f514e4fffffffffffffffffffffffffc9c2c4b3b3b3c9c2c4c9c2c4c9c2c49b9b9b -e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9b3b3b3 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc9c2c4302f2f302f2f818181d6d6d6ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff514e4f818181 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff818181302f2f818181ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4fffffffffffffffffffdd7e8fec2d9 -fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fdd7e8fdd7e8fec2d9fdd7e8ffffff -fcabc5fcabc5fdd7e8fec2d9fec2d9fec2d9fcabc5fec2d9fffffffdd7e8fcabc5fcabc5fec2d9 -fec2d9fec2d9fec2d9fdd7e8fffffffdd7e8fcabc5fec2d9fdd7e8fcabc5fcabc5fec2d9fdd7e8 -fdd7e8fdd7e8fffffffdd7e8fcabc5fcabc5fdd7e8fec2d9fdd7e8fec2d9fec2d9fffffffec2d9 -fcabc5fec2d9fec2d9fcabc5fcabc5fec2d9fec2d9fec2d9fec2d9fdd7e8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -fdd7e8fec2d9fec2d9fec2d9fec2d9fec2d9fdd7e8fec2d9fdd7e8fdd7e8fec2d9fdd7e8ffffff -fec2d9fec2d9fdd7e8fdd7e8fdd7e8fec2d9fcabc5fec2d9fffffffffffffdd7e8fec2d9fec2d9 -fec2d9fdd7e8fec2d9ffffffffffffe9e9e9fdd7e8e9e9e9fdd7e8fcabc5fec2d9fdd7e8fdd7e8 -fec2d9fdd7e8ffffffe9e9e9fec2d9fec2d9fec2d9fdd7e8fdd7e8fec2d9fec2d9fffffffdd7e8 -fec2d9fec2d9fec2d9fcabc5fec2d9fdd7e8fec2d9fec2d9fec2d9e9e9e9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -c9c2c4b3b3b3b3b3b3d6d6d6e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffc9c2c4 -ffffffffffffffffffd6d6d6c9c2c4d6d6d6ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9302f2f -9b9b9bc9c2c4d6d6d6d6d6d6ffffffc9c2c4d6d6d6ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffd6d6d6010101 -302f2f302f2f302f2f514e4fe9e9e9ffffffb3b3b3e9e9e9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9514e4f -514e4f514e4f302f2f514e4fe9e9e9ffffffd6d6d6d6d6d6ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e99b9b9b -d6d6d6e9e9e9b3b3b3d6d6d6ffffffffffffffffffc9c2c4e9e9e9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9302f2f -818181b3b3b3818181c9c2c4c9c2c49b9b9bc9c2c4d6d6d6e9e9e9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd6d6d6e9e9e9ffffffffffffffffffffffffffffffe9e9e9e9e9e9e9e9e9ffffffd6d6d6 -e9e9e9ffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffd6d6d6302f2f -514e4f514e4f302f2f302f2f514e4f6968699b9b9bffffffd6d6d6ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e9e9e9c9c2c4e9e9e9d6d6d6d6d6d6e9e9e9e9e9e9ffffffe9e9e9e9e9e9d6d6d6e9e9e9c9c2c4 -c9c2c4e9e9e9e9e9e9d6d6d6d6d6d6ffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9514e4f -696869696869514e4f514e4f8181819b9b9b818181ffffffd6d6d6ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe9e9e9ffffffd6d6d6d6d6d6d6d6d6e9e9e9ffffffd6d6d6e9e9e9d6d6d6e9e9e9e9e9e9 -d6d6d6e9e9e9e9e9e9d6d6d6e9e9e9ffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9ffffffd6d6d6d6d6d6ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/dubois.gif b/Docs/Books/dubois.gif deleted file mode 100644 index 36e0af7a41d862855bfb9734f693d6e016926ca5..0000000000000000000000000000000000000000 Binary files a/Docs/Books/dubois.gif and /dev/null differ diff --git a/Docs/Books/dubois.txt b/Docs/Books/dubois.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/ecomm.eps b/Docs/Books/ecomm.eps deleted file mode 100644 index 4d4bf2447e127a4472acdc699489af6fb2b49421..0000000000000000000000000000000000000000 --- a/Docs/Books/ecomm.eps +++ /dev/null @@ -1,1149 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/ecomm.eps -%%CreationDate: Sun Dec 31 14:29:34 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 366 -%%EndComments -%%BeginPreview: 100 124 1 124 -% fffffffffffffffffffffffff0 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 9ff0055555555000000290c210 -% 9ff807fffffff0000002fefb10 -% 90900555555550000002aad210 -% 800007fffffff0000002482910 -% 9de006aaaaaaa0000000000010 -% 9be000002ffff0000000000010 -% 9ec0000bfaaaa00000002a6f10 -% 840002feafffe000000076f210 -% 1dc007d5fa9000000000295f10 -% 95a006bf550000000000000010 -% 9ee007eafffd40000000000010 -% 0a40001faab7f0000000000010 -% 16c000002fed50000000000010 -% 9fa00555ad5ff0000000000010 -% 99e007ff7bf550000000000010 -% 0d800555d6aff0000000000010 -% 924007ff7ffaa0000000000010 -% 1fe006aad557f0000000000010 -% 9fe00000000000000000000010 -% 1fc04000000000000000000010 -% 8021c000005c00000000000010 -% 1ff9800017f400000000000010 -% 9061600bfd5c00000000000010 -% 0a81e2feabf400000000000010 -% 9fe95fb5feac00000000000010 -% 8401f6ef200000000000000010 -% 1ee0adbad54000000000000010 -% 1b607feffffc00000000000010 -% 9fe0005aaaac00000000000010 -% 80000002fff800000000000010 -% 1ff8000002ac00000000000010 -% 8a300000001400000000000010 -% 08800000000000000000000010 -% 9de000aa80aa80000000000010 -% 1b6003ffc3ffc0000000000010 -% 8ec00555455570000000000010 -% 000007ff87ffd0000000000010 -% 800005554d5570000000000010 -% 000007d54fabd0000000000010 -% 800006801a00b0000000000010 -% 000007927612e0000000000010 -% 8000057fde7fb0000000000010 -% 800007eab42ae0000000000010 -% 0000055ff87fa0000000000010 -% 000003f5502ae0000000000010 -% 80000095505500000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 8000017fffff40000000000010 -% 000003d55555e0000000000010 -% 800006bfffff50000000000010 -% 000005eaaaaaf0000000000010 -% 8000077fffffa0000000000010 -% 00000d800000f0000000000010 -% 80001b000000d0000000000010 -% 800017edb6dbb0000000000010 -% 00003d5b6db6e0000000000010 -% 000037ffffffb0000000000010 -% 800032aaaaaae0000000000010 -% 800003ffffffa0000000000010 -% 00000012244400000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 800007ffffffe0000000001110 -% 00000555555570000183023790 -% 800007ffffffd0000081023110 -% 000006aaaaaab0000040813190 -% 800005ffffffe0000040802190 -% 00000700000010000220402090 -% 80000680000000000000004090 -% 00000580000000000080002890 -% 80000500000000000200205710 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% fffffffffffffffffffffffff0 -% 7ffbffffffffffffffbbfffbd0 -% edb76fefffffbf6db6baad6eb0 -% 76edfb7edbf6f5db7ef5dbeb50 -% 6db56eabfedf6ed6d55e555ed0 -% f6efdb6dabfbf5b5bb7bbfb5b0 -% b5baaad6daaeaeded6b7aa6e70 -% 6eabea2d56b175b5b56b6edad0 -% db5d55d5bbabaedb6f37e5bdf0 -% 75f34b3b6d76db6d509abb6b70 -% 7eaab4d6d6db6adbaea7f5f7d0 -% edddaabb7b6d576cab455d4db0 -% 7b7755adadb6d1aba899b65f70 -% d7aaaadb6b6d2a545744edbb70 -% 7b6d556ad59aaaab5a665f56d0 -% bedb5ab76eeaaa54aa9935ddb0 -% 6bb7936ddb5b55555b699b66f0 -% fd6aaadab6ea4aaab5502fdbb0 -% 6bad752da95555556b2512fd70 -% feb7aaa2dfb554aab6db4bb7d0 -% 5b6aba88aaaa4a5555b69d7cb0 -% 7ed56bb35b6db5aaab6e36ef70 -% d5b6d542edb6faf5765cbdddb0 -% 7bf56badb6dad552dbfdeab7d0 -% ef6d9b52d9b77cd76d55b75af0 -% 75eb75eb6f6deab5537bedefb0 -% dd7ed7aad55ab5d5eed755b3f0 -% 7b6eaad5afedfd6b1b4edbdad0 -% eadbfbf556b6b554adbfb6adf0 -% 415f55abebedfdbb766d6f7cb0 -% e4ebb5f55ddbb56edaddbafb70 -% 41dddbaadefd7d5b6dfbeef6b0 -% 68d5b5f5eb6aeaffdab6bdec90 -% c1db5bab5dbffdb6ededf7e8f0 -% 6ae56af5eb76b7ffbbdbb7f350 -% d54900d75daffcdaf5f76fcdb0 -% 6ab7ffebf7fdadfbbbdfdfadd0 -% ff7f75b6fdabffbf77febf5b70 -% 7ffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 351.496063 translate -283.464567 -351.496063 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 124 8 -% Transformation matrix -[ 100 0 0 124 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeff0edeff0edeff0edeff0edeffefefefefefefefefefefefefefefef0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ff0edefd7dade4f595b4f595b4f595b4f595b4f595b4f595b4f595b4f595b4f595b8496a4 -f0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadeed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -d7dadef0edefd7daded7daded7daded7daded7daded7daded7dadef0edeff0edeff0edeff0edef -d7daded7daded7daded7daded7daded7daded7daded7daded7daded7daded7dadef0edefa9bbc3 -8496a4d7dade4f595ba9bbc3a9bbc38496a48496a4d7daded7daded7dade8496a44f595b8496a4 -d7daded7daded7dade8496a4d7dadef0edeff0edeff0edef060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefea9bbc3 -4f595bf0edef4f595b4f595b4f595b4f595b4f595b4f595b4f595ba9bbc34f595b060e0f4f595b -4f595b4f595bd7dade4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefef0edef060e0f8496a4d7daded7dade8496a4060e0fd7daded7dade4f595b4f595b -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefea9bbc3 -4f595bd7dade4f595b4f595b4f595b4f595b4f595b4f595b4f595bfefefe4f595b060e0f4f595b -4f595b4f595bd7dade4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefefefefed7daded7dadef0edeffefefef0edefa9bbc3f0edeffefefed7daded7dade -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefed7dade -8496a4f0edef8496a48496a48496a4a9bbc38496a48496a4a9bbc3fefefea9bbc38496a48496a4 -8496a48496a4f0edefa9bbc38496a4f0edeffefefefefefe060e0f -060e0ffefefefefefe4f595b060e0f4f595bd7dade4f595b060e0f060e0f4f595bfefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edefd7dadefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefed7dade060e0f4f595b8496a44f595b060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefef0edefd7dadef0edef -fefefed7daded7daded7dadef0edeffefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0fa9bbc34f595b060e0f4f595bf0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a48496a48496a48496a48496a48496a4a9bbc3a9bbc3060e0f4f595b -8496a44f595b4f595b4f595b4f595bf0edeffefefefefefe060e0f -060e0ffefefefefefed7dade8496a48496a4a9bbc3fefefea9bbc38496a4d7dadefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a44f595b4f595b4f595b4f595b4f595b8496a4a9bbc3060e0f4f595b -4f595b8496a48496a44f595b4f595bf0edeffefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595bf0edef4f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516ed4a54ed4a54ed4a54ed4a54ef8b8fef8b8ff2c8c9f2c8c9f2c8c9f0edeff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a44f595b4f595b4f595b8496a48496a48496a4d7dade4f595b8496a4 -4f595b4f595b4f595b4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b8496a4060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -ed4a54ef8b8fef8b8ff2c8c9f2c8c9f0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edefd7daded7daded7dadef0edeff0edeff0edeff0edefd7dadea9bbc3 -a9bbc3d7dadef0edefa9bbc3d7dadef0edeffefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f8496a44f595b060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ed4a54ef8b8fef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc38496a48496a48496a4fefefe8496a48496a4a9bbc3fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8f -ed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595b4f595b4f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b060e0f060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b8496a4060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595ba9bbc34f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a48496a48496a48496a48496a48496a48496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b4f595b4f595b4f595b4f595b4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0f060e0f060e0f060e0f4f595bfefefefefefe -fefefef0edefef8b8fef8b8fef8b8ff2c8c9fefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefed7dadea9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc38496a4d7daded7dade -fefefef0edeff40516f40516f40516ef8b8ffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b -fefefef0edeff40516f40516f40516ef8b8ffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b8496a4a9bbc3a9bbc3a9bbc3a9bbc38496a44f595ba9bbc3d7dade -fefefef0edeff40516f40516f40516ed4a54fefefefefefefefefefefefefefefef0edeff2c8c9 -f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a4a9bbc38496a4a9bbc3a9bbc38496a48496a4d7dadea9bbc3 -fefefef0edeff40516f40516f40516f40516ef8b8fef8b8fef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b8496a4060e0f -fefefef0edeff40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc3a9bbc38496a4a9bbc3d7dadea9bbc3a9bbc3d7dadef0edefd7dade -fefefefefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ef8b8fef8b8fef8b8fef8b8f -f2c8c9f2c8c9f2c8c9f0edeff0edeff0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0fd7dade4f595b060e0f4f595bfefefefefefe -fefefefefefeef8b8ff40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8f -ef8b8fef8b8fef8b8ff2c8c9f2c8c9f2c8c9f2c8c9fefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b8496a44f595b4f595b8496a44f595b060e0ff0edeffefefe -fefefefefefefefefef2c8c9ed4a54f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595bfefefefefefe -fefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3d7dadefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f4f595b4f595b4f595b4f595b4f595b060e0f060e0f4f595b -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edefd7dadef2c8c9ef8b8fef8b8fed4a54ed4a54 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a48496a44f595b8496a48496a48496a48496a44f595b8496a4 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeff0edeff2c8c9ef8b8fef8b8fed4a54ed4a54f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeffefefe060e0f -060e0ffefefefefefea9bbc38496a48496a4fefefea9bbc38496a48496a4a9bbc3fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edef060e0f -060e0ffefefef0edef060e0f060e0f4f595b8496a4060e0f060e0f060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edefef8b8fed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ffefefefefefefefefefefefef0edef -ef8b8fed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefef0edef060e0f -060e0ffefefed7dade060e0f4f595b4f595b060e0f4f595b8496a44f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefef0edefed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516fefefefefefefefefef0edefed4a54 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeffefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595b4f595bf0edef4f595b060e0f8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54fefefefefefefefefeed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54fefefefefefeef8b8ff40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefef0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516fefefef0edeff40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff2c8c9f40516f40516f40516f40516f40516 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f0edefef8b8ff40516f40516f40516 -f40516f40516ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516f40516f40516f40516 -f2c8c9f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edef -d7daded7daded7daded7daded7daded7daded7daded7dade060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff2c8c9f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f2c8c9fefefefefefef0edeff0edeff0edeffefefef2c8c9f40516f40516f40516f40516 -f2c8c9f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7daded7daded7daded7dade -d7daded7daded7daded7daded7daded7daded7daded7dade060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516ed4a54 -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8ff40516f40516f40516f40516f40516 -ef8b8ffefefef2c8c9ef8b8fef8b8fef8b8fef8b8fef8b8fed4a54f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edef -fefefefefefef0edeff0edeff0edeff0edeffefefef0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edef -f0edeffefefefefefefefefef0edeff0edeffefefef0edef060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadef40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ef8b8f -f0edeff0edefed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7daded7dade -d7daded7daded7daded7daded7daded7daded7dadef0edef060e0f -060e0ffefefefefefefefefefefefef0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54fefefe -fefefef0edefed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f0edeffefefe -fefefefefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef2c8c9ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefefefefe -fefefefefefeed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeff0edeffefefefefefef0edeff0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef2c8c9ed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54f2c8c9fefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeffefefefefefef0edeffefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516ed4a54 -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fed4a54f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f2c8c9fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefeef8b8ff40516f40516f40516f40516f40516f40516f40516 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefeef8b8ff40516f40516ed4a54f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefeef8b8ff40516f40516ef8b8fef8b8ff40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef2c8c9ed4a54ef8b8ff0edefed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefef0edefef8b8fef8b8fef8b8f -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff2c8c9fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeff0edeffefefef0edeff0edeffefefef0edeff0edef -f0edeff0edeffefefefefefefefefefefefef0edeff0edeff0edeff0edeff0edeffefefef0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7daded7daded7daded7daded7daded7daded7daded7daded7daded7dade -d7daded7daded7daded7dadea9bbc3d7daded7daded7daded7daded7daded7dadea9bbc3ef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8ff0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefefefefe8496a44f595bd7dadefefefed7dadef0edeffefefe -8496a44f595bd7dadefefefed7dadef0edeffefefea9bbc3060e0fa9bbc3fefefef2c8c9f40516 -f40516ed4a54a9bbc3ed4a54f40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefefefefe8496a44f595ba9bbc3fefefef0edeffefefefefefe -8496a44f595b8496a4fefefed7dadef0edeffefefea9bbc34f595b8496a4fefefef2c8c9f40516 -f40516ed4a54d7dadeef8b8ff40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefef0edefdddc59dddc598496a4fefefef0edeffefefef0edef -a9bbc3dddc598496a4fefefed7dadef0edeffefefed7daded7dade8496a4fefefef2c8c9f40516 -f40516ef8b8fd7dadea9bbc3f40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefea9bbc3d7dadefefefe4f595ba9bbc3f0edeffefefea9bbc3 -d7dadefefefe4f595ba9bbc3d7dadefefefed7daded7dadefefefea9bbc3d7dadef2c8c9f40516 -ed4a54d7daded7daded7dadeed4a54f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516ef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeff0edef8496a4fefefefefefe8496a44f595bf0edeff0edefa9bbc3 -fefefefefefea9bbc38496a4d7dadef0edefd7dadef0edeff0edefd7daded7dadef2c8c9f40516 -ef8b8ff0edeff0edefd7dadeef8b8ff40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadedddc59dddc59d7dadefefefedddc59dddc59f0edeff0edefd7dade -d7dadefefefed7daded7daded7daded7dadea9bbc3d7dadef0edefd7daded7dadea9bbc3ed4a54 -d7daded7dadef0edefd7dadef2c8c9ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadedddc59dddc59a9bbc38496a4dddc59dddc59f0edeff0edeff0edef -d7daded7dadef0edeff0edefd7dadef0edeff0edefd7daded7daded7dadef0edefa9bbc3ed4a54 -d7dadea9bbc3f2c8c9d7dadef2c8c9ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54ed4a54ed4a54ed4a54f0edef -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7daded7dadea9bbc3a9bbc3a9bbc3a9bbc3d7daded7daded7daded7dade -d7daded7daded7daded7dadea9bbc3d7daded7daded7daded7daded7daded7dadea9bbc3ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeff0edeffefefef0edeffefefef0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeffefefe -f0edeff0edeffefefef0edeffefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefef0edeffefefe -fefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0fa9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc3d7dade060e0f -060e0f124b91060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91060e0f060e0f060e0f060e0f060e0f124b91060e0f124b91060e0f060e0f060e0f124b91 -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f124b91124b91060e0f060e0f060e0f124b913a74b8060e0f4f595b3a74b8124b91 -060e0f124b91060e0f060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b913a74b81078c8124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -3a74b8124b91124b91124b91124b91124b91124b91124b91124b91060e0f060e0f060e0f124b91 -124b91124b91060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f124b91060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f124b91060e0f124b91124b91124b91124b91 -060e0f124b91124b91060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b918496a4124b91060e0f4f595b8496a4 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b913a74b81078c8124b91124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -3a74b8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91060e0f060e0f -124b91124b91124b91060e0f124b91124b91060e0f124b91124b91060e0f124b91124b91124b91 -060e0f060e0f060e0f060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -060e0f124b91124b91124b911078c8124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b913a74b88496a4124b91124b91124b913a74b8 -8496a4124b91124b913a74b81078c8124b91124b91124b91124b91124b911078c8124b91124b91 -124b913a74b81078c8124b91124b911078c83a74b83a74b8060e0f -060e0f124b91124b911078c83a74b8124b91124b913a74b81078c8124b911078c81078c83a74b8 -3a74b83a74b8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b911078c81078c8124b911078c83a74b83a74b83a74b8124b91124b913a74b8 -124b913a74b8124b91124b91124b91124b913a74b83a74b83a74b8124b91124b91124b913a74b8 -3a74b88496a43a74b81078c83a74b81078c83a74b83a74b83a74b8124b911078c8124b91124b91 -3a74b81078c8124b91124b911078c81078c81078c83fa4e5060e0f -060e0f124b91124b911078c8124b913a74b83a74b83a74b8124b911078c81078c81078c81078c8 -1078c83a74b8124b911078c8124b91124b911078c8124b91124b91124b913a74b83a74b83fa4e5 -3a74b83a74b81078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b913a74b8124b91124b91124b91 -3a74b83a74b83a74b83a74b8124b91124b913a74b83fa4e53a74b83fa4e51078c83a74b83a74b8 -3a74b83a74b83a74b8124b913a74b83a74b83a74b88496a43a74b8124b91124b91124b913a74b8 -124b913a74b88496a43a74b83a74b83a74b81078c83a74b83a74b8124b911078c8124b913a74b8 -1078c81078c8124b911078c81078c81078c81078c8a9bbc3060e0f -060e0f124b91124b91124b913a74b83a74b83a74b83a74b83a74b8124b91124b91124b913a74b8 -1078c83a74b8124b91124b911078c83a74b83a74b81078c81078c81078c81078c83fa4e51078c8 -1078c83a74b81078c83a74b83a74b8124b91124b911078c81078c81078c81078c81078c8124b91 -1078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b911078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -124b911078c81078c8124b913a74b81078c81078c83fa4e58496a4124b91124b91124b913a74b8 -124b91124b913a74b88496a43a74b81078c81078c81078c8124b91124b911078c83a74b8124b91 -1078c81078c8124b911078c81078c81078c88496a43fa4e5060e0f -060e0f124b91124b91124b913a74b83a74b81078c81078c81078c81078c81078c8124b911078c8 -1078c83a74b8124b911078c81078c81078c83a74b81078c83fa4e53fa4e53fa4e51078c81078c8 -1078c83fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c8124b911078c8124b911078c81078c8124b913a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c83a74b81078c81078c81078c83fa4e53a74b8124b91124b913a74b8124b91 -124b91124b91124b913a74b88496a43a74b8124b91124b91124b911078c83fa4e51078c81078c8 -1078c8124b91124b911078c81078c88496a43a74b8124b91060e0f -060e0f124b91124b913a74b83a74b83a74b81078c81078c83a74b83a74b83a74b83a74b81078c8 -3a74b83a74b8124b911078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e51078c81078c83fa4e51078c83fa4e51078c83fa4e51078c81078c81078c81078c8 -3fa4e51078c83fa4e51078c81078c83fa4e53fa4e53fa4e53a74b83fa4e53a74b8124b913a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b81078c81078c8 -1078c81078c81078c83a74b83a74b81078c81078c83fa4e53a74b81078c81078c83a74b83a74b8 -124b91124b91124b91124b913a74b8a9bbc33a74b8124b913a74b83fa4e51078c81078c81078c8 -1078c8124b911078c81078c8a9bbc33fa4e5124b91124b91060e0f -060e0f124b913a74b8124b913a74b83a74b81078c81078c83a74b8124b913fa4e53fa4e51078c8 -1078c81078c8124b911078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e5 -3fa4e53fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c8 -1078c81078c83a74b81078c81078c83fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c83a74b81078c83fa4e5a9bbc33a74b8124b913a74b81078c8 -1078c8124b91124b911078c8124b913a74b88496a43a74b83a74b8124b911078c81078c81078c8 -1078c8124b911078c88496a43a74b8124b91124b91124b91060e0f -060e0f124b91124b91124b911078c81078c81078c8124b91124b91124b91124b911078c83a74b8 -3fa4e51078c8124b913fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e5 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8 -1078c81078c8124b911078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc3a9bbc33a74b83a74b81078c8 -1078c8124b91124b911078c8124b91124b913a74b8a9bbc34f595b124b911078c8124b91124b91 -1078c81078c88496a43a74b8124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b913a74b81078c81078c81078c83a74b81078c83a74b81078c8 -3fa4e53a74b81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c83a74b81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e58496a4d7dadea9bbc31078c8 -1078c8124b91124b91124b91124b91124b911078c83a74b88496a43a74b81078c81078c8124b91 -1078c88496a43a74b8124b91124b91124b91124b911078c8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b911078c81078c8124b911078c8 -1078c83a74b81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c81078c83fa4e5 -3fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e51078c8 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e53fa4e5a9bbc3a9bbc33fa4e5 -1078c81078c81078c81078c8124b91124b91124b911078c83a74b88496a43a74b81078c81078c8 -8496a43a74b8124b91124b91124b91124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b913a74b8124b91124b911078c8124b911078c81078c83a74b8 -1078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c83a74b83fa4e5 -3fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c83fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c81078c83fa4e51078c83a74b81078c81078c81078c81078c81078c8 -1078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e51078c8a9bbc3 -8496a41078c81078c81078c81078c81078c81078c81078c81078c83fa4e58496a43a74b88496a4 -3a74b8124b91124b91124b91124b911078c83a74b81078c8060e0f -060e0f124b91124b91124b913a74b83a74b8124b91124b911078c81078c83a74b83a74b83a74b8 -3fa4e53a74b81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e5d7dade3fa4e53fa4e5 -a9bbc3a9bbc31078c81078c81078c81078c81078c8124b911078c81078c83fa4e5a9bbc33a74b8 -124b91124b91124b91124b91124b913a74b8124b91124b91060e0f -060e0f124b91124b91124b91124b913a74b8124b91124b913a74b81078c83a74b81078c81078c8 -3a74b83a74b83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c83a74b83a74b83a74b81078c81078c83a74b81078c83fa4e53fa4e51078c8 -1078c81078c83fa4e53fa4e51078c81078c83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e51078c81078c83fa4e51078c83fa4e53fa4e53fa4e51078c83fa4e5d7dade3fa4e5 -1078c8a9bbc3a9bbc31078c81078c81078c81078c8124b91124b91124b911078c83fa4e53fa4e5 -1078c81078c8124b911078c83a74b8124b91124b913a74b8060e0f -060e0f3a74b8124b91124b91124b91124b91124b913a74b8124b91124b913a74b83a74b83a74b8 -3a74b81078c8124b913fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c83a74b81078c83fa4e51078c83fa4e53fa4e51078c83fa4e5d7dade -3fa4e51078c88496a4a9bbc31078c81078c81078c81078c8124b91124b91124b911078c83a74b8 -3fa4e5124b911078c83fa4e51078c81078c83a74b8124b91060e0f -060e0f124b91124b913a74b83a74b8124b91124b91124b911078c83a74b8124b911078c83a74b8 -1078c81078c8124b911078c83fa4e5a9bbc33fa4e53fa4e53fa4e51078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c8124b911078c81078c8124b911078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e5 -3fa4e53fa4e51078c81078c83a74b81078c81078c83fa4e51078c83fa4e53fa4e51078c83fa4e5 -d7dade3fa4e51078c88496a4a9bbc3124b91124b911078c81078c8124b911078c81078c81078c8 -1078c83fa4e53a74b8124b913a74b83a74b81078c81078c8060e0f -060e0f124b91124b911078c8124b91124b913a74b83a74b83a74b81078c83a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83fa4e53fa4e53fa4e5a9bbc33fa4e51078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c83fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc3a9bbc3 -a9bbc3d7daded7dadea9bbc3a9bbc3a9bbc33a74b8124b911078c8124b91124b91124b911078c8 -1078c81078c81078c83a74b83a74b8124b91124b91124b91060e0f -060e0f124b91124b913a74b8124b913a74b83a74b83a74b81078c83fa4e53a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c81078c81078c81078c83fa4e53fa4e53fa4e51078c83fa4e5 -3fa4e53fa4e51078c81078c83fa4e51078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e51078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5a9bbc33fa4e53fa4e5a9bbc3a9bbc3 -3fa4e5a9bbc3d7daded7dade3fa4e58496a4a9bbc33a74b8124b91124b91124b91124b91124b91 -124b91124b913a74b83a74b81078c81078c81078c8124b91060e0f -060e0f124b91124b91124b91124b91124b91124b913a74b81078c83fa4e51078c83a74b83a74b8 -3a74b83a74b8124b913a74b83fa4e51078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b81078c81078c8 -3a74b81078c81078c83fa4e5a9bbc38496a43a74b83fa4e53a74b8124b911078c8124b91124b91 -124b91124b91124b913a74b8124b91124b911078c81078c8060e0f -060e0f124b91124b91124b91124b91124b91124b911078c81078c81078c81078c83a74b88496a4 -3a74b83a74b83a74b83a74b81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e5a9bbc3 -a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc33fa4e53fa4e53fa4e53fa4e51078c83fa4e51078c8 -1078c81078c83fa4e53fa4e51078c83fa4e51078c83fa4e53fa4e5a9bbc33fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e5a9bbc3a9bbc33fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c83fa4e53fa4e51078c81078c81078c83a74b83fa4e51078c81078c81078c8 -1078c83fa4e51078c83fa4e5a9bbc33a74b8124b91124b913fa4e53a74b81078c8124b91124b91 -124b91124b91124b91124b918496a43a74b8124b913a74b8060e0f -060e0f124b913a74b8124b91124b91124b91124b911078c83a74b81078c83a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83a74b81078c81078c83fa4e51078c8124b91124b911078c8 -3fa4e53fa4e5a9bbc3a9bbc33fa4e51078c81078c81078c83a74b81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c81078c8124b913a74b8 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c83a74b83fa4e53fa4e53fa4e53fa4e53fa4e5 -1078c81078c83fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e5124b91124b91124b91124b91 -124b911078c8a9bbc3a9bbc33a74b8124b911078c8124b91124b913a74b83a74b8124b91124b91 -124b91124b91124b91124b91124b918496a48496a4124b91060e0f -060e0f124b913a74b81078c83a74b83a74b81078c81078c83a74b81078c83a74b83a74b83a74b8 -8496a43a74b83a74b88496a41078c81078c81078c83a74b88496a43a74b8124b911078c83fa4e5 -3fa4e5a9bbc3a9bbc3a9bbc33fa4e51078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e51078c81078c8124b91124b91124b91 -3a74b8a9bbc3a9bbc33fa4e51078c8124b911078c81078c81078c83a74b81078c8124b911078c8 -1078c8124b91124b911078c8124b91124b918496a44f595b060e0f -060e0f124b91124b91124b911078c81078c8124b91124b91124b91124b91124b91124b913a74b8 -3a74b83a74b83a74b83a74b83a74b81078c81078c81078c83fa4e53a74b8124b911078c83fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c83a74b81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c8a9bbc33fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91 -3a74b8a9bbc3124b911078c81078c8124b91124b911078c83fa4e51078c8124b913a74b81078c8 -1078c81078c81078c8124b91124b91124b91124b918496a4060e0f -060e0f124b91124b91124b911078c81078c81078c8124b91124b91124b91124b91124b913a74b8 -3a74b83a74b83a74b83a74b83a74b83fa4e51078c81078c83fa4e53a74b8124b911078c83fa4e5 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c83a74b83fa4e5 -1078c81078c8124b91124b911078c81078c81078c81078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b913a74b8 -8496a4124b91124b91124b911078c81078c83a74b83a74b81078c81078c83a74b83a74b83fa4e5 -1078c8124b911078c81078c81078c8124b91124b91124b91060e0f -060e0f124b91124b91124b913a74b83a74b81078c81078c8124b91124b91124b913a74b83a74b8 -3a74b83a74b83a74b81078c83a74b83a74b81078c81078c83fa4e51078c8124b91124b911078c8 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5 -1078c81078c81078c83fa4e53fa4e51078c81078c81078c81078c81078c8124b913a74b88496a4 -124b91124b91124b91124b91124b911078c83fa4e51078c83a74b83a74b8124b91124b913a74b8 -8496a43a74b81078c8124b91124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b911078c81078c81078c83a74b8124b91124b91124b91124b91 -124b91124b913a74b81078c83a74b83fa4e53a74b83a74b83fa4e51078c8124b91124b911078c8 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c83fa4e51078c81078c81078c8124b91 -3a74b83a74b81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b81078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c81078c8 -1078c81078c83fa4e51078c81078c81078c81078c81078c81078c81078c83a74b88496a4124b91 -124b91124b91124b91124b913a74b83fa4e51078c81078c83a74b8124b91124b911078c8124b91 -1078c8a9bbc33a74b8124b91124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b91124b913a74b81078c83a74b83a74b8124b91124b913a74b8 -124b91124b911078c83a74b81078c81078c81078c83a74b83fa4e53a74b8124b91124b91124b91 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c83fa4e53fa4e51078c8124b91124b91 -124b91124b911078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5 -1078c83fa4e51078c81078c81078c81078c81078c81078c81078c88496a48496a4124b91124b91 -124b91124b91124b913a74b83fa4e5124b911078c83a74b8124b91124b91124b911078c81078c8 -3a74b84f595b8496a43a74b8124b91124b91124b91124b91060e0f -060e0f124b91124b913a74b83a74b88496a43a74b83a74b8124b913a74b83a74b8124b91124b91 -124b91124b911078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c83a74b83fa4e53fa4e5124b91124b91 -124b91124b913a74b81078c81078c81078c81078c81078c83a74b83a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e53a74b83fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8a9bbc38496a4124b91124b91124b91 -124b91124b913a74b83a74b8124b913a74b83a74b8124b91124b911078c81078c81078c83fa4e5 -4f595b060e0f4f595ba9bbc33a74b8124b91124b91124b91060e0f -060e0f124b913a74b8d7dadef0edefd7dadefefefe8496a43a74b83a74b83a74b81078c8124b91 -124b91124b91124b91124b911078c81078c81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b913a74b81078c81078c83a74b8124b91 -124b91124b91124b91124b911078c8124b911078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e51078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8 -1078c81078c81078c81078c81078c81078c81078c88496a48496a4124b91124b91124b91124b91 -124b913a74b83a74b8124b913a74b83a74b8124b91124b911078c81078c81078c83a74b84f595b -060e0f060e0f124b913a74b8a9bbc33a74b8124b91124b91060e0f -060e0f124b913a74b8d7dadea9bbc33a74b8f0edef8496a4124b91124b913a74b81078c81078c8 -1078c8124b91124b91124b911078c81078c81078c83a74b83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8124b911078c83a74b8 -124b91124b91124b91124b913a74b81078c81078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c81078c81078c81078c83a74b83a74b88496a48496a4124b91124b91124b91124b91124b91 -3a74b81078c8124b913a74b83a74b8124b91124b911078c81078c81078c83fa4e54f595b060e0f -060e0f124b911078c81078c88496a4a9bbc33a74b8124b91060e0f -060e0f124b913a74b8d7dadea9bbc3a9bbc3fefefe8496a4124b91124b913a74b81078c83a74b8 -1078c81078c8124b91124b91124b913a74b81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c81078c81078c8124b91124b911078c8 -3a74b8124b91124b91124b91124b91124b911078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c8124b91124b911078c8124b911078c8 -1078c81078c81078c81078c81078c88496a48496a4124b91124b91124b91124b91124b913a74b8 -3a74b8124b91124b913a74b8124b91124b91124b91124b911078c83fa4e54f595b060e0f060e0f -124b911078c81078c81078c81078c88496a48496a43a74b8060e0f -060e0f124b913a74b8d7dadea9bbc3d7dadefefefe8496a4124b91124b913a74b83a74b83a74b8 -3a74b83a74b83a74b8124b913a74b83a74b81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b911078c81078c81078c81078c81078c8 -1078c83a74b8124b91124b91124b91124b913a74b81078c83fa4e51078c8124b91124b91124b91 -124b911078c83fa4e51078c81078c81078c81078c8124b91124b91124b91124b91124b913a74b8 -124b911078c81078c81078c83a74b88496a43a74b83a74b8124b91060e0f124b913a74b83a74b8 -124b913a74b83a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f124b91 -1078c81078c81078c8d7dadea9bbc3124b913a74b88496a4060e0f -060e0f124b913a74b8d7daded7daded7dadefefefe8496a4124b91124b913a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83a74b8124b911078c83a74b83a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b913a74b81078c81078c81078c81078c8 -1078c83a74b83a74b8124b91124b91124b91124b913a74b81078c8124b91124b91124b91124b91 -124b911078c81078c81078c8124b911078c8124b91124b91124b91124b91124b91124b91124b91 -124b91124b911078c8124b911078c88496a4124b91124b914f595b124b913a74b83a74b8124b91 -4f595b3a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f124b91 -3a74b83fa4e5a9bbc33fa4e5a9bbc38496a4124b918496a4060e0f -060e0f124b913a74b88496a48496a48496a48496a48496a4124b91124b914f595b8496a48496a4 -8496a43a74b83a74b88496a43a74b83a74b83a74b83a74b83fa4e58496a43a74b83a74b8124b91 -124b911078c83fa4e53fa4e51078c81078c8124b91124b913a74b81078c81078c81078c81078c8 -124b911078c83a74b83a74b8124b91124b91124b91124b913a74b83a74b8124b91124b91124b91 -124b911078c81078c81078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b911078c88496a4124b91060e0f124b913a74b8124b91124b913a74b8 -3a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b -4f595ba9bbc3a9bbc31078c81078c83fa4e53a74b8124b91060e0f -060e0f124b913a74b88496a48496a48496a48496a43fa4e51078c8124b914f595ba9bbc38496a4 -d7dadea9bbc38496a4a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc33a74b8124b91 -124b911078c83fa4e53fa4e51078c8124b91124b91124b911078c81078c81078c81078c81078c8 -1078c81078c81078c83a74b84f595b124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b913fa4e53a74b8124b91124b91124b91124b91124b911078c8124b911078c81078c8 -3a74b8124b91124b911078c83a74b88496a4060e0f060e0f060e0f4f595b124b914f595b4f595b -124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b4f595b -a9bbc33fa4e51078c83a74b8124b91124b913fa4e58496a4060e0f -060e0f124b913a74b83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53a74b83a74b83a74b83a74b8 -3a74b83a74b8124b914f595b124b91124b91124b913a74b83a74b83a74b84f595b124b91124b91 -124b913fa4e53fa4e53fa4e5124b91124b91124b91124b91124b911078c8124b911078c8124b91 -124b91124b91124b91124b913a74b84f595b124b91124b91124b91124b91124b91124b91124b91 -124b91124b911078c8124b91124b91124b91124b91124b91124b911078c8124b911078c8124b91 -124b91124b91124b911078c83a74b83a74b8060e0f060e0f060e0f4f595b4f595b4f595b060e0f -124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b4f595b8496a4 -3fa4e51078c8124b913a74b83fa4e5124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b913a74b8124b91124b91124b91124b91 -060e0f060e0f124b91124b91124b91124b91124b911078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e51078c8124b91124b91124b91060e0f124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b913a74b8124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b913a74b8124b91124b91060e0f060e0f124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b914f595b060e0f060e0f060e0f4f595b124b91060e0f060e0f -124b91124b91124b913a74b8124b91060e0f060e0f060e0f060e0f4f595b4f595b3fa4e53a74b8 -124b911078c8124b91124b91124b913a74b8060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/ecomm.gif b/Docs/Books/ecomm.gif deleted file mode 100644 index 67552393cc6da2d680f41d653d1e09e7b0c9c938..0000000000000000000000000000000000000000 Binary files a/Docs/Books/ecomm.gif and /dev/null differ diff --git a/Docs/Books/ecomm.txt b/Docs/Books/ecomm.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/in_21.eps b/Docs/Books/in_21.eps deleted file mode 100644 index 3bacae56e2d524c4f442431625d9b0d494be8c3c..0000000000000000000000000000000000000000 --- a/Docs/Books/in_21.eps +++ /dev/null @@ -1,1149 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/in_21.eps -%%CreationDate: Sun Dec 31 14:30:10 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 366 -%%EndComments -%%BeginPreview: 100 124 1 124 -% fffffffffffffffffffffffff0 -% f6db6db56b6db6db7ffffffff0 -% db6db6d6d556db6daaaaaaaab0 -% f6db6d2d2eaab6db6ffffffff0 -% db6db5f2f2b5db6dbadb214a70 -% d6b6db174d4b6db6d7b69a11d0 -% bb6b6ce9555696db6dfff7ff70 -% edb6b52aaaaaad6db7556eedd0 -% aadadad5555556d6ddffddbbb0 -% ff6da52aaaaaab6d6ab6fbef70 -% d5b6bad5555555b5b5edaf7bf0 -% badb4aaaaaaaaa6f6f5ffbdeb0 -% d76d5555555555b5b5b55ef7f0 -% b5b6aaaaaaaaaa56ed6ff7bd70 -% dedaaaaaaaaaaab555dd6defd0 -% b56d55555555556b5ab7db5ab0 -% 6bb5555555555556eddd7ffff0 -% b6daaaaaaaaaaaadb6b7d55570 -% 6d6aaaaaaaaaaab041a52affd0 -% b6d555555555554c44424035b0 -% 6b6aaaaaaaaaaab7bdffffef70 -% b6d5555555555548a5442bbdf0 -% db555555555555588042a37750 -% 6daaaaaaaaaaaaaf7fff5feef0 -% 56eaaaaaaaaaaaa8a4aafd7dd0 -% ed55555555555554240fd7d7b0 -% 5bb5555555555552d6aabd7df0 -% b6d55555555555576dfff7db50 -% 6d6aaaaaaaaaaaadb6aabdbff0 -% b6d5555555555552db5fef7570 -% 6b6aaaaaaaaaaaad2deadbefd0 -% b6ad5555555555576abfbebdb0 -% db5aaaaaaaaaaaaadf55f7ef70 -% 6ded5555555555576aff5d7bf0 -% 5692aaaaaaaaaaaaddabf7deb0 -% edbd555555555556b2debdb7f0 -% 5b6aaaaaaaaaaabaefb5eb6d50 -% b6daaaaaaaaaaad6baff5ffbf0 -% db6d555555555555d755fadeb0 -% 6db55555555555a810802437f0 -% 56daaaaaaaaaaab9552a4d7d70 -% bb6f555555555557bffefbd7d0 -% 6db56aaaaaaaaab42015df7db0 -% b6db5555555556d8253fb5dbf0 -% db6daaaaad5555afededff7750 -% 6db6b555555556b55b7b56eef0 -% 56db5555555555db6fdffdddd0 -% ed6deeaaaaaaad6db5755bbbb0 -% 5bb6b555555576b6dfdff77770 -% f6db5ad555555bdb6abb6eeef0 -% 5d6db7555555ad6db7f6ddddd0 -% ebb6d4aaaaab76b6dd5ffbbbb0 -% 7d5b6df6f6d6db6b77f55f7770 -% d6f55bad9dadadb6ddbff5eef0 -% 7f5bfd5ae56b76dbbbeb6f7dd0 -% 6ad6d6d75d5dab6eef7eddd7b0 -% ffbba8a491b6ddbb5dd7fbbdf0 -% 55d6d8c490d56adefb7d5f7750 -% ff7db188136edb6bafdbf5eef0 -% 5aab688010db6dbefaf76f7dd0 -% f7fed42249b5b6ebb7befdd7b0 -% 5d5b706592db5bbeeeebd77df0 -% f7f6dfdf7f6db6ebdddefddb50 -% 5dbdb5b5d5b6edbb7bbbaf77f0 -% 77687f79456dbf82ef777bdeb0 -% edfcc8c961b6a493ddeeeef7f0 -% 7b548500620004137b7dddbd70 -% defc84145288d453dfd7bbefd0 -% 75b4949976024483757df77af0 -% df6c911052885153dfdb5edfb0 -% 76dc84457200440376f7f7f5f0 -% ddf7fddd6fbfddffddbebd5f50 -% 77add777db76f77d7bebeff6f0 -% 6efb7dddbeefbed7ef7edaddd0 -% fdaed7f7f7ddebfebdebbfbbb0 -% 57fbfc0e06fb0030030ef5f770 -% fd5eac0407af8038030fbf5ef0 -% 5bf7fc0606fb0e30c305ebf7d0 -% 776d6c0407b70630430f7ebd70 -% eeffdc0606ef0c30c30ed7efd0 -% bdd5bc0484398630c307fd7af0 -% 77bf748404390c30430eafdfb0 -% ddf6ec04861907f0c30dfaf5f0 -% 775ddcc0861181d0c307b7bf50 -% 6ef7bc01861b8030430eeeebf0 -% fdddf4c106136030c30fbddeb0 -% 57bb5c41861bf830c305efbbf0 -% fdf7f4c107130c30430f7af770 -% 5b5ebc4187030c18c30edfbed0 -% 77f7ecc107078c30c307f5ebf0 -% eebd7c4187068c30430ebf7eb0 -% bdefd4c106070c30c30debd7f0 -% 77bafc41878704304301befd70 -% ddefacc1068680380300edafd0 -% 777b7dffdf87aaf6877fdffaf0 -% 6edeefbefb0effefc1eefaafb0 -% fdf7db6bbe87bbbd80fbaffb70 -% 57bd7efeeb8eeeef7fdefadef0 -% fdefd7d7be0ddddfffffefb7d0 -% 5b7afd7dec0fbbfa90057ffd70 -% 77dfafdb7bfdfe000000017fd0 -% eef5faf7dfdbc00000000007f0 -% bdbf5fbef57e00000000000070 -% 77ebf5ebbfe000000000000010 -% dd7ebf7eee8001c00000000010 -% 77d7ebd7b8000778e000000010 -% 6efd7efdf0000513a000000010 -% fdafd7afc000063ac1e0000010 -% 57fafdfb00600528e190000010 -% fd5faf5e00000638a190000010 -% 5bf5fbf4006f8028c113d97810 -% 776f5eb800248030e196594810 -% eefdf7f0006d8060a190c94010 -% bdd76d70006580c0e112ca7010 -% 77bddfe0002c80c0c1964c1810 -% ddf7baa000658180c1924cc810 -% 775df7e0006d8300e1b6ced810 -% 69aa5ec000248720a152845010 -% f900f7e0000006f9c000040010 -% 58026d60000007a8a0000c0010 -% f1b8ffe00000000000001c0010 -% 5fefd570000000000000000010 -% 7b5f7fd0000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 351.496063 translate -283.464567 -351.496063 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 124 8 -% Transformation matrix -[ 100 0 0 124 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee269dee0381d50381d50381d50381d5269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee0381d5 -0381d5269dee0381d5269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee0381d50381d50381d5269dee269dee269dee269dee269dee0381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee0381d5269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee0381d50381d50381d5 -0381d50381d5269dee269dee269dee0381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee0381d50381d5269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a070a7df70a7df4d77b470a7df4d77b470a7df70a7df4d77b44d77b44d77b470a7df -4d77b44d77b44d77b44d77b470a7df4d77b41156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a070a7df70a7df70a7df70a7df4d77b48890b1a2b3d1a2b3d170a7df70a7dfa2b3d1 -8890b170a7df70a7df70a7df70a7df4d77b41156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee0381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee269dee269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee269dee269dee269dee -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee0381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d51156a01156a01156a00381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee0381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d50381d50381d50381d50381d5269deeb63a5a4d77b40381d50381d5 -0381d50381d50381d50381d54d77b44d77b40381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d50381d50381d5b63a5a505287505287b63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052875052870381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d50381d5269deeb63a5a505287505287b63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052875052870381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d5269deeb63a5ab63a5ab63a5ab63a5a -b63a5aed0e19ed0e19b63a5ab63a5ab63a5a5052875052870381d51156a00381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d50381d5269dee0381d50381d50381d54d77b4 -4d77b44d77b44d77b40381d50381d54d77b40381d50381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d5b63a5ab63a5a4d77b44d77b44d77b44d77b4 -4d77b44d77b44d77b44d77b44d77b44d77b44d77b4505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a00381d51156a01156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d570a7dfb0cfed70a7df70a7df -269dee269deeb0cfed70a7df70a7dfb0cfed70a7df1156a04d77b470a7df70a7df70a7df70a7df -1156a04d77b44d77b470a7df70a7df4d77b470a7df4d77b44d77b470a7df70a7df1156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d570a7dfb0cfedb0cfedb0cfed -70a7df70a7dfb0cfedb0cfeda2b3d1b0cfedb0cfed4d77b470a7dfb0cfeda2b3d1b0cfeda2b3d1 -4d77b4b0cfeda2b3d1a2b3d1a2b3d1a2b3d1b0cfedb0cfedb0cfeda2b3d1b0cfed4d77b41156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a04d77b41156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee0381d5269dee70a7df269dee0381d5 -269dee269dee269dee269dee269dee269dee4d77b44d77b40381d570a7dfb0cfed70a7df4d77b4 -70a7df4d77b470a7df70a7df5052871156a04d77b44d77b41156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee0381d570a7dfb0cfedb0cfed4d77b4 -b0cfedb0cfedb0cfeddfdde4b0cfedb0cfeddfdde4b0cfed0381d570a7dfdfdde4a2b3d1b0cfed -70a7dfb0cfeda2b3d1b0cfed4d77b44d77b4b0cfedb0cfed1156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee269dee0381d5 -0381d50381d5269dee0381d50381d50381d50381d50381d51156a01156a01156a00381d5269dee -1156a01156a04d77b44d77b44d77b41156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -70a7df0381d5269dee70a7df0381d50381d5269dee4d77b44d77b44d77b44d77b41156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d570a7dfdfdde4b0cfedb0cfed -b0cfed4d77b4b0cfedb0cfed4d77b470a7dffdfdfeb0cfedb0cfedb0cfedb0cfed4d77b41156a0 -0381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee70a7df70a7df269dee269dee -269dee269dee269dee269dee0381d50381d5269dee269dee70a7df70a7df269dee0381d51156a0 -0381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d54d77b4269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d5269dee0381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5505287b63a5a4d77b4 -4d77b44d77b44d77b45052875052874d77b40381d50381d50381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052874d77b40381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -b63a5ab63a5ab63a5aed0e19b63a5ab63a5a5052871156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -ed0e19b63a5ab63a5ab63a5ab63a5ab63a5a4d77b41156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d5269dee0381d5269dee505287 -505287b63a5a505287269dee4d77b45052874d77b41156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d5269deeb63a5ab63a5a0381d54d77b44d77b44d77b4 -5052875052874d77b40381d55052875052875052875052871156a0505287505287505287505287 -505287505287505287505287505287505287505287505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d54d77b44d77b40381d50381d50381d50381d5 -0381d50381d50381d51156a01156a04d77b41156a01156a01156a01156a01156a01156a01156a0 -1156a01156a05052871156a01156a01156a01156a01156a01156a00829701156a01156a01156a0 -1156a01156a0505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d5269dee0381d5269dee269dee269dee0381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a00381d50381d51156a01156a0 -0381d51156a01156a01156a01156a01156a01156a01156a00381d51156a00829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d50381d50381d5269dee0381d50381d5269deeb0cfedb0cfed70a7df -70a7dfa2b3d14d77b4b0cfed70a7df70a7dfa2b3d170a7dfa2b3d1a2b3d1b0cfeda2b3d1a2b3d1 -b0cfeda2b3d1b0cfed70a7df4d77b4a2b3d1a2b3d1505287b0cfedb0cfeda2b3d170a7df1156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d5269dee269dee269dee0381d50381d570a7dfb0cfed70a7df70a7df -b0cfed70a7df1156a070a7df70a7df70a7df70a7df70a7dfa2b3d170a7df70a7dfa2b3d170a7df -a2b3d1b0cfedb0cfed4d77b44d77b470a7df70a7df1156a070a7df70a7dfa2b3d170a7df1156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d50381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a00381d51156a01156a01156a01156a01156a0 -1156a04d77b41156a01156a01156a01156a01156a01156a01156a00829700829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee0381d5269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d5269dee269dee0381d50381d50381d50381d5269dee70a7df70a7df70a7df -b0cfed269dee70a7df70a7df70a7df70a7df70a7dfb0cfedb0cfed4d77b41156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d5269dee0381d50381d5269dee0381d50381d5269deeb0cfedb0cfedb0cfed -b0cfed4d77b4b0cfedb0cfeda2b3d1b0cfed70a7dfa2b3d1b0cfed4d77b41156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d5269dee0381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a00381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee0381d5269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee0381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5 -0381d50381d5269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d51156a01156a00381d50381d51156a00381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee -4d77b44d77b48890b18890b18890b18890b18890b14d77b44d77b4269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d50381d50381d50381d50381d51156a00381d5 -0381d50381d50381d50381d50381d50381d54d77b44d77b4b63a5ab63a5aed0e19ed0e19ed0e19 -ed0e19ed0e19b63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5a505287 -4d77b4269dee0381d5269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a01156a00381d50381d50381d50381d50381d51156a00381d5 -0381d50381d50381d54d77b4b63a5aed0e19ed0e19ed0e19b63a5ab63a5a1156a01156a01156a0 -0381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d50381d51156a0505287 -505287b63a5ab63a5a4d77b44d77b40381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a00381d50381d50381d50381d50381d5 -4d77b4b63a5ab63a5aed0e19ed0e19b63a5a0829701156a00381d50381d50381d5269dee269dee -269dee0381d50381d50381d50381d5269dee0381d50381d50381d50381d5269dee0381d5269dee -269dee0381d50381d55052874d77b44d77b40381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a00381d51156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d50381d50381d50381d50381d54d77b4b63a5a -ed0e19ed0e19ed0e190829701156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee70a7df0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee0381d5269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a00381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d51156a01156a01156a04d77b4ed0e19b63a5a -b63a5a0829701156a00381d50381d50381d50381d50381d570a7dfb0cfedb0cfed4d77b40381d5 -1156a0b0cfedb0cfed1156a070a7df70a7df0381d5269deeb0cfed0381d50381d5b0cfedb0cfed -70a7df0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a00381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a0b63a5ab63a5aed0e19505287 -1156a00381d50381d50381d50381d50381d50381d50381d5dfdde4dfdde4b0cfed4d77b41156a0 -a2b3d1fdfdfe70a7df1156a0fdfdfedfdde41156a0b0cfedfdfdfe0381d5b0cfedfdfdfedfdde4 -8890b10381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d5505287b63a5aed0e19ed0e190829701156a0 -0381d50381d50381d50381d50381d50381d51156a070a7dffdfdfedfdde41156a008297070a7df -fdfdfefdfdfe70a7df4d77b4fdfdfefdfdfea2b3d1fdfdfefdfdfe4d77b4dfdde4fdfdfe70a7df -1156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d5b63a5aed0e19b63a5a0829700381d50381d5 -0381d50381d50381d50381d50381d50381d51156a00381d570a7dffdfdfedfdde44d77b4dfdde4 -fdfdfefdfdfea2b3d1a2b3d1fdfdfedfdde4fdfdfedfdde4dfdde41156a04d77b4dfdde4fdfdfe -8890b10381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a0505287b63a5aed0e190829701156a01156a01156a0 -0381d51156a01156a00381d50381d51156a01156a070a7df4d77b4b0cfedfdfdfefdfdfefdfdfe -505287dfdde4dfdde4fdfdfea2b3d1a2b3d1dfdde48890b1fdfdfe8890b18890b170a7dffdfdfe -8890b11156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287b63a5ab63a5aed0e191156a00381d51156a01156a0 -0381d50381d51156a00381d50381d50381d51156a0a2b3d1dfdde4dfdde4a2b3d1b0cfed4d77b4 -1156a0a2b3d1a2b3d1a2b3d15052878890b14d77b44d77b4a2b3d18890b1dfdde4dfdde48890b1 -5052871156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052870829701156a01156a01156a01156a0 -1156a01156a01156a01156a01156a00381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a00381d51156a01156a00381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052870829701156a01156a01156a01156a0 -1156a04d77b44d77b44d77b40381d51156a01156a00381d50381d51156a00381d51156a00381d5 -0381d50381d50381d50381d5269dee0381d50381d50381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a00381d5 -1156a00381d51156a01156a01156a01156a0269dee1156a01156a070a7df4d77b41156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052871156a01156a01156a01156a01156a0 -0381d5dfdde4fdfdfedfdde45052871156a01156a01156a01156a01156a01156a01156a00381d5 -1156a01156a01156a070a7dfdfdde44d77b41156a00381d50381d5fdfdfea2b3d18890b1b0cfed -1156a01156a01156a01156a00381d51156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a04d77b4dfdde48890b1dfdde4dfdde45052871156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052871156a01156a01156a01156a01156a0 -1156a08890b1fdfdfe4d77b4082970269dee269dee4d77b41156a0269dee70a7df4d77b41156a0 -269dee70a7df0381d570a7dffdfdfe4d77b44d77b40381d51156a0dfdde4b0cfeda2b3d170a7df -1156a0269dee269dee0381d50381d50381d50381d50381d54d77b44d77b4269dee4d77b470a7df -269dee1156a04d77b470a7df4d77b44d77b4fdfdfe8890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052875052871156a01156a01156a01156a0 -1156a08890b1fdfdfe5052878890b1fdfdfedfdde4fdfdfe8890b1dfdde4a2b3d1dfdde4b0cfed -fdfdfedfdde4fdfdfe8890b1dfdde4dfdde4fdfdfe4d77b41156a08890b1fdfdfeb0cfed505287 -dfdde4dfdde4fdfdfeb0cfedfdfdfea2b3d1dfdde4a2b3d1fdfdfedfdde4b0cfedfdfdfea2b3d1 -fdfdfe8890b1fdfdfedfdde4fdfdfea2b3d1dfdde48890b1fdfdfeb0cfed1156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287b63a5ab63a5ab63a5a1156a01156a01156a01156a0 -1156a08890b1fdfdfe4d77b48890b1dfdde4a2b3d1fdfdfe5052878890b18890b1b0cfeda2b3d1 -fdfdfe5052878890b18890b1b0cfeda2b3d1fdfdfe1156a01156a04d77b4fdfdfea2b3d1505287 -dfdde48890b1fdfdfedfdde4dfdde48890b1dfdde4a2b3d1fdfdfe8890b1505287fdfdfe505287 -8890b1505287fdfdfea2b3d1dfdde4a2b3d1dfdde44d77b4fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a0b63a5aed0e191156a01156a01156a01156a0 -1156a08890b1fdfdfe1156a08890b1fdfdfea2b3d18890b14d77b4b0cfeddfdde4a2b3d1a2b3d1 -fdfdfe0829701156a070a7dfb0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfe8890b1082970 -dfdde48890b1fdfdfeb0cfeddfdde48890b1dfdde4a2b3d1fdfdfea2b3d10829708890b1fdfdfe -a2b3d1505287fdfdfea2b3d18890b14d77b4dfdde48890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a0b63a5aed0e195052875052871156a01156a0 -1156a08890b1fdfdfe5052878890b1dfdde48890b1a2b3d1dfdde4dfdde44d77b4b0cfeda2b3d1 -dfdde48890b1b0cfeda2b3d1b0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfe8890b1082970 -dfdde48890b1dfdde4b0cfeddfdde48890b1b0cfeda2b3d1fdfdfea2b3d1505287b0cfed4d77b4 -fdfdfe8890b1fdfdfe8890b18890b18890b1dfdde44d77b4fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a0505287ed0e19b63a5a1156a01156a0 -1156a08890b1fdfdfe5052878890b1fdfdfedfdde4fdfdfe8890b1dfdde4dfdde4b0cfeda2b3d1 -fdfdfefdfdfedfdde48890b1b0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfea2b3d1082970 -dfdde4dfdde4fdfdfea2b3d1b0cfeddfdde4dfdde4a2b3d1fdfdfea2b3d1505287fdfdfea2b3d1 -dfdde4505287fdfdfedfdde4fdfdfea2b3d1dfdde48890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a0505287505287b63a5a505287 -1156a01156a01156a00829700829704d77b44d77b45052870829704d77b45052875052871156a0 -4d77b44d77b41156a01156a04d77b41156a04d77b41156a01156a01156a04d77b4505287082970 -1156a04d77b44d77b40829705052874d77b45052875052874d77b41156a01156a04d77b44d77b4 -5052870829704d77b44d77b45052870829705052870829705052870829701156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0b63a5ab63a5a -5052871156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0505287 -b63a5a5052875052871156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a05052875052875052875052871156a01156a01156a01156a01156a01156a01156a0082970 -1156a01156a01156a01156a01156a01156a00829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a00829701156a01156a01156a0 -1156a01156a01156a00829700829701156a01156a01156a00829700829701156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a070a7dfb0cfedb0cfedb0cfed -b0cfedb0cfed4d77b40829701156a0b0cfedb0cfedb0cfedb0cfedb0cfed70a7df1156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a08890b1b0cfeddfdde4 -dfdde4dfdde4dfdde4dfdde4dfdde4b0cfed5052870829701156a070a7dfb0cfeddfdde4dfdde4 -dfdde4dfdde4dfdde4b0cfed70a7df1156a0082970a2b3d1b0cfedb0cfedb0cfed4d77b41156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b10829704d77b4fdfdfefdfdfefdfdfefdfdfefdfdfeb0cfed0829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe5052870829704d77b4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfe505287082970b0cfedfdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -8890b1000001505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe8890b1 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfeb0cfed0000018890b1fdfdfeb0cfedfdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b4fdfdfefdfdfefdfdfe -8890b1082970505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfedfdde4dfdde4 -fdfdfefdfdfedfdde40000018890b1fdfdfea2b3d1dfdde4fdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -8890b10829704d77b4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfeb0cfeddfdde4 -fdfdfefdfdfedfdde4082970a2b3d1fdfdfe8890b1dfdde4fdfdfefdfdfea2b3d10829708890b1 -a2b3d1a2b3d1a2b3d11156a01156a01156a0a2b3d1b0cfed1156a04d77b4fdfdfefdfdfefdfdfe -8890b1082970505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfea2b3d1a2b3d1 -fdfdfefdfdfedfdde4082970dfdde4fdfdfe8890b1dfdde4fdfdfefdfdfea2b3d1000001a2b3d1 -fdfdfefdfdfefdfdfe5052870829701156a0dfdde4fdfdfe0829704d77b4fdfdfefdfdfefdfdfe -8890b10000014d77b4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1a2b3d1 -fdfdfefdfdfedfdde4505287fdfdfedfdde44d77b4dfdde4fdfdfefdfdfea2b3d10829704d77b4 -fdfdfefdfdfefdfdfe8890b10829701156a0dfdde4fdfdfe0000018890b1fdfdfefdfdfefdfdfe -dfdde40829701156a050528750528750528708297008297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfedfdde48890b1fdfdfea2b3d1505287dfdde4fdfdfefdfdfea2b3d1082970505287 -dfdde4fdfdfefdfdfea2b3d10000014d77b4dfdde4a2b3d10829704d77b4fdfdfefdfdfefdfdfe -fdfdfedfdde48890b11156a00829700829701156a01156a070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfefdfdfedfdde4fdfdfe8890b1505287fdfdfefdfdfefdfdfea2b3d1082970082970 -dfdde4fdfdfefdfdfea2b3d10000014d77b4fdfdfe8890b10829701156a0a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde44d77b408297008297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfefdfdfefdfdfefdfdfe4d77b4505287fdfdfefdfdfefdfdfea2b3d1082970082970 -b0cfedfdfdfefdfdfedfdde400000170a7dffdfdfe5052870829701156a00829704d77b4a2b3d1 -dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1505287 -fdfdfefdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d1082970082970 -70a7dffdfdfefdfdfedfdde40829708890b1fdfdfe0829701156a01156a01156a0082970082970 -0829708890b1fdfdfefdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1505287 -fdfdfefdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d1082970082970 -4d77b4fdfdfefdfdfefdfdfe5052878890b1fdfdfe0829701156a04d77b4b0cfedb0cfedb0cfed -082970082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -dfdde4fdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a0fdfdfefdfdfefdfdfe8890b1a2b3d1dfdde40829700829704d77b4fdfdfefdfdfefdfdfe -1156a00829708890b1fdfdfefdfdfefdfdfe4d77b40829704d77b4fdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -dfdde4fdfdfefdfdfefdfdfedfdde40829704d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -082970fdfdfefdfdfefdfdfedfdde4fdfdfe8890b10829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -b0cfedfdfdfefdfdfefdfdfedfdde40000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -082970dfdde4fdfdfefdfdfefdfdfefdfdfe4d77b40829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -b0cfedfdfdfefdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a0a2b3d1fdfdfefdfdfefdfdfefdfdfe5052870829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe505287082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1000001 -b0cfedfdfdfefdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a04d77b4fdfdfefdfdfefdfdfefdfdfe5052870829700829704d77b4fdfdfefdfdfefdfdfe -8890b14d77b4dfdde4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfea2b3d1 -4d77b4dfdde4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfea2b3d18890b1 -a2b3d170a7df1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0082970a2b3d1fdfdfea2b3d1082970 -a2b3d1fdfdfefdfdfefdfdfea2b3d100000170a7dffdfdfefdfdfefdfdfeb0cfed0829701156a0 -1156a0505287fdfdfefdfdfefdfdfefdfdfe0829700829701156a04d77b4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfedfdde40829700829701156a0fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde4082970082970b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfedfdde40829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b44d77b4505287082970 -5052874d77b45052875052875052870829704d77b44d77b44d77b44d77b45052870829701156a0 -1156a0082970fdfdfefdfdfefdfdfea2b3d10829701156a01156a05052874d77b48890b18890b1 -8890b18890b18890b18890b15052870829700829701156a01156a05052874d77b48890b18890b1 -a2b3d1fdfdfefdfdfefdfdfe5052870000010829704d77b44d77b4505287505287505287505287 -5052875052870829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829701156a0 -1156a00829700829700829700829701156a01156a00829700829700829700829705052871156a0 -1156a01156a0fdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a0082970082970 -0829700829700829700829700829700829701156a01156a01156a01156a01156a0082970082970 -1156a0fdfdfefdfdfefdfdfedfdde48890b14d77b41156a00829700829701156a0082970082970 -0829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0505287fdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0a2b3d1dfdde4dfdde4dfdde4dfdde470a7df0829701156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970505287fdfdfefdfdfefdfdfe5052870829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829700829700829700829700829700829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -4d77b4dfdde4fdfdfefdfdfefdfdfe5052870829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a0082970082970082970082970 -082970082970082970082970082970082970082970082970082970082970082970082970082970 -0829700829700829700829700829701156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970b0cfed -fdfdfefdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a01156a01156a01156a0 -1156a01156a00829700829700829700829700829700829700829701156a05052875052874d77b4 -4d77b48890b18890b18890b18890b18890b18890b18890b18890b18890b18890b18890b14d77b4 -4d77b45052875052871156a00829700829700829700829700829700829700829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b4 -5052875052875052875052870829700829701156a01156a01156a01156a01156a0082970082970 -0829700829701156a04d77b48890b1a2b3d1a2b3d1b0cfedb0cfeddfdde4dfdde4fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfedfdde4dfdde4dfdde4b0cfeda2b3d1a2b3d18890b14d77b4505287082970082970 -0829700829700829701156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829700829700829701156a01156a01156a01156a00829700829700829700829704d77b4a2b3d1 -dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfedfdde4dfdde4dfdde4 -a2b3d18890b15052870829700829700829700829701156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829700829700829700829704d77b4a2b3d1dfdde4fdfdfefdfdfefdfdfe -fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfeb0cfed8890b11156a0082970000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829700829700829705052874d77b4b0cfedfdfdfefdfdfefdfdfedfdde4dfdde4dfdde4fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfedfdde4000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970082970 -1156a04d77b4a2b3d1fdfdfefdfdfefdfdfedfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfee7949ce7949ce7949cb63a5ab63a5ae7949ce7949cdfdde4fdfdfefdfdfefdfdfedfdde4 -e7949cdfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829705052878890b1 -dfdde4fdfdfedfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeed0e19ed0e19ed0e19b63a5aed0e19ed0e19ed0e19b63a5afdfdfefdfdfedfdde4ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0082970082970a2b3d1dfdde4fdfdfe -dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19b63a5afdfdfedfdde4b63a5aed0e19ed0e19dfdde4b63a5aed0e19ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a00829700829708890b1dfdde4fdfdfedfdde4dfdde4 -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19e7949cfdfdfefdfdfeb63a5aed0e19b63a5adfdde4ed0e19ed0e19ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe4d77b41156a05052871156a04d77b4dfdde4fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a0082970505287dfdde4fdfdfedfdde4dfdde4dfdde4fdfdfe -fdfdfefdfdfe505287082970a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19b63a5afdfdfefdfdfeb63a5aed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe082970082970a2b3d14d77b4082970a2b3d1fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829700829708890b1fdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfe -fdfdfefdfdfedfdde4a2b3d1fdfdfefdfdfedfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19e7949cfdfdfedfdde4b63a5aed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970a2b3d1fdfdfe -dfdde4b0cfeddfdde4fdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfedfdde4dfdde4 -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829708890b1fdfdfedfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b11156a0dfdde48890b10829704d77b41156a01156a0dfdde4fdfdfefdfdfe -fdfdfedfdde4e7949cdfdde4fdfdfedfdde4ed0e19ed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfedb0cfed -1156a01156a01156a0505287dfdde44d77b4505287fdfdfea2b3d170a7dfb0cfed1156a0505287 -1156a01156a0b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a00829708890b1fdfdfedfdde4a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1000001b0cfed4d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19ed0e19b63a5afdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfeda2b3d1 -082970fdfdfe70a7df000001dfdde44d77b4082970fdfdfea2b3d18890b14d77b4082970fdfdfe -b0cfed082970a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0082970505287fdfdfedfdde4b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde4ed0e19ed0e19b63a5adfdde4fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a0082970fdfdfea2b3d1082970b0cfeddfdde4 -dfdde4fdfdfe4d77b4082970dfdde470a7df082970dfdde4a2b3d18890b170a7df082970dfdde4 -fdfdfea2b3d1dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970082970dfdde4fdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfedfdde4b63a5aed0e19ed0e19dfdde4fdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfedfdfdfe -4d77b44d77b41156a0082970dfdde4b0cfed08297070a7dfa2b3d1a2b3d1a2b3d1082970082970 -4d77b4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -08297070a7dffdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfee7949ced0e19ed0e19e7949cfdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfed8890b1 -082970b0cfed70a7df082970b0cfedfdfdfe0829704d77b470a7dfb0cfedfdfdfedfdde4a2b3d1 -082970082970b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970dfdde4fdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfee7949ced0e19ed0e19e7949cfdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfed8890b1 -082970fdfdfea2b3d1082970b0cfedfdfdfe5052870829704d77b4fdfdfe8890b11156a0fdfdfe -a2b3d108297070a7dffdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a04d77b41156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970 -505287dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe505287082970b0cfed4d77b4000001dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfee7949ced0e19ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe082970082970b0cfed4d77b4082970b0cfed8890b1 -082970b0cfed4d77b4000001b0cfedfdfdfe5052870829704d77b4fdfdfe4d77b4082970b0cfed -8890b108297070a7dffdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a070a7dfa2b3d11156a04d77b4b0cfed1156a08890b14d77b4 -70a7df4d77b4a2b3d14d77b41156a01156a01156a01156a01156a01156a01156a01156a0082970 -505287fdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b1505287b0cfeda2b3d1505287dfdde470a7df505287dfdde4fdfdfefdfdfe -dfdde4ed0e19ed0e19ed0e19e7949ce7949ce7949ce7949ce7949cdfdde4fdfdfea2b3d1ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe4d77b45052874d77b45052874d77b4dfdde4b0cfed -5052874d77b48890b1505287b0cfedfdfdfea2b3d10829708890b1fdfdfea2b3d15052874d77b4 -1156a0505287b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0dfdde4dfdde41156a0dfdde4fdfdfe8890b1fdfdfedfdde4 -b0cfedb0cfedfdfdfe4d77b40829701156a01156a01156a01156a01156a01156a01156a0082970 -505287dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -e7949ced0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19e7949cfdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfea2b3d108297070a7dffdfdfefdfdfedfdde4dfdde4 -dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0b0cfedfdfdfedfdde4b0cfedfdfdfedfdde4dfdde4fdfdfe -b0cfeda2b3d1fdfdfe70a7df0829701156a01156a01156a01156a01156a01156a01156a01156a0 -082970dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe8890b1a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -e7949ced0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19e7949cfdfdfee7949ced0e19 -ed0e19b63a5adfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe4d77b408297070a7dffdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0b0cfeda2b3d170a7df1156a070a7df70a7df1156a04d77b4 -269dee70a7dfa2b3d11156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970a2b3d1fdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfedfdde4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfedfdde4dfdde4dfdde4dfdde4dfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfedfdde4 -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfe4d77b40829701156a0dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829701156a0fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829708890b1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/in_21.gif b/Docs/Books/in_21.gif deleted file mode 100644 index cffd7789395fb79f32f6fa1ad0679ae377019905..0000000000000000000000000000000000000000 Binary files a/Docs/Books/in_21.gif and /dev/null differ diff --git a/Docs/Books/in_21.txt b/Docs/Books/in_21.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/manual.eps b/Docs/Books/manual.eps deleted file mode 100644 index 8bb88345060bb2b0274e17812c7994205403145c..0000000000000000000000000000000000000000 --- a/Docs/Books/manual.eps +++ /dev/null @@ -1,1221 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/manual.eps -%%CreationDate: Sun Dec 31 14:30:17 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 294 383 -%%EndComments -%%BeginPreview: 100 132 1 132 -% fffffffffffffffffffffffff0 -% 800000000000000000ff7c0010 -% 8000000000000000007fde0010 -% 8000000000000000003fef0010 -% 8000000000000000000ff7c010 -% 80000000000000000007bbe010 -% 80000000000000000001cef810 -% 80000000000000000000fb3c10 -% 800000000020000100007ffe10 -% 80000025130509400a603fef90 -% 800000000000000000000f7bd0 -% 8000000000000000000007fdf0 -% 8000aaaaaaaaaa55550543def0 -% 800100002410009012549cf770 -% 800024200041000100000079b0 -% 8001014a948855244924921ef0 -% 80002800201200011000040f70 -% 800102524540955422aaa007b0 -% 80002400800a52aa84000401f0 -% 8001089414954a4951492200f0 -% 80002101205250025510040070 -% 80010424454a82a894a2a00010 -% 80002088895410012544040010 -% 80010a11152924921490900010 -% 8000204224a201004aa2040010 -% 800109085554522a0484500010 -% 8000204149208040a2a0840010 -% 80010514aaa214890924100010 -% 800020229244410022a1240010 -% 80010a44aa88882a4488440010 -% 8000200a949112408822000010 -% 800104a4a50220091144940010 -% 8000210a94a404a02008040010 -% 80010824aa08a1050521240010 -% 8000224a929008204804440010 -% 80010415542292491150840010 -% 800120924a8400822202100010 -% 8001092aa910a4104048440010 -% 800110124a2209248a02040010 -% 800102aaa904400100a8a40010 -% 800124124a4892a82901040010 -% 800108aaa88100024024240010 -% 80011109251225240a40840010 -% 8001202aaa204000a08a100010 -% 8001051249050a540410440010 -% 8001104aaa4820012122040010 -% 80010214921109484840a40010 -% 8001288aaa824002020a000010 -% 80000129242415289090440010 -% 80012405558880010422140010 -% 80000894921024a42104800010 -% 80012102aaa288008848240010 -% 8000042a4940112a1211040010 -% 80012082aa4a42004082440010 -% 80010a11254008520924140010 -% 80012044a9294100a240840010 -% 800104889550142404a9240010 -% 80011011249240892120040010 -% 80012282155409104a85440010 -% 800104244924a02204a0100010 -% 80002088055505049549240010 -% 800109115124a0482902040010 -% 80002220045554814a90440010 -% 800104452089252aa924940010 -% 800020800912aaa52401040010 -% 80010914a22001284148240010 -% 80012200044488020812440010 -% 80010452908022a4a240040010 -% 80011080021550000409540010 -% 8001220820414a2120a2040010 -% 80010442890a54840000440010 -% 800129fffffffffbfffc940010 -% 800101fffffffffffffc000010 -% 800101fffffffffffffc040010 -% 8000bfffffff9ffffffdf80010 -% 800001ffffff9ffffffc000010 -% 800001ffffffdffffff8000010 -% 800001ffffff4ffffffc000010 -% 800001ffffff4ffffff8000010 -% 800001ffffff67fffffc000010 -% 800001ffffff7ffffff8000010 -% 800001fffffffffffffc000010 -% 80000186109470bdc41c000010 -% 800003d2f3bc979dbafc000010 -% 80000b927b9db7cf3efd000010 -% 800013d65296b0a57ebc400010 -% 80000bc6fbbc77b33ef9400010 -% 80000396f3bdb7f93efd000010 -% 800001da539492b99adc000010 -% 800001fbbfeffdffe6b8000010 -% 800001ffffffffdffffc000010 -% 800001ff7bbb933b9ff8000010 -% 800001fe73b9d7bbbffc000010 -% 800001fe739cf7bbbff8000010 -% 800001ff335a5739bffc000010 -% 800001fe9b1b37b5bff8000010 -% 800001fedacbb32cbffc000010 -% 800001fedaebb92c93f8000010 -% 800001fffffffdfffffc000010 -% 800001fffffffffffff8000010 -% 80000000000aab000248000010 -% 80000000000124000000000010 -% 80000000000090000000000010 -% 80000000000040000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000040000000000001000010 -% 80004200000002004240000010 -% 80000022110410240004400010 -% 80000000400000000800000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000010000004000000010 -% 80000000200202000020000010 -% 80000109000000004040000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 8002aaaaaaaaaaaaaa90000010 -% 80000000000000000825540010 -% 80000000000000000000000010 -% 80000000004020000000000010 -% 80000000020100100000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -279.169649 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 132 8 -% Transformation matrix -[ 100 0 0 132 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102 -010102c6c8cdffffffececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefffffffc6c8cd010102010102010102010102010102010102 -0101021c2026969aa13b424a0101020101020101023b424ae2effaffffffffffffececefececef -ececefececefececefececefececefececefececefececef010102 -010102ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa1c2026010102010102010102010102 -0101020101021c2026777f88777f881c20260101020101021c2026ececefffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff5d636c010102010102010102 -0101025d636c1c20260101025d636c969aa13b424a010102010102010102969aa1ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffadb4bc010102010102 -0101023b424a3b424a0101020101023b424ac6c8cd5d636c0101020101020101023b424affffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effa1c2026 -010102010102010102777f88777f88010102010102969aa15d636c010102010102010102010102 -c6c8cdffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -777f880101020101021c2026777f8867a3d11c20261c20265d636c5d636c777f88010102010102 -010102777f88ffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffadb4bc0101020101020101023b424a5d636c5d636c0101021c2026adb4bc969aa11c2026 -0101020101023b424affffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -969aa1c6c8cdffffffc6c8cdadb4bcadb4bcececefececefc6c8cdc6c8cdececefffffff969aa1 -adb4bcffffffd7dde5777f88d7dde5ffffffc6c8cdc6c8cdc6c8cdffffffffffffffffffececef -969aa1ececefffffffadb4bcadb4bcd7dde5ffffffc6c8cdd7dde5ffffff9ec8e8969aa1ffffff -ececefc6c8cdffffffd7dde5c6c8cdc6c8cdffffffececefc6c8cdd7dde5ffffffffffffffffff -ffffffffffffececef1c20260101020101021c20265d636c1c20260101020101025d636c5d636c -3b424a010102010102010102c6c8cdffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -777f88c6c8cdffffff969aa1c6c8cdadb4bcc6c8cdffffffadb4bc969aa1d7dde5ffffff5d636c -777f88ffffffffffff777f88ffffffffffff969aa1777f88adb4bcffffffffffffffffffd7dde5 -777f88ececefffffff969aa1c6c8cd777f88ffffffc6c8cdc6c8cdffffffc6c8cdadb4bcffffff -d7dde5adb4bcffffff777f88c6c8cd969aa1ececefececef5d636c777f88ffffffffffffffffff -ffffffffffffffffffffffff777f880101020101020101023b424a3b424a0101020101023b424a -5d636c1c20261c2026010102010102777f88ffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d7dde5ffffffffffffffffffd7dde5d7dde5ffffffffffffc6c8cdadb4bcffffffffffffc6c8cd -c6c8cdffffffffffffc6c8cdffffffffffffececefececefececefffffffffffffffffffffffff -c6c8cdececefffffffc6c8cdc6c8cdd7dde5ffffffd7dde5ececefffffffd7dde5d7dde5ffffff -ececefd7dde5ffffffd7dde5c6c8cdc6c8cdffffffffffffd7dde5adb4bcececefffffffffffff -ffffffffffffffffffffffffffffffc6c8cd0101020101020101020101025d636c3b424a010102 -0101023b424a777f880101020101020101023b424affffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff3b424a0101020101020101023b424a5d636c -0101020101025d636c777f88010102010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffadb4bc3b424a777f88777f88969aa1777f88969aa1777f88969aa1969aa1777f88 -969aa1969aa1969aa1969aa1969aa1969aa1969aa1777f88777f88777f88777f88777f88777f88 -777f88777f88777f88777f88777f88777f88777f88777f88777f88969aa1969aa1969aa1969aa1 -969aa1969aa1969aa1adb4bcadb4bc969aa1777f88969aa1969aa1777f88969aa1969aa1969aa1 -969aa1969aa1777f88969aa1969aa1969aa1969aa1adb4bcadb4bcadb4bcadb4bcadb4bc969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1adb4bcc6c8cd5d636c010102010102010102777f88 -777f881c20260101025d636cadb4bc5d636c010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88969aa1d7dde5adb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cd -c6c8cdadb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cd9ec8e8969aa1969aa1adb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -c6c8cdadb4bcc6c8cdc6c8cdadb4bcadb4bcadb4bc969aa1adb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bc969aa1969aa1969aa1969aa1adb4bc969aa1969aa1adb4bc969aa1adb4bc969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1969aa15d636cd7dde5d7dde5010102010102010102 -5d636cadb4bc3b424a0101021c2026969aa15d636c010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5e2effa9ec8e89ec8e8b6daf59ec8e8b6daf59ec8e8b6daf5b6daf5 -9ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5d7dde5b6daf5d7dde5b6daf5ffffff969aa1adb4bcffffffffffff3b424a010102 -0101021c2026969aa1969aa11c2026010102777f88777f88010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf584b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd9ec8e8 -9ec8e89ec8e89ec8e884b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffff777f88 -0101020101020101025d636c969aa13b424a0101025d636c010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1969aa1ffffffffffffffffffffffff -c6c8cd0101020101020101023b424aadb4bc5d636c010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffffffffff -ffffffffffff3b424a010102010102010102777f883b424a010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88adb4bcffffffffffffffffffffffff -ffffffffffffffffff777f88010102010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd9ec8e884b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1969aa1ffffffffffffffffffffffff -ffffffffffffffffffffffffc6c8cd010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff3b424a010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff777f88010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cc6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff969aa1d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececefb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cd7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d184b7dd9ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88e2effaffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d184b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf59ec8e89ec8e89ec8e884b7dd84b7dd -84b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd84b7dd84b7dd -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5b6daf5b6daf5 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d19ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636ce2effa9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5 -b6daf59ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf59ec8e89ec8e8b6daf5b6daf59ec8e884b7dd67a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e8b6daf5b6daf59ec8e89ec8e8b6daf5b6daf5b6daf59ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e8b6daf584b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d184b7dd9ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8d7dde5777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636ce2effa84b7dd84b7dd84b7dd84b7dd9ec8e884b7dd1c20261c20263b424a -3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a -3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a -3b424a3b424a3b424a3b424a3b424a3b424a5d636c5d636c5d636c5d636c5d636c5d636c5d636c -5d636c5d636c5d636c5d636c3b424a5d636c5d636c5d636c5d636c5d636c5d636c5d636c777f88 -9ec8e89ec8e89ec8e884b7dd84b7dd9ec8e8d7dde55d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffffb6daf5b6daf5e2effab6daf5e2effa9ec8e80101023b424a1c2026 -1c20261c20261c20261c20261c20261c20261c20261c20261c20261c20261c20260101021c2026 -0101020101020101020101020101021c20261c20263b424a1c20261c20261c20261c20261c2026 -1c20260101021c20261c20261c20261c20261c20261c20261c20261c20261c20261c20261c2026 -1c20261c20261c20261c20261c20261c20261c20261c20261c20260101021c20260101021c2026 -b6daf59ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef3b424ad7dde5c6c8cdc6c8cdc6c8cdc6c8cdd7dde5c6c8cd1c20263b424a010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a3b424a -ffffffffffffe2effae2effae2effaffffffffffff5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88777f88777f88777f88777f88777f88777f885d636c0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102777f88ececef010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a1c2026 -777f88777f885d636c5d636c5d636c5d636c5d636c5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102adb4bcffffff1c2026 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20263b424a -ececefd7dde5d7dde5d7dde5d7dde5d7dde5c6c8cdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101023b424a5d636cadb4bc969aa1 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102969aa1777f88969aa1ececef -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effa1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102adb4bc777f88777f88ffffff -3b424a010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102777f88adb4bc010102010102ececef -adb4bc010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef0101023b424a1c2026 -1c20261c20261c20261c20261c20261c20261c20261c20260101021c20261c2026010102010102 -0101021c20261c20260101020101020101021c20260101025d636c5d636c0101020101025d636c -777f88010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0101023b424a3b424a -3b424a3b424a3b424a1c20263b424a3b424a3b424a3b424a3b424a3b424a1c20261c20263b424a -3b424a3b424a1c20261c20261c20263b424a3b424a3b424a1c20261c20261c20261c20261c2026 -1c20263b424a3b424a3b424a1c20261c20261c20263b424a3b424a3b424a1c20263b424a1c2026 -1c20261c20263b424a3b424a3b424a3b424a3b424a3b424a5d636c3b424a0101020101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde5010102010102777f88 -e2effa777f88adb4bc010102010102c6c8cdadb4bc777f88c6c8cd1c2026969aa1c6c8cd777f88 -adb4bc3b424aadb4bcadb4bc777f88c6c8cd1c2026777f88c6c8cd777f88777f88010102010102 -d7dde5adb4bc969aa1c6c8cd010102777f883b424a0101020101021c2026c6c8cd1c2026010102 -3b424a969aa1777f88adb4bc5d636c3b424aadb4bc777f88adb4bc777f880101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffb6daf5777f88010102010102777f88 -d7dde5010102c6c8cdc6c8cd010102d7dde5777f880101021c2026010102969aa1ececef010102 -010102010102ececef777f880101021c2026010102969aa1c6c8cd010102ececef777f88010102 -ffffff5d636c0101025d636c010102c6c8cdffffff010102010102010102c6c8cd0101025d636c -ffffff1c20260101021c2026969aa13b424affffff0101021c2026777f880101023b424a3b424a -b6daf5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffb6daf567a3d167a3d1777f88010102010102777f88 -c6c8cd010102969aa1c6c8cd010102d7dde5969aa1010102010102010102969aa1d7dde5010102 -010102010102d7dde5777f88010102010102010102969aa1adb4bc010102d7dde5969aa1010102 -e2effa5d636c010102010102010102777f88ffffffececef010102010102777f88010102ffffff -969aa10101020101020101020101021c2026ffffff0101020101020101020101023b424a1c2026 -67a3d167a3d1d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff67a3d167a3d167a3d184b7dd777f880101020101025d636c -ececef5d636cadb4bc1c2026010102c6c8cdd7dde5777f88c6c8cd010102777f88ffffff777f88 -adb4bc010102c6c8cdc6c8cd777f88d7dde5010102777f88c6c8cd5d636cadb4bc010102010102 -e2effaadb4bc777f88969aa1010102777f881c2026ffffffadb4bc010102777f88010102ffffff -5d636c0101020101020101020101021c2026ffffff777f88969aa15d636c0101023b424a3b424a -84b7dd67a3d167a3d167a3d1e2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffe2effa84b7dd67a3d167a3d1777f880101020101025d636c -d7dde5ffffff969aa1010102010102d7dde5969aa11c20263b424a010102777f88d7dde51c2026 -1c2026010102c6c8cd777f881c20263b424a010102777f88d7dde5ffffff5d636c010102010102 -e2effa777f883b424a3b424a010102969aa1010102010102ffffff969aa15d636c010102ffffff -777f880101020101020101020101021c2026ffffff3b424a3b424a3b424a0101023b424a3b424a -84b7dd67a3d167a3d167a3d1e2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa9ec8e8777f88010102010102777f88 -adb4bc1c2026ffffff3b424a010102d7dde55d636c010102010102010102777f88c6c8cd010102 -010102010102d7dde53b424a010102010102010102969aa1777f883b424affffff1c2026010102 -e2effa3b424a010102010102010102969aa11c20260101023b424affffffc6c8cd010102c6c8cd -ececef0101020101020101020101021c2026ffffff0101020101020101020101023b424a3b424a -67a3d184b7dde2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffadb4bc010102010102777f88 -d7dde50101025d636cececef1c2026d7dde5adb4bc3b424aadb4bc1c2026969aa1d7dde5010102 -010102010102ffffffadb4bc5d636c969aa13b424a969aa1c6c8cd010102adb4bcececef1c2026 -ffffffadb4bc3b424a969aa13b424ac6c8cd5d636c010102010102969aa1d7dde5010102010102 -d7dde5adb4bc1c20265d636c777f885d636cffffff3b424a3b424a969aa11c20263b424a3b424a -e2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c20263b424a3b424a -3b424a1c20261c20265d636c3b424a3b424a5d636c777f88777f883b424a5d636c5d636c3b424a -1c20261c20265d636c5d636c777f885d636c1c20263b424a5d636c1c20261c20265d636c3b424a -3b424a5d636c5d636c5d636c1c20263b424a3b424a0101020101020101023b424a010102010102 -0101025d636c969aa1969aa15d636c3b424a777f885d636c777f88777f880101020101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde51c20263b424a010102 -0101021c20261c20260101020101021c20261c20261c20261c20263b424a1c20261c20263b424a -1c20261c20261c20260101021c20261c20261c20261c20261c20263b424a3b424a3b424a1c2026 -1c20261c20261c20261c20263b424a3b424a3b424a3b424a3b424a3b424a1c20263b424a3b424a -3b424a1c20261c20261c20261c20263b424a1c20261c20261c20261c20260101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101020101025d636c5d636c0101020101020101021c2026777f88010102 -010102010102777f88010102010102010102c6c8cd3b424a0101020101025d636cadb4bc010102 -e2effa777f88010102010102777f88d7dde50101020101020101025d636c010102010102010102 -d7dde5777f880101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102adb4bcffffff010102010102010102d7dde5c6c8cd010102 -0101025d636cffffff1c2026010102010102ffffffffffff0101020101023b424a969aa1010102 -ffffff5d636c010102010102777f88ffffff0101020101023b424affffff1c2026010102010102 -ffffff777f880101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102969aa1ffffff5d636c0101021c2026ffffffc6c8cd010102 -0101025d636cffffff777f88010102010102777f88ffffffd7dde50101021c2026777f88010102 -ececef3b424a0101020101025d636cd7dde50101020101025d636cffffff777f88010102010102 -d7dde55d636c0101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101020101025d636cadb4bcd7dde50101025d636cadb4bcc6c8cd010102 -1c20265d636c5d636cd7dde5010102010102777f88010102ffffff969aa11c2026777f88010102 -e2effa5d636c0101020101025d636ce2effa0101021c20263b424a5d636cd7dde5010102010102 -ececef5d636c0101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102777f88010102d7dde5adb4bc5d636c5d636cececef010102 -5d636cd7dde5969aa1ffffff1c2026010102969aa10101021c2026ffffffadb4bc5d636c010102 -e2effa5d636c0101020101025d636cd7dde50101023b424ac6c8cd777f88ffffff1c2026010102 -e2effa5d636c0101020101020101020101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101021c2026adb4bc010102777f88ffffff1c20261c2026ffffff010102 -969aa15d636c010102d7dde5969aa1010102adb4bc0101020101025d636cffffff777f88010102 -e2effaadb4bc010102010102adb4bcd7dde5010102969aa15d636c010102ececef969aa1010102 -d7dde55d636c0101020101021c20260101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101021c2026d7dde5010102010102777f880101023b424ad7dde55d636c -c6c8cd010102010102777f88d7dde53b424ad7dde51c2026010102010102969aa1777f88010102 -3b424affffffc6c8cd777f88d7dde5c6c8cd3b424ad7dde51c2026010102777f88ececef010102 -e2effaadb4bc3b424ad7dde5777f88010102010102010102010102010102010102010102777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -1c20260101020101020101021c20261c20263b424a0101020101020101020101021c2026010102 -0101021c2026777f881c20260101021c20260101021c20260101020101020101021c2026010102 -1c20261c20261c20263b424a0101020101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c20261c2026 -1c20261c20261c20261c20260101020101020101021c20260101021c2026010102010102010102 -0101020101021c20260101020101020101021c20261c20261c20261c20261c20261c20261c2026 -1c20260101020101020101020101020101020101020101020101020101020101020101021c2026 -0101020101020101020101020101020101020101020101020101020101021c20260101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cdc6c8cdc6c8cd -c6c8cdc6c8cdc6c8cdd7dde5c6c8cdd7dde5d7dde5d7dde5d7dde5d7dde5d7dde5c6c8cdd7dde5 -c6c8cdadb4bcc6c8cdc6c8cd969aa1777f88777f885d636c777f885d636c777f88777f885d636c -777f885d636c777f885d636c777f88adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bc969aa1969aa1969aa1969aa1969aa1969aa1777f88c6c8cd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9ec8e867a3d167a3d184b7dd84b7dd67a3d184b7dd -67a3d167a3d184b7dde2effaffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa67a3d167a3d167a3d167a3d167a3d1 -67a3d1b6daf5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf567a3d167a3d19ec8e8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd7dde5b6daf5e2effaffffffe2effaffffffffffffffffffececef -ffffffffffffe2effaffffffb6daf5e2effaffffffd7dde5e2effad7dde5d7dde5d7dde5e2effa -b6daf5ffffffffffffffffffffffffd7dde5b6daf5e2effaffffffffffffffffffffffffd7dde5 -ffffffffffffd7dde5ffffffffffffececefffffffffffffd7dde5d7dde5e2effaffffffe2effa -e2effaffffffffffffe2effaffffffe2effad7dde5ffffffffffffe2effae2effae2effaffffff -ffffffffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd7dde59ec8e8ffffffffffffffffff9ec8e89ec8e8ffffffd7dde567a3d1 -ffffffffffff67a3d1ffffff84b7dde2effaffffff9ec8e8d7dde59ec8e8e2effaffffffe2effa -84b7dde2effaffffffffffffffffff9ec8e8b6daf5b6daf5b6daf5ffffffffffffe2effa84b7dd -ffffffffffff84b7ddffffffffffff84b7ddffffffffffff84b7ddd7dde59ec8e8e2effa9ec8e8 -e2effab6daf5b6daf59ec8e8d7dde5d7dde5ffffffe2effab6daf5b6daf5ffffffb6daf5b6daf5 -e2effa67a3d1ffffffffffffb6daf5ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff67a3d19ec8e8ffffffffffffb6daf584b7ddffffffe2effa67a3d1 -e2effaffffff84b7ddffffff9ec8e8ffffffffffffb6daf5e2effab6daf5b6daf5e2effae2effa -9ec8e8ffffffffffffffffffffffffb6daf5b6daf5b6daf5d7dde5ffffffffffffffffff84b7dd -e2effab6daf584b7ddffffffffffff84b7ddb6daf5ffffff9ec8e8d7dde5b6daf5ffffff9ec8e8 -9ec8e8d7dde5e2effa9ec8e8d7dde584b7ddffffffffffff67a3d1e2effaffffffffffff84b7dd -e2effa9ec8e884b7ddffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9ec8e8b6daf5e2effad7dde584b7ddd7dde5ececefd7dde5 -84b7ddd7dde5b6daf5ececef9ec8e8e2effaffffff9ec8e8e2effa9ec8e8e2effaffffffe2effa -9ec8e8ffffffffffffffffffffffffb6daf59ec8e8ffffffffffffffffffffffffffffff84b7dd -ffffffffffff84b7ddffffffb6daf59ec8e89ec8e8ffffffb6daf567a3d1d7dde5ffffff9ec8e8 -d7dde5b6daf5e2effa9ec8e8ffffffe2effa84b7dd9ec8e884b7dde2effaffffffffffff67a3d1 -e2effaffffffe2effa67a3d1b6daf5ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffb6daf5e2effad7dde5b6daf5ffffffe2effa9ec8e8e2effaffffff -d7dde5ffffffb6daf5e2effae2effa84b7dde2effa84b7ddd7dde59ec8e8d7dde5e2effae2effa -9ec8e8d7dde5b6daf5ffffffffffff9ec8e8d7dde5ffffffe2effaffffffffffffe2effa84b7dd -ffffffffffff9ec8e8d7dde5b6daf5ffffff9ec8e8b6daf5b6daf5ececef9ec8e8e2effa9ec8e8 -d7dde5b6daf5d7dde59ec8e8ffffffffffffd7dde5b6daf5d7dde5b6daf5ffffffb6daf5b6daf5 -e2effab6daf5ffffffb6daf584b7ddffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effae2effaffffff -ffffffe2effae2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffe2effaffffffffffffffffffe2effae2effae2effaffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effad7dde5e2effa -e2effae2effad7dde5ffffffffffffd7dde5e2effae2effaffffffe2effaffffffffffffe2effa -e2effaffffffffffffffffffffffffffffffffffffe2effad7dde5d7dde5d7dde5d7dde5d7dde5 -e2effae2effae2effae2effaffffffe2effad7dde5e2effaffffffe2effaffffffffffffffffff -e2effae2effaffffffffffffffffffe2effaffffffe2effaececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde584b7ddffffffffffff -ffffffb6daf59ec8e8ffffffffffff84b7dde2effa9ec8e8e2effab6daf5ffffffffffffb6daf5 -84b7ddffffffffffffffffffffffffffffffe2effab6daf5ffffffe2effaffffff9ec8e89ec8e8 -ffffff9ec8e89ec8e8ffffffffffff84b7ddb6daf5ffffffececef84b7ddffffffffffffd7dde5 -84b7ddffffffffffffffffffffffff9ec8e8b6daf59ec8e8d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff84b7ddb6daf5ffffffffffff -ffffffd7dde5b6daf5ffffffffffff9ec8e8ffffffb6daf584b7ddffffffffffffffffffd7dde5 -9ec8e8ffffffffffffffffffffffffffffffececef67a3d1b6daf5ffffffffffffd7dde5b6daf5 -ffffffd7dde59ec8e8d7dde5ffffff9ec8e8b6daf5e2effaffffff9ec8e8ffffffffffffececef -84b7dde2effae2effaffffffffffff84b7dde2effad7dde5d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf59ec8e8ffffffffffff -d7dde59ec8e89ec8e8ffffffe2effa84b7ddffffffe2effa84b7ddffffffffffffffffffd7dde5 -9ec8e8ffffffffffffffffffffffffffffffffffffe2effa84b7ddb6daf5ffffffd7dde5b6daf5 -ffffffd7dde59ec8e8e2effaffffffb6daf5d7dde5ffffffffffff9ec8e8ffffffffffffe2effa -84b7dde2effaffffffffffffffffff9ec8e8e2effad7dde567a3d1d7dde5ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf5e2effae2effa -9ec8e8ffffff9ec8e8d7dde5d7dde59ec8e8ffffffe2effa9ec8e8ffffffffffffffffffe2effa -9ec8e8e2effae2effae2effaffffffffffffffffffe2effad7dde5e2effaffffffb6daf5b6daf5 -ffffffd7dde59ec8e8ffffffffffff9ec8e8b6daf5ffffffe2effa9ec8e8e2effae2effab6daf5 -9ec8e8ffffffe2effaffffffffffff9ec8e8e2effad7dde5d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd7dde5ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -c6c8cd969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1 -777f88777f88777f88969aa1777f88969aa1969aa1969aa1969aa1969aa1969aa1969aa1777f88 -777f88777f88969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1adb4bc969aa1 -969aa1969aa1969aa1777f88777f88969aa1adb4bc969aa1969aa1adb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e2effad7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5 -c6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdd7dde5d7dde5c6c8cdc6c8cdd7dde5c6c8cd -adb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bc -c6c8cdc6c8cdadb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bcadb4bc -adb4bcadb4bcadb4bc969aa1adb4bcc6c8cdadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd7dde5e2effaffffffffffffffffff -ffffffd7dde5e2effae2effae2effab6daf5ffffffffffffffffffffffffb6daf5ffffffffffff -e2effaffffffffffffffffffe2effaffffffe2effaffffffffffffffffffe2effaffffffe2effa -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9ec8e8e2effaffffff9ec8e8d7dde5 -ffffffb6daf59ec8e8ffffffe2effa9ec8e8ffffffd7dde59ec8e8ffffff9ec8e89ec8e8ffffff -e2effaffffffffffffffffff9ec8e8e2effa9ec8e8e2effaffffffb6daf5b6daf5ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9ec8e8ffffffe2effa9ec8e89ec8e8 -e2effa9ec8e89ec8e8ffffffd7dde5b6daf5ffffffb6daf584b7dde2effae2effad7dde584b7dd -e2effaffffffffffffffffff9ec8e8e2effaececef9ec8e8b6daf59ec8e8b6daf5ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffb6daf5e2effae2effaffffffb6daf5 -b6daf5e2effab6daf5e2effae2effab6daf5e2effae2effad7dde59ec8e8d7dde5ffffffd7dde5 -b6daf5ececefffffffffffffb6daf5e2effaffffffffffffb6daf5e2effab6daf5e2effae2effa -ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/manual.gif b/Docs/Books/manual.gif deleted file mode 100644 index fff578e33124ba0e3f92649e1ddf5af8ae7c77b3..0000000000000000000000000000000000000000 Binary files a/Docs/Books/manual.gif and /dev/null differ diff --git a/Docs/Books/manual.txt b/Docs/Books/manual.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/msql.eps b/Docs/Books/msql.eps deleted file mode 100644 index 338e152dc4871fd51e340498b4e5a27645ebd790..0000000000000000000000000000000000000000 --- a/Docs/Books/msql.eps +++ /dev/null @@ -1,1221 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/msql.eps -%%CreationDate: Sun Dec 31 14:30:35 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 294 383 -%%EndComments -%%BeginPreview: 100 132 1 132 -% fffffffffffffffffffffffff0 -% 8000000000008492aaaaaaa810 -% 80000000000000000000000010 -% 80002000800000000000000010 -% 80054a912aa4a154a2048a0010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000002000010 -% 8000000000000000003ff00010 -% 800000000000000000781c0010 -% 800000000000000000f1e40010 -% 8000001e000000000567f20010 -% 8000001bc00000003a803d0010 -% 8000003730000000d7fa570010 -% 8000003918000001bfe87f0010 -% 800000738e00000000019e8010 -% 80000063d30000000040430010 -% 80000063dd8000000010260010 -% 80000043eac000000028010010 -% 80000051f6c000000028020010 -% 800000203e6000000050050010 -% 800001080560000000e0018010 -% 80000fe143e0000000d1a74010 -% 80003bf802a0000001d28d8010 -% 80006dfe29f0000001fa3bc010 -% 8000fb6e02b8000001f4efa010 -% 8001d51ba848000003fdbb9010 -% 8003ff4f5034000001ff6fa010 -% 80076afae00e000001fadb3010 -% 800fdfebe80a000001dfb75010 -% 801d7a97b8070000007d7e7010 -% 803fafbff80280000193d0b010 -% 803dbb6b700180000100513010 -% 807f15dfd000c0000150071810 -% 80f75b7fb00020000037fc3010 -% 80fe87ff600000000120801010 -% 81ea60fb000000000080003810 -% 83df17b6000000000080001810 -% 83ddc2fe0000000000a000e810 -% 838dd5f80000000000d0009810 -% 87e3efd00000000000b006f010 -% 87a7ffa00000000000d0048810 -% 87baaf4000000000005113e810 -% 8f6f9e80000000000040421010 -% 8ff83c00000000000002803010 -% 8fa22000000000000041405010 -% 8ed0400000000000000100a010 -% 8f52910000000000007aa26010 -% 9db7d3200000000001f6aac010 -% fb6aadfffffffffffffbfef810 -% fe577e555555555555ad5fa810 -% eabad3eedffeabed5ff776d810 -% de6f615a155552b10a45bdb010 -% fb5ad1ec7b6e69a6e38d6fd810 -% afb774b42edabacbb14bdd6810 -% 9ddad0da6ab46d96d98eb6d810 -% 9db7b4b22186371db08b6db010 -% 9c6d666a636a0d16d8cddb6810 -% bcbbb45532cd032db48b6db810 -% 9e6d6636519bc11b688edb6810 -% bfb7d5243956b116d8cb6db010 -% bb6d672e68bb691db48db6d810 -% f9dbb50a34acd88b698b6db010 -% f0b6d79c6c5969cdb14eab6810 -% f1dda516366cb343678a3ed810 -% f376c2f81a5a26f08a0055b010 -% e2dbbfafeeefddae3dffbb6810 -% 81b6eaf558b56b746b556ed810 -% 836dbf5ef5ddbdae1dbbb5b010 -% 81db6aeba16b6b7580eeded810 -% 82b6ddbd73bdb6deebb5b5b010 -% 81edb76baed6d5b5ad6edb6810 -% 82bb6ddd757594da0781b6d810 -% 81d6db6bdfaf34b1f0e2db6810 -% 837db6deb5752ea35ca76db810 -% 81ab6db5d6deb566e862db6810 -% 82f6d76e21830fc5b64776d810 -% 81ada9b82862854edc22dbb010 -% 837b596e5cd38185b6276d6810 -% 81aecbda68b2f04eda22dbb810 -% 82f5a4363cd35845b6276ed010 -% 81af46ed54b2ee46da62db7810 -% 8375315a38ea5a45b4576da810 -% 81ae69ee6cb16c636ce2cb7010 -% 82fb345a34d336b1b1459ed810 -% 81ad846c2860896c43a115b010 -% 82db5db5db5dabb61eaaaee810 -% 81b6f76f6deb76db95df75b810 -% 836dadb5b6b6ddb68eb5aed010 -% 81b6dadedb6db6db415adb7810 -% 82db776b6ddb6b6df0b776d010 -% 81248894922555551755555810 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 81528900000000000000000010 -% 824a4200000000000000000010 -% 8014a800004000000040000010 -% 80810000000921204a04089010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -279.169649 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 132 8 -% Transformation matrix -[ 100 0 0 132 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -000000fffffffffffffffffffffefffffffffdcdf5fcadeefcb4effcb4effcadeefcb4effcb4ef -fcadeefcadeefcadeefca2eef69fe9fcadeefca2eef69fe9f69fe9fca2eeef9fe2f69fe9fca2ee -fca2eefca2eeef9fe2f69fe9fca2eefca2eefca2eefca2eefb99e9fb99e9fca2eefc98eafc98ea -fc98eafb8de7fb8de7fb8de7fb8de7fc82e6fc82e6fc82e6fb73e3f96fe0f86ee0f965e1fb73e3 -fb73e3f86ee0fb73e3f965e1f965e1f86ee0f86ee0f965e1f861ddf861ddf861ddf456daf456da -f456daf456daf456daf456daf456daf456daf34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5 -f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f740d6f34ad5f64ad9 -f64ad9f735d3fb99e9fffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffefffffefffffefffffdfefffffff4f4f4f2f2f3 -fffffffffffffdfdfefeffffffffffeeeeeefdfefefffffffffefefffffffffefffefefeffffff -f2f2f3f1f0f0fffffffffffffdfcfdf7f7f7fafafbfcf3fafffffffffffff1f0f0fefefeffffff -fffffffffefffffdfefffefffffefffffcfefcf3fafcf3fafdfdfefffffffffbfffffefff2f2f3 -fcf3fafcf3faf2f2f3fffefffffefffffbfefffbfefffcfefffcfefffcfefcf3fafefefefffbff -fff9fefff9fefff5fefcf3fafff5fefcf3fafcf3fafcf3fafdecf9fdecf9fdecf9fdecf9fdecf9 -fdecf9fdecf9fff5fefdecf9fcf3fafff5fefcf3fafcf3fafff5fefff5fefff9fefff5fefff5fe -fff5fefcf3fafff9feffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffc5c6c7d2d2d4 -cfd0d1dfdedec5c6c7e1e1e2d3d5d5b1b1b4dadadbdfdeded3d5d5e1e1e2d3d5d5d3d5d5ffffff -bcbcbdd2d2d4e3e4e5d2d2d4fafafbb8babcbcbcbdc5c6c7eaeaeae3e4e5bcbcbde1e1e2cccdce -dfdededfdedecac9cbdadadbeaeaeaeeeeeeb8babcd3d5d5dadadbe1e1e2e1e1e2eaeaeac3c3c4 -eaeaeacfd0d1dfdedecccdcedadadbe1e1e2eaeaeadfdededfdedee3e4e5dadadbdadadbeaeaea -e6e5e6d2d2d4cfd0d1e1e1e2eeeeeedfdedee1e1e2e6e8e8fffdfecac9cbdfdedefffeffb8babc -b7b7b8d3d5d5e3e4e5b7b7b8eaeaeaeeeeeec5c6c7dadadbd2d2d4eeeeeee3e4e5f4f4f4ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff1f0f0c7c9c9d6d7d8 -a5a4a7b1b1b4b1b1b4b4b4b8afaeb0c5c6c7a5a4a7acadaeb1b1b4a8a8abbfbec1b7b7b8f1f0f0 -b7b7b8cac9cbafaeb0d6d7d8f4f4f4b4b4b8a5a4a7c5c6c7afaeb0a8a8aba2a1a4bfbec1b8babc -b1b1b4a5a4a7acadaeafaeb0d2d2d4d3d5d5bcbcbdb8babcc5c6c7afaeb0b1b1b4a5a4a7bcbcbd -eeeeeecccdcecccdcea5a4a7bfbec1a8a8aba8a8abacadaeacadaeacadaebcbcbdb7b7b8acadae -a2a1a4acadaeacadaeb7b7b8b8babca2a1a4a8a8abc3c3c4dfdedebcbcbdd3d5d5ffffffa5a4a7 -a5a4a7c3c3c4b1b1b4a5a4a7cac9cbeeeeeeacadaeb1b1b4a5a4a7b1b1b4acadaedfdedeffffff -fefefefffeffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffafafbf5f6f5f9f8f9 -f7f7f7f7f7f7f9f8f9f5f6f5fafafbfafafbf5f6f5f4f4f4f7f7f7f7f7f7f5f6f5fcfcfcd3d5d5 -eaeaeafafafbf5f6f5fffffff5f6f5f7f7f7f5f6f5f7f7f7f4f4f4f2f2f3f4f4f4f5f6f5fafafb -f2f2f3f2f2f3f5f6f5f2f2f3fffffff5f6f5f4f4f4f2f2f3eaeaeaeeeeeef2f2f3eaeaeaf2f2f3 -fffffff2f2f3eeeeeef7f7f7d2d2d4cccdceeaeaeaf1f0f0f1f0f0eeeeeeeeeeeee3e4e5e6e5e6 -eaeaeaeeeeeef1f0f0eeeeeef1f0f0f1f0f0e6e5e6f2f2f3fafafbeaeaeafafafbfffffff1f0f0 -f2f2f3eeeeeeeeeeeeeeeeeefafafbf1f0f0eeeeeee6e5e6eaeaeaeaeaeaeeeeeef7f7f7ffffff -fffffeffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffdfdfd -fefefefffffffefefefefefefffffffffffffffffffffffffefefefffffffffffffffffffefefe -fffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefefefefefefefffffffffffffffffffefefeffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefffffffefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffeffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffefeffffffffffffff -fefefefffffffffffffffffffffffffffffffffffffefefefefffffefefefefefffefefeffffff -fefefefefefefffffffefefefffffffefefefefefefffffffefefefefefefefefefefefefefefe -fffffffffefefefefefefefffffffffffffffefefefefefefefefffefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefffffffefefefffffffffffffefefe -fefefefefefefefefefefefefffffffefefefefefefefefefefefefefefefefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffefffffeffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfcfdfdfcfcfc -fcfcfcfcfcfcfcfcfcfcfcfcfefefdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefeffffffffffffffffff -fffffffffffffffffffffffffffffffefefefcfcfcffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffefefefffffffafafbd3d5d5b8babca5a4a7 -a5a4a7acadaea8a8abb7b7b8e6e5e6fdfdfdfffffffdfdfdfefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefefdfdfdfefefeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffefefcfcfcffffffdadadb595a5f35363b2b2b31181a1f -2e2f3342444c3c3e4114151900020625272da5a4a7fffffffdfdfdfefefeffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfefefcfcfcfefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefdfdfdfdfdfdfefefdffffffe1e1e235363b07080b0f10141f212678787c -d2d2d4cccdcea2a1a4cac9cbcccdce595a5f07080b58585dfcfcfcfffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f5f6f5dfdeded3d5d5e6e5e6fffffffffffffffffffdfdfdfcfcfcffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fdfdfdfefefefffffffffffffffffff7f7f7d3d5d582818425272d0000000f1014b7b7b8ffffff -b1b1b46a6a6d4243472f3137898a8cd3d5d5d3d5d554565c797d7dfffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffff -d3d5d56a6a6d42434735363b6d6e72a8a8abe6e5e6fffffffffffffdfdfdfdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -ffffffffffffeaeaeac3c3c496959878787c6a6a6d5c5d615c5d61353a3bc5c6c7ffffff898a8c -25272d57545a353a3b49474d000000515256a5a4a7fefefd797d7db1b1b4fffffffdfcfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefffffff7f7f7 -a8a8ab5152565152564243470f101449494f5152564c4d52afaeb0fffffffffffffdfdfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff5f6f5 -bcbcbd8585896a6a6d6262666a6a6d797d7d7d7e82717275807e8399999ee1e1e2eeeeeed6d7d8 -acadae969598828184797d7d46464c3334391f2126424347a8a8ab595a5ff4f4f4fffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffe3e4e5 -54565c2e2f335d5f658c8c90353a3b393b40c3c3c4898a8c0f101449494fd2d2d4fffffffcfcfc -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3c3c478787c -595a5f58565b5c5d61595a5f58565b46464c49494f46464c46464c49494f49474d515256828184 -a5a4a7d3d5d5cac9cb78787c7273796a6a6d5c5d610f101425272d46464cacadaefffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffacadae -1c1c222323285d5f65bfbec18281841415197d7e82ffffffc3c3c40002060f10149d9ea0ffffff -fefefefdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffffcac9cb4c4d524c4d52 -4c4d5246464c42444c353a3b2f31372e2f332f313735363b2f31372b2b315152567d7e829d9ea0 -c5c6c7c7c9c9cac9cba5a4a76a6a6d515256353a3b0f1014000206424347898a8cf5f6f5ffffff -fefefeffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffff717275 -00000035363b9d9ea0cac9cb58585d353a3b35363bafaeb0e1e1e2c3c3c4828184393b406d6e72 -f2f2f3fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6f5eeeeeedfdede -d2d2d4d3d5d5dadadbe1e1e2d6d7d8d6d7d8b8babc7d7e82909194b7b7b8dfdedefafafbeeeeee -bcbcbd99999e797d7db7b7b8b7b7b854565c1c1c22232328424347595a5fa8a8abfafafbffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff7f7f75c5d61 -141519727379fafafbc5c6c754565c4c4d52141519373940afaeb099999ebfbec1bcbcbd3e3f45 -46464ce1e1e2fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffafafb99999e898a8ce3e4e5e6e5e6e1e1e2 -c3c3c4afaeb0969598717275909194afaeb0a2a1a496959878787c595a5fdfdedefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffeeeeee49494f -35363bb1b1b4ffffffc7c9c951525642444c1f21261415197d7e8267656a2f31376262669d9ea0 -2f31374c4d52f1f0f0fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfd -fdfdfdfdfdfdfdfdfdfdfdfefdfdfdfdfdfdfdfdfdfefefeffffffa8a8ab858589cccdceeeeeee -fdfcfdffffffeeeeeec3c3c499999ea5a4a7cac9cb9d9ea0515256717275eeeeeefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff5f6f5595a5f -54565ccccdcef2f2f3eaeaea6262662b2b3123232800020665656a8c8c9057545a4c4d526a6a6d -b1b1b407080b63696bfffffffefefdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffcfcfcffffff898a8c727379898a8cb7b7b8 -eeeeeefafafbeeeeeeeeeeeed3d5d5d2d2d4d2d2d4a8a8ab807e8399999ef5f6f5fffffffffeff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffefefefcfcfcfffffff1f0f05c5d61 -7d7e82c3c3c4e6e5e6ffffffc7c9c954565c2e2f330f10140f10146262665c5d610f10143e3f45 -f1f0f0353a3b000000c5c6c7fffffffcfcfcffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffdfdfdffffffa5a4a7515256807e83a09ea2909194 -bcbcbdf9f8f9fffffffefefefffffffefefefafafbdadadb858589909194fafafbffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffefefefcfcfcfffffffefefeffffffdfdede858589 -9d9ea09d9ea0c3c3c4e6e5e6f1f0f0dfdedeb1b1b49d9ea046464c00020600020625272d5c5d61 -f4f4f4afaeb00000007d7e82fffffffcfcfcffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffdfdfdffffffbcbcbd57545a8281847d7e8299999ecac9cb -d3d5d5f9f8f9fffffffeffffffffffffffffcfd0d1969598a8a8ab727379909194fffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefcfdfdfffffffffffff7f7f7bfc1c26d6e72828184c5c6c7 -c5c6c7bfbec1afaeb0a5a4a7b7b7b8bfbec1c3c3c4c3c3c4e6e5e6d2d2d4b8babc8c8c90828184 -6d6e72a2a1a42323285d5f65fffffffdfdfdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefffffff4f4f4353a3b71727567656a898a8cd2d2d4e6e5e6 -f2f2f3e3e4e5f4f4f4dadadbe1e1e2e1e1e2c3c3c4c3c3c4acadae717275626266c5c6c7ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefefdfdfdffffffeaeaea8c8c904c4d52141519000000000206181a1f -42444c99999ec3c3c4dfdedecac9cbb7b7b8b8babc99999ea5a4a7cfd0d1eeeeeecac9cb4c4d52 -42444c2b2b314c4d5249494feaeaeafffffffefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffcfcfcffffff9091940002065c5d616262662f3137d3d5d5d6d7d8 -c5c6c790919478787c828184909194dadadbd2d2d462626667656a46464c78787c6d6e72f1f0f0 -fffffffefefeffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffcfcfcfffffff1f0f0898a8c393b402e2f3346464c3e3f4525272d0f101407080b -0f10140f101442444ccccdceffffffffffffdadadbcac9cbe1e1e2e6e5e6dadadbd2d2d4828184 -54565c5d5f6547484d35363b828184fffffffdfdfdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffeffffffffff4243470000001e1e2278787c797d7d969598e6e5e6 -bfbec1a09ea26d6e72898a8cd2d2d4cccdce67656a62646b6d6e7249474d424347797d7dc3c3c4 -fffffffdfdfdffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffcfcfcffffffe3e4e54c4d521e1e2242444c65656a62646b63696b54565c25272d0f1014 -2323282f31370f101425272d858589eaeaeaf2f2f3b1b1b4a8a8abb4b4b8bcbcbdbcbcbdc5c6c7 -7d7e825c5d615c5d61353a3b25272dbfc1c2fffffffcfcfcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffe1e1e2181a1f0002061e1e2235363b49494f65656a858589 -828184696b71bcbcbdc3c3c471727546464c4c4d525d5f653c3e414c4d522323286a6a6d969598 -eeeeeefffffffefeffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fcfcfcffffffc5c6c7393b4023232847484d35363b595a5f54565c6d6e72515256595a5f626266 -353a3b54565c3e3f450f10142e2f33727379d3d5d5f7f7f7c3c3c49d9ea09d9ea0afaeb0969598 -898a8c65656a54565c6d6e72353a3b47484deeeeeefffffffefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffffbcbcbd07080b141519181a1f2b2b313334395c5d61a5a4a7 -cac9cbc3c3c490919454565c5152565c5d614c4d5258585d49494f3334391f2126717275828184 -bcbcbdfffffffdfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfdfd -ffffffb8babc2f31371e1e2254565c5d5f6547484d54565c54565c797d7d696b717d7e82b1b1b4 -acadae5d5f6565656a54565c393b4042444c6d6e72898a8cacadaeb7b7b8c3c3c4fffffff2f2f3 -d6d7d8acadae6a6a6d5c5d617d7e822b2b31727379fffffffefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffff9091940f10141f21260f1014181a1f1c1c221c1c2242444c -6d6e7267656a57545a4c4d5258575d65656a51525657545a46464c25272d1c1c22a2a1a4acadae -99999efffffffdfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -a5a4a74243472e2f3347484d42444c25272d5c5d614c4d5262646b51525654565c7172758c8c90 -e1e1e2a2a1a465656a3739403334393e3f4551525647484d9695987d7e82a2a1a4fcfdfdffffff -fefefefffffff1f0f0898a8c67656a7d7e8225272db1b1b4fffffffcfcfcffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffff8585891415192323282e2f332b2b311f212625272d393b40 -4c4d5249494f595a5f595a5f595a5f5c5d614c4d5246464c2b2b312323283c3e41cccdcea09ea2 -969598f9f8f9ffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffb1b1b4 -33343946464c42444c5c5d61515256353a3b49494f5c5d6165656a35363b4c4d52515256333439 -3e3f452e2f33393b405d5f6562626662626642434746464c65656aa8a8ab909194f1f0f0ffffff -fcfcfcfdfdfdfffffff7f7f772737963696b65656a3c3e41e3e4e5fffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffa2a1a41e1e2223232842444c2f31371415192b2b313e3f45 -49474d57545a6262665c5d61595a5f57545a54565c3e3f452b2b311c1c22828184eaeaea626266 -515256f2f2f3fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffbcbcbd393b40 -5152562323284c4d5235363b51525646464c35363b4c4d524c4d525d5f654243473c3e4135363b -46464c65656a7273796a6a6d696b7149494f4c4d5247484d23232872737967656ae6e5e6ffffff -fefefefffffffdfdfdffffffeaeaea5d5f6567656a47484d6d6e72fffffffdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffcccdce7d7e822b2b312b2b3142444c35363b35363b3e3f45 -4c4d5254565c57545a5c5d6154565c4c4d5251525633343914151942444cbfbec178787c6d6e72 -49474dc3c3c4fffffffcfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffefefeffffffe6e8e835363b2b2b31 -3739404c4d5235363b5c5d613c3e416a6a6d62646b3e3f455c5d614c4d52515256515256727379 -7d7e827d7e8265656a4c4d5251525635363b2f31373c3e412f31373e3f45393b40dadadbffffff -fdfdfdfffffffffffffdfdfdffffffe1e1e25c5d61626266393b40a5a4a7fffffffcfcfcffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffcac9cb9695989091944243472b2b31353a3b3e3f4535363b -42444c49474d58585d57545a46464c46464c3e3f4546464c2f3137dadadbacadae25272d5c5d61 -46464c898a8cfffffffafafbffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffefffffffffafafb65656a33343946464c -2b2b3146464c4c4d5247484d62646b6d6e723c3e4142444c4c4d5233343949494f5c5d61898a8c -8c8c9062626642434754565c393b400f10143e3f4549494f181a1f1c1c2247484deeeeeeffffff -fefefefffffffffffffffffffcfdfdffffffdadadb595a5f4c4d524c4d52e1e1e2fffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfeffffffcfd0d15c5d61a09ea2f2f2f3797d7d7d7e82dfdede8c8c90 -46464c36343e3e3f4546464c57545a3e3f45595a5fdadadbd6d7d8cccdce7172756d6e7257545a -49494f7d7e82fffffffcfcfcffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffcfdfdffffff9091942323282f313736343e -3334394c4d52393b401c1c2299999e696b713e3f4542434742444c42434749494f58585d696b71 -5d5f6546464c6d6e724c4d522f313746464c47484d25272d1f212600000054565cfffffffefefe -fffffffffffffffffffffffffffffffdfdfdffffffe1e1e254565c393b408c8c90fffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffd2d2d462646b6d6e72c5c6c7fefffff9f8f9fefefdfafafb -afaeb0969598969598828184a8a8ab898a8cd3d5d5f5f6f5a09ea24243477d7e82dadadb717275 -2e2f33717275fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffdfdfdffffffc3c3c4181a1f3c3e412b2b31353a3b -36343e14151947484d5d5f65d6d7d899999e78787c54565c5d5f6582818442434742444c49494f -54565c3e3f452f31372f31370f10141e1e221f21262f3137595a5f0f1014b4b4b8fffffffcfdfd -fffffffffffffffffffffffffffffffffffffcfdfdffffffe3e4e55d5f6542444cd3d5d5ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefeffffffe3e4e57172757273796a6a6da09ea2a8a8ab909194b1b1b4 -e6e5e6e3e4e5d3d5d5b7b7b89d9ea0a09ea2bfbec16262665152566d6e72afaeb0e1e1e2b1b1b4 -353a3b7d7e82fffffffdfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffefefefffffffafafb4c4d521f21263e3f4542444c333439 -393b40393b4047484d78787cb8babc99999e72737962646b8585897d7e82424347595a5f353a3b -07080b2e2f3307080b25272d3e3f4535363b2b2b3154565c4c4d5262646bfffffffffffeffffff -fffffffffffffffffffffffffffffffffffffffffffdfdfdfffffff7f7f7797d7d6d6e72ffffff -fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff9f8f9858589e1e1e2bcbcbd5c5d616a6a6d7172756d6e72 -78787c7d7e82807e8365656a6a6a6d58575d35363b4c4d52c5c6c7fffffffcfcfce6e5e6acadae -3e3f45797d7dfffffffdfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffdfdfdffffff9d9ea02323282b2b31181a1f2f313742444c -3e3f453e3f45858589898a8c5d5f65e3e4e5eaeaead2d2d482818436343e3334392f31372f3137 -353a3b4c4d52393b4035363b2f31371f212654565c99999e353a3be6e8e8fffffffefefeffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefeffffffb1b1b4e1e1e2 -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffff909194bcbcbdffffff8585897d7e82a2a1a4dfdede -cccdce9d9ea067656a5d5f65b8babcd3d5d5b1b1b4dfdedefefffff4f4f4fcf3faffffffacadae -2f3137797d7dfffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffefefeffffffe3e4e53334392b2b3125272d3e3f455d5f6554565c -54565c4c4d52696b71b4b4b8858589858589a5a4a7c5c6c7cac9cba5a4a77172753e3f45515256 -2e2f330f1014353a3b3e3f452f31371c1c22a8a8abc7c9c9bfbec1fffffffdfdfdffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfdfffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffff9091948c8c90fffffff9f8f9f9f8f9fcfcfcffffff -fffffffafafbcccdced2d2d4f9f8f9fffffffffffffffffffefefefdfdfdfcfdfdffffff969598 -25272d717275fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffcfcfcffffff7273791f212625272d1415195152568585890f1014 -42444c25272d62646bb8babcf4f4f4bcbcbd5d5f65a2a1a46d6e7285858971727554565c46464c -46464c393b403e3f451f212625272d78787ceaeaeaeeeeeefffffffefefeffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffa2a1a46d6e72dfdedebfbec1f1f0f0fffffffdfdfd -fdfdfdfefefefffffffffffffcfcfcfcfcfcfdfcfdfafafbfdfdfdfffffffdfdfde1e1e2a5a4a7 -46464c353a3bfffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffdfdfdffffffdfdede1f21261f21261f212647484dbcbcbd898a8c000206 -3e3f457273796a6a6d1f21265c5d61afaeb0d6d7d8eaeaeab4b4b863696b5c5d61595a5f353a3b -07080b232328141519141519696b71e6e5e6f4f4f4fefefefdfdfeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffb7b7b878787c6a6a6d54565cdfdedefffffffefefe -fffffffefefefdfdfdfffffff4f4f4f4f4f4fffffffdfdfdffffffdadadb6a6a6d49494f717275 -6a6a6d424347f9f8f9fffffffefefeffffffffffffffffff000000 -000000fffffffffffffcfcfcffffff8c8c900f10141e1e221c1c22969598dadadb8281841c1c22 -42444c62646b14151936343e3e3f45696b719d9ea08c8c906d6e7296959849494f0f1014181a1f -2b2b31353a3b49494f858589cfd0d1f2f2f3fffffffefefeffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffc5c6c75c5d616d6e72727379969598eaeaeaffffff -fdfdfdfffffffdfdfdffffffd3d5d5d6d7d8fffefea8a8abb7b7b8d3d5d54243476d6e72807e83 -5c5d61424347f7f7f7fffffffefefeffffffffffffffffff000000 -000000fffffffffffffeffffffffff47484d0f10141e1e223334395152565d5f65b4b4b8cac9cb -dadadb5c5d6114151925272d35363b4c4d5267656a46464c62646b1f2126141519353a3b47484d -46464c6a6a6dc7c9c9e1e1e2eeeeeefffffffefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffdadadb54565c7172754c4d526a6a6deeeeeefafafb -e3e4e5f9f8f9fafafbf2f2f3bfbec1d6d7d8e6e5e614151954565ce6e8e865656a57545a6d6e72 -3c3e41626266f4f4f4fffffffefefeffffffffffffffffff000000 -000000fffffffdfdfdffffffdfdede2f313725272d42444c2e2f3347484d696b716d6e72e6e5e6 -96959846464c353a3b2f31372e2f3335363b47484d4c4d521f21260f10141c1c22353a3b424347 -7d7e82cac9cbe3e4e5f7f7f7fffffffefefeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefeffffffeaeaea6262666262668c8c90727379898a8cffffff -cccdceb7b7b8e6e8e8f2f2f3b8babcdadadbfcfcfc898a8ca5a4a7a09ea272737965656a898a8c -909194828184f9f8f9ffffffffffffffffffffffffffffff000000 -000000fffffffcfcfcffffffafaeb00002060f10143334393e3f4562646b696b7154565c6d6e72 -54565c62646b6a6a6d54565c353a3b5c5d6162626625272d0f10141e1e2225272d4c4d527d7e82 -b4b4b8dadadbfcfdfdfffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefffffff2f2f385858946464cc5c6c7595a5f909194fffeff -c3c3c4a2a1a4dadadbf2f2f3bcbcbdd2d2d4f1f0f0e3e4e56262663c3e4154565c35363b797d7d -9091948c8c90fffffffdfdfeffffffffffffffffffffffff000000 -000000fffffffcfcfcffffff8585891c1c2225272d3e3f4551525665656a54565c5c5d614c4d52 -5d5f655c5d614c4d5254565c858589c3c3c44243470f10141e1e222e2f336d6e72a5a4a7b8babc -eeeeeefffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffb1b1b46d6e72f2f2f3f7f7f7f7f7f7e1e1e2 -bcbcbdb7b7b8b7b7b8a8a8abb1b1b4f1f0f0f1f0f0f1f0f06a6a6d47484dbcbcbd909194969598 -717275b1b1b4fffffffdfdfdffffffffffffffffffffffff000000 -000000fdfdfdfffffff5f6f542444c0f101425272d232328353a3b33343946464c54565c54565c -5c5d616d6e729d9ea0c5c6c7eaeaea595a5f0002062b2b3154565cd6d7d8eeeeeebfbec1e3e4e5 -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffb1b1b4cac9cbf2f2f3fffffff5f6f5d3d5d5 -a8a8aba5a4a78c8c90898a8cb1b1b4eaeaeaeeeeeee3e4e5f7f7f7e1e1e2f4f4f4d6d7d8a39fa4 -58585dc5c6c7fffffffdfdfdffffffffffffffffffffffff000000 -000000fafafbffffffbfbec11415191f21262f31371f21263334394c4d525c5d615d5f65797d7d -b1b1b4cfd0d1eeeeeee6e5e6cac9cb797d7d7d7e82b4b4b8d6d7d8ffffffd3d5d5d2d2d4ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffcccdcea8a8abe3e4e5f4f4f4f2f2f3f9f8f9 -b1b1b4858589898a8c8c8c90e1e1e2eeeeeedfdedefcfcfcfcfcfcfefefddfdedea5a4a7807e83 -57545ae6e8e8fffffffefefeffffffffffffffffffffffff000000 -000000f9f8f9ffffffb1b1b41c1c221f21262e2f333e3f4554565c62646b696b71717275b4b4b8 -e1e1e2e6e5e6dadadbafaeb0afaeb0c5c6c7a5a4a7dfdedef9f8f9fefefdc3c3c4eaeaeaffffff -fefbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffefffcfcfca8a8aba39fa4c5c6c7cac9cbe6e5e6 -b1b1b4858589807e839d9ea0dadadbe6e8e8cccdcee6e5e6eeeeeec5c6c7a8a8ab90919457545a -797d7dfffffffdfcfdffffffffffffffffffffffffffffff000000 -000000f9f8f9ffffffbfbec12323283e3f4542444c54565c63696b6d6e72727379727379b8babc -cfd0d1a8a8ab797d7d727379969598afaeb09d9ea0d2d2d4f4f4f4dadadb78787cf1f0f0ffffff -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff99999e1f21261f2126515256717275909194 -969598898a8c85858999999ea39fa4bfbec1c5c6c7cccdcec3c3c4b7b7b8898a8c85858949494f -b8babcfffffffcfdfdffffffffffffffffffffffffffffff000000 -000000ffffffbfbec125272d1e1e2246464c54565c62646b65656a67656a5d5f65696b71969598 -6d6e7271476fa02d907c597b696b7178787c909194a5a4a7bfbec1afaeb0353a3ba37c9ffc82e6 -f678dff881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2fc82e6fc82e6 -fa86e6fa86e6fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7 -fb8de7fb8de7fb8de7fb8de7fb8de7fc98eafc98eafc98eafc98eafc98eafc9deafc9deafc9dea -fc9deafc9deafca2eefca2eef69fe9fcadee8c798d07080b1e1e224f274c25272d924789924789 -8c5f887c597b8c798d858589797d7d9091949d9ea0969598969598a39fa47d7e8251525649494f -ef9fe2fcb4effee3fafffffffffeffffffffffffffffffff000000 -00000046464c33343949494f54565c5152565d5f655d5f655d5f6562646b62646b807e83797d7d -7c597be204bbfc00cffc00cfd30ab071476f797d7d8c8c907d7e824c4d525d5f6571476fec00bf -f101c4f000c3f000c3f100c4f200c3f200c3f200c3f300c4f300c5f300c4f400c3f200c2f400c3 -f400c4f400c3f300c4f400c4f400c4f400c4f500c5f400c5f400c5f500c5f500c5f500c6f600c6 -f600c5f500c5f400c3f600c4f600c4f600c5f600c5f600c5f600c5f600c5f600c5f500c5f600c4 -f600c4f600c4f500c1f400c3f400c5f700c72f0e2f4f274c7c28725e2357951082fc00cffc00cf -f501c7ed00c2ec00c1c514a87c28724f274c353a3b58575d595a5f626266353a3b353a3b862f7c -fc00cff000c0fb99e9fffffffffbfeffffffffffffffffff000000 -0000002b2b312f313735363b393b404c4d5254565c6d6e729d9ea0858589727379797d7d8c5f88 -f700c9f700c9ee00c4ee00c4f703c9e204bb9510824c4d522f313747484d9091948c8c90e204bb -f503c9f104c7f203c7f503c8f507c8f203c7f400c6f400c7f400c7f503c8f503c7f503c7f503c7 -f503c8f503c8f503c8f503c8f503c9f503c8f503c8f503c8f703c9f507c8f500c6f500c5f600c5 -f600c5f501c7f603c8f603c8f603c8f703c9f703c9f703c9f809cbf603c8f700c7f600c4f600c5 -f600c5f700c9f507c8f503c7fc00cfe204bb401b3c4b354cb10b984f274cb10b98fc00cff101c4 -f502c6f601c7f700c9fc00cffc00cfa00e89333439401b3c2f0e2f5e2357a02d90a02d90e204bb -fc00cff200c2fb99e9fffffffffbfeffffffffffffffffff000000 -000000373940393b4042444c4c4d5254565c4c4d52909194b7b7b8807e8362646b924789ec03c2 -f503c9ee00c4f503c8ee00c4fc00cfc514a8696b71807e83727379353a3b47484d515256c514a8 -fc00cff000c5f600c8f600c8f300c7f609caf712cdf724d0f625d0f400c6f400c6f400c6f400c7 -f500c7f500c7f400c7f500c7f500c7f500c7f500c7f600c8f600c8f500c5f332d0f949d9f955db -f949d9f712cdf600c7f600c8f600c8f600c7f703c9fc00cff600c5fc00cff735d3f949d9f955db -f940d6f712cdf500c1f502c4f503c7f700c7c300a27f146f57124f57124fb10b98f712cdf507c8 -f400c6f400c6f400c6f003c5fc00cf7c28727c287257124fb10b985e2357fc00cffc00cffc00cf -f206c7f400c4fb99e9fffffffffbfeffffffffffffffffff000000 -0000006a6a6d47484d4c4d524c4d524c4d5254565ca5a4a7b7b7b863696b862f7cf703c9f503c9 -ee00c4f503c8ee00c4f000c7f700c971476fd76cc6fdc0f2f7f7f7a59aa67c597b5c5d61a02d90 -fc00cff000c5f201c7f201c7f503c9fdcdf5fffffffcb4eff861ddf203c7f400c6f400c6f400c7 -f400c6f400c6f400c7f500c7f500c7f400c7f501c7f500c7f609cafb8de7f96fe0f939d5f735d3 -fa76e3fff5fef949d9f600c5f603c8f703c9f601c7f600c7f86ee0fcb4effc82e6f861ddf861dd -fc82e6fdc0f2fca2eef61bcef600c4f500c5f712cdd76cc67c597bd0a9ccfcb4effc98eaf949d9 -f400c4f502c6f500c7f300c5fc00cf65195ea00e8971476fb10b984f274ce204bbf601c7f300c4 -f503c8f400c4fb99e9fffffffffbfeffffffffffffffffff000000 -0000005c5d6142444c42444c3e3f4551525625272d5d5f65afaeb07c597be204bbf503c9ee00c4 -f000c7ee00c4f000c7ee00c4fc00cfb10b98d30ab0f955dbfffefffdecf9f61bce9247897c2872 -fc00cff000c5f503c8f300c5f64ad9fedaf8fffffff740d6f200c2f503c8f501c7f501c7f501c7 -f400c6f500c7f400c7f501c7f501c7f501c7f503c8f500c5fcadeefa86e6f500c1f502c5f502c5 -f500c1fc98eafc82e6f600c4f507c8f600c6f712cdfdcdf5fdc0f2f61bcef600c4f600c4f600c5 -f600c5fc00cffb99e9fffbfff949d9f600c6f507c8fc00cff740d6fffffffcadeef600c5f503c7 -f500c6f500c7f600c7f300c5fc00cf951082951082401b3cb10b987f146fd30ab0fc00cff400c5 -f503c8f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000797d7d5d5f6546464c37394046464c25272d1c1c2263696bd53abcf503c8ee00c4f000c7 -f000c7f000c7f000c7f000c7f503c8f703c9f000c7f86ee0fb8de7fdfefef96fe0c514a87c2872 -fc00cff201c7f300c7f503c9fa86e6fc82e6fffffff940d6f300c4f503c7f400c6f400c6f400c5 -f400c6f400c7f400c6f400c5f600c8f603c8f500c5f61bcefff9fef939d5f600c5f507c8f603c8 -f600c6f929d3f86ee0f700c7f700c9f809cbfedaf8fdc0f2f700c7f700c7fc00cff703c9fc00cf -f603c8f603c7f600c4fb8de7fffffff949d9f700c7f500c5f625d0fefffffb99e9f600c5f703c9 -f600c7f600c7f700c7f500c6fc00cfee00c2e204bb7f146fec00bfd30ab0f200c3f600c6f600c6 -f503c8f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffdfdede424347393b4025272d65656a2e2f331f2126df22c2f000c5ee00c4ee00c4 -ee00c4ee00c4f000c7f000c5ee00c4ee00c4f101c4fc82e6f53cd4fdcdf5fedaf8d30ab0a00e89 -fc00cff104c7f400c3f64ad9f56dddf965e1fffffff939d5f503c9f61bcef609caf611cbf61bce -f609caf500c6f609caf61bcef609caf712cdf703c9f735d3fffffff881e2f500c1f603c8f703c9 -f600c8f603c8f703c9f703c9f600c6fc9deafffffff724d0f700c7f703c9f600c6f700c9f600c7 -f700c9f703c9f700c9f809cbfee3fafee3faf611cbf600c4f929d3fffffffc9deaf700c7f703c9 -f700c7f600c7f600c7f600c7f400c5f600c7fc00cff400c4f500c6f700c9f600c8f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffd2d2d4393b4046464c1c1c2290919499999e2e2f33d30ab0f600c8ee00c4ee00c4 -ee00c4ee00c4ee00c4f000c5f000c7f104c7ee00c4fc98eaf61bcef56dddffffffef31cbf003c5 -f503c8f203c7f300c4fc98eaf61bcef86ee0fffffff53cd4f724d0fcadeefcf3fafdcdf5fa76e3 -f323cef500c5f323cef881e2fedaf8fdc0f2f735d3f609cafdecf9fffffffb73e3f703c9f600c4 -f601c7f503c8f603c8f600c6f724d0fffffffdc0f2f700c7f703c9f600c6f600c7f700c7f600c8 -f600c7f600c7f603c7f600c4f881e2fffffff56dddf500c1f929d3fffffffc9deaf600c4f703c9 -f700c7f600c7f600c6f600c7f600c7f500c7f400c5f600c7f500c6f300c5f400c6f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffb4b4b842444c4c4d52353a3bb7b7b8d6d7d8a37c9fe204bbee00c4ee00c4ed00c3 -ee00c4ee00c4ee00c4ee00c4f000c5f003c5f000c5fb8de7f61bcef61bcefffffffca2eef200c2 -f206c7f100c4f332d0fb99e9f200c2f881e2fffffff53cd4f200c2f609cafdecf9fdcdf5f400c3 -f601c7f501c7f400c6f400c6fcb4eff323cef502c4f502c5f861ddfffffffffffffdcdf5f96fe0 -f712cdf600c4f507c8f600c4f965e1fffffffc82e6f600c4f703c9f600c7f700c7f600c7f600c6 -f600c7f600c6f603c7f600c5f940d6fffffffcb4eff400c3f929d3fffffffc98eaf600c4f703c9 -f600c7f500c6f600c6f700c7f600c8f500c7f500c6f500c6f500c6f500c7f500c6f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffff8585893c3e4136343e232328b4b4b8e1e1e2d57fc9ec03c2ec03c2ed00c3ed00c3 -ee00c3ee00c4ee00c4ee00c4ee00c4f000c5f000c7fc9deaf61bceed00c2fcb4effffbfef113c9 -f201c7f200c3fc82e6f34ad5f500c1f881e2fffffff53cd4f400c6f400c5fc82e6fffffff735d3 -f400c5f503c8f400c3f949d9f881e2f600c4f703c9f603c8f500c5f939d5fdc0f2ffffffffffff -fdecf9f965e1f603c7f600c5fb8de7fffffff56dddf600c4fc00cff601c7f700c7f600c7f600c7 -f600c7f600c6f603c7f600c5f82fd4fffffffedaf8f700c7f625d0fffffffc98eaf600c5f703c9 -f700c9f600c7f600c6f600c7f600c8f600c7f600c7f500c6f600c6f600c7f500c6f500c6f600c7 -f503c8f600c4fb99e9fffffffffbfeffffffffffffffffff000000 -000000f9f8f978787c4c4d5235363b00020642444ccfd0d1d57fc9ec00c1ec03c2ed00c3ed00c3 -ee00c2ee00c4ee00c4ee00c4ee00c4ee00c4f000c7fb99e9f113c9ee00c2f64ad9fffffff56ddd -f000c0f61bcefc9deaf203c7f300c4fa76e3fffffff939d5f300c4f400c6f724d0fffffffc98ea -f400c3f507c8f400c5fb8de7f332d0f600c5f501c7f501c7f503c8f500c5f502c6f939d5fcadee -fffcfefffffffc82e6f500c1fc98eafffffffb73e3f600c4f603c8f600c7f700c7f600c7f600c6 -f600c7f700c7f603c7f600c5f82fd4fffffffedaf8f700c7f625d0fffffffc98eaf600c4f603c7 -f600c7f600c7f600c7f600c6f500c6f500c6f600c6f500c7f500c6f500c6f500c6f500c6f600c6 -f503c8f600c4fc98eafffffffffbfeffffffffffffffffff000000 -000000d6d7d8696b71595a5f1f21261f21260f101463696bdf22c2ee00c2ec00c1ed00c3ed00c2 -ed00c2ed00c3ee00c4ee00c3ee00c3ee00c3f609caf89feaee00c4ee00c4f609cafee3fafdcdf5 -f000c0f56dddf861ddf200c3f300c4f881e2fffffff53cd4f300c4f507c8f300c4fcadeefff5fe -f611cbf400c3f332d0fb8de7f400c3f503c7f500c6f400c6f500c6f503c7f503c7f400c5f600c5 -f949d9fff9fefff5fef609caf861ddfffffffc9deaf600c5f703c9f600c7f700c7f700c9f600c7 -f500c7f700c7f703c9f600c4f940d6fffffffdc0f2f600c4f929d3fffffffc98eaf600c4f603c7 -f600c6f500c6f600c6f603c7f600c6f500c6f500c6f500c6f500c6f400c5f500c7f500c6f500c5 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000a5a4a754565c2e2f331415199695984243471c1c22e204bbf000c5ed00c2ed00c3ed00c2 -ee00c3ed00c3ee00c3ee00c3ee00c3ee00c3f113c9fc98eaee00c3ee00c4ee00c2fb8de7ffffff -f740d6fc98eaf113c9f201c7f200c3f881e2fffffff939d5f300c4f507c8f300c4f740d6ffffff -f56dddf500c1f881e2f940d6f400c4f503c8f500c6f609caf609caf500c7f501c7f503c7f507c8 -f400c3f881e2fffffff939d5f61bcefffffffedaf8f609caf700c9f700c9f700c7f700c7f600c7 -f600c7f700c7f703c9f600c4f881e2fffffff86ee0f500c1f929d3fffffffc98eaf600c4f603c7 -f600c6f600c7f601c7f600c5f600c7f500c7f600c7f600c6f500c5f400c5f500c6f400c6f500c6 -f503c7f600c4fb99e9fffffffffbfeffffffffffffffffff000000 -00000063696b36343e0f10142f3137cccdcea8a8ab71476fea00c0ee00c4ed00c3ee00c4ed00c2 -ee00c3ee00c4ed00c3ed00c3ee00c3ee00c2f323cefb99e9ee00c2ec03c2ee00c2f332d0fffcfe -fee3faf56dddf200c2f507c8f200c3fc82e6fffffff53cd4f300c5f503c8f400c6f400c6fdcdf5 -fdcdf5f611cbfb99e9f503c7f400c7f503c8f400c3f86ee0f955dbf400c3f503c7f400c7f603c8 -f600c7f735d3fffffff940d6f400c3fc9deafffffff861ddf600c5f507c8f700c7f700c7f600c7 -f600c7f603c7f600c6f609cafee3fafee3faf609caf600c4f929d3fffffffc98eaf600c4f703c9 -f600c6f501c7f603c7f82fd4f600c7f500c7f600c7f500c6f500c6f500c6f600c6f500c6f500c6 -f603c7f500c5fc98eafffffffffbfeffffffffffffffffff000000 -0000004c4d5225272d00020654565cd6d7d8cfd0d1d76cc6ee00c2ec03c2ee00c4ee00c3ed00c3 -ee00c4ee00c3ed00c3ee00c4ee00c4ee00c2ef31cbfb8de7ee00c2f003c5f000c5f100c4fdc0f2 -fffdfef61bcef300c5f206c7f200c2f881e2fffffff53cd4f400c5f503c8f503c8f400c3f86ee0 -fffffffca2eef955dbf400c5f503c8f503c8f400c3fa86e6fb8de7f500c1f507c8f603c8f703c9 -f500c1f861ddfee3faf703c9f700c7f609cafdcdf5fdecf9f61bcef600c4f703c9f703c9f703c9 -f703c9f603c7f600c4fb99e9fffffff939d5f603c7f700c7f724d0fffffffc98eaf600c4f507c8 -f603c8f400c3f735d3fc9deaf600c5f703c9f700c9f600c6f600c6f600c7f600c7f600c6f600c6 -f703c9f600c5fc98eafffffffffbfeffffffffffffffffff000000 -00000035363b1f21260f1014a2a1a4e6e8e8c7c9c9d53abcf400c6ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c4ee00c4ee00c4ee00c4ee00c3f456dafdcdf5f609caec03c2ee00c4ee00c2f678df -fca2eef000c0f203c7f203c7f300c7fca2eefffffff861ddf300c4f503c7f501c7f400c6f611cb -fdecf9f9e3f5f603c7f400c6f400c6f503c7f400c3fb73e3fffbfff323cef600c4f502c4f400c4 -f61bcefdc0f2f940d6f502c4f703c9f600c5f609cafdc0f2fee3faf735d3f600c4f600c4f600c5 -f600c4f609cafca2eefff5fef939d5f502c4f703c9f600c4f939d5fffffffdc0f2f700c7f502c5 -f500c5f712cdfdcdf5fa86e6f600c4f703c9f600c7f600c7f600c7f600c6f600c7f600c6f600c6 -f703c9f600c5fc98eafffffffffbfeffffffffffffffffff000000 -00000042444c14151925272dbfbec1cfd0d1d0a9cced00c3ee00c4ee00c4ee00c4ee00c4ed00c3 -ee00c4ee00c3ee00c3ee00c3ec03c2f678dffca2eefcb4eff89feaf456daee00c2ee00c4f609ca -f61bcef100c4f000c3f740d6fb99e9fcb4effdc0f2fcadeef975e2f507c8f300c5f503c7f400c3 -fca2eefc82e6f200c2f503c7f400c7f501c7f400c6f609cafa86e6fcb4eff86ee0f955dbf861dd -fa86e6f332d0f600c4f603c8f300c5f300c5f603c7f600c5f955dbfdc0f2fc98eaf861ddf861dd -fc82e6fcb4effb8de7f611cbf600c5f600c7f712cdfc82e6fcadeefedaf8fedaf8fc9deafa76e3 -fc98eafdcdf5fffffff955dbf600c5f603c8f600c7f500c7f600c6f500c6f600c7f500c7f600c7 -f603c8f600c4fc98eafffffffffbfeffffffffffffffffff000000 -0000001f21261e1e22858589cac9cbcccdcef34ad5ec03c2ee00c4ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c3ee00c3ee00c3ee00c2ee00c4ee00c2ee00c2ee00c4ee00c4ee00c3ee00c4ee00c4 -ee00c2f100c4f100c4f104c7f206c7f200c3f200c2f400c6f609caf201c7f400c6f503c7f300c4 -fc98eaef31cbf600c4f501c7f500c7f500c6f500c7f400c5f400c3f507c8f323cef929d3f61bce -f600c5f600c4f503c7f600c7f300c5f500c6f601c7f603c8f600c5f600c5f939d5fffffffff5fe -f939d5f809cbf500c1f502c5f703c9f600c6f603c8f61bcef609caf700c9f703c9f809cbf712cd -f61bcef712cdf809cbf703c9f700c9f600c7f600c7f600c7f600c7f600c7f700c7f700c7f700c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000acadaec5c6c7eeeeeef1f0f0fcfdfdf456daed00c2ee00c4ee00c4ee00c4ee00c4ed00c3 -ee00c3ed00c2ed00c3ee00c3ee00c3ee00c3ee00c4ec03c2ee00c3ee00c3ee00c3ee00c3ee00c3 -ee00c3f100c4f100c4f100c4f100c4f101c4f003c5f300c5f400c6f400c6f503c7f400c3f735d3 -fc98eaf400c3f502c6f500c7f500c7f400c6f400c6f501c7f503c8f501c7f600c4f400c4f400c5 -f603c7f503c7f500c6f700c9f300c4f400c6f500c7f600c7f703c9f601c7f603c7fdcdf5ffffff -f949d9f500c1f206c7f603c7f603c7f603c7f600c6f500c5f600c5f500c7f500c6f601c7f400c4 -f400c4f600c6f600c5f600c7f600c7f600c6f600c7f500c7f600c7f600c7f600c7f600c7f600c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffbfefffffff456daed00c2ec03c2ed00c3ed00c3ed00c3ed00c3 -ed00c2ed00c3ed00c3ed00c3ed00c2ed00c2ee00c2ee00c2ee00c2ee00c3ee00c2ee00c3ee00c3 -ee00c3f100c4f000c3f100c4f100c4f100c4f100c4f300c4f400c6f400c6f203c7f400c3fb8de7 -f740d6f200c2f503c7f400c6f400c7f400c5f400c6f400c7f400c6f400c5f400c6f400c6f502c6 -f600c7f500c6f500c6f500c7f300c4f500c7f600c7f600c7f700c9f603c8f600c4f735d3fdecf9 -fffffff86ee0f600c6f500c1f500c1f400c3f507c8f503c7f502c5f601c7f502c6f601c7f502c6 -f400c5f502c6f601c7f500c6f600c7f600c7f500c6f500c7f600c7f600c7f500c7f500c6f600c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000fcfcfcfdfdfdfefefefefbfefffffff456daed00c2ec03c2ed00c3ed00c2ed00c3ed00c2 -ed00c2ed00c2ed00c2ed00c2ed00c2ed00c2ee00c3ed00c2ed00c2ee00c2ee00c2ee00c3ee00c3 -ee00c3f000c3f100c4f100c4f100c4f100c4f100c4f300c5f203c7f200c3fb8de7fffffffcb4ef -f300c4f502c6f400c6f400c6f400c6f400c6f400c6f400c6f400c6f400c5f400c6f400c6f502c6 -f501c7f501c7f502c6f500c6f300c5f600c7f600c7f600c7f600c8f500c6f603c7f600c5f61bce -fc9deafff9fefedaf8fc9deaf881e2fb8de7f96fe0f600c5f601c7f500c6f500c5f600c6f500c6 -f500c6f500c6f600c7f600c7f600c7f500c6f500c6f500c7f600c7f500c7f500c6f500c7f700c9 -f503c8f600c5fc9deafffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daee00c2ee00c4ee00c4ed00c3ed00c2ed00c2 -ed00c2ed00c2ed00c2ed00c2ee00c2ed00c2ed00c2ee00c2ee00c2ee00c2ee00c2ee00c3ee00c3 -ee00c2f000c3f100c4f100c4f100c4f300c5f300c4f300c5f203c7f300c4f56dddfdcdf5f740d6 -f400c3f503c7f400c6f400c6f500c7f600c7f500c6f400c6f500c7f500c6f502c6f503c7f500c5 -f500c5f400c4f500c6f603c8f300c5f500c7f600c7f600c6f600c7f600c7f603c7f703c9f600c5 -f500c1f609caf939d5f56dddf861ddf735d3f507c8f500c6f601c7f502c6f603c7f703c9f603c7 -f603c8f501c7f600c7f600c7f600c7f600c6f600c6f600c7f600c7f600c7f600c7f600c7f700c9 -f603c8f600c5fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daed00c2ec03c2ed00c2ed00c2ed00c2ed00c2 -ed00c2ed00c2ec00c1ed00c2ed00c2ec00c1ec00c1ed00c2ed00c2ed00c2ee00c2ee00c3ee00c2 -ee00c3ee00c3f000c3f000c3f000c3f100c4f100c4f300c4f300c5f400c6f400c3f200c2f300c4 -f400c6f400c5f300c5f400c6f400c7f400c5f400c6f400c6f500c6f501c7f502c5f400c3f611cb -f625d0f323cef609caf600c4f200c3f500c7f600c7f600c7f603c7f603c8f400c3f600c4f609ca -f625d0f61bcef502c6f500c1f500c1f600c4f500c6f500c6f500c5f600c4f400c3f400c3f400c3 -f400c3f400c5f500c6f500c6f500c6f500c6f500c7f400c5f500c6f500c7f500c6f500c5f600c6 -f503c7f500c5fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daed00c2ee00c4ed00c3ed00c2ec00c1ec00c1 -ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ed00c2ed00c2ed00c2ed00c2ee00c3ee00c3 -ee00c2ee00c3f000c3f000c3f100c4f100c4f100c4f300c5f300c5f400c6f203c7f203c7f502c6 -f400c6f400c6f400c6f400c6f400c6f400c6f400c6f400c6f600c8f400c6f206c7fa76e3fb73e3 -f955dbf861ddfcb4effca2eef609caf500c7f601c7f503c7f502c5f400c4f949d9fc98eafc98ea -fc82e6fa86e6fca2eefca2eef939d5f400c3f503c7f500c5f332d0fb8de7fb8de7fa86e6fb8de7 -fa86e6f724d0f600c4f502c6f500c7f500c6f500c6f400c6f400c6f500c6f500c6f400c6f500c6 -f503c7f600c4fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c3ed00c2ed00c2ea00c0 -ec00c1ed00c2ec00c1ec00c1ec00c1ec00c1ed00c2ed00c2ed00c2ec00c1ed00c2ee00c2ee00c2 -ee00c2ee00c3f000c3f000c3f200c3f100c4f100c4f100c4f300c4f300c5f201c7f400c6f400c6 -f300c5f300c5f400c5f400c5f400c6f400c6f400c6f400c7f400c7f400c6fcb4eff56dddf500c1 -f502c4f400c3f61bcefee3faf735d3f400c4f603c8f600c5f611cbfdc0f2fdc0f2f735d3f600c7 -f500c5f600c4f507c8f861ddfdecf9fb99e9f603c7f500c6f809cbf61bcefca2eefffffffb8de7 -f712cdf609caf500c7f500c7f500c7f500c5f500c6f500c6f500c6f500c6f400c6f400c5f400c5 -f503c7f400c4fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ee00c3ed00c2ec00c1ec00c1 -ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ec03c2ec03c2ec03c2ec00c1ee00c2ee00c2ee00c2 -f000c3ee00c2f000c3f100c4f200c3f101c4f101c4f300c4f203c7f502c5f300c4f400c6f503c7 -f300c5f400c5f503c7f400c5f400c5f503c7f501c7f503c7f400c3f955dbfee3faf603c7f502c6 -f503c7f507c8f500c1f881e2f949d9f600c4f700c7f712cdfedaf8fcb4eff600c4f400c3f601c7 -f503c7f502c6f502c6f500c1f625d0fff9fefcb4eff600c6f603c7f500c1f56dddfffffff34ad5 -f500c1f503c7f500c6f500c7f500c6f500c6f500c5f400c6f400c5f400c6f400c5f400c5f400c5 -f503c7f300c4fcadeefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c3ec00c1ec00c1ec00c1 -ea00c0ea00c0ea00c0ea00c0ec00bfea00c0ec00bfec00bfec00bfec03c2ed00c2ee00c2ee00c3 -ee00c2ee00c3f000c3f100c4f003c5f100c4f101c4f507c8f200c3f502c5f611cbf507c8f200c2 -f203c7f400c5f400c3f609caf609caf400c4f502c6f503c9f400c3fc82e6fffffff61bcef400c3 -f507c8f502c6f400c4f611cbf611cbf500c5f500c6fdc0f2fdecf9f609caf502c5f503c7f500c6 -f500c7f600c6f500c5f206c7f500c1f861ddfffffff881e2f600c4f400c3fb73e3fffffff955db -f400c3f503c7f400c5f400c5f400c5f400c5f400c5f300c4f400c5f400c5f300c4f300c5f400c5 -f203c7f400c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ec00c1ec00c1ea00c0 -ea00c0ea00c0ec00bfea00c0ec00bfec00bfef31cbef31cbef31cbec00bfed00c2ee00c2ee00c2 -ee00c2f000c3f000c3f101c4f200c2f300c5fc98eaf53cd4f332d0fc98eafdcdf5fdecf9fb73e3 -f200c2f113c9fc82e6fdc0f2fee3fafcadeef712cdf400c7f400c3f861ddfffffffcb4eff712cd -f400c3f400c4f503c7f502c6f502c5f600c4f949d9fffffffc82e6f502c4f603c7f500c5f500c6 -f500c7f500c6f500c6f500c6f500c6f603c7f9e3f5fff5fef61bcef500c1f678dffffffff949d9 -f200c2f503c7f400c5f400c6f400c6f300c5f400c5f300c5f300c5f300c4f300c4f300c5f300c5 -f502c5f200c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ea00c0ea00c0ea00c0 -ea00c0ec00bfec00bfea00c0ec00bff56dddf740d6ec03c2f678dff678dfec00bfec03c2ee00c2 -ee00c2f000c3f101c4f000c3f53cd4fdcdf5fffffffc98eaf949d9f61bcef503c8fc82e6ffffff -f861ddf861ddf939d5f609caf53cd4fff9fefcb4eff400c6f500c7f609cafdcdf5fffffffee3fa -fa76e3f61bcef600c4f502c5f503c7f600c4fca2eefffffff940d6f600c4f603c7f600c6f600c7 -f600c7f600c6f500c5f500c5f603c7f400c3fc98eafffffff861ddf500c1f975e2fffffff949d9 -f200c2f503c7f400c6f400c5f400c6f400c6f300c4f200c3f300c4f300c5f300c5f300c4f300c4 -f203c7f200c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c2ee00c4ed00c2ec00c1ec00c1ea00c0 -ea00c0ea00c0ea00c0ec00bff113c9fdc0f2f113c9ec00bfef31cbfdc0f2ee00c2ec03c2ee00c2 -ec00c1f100c4f100c4f101c4f206c7f96fe0fffffff881e2f200c2f203c7f400c5f206c7fee3fa -fee3faf609caf502c4f503c7f500c1f987e5fffffff712cdf501c7f500c6f712cdfca2eefffcfe -fffffffff5fefb8de7f712cdf500c5f600c8fdcdf5fffffff929d3f600c5f502c6f600c6f600c6 -f500c6f600c6f500c6f500c5f503c7f500c1f975e2fffffffb8de7f500c1f975e2fffffff949d9 -f400c3f503c7f400c5f400c5f400c6f400c6f300c4f300c4f300c5f300c5f300c5f300c4f300c5 -f203c7f200c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c2ec00c1ec00c1ec00c1 -ec00c1ea00c0ea00c0ec00c1ea00c0fdcdf5f678dfec00bff678dff678dfec00bfec00bfee00c2 -ee00c3f100c4f100c4f003c5f000c0f53cd4fffffff53cd4f300c4f206c7f501c7f400c6fee3fa -fcb4eff400c3f206c7f507c8f400c4f86ee0fffffff61bcef400c5f503c8f502c5f400c4f82fd4 -fb99e9fff5fefffffffedaf8f61bcef500c7fedaf8fffffff929d3f500c5f603c7f500c6f500c6 -f500c6f600c7f500c6f500c5f502c5f400c3f678dffffffffc98eaf500c1f975e2fffffff949d9 -f200c2f203c7f400c5f400c5f300c5f300c5f300c5f300c4f200c3f100c4f100c4f200c3f300c5 -f003c5f200c2fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ec00c1ec00c1ed00c2 -ed00c2ec00c1ec00c1ec03c2ec00bff34ad5fffffffb8de7f61bceec03c2f34ad5f56dddf53cd4 -f100c4f100c4f100c4f003c5f200c2f740d6fffffff53cd4f200c3f503c7f400c7f400c6fee3fa -fcb4eff400c3f503c8f503c8f400c3f96fe0fffffff61bcef400c5f503c7f502c6f503c7f400c4 -f400c3f61bcefdc0f2fffffffc9deaf600c4fdc0f2fffffff949d9f600c4f603c7f500c6f500c6 -f600c6f600c6f500c6f500c5f503c7f400c3f881e2fffffff881e2f500c1f975e2fffffff949d9 -f200c2f502c5f400c5f400c5f300c5f300c5f300c4f300c4f200c3f200c3f300c4f300c5f300c5 -f203c7f200c2fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ee00c4ed00c3ed00c2ed00c2 -ee00c2ed00c2ed00c2ed00c2f456daf53cd4f456dafff5feef31cbec00bff861ddfb8de7f206c7 -f000c5f100c4f100c4f203c7f200c2f740d6fffffff939d5f200c3f503c7f400c7f400c7fee3fa -fcb4eff400c3f503c7f503c8f400c3f96fe0fffffff61bcef500c5f503c7f502c6f400c7f603c8 -f503c8f400c4f609cafedaf8fdecf9f600c7f881e2fffffffc82e6f600c4f603c8f500c6f600c7 -f500c6f500c5f500c6f500c5f503c7f400c3fcb4effffffff53cd4f500c1fb73e3fffffff949d9 -f400c3f203c7f400c5f400c5f400c5f300c4f300c4f300c4f200c3f200c3f100c4f100c4f300c4 -f203c7f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c3ee00c4ee00c4ee00c4ee00c4ee00c3 -ee00c3ec03c2ec00bff678dffb99e9ee00c2ee00c2f678dffcf3faf332d0f34ad5f003c5f100c4 -f201c7f201c7f201c7f203c7f200c3f740d6fffffff939d5f300c4f503c8f500c7f500c7fee3fa -fcadeef500c5f503c8f503c8f600c4f96fe0fffffff61bcef400c5fb73e3f712cdf500c6f501c7 -f600c7f507c8f400c3fb8de7fff9fef700c9f61bcefffbfefedaf8f609caf600c6f601c7f600c7 -f600c7f500c5f400c4f502c6f600c4f323cefffffffdc0f2f502c5f200c2fb73e3fffffff949d9 -f400c3f503c7f400c5f400c6f206c7f609caf300c4f300c4f300c4f200c3f200c3f100c4f200c3 -f003c5f000c0fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c3ee00c4ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c4ee00c2fdc0f2f861ddec00bff609caee00c2f678dfffffffef31cbf000c3f104c7 -f000c7f201c7f201c7f203c7f300c5f740d6fffffff939d5f300c5f503c8f501c7f600c8fee3fa -fcb4eff400c5f503c8f503c8f400c4f96fe0fffffff61bcef400c6fcb4eff332d0f500c5f503c8 -f603c8f507c8f500c1fc98eafdc0f2f502c5f600c5f861ddfffffffc82e6f500c1f603c8f603c8 -f502c6f502c4f503c7f502c5f500c1fcadeefffffff735d3f400c4f400c3fb73e3fffffff949d9 -f400c3f206c7f206c7f200c2f456daf861ddf000c0f203c7f200c3f100c4f100c4f100c4f000c3 -f003c5ee00c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffefffffffffcfefffffff64ad9ee00c4f104c7ee00c4f000c7f000c7ee00c4 -ee00c4ee00c4ee00c2f89feafdc0f2f000c3ee00c2f113c9f53cd4fca2eefdcdf5f609caee00c2 -f201c7f201c7f201c7f203c7f200c2f740d6fffffff940d6f200c2f503c9f400c6f400c5fee3fa -fcb4eff400c3f503c7f503c8f400c3f96fe0fffffff323cef500c1fdcdf5fc98eaf500c1f502c5 -f502c6f400c3f61bcefedaf8f735d3f500c5f703c9f601c7f96fe0fffffffa76e3f600c4f400c3 -f300c4f400c3f400c3f500c5fb99e9fffbfff940d6f400c3f206c7f000c0f678dffffffff861dd -f500c1f502c4f200c2f206c7fdcdf5f740d6f200c2f003c5f200c3f200c3f100c4f100c4f100c4 -f003c5f000c3fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c4f503c8ee00c4ee00c4f000c7f000c7 -f000c7f000c7f000c5f113c9fdc0f2fdcdf5fb8de7f975e2f61bcef740d6fffbfefcadeef53cd4 -f203c7f300c7f201c7f300c7f64ad9fdc0f2fff9fefcb4eff949d9f501c7f724d0fa86e6fdecf9 -fee3fafb73e3f712cdf503c9f955dbfdc0f2fffffffc9deaf332d0f955dbfee3fafc82e6f735d3 -f82fd4f949d9fc9deaf939d5f500c5f703c9f700c9f703c9f700c7f735d3fdc0f2fcadeef949d9 -f61bcef929d3f861ddfdc0f2fcb4eff61bcef502c4f400c5f323cef861ddfdcdf5fffffffedaf8 -f56dddf955dbf881e2fee3fafffffff625d0f200c3f101c4f300c4f100c4f300c4f100c4f100c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fdfdfdfafafbfffffffffcfefffffff64ad9ee00c4f104c7f503c8ee00c4f000c7f600c8 -f000c7f000c7f000c7f000c5f003c5f332d0f735d3f203c7f104c7f323cef609caf61bcef323ce -f201c7f300c7f400c7f300c7f323cef724d0f609caf625d0f332d0f500c7f712cdf735d3f712cd -f61bcef939d5f609caf600c8f735d3f332d0f61bcef735d3f724d0f400c5f609caf940d6f955db -f949d9f939d5f609caf600c5f503c8f600c7f600c7f700c9f703c9f600c6f603c7f82fd4fc9dea -fffffffdc0f2f861ddf929d3f600c4f502c4f502c5f300c4f61bcef949d9f735d3f332d0f735d3 -f940d6f939d5f955dbf955dbf939d5f507c8f300c5f100c4f200c3f100c4f100c4f300c4f300c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fefefefafafbfffffffffdfefffffff64ad9ee00c4f104c7ee00c4f503c8f503c8f000c7 -f000c7f000c7f000c7f201c7f203c7f100c4f000c5f201c7f503c8f000c7f000c7f201c7f400c6 -f300c7f300c7f300c7f300c7f300c5f400c6f201c7f400c6f500c6f600c8f400c6f400c5f400c6 -f400c7f400c6f501c7f600c8f400c6f500c6f500c7f400c6f500c6f503c9f501c7f400c5f400c4 -f500c5f500c6f600c8f703c9f600c8f500c7f600c7f700c9f700c9f603c8f703c9f500c1f939d5 -fffffffdcdf5f600c5f500c5f507c8f507c8f503c7f503c8f502c5f200c2f400c4f500c5f400c4 -f400c3f300c4f400c4f300c4f300c4f300c5f300c5f300c4f200c3f200c3f300c5f100c4f000c3 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff64ad9ee00c4f503c9f503c8f000c7f503c8f503c8 -f503c8f503c8f000c7f000c7f000c7f203c7f503c8f201c7f201c7f503c8f000c7f201c7f201c7 -f600c8f600c8f300c7f300c7f203c7f201c7f201c7f503c8f503c8f400c7f503c8f503c8f501c7 -f600c8f503c8f600c8f600c8f503c8f503c9f503c8f503c9f600c8f600c8f600c8f503c8f503c8 -f503c8f703c9f600c8f700c9f600c8f600c8f700c9f600c8f600c8f600c8f600c8f603c8f501c7 -fca2eefffffffcadeef609caf600c4f600c5f600c5f600c4f601c7f503c7f503c7f503c7f503c8 -f503c7f503c7f503c8f503c8f503c8f400c7f400c6f300c5f300c4f300c4f100c4f200c3f100c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff64ad9ee00c4f206c7f104c7f104c7f104c7f503c9 -f503c9f503c9f503c9f503c9f503c8f503c8f503c9f503c9f503c9f503c9f503c8f503c8f503c9 -f503c9f503c8f503c8f503c9f503c8f503c8f503c8f503c9f503c9f503c9f503c9f503c9f503c8 -f503c9f503c9f503c9f503c9f503c9f503c9f503c8f503c9f703c9f503c9f503c9f503c8f503c8 -f703c9f703c9f703c9f703c9f703c9f703c9f703c9f703c9fc00cff603c8f703c9f703c9f600c8 -fc00cff881e2fff9fefdecf9fb8de7f955dbf949d9f96fe0f949d9f500c6f603c8f603c8f603c8 -f503c8f503c7f703c9f503c8f503c7f503c7f203c7f203c7f203c7f101c4f101c4f101c4f003c5 -f104c7f200c3fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff740d6ee00c3ee00c4ee00c4ee00c4ee00c3ee00c4 -ee00c4ee00c4ed00c3ed00c3ee00c3f000c5f000c5f300c5f300c5f300c5f300c5f300c5f400c6 -f400c6f400c6f300c5f300c5f300c5f300c5f400c6f400c6f201c7f400c6f400c6ec00bff300c4 -f400c7f400c6f400c6f500c7f500c7f500c6f500c7f600c8f600c7f500c7f600c7f500c7f500c6 -f600c7f600c8f600c8f600c8f700c9f700c9f700c9fc00cff500c5f700c7f600c7f600c7f600c7 -f502c6f600c5f609caf955dbfb8de7fc98eafc82e6f955dbf809cbf601c7f601c7f600c6f500c7 -f500c7f500c6f500c7f500c6f400c6f400c5f300c5f300c5f300c4f100c4f300c5f100c4f300c5 -f203c7f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffefffffffffb8de7f456daf965e1f861ddf861ddf456daf861dd -f456daf456daf456daf456daf456daf456daf456daf456daf456daf64ad9f949d9f949d9f949d9 -f64ad9f64ad9f949d9f64ad9f64ad9f949d9f64ad9f949d9f949d9f64ad9f949d9f949d9f64ad9 -f740d6f64ad9f53cd4f53cd4f53cd4f939d5f740d6f939d5f735d3f939d5f82fd4f929d3f929d3 -f929d3f929d3f929d3f929d3f929d3f82fd4f929d3f929d3f929d3f929d3f929d3f929d3f929d3 -f332d0f929d3f724d0f712cdf809cbf712cdf712cdf712cdf61bcef724d0f61bcef724d0f61bce -f61bcef724d0f61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bce -f61bcef609cafdc0f2fffffffffcfeffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffeff -fffbfffffefffffefffffffffffffffffefffffefffffefffffbfffff9fefff9fefff5fefff5fe -fff9fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fe -fff5fefff5fefffbfeffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffcfefffbfefffbfefffbfefffbfefffbfefffcfe -fffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffdfe -fffdfefffdfefffdfefffdfefffdfefffdfefffdfefffdfefffefffffefffffefffffdfefffdfe -fffefffffefffffefffffefffffefffffefffffefffffefffffeffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffeffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffdfdfdfdfdfdfffffffffefffefefefdfdfd -fffffffefefefdfdfdfefefefefefefffffffffffffefefefffffffefefefffffffefefefefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffdfdfdfffffffffffffdfdfeffffffffffffffffff -fefefefffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffd2d2d4cccdcefcfcfcfdecf9e6e5e6d6d7d8 -ffffffe6e5e6cccdceeeeeeef1f0f0f9f8f9fefefdf5f6f5f1f0f0f2f2f3fafafbeaeaeaf2f2f3 -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefffffffffffffffffffffffffefefefffffffffffffefefeffffffffffff -fffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffffffffffffffffffff -fffffffffffffefefefffffffefefefefefeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffdfdfdffffffa8a8ab99999e99999e99999efc98ea807e837d7e82 -bcbcbd858589afaeb0afaeb06a6a6dc7c9c9f2f2f38c8c90e6e5e690919499999eb1b1b4a8a8ab -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffefefefefefefefefefefefefefefffffefefefffffffffffffefefefefefe -fefefefffffffffffffffffffefefefefefefefefefefefefefefefffefefffffffefefeffffff -fefefefdfefefefefefefefefefefefdfefefefefefffffffffffffefefefefefefefefefefefe -fefefefefefefffffffffffffffffffffffffefefefdfdfdfefefefffffffffffffffffffefefe -fefefefefefeffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffcfcfc797d7df7f7f7ffffff78787cf9e3f5898a8c54565c -cccdce828184b7b7b8b1b1b465656ac7c9c9f4f4f4858589ffffffa2a1a47d7e82fffffff5f6f5 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffafafbe6e8e8fafafbfffffffefefeffffffeeeeeef5f6f5fffffff2f2f3fafafbffffff -fffffffafafbf1f0f0fafafbfffffffefefefffffffffffffffffffffffefffffffafafbf1f0f0 -fafafbfffffffefefefffffffffffffffffffffffffafafbf1f0f0fefefeffffffffffffffffff -fffffffdfcfdeeeeeefffffff1f0f0f1f0f0fcfcfcfffffffffffffefefef7f7f7f7f7f7fefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffefffffffffffffdfdfdffffff99999ea8a8abb1b1b48c8c90ffffff909194acadae -99999e797d7db8babcacadae65656a9d9ea0cccdce6d6e72e3e4e5bcbcbda5a4a7fffffffcfcfc -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd -ffffffd3d5d599999ec5c6c7bcbcbdb8babccccdceb1b1b4bcbcbdf1f0f0bcbcbdbcbcbdc7c9c9 -d3d5d5f5f6f5b1b1b4cccdcebcbcbdc3c3c4c5c6c7cac9cbbfc1c2d2d2d4fffefec7c9c9d3d5d5 -c3c3c4cac9cbcfd0d1c5c6c7cccdcec7c9c9eaeaeacccdce9d9ea0cccdcecccdcecac9cbcccdce -dfdedee6e5e6c3c3c4fafafbcac9cbb8babcc5c6c7bcbcbde1e1e2e1e1e2a8a8abd3d5d5c5c6c7 -d2d2d4d2d2d4f4f4f4fffffffffefeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffafafbbcbcbdb8babcf5f6f5ffffffdadadbfafafb -d3d5d5bfc1c2b1b1b4d6d7d8d3d5d5acadaebfbec1b8babcb1b1b4dfdedee3e4e5fffffffdfdfe -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -ffffffd3d5d5c3c3c4c3c3c4c7c9c9cac9cbbfc1c2c5c6c7cac9cbe6e5e6b8babcbfc1c2bcbcbd -d3d5d5fffefecac9cbbfc1c2bfbec1cccdcea8a8abb8babccfd0d1d3d5d5fafafbd3d5d5c5c6c7 -bfc1c2cccdcec3c3c4c5c6c7acadaeb1b1b4f2f2f3c5c6c7b8babcbfc1c2bfbec1c5c6c7acadae -eaeaead3d5d5dadadbfafafbd3d5d5d3d5d5bfc1c2b1b1b4dadadbdadadbb8babccccdcebcbcbd -acadaea8a8abf5f6f5fffffffefefeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffefefefffffffffffffefefefffffffffffffefefd -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefffffffffffffffffffffffff4f4f4f9f8f9f2f2f3f7f7f7fffffff1f0f0 -fefefefefefdfefefffffffffffffff5f6f5eaeaeafcfcfcfffffff9f8f9fefefefdfdfdfdfdfd -fffffffdfdfefffffff2f2f3e6e5e6fcfdfdfffffffefefefdfefefefefefefefefefefefffffe -fffffffefefefefefefffffffcfdfdfefefefefffffefffffffffffdfefefdfdfdfcfcfcffffff -f1f0f0e6e5e6fcfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffdfdfdfcfcfcfffffffffffffefefeffffff -fdfdfdfdfdfdfcfcfcfdfdfdfdfdfdfcfcfcfdfdfdfcfcfcfcfcfcfefefefefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefefefefefefefefefefefefefefefefefefefefffffffffffffefefefefefeffffff -fffefefffffffefefefefefefefefefefefefffffffefefefefefefefefefffffffefefefefefe -fefefefefefefefefefefefefffffffefefefffffffffffefefefefefefefefefefefefefefefe -fffffffefefefefefefffffffffffffffffffefefefefefefffffffffffffefefefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffefffffffffffffefefe -fffffffffffefffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefefefefefffffeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fefefefefefeffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffdfefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefdffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffefeffffffffffffffffffffffffffffffffffff000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/msql.gif b/Docs/Books/msql.gif deleted file mode 100644 index 27a7b17afb256b80c47fa1e17741c0f0a6da7e87..0000000000000000000000000000000000000000 Binary files a/Docs/Books/msql.gif and /dev/null differ diff --git a/Docs/Books/msql.txt b/Docs/Books/msql.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/prof.eps b/Docs/Books/prof.eps deleted file mode 100644 index 13cdb24afb1aa04a8781a667ff850cec1fdcb63e..0000000000000000000000000000000000000000 --- a/Docs/Books/prof.eps +++ /dev/null @@ -1,1167 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/prof.eps -%%CreationDate: Sun Dec 31 14:30:51 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 372 -%%EndComments -%%BeginPreview: 100 126 1 126 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffc010050 -% ffbf7bffbefbfffffffd552a90 -% fffffffffffffffffffc004030 -% fffeffbffbeffffffff9bb5b50 -% d555d56aaebaaaaaaaad46a490 -% ffffbffffbeffffffff8100930 -% d555eaaaaedd5555555aa4a050 -% ffff7ffffbbbfffffff4000910 -% ab5bd6b5aef76b6b6b6caaa250 -% fef6bdef7bbededededdaabdb0 -% 57dff7bdeeebfbfbfbfbffef70 -% fd755def7bbeaeaeaeaf56baf0 -% 57dff77bdeebfbfbfbfafdefd0 -% 7d76bddef7bededededfd7bb70 -% efddef75adedf7b7b7b57deef0 -% 5a22108a521208484c6ad75dd0 -% fc000f000000000008e075cbb0 -% 56007fc0000000000bf0cfc770 -% 7c00ffe0000000000bfc6e23f0 -% ec03faf00000000009e0c86350 -% 5a03e0500000000009c86e26f0 -% fe0380380000a8000d80cc0bd0 -% 540328500003be000c226a26f0 -% fe034018000d61800886d643b0 -% 54073ad8000bc2a00d82f54370 -% fe06eda8001f00a009e55f13f0 -% 540728d80015c0900f77f576b0 -% fe024aa0001f80680ddd5feff0 -% 54029410001700d80830e002b0 -% 7e028940003c00300ce84203f0 -% ea016d4000102a6c098c640350 -% 5c009280001e88380d846413f0 -% fa015ea0000d802408a4640370 -% 5e00a140000d00080ca06103d0 -% 740056000004880408006402b0 -% ee00a9400004a2140c686003f0 -% bc01b5600001440c0840620370 -% 6a01ae40000154180da46203d0 -% fe07f8f0000161000fafc20370 -% 543fc7fe000050000fef7ffef0 -% 7fffffffe00081400d5dd557b0 -% ebfffffff800a2000ff767c5f0 -% 5ffffffffe0054800afdcfe350 -% fbffffffff8054000dd76263f0 -% 5fffffffff80d4000d09c42370 -% 75ffffffffc169000a176483d0 -% efffffffffc214000d52c20370 -% 5dffffffff0010200d25a283d0 -% fbfffffffe0040180b1566a370 -% 5ffffffefc00c0020c97dd7fd0 -% f7fffffe780088000d9abebeb0 -% 5dfffffff80024000b67ff4ff0 -% f7fffffef7ffffffffdf6fbd70 -% 5d555555aed6d56db575daefd0 -% f63c21e31f11619f08c867c2f0 -% 5c0223f23510311988846fe7b0 -% 762027f3219021b08904cc32f0 -% ec4022022310510089446837b0 -% 5e2825a31491119a8894e2e2f0 -% fa5020a2019021000c805027b0 -% 5da0228304108184085460c2f0 -% 775022820410310508d8c8a7b0 -% eea721030a10a98808d06055f0 -% bdaa2142171035178d74c15350 -% 6f4fe46353d15fb4eb0760a7f0 -% fafadfffffbff6ffdffedffd70 -% 5fdfbb5aad76bdd5baedfb57d0 -% 7575f6f7fbefefbf77bbaefd70 -% efdf5fdeaf7abaf5eeef7bdbd0 -% 5d75f577fbdfefbf7dddeef770 -% fbdf5d4a0c4454c2a6677bbef0 -% 5f76f42b65cdce591c66deebd0 -% 75dddce2644c64dd466df7beb0 -% ef77b9a665cf32954527bdebf0 -% 5dddf4c94cc866496da5eb7ed0 -% fbbb5fffbfb7ddf7fb7b5fd7b0 -% 5f77f6aaeafef7beafdffafdf0 -% f5eebdffbfabbdebfaf55faf50 -% 5f7defab75feef5eafbff5faf0 -% f5d7bafeef57bbfbfb6abf5fd0 -% 5f7defaddbfdeeaedeffebf570 -% f6ef7ab3b15b7bfbb7d5bebfd0 -% 5ddbdf06e1f7deb77d7f6beaf0 -% 77beb5c7b5bef7eeefd6febfb0 -% eef7ff4dfde55abbb56fd7eb70 -% 5dbd558751a43061031d7d7ef0 -% fbebff8dc3071c71c337d7d7d0 -% 5f7f5a8771c50c51607d7d7d70 -% 75d5f78dd3471871e0efdbd7d0 -% ef7f5ec761c69c61b0daf77d70 -% bdd6f78dd3471471e87fbeeff0 -% 6f7ddd4731c61c514c2aebdab0 -% fbdbbb8521450a008c1fbefff0 -% 5ef777105492aeb7554b77aad0 -% 75beeefffffffbfdfffeedffb0 -% efebdddbaaad56af555bdf55f0 -% 5d7efbbefffbfffaffd77bff50 -% fb01af77aadf5aafda8ed6adf0 -% 5f19fbdd7fb5f7faf7edfffb70 -% 7599061a94298815094c8817d0 -% ef1124c9912899c8c888cdcef0 -% 5d9738c499f5cc8c9dccc89db0 -% fb1d29cc99a489d9c88ccc97f0 -% 5f9b3ca971c8dc8c8ccc8abd50 -% f5169458094484888888c40ff0 -% 5f7f7ff54fffbfffffffbd0ab0 -% f5ebd6a9cd5b75556d55f1cff0 -% 5f7efdfc5ff6efffdfff5c5db0 -% f6d7afaff55fdd5afab5f7fb70 -% 5dfd7afb5ff57bf7afef5daff0 -% 77afefaef6bfdf6efaddf7fab0 -% eefabafbbdeab5dbafb75d57f0 -% 5c005756d6addb6d756db6ed50 -% fa003dfdbdfb77dbdfdb7dbff0 -% 5e086f57edaedd6b757febeab0 -% 74043bfd7a512b1a8b42bf7ff0 -% ee026eafdffff6fffeffebd550 -% bc7f3bfaf5ad5fd557ad7ebff0 -% 6ec06d575b76eabbbd76d5d570 -% fa0037adeddbbd6ed6ddaf77d0 -% 5e766d7f5f76ebfbbdf7fadd70 -% 74003ed5b5adb6aad6ad576bd0 -% ee006b7aed6d6dedbdbaedb770 -% 5c003ed7bbdfdf5feb77bb6df0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 357.165354 translate -283.464567 -357.165354 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 126 8 -% Transformation matrix -[ 100 0 0 126 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c095754520d0c090d0c090d0c090d0c090d0c095754520d0c09 -0d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c095754520d0c090d0c090d0c09 -5754520d0c090d0c090d0c090d0c090d0c095754520d0c090d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c10d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c095754520d0c09 -0d0c095754525754525754520d0c095754520d0c095754525754525754520d0c095754520d0c09 -0d0c090d0c090d0c095754520d0c090d0c090d0c095754520d0c095754520d0c095754520d0c09 -5754520d0c090d0c095754525754520d0c095754520d0c090d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c18d8b8eb8b3c1b8b3c1b8b3c18d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c18d8b8eb8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c10d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534a6385a -b8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c18d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1dfd9dadfd9dab8b3c1b8b3c1dfd9da -b8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1dfd9dab8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104b -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c0d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104be16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fdd0046e02c5ce16e8fe16e8fe16e8fa6385ab01534e16e8fe16e8fe16e8f -e16e8fe16e8fe02c5cdd0046d7104ba6385aa6385aa6385aa6385aa6385aa6385aa6385aa6385a -a6385ab01534b01534dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754525754528d8b8edfd9dafdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da5754520d0c090d0c098d8b8efdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104b5754528d8b8e5754525754520d0c090d0c09575452dfd9da -b8b3c1575452575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da8d8b8e5754520d0c090d0c090d0c090d0c090d0c090d0c09575452 -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fb8b3c10d0c090d0c090d0c095754520d0c09b8b3c1fdfdfd -dfd9dafdfdfde16e8fdd0046d7104b8d8b8e8d8b8e0d0c095754525754520d0c09575452b8b3c1 -fdfdfddfd9da575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c15754520d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8f8d8b8e0d0c090d0c090d0c090d0c090d0c09575452575452 -dfd9dafdfdfde16e8fdd0046d7104bb8b3c15754520d0c09575452b8b3c18d8b8e8d8b8e8d8b8e -fdfdfdfdfdfd8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfd8d8b8e0d0c090d0c090d0c090d0c090d0c095754525754528d8b8e5754520d0c090d0c09 -0d0c09575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fdfd9da0d0c090d0c090d0c090d0c098d8b8e8d8b8eb8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104bdfd9da575452575452b8b3c1fdfdfddfd9da8d8b8e575452 -b8b3c1fdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfd5754520d0c090d0c090d0c09575452b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c18d8b8e -5754520d0c098d8b8efdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfd0d0c090d0c09575452b8b3c1dfd9dab8b3c1dfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1575452575452575452dfd9dab8b3c1dfd9da575452 -8d8b8edfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da0d0c090d0c095754528d8b8eb8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da -8d8b8e0d0c09575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8eb8b3c18d8b8e8d8b8e -8d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5c8d8b8e575452575452b8b3c1b8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c15754525754528d8b8edfd9dafdfdfdfdfdfd8d8b8e -b8b3c1b8b3c1575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c10d0c090d0c098d8b8eb8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c1 -b8b3c1575452575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e5754525754525754528d8b8e575452 -5754525754525754528d8b8edfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cdfd9dab8b3c18d8b8eb8b3c1b8b3c1dfd9dadfd9dab8b3c1 -8d8b8edfd9dae6a5b7dd0046d7104b8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1dfd9dafdfdfdb8b3c1 -dfd9dadfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c10d0c095754528d8b8eb8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1 -b8b3c1575452575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e5754525754525754525754525754520d0c09575452 -8d8b8eb8b3c18d8b8e5754528d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfddfd9da8d8b8edfd9dab8b3c1dfd9dadfd9dab8b3c1 -5754528d8b8ea6385add0046d7104b8d8b8e8d8b8e575452575452b8b3c1b8b3c1b8b3c1b8b3c1 -dfd9dadfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -8d8b8e0d0c09575452b8b3c18d8b8e5754525754528d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8e -b8b3c18d8b8e0d0c09dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdb8b3c15754525754525754525754525754525754528d8b8edfd9da -dfd9dadfd9dab8b3c18d8b8e5754528d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e0d0c09b8b3c1b8b3c1dfd9dadfd9da8d8b8e -5754528d8b8ea6385add0046d7104b5754528d8b8e5754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dadfd9dae6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -5754520d0c095754528d8b8e575452575452575452575452575452b8b3c1575452575452575452 -5754528d8b8e575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754525754525754520d0c095754528d8b8edfd9dafdfdfd -dfd9dadfd9dadfd9dab8b3c15754528d8b8e8d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fdfd9da5754520d0c090d0c098d8b8edfd9dadfd9da8d8b8e -8d8b8e8d8b8ea6385add0046b015345754525754525754525754525754528d8b8edfd9da8d8b8e -b8b3c1fdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -5754520d0c095754528d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8eb8b3c18d8b8e575452575452 -8d8b8e8d8b8e575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754525754525754520d0c090d0c098d8b8edfd9dafdfdfd -fdfdfddfd9dadfd9dadfd9da8d8b8e8d8b8eb8b3c18d8b8e8d8b8efdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104ba6385ab01534b01534b01534b01534a6385ae16e8fa6385a -a6385aa6385ab01534dd0046dd0046b01534b01534b01534b01534a6385ae16e8fa6385aa6385a -b01534a6385ae02c5cdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c15754528d8b8eb8b3c1b8b3c18d8b8eb8b3c18d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8efdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754525754520d0c090d0c09575452b8b3c1fdfdfddfd9da -fdfdfdfdfdfdfdfdfddfd9dab8b3c15754528d8b8e8d8b8e575452dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da5754528d8b8e8d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8eb8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c18d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754520d0c09575452575452b8b3c1dfd9dadfd9dafdfdfd -fdfdfddfd9dadfd9dadfd9dab8b3c15754525754525754525754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5ce6a5b7e6a5b7e6a5b78d8b8e5754525754528d8b8ee6a5b7 -e6a5b7e6a5b7e16e8fdd0046d7104be6a5b7e6a5b7e6a5b7e6a5b78d8b8ee16e8fe6a5b7e6a5b7 -e6a5b7e6a5b7e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c18d8b8eb8b3c1b8b3c18d8b8eb8b3c1b8b3c1 -b8b3c1b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfd8d8b8e0d0c09575452575452b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da -b8b3c1dfd9dadfd9dadfd9dadfd9da8d8b8e0d0c095754528d8b8eb8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfd8d8b8e575452575452575452575452b8b3c1 -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfddfd9da8d8b8eb8b3c1dfd9dadfd9dadfd9da -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e5754525754528d8b8e8d8b8e8d8b8e8d8b8e -b8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754528d8b8eb8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1 -8d8b8eb8b3c1b8b3c1dfd9dadfd9dab8b3c15754525754525754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e0d0c09575452dfd9dafdfdfd8d8b8e575452 -b8b3c1fdfdfde6a5b7dd0046d7104bfdfdfdfdfdfd575452b8b3c1fdfdfdfdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfddfd9da8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8e575452b8b3c1dfd9dab8b3c1 -8d8b8e8d8b8eb8b3c1dfd9dadfd9dab8b3c1575452575452575452575452fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd5754520d0c098d8b8efdfdfdfdfdfdfdfdfd575452 -8d8b8efdfdfde6a5b7dd0046d7104bfdfdfddfd9da575452dfd9dafdfdfdfdfdfdfdfdfddfd9da -b8b3c1fdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfd8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e5754525754525754528d8b8e8d8b8e8d8b8e -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfd8d8b8e0d0c095754528d8b8e575452575452b8b3c1dfd9dadfd9da -b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da8d8b8e5754528d8b8e575452dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e5754528d8b8e8d8b8edfd9da8d8b8e8d8b8e -b8b3c1fdfdfde6a5b7dd0046d7104bfdfdfddfd9da575452b8b3c1dfd9dafdfdfdfdfdfddfd9da -b8b3c1fdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8eb8b3c1dfd9dadfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c1b8b3c18d8b8edfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046d7104bfdfdfddfd9da8d8b8eb8b3c1b8b3c1fdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c18d8b8eb8b3c1 -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e575452b8b3c1b8b3c18d8b8eb8b3c1dfd9dadfd9da -b8b3c1dfd9dafdfdfddfd9dadfd9dadfd9dadfd9dadfd9dadfd9da8d8b8eb8b3c1fdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfddfd9dab8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfddfd9da8d8b8eb8b3c1b8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c18d8b8e8d8b8e8d8b8e -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e8d8b8eb8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c18d8b8e575452b8b3c1fdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdb8b3c1b8b3c1dfd9dafdfdfdfdfdfddfd9da -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfd5754525754528d8b8e5754525754528d8b8e8d8b8e8d8b8e8d8b8eb8b3c1575452 -575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8eb8b3c18d8b8e5754528d8b8eb8b3c1 -dfd9dab8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1575452575452dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8eb8b3c1b8b3c1b8b3c1fdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdb8b3c18d8b8edfd9dafdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdb8b3c10d0c095754528d8b8e5754525754525754525754525754528d8b8eb8b3c1575452 -575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8eb8b3c1 -8d8b8e8d8b8e8d8b8edfd9dadfd9dadfd9dadfd9dab8b3c15754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cb8b3c15754525754528d8b8e8d8b8eb8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdfdfdfd575452b8b3c1dfd9dadfd9dafdfdfd -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da -8d8b8e0d0c090d0c090d0c095754525754525754525754525754528d8b8eb8b3c18d8b8e0d0c09 -0d0c098d8b8eb8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da8d8b8eb8b3c1575452575452b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046b015340d0c090d0c090d0c098d8b8e8d8b8e8d8b8e5754520d0c09 -0d0c09575452a6385add0046d7104bfdfdfdfdfdfddfd9da5754528d8b8edfd9dadfd9dafdfdfd -dfd9dafdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8e5754520d0c09 -0d0c090d0c090d0c090d0c090d0c095754528d8b8e8d8b8e8d8b8e8d8b8e5754520d0c090d0c09 -0d0c090d0c090d0c090d0c095754528d8b8eb8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -b8b3c1dfd9dadfd9dab8b3c1dfd9dab8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046b01534b01534b01534d7104bd7104be02c5cb01534b01534 -b01534b01534dd0046dd0046dd0046e02c5ce02c5cd7104bb01534e02c5ce02c5ce02c5ce02c5c -e02c5ce02c5cd7104bdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104b5754525754520d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c095754525754520d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452575452b8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c1dfd9dadfd9dab8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452b8b3c1fdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e8d8b8e8d8b8eb8b3c1 -dfd9dadfd9dab8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046b015345754525754525754525754520d0c09575452575452575452 -575452575452b01534dd0046e02c5ce6a5b7e6a5b75754520d0c090d0c090d0c090d0c09e6a5b7 -e6a5b7e6a5b7e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da5754528d8b8e8d8b8e -b8b3c18d8b8eb8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a5754525754525754520d0c090d0c090d0c09575452575452 -575452575452a6385add0046e02c5cfdfdfd8d8b8e0d0c090d0c090d0c090d0c090d0c09575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c09575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c15754528d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8e5754520d0c09575452575452575452575452 -575452575452a6385add0046e02c5cfdfdfd8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1575452575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c098d8b8efdfdfdfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754528d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8edfd9dadfd9dadfd9dab8b3c18d8b8e8d8b8e -8d8b8e575452a6385add0046e02c5cfdfdfdb8b3c18d8b8edfd9dadfd9dadfd9dab8b3c1575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c09575452fdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8eb8b3c15754525754528d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8eb8b3c1dfd9dadfd9da8d8b8e8d8b8e8d8b8e -575452575452a6385add0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c18d8b8eb8b3c1b8b3c1 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c09575452fdfdfddfd9dadfd9dadfd9dab8b3c18d8b8edfd9dab8b3c18d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8eb8b3c1b8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -575452575452a6385add0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c098d8b8edfd9dafdfdfdfdfdfddfd9dadfd9dadfd9dab8b3c1dfd9dafdfdfdb8b3c18d8b8e -b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c18d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e575452b8b3c1dfd9da5754528d8b8eb8b3c1b8b3c1 -8d8b8e575452a6385add0046e02c5cfdfdfdfdfdfdb8b3c18d8b8eb8b3c1b8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dadfd9dadfd9dadfd9dab8b3c1fdfdfddfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c18d8b8e8d8b8eb8b3c1dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e575452b8b3c1dfd9dab8b3c18d8b8eb8b3c18d8b8e -8d8b8e575452a6385add0046e02c5cfdfdfdfdfdfd8d8b8e5754525754528d8b8e8d8b8e575452 -dfd9dafdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c098d8b8e5754520d0c090d0c090d0c090d0c090d0c09b8b3c1 -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dafdfdfddfd9da8d8b8e575452dfd9dafdfdfd -dfd9dadfd9dadfd9dafdfdfddfd9dafdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8eb8b3c1fdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8e8d8b8edfd9dab8b3c18d8b8e8d8b8e8d8b8e -575452575452a6385add0046e02c5c8d8b8e0d0c090d0c095754528d8b8e8d8b8e8d8b8e0d0c09 -0d0c09575452a6385add0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c09dfd9da8d8b8e0d0c090d0c090d0c090d0c098d8b8efdfdfd -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dafdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dadfd9dafdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385ab8b3c18d8b8e5754528d8b8edfd9da8d8b8e575452575452 -0d0c09575452a6385add0046b015340d0c090d0c090d0c090d0c098d8b8e8d8b8e8d8b8e575452 -0d0c090d0c090d0c09dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c095754525754520d0c090d0c090d0c09575452b8b3c1dfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c18d8b8edfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9da -dfd9dadfd9dae6a5b7dd0046a6385a5754525754525754525754528d8b8eb8b3c18d8b8e575452 -0d0c09575452b01534dd0046b015340d0c090d0c090d0c090d0c09575452b8b3c18d8b8eb8b3c1 -8d8b8e0d0c090d0c09dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bdd0046dd0046dd0046b01534b01534d7104bd7104bd7104bd7104bd7104bd7104b -b01534b01534dd0046dd0046dd0046b01534b01534b01534b01534b01534d7104bd7104bd7104b -d7104bb01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bd7104bd7104bdd0046dd0046 -dd0046d7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bdd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bd7104bdd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bdd0046dd0046d7104bd7104b -d7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046dd0046d7104b -d7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046d7104bd7104b -d7104bd7104bdd0046dd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046dd0046d7104b -d7104bd7104bdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cdfd9dafdfdfddfd9da575452575452575452 -5754528d8b8edfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfd8d8b8e0d0c090d0c090d0c09 -0d0c09b8b3c1fdfdfddfd9dadd0046e02c5cdfd9dafdfdfdb8b3c10d0c090d0c090d0c090d0c09 -575452dfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfdb8b3c18d8b8e8d8b8e575452575452b8b3c1 -fdfdfddfd9dadfd9dad7104bd7104bdfd9dafdfdfd5754520d0c090d0c090d0c090d0c098d8b8e -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8edfd9da -fdfdfdfdfdfde16e8fdd0046b015348d8b8eb8b3c15754525754520d0c090d0c09575452575452 -b8b3c1b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfddfd9da8d8b8e8d8b8eb8b3c1 -8d8b8e575452dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfddfd9da0d0c090d0c090d0c090d0c09 -0d0c090d0c09fdfdfdfdfdfddd0046e02c5cfdfdfdfdfdfd5754525754528d8b8e8d8b8e575452 -0d0c098d8b8efdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c1b8b3c1dfd9dab8b3c1575452575452 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfddfd9da0d0c09575452b8b3c1b8b3c15754520d0c09 -fdfdfdfdfdfddfd9dadd0046e16e8ffdfdfdb8b3c1575452b8b3c1dfd9dadfd9dab8b3c18d8b8e -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c18d8b8e0d0c095754520d0c095754520d0c090d0c09 -b8b3c1dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8edfd9dafdfdfd -fdfdfddfd9dadfd9dafdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8e0d0c090d0c09575452575452 -575452575452dfd9dafdfdfddd0046e02c5cfdfdfdb8b3c1575452fdfdfdfdfdfdfdfdfddfd9da -575452575452fdfdfde6a5b7dd0046dfd9dafdfdfddfd9dadfd9dadfd9dadfd9da8d8b8e575452 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfd8d8b8e0d0c09dfd9dafdfdfdfdfdfddfd9da0d0c09 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfd5754528d8b8edfd9dadfd9dafdfdfddfd9da575452 -b8b3c1fdfdfde16e8fdd0046d7104bb8b3c1575452575452b8b3c1dfd9dadfd9dab8b3c10d0c09 -575452dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8eb8b3c1fdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8e5754528d8b8e8d8b8edfd9da -dfd9da8d8b8edfd9dafdfdfddd0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c1575452 -575452575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dadfd9dab8b3c18d8b8e575452 -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdb8b3c18d8b8edfd9dafdfdfddfd9dadfd9da575452 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfd8d8b8e8d8b8eb8b3c1dfd9dadfd9dab8b3c18d8b8e -dfd9dafdfdfde16e8fdd0046b01534b8b3c1575452b8b3c1fdfdfdfdfdfdfdfdfdb8b3c1575452 -575452dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8e8d8b8eb8b3c1 -dfd9dadfd9dafdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8eb8b3c15754525754528d8b8e -8d8b8e8d8b8efdfdfddfd9dadd0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c18d8b8e -8d8b8e575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dab8b3c1b8b3c1b8b3c1b8b3c1575452 -b8b3c1fdfdfdfdfdfdd7104bd7104bfdfdfddfd9da8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfdb8b3c18d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -fdfdfdfdfdfde16e8fdd0046b015348d8b8eb8b3c1b8b3c18d8b8eb8b3c18d8b8e575452575452 -8d8b8edfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cdfd9da8d8b8e8d8b8eb8b3c18d8b8eb8b3c1 -b8b3c1dfd9dafdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c1b8b3c1b8b3c18d8b8e8d8b8e -8d8b8edfd9dafdfdfddfd9dadd0046e02c5cfdfdfdfdfdfddfd9dafdfdfdfdfdfddfd9dadfd9da -8d8b8e575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dab8b3c1dfd9dab8b3c18d8b8e -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfdb8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfdb8b3c18d8b8edfd9dab8b3c1dfd9dadfd9dab8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104b8d8b8eb8b3c1fdfdfddfd9dadfd9da8d8b8eb8b3c1575452 -b8b3c1dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5c5754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dafdfdfdfdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfddfd9da8d8b8e8d8b8e575452b8b3c1 -b8b3c1fdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dadfd9da8d8b8eb8b3c1 -b8b3c1dfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dab8b3c1dfd9dab8b3c1b8b3c1 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfddfd9dadfd9dab8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1b8b3c1dfd9dadfd9dab8b3c15754528d8b8e8d8b8e -dfd9dadfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dab8b3c1dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -b8b3c1fdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8e -dfd9dafdfdfdfdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8e8d8b8e -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8eb8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfdfdfdfd5754525754528d8b8e8d8b8e575452dfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1b8b3c1dfd9dadfd9dadfd9da8d8b8e8d8b8e8d8b8e -b8b3c1b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e575452b8b3c1dfd9da -8d8b8e5754528d8b8efdfdfde6a5b7dd0046dfd9dafdfdfdfdfdfd8d8b8e5754528d8b8eb8b3c1 -dfd9dafdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfdb8b3c1b8b3c1b8b3c18d8b8e -b8b3c1fdfdfdfdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8e575452 -8d8b8edfd9dafdfdfdd7104bd7104bfdfdfdfdfdfddfd9da8d8b8eb8b3c1b8b3c1b8b3c1b8b3c1 -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfdfdfdfd5754525754528d8b8e575452575452fdfdfd -fdfdfdfdfdfde16e8fdd0046e02c5cdfd9dafdfdfdfdfdfddfd9dadfd9dab8b3c18d8b8e575452 -575452b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e8d8b8eb8b3c18d8b8e -575452575452575452b8b3c1e6a5b7dd0046dfd9dafdfdfddfd9dadfd9da8d8b8e8d8b8e575452 -b8b3c1fdfdfdfdfdfdfdfdfddd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8e8d8b8e575452575452 -0d0c09dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8e575452 -5754525754528d8b8ed7104bd7104bfdfdfddfd9da5754528d8b8e5754525754528d8b8e575452 -8d8b8efdfdfddfd9dadd0046e16e8fdfd9da5754528d8b8e5754525754525754528d8b8e8d8b8e -dfd9dafdfdfde16e8fdd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754528d8b8e -8d8b8edfd9dae6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104b5754525754528d8b8ee6a5b78d8b8e575452 -575452575452575452575452a6385add0046e6a5b7b8b3c1b8b3c1e6a5b7e6a5b7b8b3c1575452 -575452e6a5b7dfd9dae6a5b7dd0046e02c5cb8b3c18d8b8e8d8b8e8d8b8eb8b3c18d8b8e0d0c09 -0d0c090d0c098d8b8ee16e8fdd0046e6a5b7dfd9dae6a5b78d8b8e8d8b8eb8b3c1575452575452 -5754525754520d0c09dd0046d7104b8d8b8e575452575452b8b3c15754525754528d8b8e575452 -0d0c098d8b8ee16e8fdd0046a6385a5754520d0c098d8b8eb8b3c18d8b8eb8b3c1b8b3c1575452 -0d0c09575452a6385add0046e02c5cdfd9dadfd9dadfd9dab8b3c1b8b3c18d8b8e8d8b8e8d8b8e -8d8b8edfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e16e8fe16e8fe6a5b7d7104b -e02c5ce6a5b7e16e8fe16e8fdd0046dd0046e16e8fe16e8fe16e8fe16e8fdd0046dd0046e16e8f -e6a5b7e16e8fdd0046e16e8fe6a5b7e16e8fd7104be02c5ce16e8fe16e8fd7104bd7104be16e8f -e16e8fe02c5cdd0046e6a5b7e02c5cdd0046e02c5ce16e8fe16e8fe6a5b7e02c5cdd0046e16e8f -e16e8fdd0046d7104be16e8fdd0046dd0046e16e8fe16e8fdd0046dd0046e16e8fe16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdfd9dae16e8f -e02c5cdfd9dae02c5cfdfdfdd7104be02c5cdfd9dad7104bdd0046dfd9dae16e8fdd0046dfd9da -e16e8fd7104bdd0046e6a5b7e6a5b7d7104bdd0046e6a5b7e16e8fd7104bdd0046e16e8fe6a5b7 -d7104bd7104bdd0046dfd9dae16e8fdd0046dfd9dae16e8fdd0046e16e8fdfd9dadd0046e16e8f -fdfdfde16e8fdd0046e16e8fdd0046dd0046dfd9dadfd9dadd0046dd0046e6a5b7e6a5b7dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e6a5b7e6a5b7e6a5b7e02c5c -e02c5cdfd9dae6a5b7e16e8fdd0046e6a5b7e6a5b7dd0046dd0046e16e8fdfd9dadd0046e6a5b7 -e6a5b7e16e8fdd0046e6a5b7dfd9dae16e8fdd0046e16e8ffdfdfde6a5b7d7104be02c5cdfd9da -dfd9dae02c5cdd0046dfd9dae02c5ce02c5cfdfdfddd0046dd0046e02c5cfdfdfdd7104be16e8f -e16e8ffdfdfde16e8fe16e8fdd0046e02c5ce16e8fdfd9dae02c5cdd0046e6a5b7e16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdd0046dd0046 -e02c5cdfd9dadfd9dae16e8fdd0046e16e8fdfd9dadd0046dd0046e6a5b7e6a5b7dd0046dfd9da -e16e8fdd0046dd0046e6a5b7e6a5b7dd0046dd0046dd0046e02c5cdfd9dae16e8fdd0046d7104b -e6a5b7e6a5b7dd0046dfd9dae02c5cd7104bfdfdfde02c5cdd0046e02c5cfdfdfddd0046e16e8f -d7104be16e8ffdfdfde6a5b7dd0046e16e8fe16e8fdfd9dae6a5b7dd0046e6a5b7e16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdd0046dd0046 -e02c5cdfd9dae02c5cdfd9dae02c5cd7104be6a5b7e16e8fe16e8fe6a5b7e02c5cdd0046dfd9da -e16e8fdd0046dd0046e6a5b7e6a5b7e16e8fdd0046e16e8fe16e8fe6a5b7e02c5ce02c5ce16e8f -e16e8fe16e8fdd0046dfd9dae16e8fdd0046e16e8fe6a5b7e02c5ce6a5b7e16e8fdd0046e16e8f -e02c5cdd0046e16e8fe6a5b7d7104be16e8fdd0046e02c5cdfd9dadd0046e6a5b7e6a5b7e16e8f -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bdd0046dd0046 -dd0046d7104bdd0046d7104bd7104bdd0046dd0046e02c5ce02c5cdd0046dd0046dd0046d7104b -d7104bdd0046dd0046d7104be02c5ce02c5cdd0046d7104be02c5cd7104bdd0046d7104be02c5c -e02c5cdd0046dd0046d7104bd7104bdd0046dd0046e02c5ce02c5cd7104bdd0046dd0046d7104b -dd0046dd0046dd0046d7104bdd0046d7104bdd0046dd0046d7104bdd0046d7104be02c5ce02c5c -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104be02c5cdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427d86427 -e02c5ce02c5cd86427d86427e02c5cdd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427f9f302 -f9f302f9f302f9f302d8ac0fb01534dd0046dd0046dd0046dd0046d86427f9f302f9f302f9f302 -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0fd8ac0fd86427 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046b01534d86427 -dd0046dd0046dd0046dd0046d7104bd86427dd0046d7104bd86427d86427e02c5cdd0046dd0046 -d7104be02c5ce02c5ce02c5ce02c5cdd0046d7104be02c5ce02c5ce02c5ce02c5cdd0046e02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427f9f302d8ac0f -dd0046dd0046d7104bd86427f9f302f9f302d86427d8ac0ff9f302f9f302f9f302d86427dd0046 -e02c5cd8ac0ff9f302f9f302f9f302d7104be02c5cd8ac0ff9f302f9f302f9f302d7104bd86427 -d8ac0ff9f302f9f302f9f302f9f302a6385ae02c5cd8ac0ff9f302d8ac0fd86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302f9f302d8ac0f -dd0046e02c5cd8ac0ff9f302f9f302f9f302d86427b01534b01534f9f302f9f302f9f302e02c5c -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -d7104bd8ac0ff9f302f9f302f9f302d7104bdd0046d8ac0fd8ac0fb01534dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302d8ac0f -dd0046dd0046b01534f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302d86427 -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046d7104bf9f302f9f302f9f302d8ac0fd86427d8ac0fb01534dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046dd0046f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046e02c5cf9f302f9f302f9f302f9f302b01534dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046d7104bf9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046dd0046d8ac0ff9f302f9f302f9f302d86427dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046e02c5cd7104be02c5cf9f302f9f302d8ac0f -dd0046dd0046d7104bf9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046e02c5cd8ac0fd8ac0ff9f302f9f302f9f302e02c5cdd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046e02c5cf9f302b01534d7104bf9f302f9f302d8ac0f -dd0046dd0046dd0046f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046d8ac0ff9f302f9f302e02c5cdd0046e02c5cf9f302f9f302f9f302d7104bdd0046 -dd0046d7104bf9f302a6385add0046d8ac0ff9f302f9f302f9f302d7104bdd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302 -f9f302f9f302f9f302d86427e02c5cd86427f9f302f9f302b01534d86427f9f302f9f302f9f302 -e02c5cd7104bd86427f9f302f9f302f9f302d86427dd0046e02c5cf9f302f9f302f9f302d8ac0f -e02c5cdd0046d86427f9f302f9f302f9f302d8ac0fd8ac0ff9f302f9f302f9f302d8ac0fe02c5c -d86427f9f302f9f302d7104bdd0046d86427f9f302f9f302f9f302d8ac0fe02c5cdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0fd8ac0f -d8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd86427d8ac0fd8ac0fd8ac0fd8ac0f -d8ac0fd86427d8ac0fd8ac0fd8ac0fd8ac0fd8ac0fb01534d8ac0fd8ac0fd8ac0fd8ac0fd8ac0f -d86427dd0046dd0046d86427d8ac0fd8ac0fd86427b01534d8ac0fd8ac0fd86427b01534d86427 -d8ac0fd8ac0fd8ac0fd86427e02c5cd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046b01534dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427d86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd8ac0fd86427d8ac0f -d8ac0fd86427dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302b01534e02c5c -f9f302f9f302e02c5cdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104b -dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427d86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -f9f302f9f302d86427e02c5cd8ac0fd86427d8ac0fd8ac0fd7104bd7104bd86427d86427d8ac0f -d8ac0fe02c5cdd0046dd0046d86427d8ac0fd86427d8ac0fd86427d86427d7104be02c5cd8ac0f -d86427f9f302d8ac0fdd0046d86427d8ac0fd8ac0fd8ac0fe02c5cdd0046d7104bd86427d8ac0f -d86427d8ac0fd8ac0fd86427d8ac0ff9f302d8ac0fe02c5cdd0046d7104bd86427d8ac0fd86427 -d8ac0fd8ac0fd86427d86427d8ac0fd8ac0fe02c5cdd0046d7104bd86427d8ac0fdd0046d7104b -d86427d8ac0fd86427d8ac0ff9f302d86427dd0046dd0046d86427d8ac0fd86427d8ac0fd86427 -d86427d7104bdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d7104bd86427 -f9f302f9f302a6385af9f302f9f302d8ac0fd8ac0ff9f302a6385ad8ac0ff9f302b01534dd0046 -f9f302f9f302e02c5cd86427f9f302d86427dd0046d8ac0ff9f302d86427d86427f9f302f9f302 -d8ac0ff9f302d8ac0fd8ac0ff9f302a6385ae02c5cf9f302d8ac0fd7104bd8ac0ff9f302d8ac0f -b01534d86427f9f302d8ac0fb01534d86427f9f302d8ac0fdd0046d8ac0ff9f302f9f302b01534 -d86427f9f302f9f302b01534d86427f9f302d8ac0fdd0046d86427f9f302f9f302dd0046d86427 -f9f302f9f302a6385ab01534f9f302f9f302e02c5ce02c5cf9f302d8ac0fb01534d86427f9f302 -d8ac0fb01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d86427d8ac0f -d8ac0fa6385add0046d8ac0ff9f302d86427d7104bb01534d86427f9f302d8ac0fdd0046dd0046 -d86427f9f302d8ac0fd8ac0ff9f302d86427dd0046d8ac0ff9f302d86427dd0046f9f302f9f302 -b01534b01534b01534a6385ab01534d7104bd86427f9f302d8ac0fdd0046e02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302a6385ad86427f9f302d8ac0fdd0046d86427f9f302 -d86427dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302b01534b01534 -b01534dd0046dd0046d8ac0ff9f302d86427dd0046dd0046d86427f9f302d8ac0fdd0046dd0046 -d86427f9f302d8ac0fd7104bf9f302d8ac0fe02c5cf9f302d8ac0fb01534dd0046f9f302f9f302 -b01534dd0046dd0046d7104bd8ac0fd8ac0fd86427f9f302d8ac0fdd0046e02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302a6385ad7104bd8ac0ff9f302e02c5cd8ac0ff9f302 -b01534dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -dd0046dd0046dd0046d8ac0ff9f302d86427dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -d86427f9f302d86427d7104bd8ac0fd8ac0fd86427d86427b01534dd0046dd0046f9f302f9f302 -b01534dd0046dd0046d8ac0ff9f302b01534d86427f9f302d8ac0fd7104be02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302e02c5cd7104bd8ac0ff9f302d86427d86427b01534 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0ff9f302f9f302d86427dd0046 -dd0046dd0046e02c5cd8ac0ff9f302d8ac0fd7104bdd0046dd0046d86427f9f302d8ac0fd86427 -d8ac0fd86427dd0046e02c5cf9f302f9f302f9f302f9f302f9f302d86427d86427f9f302f9f302 -d86427d7104bdd0046d8ac0ff9f302d8ac0fd86427f9f302f9f302d86427d8ac0ff9f302f9f302 -e02c5cd86427f9f302f9f302e02c5cd8ac0ff9f302f9f302d86427d86427f9f302f9f302e02c5c -d86427f9f302f9f302e02c5cd86427f9f302f9f302d86427d86427f9f302f9f302d86427d86427 -f9f302f9f302d86427e02c5cf9f302f9f302d8ac0fd7104bd8ac0ff9f302f9f302f9f302f9f302 -d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104ba6385ab01534b01534a6385add0046 -dd0046dd0046d7104ba6385ab01534a6385ab01534dd0046dd0046dd0046b01534a6385aa6385a -b01534dd0046dd0046e02c5cd8ac0fd8ac0fd8ac0fd8ac0ff9f302f9f302a6385ab01534b01534 -a6385ad7104bdd0046d7104ba6385ab01534dd0046b01534b01534d7104ba6385ab01534a6385a -b01534a6385ab01534a6385ab01534a6385ab01534b01534a6385aa6385ab01534a6385ab01534 -a6385ab01534b01534b01534a6385ab01534b01534a6385aa6385ab01534b01534a6385aa6385a -b01534b01534b01534b01534a6385ab01534a6385ae02c5cd8ac0fd8ac0fd8ac0fd8ac0ff9f302 -f9f302e02c5cdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046f9f302f9f302dd0046dd0046dd0046f9f302d8ac0fdd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046d8ac0ff9f302d7104bdd0046dd0046d8ac0f -f9f302b01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd86427d86427d86427b01534dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd86427d86427d8ac0f -b01534dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046b01534b01534b01534dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046b01534b01534b01534dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dadfd9dadfd9dadfd9dadfd9dadfd9da -dfd9dadfd9dadfd9dadfd9dae16e8fe02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104bdd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfde6a5b7dfd9da -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfde6a5b7d7104b -e6a5b7fdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -e02c5cd7104be02c5ce02c5cd7104be02c5ce02c5cd7104be02c5ce02c5ce02c5cd7104bd7104b -d7104bd7104bdd0046dd0046d7104bd7104bd7104be02c5cd7104be16e8fe02c5cd7104be02c5c -e02c5cd7104bd7104bd7104be02c5cd7104be02c5ce02c5cd7104bd7104bd7104bd7104bd7104b -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfde6a5b7fdfdfde6a5b7 -b01534e6a5b7fdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -e16e8fe16e8fe02c5ce02c5cd7104be16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e02c5ce16e8fd7104be02c5ce16e8fe16e8fe16e8fe02c5cd7104be16e8fe02c5ce02c5ce02c5c -e16e8fe16e8fe16e8fe02c5ce16e8fd7104be02c5ce16e8fe02c5ce16e8fe16e8fe16e8fe16e8f -e02c5cdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfde16e8fdfd9dafdfdfdfdfdfd -e6a5b7b01534e6a5b7fdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046d7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104b -d7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104b -d7104be02c5cd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfde6a5b7e02c5ce16e8fe02c5ce02c5c -e02c5cb01534e02c5cfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dae02c5ce02c5ce02c5ce16e8fe16e8f -e6a5b7e6a5b7e6a5b7fdfdfde16e8fdd0046e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104b -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5cd7104be02c5ce02c5ce02c5cdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dae6a5b7dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046d7104be02c5cd7104bd7104bd7104bd7104be02c5c -e02c5ce02c5cd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104be02c5ce02c5c -d7104bd7104bd7104bd7104be02c5cd7104be02c5cd7104bd7104be02c5ce02c5cd7104bd7104b -d7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104b -d7104be02c5ce02c5cd7104bd7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104bd7104b -e02c5cd7104bd7104bd7104be02c5ce02c5ce02c5cd7104bd7104bd7104be02c5ce02c5cd7104b -d7104be02c5cd7104bd7104bd7104bd7104bdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdb8b3c15754525754525754528d8b8e -5754525754528d8b8efdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfddfd9dab8b3c1b8b3c1dfd9dadfd9da -b8b3c1b8b3c1b8b3c1fdfdfde16e8fdd0046dd0046dd0046dd0046e02c5ce02c5ce02c5ce02c5c -d7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5c -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104bdd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046d7104be02c5ce02c5ce02c5c -d7104bd7104bd7104be02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -d7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5cd7104be02c5cd7104be02c5ce02c5c -e02c5cd7104be02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cd7104bd7104b -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cd7104bd7104bd7104be02c5c -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104bdd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/prof.gif b/Docs/Books/prof.gif deleted file mode 100644 index 8bb86295ab7eeaaae0caec73b9df651c5b80a278..0000000000000000000000000000000000000000 Binary files a/Docs/Books/prof.gif and /dev/null differ diff --git a/Docs/Books/prof.txt b/Docs/Books/prof.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/pthreads.eps b/Docs/Books/pthreads.eps deleted file mode 100644 index 183b792c6398cd3982a4a7db6fe8aaf0501cc139..0000000000000000000000000000000000000000 --- a/Docs/Books/pthreads.eps +++ /dev/null @@ -1,1212 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/pthreads.eps -%%CreationDate: Sun Dec 31 14:31:11 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 296 383 -%%EndComments -%%BeginPreview: 100 131 1 131 -% fffffffffffffffffffffffff0 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000008000000000000000010 -% 80000020000004028000000010 -% 80000044110004020000000010 -% 80000010511325224989251010 -% 80000083111249024099082010 -% 80000020000020200a00000010 -% 80000000000000000100002010 -% 80002000000000000000000010 -% 80004000000000000000000010 -% 80020800880000400808830010 -% 80002008000102100000048010 -% 80000009400100000008500010 -% 80020000000092406000008010 -% 80100008404000000008080010 -% 80002000080140400200022010 -% 80420008400000044849008010 -% 80004800000141410000140010 -% 80000000000000000000000010 -% 80020000000000000000000010 -% 80100000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000004000000000000000010 -% 80000004000000000000000010 -% 8000000d000000000000000010 -% 8000000c080000000000000010 -% 8000000d947000000000000010 -% 8000000f68a000000098000010 -% 8000000ca87800000000000010 -% 80000007208000000000000010 -% 80000004a1cc00000094800010 -% 80000001564200000000000010 -% 800000065a4200000000000010 -% 8000000b604400000005c00010 -% 8000000d904200000080000010 -% 8000000b784100000000000010 -% 8000000d466600000000000010 -% 8000000d846200000000000010 -% 8000141d223600000000000010 -% 8000fb9f932c000100a2ca0010 -% 80034e9ea13c00029002000010 -% 800ef79b2934000b3000000010 -% 8017570c919c0008e5baac0010 -% 802eed0c91980005c000000010 -% 8017ba4f8da8000a8000000010 -% 8015c4ad034c0012036d700010 -% 800f725f42e40027004a500010 -% 8007d4bb802c00280000000010 -% 80036836ac14004b8000000010 -% 8007dead180800910000000010 -% 8006ffdfba0e01480000000010 -% 8003dffd370405b00391000010 -% 80015dff7f0605e00028000010 -% 8002afdb360209600000000010 -% 80058fb7e90611b00000000010 -% 800abdff7401010802e4e80010 -% 800557eff40340b00000000010 -% 80010fbeac8281c00000000010 -% 8006abfb770182400164000010 -% 800d5fefd40286c00000000010 -% 8035ebfff50504f00000000010 -% 807f7d5dd3f94d800000000010 -% 8005d7a7bed60d000000000010 -% 800bbfffed7fdb000000000010 -% 801ef77f76b5fe4000d3a00010 -% 8035adebaf7f7e000000000010 -% 800b6f7f7eebda800000000010 -% 80005aefdbdf740402ab400010 -% 80005f7b7ef5b0000090000010 -% 8002d2def7bb80000000000010 -% 8000ab75beee20040000000010 -% 8002aa8437b4011002a8000010 -% 80055500d5ea01000000000010 -% 8000014012a804000000000010 -% 80000a9a04e000000000000010 -% 800024a0000000000000000010 -% 8000552a400000400000080010 -% 800092ec8000000001de580010 -% 8000553e040000000000000010 -% 8000a4b4420000000000000010 -% 8000aaa1040000000154a80010 -% 8000552c580000040000000010 -% 80001ca2a00000080000000010 -% 80001faac00000100179b00010 -% 80003bffc00000800000000010 -% 8000dfdb400013000000000010 -% 8002af76d00110000000000010 -% 800dfeedd56880000000000010 -% 80375bfb280000000000000010 -% 802af7dec41200000000000010 -% 8035feba7c4000000184000010 -% 802b5bf54900000003cfc00010 -% 800d6fa97000000003c9400010 -% 8003b77f8000000001cf400010 -% 80005ab9000000000008000010 -% 80000240000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% ffffffffffffd4924924924930 -% edb6db6ddddb41249249249250 -% dbedf6df7776d4492492492490 -% febf5fb2dddfa1224924924930 -% d5ebf579b77554881209249250 -% ff7eafd19d15c1202040092490 -% d5d5faffb77b504a9515524930 -% ff7f5faafdd6ca9040a0049250 -% d5d5f5ffab7fd125150aa92490 -% ff7f5f55ffd54448a251124930 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -281.300715 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 131 8 -% Transformation matrix -[ 100 0 0 131 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ffffffffffff -f7f7f7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffff -f7f7f7fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffff -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffefefeffffffffffffff7f7f7 -fffffffffff7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7fffffff7f7f7fffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffff -ffffffefeff7fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -efefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffff -fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffefeff7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ff -ffffffffffffefeefffffffffffffff7f7f7f7f7f7ffffffffffffffffffefefeffffffff7f7f7 -fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7fffffffffffffffffffffffff7f7fffff7ffffffffefeeffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d6d6dee7e6ef9991aaffffffffffffffffffffffffefefeff7f7effffffffffffff7f7f7ffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffefefeffffffff7f7f7fffffffffffffffffffffffffff7ffffffffa8a8b5a8a8b5fff7ff -f7effff7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefeeffdedef0 -979ca9d6d6eb796e82f7f7ffffffffffffffffffffd6d6d6dededed6d6d6f7f7f7e7e7e7f7f7f7 -d6d6d6fffffff7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -dedede81897cffffffffffffffffffffffffffffffd6d6def7f7f7fff7ff555682e7e6ef7e7b9c -fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffefefefcbcec5d6d6d6efefefffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c7b7c -cbcedbb7b3c4d6d6eb9c9fc0ffffffefefeff7f7ffd6d6ebd6d6eb67687ccbcedbffffffdedde7 -7c7b7cf7f7ffefeff7d6d6ded6d6ebefeff7efeff7d6d6ebe7e6eff7f7ffffffffdedef0efeff7 -d6d6de7c7b7cffffffdedde7efeeffe7e6efd6d6ded6d6ebf7f7ffffffff7e7b9cd6d6dea8aac6 -e7e3f7f7f7ffefeff7d6d6deefeff7ffffffe7e6efdedde7ffffffefeff7ffffffdedde7efeff7 -efeff7e7e6effff7ffffffffdedde7efeff7ffffffe7e6efffffffe7e6efdedde7fffffff7f7f7 -e7e6efffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7fffffffffffff7f7ef -fffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff7ffe7e7e7c8c5d5 -efeff7848e9bd6d6eba5a5a6cbcedb979ca9ffffff9c9fc0bac6d8848e9bcbcedbffffffefeff7 -7e7b9cf7f7ffffffffa8aac667687ccbcedbc4d3ed5556824c5299efeff7dedef05556829c9fc0 -c4d3ed7e86b0d6d6de52457ac4d3edb7b3c47e7b9cd6d6ebfffffff7f7ff796e827e86b0bac6d8 -7e7b9cefeeff9c9fc07e86b0c8c5d5d6d6eb55568252457adedef0d6d6ebbac6d85556829c9fc0 -a8aac67e7b9cffffffdedef07e7b9ccbcedbd6d6eb9c9fc0e7e3f7848e9b9991aaffffffbbc1c8 -9991aaffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffff7fffff7fffff7fffff7fffffff7f7f7fffffffffffff7f7ffffffffffffff7c7b7cdedef0 -bdbdbda8aac6efeff7efeff77e7b9c7e7b9cefeff79c9fc0a8aac67e7b9cbac6d8d6d6dea3c4da -67687cd6d6ebf7f7ffbac6d867687ccbcedbffffff7e86b0555682bac6d89c9fc0555682c4d3ed -b7b3c47e7b9cd6d6eb412f549c9fc0efeeffbac6d8cbcedbf7f7ffffffff67687cffffffdedde7 -67687cffffffbac6d8cbcedbbac6d8a3c4da9c9fc0557085dedef0d6d6eb7e86b0555682979ca9 -d6d6eb9c9fc0ffffffd6d6ebc4d3ede7e3f77e7b9c7e7b9ce1eeffbac6d8ffffffd6d6dea8a8b5 -c8c5d5fffffffffffff7f7ffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7fffff7ffffffffffffffffffffffffc6cecef7efff -979ca9ffffffdedef0dedde7979ca9979ca9bbc1c8ffffffa8b9bda8a8b5bac6d8bac6d8cbcedb -9c9fc0cbcedbe7e3f7d6d6deb7b3c4dedef0ffffffbac6d8a8aac6bac6d8a8aac6a8aac6d6d6eb -a8aac6bac6d8e7e3f7979ca9e7e6efd6e6ed9991aabac6d8f7f7ffffffffa8b9bdf7ffffefefef -a8aac6ffffffefeff79c9fc0c8c5d5b7b3c4c4d3eda8aac6efeff7b7b3c4bac6d8b7b3c4bac6d8 -efeff7cbcedbf7f7ffefeeffe7e6efeff7ffb5bdbda8a8b5deedeed6d6ebffffffdedde7848e9b -e7e6effffffffffffffff7ffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7ffe7e7e7e7dde7dedede -d6d6d6cddadadae0d6efefefe7e7e7fffffffffffffffffff7f7f7fffffff7f7ffffffffffffff -fffffff7f7fffffffffffffffffffffffffff7f7fffffffffffffff7fffff7f7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7fffffffff7f7fff7f7fffffffffffffffffffff7fffffffffffffffff7ffff -f7fffff7f7f7f7fffff7f7ffffffffb7b3c467687ce7e6efffffffffffffffffffffffffffffff -f7fffff7f7fffffffffffffff7fffffffffffffffffffffffffffff7ffffffffffe7e6efa8a8b5 -dedde7ffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffe7e6efe7e7e7efefefefefef -e7e7e7efefefe7e7e7f7f7f7dedede9a9291d6dedefffffff7f7f7ffffffffffffffffffffffff -f7f7ffffffffffffffffffffffffffe7f4f7f7f7f7f7f7f7f7fffffffffffffffff7f7f7ffffff -fffffff7fffffffffffffffff7fffff7fffffffffff7f7fff7f7ffffffffffffffffffffffffff -f7fffff7f7f7ffffffffffffffffffffffffe7f4f7fffffffffffffffff7ffffffffffffffffff -fffffff7fffffffffff7f7f7f7f7fff7ffffa8a8b5deedeeffffffffffffffffffffffffffffff -fffffffffffff7f7fff7ffffffffffefefeff7fff7ffffffe7f2edffffffffffffffffffd6d6de -d6d6defffffffff7ffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffefeff7e7e6efd6d6d6f7f7f7 -f7f7efbdbdbddededec6c6c6a5a5a6efefefaeadadd6d6d6ffffffefefefdedde7cececee7e7e7 -dededed6d6d6d6d6d6cecececececee7e7e7e7f2edcddadacddadacdd8ccd6d6d6f7fff7ddeade -dededec6ceced6d6d6deedeee7f2ede7f2edd6dedec6ceced6d6dededde7bbc1c8efefeff7f7f7 -ffffffe7f4f7cddadad6d6d6c6c6c6d6dededededecbcec5dae0d6fffffffffff7fffffff7fff7 -efefefd6dedecdd8cce7f4f7fffffff7f7f7ffffffffffffd6dedec6cecec6c6c6d6deded6d6d6 -c6ceced6dedefffffffffffffffffff7f7f7f7fff7cdd8ccc6c6c6cdd8ccb7bcadf7fff7f7f7ff -efeff7ffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff7b5b5b5efefef -f7f7f79b9c9cf7f7f7f7f7f7b5b5b5b5b5b5ffffff9b9c9cc6c6c6c6c6c6e7e7e7d6d6d6dedede -f7f7efdedededededecbcec5f7f7f7cececeb5b5b5d6dedeefefe7f7f7f7b5b5b5d6d6d6c6c6c6 -e7f2edf7fff7d6dedecececeddeadec7c6bcdededef7f7ffc6ceced6dedef7f7efe7f4f7aeadad -f7fff7bcc8bcc7c6bcf7f7efcddadab9bdb5cdd8ccf7fff7efefe7efefe7fffffffffffff7fff7 -dededeffffffbdbdbda5a5a6ffffffffffffffffffe7e7e7b5bdbdefefefdeedeeb5b5b5bbc1c8 -ffffffcececea5a5a6e7f2edf7fff7ffffffaeadadddeade9fa89c7c7b7cefefe7bdbdbde7e6ef -fffffff7f7fffffffff7f7ffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7fffffffff7f7ffbbc1c8ffffff -f7f7f7bdbdbdffffffffffffdededea5a5a6ffffffffffffc6c6c6bdbdbdefefe7d6dedecec6c6 -fffffff7f7ef898c8caeadaddae0d6bdbdbdb5b5b59fa89cc6c6c6ffffffbdbdbdefefefdedede -cdd8ccffffffcdd8ccefefefffffffcececed6dedeffffff9a92919b9c9cf7f7f7fffff7e7f2ed -e7f2edcdd8ccb5b5b5ffffffcbcec5b9bdb5efefe77c7b7cdae0d6ddeadef7f7f7fffffff7f7f7 -b5b5b5efefefe7f2edbcc8bce7e6effffffff7ffffffffffa8b9bdfffffff7f7f79a9291dedede -c6c6c6ffffffb5b5b5aeadadffffffa8b9bddedede7c7b7cb9bdb5c6c6c67c7b7ccdd8cce7e7e7 -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff7b5b5b5f7f7f7 -ffffffaeadadffffffffffffdededebdbdbdffffffffffffbdbdbde7e7e7cec6c6efefefd6dede -ffffffdae0d6898c8cffffffcdd8cca5a5a6d6dede898c8cbbc1c8ffffffdededef7f7ffefefef -c6ceceefefefc6cecefffffffffffff7f7f7efefefffffff848e9b9b9c9cefefefffffffefefef -f7f7f7dededeaeadadffffffcececec6c6c6ffffffd6d6d6f7f7f7cececef7fff7ffffffefefef -b5b5b5f7f7f7ffffffbdbdbdbdbdbdffffffffffffffffffbdbdbdefeff7f7fff7a8a8b5ffffff -d6d6debbc1c8ffffffa5a5a6c6c6c69b9c9cdededeffffff9a9291bbc1c8aeadadffffffefefef -fffffffff7ffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffd6cdd7bbc1c8efefefd6d6def7f7ff -ffffffaeadadffffffffffffdededec6c6c6ffffffffffffbdbdbdc7c6bcefefefffffffdae0d6 -ffffffefefe79b9c9cfffffff7f7f7efefefffffff81897cb5b5b5ffffffbbc1c8d6cdd7c6cece -efeff7f7f7f7c6c6c6ffffffffffffd6d6dee7e6efffffff898c8c7c7b7cf7f7f7dedede9a9291 -ffffffd6d6de9b9c9cffffffaeadad7c7b7ca8b9bddededeefefefe7e7e7fffffffffffff7f7f7 -7c7b7c898c8cffffffe7dde7d6d6defffffffff7ffffffffb5b5b5ffffffefeff7848e9bffffff -e7e6efd6cdd7fffffff7f7f7efeff7c6b9c6d6d6d6ffffffffffffdedede898c8cc6c6c6f7f7f7 -fffffff7f7f7ffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffe7e6efefe6f2efeff7b5b5b5efeff7 -f7f7f7b5b5b5f7f7f7ffffffc6cecebdbdbdffffffffffffc6c6c6e7e7e7fffffff7f7f7e7e7e7 -ffffffe7e7e7898c8cf7f7f7fffffff7f7f7ffffff9b9c9ccececeffffffefefefe7e6eff7f7f7 -fff7ffefefefbbc1c8f7f7ffffffffefeff7efefefffffffb5b5b5cececedededea5a5a6bbc1c8 -ffffffe7e7e7c6c6c6f7f7f7f7ffffe7e7e7e7dde7dededeefeff7fffffffffffff7f7f7c6b9c6 -ffffff898c8ca5a5a6ffffffbdbdbdcececeffffffffffffb5b5b5fff7fffff7f7b5b5b5ffffff -e7dde7dededeffffffffffffe7dde7ffffff979ca9dededee7e6efffffffffffffdededecbcec5 -fffffff7f7f7f7f7f7fffffffffff7ffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffefefefcbcedbf7f7ffc6cecefff7ff -ffffffaeadadffffffffffffd6d6d6aeadadffffffe7e7e7efefeff7f7f7ffffffffffffdedede -ffffffe7e7e79b9c9cfffffffffffff7f7ffffffff7c7b7cbdbdbdffffff979ca9e7e7e7dedde7 -bdbdbdffffffd6d6deffffffffffffe7e7e7e7e7e7ffffff898c8cbdbdbd81897cefefefffffff -e7e7e7efefefc6c6c6ffffffb5b5b5aeadadefefeff7f7ffd6d6d6cececeffffffe7e6efaeadad -e7e7e7fffffff7f7f7ffffffc6c6c6c6c6c6ffffffffffffbdbdbdffffffefeff7b5b5b5ffffff -e7e7e7bbc1c8ffffffdedde7dedde7e7e7e7e7e6efbbc1c8848e9befefefe7e7e7e7e7e79b9c9c -fffffffffff7fffff7fffffffffffffffff7ffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffc6cece898c8cd6d6ded6cdd7f7f7ff -f7f7f7616f61e7e6efdededeaeadadc6c6c6ffffffaeadadcececeffffffffffffffffffbbc1c8 -ffffffe7dde77c7b7cffffffefeff7ffffffffffff796e82bdbdbdffffffd6cdd7ffffffe7e7e7 -d6cdd7f7f7f7bbc1c8efefefffffffe7e7e7e7e7e7ffffff898c8ccececea5a5a6f7f7f7f7f7f7 -bdbdbdf7f7f7d6d6d6efefefbdbdbdaeadadf7f7f7aeadadf7f7f7aeadade7e7e7b5b5b5efefef -9fa89cdededea5a5a6a5a5a6ffffffb9bdb5cdd8ccffffffa5a5a6f7f7eff7f7f79b9c9cefefef -bdbdbda5a5a6ffffffa5a5a6c6c6c6c6c6c6f7f7f7bdbdbddededea5a5a69b9c9cefefef9fa89c -fffffffffffffffff7fffffffffffffffff7ffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffefeff7f7f7f7ffffffcececef7f7f7 -fff7ffa5a5a6d6d6d6c6c6c6a5a5a6f7f7f79b9c9cc6c6c6ffffffffffffffffffe7e6efe7e6ef -ffffffefefefa8a8b5f7f7f7f7f7f7fffffff7f7f7aeadadd6d6d6ffffffd6d6d6e7e7e7dedede -efefefffffffe7e7e7e7e7e7f7f7f7cececeefefe7ffffff9fa89ccdd8ccaeadadfffffff7f7f7 -cbcec5ffffffd6d6d69b9c9cbdbdbdaeadade7e7e7aeadadc7c6bcb5b5b5dededeaeadaddedede -d6d6d6ffffffc7c6bccdd8ccffffffcecececdd8ccdae0d6aeadadfffff7f7f7f77c7b7cc7c6bc -dae0d6dedede9fa89cc7c6bcffffffaeadadcec6c69b9c9cbdbdbdd6d6d6dededed6d6d6dedede -fffffffffff7fffffffffff7ffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffdedde7b5b5b5d6d6d6c6ceceffffff -fffff7dedde7efefefefefe7f7f7f7b5b5b5d6d6d6fffffffffffff7ffffffffffdeedeeffffff -deedeef7f7f7fffffff7fffff7fffffffffffff7ffffffffe7f4f7e7f2edf7ffffe7f2edf7fff7 -f7f7f7efefefe7f2edf7ffffefeff7efe6f2fff7fff7f7efffffffdededefffffff7f7eff7f7f7 -f7f7f7f7f7f7ffffffdedededededeffffffe7e7e7ffffffc7c6bce7e7e7f7f7f7efefeffffff7 -e7e7e7efefe7fffffffffff7efefe7f7f7eff7f7efdedededededeefefe7efefe7cdd8ccfff7f7 -fffff7d6d6d6c7c6bcfffffffffffffff7f7bdbdbdf7f7f7fff7fff7f7f7dededed6d6d6ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffc6c6c6dededed6d6d6f7f7f7 -f7f7f7a5a5a6efefefdededef7f7efffffffffffffffffffffffffffffffffffffffffffe7f4f7 -e7f2eddeedeee7f4f7f7fffff7fffff7ffffffffffefeff7efefefdeedeee5ffffe5fffffffff7 -efefefefefe7e7f4f7f7fffffffffffff7ffefeff7f7f7f7e7f2edfffff7efefeff7f7f7f7f7f7 -f7f7f7fffffffffffffffffff7f7f7e7e7e7efefefefefeffffffffffffff7f7f7f7f7f7f7f7f7 -fffff7fffffff7f7f7efefefefefe7efefeffffff7fffffff7f7efdededeefefe7fffff7efefef -dededef7f7efffffffffffffffffffffffffffffffefeff7e7e7e7efefeffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffe7e7e7bdbdbdf7f7f7 -ffffff9a9291e7f2edfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffe5ffffefffffffffff -fffff7fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7cececee7e7e7ffffff -ffffffaeadadcdd8ccf7f7f7f7f7fffffffffffffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffff7fffffffffffffffffffffffffffffffff7fffff7fff7ffffeffffff7fffffffff7 -fff7fffffff7fffffff7fffff7fffffff7ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffff -fffffffffffffffffffffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffdededebdbdbdd6d6d6c6c6c6 -b5b5b5c6c6c6d6d6d6f7fffff7fffffffffffffffffffffffffffffffffffffff7ffffefffffef -ffffeffffff7fffff7fffffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffff -fff7fffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7efefefefefef -efefeffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7ffffef -ffffeffffff7fffffffff7fffff7fffffffffffffffff7fffffffffffffffffffffffff7ffffff -fffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7f7f7f7f7fffffff7f7f7ffffff -fffffffffffff7f7f7fffffff7fffffffffff7fffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffffffff7fff7f7ffe1eeffeff7fffffffffffffffff7fffff7ffffffffffffffffffff -fffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff -f7fffff7ffffefffffe1eeffc4d3edbac6d8effffffffffffffffffffffffffffffffffffff7ff -fffffff7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffffffffeffffff7ffff -efffffefffffcee0ef285297a3c4daf7ffffeffffff7fffff7fffffff7f7fffff7ffffffffffff -f7ffffeffffff7ffffeffffff7fffff7fff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff7f7ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffffffffff7ffffefffffefffff -e5ffffe5ffffa3c4da4f6c9fa3c4dae7f4f7f7ffffe7f4f7f7ffeffffffffffffffffff7ffffff -effffff7fffff7f7f7efeff7fffff7f7f7efffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7fffff7fff7f7f7fffffff7f7ffffffffffffffffffffffffffffffffffffff -fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffffffffff7ffffefffffe5ffff -e5ffffc4d3ed1550782852976784bda8a8b5e7f4f7fffffffff7efded6ccdac7abfff7eff7fff7 -f7fffff7f7f7fffffffbefeffdefe7fef7e7fff7efffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffff7fff7f7fffff7fff7f7fffff7ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffff7fffff7fffff7ffff -f7ffffcee0ef1426574f6c9f8ba1c79991aac7c6bcded6cceee1c3e6c196b99f9bdac7abfbfbde -fffff7fffffffce6eed7ad9dd6aa8afdcfc4fff7efffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7f7f7f7fffffffffffffffffffffffffffffffffffffffffff7f7ff -fffffffff7fff7f7fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff7ffff -f7ffffd6dede1426572f537967687c9d716f9d716fa38457f6cdabc28268e6c196a2763ffbfbde -fef7e7ded6ccc38a81bf4d3ed66b42d6aa8affffeffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffff7ffe7dde7dedde7a8a8b5d6d6ebdedef0c8c5d5b7b3c4ffffff -f7f7fffffffff7f7f7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffff7fffff7ffffefffffeffffff7 -ffffffd6dede1e1f3a1e1f3a4d48538040497d3d30a16d56c18040c48756bf4d3ed2a46af2ebd6 -eee1c3a16d56a16d569e2e11bf4d3ee18855fdd0ceffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffff7ffffffffb5b5b5cbcedb67687cd6d6dee7e6ef67687c67687cffffff -f7f7fffffffff7f7f7f7f7effffffffffff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffff7ffffefffffefffffef -fffff7efefef7a68703f3235804049c28268e78673a0563f954713c18040954713f6cdabfdffe7 -fdffe7d7ad9dbf4d3eb62b10b62b10f13f3df3ac92fdefe7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffefefeff7efffe7dde7f7f7f7ffffffd6d6dec8c5d5ffffff -fffffff7f7ffefeff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffffff7ffffefffffef -fffff7ede8de9d716f9d716f804049bf4d3ed7ad9df3ac92c28268d7ad9deee1c3fdffe7f7f7ff -b7b3c4c38a81a13e30d66b42f3ac92c28268d6aa8afbfbdefff7effffffff7f7fff7ffffffffff -ffffeffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffff7fffff7fffffffffffffaeef7ffffffffffffffffffffffffffffffffffffffffffffffff -fff7fffffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffff7fffffffffffffffffffffffff7fffff7 -ffffeffdefe7ddcacb846a4ca16d56e88683a13e30e886839d716fc6ceceffffffcee0ef8ba1c7 -616cbf804049a00d08d6aa8afff7f7bab69da16d56f6cdabf2ebd6efefe7f7ffffefffffffffff -ffffefffffefffffeffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff7 -fffff7fffff7fffff7ffffffffffffb5b5b5e7dde79b9c9cefefefbbc1c87e7b9c9991aa7e7b9c -bac6d8bac6d8848e9b9991aae7e3f7a8a8b5c8c5d5f7f7ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffe7f4f7f7ffffffffff -efefeffffffffff7fff3d2dac38a81e88683e78673bf4d3ec6b9c6677e83677e836784bd1e4253 -9991aae78673a00d08c38a81ffffeffbefefd6aa8aa0563feee1c3fffffff7f7f7f7fffffffff7 -ffffefffffeffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffff7fffff7fffff7f7f7f7ffffffdedde7efe6f2e7e6eff7fffff7f7f7efeff7dedef0efeff7 -fff7fff7efffdedef0efeff7fff7ffefeff7f7f7fffffffff7f7ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7ffffffffff -f7fffffff7ffc8c5d5796e827a6870c38a81e886839d716f9d716f557085477285557085677e83 -fce6eee88683bf4d3ebea476ffecd0ffffffc38a81bc6a39f6cdabfdefe7fffffff7fffffffff7 -fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffffffffff7efffffffff -f7f7ffe7e3f7fffffff7f7fff7f7fff7efffffffffe7e3f7f7ffffffffffefeff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffff7fffff7fffff7ffffefffff -f7ffffdeedee6175a76175a72f537967687c7e7b9c9d716f5d324bddcacbffeefffff7f7efefe7 -fdefe7e88683812d0dbea476ffffeffef7e7d2a46ab55d18e28e67fdcfc4fff7ffffffffffffff -fffffffffff7fffff7fffffff7fffffffffffffffffffffffffffffffffffffffffffffff7ffff -ffffffffffffffffffefeff7f7f7ffdedef0dedef0f7f7f7c8c5d5efefefffffffefefef796e82 -979ca9848e9b67687c67687cbbc1c8efeeffefeff7efeff7c6c6c6f7f7fffffffff7f7ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffefffff -efffffcddada142657506fb66784bd4f6c9f2f53799991aac28268a0563fc38a81fce6eeffffef -ffffefe2c9b9661b0cbea476fbfbdefdffe7f6cdabd66b42e18855f2ebd6fce6eeffffffffffff -fffffffffff7fffffff7fffff7fffffffffffffffffffffffffffff7fffff7fffff7ffffffffff -ffffffffffffffffffffffffffffffbbc1c8efeff7a8a8b5e7e6efb5b5b5ffffffefeff7979ca9 -e7e7e7ffffffe7e6efa8a8b5dedde7ffffffa8a8b5e7e6effffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7f7fff7f7ffff -f7ffffcee0ef3f70b43f70b43f70b41b6ea38ba1c76175a77e5640b62b10a00d08f3ac92e2c9b9 -f2ebd6e2c9b9812d0ddea372fff6b6fdffe7eca872ef883abc6a39fdcfc4ffffffefeff7ffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffff7fffffffffffffffffffff7 -fffff7fffffff7fffff7f7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7e7e6effffffffffffff7f7fff7f7ffffffffe7e6effffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffff7fffff7fff7effff7effffff7ffffeffdffe7fdffe7fdffe7fffff7ffffff -f7ffffdeedee2852973f70b43f70b41b6ea33f70b46784bd9d716fc28268d66b42bf4d3ebf4d3e -ffffefdac7ab812d0dd66b42e6c196ffffffdea372b62b10b55d18fdd0cefff7ffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffff7f7fff7fffffffffff7ffffeffffff7 -ffffeffff7efffffffffffffeff7fff7f7fff7fffff7f7f7fffffffffffffffffffffff7e7f4f7 -fffffffffffff7f7f7fffffff7f7fffffffff7f7f7fffffffffffff7f7ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffefefeffffff7 -f7f7effffff7fef7e7ffffeffef7e7ffecd0f2ebd6ffecd0fbfbdeffecd0f2ebd6fffff7fff7ff -f7f7ff9c9fc01534701b6ea3616cbf3f70b41b6ea3e1eeffc38a81e2c9b9ffeeffbf4d3ed66b42 -d6aa8af2de95954713b62b10bf4d3efffff7c28268b62b10d66b42fdcfc4fff7ffefeff7ffffff -f7f7f7ffffffffffffefffffeffffffffffffff7f7ffffefffffeffef7e7ffffefded6ccfbfbde -fbfbdefef7e7fffff7fffff7fffffff7fffffffffff7f7f7fffffffffff7fffff7fffff7f7f7f7 -fffffff7f7f7fffff7f7f7f7f7f7fffffffff7f7f7e7f4f7fffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff7 -efefe7ffffeff2ebd6dac7abdac7abbea47683814ea18b74bea476a38457d6aa8ae2c9b9fce6ee -efe6f21426571a378a2852973f70b47b8dc86784bdeff7ff9d716fe88683fdd0cee2c9b9a13e30 -ef883afff6b6e18855bc1111f13f3dc28268d66b429e2e11e28e67f2ebd6fff7ffefeff7ffffff -f7f7f7fffff7fffffffffffff7fffffffffffffff7fffff7fbfbdefdffe7dac7abbea476ffecd0 -fbfbdefef7e7f2ebd6f7f7eff7fff7f7ffffbcc8bce7f2edfff7efffffffffffffefefe7fffff7 -ffffffffffffffffffffffffffffffefeff7fffffffffffff7f7f7efefeff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7f7fff7effffff7fef7e7 -fdffe7c7c6bcbea476846a4c81753383814e626e1f626e1f81753383814ea2763fa16d56fff7ef -a8a8b50000211a378a2852971a378a2852974c5299b99f9bc38a81e88683d7ad9df3d2dab55d18 -bc6a39e6c196e6c196a00d08f13f3ddd250fb62b109e2e11dac7abfff7f7fff7ffffffffefeff7 -fffffffffff7fffffffffffff7fffff7fffff7f7f7fff7eff2ebd6dac7abd6aa8aa38457ffffef -eee1c3f2ebd6ffffffefefe7fffff7d6dedecdd8cc616f61ded6cc9a9291aeadadcdd8ccaeadad -4d48539b9c9c898c8c272522b5b5b5ffffff898c8cb5b5b54d4853bcc8bcf7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffefffffefdac7ab -bab69d83814e83814e817533626e1f817533817533626e1f42500d605622605622846a4cb99f9b -a8a8b51426571426571a378a1a378a5058b05058b0c38a81c28268c28268d6aa8af2ebd6e6c196 -954713bea476f3ac92a00d08d30f15dc0c02b70d05c48756f2ebd6fff7fffff7fff7f7fff7f7ff -fffffffffff7fffffffffffff7fffff7fffffffffffef7e7fbfbdebea476d2a46ac28268c28268 -fffff7bab69da18b74fffffff7f7f7deedeeffffffaeadadefefe7c7c6bccdd8ccefefefcdd8cc -a5a5a6cececeb5b5b5898c8cdededeffffffc6c6c6cececeaeadadefefeffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7effffff7dac7ab83814e -5c553b5c553b626e1f626e1f42500d626e1f55884455884442500d27381342500d5c553be2c9b9 -d6d6eb142657153470285297616cbf1a378ac4d3edb99f9ba0563fe88683d6aa8afdd0cefdd0ce -812d0de28e67ffecd0c38a81cc0004dd250fb70d05d7ad9dfffffffaeef7fffffff7f7ffffffff -fffff7fff7effff7effffffffffffffffffffffffffffff7a38457dea372c28268a13e30a13e30 -c38a817d3d30846a4cfffffffffff7f7f7fff7fffffffffffbefefffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffff7ffffefc7c6bc846a4c7e5640 -42500d5c3f1b42500d626e1f626e1f43711e626e1f55884443711e42500d273813bab69defefe7 -ffffff8ba1c71426573f70b4a6c8eb506fb6142657c7c6bcb99f9b9d716fe78673fdcfc4f3d2da -a13e30b62b10f3ac92c38a81860002dd250f9e2e11e6c196ffffffffeefff7f7fff7fffff7f7ff -fffff7ffffefffffeffffffff7fffff7f7f7ffffffc7c6bca16d56f3ac92e28e67c180407e1006 -812d0d661b0c9d716fffffff7c7b7cbdbdbd616f61101715efe6f23f32353f3235545656bbc1c8 -272522979ca95456569b9c9c7c7b7c979ca99a9291101715e7e7e7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffffffffffffffffffffffffffffffff7effffff7a18b74846a4c605622 -5c553b413d1242500d817533626e1f626e1f43711e1c4e0e42500d43711e413d12eee1c3fbfbde -fff7f7e7e6ef1426571426578ba1c7a3c4da000021aeadadffffff9d716fa16d56fdd0cefdcfc4 -a00d08b62b10e18855f6cdabb62b10b62b10bf4d3ee2c9b9fffff7fffffff7ffffeff7ffffffff -fff7f7fff7effffffffffffff7ffffffffffffffffd7ad9ddea372a0563fd66b42a13e30812d0d -a13e309d716ffff7fffff7ffe7e6efdeedeeefeff7e7e7e7efefefe7e6efe7e7e7efefefffffff -e7e6efefeff7efefefefeff7efeff7f7f7f7f7f7f7dededefffff7f7f7efffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffff7fffffffffffffffffffffffff7efffffefa18b747e564083814e -42500d27381342500d413d12626e1f626e1f626e1f626e1f8c611b817533b6a042b6a042bea476 -bea476bab69d796e821e1f3a616cbf555682555682d6e6edfffffffff7ffa16d569e2e11f6cdab -9e2e11b62b10d35113f3ac92dea372a00d08bc6a39ddcacbfffffff7ffeff7fff7f7fff7ffffff -ffffffffffffffffffefffffeffffff7fff7fdffe7bea476e28e67e78673e88683a0563f804049 -9d716ffff7fffff7fffff7f7ffffffefeff7f7f7f7f7fffff7fff7f7f7f7ffffffefefefffffff -fffffff7f7f7ffffffefefefe7e7e7f7f7ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffffff7fffff7fffffffffffffffffff7efffffefbea47681753383814e -1c4e0e43711e103a155c553b5c553b817533a38457b6a042b6a042d2a46ad2a46ac48756ebc07c -a38457a3845710171552457a9991aa412f54c4d3ede1eefff7f7f7fff7fff2ebd6a0563f9e2e11 -b62b10b62b10d35113e28e67d6aa8a9e2e117d3d30ddcacbffffffeff8eeffffeffffff7ffffff -fff7fffffffff7ffffe5fffff7fffff2ebd6e6c196c18040da8539eca8729e2e11a16d56d7ad9d -fff7f7fff7fffff7ffffffff979ca97c7b7c101715c6c6c6616f613154499a9291000000272522 -898c8c616f61ffffff4d48535456564d463cbbc1c8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffff7fffffffffffffffffff7f7ffffefffffefffffef7da572 -1c4e0e103a1543711e31653542500d626e1f817533b6a042d2a46ac48756d2a46adea372a2763f -8175337e564027252252457a1e42532f53799991aa9a9291e2c9b9fce6eefffffffffff7a16d56 -c28268a13e30a13e30a13e30b99f9ba8a8b51e1f3ad6cdd7fffffff7ffeff7ffeffffff7fffff7 -fffffffffffff7ffffe7f2edffffefbea476a2763ffcdf6ae18855da8539a0563f8c611bfffff7 -fff7effffffffffffffffffffff7ffffffff7c7b7ce7e7e7545656898c8cc6c6c6a5a5a6616f61 -aeadad898c8ccecece3f32359b9c9c616f61d6cdd7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7efefe7fdffe7f2ebd6 -2b67201c4e0e1c4e0e2b67202b672043711e626e1fb6a042d2a46ae28e67eca872c48756c48756 -817533413d123f32355570850000212445383f3235a18b74b99f9bf2ebd6e2c9b9ddcacbd7ad9d -fbefeff2ebd6846a4c7a6870c6b9c67e86b0142657b5bdbdfffffffffffff7fff7ffffeffffff7 -fffffffffffffff7effdffe7fff6b6ebc07cc18040ffbc38bc6a39b55d18bc6a39c48756eee1c3 -ffffeffffff7fff7f7f7f7f7fff7f7efefeffffffffffffffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fff7eff8eeddeade -558844103a151963201963202b672042500d626e1f817533bc6a39eca872f3ac92eca872f3ac92 -a16d56492717616f6167687c67687c846a4c7e5640a16d56bab69ddac7ab605622817533d7ad9d -fbfbdefff7efffffffc6b9c64c5299477285477285a6c8ebeff7fffffffffffffffffff7f7f7ef -fffff7fffff7ffffeffbfbded2a46ab6a042ffbc38da8539b55d18a2763feca872a38457846a4c -fffff7fdffe7f7f7eff7f7eff7f7f7efeff7fff7f7fff7fffff7ffefe6f2fffffffffffff7f7f7 -f7f7f7fffffff7f7f7efefeffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffff7ffffffffffe7f2edddeade -7da5721c4e0e103a151c4e0e2b672043711e42500d5c3f1b812d0dd66b42c28268e78673e18855 -c282685c3f1b0000004d48537a6870a16d56e6c196bea47698ae892b672042500d817533e6c196 -fbfbdedeedeedeedeee1eeff8ba1c72852976784bda3c4dacee0effff7fffff7f7fffff7f7fff7 -fffff7ede8dedac7abbea476c18040ef883ae7a330b55d18b55d18ebc07cbea4765c3f1bdac7ab -fdffe7ffffeffffffffff7f7fff7f7fff7f7fffffffff7f7fff7fffffffff7f7f7fffffff7f7f7 -fffffffffffff7f7f7f7f7f7ffffffefefeff7f7f7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7ffffeff7fff7ffffeff8eef7ffef -566f421d4f261c4e0e2b67201c4e0e42500d413d12661b0c661b0c7e10067e10067e1006bf4d3e -bc6a397d3d305c2e355d324b661b0ca13e307e1006fdd0ce83814e27381343711e83814e7da572 -7da572deedeed6e6edefffffcee0ef3f70b42f5379153470bac6d8fffffffffffffffffff7fff7 -f7f7efded6ccd6aa8aa0563fda8539da8539de9d2ede9d2eb6a042f2de95fff6b6dac7abffffef -fef7e7fffff7fffff7fffff7ffffffc7c6bcb99f9befeff7fffffffff7ffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffe7f4f7f7f7fffffffffdffe7 -cbcec560562242500d413d12413d12413d12492717661b0c7e10067e10067e10067e10067e1006 -7e1006661b0c7e10065c2e359e2e11860002a0563fd7ad9d5c553b3f3235316535315449336b4d -103a15e5ffffe5ffffeffffff7ffff9c9fc02852974f6c9fd6e6edffffffffffffffffffffffff -dedede81897cd7ad9d954713954713d35113b55d18bc6a39fdf5abfdffe7fbfbdefffffffffff7 -fffff7ffffffffffffefefefffffff7c7b7c5d324b7c7b7cd6cdd7bdbdbd898c8c9b9c9cefefef -cecece81897caeadadb5b5b5fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7fffff7fffff7fffffffffffffff7fff7f7fffffffffff7effbfbde -fbfbdea384577e564083814e846a4ca38457a2763f812d0d7e10067e1006860002860002860002 -a00d08a00d08a00d087e1006a13e30860002c38a81a384572d00001e1f3a1e1f3a142657142657 -52457affeeffefeff7fffffff7ffeffff7f77e86b02f5379c4d3edf7ffffe7f4f7f7ffffffffff -dedede5c553bc38a81812d0d9e2e11812d0d812d0dc18040eee1c3ffffeffffff7ffffffffffff -fffffffffffffffffffff7f7ffffffddcacbddcacba18b74ddcacb7a68709b9c9c9a9291deedee -b5b5b5c6b9c6cececed6d6d6fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7fffff7fffff7fffff7fffffff7f7fffff7fffff7f7fff7effdffe7 -d6aa8ac18040c18040a16d56c48756c48756eca872a13e30661b0ca00d087e1006860002a00d08 -a00d08a00d08a00d08a60003a00d087e1006d6aa8ab99f9b7e56405d324b52457a52457a52457a -e7dde7b99f9bb99f9beff8eeeff8eeffffffa6c8eb1550788ba1c7efffffe7f4f7ffffffefefef -796e82ffeeffd6aa8a812d0db55d18954713812d0dc28268fdcfc4fffffffff7fffff7ffffffff -f7f7fffffffffffffffffffffbefeffff7effffffffff7ffffffffe7e7e7fffffff7f7f7ffffff -f7f7f7fffffffffffffffffffffffffffffff7f7f7fffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7ffffefffffeffffff7fffff7fffffffffffffce6eefbefefdac7ab -c282688c611bb55d18812d0d8c611be18855e28e67a13e30a00d08661b0c860002a00d08b70d05 -b70d05b70d05dd250fd30f159e2e11661b0c5c553b5c553b5c2e359d716fa18b749d716fd7ad9d -9d716ffdd0ced7ad9dfffff7efefe7ffffff7e86b01534706784bddeedeee5ffffe5ffff848e9b -e7dde7ffffffbab69d661b0cb55d18954713812d0d804049a18b74fff7fff7f7fff7fffff7ffff -f7f7fffffffffffffffff7f7fff7effffff7fdefe7ffffffdededefff7f7ffffffffffffffffff -e7e7e7f7f7f7f7f7f7fffffff7f7f7fffffffffffffffffffffffff7f7f7f7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7ffffeffffff7fffffff7f7fffff7ffffffffffffff846a4c -a0563fc18040da8539b55d18da8539b55d189547139e2e117e1006a00d08860002a00d08a60003 -a60003b70d05bc1111bc11117e1006413d125c3f1b4927177d3d305c2e35817533626e1fe6c196 -eee1c3fbfbdefce6eeede8def2ebd6f7ffff8ba1c77b8dc8155078a3c4dae5ffffa8b9bdd6d6de -fffffffff7ffd6aa8a661b0cc18040f2de95eee1c3a16d567a6870e7e6effffffff7f7ffffffff -f7fffffffffffffffffff7f7ffffff5456567c7b7c7a68703f32353f3235e7f4f7aeadad3f3235 -d6d6d6bdbdbd1017152725224d463cf7f7f73f3235c6cecef7f7f7ffffffffffffefefefffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7fffff7fffff7fffffffffffff7f7fffff7ffffffffa38457 -a38457bc6a39b55d188c611bb55d18e7a330b55d18954713a00d087e1006860002a00d08b70d05 -b70d05b70d05bc1111a600037e1006413d1242500d413d12492717413d12817533a38457bea476 -e6c196eee1c3fef7e7fff7f7f7fff7e5ffffe5ffff506fb62d707fcee0ef677e83e5fffff7ffff -fff7ffffeefffdffe7d2a46a605622ebc07ca2763f846a4c9a9291fff7effffffff7fffff7ffff -fffffffffffffffff7fffff7ffffeff2ebd6fffff7fffffffffffffffffffffffff7f7f7ffffff -fffffff7f7f7f7f7f7f7f7f7f7f7f7fffffff7f7f7fffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7fffffffffffffffffffffffff7f7fffff7fffef7e7 -eee1c3ebc07cb55d18de9d2ede9d2ef5bb36ef883ad66b427e1006860002a00d08a00d08a60003 -b70d05bc1111b70d05a00d08661b0c60562260562242500d43711e43711e83814e42500dbea476 -eee1c383814edae0d6fff7efffffffe1eefff7ffff6175a72d707f6784bdcee0efe5ffffe1eeff -ffeeffe7dde7ffecd0b6a0428c611b8c611b7e5640fdd0ceffecd0f7f7effffff7fffff7ffffff -f7fff7fffff7fffff7ffffeffff7efffffffded6ccefefefd6deded6dedee7e7e7efefefdedede -efefefffffffffffffffffffffffffefefefffffffefefeffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7f7ffffffffded6cc -a0563f8c611bc18040b6a042b6a042de9d2ede9d2ed66b42b62b10860002860002a00d08a60003 -a60003b70d05a00d08a00d08661b0c5c3f1b81753343711e1d4f2643711e558844605622846a4c -846a4cbab69dffffeffffff7f7f7ffefeeffffffff6784bd4f6c9f2d707fd6e6eddeedeeffffff -fff7ffcec6c6492717817533b6a0425c3f1bbab69dfffffffffff7ffffeffffff7fffff7ffffff -f7fff7f7f7efffffffffffefefefe7ffffff545656cecece848e9b67687c81897cdedede616f61 -c6c6c6fffffff7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7f7fffff7fffff7ffffffffffefe6f2d6d6de7a6870 -7e56407e56407e56408c611b8c611b817533a13e30a13e309e2e117e1006860002860002a00d08 -a00d08a00d08a00d08a00d087e1006492717626e1f626e1f83814e558844817533626e1f817533 -a38457bea476fffff7fff7f7fffffff7ffffcee0ef4f6c9f6784bd477285ddeadedeedeeffffff -ffffff9a92917e5640d6aa8aa0563f8c611bc38a81ddcacbfce6eef7fffffffffffffffff7fff7 -fffffffffffffffffffffff7fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff7f7f7fffffff7f7f7fffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffff7fffff7fffff7fffff7ffffdedde77e7b9c5456567a6870 -5d324b7a68707e56409d716f5c553b7e5640a0563fa13e30a13e30a13e30a00d087e1006860002 -8600028600027e10067e1006661b0c413d122738132738131c4e0e1c4e0e7da5727da57283814e -b7bcada18b74ded6ccdededecee0efc4d3ed8ba1c76784bd677e83a3c4dabac6d8fffffffbefef -b99f9b5c3f1bb99f9bb99f9b5d324b8040494927175c2e35cececef7fffff7ffffffffffffffff -ffffffffffffffffffffffffffffffefeff7f7f7f7fffffff7f7fff7f7fff7f7f7fffffff7f7f7 -f7f7f7fffffff7f7f7f7f7f7f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7f7ffffefffffffffff677e831e1f3a412f54142657 -52457a3f32355456565456563f32355c2e357e5640804049804049a13e30a0563fbf4d3ea13e30 -a13e30a0563f812d0d661b0c7d3d30413d12273813103a151c4e0e2b6720a5c2a77da572616f61 -616f61545656545656557085477285677e83a6c8eba3c4da6784bde5ffff677e83f7f7ffefefef -5c3f1b7e5640846a4c5d324b7e7b9cb99f9ba5a5a69fa89cdae0d6e7f4f7f7ffffffffffffffff -fffffffffffffffff7fff7f7fffffffffffff7f7f7fffffff7ffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7fffff7fffffff7fffff7ffffbac6d8a8aac6bac6d8bbc1c8 -5556825556822f5379412f544d48534d48534d48535c2e355c2e355d324b5c2e35804049a16d56 -a16d56a16d56846a4c5c3f1b413d12273813273813316535336b4d316535336b4d1d4f26566f42 -2445383154493154491659532d707f2d707f2d707f2d707f477285a8b9bdcbcedbffffff9991aa -5d324b7e5640846a4c796e82a5a5a6fff7ffffffffddeadee7f4f7f7ffffffffffffffffffffff -fffffffffffffffffff7f7f7f7f7f7fffffffffffffffffff7f7f7e7f4f7fff7fff7fff7ffffff -f7f7f7efefeff7f7f7fffffff7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7fffffffffffff7ffffffffffffffff8ba1c77e86b0 -4f6c9f2852971534702f537952457a412f5452457a412f54412f545d324b3f32353f32355c2e35 -3f32351017154d463c3f3235413d12103a15103a151d4f261d4f26336b4d244538315449315449 -677e83616f611e4253336b4d165f35165953165953165953165953315449616f61898c8c3f3235 -1e1f3a616f612725227c7b7cffffffddeadee7f4f7a3c4dadeedeeffffffffffffffffffffffff -fffffffffffffffffffffff7ffffffd6d6d6dededef7ffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7fffffff7f7f7fffffffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7ffffffffffffffffffffffff8ba1c74f6c9f285297 -5058b05058b04c52994c52994c529915347052457a52457a52457a1e1f3a1e1f3a52457a4d4853 -1e1f3a2445383154492445382445382738131d4f261d4f26273813616f61677e83316535272522 -9fa89c81897c616f61336b4d0a4438165f35165f35336b4d2445381d4f261d4f26103a15101715 -315449272522272522a8b9bda8b9bd90aaaaffffffa6c8ebe7f4f7fffffff7fffff7ffffffffff -ffffffffffffffffffffffffffffffbdbdbdefefef7c7b7c272522898c8c898c8cefeff7898c8c -616f61616f614d4853dedede7c7b7ca5a5a6ffffffa5a5a6f7f7f7ffffffefefefffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffff7fffffff7f7ffffffff7e7b9c52457a6784bd -4c52993f70b4506fb6285297616cbf4c52995058b052457a1a378a52457a52457a1426572f5379 -1e42531e42531659531550781d4f261d4f2642500d558844316535316535616f612725224d463c -315449566f423165353165351d4f26196320103a15315449244538315449316535101715103a15 -0a4438244538103a15677e83d6e6edd6dedef7ffffeff7ffeffffff7fffff7fffff7ffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7dededebbc1c8d6dededededeffffffdedede -d6d6d6cececec6c6c6f7f7f7d6d6d6e7e7e7ffffffdededefffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffffffffffffffffffffffffffffffff7fffff7fffff7fffffff7f7ffb7b3c46175a7 -5556826175a74c52994c52994c52995058b0616cbf4c52992f53794c52992852972f53792f5379 -1534701550781550782d707f165953103a153165357da572315449316535315449244538273813 -4d463c2445382445381d4f262b67201963203165351d4f26336b4d244538316535165f35103a15 -3165351c4e0e677e83a3c4da848e9bd6e6edeffffff7ffffeff7fff7ffffeff7ffffffffffffff -fffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffff7fffffffffffffffffffffffffffffffff7fffff7fffff7fffffffffffff7f7ff -f7f7fff7f7ffcee0efa6c8eb7b8dc8506fb62f53792852974c52995058b0285297285297153470 -1550781550781550781534700a44380a44381d4f26336b4d244538244538244538244538315449 -566f422445383165353165353165351c4e0e2b67202b67201d4f26165f351d4f261d4f26336b4d -316535558844e7f2ed90aaaacee0efeffffff7ffffe7f4f7cddada979ca9deedeeffffffe7f4f7 -fffffffffffffff7f7ffffffcbcec59a92917c7b7c2725229b9c9c7c7b7c7c7b7c244538fff7f7 -4d48537c7b7cffffff616f61898c8cffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffff7fffffffffffffffffffffffffffffffff7ffffeffff7effffff7ffffffffffff -fff7ffdedef0efeeffa3c4da5058b06175a74c52995058b05058b04c52994c52994f6c9f285297 -2852971550781550781550781659530a44382d707f336b4d0a44382d707f0a4438244538336b4d -336b4d3154491d4f26336b4d196320316535196320316535196320336b4d558844316535244538 -f7ffffddeadef7fff7fffffff7fffff7fff7efffffefffffdeedeed6dededeedeef7f7ffffffff -f7f7f7fffffffffffffffffff7f7efffffffcecece9a9291e7f4f7b5b5b59b9c9cfff7ffaeadad -9b9c9ccdd8ccffffffc6c6c6c6c6c6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffff7fffff7fff7effffff7fff7ff -efe6f27e86b07e86b04f6c9f4f6c9f7b8dc87b8dc86175a74f6c9f5058b04f6c9f506fb64c5299 -2f53791550782f53792f53791659531659530a44381659530a44380a4438336b4d0a44380a4438 -165953165f35165f35165f35165f35336b4d558844165f351d4f2631653555884498ae899b9c9c -fffffff7f7efefefefe7f4f7e7f2edf7fff7eff8f7f7ffffffffff979ca9f7f7ffeff7fff7f7ff -ffffffffffffffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffff7f7ffffeffffff7fffff7ffffff -ffffffe7e3f7d6d6eb6175a78ba1c74f6c9f4f6c9f6784bd7b8dc84f6c9f4c52996175a74f6c9f -2f5379555682477285477285557085677e83477285477285315449165953336b4d0a4438165f35 -165f35165f35165f35165f35316535336b4d5588442b6720336b4dbcc8bca5c2a7a5c2a7ffffff -f7f7fff7f7efffffffffffffffffffeff8f7d6e6edbbc1c8e1eeffa8b9bdf7f7fff7ffffffffff -ffffffffffffffffffffffffdededecbcec5c7c6bca5a5a6dae0d6b5bdbdd6d6d6b5b5b5d6d6d6 -cececef7f7f7dedededededeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffeffffff7fffffffffffffffffffffffffffffffffffffffff7f7ffeff7fff7f7ffff -cee0ef7e86b06175a76175a76784bd4f6c9f6784bd6784bd6784bd6784bd4f6c9f6175a77e86b0 -8ba1c7979ca9979ca9848e9b90aaaaa8b9bd90aaaac6cece616f61244538244538165f35165f35 -165f3519632019632031653555884455884455884481897ceff8eedae0d6dae0d6f7fff7f7ffff -efffffffffffd6e6ed7e86b0cbcedbffffffbbc1c8898c8cdeedeef7fffff7fffff7fffff7f7f7 -ffffffffffffffffffffffffaeadadaeadad898c8c272522d6dede7c7b7cb5b5b54d4853cecece -d6d6d6ffffffcecececececeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffefffffeffffffffffffffffffffffffffffffff7fffff7fffff7fffff7ffffe1eeff -848e9b7e7b9c7b8dc87b8dc86175a77b8dc88ba1c76175a76175a77e86b05570857e86b0bac6d8 -f7ffffffffffffffffffffffdededeb5b5b57c7b7c7c7b7c898c8c616f617da572558844196320 -1963202b67202b67202b67202b672043711e7da57283814ec6c6c6fffffff7ffefeff8f7efffff -d6e6edbac6d8cee0ef677e83b5bdbdffffffffffffffffffffffffd6e6edf7ffffffffffefeff7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffffffffffffffffffffffffffff7fffff7fffff7fffff7fffff7ffff -bac6d8bac6d8cee0efcee0efcee0efe1eeffcbcedbbdbdbdcececea5a5a6a18b749d716f9a9291 -dac7abdac7abe6c196e6c196e6c196ffecd0f2ebd6dac7abded6cc616f61ddeade7da5727da572 -558844336b4d2b67205588445588447da572a5c2a7cbcec5dededefff7ffffffffefffffffffff -cddada557085fffffffffffffffffff7fffff7fffffffffff7f7fffffffff7f7ffffffffffffff -fffff7fffffffffff7fffff7fffff7fffff7fffffff7f7f7fffffff7f7f7f7fffff7f7f7ffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeffffff7fff7ffffffe2c9b9d6aa8af6cdabdea372c48756c48756dea372 -e28e67c18040da8539da8539c48756f2de95f6cdabeee1c3e2c9b9c7c6bcb9bdb581897cdeedee -a5c2a755884431653531653598ae89cdd8cceff8eeffffffffffffffffffffffffffffffffffff -f7ffffa8a8b5a8a8b5fffffff7fffff7fffffffffff7fffffffffffffffff7f7f7fffffffffff7 -fff7f7fffff7fffff7fffff7fffffff7f7eff7f7f7fffffffffffffffffff7f7f7ffffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7f7f7f7fffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffffffffff7f7fff7eff2ebd6c28268c48756e18855954713d66b42e28e67c48756e28e67 -d2a46aebc07cebc07ceca872eca872ebc07cf6cdabdac7abeee1c3fbefefb7bcaddae0d6f7ffef -ddeadea5c2a7bcc8bca5c2a7bcc8bcdeedeeeff8f7fffff7ffffffffffffffffffffffffffffff -ffffffe7e6efc6cecec6cecea8b9bdfffffff7fffff7fffff7fffffffffffffff7ffffffffffff -fffff7fffffffff7effff7f7ffffffffffffffffffefefefd6dedeffffffffffffffffffffffff -fffffff7f7f7f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffff7f7f6cdabc38a81c18040d66b42d66b42da8539e18855e18855e28e67c48756 -a2763fa0563fa2763fd2a46adea372e6c196e6c196d6aa8affecd0ddcacbfff7efcbcec5ede8de -b7bcadeff8eeddeadeffffffcddadaddeadeefffffffffffffffffffffffffffffffffffffffff -fffffff7ffffffffffdeedeed6e6eda8b9bdcbcedbffffffeff7fffffffff7fffff7f7f7ffffff -fffffffffffffffffff7f7effffff7dededec6c6c6cddadaffffffe7f4f7d6d6d6aeadadcecece -f7f7f7fffffff7f7f7f7f7f7b5b5b5c6c6c6a5a5a6efefefffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7ded6ccc28268c18040e18855da8539d66b42ef883ada8539da8539bc6a39954713 -9547138c611ba0563f812d0d8c611beca872d6aa8af6cdabe2c9b9f2ebd6fffff7c7c6bceff8ee -ddeadeefefe7f7ffeff7fff7e7f4f7e7f2edffffffffffffffffffffffffffffffffffffffffff -fffffff7fffff7ffffffffffffffffdeedeeffffff979ca9d6dedeffffffffffffffffffffffff -fffffffffffffffffffffff7ffffff9fa89c7c7b7c5456564d4853e7f4f79b9c9c616f61272522 -616f61aeadadbdbdbda5a5a6bdbdbd3f3235616f61e7e7e7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7f7efe2c9b9c28268e28e67bc6a39da8539ef883ada8539d66b42b55d18b55d18bc6a39 -a0563fa13e30954713661b0c954713dea372e6c196f3ac92f6cdabeee1c3c7c6bcb7bcadb7bcad -eff8eef7ffefefefe7fffffffffffffff7fffff7fffffffffffffffffffffffff7fffffffffff7 -fffffffffffffffffff7fffff7ffffeff7fff7ffffd6e6edcee0efd6d6ebf7ffffffffffffffff -ffffffffffffffffffffffffffffffe7e7e7efefefcddadad6dedefffffffffffff7f7f7e7e7e7 -e7e7e7f7f7f7ffffffefefefffffffd6dedeefeff7ffffffffffffffffffefefefffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7 -fffffffffff7ded6ccbc6a39e28e67da8539d66b42da8539da8539ef883ada8539da8539c48756 -b55d18661b0c812d0da0563fbc6a39dea372ebc07cf3ac92f6cdabf6cdabffecd0ffecd0a18b74 -ffffeffff7effffff7fff7fff7f7f7fffffffffffffffffffffffffffff7fffff7fffff7fffff7 -ffffeff7ffeff7fffff7ffffffffffeff7ffefffffffffffe1eeffbac6d8e1eefffffffff7ffff -fffffffffffffffffffffffffffffff7fff7d6dedefffffff7ffffe7f2eddeedeefffffff7f7f7 -ffffffffffffdededef7f7f7efefeff7f7f7f7f7f7f7f7f7f7f7f7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7fffff7 -fffff7ffffffeee1c37d3d30bc6a39c48756e28e67e18855bc6a39c18040da8539bc6a39c18040 -c48756c18040c48756d2a46adea372c48756d2a46aebc07cd6aa8ae6c196f6cdaba18b74d7ad9d -fbefeffffff7fffffffffffff7f7fff7f7fffffffffffffffffffffffffffffff7fffff7ffffef -fffff7f7fff7fffffff7ffffe1eefff7fffff7ffffefffffffffffbbc1c8efeefff7ffffeff7ff -fffffffffffffffffff7f7f7ffffff9fa89c000000cddada898c8c9b9c9c9b9c9ccecece4d4853 -dededeffffff7c7b7c9b9c9c9a9291c6cece545656d6d6d6fffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7fff7f7f7f7ffffffded6cca0563f846a4ca16d56a38457c48756c48756c18040a2763fd2a46a -c18040c48756c48756c48756d6aa8aebc07ce6c196bea476d6aa8abea4767e5640a38457fff7ef -fff7effff7f7fffffffffffffffffffffffffffffffffffffff7fffffff7fffff7fffff7ffffef -f7ffefe7f2edf7fff7efffffefffffefffffe1eeffffffffd6dede67687ce7f4f7ffffffe7f4f7 -fffffffffffffffffff7fff7f7fff7fffffffffffff7fff7ffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7 -fffffffffffffffff7efefe7ffffffbab69d4927175c3f1b5c553bbea476a38457c48756d2a46a -a38457c48756dea372dea372c28268bea476bea476d6aa8a846a4ca38457a18b74fdffe7fdffe7 -ffffeffffffffffffffffffffff7ffffffffffffffffffffffffffe7f4f7fffffffffffff7fff7 -e7f2edffffffe7f2edefffffffffffdeedeeeff7ffcbcedb67687cefefeff7fffff7ffffffffff -f7f7fffffffff7fff7ffffffefefe7dededeb5b5b5f7fff7a8b9bdc6c6c6b5b5b5c6c6c6efefef -e7e7e7c6c6c6b5b5b5dededec6c6c6dededef7f7f7efefeffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffffffffff7f7f7f7effffff7a5a5a62445382445382725223f3235413d125c553ba38457 -c28268c38a81c38a81c38a81a384577e56405c553b5c553b83814ef2ebd6fdffe7fdffe7ffffef -fffffffffffffffffffffffffffffffffffffffffff7fffffffffff7fffff7fffff7ffffefffff -efffffffffffffffffffffffdeedeecddadacbcedb557085e7e7e7ffffffdeedeefffffff7f7f7 -fffffff7f7f7ffffffffffffdae0d6b5b5b5616f61dedede545656616f613f32354d4853fffff7 -aeadad2725224d463cd6d6d65456567c7b7cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffff7ffffffffe2c9b9bab69d9a92914d4853412f543154491e1f3a1e1f3a4d48534d463c -4d463c4d463c3f32354d463c4d48534d4853272522244538b7bcadfffff7eff8eeffffeffffff7 -fffffffffffff7f7fff7fffff7fffff7fffff7ffffefffffdeedeeeff7fff7ffffffffffffffff -ffffffdeedeea8b9bdd6dede979ca9979ca9bac6d8f7f7f7e7f4f7eff7ffffffffffffffefefef -fffffffffffffffff7fffff7fffffffffffff7f7f7d6dedeffffffd6dedecececec6c6c6ffffff -f7f7f7bbc1c8e7e7e7ffffffdedededededeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffe7e3f7f7f7ff -fffffff7efffa5a5a6a16d56a16d569d716f4d4853412f542f53791426571e42531e42531e1f3a -1e42532f53791e425316595314265716595347728531544990aaaabcc8bccbcec5fbefeffff7ff -fff7fff7f7ffefffffe5ffffe5ffffe5ffffe5fffff7fffff7ffffffffffefffffa8b9bd979ca9 -a8b9bde7e6ef2f5379848e9bcddadad6e6edffffffefffffefeff7fffffff7f7f7ffffffffffff -f7f7f7fffffffffff7fffffffffff7efefeff7f7f7ffffffefefefffffffffffffffffffffffff -efefeffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffffffffffefeeff -a8a8b59991aa9d716f7d3d30a0563f846a4c67687c1e42531e1f3a142657155078153470142657 -1550781b6ea31b6ea31b6ea31b6ea33f70b44f6c9f47728590aaaa90aaaa90aaaad6e6edffffff -fffffffffffffffffff7ffffefffffefffffefffffa8b9bd677e836175a7d6e6eda3c4da7e86b0 -557085bac6d8cbcedbd6dedeffffffe7f4f7eff7fffffffff7fff7f7f7f7f7fff7fffff7fffff7 -fffff7fffffffffff7fffff7fffffff7f7effffffff7f7f7e7f4f7fffffff7f7f7ffffffffffff -f7f7f7efefeffffffffffffff7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffdedef0a8a8b57e7b9c -55708567687c7a6870812d0d5c3f1b5c3f1b5c553b4d4853142657153470155078153470155078 -1a378a1b6ea31b6ea31b6ea31b6ea34f6c9f153470165953557085557085677e83848e9b848e9b -677e837e7b9c6175a75570854f6c9f848e9bcee0efcee0efbac6d890aaaaa8aac6a3c4dacee0ef -cee0efd6e6edfffffffffffff7ffffeffffff7fffffffffff7fff7f7fff7f7f7effffff7ffffff -fffff7fffff7fffff7fffff7fffff7fffffffffffffffffffffffffffffffffffffffffff7f7f7 -f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffffffffffffffffffffffffffff7ffffdedef07b8dc86175a75058b0 -5058b05058b052457a5c3f1b661b0c7e56405c3f1b3f32352445381e42531e1f3a1550781b6ea3 -1550781b6ea31b6ea31b6ea31b6ea3315449616f61a5a5a6898c8c83814eb99f9bb99f9bcec6c6 -c8c5d5d6d6decddadacddadaa3c4daa6c8eba6c8ebbac6d8bac6d8bac6d8c4d3edd6e6edeff7ff -fffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffff7ffffffffffff -fffffffffffffffffffffffffffffffffff7fffffff7f7f7fffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7fffffffffffffffffffffffff7ffffffffff8ba1c74c52996175a7616cbf -616cbf5058b04c52995c2e35846a4c492717605622605622413d122445383154491e4253142657 -155078155078155078165953336b4d566f4242500d83814ed6aa8ad7ad9dc38a81c38a81ffffff -ffffffffffffcee0efa3c4daa6c8eba3c4daa3c4dabac6d8cee0efe7f4f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7ffffffffffffffffffffffffffffffffffffeff7ffa3c4da52457a616cbf616cbf -616cbf616cbf5058b05d324b3f32355c2e355c2e355c3f1b4927175c553b5d324b4d48534d4853 -412f5427252231544927381383814ea18b74bea476a384575c553b5c3f1b4d463c4d463c898c8c -a8a8b5bac6d8a8aac6a8b9bda6c8ebe1eeffe1eeffeff7fffffffffffffffffffff7fffff7ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffefefefffffff545656000000e7e7e7ffffffbdbdbdcecece272522 -fffffff7f7f7f7f7f7f7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7fffffffffffffffffffffffff7ffffffffffe1eeff6175a76175a74c5299 -7b8dc8616cbf5058b05556827a6870412f543f32355c2e355c553b5c2e355c2e358040495c2e35 -7d3d305c2e35a16d56c48756a38457c18040c28268a18b74a18b749b9c9c4d4853848e9ba8b9bd -bac6d8d6e6edeff7fffff7fffffffffffffffffffffffffff7ffffeff7ffffffffffffffffffff -f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7f7efefefffffff545656000000000000000000e7e7e7a5a5a6616f6167687c -1017155456564d4853000000a5a5a6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffff7fffffffffffffffffffffffff7ffffeff7ffcee0ef7b8dc84f6c9f -616cbf5058b0616cbf7b8dc84c529952457a67687c4d48533f32355c2e355c2e355c2e35804049 -804049a0563fbc6a39e18855c48756c28268d2a46a9d716f5c553b4d463cddeadeffffffefffff -effffff7fffffffffffffffffff7ffffeeffffeeffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffc6c6c63f3235000000101715000000a5a5a6e7e7e7101715efefef -616f61272522b5b5b51017159a9291ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7ffffffffffffffffffffffffffffffdeedeef7f7ffeff7fff7f7ffa6c8eb -7e86b06175a75058b05058b0616cbf4c52994c529967687c555682412f54412f547a68705c2e35 -5c2e358040495c2e357d3d30661b0c5c2e35661b0c846a4c9a9291fff7f7f7ffffe7f4f7e5ffff -e5ffffeffffff7f7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7ffffffd6dede3f3235101715616f61f7f7f7d6d6d6000000272522 -3f32352725229b9c9c9b9c9ca5a5a6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7ffffffffff -ffffffa8aac6a3c4daa6c8eb5058b07b8dc85058b05058b06175a74c52995058b04c5299616cbf -52457a412f54412f5467687c9a92919d716f9a9291fce6eeffffffffffefeff8eeffffefffffef -fffff7fffff7fffffffffffffff7fffff7fffffffffffffffffff7f7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd6d6d6f7f7f7f7f7f7ffffffd6d6d6545656ffffff -f7f7f7efeff7f7f7f7efefefffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ffffeff7fff7ffff -eff7fffffffffff7fffff7ffe7e3f7a8aac6a3c4da9c9fc09c9fc09c9fc09c9fc09c9fc09991aa -7e86b09991aa7e86b0c6b9c6ffeefffffffffffffffff7fffff7f7fffff7ffffeffdffe7ffffef -ffffeffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffc6c6c6e7e7e7efefef -bdbdbdbdbdbddededee7e7e7e7e7e7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffff7fff7ffffeffffff7fffff7fffffffffffffff7fffff7ffffefffffef -ffffeffffff7fffff7f7fffff7fffff7fffff7fffffffffffffffffffffffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffff7fffff7fffff7fffff7fffffffffffffffffffffffffff7ff -fffffff7f7fffff7fffffffff7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffff7fffffffffffffff7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff7fffffffffffffffff7ffffffffffffffffffffff -fffffffffffffffffffffffffffff7ffffeffffff7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffff7fffff7 -fffff7fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffff7fffff7ffffffffff -fffffffffffffffffffffffffffff7ffffeffffff7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7fffff7f7fff7f7fffff7fffff7fffff7fffff7fffffffffffffff7fffff7fffff7 -fffff7fffff7fffff7fffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7fffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff -fffffffff7fffffffffff7fffffffffff7fffff7ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffff7fffff7fff7f7fff7f7fff7fffff7fffffffffffffffffffffffffffffff7fff7f7 -fff7f7fff7f7ffeeffffeeffffeeffffeeffffeefffaeef7fbefeffce6eefdefe7fdefe7fdefe7 -fce6eefbefeffce6eeffeeffffeeffffeefffaeef7fce6eefaeef7faeef7faeef7fff7efffffef -ffffeffffff7fffff7ffffefffffeffdffe7ffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffef000000 -000000fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4 -fdcfc4fdcfc4fdd0cefdd0cefdd0cefdd0cefdd0cefdd0cefdd0ceeee1c3fdcfc4fdcfc4fdcfc4 -fdd0cefdcfc4fdd0cefdd0cefdd0cef3d2dafdd0cefdd0cef3d2dafdcfc4fdd0cef3d2dafdd0ce -fdd0cef3d2dafdd0cefdd0cef3d2daf3d2daf3d2daf3d2daf3d2daf3d2dafdcfc4eee1c3fff6b6 -fff6b6fff6b6fff6b6fff6b6fdf5abfdf5abfdf5abfdf5abfff6b6fdf5abfdf5abfdf5abfdf5ab -fdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abf2de95 -fdf5abfdf5abfdf5abfdf5abfff6b6fdf5abfff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6 -fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6000000 -000000bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111 -bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111a00d08bc1111b70d05bc1111bc1111 -d30f15b70d05bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111b70d05 -bc1111b70d05bc1111d30f15bc1111bc1111d30f15bc1111bc1111d30f15b70d05ef883ade9d2e -de9d2eb6a042de9d2ede9d2ee7a330e7a330de9d2ee7a330e7a330de9d2ede9d2ede9d2ee7a330 -e7a330de9d2ee7a330e7a330e7a330de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ee7a330de9d2e -de9d2ee7a330de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2e -de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2e000000 -000000ee000cee000cee000cee000cee000cee000cee000cee000cee000cee000cee000cee000c -ee000cee000cee000cf7000ff7000fee000cf50f10f50f10f50f10f50f10f50f10dc0c02f7000f -ee000cf50f10d30f15d30f15d30f15f50f10ee000cee000ceb0000f50f10ee000cee000cf50f10 -f50f10dc0c02ee000cdc0c02f50f10f50f10dc0c02dc0c02dc0c02dc0c02bc1111ec8311ffa21c -f3a015e7a330f3a829ffa21cf3940bff9403f3a015f3940bf3a829f3a015ffa21cffa21cffa21c -ffa21cec8311ffa21cf3a015f3a015f3940bffa21cf3a829f3940bf3a829f3a015f3940bffa110 -f3940bf3a015ff9c08f3940bff9c08ffa110f3a015f3a015f3a015ffa110f3a015ffa110ffa110 -ffa110ffa110ffa110ffa110ffa110ffa110ffa110ffa110000000 -000000ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008 -ff0008ff0008ff0008f7000ff7000ff7000ff7000fff0008ff0008ff0008ff0008ff0008ff0008 -f50f10f50f10d30f15dc0c02ee000cf50f10f70000f80900ff0000ff0000f70000f80900ff0000 -f70000f50f10f50f10f50f10ee000cf50f10f80900f70000f80900f50f10dd250fec8311ff9403 -f3940bf3940bf3940bf3940bff9c08ff9c00ff9c08ff9c08ff9c08ff9c08ff9403ff9c08ff9403 -ff9403ff9c00f3940bff9403f3940bf3940bff9c08ff9c08ff9403ff9403ffa110ff9c08ff9c08 -ffa110ff9403ff9c08ff9c08ff9c08ff9403ff9403ff9403ff9403ff9403ff9403ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f70000f70000f70000ff0000ff0000ff0000ff0000ff0000ff0000f50f10 -dc0c02dc0c02b62b10d66b42f13f3df70000f70000f80900eb0000f70000ff0000ff0000ff0000 -ff0000eb0000eb0000f50f10f80900f70000eb0000eb0000f80900dc0c02dd250fec8311ff9403 -f3a829ffbc38f5bb36f3940bff9c08ff9403f3940bf3940bf3940bf69d04f3940bff9c00ff9c00 -f3940bffa508ff9c00ff9c00ff9c00ff9c00ff9403ff9403ff9c00f3940bf3940bec8311ff9c08 -f3940bf3940bf3940bff9c08f3940bff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f80900f80900f70000ff0000ff0000ff0000ff0000f70000f80900f70000 -ee000ccc0004bf4d3efdffe7e78673dc0c02f70000dd250ff50f10eb0000f50f10dc0c02eb0000 -f50f10f13f3ddd250feb0000f50f10f13f3df50f10f13f3df50f10dc0c02dd250fec8311ec8311 -f5bb36f5bb36fcdf6af3940bec8311f3940bffbc38f3a829f3a015f3a015f5bb36f3a829f5bb36 -f3a015f3a015ec8311f3a829f5bb36f3a015f3a015ffbc38f5bb36f5bb36f3a829f5bb36e7a330 -f5bb36e7a330ffbc38f3a829f3a015f3a015ff9c08ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f80900f80900f80900ff0000ff0000ff0000ff0000f70000f80900f80900 -f50f10dc0c02b62b10ffffefe78673dc0c02eb0000e88683f3ac92f50f10d30f15dc0c02d30f15 -f13f3dfdcfc4e88683e78673dc0c02e18855f13f3de88683f13f3ddc0c02cc0004ef883af3a015 -f3a829fcdf6affbc38e7a330f5bb36f3a015f5bb36fcdf6afcdf6ade9d2ef2de95fcdf6af2de95 -fcdf6ade9d2ede9d2efcdf6aebc07cec8311de9d2ef2de95ffbc38f2de95fcdf6afcdf6ae7a330 -f5bb36e7a330fdf5abffbc38f3a015f3a015f3a015f3a015f3a015f3a015f3a015f3940bffa508 -f3a015ff9c08f3a015ff9c08f3a015ff9c08f3a015ff9c08000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000f70000 -f80900ee000cd30f15f13f3df13f3ddc0c02ee000cf13f3df13f3df50f10ee000cf50f10d30f15 -dc0c02f13f3df13f3df13f3ddc0c02f50f10f50f10f13f3df50f10ee000cdc0c02ef883af3940b -f3a829f5bb36f5bb36f3a829f3a829f69d04f3940bf3a015f3a829f3940bf5bb36f3a015f5bb36 -f3a829f3a015f3940bf3a829f3a015f3940bf3a015f5bb36f3a015f5bb36f3a829f5bb36e7a330 -f3a015f3a829f5bb36f3a829f3a015f3a015f3940bffa500ff9c00ff9c00ff9c00ffa500ff9c00 -ff9c00ff9c08ff9c00ff9c08ff9c00f3940bffa500f3940b000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0008ff0008f7000feb0000ee000cee000cee000cf7000ff7000fee000cee000cee000cee000c -ee000cdc0c02eb0000dc0c02ee000cee000cee000cff0000ff0008f80900dc0c02ec8311ff9403 -ff9c00f3940bf3940bff9c00ff9c00ff9c00ffa500f3940bf69d04ffa500f69d04f69d04ff9c00 -f69d04ffa500f69d04f69d04f69d04f69d04f69d04f69d04ffa500f69d04f3940bf3940bf3a015 -f3a015ff9c08ff9403ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ffa500ff9c00ffa500ff9c00ffa500ffa500ff9c00ffa500000000 -000000ff0000f70000ff0000f70000ff0000f70000ff0000f70000ff0000f70000ff0000f70000 -ff0000f70000ff0000ff0000ff0000ff0000f70000dc0c02f80900eb0000f70000f70000ff0008 -ff0008ff0008f7000ff7000fff0008ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -f70000ff0008f70000ff0000f70000f70000f70000ff0000ff0000f80900dc0c02ec8311ff9403 -ff9c00ffa508ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c08 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c08ff9c08ff9c08 -ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000 -f70000f70000f70000ff0000ff0000f70000dc0c02dc0c02dc0c02dc0c02dc0c02f70000f7000f -ff0008ff0008f7000ff7000fff0008ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000f80900dc0c02ec8311ff9403 -ff9c00ff9c00ff9c00ff9c00ff9403ff9c00ff9c00ff9c00ff9c08ff9c08f3940bff9c08f3940b -ff9c08f3940bff9c08f3940bff9c08f3940bff9c08f3940bff9c08ff9c08ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/pthreads.gif b/Docs/Books/pthreads.gif deleted file mode 100644 index 3dcd86b2c419b7c55fdd6693a8e504b025870b37..0000000000000000000000000000000000000000 Binary files a/Docs/Books/pthreads.gif and /dev/null differ diff --git a/Docs/Books/pthreads.txt b/Docs/Books/pthreads.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/realmen.eps b/Docs/Books/realmen.eps deleted file mode 100644 index c04e3fd8ffa07009b33874d8ade17c72461b47a3..0000000000000000000000000000000000000000 --- a/Docs/Books/realmen.eps +++ /dev/null @@ -1,1167 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/realmen.eps -%%CreationDate: Sun Dec 31 14:31:25 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 372 -%%EndComments -%%BeginPreview: 100 126 1 126 -% fffffffffffffffffffffffff0 -% aaaaaaaaaaaaaaaaaaab7b5550 -% d5555555555555555555add4b0 -% aaaaaaaaaaaaaaaaaaaeff6b50 -% d555555555555555555556aab0 -% aaaaaaaaaaaaaaaaaaabaf5450 -% d5555555555555555556feaa10 -% aaaaaaaaaaaaaaaaaaaaa548b0 -% d5555555555555555556aa9210 -% aaaaaaaaaaaaaaaaaaa9542450 -% d5555555555555555552254a90 -% aaaaaaaaaaaaaaaaaaa89a1030 -% d555555555555555555054a7b0 -% aaaaaaaaaaaaaaaaaaa92a0ad0 -% d555555555555555555054a550 -% aaaaaaaaaaaaaaaaaaaaaa4af0 -% d55577d5555555555550fd5490 -% aaabdd7aaaaa90a24aabfe5530 -% d556b7ad55554a489551fb5490 -% aaabd4b6aaaaa55252afef2d10 -% d556ab5d55552aad5553feaa30 -% aaadd556aaaad552aaabfe5490 -% d5576aaaabaaaaed5557dd5530 -% aaadaaaaaaaaaaaaaaabfeaad0 -% d556d55557aaaaeaaaabfa57f0 -% aaadaaaaaaaaaad55555fd5570 -% d5576aaaabaaabaaaaa9eaabd0 -% aaadd55556aaaaeaaaa9fd56b0 -% d556aaaab5db76b755527556b0 -% aaadd555ef76adddaaa8955510 -% d5576aaabadd7b775554555650 -% aaadaaaad7ab56d55551555a90 -% d556d555555555aaaaaa2b6d10 -% aaadaaaaabaaaaeaaaaadedab0 -% d5576aaaaaaaaaaaaaad6bee90 -% aaadd55557aaaaeaad52b7bbf0 -% d556aaaaaad555aaaab7fff770 -% aaadeaaaab55556ab7fffffff0 -% d557555eaaaaaaabfffffffff0 -% aaadd5aaaaaaad5ffffbfcbf70 -% d556aabd5555557ffff7fd7fb0 -% aaabff6aaaaaabfffff51dd970 -% d55555dab55557fffff6fcd570 -% aaaaeeb555aaafffffedbb5570 -% d555555555555ffffff7fffff0 -% aaaaaaaaaaaabff9ffdffffff0 -% d555555555555ff6fffffffff0 -% aaaaaaaaaaaaaffaa495084970 -% d55555555555abf76dbabb5b70 -% aaaaaaaaaaaaabf76db3ad5ef0 -% d55555555555557ffafffffff0 -% aaaaaaaaaaaaaaaffffffffff0 -% d555555555555555fffffffff0 -% aaaaaaaaaaaaaaaa57fffffff0 -% d555555555555555a8555f5c10 -% aaaaaaaaaaaaaaaaaba856dab0 -% d55555555555b555555557b750 -% aaaaaaaaaaaaaad6aaa817aef0 -% d55555555555555555552b7bb0 -% aaaaaaaaaaaaaaaaaaa82fd550 -% d5555555555555555554935bf0 -% aaaaaaaaaaaaaaaaaaa817d550 -% d55555556d556d5555544b5d30 -% aaaaaaaaaaaaaaaaaaa817d510 -% d55555555555aad55554ab6c50 -% aaaaaaaaaab6ad56aaa80baa90 -% d5555555555555555554abd630 -% aaaaaab5aaaaaaaaaaa8155d50 -% d5555555556ad5555554abaab0 -% aaaaaaaaaaad5ab6aaa826aff0 -% d555555556d555aad554aaaab0 -% aaaaaaaaaaaaaaaaaaa856d770 -% d5555555b555555556d4ab55b0 -% aaaaaab6aaaadaaaaaa82ed650 -% d55555555556ab555555575d10 -% aaaaadaaaadaaab6b6a85db450 -% d5555555555555555554abfe90 -% aaaaaaaaadaaaaaaaaa92fda10 -% d555555b55556d5555595efeb0 -% aaaaaaaab55aaab6b6aa5dea90 -% d55556d55555aad55554bfdf70 -% aaaaaaaaaaaab5556aa977f5b0 -% d5555555556aaaaaaad56edb50 -% aaaaaaab6aad55b5555addf6b0 -% d555b55556d5aaaad6abb7dab0 -% aaaaaaad55555b555aaafff510 -% d55555556aaaaaab555756ea50 -% aaaaaad5ad555555556afff510 -% d555555aaaab6aad6aadabdc50 -% aaab6b55556d556aad56def510 -% d5555555aaaaab5555aab7ea50 -% ad5aaaaab5aab555aab76dddb0 -% d56aad5556ab56aab555bf7550 -% aaaad5adaab55556aaaad5fab0 -% d555555555556ab555576fead0 -% aaaaaaaaad56ad556b6abb7b50 -% d6d5555555aad5aaad56d7ea10 -% aaab6adab55aaab55555bdf550 -% d5555555aaaaad56aaaeabac10 -% aaaaab5555b5b5aad555dffa90 -% d56d5d6b6d56aab55ab6aaed30 -% daaaaaad56daad56ab5527b610 -% d5aadb75b56ad5aad5569aed50 -% aab6aaaaab56aab5556a2b5bf0 -% d555555555555b56ad5494aa90 -% fffffffffffffffffad5115bf0 -% fffffffffffffffffb5a4ed6b0 -% f7ffeff7ffbfbff7f56a9114b0 -% f488305512616c147aad14b510 -% f6b7b7baf7effff7fb55551410 -% fffffffffffffffff56d16f490 -% fffffffffffffffffaab55a210 -% d5555555555554952b6da54a50 -% d5555555555555b56aaadff510 -% db6db6db6dadb6aad6d77455f0 -% d5555555556aaad6aab5a92ab0 -% dadb6db6db5b6d5adb56d2ad50 -% d6aaaaaaaaaaab6b556b71aaf0 -% dad6db6db6d6daad6aada54a90 -% d55aaaaaaabaab55adb5749510 -% d6ab56db6dab5ab6b555a91630 -% dadab55555556b5556da505490 -% d5556db6db6dad6daaa94aaa10 -% d6b6aaaaaaaab5aab5b4105690 -% dad5b56db6db56b556a8a52ab0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 357.165354 translate -283.464567 -357.165354 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 126 8 -% Transformation matrix -[ 100 0 0 126 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -00000048b33423ad2331bf0d22b50b31bf0d25b52129bd0822b50b23b50021bd0821bd0821bd08 -21bd0021bd0821bd0021bd0821bd0821bd0821bd0821bd0821bd0821bd0821bd0829bd0821bd00 -21bd0021bd0021bd0021bd0021bd0021bd0021bd0021c60021c60018bd0018c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60018c60805974b -06aa6d02946f06aa6d00955f04787005775608911a08911a05983505974b00955f00955f06aa6d -06aa6d43b66d43b66d6ec36843b66d25a75822a63223ad23000000 -00000031bf0d31bf0d31bf0d29c60029c60829c60029c60021c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c600 -21c60018c60021c60021c60021c60021c60018c60021c60018c60021c60021c60021c60021c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60800955f -06aa6d00955f00955f00955f0577560c751808911a08911a05983505974b00955f00955f06aa6d -06aa6d23a57923a57925a7586ec36850bf4f25a75848b334000000 -00000029bd0831bf0d31bf0d29c60029c60029c60821c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60805974b -00955f06aa6d00955f00955f0c751808911a185d2829312926642208911a00955f05775605974b -18a2753da88306aa6d25a75843b66d6ec36850bf4f409651000000 -00000031bf0d31bf0d31bf0d29c60829c60029c60029c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c600 -21c60018c60021c60021c60021c60021c60018c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021bd0800955f -02946f00955f00955f05775608911a059835333631293129253021188a0d05974b00955f05974b -43b66d43b66d25a75825a75843b66d649e6a649e6a409651000000 -00000031bf0d31bf0d31bf0d29c60829c60829c60829c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60800955f -00955f00955f00955f05974b059835239a3a3336312530212931293e822705974b18a2753fa46b -43b66d43b66d3fa46b48b33489bc5aafb869a89971a58f55000000 -00000029bd0831bf0d29c60829bd0829c60829c60829c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -21c60018c60021c60021c60021c60021c60021c60018c60021c60018c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60805974b -05974b05974b06aa4705974b059835239a3a4d5d572530212931293e822705974b3da88362a788 -4eb58850bf4f3fa46b91bf3bafb869ddc17eeab65ef3b50f000000 -00000031bf0d31bf0d31bf0d29c60829c60829c60829c60829c60829c60821c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60807aa32 -05983507aa3205983507aa3205974b25a758649e6a4b572e637e2405983523a57970b68c70b68c -70b68c649e6a89bc5a91bf3bddc17eddc17ef8af56f5bd00000000 -00000023bf1131bf0d31bf0d29bd0829c60829c60829c60029c60829c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60018c60021c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60806aa47 -05974b08a62907aa323fa46b3fa46b43b66d649e6a63c74d6a92543da88370b68c88ad9788ad97 -88ad97abb37eabb37ecbb062ddc17efab77bf8af56f5bd00000000 -00000029bd0831bf0d31bf0d29c60829c60829c60821c60029c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60018c60018c60018c60021c60018c60021c60018c600 -21c60018c60021c60018c60021c60021c60018c60021c60018c60021c60018c60018c60018c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021bd0850bf4f -6ec3686ec368649e6a6ec36870b68c649e6a70b68c62a78870b68c88ad9788ad978bc1a38bc1a3 -a1ad9ea1ad9e88a87acbb062d9ac7bfab77bf5af30f5bd00000000 -00000029bd0831bf0d31bf0d29bd0829bd0029c60829c60021c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -18bd0018c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60018c60021c60021c60018c60021c60018c60021c60018c60021c600 -18c60021c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08afb869 -d9ac7b85c17685c17685c176649e6a4eb58862a78862a7884eb58862a7888bc1a38bc1a3a3b8af -a1ad9e929b9c8f8f7ab88d5bd9ac7bcbb062f5af30f3b50f000000 -00000029bd0829bd0831bf0d29bd0829c60829bd0829c60029c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60018c60021c60018c60018c60018c60021c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08ddc17e -ddc17eabb37eabb37e85c17670b68c3fa46b23a57918a27506aa6d4eb5888bc1a3a3b8afa3b8af -a3b8afa1ad9e88ad9789bc5acbb062d99755eab65ee4ac2c000000 -00000029bd0829bd0831bf0d29c60029bd0829c60021c60029c60029c60021c60821c60821bd00 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18bd0018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60018c60021c60018c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c608ddc17e -fdca81ddc17eabb37eabb37e88a87a62a7883da88323a5793da8838bc1a38bc1a3a3b8afa3b8af -a3b8afa1ad9e83959818a2754096516a92547f8a518b873b000000 -00000029bd0031bf0d31bf0d29bd0829c60029bd0829c60829bd0821c60821c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -18c60021c60018c60021c60021c60021c60021c60021c60018c60018bd0018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -18bd0021c60021c60018c60021c60021c60018c60021c60018c60021c60018c60021c60018c600 -21c60018c60018c60021c60018c60021c60021c60021c60021c60021c60021c60029bd08abb37e -fdca81ddc17ed9ac7ba8997188a87a88a87a7d957862a78870b68c8bc1a38bc1a38bc1a3a3b8af -8bc1a3a3b8af62a78800967b06aa6d00955f05974b278c56000000 -00000029bd0829bd0831bf0d29c60029bd0029c60029bd0029c60029bd0021c60021c60021c600 -21c60021c60021c60021bd0021c60021c60021c60021c60021c60021c60021c60018c60018c600 -18bd0018c60021c60021c60021c60021c60021c60018c60018c60018c60021c60018c60018bd00 -21c60021c60018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60018bd0018c60018c60021c60018c60021c60018c60018c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60029c608ddc17e -fdca81d9ac7bd9ac7ba8997191875d818c647d95787d957870b68c88ad978bc1a38bc1a38bc1a3 -8bc1a38bc1a34eb58800967b00955f06aa47409651497651000000 -00000029bd0029bd0829bd0029bd0029c60029bd0029c60021bd0029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021bd0021c60021c60021bd0021c60021bd0018bd00 -18c60021c60021c60021bd0021c60021c60021c60018c60018c60018c60021c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60018c60021c60821c60821c600 -18c60018bd0023bf1131bf0d31bf0d21c60818c60018c60018c60023bf1129c60821c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08d9ac7b -fab77bd89076b88d5ba58f557f8a51816e5a818c647d95787d957870b68c88ad978bc1a38bc1a3 -8bc1a38bc1a362a7883fa46b25a75825a758278263497651000000 -00000029bd0829bd0831bf0d29bd0829bd0029c60829bd0029c60821bd0021c60021c60021bd00 -21bd0021c60023bf11239a3a29846d347382347382347382296e87296e87296e87296e87347382 -29846d239a3a21bd0821c60021c60021c60021c60021c60018c60018bd0018c60021c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60021c60018bd0063c74d70d75610c600 -10bd0023bf1163c74d63c74d63c74d21c60818bd0085c17621c60063c74d50d03810c60018c600 -18c60018c60018c60018c60018c60021c60021c60021c60021c60021c60021c60021c608d9ac7b -fab77bd89076906a58493e28493e28344833493e284b572e818c6488a87a70b68c4eb5884eb588 -4eb58870b68c62a788649e6a89bc5a7f8a518b873b927820000000 -00000029bd0029bd0831bf0d29bd0029bd0829bd0029c60829bd0029c60821c60021c60021bd00 -21c60023ad23296e87315aad315aad315aa5315aa5315aa5315aa5315aa5315aa5315aa5315aa5 -315aa5315aad296e8725b52121c60021c60021c60018c60018c60018c60018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60021c60010c60063c74d63c74d25b521 -63c74d70d75670d75685c17650d03810bd0031bf0d8bc1a350d03850d03863c74d50d03870d756 -50d03863c74d50d03870d75650d03821c60021c60021c60021c60021c60021c60021bd00cbb062 -d89076906a58333631222929213129253021213129222929344833818c6488ad974eb5883da883 -109c8423a57906aa6d48b334cfad02cfad02e4ab00e4ab00000000 -00000029bd0829bd0029bd0829bd0829bd0029c60829bd0021c60829bd0021c60821bd0821c600 -23ad23296598315aad31629c31629c31629c315aa5315aa5315aa5315aa5315aa5315aa5315aa5 -315aad31629c315aa5296e8721b51821c60021c60018c60018c60018c60018c60018c60018c600 -21c60021c60018c60018bd0018c60018bd0021c60021bd0021c60010bd0050d03870d75670d756 -63c74d50bf4f70d75670d75650d03810bd0050d03863c74d70d75650d03870d75670d7566cc951 -70d75670d75650d03885c17631bf0d21c60021c60021c60021c60021c60021c60021bd00d9ac7b -d8907633363125302129312929312929312929312926393125302160604288a87a70b68c23a579 -06aa6d06aa6d06aa6d90b112cfad02cfad02f5bd00f5bd00000000 -00000021bd0029bd0829bd0829bd0821bd0829bd0821c60029bd0021c60821c60021c60021bd00 -287b7b315aa531629c3163a5315aa5287b7b23ad2322a63223ad2323ad2323ad2323ad2321a427 -27826331629c31629c315aad278c5621c60018bd0018c60018bd0018c60018c60018c60018c600 -18bd0018c60021c60021c60018c60018c60018bd0018c60021bd0010bd0050d03863c74d63c74d -63c74d50d03850d03863c74d31bf0d23bf1150d03823bf1170d75670d75650d03885c17670d756 -50d03870d75648b33470d75621c60818c60021c60021c60021c60021c60021c60021bd00b88d5b -7f5a5822292929312929312929312929312929312929312925302160604288a87a70b68c3da883 -109c8406aa6d05974b90b112cfad02f5bd00f5bd00f5bd00000000 -00000022b50b29bd0829bd0821bd0029c60021bd0029c60021c60029bd0021c60821c60023ad23 -3163a531629c3163a531629c315aad27826321ce0018c60018c60018c60018c60018c60018c600 -18ce00239a3a315aa531629c296e8723bf1118c60018bd0018c60018c60018c60018c60018c600 -18bd0021c60018c60018bd0018c60018bd0021c60021c60010bd0050d03870d75629c60810c600 -29c60818c60021c60018c60021c60018c60021c60021c60021c60018c60025b52170d75663c74d -29c60818c60021ce0018c60021c60021c60021c60021c60021c60021c60021c60021c600b88d5b -5c4c512229292931292931292931292931292931292131292530217f8a518f8f7a70b68c23a579 -06aa6d06aa6d05974b90b112cfad02e4ab00f5bd00f5b500000000 -00000029bd0829bd0829bd0829bd0029bd0829c60021bd0029c60021c60029bd0821c600299452 -315aa53163a531629c31629c315aa529846d21c60021bd0018bd0018c60018bd0018c60018bd00 -18c60021b518296e87315ab52963a623ad2318c60018c60018bd0018c60018c60018c60018c600 -18c60018c60018c60018c60021bd0018c60021c60018c60018c60021c60021c60018bd0018c600 -18c60018c60018c60018c60018c60018c60018c60018c60021c60021c60029c60031bf0d29c608 -18c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c60029c60091875d -333631253021293129293129293129293129293129253021493e2891875da8997170b68c3da883 -18a27518a275239a3a8e8c16cfad02e4ab00e4ab00f2ad00000000 -00000023b50029bd0831bf0d29bd0829c60029bd0829c60021c60029c60021c60821c600278c56 -3163ad3163a53163a531629c3163ad29846d21c60021c60018bd0018c60018c60018bd0018c600 -18bd0018c60022a632239a3a239a3a23bf1118c60018bd0018c60018bd0018c60021bd00278c56 -287b71287b7123ad2321c60018c60021c60018c60021c60021c60018c60018bd0018c60018bd00 -18c60021bd0018c60021b518287b7b34738229846d23bf1118c60021c60018c60018c60018c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029c60091875d -3336312530212931292931292931292530212931292229296a5922a58f558f8f7a88a87a3da883 -25a75825a7584096518e8c16c2920acfad02e4ab00e4ab00000000 -00000021bd0029bd0829bd0029c60021bd0029c60021bd0029c60021bd0021bd0821c600278c56 -315aad3163a53163a531629c3163a529846d18c60021bd0021c60018bd0021bd0018c60018bd00 -18c60018bd0018c60021ce0021ce0021c60021bd0018c60018bd0021c60018c60021c608287b7b -3152ae315aad22a63221c60021c60021bd0018c60018bd0018bd0021c60018c60018bd0018c600 -18bd0018c60018c60023ad2331629c3152ae29659818bd0818c60021c60021c60021c60021c600 -18bd0018c60018bd0018c60021c60021c60021c60021c60021c60021c60021c60029bd00a47953 -3336312530212931292530212931292931292931292530216a5922a58f55a8997188a87a3fa46b -3fa46b3fa46b617e3e637e24927820927820966b1d927820000000 -00000021bd0029bd0829bd0029bd0029c60029bd0021c60021bd0029c60021bd0021c600278c56 -3163ad3163a53163a531629c315aa529846d21c60021c60021bd0021c60021c60021c60018c600 -18bd0021c60021bd0021c60021bd0021c60021c60018c60018c60018bd0018c60018bd00287b7b -315aa529659821a42721c60021c60018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18c60018bd0018c60025b521296598315aa5296e8721bd0818c60018c60018c60018c60021c600 -18c60018bd0018c60018bd0018c60021c60021c60021c60021c60021c60021c60021bd00b88d5b -5c4c51222929253021293129253021253021213129493e2896733ab88d5ba899717d95783fa46b -3fa46b6a92546a9254617e3e3b54533b5453244d50244d50000000 -00000021bd0829bd0029bd0829c60029bd0029c60029bd0021c60021bd0029c60021c600278c56 -3163ad3163a53163a53163a53163a529846d21c60021c60021c60021c60021c60018c60018bd00 -18c60021c60021c60021c60021c60021c60018bd0021c60018c60018c60018bd0021c608287b7b -315aa5295aa522a63218c60018bd0018c60018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018c60018c60023ad23296598315aa5296e8721bd0818c60018bd0018c60021c60018c600 -18bd0018c60018bd0018c60021c60018c60021c60021c60021c60021c60021c60021bd00b88d5b -7f5a582229292530212530212931292931292530216a5922a47953b88d5ba89971649e6a3fa46b -649e6a6a925468725168725149765126642218605c244d50000000 -00000023b50029bd0829bd0021bd0021bd0029bd0821c60021bd0029c60021bd0018c600299452 -315aad31629c3163a531629c315aad29846d18c60021bd0018bd0021c60018c60021c60021c600 -18bd0018c60021c60018c60021c60021bd0021bd0018bd0018c60018bd0018c60018bd08287b7b -315aa52963a622a63218c60018bd0018bd0018bd0018c60018bd0021c60018bd0018bd0018bd00 -18c60018bd0018c60023ad23296598315aa5296e8721b51818c60018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018c60021c60021bd0021c60021c60021c60021c60021bd00cbb062 -d890763336312530212639312530212931292530218c5e20a58f55b88d5ba58f55649e6a6a9254 -6a92547f8a516872516060423b545318605c244d500d5549000000 -00000023b50029bd0829bd0029bd0821bd0029c60821bd0021c60021bd0021c60021c600299452 -3163a53163a53163a531629c3163ad287b7121c60021bd0021c60018c60021c60021c60018c600 -18c60021c60021c60021c60021bd0021c60021c60018ce0018c60018c60018c60018c600287b71 -315aa5315aa522a63218ce0018c60018c60018c60018c60018c60021c60018c60018c60018c600 -18c60018c60018ce0021b518296e87315aa5296e8721bd0818c60021c60018c60018c60018c600 -18c60018c60018bd0018c60021c60018c60021c60021c60021c60021c60021c60021bd00b88d5b -fab77b906a58333631253021253021213129493e2896733aa47953a58f5591875d649e6a6a9254 -8b873b8b873b687251497651244d503b54533b54533b5453000000 -00000029bd0029bd0829bd0021c60029bd0829c60021c60029bd0021c60029bd0021c600299452 -315aa531629c31629c3163a53163a529846d21c60021c60021bd0021bd0021c60021c60021c600 -18bd0021c60021c60021c60021c60023bf11299452299452299452299452299452299452296e87 -315aa531629c29846d299452278c56278c56278c56278c56239a3a18c60023ad23278263278263 -278c56278263278c5629846d296598315aa529659829846d27826329846d27826329846d29846d -18b51818c60018bd0018c60018c60021c60021c60021c60021c60021c60021c60021c600cbb062 -d89076d89076906a58493e28493e28333631493e2896733aa4795391875d818c647f8a517f8a51 -7f8a517f8a516060424b572e9278208e8c16c2920ac2920a000000 -00000022b50b29bd0829bd0821bd0021bd0021bd0029c60021c60021bd0021bd0818c600299452 -3163ad3163a53163a53163a53163a5287b7121c60021bd0021c60018c60018bd0018c60018bd00 -18c60018bd0021bd0021c60018c60025b521296598315aad315aa5315aad315aad315aad315aa5 -3163a53163a5295aa5315aad315aad315aad3152a5315ab527826318ce00239a3a315ab5295aa5 -295aa5315aad3152ae315aad315aa531629c315aa53152a53152ae315aa53152a5315aa53152ae -189d2e18c60018c60018bd0021c60018c60021c60021c60021c60021c60021c60021bd00afb869 -fab77bd9ac7bd89076a2826791875d816e5a8b873b91875d91875d7f8a516a92547f8a517f8a51 -7f8a517f8a514d5d57637e24c2920acfad02e4ab00e4ab00000000 -00000021bd0029bd0829bd0821bd0021bd0021bd0021bd0029bd0021bd0021c60021c600299452 -315aad3163a53163a53163a53163a5287b7b18c60021bd0018bd0018c60018c60018bd0018c600 -18bd0021c60021c60021bd0021c60025b52131629c315aa5315aa5315aa5315aa5315aad295aa5 -3163a5315aa5315aa5315aad315aad315aa5315aa53152ae27826318ce00239a3a315ab5315aad -315aad295aa5315aa5315aad31629c31629c315aa5315aa5315aa5315aad315aa5315aad315aad -22a63218c60021bd0018c60018bd0021c60021c60021c60021c60021c60021c60021bd00afb869 -fdca81d9ac7babb37ea899718f8f7a818c64818c64818c64818c647f8a516a92547f8a516a9254 -7f8a51816e5a497651927820cfad02e29602e4ab00f5b500000000 -00000021bd0029bd0829bd0821bd0021bd0021bd0029c60821bd0021bd0021bd0821c600299452 -315aa53163a53163a531629c315aa5287b7121c60018bd0021c60018bd0018c60018c60018bd00 -18c60021c60021c60021c60021c60021b518278263287b71287b71287b71287b71287b71296e87 -315aa52963a6287b7b278263278263278263278263278263239a3a18c60022a632278263278c56 -278263278c56278c56278263296598315aa5296598278263278c56278c56278c56278c56278c56 -18b51821c60018bd0018c60018c60018bd0021c60021c60021c60021c60021c60021bd00afb869 -ddc17eabb37eabb37e88a87a8f8f7a818c647d95786a92546a92546a92546a92546a9254687251 -687251576d67497651927820cfad02e4ab00f5b500f5b500000000 -00000022b50b29bd0821bd0021bd0021bd0021bd0021c60021c60821c60021bd0821c600299452 -315aad31629c3163a53163a53163a5287b7b18c60021bd0018bd0018c60018bd0018bd0018c600 -18bd0021c60021c60021c60021c60021c60018c60018c60018c60018c60018c60021c600287b71 -315aa5295aa522a63218ce0018c60018c60018c60018c60018c60018bd0018c60018c60018c600 -18c60018c60018ce0021b518296e87315aa5296e8718bd0818c60018c60018c60018c60018c600 -18bd0018bd0018c60018bd0018bd0018c60021c60021c60021c60018bd0021bd0021c6006ec368 -abb37eafb86985c17688a87a649e6a3fa46b278c56278c56278c5642863d3e8227617e3e497651 -49765127826318605c8e8c16c2920acfad02e4ab00f5b500000000 -00000022b50b29bd0829bd0821bd0029bd0029c60821bd0821bd0021bd0021c60821c600299452 -315aa53163a53163a53163a53163a5287b7b21c60018bd0021bd0018c60018bd0018c60018bd00 -18c60021bd0021c60021c60021c60021c60021c60018bd0018c60021bd0018c60021c600287b71 -315aa52963a6239a3a18c60018bd0018c60018bd0018bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018c60021b518296598315aa529659821b51818c60018bd0018c60018bd0018bd00 -18c60018bd0018c60018c60018c60018bd0021c60021c60021c60021c60018bd0021bd0043b66d -06aa6d43b66d43b66d06aa6d06aa6d01877b02946f047870057756186d16186d163e8227497651 -2782632782630c5a6c637e24c2920ac2920ae4ab00e4ab00000000 -00000023b50029bd0829bd0029bd0029bd0021bd0021bd0021bd0021bd0021bd0021c600299452 -315aad31629c3163a53163a53163a5287b7b21c60021bd0018bd0018c60021c60018bd0018c600 -18bd0021c60021c60021c60021c60021c60021c60018c60018bd0018c60018bd0021c600287b71 -315aa52963a622a63218c60018c60018bd0018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018bd0018c60025b521296e87315aa5296e8718b51018c60018bd0018c60018c60018c600 -18bd0018c60018bd0018c60018bd0018c60021c60021bd0021c60021bd0021c60018bd0006aa47 -06aa6d06aa6d06aa6d06aa6d02946f02946f057756057756185d2825463b25463b185d28247952 -27826304787018605c4976518e8c168e8c16c2920ac2920a000000 -00000023b50029bd0021bd0021bd0021bd0029c60021bd0021c60021bd0021bd0021c600299452 -3163a53163a53163a53163a53163a5287b7121c60021c60821c60021bd0018bd0021c60018bd00 -18c60021c60021bd0021c60021bd0021c60018bd0021bd0018c60018bd0018bd0018c600287b71 -2963a62963a6239a3a18c60018bd0018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18bd0018bd0018c60021b518296598315aa5296e8718b51018c60018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0021c60018c60018c60021c60021c60018ce0010c631 -25a75806aa6d06aa6d06aa6d06aa6d05974b05974b0d5549244d5025463b25463b0d5549057756 -04787004787004787004787018605c3b54533b54534a4e50000000 -00000021bd0029bd0829bd0029bd0029c60029bd0029c60021bd0021bd0021bd0021c600299452 -3163a53163a531629c31629c315aa5287b7b21c60021bd0018bd0018c60021c60018bd0018c600 -18bd0021c60021c60021c60021c60018c60021bd0018c60018bd0018c60018bd0018c600287b71 -315aad295aa5239a3a18c60018bd0018bd0018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018c60018c60021b518296598315aa529659818b51018c60018c60018bd0018bd0018bd00 -18bd0018c60018c60021c60021ce0018ce0018c60021c60021bd0018a80818a80818a80808911a -08911a2479520577560d55490d5549104821266422263931213131213131213131183e33183e33 -0d55490d55490d55490d55490d554918605c0d5549244d50000000 -00000023b50029bd0029bd0829c60029bd0029c60021bd0829c60021bd0021c60821c600299452 -3163ad31629c3163a531629c3163ad287b7121c60018bd0021bd0018bd0018bd0018c60018bd00 -18c60018c60021b51821b51823ad2321bd0818c60018bd0018c60018bd0018c60018c600278263 -29659829659822a63218c60018bd0018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18c60018bd0018c60021b518287b71296e87287b7118b51018c60018bd0018c60018c60018ce00 -18c60021bd0018a80818a8080c7518186d16266422184418103521103521182121182121181821 -181821181c18181c18182121181c18181821101821181821102121102118102121182121182121 -182121182121182121182121182121182121182121182121000000 -00000023b50029bd0029bd0021bd0021bd0021bd0021bd0021bd0021bd0821bd0018c600299452 -3163a53163a53163a531629c295aa5287b7b18bd0021bd0018bd0018bd0018bd0018bd0018bd00 -18bd0021bd08287b7b3163ad29659822a63218c60018bd0018bd0018bd0018bd0021bd0018bd08 -18bd0818bd0818bd0818bd0018bd0018bd0018c60018bd0018c60018c60018c60018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018bd0018bd0018c60018ce0018c60018b507188a0d0c7518 -185d28184418182921182129181821181821181821182129182121182121182121182121182121 -213129182921182921182921182929182921182121182921182929182121102121101821182921 -182929182921182121182121182121182921182921182921000000 -00000021bd0029bd0029bd0029bd0021bd0021bd0021bd0021bd0021bd0021bd0018c60022a632 -3163a531629c31629c2963a62963a6287b7b21c60018bd0018bd0018bd0018bd0018bd0018bd00 -18ce0022a63231629c3163a529659823ad2318c60018bd0018c60018bd0018c60018bd0018c600 -18c60018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018ce0018c60018a8080c7518185d28182921182121181821 -181821182121182129182921182921182121182921182921182121182921182121222929576d67 -6c76721829211821211821211821211821211829211021216c76727d81826c7672364742102118 -1821211829211829211021211018214d5d57707d7b101821000000 -00000023b50021bd0829bd0021bd0021bd0021bd0021bd0021bd0021bd0021bd0018c60021b518 -296e873163a52965983163a53163ad287b7b18bd0021bd0018bd0021bd0018bd0021bd0018bd08 -22a632296e872963a63163a5287b7b18bd0821bd0018bd0018bd0018bd0018bd0018c60018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018c60018b5070c7518184418182921181821181821182121182121182921 -182921182121182121182121182121182121182921182121182921182929081821707d7b4d5d57 -1018212131291821212131292131312131291829290c1716818c8c39494f7d81826c76720c1716 -2931311821211829293336311021216c7672576d67102118000000 -00000023b50021bd0029bd0021bd0021bd0029bd0821bd0021bd0021bd0018bd0021bd0018c600 -239a3a315aad3163a531629c3163a5296598296e87296e87296e87296e87296e87296e87296e87 -3163a5295aa53163a52963a6189d2e21c60018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018b507186d16103521181821182129102121182921182921182121182121182121 -182121182121182121182921182121182921182121182921182121182121293131a3b8af5f6266 -636f6b6c76724a4e50839598707d7b4a4e50102121182121929b9c84948c636f6b222929576d67 -84948c333631576d67929b9c39494f818c8c263931182121000000 -00000023b50021bd0021bd0821bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0821bd00 -21c608278c562963a63163ad3163a53163a53163a5315aa53163a53163a53163a5315aa5315aa5 -2963a6315aa52963a6239a3a21c60018bd0021bd0018c60018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018c60010bd0018bd0018bd00 -18c600188a0d184418181821182121182921182921182121182921182121182921182121182121 -1821211821211829211821211821211821211829211821211829291821212639317d81824d5d57 -6c76726c76725f6266929b9c2131291821211821213336318c9794929b9c4d5d57263931929b9c -333631636f6b6c7672818c8c39494f8c9794222929182921000000 -00000023b50021bd0829bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0021bd0018bd08 -18c60021c600239a3a296e872965982963a63163a52963a6295aa53163a5315aa52963a62963a6 -296598287b7123ad2321c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -188a0d182921182129182921182921102121182921102121182121182921182121182921182121 -1821211821211821211829211821211829211821211829291829211018214a4e50707d7b364742 -7d8182636f6b576d67636f6b1018211829291018215d727c84948c364742929b9c4a4e50929b9c -22393e84948c818c8c707d7b576d6784948c182921222929000000 -00000022b50b21bd0029bd0821bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0021bd00 -21bd0018bd0021c60021c60025b52121a42722a63221a42721a42721a42721a42721a42723ad23 -18b51018c60018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0010bd0010bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010c60022b50b -103521182121182921182121182921182121182921182121182921102118182121101821182121 -1829211821211829211821211821211821211829211829212229290c1716636f6b4d5d570c1716 -364742182921222929222929182121182921182921293131263931222929293131213129333631 -213129213129213129182929222929222929182921182929000000 -00000023b50021bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018bd0018c600 -18bd0018c60018bd0021bd0018c60018c60018c60018c60018c60018c60018c60018c60018c600 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0010c60010bd0018c600188a0d -182121182929182921182929182121182921182929182121333631839598636f6b5f6266102121 -1821211821211821211821211829211821211821211829211021184d5d57636f6b182921102121 -101821182121102121182121182921182121182121102118101821182121102118102121182121 -182121182121102121102118182121102121182121182121000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60021bd0021bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0010bd0018bd0010c60018a808 -182921182121182921182121182929182121182921102121364742929b9c182121a3b8af293131 -182921213129182121213129102121182921213129222929222929263931293131102118293131 -293131213129293131293131222929293131182929263931293131213131213131293131102118 -29313122292926393133363122393e263931293131182121000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018bd0018bd00 -18bd0018c60018bd0021bd0021c60018c60018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0010bd0018bd0018c608 -186d161818211829291829211821212229292229290818215f62668c9794576d67707d7b6c7672 -7d81825d727c636f6b707d7b3647425d727c707d7b6c7672738085818c8c636f6b39494f7d8182 -818c8c636f6b8c9794818c8c7d8182929b9c4d5d57929b9c7d81828c97948c9794576d674a4e50 -8c9794576d678c9794707d7b6c767273808539494f182121000000 -00000022b50b22b50b21bd0021bd0021bd0021bd0021bd0018bd0021bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0018bd0018bd0010c600 -18bd00186d161821211821291829211829212131290c17167d8182576d6722292910182184948c -4d5d57364742707d7b636f6b707d7b636f6b7d81823336318c97944a4e50293131707d7b818c8c -3b5453707d7b707d7b818c8c707d7b7d81823647428c9794707d7b7d8182818c8c4a4e50929b9c -36474239494f929b9c1021182639318c9794182121182921000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0018bd0018c60018bd0018bd00 -18bd0018c60018bd0021c60821c60021c60818bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60018bd0010bd0010bd0010bd0018bd00 -10c60018c600188a0d184418182129182129182121222929a3b8af3647421021182131298c9794 -102118364742707d7b6c7672293131929b9c4d5d5721312984948c0c1716636f6b818c8c929b9c -3647427d81824d5d57636f6b6c76725f6266636f6b5f62666c76724d5d5784948c3647428c9794 -3647424d5d57576d671021215d727c636f6b222929182121000000 -00000023b50021bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018c60018bd00 -18c60018bd0021c60021bd0021bd0821bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0021bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd00 -18bd0010bd0018c60018c608188a0d104e17182921212931364742293131182121222929213129 -1821211821213336311829294d5d57636f6b8c97943b5453182121182121222929293131222929 -182921222929182929182121213129182121182921182121182929182121182921101821293129 -222929182121182121182121293131182121182121182921000000 -00000023b50029bd0829bd0821bd0021bd0021bd0021bd0021bd0821bd0821c60018bd0018bd00 -18bd0021c60018c60021bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018c60018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -10bd0018bd0018bd0018bd0018c60018c60018a8080c7518104e17103521182121181821181821 -1821211829291821211829216c7672364742576d67333631102118182921182121182121182121 -182121182121102121182121102121182921182121182121182121102121182121182121102121 -182121182121182121182121102121182121182921182921000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0021c60818c60018bd00 -18bd0018bd0018bd0021bd0021bd0021bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010c60018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018ce0021c60018b507188a0d0c751810601b -103521182921182129182129101821252f39182121101821182121182121182921182921182121 -182921182121182121182921182121182921182121182121182121182121182121182921182121 -182121182121182121182121182121182121182129182129000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0821bd0021bd0821bd0821c60821bd0818bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -10bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018ce0021ce0021c600 -18bd0018a808188a0d0c7518186d16104e17184418103521182921182121182121181821081821 -081821081821081821081821081821101821102118102121182121101821081821101821101821 -102121182121182121102121102121182921222929253021000000 -00000022b50b21bd0821bd0821bd0021bd0821bd0021bd0821bd0821bd0821bd0821c60821bd08 -18c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0018c60018bd0018bd00 -18bd0018bd0010bd0018c60010bd0010bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018ce0021ce0018ce0021ce0021c60018bd0018a80818a80818a808188a0d637e24 -966b1d8c5e206a59226a59226a592234483325463b1829311829213448334b572e4b572e4b572e -4b572e23395122393e6a59228e8c16c2920acfad02e4ab00000000 -00000022b50b22b50b21bd0821bd0818bd0021bd0821bd0021bd0821bd0018c60818bd0018bd00 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018c60010bd0018c60010bd0018c60010bd00 -18bd0018bd0018bd0010c60018bd0018c60018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018c60018c60021c60010c60090b112 -f2ad00f2ad00f2ad00d0780ac2920a88a87a29846d184d65263931266422637e2418a808637e24 -816e5a2345692345696a5922e4ab00e29423e4ab00f5b500000000 -00000022b50b21bd0821bd0821bd0021bd0821bd0021bd0821bd0018bd0818bd0018c60818bd00 -18c60018bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018c60010bd0018c60018bd0018c600 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0010bd0010bd0010bd0018bd00 -10bd0018bd0010bd0018bd0010bd0018bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0021bd0018bd0090b112 -e29602f5af30f5af30bf912e8b873b91875d649e6a18605c2339512931310c751808911a239a3a -655d513b5453234569584b42927820c2920ac2920ac2920a000000 -00000022b50b22b50b29bd0821bd0821bd0021bd0821bd0021bd0821bd0018c60818bd0018c608 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018c60018bd0018c60018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60010bd0018c60018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0010c60010bd0018c60010bd00 -18bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018c60018bd0018bd0018c60018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018c60018bd0021bd0021bd0018bd0090b112 -f8af56f8af56f8af56f8af5689bc5a649e6a7d957818605c224255293129185d28059835239a3a -4d5d573b54534e5c70184d6539494f3647425c4c514a4e50000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0821bd0021bd0021bd0018bd0818c60818bd00 -18c60018bd0018c60018bd0021c60818bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018c60010bd0018c600 -10bd0018c60010bd0018c60018bd0018bd0018c60018bd0018bd0010bd0010c60010bd0018bd00 -10bd0018bd0010bd0018bd0010c60018bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0021bd0018bd0091bf3b -f8af56eab65ef8af56f9b4667d95783fa46b8f8f7a29846d184d65252f39185d28059835189d2e -5f62665f6266687251655d513b5453244d50687251655d51000000 -00000022b50b21bd0829bd0821bd0021bd0821bd0018bd0021bd0018bd0818c60018bd0818bd00 -18bd0018c60018bd0018c60818bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018c60018bd0018c60018bd0018bd0010bd0018c60010bd00 -18c60010bd0018c60018bd0018c60018bd0018bd0018c60010bd0018bd0010bd0018bd0010bd00 -10bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd0018bd0018bd0018c60018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018c60018bd0018bd0021c60010bd0091bf3b -f9b466eab65eeab65ef9b466a899713fa46b649e6a576d67184d65252f39185d28059835239a3a -576d67655d517f5a58816e5a816e5a4a4e50606042906a58000000 -00000022b50b21bd0821bd0821bd0018bd0021bd0818bd0818bd0821bd0818bd0818c60818bd08 -18c60018bd0018c60018bd0818bd0018bd0818bd0018c60018bd0018c60018bd0018bd0010c600 -18bd0018c60018bd0018c60018bd0018bd0018bd0018bd0010c60010bd0018c60010bd0018c600 -10bd0018c60010bd0018bd0018bd0018c60010bd0018c60010bd0010bd0018bd0010bd0010bd00 -10bd0018bd0010c60010bd0010c60010bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018bd0018c60018bd0018c60018bd0021bd0010bd0091bf3b -fdca81f9b466fab77bfab77bd9ac7b88a87a818c64649e6a184d65252f39185d28059835189d2e -5f6266655d51816e5a906a587f5a585c4c514a4e50606042000000 -00000018b51022b50b21bd0821bd0821bd0818bd0821bd0821bd0821c60823bf1118bd0818bd08 -18bd0818bd0018bd0818bd0018bd0818bd0018bd0018bd0018bd0018bd0018c60818c60018bd00 -10c60018bd0018c60018bd0018c60018bd0018bd0018bd0010bd0018bd0010bd0018c60010bd00 -18c60010bd0018c60010bd0018c60010bd0018c60010bd0018c60010bd0010bd0010bd0018bd00 -10bd0010bd0010bd0010bd0010bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018c60010bd0091bf3b -fdca81ddc17efab77bfab77bd9ac7ba8997191875d649e6a234569293131185d28059835239a3a -687251655d5184603a96733a9b643884603a84603a84603a000000 -00000018b51021bd0821bd0821bd0018bd0821bd0818bd0821bd0821bd0818bd1018bd1018bd08 -18c60818bd0818c60818bd0818c60018bd0818bd0018bd0018bd0018bd0018bd0018bd0818c600 -18bd0018bd0018bd0018c60018bd0018c60018bd0010bd0010bd0010bd0018c60010bd0018c600 -10bd0018c60010bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010c60010bd0010c60018bd0018bd0018bd0018bd0018c60018bd00 -18c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018c60021bd0010bd0091bf3b -fdca81fdca81fab77bfab77bd9ac7ba89971a58f55818c643b5453252f39185d28059835239a3a -687251816e5a5c4c519b6438c2920ae29602e29602e29602000000 -00000018b51022b50b21bd0821bd0818bd0821bd0821bd0818bd0821bd0818bd1018c60818bd08 -18bd0818c60818bd0818c60818bd0818c60818bd0018bd0018bd0018bd0018bd0818c60018bd08 -10c60018bd0018bd0018bd0018c60018bd0018bd0018bd0010bd0010bd0018bd0018c60010bd00 -18c60010bd0018bd0010bd0018bd0010bd0018c60010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010c60010bd0018bd0018bd0018bd0018c60018bd0018c600 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0021bd0021c60010bd0089bc5a -fdca81fdca81fab77bd9ac7beab65ecbb06296733a91875d385777212931185d28059835239a3a -636f6b5f62665f6266966b1de29602cfad02f2ad00f2ad00000000 -00000022b50b21bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818c60818bd0818bd08 -18bd0818bd0821c60818bd0818c60818bd0818c60810bd0818bd0010bd0018c60018bd0810c600 -18bd0010bd0018c60010bd0018bd0818bd0018bd0010c60010bd0010bd0010bd0010bd0018c600 -10bd0010bd0010bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018c60010bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018c60021bd0021bd0010bd0091bf3b -fdca81ddc17efab77bfab77bcbb062d99755bf912e91875d4e5c70212931185d28059835239a3a -816e5a6c767239494f966b1de4ab00e4ab00f5b500f5b500000000 -00000022b50b21bd0821bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd0818bd08 -18c60818bd0818bd0818c60818bd0818bd0818bd0018c60010bd0018bd0010bd0010bd0018bd00 -10bd0018bd0010bd0018c60018bd0018bd0018bd0010bd0010bd0010bd0818c60018bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010c60010bd0010c60010bd0010bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018c60018bd0021bd0021c60010bd0089bc5a -fdca81fdca81fab77beab65ed99755e29423c2920aa58f55385777252f39185d28059835239a3a -7f8a51818c644e5c70966b1de4ab00e4ab00f5b500f5bd00000000 -00000018b51021bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd0818bd0818bd08 -18bd0818c60818bd0818bd0818bd0818bd0018c60010bd0018c60010bd0018bd0010bd0018c608 -10bd0010bd0018bd0010bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd0010c60018bd00 -10bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0021bd0010bd0091bf3b -fdca81fab77bf9b466f9b466f8af56e29423c2920aa479534e5c70293131185d2805983521a427 -816e5a91875d4e5c708c5e20e29602e4ab00e4ab00f5b500000000 -00000018b51022b50b21bd0821bd0821bd0823bf1121bd0818bd0821bd0818bd0818bd0818bd08 -18bd0818bd0818bd0818c60818bd0818bd0818bd0018c60010bd0018bd0010bd0018bd0010bd08 -18bd0010bd0018c60018bd0010c60018bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -18bd0010bd0018bd0010bd0818bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60018bd0010c60018bd0010c60018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0021c60010bd0091bf3b -fdca81ddc17ef9b466f8af56e29423d0780abf912ea58f554e5c70252f39266422059835617e3e -816e5a6c76724e5c706a5922e29423e29423f2ad00f2ad00000000 -00000022b50b21b51818bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd1018bd0818bd08 -18c60818bd0818c60818bd0818bd0818bd0818bd0810bd0818bd0010bd0018c60010bd0818c608 -10bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd0810bd0818bd0818bd0818bd0018bd08 -10bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0010bd00 -18bd0010bd0018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0021bd0010bd0091bf3b -fab77bf9b466f9b466f8af56cc742dd0780abf912ea282673b545325463b637e248b873b8b873b -8b873b7f5a584e5c705c4c51b0702eb0702eb16f14b16f14000000 -00000021b51821b51821bd0818bd0821bd0818bd0821bd0818bd0821bd0818bd1018bd1018bd08 -18bd0818c60818bd0818c60818bd0818bd0818bd0018bd0810bd0018bd0010bd0818c60810bd08 -18bd0810bd0818bd0018bd0818bd0018bd0018bd0010bd0818bd0810bd0810bd0810bd0810bd08 -18bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd00 -10bd0010bd0010bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0021c60010bd0091bf3b -fab77beab65ef9b466e29423e29602e29423b88d5b91875d39494f4b572e927820b16f14b16f14 -bf912e906a587f5a585f62665f62664a4e502339515c4c51000000 -00000018b51021bd0818bd0823bf1118bd0821bd0818bd0821bd0818bd1018bd1018bd1018bd10 -18bd0818bd0818bd0818bd0818bd0818bd0818bd0810bd0018bd0810bd0818bd0010bd0818bd08 -10bd0818bd0810bd0818bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0018bd0010bd00 -10bd0010bd0018bd0010bd0010bd0018c60010bd0010bd0018bd0018bd0018bd0010bd0091bf3b -fab77beab65ef8af56e29423d0780ae29423b88d5b91875d39494f8b873b9b6438b0702eb0702e -b16f14a479537f5a585c4c51655d517f5a585c4c515c4c51000000 -00000018b51022b50b23bf1118bd0818bd0818bd0821bd0818bd0821bd0818bd1018bd1018bd08 -10bd0810bd0810bd0818c60818bd0018bd0810bd0018bd0810bd0818bd0810bd0818bd0810c600 -10bd0010bd0818bd0010bd0818bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0018bd0010bd0010bd0018c60018bd0010bd0018bd0018c60008bd0091bf3b -fab77beab65ef9b466e29423d0780abf912ea282676c7672244d5096733a9b64389b6438cc742d -cc742da47953906a58655d515c4c51655d517f5a585c4c51000000 -00000018b51021bd0823bf1118bd0818bd0818bd0818bd0818bd0818bd0818bd1018bd0818bd10 -18bd0818bd1018bd0818bd0810bd0818bd0010bd0810bd0018bd0810bd0818bd0810bd0018bd08 -10bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd00 -10bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0010bd0091bf3b -fab77bf9b466d89076d99755d0780a8b873ba28267347382244d5084603a7f5a588c5e209b6438 -cc742da479537f5a587f5a5884603a7f5a587f5a585c4c51000000 -00000018b51021b51821bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd1018bd1010bd08 -18bd1018bd0818bd1018c60818bd0010bd0818bd0010bd0810bd0018bd0810bd0018bd0810bd00 -10bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0818bd0010bd0010bd00 -10bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0018bd0008bd0091bf3b -f9b466f9b466f8af56e29423966b1d6872518f8f7a287b71224255637e24906a5884603a8c5e20 -b0702e906a587f5a589b6438cc742dd0780ad0780ad0780a000000 -00000018b51022b50b18bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd1010bd1018bd10 -18bd1018bd1018bd0818bd0810bd0818bd0810bd0018bd0010bd0810bd0010bd0810bd0010bd08 -10bd0810bd0010bd0010bd0810bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd00 -10bd0018bd0010bd0010bd0018bd0010bd0018c60010bd0018c60018bd0018bd0008bd0091bf3b -fab77bd99755f8af56cc742d8b873b818c646c76720278812242553b545368725184603a96733a -816e5a5c4c51655d51b0702ec2920ae4ab00e4ab00f5bd00000000 -00000018b51018b51018bd0818b51018bd0818bd0818bd0818bd0818bd1018bd0818bd1010bd08 -18bd1010bd1018bd1018bd1018bd0818bd0810bd0810bd0010bd0010bd0010bd0010bd0810bd00 -10bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0008bd0091bf3b -f8af56f9b466d99755d9975591875d8f8f7a287b710c5a6c184d6518605c4976516872514d5d57 -4a4e503b54534a4e50966b1de4ab00e4ab00f5b500f5bd00000000 -00000018b51018b51018bd0818bd0818b51018bd0818bd0818bd1018bd0818bd1010bd1018bd10 -10bd1010bd1018bd1018bd1018bd1018bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0018bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0008bd0091bf3b -f8af56f5af30e29423d99755a28267707d7b287b71184d6518605c244d50224255244d50244d50 -244d503b5453224255966b1de29602e4ab00f5bd00f5bd00000000 -00000018b51021b51818bd0818b51018bd0818bd0818bd0818bd0818bd1018bd1010bd1010bd10 -10bd0810bd0810bd1018bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0008bd0090b112 -f5af30e29423d99755a899718f8f7a5d727c184d6523456922425523395125463b22393e25463b -18605c244d50224255966b1dcfad02e4ab00f5b500f5bd00000000 -00000018b51018b51018b51018bd0818bd0818bd0818bd1018bd1018bd0818bd1010bd1018bd10 -18bd1018bd0818bd1018bd1018bd1018c60810bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd00 -10bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0018bd0018bd0000bd0090b112 -f5af30e29423bf912ea89971707d7b18605c234569234569244d5022425522393e21313125463b -244d50244d502242556a5922c2920ae4ab00e4ab00f5b500000000 -00000018b51018b51018bd0818b51023bf1118bd1018bd1018bd1018bd1018bd0810bd1010bd08 -18bd1018bd1018bd1018bd1018c60818bd1010bd0818bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -08bd0010bd0008bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0000bd0090b112 -f5af30e4ac2ca58f558f8f7a5d727c184d65184d6523456922425522425523395126393125463b -3b54533b545339494f584b42b16f14d0780ae29602e29602000000 -00000018b51018bd0818b51018bd0821b51823bf1118bd1018bd1018bd1018bd1018bd0818bd10 -10bd0818bd1018bd1018c60810bd0818bd0818bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0018bd0008bd0090b112 -cfad02bf912ea89971649e6a184d6522425523456922425522425522425523395125463b244d50 -3b54534a4e506060424a4e505c4c5184603a8c5e209b6438000000 -00000018b51018b51018bd0818b51018bd1018bd1018bd1018bd1018bd1018bd1010bd0810bd08 -18bd0810bd0810bd0818bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd08 -10bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -08bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0000bd004cb50a -e4b210a58f557d95784e5c70184d6518605c184d6523456922425523395122393e25463b25463b -3647424d5d57606042655d5160604284603ab0702e9b6438000000 -00000018b51018b51021b51818bd1018bd1021b51818bd1018bd1018bd1018bd1010bd1018bd10 -10bd0810bd0810bd0818bd1010bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd08 -10bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd00 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0008bd00 -10bd0008bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd004cb50a -bf912e88a87a4096510b627c18605c18605c18605c184d6522425525463b22393e25463b25463b -4b572e606042816e5a606042655d5184603ab16f14b0702e000000 -00000018b51021b51823bf1118b51018bd1821b51818bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd08 -10bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd08 -08bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd004cb50a -91875d3fa46b0b627c05775605775604787018605c18605c184d6525463b25463b183e33266422 -36474260604284603a60604284603a84603a8c5e209b6438000000 -00000018b51018b51018b51021b51818bd1021b51818bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0818bd10 -10bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd00 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0008b50810bd0008bd0010bd00 -10bd0008bd0010bd0808bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0048b334 -3da88302788104787005775605775618605c057756184d65244d5022425525463b263931344833 -4b572e60604296733a84603a966b1db16f14b16f14cc742d000000 -00000018b51018b51018bd1818bd1021b51818bd1018bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd1010bd1018bd0810bd0810bd0810bd0810bd0818bd0818bd0818bd0810bd0810bd08 -10bd0810bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0810bd0010bd0010bd0010bd0010bd0008b50810bd0008bd00 -10bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c600239a3a -0278810478700478700478700c5a6c18605c0c5a6c184d65184d6522393e22393e263931263931 -4b572e84603a96733a9b6438c2920ae4ab00f2ad00f2ad00000000 -00000018b51018b51018b51018bd1818bd1018bd1821b51821b51818bd1018bd1010bd1010bd10 -10bd0818bd1010bd0818bd0810bd0818bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd00 -10bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0008b50810bd0008bd0010bd00 -10bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018c60006aa47 -01877b00967b01877b01877b0478700478700b627c0c5a6c23456922425522393e22393e25463b -4b572e84603a96733ab16f14e29602e4ab00f5b500f5bd00000000 -00000021b51821b51821b51818bd1818b51818bd1018bd1018bd1018bd1018bd1018bd1810bd10 -18bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd08 -10bd0010bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0808bd0010bd0010bd0010bd0010bd0008bd0010bd0810bd0008bd00 -08bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00898800948400898801877b01877b0478700478700c5a6c23456923456923395122393e263931 -4b572e617e3e9b6438b16f14e4ab00f5b500f5bd00f5bd00000000 -00000021b51821b51821b51818bd1818b51018bd1818bd1818bd1018bd1818bd1010bd1018bd10 -10bd0818bd0810bd0818bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0810bd00 -10bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948400898801877b01877b0478700478700b627c184d6523456923395122393e25463b -4b572e60604284603ab16f14e4ab00f5b500f5bd00f5bd00000000 -00000025b52121b51821b51818bd1018b51818bd1018b51821b51818bd1018bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0008bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d00898800898801877b0478700478700b627c0c5a6c23456922425523395122393e -3b545360604284603ab16f14cfad02f2ad00f5bd00f5bd00000000 -00000025b52125b52121b51818b51018b51018bd1821b51818bd1818bd1018bd1010bd1018bd08 -10bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd00 -08bd0010bd0010bd0010bd0008bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948400898801877b0278810478700b627c0c5a6c23456923456922393e22393e -3b545360604296733a966b1de29602e4ab00f2ad00f5b500000000 -00000021b51821b51821b51818b51818b51018b51018bd1818bd1818bd1018bd0810bd0810bd08 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d0094840094840094840089880278810278810b627c0c5a6c23456923456922393e25463b -364742655d5184603a96733a966b1dd0780ad0780ab16f14000000 -00000018b51021b51821b51821b51818bd1821b51818bd1018bd1018bd1010bd1010bd0810bd08 -10bd0810bd0810bd0810bd0810bd0810bd0818bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948d00948401877b0278810478700b627c0c5a6c234569234569233951263931 -39494f655d5184603a96733a9b643896733ab0702eb0702e000000 -00000018b51018b51021b51821b51821b51821b51818bd1018bd1018bd1010bd0810bd0810bd08 -10bd0810bd0010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0008bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d0094840094840089880278810278810b627c0b627c184d65224255224255233951 -39494f655d51816e5a96733aa479539b64389b64389b6438000000 -00000021b51821b51821b51821b51818bd1018bd1818bd1018bd1018b51010bd1010bd0810bd08 -10bd0810bd0810bd0810bd0010bd0010bd0010bd0810bd0810bd0810bd0810bd0810bd0810bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd00 -10bd0010bd0010bd0010bd0808bd0010bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd00 -08bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948400948d0089880089880278810278810b627c234569224255233951224255 -3b54535f6266816e5a96733aa4795384603a9b643896733a000000 -00000018b51021b51821b51821b51818b51818b51818bd1018b51018bd1010bd1010bd0810bd08 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -10bd0008bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d00948d00948d0094840089880278810278810b627c184d6523456922393e224255 -39494f655d51816e5a906a58906a5884603a9b64389b6438000000 -00000018b51018b51021b51818b51018b51018b51018b51018b51018b51810bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd00 -10bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0010bd0008bd00 -10bd0008bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948400948400948d00948d0089880089880089880278810b627c23456922425522425525463b -3b54535f6266816e5aa47953bf912ee29423e4ab00f3b50f000000 -00000018b51018b51025b52118b51018bd1018b51018bd0818b51018bd1010bd0810bd0810bd08 -10bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd0008bd00 -10bd0008bd0010bd0008bd0008bd0008bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd00 -08bd0008bd0008bd0010bd0008bd0008bd0008bd0008bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d0094840094840094840094840089880278810278810b627c234569233951233951224255 -3b54536c7672816e5a96733acbab21e4b210f3b50ff5bd00000000 -00000018b51023ad2325b52121b51818b51018bd1018b51018bd1018b51010bd0810bd0810bd08 -10bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0008bd0010bd0008bd00 -08bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd0008bd0010bd00 -08bd0010bd0008bd0008bd0008b50008bd0010bd0010bd0008bd0008b50008b50008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948400948400948400948400948d0089880278810b627c23456923395126393125463b -3b54535f6266816e5a96733ae4ac2ce4b210f5bd00f5bd00000000 -00000018b51021b51825b52118b51018bd1018b51018b51018b51010b50810bd0810bd0810bd08 -10bd0810bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd0008b50808bd0008b50008bd00 -08b50010bd0010bd0010bd0010bd0010bd0008bd0008bd0008b50008bd0008bd0008bd0008bd00 -08bd0008b50008bd0008b50008bd0008b50010bd0008b50010bd0008b50008bd0008b50008b500 -08b50008bd0008bd0008bd0008bd0008bd0008bd0008bd0008b50010bd0008bd0010bd0008bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -00948d00948400948400948d00948d00948d00948d0089880b627c23456922393e22393e224255 -184d653857775f6266927820cbab21f3b50ff5bd00f9c800000000 -00000009a70818b51018b51018bd1018b51018bd1018b51010bd0810b50810bd0810bd0810bd00 -08bd0010bd0010bd0010bd0810bd0010bd000baf1407aa320aa92110bd0008bd0010bd0008b508 -08b50810bd0008bd0010bd0010b5080aa92110b50008a6290baf1408b5080aa9210aa92110bd00 -08b50808b50810bd0008bd0008b50008bd0008b50010bd0008b50008bd0008b50008bd0008bd00 -08bd0008b50008bd0008bd0008bd0008bd0008bd0008bd0008bd0010bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00967b109c843da8833da88362a78800898800948d0278810b627c234569233951224255 -3857773857775f626696733acbab21e4ab00f5bd00f5bd00000000 -00000010b50810b50818b51018b51018bd0810b50810bd0818b51010bd0810bd0810bd0810bd08 -08bd0008bd0010bd0010bd0810bd0010bd000baf1405974b08a6290baf140aa9210aa9210aa921 -0aa9210aa9210aa9210aa9210aa92108a62910b50005974b0baf140baf1408a62908a62908a629 -0aa9210aa9210aa9210aa92108a6290aa92110bd0008b50008bd0008b50008bd0008b50008bd00 -08b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010bd0010bd0008bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -00948d109c8462a78888ad9784948c8c9794839598287b7b008988296598234569184d65385777 -4e5c705d727c385777606042cbab21cbab21f3b50ff6cb11000000 -00000009a70818b51018b51018b51010b50818b51010b50810bd0818b51010bd0010bd0810bd00 -08bd0008bd0010bd0010bd0010bd0810bd000baf14059835189d2e07aa3208a62908a6290aa921 -07aa3205983522a63208a62907aa320aa92110b5080598350baf1407aa3208a629189d2e07aa32 -08a629189d2e08a629189d2e0598350aa92108bd0008b50008bd0008bd0008b50008bd0008b500 -08bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010bd0010bd00 -08bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -109c844eb58870b68ca1ad9eabb37ea899717d81825d727c0b627c0c5a6c234569184d65184d65 -4e5c705d727c3857773b545384603abf912ec2920ac2920a000000 -00000010b50818b51018b50710b50818b51010b50818b51010b50818b51010bd0810b50810b508 -10b50010b50008b50010bd0810b50010bd0010b5080baf140baf140baf1410b50810b50810b508 -09a70818b51010b50810b50810b50808b50810b50808b50808b50810b50810b50808b50808b508 -08b50808b50808b50008b50008b50008b50010b50008b50008b50008b50008b50008b50008bd00 -08b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010b50008bd0010bd00 -08bd0008bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -23a57970b68c88a87aabb37eddc17e91875d4b572e4096516a925442863d42863d49765142863d -4d5d575d727c5d727c4e5c703857774a4e507f5a5884603a000000 -00000010bd0018bd0018bd0010bd0010bd0010bd0010c60018bd0810c60010c60010c60010c600 -10c60008bd0010c60010bd0010c60010c60010c60010c60010c60010c60008bd0010c60010bd00 -10c60008bd0010c60010bd0010c60010bd0008bd0010c60008bd0008bd0008bd0008bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0008b50008bd0008b50010bd0010b50008b500 -10b50010b50010b50008b50010b50010bd0008bd0010bd0010bd0010bd0010bd0010bd0007aa32 -3da88385c176afb869eab65efab77ba58f5540965163c74d70d7566cc95150bf4f42863d63c74d -4976515d727c5d727c5d727c4e5c706c7672816e5a96733a000000 -000000186d16186d16186d16186d16186d16186d16186d16186d16186d16186d1610601b10601b -186d16186d16186d1610601b10601b10601b185d2810601b10601b10601b10601b10601b185d28 -10601b10601b185d2810601b104e1710601b104e17104e17104e17104e17104821104e17104e17 -104821104821104821104821104e17104821185d28104e17104821104821104821104e17104821 -104821104821104821104821104821104821104821104821104821104821104821104821104821 -103521183e33103521188a0d08bd0008b50008b50008b50008b50008b50010b50010bd0007aa32 -3da88388a87aafb869eab65ef9b466a8997142863d63c74d70d7566cc95148b33442863d50bf4f -4976515d727c5d727c5d727c347382385777584b42606042000000 -000000182131182131182131182131182131182131182131182131182131182131182131182931 -182131182131182131182131182131182131101829102129102129101829182131182131182129 -101829182131101829102129182131182129182129182129182129102129102129182131182129 -182129102929101821102129101821101821101829182129182129101821101821182129102129 -182129102129102121102129102129182129182129102121101821102129102129102129182129 -1829291829291018290c751808bd0008b50008bd0008b50008b50008b50008b50010bd0007aa32 -3da88385c176cbb062eab65ef9b466a58f5542863d42863d617e3e42863d42863d42863d48b334 -687251738085738085385777707d7b4e5c7039494f4d5d57000000 -000000182929182929213131364742182929102929102929102929102929213131102929102929 -18292910292921313126393110292118292939494f36474222393e25463b213131102121102929 -25463b18292936474221313110212110292918292910292910212121313125463b102929182929 -1029291829293b545321313136474239494f10292118292910212136474239494f102921182929 -10292121313122393e29313122393e18292910292925463b364742182929213131263931213131 -1029291829291021290c751808bd0008b50008b50008b50008b50008b50010b50008bd0007aa32 -23a57985c176afb869eab65efab77ba58f5563c74d6cc95150bf4f63c74d63c74d63c74d6cc951 -497651738085818c8c7d8182b88d5bb88d5bbf912ebf912e000000 -00000021313118292939494fa3b8af707d7b636f6b7380855d727c6c7672738085738085707d7b -707d7b707d7b738085839598707d7b364742707d7b84948c818c8c839598818c8c818c8c707d7b -929b9c18292983959873808584948c6c76726c7672707d7b839598738085818c8c818c8c213131 -818c8c818c8c818c8c22393e929b9c929b9c818c8c929b9c3647427d81823b5453576d67576d67 -3b5453364742a3b8af929b9c929b9c839598818c8c7d8182839598929b9c818c8c738085818c8c -1021211829291821290c751808bd0008b50008b50008b50008b50008b50008b50010bd0007aa32 -18a27588a87aafb869cbb062f9b466a58f5548b3346cc9516cc9516cc9516cc9516cc9516cc951 -4976517d8182a28267d89076cbab21e4b210f5bd00f5bd00000000 -00000021313118292939494f636f6b576d67636f6b8c9794818c8c818c8c7380858c97947d8182 -8c9794707d7b818c8c707d7ba3b8af4a4e503b54536c7672636f6b6c76727d8182738085707d7b -707d7b222929576d67707d7b6c7672636f6b5f62664d5d57707d7b4d5d57576d676c7672213131 -707d7b5f6266364742293131636f6b576d67636f6b636f6b222929576d67364742293131213131 -2131293336313336314d5d576c7672636f6b5f62663b54535f62665f62663b54533647424d5d57 -1021212131291021290c751808bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00967b649e6a88a87aafb869cbb06291875d40965142863d70d75670d75670d75670d75670d756 -617e3e7d8182a28267d89076e4ac2cf6c329f6c329f6cb11000000 -000000182929182929212931182929182929182929182929182931182929182929182929182929 -1829291829291021291829294d5d57213131182929102929102129182929102121102129102121 -182929182929102121102121102121102121102121102121102121102121102121102121102929 -102121102121102121102129102121101821081821102121102121101821102121102121102121 -102129102129102121101821081821101821101821102121101821102121101821102121101821 -1821291021291018210c751808bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00967b25a758649e6a88a87aabb37e7f8a5142863d42863d42863d42863d42863d42863d42863d -4d5d57a28267a28267d99755f5af30f6c329f6cb11f6cb11000000 -000000182129182931182929182931182931182931182129182929182129182931182929182929 -102129182929182929182929102121102129182929182929182929102929182929182929182929 -102929182929182929102929102929103521182929103521102929213129103521103521103521 -213129103521213129103521103521103521213129103521103521103521103521213129183e33 -103521103521103521183e33103521103521104821103521103521104821103521104821104821 -103521104821103521188a0d08bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00948402946f299452649e6a88a87a7d9578707d7b29846d027881296e8723456918605c497651 -818c64a89971d89076bf912ef5af30f6c329f6cb11f6cb11000000 -000000188a0d188a0d08911a188a0d08911a0a980808911a0a980808911a0a980808911a0a9808 -08911a0a980808911a0a98080a98080a98080a98080a98080a98080a98080a980809a70809a708 -09a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a708 -00b50009a70800b50009a70809a70809a70800b50009a7080aad000aad000aad000aad000aad00 -0aad000aad000aad000aad0008b50008b50008b50008b50008b50008b50808b50008b50008b508 -08b50008b50008b50008b50008b50008b50008bd0008b50008b50008b50008b50008bd0007aa32 -00948400948402946f18a27570b68c62a7888bc1a33da8837380858395988395983da883839598 -a1ad9ea1ad9ed9ac7ba47953e4ac2cf6c329f6c329f6c329000000 -00000008b50808b50010bd0010bd0010b50010bd0010bd0010bd0008bd0008bd0008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd00 -00b50008bd0008bd0008bd0008bd0008bd0008b50008bd0008bd0008b50008bd0008bd0008b500 -08b50008bd0008b50008bd0008b50008b50008b50008bd0008b50008b50008b50008b50000b500 -08b50000b50008b50008bd0008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b00967b01877b00948d0089880278810278810b627c0c5a6c0c5a6c0c5a6c3e8227 -816e5a91875db88d5bb0702ec2920ae29423e4b210e4b210000000 -0000000aad0009a7080aad0010b50010b50009a70810b50008b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008bd0008b50008b50008b50008b50008bd0007aa32 -00948400948400948401877b01877b01877b0278810b627c4976518b873b8b873b2479523b5453 -687251906a58a47953a4795384603a966b1db16f146a5922000000 -0000000aad0010b50010b50010b50010b50010b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b00898800948401877b01877b047870cbab21f9c800f9c800f9c800e4b2108b873b -816e5a816e5a816e5a816e5a906a589b6438b0702e606042000000 -0000000aad000aad000aad0008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50000b50008b50000b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b01877b01877b01877b04787090b112f9c800f5bd00c2920a927820cfad02c2920a -8b873b6c7672816e5a816e5aa28267906a5884603a655d51000000 -0000000aad000aad0010b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50000b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50000b50008b50008b50008b50008b50000b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b01877b02946f01877b278263e4b210f5bd00cfad029278206a5922cfad028e8c16 -bf912e816e5a816e5aa28267816e5a5c4c516060424a4e50000000 -0000000aad000aad000aad0010b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50000b50008b50008b50008b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50000b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -02946f00967b01877b01877b01877b278c56f9c800cfad02c2920a8e8c168c5e20c2920acfad02 -cbab21816e5aa28267906a58a47953b88d5b9b6438bf912e000000 -0000000aad000aad0010b50010b50010b50010b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50000b50008b50000b50008b50008b50008b500 -08b50008b50008b50000b50008b50000b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50023ad23 -109c8401877b00967b01877b01877b278c56cbab21c2920af9c800c2920a6a5922e4b210f9c800 -cbab21816e5a816e5a906a58cbab21e4ac2cf3b50ff6c329000000 -0000000aad000aad0010b50010b50010b50010b50010b50010b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -00b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50025b521 -649e6a02946f01877b02946f00955f00955f8e8c16f5bd00f9c800cfad02cfad02f5bd00f6cb11 -b0702e906a58655d5196733ae4ac2cf6c329f6c329f6c329000000 -0000000aad0010b5000aad0010b50010b50010b50010b50010b50010b50808b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50000b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50031bf0d -91bf3ba58f553fa46b3fa46b409651649e6a6a9254cfad02f5bd00f5bd00f9c800f5bd00c2920a -cc742da4795384603a8c5e20e4b210e4b210f6cb11f6cb11000000 -0000000aad000aad0018b50710b50010b50010b50010b50010b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b5004cb50a -cfad02cbab21cbb062bf912ecbab21cbab21cbb062cbab21cfad02cfad02e29602d0780abf912e -e29423cc742d84603a8c5e20e4b210e4b210f6cb11f6cb11000000 -0000000aad0018a80810b50010b50010b50010b50010b50010b50010b50008b50010b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50010b50000b5004cb50a -f5bd00f6cb11f5af30e4ac2ce4ab00cfad02e4b210f6c329e4ac2ce4ac2ce4ac2ce29423e29423 -d0780ad0780ab16f14966b1de29423e4b210e4b210f6cb11000000 -0000000aad0010b50018a80810b50010b50010b50010b50010b50010b50008b50008b50010b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b5004cb50a -f5bd00f6cb11f6c329f3b50ff5b500f5b500f5b500e4ab00f3b50ff3b50fe29423e29602d0780a -d0780ad0780ad0780a8c5e20b16f14c2920abf912ec2920a000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/realmen.gif b/Docs/Books/realmen.gif deleted file mode 100644 index 41cb7d0e5ae66b7a1f9e7447c93fd9ec07a1ee45..0000000000000000000000000000000000000000 Binary files a/Docs/Books/realmen.gif and /dev/null differ diff --git a/Docs/Books/realmen.txt b/Docs/Books/realmen.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Books/sql-99.eps b/Docs/Books/sql-99.eps deleted file mode 100644 index df55f1ad06ba72cc0edabcdf206159a78f9847b5..0000000000000000000000000000000000000000 --- a/Docs/Books/sql-99.eps +++ /dev/null @@ -1,1248 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/sql-99.eps -%%CreationDate: Sun Dec 31 14:31:42 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 288 383 -%%EndComments -%%BeginPreview: 100 135 1 135 -% fffffffffffffffffffffffff0 -% ffffffbddb55b6db5555aad6d0 -% d555556b6efb6db6fbbb775b50 -% efffffdedbaedb6dad6dad6df0 -% daaaaab5b6f5b6db56d6dbb6b0 -% ef7fffeeedaf6db6fb6db56dd0 -% b1a2aabb5b7adb6b555b6edb70 -% c0419f60e1d06dadad2d556db0 -% a48895a040a25b76f71b4bb6d0 -% c78c9b664ce7e6894934c65b70 -% a1188ec648a2810041100016d0 -% e08c9b644ca6992248a244cdb0 -% b8540c1040e389264c104c0b50 -% d60c9a1060a5182248a0440ef0 -% ac488bfe596391264897ccfb50 -% 60c08140c1b0412241104002d0 -% a160a5b1a6d046664188421370 -% bfbefeef7b6ffbbd8ef7bde5b0 -% 6ad5ab5ad6daad6acb556b56d0 -% b77b75af6db76b5756ddb6bb70 -% 60d6dc4adb6dbdedbab76dd6d0 -% a03db49db6db6b5ad76ddb7bb0 -% a6634c8b6db6d6b76db6b6ad70 -% 622104929b6dbb6d5adbdb6bd0 -% a04ca49136db6ddbb76d6ddeb0 -% 60c0a4892db6d6b56dbbb6b5d0 -% a44104993b6dbb6edad6db6f70 -% 624f30886ddb6db5b77db6dad0 -% a600044c5b6edadb6dab6db7b0 -% e561924476db6db6db7edb6d70 -% 5fbf7fbedbb6db6db6d5b6dfd0 -% 756ad5606d6db6db6dbf6db570 -% dedfbfd9dbdb6db6db6adb7fd0 -% 6bb56ab776b6db6db6ddb6d570 -% b557feeadb6dbdb6dbb76dbfd0 -% 6aec95bab5db76edb6dadb6ab0 -% d6ab6b55556eedbf6db777ffd0 -% 75dadd5b6adbdefadb6ddd5570 -% aaaaab7556bdb5ef6edb37ffd0 -% bf6efaab55eb7ffdddb66d5550 -% 6abbabfeff5fdffffbedbbfff0 -% ab6efe95aab57bb7ff76eeaab0 -% 7555abad6d6efeed5feab5ffd0 -% aaaaaab5b6bbfdbbb5fddf5570 -% 6ddddbab54eafbd6eeb575ffd0 -% b5555ad6a9bbf6bfbbefdf5570 -% 6dddabb5abeffdeffeabfdffd0 -% b6b77eff76b5eb5fdfbdf75570 -% 6dadabaacbaff6ffff5f7effd0 -% d56dbeffae1bdbbfffbfafaab0 -% 6baad2aa9a97f57ffebf7ffff0 -% b575aeff6c3fedfffeffd5d550 -% 6badd5555957f57ffdffbfffd0 -% d6db7bfe747feb7ffaffd57b70 -% 7dbed6aad1d5fd7ff5fff7afd0 -% 57ebfff9a57df5ffebffeb7ff0 -% e95aaaab69d6f57fefffffd5d0 -% 5756afeac379aabfdffffff770 -% faed75578fd1777fafffffdad0 -% 5555afd52ab2debf7fffc16dd0 -% ed7aeaae97e06b5ebfff3f5af0 -% 5bd7bf5a2e84bfaeffff45aff0 -% 777d6ab55da1edbd7ffebef5f0 -% ddd7deda7b0abfa2fffd255ad0 -% 6abab574deb3ef5dfffa955550 -% d54feda9b52abd6bfffaaaaab0 -% 6add5ad2fc4ffed5fffa8d5550 -% 6db7f3a5a9957b5bfffaa35550 -% d7faaea7fa26f5557ffd4aaab0 -% 6debd54d52e9f73efffca19550 -% d7faaf57e5036dd75ffa955550 -% 6eabb51eaad6dabffffea8aab0 -% dad55d75c90b557fdfff285550 -% 7cd5b45f16adbbdfafff552950 -% 76aaf576b51b6f6f4bff2a1550 -% ffc9a8de4276dabee7ffd50d50 -% b77eebbaa8adb7ff52ffe28b50 -% 7ef3a2f48a76debdb9ffea52b0 -% ffeaabd952db7bfb6d7ff52150 -% 6dd7a77335b6d6f6d75fe888b0 -% 7fdd4ee4c2dbbfedbbbffe5250 -% ff569dcd576d75fb2feffb0810 -% 6dad77a94adbefd65bebff5350 -% ff5bff5597b77fbd06f7ff8950 -% 7e7bff122d6dd7ea6bfaff5550 -% aad75feebbbf7f58b1f57eb550 -% 556ebfc456d5dff34bfbbd7a90 -% 8aab5fd57b7f7ea4a7eebbfd50 -% b0556398d6d6ffea8fdb57fa90 -% 7f895d32bdfdfd415fb6eff5b0 -% ff7a9265eb5bff961fefb9efd0 -% 6eaf7d535efffaaa7fbafeebd0 -% fe1ddb4bf5d7ff14bfeffeb7d0 -% 797bff57dbbff45a7fdaafbfd0 -% 6c5f579fef77fd28fffcff6fd0 -% fdf6bdebfbeff463ffd52fb7f0 -% 7cbe577feebff9aafff25adbd0 -% effcaefdfdffe2a7ffe907b550 -% 7efa55d7efbfea8bffd257fed0 -% f7f8a97fbbffc557ffa49fab50 -% 7ff355ddff7fab1fff8f2fffd0 -% 6fe57377f7ff8c7fff285f7dd0 -% fdcbeaddbfff32bffd557fefd0 -% dfa6dfb7fffe48fffe54bfffd0 -% 7bcfb57eeffcaafff8b2fedab0 -% 7faaefd7fffd51fff525fffad0 -% edffbabf6ff8a7fff293fdb450 -% 7fed6ffbfff2cbffe8a7fff290 -% fbbefab7ffe557ffc32fbec930 -% 6fb5d7ff7fca8fffad4fffd250 -% 7ebfbd6fffd6bfff551eff9490 -% ed6aebfdff8a2fff0abffd4230 -% 7fbbbfdfff257ffeb47fff2950 -% d5576b7bfe58bffc297ffccad0 -% 7feddffffd557ffd52fefaa150 -% f6bfbbdffcd1fff8a9fff9aad0 -% 5ff7fffff96bfff2a5fff54bd0 -% ff6ffffff2c5ffe993ffe297d0 -% 6dffbffff557ffd2a7ffd74dd0 -% d55fffffe50fffc68fffaa2fd0 -% 557f7fffd55fff955fff955fd0 -% 557fffffacbfff363ffd34bfd0 -% d77bfffbeabffaa977df527f50 -% c97d6db75abb7a556ed5557fd0 -% 537b6b7d6aeefaaadbead57df0 -% 557b6ff5aadab65575dd55ffd0 -% d57ffdfd77fff9abdff557ffd0 -% ddfffffdcbfff287fbe997ffd0 -% 7beffff757ffe5afffd64effb0 -% 7fbdfffdcfffca9fffd52fff90 -% edfffeffdfff952fff9a5fff30 -% 7bb6ffffffff4a5fff353ffe50 -% efffffbf5ffe9abffea8bffc90 -% 7ffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -272.965879 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 135 8 -% Transformation matrix -[ 100 0 0 135 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -00000052526b4a526b4a526b4a526b4a526b4a526b4a526b4a526b4a526b464a604a52634a526b -52526b4a526b4a526b4a526b4a526b52526b52526b52526b525a6b52526b525a6b525a6b525a6b -525a6b525a6b525a6b4a5a6b5a5a6b525a6b525a6b5b5a735a636b5a636b5a636b636373626b73 -5a636b626b6b626b6b6b737a74767882858c7476786b737a6b6b725a63735a636b63636b63636b -626b7363637363636b6b6b726b6b72626b6b626b736b6b72626b6b626b6b626b73626b6b747678 -6b6b727476786b6b727476787476787476787476787476787476787476787476787476786b6b72 -6b6b726b6b726b6b72747678626b6b747678626b6b7476786b6b726b6b72747678626b6b6b6b72 -626b6b6b6b726b6b7263636b626b6b63635f5a5a5a626b6b000000 -0000004a526b52526b4a526b4a4a6b424a6b464a60464a60464a60464a604a4a6b4a526b4a526b -4a526b4a526b4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a526b464a604a526b4a526b4a52634a5263 -52526b525a6b525a6b4a526b525a6b52526b525a6b525a6b525a6b5a636b525a6b5a636b525a6b -525a63525a6b525a6b5a636b5a636b5a636b5a63735a636b52636b525a63525a63525a6b5a5a63 -525a635a5a6b5a5a635a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b -63636b5a636b5a636b63636b63636b63637363636b63636b63636b63636b63636b63636b636373 -63637363637363636b6363736363736363736c6373636373636373626b73626b6b6b6b72626b73 -63637363637363637363637363636b5a63735a5a6b767984000000 -000000525b735b5a735b5a73525a6b52526b52526b52526b525a6b52526b525a6b525b7352526b -4a526b4a526b4a526b4a526b4a4a6b424a6b4a526b4a4a6b4a4a6b4a52634a526b4a526b52526b -525a6b52526b525a6b525a6b525a6b525a6b525a6b525a6b525a63525a6b525a63525a63525a63 -525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63 -525a6b5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a63605a636b5a636b63636b5a636b5a636b -5a636b5a636b5a636b63636b635a6b63636b63636b5a636b5a636b63637363636b5a636b5a636b -63636b63636b5a6373636373636373636373636373636373636373636373636373636373636373 -5a636b5a636b5a63735a636b5a63735b5a7352526b686b7d000000 -0000005b5a73525b735b5a73525b735b5a735a63735a63735a6373525b735a5a6b525a6b525273 -4a526b52526b4a526b4a4a6b4a4a6b4a4a6b4a52634a526b4a526b4a526b52526b525a6b4a526b -52526b4a526b525a6b525a6b5a636b525a6b52636b525a6b525a63525a6b525a6b525a63525a63 -525a6b525a63525a63525a63525a63525a63525a63525a6b525a63525a6b525a6b525a63525a63 -5a5a635a636b5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b5a636b63636b5a636b5a636b -5a636b5a636b5a636b63636b63636b63636b63636b63637363636b636373635a6b63636b5a6373 -5b5a735b5a735a637363637363636b63637363636b6363736363736363736363736363735a636b -6363735a636b5a636b5a636b5b5a735a5a6b525a6b686b7d000000 -000000525b73525b735a63735a6373525a6b525a6b525b735a6373525a6b5b5a73525b734a4a6b -4a526b4953744953744a4a6b4a4a6b424a6b4a4a6b4a4a6b4a52634a526b4a526b52526b52526b -525a6b525a6b5a5a6b5a636b5a636b5a636b5a636b5a636b525a6b5a636b5a5a6b5263635a636b -525a6b525a6b525a63525a63525a63525a6b525a634a5263525a63525a6b525a6b525a6b5a5a63 -5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b63636b63636b63636b5a636b636373636373 -63636b5a636b63636b63636b6363736363736363736363735a5a6b6363736363735b5a735a636b -63636b6363735b5a7363637363637363637363637363637363637363636b63637363636b636373 -63636b5a636b5a63735b5a73525a6b5b5a7352526b686b7d000000 -000000525b735a63735a63736b737a8789958789956b737a52636b5a6373525a6b686b7d82858c -7679844a526b4a526b4a526b5252735b5a734a526b4a526b4a4a6b4a526b52526b525a6b525a6b -525a6b525a6b525a63525a6b5a636b525a63525a6b5a636b5a636b4a5263525a63525a6b4a5263 -525a6b525a63525a6b525a63525a6b4a5263525a6b686b7d5a636b4a525a5a5a6b5a5a6b5a5a6b -5a5a6b5a636b5a636b63636b63636b63636b63636b6363735a636b63636b6363735a636b63636b -63636b63636b63637363637363636b63637363636b6b6b7282858c686b7d63636b636373636373 -63637363637363636b63637363636b5a5a6b6363736363736363736363736363736363735a6373 -5a5a6b5a63735a636b5b5a735b5a735b5a734a526b65637f000000 -000000686b7d5a6373949d9eeae9ecffffffffffffffffffa4a8ae525a6b949d9ef6f5f8ffffff -ffffffcacad15a6373464a60b7bdbceae9ec686b7d4a526b52526b525a6b525a6b5a5a6b5a636b -5a636b525a6b9ca0a3eae9ecf6f5f8b7bdbc626b6b52636b525a639ca0a3eae9eceae9ecb1b2b4 -52636b5a636b525a6b5a636b525a63878995eae9ecfffffff6f5f8a4a8ae5a5a6b5a636b636373 -6363736363735a636b636373636373626b73636373626b73626b73636373636373626b73636373 -6363736c6373626b736b6b726b6b72686b7d5a52619ca0a3ffffff87899563636b636373636373 -6b6b726b6b7263637363637376798482858c686b7d6c6373626b736363736b6b72626b73636373 -5a5a6b5a637363637363636b5b5a735b5a7352526b686b7d000000 -000000686b7d686b7ddedfe2f6f5f88a9e9c82858cb7bdbc878995686b7df6f5f8f6f5f882858c -a4a8aeffffffb1b2b43e525acacad1ffffff6b737a4a526b525a6b525a6b525a6b5a5a6b5a636b -525a6b878995ffffffd4d7d5b7bdbcffffffb7bdbc4a525a949d9effffffd4d7d5b6c8c1ffffff -a4a8ae525a635a636b525a6b6b737affffffeae9ec878995b7bdbccacad1525a635a636b525a63 -525a635a636b6363735a636b5a5a6363636b5a636b525a635a636b6363735a5a6b5a5a6b636373 -63636b5a5a6b63636b63636b5a5a6b6b6b725a5a639ca0a3ffffff82858c635a6b65637f635a6b -5a5a6b5a5a6b6b6b7252525fb1b2b4ffffff76798463636b6b6b726363735a636b5a636b636373 -6363735a63736363735a5a6b5b5a735b5a73525273686b7d000000 -0000006363736b737affffffd4d7d55a5a6b5a63735a6373525a6b9ca0a3ffffffa4a8ae4a5263 -52636beae9eceae9ec4a526bcacad1ffffff6b737a4a526b5a5a6b525a6b525a6b5a636b5a6373 -4a525acacad1ffffff626b6b393f41d4d7d5ffffff525a63cacad1f6f5f85a636b464a48dedfe2 -eae9ec5a636b5a63734a525aa4a8aeffffff8789953e525a4a525a5a5a63525a63626b739ca0a3 -a4a8ae7679845a5a6b626b73949d9e747678767984a4a8ae76798463636b949d9e9ca0a36b6b72 -626b6b8789957476788789959ca0a376798452525f9ca0a3ffffff8789955a5a6b5a5a6b82858c -9ca0a382858c636373626b73b6c8c1ffffff8789957679846363736b6b72949d9e8789956c6373 -5a636b6363735b5a735b5a73525b735a5a6b52526b686b7d000000 -000000686b7d5a6373dedfe2ffffffcacad182858c626b735a636bb7bdbcffffff949d9e525b73 -525a6bdedfe2ffffff686b7dcacad1ffffff6b737a525a6b525a6b525a6b5a636b5a636b5a6373 -4a525ad4d7d5eae9ec626b73525a63b6c8c1ffffff626b73dedfe2dedfe25a636b5a636bd4d7d5 -ffffff6b6b725a6373525a63cacad1ffffff7476785a636b6363735a636b6b6b72eae9ecffffff -f6f5f8fff7ff8789956b6b72ffffffdedfe2eae9ecffffffeae9ecdedfe2ffffffffffffb1b2b4 -6b6b72ffffffeae9ecf6f5f8fffffff6f5f86b6b729ca0a3ffffff878995525a6bb1b2b4ffffff -f6f5f8ffffff949d9ecacad1fffffffffff7ffffffdedfe2747678eae9ecffffffffffffdedfe2 -6b6b726363735b5a735b5a735b5a735b5a7352526b686b7d000000 -000000686b7d5a636b767984dedfe2ffffffffffffb7bdbc525a6bcacad1ffffff878995525b73 -525a6bd4d7d5ffffff6b737acacad1ffffff6b737a525a6b5a63735a636b5a63735a636b5a6373 -4a525acacad1ffffff6b737a525a63dedfe2ffffff626b73d4d7d5f6f5f85a636b5a636beae9ec -fff7ff62736c5a6373525a63dedfe2f6f5f87476785a5a6b626b73525a63a4a8aeffffff878995 -5a5a63f6f5f8dedfe263636bf6f5f8eae9ec6b6b72b1b2b4ffffffb1b2b4626b73ffffffdedfe2 -5a5a6bf6f5f8eae9ec626b6b82858cffffffa4a8ae949d9effffff82858c747678ffffffa4a8ae -393f41d4d7d5fff7ff6b6b72b6c8c1ffffff949d9e626b73cacad1f6f5f85a6360767984ffffff -a4a8ae5a5a6b6363735b5a735b5a735b5a7352526b686b7d000000 -000000626b73686b7d5a63735a636b878995dedfe2ffffff949d9eb1b2b4ffffff878995525a6b -525a6bd4d7d5ffffff6b737acacad1ffffff7679845a6373525a6b878995eae9eceae9eceae9ec -a4a8ae767984ffffffeae9eceae9ecfffffff6f5f85a636b878995ffffffdedfe2dedfe2ffffff -eae9ec626b73626b73525a63dedfe2ffffff7679845a636b626b73525a63d4d7d5f6f5f8747678 -52525fcacad1ffffff747678f6f5f8cacad1464a609ca0a3ffffff82858c5a5a5aeae9ecdedfe2 -5a6360f6f5f8d4d7d55a5a6b626b6bffffffb7bdbc9ca0a3ffffff767984949d9effffffcacad1 -b1b2b4dedfe2ffffff747678b1b2b4ffffff7679845a5a63eae9eceae9ecb1b2b4b1b2b4ffffff -cacad15a5a6b6363735b5a735b5a735b5a735a526b747678000000 -000000626b73626b73626b6b626b73525a6b6b737affffffb6c8c1a4a8aeffffff949d9e525a6b -5a6373eae9ecfff7ff5a636bcacad1ffffff6b737a525a6b525a63747678dedfe2d4d7d5dedfe2 -a4a8ae4a525a878995d4d7d5b1b2b4dedfe2dedfe2626b6b525a63949d9ededfe2b1b2b4eae9ec -d4d7d55a5a6b626b7352525fcacad1ffffff7679845a636b626b7352525fdedfe2f6f5f8747678 -5a5a63cacad1ffffff767984f6f5f8d4d7d552525fa4a8aeffffff8789955a5a63f6f5f8dedfe2 -5a6360fff7ffd4d7d56363736b6b72ffffffb7bdbc9ca0a3ffffff767984a4a8aeffffffdedfe2 -dedfe2dedfe2dedfe2747678b1b2b4ffffff82858c63636bf6f5f8f6f5f8dedfe2eae9ecdedfe2 -b1b2b45b5a735a63735b5a735b5a735b5a735b5a73686b7d000000 -000000626b73626b738a9e9c7679845a636b82858cffffffb7bdbc6b737affffffcacad14a526b -82858cffffffcacad14a5263d4d7d5ffffff82858c767984767984686b7d4a52634a5b62525a63 -525a6b5a636b525f5a3e525a878995ffffffa4a8ae525a636363734a525a3e525a949d9effffff -949d9e525a63626b734a525aa4a8aeffffffa4a8ae4a525a686b7d5a5a63b7bdbcffffff747678 -4a525adedfe2f6f5f86b6b72f6f5f8d4d7d54a525aa4a8aeffffff8789955a5a63eae9ecdedfe2 -5a636bffffffcacad152525f747678ffffffb1b2b49ca0a3ffffff767984878995ffffff878995 -464a605a636b63637352525fb7bdbcffffff7679844a525af6f5f8d4d7d552525f52525f525a63 -63637363637365637f65637f5b5a735b5a735a526b686b7d000000 -000000626b73626b73f6f5f8ffffffeae9ecfffffffff7ff82858c4a5263cacad1ffffffeae9ec -f6f5f8ffffff9ca0a33e525ad4d7d5ffffffffffffffffffffffffb1b2b4525a63636373626b73 -5a636b767984eae9ecdedfe2ffffffd4d7d563636b525a6b82858cdedfe2dedfe2ffffffcacad1 -5a63605a636b6363735a636b5a636beae9ecffffffcacad1eae9eccacad1747678ffffffdedfe2 -cacad1ffffffb1b2b463635fffffffd4d7d54a525a9ca0a3ffffff8789955a5a63f6f5f8dedfe2 -5a636bf6f5f8f6f5f8b1b2b4d4d7d5ffffff82858c949a91ffffffdedfe2878995eae9ecf6f5f8 -b7bdbcd4d7d5dedfe25a5261a4a8aeffffffdedfe2b7bdbcb7bdbcffffffcacad1b1b2b4eae9ec -82858cb7bdbceae9ec7679845b5a735b5a735a5a6b747678000000 -000000626b735a636b767984a4a8aeb6c8c1b7bdbc767984525b735a63734a5263949d9ecacad1 -b1b2b4eae9ecffffff76798482858ca4a8ae9ca0a39ca0a3a4a8ae767984525a6b5a636b5a636b -525a6b626b73cacad1d4d7d5a4a8ae5a636b5a636b525a6b747678dedfe2d4d7d5a4a8ae5a6360 -5a636b5a636b5a636b63636b525a636b6b72b7bdbcdedfe2d4d7d59ca0a352525f82858cd4d7d5 -dedfe2a4a8ae6b6b725a6360b7bdbca4a8ae5a52617b8a84cacad17679845a5a63b7bdbcb1b2b4 -63635ff6f5f8eae9ecdedfe2eae9ecb1b2b463637363636bcacad1fff7ff949d9e6b737adedfe2 -f6f5f8eae9ecb1b2b46363736b6b72dedfe2f6f5f8d4d7d5636373b7bdbcf6f5f8f6f5f8dedfe2 -82858cf6f5f8cacad15a5a6b6363735b5a735b5a73747678000000 -000000626b735a63735a636b525a6b4a52634a5b62525a6b525b73525a6b5a63734a52634a5263 -3e525a6b6b72a4a8ae686b7d4a52634a52634a52634a52634a525a525a6b5a636b525a6b5a636b -5a636b525a6b4a525a4a5b62525a635a636b5a636b5a636b525a6b4a525a525a63525a635a636b -5a636b5a5a6b5a636b5a636b5a636b5a5a6b52525f525a63525a6352525f63636b525a6352525f -5a5a635a5a6363636b63636b52525f5a636b63636b635a6b525a6363636b6363735a5a6363636b -63636bf6f5f8cacad152525f626b6b63636b63637363636b5a5a6363636b636373635a6b525a63 -63636b5a636b5a5a6b6363735a5a6b5a5a6363636b5a636b6363735a5a635a636b626b7352525f -878995ffffff686b7d5a5a6b635a6b5b5a735b5a73747678000000 -0000005a63735a63735a63735a63735a63735a63735a63735b5a73525a6b525a6b5b5a735a6373 -5a6373525a6b4a5263525a6b5a5a6b5a636b52636b5a636b5a636b525a6b525a635a5a6b525a63 -525a63525a6b5a63735a636b5a636b5a5a6b525a6b5a5a6b5a636b5a636b5a636b5a636b5a5a6b -525a6b5a636b5a636b5a5a6b5a5a6b5a636b63636b5a636b5a636b5a636b5a5a6b5a636b63636b -63637363636b5a636b63636b63637363636b63636b626b736b6b726363736363736b6b726b6b72 -63635fffffffd4d7d5635a6b6b6b726c637363636b6363736b6b726c63736363736c63736c6373 -63637363637363637363637363637363637363636b6363736363736363736c63736b6b725a5a63 -7b8a849ca0a35a5a6b5b5a735b5a735b5a735a526b686b7d000000 -0000005a63735a63735a63735a636b525a6b525a6b4a5263525a6b5b5a73525a6b525a6b5a636b -5a5a6b5a636b5a6373525a6b525a6b5a5a6b525a6b525a6b525a6b626b737679845a63735a636b -7679846b737a52636b5a636b5a5a6b5263635a5a6b5a636b525a6b5a5a6b5a636b525a6b5a636b -5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a5a6b5a636b63636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63637363636b63637363636b6c6373 -63636ba4a8ae82858c6363736c63736363736363736c63736363736363736c6373636373636373 -6363735b5a73636373635a6b635a6b63636b6363735b5a7363636b636373636373636373636373 -5a5a635a5a6b6363735a5a6b5b5a735a63735a5a6b686b7d000000 -000000626b73525a6b8a9e9cdedfe2dedfe2eae9eccacad1767984525a6b525b735a63735a6373 -525b73525a6b5a5a6b525a6b5a5a6b5a636b5a636b5a636b4a525acacad1ffffff5a636b82858c -ffffff949d9e52525f5a636b5a636b5a5a6b5a636b5a636b5a636b5a636b5a636b5a5a6b525a6b -5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a63605a636b5a5a6b635a6b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b5a5a63635a6b63637363637363636b63637363636b63636b63636b635a6b5a5a6b5b5a73 -5b5a735b5a735a5a6b5a5a6b5a5a6b635a6b6363735b5a7363637363636b63637363636b63636b -6363735a636b5a5a6b5a5a6b5b5a735b5a735a526b686b7d000000 -000000626b734a5263949d9effffffd4d7d5cacad1ffffffeae9ec686b7d525a6b525a6b4a5263 -4a5263525a6b5a636b525a6b525a6b4a52634a52635a636b4a525acacad1ffffff5a6360878995 -ffffff8789954a525a5a5a6b5a636b5a636b525a6b525a635a5a6b5a636b5a5a6b525a6b5a636b -5a5a635a5a6b525a6b5a5a635a5a6b5a5a6b5a5a6b5a636b5a5a6b5a5a635a636b5a5a6b5a636b -63636b63636b5a5a6b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b63636b63637363636b63637363636b63636b63637363636b5a5a6b635a6b635a6b5a5a6b -5a526b5b5a735a5a6b5a526b5a5a6b635a6b5a5a6b635a6b63636b5a5a6b63636b63636b635a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b52526b686b7d000000 -000000686b7d525a63949d9effffff949d9e2b423ab7bdbcffffff8789954a5263686b7d949d9e -8a9e9c5a6373525a6b626b7382858c8a9e9c878995626b734a525acacad1ffffff5a636b878995 -ffffff949d9e6363737679845a636b525a6b626b737679845a63735a5a6b5a636b5a636b5a636b -5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63637363637363636b -63636b63636b63637363637363636b63636b63636b63636b636373635a6b635a6b63636b5a5a6b -5a5a6b5a5a6b5a5a6b5b5a735b5a73635a6b635a6b63636b63636b63636b63636b63637363636b -63636b635a6b5a5a6b5a5a6b52526b5a526b52526b686b7d000000 -000000686b7d4a5b62949d9effffff949d9e464a60cacad1ffffff82858c6b737aeae9ecf6f5f8 -ffffffdedfe25a6360949d9efffffffff7ffffffffdedfe24a525acacad1ffffff5a636b878995 -ffffff767984b1b2b4ffffff7476784a525a949d9effffff82858c4a525a5a636b525a6b5a636b -5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a636b5a5a6b655a605a636b -63636b63636b63636b63636b63636b63636b63636b63636b63637363636b63636b636373636373 -63636b63637363636b63637363637363636b63636b6363736363736363735a636b5a5a6b5b5a73 -5b5a735a5a6b635a6b635a6b5a5a6b636373635a6b5a5a6b63637363637363637363636b636373 -5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b524a6b686b7d000000 -000000686b7d525a639ca0a3ffffffdedfe2d4d7d5ffffffdedfe24a5b62cacad1f6f5f84a525a -767984ffffff9ca0a3525a638789953e525aa4a8aeffffff6b737acacad1ffffff5a636b878995 -ffffff82858c767984ffffff9ca0a3464a48b7bdbcffffff626b73525a6b5a5a6b5a5a6b5a636b -5a636b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a636b5a5a6b5a5a6b5a636b -63636b63636b635a6b63636b5a5a6b5a5a6b63636b63636b635a6b5a636b635a6b63636b63636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b635a6b5a5a6b5a5a6b5a5a6b -5b5a73635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b63637363636b63636b5a5a6b5a5a6b -5a5a6b5a5a6b52526b5a5a6b5a526b52526b524a6b686b7d000000 -000000626b734a5b629ca0a3ffffffdedfe2ffffffeae9ec626b735a636bf6f5f8eae9ecb1b2b4 -b7bdbcffffffcacad14a5b6282858ca4a8aecacad1ffffff747678cacad1ffffff5a6360878995 -ffffff8a9e9c464a60ffffffcacad13e525aeae9ecd4d7d5525a635a636b5a636b5a636b5a636b -5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a636b5a636b5a5a6b5a636b5a636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b63636b63636b63636b63636b63636b635a6b63636b635a6b5a5a6b5a526b5a5a6b5a526b -5a5a6b5b5a735a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b63636b63636b5a5a6b635a6b635a6b -5a5a6b5a5a6b5a526b5a526b52526b525273524a6b686b7d000000 -000000626b734a5263949d9effffff82858c9ca0a3ffffff82858c5a636bfff7ffeae9ecd4d7d5 -dedfe2d4d7d5a4a8aeb1b2b4ffffffd4d7d5d4d7d5ffffff6b737acacad1ffffff5a636b878995 -ffffff949d9e393f41cacad1eae9ec63636bffffffa4a8ae4a52635a636b5a5a6b5a636b5a636b -5a636b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a635a5a6b -5a5a6b5a5a6b5a636b63636b63636b63636b5a5a6b635a6b635a6b63636b63636b635a6b63636b -63636b63636b63636b63636b63636b635a6b5a5a6b5a5a6b5a5a6b5a526b52526b52526b52526b -5a526b5a526b5a526b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b -5a5a6b5a5a6b52526b52526b52526b525273524a6b686b7d000000 -0000005a63734a52639ca0a3ffffff8a9e9c4a5263ffffffdedfe24a5263f6f5f8d4d7d53e525a -3e525a464a60525a63fff7ffcacad1393f41878995ffffff6b737acacad1f6f5f8525f5a878995 -ffffff8789953e525a878995ffffff949d9effffff7b8a8452525f5a5a6b5a636b5a5a6b5a5a6b -5a636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a636b5a636b5a5a6b63636b5a636b5a636b -5a636b63636b63636b63636b5a5a6b63636b63636b5a5a6b63636b635a6b63636b63636b63636b -63637363636b635a6b63636b5b5a7363636b635a6b5a5a6b5a526b5a526b52526b52526b5a526b -5a526b5a526b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b635a6b -5a5a6b5a526b524a6b52526b524a6b525273524a6b686b7d000000 -00000065637f4a52639ca0a3ffffff9ca0a33e525aa4a8aeffffff878995a4a8aeffffffcacad1 -b1b2b4eae9ec82858cdedfe2eae9ec949d9ededfe2ffffff7b8a84b1b2b4ffffffb7bdbc949d9e -ffffffdedfe282858c52525feae9ecdedfe2eae9ec5a636b525a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a636b5a5a6b5a5a6b5a636b -5a5a6b635a6b63636b63636b63636b63636b63636b5a5a6b635a6b63636b635a6b63636b636373 -63636b63636b636373635a6b63636b63636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b -5a526b52526b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5b5a735a5a6b5a5a6b5a5a6b5a5a6b -5a527352526b52526b524a6b52526b52526b4a4a6b686b7d000000 -0000005a63734a526b767984cacad17679844a526b5a636bd4d7d5a4a8ae4a525aa4a8aeeae9ec -eae9ecd4d7d56b737a767984eae9eceae9eca4a8aed4d7d57679846b737aeae9eceae9ec767984 -cacad1ffffffa4a8ae3e525a9ca0a3ffffffb7bdbc52525f525a6b5a5a6b5a636b525a635a5a6b -5a5a6b5a5a635a5a6b5a636b5a5a635a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a636b5a5a6b -63636b63636b63636b63636b63636b63636b635a6b63636b635a6b63636b63636b63636b63636b -63636b63636b635a6b63636b63636b635a6b5a5a6b5a5a6b5a5a6b5a526b5a526b5a5a6b52526b -5252735252735a5a6b635a6b5a526b5a5a6b5a5a6b5a5a6b5b5a735a5a6b5a526b5a5a6b5a5a6b -52526b525273524a6b52526b524a6b525273524a6b65637f000000 -000000525a6b5b5a734a526b464a604a526b525a6b4a526b4a5263525a6b525a6b4a525a525a63 -525a63464a604a5a6b3e525a4a526352526b3e525a464a604a5263464a604a5263525a634a5263 -464a60525a6b5a5a6b52525f5a636bffffff949d9e4a525a5a5a6b5a5a6b5a5a63525a6b5a5a6b -5a636b5a5a635a636b5a5a6b5a5a6b5a636b5a5a6b5a63605a5a6b5a5a6b5a5a6b635a6b63636b -5a5a6363636b63636b63636b63636b63636b63636b635a6b63636b635a6b63636b63636b63636b -63636b635a6b63636b635a6b63636b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b52526b -5252735a526b5a5a6b5a5a6b5a526b5a5a6b5a526b5a5a6b5a526b5a5a6b5a5a6b52527352526b -524a6b524a6b524a6b524a6b524a6b5252734a4a6b686b7d000000 -000000525b73525b73525a6b525b73525a6b525a6b525a6b5a6373525a6b525a6b5a636b525a6b -525a6b525a6b525a6b52526b525a6b4a526b52526b52525f4a526352526b52526b4a526352525f -5a636b464a60b7bdbceae9eceae9eceae9ec63636b525a6b525a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a636b5a5a6b5a5a63635a6b5a5a6b63635f5a5a6b -655a605a5a6b63636b5a5a6b5a5a6b63636b5a5a6b63636b63636b63636b635a6b63636b635a6b -63636b635a6b63636b635a6b5a5a6b635a6b635a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b5a526b -5a526b52526b5a5a6b5a526b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b5a5a6b524a6b52526b -52526b524a6b4a4a6b524a6b524a6b524a6b4a4a6b686b7d000000 -000000525b73525a6b525a6b5a5a6b525a6b525a6b5a636b525a6b525a6b525a6b4a5a6b525a6b -525a63525a6b525a6b525a6b4a52634a52634a526b52526b4a52634a52634a526b52526b52526b -5a5a6b4a525a82858cb7bdbccacad174767852525f5a5a63525a6b525a6b5a5a635a5a6b5a5a63 -525a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a636b5a63735a6373 -5a6373635a6b635a6b63636b63636b635a6b63636b63636b63636b635a6b63636b63636b63636b -63636b63636b635a6b63636b635a6b5a636b635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b52526b52526b -524a6b524a6b494a73524a6b524a6b52526b4a4a6b686b7d000000 -000000525a6b5a636b52636b5a636b525a6b5a636b525a6b525a6b5a636b52636b646b635a5a63 -525a6b4a526b52526b525a6b4a526352525f4a52634a5263464a604a52635a52614a526352525f -525a6b52526b4a52634a525a3e525a52525f5a5a6b525a63525a63525a635a5a63525a635a5a6b -63635f5a5a6b5a5a635a5a6b5a5a635a5a6b5a636b5a636b655a605a636b5a5261794e457c4626 -794e45655a605a636b63636b63636b63636b5a63735a637363636b63636b635a6b63636b635a6b -5a5a6b635a6b63636b635a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b52526b524a6b525273524a6b -524a6b4a4a6b525273524a6b524a6b524a6b464a60686b7d000000 -0000005a5a6b5a63734a52639c7e3c62736c525b734953745a5a6b4a5a6b7274429b9218646b63 -4a526b4a526b494a734a52634a4a6b424a6b424a6b464a60494a733e525a7b7a314a526b4a4a6b -525a634a526b5c63509b9218807c45525b73525a6b525a6b52526b525a6b4a526b5a636b464a60 -727442635a6b5a5a6b5a5a6b5a5a6b5a5a6b655a60655a605a636b5a5a63a92b0cd31f00b11700 -b11700a6342163636b5a5a6b635a6b63636b794e45794e455a526163636b5a6373635a6b63636b -635a6b635a6b635a6b5a5a6b63636b635a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b52526b52526b525273524a6b -524a6b525273524a6b524a6b4a4a6b52526b4a4a6b686b7d000000 -0000005a636b5a6373525f5a9b921862736c5f735a807c455a636b49537476612c646b63525a63 -646b635a6360807c455a63605b6b51807c45646b5a52525f807c454c524d7b7a31525a63807c45 -525a6b52526b52634a7b7a317b7a316b7366807c455a5a6b807c455a5a6b807c455a5a6b727442 -8c86225a5a6b5a5a6b635a6b5a5a6ba63421d31f00c630115a6373a63421c21e00b11700d31f00 -b224009f1a00655a6063636b5a6373794e45b11700b117009f1a0081250c794e455a5a6b63636b -63636b635a6b63636b635a6b63636b63636b635a6b5a5a6b5a5a6b5a5a6b635a6b635a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b5a5a6b5a526b52526b52526b52526b524a6b524a6b -5252734a4a6b524a6b524a6b524a6b52526b4a4a6b686b7d000000 -0000005a636b5a63735c63508c8622646b5a7d7a249b9218626b6b4953747b7a319b92185a5a5a -9b921872694676612c7b7a317d7a249b92188c86225b633a9b92187274425d6b3f7269469b9218 -646b5a525273555a429b9218807c45535a4c8c86227b7a31807c455c63509b92187274428c8622 -8c86225b5a73655a605a6373794e45e22300d31f00c63011a63421ca2a009f1a00b22400d31f00 -b224009f1a00794e455a6373794e459f1a00b117009f1a009f1a007d15009f1a00794e4563636b -635a6b63636b635a6b5a5a6b635a6b63636b635a6b5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b -635a6b5a5a6b5a5a6b5b5a735a5a6b5a526b5a526b525273524a6b52526b524a6b494a73524a6b -524a6b524a6b4a4a6b524a6b5252735252734a4a6b686b7d000000 -0000005a636b525b735d6b3f9b9218807c455d6b3f727442646b5a4953745d6b3f807c45424a6b -9b92185a636b8c8622807c455b633a76612c5d6b3f5b633a5b633a7b7a315d6b3f7d7a249b9218 -7274429c7e3c5d6b3f8c8622807c45646b5a9b9218575a33807c4576612c9b92187b7a315d6b3f -7b7a31635a6b5a5a6b5a5a5ae62f10e22300d31f00e22300d31f00a92b0cb11700d31f00c21e00 -9f1a00794e456363735a5a5a9f1a00b11700b117009f1a009f1a009f1a00b11700794e455b5a73 -635a6b635a6b635a6b63636b5a63735a6373636373635a6b5a5a6b635a6b635a6b5a5a6b635a6b -5a5a6b5a5a6b5a5a6b5a5a635a527352526b5a526b52526b52526b524a6b525273524a6b4a4a6b -525273494a73524a6b524a6b524a6b5252734a4a6b686b7d000000 -00000063636b525b737b7a317b7a317b7a3176612c7b7a316b73664953747b7a31778469535a4c -9b92187274428c862272744276612c7d7a247b7a315b633a7d7a247b7a3176612c7d7a24727442 -4a525a525f5a5b633a7b7a317d7a247b7a318c862263635f76612c7d7a24807c45555a427d7a24 -7b7a31635a6b5a636bc63011e223009f1a00e22300e22300a92b0c9f1a00d31f00ca2a009f1a00 -a634215a637363636b81250c4c1b0d4c1b0d4c1b0d9f1a009f1a00b11700a92b0c6b5a6b63636b -6c637363636b6363735a52617732237732235a52616363735a6373635a6b63636b5a5a6b63636b -63636b525a6b7b8a846273634a525a5b5a735a526b5a526b524a6b52526b525273524a6b524a6b -524a6b524a6b525273494a73524a6b52526b4a4a6b686b7d000000 -000000626b73525a6b726946525a635d6b3f5c63505b6b515a6b5c495374575a339b9218726946 -555a42575a338c8622726946555a425b633a555a425b633a9b92185a5a5a7b7a31575a339b9218 -63636b525b734c524d9b92187d7765575a339b92185d6b3f9c7e3c4b52429b92185a5a5a8c8622 -9c7e3c525b73a63421ef1800c21e00c21e00f422009f1a009f1a00d31f00d31f0081250c50451e -4a3e40525a6b7732234c1b0d060f10060f1025161881250c5b341b81250c4c524d393f412b2821 -393f414a525a5a526b773223b11700b117007d1500773223655a6063637363636b635a6b63636b -5a5a6b74767894a5926380665263525a526b5a5a6b52526b524a6b525273525273524a6b524a6b -525273524a6b4a4a6b524a6b4a526b5252734a4a6b686b7d000000 -0000005a636b5a63735a6373626b6b4953745a6373525b73626b6b6b7b6252526b42526b525a6b -4a526b4a526b424a6b4a526b4a4a6b424a6b494a73575a33726946424a6b464a604a526b424a6b -525a6b525a63525a6b52526b52526b52525f4953744a5263525a6b525a6b4a4a6b5a5a6352525f -495374794e45a63421ef1800e22300e22300a92b0c9f1a00d31f00d31f00a92b0c7c46262b2821 -1821184a3e404c1b0d0d16182a31292c39292a33202a31292129212129212b28212b2821212118 -1821101821102d2718b11700b1170081250c81250c7d15007d1500773223655a60636373635a6b -63636b94a5926b89665b6b515b5a735a526b5a526b524a6b52526b52526b524a6b4a4a6b524a6b -494a734a4a6b4a4a6b4a4a6b524a6b52526b4a4a6b686b7d000000 -0000005a636b525b737274429b92187d7765495374495374727442807c45495374525a6b4a526b -4a526b4a4a6b4a526b424a6b424a6b52525f494a734a525a4a4a6b4a4a6b4a526b535a4c807c45 -7b7a31646b5a494a73525a6b525a6b495374525a6b52526b52526b5252734a4a6b7b7a31626b6b -794e459d7a66a5523aef1800f42200ef18007c46267c4626d31f00c21e0050451e3940311a1610 -555a4250451e212118394031394031394031394031394031394031394031394a3a3940312e3734 -2c39292b28212121182d27184c1b0d7d1500a92b0cc21e009f1a00c21e00794e455a637363636b -525f5a5a6b5c5f735a5a636b5a52735a5a6b5a526b52526b52526b52526b524a6b525273524a6b -524a6b524a6b524a6b524a6b52526b4a4a6b464a60686b7d000000 -0000005a636b525b735d6b3f7b7a31807c456b7b62646b5a8c86227d77656b7b62646b5a646b5a -646b5a807c455a5a635c6350807c45494a73807c4552525f7274425a52614953744b52429b9218 -9b9218646b5a807c4563636b646b5a807c455a5a6363635f5a5a63807c4563635f5d6b3f726946 -84635f949d9ecd4825ef1800e22300f42200794e455b6b5176612c7c4626394031251618100810 -3940312b2821394031415240394a3a3940314152404b52424b5242535a4c4c524d535a4c4c524d -4b5242464a4841524039403121372e1826222b282177322381250c5b341b5b5a73636373626b6b -6b80755b6b515a636b5a5a6b5a5a6b5a526b5a5a6b52526b52526b524a6b525273524a6b52526b -4953744a4a6b524a6b52526b52526b4a4a6b464a60686b7d000000 -00000052636b4953747b7a31c0852f5f735a8c86227b7a317b7a31807c458c86227b7a318c8622 -807c458c86227b7a317d7a248c86227269467b7a317269468c8622807c45494a73464a489b9218 -9b92185c63507b7a317274427d7a249b92187269467b7a317269465b633a8c86225d6b3fa5523a -94a592bc7a65f42200ca2a00e22300c630115b6b517269465d6b3f555a42212118101010181818 -1008102e37344c524d4152404152404c524d535a4c535a4c52634a5c63505c63505c63505c6350 -5c63505c63505a63605c6350535a4c4152402e37341826221826220d16182129215a6360646b63 -5f735a5a6b5c5a5a6b5a5a6b525b7352526b52526b52526b52526b4a526b52526b524a6b4a4a6b -52526b4a4a6b4a4a6b4a526b4a526b4a526b424a6b686b7d000000 -0000005a636b525b737b7a319b92185b6b519b9218807c457274425d6b3f9b9218807c45727442 -5b633a9b92187b7a315b633a5b633a7d7a2452526b555a429b9218807c45494a734b52429b9218 -8c862263635f8c86227b7a315b633a5d6b3f72744276612c727442807c45807c457d7a249a9680 -9a9680f42200d31f00a92b0cc630117269465b6b515b633a5c635041311d100810181818212118 -212921535a4c555a424b5242535a4c52635252634a535a4c5b6b514b52424152404c524d495a4b -535a4c535a4c525f5a535a4c5263525c63505c6350485a424152402a3320394a3a495a4b627363 -6273635b5a735a637352525f7732235a5261525b7352526b52526b52526b5252734a4a6b524a6b -4a526b524a6b4a4a6b4a4a6b4a526b4a526b464a60686b7d000000 -0000005a636b525b735d6b3f7d7a247b7a317b7a315a636b7b7a315d6b3f8c8622525a637b7a31 -5b633a807c454a525a7b7a315d6b3f7d7a24646b5a575a337b7a314a4a6b494a73555a4276612c -5b633a7b7a317d7a247b7a3176612c7b7a317b7a317b7a317b7a317b7a318c86228c8622a5ae97 -e62f10e22300a92b0cb2240077322352634a7269467269463949291008102121211818182b2821 -495a4b5c6350535a4c535a4c52634a535a4c535a4c52634a495a4b182118181818394a3a394a3a -4152404152404b52424152404c524d4b5242535a4c5263525c63505263528789956380664f6b50 -2e37344a525a5a52619f1a00c21e0081250c5b341b5a5273525b7352526b52526b4a4a6b4a526b -525273524a6b4a4a6b4a526b4a4a6b4a4a6b464a6065637f000000 -0000005a6373525b735c63505d6b3f52634a7b7a31807c455c635052525f7b7a31807c455c6350 -4a525a8c86227274424b52425d6b3f474a369b9218464a488c8622646b5a494a734b524263635f -464a48555a428c862272744252634a555a424b52429b92187269468c86229c7e3c807c45cd4825 -f42200b22400b22400e22300c63011555a42726946474a36100810212118182118212118415240 -5c6350526352535a4c52634a526352535a4c52634a4152402c3929212118060f102b2821394031 -394a3a464a483940312e37344152404b52424b5242415240495a4b5a63605a6b5c6b8966535a4c -2a31291821182d271881250cb117007d15007d15007d15004c524d494a735252734a4a6b52526b -4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b424a6b636373000000 -0000005a6373525b73525a6b525b73525b73646b5a5a636b525b73525b7342526b525a634a526b -52526b464a604a4a6b4a526b4a4a6b494a73424a6b4a4a6b424a6b4a4a6b464a604a4a6b4a4a6b -4a4a6b4a4a6b464a6049537452526b5252734a4a6b4a4a6b464a60a5523a8cb0a1bd734ff42200 -ca2a00b11700bd734fc63011f42200a64b235f735a474a36181818212118101010181818394a3a -5a6b5c5c635052634a526352535a4c52634a535a4c3940312c3929212118101010101010212921 -3940313940311010100808081010102c3929495a4b495a4b62736c525f5a5f735a495a4b5c6350 -5a6b5c4b52422a31292121182d27187d1500b117009f1a007d1500773223524a6b4a4a6b52526b -4a4a6b4a4a6b4a526b4a4a6b4a4a6b4a4a6b464a6065637f000000 -000000525b73525a6b525b73525b73525a638c8622626b6b525b73646b5a525f5a727442495374 -4a526b494a7352525f424a6b727442726946726946424a6b424a6b424a6b4a4a6b4a4a6b4a526b -4a4a6b52526b52526b52526b5b5a7352526b52526b525273794e459ca28fb7937bf42200d31f00 -9f1a00a5523aa1c1b7cb543bef1800f42200c63011485a422121211818182121212129214b5242 -5a6b5c5a6b5c5c63505c6350535a4c535a4c2c39292121183940311818181818180d1618101010 -2121212c39290811081010101010100718102a31295a6b5c8aa0946273635f735a181818101810 -4152405c63505263524b52422a31292b28214c1b0d25161881250cd31f00794e4549537452526b -4a4a6b4a4a6b4a526b4a4a6b4a4a6b4a526b464a60686b7d000000 -000000525a6b4953745a636b7784695b6b519b9218525b734a526b9b92185b6b518c86226b7366 -52525f807c454a526b424a6b7d7a248c86225d6b3f5a5a6363635f52525f52526b5a5a634a526b -4a4a6b524a6b524a6b4a526b52526b52526b495374794e459d7a66a5ae97e62f10e22300b22400 -c63011b1b2b4a1c1b7b7937bf42200e22300f422004c1b0d0d16182121182121214152405c6350 -5b6b51646b635b6b515a6b5c485a424b524227272c1018101818181826221818181818181a1610 -1010101010100808081010101010100008052e37345a6360627363587b4e4b5242071810000000 -0808082a3129535a4c5c63505c63504152402129210d16180d161841311d464a6052527352526b -4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b464a6065637f000000 -0000005a63734953747b7a318c86227274429c7e3c5a6373464a608c86227269468c86227b7a31 -7274429b921863635f424a6b5b633a9b92187274427b7a318c86225b633a8c86227b7a315a5a63 -4a4a6b52526b524a6b52526b52526b495374655a609d7a669cada5cd4825ef1800b22400b22400 -b09f93a1c1b7b1b2b4b6c8c1cd4825f42200f4220081250c0d16182b28212d27182b2821526352 -646b5a627363646b635f735a535a4c485a422c3929212121181818181818181818181818101010 -1018101010101010101010101010101821185a63606b7b6b587b4e4c524d2e3734101010001008 -0808082e37344c524d4b5242535a4c5c6350535a4c3940312129180d1618181818393f41524a6b -52526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b464a6065637f000000 -0000005a63734a526b7274425d6b3f7b7a31587b4e52527342526b7274424a525a5d6b3f5b633a -8c86229b921863635f463d7b575a339b92187b7a318c86228c8622575a339b92187d7a24494a73 -4a4a6b4a4a6b4a526b52526b4a526b524a6ba5523a94b3a5cb543bf42200c63011b11700bc7a65 -a1c1b7a5b4a5b6c8c1bc7a65f42200e22300c21e002121182121212b28212b28212b28214b5242 -5f735a6273636273636b736652634a212921212118182118181818181818181818181818101010 -1818181010101010101010101018104a525a62736c5f735a2f4231394a3a212121081108101010 -0808082129215263524b5242415240495a4b5263525c63504b52422c392918181827272c525b73 -4a4a6b4a4a6b4a4a6b4a4a6b494a734a4a6b464a60686b7d000000 -0000005a63734a526b7b7a317b7a317b7a31807c45495374464a607b7a315c63507b7a315b633a -7d7a24646b5a4a4a6b424a6b5b633a7d7a248c86227b7a31524a6b575a339b92187b7a31494a73 -4a4a6b4a4a6b52526b4a4a6b495374a5523a8a9e9cbc7a65f42200c63011b11700bc633ca1c1b7 -a5b4a5b6c8c1b09f93f42200d31f009f1a002d27180d16182a31292d27182b28212b2821415240 -6273636b73666b73666273635a6b5c212118181818181818181818181818181818101010101010 -0d1618181818181818001008525f5a9ca0a35f735a485a42080808101010101010101010081108 -101010080808394a3a5a6b5c5263524b5242415240535a4c526352535a4c394a3a21291827272c -3e525a494a734a4a6b424a6b4a3e40524a6b424a6b686b7d000000 -000000525a6b525b734b52429c7e3c525f5a5c6350495374494a735d6b3f807c45555a42535a4c -4b52429b9218525273424a6b535a4c555a42535a4c76612c807c45464a48575a335c6350525273 -52526b4a4a6b524a6b495374794e459d7a669ca28ff42200e22300b11700a64b23a5b4a5b1b2b4 -a1c1b7b1b4a2e62f10d31f00b224005b341b39492939403125161825161841311d2b2821394a3a -5f735a6b73666b73666b73665f735a2e37340d1618181818181818101810181818181818101810 -1010101018100808084152409cada56b896652634a071810101010080808071810101010101010 -1010100718101010104b5242646b5a6b7b6b525f5a415240555a4252635252634a4b52422c3929 -1821182e37344a4a6b4a3e40b117009f1a004a3e4065637f000000 -000000525b73525b734953745a6b5c495374494a734a526b52526b424a6b4a4a6b4a4a6b494a73 -524a6b424a6b4a4a6b4a4a6b4a4a6b424a6b494a73464a60424a6b4a4a6b4a4a6b494a734a4a6b -4a4a6b524a6b495374794e4584635f9cad9ce62f10e22300b22400c63011a5ae97b1b2b4a1c1b7 -b6c8c1cd4825e22300c21e007732234e52345b633a587b4e4f6b502a33202b2821182118182622 -646b5a6b73666b7b6b6b73665f735a415240181818212118101810181818101810101810181818 -1818181010102129215a6360788c7b5f735a182118080808101010071810100810101010101010 -0718101010100808081821184152405a6b5c8aa094646b63415240495a4b525f5a52634a535a4c -41524021291818262281250cb2240081250c7d1500794e45000000 -000000525a6b494a73807c459b92185a63605a5a63494a73424a6b494a73494a73424a6b424a6b -5b633a63635f463d7b424a6b424a6b463d7b464a48646b5a463d7b4a4a6b4a4a6b4a4a6b525273 -4a4a6b4953745a5261a5523a8cb0a1cb543bf42200b22400b11700b7937ba1c1b7a5b4a5b6c8c1 -cb543be62f10c21e0081250c4e52344e5234516b3d76612ca64b232c39292b2821181818182110 -646b5a62736c6b7b6b6b73666273634b5242182118212118182622181818181818101810101010 -1818181010106b737a7384765f735a21372e080808101010080808080808071810101010101010 -0808080718100718100808082a3129394a3a535a4c6273630d16182a332041524048634d526352 -535a4c4b52422e37341821184c1b0d531100531100a5523a000000 -0000005a6373424a6b8c86224953745d6b3f9b92185b5a73807c45494a73807c4563635f52525f -9b921863635f807c454a526b646b5a5a5a638c8622726946494a734a4a6b4a4a6b5252734a4a6b -4a4a6b5252737c4626879488bc7a65f42200c630119f1a00bd734fa1c1b7a5b4a5b6c8c1b7937b -ef1800ca2a00a92b0c474c294e52344e52345d6b3fcd4825f422005b341b0d1618081108415240 -6b73666b73666b7b6b6b73666273635c6350212118181818181818182118181818181818181818 -080808525f5a7384766b8966394031081108101010101010081108080808080808101010101010 -081108100810080808060f101010104152404152402c3929101010081108101810394031485a42 -5a6b5c526352495a4b41524021372e1818180010084c524d000000 -000000525a6b494a73575a339c7e3c535a4c9c7e3c3e525a8c86225c63508c86227b7a31727442 -9b921852525f7d7a245d6b3f8c86227274429b9218646b5a494a734a4a6b4a4a6b524a6b524a6b -495374a5523a7d8476b7937bef1800d31f009f1a00a5523a9bb5ada5b4a5b6c8c1b09f93e22300 -d31f00a92b0c5b341b4e52344e5234474c29b09f93b7937bf42200f42200a92b0c4a3e405a6b5c -5f735a6b736662736c6b7b6b6b73665a6b5c2a3320101010181818181818212118182622101010 -393f4162736c778469485a42071810101010101010101010101010101010080808071810100810 -0718100808081010100808080000001818182f42310808080808081010100808082a312962736c -4152405b6b51525f5a52634a495a4b4152401818184c524d000000 -0000004a526b5252733f33657d7a247274425a636052525f9b92185c63505b633a76612c5d6b3f -5d6b3f63635f9b9218726946555a427274425b633a646b5a494a734a4a6b4a4a6b524a6b495374 -794e4584635f94a592e62f10e22300a92b0cc63011a5b4a5a5b4a5a1c1b7b7c7b2e62f10d31f00 -b224007732233e52314e52343e52319d7a66b6c8c1b6c8c1cb543bf42200f42200cd48254f6b50 -6273634c524d4b52426b80756b7b6b6273634152401818181818181818181818181818182e3734 -646b636b7b6b4f6b50181818101010101010101010101010101010071810101010060f10071810 -10081010101008080808080827272c2e3734394a3a2c39292121211018100808080010086b8075 -6b7b6b495a4b5a6b5c5b6b51526352495a4b415240646b63000000 -0000005252734a526b5a63607b7a317b7a317274425d6b3f8c862272694676612c5d6b3f7b7a31 -7b7a317b7a318c86225d6b3f7269465b633a8c8622646b5a494a73494a734a4a6b495374655a60 -9d7a66949d9ecd4825f42200b22400b22400b09f939bb5ada5b4a5a1c1b7cb543be22300ca2a00 -81250c3e52314e52343e5231726946b7bdbcb6c8c1b6c8c1b1b2b4e62f10f42200f42200a5523a -48634d4a3e403940315c63506b807562736c646b5a2a31291818181818181018102121215a6b5c -6273635f735a2129210718101a1610101810101010101010101010101010101010101010071810 -1010100811080d16185c63507a8c7284947b8c947b8c947b7d84766b73665c63502a31292b2821 -5a6b5c5a6b5c5263526273635a6b5c526352394a3a6b8075000000 -000000525273424a6b76612c9c7e3c3e525a7b7a315b633a9c7e3c535a4c555a42535a4c575a33 -9b92184b52429b92185c63505a5a5a464a489b9218646b5a494a73524a6b494a735a526ba5523a -8a9e9cbd734ff42200c63011b224009d7a667b8a84a5b4a5b6c8c1bc7a65f42200ca2a00a92b0c -474c294e52343e52315b633ab1b2b4b6c8c1b7c7b2b7c7b2b6c8c1b09f93f42200f42200a63421 -495a4b394a3a464a48394a3a62736c6b7b6b6b7b6b4b52421821181821180d16185a636062736c -6b89662f4231181818181818101010101010101010101010101010101010101010101010101010 -1010100718106b736684947b788c7b858c757784697d84765b6b515b6b517784697a8c726b7b6b -5c63504b5242495a4b5a6b5c6b7b6b2e37340000005a5a5a000000 -000000494a73495374424a6b494a73494a73494a73494a73424a6b494a73494a73494a73494a73 -463d7b424a6b494a73424a6b494a734a4a6b424a6b494a734a4a6b4a4a6b495374a5523a879488 -bc7a65f42200ca2a009f1a00bc633c7679849cad9ca1c1b7b7937bf42200ca2a00a92b0c50451e -474a363e5231474c29b09f93b6c8c1b7c7b2b6c8c1b6c8c1b6c8c1b7937bf42200cd4825464a48 -2c3929464a48464a48394a3a4c524d7384766b7b6b5f735a2e37341821184c524d7476786b8966 -415240101010181818212118181818101010101010101810101010101010101010101810181818 -0718104b52428c947b858c758c947b8c947b6b7b62525f5a535a4c535a4c535a4c5b6b515b6b51 -7784697784695b6b51495a4b394a3a0718100000004a525a000000 -0000004953744953744953744a526b494a73494a73495374495374494a734a526b4a526b4a526b -52526b52526b4a526b4a4a6b495374494a734953744a4a6b4a4a6b495374794e457d7765949a91 -e22300e22300a92b0ccd48257b8a848aa094a1c1b7b1b4a2e62f10d31f00b224005b341b474a36 -4e5234474c299d7a66b6c8c1b1b2b4b6c8c1b7c7b2b6c8c1b1b4a2f42200d31f004e5234394a3a -1008102c3929474a362c39292e37346b7b6b6b7b6b6b7b6b485a422b423a949d9e6b7b624f6b50 -1821181818181818181818181018101018101010101010101018101818180d1618101810071810 -3940316b89668c9c7b8794888c947b7d8476646b5a5a636052634a5a6b5c6b7b62535a4c5b6b51 -5c63505263526b7b626b8966555a421818180000004c524d000000 -0000004953744a4a6b494a73494a73525273494a734a4a6b4a4a6b424a6b494a7349537442526b -4953744a526b4a4a6b4a4a6b494a734a526b4a526b4a4a6b494a73655a60a5523a8a9e9ce62f10 -e22300b22400c630117d77657b8a84a5b4a5b6c8c1cd4825e22300b224007732234e52344e5234 -39492984635fb7c7b2a1c1b7b6c8c1b6c8c1b6c8c1b1b2b4e62f10f422007c4626394929476336 -5c63502b28212c39292121184c524d6b7b6b6b7b6b62736c6b7b6b8789955a6b5c5f735a2a3320 -18262221212118181810181010101010101010101010101010101010101010181010101027272c -6b7b626b7b6b9ca28f9ca28f84947b94a59284947b646b5a646b5a849473646b5a5f735a6b7366 -646b5a495a4b5b6b517784695f735a6b73662c39295a5a5a000000 -000000495374494a733ba1683ba1683ba1683ba1683ba1683ba1686b7b6276612c7c4626a5523a -655a60524a6b4a526b4953744a4a6b49537452526b4953745a5261a5523a8a9e9ccb543bf42200 -b22400b2240084635f6b80759cada5b6c8c1bd734fef1800c21e0081250c474c294e5234474a36 -5b633ab1b4a2b6c8c1b7937be62f10b1b4a2b6c8c1cb543bf422007c4626394929474c293e5231 -516b3d2a33201818184152406b7b6b62736c6b7b6b6b7b6b7b8a847384766b7b622c3929101010 -1818181821182121211818181818180d16181a16101018100d16181818181010101821185f735a -7d847677846984947ba5b4a5889e8a8c9c7b84947b6b7b6b778469646b5a6b7b6b788c7b858c75 -7784697784695f735a6b7b626b73666b7b626b7b62879488000000 -000000495374494a733ba1683ba1683ba1683ba1688cb0a1526363738476b09f93cb543b794e45 -5a2586524a6b52526b525273494a73524a6b4a526b525273a5523a7b8a84bc7a65ef1800c63011 -9f1a00a5523a6b8075949d9ea1c1b7b7937bef1800ca2a009f1a00474c294e52343e52314e5234 -b09f93b6c8c1b1b4a2cb543be62f10e62f10bd734ff42200a92b0c394929474c293949293e5231 -212918181818394a3a5f735a646b636b73666b7b6b6b8075646b636b7b6252634a181818181818 -1018101818181818181818181821181818181010101818181818181018101010102a3320738476 -7d84767a8c727a8c72a5b4a5a5ae978c9c7b7d84765b6b517d84766b73668c947b8c947b849473 -858c757a8c727d84766b7b6b6b73666b7b626b7b62949a91000000 -0000004953745252733ba1683ba1683ba1687a9487686b7d393f415a52618789957476785a2586 -4b188a5a5273525273495374494a73525273495374794e457d77659a9680ef1800e223009f1a00 -cb543b8aa0948aa094a1c1b7b09f93e62f10d31f00a92b0c5b341b4e52344e5234474c299a9680 -b6c8c1a1c1b7cb543bb1b4a2b1b2b4e62f10f42200e62f104e5234474c29474c293e52312a3320 -1818183940316273635a6b5c646b5a5f735a646b635a63606b89665f735a62736c4152400d1618 -2121210d16181010101010101818181821181818181818181818181818181010102e37347a8c72 -858c7584947b788c7b8c9c7bb7c7b29ca28f8c947b646b635f735a6b7b6b84947b8c947b84947b -858c757a8c727a8c727a8c727784696b7b62646b5a879488000000 -000000495374494a733ba1683ba168626b735a63737679844c524d6b6b726b6b72393f41767984 -733f73524a6b5252734a4a6b525273495374794e459d7a6694a592e62f10e22300a92b0ca92b0c -8794889bb5ada5b4a5b1b2b4cd4825e22300b224007732233e52314e52343e52319d7a66b6c8c1 -8a9e9ca5523abc7a65a1c1b7a1c1b7b7937bd31f00f42200c63011394a203e52312a3320101810 -2a31295a6b5c5b6b515a6b5c5c63506b80756b737a6273635f735a6b7b6b6b7b6b6273632a3129 -1818182121181818181818181018101010100d1618181818182118212118181818394a3a858c75 -7a8c728494738c947b858c75a5ae97b7c7b2a5ae978c947b646b5a6b7b627a8c728c9c7b84947b -84947b858c75858c757a8c727a8c727a8c726b7b62949a91000000 -000000495374494a733ba1683ba1683f33654c524d5a5a6327272c393f41393f41393f41464a60 -cb543b733f734953745252734953745a526ba5523a8a9e9ccd4825ef1800b22400b117009a9680 -8794889cada5a1c1b7cb543be22300c21e0081250c4e52344e52343e5231794e45b1b4a294b3a5 -84635fbd734fa1c1b76b8075a5b4a5a1c1b7bc7a65d31f00f42200a634212f4231101010182118 -5c63505a6b5c5a6b5c5a6b5c6273638794889cad9c5f735a5263524152406b7b6b6b7b6b5c6350 -2121211821181821181818181818181818181818181010101818181821182121211818185b6b51 -889e8a84947b8c947b84947b8c947bb1b4a2b7c7b29cad946b7366646b5a77846984947b8c947b -788c7b858c757a8c727a8c727a8c727a8c726b8966949a91000000 -0000005252734953746b89666b7b62393f41464a4818262241311d2624102e37344a3e403e525a -bd734f794e45495374495374525273a5523a8a9e9cbd734fef1800ca2a00b11700bd734f8cb0a1 -9cad9ca1c1b7bc7a65f42200ca2a00a92b0c474c294e5234415a31575a33b1b4a2a1c1b77d7765 -cb543b9ca0a36b736663635f738476a5b4a5a1c1b7bd734fe22300a92b0c101810101010415240 -646b5a5b6b515a6b5c5263527384769bb5ad587b4e5b6b51394a3a3940314152406b807562736c -4b52421818181818181821181821181818181818181821181818181818180d1618182118394031 -8c9c7b8794888c9c7b8794888c947b889e8ab7c7b2b1b4a29cad946b73665a6b5c7a8c72889e8a -8c947b84947b858c75858c757a8c727a8c72778469949a91000000 -0000005252734953749c7e3c84635f393f41464a48393f412b282127272c393f413f3365464a48 -bc7a656b5a6b494a73495374794e457d77659a9680ef1800ca2a009f1a00a5523a6b8075889e8a -a1c1b7b09f93e22300ca2a009f1a0050451e4e5234476336474c299a9680a1c1b77b8a84cb543b -b09f938aa094747678949d9e9bb5ada5b4a59dbdad9d7a66e2230077322310251b2c39295a6b5c -5b6b515a6b5c5b6b516273635a6b5c6b7b625f735a415240394a3a394a3a3940314c524d6b7b62 -627363394a3a0808081818181818181821181818182121212121182121212129211821184b5242 -8c9c7b8794888c947b8c947b8c947b84947b9cad94b7c7b2b1b4a26b73667d8476778469858c75 -889e8a8c947b84947b849473858c757a8c727a8c72949a91000000 -0000005a5273495374a64b23bc7a653e525a393f4182858c6b6b725263525c63502f4231526352 -9d7a664b5242495374794e4584635f949a91e62f10e22300a92b0cc630116b80757384769cada5 -b1b4a2e62f10ca2a00b224005b341b474a364e5234474c299d7a66b6c8c17b8a84a5523abc7a65 -7a94877476787384769cada5a5b4a59dbdad9a9680d31f00a634216b7b625f735a6b7b625f735a -5a6b5c5b6b5162736c5a63606b7b6b587b4e415240394a3a394a3a394a3a2c39292129212a3129 -4b52425c63502a31290010080811081010101010101818181818181821181826222b28212c3929 -4b52428c947b8794888c947b8c947b8c947b84947ba5ae97b6c8c1b1b4a27d84766b7366646b5a -84947b8c9c7b84947b84947b7a8c72858c757a8c72949a91000000 -0000003e525a424a6b733f73733f737679846b6b72a4a8ae6b7b622b50203ba168587b4e3ba168 -6b89666b89662b5020516b3d94ad9ccd4825ef1800b22400a92b0c84635f7a94879cada5a1c1b7 -cb543bd31f00b2240081250c3e52314e52343e5231726946b6c8c18cb0a1794e45bd734f9bb5ad -7b8a84738476878995a5b4a59bb5ad94a592c63011e62f105d6b3f5d6b3f587b4e587b4e5f735a -5f735a587b4e7d8476738476587b4e5c63504152401818181018102c39292a31292a3320182118 -3940314152403940311818180811080718100808080010080811081010100d1618182118212921 -1829185c63509ca28f889e8a8c947b889e8a8c947b8c9c7bb7c7b2b6c8c1a5ae978c947b858c75 -7a8c7284947b8c9c7b84947b849473788c7b7a8c7294a592000000 -000000214231214231463d7b4b188a5a2586a4a8aeb7bdbc4f6b5b2b50203ba1688494736b8966 -94af9494af942b50203ba168cb543bf42200b22400b2240084635f7a948794a592a1c1b7bd734f -e22300c21e0081250c474c294e52343e52315b633ab1b4a28cb0a17d7765cb543b949a91738476 -7b8a847a94879cb5a59bb5ad94ad9ca64b23e2230076612c516b3d5d6b3f5d6b3f5d6b3f5d6b3f -5d6b3f5d6b3f476336485a42395229516b3d5f735a5b6b512f4231212918212918182118212918 -627363949d9e6273634152401821181818180d1618101010101010071810081108071810101810 -2129212a33207784698c9c7b8c9c7b8794888794888494738c947bb7c7b2d4d7d59cad9494a592 -8c9c7b77846984947b8c9c7b84947b84947b7a8c7294a592000000 -0000002b423a214231463d7b5a2586733f73e62f10cb543b9d7a662b50203ba1683ba1683ba168 -3ba1686b89663ba1687d7a24f42200ca2a009f1a00bc633c7b8a84879488a1c1b7b7937be22300 -ca2a009f1a00474c293e52313e52314e5234b09f93a1c1b7738476cd4825b1b2b47a9487738476 -6b8075a5b4a5a5b4a59dbdada5523aef18007c46264f6b505d6b3f516b3d5d6b3f5d6b3f516b3d -4f6b50476336394929394929516b3d516b3d516b3d516b3d5d6b3f213218101810182118535a4c -5f735a7b8a84b1b2b47384765263522b2821212118212121212121212121182118182118181818 -2129182c3929788c7b9ca28f8c947b8c947b84947384947b8c947b8c9c7bd4d7d5b7c7b29cad94 -8c9c7b788c7b5f735a84947b8c947b84947b858c75949a91000000 -0000002b423a2f4231393f414a3e407732234a3e404a3e40415a292b502094af9494af948c9c7b -94af9494af943ba168a92b0ce223009f1a00a634218aa094a5b4a5a1c1b7b09f93e62f10ca2a00 -a92b0c50451e3949293e5231394a209d7a66b6c8c17a9487bc633cbc7a659bb5adb1b4a27b8a84 -94a592a5b4a59dbdad9d7a66d31f00a64b23516b3d5b633a516b3d5d6b3f5d6b3f516b3d587b4e -4763363e52313949294763365d6b3f5d6b3f476336474c292129181018101821184b52425f735a -646b5a5f735a889e8ab1b2b47784695c635018211818181818211821212127272c2a33202a3320 -27272c2c3929535a4c646b5a8c947b84947b84947b8c947b8c9c7b8c9c7b9cad94d4d7d5cacad1 -9cad946b7b625c63507784697a8c728c9c7b858c75949a91000000 -0000002b423a2142392142392142311742362142311742361a42241a42241a42241a42242b5020 -5d6b3f587b4ea64b23ca2a00a92b0ca92b0c9ca28f7b8a849bb5ad9bb5adcd4825d31f00b22400 -5b341b3949293e523139492984635fb7c7b28cb0a19d7a66bc633ca1c1b77384769bb5ad9bb5ad -a5b4a59bb5ad949a91ca2a00c630115b633a516b3d5d6b3f5d6b3f516b3d516b3d5d6b3f476336 -395229394929415a31516b3d516b3d52634a3e52312942180718101018104152405b6b51526352 -5a6b5c5f735a646b5a8aa094b1b2b46b7b6b495a4b101810101010182118182622182118212121 -2129212a312921292121292152635294a5928c9c7b949a919ca28f9ca28f8c9c7b9ca28fd4d7d5 -d4d7d59ca28f8c947b525f5a646b5a7d847684947b949a91000000 -0000002142392142392b423a2142392b423a2142312b423a214239214231174236314222a5523a -8aa094cb543bf42200b22400b2240084635f94ad9c9cad9c9dbdadcb543bd31f00b2240081250c -394929474c293949295b633ab1b2b49dbdad7d7765cb543ba1c1b79bb5ad9cada57384769cada5 -9cb5a594ad9ca63421e223005b633a5d6b3f5d6b3f516b3d516b3d516b3d5d6b3f4763363e5231 -394a3a395229415a31415a313e52313e52313142220811081018103940315b6b5152635252634a -5c63505a6b5c5f735a5f735a889e8a8cb0a16b7b6b4c524d071810080808080808101010101010 -1018101818182b28212a31292a3320646b5a9ca28f889e8a9ca28f889e8a8c9c7b8c9c7b9ca28f -b7c7b2d4d7d59cad947784697d84766b7b626b8966949a91000000 -0000002142392142392142312142392142312142392142312142312142312142317c4626879488 -bd734fef1800b224009f1a00bc633c52636b94a592a1c1b7bc7a65d31f00c21e0081250c394929 -394929394929474c29b09f939dbdad6b7b6bcd4825b1b4a287948862736ca5b4a59cad9c949d9e -9dbdada5523ae223007c4626516b3d5b633a516b3d5d6b3f516b3d5d6b3f516b3d415a31394929 -395229415a31415a313e52313e5231394a201018100811082a31295c635052634a52634a52634a -52635252634a5a6b5c646b5a646b5a788c7b8794886b7b6b4c524d081108080808080808080808 -0808080811081010101821182a33202a33208c947b889e8a8c9c7b8c9c7b9ca28f9ca28f9ca28f -9cad94b7c7b2d4d7d5a5ae97858c755c6350646b5a949a91000000 -0000002b423a2f42312142392142312142392142312142312142311742367c46267d84769d7a66 -e22300ca2a009f1a00a5523a788c7b7a9487a1c1b7b7937bd31f00ca2a009f1a00474c29394929 -394929394a209a9680a1c1b7879488a64b23b7937b94b3a563635f62736c94ad9ca5b4a59dbdad -9d7a66d31f00a64b2348634d5b633a516b3d516b3d516b3d516b3d516b3d476336395229394929 -415a31415a31415a313952293e52311821180808082129215c635052634a52634a5c635048634d -7c4626e62f107269464f6b5b6273634c524d394a3a7384766b7b6b535a4c181818080808080808 -0010080811080d16182129181018105c63509ca28f8c9c7b9ca28f94a5929ca28f9cad94a5ae97 -9cad949cad94b7c7b2d4d7d5b1b4a28c947b7a8c72738476000000 -0000002b423a2142312b423a2142392142392142312e37341742364a3e409d7a66889e8ae62f10 -e223009f1a00c630117476787b8a849dbdada5ae97c63011d31f009f1a005b341b314222394929 -3142227d7765b6c8c17a9487a5523abc7a6594b3a562736c646b63889e8a9cada59cb5a58c947b -d31f00c63011476336516b3d516b3d5d6b3f516b3d516b3d5d6b3f485a423e5231394929415a31 -415a313e52313e52313e523121321808080818211852634a52634a52634a52634a48634d794e45 -cb543bef1800d31f00a63421794e452a31292121182c39296b7b6b6b7b6b525f5a101810080808 -0811081010102121182121182a33204b52424b5242394a3a778469a5ae97a5ae97a5ae97a5ae97 -9cad949ca28f9cad94b7c7b2d4d7d5b7c7b28c947b949a91000000 -000000214239214239214239214231214231214231174236394031a5523a8cb0a1cd4825f42200 -a92b0ca92b0c9d7a666b80759cb5a5a5b4a5cd4825d31f00b11700773223314222394a20314222 -794e45a5b4a56b8075726946bc633c9bb5ad6b80756b7b6b949d9ea5b4a59cada594a592c63011 -d31f005b633a516b3d5b633a516b3d516b3d52634a516b3d4763363952293949293e5231415a31 -415a313e5231415a293142220808081018104b524252634a555a42535a4c52634a555a42cb543b -b6c8c1bc7a65d31f00f42200e223004c1b0d1818182516182b28216273636b7b6b5c6350212921 -1821182129211821182121182129212129212c39292c39292942216b7b6ba5ae979cad94a5ae97 -9cad94a5ae979cad949cad94b1b4a2b7c7b2b1b4a2a5b4a5000000 -0000002142312b423a2142312142312142312142392c3929a5523a8cb0a1bc633cef1800b22400 -9f1a009d7a666b737a767984878995733f73c63011a92b0c81250c3142223949292b5020575a33 -b09f937a9487949d9ea63421b1b4a287948862736c889e8a9cada59cad9c8cb0a1a5523ad31f00 -7c4626516b3d516b3d516b3d516b3d516b3d516b3d4763363e5231394929395229415a31415a31 -3952293e5231394929081108081108415240535a4c485a42555a42535a4c485a42a64b23b1b4a2 -9bb5ada1c1b7bc7a65c21e00e22300e62f105311001a16101a16102b28215a6b5c6b7b6b5c6350 -2a33201826222b28212129212121182129212a33202c39292e37342a33206b7b6ba5ae979cad94 -a5ae979cad949cad94a5ae97858c75849473a5b4a5b7c7b2000000 -0000002b423a2142392142392f42312142311742365b341b949a919d7a66f42200ca2a009f1a00 -a5523a686b7d4b188a4b188a4b188a4b188a4b188a4b188a3f3365393f412b5020474c299a9680 -a1c1b77b8a84bc633cb7937b8cb0a1525f5a646b639cada59cad9c94b3a59d7a66d31f00a64b23 -4763365b633a516b3d516b3d516b3d516b3d516b3d3e52313e5231395229415a313e52313e5231 -3e52313949291021100000002e373452634a555a42555a42535a4c48634da64b23b7937ba1c1b7 -a5b4a594a5929dbdadbc7a65d31f00f42200c630111010102121181008102e37346380666b7b6b -5a6b5c27272c0d16182129181826221821181818182129182129211821185b6b519cad949cad94 -9cad94a5ae97a5ae978c9c7b7a8c727a8c72849473a5b4a5000000 -0000002f42312142312142311742362142392e37346b8075949a91e22300e223009f1a00a63421 -7d84763f33654b188a4b188a4b188a4b188a1906351906351906351906353f336584635f9cada5 -94b3a5bc7a65bd734f8cb0a16b807562736c7a9487a5b4a58cb0a1858c75d31f00c63011476336 -52634a5d6b3f516b3d516b3d516b3d516b3d3e52314763363e52313e52313e52313e5231395229 -395229182918000805101810485a42555a42495a4b535a4c48634d7c4626bc7a65b6c8c1a5b4a5 -9cada5738476879488a1c1b7b7937bd31f00d31f004c1b0d101010251618394031627363627363 -6b7b6b5a6b5c2a3129071810101010181818101810181818101810394031778469889e8a8c947b -9cad94a5b4a5889e8a7a8c72858c757a8c727a8c72949a91000000 -0000006273634f6b5b495a4b4152402b423a4f6b5b949a91cd4825ef1800a92b0ca92b0c7d7765 -494a735a25865a2586767984733f733f33651906351906351906351906351906354b188a767984 -84635fbd734f7b8a8462736c525f5a7b8a84a5b4a594ad9c949a91c63011ca2a00555a42516b3d -516b3d516b3d516b3d516b3d516b3d415a313e52313e52313952293e52313e5231395229395229 -2a33200008050811082c392952634a495a4b555a4248634d575a33cb543bb6c8c1a5b4a57a9487 -646b637476785a6b5ca5b4a59dbdadb7937bef180081250c060f102b2821294221535a4c627363 -6273636273635f735a2a31290811081010101818181010102c39295f735a778469858c752a3320 -41524084947b84947b858c757a8c72858c75858c75949d9e000000 -0000007a94877a9487788c7b7384766b7b6b6b80756b7b62a5523a7c4626a92b0c84635f5a636b -5a2586463d7b4f6b5b6b7b6b7d7765646b63393f41190635100810190635190635190635190635 -cb543ba5b4a58aa094646b6394a5929cad9c9cad9c8cb0a1a64b23d31f0076612c476336476336 -516b3d516b3d516b3d52634a485a423952293e52313e52313e52313952293952293e5231314222 -081108080808182110415240485a42555a42495a4b4b5242cb543bb1b2b49cb5a56b8075646b63 -6b8075879488788c7b949d9ea1c1b7cd482581250c0010082121182a33202f42315263525b6b51 -5f735a5f735a627363627363394a3a1018101010102129185b6b515f735a5f735a3940312a3129 -2129212132185f735a7a8c727a8c72858c7584947b9cad9c000000 -000000a1c1b7b1b2b49dbdad9cad9c949d9e7a94877b8a846b80756b80756b89666b7b6b5a6b5c -5b5a73495a4b5b6b516273636b73666b73666b7b6b415240190635190635190635190635a63421 -9a96806b8075a5b4a58aa094949d9e9cad9c8cb0a19c7e3cd31f007c4626516b3d516b3d516b3d -4763364763364763364763363949293e5231395229395229395229395229394929394929071810 -001008101810213121485a42485a42485a42485a42a63421b1b4a2a1c1b77384768aa0949cada5 -5a636094a5929bb5ad9dbdadcb543bb117000800081818182a33202c392952634a52634a495a4b -52634a5a6b5c627363627363627363495a4b182118555a426b7b625c63502a31292a31292a3129 -2c392921291839403184947b84947384947b889e8aa5b4a5000000 -0000006273636b80757a94878aa0949cb5a59dbdad9dbdada5b4a59cad9c8aa0947a9487788c7b -7384767384766b80756b7b6b6b73666b73666b7b6b6b7b62858c7574767819063581250cbc7a65 -94b3a562736c6b7b6b9cb5a594ad9c94ad9c9d7a66c21e00a63421516b3d575a33476336516b3d -476336516b3d476336395229415a313e52313e52313e5231395229394929395229102110000805 -101810182110394031485a424b5242495a4b7c4626b7937ba1c1b7b1b2b4889e8a6b80757a9487 -646b63a5b4a5a1c1b7bc7a65c21e001810070808082a33202c3929535a4c52634a495a4b4b5242 -495a4b48634d4f6b505f735a627363627363526352394a3a4b52422a33202129212131212a3129 -2b28212c39295f735a6b7b626b8966858c75a5b4a5a5b4a5000000 -0000002e37342c39292f4231394a3a495a4b4f6b5b6b7b6b788c7b889e8a94ad9c9cad9c9cad9c -949d9e94a592889e8a7b8a84889e8a788c7b6273636b7b6b7384768aa09484635fa5523aa1c1b7 -62736c6273637a94879cad9c94ad9c879488c63011c63011575a33476336476336476336476336 -4763364763363952293e52313952293952293e5231395229394a3a395229182918001008101010 -1821181829184b5242485a42495a4b7c4626bc7a65b1b2b4a5b4a594a5929bb5ad879488738476 -a5b4a5a1c1b79a9680e223004c1b0d0000082b28212c3929485a4252634a535a4c485a42415240 -4b5242485a42485a425263525a6b5c6273636273635b6b512e373418211821292127272c213121 -2129215c63505f735a6b7b623940312c3929849473a5b4a5000000 -000000274a3721423921423921372e1826221531212a3129394a3a394a3a41524048634d4f6b5b -6b89667384767a9487949d9e9cb5a57a94877b8a847384766b7b6b6b7b6bbd734fa5ae97738476 -62736c6b7b6b9cad9c949d9e8aa094a64b23d31f005b633a516b3d52634a516b3d516b3d516b3d -516b3d3e52313e52313e5231394929395229394929394929395229294221001008080808182918 -1821102f4231535a4c495a4b4e5234cb543ba1c1b7a5b4a59dbdad6b7b6b879488a1c1b7a5b4a5 -a1c1b7a5b4a5e62f105311000000081821182129212f423152635248634d495a4b4b52424b5242 -415240415240485a42495a4b4b52422a31295263526380665f735a415240212921182622182118 -4b52426b7b625f735a555a421818182a31292a3320738476000000 -00000021423921423921423917372b071810071810526352949d9e889e8a7b8a84794e455b341b -394031394031394a3a4f6b5b62736341524052634a5a63606b7b6b5f735a788c7b9cad9c5a6360 -5c63509cada594a5928cb0a184635fe223007c4626516b3d516b3d516b3d476336476336476336 -415a31394a3a3e52313949293e52313949293952293952292b5020081108001008102110182118 -182118415240485a42415240a64b23b1b2b4a5b4a5a5b4a57384766b7b6b738476a5b4a59bb5ad -a1c1b7cb543b9f1a000000001a16102129211829181821102f4231485a424b5242415240415240 -4152407c4626794e45274a371821181a16102121184c524d627363627363495a4b212921394031 -6b89665f735a5b6b511818181018102c39292a31296b8075000000 -000000214239214239274a372b423a153121415240949d9e94ad9c9dbdadb7937bca2a00ca2a00 -9f1a0039492921321821372e485a42485a42393f414b188a463d7b6c6373626b7394ad9c6b8075 -7a948794ad9c8cb0a19d7a66d31f00a92b0c393f4147633647633647633648634d516b3d476336 -395229485a423e52313e52313e5231395229394929394929101810001008101810212118102108 -2a3320535a4c415240a63421b09f93a5b4a594a592738476646b6362736c94a592a5b4a5a1c1b7 -bd734fb11700000008101010212918212918212918212921213121415240415240415240415240 -4e5234c21e00c21e0081250c7d15000d16181a1610181818415240627363627363526352394a3a -555a426b7b622121180718101018102a3129213121747678000000 -0000002b423a2142392b423a214231394a3a889e8a94af9494ad9c9ca0a3c63011ca2a009f1a00 -50451e394929394929213218394a3a394a3a3f3365463d7b463d7b4b188a4b188a767984889e8a -949d9e8aa0948c947ba92b0cc21e001906351906353f3365476336476336476336516b3d3e5231 -3e52313952293e5231395229395229394929395229182910000805071810182110182110182118 -415240495a4b7c4626bc7a65a1c1b7a5b4a5889e8a646b635a6b5c7b8a849cada5a1c1b7b7937b -d31f001810070808082129182129182129182129211829182a33204152404b52424152404e5234 -a634219d7a66b22400e22300f4220081250c1a16101a16101a16102e37345a6b5c6273635a6b5c -394a3a2b282107181018181810181021372e2a33206b8075000000 -0000002142312142392142392142317c462694a59294ad9c9cb5a5cb543bd31f00b224005b341b -214231394929294221646b5a6b7b6b3f3365463d7b463d7b463d7b5a25864b188a4b188a82858c -8cb0a1889e8aa63421d31f0027272c1906351008101906354c524d516b3d516b3d415a31395229 -3e52313952293952293952293949293e5231294221000008081108182110182118182110212921 -41524050451ebd734fa1c1b7a5b4a594af9462736c7a948762736ca5b4a59dbdadb09f93e62f10 -5311000000002121182131212129182129182129211829182a31294b5242415240415240a63421 -9d7a668cb0a1949a91c63011ca2a00f42200b117002d2718212118251618485a425f735a5a6b5c -5f735a415240182118071810101810212921212921747678000000 -0000002142392142392b423a1742367c4626b7937b9dbdadbd734fd31f00b2240081250c394929 -3e5231395229575a33b09f93788c7b767984463d7b463d7b463d7b463d7b463d7b4b188a4b188a -65637f84635fb117007c4626190635100810060f101906353f3365516b3d415a313e52313e5231 -3949293952293952293949293e52313142220010080008051821101821181821101018102f4231 -474a36cb543ba5b4a5a5b4a5a5b4a57384766b8075788c7b94a5929bb5ada5b4a5cd48257d1500 -0000001818182129182129182129182129182129181829182a332041524041524081250c9d7a66 -8cb0a194a5928cb0a1949a91a64b23c21e00f4220081250c060f10394a3a5a6b5c4f6b505b6b51 -5a6b5c5f735a535a4c213121071810212921182918747678000000 -000000274a37214239274a371742364c1b0dbc7a659a9680d31f00b2240081250c2f4231153121 -21372e3949299a96809bb5ad62736ca5523a9d7a66463d7b463d7b463d7b463d7b463d7b5a2586 -4b188a4b188a7732233e525a3949290000081008101906354b188a4a525a3952293e5231394929 -3952293952293e52313949292b5020071810000805101810182118182110182110182918394a3a -a64b23b09f939bb5ada5b4a5788c7b6b80756b80759cad9c9bb5ad9dbdadcb543b9f1a00000000 -1010102129182129182129181829182129182129182129182b28212b543e773223bc633c8cb0a1 -949d9e9cad9c949d9e9cad9c9cada5bc633cc21e00c21e005b341b495a4b48634d52634a526352 -5b6b515b6b515a6b5c4f6b502e3734182118182118738476000000 -000000214239214239214239214231181818c63011e62f10ca2a00a92b0c2a332017372b174236 -1010107d7765a5b4a59dbdad9a9680a5523aa1c1b76b737a463d7b463d7b463d7b463d7b463d7b -463d7b5a25864b188a4b188a5a25863f33654b188a4b188a4b188a3f3365395229394929395229 -3952293949293952293e523118211000000010181018211818211018211818211021372e7c4626 -b7937b9dbdad9cada5889e8a62736c788c7b879488a5b4a59dbdadbc7a65c21e00080008080808 -21291818291821291821291821291818291818291821291818262241311da64b23949d9e94ad9c -94ad9c94ad9c9cad9c9cad9c94ad9c94b3a59d7a66c6301181250c2b543e535a4c48634d495a4b -485a4252634a5a6b5c5a6b5c5b6b51394a3a10251b7b8a84000000 -0000002142392142392142392b423a10251b4c1b0da92b0c81250c2d2718072219182622071810 -794e45a5b4a59dbdad9ca28fa5523a9cada5738476495a4b6b7b6b686b7d463d7b463d7b463d7b -463d7b5a2586463d7b5a25864b188a4b188a4b188a4b188a4b188a2b50203949293e5231395229 -3949292b50203952292129180008050811081821181821101821101821100722195b341bbc7a65 -a1c1b79cad9c889e8a5a6b5c6273637b8a849cad9c9dbdadb7937bd31f00251618000000212118 -2129182129182129212129181829182129182129181826222d2718a92b0c9ca28f94ad9c9cad9c -9cad9c9cad9c9cada594ad9c9cad9c8cb0a1b09f93a634211531212a3320394031495a4b394a3a -394a3a415240495a4b4f6b504f6b5b5a6b5c4152407b8a84000000 -000000214231214231214239274a3717372b0722190722190722190722190d1618060f104a3e40 -a5ae979cb5a59cb5a5bc633c9a96807a9487646b636b80758aa09494af9482858c733f735a2586 -463d7b5a2586463d7b463d7b4b188a1906354b188a3f33652a3320394a202b5020394a20314222 -3142222b50202a332000100800100818211010251b18211018181810251b2d2718cb543ba1c1b7 -94a592646b636b80755a6b5c6b7b6ba5b4a59dbdad9ca28fe62f10531100000000181818212918 -2129181829181829181829181821181829182129211829189f1a00b7937b8cb0a19cad9c5a6b5c -8aa09494ad9c8aa0949cad9c8cb0a19ca28fa634212a33202131212131212131212f42312f4231 -394a3a394a3a394a3a41524048634d587b4e4f6b5b949a91000000 -00000021423121423121423921423121423110251b1018100d1618072219060f102d27189ca28f -9cb5a5a1c1b7794e459d7a668cb0a1525f5a6273638aa094889e8a8a9e9c7d7765d31f007c4626 -495374463d7b5a25864b188a3f33654b188a4b188a2b28212b50202f4231314222294218294221 -2942182942210811080008051018101021101018101821101021101a1610a63421a5b4a59cb5a5 -646b63788c7b5a63606b7b6b949d9e9cb5a59bb5adcd48257d1500000000182108212918182918 -21291821291821291821291818291821291810251b81250cbc7a658cb0a19cada5889e8a627363 -62736c73847694ad9c9cada59cb5a5bc633c41311d2131212a33202129212c39292131212c3929 -2f42312f4231394031394a3a394a3a2a3129485a42949a91000000 -0000002142392142392142312142392142312142311531211531210722191818188c947b9bb5ad -9dbdad858c755b341b788c7b4152402c392948634d7a94878aa0947d8476c21e00c63011415a29 -415a29476336485a42393f41393f413f336527272c2b5020314222294218294221314222294221 -314222101810000805101810182110102110182110182110071810a63421b09f9394b3a59cb5a5 -889e8a4c524d94ad9c949d9ea5b4a59dbdadcb543b9f1a00000008101010212918182918212918 -182918212918182918182918212918153121531100bc633c8cb0a19cad9c94a5925263527b8a84 -738476949d9e94ad9c94b3a5bd734f4c1b0d1531212a33202131212a31292c39292129182e3734 -2f42312f42312f4231394a3a2129211a161018181882858c000000 -00000021423921423121423921423921423121423921423121423917372b7d7765a5b4a59cb5a5 -94a59277322348634d485a4221372e394a3a5263525f735a889e8aa63421ca2a00575a33415a31 -476336476336476336415a29415a31394a202b5020314222294221314222294221294221314222 -18211000080508110818211010181018211818211008211081250cb7937b9dbdad889e8a738476 -9dbdad889e8a7b8a849cb5a59dbdadbc7a65b11700080500080808212918182918212918212921 -21291821291821291821292115312141311dcd48258cb0a19cada59dbdad62736c738476788c7b -94ad9c94ad9c94b3a5bc7a6581250c17372b2a33202131212131212a33202131212c39292f4231 -3940312f42312b423a2b28211010100d16181018107b8a84000000 -000000214231274a372142392f423121423921423921423117372b794e459cb5a594b3a59cb5a5 -7c46264b52424152402c3929394a3a48634d4f6b504f6b507c4626d31f0076612c415a31415a29 -415a29415a29476336415a313949292b5020394929314222294218294221294218294221213218 -00100800100818211018211810251b1818180722194c1b0dbc7a659dbdad8aa0949cb5a57b8a84 -7384769dbdada5b4a59dbdadb7937bd31f00181007080500182118212918212918182918212918 -2129181829182129181829182b2821a92b0c949a919dbdad6b736662736c7384766b7b6b8aa094 -9cad9c94b3a59a9680a634211531212131212131212a33202131212131212c39292f42312f4231 -2f42312f42313940319f1a0081250c81250c2d271882858c000000 -000000274a37214231274a3721423921423121423121423121372ea64b239cad9c9dbdad794e45 -555a42394a3a2a31292f423148634d4f6b504f6b50474c29c21e007c4626476336415a31415a31 -415a29415a314763363952293142222b5020314222294221314222294221314222213921001008 -001008101810102110102110181818082110251618bc633c9bb5ad94ad9c646b636b8075a1c1b7 -7b8a84788c7b9bb5ad9cad94e62f10531100000008181818212918182918212918182918182918 -212918212918212918182622a92b0cb7937b94b3a59cb5a5879488495a4b5a6b5c788c7b9cad9c -94b3a5a5ae97a634212d271821312121292121321821372e2131212c39292f42312f42312f4231 -2f42312c392981250ca5523ac63011ca2a00ca2a009a9680000000 -0000002142392142392142312142312b543e2b423a21423117423681250cbc7a65858c755b341b -4f6b504f6b50394a3a4f6b504f6b504f6b504b52429f1a00c63011476336485a42476336415a31 -415a31415a29415a293142222b5020314222294221314222294221294218294221101010000805 -071810102110182110101810102110101810a63421a5b4a594b3a594a592627363627363889e8a -9dbdad949d9e9cb5a5cd48257d1500000008101010212918182918182918212918182918212918 -21292121312115312181250cbc7a658cb0a1889e8a9cb5a59dbdad646b5a8aa0949bb5ad9cada5 -9cb5a5a64b2341311d1531212a33202131212131212129182a31292f42312b423a3940312f4231 -2f42317d150084635f8cb0a1879488a64b23ca2a00b7937b000000 -0000002142392142392142392142312b543e214239214231174236213121a634217732234f6b50 -2e3734485a424f6b5048634d4f6b5048634d81250cc63011575a33415a31476336415a31415a31 -415a29415a292b50202b5020314222294218314222294221314222314222102110000805071810 -10211010181010211018211807181081250cb09f9394b3a59cad9c788c7b6273636b7b6b889e8a -9cada59dbdadbc633c9f1a00000008080808182918182910182918182918182918212918182918 -2129181531214c1b0dbc633c94b3a59cb5a5889e8a6b80759cb5a59cad9c8aa0949cad9c94b3a5 -bd734f5b341b1531212a33202131212131212129212131212f42312f42312f42312f42312b423a -4c1b0da5523a8aa0948aa09494ad9c949d9ea5523ab09f93000000 -000000274a37274a37274a372142312142312142312142391742360722194c1b0d5c6350485a42 -394a3a2b423a4f6b505263524f6b505b341bca2a0076612c415a31415a31415a31415a29415a29 -415a312b5020314222314222294221314222294221294221294221213218001008001008101810 -101810102110182110072219531100b7937b94b3a59cad9c94a5925a63605a6b5c8794889cb5a5 -94b3a5bc7a65ca2a001008100808081821101829182129181829182129182129182129182b2821 -1531212d2718cd48259cada594b3a594ad9c9cada594a5926b80758aa0949cb5a594b3a5bc7a65 -81250c1531212131212a31292131212131212129212e37342f42312f42312f42312f423141311d -a634218aa0948aa09494a592949d9e8cb0a19bb5ada4a8ae000000 -000000214239274a3721423921423921423921423121423917423681250c794e4548634d2c3929 -2c39294f6b505263524f6b5050451eb117007c4626415a31415a31476336415a29415a31476336 -3952292942212b5020314222294221294221294221294221213921001008001008101810102110 -0d16181821100722194c1b0dbd734f9dbdad94ad9c6b8075638066646b636b8075949d9e9dbdad -9a9680e22300181007080500181818182918182918182918212918182918212918212918153121 -2b2821c630119ca28f9bb5ada5b4a5889e8a6b80759dbdad949d9e788c7b94b3a59a9680a63421 -1531212131212a33202a31292129212129212131212131212c39293940312f42312c3929a92b0c -8794888a9e9c94a59294ad9c94ad9c94af9494ad9ca4a8ae000000 -000000274a37214239274a372142312142392f42311742365b341ba5523a4f6b5b2f4231415240 -495a4b4f6b504f6b504b52429f1a00a63421476336415a31476336415a31415a314763363e5231 -2b50202f4231314222294221314222294221294221294218081108001008101810101810102110 -18211010251b1a1610a5523a9bb5ad94a5926b807562736373847687948894ad9c9cb5a59cad9c -e62f10531100080500101810182910182110182918212918182918212918182918212918153121 -a92b0cb7937b94b3a5788c7b6b8075788c7b495a4b7a94879dbdad9cb5a59cad9ca64b232d2718 -21372e2a33202a31292a31292131212131212131212129212131212c39292e37347d15009d7a66 -8cb0a194a59294ad9c94ad9c94ad9c949d9e9cb5a5b1b2b4000000 -000000274a37274a37274a37274a372b423a174236394031a5523a788c7b48634d2f4231415240 -4f6b504f6b50495a4b7d1500c63011415a29415a29415a31415a31415a31415a31415a292b5020 -314222314222314222294218294221294218294221101810000805101810102110101810182118 -182118071810a63421b09f9394b3a562736c6b7b6b62736c62736c8aa09494ad9c94b3a5cb543b -7d150000000010101018291818211818211021291818291818291818291821291815312181250c -bd734f9bb5ad7b8a8462736c62736362736c889e8a62736c9cb5a594b3a5bc633c4c1b0d17372b -2a332021372e2c39292131212129212131212129212131212a33201531217d15009d7a668cb0a1 -94a59294ad9c949d9e94ad9c94ad9c94ad9c9cb5a5a4a8ae000000 -0000002b543e2b543e2b543e274a37274a37274a37a92b0c9a96804f6b5b495a4b48634d526352 -48634d48634d5b341bca2a00575a33415a29415a31415a31415a31415a31415a292b5020314222 -314222294221294218294221294221314222182910000805081108102110181818102110182110 -08211081250cb7937b8cb0a194ad9c788c7b62736c6b7b6b7b8a849cb5a594b3a5bd734fb11700 -0000000808081821181829181821101829182129181829182129182129181531214c1b0dcb543b -94b3a59cb5a59cad9c5a6360788c7b6b807594a5929cad9c94b3a5bd734f4c1b0d17372b213121 -2131212131212a312921372e21292121312121292121312117372b4c1b0da5523a8a9e9c94a592 -94ad9c94ad9c94ad9c94ad9c94ad9c94ad9c9cb5a5a4a8ae000000 -000000274a372b543e2b543e2b543e2b543e773223ca2a00a5523a6b80754152404f6b50526352 -4f6b5050451eb117007c4626415a294763363e5231415a31415a31415a292b5020314222314222 -294221294218294218294221294221213218001008001008101810182110101810181818082110 -4c1b0dbc7a6594b3a594ad9c889e8a9cada58794886b80759cad9c94b3a5bc7a65c21e00181007 -0000081821101821101821181829181821181829182129182129181826222d2718cd48259cad9c -9cb5a5788c7b889e8a9dbdad62736c788c7b9bb5ad94b3a5b7937b81250c1531212b2821213121 -21312121312121312121292121312121312121312117372b4c1b0da6342194ad9c9cb5a594a592 -94ad9c94ad9c94ad9c94ad9c94ad9c94b3a5bc7a65b7937b000000 -000000274a37274a372b543e2b543e50451eca2a00a92b0cb224009d7a6663806648634d4f6b50 -474a369f1a00a63421476336415a31415a29415a31415a29476336395229314222314222294221 -314222294221294221294221294218080808000805101810102110101810182110072219262410 -bc633c9bb5ad94ad9c8794885a6b5c6b80759cad9c9cb5a594b3a59ca28fc63011531100000000 -101810182118182110182918182118212918212918212918182918182918a92b0cb09f9394b3a5 -a5b4a57384765a63607a94879dbdada5b4a594b3a59a9680a92b0c182918213121213121212921 -2131212a31292131212129182129212129212131212d2718a92b0c9ca28f788c7b6273639cb5a5 -94ad9c94ad9c94ad9c94ad9c8cb0a19a9680a634217b8a84000000 -000000274a37274a372b543e2b543e773223b22400a92b0cb22400b224005b633a4f6b50485a42 -81250cc63011415a29476336415a29476336415a29415a313e52312b5020294221314222294218 -29421829421829421829422107181000080508110810211010181010211010251b1a1610a63421 -9cad9c8aa0947a94876273636b80757a94878aa0949cb5a594ad9ccd4825531100000000101010 -18291818211018291818211018291821291821292121291810251b81250cbc7a6594b3a5a5b4a5 -94a59262736c7b8a84646b639cb5a594b3a59cad9ca64b232d27181531212a332021372e213121 -2129212a312921292121312121292121312118262281250c9d7a6694b3a56b8075525f5a62736c -8aa09494ad9c94ad9c94ad9c9ca28fa64b23294221878995000000 -000000274a372b423a2f42312b543e2b543e81250cb22400b22400b2240081250c4b52425b341b -c21e0050451e174236274a372b50203e5231415a29415a312b5020294221294221294221294221 -29421829421829422110210800080508110810181010181010211018181807181081250cb09f93 -9bb5ad788c7b4152406b80755a6b5c94a5929cb5a594b3a5cb543b9f1a00000000080808182110 -18211818211018211818211018291818291826241010251b7d1500bd734f94b3a59cad9c94ad9c -7384766b7b6b788c7b94ad9c9cada594b3a5bc633c4c1b0d182622212921213121213218213121 -2a31292131212131212129212132181826227d15009d7a6694b3a57384765a6b5c6b8075738476 -8aa09494ad9c94ad9c8cb0a1a64b2341311d21372e879488000000 -0000002b543e2b543e274a37274a37214239415240a92b0ca92b0ca92b0c81250c531100c21e00 -5b341b17423621372e17372b17372b17372b17372b1a422410251b0d1618153121213218294218 -294218294218212918000805080808101810102110101810182110082110531100b7937b8cb0a1 -7384767a948762736c5a63607a94879cad9c94b3a5bd734fb11700000008000805182110102110 -1821101821181821181829181829102129181531214c1b0dcb543b8cb0a19cada5a5b4a5627363 -7b8a845a6b5c9cb5a59cada594b3a5bd734f4c1b0d182622212918212918212918212918212918 -21312121372e2a3320213121153121531100a5523a94ad9c8aa09462736362736c7a948794ad9c -94ad9c94ad9c94b3a5bc633c5b341b17372b2c3929879488000000 -000000274a372142311742362142391531210718102624109f1a00a92b0c7d1500a92b0c81250c -07221910211010251b21372e17372b17372b17372b17372b10251b060f10001008081108060f10 -1021102a33200010080010081018101018101021101818180821104c1b0dbd734f8cb0a19cad9c -6273634152405a6b5c6b80759cad9c94b3a5b7937bca2a00181007000000181818182110182118 -1821101821101821101829182129181826222d2718a634219ca28f9cada59cada57384765a6b5c -889e8a9bb5ad9cad9c94b3a5b7937b81250c182918212918182918182918212918182918212921 -1531212129182a33201531212d2718a634219cad9c94ad9c7b8a846b80755a6b5c8aa0949cad9c -94a5928cb0a1bc7a657732231531212a33202c3929878995000000 -000000153121464a485a52611818180d16184c524d4a525a21211881250cb22400b22400182118 -0722190811080d16182f4231394a3a21423117372b17372b17372b072219071810080808001008 -0808080718100808081018101018101018101018101021101010107c46269cada5879488738476 -9cada56b807562736c94a59294b3a59ca28fc63011531100000000101010182110182110182110 -182110182110182118182118212918182918a92b0c9a968094b3a59bb5ad788c7b738476738476 -7b8a849cad9c9cb5a5b09f93a92b0c182918182918212918182918212918212921212921213121 -2129212131212131212d2718a92b0c949a9194ad9c7384765a6b5c5a6b5c7384769cb5a594af94 -8cb0a19a968081250c2139212131212a31292c3929879488000000 -000000153121a4a8ae82858c8794882e3734a4a8ae7d847682858c4c1b0da92b0c2d2718072219 -10251b10251b3f33653f33653142223940312e373418262215312117372b071810081108081108 -0718100811081010101021101018101818181021101018104c1b0d7d847694ad9c8aa0946b8075 -7384769cad9c94a5929cada594ad9ccd48257d150000000010101018211018211010251b182110 -1821181821101821102129181531217d1500bc7a6594b3a59cad9c889e8a646b63646b6362736c -9cada59cada59cad9ca64b23262410153121212918182918212921182918212918212918213121 -21292121312118262281250c9d7a669dbdad7384766b807562736c8794889cb5a594ad9c94ad9c -9ca28fa634212a33202131212131212131212c3929878995000000 -0000001531219ca0a34a525a949a91393f41878995393f41949a9100100818262208211010251b -07221910251b27272c3f336510081018291821291818211807181008211010251b060f10071810 -0808080808081018101018101018101018101021104c1b0d555a4273847694a5927b8a8494ad9c -7384767384769cad9c94b3a5bc633c9f1a00000000080808182110182118182110182110182110 -182110182118262410072219531100bd734f8cb0a19cad9c9cb5a5646b638794886b7b6b738476 -949d9e9cb5a5bc633c4c1b0d182918212918212918212918212918212921212918212918213121 -2131211531217d1500bd734f9bb5ad7a94875a63605a6b5c6b7b6b94ad9c94ad9c94ad9c94ad9c -a64b2341311d1531212a33202131212129182c3929879488000000 -0000001826229ca0a34a525a949a912e3734949a914a525a8794880010081531210d1618072219 -0722190722190d1618190635190635190635182622182110182918071810060f10071810071810 -0010080808080010081018101018100718102624107c462648634d788c7b7384765263526b8075 -9cad9c7a94878cb0a1bc7a65b11700080500080500182118182118212918212921182118182118 -1821181821100722194c1b0dcd48258cb0a19bb5ad4f6b5b6b7b6b6b8075525f5a7b8a84a5b4a5 -94b3a5bd734f5311001531212b282121292121291818291821291810251b10251b1829182a3320 -17372b4c1b0dbc633c94b3a58794884c524d7384766b80759cad9c94ad9c949d9e8cb0a1bc633c -5b341b1531212a33202131212131212131212c3929878995000000 -000000072219a4a8ae747678879488393f41949a91464a48878995072219182622072219212918 -a5523aa5523a2a33200718100d1618190635733f73190635071810071810001008001008001008 -0811080010085b341bbc633c5b341b1a16105b341b4f6b5b5b633a9d7a66525f5a6b7b6b7b8a84 -889e8a9ca28fb7937bb11700181007000000101010102110102110101810102110182110182110 -2b28217c4626a64b23a6342194a592949a91bd734fbd734f72694662736c7a9487889e8a94b3a5 -b7937b7d15003949297c462607221921291810251b2129181829187c4626a5523a41311d153121 -4c1b0da92b0cb7937b9cb5a54f6b5b7384766b807594b3a594ad9c94ad9c8cb0a1bc7a655b341b -1826222132182131212131212131212a332018211882858c000000 -000000072219b1b2b4b6c8c182858cb1b2b48794884a525a87948807181018262207221941311d -a5523aa5523a7c46267c46267c462650451ec0852f41311d5b341b7c46262d27187c46267c4626 -001008181818bc633c2624101a1610a634217269467269467c46269c7e3c7269469d7a669d7a66 -9d7a66c0852fcd4825a64b237732232d271876612c5b341b50451e7c46267c462610251b102110 -41311dbc633cbc633c9a96809cb5a56b80759c7e3cbd734f646b5ab7937bb7937b9ca28f9ca28f -a6342150451ebc633c7c462650451e41311d50451e1829182b2821bc633c7c4626a5523a41311d -bc633c84635fbc633c858c759d7a6684635f9ca28fbc7a659cad949a9680b7937b81250c213121 -213121213121213218213121213121101810071810949a91000000 -00000010251b9ca0a37b8a84b7bdbcd4d7d57476784a525a8794880010081826220722192b2821 -c0852f7c46267c4626bc633ca5523a5b341ba64b2341311dbc633ca5523a7c4626a5523a262410 -060f10262410a5523a41311dbc633ca5523a727442a5523a76612c84635f794e459d7a66bd734f -7d7765cd48255311005b341b7c4626262410a5523a7c4626a64b237c4626a5523a212918102110 -41311dbc633cbd734fb7937b9cada58aa094794e45b7937b9d7a66bd734f9d7a66bc633cbc633c -7c4626a64b237c46267c4626a64b237c46267c46261021102d2718bc633ca5523a76612cbc633c -bc633c9d7a669c7e3c464a48bc633c9d7a66bd734fbc633cbd734fbd734fa64b232132182a3320 -2131212131212131212a3320182118000000101810878995000000 -0000001826229ca0a3626b6b82858c4a525a82858c464a4887899500080510251b07181041311d -a5523a060f1050451ebc633c5b341b41311dbc633c5b341bbc633c7c46262d2718a5523a071810 -071810081108a5523a7c4626bd734f9c7e3ca5523a9c7e3c773223bd734f76612cbd734fbd734f -9c7e3ccd48255b341bbc633c41311da5523abc633c76612ca5523a50451ea5523a2a3320082110 -7c4626bc633ca64b23b7937b94a5928cb0a19d7a66bd734f7d7765bc7a65889e8acd4825bc633c -7c4626a64b237c462676612c5b341bbc633c3142221821182b2821bc633c2129184c1b0dbc633c -9d7a669d7a66bc633c726946bc7a658c9c7bbc633cbd734f778469bc633c50451e1826222a3320 -2a3320212921213121212918001008000000181818879488000000 -000000182622a4a8ae4c524d949a912e3734949d9e5a636087948807221921372e153121182918 -41311d1826220722195b341b5b341b0718105b341b41311d2d27185b341b2624102d2718081108 -0718100010084c1b0da64b239a9680646b5a7c4626575a3339403184635f7d77659d7a66a64b23 -9f1a005b341b5b341b5b341b5b341b41311d7c462641311d41311d41311d50451e10251b4c1b0d -7c46269d7a669d7a66b7937b6b7b6b7b8a84858c759a96806b7b629ca28f9d7a667732237c4626 -2a33205b341b7c462641311d41311dbc633c18211021291821291850451e7d1500a5523a726946 -bd734f646b5a9c7e3c9d7a66bd734f9a96807269469c7e3ca64b23773223314222213121213121 -213121213121212918081108080808000000212918949a91000000 -00000015312174767827272c6b6b72393f41879488767984393f4117372b2b543e274a37274a37 -174236153121071810071810072219102110071810072219072219001008001008001008081108 -001008262410b22400b11700a5523a6b807548634d415240535a4c889e8a8aa0949a9680c63011 -181007080500001008071810071810071810071810102110102110182118102110262410a92b0c -949a9194ad9c9cada56b807562736c6b7b6b8aa0949cb5a59dbdadbc7a6581250c102108102110 -18291010211010251b1821107c46265b341b10251b21291810251b262410a634219cad9c8cb0a1 -94ad9c7b8a8462736c8aa0948a9e9c94a5928cb0a1bd734f4c1b0d153121212918213121213218 -213121213218071810000000080808001008773223b09f93000000 -0000001826225a5a635a5261464a485a5a5a464a48393f41464a481a4224274a37214231214231 -274a3721423115312107181010251b07221910211007221921372e213921072219081108071810 -060f107d1500ca2a00b22400b117007732234f6b505b6b516b7b6b94a592889e8ac63011531100 -08050010101018210818181818211018211018211018211026241018211010251b81250cb7937b -8cb0a19cad9c889e8a5a63605a6b5c7b8a849cad9c94ad9c9a9680a92b0c102110212918212918 -212918212918212918212118182110182110212918182918262410a92b0cb09f9394ad9c62736c -788c7ba5b4a5889e8a7b8a849cad9c8cb0a19d7a6681250c1531212a3320213121212918212921 -2132181018100000000808080010084c1b0da64b23b09f93000000 -000000274a372f42312142312142312142312f4231214231214231214231214231214231214231 -214231274a37274a3710251b07181007221907181007181010251b274a37214231153121102110 -060f100010087d1500b22400a92b0c7d15005b341b5b6b51788c7b8cb0a1cd48257d1500000000 -08080810181010181018210810181018211018211018211018211010251b7d1500bd734f8cb0a1 -94a5926b7b6b6b7b6b6273636b807594a5929cad9c9cad94a63421262410182918182110182110 -1821101821181821182129181821102129181829181018109f1a009d7a668aa0947384764c524d -5a6b5c7a94879cada59cad9c8cb0a19a9680a63421182918212921213218212921213218213121 -1821180000000805000008052d2718b224009a9680a4a8ae000000 -0000002b543e2b543e2b543e274a37274a37274a37274a37274a37274a37274a37214239274a37 -274a37274a37274a37274a3710251b07181010251b10181007221921423121423121423121372e -15312110211010181081250cb117007d15007d15005b341b889e8abd734f9f1a00080500000000 -10181018181818181818211018211018211018211018211010251b4c1b0da5523a8cb0a19cad9c -8aa0945a6360738476889e8a94a5929cad9c94b3a5a5523a4c1b0d10251b212918212918212918 -21291821291821291818211021291821291810251b7d1500bc7a659dbdad646b63525f5a5a6b5c -62736c94a59294ad9c94a59294a592a64b232d27181531212a3320213218213121213121212918 -0010080808080000002624109f1a009d7a669dbdad9ca0a3000000 -0000002b543e2b543e2b543e2b543e2b543e2b543e2b543e2b543e274a372b543e274a37274a37 -274a37274a37274a37274a37274a371531210718100718100718101531212f42312142312f4231 -21423110251b0718101818187d15007d15007d15007d1500a63421b11700181007000000000805 -081108101810101810101810101810101810182110102110262410a634219cad9c9cad9c9cada5 -6b7b6b889e8a62736c94a5929cad9c94b3a5bd734f81250c1531212a33202129182129182a3320 -212918182110182918182110212918102910531100bc633c9cb5a5788c7b525f5a62736362736c -94a59294a59294a5928cb0a1a5523a4c1b0d153121212918212921212921213121213121081108 -08050000000808211081250ca5523a94ad9ca5b4a59ca0a3000000 -0000002b423a2e37342c39292e37342e373421372e21372e2e373421372e2e37342e37342f4231 -2142312142312142312b423a21423121372e21312118262218262227272c2b423a2f42312f4231 -2e373421372e10251b0d16181826224c1b0d7d150081250ca92b0c4c1b0d060f10101010101010 -101810181818101810182118212118212118212918212918a634219a968094a5929cad9c879488 -62736c627363788c7ba5b4a59cb5a5b7937b81250c1531212a33202131212131212a3320212921 -2129182129182129212129181829184c1b0dcd48258a9e9c889e8a738476525f5a5263529cad9c -94ad9c9cad9c94b3a5bd734f4c1b0d2131212b28212129182129182a3320213121101010000000 -08080807181081250ccd4825a5b4a594ad9c9dbdada4a8ae000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000080008000000080008080808080808080808000000000000000000 -000008080808080008080500080008001008000008000008080008001008000000000805080808 -0800080010080000000805000808080808080808081008101a1610101810101010181818101810 -101010101810212118182118182622251618100810081108101010101010101010101010101010 -10101008110810101010101007181025161841311d1826220808082a31291821182129212e3734 -2a31292e37343940314c1b0d081108101010101010101010101010101810101010000805080808 -0808081a16104c1b0d4a3e40495a4b4c524d525f5a393f41000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/sql-99.gif b/Docs/Books/sql-99.gif deleted file mode 100644 index a1f3b7403e75b0e8e566b2c8877ffd104019b9a0..0000000000000000000000000000000000000000 Binary files a/Docs/Books/sql-99.gif and /dev/null differ diff --git a/Docs/Books/sql-99.txt b/Docs/Books/sql-99.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Docs/Makefile.am b/Docs/Makefile.am index b358826341530ad58f44aea52a2e670dcdede2ff..3e81cc8b7e114a4a083a18eafe382d985c43cbbe 100644 --- a/Docs/Makefile.am +++ b/Docs/Makefile.am @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -noinst_SCRIPTS = Support/generate-text-files.pl +noinst_SCRIPTS = generate-text-files.pl EXTRA_DIST = $(noinst_SCRIPTS) mysql.info INSTALL-BINARY @@ -42,7 +42,7 @@ DISTCLEANFILES = $(TXT_FILES) CLEAN_FILES: $(TXT_FILES) touch $(TXT_FILES) -GT = $(srcdir)/Support/generate-text-files.pl +GT = $(srcdir)/generate-text-files.pl ../INSTALL-SOURCE: mysql.info $(GT) perl -w $(GT) mysql.info "installing-source" "windows-source-build" > $@ diff --git a/Docs/MySQL-logos/mysql-01.gif b/Docs/MySQL-logos/mysql-01.gif deleted file mode 100644 index 773453f8dd7a99ce553c17412326bbc626254ecc..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-01.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-02.gif b/Docs/MySQL-logos/mysql-02.gif deleted file mode 100644 index 12d984b55e0e4d7bd793e1320f7492edae882f95..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-02.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-03.gif b/Docs/MySQL-logos/mysql-03.gif deleted file mode 100644 index abb16f2aa592021a54f84b63e246854522708757..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-03.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-04.gif b/Docs/MySQL-logos/mysql-04.gif deleted file mode 100644 index e207e1790f75fe447abd91582ebab6b4575c7174..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-04.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-05.gif b/Docs/MySQL-logos/mysql-05.gif deleted file mode 100644 index f78b8a17b93e6a6df747887498aace260bc16cf8..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-05.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-06.gif b/Docs/MySQL-logos/mysql-06.gif deleted file mode 100644 index c660e1d1f4f464fedcd6877e3a1705166bcb4552..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-06.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-07.gif b/Docs/MySQL-logos/mysql-07.gif deleted file mode 100644 index be309d0de1cead248854a8455717d8b2056290cb..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-07.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-08.gif b/Docs/MySQL-logos/mysql-08.gif deleted file mode 100644 index 3d5b21356550d20e4bca9ab61a0a7f1f1027bec8..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-08.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-09.gif b/Docs/MySQL-logos/mysql-09.gif deleted file mode 100644 index 75d08592795aaf2d83fc1101d5588ea7bfa2ab22..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-09.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-10.gif b/Docs/MySQL-logos/mysql-10.gif deleted file mode 100644 index 8d0a8551e9ef877cfad151deab5dd906eaaa938a..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-10.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-11.gif b/Docs/MySQL-logos/mysql-11.gif deleted file mode 100644 index e5f3770a7bdc85a1f7384704abfd1defc7beef3c..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-11.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-12.gif b/Docs/MySQL-logos/mysql-12.gif deleted file mode 100644 index b045aaf3549454b8cc5b158da1a01b241db65d71..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-12.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-13.gif b/Docs/MySQL-logos/mysql-13.gif deleted file mode 100644 index 0d5aaf88f6fdd7e60381d4bbf751356e21ad456a..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-13.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-14.gif b/Docs/MySQL-logos/mysql-14.gif deleted file mode 100644 index 9bce287b4b32103a67097d2d33df8dcc86c473a4..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-14.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-15.gif b/Docs/MySQL-logos/mysql-15.gif deleted file mode 100644 index d70ffec83ddcd1cff6c0791dc5c882b6c89b2a4d..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-15.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-16.gif b/Docs/MySQL-logos/mysql-16.gif deleted file mode 100644 index 9b30833dc1dfb09d8bd7d7364cb7947074cdbf47..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-16.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-17.gif b/Docs/MySQL-logos/mysql-17.gif deleted file mode 100644 index 5b228496b66857accfbe7ef20699d1330aa24c5f..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-17.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql-compatible.jpg b/Docs/MySQL-logos/mysql-compatible.jpg deleted file mode 100644 index cce9cf84b91f71734364598b71d8c0f00f774ee2..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql-compatible.jpg and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-01.gif b/Docs/MySQL-logos/mysql_anim-01.gif deleted file mode 100644 index f537d60da413ccc7e0d32b95a33636a2a67a57cd..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-01.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-02.gif b/Docs/MySQL-logos/mysql_anim-02.gif deleted file mode 100644 index cfd3e1cfc3e3c76ac402e91b41b4fafbe565187a..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-02.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-03.gif b/Docs/MySQL-logos/mysql_anim-03.gif deleted file mode 100644 index 6ac6b3ebcc10ad72e73c82cbc275cff50a3e269c..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-03.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-04.gif b/Docs/MySQL-logos/mysql_anim-04.gif deleted file mode 100644 index d3150860ecfab710ed197bb10ffa1635b605f16a..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-04.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-05.gif b/Docs/MySQL-logos/mysql_anim-05.gif deleted file mode 100644 index 46f288ef71d36c46cf9569bc8741e1f408f6d596..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-05.gif and /dev/null differ diff --git a/Docs/MySQL-logos/mysql_anim-06.gif b/Docs/MySQL-logos/mysql_anim-06.gif deleted file mode 100644 index 3dc283dbfb6d390a513815b0cb76592f92728a50..0000000000000000000000000000000000000000 Binary files a/Docs/MySQL-logos/mysql_anim-06.gif and /dev/null differ diff --git a/Docs/Support/.cvsignore b/Docs/Support/.cvsignore deleted file mode 100644 index 8772614a6b617f3c75efb6d96920443c96de2a73..0000000000000000000000000000000000000000 --- a/Docs/Support/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -manual.html -manual_toc.html diff --git a/Docs/Support/colspec-fix.pl b/Docs/Support/colspec-fix.pl deleted file mode 100755 index 6c64edd144141d044dcb841cb3b9ea5fb86ae06d..0000000000000000000000000000000000000000 --- a/Docs/Support/colspec-fix.pl +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl -w - -# -# Script to rewrite colspecs from relative values to absolute values -# - -# arjen 2002-03-14 append "cm" specifier to colwidth field. - -use strict; - -my $table_width = 12.75; # Specify the max width of the table in cm -my $gutter_width = 0.55; # Specify the width of the gutters in cm - -my $str = join '', <>; # Push stdin (or file) - -$str =~ s{([\t ]*(<colspec colwidth=\".+?\" />\s*)+)} - {&rel2abs($1)}ges; - -print STDOUT $str; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR shift, "\n"; -} - -sub rel2abs { - my $str = shift; - my $colnum = 1; - - my @widths = (); - my $total = 0; - my $output = ''; - - my $gutters; - my $content_width; - my $total_width; - my @num_cache; - - $str =~ /^(\s+)/; - my $ws = $1; - - while ($str =~ m/<colspec colwidth="(\d+)\*" \/>/g) { - $total += $1; - push @widths, $1; - } - - msg("!!! WARNING: Total Percent > 100%: $total%") if $total > 100; - - if (! $total) { - die 'Something bad has happened - the script believes that there are no columns'; - } - - $gutters = $#widths * $gutter_width; - $content_width = $table_width - $gutters; - # Don't forget that $#... is the last offset not the count - - foreach (@widths) { - my $temp = sprintf ("%0.2f", $_/100 * $content_width); - $total_width += $temp; - - if ($total_width > $content_width) { - $temp -= $total_width - $content_width; - msg("!!! WARNING: Column width reduced from " . - ($temp + ($total_width - $content_width)) . " to $temp !!!"); - $total_width -= $total_width - $content_width; - } - - $output .= $ws . '<colspec colnum="'. $colnum .'" colwidth="'. $temp .'cm" />' . "\n"; - ++$colnum; - push @num_cache, $temp; - } - - return $output . "\n$ws"; -} diff --git a/Docs/Support/docbook-fixup.pl b/Docs/Support/docbook-fixup.pl deleted file mode 100755 index 48ab085ad3ec436f6388bc3736b93006e1ff0077..0000000000000000000000000000000000000000 --- a/Docs/Support/docbook-fixup.pl +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/perl -w - -# Fix the output of `makeinfo --docbook` version 4.0c -# Convert the broken docbook output to well-formed XML that conforms to the O'Reilly idiom -# See code for detailed comments -# Authors: Arjen Lentz and Zak Greant (original code by Jeremy Cole) - -use strict; - -my $data = ''; -my @apx = (); -my $apx = ''; -my @nodes = (); -my $nodes = ''; - -msg ("-- Post-processing `makeinfo --docbook` output --"); -msg ("** Written to work with makeinfo version 4.0c **\n"); - -msg ("Discarding DTD - not required by subsequent scripts"); -# <> is a magic filehandle - either reading lines from stdin or from file(s) specified on the command line -<>; - -msg ("Create an XML PI with ISO-8859-1 character encoding"); -$data = "<?xml version='1.0' encoding='ISO-8859-1'?>"; - -msg ("Get the rest of the data"); -$data = $data . join "", <>; - -msg ("Add missing <bookinfo> and <abstract> opening tags"); -# Note the absence of the g (global) pattern modified. This situation can only happen once. -# ...as soon as we find the first instance, we can stop looking. -$data =~ s/<book lang="en">/<book lang="en"><bookinfo><abstract>/; - - -# arjen 2002-05-01 -msg ("Processing docbook-prefix special strings"); -$data =~ s/FIXUPmdashFIXUP/\&mdash\;/g; - -$data =~ s/FIXUPdoubledashFIXUP/--/g; - -$data =~ s/FIXUPstrongFIXUP/<emphasis\ role\=\"bold\">/g; -$data =~ s/FIXUPendstrongFIXUP/<\/emphasis>/g; - -$data =~ s/FIXUPemphFIXUP/<emphasis>/g; -$data =~ s/FIXUPendemphFIXUP/<\/emphasis>/g; - -$data =~ s/FIXUPfileFIXUP/<filename>/g; -$data =~ s/FIXUPendfileFIXUP/<\/filename>/g; - -$data =~ s/FIXUPsampFIXUP/<literal>/g; -$data =~ s/FIXUPendsampFIXUP/<\/literal>/g; - - -msg ("Removing mailto: from email addresses..."); -$data =~ s/mailto://g; - -msg ("Removing INFORMALFIGURE..."); -$data =~ s{<informalfigure>.+?</informalfigure>} - {}gs; - -msg ("Convert ampersand to XML escape sequence..."); -$data =~ s/&(?!\w+;)/&/g; - -# arjen 2002-05-01 -msg ("Changing (TM) to XML escape sequence..."); -$data =~ s/MySQL \(TM\)/MySQL™/g; -$data =~ s{<command>TM</command>} - {™}g; - -# arjen 2002-05-01 -msg ("Changing ' -- ' to XML escape sequence..."); -$data =~ s/ -- /—/g; - -msg ("Changing @@ to @..."); -$data =~ s/@@/@/g; - -msg ("Rework references of the notation '<n>'"); -# Need to talk to Arjen about what the <n> bits are for -$data =~ s/<(\d)>/[$1]/g; - -msg ("Changing '_' to '-' in references..."); -$data =~ s{((?:id|linkend)=\".+?\")} - {&underscore2hyphen($1)}gex; - -msg ("Changing ULINK to SYSTEMITEM..."); -$data =~ s{<ulink url=\"(.+?)\">\s*</ulink>} - {<systemitem role=\"url\">$1</systemitem>}gs; - -msg ("Adding PARA inside ENTRY..."); -$data =~ s{<entry>(.*?)</entry>} - {<entry><para>$1</para></entry>}gs; - -msg ("Fixing spacing problem with titles..."); -$data =~ s{(</\w+>)(\w{2,})} - {$1 $2}gs; - -msg ("Adding closing / to XREF and COLSPEC tags..."); -$data =~ s{<(xref|colspec) (.+?)>} - {<$1 $2 />}gs; - -# arjen 2002-04-26 -msg ("Removing separate target titles from LINKs and make them XREFs..."); -$data =~ s{<link (linkend=.+?)>.+?</link>} - {<xref $1 />}gs; - -# Probably need to strip these -msg ('Adding "See " to XREFs that used to be @xref...'); -$data =~ s{([.'!)])\s*<xref } - {$1 See <xref }gs; - -msg ('Adding "see " to (XREFs) that used to be (@pxref)...'); -$data =~ s{([([,;])(\s*)<xref } - {$1$2see <xref }gs; - -msg ("Making first row in table THEAD..."); -$data =~ s{( *)<tbody>(\s*<row>.+?</row>)} - {$1<thead>$2\n$1</thead>\n$1<tbody>}gs; - -msg ("Removing EMPHASIS inside THEAD..."); -$data =~ s{<thead>(.+?)</thead>} - {"<thead>".&strip_tag($1, 'emphasis')."</thead>"}gsex; - -msg ("Removing empty PARA..."); -$data =~ s{<para>\s*</para>} - {}gs; - -msg ("Removing lf before /PARA in ENTRY..."); -$data =~ s{\n(</para></entry>)} - {$1}gs; - -msg ("Removing whitespace before /PARA if not on separate line..."); -$data =~ s{(\S+)[\t ]+</para>} - {$1</para>}g; - -msg ("Removing PARA around INDEXTERM if no text in PARA..."); -$data =~ s{<para>((?:<indexterm role=\"[^"]+\">(?:<(primary|secondary)>[^>]+</\2>)+?</indexterm>)+?)\s*</para>} - {$1}gs; - -@apx = ("Users", "MySQL Testimonials", "News", "GPL-license", "LGPL-license"); - -foreach $apx (@apx) { - msg ("Removing appendix $apx..."); - $data =~ s{<appendix id=\"$apx\">(.+?)</appendix>} - {}gs; - - # Skip to next appendix regex if the regex did not match anything - next unless (defined $&); - - msg ("...Building list of removed nodes..."); - - # Split the last bracketed regex match into an array - # Extract the node names from the tags and push them into an array - foreach (split "\n", $&) { - push @nodes, $1 if /<\w+ id=\"(.+?)\">/ - } -} - -# 2002-02-22 arjen@mysql.com (added fix " /" to end of regex, to make it match) -msg ("Fixing references to removed nodes..."); -# Merge the list of node names into a set of regex alternations -$nodes = join "|", @nodes; - -# Find all references to removed nodes and convert them to absolute URLs -$data =~ s{<\w+ linkend="($nodes)" />} - {&xref2link($1)}ges; - -print STDOUT $data; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR "docbook-fixup:", shift, "\n"; -} - -sub strip_tag($$) { - (my $str, my $tag) = @_; - $str =~ s{<$tag>(.+?)</$tag>}{$1}gs; - return $str; -} - -sub underscore2hyphen($) { - my $str = shift; - $str =~ tr/_/-/; - return $str; -} - -sub xref2link { - my $ref = shift; - $ref =~ tr/ /_/; - $ref =~ s{^((.)(.).+)$}{$2/$3/$1.html}; - return "http://www.mysql.com/doc/" . $ref; -} - -# We might need to encode the high-bit characters to ensure proper representation -# msg ("Converting high-bit characters to entities"); -# $data =~ s/([\200-\400])/&get_entity($1)>/gs; -# There is no get_entity function yet - no point writing it til we need it :) diff --git a/Docs/Support/docbook-prefix.pl b/Docs/Support/docbook-prefix.pl deleted file mode 100755 index e76d84dbfe0f81ec92814f87b1cb9870e2881f37..0000000000000000000000000000000000000000 --- a/Docs/Support/docbook-prefix.pl +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl -w - -# Preprocess the input of `makeinfo --docbook` version 4.0c -# Authors: Arjen Lentz and Zak Greant (started by arjen 2002-05-01) - -use strict; - -my $data = ''; - -msg ("-- Pre-processing `makeinfo --docbook` input --"); -msg ("** Written to work with makeinfo version 4.0c **\n"); - -# <> is a magic filehandle - either reading lines from stdin or from file(s) specified on the command line -msg ("Get the data"); -$data = join "", <>; - -msg ("Replacing '\@-' with FIXUPmdashFIXUP"); -$data =~ s/\@-/FIXUPmdashFIXUP/g; - -msg ("Replacing '--' with FIXUPdoubledashFIXUP"); -$data =~ s/--/FIXUPdoubledashFIXUP/g; - -msg ("Turning \@strong{} into LITERAL blocks"); -$data =~ s/\@strong\{(.*?)\}/FIXUPstrongFIXUP$1FIXUPendstrongFIXUP/gs; - -msg ("Turning \@emph{} into LITERAL blocks"); -$data =~ s/\@emph\{(.*?)\}/FIXUPemphFIXUP$1FIXUPendemphFIXUP/gs; - -msg ("Turning \@file{} into LITERAL blocks"); -$data =~ s/\@file\{(.*?)\}/FIXUPfileFIXUP$1FIXUPendfileFIXUP/gs; - -msg ("Turning \@samp{} into LITERAL blocks"); -$data =~ s/\@samp\{\@\{\}/FIXUPsampFIXUP\@\{FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{\@\}\}/FIXUPsampFIXUP\@\}FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{\@\{n\@\}\}/FIXUPsampFIXUP\@\{n\@\}FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{(.*?)\}/FIXUPsampFIXUP$1FIXUPendsampFIXUP/gs; - - -msg ("Write the data"); -print STDOUT $data; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR "docbook-prefix: ", shift, "\n"; -} - diff --git a/Docs/Support/docbook-split b/Docs/Support/docbook-split deleted file mode 100755 index eafb437efe41187246e5f6d72a90dbd2154232e4..0000000000000000000000000000000000000000 --- a/Docs/Support/docbook-split +++ /dev/null @@ -1,70 +0,0 @@ -#! /usr/bin/perl -w -# O'Reilly's Perl script to chop mysql.xml into separate ch/apps/index files. -# The indexes are actually not used, they're created straight from the xrefs. -# Breaks the MySQL reference manual into chapters, appendices, and indexes. - -use strict; - -my $app_letter = "a"; # Start appendix letters at "a" -my $chap_num = 1; # Start chapter numbers at one (there is no preface) -my $directory = "mysql_refman_" . time; -my $ext = ".xml"; -my $line = ""; -my $output_name = ""; -my $start_text = ""; - -mkdir $directory unless -d $directory; - -while (defined $line) { - if ($line =~ /(<chapter.+)/i ) { - $start_text = $1; - $output_name = sprintf("ch%02d%s", $chap_num, $ext); - ++$chap_num; - &process_file("chapter"); - } - elsif ($line =~ /(<appendix.+)/i ) { - $start_text = $1 ; - $output_name = "app$app_letter$ext"; - ++$app_letter; - &process_file("appendix"); - } - elsif ($line =~ /(<index\s+id=")(.*?)(">.*)/i ) { - $start_text = $1 . $2 . $3; - $output_name = lc($2) . $ext; - &process_file("index"); - } - else { - # Skip junk in between chapters, appendices and indexes. - $line = <>; - } -} - -sub process_file { - my $marker = shift; - my $path = "$directory/$output_name"; - - open (OUTPUT_FILE, ">$path") or die "Cannot open $path"; - - print STDERR "Creating $path\n"; - - # Print out XML PI - print OUTPUT_FILE "<?xml version='1.0' encoding='ISO-8859-1'?>\n"; - - # Print whatever happened to appear at the end of the previous chapter. - print OUTPUT_FILE "$start_text\n" if $start_text; - - while (defined $line) { - $line = <>; - - # Note: Anything after the terminating marker is lost, just like - # lines in between chapters. - if ($line =~ /(.*<\/\s*$marker\s*>)/i ) { - print OUTPUT_FILE "$1\n" if $1; - close OUTPUT_FILE; - return; - } - print OUTPUT_FILE $line; - } -} - -exit 0; diff --git a/Docs/Support/make-docbook b/Docs/Support/make-docbook deleted file mode 100755 index 93dbc56c0f8e7e6d0e022e53426ced191497bbda..0000000000000000000000000000000000000000 --- a/Docs/Support/make-docbook +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# 2002-01-30 arjen@mysql.com -# Use this to create mysql.xml (the DocBook XML format output of manual.texi) -# Requires makeinfo 4.0c - -#create include.texi with version/port # - echo "@c This file is autogenerated by the Makefile" > include.texi - echo -n "@set mysql_version " >> include.texi -# grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ -# sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi -# 2002-04-26 arjen - the below just picks #.# instead of #.#.#-alpha -# (code by mwagner - tnx) - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - perl -p -e 's/AM_INIT_AUTOMAKE\(mysql,\s(\d+\.\d+)\..+/$1/' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - -# produce DocBook XML - Support/docbook-prefix.pl < manual.texi |\ - makeinfo --force --no-ifinfo --docbook -o - |\ - Support/docbook-fixup.pl > mysql.xml - - # See if the XML output is well-formed - xmlwf mysql.xml - - # If all is well, keep processing - cat mysql.xml | Support/colspec-fix.pl | Support/docbook-split; - diff --git a/Docs/Support/make-makefile b/Docs/Support/make-makefile deleted file mode 100755 index 79cf06091fec9af715c017ac948ba8297f577ee7..0000000000000000000000000000000000000000 --- a/Docs/Support/make-makefile +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# Use this when you have deleted Makefile and do not want to do a full -# build to get it back - -cd .. -automake --gnu Docs/Makefile -CONFIG_FILES=Docs/Makefile CONFIG_HEADERS= sh ./config.status diff --git a/Docs/Support/test-make-manual b/Docs/Support/test-make-manual deleted file mode 100755 index bd4ed4b04e33e7863a0dd08c6aa6f86b16fda609..0000000000000000000000000000000000000000 --- a/Docs/Support/test-make-manual +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh - -needed_flags=0 -needed_texi2html=0 -needed_texinfo_tex=0 -needed_include_texi=0 - -if [ -z $BROWSER ]; then - BROWSER=netscape - echo "BROWSER not set, using $BROWSER" -fi - -die () -{ - echo - echo $1 - cleanup - exit 1 -} - -cleanup () -{ - echo "Cleaning up..." - if [ $needed_flags ]; then - bk clean Flags - fi - - if [ $needed_texi2html ]; then - bk clean Support/texi2html - fi - - if [ $needed_texinfo_tex ]; then - bk clean Support/texinfo.tex - fi - - if [ $needed_include_texi ]; then - rm -f include.texi - fi - - for file in \ - manual.aux manual.cp manual.cps manual.dvi \ - manual.fn manual.fns manual.ky manual.html \ - manual.pg manual.toc manual.tp manual.vr \ - mysql.info manual_toc.html ; - do - rm -f $file - done - -} - - -if [ -e Flags/usa.txt ]; then - echo "Good, Flags are there." -else - echo -n "Checking out Flags..." - bk edit Flags >/dev/null 2>&1 - echo " Done." - needed_flags=1 -fi - -if [ -e Support/texi2html ]; then - echo "Good, texi2html is there." -else - echo -n "Checking out texi2html..." - bk edit Support/texi2html >/dev/null 2>&1 - echo " Done." - needed_texi2html=1 -fi - -if [ -e Support/texinfo.tex ]; then - echo "Good, texinfo.tex is there." -else - echo -n "Checking out texinfo.tex..." - bk edit Support/texinfo.tex >/dev/null 2>&1 - echo " Done." - needed_texinfo_tex=1 -fi - -if [ -e include.texi ]; then - echo "Good, include.texi is there." -else - echo -n "Creating include.texi..." - bk edit ../configure.in >/dev/null 2>&1 - echo "@c This file was generated by test-make-manual" > include.texi - echo -n "@set mysql_version " >> include.texi - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - echo " Done." - needed_include_texi=1 -fi - -echo -n "Running makeinfo..." -makeinfo --no-split -I . manual.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2html..." -/usr/bin/perl ./Support/texi2html -iso -number manual.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2dvi..." -texi2dvi --batch manual.texi > texi2dvi.out - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit (saved in texi2dvi.out)" -else - rm texi2dvi.out - echo " Looks good." -fi - -echo -echo -echo "Please examine your modifications in \`manual.html'." -echo -echo "If you would like to use a different browser, set the 'BROWSER' environment" -echo "variable." -echo - -$BROWSER file:`pwd`/manual_toc.html - -echo "-- Press Enter to Continue --" -read junk -cleanup diff --git a/Docs/Support/test-make-manual-de b/Docs/Support/test-make-manual-de deleted file mode 100755 index a5c03001bda9174c03498ebdd65429d0eeee9ad8..0000000000000000000000000000000000000000 --- a/Docs/Support/test-make-manual-de +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh - -needed_flags=0 -needed_texi2html=0 -needed_texinfo_tex=0 -needed_include_texi=0 - -if [ -z $BROWSER ]; then - BROWSER=netscape - echo "BROWSER not set, using $BROWSER" -fi - -die () -{ - echo - echo $1 - cleanup - exit 1 -} - -cleanup () -{ - echo "Cleaning up..." - if [ $needed_flags ]; then - bk clean Flags - fi - - if [ $needed_texi2html ]; then - bk clean Support/texi2html - fi - - if [ $needed_texinfo_tex ]; then - bk clean Support/texinfo.tex - fi - - if [ $needed_include_texi ]; then - rm -f include.texi - fi - - for file in \ - manual.de.aux manual.de.cp manual.de.cps manual.de.dvi \ - manual.de.fn manual.de.fns manual.de.ky manual.de.html \ - manual.de.pg manual.de.toc manual.de.tp manual.de.vr \ - mysql.de.info manual.de_toc.html ; - do - rm -f $file - done - -} - - -if [ -e Flags/usa.txt ]; then - echo "Good, Flags are there." -else - echo -n "Checking out Flags..." - bk edit Flags >/dev/null 2>&1 - echo " Done." - needed_flags=1 -fi - -if [ -e Support/texi2html ]; then - echo "Good, texi2html is there." -else - echo -n "Checking out texi2html..." - bk edit Support/texi2html >/dev/null 2>&1 - echo " Done." - needed_texi2html=1 -fi - -if [ -e Support/texinfo.tex ]; then - echo "Good, texinfo.tex is there." -else - echo -n "Checking out texinfo.tex..." - bk edit Support/texinfo.tex >/dev/null 2>&1 - echo " Done." - needed_texinfo_tex=1 -fi - -if [ -e include.texi ]; then - echo "Good, include.texi is there." -else - echo -n "Creating include.texi..." - bk edit ../configure.in >/dev/null 2>&1 - echo "@c This file was generated by test-make-manual" > include.texi - echo -n "@set mysql_version " >> include.texi - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - echo " Done." - needed_include_texi=1 -fi - -echo -n "Running makeinfo..." -makeinfo --no-split -I . manual.de.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2html..." -/usr/bin/perl ./Support/texi2html -iso -number manual.de.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2dvi..." -texi2dvi --batch manual.de.texi > texi2dvi.out - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit (saved in texi2dvi.out)" -else - rm texi2dvi.out - echo " Looks good." -fi - -echo -echo -echo "Please examine your modifications in \`manual.de.html'." -echo -echo "If you would like to use a different browser, set the 'BROWSER' environment" -echo "variable." -echo - -$BROWSER file:`pwd`/manual.de_toc.html - -echo "-- Press Enter to Continue --" -read junk -cleanup diff --git a/Docs/Support/trivial-makeinfo-4.0c.patch b/Docs/Support/trivial-makeinfo-4.0c.patch deleted file mode 100644 index b2446c0e8bbfcc60d0c62fbec744b30d593375b9..0000000000000000000000000000000000000000 --- a/Docs/Support/trivial-makeinfo-4.0c.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- alt-multi.c Sun Apr 14 10:03:19 2002 -+++ multi.c Tue May 22 20:52:33 2001 -@@ -287,7 +287,7 @@ - && *params != '\n' && *params != '@') - params++; - setup_output_environment (i, -- (int) ((columnfrac * 100.00) + 0.49)); -+ (int) (columnfrac * (fill_column - current_indent) + .5)); - } - } - diff --git a/Docs/Support/xwf b/Docs/Support/xwf deleted file mode 100755 index 38f89774fe851b2aa9efa243528700d3e0b21857..0000000000000000000000000000000000000000 --- a/Docs/Support/xwf +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -w -# -# Parse document and report first syntax (well-formedness) error found. -# - -use strict; -use XML::Parser; -use Getopt::Std; - -my %opts; -getopts('e', \%opts); -my $ENTREFS = exists( $opts{'e'} ); # flag: check ent refs - -my $parser = XML::Parser->new( - ErrorContext => 2, # output error context - ); - -# get input from files -if( @ARGV ) { - foreach( @ARGV ) { - my $file = $_; - unless( -r $file ) { - print STDERR "ERROR: Can't open '$file'.\n"; - return; - } - my $input = ''; - open( F, $file ); - while( <F> ) { $input .= $_; } - close F; - - # parse and report errors - if( &parse_string( $input )) { - print STDERR "ERROR in $file:\n$@\n"; - } else { - print STDERR "'$file' is well-formed.\n"; - } - } - print "All files checked.\n"; - -# get input from STDIN -} else { - my $input = ""; - while( <STDIN> ) { $input .= $_; } - if( &parse_string( $input )) { - print STDERR "ERROR in stream:\n$@\n"; - } else { - print STDERR "No syntax errors found in XML stream.\n"; - } -} - - -# parse the string and return error message -# -# NOTE: By default, entity refs are not expanded. XML::Parser can be -# told not to expand entity refs, but will still try to find -# replacement text just in case, which we don't want. Therefore, we -# need to do a stupid regexp replacement, removing entities from input. -# -sub parse_string { - my $string = shift; - unless( $ENTREFS ) { - $string =~ s/\&[^\s;]+;//g; # remove entity references - } - eval { $parser->parse( $string ); }; - $@ =~ s/at \/.*?$//s; # remove module line number - return $@; -} diff --git a/Docs/Tutorial-MySQL-final.txt b/Docs/Tutorial-MySQL-final.txt deleted file mode 100644 index bd52554a6111db8436f4c7d04cc0c62f8497d517..0000000000000000000000000000000000000000 --- a/Docs/Tutorial-MySQL-final.txt +++ /dev/null @@ -1,1643 +0,0 @@ -8 Tutorial MySQL -======================= - -Este capítulo ofrece un tutorial de introducción a MySQL, mostrando cómo usar el programa cliente -mysql para crear y usar una simple base de datos. mysql (al que algunas veces nos referimos como -"monitor terminal" o simplemente "monitor") es un programa interactivo que te permite conectarte a -un servidor MySQL, ejecutar consultas y observar los resultados. mysql puede ser usado también en -modo batch: escribes tus consultas en un fichero de texto, para después pedirle a mysql que -ejecute el contenido del fichero. Se cubren aquí esas dos formas de usar de usar mysql. - -Para ver una lista de opciones proporcionadas por mysql, lánzalo con las opción --help : - - shell> mysql --help - -Este capítulo asume que mysql está instalado en tu máquina, y que hay disponible un servidor al que -te puedes conectar. Si esto no es así, contacta con tu administrador MySQL. (Si el administrador -eres tú, necesitarás consultar otra sección de este manual). - -El capítulo describe el proceso completo de configurar y usar una base de datos. Si estás interesado -sólo en acceder una base de datos ya existente, querrás saltar las secciones que describen cómo -crear la base de datos y las tablas que la contienen. - -Dado que este capítulo es un tutorial básico, se dejarán en el tintero muchos -detalles. Consulta las secciones relevantes del manual para más información sobre los temas -aquí cubiertos. - - -8.1 Conectando y desconectando del servidor -============================================= - - -Para conectarse al servidor, generalmente necesitarás facilitar un nombre de usuario MySQL cuando -lances el cliente mysql y, lo más probable, también un password. Si el servidor se está ejecutando -en una máquina distinta a la que estás conectado, necesitarás especificar también un nombre de -host. Contacta con tu administrador para averiguar qué parámetros de conexión necesitas usar para -conectar (es decir, qué host, nombre de usuario y password usar). Una vez que conozcas los -parámetros adecuados, deberás ser capaz de conectar de la siguiente forma: - -shell> mysql -h host -u user -p -Enter password: ******* -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 459 to server version: 3.22.20a-log - -Type 'help' for help. - -mysql> - -El prompt te indica que mysql ya está listo para la introducción de comandos. - -Algunas instalaciones MySQL permiten a los usuarios conectarse como usuarios "anonymous" (sin -nombre) al servidor ejecutándose en el host local. Si este es el caso en tu máquina, deberías ser -capaz de conectar a ese servidor invocando mysql sin ninguna opción: - -shell> mysql - -Una vez que hayas conectado con éxito, puedes desconectarte en cualquier momento tecleando QUIT en -el prompt mysql> : - -mysql> QUIT -Bye - -También puedes desconectar tecleando control-D. - -La mayor parte de los ejemplos en las siguientes secciones asumen que estás conectado al -servidor. Lo indicarán por el prompt mysql> - - -8.2 Haciendo consultas -======================== - -Asegúrate de que estás conectado al servidor, como se ha discutido en secciones anteriores. El -hacerlo no implica que tengas seleccionada ninguna base de datos con la que trabajar, pero está -bien. En este punto, es más importante averiguar un poco sobre cómo lanzar consultas que lanzarse -directamente a la creación de tablas, cargar datos en ellas y recuperar los datos de las -mismas. Esta sección describe los principios básicos de la entrada de comandos, usando varias -consultas que puedes probar para familiarizarte con la forma de trabajo de mysql. - -Aquí presentamos un comando simple que pide al servidor que nos diga su número de versión y fecha -actual. Tecléalo como se muestra a continuación siguiendo el prompt mysql> y pulsa la tecla RETURN: - - -mysql> SELECT VERSION(), CURRENT_DATE; -+-----------+--------------+ -| version() | CURRENT_DATE | -+-----------+--------------+ -| 3.22.23b | 2000-01-05 | -+-----------+--------------+ -1 row in set (0.06 sec) - -mysql> - -Esta consulta ilustra muchas cosas sobre mysql: - -* Un comando consiste normalmente de una sentencia SQL seguida por un punto y coma. (Existen algunas - excepciones donde no es necesario el punto y coma. QUIT, mencionado más adelante, es una de - ellas. Conoceremos otras más adelante.) - -* Cuando lanzas un comando, mysql lo envía al servidor para su ejecución y muestra los resultados, - después imprime otro mysql> para indicar que está listo para otro comando. - -* mysql muestra la salida de una consulta como una tabla (filas y columnas). La primera fila - contiene etiquetas para las columnas. Las siguientes filas son el resultado de la - consulta. Normalmente, las etiquetas de las columnas son los nombres de las columnas que has - obtenido de la base de datos. Si pides el valor de una expresión en vez de una columna de una - tabla (como en el ejemplo anterior), mysql etiqueta la columna usando la propia expresión. - -* mysql muestra el número de filas que se han dado como resultado, y cuánto tiempo llevó la - ejecución de la consulta, lo que te da una idea aproximada del rendimiento del servidor. Estos - valores son imprecisos porque representan tiempo real (no tiempo de CPU o máquina), y porque están - afectados por factores como la carga del servidor y la latencia de la red. (Por cuestiones de - brevedad, la línea "rows in set" no se mostrará en los ejemplos posteriores de este capítulo.) - -Las palabras clave pueden ser tecleadas en cualquier combinación mayúscula/minúscula. Las siguientes -consultas son equivalentes: - -mysql> SELECT VERSION(), CURRENT_DATE; -mysql> select version(), current_date; -mysql> SeLeCt vErSiOn(), current_DATE; - -He aquí otra consulta. Demuestra que puedes usar mysql como una calculadora sencilla: - -mysql> SELECT SIN(PI()/4), (4+1)*5; -+-------------+---------+ -| SIN(PI()/4) | (4+1)*5 | -+-------------+---------+ -| 0.707107 | 25 | -+-------------+---------+ - -Los comandos vistos hasta aquí han sido relativamente cortos, sentencias de una sola línea. También puedes -insertar múltiples sentencias en una sola línea. Simplemente, termina cada una con un punto y coma: - -mysql> SELECT VERSION(); SELECT NOW(); - -+-----------+ -| version() | -+-----------+ -| 3.22.23b | -+-----------+ - -+---------------------+ -| NOW() | -+---------------------+ -| 2000-01-05 17:33:16 | -+---------------------+ - -Un comando no necesita ser dado todo en una sóla línea, así pues, los comandos largos que requieran -varias lineas no son un problema. mysql determina cuando termina tu sentencia buscando el punto y -coma final, no buscando el final de la línea de entrada. (En otras palabras, mysql acepta entrada de -libre formato: recoleta las líneas de entrada pero no las ejecutahasta que vea el punto y coma.) - -Aquí tenemos un simple ejemplo de múltiples líneas: - -mysql> SELECT - -> USER() - -> , - -> CURRENT_DATE; -+----------------+--------------+ -| USER() | CURRENT_DATE | -+----------------+--------------+ -| root@localhost | 2000-01-05 | -+----------------+--------------+ - -En este ejemplo, observa como cambia el prompt de mysql> a -> una vez que has insertado la primera -línea de una consulta multi-línea. Esta es la forma en que mysql indica que no ha encontrado una -sentencia completa y que está esperando por el resto. El prompt es tu amigo, dado que ofrece una -retroalimentación (feedback) significativa. Si usas ese feedback, siempre sabrás a qué está -esperando mysql. - -Si decides que no quieres ejecutar un comando que está en proceso de introducción, puedes cancelarlo -tecleando \c : - -mysql> SELECT - -> USER - -> \c -mysql> - -Observa aquí también el prompt. Ha vuelto a mysql> tras haber tecleado \c, ofreciendo un feedback -que indica que mysql está listo para un nuevo comando. - -La siguiente tabla muestra cada uno de los prompts que puedes ver y resume qué es lo que significan -y el estado en el que se encontrará mysql: - -Prompt Significado -mysql> Listo para un nuevo comando - -> Esperando una nueva línea de una consulta multi-línea - '> Esperando la siguiente línea, se ha insertado una línea que comienza con (') - "> Esperando la siguiente línea, se ha insertado una línea que comienza con (") - -Las sentencias multi-línea ocurren comúnmente "por accidente" cuando intentas lanzar un comando en -una única línea, pero olvidas el punto y coma del final. En este caso, mysql espera más entrada: - -mysql> SELECT USER() - -> - -Si esto es lo que te ocurre (crees que has introducido una sentencia pero la única respuesta es un -prompt como ->), lo más probable es que mysql esté esperando por el punto y coma. Si no observas qué -es lo que te dice el prompt, podrías quedarte esperando un buen rato antes de enterarte de qué es lo -que sucede. Introduce un punto y coma para completar la sentencia, y mysql la ejecutará: - -mysql> SELECT USER() - -> ; -+----------------+ -| USER() | -+----------------+ -| root@localhost | -+----------------+ - -Los prompts '> y "> ocurren durante la recogida de strings. En MySQL, puedes escribir strings -encerrados por comillas simples (') o dobles (") (por ejemplo, 'hola' o "adios"), y mysql te permite -introducir también strings que se cortan en múltiples líneas. Cuando veas un prompt como '> ó ">, -significa que has introducido una línea que contenía un string que comenzaba por (') o ("), pero que -no has introducido aún la comilla (simple o doble) de cierre. Esto está bien si realmente estabas -introduciendo un string multi-línea, pero no es lo más normal. Lo que sí es más normal, es que los -prompts '> ó "> indiquen que te has olvidado del caracter de cierre " ó '. Por ejemplo: - -mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30; - "> - -Si tecleas esta sentencia SELECT, después pulsas ENTER y esperas por el resultado, no sucederá -nada. En lugar de preocuparte, "¿por qué tarda tanto esta consulta?", observa la pista que te ofrece -el prompt "> . Esto te indica que mysql espera ver el resto de un string que aún no ha -terminado. (¿Ves el error en la sentencia? La cadena "García ha perdido las comillas de cierre.) - -Llegados a este punto, ¿qué puedes hacer?. Lo más fácil es cancelar el comando. Sin embargo, no -puedes teclear simplemente \c en este ejemplo, dado que mysql ¡lo interpretará como parte del string -que está leyendo! En vez de eso, introduce las comillas de cierre (para que mysql sepa que ya has -terminado de introducir el string), y después teclea \c : - -mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30; - "> "\c -mysql> - -El prompt vuelve a cambiar a mysql>, indicando que mysql está listo para un nuevo comando. - -Es importante saber qué significan los prompts '> y ">, dado que si introduces por error un string -sin cerrar, cualquier otra línea que introduzcas serán ignoradas por mysql - ¡incluyendo una línea -que contenga QUIT! Esto puede ser bastante confuso, especialmente si no sabes que debes introducir -la comilla de cierre antes de poder cancelar el comando actual. - -8.3 Creando y usando una base de datos -========================================== - -Ahora que sabes como introducir comandos, es hora de acceder a la base de datos. - -Supon que tienes varias mascotas en tu casa (tu pequeño "zoo") y que te gustaría llevar un control -de varios tipos de información sobre estos animales. Puedes hacerlo creando tablas que guarden tus -datos y cargandolas con la información deseada. Después puedes responder a diferentes series de -preguntas sobre tus animales extrayendo los datos de las tablas. Esta sección explica cómo hacer -todo esto: - -* Cómo crear una base de datos -* Cómo crear una tabla -* Cómo cargar los datos en la tabla -* Cómo extraer información de la tabla de varias maneras -* Cómo usar múltiples tablas - -La base de datos del zoo será simple (deliberadamente), pero no es difícil pensar en situaciones del -mundo real en las que se pudiera utilizar una base de datos similar. Por ejemplo, se podría usar una base -de datos como ésta en una granja para llevar un control del ganado, o por un veterinario para -controlar el historial de sus pacientes. - -Usa la sentencia SHOW para averiguar qué bases de datos existen actualmente en el servidor: - -mysql> SHOW DATABASES; -+----------+ -| Database | -+----------+ -| mysql | -| test | -+----------+ - -Probablemente, la lista de las bases de datos será diferente en tu máquina, pero las bases de datos -mysql y test es probable que se encuentren en esa lista. Se requiere la base de datos mysql pues -describe los privilegios de acceso de los usuarios. La base de datos test se ofrece como campo de -pruebas para que los usuarios prueben ahí sus teorías. - -Si la base de datos test existe, intenta acceder a ella: - -mysql> USE test -Database changed - -Observa que USE, como QUIT, no requiere un punto y coma. (Puedes terminar este tipo de sentencias -con un punto y coma si quieres, pero no es necesario.) La sentencia USE es especial en otro sentido, -también: debe ser tecleada en una sola línea. - -Puedes usar la base de datos test (si tienes acceso a ella) para los ejemplos que siguen, pero -cualquier cosa que crees en dicha base de datos puede ser eliminada por cualquiera que tenga acceso -a ella. Por esta razón, deberías pedir a tu administrador MySQL permisos para usar una base de datos -propia. Suponte que le quieres llamar zoo. El administrador necesitará ejecutar entonces la -siguiente orden: - -mysql> GRANT ALL ON zoo.* TO tu_nombre; - -donde tu_nombre es el nombre de usuario MySQL que tengas asignado. - -ejemplo: - -mysql> GRANT ALL ON zoo.* TO chessy@localhost; -Query OK, 0 rows affected (0.08 sec) - - -8.3.1 Creando y seleccionando una base de datos -================================================== - -Si el administrador creó la base de datos para tí cuando te configuró los permisos, puedes comenzar -a usarla. En otro caso, deberás crearla tú mismo: - -[chessy@bishito chessy]$ mysql -u chessy -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 6 to server version: 3.22.23b - -Type 'help' for help. - -mysql> CREATE DATABASE zoo; -Query OK, 1 row affected (0.02 sec) - - -Bajo Unix, los nombres de bases de datos son sensibles a las mayúsculas/minúsculas (a diferencia de -los comandos SQL), así que deberás referirte siempre a tu base de datos con el nombre zoo, no como -Zoo, ZOO o cualquier otra variante. Es es así también para las tablas. (Bajo Windows, esta -restricción desaparece, aunque deberías referirte a las bases de datos y a las tablas usando la -misma sintaxis en tus consultas.) - -Crear una base de datos no la selecciona para su uso, debes hacerlo explícitamente. Para hacer que -la base de datos zoo sea tu base de datos de trabajo, usa el comando: - -mysql> USE zoo; -Database changed - -Tu base de datos sólo necesita ser creada una vez, pero debes seleccionarla para usarla cada vez que -comiences una sesión mysql. Puedes hacerlo lanzando un comando USE como se ha visto en el -ejemplo. Alternativamente, puedes seleccionar la base de datos desde la línea de comandos cuando -lanzas mysql. Simplemente especifica su nombre tras los parámetros de conexión que hayas -escrito. Por ejemplo: - -shell> mysql -h host -u user -p zoo -Enter password: ******** - -Observa que en la línea de comandos del ejemplo, zoo no es tu password. Si quieres introducir tu -password como parámetro en la línea de comandos tras la opción -p, debes hacerlo sin teclear un -espacio en blanco intermedio (es decir, como -pmi_password, no como -p mi_password). Sin embargo, no -es recomendable poner tu password en la línea de comandos, pues hacerlo lo expone a posibles -miradas de otros usuarios conectados a tu máquina. - -8.3.2 Creando una tabla -============================ - -Crear una tabla es la parte fácil, pero hasta este momento está vacía, como te dice la orden SHOW -TABLES: - -mysql> SHOW TABLES; -Empty set (0.00 sec) - -La parte más dura consiste en decidir cual va a ser la estructura de tu base de datos: qué tablas -necesitarás, y qué columnas tendrá cada una de ellas. - -Querrás seguramente una tabla que contenga un registro por cada una de tus mascotas. Esta tabla -puede llamarse mascotas, y debería contener, como mínimo, el nombre de cada animal. Dado que el -nombre por sí solo no es muy interesante, la tabla debería contener otra información. Por ejemplo, -si más de una persona de tu familia tiene mascotas, probablemente quieras listar el propietario de -cada animal. También querrás guardar información descriptiva básica como puede ser la especie y el -sexo de cada mascota. - -¿Qué pasa con la edad? Podría ser de interés, pero no es una buena cosa a guardar en una base de -datos. La edad cambia a medida que pasa el tiempo, lo que significa que tendrás que actualizar tus -registros a menudo. En vez de eso, es mejor almacenar un valor fijo como la edad de -nacimiento. Después, cada vez que necesites saber la edad, puedes calcularla como la diferencia -entre la fecha actual y la fecha de nacimiento. MySQL ofrece funciones para realizar cálculos -aritméticos entre fechas, por lo que esto no es difícil. Almacenar la fecha de nacimiento en lugar -de la edad tiene también otras ventajas: - -* Puedes usar la base de datos para generar recordatorios de cumpleaños de mascotas. (Si crees que - este tipo de consulta es algo tonta, observa que es la misma pregunta que necesitarás hacer en el - contexto de una base de datos de un negocio para identificar clientes a los que pronto necesitarás - mandar un saludo por su cumpleaños, para ese toque personal asistido por ordenador :-) - -* Puedes calcular la edad en relación a fechas distintas a la fecha actual. Por ejemplo, si - almacenas la fecha de muerte en la base de datos, puedes calcular fácilmente lo vieja que era una - mascota cuando murió. - -Seguramente puedas pensar en otros tipos de información que sería útil en la tabla mascota, pero los -identificados hasta ahora son suficientes por el momento: nombre, propietarios, especie, sexo, fecha -de nacimiento y muerte. - -Usa una sentencia CREATE TABLE para especificar la estructura de tu tabla: - -mysql> CREATE TABLE mascota (nombre VARCHAR(20), propietario VARCHAR(20), - -> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE, muerte DATE); - -VARCHAR es una buena elección para las columnas nombre, propietario y especie dado que los valores -de estas columnas variarán su longitud. Las longitudes de estas columnas no necesitan ser iguales, y -no necesitan ser 20. Puedes elegir cualquier longitud entre 1 y 255, cualquiera que te parezca -razonable. (Si realizar una elección pobre y resulta que más adelante necesitas un campo mayor, -MySQL ofrece una sentencia ALTER TABLE.) - -El sexo del animal puede ser representado en una variedad de formas, por ejemplo, "m" y "f", o -quizás "masculino" y "femenino". Es más simple usar un único caracter, "m" ó "f". - -El uso del tipo de datos DATE para las columnas de nacimiento y muerte es una opción bastante -obvia. - -Ahora que ya has creado una tabla, SHOW TABLES debería producir alguna salida: - -mysql> SHOW TABLES; -+---------------+ -| Tables in zoo | -+---------------+ -| mascota | -+---------------+ - -Para verificar que tu tabla fue creada de la forma que esperabas, usa una sentencia DESCRIBE: - -mysql> DESCRIBE mascota; -+-------------+-------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+-------------+------+-----+---------+-------+ -| nombre | varchar(20) | YES | | NULL | | -| propietario | varchar(20) | YES | | NULL | | -| especie | varchar(20) | YES | | NULL | | -| sexo | char(1) | YES | | NULL | | -| nacimiento | date | YES | | NULL | | -| muerte | date | YES | | NULL | | -+-------------+-------------+------+-----+---------+-------+ - -Puedes usar DESCRIBE en cualquier momento, por ejemplo, si olvidas los nombres de las columnas de tu -tabla o a qué tipo de datos pertenecen. - -8.3.3 Cargando datos en una tabla -===================================== - -Una vez creada tu tabla, necesitas poblarla. Las sentencias LOAD DATA e INSERT son útiles para esto. - -Suponte que tus registros de mascotas pueden ser descritos como se muestra más abajo. (Observa que -MySQL espera que las fechas se introduzcan en formato AAAA-MM-DD; esto podría ser diferente a lo que -estás acostumbrado.) - -nombre propietario especie sexo nacimiento muerte -Fluffy Harold gato f 1993-02-04 -Claws Gwen gato m 1994-03-17 -Buffy Harold perro f 1989-05-13 -Fang Benny perro m 1990-08-27 -Bowser Diane perro m 1998-08-31 1995-07-29 -Chirpy Gwen pájaro f 1998-09-11 -Whistler Gwen pájaro 1997-12-09 -Slim Benny serpiente m 1996-04-29 - -Dado que estás comenzando con una tabla vacía, una forma sencilla de poblarla consiste en crear un -fichero de texto conteniendo una fila para cada uno de tus animales, y después cargar el contenido del -fichero en la tabla con una sola sentencia. - -Puedes crear un fichero de texto "mascota.txt" conteniendo un registro por línea, con valores separados -por tabuladores, y dados en el orden en el que las columnas fueron listadas en la sentencia CREATE -TABLE. Para valores perdidos (como sexos desconocidos, o fechas de muerte de animales que aún están -vivos), puedes usar valores NULL. Para representar estos en tu fichero de texto, use \N. Por -ejemplo, el registro para Whistler el pájaro sería algo como esto (donde el espacio en blanco entre -valores es un simple caracter de tabulación): - -Whistler Gwen pájaro \N 1997-12-09 \N - -Para cargar el fichero de texto "mascota.txt" en la tabla mascota, usa este comando: - -mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota; - -Puedes especificar el valor de separación de columna y el marcador de final de línea explícitamente -en la sentencia LOAD DATA si lo deseas, pero por defecto equivalen a TAB y LF (intro). Estos valores -por defecto son suficientes para que la sentencia que lee el fichero "mascota.txt" funcione -correctamente. - -Cuando quieras añadir nuevos registros uno a uno, la sentencia INSERT es muy útil. En su forma más -simple, ofreces valores para cada columna, en el orden en el que las columnas fueron listadas en la -sentencia CREATE TABLE. Supón que Diane consige un nuevo hamster llamado Puffball. Podrías añadir un -nuevo registro usando una sentencia INSERT como esta: - -mysql> INSERT INTO mascota - -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); - -Observa que los valores string y fecha se espefican encerrados entre comillas. Observa también que, -con INSERT, puedes insertar NULL directamente para representar un valor perdido. No usamos \N como -hacíamos con LOAD DATA. - -De este ejemplo, deberías ser capaz de ver que hubiera dido mucho más costoso teclear todos los -datos necesarios en la tabla mascota con sentencias INSERT que hacerlo como lo hemos hecho con una -única sentencia LOAD DATA. - - -8.3.4 Extrayendo información de una tabla -=============================================== - - -La sentencia SELECT se usa para recabar información de una tabla. La forma -general de la sentencia es: - -SELECT qué_seleccionar -FROM de_qué_tabla -WHERE condiciones_a_satisfacer - -qué_seleccionar indica qué es lo que quieres seleccionar. Puede ser una lista de -columnas, o * para indicar "todas las columnas". de_qué_tabla indica la tabla de -la que quieres extraer datos. La claúsula WHERE es opcional. Si está presente, -condiciones_a_satisfacer especifica las codiciones que las filas deben cumplir -para estar presentes en el resultado de la selección. - -8.3.4.1 Seleccionando todos los datos -======================================= - -La forma más simplede SELECT recoge toda la información de una tabla: - -mysql> SELECT * FROM mascota; -+----------+-------------+-----------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+-----------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Fang | Benny | perro | m | 1990-08-27 | NULL | -| Bowser | Diane | perro | m | 1998-08-31 | 1995-07-29 | -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -| Slim | Benny | serpiente | m | 1996-04-29 | NULL | -| Puffball | Diane | hamster | f | 1999-03-30 | NULL | -+----------+-------------+-----------+------+------------+------------+ - -Esta forma de SELECT es útil si quieres revisar tu tabla al completo, por -ejemplo, tras haberla cargado con tu conjunto inicial de datos. Como suele -suceder, la salida ya muestra un error en tu fichero de datos: Bowser ¡parece -haber nacido tras su muerte! Consultando tus papeles originales sobre el -pedigree del perro, descubres que la fecha correcta de nacimiento es 1989, no -1998. - -Existen al menos un par de maneras de arreglar esto: - -* Edita el fichero "mascota.txt" para corregir el error, después vacía la tabla - y vuelve a cargarla usando DELETE y LOAD DATA: - -mysql> DELETE from mascota; -mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota; - -Sin embargo, si haces esto, debes re-escribir el registro para Puffball. - -* Arreglar sólo el registro erróneo con la sentencia UPDATE: - -mysql> UPDATE mascota SET nacimiento="1989-08-31" WHERE nombre="Bowser"; - -Como se muestra más arriba, es fácil recuperar el cuerpo de una data. Pero -típicamente no querrás hacer eso, en particular cuando la tabla sea muy -larga. Generalmente, estarás más interesado en responder a una pregunta en -particular, en cuyo caso deberás especificar algunas restricciones en la -información que deseas. Veamos algunas consultas de selección en términos de -preguntas sobre tus mascotas que se deben responder. - -8.3.4.2 Seleccionando filas en particular -============================================= - -Puedes seleccionar sólo filas en particular de tu tabla. Por ejemplo, si quieres -verificar el cambio que has realizado a la fecha de nacimiento de Bowser, -selecciona el registro de Bowser de la siguiente forma: - -mysql> SELECT * FROM mascota WHERE nombre="Bowser"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -La salida confirma que el año está correctamente registrado como 1989, no 1998. - -Las comparaciones de cadenas de texto son normalmente insensibles a las -mayúsculas/minúsculas, por lo que puedes especificar el nombre como "bowser", -"BOWSER", etc. El resultado de la consulta será el mismo. - -Puedes especificar condiciones en cualquier columna, no sólo el nombre. Por -ejemplo, si quisieras saber qué animales nacieron a partir de 1998, examina la -columna nacimiento: - -mysql> SELECT * FROM mascota WHERE nacimiento >= "1998-1-1"; -+----------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+--------+ -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Puffball | Diane | hamster | f | 1999-03-30 | NULL | -+----------+-------------+---------+------+------------+--------+ - -Puedes combinar condiciones, por ejemplo, para localizar los perros hembra: - -mysql> SELECT * FROM mascota WHERE especie="perro" AND sexo="f"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -La consulta anterior usa el operador lógico AND. Existe también un operador OR: - -mysql> SELECT * FROM mascota WHERE especie="serpiente" OR especie="pájaro"; -+----------+-------------+-----------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+-----------+------+------------+--------+ -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -| Slim | Benny | serpiente | m | 1996-04-29 | NULL | -+----------+-------------+-----------+------+------------+--------+ - -AND y OR pueden entremezclarse. Si lo haces, es una buena idea el utilizar -paréntesis para indicar cómo deberían agruparse las condiciones: - -mysql> SELECT * FROM mascota WHERE (especie="gato" AND sexo="m") - -> OR (especie="perro" AND sexo="f"); -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -8.3.4.3 Seleccionando columnas en particular -=================================================== - -Si no quieres ver filas completas de tu tabla, simplemente nombra las columnas -en las cuales estás interesado, separadas por comas. Por ejemplo, si quieres -saber cuándo nacieron tus animales, selecciona las columnas nombre y nacimiento: - -mysql> SELECT nombre, nacimiento FROM mascota; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Bluffy | 1993-02-04 | -| Claws | 1994-03-17 | -| Buffy | 1989-05-13 | -| Fang | 1990-08-27 | -| Bowser | 1989-08-31 | -| Chirpy | 1998-09-11 | -| Whistler | 1997-12-09 | -| Slim | 1996-04-29 | -| Puffball | 1999-03-30 | -+----------+------------+ - -Para averiguar quién posee mascotas, usa esta consulta: - -mysql> SELECT propietario FROM mascota; -+-------------+ -| propietario | -+-------------+ -| Harold | -| Gwen | -| Harold | -| Benny | -| Diane | -| Gwen | -| Gwen | -| Benny | -| Diane | -+-------------+ - -Sin embargo, observa que la consulta simplemente obtiene el campo propietario de -cada registro, y algunos de ellos aparecen más de una vez. Para minimizar la -salida, obtén cada registro de salida único una sola vez añadiendo la palabra -reservada DISTINCT: - -mysql> SELECT DISTINCT propietario FROM mascota; -+-------------+ -| propietario | -+-------------+ -| Benny | -| Diane | -| Gwen | -| Harold | -+-------------+ - -Puedes usar una claúsula WHERE para combinar la selección de filas con la -selección de columnas. Por ejemplo, para conseguir sólo las fechas de nacimiento -de perros y gatos, usa esta consulta: - -mysql> SELECT nombre, especie, nacimiento FROM mascota - -> WHERE especie = "perro" OR especie = "gato"; -+--------+---------+------------+ -| nombre | especie | nacimiento | -+--------+---------+------------+ -| Bluffy | gato | 1993-02-04 | -| Claws | gato | 1994-03-17 | -| Buffy | perro | 1989-05-13 | -| Fang | perro | 1990-08-27 | -| Bowser | perro | 1989-08-31 | -+--------+---------+------------+ - -8.3.4.4 Ordenando filas -=========================== - -Tal vez hayas observado que en los ejemplos anteriores las filas del resultado -se muestran sin ningún tipo de orden en particular. Sin embargo, a menudo es más -fácil de examinar la salida de una consulta cuando las filas están ordenadas de -alguna manera en particular. Para ordenar un resultado, usa la claúsula ORDER -BY. - -Aquí mostramos las fechas de nacimiento de los animales, ordenadas por fecha: - -mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Buffy | 1989-05-13 | -| Bowser | 1989-08-31 | -| Fang | 1990-08-27 | -| Bluffy | 1993-02-04 | -| Claws | 1994-03-17 | -| Slim | 1996-04-29 | -| Whistler | 1997-12-09 | -| Chirpy | 1998-09-11 | -| Puffball | 1999-03-30 | -+----------+------------+ - -Para ordenar de forma inversa, añade la palabra reservada DESC (descendente) al -nombre de la columna por la que estás ordenando: - -mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento DESC; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Puffball | 1999-03-30 | -| Chirpy | 1998-09-11 | -| Whistler | 1997-12-09 | -| Slim | 1996-04-29 | -| Claws | 1994-03-17 | -| Bluffy | 1993-02-04 | -| Fang | 1990-08-27 | -| Bowser | 1989-08-31 | -| Buffy | 1989-05-13 | -+----------+------------+ - -Puedes ordenar por múltiples columnas. Por ejemplo, para ordenar por tipo de -animal, después por fecha de nacimiento dentro del mismo tipo de animal estando -los animales más jóvenes primero, usa la siguiente consulta: - -mysql> SELECT nombre, especie, nacimiento FROM mascota ORDER BY especie, nacimiento DESC; -+----------+-----------+------------+ -| nombre | especie | nacimiento | -+----------+-----------+------------+ -| Claws | gato | 1994-03-17 | -| Bluffy | gato | 1993-02-04 | -| Puffball | hamster | 1999-03-30 | -| Chirpy | pájaro | 1998-09-11 | -| Whistler | pájaro | 1997-12-09 | -| Fang | perro | 1990-08-27 | -| Bowser | perro | 1989-08-31 | -| Buffy | perro | 1989-05-13 | -| Slim | serpiente | 1996-04-29 | -+----------+-----------+------------+ - -Observa que la palabra reservada DESC se aplica sólo al nombre de columna que -preceda a la palabra reservada (nacimiento); los valores especie siguen siendo -ordenados en forma ascendente. - -8.3.4.5 Cálculos de fecha -============================ - -MySQL ofrece muchas funciones que puedes usar para realizar cálculos con fechas, -por ejemplo, para calcular edades o extraer partes de fechas. - -Para determinar cuantos años tiene cada una de tus mascotas, puedes calcular la -edad como la diferencia entre la fecha de nacimiento y la fecha actual. Puedes -hacerlo convirtiendo las dos fechas a dias, coge la diferencia, y divídela por -365 (el número de dias en un año): - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 FROM mascota; -+----------+------------------------------------------+ -| nombre | (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 | -+----------+------------------------------------------+ -| Bluffy | 6.94 | -| Claws | 5.83 | -| Buffy | 10.68 | -| Fang | 9.39 | -| Bowser | 10.38 | -| Chirpy | 1.34 | -| Whistler | 2.10 | -| Slim | 3.71 | -| Puffball | 0.79 | -+----------+------------------------------------------+ - -Aunque la consulta funcione, existen algunos puntos que podrían ser -mejorados. Primero, el resultado podría ser revisado más fácilmente si las filas -se presentaran ordenadas de alguna manera. Segundo, la cabecera de la columna -edad no es muy significativa. - -El primer problema puede ser solucionado añadiendo una cláusula ORDER BY nombre -para ordenar la salida por nombre. Para arreglar el tema del encabezamiento de -columna, puedes darle un nombre a dicha columna de tal forma que aparezca una -etiqueta diferente en la salida (esto es lo que se llama un alias de columna): - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota ORDER BY nombre; -+----------+-------+ -| nombre | edad | -+----------+-------+ -| Bluffy | 6.94 | -| Bowser | 10.38 | -| Buffy | 10.68 | -| Chirpy | 1.34 | -| Claws | 5.83 | -| Fang | 9.39 | -| Puffball | 0.79 | -| Slim | 3.71 | -| Whistler | 2.10 | -+----------+-------+ - -Para ordenar la salida por edad en lugar de por nombre, puedes hacerlo usando -símplemente una cláusula ORDER BY diferente: - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota ORDER BY edad; -+----------+-------+ -| nombre | edad | -+----------+-------+ -| Puffball | 0.79 | -| Chirpy | 1.34 | -| Whistler | 2.10 | -| Slim | 3.71 | -| Claws | 5.83 | -| Bluffy | 6.94 | -| Fang | 9.39 | -| Bowser | 10.38 | -| Buffy | 10.68 | -+----------+-------+ - -Puede usarse una consulta similar para determinar la edad de la muerte para los -animales que hayan muerto. Puedes determinar qué animales son estos comprobando -si el valor muerte es NULL o no. Después, para aquellos que no tengan un valor -NULL, calcular la diferencia entre los valores muerte y nacimiento: - -mysql> select nombre, nacimiento, muerte, - -> (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota WHERE muerte IS NOT NULL ORDER BY edad; -+--------+------------+------------+-------+ -| nombre | nacimiento | muerte | edad | -+--------+------------+------------+-------+ -| Bowser | 1989-08-31 | 1995-07-29 | 10.38 | -+--------+------------+------------+-------+ - -La consulta usa muerte IS NOT NULL en lugar de muerte != NULL dado que NULL es -un valor especial. Esto se explica más adelante. [Puedes consultar la sección -[Working with NULL] del manual de MySQL. - -¿Qué harías si quisieras saber qué animales cumplen años el mes que viene? Para -este tipo de cálculos, año y día son irrelevantes, simplemente querrás extraer -la parte mes de la columna nacimiento. MySQL ofrece muchas funciones de -extracción de parte-de-fecha, como YEAR(),MONTH() y DAY(). La función apropiada -para nuestro problema es MONTH(). Para ver cómo funciona, ejecuta una consulta -rápida que muestre el valor de la fecha de nacimiento y el mes de nacimiento -(MONTH(nacimiento)): - -mysql> SELECT nombre, nacimiento, MONTH(nacimiento) FROM mascota; -+----------+------------+-------------------+ -| nombre | nacimiento | MONTH(nacimiento) | -+----------+------------+-------------------+ -| Bluffy | 1993-02-04 | 2 | -| Claws | 1994-03-17 | 3 | -| Buffy | 1989-05-13 | 5 | -| Fang | 1990-08-27 | 8 | -| Bowser | 1989-08-31 | 8 | -| Chirpy | 1998-09-11 | 9 | -| Whistler | 1997-12-09 | 12 | -| Slim | 1996-04-29 | 4 | -| Puffball | 1999-03-30 | 3 | -+----------+------------+-------------------+ - -Buscar animales que hayan nacido en el mes próximo es también sencillo de -realizar. Suponte que Abril es el mes actual. Entonces el valor del mes es 4 y -lo que buscas son animales nacidos en Mayo (mes 5): - -mysql> SELECT nombre, nacimiento FROM mascota WHERE MONTH(nacimiento) = 5; -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Buffy | 1989-05-13 | -+--------+------------+ - -Existe una pequeña complicación si el mes actual es Diciembre, por supuesto. No -puedes añadir simplemente uno al número de mes (12) y buscar animales nacidos en -el mes 13, dado que no existe tal mes. En lugar de eso, debes buscar animales -nacidos en Enero (mes 1). - -Puedes escribir la consulta de tal forma que funcione independientemente del mes -en el que estemos. De esa forma no tendrás que usar un número de mes en -particular en la consulta. DATE_ADD() te permite añadir un intervalo de tiempo a -una fecha dada. Si añades un mes al valor de NOW(), y después extraes la parte -del mes con MONTH(), el resultado produce el mes del cumpleaños que buscamos: - - -mysql> select NOW(); -+---------------------+ -| NOW() | -+---------------------+ -| 2000-01-13 18:13:09 | -+---------------------+ - -mysql> SELECT nombre, nacimiento FROM mascota - -> WHERE MONTH(nacimiento) = MONTH(DATE_ADD(NOW(),INTERVAL 1 MONTH)); -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Bluffy | 1993-02-04 | -+--------+------------+ - -Una manera difente de conseguir los mismos resultados es añadir 1 al mes actual -para conseguir el mes siguiente (tras usar la función módulo (MOD) para -convertir el valor de mes actual en 0 si estamos en Diciembre (mes 12)): - -mysql> SELECT nombre, nacimiento FROM mascota - -> WHERE MONTH(nacimiento) = MOD(MONTH(NOW()),12) +1; -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Bluffy | 1993-02-04 | -+--------+------------+ - - -8.3.4.6 Trabajando con valores NULL -======================================= - -Los valores NULL pueden ser sorprenderte hasta que te acostumbras a -usarlos. Conceptualmente, NULL significa "valor perdido" o "valor desconocido" y -se trata de forma diferente que otros valores. Para realizar comparaciones -respecto a NULL, no puedes utilizar los operadores de comparación aritméticos -como =, < o != . Puedes realizar una demostración de esto, prueba la siguiente consulta: - -mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL; -+----------+-----------+----------+----------+ -| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL | -+----------+-----------+----------+----------+ -| NULL | NULL | NULL | NULL | -+----------+-----------+----------+----------+ - -Ciertamente, de estas comparaciones no se pueden extraer resultados -significativos. Para conseguirlo, usa los operadores IS NULL y IS NOT NULL: - -mysql> SELECT 1 IS NULL, 1 IS NOT NULL; -+-----------+---------------+ -| 1 IS NULL | 1 IS NOT NULL | -+-----------+---------------+ -| 0 | 1 | -+-----------+---------------+ - -En MySQL, 0 significa falso y 1 significa VERDADERO. - -Este tratamiento especial de NULL fue la causa de que en la sección anterior -fuera necesario determinar qué animales ya no vivían usando "muerte IS NOT NULL" -en lugar de "muerte != NULL". - -8.3.4.7 Asociación/Coincidencia de patrones (PATTERN MATCHING) -================================================================ - -MySQL ofrece las características de asociación de patrones estándar así como -una forma de coincidencia de patrones basadas en expresiones regulares -extendidas similares a las usadas por utilidades UNIX como vi, grep y sed. - -La asociación de patrones SQL te permite usar '_' para asociar cualquier -caracter simple, y '%' para asociar un número arbitrario de caracteres -(incluyendo cero caracteres). Los patrones SQL no toman en cuenta las -diferencias entre mayúsculas y minúsculas. Se muestran debajo algunos -ejemplos. Observa que no se utiliza = o != en el trabajo con patrones SQL; -utiliza en su lugar los operadores de comparación LIKE o NOT LIKE. - -Para buscar nombres que comienzan por "b": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "b%"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -Para buscar nombres que terminen por "fy": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "%fy"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -Para buscar nombres que contengan una "w": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "%w%"; -+----------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+------------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -+----------+-------------+---------+------+------------+------------+ - -Para buscar nombres de longitud cinco caracteres, usa el patrón "_" : - -mysql> SELECT * FROM mascota WHERE nombre LIKE "_____"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -El otro tipo de asociación de patrones ofrecido por MySQL utiliza expresiones -regulares extendidas. Cuando se realiza una comprobación buscando una coincidencia -para este tipo de patrón, se deben usar los operadores REGEXP y NOT REGEXP (o -RLIKE y NOT RLIKE, dado que son sinónimos). - -Algunas características de las expresiones regulares extendidas son: - -* `.' se asocia con cualquier caracter (pero sólo uno) - -* Una clase de caracteres `[...]' se asocia con culquier caracter contenido - dentro de los corchetes. Por ejemplo, `[abc]' se asocia con 'a', 'b' ó - -* 'c'. Para nombrar un rango de caracteres, usa un guión. `[a-z]' se asocia con -cualquier letra en minúscula, donde '[0-9]' se asocia con cualquier dígito. - -* '*' se asocia con 0 o más instancias de lo que preceda al asterisco. Por - ejemplo,'a*' coincide con cualquier número de a's,'[0-9]*' se asocia con - cualquier número de dígitos, y '.*' se asocia con cualquier cosa. - -* Las expresiones regulares son sensibles a las mayúsculas/minúsculas, pero - puedes utilizar una clase caracter para asociar ambos casos si los deseas. Por - ejemplo, '[aA]' coincide tanto con la letra a minúscula como con la letra A - mayúscula y '[a-zA-Z]' coincide con cualquier letra en cualquier modo - mayúscula/minúscula. - -* El patrón se asocia si ocurre en cualquier lugar dentro del valor a ser - probado (los patrones SQL coinciden sólo si se asocian con el valor - completo). - -* Para anclar un patrón de manera que se busque la coincidencia bien al comienzo - o bien al final del valor a ser comprobado, usa '^' al comienzo del patrón o - '$' al final del patrón, respectivamente. - -Para demostrar cómo funcionan las expresiones regulares, las consultas LIKE -mostradas antes son reescritas debajo para usar REGEXP: - -Para buscar nombres que comiencen por "b", usa '^' para buscar la coincidencia -al comienzo del nombre y '[bB]' para buscar la asociación tanto con la b -minúscula como con la b mayúscula: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^[bB]"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -Para buscar nombres que terminen por "fy", usa "$" para buscar la coincidencia -al final del nombre: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "fy$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -Para buscar nombres que contengan una "w", utiliza "[wW]" para buscar la -asociación tanto en mayúsculas como minúsculas: - - mysql> SELECT * FROM mascota WHERE nombre REGEXP "[wW]"; -+----------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+------------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -+----------+-------------+---------+------+------------+------------+ - -Dado que un patrón de una expresión regular se asocia si ocurre en cualquier -lugar del valor, no es necesario poner un caracter comodín en ningún lado del -patrón para conseguir que se asocie con el valor completo como harías si usaras -un patrón SQL. - -Para buscar nombres conteniendo exactamente cinco caracteres, usa "^" y "$" para -asociar el comienzo y el final de un nombre, y cinco instancias de "." entre -ellos: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.....$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -También podrías haber escrito la consulta anterior usando el operador '{n}' -"repetir n veces": - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.{5}$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - - -8.3.4.8 Contando filas -======================= - -Las bases de datos son usadas a menudo para responder a la pregunta, "¿cuantas -veces aparece un determinado tipo de datos en una tabla?". Por ejemplo, podrías -querer saber cuántas mascotas tienes, o cuántas mascotas tiene cada propietario, -o podrías querer realizar varios tipos de censos respecto a tus animales. - -Contar el número total de animales que tienes es lo mismo que preguntar -"¿cuántas filas hay en la tabla mascota?", dado que hay sólo una fila por -mascota. La función COUNT() cuenta el número de resultados no-NULL , así pues, -la consulta a realizar para contar el número de animales tiene la siguiente forma: - -mysql> SELECT COUNT(*) FROM mascota; -+----------+ -| COUNT(*) | -+----------+ -| 9 | -+----------+ - -Antes, conseguiste los nombres de las personas que poseen una mascota. Puedes -usar COUNT() para averiguar cuántas mascotas tiene cada propietario: - -mysql> SELECT propietario, COUNT(*) FROM mascota GROUP BY propietario; -+-------------+----------+ -| propietario | COUNT(*) | -+-------------+----------+ -| Benny | 2 | -| Diane | 2 | -| Gwen | 3 | -| Harold | 2 | -+-------------+----------+ - -Observa el uso de GROUP BY para agrupar todos los registros de cada -propietario. Si no lo hubiéramos puesto, todo lo que conseguirias sería un -mensaje de error: - -mysql> SELECT propietario, COUNT(propietario) FROM mascota; -ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP -columns is illegal if there is no GROUP BY clause - -COUNT() y GROUP BY son útiles para la caracterización de tus datos de varias -formas. Los siguientes ejemplos muestran difentes maneras para realizar -operaciones de censo animal. - -Número de animales por especies: - -mysql> SELECT especie, COUNT(*) FROM mascota GROUP BY especie; -+-----------+----------+ -| especie | COUNT(*) | -+-----------+----------+ -| gato | 2 | -| hamster | 1 | -| pájaro | 2 | -| perro | 3 | -| serpiente | 1 | -+-----------+----------+ - -Número de animales por sexo: - -mysql> SELECT sexo , COUNT(*) FROM mascota GROUP BY sexo; -+------+----------+ -| sexo | COUNT(*) | -+------+----------+ -| NULL | 1 | -| f | 4 | -| m | 4 | -+------+----------+ - -(En este resultado, NULL indica "sexo desconocido") - -El número de animales por combinación de especies y sexo: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota GROUP BY especie, sexo; -+-----------+------+----------+ -| especie | sexo | COUNT(*) | -+-----------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| hamster | f | 1 | -| pájaro | NULL | 1 | -| pájaro | f | 1 | -| perro | f | 1 | -| perro | m | 2 | -| serpiente | m | 1 | -+-----------+------+----------+ - -No necesitas recuperar una tabla completa cuando uses COUNT(). Por ejemplo, la -consulta anterior, cuando se realiza sólo sobre perros y gatos, se escribe así: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota - -> WHERE especie = "perro" OR especie = "gato" - -> GROUP BY especie, sexo; -+---------+------+----------+ -| especie | sexo | COUNT(*) | -+---------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| perro | f | 1 | -| perro | m | 2 | -+---------+------+----------+ - -O, si quieres conocer el número de animales por sexo sólo para animales de sexo -conocido: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota - -> WHERE sexo IS NOT NULL - -> GROUP BY especie, sexo; -+-----------+------+----------+ -| especie | sexo | COUNT(*) | -+-----------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| hamster | f | 1 | -| pájaro | f | 1 | -| perro | f | 1 | -| perro | m | 2 | -| serpiente | m | 1 | -+-----------+------+----------+ - - -8.3.5 Usando más de una tabla -=============================== - -La tabla mascota guarda datos sobre las mascotas que posees. Si quieres guardar -otra información sobre ellos, como eventos en sus vidas, visitas al veterinario -o cuándo han tenido hermanos, necesitas otra tabla. ¿Cómo debería ser esta otra -tabla? - -* Deberá contener el nombre de la mascota de tal forma que pudieras saber a qué - animal corresponde cada evento almacenado en la misma. - -* Necesitará una fecha para conocer cuándo ocurrió el evento. - -* Necesitará un campo para describir el evento - -* Si quieres ser capaz de categorizar los eventos, sería útil tener un campo de - tipo evento. - -Dadas estas consideraciones, la sentencia CREATE TABLE para la tabla "evento" se -parecería a esto: - -mysql> CREATE TABLE evento (nombre VARCHAR(20), fecha DATE, - -> tipo VARCHAR(15), anotación VARCHAR(255)); - -Como ocurría con la tabla mascota, es más fácil cargar los registros iniciales -creando un fichero de texto delimitado por tabuladores conteniendo la -información: - -Fluffy 1995-05-15 parto 4 cachorros, 3 hembras, 1 macho -Buffy 1993-06-23 parto 5 cachorros, 2 hembras, 3 machos -Buffy 1994-06-19 parto 3 cachorros, 3 hembras -Chirpy 1999-03-21 veterinario necesitó enderezamiento de pico -Slim 1997-08-03 veterinario costilla rota -Bowser 1991-10-12 perrera -Fang 1991-10-12 perrera -Fang 1998-08-28 cumpleaños Se le regala un nuevo juguete de goma -Claws 1998-03-17 cumpleaños Se le regala un nuevo collar de pulgas -Whistler 1998-12-09 cumpleaños Primer cumpleaños - - -Carga los registros así: - -mysql> LOAD DATA LOCAL INFILE "evento.txt" INTO TABLE evento; - -Basándote en lo que has aprendido de las consultas que has ejecutado em la tabla -mascota, deberías ser capaz de realizar recuperaciones de datos en los registros -de la tabla "evento"; los principios son los mismos. ¿Pero qué hacer cuando la -tabla evento no sea suficiente por sí sola de responder a cuestiones que -podrías llegar a realizar? - -Supón que quisieras averiguar las edades de cada mascota al tener cachorros. La -tabla evento indica cuándo ha ocurrido esto, pero para calcular la edad de la -madre, necesitas su fecha de nacimiento. Dado que eso está almacenado en la -tabla mascota, necesitas ambas tablas para la consulta: - -mysql> SELECT mascota.nombre , (TO_DAYS(fecha) - TO_DAYS(nacimiento))/365 AS edad, anotación - -> FROM mascota, evento - -> WHERE mascota.nombre = evento.nombre AND tipo = "parto"; -+--------+------+----------------------------------+ -| nombre | edad | anotación | -+--------+------+----------------------------------+ -| Fluffy | 2.27 | 4 cachorros, 3 hembras, 1 macho | -| Buffy | 4.12 | 5 cachorros, 2 hembras, 3 machos | -| Buffy | 5.10 | 3 cachorros, 3 hembras | -+--------+------+----------------------------------+ - -Existen varios puntos que anotar sobre esta consulta: - -* La cláusula FROM lista dos tablas dado que la consulta necesita extraer - información de las dos. - -* Cuando se combina la información de múltiples tablas, necesitas especificar - cómo pueden ser asociados los registros de una tabla con los registros de la - otra. Esto es fácil dado que ambas tienen una columna nombre (N.T.: nombre es - una clave extranjera). La consulta usa la cláusula WHERE para combinar los - registros de las dos tablas basándose en los valores de nombre. - -* Dado que la columna nombre aparece en ambas tablas, debes ser específico sobre - a qué tabla te refieres cuando estés hablando de esa columna. Esto se realiza - poniendo el nombre de la tabla como prefijo de la columna. - -No necesitas tener dos tablas diferentes para realizar un join. En algunas -ocasiones es útil realizar un join de una tabla consigo misma, si quieres comparar -registros de una tabla con otros registros en la misma tabla. Por ejemplo, para buscar -parejas de sexos entre tus mascotas, puedes enlazar la tabla mascota consigo -mismo para emaparejar machos y hembras de las mismas especies: - -mysql> SELECT p1.nombre, p1.sexo, p2.nombre, p2.sexo, p1.especie - -> FROM mascota AS p1, mascota AS p2 - -> WHERE p1.especie = p2.especie AND p1.sexo = "f" AND p2.sexo = "m"; -+--------+------+--------+------+---------+ -| nombre | sexo | nombre | sexo | especie | -+--------+------+--------+------+---------+ -| Fluffy | f | Claws | m | gato | -| Buffy | f | Fang | m | perro | -| Buffy | f | Bowser | m | perro | -+--------+------+--------+------+---------+ - - -En esta consulta, especificamos un par de alias para el nombre de las tablas -y ser capaces así de referirnos a las columnas y saber en todo momento a qué -instancia de qué tabla se asocia cada referencia de columna. - -8.4 Obtener información sobre bases de datos y tablas -================================================================ - -¿Qué ocurre si olvidas el nombre de una base de datos o de una tabla, o cuál es -la estructura de una tabla dada (ejm. : ¿cómo se llaman sus columnas?) MySQL -soluciona este problema a través de numerosas sentencias que ofrecen información -sobre las bases de datos y las tablas que soporta. - -Ya hemos visto SHOW DATABASES, que lista las bases de datos gestionadas por el -servidor. Para averiguar qué base de datos está actualmente seleccionada, usa la -función DATABASE(): - -mysql> SELECT DATABASE(); -+------------+ -| DATABASE() | -+------------+ -| zoo | -+------------+ - -Si aún no has seleccionado ninguna base de datos, el resultado estará en blanco. - -Para averiguar qué tablas contiene la base de datos actual (por ejemplo, cuando -no estás seguro sobre el nombre de una tabla), usa este comando: - -mysql> SHOW TABLES; -+---------------+ -| Tables in zoo | -+---------------+ -| evento | -| mascota | -+---------------+ - -Si quieres averiguar la estructura de una tabla, el comando DESCRIBE te será -útil; muestra información sobre cada columna de una tabla: - -mysql> DESCRIBE mascota; -+-------------+-------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+-------------+------+-----+---------+-------+ -| nombre | varchar(20) | YES | | NULL | | -| propietario | varchar(20) | YES | | NULL | | -| especie | varchar(20) | YES | | NULL | | -| sexo | char(1) | YES | | NULL | | -| nacimiento | date | YES | | NULL | | -| muerte | date | YES | | NULL | | -+-------------+-------------+------+-----+---------+-------+ - -Field indica el nombre de la columna, Type es el tipo de datos para la columna, -Null indica si la columna puede contener o no valores NULL, Key indica si la -columna está indexada o no, y Default especifica el valor por defecto para la -columna. - -Si tienes índices en una tabla, SHOW INDEX FROM nombre_tabla te mostrará -información sobre ellos. - -8.5 Usando mysql en modo batch -================================= - -En las secciones previas, hemos usado mysql interactivamente para introducir -consultas y observar los resultados. También puedes ejecutar mysql en modo -batch. Para realizarlo, escribe los comandos que quieras ejecutar en un fichero, -después pídele a mysql que lea su entrada desde el fichero: - -shell> mysql < fichero-batch - -(N.T.: en ocasiones se traduce como fichero por lotes) - -Si necesitas especificar parámetros de conexión en la línea de comandos, el -comando podría parecerse a esto: - -shell> mysql -h host -u user -p < fichero-batch -Enter password: ******** - -Cuando usas MySQL de esta manera, estás creando un fichero script (de guión), y -después ejecutando el script. - -¿Por qué usar un script? He aquí algunas razones: - -* Si ejecutas una consulta repetidamente (digamos, cada día o cada semana), el - construir un script con esta consulta te permite evitar volver a teclearla - cada vez que la ejecutes. - -* Puedes generar nuevas consultas a partir de consultas ya existentes similares - simplemente copiando y editando los ficheros script. - -* El modo batch puede ser también muy útil cuando estés desarrollando una - consulta, particularmente para comandos multi-línea o múltiples secuencias de - comandos de múltiples sentencias. Si cometes un error, no necesitas reescribir - todo. Símplemente edita el script para corregir el error, y después pídele a - mysql que lo vuelva a ejecutar. - -* Si tienes una consulta que produce resultados muy largos, puedes usar un - paginador para filtrar esta salida en lugar de ver cómo se desplaza fuera del - alcance de tu pantalla: - - -shell> mysql < fichero_batch | more - -* Puedes redirigir la salida a un fichero para un procesamiento posterior: - -shell> mysql < fichero_batch > mysql.out - -* Puedes distribuir tu script a otras personas para que puedan ejecutar también - tus comandos. - -* Algunas situaciones no permiten un uso interactivo, por ejemplo, cuando - ejecutas una consulta como una tarea de cron. (N.T.: cron es un comando UNIX - que sirve para planificar y ejecutar comandos UNIX en el tiempo). En este - caso, debes usar el procesamiento por lotes. - -El formato de salida por defecto es diferente (más conciso) cuando ejecutas -mysql en modo batch que cuando lo usas de manera interactiva. Por ejemplo, la -salida de SELECT DISTINCT especie FROM mascota es la siguiente cuando se -ejecuta de manera interactiva: - -mysql> SELECT DISTINCT especie FROM mascota; -+-----------+ -| especie | -+-----------+ -| gato | -| hamster | -| pájaro | -| perro | -| serpiente | -+-----------+ - -Y la siguiente si se ejecuta en modo batch: - -especie -gato -hamster -pájaro -perro -serpiente - -Si quieres obtener el formato de salida del modo interactivo también en modo -batch, usa mysql -t. Para redirigir a salida estándar los comandos que se están -ejecutando, usa mysql -vvv. - - - -8.6 Consultas del proyecto gemelos - -En Analytikerna y Lentus, hemos estado realizando el trabajo de campo y sistemas para -un gran proyecto de investigación. Este proyecto es una colaboración entre el Instituto de -Medicina Medioambiental en el Karolinska Institutet Stockholm y la Sección en Investigación -Clínica en Envejecimiento y Psicología en la Universidad del Sur de California. - -El proyecto consistió en una parte de selección donde todos los gemelos en Suecia mayores de -65 años eran entrevistados por teléfono. Los gemelos que reunían ciertos criterios pasaban a la -siguiente fase. En esta fase posterior, los gemelos que querían participar eran visitados por -un equipo doctor/enfermera. Algunos de los exámenes incluían exámenes físicos y neuropsicológicos, -pruebas de laboratorio, neuroimágenes, valoración del estado psicológico, y recopilación de la -historia familiar. Además, se recogieron datos sobre los factores de riesgo médicos y -medioambientales. - -Puede encontrarse más información sobre los estudios de gemelos en : - - http://www.imm.ki.se/TWIN/TWINUKW.HTM - -La última parte del proyecto se administra con un interfaz web escrito usando Perl y MySQL. -Cada noche, todos los datos de las entrevistas son movidos a una base de datos MySQL. - -8.6.1 Buscar todos los gemelos no-distribuidos - -La siguiente consulta se usa para determinar quién pasa a la segunda parte del proyecto: - - select - concat(p1.id, p1.tvab) + 0 as tvid, - concat(p1.christian_name, " ", p1.surname) as Name, - p1.postal_code as Code, - p1.city as City, - pg.abrev as Area, - if(td.participation = "Aborted", "A", " ") as A, - p1.dead as dead1, - l.event as event1, - td.suspect as tsuspect1, - id.suspect as isuspect1, - td.severe as tsevere1, - id.severe as isevere1, - p2.dead as dead2, - l2.event as event2, - h2.nurse as nurse2, - h2.doctor as doctor2, - td2.suspect as tsuspect2, - id2.suspect as isuspect2, - td2.severe as tsevere2, - id2.severe as isevere2, - l.finish_date - from - twin_project as tp - /* For Twin 1 */ - left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab - left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab - left join harmony as h on tp.id = h.id and tp.tvab = h.tvab - left join lentus as l on tp.id = l.id and tp.tvab = l.tvab - /* For Twin 2 */ - left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab - left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab - left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab, - person_data as p1, - person_data as p2, - postal_groups as pg - where - /* p1 gets main twin and p2 gets his/her twin. */ - /* ptvab is a field inverted from tvab */ - p1.id = tp.id and p1.tvab = tp.tvab and - p2.id = p1.id and p2.ptvab = p1.tvab and - /* Just the sceening survey */ - tp.survey_no = 5 and - /* Skip if partner died before 65 but allow emigration (dead=9) */ - (p2.dead = 0 or p2.dead = 9 or - (p2.dead = 1 and - (p2.death_date = 0 or - (((to_days(p2.death_date) - to_days(p2.birthday)) / 365) - >= 65)))) - and - ( - /* Twin is suspect */ - (td.future_contact = 'Yes' and td.suspect = 2) or - /* Twin is suspect - Informant is Blessed */ - (td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) o - /* No twin - Informant is Blessed */ - (ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or - /* Twin broken off - Informant is Blessed */ - (td.participation = 'Aborted' - and id.suspect = 1 and id.future_contact = 'Yes') or - /* Twin broken off - No inform - Have partner */ - (td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0)) - and - l.event = 'Finished' - /* Get at area code */ - and substring(p1.postal_code, 1, 2) = pg.code - /* Not already distributed */ - and (h.nurse is NULL or h.nurse=00 or h.doctor=00) - /* Has not refused or been aborted */ - and not (h.status = 'Refused' or h.status = 'Aborted' - or h.status = 'Died' or h.status = 'Other') - order by - tvid; - -Algunas explicaciones: - -`concat(p1.id, p1.tvab) + 0 as tvid' - Queremos ordenar por la concatenación de `id' y `tvab' en orden numérico. - Añadiendo `0' al resultado provocamos que *MySQL* trate el resultado como - un número. - -column `id' - Esto identifica un par de gemelos. Es una clave en todas las tablas. - -column `tvab' - Esto identifica un gemelo de una pareja. Tiene un valor de `1' ó `2' - -column `ptvab' - Esto es la inversa de `tvab'. Cuando `tvab' es `1' esto es `2', y - vice versa. Esto existe para ahorrarnos teclear y para hacer más fácil - la optimización de la consulta a MySQL. - - -Esta consulta demuestra, entre otras cosas, cómo realizar búsquedas en una tabla -enlazada con la misma tabla a través de un join (p1 y p2). En el ejemplo, ésto -se usa para comprobar cuándo un gemelo de una pareja murió antes de cumplir 65. -En caso afirmativo, la fila no es devuelta. - -Todo lo anterior existe en todas las tablas con información relacionada con los gemelos. -Tenemos una clave tanto en id, tvab (todas las tablas) como en id,ptvab (person_data) para -construir consultas más rápidas. - -En nuestra máquina de producción (una UltraSPARC 200MHz), esta consulta devuelve alrededor -de 150-200 filas y tarda menos de un segundo. - -El número actual de registros en las tablas usadas arriba: - -Tabla Filas - -person_data 71074 -lentus 5291 -twin_project 5286 -twin_data 2012 -informant_data 663 -harmony 381 -postal_groups 100 - - - - -8.6.2 Mostrar una tabla con el estado de la pareja de gemelos. - -Cada entrevista finaliza con un código de estado llamado event. La consulta mostrada -debajo se usa para imprimir una tabla sobre todas las parejas de gemelos combinadas por evento. -Esto indica en cuántas parejas ambos gemelos han finalizado, en cuántas parejas -ha finalizado un gemelo y el otro se rechazó, etc. - - select - t1.event, - t2.event, - count(*) - from - lentus as t1, - lentus as t2, - twin_project as tp - where - /* We are looking at one pair at a time */ - t1.id = tp.id - and t1.tvab=tp.tvab - and t1.id = t2.id - /* Just the sceening survey */ - and tp.survey_no = 5 - /* This makes each pair only appear once */ - and t1.tvab='1' and t2.tvab='2' - group by - t1.event, t2.event; - - - diff --git a/Docs/bk.txt b/Docs/bk.txt deleted file mode 100644 index b9274901653d75401ec569002eb64a98d572aaa0..0000000000000000000000000000000000000000 --- a/Docs/bk.txt +++ /dev/null @@ -1,65 +0,0 @@ -Mail by sasha, should be rewritten as a HOWTO sometimes -vva added point C) for Windows-project ------------ - -I have set up a repository with BitKeeper on work. There are still some things -about it that I would like to learn, but I have gotten far enough with it to -replace CVS functionality were are currently using, so let's just go ahead and -get started on it. Please follow the instructions below (make sure to save the -message for future reference): - -a) http://www.bitmover.com/download - user: beta - password: get bitkeeper - - get the version appropriate for your platform - download it to a temp -directory, chmod +x and then run it. You will have to tell it which directory -to install, for consistency, let's use /usr/local/bin - -b) we will take advantage of bk capablity of working with master/slave -repositories. The master will be on work.mysql.com, the slaves will be our -individual machines. The master repository has already been set up on work, so -you will need just to set up a slave repository on your machine: - - mkdir bk - cd bk - bk clone yourusername@work:/home/bk/mysql mysql - cd mysql - bk -r edit - -Now you have the entire source tree in the current directory. Let's compile it: - - BUILD/compile-pentium-debug - -C) Windows project. - - Compile Linux-project (see points above) - - run VC++Files/prepare - - make repository accessible for Windows (using samba) - - open VC++Files/mysql.dsw in Microsoft Visual Stidio (5.0 or above) - -After you edit a file, you need to check it in using bk citool or bk ci -filename. Note that ci is different than commit - you ci a file, but you commit -a change set. This is a very nice concept - instead of thinking of each -individual file as CVS does, bk groups the changes you are making and allows you -to document what you actually did between the commits as a whole, rather than -just commenting on every file. When you commit, bk will ask you to comment on -the change set. - -Commit is done just to your local repository. To make your changes global, you -will need to run bk push. Be careful with that - it is a good idea to run bk -push -l -n first too see what you are just about to push to the master -repository. - -When somebody does a push, you will be getting a email ( I will set this up to -day). You will then need to execute bk pull to update your sources. If there are -any conflicts, bk will force you to resolve them by asking you questions on what -to do with each conflict. - -To learn more about bk, use bk helptool - I will be doing this a lot in the next -couple of days :-) If you find bugs or have questions/feature -suggestions/comments for developers, feel free to e-mail dev@bitmover.com . -Their developers, and especially the president of the company Larry McVoy really -like MySQL and are very anxious to help us. Make sure it is obvious that you -work for MySQL, of course. And, of course, do not bug them with little things -that you can figure out on your own or with my help - they were nice to offer us -support, but we should not abuse it. \ No newline at end of file diff --git a/Docs/changelog-4.0.xml b/Docs/changelog-4.0.xml deleted file mode 100755 index f0f9aa881f1ae2d72ddb06e291f39508532dee18..0000000000000000000000000000000000000000 --- a/Docs/changelog-4.0.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" -"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> -<!-- -This is a dummy changelog file. Don't use it yet. -It merges upward without conflict. ---> -<appendix id="news-4-0-x"> - - <title> - Changes in release 4.0.x - </title> - - <para> - This is a dummy changelog file. Don't use it yet. - </para> - -</appendix> diff --git a/Docs/changelog-4.1.xml b/Docs/changelog-4.1.xml deleted file mode 100755 index 644f2940d0f0da4529a3ef99b195eed759136cdf..0000000000000000000000000000000000000000 --- a/Docs/changelog-4.1.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" -"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> -<!-- -This is a dummy changelog file. Don't use it yet. -It merges upward without conflict. ---> -<appendix id="news-4-1-x"> - - <title> - Changes in release 4.1.x - </title> - - <para> - This is a dummy changelog file. Don't use it yet. - </para> - -</appendix> diff --git a/Docs/changelog-5.0.xml b/Docs/changelog-5.0.xml deleted file mode 100755 index deb059716adff77dba9ebc3f6b0cdf54e9db9798..0000000000000000000000000000000000000000 --- a/Docs/changelog-5.0.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" -"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> -<!-- -This is a dummy changelog file. Don't use it yet. -It merges upward without conflict. ---> -<appendix id="news-5.0-x"> - - <title> - Changes in release 5.0.x - </title> - - <para> - This is a dummy changelog file. Don't use it yet. - </para> - -</appendix> diff --git a/Docs/Support/generate-text-files.pl b/Docs/generate-text-files.pl similarity index 100% rename from Docs/Support/generate-text-files.pl rename to Docs/generate-text-files.pl diff --git a/Docs/sp-implemented.txt b/Docs/sp-implemented.txt deleted file mode 100644 index 6f2cf49b3b00afc41d6bdb43c1fb4d1e4d2c873d..0000000000000000000000000000000000000000 --- a/Docs/sp-implemented.txt +++ /dev/null @@ -1,112 +0,0 @@ -Stored Procedures implemented 2004-01-29: - - -Summary of what's implemented: - - - SQL PROCEDUREs/FUNCTIONs (CREATE/DROP) - - CALL - - DECLARE of local variables - - BEGIN/END, SET, CASE, IF, LOOP, WHILE, REPEAT, ITERATE, LEAVE - - SELECT INTO local variables - - "Non-query" FUNCTIONs only - - Prepared SP caching - - CONDITIONs and HANDLERs - - Simple read-only CURSORs. - - SHOW CREATE PROCEDURE/FUNCTION and SHOW PROCEDURE/FUNCTION STATUS - - -Summary of Not Yet Implemented: - - - SQL statements using tables (like SELECT, INSERT, UPDATE etc) in FUNCTIONs - - External languages - - Access control - - SQL-99 COMMIT (related to BEGIN/END) - - FOR-loops - - CASCADE/RESTRICT for ALTER and DROP - - ALTER/DROP METHOD (as it implies User Defined Types) - - SIGNAL and RESIGNAL, and UNDO handlers - - -List of what's implemented: - - - CREATE PROCEDURE|FUNCTION name ( args ) characteristics body - where characteristics is: - LANGUAGE SQL | - [NOT] DETERMINISTIC | - SQL SECURITY [DEFINER|INVOKER] | - COMMENT string - However the DETERMINISTIC setting is not currently used. - - - ALTER PROCEDURE|FUNCTION name characteristics - CASCADE/RESTRICT is not implemented. - characteristics is: - COMMENT string | - SQL SECURITY [DEFINER|INVOKER] | - NAME newname - - - DROP PROCEDURE|FUNCTION [IF EXISTS] name - CASCADE/RESTRICT is not implemented. - - - CALL name (args) - OUT and INOUT parameters are also works for user variables ("global" - variables) - i.e., if a procedure is defined as: - CREATE PROCEDURE foo(OUT p INT) ...; - a call like: - CALL foo(@x); - will set @x to the output value. - - - Function/Procedure body: - - BEGIN/END - Is parsed, but not the real thing with (optional) transaction - control, it only serves as block syntax for multiple statements (and - local variable binding). - Note: Multiple statements requires a client that can send bodies - containing ";". This is handled in the CLI clients mysql and - mysqltest with the "delimiter" command. Changing the end-of-query - delimiter ";" to for instance "|" allows ";" to be used in the - routine body. - - SET of local variables - Implemented as part of the pre-existing SET syntax. This allows an - extended syntax of "SET a=x, b=y, ..." where different variable types - (SP local and global) can be mixed. This also allows combinations - of local variables and some options that only make sense for - global/system variables; in that case the options are accepted but - ignored. - - The flow control constructs: CASE, IF, LOOP, WHILE, ITERATE and LEAVE - are fully implemented. - - SELECT ... INTO local variables (as well as global session variables) - is implemented. (Note: This is not SQL-99 feature, but common in other - databases.) - - A FUNCTION can have flow control contructs, but must not contain - an SQL query/statement, like SELECT, INSERT, UPDATE, etc. The reason - is that it's hard to allow this is that a FUNCTION is executed as part - of another query (unlike a PROCEDURE, which is called as a statement). - The table locking scheme used makes it difficult to allow "subqueries" - during FUNCTION invokation. - - SPs are cached, but with a separate cache for each thread (THD). - There are still quite a few non-reentrant constructs in the lexical - context which makes sharing prepared SPs impossible. And, even when - this is resolved, it's not necessarily the case that it will be faster - than a cache per thread. A global cache requires locks, which might - become a bottleneck. (It would save memory though.) - - CONDITIONs and HANDLERs are implemented, but not the SIGNAL and - RESIGNAL statements. (It's unclear if these can be implemented.) - The semantics of CONDITIONs is expanded to allow catching MySQL error - codes as well. UNDO handlers are not implemented (since we don't have - SQL-99 style transaction control yet). - - Simple read-only CURSORs are implemented, but not yet any of the - optional arguments to DECLARE (SCROLL, SENSITIVE, etc) or FETCH - (NEXT, PRIOR, etc). Cursors are ASENSITIVE, READ-ONLY, non-SCROLLing. - (The additional syntax will be added for completeness, but for the - most part unsupported with the current underlying cursor mechanism.) - N.B. The current implementation is temporary and only works within a - stored procedure, and may not perform well for very large result sets. - A "real" cursor implementation is under development; this will replace - the current one when it's finished. - - - SHOW procedures and functions - SHOW CREATE PROCEDURE|FUNCTION <name> - returns the definition of a routine. - SHOW PROCEDURE|FUNCTION STATUS [LIKE <pattern>] - returns characteristics of routines, like the name, type, creator, - creation and modification dates, etc. diff --git a/Makefile.am b/Makefile.am index 3f17cbe797d741858c0d6deb395b006d049a78a6..dbf43151d60634892507a2a9d71900daf9dc7aad 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,25 +21,17 @@ AUTOMAKE_OPTIONS = foreign # These are built from source in the Docs directory EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \ README COPYING EXCEPTIONS-CLIENT cmakelists.txt -SUBDIRS = . include @docs_dirs@ @zlib_dir@ @yassl_dir@ \ +SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @readline_topdir@ sql-common \ @thread_dirs@ pstack \ - @sql_union_dirs@ @mysql_se_dirs@ \ + @sql_union_dirs@ storage \ @sql_server@ scripts @man_dirs@ tests \ @mysql_se_plugins@ \ netware @libmysqld_dirs@ \ - @bench_dirs@ support-files @tools_dirs@ \ - plugin win + mysql-test support-files @tools_dirs@ \ + plugin unittest win -DIST_SUBDIRS = . include @docs_dirs@ zlib \ - @readline_topdir@ sql-common \ - @thread_dirs@ pstack \ - strings mysys dbug extra regex storage \ - vio sql libmysql_r libmysql client scripts \ - @man_dirs@ tests SSL\ - BUILD netware os2 @libmysqld_dirs@\ - @bench_dirs@ support-files server-tools tools \ - plugin win +DIST_SUBDIRS = $(SUBDIRS) BUILD # Run these targets before any others, also make part of clean target, # to make sure we create new links after a clean. @@ -100,9 +92,11 @@ dist-hook: rm -rf `find $(distdir) -type d -name SCCS -print` if echo "$(distdir)" | grep -q '^/' ; then \ scripts/mysql_install_db --no-defaults --windows \ + --basedir=$(top_srcdir) \ --datadir="$(distdir)/win/data"; \ else \ scripts/mysql_install_db --no-defaults --windows \ + --basedir=$(top_srcdir) \ --datadir="$$(pwd)/$(distdir)/win/data"; \ fi @@ -119,54 +113,37 @@ tags: # making sure each user use different ports. test: - cd mysql-test ; \ - ./mysql-test-run --mysqld=--binlog-format=statement && \ - ./mysql-test-run --ps-protocol --mysqld=--binlog-format=row - -test-full: - cd mysql-test ; \ - ./mysql-test-run --mysqld=--binlog-format=statement && \ - ./mysql-test-run --ps-protocol --mysqld=--binlog-format=statement && \ - ./mysql-test-run --mysqld=--binlog-format=row && \ - ./mysql-test-run --ps-protocol --mysqld=--binlog-format=row - -test-force: - cd mysql-test ; \ - ./mysql-test-run --force --mysqld=--binlog-format=statement && \ - ./mysql-test-run --ps-protocol --force --mysqld=--binlog-format=row - -test-force-full: - cd mysql-test ; \ - ./mysql-test-run --force --mysqld=--binlog-format=statement && \ - ./mysql-test-run --force --ps-protocol --mysqld=--binlog-format=statement && \ - ./mysql-test-run --force --mysqld=--binlog-format=row && \ - ./mysql-test-run --force --ps-protocol --mysqld=--binlog-format=row - -# We are testing a new Perl version of the test script -test-pl: cd mysql-test ; \ ./mysql-test-run.pl --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --ps-protocol --mysqld=--binlog-format=row -test-full-pl: +test-full: cd mysql-test ; \ ./mysql-test-run.pl --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --ps-protocol --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --mysqld=--binlog-format=row && \ ./mysql-test-run.pl --ps-protocol --mysqld=--binlog-format=row -test-force-pl: +test-force: cd mysql-test ; \ ./mysql-test-run.pl --force --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --ps-protocol --force --mysqld=--binlog-format=row -test-force-full-pl: +test-force-full: cd mysql-test ; \ ./mysql-test-run.pl --force --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --force --ps-protocol --mysqld=--binlog-format=statement && \ ./mysql-test-run.pl --force --mysqld=--binlog-format=row && \ ./mysql-test-run.pl --force --ps-protocol --mysqld=--binlog-format=row +# Keep these for a while +test-pl: test +test-full-pl: test-full +test-force-pl: test-force +test-force-full-pl: test-force-full + + + # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/SSL/Makefile.am b/SSL/Makefile.am deleted file mode 100644 index bd3aad1e3b2a533479292953e564d56392723924..0000000000000000000000000000000000000000 --- a/SSL/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Process this file with automake to create Makefile.in - -EXTRA_DIST= NOTES cacert.pem client-cert.pem client-key.pem \ - client-req.pem run-client run-server server-cert.pem \ - server-key.pem server-req.pem - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/SSL/NOTES b/SSL/NOTES deleted file mode 100644 index 413c724c583563205ce756b75eab6b0be457e3a2..0000000000000000000000000000000000000000 --- a/SSL/NOTES +++ /dev/null @@ -1,376 +0,0 @@ -Quick notes: --------------------------------------------- -[tonu@x153 mysql-4.0]$ cat /etc/my.cnf -[mysqld] -ssl-ca=SSL/cacert.pem -ssl-cert=SSL/server-cert.pem -ssl-key=SSL/server-key.pem - -[mysql] -ssl-ca=SSL/cacert.pem -ssl-cert=SSL/client-cert.pem -ssl-key=SSL/client-key.pem - -[mysqldump] -ssl-ca=SSL/cacert.pem -ssl-cert=SSL/client-cert.pem -ssl-key=SSL/client-key.pem - -[tonu@x153 mysql-4.0]$ --------------------------------------------- -To remove passwords from keyfiles: -[tonu@x153 SSL]$ openssl rsa -inform pem < server-req.pem > server-key.pem -read RSA key -Enter PEM pass phrase: -writing RSA key -[tonu@x153 SSL]$ --------------------------------------------- -To run server: - -sql/mysqld --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/server-cert.pem --ssl-key=SSL/server-key.pem --skip-grant --debug='d:t:O,-' > /tmp/mysqld.trace --------------------------------------------- -To run client: - -client/mysql --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/server-cert.pem --ssl-key=SSL/server-key.pem --debug='d:t:O,/tmp/client.trace' -h 127.0.0.1 --------------------------------------------- -openssl s_client -host 127.0.0.1 -port 1111 -debug -verify 1 -cert ../SSL/client-cert.pem -key ../SSL/client-key.pem -CAfile ../SSL/cacert.pem -pause -showcerts -state - --------------------------------------------- -openssl s_server -port 1111 -cert ../SSL/server-cert.pem -key ../SSL/server-key.pem - - - - --------------------------------------------- - -CA stuff: - -[tonu@x153 bin]$ pwd -/usr/local/ssl/bin -[tonu@x153 bin]$ -[tonu@x153 bin]$ ./CA.sh -[tonu@x153 bin]$ ./CA.sh -h -usage: CA -newcert|-newreq|-newca|-sign|-verify -[tonu@x153 bin]$ -[root@x153 bin]# ./CA.sh -newca -CA certificate filename (or enter to create) - -Making CA certificate ... -Using configuration from /usr/lib/ssl/openssl.cnf -Generating a 1024 bit RSA private key -.++++++ -................++++++ -writing new private key to './demoCA/private/./cakey.pem' -Enter PEM pass phrase: -Verifying password - Enter PEM pass phrase: -phrase is too short, needs to be at least 4 chars -Enter PEM pass phrase: -Verifying password - Enter PEM pass phrase: ------ -You are about to be asked to enter information that will be incorporated -into your certificate request. -What you are about to enter is what is called a Distinguished Name or a DN. -There are quite a few fields but you can leave some blank -For some fields there will be a default value, -If you enter '.', the field will be left blank. ------ -ountry Name (2 letter code) [AU]:FI -State or Province Name (full name) [Some-State]: -Locality Name (eg, city) []:Helsinki -Organization Name (eg, company) [Internet Widgits Pty Ltd]:MySQL Finland AB -Organizational Unit Name (eg, section) []: -Common Name (eg, YOUR name) []:Tonu Samuel -Email Address []:tonu@mysql.com -[root@x153 bin]# -[root@x153 bin]# ls -la demoCA/ -total 13 -drwxr-xr-x 6 root root 232 Jun 24 18:50 ./ -drwxr-xr-x 3 root root 2136 Jun 24 18:41 ../ --rw-r--r-- 1 root root 1241 Jun 24 18:50 cacert.pem -drwxr-xr-x 2 root root 48 Jun 24 18:41 certs/ -drwxr-xr-x 2 root root 48 Jun 24 18:41 crl/ --rw-r--r-- 1 root root 0 Jun 24 18:44 index.txt -drwxr-xr-x 2 root root 48 Jun 24 18:41 newcerts/ -drwxr-xr-x 2 root root 80 Jun 24 18:44 private/ --rw-r--r-- 1 root root 3 Jun 24 18:44 serial -[root@x153 bin]# -[root@x153 bin]# ls -la demoCA/private/ -total 5 -drwxr-xr-x 2 root root 80 Jun 24 18:44 ./ -drwxr-xr-x 6 root root 232 Jun 24 18:50 ../ --rw-r--r-- 1 root root 963 Jun 24 18:50 cakey.pem -[root@x153 bin]# -[root@x153 bin]# ./CA.sh -newreq -Using configuration from /usr/lib/ssl/openssl.cnf -Generating a 1024 bit RSA private key -..................++++++ -........................++++++ -writing new private key to 'newreq.pem' -Enter PEM pass phrase: <- new key password, not CA -Verifying password - Enter PEM pass phrase: ------ -You are about to be asked to enter information that will be incorporated -into your certificate request. -What you are about to enter is what is called a Distinguished Name or a DN. -There are quite a few fields but you can leave some blank -For some fields there will be a default value, -If you enter '.', the field will be left blank. ------ -Country Name (2 letter code) [AU]:EE -State or Province Name (full name) [Some-State]: -Locality Name (eg, city) []:Tallinn -Organization Name (eg, company) [Internet Widgits Pty Ltd]:Noname -Organizational Unit Name (eg, section) []: -Common Name (eg, YOUR name) []:Mr Noname -Email Address []:a@b.c - -Please enter the following 'extra' attributes -to be sent with your certificate request -A challenge password []: -An optional company name []: -Request (and private key) is in newreq.pem -[root@x153 bin]# -[root@x153 bin]# ls -la newreq.pem --rw-r--r-- 1 root root 1623 Jun 24 18:54 newreq.pem -[root@x153 bin]# -[root@x153 bin]# ./CA.sh -sign -Using configuration from /usr/lib/ssl/openssl.cnf -Enter PEM pass phrase: <- CA's one! -Check that the request matches the signature -Signature ok -The Subjects Distinguished Name is as follows -countryName :PRINTABLE:'EE' -stateOrProvinceName :PRINTABLE:'Some-State' -localityName :PRINTABLE:'Tallinn' -organizationName :PRINTABLE:'Noname' -commonName :PRINTABLE:'Mr Noname' -emailAddress :IA5STRING:'a@b.c' -Certificate is to be certified until Jun 24 15:50:23 2002 GMT (365 days) -Sign the certificate? [y/n]:y - - -1 out of 1 certificate requests certified, commit? [y/n]y -Write out database with 1 new entries -Data Base Updated -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: md5WithRSAEncryption - Issuer: C=FI, ST=Some-State, L=Helsinki, O=MySQL Finland AB, CN=Tonu Samuel/Email=tonu@mysql.com - Validity - Not Before: Jun 24 15:50:23 2001 GMT - Not After : Jun 24 15:50:23 2002 GMT - Subject: C=EE, ST=Some-State, L=Tallinn, O=Noname, CN=Mr Noname/Email=a@b.c - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:ab:3b:7d:5b:6c:93:f6:46:1a:2c:46:73:6f:89: - 8a:99:bb:e9:6b:94:0d:74:aa:aa:c4:5c:a2:61:cf: - 56:bb:a1:a9:5a:37:c4:4e:b2:ec:5c:18:3a:a4:8d: - af:3d:23:66:7c:85:7f:d1:f2:e3:fc:16:a7:4c:a2: - d6:45:06:92:75:d8:a2:3b:f9:aa:77:da:26:b9:87: - e0:df:50:54:e4:36:9f:35:87:39:8e:a6:7c:3e:a8: - e4:49:1a:76:c2:6f:73:0b:22:93:2a:04:67:0d:7d: - ae:34:5c:fe:7c:29:b8:a2:fe:1e:ef:d1:0c:4d:dd: - 5b:7a:67:b0:0a:22:88:a0:af - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 83:D1:0D:52:0F:DE:61:2D:A6:10:20:B8:46:0C:77:D5:D2:D0:BE:20 - X509v3 Authority Key Identifier: - keyid:A5:0A:D6:72:B5:DF:E4:C2:2B:7B:07:5E:D3:4D:52:07:E1:83:6B:7F - DirName:/C=FI/ST=Some-State/L=Helsinki/O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@mysql.com - serial:00 - - Signature Algorithm: md5WithRSAEncryption - 60:85:f7:d0:54:2a:67:88:0e:37:a6:a8:8e:fd:a0:c9:a1:d7: - c6:fc:4c:2e:59:8d:88:6d:69:0a:b8:b2:67:5f:81:94:39:0e: - ab:67:fc:8b:62:de:85:f6:b3:8c:2d:1a:e3:dc:28:fc:f5:99: - 39:f0:3d:50:ca:88:c0:8e:f8:c2:02:5d:34:19:63:9f:c4:a2: - f6:a8:81:c9:8d:6d:bd:c4:42:4a:0c:49:5a:cc:24:ea:65:80: - dd:79:20:89:9e:ea:6b:80:7a:86:f9:bb:6d:24:3c:80:13:5b: - e6:16:fc:3d:8d:f6:16:ea:33:25:c6:90:20:81:a4:b0:15:2e: - 9c:1c ------BEGIN CERTIFICATE----- -MIIDfjCCAuegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCRkkx -EzARBgNVBAgTClNvbWUtU3RhdGUxETAPBgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQK -ExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqG -SIb3DQEJARYOdG9udUBteXNxbC5jb20wHhcNMDEwNjI0MTU1MDIzWhcNMDIwNjI0 -MTU1MDIzWjBvMQswCQYDVQQGEwJFRTETMBEGA1UECBMKU29tZS1TdGF0ZTEQMA4G -A1UEBxMHVGFsbGlubjEPMA0GA1UEChMGTm9uYW1lMRIwEAYDVQQDEwlNciBOb25h -bWUxFDASBgkqhkiG9w0BCQEWBWFAYi5jMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCrO31bbJP2RhosRnNviYqZu+lrlA10qqrEXKJhz1a7oalaN8ROsuxcGDqk -ja89I2Z8hX/R8uP8FqdMotZFBpJ12KI7+ap32ia5h+DfUFTkNp81hzmOpnw+qORJ -GnbCb3MLIpMqBGcNfa40XP58Kbii/h7v0QxN3Vt6Z7AKIoigrwIDAQABo4IBETCC -AQ0wCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg -Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIPRDVIP3mEtphAguEYMd9XS0L4gMIGyBgNV -HSMEgaowgaeAFKUK1nK13+TCK3sHXtNNUgfhg2t/oYGLpIGIMIGFMQswCQYDVQQG -EwJGSTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMISGVsc2lua2kxGTAX -BgNVBAoTEE15U1FMIEZpbmxhbmQgQUIxFDASBgNVBAMTC1RvbnUgU2FtdWVsMR0w -GwYJKoZIhvcNAQkBFg50b251QG15c3FsLmNvbYIBADANBgkqhkiG9w0BAQQFAAOB -gQBghffQVCpniA43pqiO/aDJodfG/EwuWY2IbWkKuLJnX4GUOQ6rZ/yLYt6F9rOM -LRrj3Cj89Zk58D1QyojAjvjCAl00GWOfxKL2qIHJjW29xEJKDElazCTqZYDdeSCJ -nuprgHqG+bttJDyAE1vmFvw9jfYW6jMlxpAggaSwFS6cHA== ------END CERTIFICATE----- -Signed certificate is in newcert.pem -[root@x153 bin]# ls -la demoCA/newcerts/ -total 5 -drwxr-xr-x 2 root root 72 Jun 24 18:58 ./ -drwxr-xr-x 6 root root 296 Jun 24 18:58 ../ --rw-r--r-- 1 root root 3533 Jun 24 18:58 01.pem -[root@x153 bin]# -[root@x153 mysql-4.0]# ./sql/mysqld --ssl-cert=SSL/server-cert.pem --ssl-ca=SSL/cacert.pem --ssl-ke -y=SSL/server-req.pem -L /home/tonu/mysql-4.0/sql/share/english/ -u root -Enter PEM pass phrase: -./sql/mysqld: ready for connections -[tonu@x153 mysql-4.0]$ client/mysql --ssl-key=SSL/client-req.pem --ssl-ca=SSL/cacert.pem --ssl-cert -=SSL/client-cert.pem -Enter PEM pass phrase: -ERROR: - -[tonu@x153 mysql-4.0]$ - - - - --8<------------------------ -SSL encrypts data between MySQL server and client. - -You need openssl (formerly SSLeay) for MySQL SSL support. Development -and testing was done on openssl version 0.9.3a - -To compile MySQL one must do: -./configure --with-openssl=/usr - -or - -./configure --with-openssl=yes - -There are sample keys and certificates included with MySQL tarball in -directory ./SSL. They are meant to be for quick start and -testing only. Using them in production environment means same as not -using encryption. This is because private keys are publicly -accessible for everyone. You must use openssl distribution for new key -and certificate generation for both client and server. - ------------ for manual: --------------------- -*New API calls:* - -mysql_ssl_set() - Set SSL properties (key, certificate, -certificates authority certificate). Must be called before -mysql_real_connect(); -mysql_ssl_clear() - Clear and free resources occupied by -mysql_ssl_set() API call. -char *mysql_ssl_cipher(MYSQL *) - returns cipher in use. For example -"DES-CDC3-SHA" means that you have combined triple DES symmetric -algorithm and SHA -hashing algorithm. - - -*New command line switches:* ---ssl Use SSL for connection (automatically set with -other flags. This means one can use encrypted connection without strong -cryptological authentication. Normally one must use all switches -together including ssl-key, ssl-cert and ssl-ca and never mind about ---ssl because this is assumed by defult if any of them (--ssl-...) -included. ---ssl-key X509 key in PEM format (implies --ssl) ---ssl-cert X509 cert in PEM format (implies --ssl) ---ssl-ca CA file in PEM format (check OpenSSL docs, -implies --ssl) ---ssl-capath CA directory (check OpenSSL docs, implies --ssl - ---------------- - This is about using SSL in MySQL privilege system. My idea is to make - possible use of x509 certificates and keys instead of MySQL native - passwords -Some basic theory about crypt, SSL and x509: -x509 is standard for certificates. SSL is standard for secure -communication. Certificates are issued by someone anyone can trust. This -trusted party is called "Certificate Authority" or "CA". This is -someone, we MUST trust. Everyone must have some "fingerprint" of CA (so -called "CA certificate" or "CA cert") using which one can verify -authenticity of other -certificates issued by this CA. CA uses his power to give certificates -to persons (they can be physical (like "monty") or logical (like some -process). Person is identified by "subject" like -"/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client bogus certificate/CN=Tonu -Samuel/Email=<EMAIL: PROTECTED>". and signed cryptologically. This sign can be -verified using CA-cert. So, if we trust CA, then we can trust identity -of user. -There can be many CA-s (usually not but who knows). Also there can be -some users we don`t trust or have different privileges. This means we -must have one table to hold CA-certs and other table to hold so called -"subjects" (users). I think it`s a good idea to use existing structure -of host/user/db/field and add some x509 relationship. Then we can -use usual simple user/host pair or x509 subject/CA pair. -So I think user must grant rights using old method GRANT blabla ON -blabla TO blabla IDENTIFIED BY blabla -or new way: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla -IDENTIFIED BY X509 SUBJECT "/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client -bogus certificate/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>" AND ISSUER -"/C=EE/ST=Harjumaa/L=Tallinn/O=TCX AB/CN=Tonu -Samuel/Email=<EMAIL: PROTECTED>"; ------------8<--------------------------- -Please note the difference in Subject and Issuer. This command requests -user to authenticate itself with exact subject and exact certificate -issuer. Next possibility is just have any certificate of some good CA: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla IDENTIFIED BY X509 ISSUER -"/C=EE/ST=Harjumaa/L=Tallinn/O=TCX -AB/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>"; ------------8<--------------------------- -or if any registered CA is good enough (usual case when only one CA is -registered) -but we care about exact user, then something like: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla IDENTIFIED BY X509 SUBJECT -"/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client -bogus certificate/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>"; ------------8<--------------------------- -And case if user must authenticate itself but we don`t care about exact -person until he have some certificate issued by CA registered in our -system: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla IDENTIFIED BY X509; ------------8<--------------------------- -Then additionally we need one exception. Let`s assume we need SSL -encryption -for preventing eavesdropping but we don`t care who it is at all. We need -privilege to exclude all non-SSL users but we accept anyone using SSL. -How -this must be done in GRANT syntax? Maybe: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla -IDENTIFIED BY blabla AND USING SSL ------------8<--------------------------- -But maybe we want to add in future possibility to check different -algorithms and key lengths? Something like: ------------8<--------------------------- -GRANT blabla ON blabla TO blabla IDENTIFIED BY blabla AND USING SSL WITH -CIPHER "DES-CBC3-SHA" OR "DES-CBC3-MD5" ------------8<--------------------------- -Also we need some command to include/exclude CA certificates. This must -be some commands like INSERT/DELETE/UPDATE/REPLACE to do it. -All examples is given for clarify my problem. I asking for help because -I don`t know -any similar command in other SQL-s. -------------8<------------------------ - -So, at moment SSL communications is ready and working. I don`t have this -command iterface at moment yet and this can be changed a lot if someone -can suggest good idea or reason to change them. We are ready to listen -every opinion. -About Kerberos: I just don`t know much about it. I have to read this -again before I can comment. I never used it itself and forgot most of -theory. Sorry. Anyway now the problem/need is known and I will put -thinking about this in personal TODO. - - diff --git a/SSL/client-req.pem b/SSL/client-req.pem deleted file mode 100644 index b3667fb5ec68a343e1c482d6aff86da336935e79..0000000000000000000000000000000000000000 --- a/SSL/client-req.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBvDCCASUCAQAwfDELMAkGA1UEBhMCU0UxEDAOBgNVBAcTB1VwcHNhbGExETAP -BgNVBAoTCE15U1FMIEFCMRUwEwYDVQQDEwxNeVNRTCBDbGllbnQxMTAvBgkqhkiG -9w0BCQEWImFic3RyYWN0Lm15c3FsLmRldmVsb3BlckBteXNxbC5jb20wgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAMQDCu7jsRL87rQZ9OFgHeAow5Yt34JpzXR8 -VFjQrrNZPwwZHJkQphLJzzpkBUOOv9JlNoCRC2WwJyY4ySPYNqJK8PfAL2g4cAEn -Kf+yxVLha/HI18Nc7vA3bCqblhoFnuszojlad2ZiJ3UfL2842uWfeK/KayI/Vyu8 -po9H0ZlvAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQAnKdk68dGJXvlj/GXwBUWN -oXWF7hq4fDmwyhmcFUqk8qZKPKFUxkcER0GLzYeUgvD2URSfaS3/YW0d7K7kXGwP -rB5edb+suaYf6mjm/w37xw/EJI9rdSKcB/3SSu8mALds7sUHDAO+MO0WkA/9d7t0 -LOsUqcDvMkKpZuYwNILwLw== ------END CERTIFICATE REQUEST----- diff --git a/SSL/run-client b/SSL/run-client deleted file mode 100755 index f3b29eb273bb1cbeb95978c6f018c93b43535c5b..0000000000000000000000000000000000000000 --- a/SSL/run-client +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/sh - -cmd () { - echo $* - $* -} - -client/mysql --port=4407 --socket=/tmp/test.mysql.sock --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/client-cert.pem --ssl-key=SSL/client-key.pem --debug='d:t:O,/tmp/client.trace' -h 127.0.0.1 -u root -#--execute="select version();show status" - diff --git a/SSL/run-server b/SSL/run-server deleted file mode 100755 index e90a7644b833a6aa00737a230221820f079f3f1b..0000000000000000000000000000000000000000 --- a/SSL/run-server +++ /dev/null @@ -1,9 +0,0 @@ -#! /bin/sh - -cmd () { - echo $* - $* -} - -cmd sql/mysqld --port=4407 --socket=/tmp/test.mysql.sock --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/server-cert.pem --ssl-key=SSL/server-key.pem --debug='d:t:O,/tmp/mysqld.trace' -uroot >& /tmp/mysqld.output - diff --git a/SSL/server-req.pem b/SSL/server-req.pem deleted file mode 100644 index 7c3db0660ad255b1d7cc51208144d844b8d6e1fa..0000000000000000000000000000000000000000 --- a/SSL/server-req.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBvDCCASUCAQAwfDELMAkGA1UEBhMCU0UxEDAOBgNVBAcTB1VwcHNhbGExETAP -BgNVBAoTCE15U1FMIEFCMRUwEwYDVQQDEwxNeVNRTCBTZXJ2ZXIxMTAvBgkqhkiG -9w0BCQEWImFic3RyYWN0Lm15c3FsLmRldmVsb3BlckBteXNxbC5jb20wgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAOmGelWEiEy+pPiSczASSQt6hYc5NDkNfQuN -GMIXlRNS0j9VEFfIP1r1svqL0GdJzKqC/J/OALRz8zbSOtPCsA4Uw9SyIXSh8DGB -YIeYc1wQwbEaTfHzsJg/8NeXmyv91SF5si/rZBXJm538ni3U+ARb6ql1S0LDPQ5N -Kqi4ypmNAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQCagJxGHBC+G5aSh3OguFn6 -z+qAC7u3B181kPBgNv20zMgLeq7YiAh3iNx4XO2+QXRGzMznFKx1tFr/mavCpgLs -p3+dCvQt5FHEFFK1D1pDeXy4146X07hOTtC9jc/jSWeVnH4ujuX5gMtZqisOyYWV -/gpw6dBtkTYlhS+y86kM/Q== ------END CERTIFICATE REQUEST----- diff --git a/VC++Files/client/mysql_upgrade.dsp b/VC++Files/client/mysql_upgrade.dsp new file mode 100644 index 0000000000000000000000000000000000000000..a039098d6391099a86f0cae485798a33b210e741 --- /dev/null +++ b/VC++Files/client/mysql_upgrade.dsp @@ -0,0 +1,71 @@ +# Microsoft Developer Studio Project File - Name="mysql_upgrade" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mysql_upgrade - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak" CFG="mysql_upgrade - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysql_upgrade - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "mysql_upgrade___Win32_Release" +# PROP BASE Intermediate_Dir "mysql_upgrade___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "mysql_upgrade___Win32_Release" +# PROP Intermediate_Dir "mysql_upgrade___Win32_Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /Fp"Release/mysql_upgrade.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib zlib.lib /nologo /subsystem:console /pdb:"release/mysql_upgrade.pdb" /machine:I386 /out:"../client_release/mysql_upgrade.exe" /libpath:"..\lib_release\\" +# SUBTRACT LINK32 /pdb:none +# Begin Target + +# Name "mysql_upgrade - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mysql_upgrade.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/VC++Files/client/mysql_upgrade_ia64.dsp b/VC++Files/client/mysql_upgrade_ia64.dsp new file mode 100644 index 0000000000000000000000000000000000000000..a116f3f06c39ac7cc5ec8afa81f9eb9b79742ad8 --- /dev/null +++ b/VC++Files/client/mysql_upgrade_ia64.dsp @@ -0,0 +1,77 @@ +# Microsoft Developer Studio Project File - Name="mysql_upgrade" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mysql_upgrade - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak" CFG="mysql_upgrade - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysql_upgrade - WinIA64 Release" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mysql - WinIA64 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "mysql_upgrade___WinIA64_Release" +# PROP BASE Intermediate_Dir "mysql_upgrade___WinIA64_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "mysql_upgrade___WinIA64_Release" +# PROP Intermediate_Dir "mysql_upgrade___WinIA64_Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /I "../include" /D"NDEBUG" /D"DBUG_OFF" /D"_CONSOLE" /D"_MBCS" /D"_WINDOWS" /Fp"Release/mysql_upgrade.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c /O2 /G2 /EHsc /D"_IA64_" /Zi /D"WIN64" /D"WIN32" /D"_AFX_NO_DAO_SUPPORT" /Wp64 /Zm600 +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IA64 +# ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib zlib.lib /nologo /subsystem:console /pdb:"release/mysql_upgrade.pdb" /machine:IA64 /out:"../client_release/mysql_upgrade.exe" /libpath:"..\lib_release\\" /incremental:no +# SUBTRACT LINK32 + +!ENDIF + +# Begin Target + +# Name "mysql_upgrade - WinIA64 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mysql_upgrade.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/VC++Files/copy_mysql_files.bat b/VC++Files/copy_mysql_files.bat index 2857fabc3124388d071e0264354cd9390bdb3a22..172075e0adfa2fb169899b278adb36d33108e66b 100644 --- a/VC++Files/copy_mysql_files.bat +++ b/VC++Files/copy_mysql_files.bat @@ -71,7 +71,6 @@ REM Copy share, docs etc xcopy share\*.* c:\mysql\share /E /Y xcopy scripts\*.* c:\mysql\scripts /E /Y xcopy docs\*.* c:\mysql\docs /E /Y -xcopy sql-bench\*.* c:\mysql\bench /E /Y copy docs\readme c:\mysql\ REM Copy privilege tables (Delete old ones as they may be from a newer version) diff --git a/VC++Files/libmysqld/libmysqld.vcproj b/VC++Files/libmysqld/libmysqld.vcproj index a8410ee958f872c493b8b7a346c530c37b5246e5..e2bdbce0cf406a7b8160fd7329ae5a1187632ab4 100644 --- a/VC++Files/libmysqld/libmysqld.vcproj +++ b/VC++Files/libmysqld/libmysqld.vcproj @@ -21,7 +21,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="../include,../libmysqld,../sql,../regex,../extra/yassl/include,../storage/bdb/build_win32,../zlib" + AdditionalIncludeDirectories="../include,../libmysqld,../sql,../regex,../extra/yassl/include,../storage/bdb/build_win32,../zlib,." PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_DEBUG;SAFEMALLOC;USE_SYMDIR;SIGNAL_WITH_VIO_CLOSE;HAVE_DLOPEN;EMBEDDED_LIBRARY;MYSQL_SERVER;HAVE_INNOBASE_DB;WITH_INNOBASE_STORAGE_ENGINE;USE_TLS;__WIN__" BasicRuntimeChecks="3" RuntimeLibrary="1" @@ -89,7 +89,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../extra/yassl/include,../libmysqld,../sql,../zlib" + AdditionalIncludeDirectories="../include,../regex,../extra/yassl/include,../libmysqld,../sql,../zlib,." PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;NDEBUG;DBUG_OFF;USE_SYMDIR;SIGNAL_WITH_VIO_CLOSE;HAVE_DLOPEN;EMBEDDED_LIBRARY;MYSQL_SERVER;HAVE_INNOBASE_DB;WITH_INNOBASE_STORAGE_ENGINE;USE_TLS;__WIN__;LICENSE=Commercial" StringPooling="TRUE" RuntimeLibrary="0" @@ -155,7 +155,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../libmysqld,../sql,../regex,../extra/yassl/include,../storage/bdb/build_win32,../zlib" + AdditionalIncludeDirectories="../include,../libmysqld,../sql,../regex,../extra/yassl/include,../storage/bdb/build_win32,../zlib,." PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;NDEBUG;DBUG_OFF;USE_SYMDIR;SIGNAL_WITH_VIO_CLOSE;HAVE_DLOPEN;EMBEDDED_LIBRARY;MYSQL_SERVER;HAVE_INNOBASE_DB;WITH_INNOBASE_STORAGE_ENGINE;USE_TLS;__WIN__" StringPooling="TRUE" RuntimeLibrary="0" @@ -221,7 +221,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../extra/yassl/include,../libmysqld,../sql,../zlib" + AdditionalIncludeDirectories="../include,../regex,../extra/yassl/include,../libmysqld,../sql,../zlib,." PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;NDEBUG;DBUG_OFF;USE_SYMDIR;SIGNAL_WITH_VIO_CLOSE;HAVE_DLOPEN;EMBEDDED_LIBRARY;MYSQL_SERVER;USE_TLS;__WIN__;LICENSE=Commercial" StringPooling="TRUE" RuntimeLibrary="0" diff --git a/VC++Files/mysql-test/mysql_test_run_new.dsp b/VC++Files/mysql-test/mysql_test_run_new.dsp deleted file mode 100644 index 5ff07f0994da260914ae38c4acb8c818bca3862d..0000000000000000000000000000000000000000 --- a/VC++Files/mysql-test/mysql_test_run_new.dsp +++ /dev/null @@ -1,106 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mysql_test_run_new" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mysql_test_run_new - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "mysql_test_run_new.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "mysql_test_run_new.mak" CFG="mysql_test_run_new - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mysql_test_run_new - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "mysql_test_run_new - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mysql_test_run_new - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir ".\Debug" -# PROP BASE Intermediate_Dir ".\Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir ".\Debug" -# PROP Intermediate_Dir ".\Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /I "../include" /I "../" /Z7 /W3 /Od /G6 /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN32" /Fp".\Debug/mysql_test_run_new.pch" /Fo".\Debug/" /Fd".\Debug/" /GZ /FD /c /GX -# ADD CPP /nologo /MTd /I "../include" /I "../" /Z7 /W3 /Od /G6 /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN32" /Fp".\Debug/mysql_test_run_new.pch" /Fo".\Debug/" /Fd".\Debug/" /GZ /FD /c /GX -# ADD BASE MTL /nologo /tlb".\Debug\mysql_test_run_new.tlb" /win32 -# ADD MTL /nologo /tlb".\Debug\mysql_test_run_new.tlb" /win32 -# ADD BASE RSC /l 1033 -# ADD RSC /l 1033 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /out:"..\mysql-test\mysql_test_run_new.exe" /incremental:yes /debug /pdb:".\Debug\mysql_test_run_new.pdb" /pdbtype:sept /map:".\Debug\mysql_test_run_new.map" /subsystem:console -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib zlib.lib /nologo /out:"..\mysql-test\mysql_test_run_new.exe" /incremental:yes /libpath:"..\lib_debug\" /debug /pdb:".\Debug\mysql_test_run_new.pdb" /pdbtype:sept /map:".\Debug\mysql_test_run_new.map" /subsystem:console - -!ELSEIF "$(CFG)" == "mysql_test_run_new - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir ".\Release" -# PROP BASE Intermediate_Dir ".\Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir ".\Release" -# PROP Intermediate_Dir ".\Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /I "../include" /I "../" /W3 /Ob1 /G6 /D "DBUG_OFF" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN32" /GF /Gy /Fp".\Release/mysql_test_run_new.pch" /Fo".\Release/" /Fd".\Release/" /FD /c /GX -# ADD CPP /nologo /MTd /I "../include" /I "../" /W3 /Ob1 /G6 /D "DBUG_OFF" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN32" /GF /Gy /Fp".\Release/mysql_test_run_new.pch" /Fo".\Release/" /Fd".\Release/" /FD /c /GX -# ADD BASE MTL /nologo /tlb".\Release\mysql_test_run_new.tlb" /win32 -# ADD MTL /nologo /tlb".\Release\mysql_test_run_new.tlb" /win32 -# ADD BASE RSC /l 1033 -# ADD RSC /l 1033 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /out:"..\mysql-test\mysql_test_run_new.exe" /incremental:no /pdb:".\Release\mysql_test_run_new.pdb" /pdbtype:sept /subsystem:console -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib zlib.lib /nologo /out:"..\mysql-test\mysql_test_run_new.exe" /incremental:no /libpath:"..\lib_release\" /pdb:".\Release\mysql_test_run_new.pdb" /pdbtype:sept /subsystem:console - -!ENDIF - -# Begin Target - -# Name "mysql_test_run_new - Win32 Debug" -# Name "mysql_test_run_new - Win32 Release" -# Begin Source File - -SOURCE=.\my_create_tables.c -# End Source File -# Begin Source File - -SOURCE=.\my_manage.c -# End Source File -# Begin Source File - -SOURCE=.\my_manage.h -# End Source File -# Begin Source File - -SOURCE=.\mysql_test_run_new.c -# End Source File -# End Target -# End Project - diff --git a/VC++Files/mysql-test/mysql_test_run_new.vcproj b/VC++Files/mysql-test/mysql_test_run_new.vcproj deleted file mode 100644 index 12d502e576856c9f6689e8868a827495a5b69e56..0000000000000000000000000000000000000000 --- a/VC++Files/mysql-test/mysql_test_run_new.vcproj +++ /dev/null @@ -1,204 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="7.10" - Name="mysql_test_run_new" - SccProjectName="" - SccLocalPath=""> - <Platforms> - <Platform - Name="Win32"/> - </Platforms> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory=".\Debug" - IntermediateDirectory=".\Debug" - ConfigurationType="1" - UseOfMFC="0" - ATLMinimizesCRunTimeLibraryUsage="FALSE"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../" - PreprocessorDefinitions="_DEBUG;_WINDOWS;SAFE_MUTEX;USE_TLS;MYSQL_CLIENT;__WIN__;_WIN32" - BasicRuntimeChecks="3" - RuntimeLibrary="1" - PrecompiledHeaderFile=".\Debug/mysql_test_run_new.pch" - AssemblerListingLocation=".\Debug/" - ObjectFile=".\Debug/" - ProgramDataBaseFileName=".\Debug/" - WarningLevel="3" - SuppressStartupBanner="TRUE" - DebugInformationFormat="1" - CompileAs="0"/> - <Tool - Name="VCCustomBuildTool"/> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib zlib.lib" - OutputFile="..\mysql-test\mysql_test_run_new.exe" - LinkIncremental="1" - SuppressStartupBanner="TRUE" - AdditionalLibraryDirectories="..\lib_debug\" - GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\Debug/mysql_test_run_new.pdb" - GenerateMapFile="TRUE" - MapFileName=".\Debug/mysql_test_run_new.map" - SubSystem="1"/> - <Tool - Name="VCMIDLTool" - SuppressStartupBanner="TRUE" - TargetEnvironment="1" - TypeLibraryName=".\Debug/mysql_test_run_new.tlb" - HeaderFileName=""/> - <Tool - Name="VCPostBuildEventTool"/> - <Tool - Name="VCPreBuildEventTool"/> - <Tool - Name="VCPreLinkEventTool"/> - <Tool - Name="VCResourceCompilerTool" - Culture="1033"/> - <Tool - Name="VCWebServiceProxyGeneratorTool"/> - <Tool - Name="VCXMLDataGeneratorTool"/> - <Tool - Name="VCWebDeploymentTool"/> - <Tool - Name="VCManagedWrapperGeneratorTool"/> - <Tool - Name="VCAuxiliaryManagedWrapperGeneratorTool"/> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory=".\Release" - IntermediateDirectory=".\Release" - ConfigurationType="1" - UseOfMFC="0" - ATLMinimizesCRunTimeLibraryUsage="FALSE"> - <Tool - Name="VCCLCompilerTool" - Optimization="4" - InlineFunctionExpansion="1" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../" - PreprocessorDefinitions="DBUG_OFF;_WINDOWS;SAFE_MUTEX;USE_TLS;MYSQL_CLIENT;__WIN__;_WIN32" - StringPooling="TRUE" - RuntimeLibrary="1" - EnableFunctionLevelLinking="TRUE" - PrecompiledHeaderFile=".\Release/mysql_test_run_new.pch" - AssemblerListingLocation=".\Release/" - ObjectFile=".\Release/" - ProgramDataBaseFileName=".\Release/" - WarningLevel="3" - SuppressStartupBanner="TRUE" - CompileAs="0"/> - <Tool - Name="VCCustomBuildTool"/> - <Tool - Name="VCLinkerTool" - AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib zlib.lib" - OutputFile="..\mysql-test\mysql_test_run_new.exe" - LinkIncremental="1" - SuppressStartupBanner="TRUE" - AdditionalLibraryDirectories="..\lib_release\" - ProgramDatabaseFile=".\Release/mysql_test_run_new.pdb" - SubSystem="1"/> - <Tool - Name="VCMIDLTool" - SuppressStartupBanner="TRUE" - TargetEnvironment="1" - TypeLibraryName=".\Release/mysql_test_run_new.tlb" - HeaderFileName=""/> - <Tool - Name="VCPostBuildEventTool"/> - <Tool - Name="VCPreBuildEventTool"/> - <Tool - Name="VCPreLinkEventTool"/> - <Tool - Name="VCResourceCompilerTool" - Culture="1033"/> - <Tool - Name="VCWebServiceProxyGeneratorTool"/> - <Tool - Name="VCXMLDataGeneratorTool"/> - <Tool - Name="VCWebDeploymentTool"/> - <Tool - Name="VCManagedWrapperGeneratorTool"/> - <Tool - Name="VCAuxiliaryManagedWrapperGeneratorTool"/> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath="my_create_tables.c"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="" - PreprocessorDefinitions="" - BasicRuntimeChecks="3"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - </File> - <File - RelativePath="my_manage.c"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="" - PreprocessorDefinitions="" - BasicRuntimeChecks="3"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - </File> - <File - RelativePath="my_manage.h"> - </File> - <File - RelativePath="mysql_test_run_new.c"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="" - PreprocessorDefinitions="" - BasicRuntimeChecks="3"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/VC++Files/mysql-test/mysql_test_run_new_ia64.dsp b/VC++Files/mysql-test/mysql_test_run_new_ia64.dsp deleted file mode 100644 index 023b38bd3c6074900cf7d6a2b39f5fc65ff64cc4..0000000000000000000000000000000000000000 --- a/VC++Files/mysql-test/mysql_test_run_new_ia64.dsp +++ /dev/null @@ -1,142 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mysql_test_run_new" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=mysql_test_run_new - WinIA64 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "mysql_test_run_new_ia64.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "mysql_test_run_new_ia64.mak" CFG="mysql_test_run_new - WinIA64 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "mysql_test_run_new - WinIA64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "mysql_test_run_new - WinIA64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "mysql_test_run_new - WinIA64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir ".\Debug" -# PROP BASE Intermediate_Dir ".\Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir ".\Debug" -# PROP Intermediate_Dir ".\Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /tlb".\Debug\mysql_test_run_new.tlb" /WinIA64 -# ADD MTL /nologo /tlb".\Debug\mysql_test_run_new.tlb" /WinIA64 -# ADD BASE CPP /nologo /G6 /MTd /W3 /GX /Z7 /Od /I "../include" /I "../" /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN64" /GZ /c -# ADD CPP /nologo /MTd /W3 /Zi /Od /I "../include" /I "../" /D "_DEBUG" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN64" /D "_IA64_" /D "WIN64" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /GZ /G2 /EHsc /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /subsystem:console /map /debug /out:"..\mysql-test\mysql_test_run_new.exe" /machine:IA64 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib bufferoverflowU.lib zlib.lib /nologo /subsystem:console /incremental:no /libpath:"..\lib_debug\" /map /debug /out:"..\mysql-test\mysql_test_run_new.exe" /machine:IA64 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "mysql_test_run_new - WinIA64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir ".\Release" -# PROP BASE Intermediate_Dir ".\Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir ".\Release" -# PROP Intermediate_Dir ".\Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /tlb".\Release\mysql_test_run_new.tlb" /WinIA64 -# ADD MTL /nologo /tlb".\Release\mysql_test_run_new.tlb" /WinIA64 -# ADD BASE CPP /nologo /G6 /MTd /W3 /GX /Ob1 /Gy /I "../include" /I "../" /D "DBUG_OFF" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN64" /GF /c -# ADD CPP /nologo /MTd /W3 /Zi /O2 /I "../include" /I "../" /D "DBUG_OFF" /D "_WINDOWS" /D "SAFE_MUTEX" /D "USE_TLS" /D "MYSQL_CLIENT" /D "__WIN__" /D "_WIN64" /D "_IA64_" /D "WIN64" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /GF /G2 /EHsc /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /subsystem:console /out:"..\mysql-test\mysql_test_run_new.exe" /machine:IA64 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 t kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib bufferoverflowU.lib zlib.lib /nologo /subsystem:console /libpath:"..\lib_release\" /out:"..\mysql-test\mysql_test_run_new.exe" /machine:IA64 -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "mysql_test_run_new - WinIA64 Debug" -# Name "mysql_test_run_new - WinIA64 Release" -# Begin Source File - -SOURCE=.\my_create_tables.c -DEP_CPP_MY_CR=\ - "..\include\config-netware.h"\ - "..\include\config-os2.h"\ - "..\include\config-win.h"\ - "..\include\m_string.h"\ - "..\include\my_config.h"\ - "..\include\my_dbug.h"\ - "..\include\my_global.h"\ - ".\my_manage.h"\ - -# End Source File -# Begin Source File - -SOURCE=.\my_manage.c -DEP_CPP_MY_MA=\ - "..\include\config-netware.h"\ - "..\include\config-os2.h"\ - "..\include\config-win.h"\ - "..\include\m_string.h"\ - "..\include\my_config.h"\ - "..\include\my_dbug.h"\ - "..\include\my_global.h"\ - ".\my_manage.h"\ - -# End Source File -# Begin Source File - -SOURCE=.\my_manage.h -# End Source File -# Begin Source File - -SOURCE=.\mysql_test_run_new.c -DEP_CPP_MYSQL=\ - "..\include\config-netware.h"\ - "..\include\config-os2.h"\ - "..\include\config-win.h"\ - "..\include\m_string.h"\ - "..\include\my_config.h"\ - "..\include\my_dbug.h"\ - "..\include\my_global.h"\ - ".\my_manage.h"\ - -# End Source File -# End Target -# End Project diff --git a/VC++Files/mysql.dsw b/VC++Files/mysql.dsw index 36e3e1ae10c1d8ed390f1a082fed460d46e6559e..dd70ad630a18269d2a8f49e0a66113256c3c2526 100644 --- a/VC++Files/mysql.dsw +++ b/VC++Files/mysql.dsw @@ -339,6 +339,27 @@ Package=<4> ############################################################################### +Project: "mysql_upgrade"=".\client\mysql_upgrade.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name mysqlclient + End Project Dependency + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysys + End Project Dependency +}}} + +############################################################################### + Project: "mysqlbinlog"=".\mysqlbinlog\mysqlbinlog.dsp" - Package Owner=<4> Package=<5> @@ -415,6 +436,8 @@ Package=<4> End Project Dependency Begin Project Dependency Project_Dep_Name mysqladmin + Begin Project Dependency + Project_Dep_Name myqsl_upgrade End Project Dependency Begin Project Dependency Project_Dep_Name mysqldump @@ -787,27 +810,6 @@ Project: "mysql_client_test"=.\tests\mysql_client_test.dsp - Package Owner=<4> {{{ }}} - ############################################################################### - - -Project: "mysql_test_run_new"=".\mysql-test\mysql_test_run_new.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ Begin Project Dependency - Project_Dep_Name mysqltest - End Project Dependency - Begin Project Dependency - Project_Dep_Name mysqladmin - End Project Dependency - Begin Project Dependency - Project_Dep_Name mysql_client_test - End Project Dependency -}}} - ############################################################################### diff --git a/VC++Files/mysql.sln b/VC++Files/mysql.sln index f4204b00bc4750a3f88f87b94d58faadf057bb48..344aaa385073aa2135e6799ddc99376353a40e55 100644 --- a/VC++Files/mysql.sln +++ b/VC++Files/mysql.sln @@ -251,13 +251,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mysql_client_test", "tests\ {26383276-4843-494B-8BE0-8936ED3EBAAB} = {26383276-4843-494B-8BE0-8936ED3EBAAB} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mysql_test_run_new", "mysql-test\mysql_test_run_new.vcproj", "{6189F838-21C6-42A1-B2D0-9146316573F7}" - ProjectSection(ProjectDependencies) = postProject - {8961F149-C68A-4154-A499-A2AB39E607E8} = {8961F149-C68A-4154-A499-A2AB39E607E8} - {DA224DAB-5006-42BE-BB77-16E8BE5326D5} = {DA224DAB-5006-42BE-BB77-16E8BE5326D5} - {D2B00DE0-F6E9-40AF-B90D-A257D014F098} = {D2B00DE0-F6E9-40AF-B90D-A257D014F098} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mysqlmanager", "server-tools\instance-manager\mysqlmanager.vcproj", "{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}" ProjectSection(ProjectDependencies) = postProject {EEC1300B-85A5-497C-B3E1-F708021DF859} = {EEC1300B-85A5-497C-B3E1-F708021DF859} diff --git a/VC++Files/mysql_ia64.dsw b/VC++Files/mysql_ia64.dsw index 1e441107c933a611ee7dc8f2c4bb10465c5b2381..96878cd3651237c0f6d638c373cec4c5a18ba2d4 100644 --- a/VC++Files/mysql_ia64.dsw +++ b/VC++Files/mysql_ia64.dsw @@ -436,6 +436,24 @@ Package=<4> ############################################################################### +Project: "mysql_upgrade"=".\client\mysql_upgrade_ia64.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name mysqlclient + End Project Dependency + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency +}}} + +############################################################################### + Project: "mysqlbinlog"=".\mysqlbinlog\mysqlbinlog_ia64.dsp" - Package Owner=<4> Package=<5> @@ -500,6 +518,8 @@ Package=<4> End Project Dependency Begin Project Dependency Project_Dep_Name mysqladmin_ia64 + Begin Project Dependency + Project_Dep_Name mysql_upgrade_ia64 End Project Dependency Begin Project Dependency Project_Dep_Name mysqldump diff --git a/VC++Files/sql/mysqld.vcproj b/VC++Files/sql/mysqld.vcproj index 641e1f8e8f4c2a9132051e8159d8c2055d017149..444eb7a18e06eddefd727289f3131c883cde8532 100644 --- a/VC++Files/sql/mysqld.vcproj +++ b/VC++Files/sql/mysqld.vcproj @@ -23,7 +23,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include" + AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include,." PreprocessorDefinitions="__NT__;DBUG_OFF;NDEBUG;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;LICENSE=Commercial;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -84,7 +84,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib" + AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib,." PreprocessorDefinitions="NDEBUG;DBUG_OFF;HAVE_INNOBASE_DB;HAVE_BERKELEY_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;WITH_BERKELEY_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;WITH_BLACKHOLE_STORAGE_ENGINE;WITH_EXAMPLE_STORAGE_ENGINE;WITH_FEDERATED_STORAGE_ENGINE;WITH_PARTITION_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -144,7 +144,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib" + AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib,." PreprocessorDefinitions="__NT__;NDEBUG;DBUG_OFF;HAVE_INNOBASE_DB;HAVE_BERKELEY_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;WITH_BERKELEY_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;WITH_BLACKHOLE_STORAGE_ENGINE;WITH_EXAMPLE_STORAGE_ENGINE;WITH_FEDERATED_STORAGE_ENGINE;WITH_PARTITION_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -207,7 +207,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include" + AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include,." PreprocessorDefinitions="__NT__;NDEBUG;DBUG_OFF;HAVE_INNOBASE_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;WITH_BLACKHOLE_STORAGE_ENGINE;WITH_EXAMPLE_STORAGE_ENGINE;WITH_FEDERATED_STORAGE_ENGINE;WITH_PARTITION_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -270,7 +270,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include" + AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include,." PreprocessorDefinitions="__NT__;DBUG_OFF;NDEBUG;HAVE_INNOBASE_DB;HAVE_ARCHIVE_DB;MYSQL_SERVER;LICENSE=Commercial;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -330,7 +330,7 @@ Name="VCCLCompilerTool" Optimization="0" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib" + AdditionalIncludeDirectories="../storage/bdb/build_win32,../include,../regex,../extra/yassl/include,../zlib,." PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;HAVE_INNOBASE_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;WITH_BLACKHOLE_STORAGE_ENGINE;WITH_EXAMPLE_STORAGE_ENGINE;WITH_FEDERATED_STORAGE_ENGINE;WITH_PARTITION_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" RuntimeLibrary="1" PrecompiledHeaderFile=".\debug/mysqld.pch" @@ -391,7 +391,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include" + AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include,." PreprocessorDefinitions="MYSQL_SERVER;LICENSE=Commercial;HAVE_DLOPEN;HAVE_INNOBASE_DB;HAVE_ARCHIVE_DB;DBUG_OFF;NDEBUG;_WINDOWS;_CONSOLE;WITH_INNOBASE_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -452,7 +452,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include" + AdditionalIncludeDirectories="../include,../regex,../zlib,../extra/yassl/include,." PreprocessorDefinitions="LICENSE=Commercial;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;DBUG_OFF;NDEBUG;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" @@ -513,7 +513,7 @@ Optimization="2" InlineFunctionExpansion="1" OptimizeForProcessor="2" - AdditionalIncludeDirectories="../zlib,../include,../regex,../extra/yassl/include" + AdditionalIncludeDirectories="../zlib,../include,../regex,../extra/yassl/include,." PreprocessorDefinitions="NDEBUG;DBUG_OFF;HAVE_INNOBASE_DB;HAVE_ARCHIVE_DB;HAVE_BLACKHOLE_DB;HAVE_EXAMPLE_DB;HAVE_FEDERATED_DB;MYSQL_SERVER;_WINDOWS;_CONSOLE;HAVE_DLOPEN;WITH_INNOBASE_STORAGE_ENGINE;WITH_ARCHIVE_STORAGE_ENGINE;WITH_BLACKHOLE_STORAGE_ENGINE;WITH_EXAMPLE_STORAGE_ENGINE;WITH_FEDERATED_STORAGE_ENGINE;WITH_PARTITION_STORAGE_ENGINE;HAVE_ROW_BASED_REPLICATION" StringPooling="TRUE" RuntimeLibrary="0" diff --git a/client/Makefile.am b/client/Makefile.am index 970ca744146b92b5e08f25b620a520c79a314cdf..0531d741764e54d02b1e2e1036e2876884490a71 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -38,8 +38,7 @@ LDADD= @CLIENT_EXTRA_LDFLAGS@ $(CLIENT_THREAD_LIBS) \ $(top_builddir)/libmysql/libmysqlclient.la bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \ mysqldump mysqlimport mysqltest mysqlbinlog \ - mysqltestmanagerc mysqltestmanager-pwgen \ - mysqlslap + mysqlslap mysql_upgrade noinst_HEADERS = sql_string.h completion_hash.h my_readline.h \ client_priv.h mysql_SOURCES = mysql.cc readline.cc sql_string.cc completion_hash.cc @@ -63,8 +62,6 @@ mysqlimport_LDADD = $(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \ @CLIENT_EXTRA_LDFLAGS@ \ $(LIBMYSQLCLIENT_LA) \ $(top_builddir)/mysys/libmysys.a -mysqltestmanager_pwgen_SOURCES = mysqlmanager-pwgen.c -mysqltestmanagerc_SOURCES= mysqlmanagerc.c $(yassl_dummy_link_fix) mysqlcheck_SOURCES= mysqlcheck.c $(yassl_dummy_link_fix) mysqlshow_SOURCES= mysqlshow.c $(yassl_dummy_link_fix) mysqlslap_SOURCES= mysqlslap.c \ @@ -72,11 +69,14 @@ mysqlslap_SOURCES= mysqlslap.c \ mysqldump_SOURCES= mysqldump.c my_user.c $(yassl_dummy_link_fix) mysqlimport_SOURCES= mysqlimport.c \ $(yassl_dummy_link_fix) +mysql_upgrade_SOURCES= mysql_upgrade.c $(yassl_dummy_link_fix) sql_src=log_event.h mysql_priv.h log_event.cc my_decimal.h my_decimal.cc strings_src=decimal.c # Fix for mit-threads -DEFS = -DUNDEF_THREADS_HACK +DEFS = -DUNDEF_THREADS_HACK \ + -DDEFAULT_MYSQL_HOME="\"$(prefix)\"" \ + -DDATADIR="\"$(localstatedir)\"" EXTRA_DIST = get_password.c cmakelists.txt link_sources: diff --git a/client/client_priv.h b/client/client_priv.h index a80701ba6c93542cdb0eb12caa390f8ee7a4e926..625fbf24fa6f6f2e8f2cc1b11923042088a43ff4 100644 --- a/client/client_priv.h +++ b/client/client_priv.h @@ -24,8 +24,6 @@ #include <errmsg.h> #include <my_getopt.h> -/* We have to define 'enum options' identical in all files to keep OS2 happy */ - enum options_client { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET, diff --git a/client/mysql.cc b/client/mysql.cc index 2001056dea1fa10906d14a063fe9eeffbbe9faf9..900bdec067a177940a049ad8dee639594ef6d4b2 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -81,7 +81,7 @@ extern "C" { #endif #undef bcmp // Fix problem with new readline -#if defined( __WIN__) || defined(OS2) +#if defined( __WIN__) #include <conio.h> #elif !defined(__NETWARE__) #include <readline/readline.h> @@ -101,7 +101,7 @@ extern "C" { #define cmp_database(cs,A,B) strcmp((A),(B)) #endif -#if !defined( __WIN__) && !defined( OS2) && !defined(__NETWARE__) && (!defined(HAVE_mit_thread) || !defined(THREAD)) +#if !defined( __WIN__) && !defined(__NETWARE__) && !defined(THREAD) #define USE_POPEN #endif @@ -185,7 +185,7 @@ void tee_fprintf(FILE *file, const char *fmt, ...); void tee_fputs(const char *s, FILE *file); void tee_puts(const char *s, FILE *file); void tee_putc(int c, FILE *file); -static void tee_print_sized_data(const char *data, unsigned int length, unsigned int width); +static void tee_print_sized_data(const char *, unsigned int, unsigned int, bool); /* The names of functions that actually do the manipulation. */ static int get_options(int argc,char **argv); static int com_quit(String *str,char*), @@ -653,7 +653,7 @@ static struct my_option my_long_options[] = "Base name of shared memory.", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #endif - {"socket", 'S', "Socket file to use for connection. (This will override --port unless --protocol=TCP is specified.)", + {"socket", 'S', "Socket file to use for connection.", (gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" @@ -939,14 +939,7 @@ static int get_options(int argc, char **argv) opt_reconnect= 0; connect_flag= 0; /* Not in interactive mode */ } - - if (opt_mysql_port && (!opt_protocol) && (!opt_mysql_unix_port)) - { - /* Not checking return type since we are using a constant value */ - /* straight from the initialization of sql_protocol_typelib. */ - opt_protocol= find_type("TCP", &sql_protocol_typelib, 0); - } - + if (strcmp(default_charset, charset_info->csname) && !(charset_info= get_charset_by_csname(default_charset, MY_CS_PRIMARY, MYF(MY_WME)))) @@ -969,7 +962,7 @@ static int get_options(int argc, char **argv) static int read_and_execute(bool interactive) { -#if defined(OS2) || defined(__NETWARE__) +#if defined(__NETWARE__) char linebuffer[254]; String buffer; #endif @@ -1006,7 +999,7 @@ static int read_and_execute(bool interactive) if (opt_outfile && glob_buffer.is_empty()) fflush(OUTFILE); -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) tee_fputs(prompt, stdout); #if defined(__NETWARE__) line=fgets(linebuffer, sizeof(linebuffer)-1, stdin); @@ -1017,7 +1010,7 @@ static int read_and_execute(bool interactive) if (p != NULL) *p = '\0'; } -#elif defined(__WIN__) +#else defined(__WIN__) if (!tmpbuf.is_alloced()) tmpbuf.alloc(65535); tmpbuf.length(0); @@ -1033,32 +1026,12 @@ static int read_and_execute(bool interactive) */ } while (tmpbuf.alloced_length() <= clen); line= buffer.c_ptr(); -#else /* OS2 */ - buffer.length(0); - /* _cgets() expects the buffer size - 3 as the first byte */ - linebuffer[0]= (char) sizeof(linebuffer) - 3; - do - { - line= _cgets(linebuffer); - buffer.append(line, (unsigned char)linebuffer[1]); - /* - If _cgets() gets an input line that is linebuffer[0] bytes - long, the next call to _cgets() will return immediately with - linebuffer[1] == 0, and it does the same thing for input that - is linebuffer[0]-1 bytes long. So it appears that even though - _cgets() replaces the newline (which is two bytes on Window) with - a nil, it still needs the space in the linebuffer for it. This is, - naturally, undocumented. - */ - } while ((unsigned char)linebuffer[0] <= - (unsigned char)linebuffer[1] + 1); - line= buffer.c_ptr(); #endif /* __NETWARE__ */ #else if (opt_outfile) fputs(prompt, OUTFILE); line= readline(prompt); -#endif /* defined( __WIN__) || defined(OS2) || defined(__NETWARE__) */ +#endif /* defined( __WIN__) || defined(__NETWARE__) */ /* When Ctrl+d or Ctrl+z is pressed, the line may be NULL on some OS @@ -1110,7 +1083,7 @@ static int read_and_execute(bool interactive) } } -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) buffer.free(); #endif #if defined( __WIN__) @@ -2311,35 +2284,52 @@ print_table_data(MYSQL_RES *result) while ((cur= mysql_fetch_row(result))) { ulong *lengths= mysql_fetch_lengths(result); - (void) tee_fputs("|", PAGER); + (void) tee_fputs("| ", PAGER); mysql_field_seek(result, 0); for (uint off= 0; off < mysql_num_fields(result); off++) { - const char *str= cur[off] ? cur[off] : "NULL"; - uint currlength; - uint maxlength; - uint numcells; - - field= mysql_fetch_field(result); - maxlength= field->max_length; - currlength= (uint) lengths[off]; - numcells= charset_info->cset->numcells(charset_info, - str, str + currlength); - if (maxlength > MAX_COLUMN_LENGTH) + const char *buffer; + uint data_length; + uint field_max_length; + bool right_justified; + uint visible_length; + uint extra_padding; + + if (lengths[off] == 0) + { + buffer= "NULL"; + data_length= 4; + } + else { - tee_print_sized_data(str, currlength, maxlength); - tee_fputs(" |", PAGER); + buffer= cur[off]; + data_length= (uint) lengths[off]; } + + field= mysql_fetch_field(result); + field_max_length= field->max_length; + + /* + How many text cells on the screen will this string span? If it contains + multibyte characters, then the number of characters we occupy on screen + will be fewer than the number of bytes we occupy in memory. + + We need to find how much screen real-estate we will occupy to know how + many extra padding-characters we should send with the printing function. + */ + visible_length= charset_info->cset->numcells(charset_info, buffer, buffer + data_length); + extra_padding= data_length - visible_length; + + if (field_max_length > MAX_COLUMN_LENGTH) + tee_print_sized_data(buffer, data_length, MAX_COLUMN_LENGTH+extra_padding, FALSE); else { - if (num_flag[off] != 0) - tee_fprintf(PAGER, " %-*s|", maxlength + currlength - numcells, str); + if (num_flag[off] != 0) /* if it is numeric, we right-justify it */ + tee_print_sized_data(buffer, data_length, field_max_length+extra_padding, TRUE); else - { - tee_print_sized_data(str, currlength, maxlength); - tee_fputs(" |", PAGER); - } + tee_print_sized_data(buffer, data_length, field_max_length+extra_padding, FALSE); } + tee_fputs(" | ", PAGER); } (void) tee_fputs("\n", PAGER); } @@ -2349,10 +2339,9 @@ print_table_data(MYSQL_RES *result) static void -tee_print_sized_data(const char *data, unsigned int length, unsigned int width) +tee_print_sized_data(const char *data, unsigned int data_length, unsigned int total_bytes_to_send, bool right_justified) { /* - It is not a number, so print each character justified to the left. For '\0's print ASCII spaces instead, as '\0' is eaten by (at least my) console driver, and that messes up the pretty table grid. (The \0 is also the reason we can't use fprintf() .) @@ -2360,9 +2349,14 @@ tee_print_sized_data(const char *data, unsigned int length, unsigned int width) unsigned int i; const char *p; - tee_putc(' ', PAGER); + total_bytes_to_send -= 1; + /* Off by one, perhaps mistakenly accounting for a terminating NUL. */ + + if (right_justified) + for (i= 0; i < (total_bytes_to_send - data_length); i++) + tee_putc((int)' ', PAGER); - for (i= 0, p= data; i < length; i+= 1, p+= 1) + for (i= 0, p= data; i < data_length; i+= 1, p+= 1) { if (*p == '\0') tee_putc((int)' ', PAGER); @@ -2370,9 +2364,9 @@ tee_print_sized_data(const char *data, unsigned int length, unsigned int width) tee_putc((int)*p, PAGER); } - i+= 1; - for ( ; i < width; i+= 1) - tee_putc((int)' ', PAGER); + if (! right_justified) + for (i= 0; i < (total_bytes_to_send - data_length); i++) + tee_putc((int)' ', PAGER); } @@ -3212,10 +3206,9 @@ com_status(String *buffer __attribute__((unused)), mysql_free_result(result); } #ifdef HAVE_OPENSSL - if (mysql.net.vio && mysql.net.vio->ssl_arg && - SSL_get_cipher((SSL*) mysql.net.vio->ssl_arg)) + if ((status= mysql_get_ssl_cipher(&mysql))) tee_fprintf(stdout, "SSL:\t\t\tCipher in use is %s\n", - SSL_get_cipher((SSL*) mysql.net.vio->ssl_arg)); + status); else #endif /* HAVE_OPENSSL */ tee_puts("SSL:\t\t\tNot in use", stdout); @@ -3361,7 +3354,7 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate) if (info_type == INFO_ERROR) { if (!opt_nobeep) - putchar('\007'); /* This should make a bell */ + putchar('\a'); /* This should make a bell */ vidattr(A_STANDOUT); if (error) { @@ -3409,9 +3402,6 @@ void tee_fprintf(FILE *file, const char *fmt, ...) NETWARE_YIELD; va_start(args, fmt); (void) vfprintf(file, fmt, args); -#ifdef OS2 - fflush( file); -#endif va_end(args); if (opt_outfile) @@ -3427,9 +3417,6 @@ void tee_fputs(const char *s, FILE *file) { NETWARE_YIELD; fputs(s, file); -#ifdef OS2 - fflush( file); -#endif if (opt_outfile) fputs(s, OUTFILE); } @@ -3440,9 +3427,6 @@ void tee_puts(const char *s, FILE *file) NETWARE_YIELD; fputs(s, file); fputs("\n", file); -#ifdef OS2 - fflush( file); -#endif if (opt_outfile) { fputs(s, OUTFILE); @@ -3453,14 +3437,11 @@ void tee_puts(const char *s, FILE *file) void tee_putc(int c, FILE *file) { putc(c, file); -#ifdef OS2 - fflush( file); -#endif if (opt_outfile) putc(c, OUTFILE); } -#if defined( __WIN__) || defined( OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) #include <time.h> #else #include <sys/times.h> @@ -3472,7 +3453,7 @@ void tee_putc(int c, FILE *file) static ulong start_timer(void) { -#if defined( __WIN__) || defined( OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) return clock(); #else struct tms tms_tmp; diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c new file mode 100644 index 0000000000000000000000000000000000000000..78e4acd4c1de2319448593f0fa535653d2ccd2d0 --- /dev/null +++ b/client/mysql_upgrade.c @@ -0,0 +1,400 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include "client_priv.h" +#include <my_dir.h> + +static my_bool opt_force= 0, opt_verbose= 0, tty_password= 0; +static char *user= (char*) "root", *basedir= 0, *datadir= 0, *opt_password= 0; +static my_bool upgrade_defaults_created= 0; +static my_string opt_mysql_port, opt_mysql_unix_port= 0; +static char *default_dbug_option= (char*) "d:t:O,/tmp/comp_err.trace"; +static my_bool info_flag= 0; + +static struct my_option my_long_options[]= +{ + {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, + NO_ARG, 0, 0, 0, 0, 0, 0}, + {"basedir", 'b', "Specifies the directory where MySQL is installed", + (gptr*) &basedir, + (gptr*) &basedir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"datadir", 'd', "Specifies the data directory", (gptr*) &datadir, + (gptr*) &datadir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, +#ifdef DBUG_OFF + {"debug", '#', "This is a non-debug version. Catch this and exit", + 0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#else + {"debug", '#', "Output debug log", (gptr *) & default_dbug_option, + (gptr *) & default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#endif + {"debug-info", 'T', "Print some debug info at exit.", (gptr *) & info_flag, + (gptr *) & info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"force", 'f', "Continue even if we get an sql-error.", + (gptr*) &opt_force, (gptr*) &opt_force, 0, GET_BOOL, NO_ARG, 0, 0, + 0, 0, 0, 0}, + {"password", 'p', + "Password to use when connecting to server. If password is not given it's solicited on the tty.", + 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, + {"port", 'P', "Port number to use for connection.", (gptr*) &opt_mysql_port, + (gptr*) &opt_mysql_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, + 0}, + {"protocol", OPT_MYSQL_PROTOCOL, + "The protocol of connection (tcp,socket,pipe,memory).", + 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"socket", 'S', "Socket file to use for connection.", + (gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR, + REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"user", 'u', "User for login if not current user.", (gptr*) &user, + (gptr*) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"verbose", 'v', "Display more output about the process", (gptr*) &opt_verbose, + (gptr *) &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} +}; +static const char *load_default_groups[]= +{ + "mysql_upgrade", "client", 0 +}; + +#include <help_end.h> + +static my_bool +get_one_option(int optid, const struct my_option *opt __attribute__ ((unused)), + char *argument) +{ + switch (optid) { + case '?': + puts + ("MySQL utility script to upgrade database to the current server version"); + puts(""); + my_print_help(my_long_options); + exit(0); + case '#': + DBUG_PUSH(argument ? argument : default_dbug_option); + break; + case 'f': + opt_force= TRUE; + break; + case 'p': + tty_password= 1; + if (argument) + { + char *start= argument; + my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR)); + opt_password= my_strdup(argument, MYF(MY_FAE)); + while (*argument) + *argument++= 'x'; /* Destroy argument */ + if (*start) + start[1]= 0; /* Cut length of argument */ + tty_password= 0; + } + break; + default:; + }; + return 0; +} + + +/* buffer should be not smaller than FN_REFLEN */ +static my_bool test_file_exists_res(const char *dir, const char *fname, + char *buffer, char **buf_end) +{ + MY_STAT stat_info; + + *buf_end= strxnmov(buffer, FN_REFLEN-1, dir, "/", fname, NullS); + unpack_filename(buffer, buffer); + return my_stat(buffer, &stat_info, MYF(0)) != 0; +} + + +static my_bool test_file_exists(const char *dir, const char *fname) +{ + char path[FN_REFLEN]; + char *path_end; + return test_file_exists_res(dir, fname, path, &path_end); +} + + +static int create_check_file(const char *path) +{ + File check_file= my_open(path, O_CREAT | O_WRONLY, MYF(MY_FAE | MY_WME)); + int error; + + if (check_file < 0) + return 1; + + error= my_write(check_file, VERSION, strlen(VERSION), MYF(MY_WME | MY_FNABP)); + error= my_close(check_file, MYF(MY_FAE | MY_WME)) || error; + return error; +} + + +static int create_defaults_file(const char *path, const char *our_defaults_path) +{ + uint b_read; + File our_defaults_file, defaults_file; + char buffer[512]; + char *buffer_end; + int error; + + /* check if the defaults file is needed at all */ + if (!opt_password) + return 0; + + defaults_file= my_open(path, O_BINARY | O_CREAT | O_WRONLY, + MYF(MY_FAE | MY_WME)); + + if (defaults_file < 0) + return 1; + upgrade_defaults_created= 1; + if (our_defaults_path) + { + our_defaults_file= my_open(our_defaults_path, O_RDONLY, + MYF(MY_FAE | MY_WME)); + if (our_defaults_file < 0) + return 1; + do + { + if (((b_read= my_read(our_defaults_file, buffer, + sizeof(buffer), MYF(MY_WME))) == MY_FILE_ERROR) || + my_write(defaults_file, buffer, b_read, MYF(MY_FNABP | MY_WME))) + { + error= 1; + goto close_return; + } + } while (b_read == sizeof(buffer)); + } + buffer_end= strnmov(buffer, "\n[client]", sizeof(buffer)); + if (opt_password) + buffer_end= strxnmov(buffer, sizeof(buffer), + "\npassword=", opt_password, NullS); + error= my_write(defaults_file, buffer, (int) (buffer_end - buffer), + MYF(MY_WME | MY_FNABP)); +close_return: + return my_close(defaults_file, MYF(MY_WME)) || error; +} + + +int main(int argc, char **argv) +{ + char bindir[FN_REFLEN]; + char *bindir_end, *buf_end; + char datadir_buf[FN_REFLEN]; + char mysqlcheck_line[FN_REFLEN], *mysqlcheck_end; + char check_file_name[FN_REFLEN]; + int check_file; + char fix_priv_tables_cmd[FN_REFLEN], *fix_cmd_end; + char script_line[FN_REFLEN]; + int error; + char *forced_defaults_file; + char *forced_extra_defaults; + char *defaults_group_suffix; + char upgrade_defaults_path[FN_REFLEN], *defaults_to_use= 0; + char port_socket[100], *port_socket_end; + + MY_INIT(argv[0]); +#ifdef __NETWARE__ + setscreenmode(SCR_AUTOCLOSE_ON_EXIT); +#endif + + load_defaults("my", load_default_groups, &argc, &argv); + + if ((error= handle_options(&argc, &argv, my_long_options, get_one_option))) + exit(error); + + if (tty_password) + opt_password= get_tty_password(NullS); + + /* Check if we want to force the use a specific default file */ + get_defaults_options(argc, argv, + &forced_defaults_file, &forced_extra_defaults, + &defaults_group_suffix); + + port_socket_end= port_socket; + if (opt_mysql_port) + port_socket_end= strxnmov(port_socket, sizeof(port_socket) - 1, " --port=", + opt_mysql_port, NullS); + if (opt_mysql_unix_port) + port_socket_end= strxnmov(port_socket_end, + sizeof(port_socket) - + (int)(port_socket_end - port_socket) - 1, + " --socket=", opt_mysql_unix_port, NullS); + *port_socket_end= 0; + + if (basedir) + { + bindir_end= strmake(bindir, basedir, sizeof(bindir)-1); + } + else + { + if (test_file_exists("./share/mysql/english", "errmsg.sys") + && (test_file_exists("./bin", "mysqld") || + test_file_exists("./libexec", "mysqld"))) + { + getcwd(bindir, sizeof(bindir)); + bindir_end= bindir + strlen(bindir); + } + else + { + bindir_end= strmake(bindir, DEFAULT_MYSQL_HOME, sizeof(bindir)-1); + } + } + + if (!datadir) + { + datadir= datadir_buf; + if (test_file_exists(bindir, "data/mysql")) + { + *strxnmov(datadir_buf, sizeof(datadir_buf)-1, bindir, "/data", NullS)= 0; + } + else if (test_file_exists(bindir, "var/mysql")) + { + *strxnmov(datadir_buf, sizeof(datadir_buf)-1, bindir, "/var", NullS)= 0; + } + else + datadir= (char*) DATADIR; + } + + strmake(bindir_end, "/bin", sizeof(bindir) - (int) (bindir_end - bindir)-1); + + if (!test_file_exists_res + (bindir, "mysqlcheck", mysqlcheck_line, &mysqlcheck_end)) + { + printf("Can't find program '%s'\n", mysqlcheck_line); + puts("Please restart with --basedir=mysql-install-directory"); + exit(1); + } + + if (!test_file_exists(datadir, "mysql/user.frm")) + { + puts + ("Can't find data directory. Please restart with --datadir=path-to-data-dir"); + exit(1); + } + + /* create the modified defaults file to be used by mysqlcheck */ + /* and mysql tools */ + *strxnmov(upgrade_defaults_path, sizeof(upgrade_defaults_path)-1, + datadir, "/upgrade_defaults", NullS)= 0; + unpack_filename(upgrade_defaults_path, upgrade_defaults_path); + if ((error= + create_defaults_file(upgrade_defaults_path, forced_extra_defaults))) + goto err_exit; + + defaults_to_use= upgrade_defaults_created ? + upgrade_defaults_path : forced_extra_defaults; + + if (test_file_exists_res(datadir, "mysql_upgrade_info", check_file_name, + &buf_end) && !opt_force) + { + char chf_buffer[50]; + int b_read; + check_file= my_open(check_file_name, O_RDONLY, MYF(0)); + b_read= my_read(check_file, chf_buffer, sizeof(chf_buffer)-1, MYF(0)); + chf_buffer[b_read]= 0; + my_close(check_file, MYF(0)); + if (!strcmp(chf_buffer, VERSION)) + { + if (opt_verbose) + puts("mysql_upgrade already done for this version"); + goto fix_priv_tables; + } + } + + if (defaults_to_use) + { + mysqlcheck_end= strxnmov(mysqlcheck_end, + sizeof(mysqlcheck_line) - (int) (mysqlcheck_end - + mysqlcheck_line), + " --defaults-extra-file=", defaults_to_use,NullS); + } + + mysqlcheck_end= strxnmov(mysqlcheck_end, + sizeof(mysqlcheck_line) - + (int) (mysqlcheck_end - mysqlcheck_line - 1), + " --check-upgrade --all-databases --auto-repair --user=", + user, port_socket, NullS); + *mysqlcheck_end= 0; + + if (opt_verbose) + printf("Running %s\n", mysqlcheck_line); + if ((error= system(mysqlcheck_line))) + { + printf("Error executing '%s'\n", mysqlcheck_line); + goto err_exit; + } + + if ((error= create_check_file(check_file_name))) + goto err_exit; + +fix_priv_tables: + if (!test_file_exists_res(bindir, "mysql", fix_priv_tables_cmd, &fix_cmd_end)) + { + puts("Could not find MySQL command-line client (mysql)."); + puts + ("Please use --basedir to specify the directory where MySQL is installed."); + error= 1; + goto err_exit; + } + + if (!test_file_exists_res(basedir, + "support_files/mysql_fix_privilege_tables.sql", + script_line, &buf_end) + && !test_file_exists_res(basedir, "share/mysql_fix_privilege_tables.sql", + script_line, &buf_end) + && !test_file_exists_res(basedir, + "share/mysql/mysql_fix_privilege_tables.sql", + script_line, &buf_end) + && !test_file_exists_res(basedir, + "scripts/mysql_fix_privilege_tables.sql", + script_line, &buf_end) + && !test_file_exists_res("/usr/local/mysql/share/mysql", + "mysql_fix_privilege_tables.sql", script_line, + &buf_end)) + { + puts("Could not find file mysql_fix_privilege_tables.sql"); + puts + ("Please use --basedir to specify the directory where MySQL is installed"); + error= 1; + goto err_exit; + } + + if (defaults_to_use) + { + fix_cmd_end= strxnmov(fix_cmd_end, + sizeof(fix_priv_tables_cmd) - + (int) (fix_cmd_end - fix_priv_tables_cmd - 1), + " --defaults-extra-file=", defaults_to_use, NullS); + } + fix_cmd_end= strxnmov(fix_cmd_end, + sizeof(fix_priv_tables_cmd) - (int) (fix_cmd_end - + fix_priv_tables_cmd), + " --user=", user, port_socket, " mysql < ", script_line, NullS); + *fix_cmd_end= 0; + + if ((error= system(fix_priv_tables_cmd))) + { + /* Problem is that the 'Duplicate column' error */ + /* which is not a bug for the script makes 'mysql' return */ + /* an error */ + /* printf("Error executing '%s'\n", fix_priv_tables_cmd); */ + } + +err_exit: + if (upgrade_defaults_created) + my_delete(upgrade_defaults_path, MYF(0)); + my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : 0); + return error; +} /* main */ diff --git a/client/mysqlmanager-pwgen.c b/client/mysqlmanager-pwgen.c deleted file mode 100644 index 1d942e207adbddd684855a650560a053b57d19ee..0000000000000000000000000000000000000000 --- a/client/mysqlmanager-pwgen.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#define MANAGER_PWGEN_VERSION "1.4" - -#include <my_global.h> -#include <m_ctype.h> -#include <my_sys.h> -#include <m_string.h> -#include <mysql_version.h> -#include <errno.h> -#include <my_getopt.h> -#include <md5.h> - -const char* outfile=0,*user="root"; - -static struct my_option my_long_options[] = -{ - {"output-file", 'o', "Write the output to the file with the given name.", - (gptr*) &outfile, (gptr*) &outfile, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, - 0, 0}, - {"user", 'u', "Put given user in the password file.", (gptr*) &user, - (gptr*) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"help", '?', "Display this message and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, - 0, 0, 0, 0, 0, 0}, - {"version", 'V', "Display version info.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, - 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} -}; - -static void die(const char* fmt, ...) -{ - va_list args; - DBUG_ENTER("die"); - va_start(args, fmt); - if (fmt) - { - fprintf(stderr, "%s: ", my_progname); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - fflush(stderr); - } - va_end(args); - exit(1); -} - -static void print_version(void) -{ - printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname, - MANAGER_PWGEN_VERSION, - MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE); -} - -void usage() -{ - print_version(); - printf("MySQL AB, by Sasha\n"); - printf("This software comes with ABSOLUTELY NO WARRANTY\n\n"); - printf("Generates a password file to be used by mysqltest.\n\n"); - printf("Usage: %s [OPTIONS]\n", my_progname); - my_print_help(my_long_options); - my_print_variables(my_long_options); -} - -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) -{ - switch (optid) { - case '?': - usage(); - exit(0); - case 'V': - print_version(); - exit(0); - } - return 0; -} - - -int parse_args(int argc, char** argv) -{ - int ho_error; - - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) - exit(ho_error); - - return 0; -} - -void get_pass(char* pw, int len) -{ - FILE* fp; - char* pw_end=pw+len; - /* - /dev/random is more secure than rand() because the seed is easy to - predict, so we resort to rand() only if /dev/random is not available - */ - if ((fp=fopen("/dev/random","r"))) - { - fread(pw,len,1,fp); - fclose(fp); - while (pw<pw_end) - { - char tmp= 'a'+((uint)*pw % 26); - *pw++= tmp; - } - } - else - { - srand(time(NULL)); - while (pw<pw_end) - { - char tmp= 'a'+((uint)*pw % 26); - *pw++= tmp; - } - } - *pw_end=0; -} - - -int main(int argc, char** argv) -{ - FILE* fp; - my_MD5_CTX context; - uchar digest[16]; - char pw[17]; - uint i; - - MY_INIT(argv[0]); - parse_args(argc,argv); - if (!outfile) - die("Missing --output-file"); - - if (!(fp=fopen(outfile,"w"))) - die("Could not open '%s'(errno=%d)",outfile,errno); - get_pass(pw,sizeof(pw)-1); - my_MD5Init(&context); - my_MD5Update(&context,(uchar*) pw,sizeof(pw)-1); - my_MD5Final(digest,&context); - fprintf(fp,"%s:",user); - for (i=0;i<sizeof(digest);i++) - fprintf(fp,"%02x",digest[i]); - fprintf(fp,"\n"); - fclose(fp); - printf("%s\n",pw); - return 0; -} diff --git a/client/mysqlmanagerc.c b/client/mysqlmanagerc.c deleted file mode 100644 index 0001a0266e656b1eaa49c04b1e110db22abe1caf..0000000000000000000000000000000000000000 --- a/client/mysqlmanagerc.c +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#define MANAGER_CLIENT_VERSION "1.4" - -#include <my_global.h> -#include <mysql.h> -#include <mysql_version.h> -#include <mysqld_error.h> -#include <my_sys.h> -#include <m_string.h> -#include <my_getopt.h> -#include <stdarg.h> -#include <sys/stat.h> -#include <unistd.h> - -#ifndef MYSQL_MANAGER_PORT -#define MYSQL_MANAGER_PORT 9305 -#endif - -static void die(const char* fmt, ...); - -const char* user="root",*host="localhost"; -char* pass=0; -my_bool quiet=0; -uint port=MYSQL_MANAGER_PORT; -static const char *load_default_groups[]= { "mysqlmanagerc",0 }; -char** default_argv; -MYSQL_MANAGER *manager; -FILE* fp, *fp_out; - -static struct my_option my_long_options[] = -{ - {"host", 'h', "Connect to host.", (gptr*) &host, (gptr*) &host, 0, - GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"user", 'u', "User for login.", (gptr*) &user, (gptr*) &user, 0, - GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"password", 'p', "Password to use when connecting to server.", - 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, - {"port", 'P', "Port number to use for connection.", (gptr*) &port, - (gptr*) &port, 0, GET_UINT, REQUIRED_ARG, MYSQL_MANAGER_PORT, 0, 0, 0, 0, - 0}, - {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, - 0, 0, 0, 0, 0, 0}, - {"version", 'V', "Output version information and exit.", 0, 0, 0, - GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"quiet", 'q', "Suppress all normal output.", (gptr*) &quiet, (gptr*) &quiet, - 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} -}; - -static void die(const char* fmt, ...) -{ - va_list args; - DBUG_ENTER("die"); - va_start(args, fmt); - if (fmt) - { - fprintf(stderr, "%s: ", my_progname); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - fflush(stderr); - } - va_end(args); - exit(1); -} - -static void print_version(void) -{ - printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname, - MANAGER_CLIENT_VERSION, - MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE); -} - -void usage() -{ - print_version(); - printf("MySQL AB, by Sasha\n"); - printf("This software comes with ABSOLUTELY NO WARRANTY\n\n"); - printf("Command-line client for MySQL manager daemon.\n\n"); - printf("Usage: %s [OPTIONS] < command_file\n", my_progname); - my_print_help(my_long_options); - printf(" --no-defaults Don't read default options from any options file.\n"); - my_print_variables(my_long_options); -} - - -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - my_bool tty_password=0; - - switch (optid) { - case 'p': - if (argument) - { - my_free(pass, MYF(MY_ALLOW_ZERO_PTR)); - pass= my_strdup(argument, MYF(MY_FAE)); - while (*argument) *argument++= 'x'; /* Destroy argument */ - } - else - tty_password=1; - break; - case 'V': - print_version(); - exit(0); - case '?': - usage(); - exit(0); - } - return 0; -} - - -int parse_args(int argc, char **argv) -{ - int ho_error; - - load_defaults("my",load_default_groups,&argc,&argv); - default_argv= argv; - - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) - exit(ho_error); - - return 0; -} - - -int main(int argc, char** argv) -{ - MY_INIT(argv[0]); - fp=stdin; - fp_out=stdout; - parse_args(argc,argv); - if (!(manager=mysql_manager_init(0))) - die("Failed in mysql_manager_init()"); - if (!mysql_manager_connect(manager,host,user,pass,port)) - die("Could not connect to MySQL manager: %s (%d)",manager->last_error, - manager->last_errno); - for (;!feof(fp);) - { - char buf[4096]; - if (!fgets(buf,sizeof(buf),fp)) - break; - if (!quiet) - fprintf(fp_out,"<<%s",buf); - if (mysql_manager_command(manager,buf,strlen(buf))) - die("Error in command: %s (%d)",manager->last_error,manager->last_errno); - while (!manager->eof) - { - if (mysql_manager_fetch_line(manager,buf,sizeof(buf))) - die("Error fetching result line: %s (%d)", manager->last_error, - manager->last_errno); - if (!quiet) - fprintf(fp_out,">>%s\n",buf); - } - } - mysql_manager_close(manager); - return 0; -} diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 904bf432071c570461fbf7fa2252a1a83b9d1865..d9b4230348e28fccd9790357bd2148f82bb394f5 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -254,10 +254,6 @@ int main(int argc, char **argv) MY_INIT(argv[0]); - /* Seed the random number generator if we will be using it. */ - if (auto_generate_sql) - srandom((uint)time(NULL)); - load_defaults("my",load_default_groups,&argc,&argv); defaults_argv=argv; if (get_options(&argc,&argv)) @@ -267,6 +263,10 @@ int main(int argc, char **argv) exit(1); } + /* Seed the random number generator if we will be using it. */ + if (auto_generate_sql) + srandom((uint)time(NULL)); + /* globals? Yes, so we only have to run strlen once */ delimiter_length= strlen(delimiter); @@ -300,7 +300,8 @@ int main(int argc, char **argv) NULL, opt_mysql_port, opt_mysql_unix_port, client_flag))) { - fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql)); + fprintf(stderr,"%s: Error when connecting to server: %s\n", + my_progname,mysql_error(&mysql)); free_defaults(defaults_argv); my_end(0); exit(1); @@ -752,8 +753,12 @@ get_options(int *argc,char ***argv) if (!user) user= (char *)"root"; - if (create_string || auto_generate_sql ) + if (create_string || auto_generate_sql) + { + if (verbose >= 1) + fprintf(stderr, "Turning off preserve-schema!\n"); opt_preserve= FALSE; + } if (auto_generate_sql && (create_string || user_supplied_query)) { @@ -800,6 +805,14 @@ get_options(int *argc,char ***argv) DBUG_PRINT("info", ("auto-generated insert is %s", query_statements->string)); query_statements->next= build_query_string(); DBUG_PRINT("info", ("auto-generated is %s", query_statements->next->string)); + if (verbose >= 1) + { + fprintf(stderr, "auto-generated insert is:\n"); + fprintf(stderr, "%s\n", query_statements->string); + fprintf(stderr, "auto-generated is:\n"); + fprintf(stderr, "%s\n", query_statements->next->string); + } + } else { @@ -868,37 +881,48 @@ get_options(int *argc,char ***argv) } +static int run_query(MYSQL *mysql, const char *query, int len) +{ + if (opt_only_print) + { + printf("%.*s;\n", len, query); + return 0; + } + + if (verbose >= 2) + printf("%.*s;\n", len, query); + return mysql_real_query(mysql, query, len); +} + + + static int create_schema(MYSQL *mysql, const char *db, statement *stmt, statement *engine_stmt) { char query[HUGE_STRING_LENGTH]; statement *ptr; - + int len; DBUG_ENTER("create_schema"); - snprintf(query, HUGE_STRING_LENGTH, "CREATE SCHEMA `%s`", db); + len= snprintf(query, HUGE_STRING_LENGTH, "CREATE SCHEMA `%s`", db); DBUG_PRINT("info", ("query %s", query)); - if (opt_only_print) - { - printf("%s;\n", query); - } - else + + if (run_query(mysql, query, len)) { - if (mysql_query(mysql, query)) - { - fprintf(stderr,"%s: Cannot create schema %s : %s\n", my_progname, db, - mysql_error(mysql)); - exit(1); - } + fprintf(stderr,"%s: Cannot create schema %s : %s\n", my_progname, db, + mysql_error(mysql)); + exit(1); } - if (opt_only_print) + if (opt_only_print) { printf("use %s;\n", db); } else { + if (verbose >= 2) + printf("%s;\n", query); if (mysql_select_db(mysql, db)) { fprintf(stderr,"%s: Cannot select schema '%s': %s\n",my_progname, db, @@ -909,65 +933,46 @@ create_schema(MYSQL *mysql, const char *db, statement *stmt, if (engine_stmt) { - snprintf(query, HUGE_STRING_LENGTH, "set storage_engine=`%s`", - engine_stmt->string); - if (opt_only_print) + len= snprintf(query, HUGE_STRING_LENGTH, "set storage_engine=`%s`", + engine_stmt->string); + if (run_query(mysql, query, len)) { - printf("%s;\n", query); - } - else - { - if (mysql_query(mysql, query)) - { - fprintf(stderr,"%s: Cannot set default engine: %s\n", my_progname, - mysql_error(mysql)); - exit(1); - } + fprintf(stderr,"%s: Cannot set default engine: %s\n", my_progname, + mysql_error(mysql)); + exit(1); } } for (ptr= stmt; ptr && ptr->length; ptr= ptr->next) { - if (opt_only_print) + if (run_query(mysql, ptr->string, ptr->length)) { - printf("%.*s;\n", (uint)ptr->length, ptr->string); - } - else - { - if (mysql_real_query(mysql, ptr->string, ptr->length)) - { - fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n", - my_progname, (uint)ptr->length, ptr->string, mysql_error(mysql)); - exit(1); - } + fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n", + my_progname, (uint)ptr->length, ptr->string, mysql_error(mysql)); + exit(1); } } DBUG_RETURN(0); } - static int drop_schema(MYSQL *mysql, const char *db) { char query[HUGE_STRING_LENGTH]; - + int len; DBUG_ENTER("drop_schema"); - snprintf(query, HUGE_STRING_LENGTH, "DROP SCHEMA IF EXISTS `%s`", db); - if (opt_only_print) - { - printf("%s;\n", query); - } - else + len= snprintf(query, HUGE_STRING_LENGTH, "DROP SCHEMA IF EXISTS `%s`", db); + + if (run_query(mysql, query, len)) { - if (mysql_query(mysql, query)) - { - fprintf(stderr,"%s: Cannot drop database '%s' ERROR : %s\n", - my_progname, db, mysql_error(mysql)); - exit(1); - } + fprintf(stderr,"%s: Cannot drop database '%s' ERROR : %s\n", + my_progname, db, mysql_error(mysql)); + exit(1); } + + DBUG_RETURN(0); } @@ -1033,7 +1038,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) case 0: /* child */ DBUG_PRINT("info", ("fork returned 0, calling task(\"%s\"), pid %d gid %d", - stmts->string, pid, getgid())); + stmts ? stmts->string : "", pid, getgid())); if (verbose >= 2) fprintf(stderr, "%s: fork returned 0, calling task pid %d gid %d\n", @@ -1119,7 +1124,7 @@ run_task(thread_context *con) statement *ptr; DBUG_ENTER("run_task"); - DBUG_PRINT("info", ("task script \"%s\"", con->stmt->string)); + DBUG_PRINT("info", ("task script \"%s\"", con->stmt ? con->stmt->string : "")); if (!(mysql= mysql_init(NULL))) goto end; @@ -1132,42 +1137,36 @@ run_task(thread_context *con) my_lock(lock_file, F_RDLCK, 0, F_TO_EOF, MYF(0)); if (!opt_only_print) { - if (!(mysql= mysql_real_connect(mysql, host, user, opt_password, - create_schema_string, - opt_mysql_port, - opt_mysql_unix_port, - 0))) + if (!(mysql_real_connect(mysql, host, user, opt_password, + create_schema_string, + opt_mysql_port, + opt_mysql_unix_port, + 0))) { fprintf(stderr,"%s: %s\n",my_progname,mysql_error(mysql)); goto end; } } DBUG_PRINT("info", ("connected.")); - + if (verbose >= 3) + fprintf(stderr, "connected!\n"); queries= 0; limit_not_met: for (ptr= con->stmt; ptr && ptr->length; ptr= ptr->next) { - if (opt_only_print) + if (run_query(mysql, ptr->string, ptr->length)) { - printf("%.*s;\n", (uint)ptr->length, ptr->string); + fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n", + my_progname, (uint)ptr->length, ptr->string, mysql_error(mysql)); + goto end; } - else + if (mysql_field_count(mysql)) { - if (mysql_real_query(mysql, ptr->string, ptr->length)) - { - fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n", - my_progname, (uint)ptr->length, ptr->string, mysql_error(mysql)); - goto end; - } - if (mysql_field_count(mysql)) - { - result= mysql_store_result(mysql); - while ((row = mysql_fetch_row(result))) - counter++; - mysql_free_result(result); - } + result= mysql_store_result(mysql); + while ((row = mysql_fetch_row(result))) + counter++; + mysql_free_result(result); } queries++; @@ -1175,8 +1174,8 @@ limit_not_met: goto end; } - if (con->limit && queries < con->limit) - goto limit_not_met; + if (!con->stmt && con->limit && queries < con->limit) + goto limit_not_met; end: diff --git a/client/mysqltest.c b/client/mysqltest.c index 50d814e3f9bee598bc019a794edde26bd8fa1252..cfd69e45ba7892e6979e9b587eecc8e5d98b82c2 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1596,9 +1596,9 @@ wait_for_position: It may be that the slave SQL thread has not started yet, though START SLAVE has been issued ? */ - if (tries++ == 3) + if (tries++ == 30) die("could not sync with master ('%s' returned NULL)", query_buf); - sleep(1); /* So at most we will wait 3 seconds and make 4 tries */ + sleep(1); /* So at most we will wait 30 seconds and make 31 tries */ mysql_free_result(res); goto wait_for_position; } @@ -1664,14 +1664,14 @@ int do_save_master_pos() { ulonglong epoch=0, tmp_epoch= 0; int count= 0; - - do + int do_continue= 1; + while (do_continue) { const char binlog[]= "binlog"; const char latest_trans_epoch[]= "latest_trans_epoch="; - const char latest_applied_binlog_epoch[]= - "latest_applied_binlog_epoch="; + const char latest_handled_binlog_epoch[]= + "latest_handled_binlog_epoch="; if (count) sleep(1); if (mysql_query(mysql, query= "show engine ndb status")) @@ -1701,26 +1701,32 @@ int do_save_master_pos() start_lineno, latest_trans_epoch, query); } /* latest_applied_binlog_epoch */ - while (*status && strncmp(status, latest_applied_binlog_epoch, - sizeof(latest_applied_binlog_epoch)-1)) + while (*status && strncmp(status, latest_handled_binlog_epoch, + sizeof(latest_handled_binlog_epoch)-1)) status++; if (*status) { - status+= sizeof(latest_applied_binlog_epoch)-1; + status+= sizeof(latest_handled_binlog_epoch)-1; tmp_epoch= strtoull(status, (char**) 0, 10); } else die("line %u: result does not contain '%s' in '%s'", - start_lineno, latest_applied_binlog_epoch, query); + start_lineno, latest_handled_binlog_epoch, query); break; } } - mysql_free_result(res); if (!row) die("line %u: result does not contain '%s' in '%s'", start_lineno, binlog, query); count++; - } while (tmp_epoch < epoch && count <= 3); + if (tmp_epoch >= epoch) + do_continue= 0; + else if (count > 30) + { + break; + } + mysql_free_result(res); + } } } #endif @@ -5088,6 +5094,35 @@ static void init_var_hash(MYSQL *mysql) DBUG_VOID_RETURN; } +static void mark_progress(int line) +{ +#ifdef NOT_YET + static FILE* fp = NULL; + static double first; + + struct timeval tv; + double now; + + if (!fp) + { + + fp = fopen("/tmp/mysqltest_progress.log", "wt"); + + if (!fp) + { + abort(); + } + + gettimeofday(&tv, NULL); + first = tv.tv_sec * 1e6 + tv.tv_usec; + } + + gettimeofday(&tv, NULL); + now = tv.tv_sec * 1e6 + tv.tv_usec; + + fprintf(fp, "%d %f\n", parser.current_line, (now - first) / 1e6); +#endif +} int main(int argc, char **argv) { @@ -5447,6 +5482,7 @@ int main(int argc, char **argv) } parser.current_line += current_line_inc; + mark_progress(parser.current_line); } start_lineno= 0; diff --git a/cmakelists.txt b/cmakelists.txt index 70b017c757dd43817d23bad31959cedb579fd887..0e91f49be90851df847803d5e50866baece5f76b 100644 --- a/cmakelists.txt +++ b/cmakelists.txt @@ -3,6 +3,9 @@ PROJECT(MySql) # This reads user configuration, generated by configure.js. INCLUDE(win/configure.data) +# Hardcode support for CSV storage engine +SET(WITH_CSV_STORAGE_ENGINE TRUE) + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in ${CMAKE_SOURCE_DIR}/include/mysql_version.h @ONLY) @@ -18,6 +21,12 @@ IF(WITH_BLACKHOLE_STORAGE_ENGINE) SET (mysql_se_decls "${mysql_se_decls}, blackhole_hton") SET (mysql_se_ha_src ${mysql_se_ha_src} "../sql/ha_blackhole.cc") ENDIF(WITH_BLACKHOLE_STORAGE_ENGINE) +IF(WITH_CSV_STORAGE_ENGINE) + ADD_DEFINITIONS(-D WITH_CSV_STORAGE_ENGINE) + SET (mysql_se_htons "${mysql_se_htons}, &tina_hton") + SET (mysql_se_decls "${mysql_se_decls}, tina_hton") + SET (mysql_se_ha_src ${mysql_se_ha_src} "../storage/csv/ha_tina.cc") +ENDIF(WITH_CSV_STORAGE_ENGINE) IF(WITH_EXAMPLE_STORAGE_ENGINE) ADD_DEFINITIONS(-D WITH_EXAMPLE_STORAGE_ENGINE) SET (mysql_se_htons "${mysql_se_htons}, &example_hton") diff --git a/config/ac-macros/yassl.m4 b/config/ac-macros/yassl.m4 index c736f2f10f2d7cbc53477ff3905138bec3ab2c72..906a65a2fc36272d389b8e98766ba8cd3f859683 100644 --- a/config/ac-macros/yassl.m4 +++ b/config/ac-macros/yassl.m4 @@ -1,8 +1,3 @@ -AC_CONFIG_FILES(extra/yassl/Makefile dnl -extra/yassl/taocrypt/Makefile dnl -extra/yassl/taocrypt/src/Makefile dnl -extra/yassl/src/Makefile) - AC_DEFUN([MYSQL_CHECK_YASSL], [ AC_MSG_CHECKING(for yaSSL) AC_ARG_WITH([yassl], [ --with-yassl Include the yaSSL support],,) @@ -14,7 +9,11 @@ AC_DEFUN([MYSQL_CHECK_YASSL], [ AC_MSG_ERROR([Cannot configure MySQL to use yaSSL and OpenSSL simultaneously.]) fi AC_MSG_RESULT([using bundled yaSSL]) - yassl_dir="extra/yassl" + AC_CONFIG_FILES(extra/yassl/Makefile dnl + extra/yassl/taocrypt/Makefile dnl + extra/yassl/taocrypt/src/Makefile dnl + extra/yassl/src/Makefile) + yassl_dir="yassl" yassl_libs="-L\$(top_srcdir)/extra/yassl/src -lyassl -L\$(top_srcdir)/extra/yassl/taocrypt/src -ltaocrypt" yassl_includes="-I\$(top_srcdir)/extra/yassl/include" AC_DEFINE([HAVE_OPENSSL], [1], [Defined by configure. Using yaSSL for OpenSSL emulation.]) diff --git a/config/ac-macros/zlib.m4 b/config/ac-macros/zlib.m4 index a8c54c845a12e03766b081a5471710aeb22fc62c..23cc132aca8767fd9e9099cc5d28032b5678915a 100644 --- a/config/ac-macros/zlib.m4 +++ b/config/ac-macros/zlib.m4 @@ -63,7 +63,7 @@ case $SYSTEM_TYPE in ;; *) AC_ARG_WITH([zlib-dir], - AC_HELP_STRING([--with-zlib-dir=DIR], + AC_HELP_STRING([--with-zlib-dir=no|bundled|DIR], [Provide MySQL with a custom location of compression library. Given DIR, zlib binary is assumed to be in $DIR/lib and header files @@ -113,6 +113,10 @@ case $SYSTEM_TYPE in fi ;; esac +if test -n "$zlib_dir" +then + AC_CONFIG_FILES(zlib/Makefile) +fi ]) dnl ------------------------------------------------------------------------ diff --git a/configure.in b/configure.in index 250d7f6d1c2f3df9d6b8d2903b4a3944c12f11b0..6984f5b5f89bb09d8ae07552eeba91100b9950ec 100644 --- a/configure.in +++ b/configure.in @@ -2218,23 +2218,7 @@ then [Access checks in embedded library]) fi -AC_ARG_WITH(extra-tools, - [ --without-extra-tools Skip building utilites in the tools directory.], - [with_tools=$withval], - [with_tools=yes] -) - tools_dirs="" -if test "$with_tools" = "yes" -then - if test "$THREAD_SAFE_CLIENT" = "no" - then - AC_MSG_WARN([extra-tools disabled because --enable-thread-safe-client wasn't used]) - else - tools_dirs="tools" - AC_CONFIG_FILES(tools/Makefile) - fi -fi AC_ARG_WITH([mysqlmanager], AC_HELP_STRING([--with-mysqlmanager], [Build the mysqlmanager binary: yes/no (default: build if server is built.)]), @@ -2304,22 +2288,6 @@ fi AC_SUBST(man_dirs) AC_SUBST(man1_files) -# Shall we build the bench code? -AC_ARG_WITH(bench, - [ --without-bench Skip building of the benchmark suite.], - [with_bench=$withval], - [with_bench=yes] -) - -if test "$with_bench" = "yes" -then - bench_dirs="sql-bench" -else - bench_dirs="" -fi -bench_dirs="$bench_dirs mysql-test" -AC_SUBST(bench_dirs) - # Don't build readline, i have it already AC_ARG_WITH(readline, [ --without-readline Use system readline instead of bundled copy.], @@ -2333,6 +2301,12 @@ AC_ARG_WITH(libedit, [ with_libedit=undefined ] ) +if test "$with_readline/$with_libedit" = "undefined/undefined" -a ! -e "$srcdir/cmd-line-utils" +then + with_readline=no + with_libedit=no +fi + # # We support next variants of compilation: # --with-readline @@ -2408,6 +2382,16 @@ else versions of libedit or readline]) fi fi +# +# if either readline or libedit is enabled - generate Makefile's for both +# (to make sure both are included in 'make dist') +# +if test -n "$readline_basedir" +then + AC_CONFIG_FILES(cmd-line-utils/Makefile dnl + cmd-line-utils/libedit/Makefile dnl + cmd-line-utils/readline/Makefile) +fi fi AC_SUBST(readline_dir) @@ -2420,7 +2404,7 @@ MYSQL_CHECK_BIG_TABLES MYSQL_CHECK_MAX_INDEXES MYSQL_CHECK_REPLICATION -MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,storage/innobase,ha_innodb.o,[ dnl +MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,innobase,ha_innodb.o,[ dnl \$(top_builddir)/storage/innobase/usr/libusr.a dnl \$(top_builddir)/storage/innobase/srv/libsrv.a dnl \$(top_builddir)/storage/innobase/dict/libdict.a dnl @@ -2462,24 +2446,24 @@ MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,storage/innobase,ha_innodb.o,[ dnl other_configures="$other_configures storage/innobase/configure" ]) -MYSQL_STORAGE_ENGINE(berkeley,,berkeley-db,,,,storage/bdb,,,[ +MYSQL_STORAGE_ENGINE(berkeley,,berkeley-db,,,,bdb,,,[ MYSQL_SETUP_BERKELEY_DB ]) -MYSQL_STORAGE_ENGINE(example,,,,,,storage/example,no, +MYSQL_STORAGE_ENGINE(example,,,,,,example,no, \$(top_builddir)/storage/example/libexample.a,[ AC_CONFIG_FILES(storage/example/Makefile) ]) -MYSQL_STORAGE_ENGINE(archive,,,,,,storage/archive,, +MYSQL_STORAGE_ENGINE(archive,,,,,,archive,, \$(top_builddir)/storage/archive/libarchive.a, [ AC_CONFIG_FILES(storage/archive/Makefile) ]) -MYSQL_STORAGE_ENGINE(csv,,,"yes",,tina_hton,storage/csv,no, +MYSQL_STORAGE_ENGINE(csv,,,"yes",,tina_hton,csv,no, \$(top_builddir)/storage/csv/libcsv.a,[ AC_CONFIG_FILES(storage/csv/Makefile) ]) MYSQL_STORAGE_ENGINE(blackhole) MYSQL_STORAGE_ENGINE(federated) -MYSQL_STORAGE_ENGINE(ndbcluster,,ndbcluster,,,,storage/ndb,,,[ +MYSQL_STORAGE_ENGINE(ndbcluster,,ndbcluster,,,,ndb,,,[ MYSQL_SETUP_NDBCLUSTER ]) MYSQL_STORAGE_ENGINE(partition,,partition) @@ -2539,7 +2523,7 @@ then AC_SUBST(THREAD_LOBJECTS) server_scripts="mysqld_safe mysql_install_db" sql_server_dirs="strings mysys dbug extra regex" - mysql_se_dirs="storage/myisam storage/myisammrg storage/heap $mysql_se_dirs" + mysql_se_dirs="myisam myisammrg heap $mysql_se_dirs" sql_server="$sql_server vio sql" fi @@ -2602,24 +2586,22 @@ AC_SUBST(MAKE_BINARY_DISTRIBUTION_OPTIONS) # Output results AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl + unittest/Makefile dnl + unittest/mytap/Makefile unittest/mytap/t/Makefile dnl + unittest/mysys/Makefile unittest/examples/Makefile dnl strings/Makefile regex/Makefile storage/Makefile storage/heap/Makefile dnl storage/myisam/Makefile storage/myisammrg/Makefile dnl - os2/Makefile os2/include/Makefile os2/include/sys/Makefile dnl man/Makefile BUILD/Makefile vio/Makefile dnl libmysql/Makefile client/Makefile dnl pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile dnl - sql/handlerton.cc sql-common/Makefile SSL/Makefile dnl + sql/handlerton.cc sql-common/Makefile dnl dbug/Makefile scripts/Makefile dnl - include/Makefile sql-bench/Makefile dnl + include/Makefile dnl server-tools/Makefile server-tools/instance-manager/Makefile dnl tests/Makefile Docs/Makefile support-files/Makefile dnl support-files/MacOSX/Makefile mysql-test/Makefile dnl mysql-test/ndb/Makefile netware/Makefile dnl include/mysql_version.h dnl - cmd-line-utils/Makefile dnl - cmd-line-utils/libedit/Makefile dnl - zlib/Makefile dnl - cmd-line-utils/readline/Makefile dnl plugin/Makefile dnl plugin/fulltext/Makefile dnl win/Makefile) diff --git a/dbug/dbug.c b/dbug/dbug.c index dc5b06a63e2f6689e7cabf69b1ea8b6197b253f1..52de4b4a92d1e0445932a53d4cb7a76b72d9b708 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -2215,7 +2215,7 @@ static unsigned long Clock() return ru.ru_utime.tv_sec*1000 + ru.ru_utime.tv_usec/1000; } -#elif defined(MSDOS) || defined(__WIN__) || defined(OS2) +#elif defined(MSDOS) || defined(__WIN__) static ulong Clock() { diff --git a/extra/Makefile.am b/extra/Makefile.am index 0aaa8c4d127ed879513cb32a14f1e8ca9aba634f..4b4831284394aa60c2441038bd420b4b37c12794 100644 --- a/extra/Makefile.am +++ b/extra/Makefile.am @@ -23,10 +23,7 @@ BUILT_SOURCES= $(top_builddir)/include/mysqld_error.h \ $(top_builddir)/include/mysqld_ername.h pkginclude_HEADERS= $(BUILT_SOURCES) CLEANFILES = $(BUILT_SOURCES) -# We never use SUBDIRS here, but needed for automake 1.6.3 -# to generate code to handle DIST_SUBDIRS -SUBDIRS= -DIST_SUBDIRS= yassl +SUBDIRS = @yassl_dir@ # This will build mysqld_error.h and sql_state.h $(top_builddir)/include/mysqld_error.h: comp_err$(EXEEXT) diff --git a/extra/resolveip.c b/extra/resolveip.c index f8cff2a976ceaf2cc9b8fc67f25435de11a7cd50..eb05886d5b17ab8bfb88c3486c96912b4ed5be05 100644 --- a/extra/resolveip.c +++ b/extra/resolveip.c @@ -32,7 +32,7 @@ #include <my_net.h> #include <my_getopt.h> -#if !defined(_AIX) && !defined(HAVE_UNIXWARE7_THREADS) && !defined(HAVE_UNIXWARE7_POSIX) && !defined(h_errno) +#if !defined(_AIX) && !defined(h_errno) extern int h_errno; #endif diff --git a/extra/yassl/include/openssl/rsa.h b/extra/yassl/include/openssl/rsa.h index 1ab9d13b89ffcf1822a974d087c1e89640d4a8c8..fe64e655bdcbc464a4f14588b3c693347a92ae99 100644 --- a/extra/yassl/include/openssl/rsa.h +++ b/extra/yassl/include/openssl/rsa.h @@ -1,7 +1,7 @@ /* rsa.h for openSSL */ -#ifndef ysSSL_rsa_h__ +#ifndef yaSSL_rsa_h__ #define yaSSL_rsa_h__ enum { RSA_F4 = 1 }; diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h index 1c8291c2f131cb370e5d88393df9a8504e3ff61f..8a87196b7ed780dd1983641f5d139dda2bc192fb 100644 --- a/extra/yassl/include/openssl/ssl.h +++ b/extra/yassl/include/openssl/ssl.h @@ -23,7 +23,7 @@ * */ -#ifndef ysSSL_openssl_h__ +#ifndef yaSSL_openssl_h__ #define yaSSL_openssl_h__ #include <stdio.h> /* ERR_print fp */ diff --git a/extra/yassl/include/yassl_int.hpp b/extra/yassl/include/yassl_int.hpp index 60a78a3970efd5fcedba6886f03cc87aff4d99ee..e75294ad07359c1fc2286c80707ba7668dcdb471 100644 --- a/extra/yassl/include/yassl_int.hpp +++ b/extra/yassl/include/yassl_int.hpp @@ -123,8 +123,6 @@ public: friend sslFactory& GetSSL_Factory(); // singleton creator private: - static sslFactory instance_; - sslFactory(const sslFactory&); // hide copy sslFactory& operator=(const sslFactory&); // and assign }; @@ -216,8 +214,6 @@ public: friend Sessions& GetSessions(); // singleton creator private: - static Sessions instance_; - Sessions(const Sessions&); // hide copy Sessions& operator=(const Sessions&); // and assign }; diff --git a/extra/yassl/include/yassl_types.hpp b/extra/yassl/include/yassl_types.hpp index ec9e6fb7ceb8ecfc72cc38f9568f833579058b4e..66cc6aa3c68f60427b283c49a0b56b6add9e82ce 100644 --- a/extra/yassl/include/yassl_types.hpp +++ b/extra/yassl/include/yassl_types.hpp @@ -34,6 +34,11 @@ namespace yaSSL { + +// Delete static singleton memory holders +void CleanUp(); + + // library allocation struct new_t {}; // yaSSL New type extern new_t ys; // pass in parameter diff --git a/extra/yassl/src/handshake.cpp b/extra/yassl/src/handshake.cpp index d7df438b8dfa4e3cfe6f4bd8c3aa8718ac1a05d9..16c9bde20035e776e868f72ff5e819162079b579 100644 --- a/extra/yassl/src/handshake.cpp +++ b/extra/yassl/src/handshake.cpp @@ -648,8 +648,6 @@ void build_certHashes(SSL& ssl, Hashes& hashes) } -mySTL::auto_ptr<input_buffer> null_buffer(ysDelete); - // do process input requests mySTL::auto_ptr<input_buffer> DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered) @@ -659,7 +657,8 @@ DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered) if (!ready) { // Nothing to receive after blocking wait => error ssl.SetError(receive_error); - return buffered= null_buffer; + buffered.reset(0); + return buffered; } // add buffered data if its there @@ -667,10 +666,10 @@ DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered) input_buffer buffer(buffSz + ready); if (buffSz) { buffer.assign(buffered.get()->get_buffer(), buffSz); - buffered = null_buffer; + buffered.reset(0); } - // add new (ys) data + // add new data uint read = ssl.getSocket().receive(buffer.get_buffer() + buffSz, ready); buffer.add_size(read); uint offset = 0; @@ -703,11 +702,15 @@ DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered) mySTL::auto_ptr<Message> msg(mf.CreateObject(hdr.type_), ysDelete); if (!msg.get()) { ssl.SetError(factory_error); - return buffered = null_buffer; + buffered.reset(0); + return buffered; } buffer >> *msg; msg->Process(buffer, ssl); - if (ssl.GetError()) return buffered = null_buffer; + if (ssl.GetError()) { + buffered.reset(0); + return buffered; + } } offset += hdr.length_ + RECORD_HEADER; } diff --git a/extra/yassl/src/template_instnt.cpp b/extra/yassl/src/template_instnt.cpp index 5ee57e76aed3851b4dd3dd36a75dc29e14ff1794..c55ca39bec2911745edaefe841062d3cc5fac84c 100644 --- a/extra/yassl/src/template_instnt.cpp +++ b/extra/yassl/src/template_instnt.cpp @@ -87,6 +87,8 @@ template void ysDelete<BulkCipher>(BulkCipher*); template void ysDelete<Digest>(Digest*); template void ysDelete<X509>(X509*); template void ysDelete<Message>(Message*); +template void ysDelete<sslFactory>(sslFactory*); +template void ysDelete<Sessions>(Sessions*); template void ysArrayDelete<unsigned char>(unsigned char*); template void ysArrayDelete<char>(char*); } diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp index 740618ce701fdb7644461ef122568977fc621cd3..87d990b3506209d2218e82d19573d33e6d2a07fc 100644 --- a/extra/yassl/src/yassl_int.cpp +++ b/extra/yassl/src/yassl_int.cpp @@ -1361,19 +1361,31 @@ SSL_SESSION::~SSL_SESSION() } -Sessions Sessions::instance_; // simple singleton +static Sessions* sessionsInstance = 0; Sessions& GetSessions() { - return Sessions::instance_; + if (!sessionsInstance) + sessionsInstance = new (ys) Sessions; + return *sessionsInstance; } -sslFactory sslFactory::instance_; // simple singleton +static sslFactory* sslFactoryInstance = 0; sslFactory& GetSSL_Factory() -{ - return sslFactory::instance_; +{ + if (!sslFactoryInstance) + sslFactoryInstance = new (ys) sslFactory; + return *sslFactoryInstance; +} + + +void CleanUp() +{ + TaoCrypt::CleanUp(); + ysDelete(sslFactoryInstance); + ysDelete(sessionsInstance); } diff --git a/extra/yassl/taocrypt/cmakelists.txt b/extra/yassl/taocrypt/cmakelists.txt index 6f4d0395ff6765291538dbb8ab153aa0f9bf7fcc..3ad9195b3727d1738def0cc4a0273bb9e8e2710a 100644 --- a/extra/yassl/taocrypt/cmakelists.txt +++ b/extra/yassl/taocrypt/cmakelists.txt @@ -1,8 +1,5 @@ INCLUDE_DIRECTORIES(../mySTL include) -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /GX-") -SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GX-") - ADD_LIBRARY(taocrypt src/aes.cpp src/aestables.cpp src/algebra.cpp src/arc4.cpp src/asn.cpp src/coding.cpp src/des.cpp src/dh.cpp src/dsa.cpp src/file.cpp src/hash.cpp src/integer.cpp src/md2.cpp src/md5.cpp src/misc.cpp src/random.cpp src/ripemd.cpp src/rsa.cpp src/sha.cpp diff --git a/extra/yassl/taocrypt/include/integer.hpp b/extra/yassl/taocrypt/include/integer.hpp index 76034c3ae8f65fdf89d5b76039be418d6185ecdc..d3bd731e2bd71d539a56e5b654d7eecc84c86d79 100644 --- a/extra/yassl/taocrypt/include/integer.hpp +++ b/extra/yassl/taocrypt/include/integer.hpp @@ -275,8 +275,6 @@ private: AlignedWordBlock reg_; Sign sign_; - static const Integer zero_; - static const Integer one_; }; inline bool operator==(const Integer& a, const Integer& b) diff --git a/extra/yassl/taocrypt/include/misc.hpp b/extra/yassl/taocrypt/include/misc.hpp index f705cc999705a690b208ab6b147041966e0acc61..26383d4c96b81c64e0206add040c750c9b58eb20 100644 --- a/extra/yassl/taocrypt/include/misc.hpp +++ b/extra/yassl/taocrypt/include/misc.hpp @@ -34,6 +34,11 @@ namespace TaoCrypt { + +// Delete static singleton holders +void CleanUp(); + + // library allocation struct new_t {}; // TaoCrypt New type extern new_t tc; // pass in parameter diff --git a/extra/yassl/taocrypt/include/runtime.hpp b/extra/yassl/taocrypt/include/runtime.hpp index 254e67a7f64ff6c780df7b59bbe6755c34da1c60..d9d7877bd9366abafb3542d6c277bd71900b1a94 100644 --- a/extra/yassl/taocrypt/include/runtime.hpp +++ b/extra/yassl/taocrypt/include/runtime.hpp @@ -25,11 +25,27 @@ -#if !defined(yaSSL_NEW_HPP) && defined(__GNUC__) -#if !(defined(__ICC) || defined(__INTEL_COMPILER)) - +#ifndef yaSSL_NEW_HPP #define yaSSL_NEW_HPP + +#ifdef __sun + +#include <assert.h> + +// Handler for pure virtual functions +namespace __Crun { + static void pure_error(void) + { + assert("Pure virtual method called." == "Aborted"); + } +} // namespace __Crun + +#endif // __sun + + +#if defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if __GNUC__ > 2 extern "C" { @@ -47,6 +63,6 @@ static int __cxa_pure_virtual() } // extern "C" #endif // __GNUC__ > 2 -#endif // ! _ICC -#endif // yaSSL_NEW_HPP && __GNUC__ +#endif // compiler check +#endif // yaSSL_NEW_HPP diff --git a/extra/yassl/taocrypt/src/algebra.cpp b/extra/yassl/taocrypt/src/algebra.cpp index 45bbcfa662a6a00cfab0c14ea0d8791c4f8f8e95..8f4ce051a4391e640364d90dbf0af05269f7bdb5 100644 --- a/extra/yassl/taocrypt/src/algebra.cpp +++ b/extra/yassl/taocrypt/src/algebra.cpp @@ -76,7 +76,9 @@ const Integer& AbstractEuclideanDomain::Mod(const Element &a, const Integer& AbstractEuclideanDomain::Gcd(const Element &a, const Element &b) const { - Element g[3]={b, a}; + mySTL::vector<Element> g(3); + g[0]= b; + g[1]= a; unsigned int i0=0, i1=1, i2=2; while (!Equal(g[i1], this->Identity())) diff --git a/extra/yassl/taocrypt/src/integer.cpp b/extra/yassl/taocrypt/src/integer.cpp index 71324b04b925232d38ac2ca0927b36084327fecf..4ade549153028ba0a0739ec62cfb1109d5b5bcac 100644 --- a/extra/yassl/taocrypt/src/integer.cpp +++ b/extra/yassl/taocrypt/src/integer.cpp @@ -2709,19 +2709,32 @@ unsigned int Integer::Encode(byte* output, unsigned int outputLen, } -const Integer Integer::zero_; +static Integer* zero = 0; const Integer &Integer::Zero() { - return zero_; + if (!zero) + zero = new (tc) Integer; + return *zero; } -const Integer Integer::one_(1,2); +static Integer* one = 0; const Integer &Integer::One() { - return one_; + if (!one) + one = new (tc) Integer(1,2); + return *one; +} + + +// Clean up static singleton holders, not a leak, but helpful to have gone +// when checking for leaks +void CleanUp() +{ + tcDelete(one); + tcDelete(zero); } diff --git a/extra/yassl/taocrypt/src/template_instnt.cpp b/extra/yassl/taocrypt/src/template_instnt.cpp index 9a3c12badfc8fa8971de63af202ff09adee0a1a6..59814d032099dd4e33a6718418c699ced2a198c7 100644 --- a/extra/yassl/taocrypt/src/template_instnt.cpp +++ b/extra/yassl/taocrypt/src/template_instnt.cpp @@ -41,6 +41,7 @@ template class RSA_Decryptor<RSA_BlockType2>; template class RSA_Encryptor<RSA_BlockType1>; template class RSA_Encryptor<RSA_BlockType2>; template void tcDelete<HASH>(HASH*); +template void tcDelete<Integer>(Integer*); template void tcArrayDelete<byte>(byte*); template AllocatorWithCleanup<byte>::pointer StdReallocate<byte, AllocatorWithCleanup<byte> >(AllocatorWithCleanup<byte>&, byte*, AllocatorWithCleanup<byte>::size_type, AllocatorWithCleanup<byte>::size_type, bool); template void tcArrayDelete<word>(word*); diff --git a/include/Makefile.am b/include/Makefile.am index fbd06c6c57407e118a842b262bae2939fcc26117..e1ddadb933ac18d8f7a926e4f10472de8dc8fc62 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -23,7 +23,7 @@ pkginclude_HEADERS = my_dbug.h m_string.h my_sys.h my_list.h my_xml.h \ my_getopt.h sslopt-longopts.h my_dir.h typelib.h \ sslopt-vars.h sslopt-case.h sql_common.h keycache.h \ mysql_time.h mysql/plugin.h $(BUILT_SOURCES) -noinst_HEADERS = config-win.h config-os2.h config-netware.h \ +noinst_HEADERS = config-win.h config-netware.h \ heap.h my_bitmap.h my_uctype.h \ myisam.h myisampack.h myisammrg.h ft_global.h\ mysys_err.h my_base.h help_start.h help_end.h \ diff --git a/include/config-os2.h b/include/config-os2.h deleted file mode 100644 index 0402074acc0778022018f71c441aec8888cb239f..0000000000000000000000000000000000000000 --- a/include/config-os2.h +++ /dev/null @@ -1,835 +0,0 @@ -/* Copyright (C) 2000 MySQL AB & Yuri Dario - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* Defines for OS2 to make it compatible for MySQL */ - -#ifndef __CONFIG_OS2_H__ -#define __CONFIG_OS2_H__ - -#include <os2.h> -#include <math.h> -#include <io.h> -#include <types.h> - -/* Define to name of system eg solaris*/ -#define SYSTEM_TYPE "IBM OS/2 Warp" -/* Define to machine type name eg sun10 */ -#define MACHINE_TYPE "i686" -/* Name of package */ -#define PACKAGE "mysql" -/* Version number of package */ -#define VERSION MYSQL_SERVER_VERSION -/* Default socket */ -#define MYSQL_UNIX_ADDR "\\socket\\MySQL" - -#define FN_LIBCHAR '\\' -#define FN_ROOTDIR "\\" -#define MY_NFILE 1024 /* This is only used to save filenames */ - -#define HAVE_ACCESS - -#define DEFAULT_MYSQL_HOME "c:\\mysql" -#define DEFAULT_BASEDIR "C:\\" -#define SHAREDIR "share" -#define DEFAULT_CHARSET_HOME "C:/mysql/" -#define _POSIX_PATH_MAX 255 -#define DWORD ULONG - -#define O_SHARE 0x1000 /* Open file in sharing mode */ -#define FILE_BINARY O_BINARY /* my_fopen in binary mode */ -#define S_IROTH S_IREAD /* for my_lib */ - -#define CANT_DELETE_OPEN_FILES /* saves open files in a list, for delayed delete */ - -#define O_NONBLOCK 0x10 - -#define NO_OPEN_3 /* For my_create() */ -#define SIGQUIT SIGTERM /* No SIGQUIT */ -#define SIGALRM 14 /* Alarm */ - -#define NO_FCNTL_NONBLOCK - -#define EFBIG E2BIG -/*#define ENFILE EMFILE */ -/*#define ENAMETOOLONG (EOS2ERR+2) */ -/*#define ETIMEDOUT 145 */ -/*#define EPIPE 146 */ -#define EROFS 147 - -#define sleep(A) DosSleep((A)*1000) -#define closesocket(A) soclose(A) - -#define F_OK 0 -#define W_OK 2 - -#define bzero(x,y) memset((x),'\0',(y)) -#define bcopy(x,y,z) memcpy((y),(x),(z)) -#define bcmp(x,y,z) memcmp((y),(x),(z)) - -#define F_RDLCK 4 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 0 /* Remove lock. */ - -#define S_IFMT 0x17000 /* Mask for file type */ -#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ - -#define HUGE_PTR - -#ifdef __cplusplus -extern "C" -#endif -double _cdecl rint( double nr); - -DWORD TlsAlloc( void); -BOOL TlsFree( DWORD); -PVOID TlsGetValue( DWORD); -BOOL TlsSetValue( DWORD, PVOID); - -/* support for > 2GB file size */ -#define SIZEOF_OFF_T 8 -#define lseek(A,B,C) _lseek64( A, B, C) -#define tell(A) _lseek64( A, 0, SEEK_CUR) - -void* dlopen( char* path, int flag); -char* dlerror( void); -void* dlsym( void* hmod, char* fn); -void dlclose( void* hmod); - -/* Some typedefs */ -typedef unsigned long long os_off_t; - -/* config.h. Generated automatically by configure. */ -/* config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define if using alloca.c. */ -/* #undef C_ALLOCA */ - -/* Define to empty if the keyword does not work. */ -/* #undef const */ - -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ -/* #undef CRAY_STACKSEG_END */ - -/* Define if you have alloca, as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define if you have <alloca.h> and it should be used (not on Ultrix). */ -/* #define HAVE_ALLOCA_H 1 */ - -/* Define if you don't have vprintf but do have _doprnt. */ -/* #undef HAVE_DOPRNT */ - -/* Define if you have a working `mmap' system call. */ -/* #undef HAVE_MMAP */ - -/* Define if system calls automatically restart after interruption - by a signal. */ -/* #undef HAVE_RESTARTABLE_SYSCALLS */ - -/* Define if your struct stat has st_rdev. */ -#define HAVE_ST_RDEV 1 - -/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ -/* #define HAVE_SYS_WAIT_H 1 */ - -/* Define if you don't have tm_zone but do have the external array - tzname. */ -#define HAVE_TZNAME 1 - -/* Define if utime(file, NULL) sets file's timestamp to the present. */ -#define HAVE_UTIME_NULL 1 - -/* Define if you have the vprintf function. */ -#define HAVE_VPRINTF 1 - -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - -/* Define to `long' if <sys/types.h> doesn't define. */ -/* #undef off_t */ - -/* Define as the return type of signal handlers (int or void). */ -#define RETSIGTYPE void - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -/* #undef size_t */ - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown - */ -#define STACK_DIRECTION -1 - -/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ -/* #undef STAT_MACROS_BROKEN */ - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#define TIME_WITH_SYS_TIME 1 - -/* Define if your <sys/time.h> declares struct tm. */ -/* #undef TM_IN_SYS_TIME */ - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -/* #undef WORDS_BIGENDIAN */ - -/* Version of .frm files */ -#define DOT_FRM_VERSION 6 - -/* READLINE: */ -#define FIONREAD_IN_SYS_IOCTL 1 - -/* READLINE: Define if your system defines TIOCGWINSZ in sys/ioctl.h. */ -/* #undef GWINSZ_IN_SYS_IOCTL */ - -/* Do we have FIONREAD */ -#define FIONREAD_IN_SYS_IOCTL 1 - -/* atomic_add() from <asm/atomic.h> (Linux only) */ -/* #undef HAVE_ATOMIC_ADD */ - -/* atomic_sub() from <asm/atomic.h> (Linux only) */ -/* #undef HAVE_ATOMIC_SUB */ - -/* bool is not defined by all C++ compilators */ -#define HAVE_BOOL 1 - -/* Have berkeley db installed */ -/* #define HAVE_BERKELEY_DB 1 */ - -/* DSB style signals ? */ -/* #undef HAVE_BSD_SIGNALS */ - -/* Can netinet be included */ -/* #undef HAVE_BROKEN_NETINET_INCLUDES */ - -/* READLINE: */ -/* #undef HAVE_BSD_SIGNALS */ - -/* ZLIB and compress: */ -#define HAVE_COMPRESS 1 - -/* Define if we are using OSF1 DEC threads */ -/* #undef HAVE_DEC_THREADS */ - -/* Define if we are using OSF1 DEC threads on 3.2 */ -/* #undef HAVE_DEC_3_2_THREADS */ - -/* fp_except from ieeefp.h */ -/* #undef HAVE_FP_EXCEPT */ - -/* READLINE: */ -/* #undef HAVE_GETPW_DECLS */ - -/* Solaris define gethostbyname_r with 5 arguments. glibc2 defines - this with 6 arguments */ -/* #undef HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE */ - -/* In OSF 4.0f the 3'd argument to gethostname_r is hostent_data * */ -/* #undef HAVE_GETHOSTBYNAME_R_RETURN_INT */ - -/* Define if int8, int16 and int32 types exist */ -/* #undef HAVE_INT_8_16_32 */ - -/* Define if have -lwrap */ -/* #undef HAVE_LIBWRAP */ - -/* Define if we are using Xavier Leroy's LinuxThreads */ -/* #undef HAVE_LINUXTHREADS */ - -/* Do we use user level threads */ -/* #undef HAVE_mit_thread */ - -/* For some non posix threads */ -/* #undef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC */ - -/* For some non posix threads */ -/* #undef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */ - -/* READLINE: */ -#define HAVE_POSIX_SIGNALS 0 - -/* sigwait with one argument */ -/* #undef HAVE_NONPOSIX_SIGWAIT */ - -/* pthread_attr_setscope */ -#define HAVE_PTHREAD_ATTR_SETSCOPE 1 - -/* POSIX readdir_r */ -/* #undef HAVE_READDIR_R */ - -/* POSIX sigwait */ -/* #undef HAVE_SIGWAIT */ - -/* crypt */ -#define HAVE_CRYPT 1 - -/* Solaris define gethostbyaddr_r with 7 arguments. glibc2 defines - this with 8 arguments */ -/* #undef HAVE_SOLARIS_STYLE_GETHOST */ - -/* Timespec has a ts_sec instead of tv_sev */ -#define HAVE_TIMESPEC_TS_SEC 1 - -/* Have the tzname variable */ -#define HAVE_TZNAME 1 - -/* Define if the system files define uchar */ -/* #undef HAVE_UCHAR */ - -/* Define if the system files define uint */ -/* #undef HAVE_UINT */ - -/* Define if the system files define ulong */ -/* #undef HAVE_ULONG */ - -/* UNIXWARE7 threads are not posix */ -/* #undef HAVE_UNIXWARE7_THREADS */ - -/* new UNIXWARE7 threads that are not yet posix */ -/* #undef HAVE_UNIXWARE7_POSIX */ - -/* READLINE: */ -/* #undef HAVE_USG_SIGHOLD */ - -/* Define if want -lwrap */ -/* #undef LIBWRAP */ - -/* mysql client protocoll version */ -#define PROTOCOL_VERSION 10 - -/* Define if qsort returns void */ -#define QSORT_TYPE_IS_VOID 1 - -/* Define as the return type of qsort (int or void). */ -#define RETQSORTTYPE void - -/* Define as the base type of the last arg to accept */ -#define SOCKET_SIZE_TYPE int - -/* Last argument to get/setsockopt */ -/* #undef SOCKOPT_OPTLEN_TYPE */ - -/* #undef SPEED_T_IN_SYS_TYPES */ -/* #undef SPRINTF_RETURNS_PTR */ -#define SPRINTF_RETURNS_INT 1 -/* #undef SPRINTF_RETURNS_GARBAGE */ - -/* #undef STRUCT_DIRENT_HAS_D_FILENO */ -#define STRUCT_DIRENT_HAS_D_INO 1 - -/* Define if you want to have threaded code. This may be undef on client code */ -#define THREAD 1 - -/* Should be client be thread safe */ -/* #undef THREAD_SAFE_CLIENT */ - -/* READLINE: */ -/* #undef TIOCSTAT_IN_SYS_IOCTL */ - -/* Use multi-byte character routines */ -/* #undef USE_MB */ -/* #undef USE_MB_IDENT */ - -/* Use MySQL RAID */ -/* #undef USE_RAID */ - -/* Use strcoll() functions when comparing and sorting. */ -/* #undef USE_STRCOLL */ - -/* READLINE: */ -#define VOID_SIGHANDLER 1 - -/* The number of bytes in a char. */ -#define SIZEOF_CHAR 1 - -/* The number of bytes in a int. */ -#define SIZEOF_INT 4 - -/* The number of bytes in a long. */ -#define SIZEOF_LONG 4 - -/* The number of bytes in a long long. */ -#define SIZEOF_LONG_LONG 8 - -/* Define if you have the alarm function. */ -#define HAVE_ALARM 1 - -/* Define if you have the atod function. */ -/* #undef HAVE_ATOD */ - -/* Define if you have the bcmp function. */ -#define HAVE_BCMP 1 - -/* Define if you have the bfill function. */ -/* #undef HAVE_BFILL */ - -/* Define if you have the bmove function. */ -/* #undef HAVE_BMOVE */ - -/* Define if you have the bzero function. */ -#define HAVE_BZERO 1 - -/* Define if you have the chsize function. */ -#define HAVE_CHSIZE 1 - -/* Define if you have the cuserid function. */ -/* #define HAVE_CUSERID 1 */ - -/* Define if you have the dlerror function. */ -#define HAVE_DLERROR 1 - -/* Define if you have the dlopen function. */ -#define HAVE_DLOPEN 1 - -/* Define if you have the fchmod function. */ -/* #undef HAVE_FCHMOD */ - -/* Define if you have the fcntl function. */ -/* #define HAVE_FCNTL 1 */ - -/* Define if you have the fconvert function. */ -/* #undef HAVE_FCONVERT */ - -/* Define if you have the finite function. */ -/* #undef HAVE_FINITE */ - -/* Define if you have the fpresetsticky function. */ -/* #undef HAVE_FPRESETSTICKY */ - -/* Define if you have the fpsetmask function. */ -/* #undef HAVE_FPSETMASK */ - -/* Define if you have the fseeko function. */ -/* #undef HAVE_FSEEKO */ - -/* Define if you have the ftruncate function. */ -/* #define HAVE_FTRUNCATE 1 */ - -/* Define if you have the getcwd function. */ -#define HAVE_GETCWD 1 - -/* Define if you have the gethostbyaddr_r function. */ -/* #undef HAVE_GETHOSTBYADDR_R */ - -/* Define if you have the gethostbyname_r function. */ -/* #undef HAVE_GETHOSTBYNAME_R */ - -/* Define if you have the getpagesize function. */ -#define HAVE_GETPAGESIZE 1 - -/* Define if you have the getpass function. */ -/*#define HAVE_GETPASS 1 */ - -/* Define if you have the getpassphrase function. */ -/* #undef HAVE_GETPASSPHRASE */ - -/* Define if you have the getpwnam function. */ -/* #define HAVE_GETPWNAM 1 */ - -/* Define if you have the getpwuid function. */ -/* #define HAVE_GETPWUID 1 */ - -/* Define if you have the getrlimit function. */ -/* #undef HAVE_GETRLIMIT */ - -/* Define if you have the getrusage function. */ -/* #undef HAVE_GETRUSAGE */ - -/* Define if you have the getwd function. */ -#define HAVE_GETWD 1 - -/* Define to 1 if you have the `gmtime_r' function. */ -#define HAVE_GMTIME_R 1 - -/* Define if you have the index function. */ -#define HAVE_INDEX 1 - -/* Define if you have the initgroups function. */ -/* #undef HAVE_INITGROUPS */ - -/* Define if you have the localtime_r function. */ -#define HAVE_LOCALTIME_R 1 - -/* Define if you have the locking function. */ -/* #undef HAVE_LOCKING */ - -/* Define if you have the longjmp function. */ -#define HAVE_LONGJMP 1 - -/* Define if you have the lrand48 function. */ -/* #undef HAVE_LRAND48 */ - -/* Define if you have the lstat function. */ -/* #undef HAVE_LSTAT */ - -/* Define if you have the madvise function. */ -/* #undef HAVE_MADVISE */ - -/* Define if you have the memcpy function. */ -#define HAVE_MEMCPY 1 - -/* Define if you have the memmove function. */ -#define HAVE_MEMMOVE 1 - -/* Define if you have the mkstemp function. */ -/* #define HAVE_MKSTEMP 1 */ - -/* Define if you have the mlockall function. */ -/* #undef HAVE_MLOCKALL */ - -/* Define if you have the perror function. */ -#define HAVE_PERROR 1 - -/* Define if you have the poll function. */ -/* #undef HAVE_POLL */ - -/* Define if you have the pread function. */ -/* #undef HAVE_PREAD */ - -/* Define if you have the pthread_attr_create function. */ -/* #undef HAVE_PTHREAD_ATTR_CREATE */ - -/* Define if you have the pthread_attr_setprio function. */ -#define HAVE_PTHREAD_ATTR_SETPRIO 1 - -/* Define if you have the pthread_attr_setschedparam function. */ -/* #undef HAVE_PTHREAD_ATTR_SETSCHEDPARAM */ - -/* Define if you have the pthread_attr_setstacksize function. */ -#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 - -/* Define if you have the pthread_condattr_create function. */ -/* #undef HAVE_PTHREAD_CONDATTR_CREATE */ - -/* Define if you have the pthread_getsequence_np function. */ -/* #undef HAVE_PTHREAD_GETSEQUENCE_NP */ - -/* Define if you have the pthread_init function. */ -/* #undef HAVE_PTHREAD_INIT */ - -/* Define if you have the pthread_rwlock_rdlock function. */ -/* #undef HAVE_PTHREAD_RWLOCK_RDLOCK */ - -/* Define if you have the pthread_setprio function. */ -#define HAVE_PTHREAD_SETPRIO 1 - -/* Define if you have the pthread_setprio_np function. */ -/* #undef HAVE_PTHREAD_SETPRIO_NP */ - -/* Define if you have the pthread_setschedparam function. */ -/* #undef HAVE_PTHREAD_SETSCHEDPARAM */ - -/* Define if you have the pthread_sigmask function. */ -#define HAVE_PTHREAD_SIGMASK 1 - -/* Define if you have the putenv function. */ -#define HAVE_PUTENV 1 - -/* Define if you have the readlink function. */ -/* #undef HAVE_READLINK */ - -/* Define if you have the realpath function. */ -/* #undef HAVE_REALPATH */ - -/* Define if you have the rename function. */ -#define HAVE_RENAME 1 - -/* Define if you have the rint function. */ -#define HAVE_RINT 1 - -/* Define if you have the rwlock_init function. */ -/* #undef HAVE_RWLOCK_INIT */ - -/* Define if you have the select function. */ -#define HAVE_SELECT 1 - -/* Define if you have the setenv function. */ -/* #undef HAVE_SETENV */ - -/* Define if you have the setlocale function. */ -#define HAVE_SETLOCALE 1 - -/* Define if you have the setupterm function. */ -/* #undef HAVE_SETUPTERM */ - -/* Define if you have the sighold function. */ -/* #undef HAVE_SIGHOLD */ - -/* Define if you have the sigset function. */ -/* #undef HAVE_SIGSET */ - -/* Define if you have the sigthreadmask function. */ -/* #undef HAVE_SIGTHREADMASK */ - -/* Define if you have the snprintf function. */ -/* #define HAVE_SNPRINTF 1 */ - -/* Define if you have the socket function. */ -#define HAVE_SOCKET 1 - -/* Define if you have the stpcpy function. */ -/* #undef HAVE_STPCPY */ - -/* Define if you have the strcasecmp function. */ -/* #undef HAVE_STRCASECMP */ - -/* Define if you have the strcoll function. */ -#define HAVE_STRCOLL 1 - -/* Define if you have the strerror function. */ -#define HAVE_STRERROR 1 - -/* Define if you have the strnlen function. */ -/* #undef HAVE_STRNLEN */ - -/* Define if you have the strpbrk function. */ -#define HAVE_STRPBRK 1 - -/* Define if you have the strstr function. */ -#define HAVE_STRSTR 1 - -/* Define if you have the strtok_r function. */ -/* #undef HAVE_STRTOK_R */ - -/* Define if you have the strtol function. */ -#define HAVE_STRTOL 1 - -/* Define if you have the strtoul function. */ -#define HAVE_STRTOUL 1 - -/* Define if you have the strtoull function. */ -/* #undef HAVE_STRTOULL */ - -/* Define if you have the tcgetattr function. */ -#define HAVE_TCGETATTR 1 - -/* Define if you have the tell function. */ -#define HAVE_TELL 1 - -/* Define if you have the tempnam function. */ -#define HAVE_TEMPNAM 1 - -/* Define if you have the thr_setconcurrency function. */ -/* #undef HAVE_THR_SETCONCURRENCY */ - -/* Define if you have the vidattr function. */ -/* #undef HAVE_VIDATTR */ - -/* Define if you have the <alloca.h> header file. */ -/* #define HAVE_ALLOCA_H 1 */ - -/* Define if you have the <arpa/inet.h> header file. */ -#define HAVE_ARPA_INET_H 1 - -/* Define if you have the <asm/termbits.h> header file. */ -/* #undef HAVE_ASM_TERMBITS_H */ - -/* Define if you have the <crypt.h> header file. */ -#define HAVE_CRYPT_H 1 - -/* Define if you have the <curses.h> header file. */ -/* #define HAVE_CURSES_H 1 */ - -/* Define if you have the <dirent.h> header file. */ -/* #define HAVE_DIRENT_H 1 */ - -/* Define if you have the <fcntl.h> header file. */ -#define HAVE_FCNTL_H 1 - -/* Define if you have the <float.h> header file. */ -#define HAVE_FLOAT_H 1 - -/* Define if you have the <floatingpoint.h> header file. */ -/* #undef HAVE_FLOATINGPOINT_H */ - -/* Define if you have the <grp.h> header file. */ -/* #define HAVE_GRP_H 1 */ - -/* Define if you have the <ieeefp.h> header file. */ -/* #undef HAVE_IEEEFP_H */ - -/* Define if you have the <limits.h> header file. */ -#define HAVE_LIMITS_H 1 - -/* Define if you have the <locale.h> header file. */ -#define HAVE_LOCALE_H 1 - -/* Define if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have the <ndir.h> header file. */ -/* #undef HAVE_NDIR_H */ - -/* Define if you have the <netinet/in.h> header file. */ -#define HAVE_NETINET_IN_H 1 - -/* Define if you have the <paths.h> header file. */ -/* #undef HAVE_PATHS_H */ - -/* Define if you have the <pwd.h> header file. */ -/* #define HAVE_PWD_H 1 */ - -/* Define if you have the <sched.h> header file. */ -/* #undef HAVE_SCHED_H */ - -/* Define if you have the <select.h> header file. */ -/* #undef HAVE_SELECT_H */ - -/* Define if you have the <stdarg.h> header file. */ -#define HAVE_STDARG_H 1 - -/* Define if you have the <stddef.h> header file. */ -#define HAVE_STDDEF_H 1 - -/* Define if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the <strings.h> header file. */ -/* #define HAVE_STRINGS_H 1 */ - -/* Define if you have the <synch.h> header file. */ -/* #undef HAVE_SYNCH_H */ - -/* Define if you have the <sys/dir.h> header file. */ -/* #define HAVE_SYS_DIR_H 1 */ - -/* Define if you have the <sys/file.h> header file. */ -/* #define HAVE_SYS_FILE_H 1 */ - -/* Define if you have the <sys/ioctl.h> header file. */ -#define HAVE_SYS_IOCTL_H 1 - -/* Define if you have the <sys/mman.h> header file. */ -/* #undef HAVE_SYS_MMAN_H */ - -/* Define if you have the <sys/ndir.h> header file. */ -/* #undef HAVE_SYS_NDIR_H */ - -/* Define if you have the <sys/pte.h> header file. */ -/* #undef HAVE_SYS_PTE_H */ - -/* Define if you have the <sys/ptem.h> header file. */ -/* #undef HAVE_SYS_PTEM_H */ - -/* Define if you have the <sys/select.h> header file. */ -#define HAVE_SYS_SELECT_H 1 - -/* Define if you have the <sys/socket.h> header file. */ -#define HAVE_SYS_SOCKET_H 1 - -/* Define if you have the <sys/stream.h> header file. */ -/* #undef HAVE_SYS_STREAM_H */ - -/* Define if you have the <sys/timeb.h> header file. */ -#define HAVE_SYS_TIMEB_H 1 - -/* Define if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define if you have the <sys/un.h> header file. */ -#define HAVE_SYS_UN_H 1 - -/* Define if you have the <sys/utime.h> header file. */ -#define HAVE_SYS_UTIME_H 1 - -/* Define if you have the <sys/vadvise.h> header file. */ -/* #undef HAVE_SYS_VADVISE_H */ - -/* Define if you have the <sys/wait.h> header file. */ -/* #define HAVE_SYS_WAIT_H 1 */ - -/* Define if you have the <term.h> header file. */ -/* #undef HAVE_TERM_H */ - -/* Define if you have the <termbits.h> header file. */ -/* #undef HAVE_TERMBITS_H */ - -/* Define if you have the <termcap.h> header file. */ -/* #define HAVE_TERMCAP_H 1 */ - -/* Define if you have the <termio.h> header file. */ -/* /#define HAVE_TERMIO_H 1 */ - -/* Define if you have the <termios.h> header file. */ -/* #define HAVE_TERMIOS_H 1 */ - -/* Define if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the <utime.h> header file. */ -#define HAVE_UTIME_H 1 - -/* Define if you have the <varargs.h> header file. */ -#define HAVE_VARARGS_H 1 - -/* Define if you have the bind library (-lbind). */ -/* #undef HAVE_LIBBIND */ - -/* Define if you have the c_r library (-lc_r). */ -/* #undef HAVE_LIBC_R */ - -/* Define if you have the compat library (-lcompat). */ -/* #undef HAVE_LIBCOMPAT */ - -/* Define if you have the crypt library (-lcrypt). */ -#define HAVE_LIBCRYPT 1 - -/* Define if you have the dl library (-ldl). */ -#define HAVE_LIBDL 1 - -/* Define if you have the gen library (-lgen). */ -/* #undef HAVE_LIBGEN */ - -/* Define if you have the m library (-lm). */ -#define HAVE_LIBM 1 - -/* Define if you have the nsl library (-lnsl). */ -/* #undef HAVE_LIBNSL */ - -/* Define if you have the nsl_r library (-lnsl_r). */ -/* #undef HAVE_LIBNSL_R */ - -/* Define if you have the pthread library (-lpthread). */ -/* #undef HAVE_LIBPTHREAD */ - -/* Define if you have the socket library (-lsocket). */ -/* #undef HAVE_LIBSOCKET */ - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define to make fseeko etc. visible, on some hosts. */ -/* #undef _LARGEFILE_SOURCE */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -#endif /* __CONFIG_OS2_H__ */ diff --git a/include/config-win.h b/include/config-win.h index 14afa38c8a7afb7ff4b144b8e261a43ec6d2ce0d..b6fb1077cc6bba7c099de8b756d8e6fd41840159 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -122,12 +122,12 @@ functions */ /* Type information */ -#if defined(__EMX__) || !defined(HAVE_UINT) +#if !defined(HAVE_UINT) #undef HAVE_UINT #define HAVE_UINT typedef unsigned short ushort; typedef unsigned int uint; -#endif /* defined(__EMX__) || !defined(HAVE_UINT) */ +#endif /* !defined(HAVE_UINT) */ typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ typedef __int64 longlong; diff --git a/include/errmsg.h b/include/errmsg.h index 1dd5759c104c23ec661acf991612c0b44fddf065..4018e3ee01d8603080c328b3c871a0aab630f53f 100644 --- a/include/errmsg.h +++ b/include/errmsg.h @@ -29,9 +29,7 @@ extern const char *client_errors[]; /* Error messages */ #define CR_MIN_ERROR 2000 /* For easier client code */ #define CR_MAX_ERROR 2999 -#if defined(OS2) && defined(MYSQL_SERVER) -#define CER(X) client_errors[(X)-CR_MIN_ERROR] -#elif !defined(ER) +#if !defined(ER) #define ER(X) client_errors[(X)-CR_MIN_ERROR] #endif #define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ diff --git a/include/m_string.h b/include/m_string.h index c02ce92cd88c8df67571e417ca1b9a660356bf65..e73f5c11487a2dd0a2f3303ea3d490e6546781c0 100644 --- a/include/m_string.h +++ b/include/m_string.h @@ -34,25 +34,12 @@ /* need by my_vsnprintf */ #include <stdarg.h> -/* Correct some things for UNIXWARE7 */ -#ifdef HAVE_UNIXWARE7_THREADS -#undef HAVE_STRINGS_H -#undef HAVE_MEMORY_H -#define HAVE_MEMCPY -#ifndef HAVE_MEMMOVE -#define HAVE_MEMMOVE -#endif -#undef HAVE_BCMP -#undef bcopy -#undef bcmp -#undef bzero -#endif /* HAVE_UNIXWARE7_THREADS */ #ifdef _AIX #undef HAVE_BCMP #endif /* This is needed for the definitions of bzero... on solaris */ -#if defined(HAVE_STRINGS_H) && !defined(HAVE_mit_thread) +#if defined(HAVE_STRINGS_H) #include <strings.h> #endif @@ -84,7 +71,7 @@ # define bmove_align(A,B,C) memcpy((A),(B),(C)) #endif -#if defined(__cplusplus) && !defined(OS2) +#if defined(__cplusplus) extern "C" { #endif @@ -95,7 +82,7 @@ extern "C" { extern void *(*my_str_malloc)(size_t); extern void (*my_str_free)(void *); -#if defined(HAVE_STPCPY) && !defined(HAVE_mit_thread) +#if defined(HAVE_STPCPY) #define strmov(A,B) stpcpy((A),(B)) #ifndef stpcpy extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ @@ -243,7 +230,7 @@ longlong my_strtoll10(const char *nptr, char **endptr, int *error); #ifdef HAVE_LONG_LONG extern char *longlong2str(longlong val,char *dst,int radix); extern char *longlong10_to_str(longlong val,char *dst,int radix); -#if (!defined(HAVE_STRTOULL) || defined(HAVE_mit_thread)) || defined(NO_STRTOLL_PROTO) +#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) extern longlong strtoll(const char *str, char **ptr, int base); extern ulonglong strtoull(const char *str, char **ptr, int base); #endif @@ -256,7 +243,7 @@ extern int my_vsnprintf( char *str, size_t n, const char *format, va_list ap ); extern int my_snprintf(char* to, size_t n, const char* fmt, ...); -#if defined(__cplusplus) && !defined(OS2) +#if defined(__cplusplus) } #endif #endif diff --git a/include/my_bitmap.h b/include/my_bitmap.h index 8afeb1b81073266094a93e562443b89122f322da..428ca7dc70232c991c873392c3611ac45ed7262c 100644 --- a/include/my_bitmap.h +++ b/include/my_bitmap.h @@ -60,6 +60,8 @@ extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size); extern void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2); extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2); extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_invert(MY_BITMAP *map); extern uint bitmap_lock_set_next(MY_BITMAP *map); extern void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit); diff --git a/include/my_global.h b/include/my_global.h index ecee9c637c924e8ab3f012499c09aa7e7135f52e..cd0eda8aa450b6131f68192998b509bc71ad67ca 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -24,13 +24,6 @@ #define HAVE_EXTERNAL_CLIENT #endif -#if defined( __EMX__) && !defined( MYSQL_SERVER) -/* moved here to use below VOID macro redefinition */ -#define INCL_BASE -#define INCL_NOPMAPI -#include <os2.h> -#endif /* __EMX__ */ - #ifdef __CYGWIN__ /* We use a Unix API, so pretend it's not Windows */ #undef WIN @@ -72,8 +65,6 @@ #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) #include <config-win.h> -#elif defined(OS2) -#include <config-os2.h> #elif defined(__NETWARE__) #include <my_config.h> #include <config-netware.h> @@ -215,10 +206,8 @@ /* The client defines this to avoid all thread code */ #if defined(UNDEF_THREADS_HACK) #undef THREAD -#undef HAVE_mit_thread #undef HAVE_LINUXTHREADS #undef HAVE_NPTL -#undef HAVE_UNIXWARE7_THREADS #endif #ifdef HAVE_THREADS_WITHOUT_SOCKETS @@ -263,7 +252,7 @@ #endif #endif -#if defined(THREAD) && !defined(__WIN__) && !defined(OS2) +#if defined(THREAD) && !defined(__WIN__) #ifndef _POSIX_PTHREAD_SEMANTICS #define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ #endif @@ -274,10 +263,6 @@ #if !defined(_THREAD_SAFE) && !defined(_AIX) #define _THREAD_SAFE /* Required for OSF1 */ #endif -#ifndef HAVE_mit_thread -#ifdef HAVE_UNIXWARE7_THREADS -#include <thread.h> -#else #if defined(HPUX10) || defined(HPUX11) C_MODE_START /* HPUX needs this, signal.h bug */ #include <pthread.h> @@ -285,8 +270,6 @@ C_MODE_END #else #include <pthread.h> /* AIX must have this included first */ #endif -#endif /* HAVE_UNIXWARE7_THREADS */ -#endif /* HAVE_mit_thread */ #if !defined(SCO) && !defined(_REENTRANT) #define _REENTRANT 1 /* Threads requires reentrant code */ #endif @@ -468,9 +451,7 @@ extern "C" int madvise(void *addr, size_t len, int behav); #define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */ #define USE_REGEX 1 /* We want the use the regex library */ /* Do not define for ultra sparcs */ -#ifndef OS2 #define USE_BMOVE512 1 /* Use this unless system bmove is faster */ -#endif #define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ #define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ @@ -515,7 +496,7 @@ int __void__; #define min(a, b) ((a) < (b) ? (a) : (b)) #endif -#if defined(__EMX__) || !defined(HAVE_UINT) +#if !defined(HAVE_UINT) #undef HAVE_UINT #define HAVE_UINT typedef unsigned int uint; @@ -618,21 +599,11 @@ C_MODE_START typedef int (*qsort_cmp)(const void *,const void *); typedef int (*qsort_cmp2)(void*, const void *,const void *); C_MODE_END -#ifdef HAVE_mit_thread -#define qsort_t void -#undef QSORT_TYPE_IS_VOID -#define QSORT_TYPE_IS_VOID -#else #define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ -#endif -#ifdef HAVE_mit_thread -#define size_socket socklen_t /* Type of last arg to accept */ -#else #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif typedef SOCKET_SIZE_TYPE size_socket; -#endif #ifndef SOCKOPT_OPTLEN_TYPE #define SOCKOPT_OPTLEN_TYPE size_socket @@ -693,14 +664,9 @@ typedef SOCKET_SIZE_TYPE size_socket; #define FN_DEVCHAR ':' #ifndef FN_LIBCHAR -#ifdef __EMX__ -#define FN_LIBCHAR '\\' -#define FN_ROOTDIR "\\" -#else #define FN_LIBCHAR '/' #define FN_ROOTDIR "/" #endif -#endif #define MY_NFILE 64 /* This is only used to save filenames */ #ifndef OS_FILE_LIMIT #define OS_FILE_LIMIT 65535 @@ -747,11 +713,7 @@ typedef SOCKET_SIZE_TYPE size_socket; #undef remove /* Crashes MySQL on SCO 5.0.0 */ #ifndef __WIN__ -#ifdef OS2 -#define closesocket(A) soclose(A) -#else #define closesocket(A) close(A) -#endif #ifndef ulonglong2double #define ulonglong2double(A) ((double) (ulonglong) (A)) #define my_off_t2double(A) ((double) (my_off_t) (A)) @@ -764,21 +726,10 @@ typedef SOCKET_SIZE_TYPE size_socket; #define ulong_to_double(X) ((double) (ulong) (X)) #define SET_STACK_SIZE(X) /* Not needed on real machines */ -#if !defined(HAVE_mit_thread) && !defined(HAVE_STRTOK_R) +#if !defined(HAVE_STRTOK_R) #define strtok_r(A,B,C) strtok((A),(B)) #endif -/* Remove some things that mit_thread break or doesn't support */ -#if defined(HAVE_mit_thread) && defined(THREAD) -#undef HAVE_PREAD -#undef HAVE_REALPATH -#undef HAVE_MLOCK -#undef HAVE_TEMPNAM /* Use ours */ -#undef HAVE_PTHREAD_SETPRIO -#undef HAVE_FTRUNCATE -#undef HAVE_READLINK -#endif - /* This is from the old m-machine.h file */ #if SIZEOF_LONG_LONG > 4 @@ -960,7 +911,7 @@ typedef ulonglong my_off_t; typedef unsigned long my_off_t; #endif #define MY_FILEPOS_ERROR (~(my_off_t) 0) -#if !defined(__WIN__) && !defined(OS2) +#if !defined(__WIN__) typedef off_t os_off_t; #endif @@ -973,16 +924,6 @@ typedef off_t os_off_t; #define SOCKET_EADDRINUSE WSAEADDRINUSE #define SOCKET_ENFILE ENFILE #define SOCKET_EMFILE EMFILE -#elif defined(OS2) -#define socket_errno sock_errno() -#define SOCKET_EINTR SOCEINTR -#define SOCKET_EAGAIN SOCEINPROGRESS -#define SOCKET_ETIMEDOUT SOCKET_EINTR -#define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK -#define SOCKET_EADDRINUSE SOCEADDRINUSE -#define SOCKET_ENFILE SOCENFILE -#define SOCKET_EMFILE SOCEMFILE -#define closesocket(A) soclose(A) #else /* Unix */ #define socket_errno errno #define closesocket(A) close(A) diff --git a/include/my_net.h b/include/my_net.h index 71914964e46e5078a5e08889cd5dcd692bafa155..f953a832e6b6962796e4ae78ce82213c48aa2ed5 100644 --- a/include/my_net.h +++ b/include/my_net.h @@ -53,12 +53,6 @@ C_MODE_START #endif #endif -#if defined(__EMX__) -#include <sys/ioctl.h> -#define ioctlsocket(A,B,C) ioctl((A),(B),(void *)(C),sizeof(*(C))) -#undef HAVE_FCNTL -#endif /* defined(__EMX__) */ - #if defined(MSDOS) || defined(__WIN__) #define O_NONBLOCK 1 /* For emulation of fcntl() */ #endif diff --git a/include/my_no_pthread.h b/include/my_no_pthread.h index 5691de087837aa46ab4c6059007b837188b60c92..c47da5b1978217bf1d6f3289d8ae4fd0d042dfbe 100644 --- a/include/my_no_pthread.h +++ b/include/my_no_pthread.h @@ -26,11 +26,7 @@ even in non-threaded builds. Case in point: 'mf_keycache.c' */ -#if defined(__WIN__) || defined(OS2) - -#elif defined(HAVE_UNIXWARE7_THREADS) -/* #include <thread.h> Currently, not relevant. Enable if needed. */ - +#if defined(__WIN__) #else /* Normal threads */ #include <pthread.h> diff --git a/include/my_pthread.h b/include/my_pthread.h index 9146cab85891ab8c492fae79c520e7b105ebc4af..acd1d2b558be960af1205ad3813e851ac8ee6595 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -31,19 +31,9 @@ extern "C" { #define EXTERNC #endif /* __cplusplus */ -#if defined(__WIN__) || defined(OS2) +#if defined(__WIN__) -#ifdef OS2 -typedef ULONG HANDLE; -typedef ULONG DWORD; -typedef int sigset_t; -#endif - -#ifdef OS2 -typedef HMTX pthread_mutex_t; -#else typedef CRITICAL_SECTION pthread_mutex_t; -#endif typedef HANDLE pthread_t; typedef struct thread_attr { DWORD dwStackSize ; @@ -62,30 +52,19 @@ typedef struct st_pthread_link { typedef struct { uint32 waiting; -#ifdef OS2 - HEV semaphore; -#else HANDLE semaphore; -#endif } pthread_cond_t; -#ifndef OS2 struct timespec { /* For pthread_cond_timedwait() */ time_t tv_sec; long tv_nsec; }; -#endif typedef int pthread_mutexattr_t; #define win_pthread_self my_thread_var->pthread_self -#ifdef OS2 -#define pthread_handler_t EXTERNC void * _Optlink -typedef void * (_Optlink *pthread_handler)(void *); -#else #define pthread_handler_t EXTERNC void * __cdecl typedef void * (__cdecl *pthread_handler)(void *); -#endif void win_pthread_init(void); int win_pthread_setspecific(void *A,void *B,uint length); @@ -107,10 +86,8 @@ struct tm *gmtime_r(const time_t *timep,struct tm *tmp); void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ -#ifndef OS2 #define ETIMEDOUT 145 /* Win32 doesn't have this */ #define getpid() GetCurrentThreadId() -#endif #define pthread_self() win_pthread_self #define HAVE_LOCALTIME_R 1 #define _REENTRANT 1 @@ -145,15 +122,6 @@ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ #endif /* USE_TLS */ #define pthread_equal(A,B) ((A) == (B)) -#ifdef OS2 -extern int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *); -extern int pthread_mutex_lock (pthread_mutex_t *); -extern int pthread_mutex_unlock (pthread_mutex_t *); -extern int pthread_mutex_destroy (pthread_mutex_t *); -#define my_pthread_setprio(A,B) DosSetPriority(PRTYS_THREAD,PRTYC_NOCHANGE, B, A) -#define pthread_kill(A,B) raise(B) -#define pthread_exit(A) pthread_dummy() -#else #define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) #define pthread_mutex_lock(A) (EnterCriticalSection(A),0) #define pthread_mutex_trylock(A) (WaitForSingleObject((A), 0) == WAIT_TIMEOUT) @@ -161,7 +129,6 @@ extern int pthread_mutex_destroy (pthread_mutex_t *); #define pthread_mutex_destroy(A) DeleteCriticalSection(A) #define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) #define pthread_kill(A,B) pthread_dummy(0) -#endif /* OS2 */ /* Dummy defines for easier code */ #define pthread_attr_setdetachstate(A,B) pthread_dummy(0) @@ -175,68 +142,6 @@ extern int pthread_mutex_destroy (pthread_mutex_t *); /*#define my_pthread_getprio(pthread_t thread_id) pthread_dummy(0) */ #define my_pthread_getprio(thread_id) pthread_dummy(0) -#elif defined(HAVE_UNIXWARE7_THREADS) - -#include <thread.h> -#include <synch.h> - -#ifndef _REENTRANT -#define _REENTRANT -#endif - -#define HAVE_NONPOSIX_SIGWAIT -#define pthread_t thread_t -#define pthread_cond_t cond_t -#define pthread_mutex_t mutex_t -#define pthread_key_t thread_key_t -typedef int pthread_attr_t; /* Needed by Unixware 7.0.0 */ - -#define pthread_key_create(A,B) thr_keycreate((A),(B)) -#define pthread_key_delete(A) thr_keydelete(A) - -#define pthread_handler_t EXTERNC void * -#define pthread_key(T,V) pthread_key_t V - -void * my_pthread_getspecific_imp(pthread_key_t key); -#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) -#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,V) - -#define pthread_setspecific(A,B) thr_setspecific(A,B) -#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,V) - -#define pthread_create(A,B,C,D) thr_create(NULL,65536L,(C),(D),THR_DETACHED,(A)) -#define pthread_cond_init(a,b) cond_init((a),USYNC_THREAD,NULL) -#define pthread_cond_destroy(a) cond_destroy(a) -#define pthread_cond_signal(a) cond_signal(a) -#define pthread_cond_wait(a,b) cond_wait((a),(b)) -#define pthread_cond_timedwait(a,b,c) cond_timedwait((a),(b),(c)) -#define pthread_cond_broadcast(a) cond_broadcast(a) - -#define pthread_mutex_init(a,b) mutex_init((a),USYNC_THREAD,NULL) -#define pthread_mutex_lock(a) mutex_lock(a) -#define pthread_mutex_unlock(a) mutex_unlock(a) -#define pthread_mutex_destroy(a) mutex_destroy(a) - -#define pthread_self() thr_self() -#define pthread_exit(A) thr_exit(A) -#define pthread_equal(A,B) (((A) == (B)) ? 1 : 0) -#define pthread_kill(A,B) thr_kill((A),(B)) -#define HAVE_PTHREAD_KILL - -#define pthread_sigmask(A,B,C) thr_sigsetmask((A),(B),(C)) - -extern int my_sigwait(const sigset_t *set,int *sig); - -#define pthread_detach_this_thread() pthread_dummy(0) - -#define pthread_attr_init(A) pthread_dummy(0) -#define pthread_attr_destroy(A) pthread_dummy(0) -#define pthread_attr_setscope(A,B) pthread_dummy(0) -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define my_pthread_setprio(A,B) pthread_dummy (0) -#define my_pthread_getprio(A) pthread_dummy (0) -#define my_pthread_attr_setprio(A,B) pthread_dummy(0) - #else /* Normal threads */ #ifdef HAVE_rts_threads @@ -257,9 +162,6 @@ extern int my_sigwait(const sigset_t *set,int *sig); #ifdef HAVE_SYNCH_H #include <synch.h> #endif -#if defined(__EMX__) && (!defined(EMX_PTHREAD_REV) || (EMX_PTHREAD_REV < 2)) -#error Requires at least rev 2 of EMX pthreads library. -#endif #ifdef __NETWARE__ void my_pthread_exit(void *status); @@ -285,21 +187,6 @@ extern int my_pthread_create_detached; #define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL #define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL #define USE_ALARM_THREAD -#elif defined(HAVE_mit_thread) -#define USE_ALARM_THREAD -#undef HAVE_LOCALTIME_R -#define HAVE_LOCALTIME_R -#undef HAVE_GMTIME_R -#define HAVE_GMTIME_R -#undef HAVE_PTHREAD_ATTR_SETSCOPE -#define HAVE_PTHREAD_ATTR_SETSCOPE -#undef HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE /* If we are running linux */ -#undef HAVE_RWLOCK_T -#undef HAVE_RWLOCK_INIT -#undef HAVE_PTHREAD_RWLOCK_RDLOCK -#undef HAVE_SNPRINTF - -#define my_pthread_attr_setprio(A,B) #endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ #if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 @@ -327,7 +214,7 @@ extern int my_pthread_cond_init(pthread_cond_t *mp, #define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) #endif -#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) +#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ #endif @@ -382,15 +269,12 @@ extern int my_pthread_cond_timedwait(pthread_cond_t *cond, #define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C)) #endif -#if defined(OS2) -#define my_pthread_getspecific(T,A) ((T) &(A)) -#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A)) -#elif !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) +#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) #define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) #else #define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) void *my_pthread_getspecific_imp(pthread_key_t key); -#endif /* OS2 */ +#endif #ifndef HAVE_LOCALTIME_R struct tm *localtime_r(const time_t *clock, struct tm *res); diff --git a/include/my_sys.h b/include/my_sys.h index 26bf31ae10d579a3dd2989c8b4d0efdca3bcb229..51883e8d6f96282db181a343716c61e447c519e7 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -608,6 +608,7 @@ extern File my_sopen(const char *path, int oflag, int shflag, int pmode); #define my_access access #endif extern int check_if_legal_filename(const char *path); +extern int check_if_legal_tablename(const char *path); #ifndef TERMINATE extern void TERMINATE(FILE *file); diff --git a/include/mysql.h b/include/mysql.h index 925a452537858ad8307a7a49b87ce4bc4934fb4c..6217ce631b527aa35f360e6b76a5c05c76a75805 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -409,6 +409,7 @@ MYSQL * STDCALL mysql_init(MYSQL *mysql); my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher); +const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db); MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, diff --git a/include/thr_alarm.h b/include/thr_alarm.h index 7a10d6886ce4cb82ccd6d0c14daefffc5cf14ad9..c49bc2588d15cec1530d608d92103538502fd82a 100644 --- a/include/thr_alarm.h +++ b/include/thr_alarm.h @@ -73,14 +73,6 @@ typedef struct st_thr_alarm_entry rf_SetTimer crono; } thr_alarm_entry; -#elif defined(__EMX__) || defined(OS2) - -typedef struct st_thr_alarm_entry -{ - uint crono; - uint event; -} thr_alarm_entry; - #else /* System with posix threads */ typedef int thr_alarm_entry; diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared index a641bdf2f1041e87416af833b97a4215926cfc3d..c2d98a810421c4bb738974b13bcf8fe767c85bc7 100644 --- a/libmysql/Makefile.shared +++ b/libmysql/Makefile.shared @@ -85,6 +85,7 @@ DEFS = -DDEFAULT_CHARSET_HOME="\"$(MYSQLBASEdir)\"" \ -DDATADIR="\"$(MYSQLDATAdir)\"" \ -DDEFAULT_HOME_ENV=MYSQL_HOME \ -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX \ + -DDEFAULT_SYSCONFDIR="\"$(sysconfdir)\"" \ -DSHAREDIR="\"$(MYSQLSHAREdir)\"" $(target_defs) if HAVE_YASSL diff --git a/libmysql/dll.c b/libmysql/dll.c index b0e4b9cab3b0f12db4898a3501d16820af71838e..f5db0bb466908c29e24ed3cd39d2c732b41192d4 100644 --- a/libmysql/dll.c +++ b/libmysql/dll.c @@ -112,26 +112,3 @@ int _export FAR PASCAL libmain(HANDLE hModule,short cbHeapSize, } #endif - -#ifdef OS2 - -/* - This function is called automatically by _DLL_InitTerm - Every dll runtime enviroment is not tz enabled, so tzset() - must be called to enable TZ handling - Also timezone is fixed. -*/ - -extern "C" unsigned long _System DllMain(unsigned long modhandle, - unsigned long flag) -{ - if (flag == 0) { - tzset(); /* Set tzname */ - time_t currentTime = time(NULL); - struct tm *ts = localtime(¤tTime); - if (ts->tm_isdst > 0) - _timezone -= 3600; - } -} - -#endif diff --git a/libmysql/get_password.c b/libmysql/get_password.c index e55e77320f0750b25489cff4af684c14e17117fc..a48cb6d7a6ec3e4455ad2e959fc63eb0878447b3 100644 --- a/libmysql/get_password.c +++ b/libmysql/get_password.c @@ -36,7 +36,7 @@ #include <pwd.h> #endif /* HAVE_PWD_H */ #else /* ! HAVE_GETPASS */ -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) #include <sys/ioctl.h> #ifdef HAVE_TERMIOS_H /* For tty-password */ #include <termios.h> @@ -65,7 +65,7 @@ #define getpass(A) getpassphrase(A) #endif -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) /* were just going to fake it here and get input from the keyboard */ #ifdef __NETWARE__ diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 3406d6066928a19987e4388c197d1cc8c91bb9a8..b750e9cc4b25e003058db100aec1265b69600480 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -739,7 +739,7 @@ void read_user_name(char *name) strmake(name, str ? str : "UNKNOWN_USER", USERNAME_LENGTH); } -#elif !defined(MSDOS) && ! defined(VMS) && !defined(__WIN__) && !defined(OS2) +#elif !defined(MSDOS) && ! defined(VMS) && !defined(__WIN__) void read_user_name(char *name) { diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index a469c67c46681204ab5753b51eede07c0f904656..cf45e20a6974465d2a8ce024d9e8203a2a89c6d1 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -65,6 +65,7 @@ EXPORTS mysql_get_proto_info mysql_get_server_info mysql_get_client_version + mysql_get_ssl_cipher mysql_info mysql_init mysql_insert_id diff --git a/libmysql/manager.c b/libmysql/manager.c index 631bfa26cb228a75ee8731998a0b2560df21d674..a88c63123b0604b57b27144fb873fb4d4d19be2c 100644 --- a/libmysql/manager.c +++ b/libmysql/manager.c @@ -35,9 +35,7 @@ #include <signal.h> #include <errno.h> -#if defined(OS2) -# include <sys/un.h> -#elif defined(__NETWARE__) +#if defined(__NETWARE__) #include <netdb.h> #include <sys/select.h> #include <sys/utsname.h> diff --git a/libmysql/mytest.c b/libmysql/mytest.c index a1dc13db39f0cedd9ec07fd9d5adfb83c84b9269..e1acf3e21369999a3547b89afbbe4563fb922ac0 100644 --- a/libmysql/mytest.c +++ b/libmysql/mytest.c @@ -1,54 +1,103 @@ /*C4*/ + /****************************************************************/ + /* Author: Jethro Wright, III TS : 3/ 4/1998 9:15 */ + /* Date: 02/18/1998 */ + /* mytest.c : do some testing of the libmySQL.DLL.... */ + /* */ + /* History: */ + /* 02/18/1998 jw3 also sprach zarathustra.... */ + /****************************************************************/ + + + #include <windows.h> + #include <stdio.h> + #include <string.h> + + #include <mysql.h> + + #define DEFALT_SQL_STMT "SELECT * FROM db" + #ifndef offsetof + #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + #endif + + + /******************************************************** + ** + ** main :- + ** + ********************************************************/ + + int + main( int argc, char * argv[] ) + { + + char szSQL[ 200 ], aszFlds[ 25 ][ 25 ], szDB[ 50 ] ; + const char *pszT; int i, j, k, l, x ; + MYSQL * myData ; + MYSQL_RES * res ; + MYSQL_FIELD * fd ; + MYSQL_ROW row ; + + //....just curious.... + printf( "sizeof( MYSQL ) == %d\n", (int) sizeof( MYSQL ) ) ; if ( argc == 2 ) + { + strcpy( szDB, argv[ 1 ] ) ; + strcpy( szSQL, DEFALT_SQL_STMT ) ; + if (!strcmp(szDB,"--debug")) + { + strcpy( szDB, "mysql" ) ; + printf("Some mysql struct information (size and offset):\n"); + printf("net:\t%3d %3d\n",(int) sizeof(myData->net), (int) offsetof(MYSQL,net)); printf("host:\t%3d %3d\n",(int) sizeof(myData->host), @@ -75,101 +124,199 @@ main( int argc, char * argv[] ) printf("options:\t%3d %3d\n",(int) sizeof(myData->options), (int) offsetof(MYSQL,options)); puts(""); + } + } + else if ( argc > 2 ) { + strcpy( szDB, argv[ 1 ] ) ; + strcpy( szSQL, argv[ 2 ] ) ; + } + else { + strcpy( szDB, "mysql" ) ; + strcpy( szSQL, DEFALT_SQL_STMT ) ; + } + //.... + + if ( (myData = mysql_init((MYSQL*) 0)) && + mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT, + NULL, 0 ) ) + { + myData->reconnect= 1; if ( mysql_select_db( myData, szDB ) < 0 ) { + printf( "Can't select the %s database !\n", szDB ) ; + mysql_close( myData ) ; + return 2 ; + } + } + else { + printf( "Can't connect to the mysql server on port %d !\n", + MYSQL_PORT ) ; + mysql_close( myData ) ; + return 1 ; + } + //.... + if ( ! mysql_query( myData, szSQL ) ) { + res = mysql_store_result( myData ) ; + i = (int) mysql_num_rows( res ) ; l = 1 ; + printf( "Query: %s\nNumber of records found: %ld\n", szSQL, i ) ; + //....we can get the field-specific characteristics here.... + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + //.... + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Record #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + mysql_free_result( res ) ; + } + else printf( "Couldn't execute %s on the server !\n", szSQL ) ; + //.... + puts( "==== Diagnostic info ====" ) ; + pszT = mysql_get_client_info() ; + printf( "Client info: %s\n", pszT ) ; + //.... + pszT = mysql_get_host_info( myData ) ; + printf( "Host info: %s\n", pszT ) ; + //.... + pszT = mysql_get_server_info( myData ) ; + printf( "Server info: %s\n", pszT ) ; + //.... + res = mysql_list_processes( myData ) ; l = 1 ; + if (res) + { + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Process #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + } + else + { + printf("Got error %s when retreiving processlist\n",mysql_error(myData)); + } + //.... + res = mysql_list_tables( myData, "%" ) ; l = 1 ; + for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ ) + strcpy( aszFlds[ x ], fd->name ) ; + while ( row = mysql_fetch_row( res ) ) { + j = mysql_num_fields( res ) ; + printf( "Table #%ld:-\n", l++ ) ; + for ( k = 0 ; k < j ; k++ ) + printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ], + (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ; + puts( "==============================\n" ) ; + } + //.... + pszT = mysql_stat( myData ) ; + puts( pszT ) ; + //.... + mysql_close( myData ) ; + return 0 ; + + } + diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am index d28f31b2258a1bdfe0f24a8a8c0a03ef8ea22ca9..a1ccbca48e549cfc80273b5247dc1504d4c77ee2 100644 --- a/libmysql_r/Makefile.am +++ b/libmysql_r/Makefile.am @@ -29,8 +29,6 @@ INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \ ## automake barfs if you don't use $(srcdir) or $(top_srcdir) in include include $(top_srcdir)/libmysql/Makefile.shared -libmysql_dir = $(top_srcdir)/libmysql - libmysqlclient_r_la_SOURCES = $(target_sources) libmysqlclient_r_la_LIBADD = $(target_libadd) $(yassl_las) libmysqlclient_r_la_LDFLAGS = $(target_ldflags) @@ -38,7 +36,12 @@ libmysqlclient_r_la_LDFLAGS = $(target_ldflags) # This is called from the toplevel makefile link_sources: set -x; \ - for f in `cd $(libmysql_dir) && echo *.[ch]`; do \ + for f in `cd $(top_srcdir)/libmysql && echo *.[ch]`; do \ + rm -f $$f; \ + @LN_CP_F@ $(top_srcdir)/libmysql/$$f $$f; \ + done + for f in `cd $(top_builddir)/libmysql && echo *.[ch]`; do \ rm -f $$f; \ - @LN_CP_F@ $(libmysql_dir)/$$f $$f; \ + @LN_CP_F@ $(top_builddir)/libmysql/$$f $$f; \ done + diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 961eea21d2a103af6646839e8f5423ef6765d472..a869a3ccfe9c0a99f6a1d2798076f4bd7b7ef906 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -136,12 +136,21 @@ else then \ $(libmysqld_a_AR) libmysqld.a libmysqld_int.a $(INC_LIB) ; \ else \ + current_dir=`pwd`; \ + rm -rf tmp; mkdir tmp; \ (for arc in ./libmysqld_int.a $(INC_LIB); do \ - arpath=`echo $$arc|sed 's|[^/]*$$||'`; \ - $(AR) t $$arc|xargs -n 1 find $$arpath -name; \ - $(AR) t $$arc|xargs -n 1 find `dirname $$arpath` -path \*/`basename $$arpath`/\* -name; \ + arpath=`echo $$arc|sed 's|[^/]*$$||'|sed 's|\.libs/$$||'`; \ + artmp=`echo $$arc|sed 's|^.*/|tmp/lib-|'`; \ + for F in `$(AR) t $$arc`; do \ + if test -e "$$arpath/$$F" ; then echo "$$arpath/$$F"; else \ + mkdir $$artmp; cd $$artmp > /dev/null; \ + $(AR) x ../../$$arc; \ + cd $$current_dir > /dev/null; \ + ls $$artmp/*; \ + continue 2; fi; done; \ done; echo $(libmysqld_a_DEPENDENCIES) ) | sort -u | xargs $(AR) cq libmysqld.a ; \ $(RANLIB) libmysqld.a ; \ + rm -rf tmp; \ fi endif diff --git a/libmysqld/cmakelists.txt b/libmysqld/cmakelists.txt index a11a0dffd33cdb91e015e585b2412af4b2995458..8bd0e0baa32de183306cda2f3bb72d250796d8b2 100644 --- a/libmysqld/cmakelists.txt +++ b/libmysqld/cmakelists.txt @@ -20,6 +20,10 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib ) +SET_SOURCE_FILES_PROPERTIES(${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc + ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h + PROPERTIES GENERATED 1) + ADD_LIBRARY(mysqldemb emb_qcache.cc libmysqld.c lib_sql.cc ../client/get_password.c ../libmysql/errmsg.c ../libmysql/libmysql.c ../sql/password.c ../sql-common/client.c @@ -54,11 +58,13 @@ ADD_LIBRARY(mysqldemb emb_qcache.cc libmysqld.c lib_sql.cc ../sql/sql_show.cc ../sql/sql_state.c ../sql/sql_string.cc ../sql/sql_tablespace.cc ../sql/sql_table.cc ../sql/sql_test.cc ../sql/sql_trigger.cc ../sql/sql_udf.cc ../sql/sql_union.cc - ../sql/sql_update.cc ../sql/sql_view.cc ../sql/sql_yacc.cc + ../sql/sql_update.cc ../sql/sql_view.cc ../sql/strfunc.cc ../sql/table.cc ../sql/thr_malloc.cc ../sql/time.cc ../sql/tztime.cc ../sql/uniques.cc ../sql/unireg.cc ../sql/partition_info.cc ../vio/vio.c - ../vio/viosocket.c ../vio/viossl.c ../vio/viosslfactories.c) + ../vio/viosocket.c ../vio/viossl.c ../vio/viosslfactories.c + ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc + ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h) # Seems we cannot make a library without at least one source file. So use a # dummy empty file diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 70022d526a5d2bd5ddec873e0245437116cc755e..9e763df8a0a3988dd67c1d6c9cb807c081bba032 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -274,7 +274,6 @@ static int emb_stmt_execute(MYSQL_STMT *stmt) { DBUG_ENTER("emb_stmt_execute"); char header[5]; - MYSQL_DATA *res; THD *thd; int4store(header, stmt->stmt_id); @@ -1033,7 +1032,6 @@ void Protocol_simple::prepare_for_resend() data->embedded_info->prev_ptr= &cur->next; next_field=cur->data; next_mysql_field= data->embedded_info->fields_list; -err: DBUG_VOID_RETURN; } diff --git a/libmysqld/libmysqld.def b/libmysqld/libmysqld.def index 8b930c1ba1e2d9112dd16ea125f91c123474cfb1..0d7eae9cade75c53b7c207c21850f93b99108efb 100644 --- a/libmysqld/libmysqld.def +++ b/libmysqld/libmysqld.def @@ -59,6 +59,7 @@ EXPORTS mysql_get_host_info mysql_get_proto_info mysql_get_server_info + mysql_get_ssl_cipher mysql_info mysql_init mysql_insert_id diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 067435f01896176d256fb9b6bdbf504968e5da56..8ddf7668844e862e6a759d8918c81d9035e064c4 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -27,14 +27,12 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) GENSCRIPTS = mysql-test-run install_test_db PRESCRIPTS = mysql-test-run.pl test_SCRIPTS = $(GENSCRIPTS) $(PRESCRIPTS) -test_DATA = std_data/client-key.pem std_data/client-cert.pem std_data/cacert.pem \ - std_data/server-cert.pem std_data/server-key.pem -CLEANFILES = $(GENSCRIPTS) $(test_DATA) +test_DATA = std_data/client-key.pem std_data/client-cert.pem \ + std_data/cacert.pem std_data/server-cert.pem \ + std_data/server-key.pem +CLEANFILES = $(GENSCRIPTS) INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I.. -EXTRA_PROGRAMS = mysql_test_run_new -noinst_HEADERS = my_manage.h -mysql_test_run_new_SOURCES= mysql_test_run_new.c my_manage.c my_create_tables.c dist-hook: @@ -106,17 +104,6 @@ install-data-local: uninstall-local: @RM@ -f -r $(DESTDIR)$(testdir) -std_data/client-key.pem: - @CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data -std_data/client-cert.pem: - @CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data -std_data/cacert.pem: - @CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data -std_data/server-cert.pem: - @CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data -std_data/server-key.pem: - @CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data - SUFFIXES = .sh .sh: diff --git a/mysql-test/extra/rpl_tests/rpl_ddl.test b/mysql-test/extra/rpl_tests/rpl_ddl.test index 0d9f390531f7854ff3ad181b2ae316743b21ad04..4aab45db18b30b6745c9e18ea8bd0b986a3bc8c8 100644 --- a/mysql-test/extra/rpl_tests/rpl_ddl.test +++ b/mysql-test/extra/rpl_tests/rpl_ddl.test @@ -507,4 +507,5 @@ DROP DATABASE IF EXISTS mysqltest2; DROP DATABASE IF EXISTS mysqltest3; --enable_warnings +-- source include/master-slave-end.inc diff --git a/mysql-test/extra/rpl_tests/rpl_log.test b/mysql-test/extra/rpl_tests/rpl_log.test index 0c638281ecba5a1bffabe8a389c3749508fdb25c..116bdd1028e74b561d67d64ef578e3b8a5e33e9d 100644 --- a/mysql-test/extra/rpl_tests/rpl_log.test +++ b/mysql-test/extra/rpl_tests/rpl_log.test @@ -77,6 +77,11 @@ connection slave; # to go into the relay log (the master always sends a fake one when replication # starts). start slave; +# +# This is timing out in pushbuild and should be changed to use +# wait_slave_status.inc +# +sleep 2; sync_with_master; flush logs; stop slave; diff --git a/mysql-test/extra/rpl_tests/rpl_ndb_2multi_eng.test b/mysql-test/extra/rpl_tests/rpl_ndb_2multi_eng.test index 014a72db30edf91ca28d3cc79d3820fd996f183e..7f19245c0b96ac3a0c191bce3ba3f43ba856c0c5 100644 --- a/mysql-test/extra/rpl_tests/rpl_ndb_2multi_eng.test +++ b/mysql-test/extra/rpl_tests/rpl_ndb_2multi_eng.test @@ -51,8 +51,8 @@ SHOW CREATE TABLE t1; # Okay lets see how it holds up to table changes --echo --- Check that simple Alter statements are replicated correctly -- -ALTER TABLE t1 MODIFY vc TEXT; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total); +ALTER TABLE t1 MODIFY vc TEXT; --echo --- Show the new improved table on the master --- @@ -117,6 +117,7 @@ SHOW CREATE TABLE t1; --echo --- Check that simple Alter statements are replicated correctly --- +ALTER TABLE t1 ADD PRIMARY KEY(t,id); ALTER TABLE t1 MODIFY vc TEXT; --echo --- Show the new improved table on the master --- @@ -183,6 +184,7 @@ SHOW CREATE TABLE t1; --echo --- Check that simple Alter statements are replicated correctly --- +ALTER TABLE t1 ADD PRIMARY KEY(id); ALTER TABLE t1 MODIFY vc TEXT; --echo --- Show the new improved table on the master --- @@ -239,6 +241,7 @@ SHOW CREATE TABLE t1; --echo --- Check that simple Alter statements are replicated correctly --- +ALTER TABLE t1 ADD PRIMARY KEY(t,id); ALTER TABLE t1 MODIFY vc TEXT; --echo --- Show the new improved table on the master --- diff --git a/mysql-test/extra/rpl_tests/rpl_row_UUID.test b/mysql-test/extra/rpl_tests/rpl_row_UUID.test index d1d6178773b3caf16132ab36cc9c9bab4bd48835..962572d3aec7faeec4957be90c6ffe1cb8435e88 100644 --- a/mysql-test/extra/rpl_tests/rpl_row_UUID.test +++ b/mysql-test/extra/rpl_tests/rpl_row_UUID.test @@ -80,3 +80,4 @@ DROP TABLE test.t2; # be removed at next testsuite run. # End of 5.0 test case +-- source include/master-slave-end.inc diff --git a/mysql-test/extra/rpl_tests/rpl_row_blob.test b/mysql-test/extra/rpl_tests/rpl_row_blob.test index 14449e0a01813ea9c49a387f5a491cebce4cf99e..75a2dc2cf9e18f697f6a9979a2680551e5370846 100644 --- a/mysql-test/extra/rpl_tests/rpl_row_blob.test +++ b/mysql-test/extra/rpl_tests/rpl_row_blob.test @@ -183,3 +183,9 @@ connection master; DROP TABLE IF EXISTS test.t1; DROP TABLE IF EXISTS test.t2; +# ensure cleanup on slave as well: +# ndb blob tables consist of several tables +# if cluster is shutdown while not all tables are +# properly dropped, the table becomes inconsistent +# and wrecks later test cases +--sync_slave_with_master diff --git a/mysql-test/extra/rpl_tests/rpl_sv_relay_space.test b/mysql-test/extra/rpl_tests/rpl_sv_relay_space.test index 57b74c80b5804513f23a224c84060d6487f2aeb7..3b6fe7a0ef4b00d7a24150277011f4a2136ac113 100644 --- a/mysql-test/extra/rpl_tests/rpl_sv_relay_space.test +++ b/mysql-test/extra/rpl_tests/rpl_sv_relay_space.test @@ -14,20 +14,22 @@ source include/master-slave.inc; # SHOW VARIABLES LIKE 'relay_log_space_limit'; +# Matz says: I have no idea what this is supposed to test, but it has +# potential for generating different results with some storage engines +# that process rows in an order not dependent on the insertion order. +# For instance, I would assume that distributed storage engines (like +# NDB) could process rows based on locality. + eval CREATE TABLE t1 (name varchar(64), age smallint(3))ENGINE=$engine_type; -INSERT INTO t1 SET name='Andy', age=31; -INSERT t1 SET name='Jacob', age=2; -INSERT into t1 SET name='Caleb', age=1; +INSERT INTO t1 SET name='Andy', age=31; +INSERT INTO t1 SET name='Jacob', age=2; +INSERT INTO t1 SET name='Caleb', age=1; ALTER TABLE t1 ADD id int(8) ZEROFILL AUTO_INCREMENT PRIMARY KEY; SELECT * FROM t1 ORDER BY id; -save_master_pos; -connection slave; -sync_with_master; +sync_slave_with_master; SELECT * FROM t1 ORDER BY id; connection master; -drop table t1; -save_master_pos; -connection slave; -sync_with_master; +DROP TABLE t1; +sync_slave_with_master; # End of 4.1 tests diff --git a/mysql-test/include/drop-on-restart.inc b/mysql-test/include/drop-on-restart.inc deleted file mode 100644 index af1d0d893e0390b04695e1b63c7a643264c20fac..0000000000000000000000000000000000000000 --- a/mysql-test/include/drop-on-restart.inc +++ /dev/null @@ -1,467 +0,0 @@ -# -# Stupid temporary way of cleaning up when restarting the server -# - ---disable_warnings ---disable_query_log - -drop database if exists BANK; -drop database if exists MySQLTest; -drop database if exists MySQLtesT; -drop database if exists TEST_DB; -drop database if exists `#mysql50#testdb-1`; -drop database if exists `TEST_$1`; -drop database if exists `drop-temp+table-test`; -drop database if exists `test_$1`; -drop database if exists `testdb-1`; -drop database if exists `testdb1`; -drop database if exists client_test_db; -drop database if exists d1; -drop database if exists d2; -drop database if exists db1; -drop database if exists db1_secret; -drop database if exists db2; -drop database if exists federated; -drop database if exists mysqldump_test_db; -drop database if exists mysqlslap; -drop database if exists mysqltest1; -drop database if exists mysqltest2; -drop database if exists mysqltest3; -drop database if exists mysqltest; -drop database if exists mysqltest; -drop database if exists mysqltest_1; -drop database if exists mysqltest_LC2; -drop database if exists mysqltest_bob; -drop database if exists mysqltest_db1; -drop database if exists mysqltest_prometheus; -drop database if exists mysqltest_sisyfos; -drop database if exists ndbsynctest; -drop database if exists ndbtest1; -drop database if exists rewrite; -drop database if exists test2; -drop database if exists test_only_ndb_tables; -drop database if exists test_test; -drop database if exists testdb1; -drop database if exists testtets; - -drop function if exists append; -drop function if exists bug10015_1; -drop function if exists bug10015_2; -drop function if exists bug10015_3; -drop function if exists bug10015_4; -drop function if exists bug10015_5; -drop function if exists bug10015_6; -drop function if exists bug10015_7; -drop function if exists bug10055; -drop function if exists bug10100f; -drop function if exists bug11394; -drop function if exists bug11394_1; -drop function if exists bug11394_2; -drop function if exists bug11554; -drop function if exists bug11555_1; -drop function if exists bug11555_2; -drop function if exists bug11834_1; -drop function if exists bug11834_2; -drop function if exists bug12379; -drop function if exists bug12712; -drop function if exists bug12812; -drop function if exists bug12953; -drop function if exists bug12995; -drop function if exists bug13012; -drop function if exists bug131333; -drop function if exists bug13825_0; -drop function if exists bug13825_1; -drop function if exists bug13825_2; -drop function if exists bug13825_3; -drop function if exists bug13825_4; -drop function if exists bug13825_5; -drop function if exists bug13941; -drop function if exists bug14233; -drop function if exists bug14270; -drop function if exists bug14723; -drop function if exists bug2267_4; -drop function if exists bug2564_3; -drop function if exists bug2564_4; -drop function if exists bug2674; -drop function if exists bug2772; -drop function if exists bug3132; -drop function if exists bug4487; -drop function if exists bug5240; -drop function if exists bug5278; -drop function if exists bug5893; -drop function if exists bug6022; -drop function if exists bug7049_1; -drop function if exists bug7049_2; -drop function if exists bug7648; -drop function if exists bug8408_f; -drop function if exists bug8409; -drop function if exists bug8861; -drop function if exists bug9048; -drop function if exists bug9056_func1; -drop function if exists bug9056_func2; -drop function if exists bug9102; -drop function if exists bug9559; -drop function if exists bug9775; -drop function if exists bug_13627_f; -drop function if exists bug_9503; -drop function if exists chistics; -drop function if exists e; -drop function if exists f0; -drop function if exists f10; -drop function if exists f11; -drop function if exists f12_1; -drop function if exists f12_2; -drop function if exists f1; -drop function if exists f2; -drop function if exists f3; -drop function if exists f4; -drop function if exists f5; -drop function if exists f6; -drop function if exists f7; -drop function if exists f8; -drop function if exists f9; -drop function if exists f_bug11247; -drop function if exists fac; -drop function if exists foo; -drop function if exists fun; -drop function if exists inc; -drop function if exists mul; -drop function if exists sp_vars_check_ret1; -drop function if exists sp_vars_check_ret2; -drop function if exists sp_vars_check_ret3; -drop function if exists sp_vars_check_ret4; -drop function if exists sub1; -drop function if exists sub2; -drop function if exists test.f1; - -drop procedure if exists BUG3259_2 ; -drop procedure if exists Bug3259_3 ; -drop procedure if exists ` bug15658`; -drop procedure if exists `a'b`; -drop procedure if exists a0; -drop procedure if exists a; -drop procedure if exists avg; -drop procedure if exists b2; -drop procedure if exists b; -drop procedure if exists bar; -drop procedure if exists bug10015_8; -drop procedure if exists bug10100p; -drop procedure if exists bug10100pc; -drop procedure if exists bug10100pd; -drop procedure if exists bug10100pt; -drop procedure if exists bug10100pv; -drop procedure if exists bug10100t; -drop procedure if exists bug10136; -drop procedure if exists bug10537; -drop procedure if exists bug10961; -drop procedure if exists bug10969; -drop procedure if exists bug11158; -drop procedure if exists bug11333; -drop procedure if exists bug11394; -drop procedure if exists bug11529; -drop procedure if exists bug11587; -drop procedure if exists bug12168; -drop procedure if exists bug12297; -drop procedure if exists bug12379_1; -drop procedure if exists bug12379_2; -drop procedure if exists bug12379_3; -drop procedure if exists bug12589_1; -drop procedure if exists bug12589_2; -drop procedure if exists bug12589_3; -drop procedure if exists bug12712; -drop procedure if exists bug12849_1; -drop procedure if exists bug12849_2; -drop procedure if exists bug12979_1; -drop procedure if exists bug12979_2; -drop procedure if exists bug13012; -drop procedure if exists bug13037_p1; -drop procedure if exists bug13037_p2; -drop procedure if exists bug13037_p3; -drop procedure if exists bug13095; -drop procedure if exists bug13124; -drop procedure if exists bug131333; -drop procedure if exists bug13510_1; -drop procedure if exists bug13510_2; -drop procedure if exists bug13510_3; -drop procedure if exists bug13510_4; -drop procedure if exists bug13549_1; -drop procedure if exists bug13549_2; -drop procedure if exists bug13729; -drop procedure if exists bug13825_0; -drop procedure if exists bug13825_1; -drop procedure if exists bug13825_2; -drop procedure if exists bug13941; -drop procedure if exists bug14210; -drop procedure if exists bug14233; -drop procedure if exists bug14304; -drop procedure if exists bug14376; -drop procedure if exists bug14498_1; -drop procedure if exists bug14498_2; -drop procedure if exists bug14498_3; -drop procedure if exists bug14498_4; -drop procedure if exists bug14498_5; -drop procedure if exists bug14643_1; -drop procedure if exists bug14643_2; -drop procedure if exists bug14723; -drop procedure if exists bug14840_1; -drop procedure if exists bug14840_2; -drop procedure if exists bug1495; -drop procedure if exists bug15011; -drop procedure if exists bug15091; -drop procedure if exists bug15231_1; -drop procedure if exists bug15231_2; -drop procedure if exists bug15231_3; -drop procedure if exists bug15231_4; -drop procedure if exists bug15441; -drop procedure if exists bug1547; -drop procedure if exists bug1656; -drop procedure if exists bug1862; -drop procedure if exists bug1863; -drop procedure if exists bug1874; -drop procedure if exists bug2227; -drop procedure if exists bug2260; -drop procedure if exists bug2267_1; -drop procedure if exists bug2267_2; -drop procedure if exists bug2267_3; -drop procedure if exists bug2267_4; -drop procedure if exists bug2460_1; -drop procedure if exists bug2460_2; -drop procedure if exists bug2564_1; -drop procedure if exists bug2564_2; -drop procedure if exists bug2614; -drop procedure if exists bug2656_1; -drop procedure if exists bug2656_2; -drop procedure if exists bug2773; -drop procedure if exists bug2776_1; -drop procedure if exists bug2776_2; -drop procedure if exists bug2780; -drop procedure if exists bug3157; -drop procedure if exists bug3259_1 ; -drop procedure if exists bug3294; -drop procedure if exists bug3368; -drop procedure if exists bug336; -drop procedure if exists bug3426; -drop procedure if exists bug3448; -drop procedure if exists bug3583; -drop procedure if exists bug3734 ; -drop procedure if exists bug3788; -drop procedure if exists bug3843; -drop procedure if exists bug3863; -drop procedure if exists bug4318; -drop procedure if exists bug4579_1; -drop procedure if exists bug4579_2; -drop procedure if exists bug4726; -drop procedure if exists bug4902; -drop procedure if exists bug4902_2; -drop procedure if exists bug4904; -drop procedure if exists bug4905; -drop procedure if exists bug4941; -drop procedure if exists bug5251; -drop procedure if exists bug5258; -drop procedure if exists bug5258_aux; -drop procedure if exists bug5287; -drop procedure if exists bug5307; -drop procedure if exists bug5963; -drop procedure if exists bug5967; -drop procedure if exists bug6029; -drop procedure if exists bug6063; -drop procedure if exists bug6127; -drop procedure if exists bug6129; -drop procedure if exists bug6642; -drop procedure if exists bug6807; -drop procedure if exists bug6857; -drop procedure if exists bug6866; -drop procedure if exists bug6898; -drop procedure if exists bug6900; -drop procedure if exists bug6900_9074; -drop procedure if exists bug7013; -drop procedure if exists bug7049_1; -drop procedure if exists bug7049_2; -drop procedure if exists bug7049_3; -drop procedure if exists bug7049_4; -drop procedure if exists bug7088_1; -drop procedure if exists bug7088_2; -drop procedure if exists bug7293; -drop procedure if exists bug7299; -drop procedure if exists bug7743; -drop procedure if exists bug8116; -drop procedure if exists bug822; -drop procedure if exists bug8408_p; -drop procedure if exists bug8540; -drop procedure if exists bug8692; -drop procedure if exists bug8757; -drop procedure if exists bug8762; -drop procedure if exists bug8776_1; -drop procedure if exists bug8776_2; -drop procedure if exists bug8776_3; -drop procedure if exists bug8776_4; -drop procedure if exists bug8849; -drop procedure if exists bug8850; -drop procedure if exists bug8937; -drop procedure if exists bug9004_1; -drop procedure if exists bug9004_2; -drop procedure if exists bug9056_proc1; -drop procedure if exists bug9056_proc2; -drop procedure if exists bug9073; -drop procedure if exists bug9074; -drop procedure if exists bug9367; -drop procedure if exists bug9486; -drop procedure if exists bug9538; -drop procedure if exists bug9565; -drop procedure if exists bug9565_sub; -drop procedure if exists bug9566; -drop procedure if exists bug9598_1; -drop procedure if exists bug9598_2; -drop procedure if exists bug9674_1; -drop procedure if exists bug9674_2; -drop procedure if exists bug9841; -drop procedure if exists bug9856; -drop procedure if exists bug9902; -drop procedure if exists c1; -drop procedure if exists c2; -drop procedure if exists c3; -drop procedure if exists c4; -drop procedure if exists c; -drop procedure if exists cbv1; -drop procedure if exists cbv2; -drop procedure if exists chistics; -drop procedure if exists code_sample; -drop procedure if exists create_select; -drop procedure if exists cur1; -drop procedure if exists cur2; -drop procedure if exists d; -drop procedure if exists dummy; -drop procedure if exists e; -drop procedure if exists empty; -drop procedure if exists f1; -drop procedure if exists f; -drop procedure if exists fib; -drop procedure if exists fn3; -drop procedure if exists foo42; -drop procedure if exists g; -drop procedure if exists goto1; -drop procedure if exists goto2; -drop procedure if exists goto3; -drop procedure if exists goto4; -drop procedure if exists goto5; -drop procedure if exists goto6; -drop procedure if exists h; -drop procedure if exists hndlr1; -drop procedure if exists hndlr2; -drop procedure if exists hndlr3; -drop procedure if exists hndlr4; -drop procedure if exists i; -drop procedure if exists ifac; -drop procedure if exists inc2; -drop procedure if exists inc; -drop procedure if exists incr; -drop procedure if exists into_dumpfile; -drop procedure if exists into_outfile; -drop procedure if exists into_tes2; -drop procedure if exists into_test3; -drop procedure if exists into_test4; -drop procedure if exists into_test; -drop procedure if exists iotest; -drop procedure if exists ip; -drop procedure if exists locset; -drop procedure if exists mixset; -drop procedure if exists modes; -drop procedure if exists mysqltest1.p1; -drop procedure if exists mysqltest1.p2; -drop procedure if exists nullset; -drop procedure if exists opp; -drop procedure if exists p1; -drop procedure if exists p2; -drop procedure if exists p3; -drop procedure if exists p4; -drop procedure if exists p5; -drop procedure if exists p6; -drop procedure if exists p; -drop procedure if exists p_bug11247; -drop procedure if exists rc; -drop procedure if exists scope; -drop procedure if exists sel1; -drop procedure if exists sel2; -drop procedure if exists setcontext; -drop procedure if exists sp1; -drop procedure if exists sp2; -drop procedure if exists sp3; -drop procedure if exists sp4; -drop procedure if exists sp_vars_check_assignment; -drop procedure if exists sp_vars_check_dflt; -drop procedure if exists sub1; -drop procedure if exists sub2; -drop procedure if exists sub3; -drop procedure if exists sudoku_solve; -drop procedure if exists test.longprocedure; -drop procedure if exists test.p1; -drop procedure if exists test.p2; -drop procedure if exists test.p3; -drop procedure if exists test.p4; -drop procedure if exists test.p5; -drop procedure if exists test.p6; -drop procedure if exists test.p7; -drop procedure if exists two; -drop procedure if exists zap; -drop procedure if exists zip; - -drop table if exists T1; -drop table if exists `"t"1`,t1aa,t2aa; -drop table if exists ```a`; -drop table if exists `t1 test`; -drop table if exists `t1a``b`,v1,v2,v3,v4,v5,v6; -drop table if exists `t2 test`; -drop table if exists a; -drop table if exists bug13095_t1; -drop table if exists bug13894; -drop table if exists bug14672; -drop table if exists federated.alter_me; -drop table if exists federated.archive_table; -drop table if exists federated.bug_13118_table; -drop table if exists federated.normal_table; -drop table if exists federated.t1; -drop table if exists gis_point,gis_line,gis_polygon,gis_multi_point,gis_multi_line,gis_multi_polygon,gis_geometrycollection,gis_geometry; -drop table if exists mysqltest1.t1; -drop table if exists mysqltest1.t2; -drop table if exists mysqltest1.t3; -drop table if exists mysqltest1.t4; -drop table if exists mysqltest_bar; -drop table if exists mysqltest_foo; -drop table if exists new_t2; -drop table if exists not_exist; -drop table if exists r1; -drop table if exists t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t21,t70; -drop table if exists t00,t03,t04; -drop table if exists t0_template; -drop table if exists t1Aa,t2Aa,v1Aa,v2Aa; -drop table if exists t1_1,t1_2,t9_1,t9_2,t1aa,t2aa; -drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c; -drop table if exists t1aa,t2aa; -drop table if exists t2aA,t1Aa; -drop table if exists test,test1,test2; -drop table if exists v1,v2,v3; - -drop temporary table if exists test.t1; - -# This doesn't work -#drop trigger if exists `test trig`; -#drop trigger if exists test.t1_bd; -#drop trigger if exists test.t1_bi; -#drop trigger if exists test.t1_bi_t2; -#drop trigger if exists test.t1_bu; -#drop trigger if exists test.t2_ad; -#drop trigger if exists test.t2_ai; -#drop trigger if exists test.t2_au; -#drop trigger if exists test.t3_bi_t2; - -drop view if exists bug13095_v1; -drop view if exists mysqltest1.v1; -drop view if exists mysqltest1.v2; -drop view if exists mysqltest1.v3; -drop view if exists mysqltest1.v4; -drop view if exists t1,t2,`t1a``b`; -drop view if exists t1Aa,t2Aa,v1Aa,v2Aa; -drop view if exists v0,v1,v2,v3,v4,v5,v6; - ---enable_query_log ---enable_warnings diff --git a/mysql-test/include/get_binlog_dump_thread_id.inc b/mysql-test/include/get_binlog_dump_thread_id.inc new file mode 100644 index 0000000000000000000000000000000000000000..830a88b5db66b9360aa5e18591c9ac6c80e24bf2 --- /dev/null +++ b/mysql-test/include/get_binlog_dump_thread_id.inc @@ -0,0 +1,9 @@ +--exec $MYSQL test -e 'show processlist' | grep 'Binlog Dump' | cut -f1 > $MYSQLTEST_VARDIR/tmp/bl_dump_thread_id +--disable_warnings +drop table if exists t999; +--enable_warnings +create temporary table t999 (f int); +--replace_result $MYSQLTEST_VARDIR "." +eval LOAD DATA INFILE "$MYSQLTEST_VARDIR/tmp/bl_dump_thread_id" into table t999; +let $id = `select f from t999`; +drop table t999; diff --git a/mysql-test/include/master-slave-end.inc b/mysql-test/include/master-slave-end.inc new file mode 100644 index 0000000000000000000000000000000000000000..74e4c7b608a5717fde9ae9833718997de5f98751 --- /dev/null +++ b/mysql-test/include/master-slave-end.inc @@ -0,0 +1,6 @@ +--connection master +--sync_slave_with_master +--connection slave +--disable_query_log +STOP SLAVE; +--enable_query_log diff --git a/mysql-test/include/ndb_setup_slave.inc b/mysql-test/include/ndb_setup_slave.inc new file mode 100644 index 0000000000000000000000000000000000000000..b1efeded90ba0a7063b7cd95dc85272f31fdbc69 --- /dev/null +++ b/mysql-test/include/ndb_setup_slave.inc @@ -0,0 +1,27 @@ +# +# now setup replication to continue from last epoch +# 1. get apply_status epoch from slave +# 2. get corresponding _next_ binlog postition from master +# 3. change master on slave + +# 1. +--connection slave +--replace_column 1 <the_epoch> +SELECT @the_epoch:=MAX(epoch) FROM cluster.apply_status; +--let $the_epoch= `select @the_epoch` + +# 2. +--connection master +--replace_result $the_epoch <the_epoch> +--replace_column 1 <the_pos> +eval SELECT @the_pos:=Position,@the_file:=SUBSTRING_INDEX(FILE, '/', -1) + FROM cluster.binlog_index WHERE epoch > $the_epoch ORDER BY epoch ASC LIMIT 1; +--let $the_pos= `SELECT @the_pos` +--let $the_file= `SELECT @the_file` + +# 3. +--connection slave +--replace_result $the_pos <the_pos> +eval CHANGE MASTER TO + master_log_file = '$the_file', + master_log_pos = $the_pos ; diff --git a/mysql-test/include/rpl_multi_engine3.inc b/mysql-test/include/rpl_multi_engine3.inc index be89c1907f35fe48e6973e7f2820079bfe3228ff..cc1b3f13025b90d26867ed54fda51c150eaa8859 100644 --- a/mysql-test/include/rpl_multi_engine3.inc +++ b/mysql-test/include/rpl_multi_engine3.inc @@ -41,7 +41,7 @@ SELECT id,hex(b1),vc,bc,d,f,total,y,t FROM t1 WHERE id = 412; # Must give injector thread a little time to get update # into the binlog other wise we will miss the update. -sleep 3; +sleep 10; sync_slave_with_master; --echo --- Check Update on slave --- diff --git a/mysql-test/init_db.sql b/mysql-test/init_db.sql deleted file mode 100644 index 63483af00d648e90756598d8537859b41b375cbe..0000000000000000000000000000000000000000 --- a/mysql-test/init_db.sql +++ /dev/null @@ -1,58 +0,0 @@ -CREATE DATABASE mysql; -CREATE DATABASE test; - -USE mysql; - - -CREATE TABLE db (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,PRIMARY KEY Host (Host,Db,User),KEY User (User)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges'; - -INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); -INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); - - -CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,PRIMARY KEY Host (Host,Db)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Host privileges; Merged with database privileges'; - -CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Password char(41) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,File_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,ssl_cipher BLOB NOT NULL,x509_issuer BLOB NOT NULL,x509_subject BLOB NOT NULL,max_questions int(11) unsigned DEFAULT 0 NOT NULL,max_updates int(11) unsigned DEFAULT 0 NOT NULL,max_connections int(11) unsigned DEFAULT 0 NOT NULL,PRIMARY KEY Host (Host,User)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges'; - -INSERT INTO user VALUES ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('%','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0); - -CREATE TABLE func (name char(64) binary DEFAULT '' NOT NULL,ret tinyint(1) DEFAULT '0' NOT NULL,dl char(128) DEFAULT '' NOT NULL,type enum ('function','aggregate') NOT NULL,PRIMARY KEY (name)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions'; - -CREATE TABLE tables_priv (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Table_name char(64) binary DEFAULT '' NOT NULL,Grantor char(77) DEFAULT '' NOT NULL,Timestamp timestamp(14),Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,PRIMARY KEY (Host,Db,User,Table_name),KEY Grantor (Grantor)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges'; - -CREATE TABLE columns_priv (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Table_name char(64) binary DEFAULT '' NOT NULL,Column_name char(64) binary DEFAULT '' NOT NULL,Timestamp timestamp(14),Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,PRIMARY KEY (Host,Db,User,Table_name,Column_name)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges'; - -CREATE TABLE help_topic (help_topic_id int unsigned not null,name varchar(64) not null,help_category_id smallint unsigned not null,description text not null,example text not null,url varchar(128) not null,primary key (help_topic_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help topics'; - -CREATE TABLE help_category (help_category_id smallint unsigned not null,name varchar(64) not null,parent_category_id smallint unsigned null,url varchar(128) not null,primary key (help_category_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help categories'; - -CREATE TABLE help_keyword (help_keyword_id int unsigned not null,name varchar(64) not null,primary key (help_keyword_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help keywords'; - -CREATE TABLE help_relation (help_topic_id int unsigned not null references help_topic,help_keyword_id int unsigned not null references help_keyword,primary key (help_keyword_id, help_topic_id)) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation'; - -CREATE TABLE time_zone_name (Name char(64) NOT NULL,Time_zone_id int unsigned NOT NULL,PRIMARY KEY Name (Name)) engine=MyISAM CHARACTER SET utf8 comment='Time zone names'; - -INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES ('MET', 1), ('UTC', 2), ('Universal', 2), ('Europe/Moscow',3), ('leap/Europe/Moscow',4), ('Japan', 5); - - -CREATE TABLE time_zone (Time_zone_id int unsigned NOT NULL auto_increment,Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,PRIMARY KEY TzId (Time_zone_id)) engine=MyISAM CHARACTER SET utf8 comment='Time zones'; - -INSERT INTO time_zone (Time_zone_id, Use_leap_seconds) VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N'); - - -CREATE TABLE time_zone_transition (Time_zone_id int unsigned NOT NULL,Transition_time bigint signed NOT NULL,Transition_type_id int unsigned NOT NULL,PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)) engine=MyISAM CHARACTER SET utf8 comment='Time zone transitions'; - -INSERT INTO time_zone_transition (Time_zone_id, Transition_time, Transition_type_id) VALUES (1, -1693706400, 0) ,(1, -1680483600, 1),(1, -1663455600, 2) ,(1, -1650150000, 3),(1, -1632006000, 2) ,(1, -1618700400, 3),(1, -938905200, 2) ,(1, -857257200, 3),(1, -844556400, 2) ,(1, -828226800, 3),(1, -812502000, 2) ,(1, -796777200, 3),(1, 228877200, 2) ,(1, 243997200, 3),(1, 260326800, 2) ,(1, 276051600, 3),(1, 291776400, 2) ,(1, 307501200, 3),(1, 323830800, 2) ,(1, 338950800, 3),(1, 354675600, 2) ,(1, 370400400, 3),(1, 386125200, 2) ,(1, 401850000, 3),(1, 417574800, 2) ,(1, 433299600, 3),(1, 449024400, 2) ,(1, 465354000, 3),(1, 481078800, 2) ,(1, 496803600, 3),(1, 512528400, 2) ,(1, 528253200, 3),(1, 543978000, 2) ,(1, 559702800, 3),(1, 575427600, 2) ,(1, 591152400, 3),(1, 606877200, 2) ,(1, 622602000, 3),(1, 638326800, 2) ,(1, 654656400, 3),(1, 670381200, 2) ,(1, 686106000, 3),(1, 701830800, 2) ,(1, 717555600, 3),(1, 733280400, 2) ,(1, 749005200, 3),(1, 764730000, 2) ,(1, 780454800, 3),(1, 796179600, 2) ,(1, 811904400, 3),(1, 828234000, 2) ,(1, 846378000, 3),(1, 859683600, 2) ,(1, 877827600, 3),(1, 891133200, 2) ,(1, 909277200, 3),(1, 922582800, 2) ,(1, 941331600, 3),(1, 954032400, 2) ,(1, 972781200, 3),(1, 985482000, 2) ,(1, 1004230800, 3),(1, 1017536400, 2) ,(1, 1035680400, 3),(1, 1048986000, 2) ,(1, 1067130000, 3),(1, 1080435600, 2) ,(1, 1099184400, 3),(1, 1111885200, 2) ,(1, 1130634000, 3),(1, 1143334800, 2) ,(1, 1162083600, 3),(1, 1174784400, 2) ,(1, 1193533200, 3),(1, 1206838800, 2) ,(1, 1224982800, 3),(1, 1238288400, 2) ,(1, 1256432400, 3),(1, 1269738000, 2) ,(1, 1288486800, 3),(1, 1301187600, 2) ,(1, 1319936400, 3),(1, 1332637200, 2) ,(1, 1351386000, 3),(1, 1364691600, 2) ,(1, 1382835600, 3),(1, 1396141200, 2) ,(1, 1414285200, 3),(1, 1427590800, 2) ,(1, 1445734800, 3),(1, 1459040400, 2) ,(1, 1477789200, 3),(1, 1490490000, 2) ,(1, 1509238800, 3),(1, 1521939600, 2) ,(1, 1540688400, 3),(1, 1553994000, 2) ,(1, 1572138000, 3),(1, 1585443600, 2) ,(1, 1603587600, 3),(1, 1616893200, 2) ,(1, 1635642000, 3),(1, 1648342800, 2) ,(1, 1667091600, 3),(1, 1679792400, 2) ,(1, 1698541200, 3),(1, 1711846800, 2) ,(1, 1729990800, 3),(1, 1743296400, 2) ,(1, 1761440400, 3),(1, 1774746000, 2) ,(1, 1792890000, 3),(1, 1806195600, 2) ,(1, 1824944400, 3),(1, 1837645200, 2) ,(1, 1856394000, 3),(1, 1869094800, 2) ,(1, 1887843600, 3),(1, 1901149200, 2) ,(1, 1919293200, 3),(1, 1932598800, 2) ,(1, 1950742800, 3),(1, 1964048400, 2) ,(1, 1982797200, 3),(1, 1995498000, 2) ,(1, 2014246800, 3),(1, 2026947600, 2) ,(1, 2045696400, 3),(1, 2058397200, 2) ,(1, 2077146000, 3),(1, 2090451600, 2) ,(1, 2108595600, 3),(1, 2121901200, 2) ,(1, 2140045200, 3),(3, -1688265000, 2) ,(3, -1656819048, 1),(3, -1641353448, 2) ,(3, -1627965048, 3),(3, -1618716648, 1) ,(3, -1596429048, 3),(3, -1593829848, 5) ,(3, -1589860800, 4),(3, -1542427200, 5) ,(3, -1539493200, 6),(3, -1525323600, 5) ,(3, -1522728000, 4),(3, -1491188400, 7) ,(3, -1247536800, 4),(3, 354920400, 5) ,(3, 370728000, 4),(3, 386456400, 5) ,(3, 402264000, 4),(3, 417992400, 5) ,(3, 433800000, 4),(3, 449614800, 5) ,(3, 465346800, 8),(3, 481071600, 9) ,(3, 496796400, 8),(3, 512521200, 9) ,(3, 528246000, 8),(3, 543970800, 9) ,(3, 559695600, 8),(3, 575420400, 9) ,(3, 591145200, 8),(3, 606870000, 9) ,(3, 622594800, 8),(3, 638319600, 9) ,(3, 654649200, 8),(3, 670374000, 10) ,(3, 686102400, 11),(3, 695779200, 8) ,(3, 701812800, 5),(3, 717534000, 4) ,(3, 733273200, 9),(3, 748998000, 8) ,(3, 764722800, 9),(3, 780447600, 8) ,(3, 796172400, 9),(3, 811897200, 8) ,(3, 828226800, 9),(3, 846370800, 8) ,(3, 859676400, 9),(3, 877820400, 8) ,(3, 891126000, 9),(3, 909270000, 8) ,(3, 922575600, 9),(3, 941324400, 8) ,(3, 954025200, 9),(3, 972774000, 8) ,(3, 985474800, 9),(3, 1004223600, 8) ,(3, 1017529200, 9),(3, 1035673200, 8) ,(3, 1048978800, 9),(3, 1067122800, 8) ,(3, 1080428400, 9),(3, 1099177200, 8) ,(3, 1111878000, 9),(3, 1130626800, 8) ,(3, 1143327600, 9),(3, 1162076400, 8) ,(3, 1174777200, 9),(3, 1193526000, 8) ,(3, 1206831600, 9),(3, 1224975600, 8) ,(3, 1238281200, 9),(3, 1256425200, 8) ,(3, 1269730800, 9),(3, 1288479600, 8) ,(3, 1301180400, 9),(3, 1319929200, 8) ,(3, 1332630000, 9),(3, 1351378800, 8) ,(3, 1364684400, 9),(3, 1382828400, 8) ,(3, 1396134000, 9),(3, 1414278000, 8) ,(3, 1427583600, 9),(3, 1445727600, 8) ,(3, 1459033200, 9),(3, 1477782000, 8) ,(3, 1490482800, 9),(3, 1509231600, 8) ,(3, 1521932400, 9),(3, 1540681200, 8) ,(3, 1553986800, 9),(3, 1572130800, 8) ,(3, 1585436400, 9),(3, 1603580400, 8) ,(3, 1616886000, 9),(3, 1635634800, 8) ,(3, 1648335600, 9),(3, 1667084400, 8) ,(3, 1679785200, 9),(3, 1698534000, 8) ,(3, 1711839600, 9),(3, 1729983600, 8) ,(3, 1743289200, 9),(3, 1761433200, 8) ,(3, 1774738800, 9),(3, 1792882800, 8) ,(3, 1806188400, 9),(3, 1824937200, 8) ,(3, 1837638000, 9),(3, 1856386800, 8) ,(3, 1869087600, 9),(3, 1887836400, 8) ,(3, 1901142000, 9),(3, 1919286000, 8) ,(3, 1932591600, 9),(3, 1950735600, 8) ,(3, 1964041200, 9),(3, 1982790000, 8) ,(3, 1995490800, 9),(3, 2014239600, 8) ,(3, 2026940400, 9),(3, 2045689200, 8) ,(3, 2058390000, 9),(3, 2077138800, 8) ,(3, 2090444400, 9),(3, 2108588400, 8) ,(3, 2121894000, 9),(3, 2140038000, 8),(4, -1688265000, 2) ,(4, -1656819048, 1),(4, -1641353448, 2) ,(4, -1627965048, 3),(4, -1618716648, 1) ,(4, -1596429048, 3),(4, -1593829848, 5) ,(4, -1589860800, 4),(4, -1542427200, 5) ,(4, -1539493200, 6),(4, -1525323600, 5) ,(4, -1522728000, 4),(4, -1491188400, 7) ,(4, -1247536800, 4),(4, 354920409, 5) ,(4, 370728010, 4),(4, 386456410, 5) ,(4, 402264011, 4),(4, 417992411, 5) ,(4, 433800012, 4),(4, 449614812, 5) ,(4, 465346812, 8),(4, 481071612, 9) ,(4, 496796413, 8),(4, 512521213, 9) ,(4, 528246013, 8),(4, 543970813, 9) ,(4, 559695613, 8),(4, 575420414, 9) ,(4, 591145214, 8),(4, 606870014, 9) ,(4, 622594814, 8),(4, 638319615, 9) ,(4, 654649215, 8),(4, 670374016, 10) ,(4, 686102416, 11),(4, 695779216, 8) ,(4, 701812816, 5),(4, 717534017, 4) ,(4, 733273217, 9),(4, 748998018, 8) ,(4, 764722818, 9),(4, 780447619, 8) ,(4, 796172419, 9),(4, 811897219, 8) ,(4, 828226820, 9),(4, 846370820, 8) ,(4, 859676420, 9),(4, 877820421, 8) ,(4, 891126021, 9),(4, 909270021, 8) ,(4, 922575622, 9),(4, 941324422, 8) ,(4, 954025222, 9),(4, 972774022, 8) ,(4, 985474822, 9),(4, 1004223622, 8) ,(4, 1017529222, 9),(4, 1035673222, 8) ,(4, 1048978822, 9),(4, 1067122822, 8) ,(4, 1080428422, 9),(4, 1099177222, 8) ,(4, 1111878022, 9),(4, 1130626822, 8) ,(4, 1143327622, 9),(4, 1162076422, 8) ,(4, 1174777222, 9),(4, 1193526022, 8) ,(4, 1206831622, 9),(4, 1224975622, 8) ,(4, 1238281222, 9),(4, 1256425222, 8) ,(4, 1269730822, 9),(4, 1288479622, 8) ,(4, 1301180422, 9),(4, 1319929222, 8) ,(4, 1332630022, 9),(4, 1351378822, 8) ,(4, 1364684422, 9),(4, 1382828422, 8) ,(4, 1396134022, 9),(4, 1414278022, 8) ,(4, 1427583622, 9),(4, 1445727622, 8) ,(4, 1459033222, 9),(4, 1477782022, 8) ,(4, 1490482822, 9),(4, 1509231622, 8) ,(4, 1521932422, 9),(4, 1540681222, 8) ,(4, 1553986822, 9),(4, 1572130822, 8) ,(4, 1585436422, 9),(4, 1603580422, 8) ,(4, 1616886022, 9),(4, 1635634822, 8) ,(4, 1648335622, 9),(4, 1667084422, 8) ,(4, 1679785222, 9),(4, 1698534022, 8) ,(4, 1711839622, 9),(4, 1729983622, 8) ,(4, 1743289222, 9),(4, 1761433222, 8) ,(4, 1774738822, 9),(4, 1792882822, 8) ,(4, 1806188422, 9),(4, 1824937222, 8) ,(4, 1837638022, 9),(4, 1856386822, 8) ,(4, 1869087622, 9),(4, 1887836422, 8) ,(4, 1901142022, 9),(4, 1919286022, 8) ,(4, 1932591622, 9),(4, 1950735622, 8) ,(4, 1964041222, 9),(4, 1982790022, 8) ,(4, 1995490822, 9),(4, 2014239622, 8) ,(4, 2026940422, 9),(4, 2045689222, 8) ,(4, 2058390022, 9),(4, 2077138822, 8) ,(4, 2090444422, 9),(4, 2108588422, 8) ,(4, 2121894022, 9),(4, 2140038022, 8); - - -CREATE TABLE time_zone_transition_type (Time_zone_id int unsigned NOT NULL,Transition_type_id int unsigned NOT NULL,Offset int signed DEFAULT 0 NOT NULL,Is_DST tinyint unsigned DEFAULT 0 NOT NULL,Abbreviation char(8) DEFAULT '' NOT NULL,PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)) engine=MyISAM CHARACTER SET utf8 comment='Time zone transition types'; - -INSERT INTO time_zone_transition_type (Time_zone_id,Transition_type_id, Offset, Is_DST, Abbreviation) VALUES (1, 0, 7200, 1, 'MEST') ,(1, 1, 3600, 0, 'MET') ,(1, 2, 7200, 1, 'MEST') ,(1, 3, 3600, 0, 'MET') ,(2, 0, 0, 0, 'UTC') ,(3, 0, 9000, 0, 'MMT') ,(3, 1, 12648, 1, 'MST') ,(3, 2, 9048, 0, 'MMT') ,(3, 3, 16248, 1, 'MDST') ,(3, 4, 10800, 0, 'MSK') ,(3, 5, 14400, 1, 'MSD') ,(3, 6, 18000, 1, 'MSD') ,(3, 7, 7200, 0, 'EET') ,(3, 8, 10800, 0, 'MSK') ,(3, 9, 14400, 1, 'MSD') ,(3, 10, 10800, 1, 'EEST') ,(3, 11, 7200, 0, 'EET') ,(4, 0, 9000, 0, 'MMT') ,(4, 1, 12648, 1, 'MST') ,(4, 2, 9048, 0, 'MMT') ,(4, 3, 16248, 1, 'MDST') ,(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD') ,(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET') ,(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD') ,(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET') ,(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST'); - -CREATE TABLE time_zone_leap_second (Transition_time bigint signed NOT NULL,Correction int signed NOT NULL,PRIMARY KEY TranTime (Transition_time)) engine=MyISAM CHARACTER SET utf8 comment='Leap seconds information for time zones'; - -INSERT INTO time_zone_leap_second (Transition_time, Correction) VALUES (78796800, 1) ,(94694401, 2) ,(126230402, 3) ,(157766403, 4) ,(189302404, 5) ,(220924805, 6) ,(252460806, 7) ,(283996807, 8) ,(315532808, 9) ,(362793609, 10) ,(394329610, 11) ,(425865611, 12) ,(489024012, 13) ,(567993613, 14) ,(631152014, 15) ,(662688015, 16) ,(709948816, 17) ,(741484817, 18) ,(773020818, 19) ,(820454419, 20) ,(867715220, 21) ,(915148821, 22); - - diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index 58652960e365149f098959e96518d5ca3abfaa39..779be3d7081157bd4554a13804f1f74e22d821b4 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -144,17 +144,6 @@ sub spawn_impl ($$$$$$$$) { $SIG{INT}= 'DEFAULT'; # Parent do some stuff, we don't - if ( $::glob_cygwin_shell and $mode eq 'test' ) - { - # Programs started from mysqltest under Cygwin, are to - # execute them within Cygwin. Else simple things in test - # files like - # --system "echo 1 > file" - # will fail. - # FIXME not working :-( -# $ENV{'COMSPEC'}= "$::glob_cygwin_shell -c"; - } - my $log_file_open_mode = '>'; if ($spawn_opts and $spawn_opts->{'append_log_file'}) @@ -164,7 +153,15 @@ sub spawn_impl ($$$$$$$$) { if ( $output ) { - if ( ! open(STDOUT,$log_file_open_mode,$output) ) + if ( $::glob_win32_perl ) + { + # Don't redirect stdout on ActiveState perl since this is + # just another thread in the same process. + # Should be fixed so that the thread that is created with fork + # executes the exe in another process and wait's for it to return. + # In the meanwhile, we get all the output from mysqld's to screen + } + elsif ( ! open(STDOUT,$log_file_open_mode,$output) ) { mtr_child_error("can't redirect STDOUT to \"$output\": $!"); } @@ -216,8 +213,7 @@ sub spawn_parent_impl { { # Simple run of command, we wait for it to return my $ret_pid= waitpid($pid,0); - - if ( $ret_pid <= 0 ) + if ( $ret_pid != $pid ) { mtr_error("$path ($pid) got lost somehow"); } @@ -245,7 +241,6 @@ sub spawn_parent_impl { # Someone terminated, don't know who. Collect # status info first before $? is lost, # but not $exit_value, this is flagged from - # my $timer_name= mtr_timer_timeout($::glob_timers, $ret_pid); if ( $timer_name ) @@ -310,7 +305,7 @@ sub spawn_parent_impl { $ret_pid= waitpid($pid,0); - if ( $ret_pid == -1 ) + if ( $ret_pid != $pid ) { mtr_error("$path ($pid) got lost somehow"); } @@ -361,7 +356,6 @@ sub mtr_kill_leftovers () { # First, kill all masters and slaves that would conflict with # this run. Make sure to remove the PID file, if any. # FIXME kill IM manager first, else it will restart the servers, how?! - my @args; for ( my $idx; $idx < 2; $idx++ ) @@ -650,22 +644,10 @@ sub mtr_mysqladmin_shutdown { my $adm_shutdown_tmo= shift; my %mysql_admin_pids; - my @to_kill_specs; + # Start one "mysqladmin shutdown" for each server foreach my $srv ( @$spec ) { - if ( mtr_ping_mysqld_server($srv->{'port'}, $srv->{'sockfile'}) ) - { - push(@to_kill_specs, $srv); - } - } - - - foreach my $srv ( @to_kill_specs ) - { - # FIXME wrong log..... - # FIXME, stderr..... - # Shutdown time must be high as slave may be in reconnect my $args; mtr_init_args(\$args); @@ -673,6 +655,7 @@ sub mtr_mysqladmin_shutdown { mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--user=%s", $::opt_user); mtr_add_arg($args, "--password="); + mtr_add_arg($args, "--silent"); if ( -e $srv->{'sockfile'} ) { mtr_add_arg($args, "--socket=%s", $srv->{'sockfile'}); @@ -686,26 +669,27 @@ sub mtr_mysqladmin_shutdown { mtr_add_arg($args, "--protocol=tcp"); # Needed if no --socket } mtr_add_arg($args, "--connect_timeout=5"); + # Shutdown time must be high as slave may be in reconnect mtr_add_arg($args, "--shutdown_timeout=$adm_shutdown_tmo"); mtr_add_arg($args, "shutdown"); - # We don't wait for termination of mysqladmin + # Start mysqladmin in paralell and wait for termination later my $pid= mtr_spawn($::exe_mysqladmin, $args, "", $::path_manager_log, $::path_manager_log, "", { append_log_file => 1 }); + # Save the pid of the mysqladmin process $mysql_admin_pids{$pid}= 1; } + # Wait for all the started mysqladmin to exit # As mysqladmin is such a simple program, we trust it to terminate. # I.e. we wait blocking, and wait wait for them all before we go on. - while (keys %mysql_admin_pids) + foreach my $pid (keys %mysql_admin_pids) { - foreach my $pid (keys %mysql_admin_pids) - { - if ( waitpid($pid,0) > 0 ) - { - delete $mysql_admin_pids{$pid}; - } - } + my $ret_pid= waitpid($pid,0); + + # If this was any of the mysqladmin's we waited for, delete its + # pid from list + delete $mysql_admin_pids{$ret_pid} if exists $mysql_admin_pids{$ret_pid}; } # If we trusted "mysqladmin --shutdown_timeout= ..." we could just @@ -720,7 +704,7 @@ sub mtr_mysqladmin_shutdown { TIME: while ( $timeout-- ) { - foreach my $srv ( @to_kill_specs ) + foreach my $srv ( @$spec ) { $res= 1; # We are optimistic if ( mtr_ping_mysqld_server($srv->{'port'}, $srv->{'sockfile'}) ) @@ -753,9 +737,9 @@ sub mtr_record_dead_children () { my $ret_pid; - # FIXME the man page says to wait for -1 to terminate, - # but on OS X we get '0' all the time... - while ( ($ret_pid= waitpid(-1,&WNOHANG)) > 0 ) + # Wait without blockinng to see if any processes had died + # -1 or 0 means there are no more procesess to wait for + while ( ($ret_pid= waitpid(-1,&WNOHANG)) != 0 and $ret_pid != -1) { mtr_debug("waitpid() catched exit of child $ret_pid"); foreach my $idx (0..1) @@ -788,7 +772,11 @@ sub start_reap_all { # here. If a process terminated before setting $SIG{CHLD} (but after # any attempt to waitpid() it), it will still be a zombie. So we # have to handle any such process here. - while(waitpid(-1, &WNOHANG) > 0) { }; + my $pid; + while(($pid= waitpid(-1, &WNOHANG)) != 0 and $pid != -1) + { + print "start_reap_all: pid: $pid.\n"; + }; } sub stop_reap_all { @@ -842,7 +830,7 @@ sub sleep_until_file_created ($$$) { } # Check if it died after the fork() was successful - if ( $pid > 0 && waitpid($pid,&WNOHANG) == $pid ) + if ( $pid != 0 && waitpid($pid,&WNOHANG) == $pid ) { return 0; } @@ -904,8 +892,8 @@ sub mtr_exit ($) { # set ourselves as the group leader at startup (with # POSIX::setpgrp(0,0)), but then care must be needed to always do # proper child process cleanup. - kill('HUP', -$$) if $$ == getpgrp(); - sleep 2; + kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp(); + exit($code); } diff --git a/mysql-test/my_create_tables.c b/mysql-test/my_create_tables.c deleted file mode 100644 index 06a6fabf02246d4564dcee4708972217fc5bc743..0000000000000000000000000000000000000000 --- a/mysql-test/my_create_tables.c +++ /dev/null @@ -1,673 +0,0 @@ -#include <stdio.h> -#include <errno.h> -#ifndef __WIN__ -#include <dirent.h> -#endif -#include <string.h> -#ifdef __NETWARE__ -#include <screen.h> -#include <proc.h> -#else -#include <sys/types.h> -#ifndef __WIN__ -#include <sys/wait.h> -#include <unistd.h> -#else -#include <direct.h> -#include <stdlib.h> -#include <stdio.h> -#endif -#endif -#include <ctype.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <assert.h> -#include "my_manage.h" - -/* - Synopsis: - This function testes a exist file - -Arguments: - mdata: path to data - file_name: name of file -Output: - A zero value indicates that file is exist. -*/ -bool test_sys_file(const char *mdata,const char *file_name) -{ - struct stat file; - char path_file_name[PATH_MAX]; - snprintf(path_file_name, PATH_MAX, "%s/%s", mdata, file_name); - return(stat(path_file_name,&file)); -} - -/* - Synopsis: - This function creates a file with sql requstes for creating - system data files. - -Arguments: - mdata: path to data - output_file: file name for output file - test: to create system files with test data -Output: - A zero value indicates a success. -*/ -bool create_system_files(const char *mdata,const char *output_file, bool test) -{ - FILE *out; - - out = fopen(output_file, "w+"); - - if (!out) - return 1; - - if (test_sys_file(mdata,"mysql")) - { - fprintf(out,"CREATE DATABASE mysql;\n"); - } - - if (test && test_sys_file(mdata,"test")) - { - fprintf(out,"CREATE DATABASE test;\n"); - } - - fprintf(out,"USE mysql;\n"); - - if (test_sys_file(mdata,"mysql/db.frm")) - { - fprintf(out, - "CREATE TABLE db (" - "Host char(60) binary DEFAULT '' NOT NULL," - "Db char(64) binary DEFAULT '' NOT NULL," - "User char(16) binary DEFAULT '' NOT NULL," - "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "References_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "PRIMARY KEY Host (Host,Db,User)," - "KEY User (User))" - "engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='Database privileges';\n"); - - if (test) - { - fprintf(out,"INSERT INTO db VALUES ('%%','test','','Y','Y','Y','Y'" - ",'Y','Y','N','Y','Y','Y','Y','Y');\n"); - fprintf(out,"INSERT INTO db VALUES ('%%','test\\_%%','','Y','Y','Y'" - ",'Y','Y','Y','N','Y','Y','Y','Y','Y');\n"); - } - } - - if (test_sys_file(mdata,"mysql/host.frm")) - { - fprintf(out, - "CREATE TABLE host (" - "Host char(60) binary DEFAULT '' NOT NULL," - "Db char(64) binary DEFAULT '' NOT NULL," - "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "References_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "PRIMARY KEY Host (Host,Db))" - "engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='Host privileges; Merged with database privileges';\n"); - } - - - if (test_sys_file(mdata,"mysql/user.frm")) - { -#ifdef __WIN__ - WSADATA wsa_data; -#endif - char hostname[FN_REFLEN]; - -#ifdef __WIN__ - if (WSAStartup(MAKEWORD( 2, 2 ),&wsa_data)) - return 1; -#endif - if (gethostname(hostname, FN_REFLEN)) - return 1; -#ifdef __WIN__ - WSACleanup( ); -#endif - - if (strchr(hostname, '.') == NULL) - strcat(hostname, "%"); - - fprintf(out, - "CREATE TABLE user (" - "Host char(60) binary DEFAULT '' NOT NULL," - "User char(16) binary DEFAULT '' NOT NULL," - "Password char(41) binary DEFAULT '' NOT NULL," - "Select_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Update_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Process_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "File_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "References_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Index_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Super_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL," - "ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL," - "ssl_cipher BLOB NOT NULL," - "x509_issuer BLOB NOT NULL," - "x509_subject BLOB NOT NULL," - "max_questions int(11) unsigned DEFAULT 0 NOT NULL," - "max_updates int(11) unsigned DEFAULT 0 NOT NULL," - "max_connections int(11) unsigned DEFAULT 0 NOT NULL," - "PRIMARY KEY Host (Host,User)" - ") engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='Users and global privileges';\n"); - - - if (test) - { - fprintf(out, - "INSERT INTO user VALUES ('localhost','root',''" - ",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'" - ",'Y','Y','Y','Y','Y','','','','',0,0,0);\n"); - fprintf(out, - "INSERT INTO user VALUES ('%s','root','','Y','Y'," - "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'," - "'Y','Y','Y','Y','','','','',0,0,0);\n",hostname); - fprintf(out, - "REPLACE INTO user VALUES ('127.0.0.1','root',''," - "'Y','Y','Y','Y','Y','Y'," - "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'" - ",'Y','','','','',0,0,0);\n"); - fprintf(out,"INSERT INTO user (host,user) values ('localhost','');\n"); - fprintf(out,"INSERT INTO user (host,user) values ('%s','');\n",hostname); - } - else - { - fprintf(out, - "INSERT INTO user VALUES ('localhost','root',''," - "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'," - "'Y','Y','Y','Y','','','','',0,0,0);\n"); -#ifndef __WIN__ - fprintf(out, - "INSERT INTO user VALUES ('%s','root','','Y','Y'," - "'Y','Y','Y','Y','Y','Y'" - "'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','',''" - ",'','',0,0,0);\n",hostname); - fprintf(out,"INSERT INTO user (host,user) values ('%s','');\n",hostname); - fprintf(out,"INSERT INTO user (host,user) values ('localhost','');\n"); -#else - fprintf(out, - "INSERT INTO user VALUES ('localhost','','','Y','Y','Y'" - ",'Y','Y','Y','Y','Y','Y'" - ",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','',''," - "'','',0,0,0);\n"); -#endif - } - } - - - if (test_sys_file(mdata,"mysql/func.frm")) - { - fprintf(out, - "CREATE TABLE func (" - "name char(64) binary DEFAULT '' NOT NULL," - "ret tinyint(1) DEFAULT '0' NOT NULL," - "dl char(128) DEFAULT '' NOT NULL," - "type enum ('function','aggregate') NOT NULL," - "PRIMARY KEY (name)" - ") engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='User defined functions';\n"); - } - - if (test_sys_file(mdata,"mysql/tables_priv.frm")) - { - fprintf(out, - "CREATE TABLE tables_priv (" - "Host char(60) binary DEFAULT '' NOT NULL," - "Db char(64) binary DEFAULT '' NOT NULL," - "User char(16) binary DEFAULT '' NOT NULL," - "Table_name char(64) binary DEFAULT '' NOT NULL," - "Grantor char(77) DEFAULT '' NOT NULL," - "Timestamp timestamp(14)," - "Table_priv set('Select','Insert','Update','Delete'," - "'Create','Drop','Grant','References','Index','Alter')" - " DEFAULT '' NOT NULL," - "Column_priv set('Select','Insert','Update','References')" - " DEFAULT '' NOT NULL," - "PRIMARY KEY (Host,Db,User,Table_name)," - "KEY Grantor (Grantor)" - ") engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='Table privileges';\n"); - } - - if (test_sys_file(mdata,"mysql/columns_priv.frm")) - { - fprintf(out, - "CREATE TABLE columns_priv (" - "Host char(60) binary DEFAULT '' NOT NULL," - "Db char(64) binary DEFAULT '' NOT NULL," - "User char(16) binary DEFAULT '' NOT NULL," - "Table_name char(64) binary DEFAULT '' NOT NULL," - "Column_name char(64) binary DEFAULT '' NOT NULL," - "Timestamp timestamp(14)," - "Column_priv set('Select','Insert','Update','References')" - " DEFAULT '' NOT NULL," - "PRIMARY KEY (Host,Db,User,Table_name,Column_name)" - ") engine=MyISAM " - "CHARACTER SET utf8 COLLATE utf8_bin " - "comment='Column privileges';\n"); - } - - if (test_sys_file(mdata,"mysql/help_topic.frm")) - { - fprintf(out, - "CREATE TABLE help_topic (" - "help_topic_id int unsigned not null," - "name varchar(64) not null," - "help_category_id smallint unsigned not null," - "description text not null," - "example text not null," - "url varchar(128) not null," - "primary key (help_topic_id)," - "unique index (name)" - ") engine=MyISAM " - "CHARACTER SET utf8 " - "comment='help topics';\n"); - } - - if (test_sys_file(mdata,"mysql/help_category.frm")) - { - fprintf(out, - "CREATE TABLE help_category (" - "help_category_id smallint unsigned not null," - "name varchar(64) not null," - "parent_category_id smallint unsigned null," - "url varchar(128) not null," - "primary key (help_category_id)," - "unique index (name)" - ") engine=MyISAM " - "CHARACTER SET utf8 " - "comment='help categories';\n"); - } - - if (test_sys_file(mdata,"mysql/help_keyword.frm")) - { - fprintf(out, - "CREATE TABLE help_keyword (" - "help_keyword_id int unsigned not null," - "name varchar(64) not null," - "primary key (help_keyword_id)," - "unique index (name)" - ") engine=MyISAM " - "CHARACTER SET utf8 " - "comment='help keywords';\n"); - } - - if (test_sys_file(mdata,"mysql/help_relation.frm")) - { - fprintf(out, - "CREATE TABLE help_relation (" - "help_topic_id int unsigned not null references help_topic," - "help_keyword_id int unsigned not null references help_keyword," - "primary key (help_keyword_id, help_topic_id)" - ") engine=MyISAM " - "CHARACTER SET utf8 " - "comment='keyword-topic relation';\n"); - } - - if (test_sys_file(mdata,"mysql/time_zone_name.frm")) - { - fprintf(out, - "CREATE TABLE time_zone_name (" - "Name char(64) NOT NULL," - "Time_zone_id int unsigned NOT NULL," - "PRIMARY KEY Name (Name)" - ") engine=MyISAM CHARACTER SET utf8 " - "comment='Time zone names';\n"); - - if (test) - { - fprintf(out, - "INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES" - "('MET', 1), ('UTC', 2), ('Universal', 2), " - "('Europe/Moscow',3), ('leap/Europe/Moscow',4)," - "('Japan', 5);\n"); - - } - } - - - if (test_sys_file(mdata,"mysql/time_zone.frm")) - { - fprintf(out, - "CREATE TABLE time_zone (" - "Time_zone_id int unsigned NOT NULL auto_increment," - "Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL," - "PRIMARY KEY TzId (Time_zone_id)" - ") engine=MyISAM CHARACTER SET utf8 " - "comment='Time zones';\n"); - - if (test) - { - fprintf(out,"INSERT INTO time_zone (Time_zone_id, Use_leap_seconds)" - "VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N');\n"); - } - } - - if (test_sys_file(mdata,"mysql/time_zone_transition.frm")) - { - fprintf(out, - "CREATE TABLE time_zone_transition (" - "Time_zone_id int unsigned NOT NULL," - "Transition_time bigint signed NOT NULL," - "Transition_type_id int unsigned NOT NULL," - "PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)" - ") engine=MyISAM CHARACTER SET utf8 " - "comment='Time zone transitions';\n"); - - if (test) - { - fprintf(out, - "INSERT INTO time_zone_transition" - "(Time_zone_id, Transition_time, Transition_type_id)" - "VALUES" - " (1, -1693706400, 0) ,(1, -1680483600, 1)" - ",(1, -1663455600, 2) ,(1, -1650150000, 3)" - ",(1, -1632006000, 2) ,(1, -1618700400, 3)" - ",(1, -938905200, 2) ,(1, -857257200, 3)" - ",(1, -844556400, 2) ,(1, -828226800, 3)" - ",(1, -812502000, 2) ,(1, -796777200, 3)" - ",(1, 228877200, 2) ,(1, 243997200, 3)" - ",(1, 260326800, 2) ,(1, 276051600, 3)" - ",(1, 291776400, 2) ,(1, 307501200, 3)" - ",(1, 323830800, 2) ,(1, 338950800, 3)" - ",(1, 354675600, 2) ,(1, 370400400, 3)" - ",(1, 386125200, 2) ,(1, 401850000, 3)" - ",(1, 417574800, 2) ,(1, 433299600, 3)" - ",(1, 449024400, 2) ,(1, 465354000, 3)" - ",(1, 481078800, 2) ,(1, 496803600, 3)" - ",(1, 512528400, 2) ,(1, 528253200, 3)" - ",(1, 543978000, 2) ,(1, 559702800, 3)" - ",(1, 575427600, 2) ,(1, 591152400, 3)" - ",(1, 606877200, 2) ,(1, 622602000, 3)" - ",(1, 638326800, 2) ,(1, 654656400, 3)" - ",(1, 670381200, 2) ,(1, 686106000, 3)" - ",(1, 701830800, 2) ,(1, 717555600, 3)" - ",(1, 733280400, 2) ,(1, 749005200, 3)" - ",(1, 764730000, 2) ,(1, 780454800, 3)" - ",(1, 796179600, 2) ,(1, 811904400, 3)" - ",(1, 828234000, 2) ,(1, 846378000, 3)" - ",(1, 859683600, 2) ,(1, 877827600, 3)" - ",(1, 891133200, 2) ,(1, 909277200, 3)" - ",(1, 922582800, 2) ,(1, 941331600, 3)" - ",(1, 954032400, 2) ,(1, 972781200, 3)" - ",(1, 985482000, 2) ,(1, 1004230800, 3)" - ",(1, 1017536400, 2) ,(1, 1035680400, 3)" - ",(1, 1048986000, 2) ,(1, 1067130000, 3)" - ",(1, 1080435600, 2) ,(1, 1099184400, 3)" - ",(1, 1111885200, 2) ,(1, 1130634000, 3)" - ",(1, 1143334800, 2) ,(1, 1162083600, 3)" - ",(1, 1174784400, 2) ,(1, 1193533200, 3)" - ",(1, 1206838800, 2) ,(1, 1224982800, 3)" - ",(1, 1238288400, 2) ,(1, 1256432400, 3)" - ",(1, 1269738000, 2) ,(1, 1288486800, 3)" - ",(1, 1301187600, 2) ,(1, 1319936400, 3)" - ",(1, 1332637200, 2) ,(1, 1351386000, 3)" - ",(1, 1364691600, 2) ,(1, 1382835600, 3)" - ",(1, 1396141200, 2) ,(1, 1414285200, 3)" - ",(1, 1427590800, 2) ,(1, 1445734800, 3)" - ",(1, 1459040400, 2) ,(1, 1477789200, 3)" - ",(1, 1490490000, 2) ,(1, 1509238800, 3)" - ",(1, 1521939600, 2) ,(1, 1540688400, 3)" - ",(1, 1553994000, 2) ,(1, 1572138000, 3)" - ",(1, 1585443600, 2) ,(1, 1603587600, 3)" - ",(1, 1616893200, 2) ,(1, 1635642000, 3)" - ",(1, 1648342800, 2) ,(1, 1667091600, 3)" - ",(1, 1679792400, 2) ,(1, 1698541200, 3)" - ",(1, 1711846800, 2) ,(1, 1729990800, 3)" - ",(1, 1743296400, 2) ,(1, 1761440400, 3)" - ",(1, 1774746000, 2) ,(1, 1792890000, 3)" - ",(1, 1806195600, 2) ,(1, 1824944400, 3)" - ",(1, 1837645200, 2) ,(1, 1856394000, 3)" - ",(1, 1869094800, 2) ,(1, 1887843600, 3)" - ",(1, 1901149200, 2) ,(1, 1919293200, 3)" - ",(1, 1932598800, 2) ,(1, 1950742800, 3)" - ",(1, 1964048400, 2) ,(1, 1982797200, 3)" - ",(1, 1995498000, 2) ,(1, 2014246800, 3)" - ",(1, 2026947600, 2) ,(1, 2045696400, 3)" - ",(1, 2058397200, 2) ,(1, 2077146000, 3)" - ",(1, 2090451600, 2) ,(1, 2108595600, 3)" - ",(1, 2121901200, 2) ,(1, 2140045200, 3)" - ",(3, -1688265000, 2) ,(3, -1656819048, 1)" - ",(3, -1641353448, 2) ,(3, -1627965048, 3)" - ",(3, -1618716648, 1) ,(3, -1596429048, 3)" - ",(3, -1593829848, 5) ,(3, -1589860800, 4)" - ",(3, -1542427200, 5) ,(3, -1539493200, 6)" - ",(3, -1525323600, 5) ,(3, -1522728000, 4)" - ",(3, -1491188400, 7) ,(3, -1247536800, 4)" - ",(3, 354920400, 5) ,(3, 370728000, 4)" - ",(3, 386456400, 5) ,(3, 402264000, 4)" - ",(3, 417992400, 5) ,(3, 433800000, 4)" - ",(3, 449614800, 5) ,(3, 465346800, 8)" - ",(3, 481071600, 9) ,(3, 496796400, 8)" - ",(3, 512521200, 9) ,(3, 528246000, 8)" - ",(3, 543970800, 9) ,(3, 559695600, 8)" - ",(3, 575420400, 9) ,(3, 591145200, 8)" - ",(3, 606870000, 9) ,(3, 622594800, 8)" - ",(3, 638319600, 9) ,(3, 654649200, 8)" - ",(3, 670374000, 10) ,(3, 686102400, 11)" - ",(3, 695779200, 8) ,(3, 701812800, 5)" - ",(3, 717534000, 4) ,(3, 733273200, 9)" - ",(3, 748998000, 8) ,(3, 764722800, 9)" - ",(3, 780447600, 8) ,(3, 796172400, 9)" - ",(3, 811897200, 8) ,(3, 828226800, 9)" - ",(3, 846370800, 8) ,(3, 859676400, 9)" - ",(3, 877820400, 8) ,(3, 891126000, 9)" - ",(3, 909270000, 8) ,(3, 922575600, 9)" - ",(3, 941324400, 8) ,(3, 954025200, 9)" - ",(3, 972774000, 8) ,(3, 985474800, 9)" - ",(3, 1004223600, 8) ,(3, 1017529200, 9)" - ",(3, 1035673200, 8) ,(3, 1048978800, 9)" - ",(3, 1067122800, 8) ,(3, 1080428400, 9)" - ",(3, 1099177200, 8) ,(3, 1111878000, 9)" - ",(3, 1130626800, 8) ,(3, 1143327600, 9)" - ",(3, 1162076400, 8) ,(3, 1174777200, 9)" - ",(3, 1193526000, 8) ,(3, 1206831600, 9)" - ",(3, 1224975600, 8) ,(3, 1238281200, 9)" - ",(3, 1256425200, 8) ,(3, 1269730800, 9)" - ",(3, 1288479600, 8) ,(3, 1301180400, 9)" - ",(3, 1319929200, 8) ,(3, 1332630000, 9)" - ",(3, 1351378800, 8) ,(3, 1364684400, 9)" - ",(3, 1382828400, 8) ,(3, 1396134000, 9)" - ",(3, 1414278000, 8) ,(3, 1427583600, 9)" - ",(3, 1445727600, 8) ,(3, 1459033200, 9)" - ",(3, 1477782000, 8) ,(3, 1490482800, 9)" - ",(3, 1509231600, 8) ,(3, 1521932400, 9)" - ",(3, 1540681200, 8) ,(3, 1553986800, 9)" - ",(3, 1572130800, 8) ,(3, 1585436400, 9)" - ",(3, 1603580400, 8) ,(3, 1616886000, 9)" - ",(3, 1635634800, 8) ,(3, 1648335600, 9)" - ",(3, 1667084400, 8) ,(3, 1679785200, 9)" - ",(3, 1698534000, 8) ,(3, 1711839600, 9)" - ",(3, 1729983600, 8) ,(3, 1743289200, 9)" - ",(3, 1761433200, 8) ,(3, 1774738800, 9)" - ",(3, 1792882800, 8) ,(3, 1806188400, 9)" - ",(3, 1824937200, 8) ,(3, 1837638000, 9)" - ",(3, 1856386800, 8) ,(3, 1869087600, 9)" - ",(3, 1887836400, 8) ,(3, 1901142000, 9)" - ",(3, 1919286000, 8) ,(3, 1932591600, 9)" - ",(3, 1950735600, 8) ,(3, 1964041200, 9)" - ",(3, 1982790000, 8) ,(3, 1995490800, 9)" - ",(3, 2014239600, 8) ,(3, 2026940400, 9)" - ",(3, 2045689200, 8) ,(3, 2058390000, 9)" - ",(3, 2077138800, 8) ,(3, 2090444400, 9)" - ",(3, 2108588400, 8) ,(3, 2121894000, 9)" - ",(3, 2140038000, 8)" - ",(4, -1688265000, 2) ,(4, -1656819048, 1)" - ",(4, -1641353448, 2) ,(4, -1627965048, 3)" - ",(4, -1618716648, 1) ,(4, -1596429048, 3)" - ",(4, -1593829848, 5) ,(4, -1589860800, 4)" - ",(4, -1542427200, 5) ,(4, -1539493200, 6)" - ",(4, -1525323600, 5) ,(4, -1522728000, 4)" - ",(4, -1491188400, 7) ,(4, -1247536800, 4)" - ",(4, 354920409, 5) ,(4, 370728010, 4)" - ",(4, 386456410, 5) ,(4, 402264011, 4)" - ",(4, 417992411, 5) ,(4, 433800012, 4)" - ",(4, 449614812, 5) ,(4, 465346812, 8)" - ",(4, 481071612, 9) ,(4, 496796413, 8)" - ",(4, 512521213, 9) ,(4, 528246013, 8)" - ",(4, 543970813, 9) ,(4, 559695613, 8)" - ",(4, 575420414, 9) ,(4, 591145214, 8)" - ",(4, 606870014, 9) ,(4, 622594814, 8)" - ",(4, 638319615, 9) ,(4, 654649215, 8)" - ",(4, 670374016, 10) ,(4, 686102416, 11)" - ",(4, 695779216, 8) ,(4, 701812816, 5)" - ",(4, 717534017, 4) ,(4, 733273217, 9)" - ",(4, 748998018, 8) ,(4, 764722818, 9)" - ",(4, 780447619, 8) ,(4, 796172419, 9)" - ",(4, 811897219, 8) ,(4, 828226820, 9)" - ",(4, 846370820, 8) ,(4, 859676420, 9)" - ",(4, 877820421, 8) ,(4, 891126021, 9)" - ",(4, 909270021, 8) ,(4, 922575622, 9)" - ",(4, 941324422, 8) ,(4, 954025222, 9)" - ",(4, 972774022, 8) ,(4, 985474822, 9)" - ",(4, 1004223622, 8) ,(4, 1017529222, 9)" - ",(4, 1035673222, 8) ,(4, 1048978822, 9)" - ",(4, 1067122822, 8) ,(4, 1080428422, 9)" - ",(4, 1099177222, 8) ,(4, 1111878022, 9)" - ",(4, 1130626822, 8) ,(4, 1143327622, 9)" - ",(4, 1162076422, 8) ,(4, 1174777222, 9)" - ",(4, 1193526022, 8) ,(4, 1206831622, 9)" - ",(4, 1224975622, 8) ,(4, 1238281222, 9)" - ",(4, 1256425222, 8) ,(4, 1269730822, 9)" - ",(4, 1288479622, 8) ,(4, 1301180422, 9)" - ",(4, 1319929222, 8) ,(4, 1332630022, 9)" - ",(4, 1351378822, 8) ,(4, 1364684422, 9)" - ",(4, 1382828422, 8) ,(4, 1396134022, 9)" - ",(4, 1414278022, 8) ,(4, 1427583622, 9)" - ",(4, 1445727622, 8) ,(4, 1459033222, 9)" - ",(4, 1477782022, 8) ,(4, 1490482822, 9)" - ",(4, 1509231622, 8) ,(4, 1521932422, 9)" - ",(4, 1540681222, 8) ,(4, 1553986822, 9)" - ",(4, 1572130822, 8) ,(4, 1585436422, 9)" - ",(4, 1603580422, 8) ,(4, 1616886022, 9)" - ",(4, 1635634822, 8) ,(4, 1648335622, 9)" - ",(4, 1667084422, 8) ,(4, 1679785222, 9)" - ",(4, 1698534022, 8) ,(4, 1711839622, 9)" - ",(4, 1729983622, 8) ,(4, 1743289222, 9)" - ",(4, 1761433222, 8) ,(4, 1774738822, 9)" - ",(4, 1792882822, 8) ,(4, 1806188422, 9)" - ",(4, 1824937222, 8) ,(4, 1837638022, 9)" - ",(4, 1856386822, 8) ,(4, 1869087622, 9)" - ",(4, 1887836422, 8) ,(4, 1901142022, 9)" - ",(4, 1919286022, 8) ,(4, 1932591622, 9)" - ",(4, 1950735622, 8) ,(4, 1964041222, 9)" - ",(4, 1982790022, 8) ,(4, 1995490822, 9)" - ",(4, 2014239622, 8) ,(4, 2026940422, 9)" - ",(4, 2045689222, 8) ,(4, 2058390022, 9)" - ",(4, 2077138822, 8) ,(4, 2090444422, 9)" - ",(4, 2108588422, 8) ,(4, 2121894022, 9)" - ",(4, 2140038022, 8), (5, -1009875600, 1);\n"); - - - } - } - - if (test_sys_file(mdata,"mysql/time_zone_transition_type.frm")) - { - fprintf(out, - "CREATE TABLE time_zone_transition_type (" - "Time_zone_id int unsigned NOT NULL," - "Transition_type_id int unsigned NOT NULL," - "Offset int signed DEFAULT 0 NOT NULL," - "Is_DST tinyint unsigned DEFAULT 0 NOT NULL," - "Abbreviation char(8) DEFAULT '' NOT NULL," - "PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)" - ") engine=MyISAM CHARACTER SET utf8 " - "comment='Time zone transition types';\n"); - - if (test) - { - fprintf(out, - "INSERT INTO time_zone_transition_type (Time_zone_id," - "Transition_type_id, Offset, Is_DST, Abbreviation) VALUES" - "(1, 0, 7200, 1, 'MEST') ,(1, 1, 3600, 0, 'MET')" - ",(1, 2, 7200, 1, 'MEST') ,(1, 3, 3600, 0, 'MET')" - ",(2, 0, 0, 0, 'UTC')" - ",(3, 0, 9000, 0, 'MMT') ,(3, 1, 12648, 1, 'MST')" - ",(3, 2, 9048, 0, 'MMT') ,(3, 3, 16248, 1, 'MDST')" - ",(3, 4, 10800, 0, 'MSK') ,(3, 5, 14400, 1, 'MSD')" - ",(3, 6, 18000, 1, 'MSD') ,(3, 7, 7200, 0, 'EET')" - ",(3, 8, 10800, 0, 'MSK') ,(3, 9, 14400, 1, 'MSD')" - ",(3, 10, 10800, 1, 'EEST') ,(3, 11, 7200, 0, 'EET')" - ",(4, 0, 9000, 0, 'MMT') ,(4, 1, 12648, 1, 'MST')" - ",(4, 2, 9048, 0, 'MMT') ,(4, 3, 16248, 1, 'MDST')" - ",(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD')" - ",(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET')" - ",(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD')" - ",(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET')" - ",(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST');\n"); - - } - } - - if (test_sys_file(mdata,"mysql/time_zone_leap_second.frm")) - { - fprintf(out, - "CREATE TABLE time_zone_leap_second (" - "Transition_time bigint signed NOT NULL," - "Correction int signed NOT NULL," - "PRIMARY KEY TranTime (Transition_time)" - ") engine=MyISAM CHARACTER SET utf8 " - "comment='Leap seconds information for time zones';\n"); - - if (test) - { - fprintf(out, - "INSERT INTO time_zone_leap_second " - "(Transition_time, Correction) VALUES " - "(78796800, 1) ,(94694401, 2) ,(126230402, 3)" - ",(157766403, 4) ,(189302404, 5) ,(220924805, 6)" - ",(252460806, 7) ,(283996807, 8) ,(315532808, 9)" - ",(362793609, 10) ,(394329610, 11) ,(425865611, 12)" - ",(489024012, 13) ,(567993613, 14) ,(631152014, 15)" - ",(662688015, 16) ,(709948816, 17) ,(741484817, 18)" - ",(773020818, 19) ,(820454419, 20) ,(867715220, 21)" - ",(915148821, 22);\n"); - } - } - - return fclose(out); -} diff --git a/mysql-test/my_manage.c b/mysql-test/my_manage.c deleted file mode 100644 index e5d1be42f9541a1ea36ab4a88668fe6be8a2f67d..0000000000000000000000000000000000000000 --- a/mysql-test/my_manage.c +++ /dev/null @@ -1,887 +0,0 @@ -/* - Copyright (c) 2003 Novell, Inc. All Rights Reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include <stdio.h> -#include <errno.h> -#ifndef __WIN__ -#include <dirent.h> -#endif -#include <string.h> -#ifdef __NETWARE__ -#include <screen.h> -#include <proc.h> -#else -#include <sys/types.h> -#ifndef __WIN__ -#include <sys/wait.h> -#include <unistd.h> -#include <signal.h> -#include <fnmatch.h> /* FIXME HAVE_FNMATCH_H or something */ -#else -#include <direct.h> -#include <stdlib.h> -#include <stdio.h> -#endif -#endif -#include <ctype.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <assert.h> - -#include "my_manage.h" - -#ifndef __NETWARE__ -#define ASSERT assert -extern char **environ; -#endif - - - -/****************************************************************************** - - macros - -******************************************************************************/ - -/****************************************************************************** - - global variables - -******************************************************************************/ - -/****************************************************************************** - - functions - -******************************************************************************/ - -/****************************************************************************** - - init_args() - - Init an argument list. - -******************************************************************************/ - -void init_args(arg_list_t *al) -{ - ASSERT(al != NULL); - - al->argc= 0; - al->size= ARG_BUF; - al->argv= malloc(al->size * sizeof(char *)); - ASSERT(al->argv != NULL); - - return; -} - -/****************************************************************************** - - add_arg() - - Add an argument to a list. - -******************************************************************************/ - -void add_arg(arg_list_t *al, const char *format, ...) -{ - va_list ap; - char temp[FN_REFLEN]; - - ASSERT(al != NULL); - - /* increase size */ - if (al->argc >= (int)al->size) - { - al->size+= ARG_BUF; - al->argv= realloc(al->argv, al->size * sizeof(char *)); - ASSERT(al->argv != NULL); - } - - if (format) - { - va_start(ap, format); - vsprintf(temp, format, ap); - va_end(ap); - - al->argv[al->argc]= malloc(strlen(temp)+1); - ASSERT(al->argv[al->argc] != NULL); - strcpy(al->argv[al->argc], temp); - - ++(al->argc); - } - else - { - al->argv[al->argc]= NULL; - } - - return; -} - -/****************************************************************************** - - free_args() - - Free an argument list. - -******************************************************************************/ - -void free_args(arg_list_t *al) -{ - int i; - - ASSERT(al != NULL); - - for (i= 0; i < al->argc; i++) - { - ASSERT(al->argv[i] != NULL); - free(al->argv[i]); - al->argv[i]= NULL; - } - - free(al->argv); - al->argc= 0; - al->argv= NULL; - - return; -} - -/****************************************************************************** - - sleep_until_file_deleted() - - Sleep until the given file is no longer found. - -******************************************************************************/ - -#ifndef __WIN__ -int sleep_until_file_deleted(char *pid_file) -#else -int sleep_until_file_deleted(HANDLE pid_file) -#endif -{ - int err= 0; /* Initiate to supress warning */ -#ifndef __WIN__ - struct stat buf; - int i; - - for (i= 0; (i < TRY_MAX) && (err= !stat(pid_file, &buf)); i++) sleep(1); - - if (err != 0) err= errno; -#else - err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT); -#endif - return err; -} - -/****************************************************************************** - - sleep_until_file_exists() - - Sleep until the given file exists. - -******************************************************************************/ - -#ifndef __WIN__ -int sleep_until_file_exists(char *pid_file) -#else -int sleep_until_file_exists(HANDLE pid_file) -#endif -{ - int err= 0; /* Initiate to supress warning */ -#ifndef __WIN__ - struct stat buf; - int i; - - for (i= 0; (i < TRY_MAX) && (err= stat(pid_file, &buf)); i++) sleep(1); - - if (err != 0) err= errno; -#else - err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT); -#endif - return err; -} - -/****************************************************************************** - - wait_for_server_start() - - Wait for the server on the given port to start. - -******************************************************************************/ - -int wait_for_server_start(char *bin_dir __attribute__((unused)), - char *mysqladmin_file, - char *user, char *password, int port,char *tmp_dir) -{ - arg_list_t al; - int err= 0; - char trash[FN_REFLEN]; - - /* mysqladmin file */ - snprintf(trash, FN_REFLEN, "%s/trash.out",tmp_dir); - - /* args */ - init_args(&al); - add_arg(&al, "%s", mysqladmin_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--port=%u", port); - add_arg(&al, "--user=%s", user); - add_arg(&al, "--password=%s", password); - add_arg(&al, "--silent"); - add_arg(&al, "--host=localhost"); - -#ifndef __NETWARE__ - add_arg(&al, "--connect_timeout=10"); - add_arg(&al, "-w"); - add_arg(&al, "--protocol=tcp"); -#endif - add_arg(&al, "ping"); - - /* - NetWare does not support the connect timeout in the TCP/IP stack - -- we will try the ping multiple times - */ -#ifndef __WIN__ - { - int i; - for (i= 0; - (i < TRY_MAX) && (err= spawn(mysqladmin_file, &al, TRUE, NULL, - trash, NULL, NULL)); - i++) - sleep(1); - } -#else - err= spawn(mysqladmin_file, &al, TRUE, NULL,trash, NULL, NULL); -#endif - - /* free args */ - free_args(&al); - - return err; -} - -/****************************************************************************** - - spawn() - - Spawn the given path with the given arguments. - -******************************************************************************/ - -#ifdef __NETWARE__ -int spawn(char *path, arg_list_t *al, int join, char *input, - char *output, char *error, char *pid_file) -{ - pid_t pid; - int result= 0; - wiring_t wiring= { FD_UNUSED, FD_UNUSED, FD_UNUSED }; - unsigned long flags= PROC_CURRENT_SPACE | PROC_INHERIT_CWD; - - /* open wiring */ - if (input) - wiring.infd= open(input, O_RDONLY); - - if (output) - wiring.outfd= open(output, O_WRONLY | O_CREAT | O_TRUNC); - - if (error) - wiring.errfd= open(error, O_WRONLY | O_CREAT | O_TRUNC); - - /* procve requires a NULL */ - add_arg(al, NULL); - - /* go */ - pid= procve(path, flags, NULL, &wiring, NULL, NULL, 0, - NULL, (const char **)al->argv); - - /* close wiring */ - if (wiring.infd != -1) - close(wiring.infd); - - if (wiring.outfd != -1) - close(wiring.outfd); - - if (wiring.errfd != -1) - close(wiring.errfd); - - return result; -} -#elif __WIN__ - -int spawn(char *path, arg_list_t *al, int join, char *input, - char *output, char *error, HANDLE *pid) -{ - bool result; - int i; - STARTUPINFO startup_info; - PROCESS_INFORMATION process_information; - DWORD exit_code; - char win_args[1024]= ""; - - /* Skip the first parameter */ - for (i= 1; i < al->argc; i++) - { - ASSERT(al->argv[i] != NULL); - strcat(win_args,al->argv[i]); - strcat(win_args," "); - } - - memset(&startup_info,0,sizeof(STARTUPINFO)); - startup_info.cb= sizeof(STARTUPINFO); - - if (input) - freopen(input, "rb", stdin); - - if (output) - freopen(output, "wb", stdout); - - if (error) - freopen(error, "wb", stderr); - - result= CreateProcess( - path, - (LPSTR)&win_args, - NULL, - NULL, - TRUE, - 0, - NULL, - NULL, - &startup_info, - &process_information - ); - - if (result && process_information.hProcess) - { - if (join) - { - if (WaitForSingleObject(process_information.hProcess, mysqld_timeout) - == WAIT_TIMEOUT) - { - exit_code= -1; - } - else - { - GetExitCodeProcess(process_information.hProcess, &exit_code); - } - CloseHandle(process_information.hProcess); - } - else - { - exit_code= 0; - } - if (pid != NULL) - *pid= process_information.hProcess; - } - else - { - exit_code= -1; - } - if (input) - freopen("CONIN$","rb",stdin); - if (output) - freopen("CONOUT$","wb",stdout); - if (error) - freopen("CONOUT$","wb",stderr); - - return exit_code; -} -#else -int spawn(char *path, arg_list_t *al, int join, char *input, - char *output, char *error, char *pid_file __attribute__((unused))) -{ - pid_t pid; - int res_exec= 0; - int result= 0; - - pid= fork(); - - if (pid == -1) - { - fprintf(stderr, "fork was't created\n"); - /* We can't create the fork...exit with error */ - return EXIT_FAILURE; - } - - if (pid > 0) - { - /* The parent process is waiting for child process if join is not zero */ - if (join) - { - waitpid(pid, &result, 0); - if (WIFEXITED(result) != 0) - { - result= WEXITSTATUS(result); - } - else - { - result= EXIT_FAILURE; - } - } - } - else - { - - /* Child process */ - add_arg(al, NULL); - - /* Reassign streams */ - if (input) - freopen(input, "r", stdin); - - if (output) - freopen(output, "w", stdout); - - if (error) - freopen(error, "w", stderr); - - /* Spawn the process */ - if ((res_exec= execve(path, al->argv, environ)) < 0) - exit(EXIT_FAILURE); - - /* Restore streams */ - if (input) - freopen("/dev/tty", "r", stdin); - - if (output) - freopen("/dev/tty", "w", stdout); - - if (error) - freopen("/dev/tty", "w", stderr); - - exit(0); - } - - return result; -} -#endif -/****************************************************************************** - - stop_server() - - Stop the server with the given port and pid file. - -******************************************************************************/ - -int stop_server(char *bin_dir __attribute__((unused)), char *mysqladmin_file, - char *user, char *password, int port, -#ifndef __WIN__ - char *pid_file, -#else - HANDLE pid_file, -#endif - char *tmp_dir) -{ - arg_list_t al; - int err= 0; - char trash[FN_REFLEN]; - - snprintf(trash, FN_REFLEN, "%s/trash.out",tmp_dir); - - /* args */ - init_args(&al); - add_arg(&al, "%s", mysqladmin_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--port=%u", port); - add_arg(&al, "--user=%s", user); - add_arg(&al, "--password=%s", password); - add_arg(&al, "-O"); - add_arg(&al, "shutdown_timeout=20"); -#ifndef __NETWARE__ - add_arg(&al, "--protocol=tcp"); -#endif - add_arg(&al, "shutdown"); - - /* spawn */ - if ((err= spawn(mysqladmin_file, &al, TRUE, NULL, - trash, NULL, NULL)) == 0) - { - sleep_until_file_deleted(pid_file); - } - else - { -#ifndef __WIN__ - pid_t pid= get_server_pid(pid_file); - - /* shutdown failed - kill server */ - kill_server(pid); - - sleep(TRY_MAX); - - /* remove pid file if possible */ - err= remove(pid_file); -#else - TerminateProcess(pid_file,err); -#endif - } - - /* free args */ - free_args(&al); - - return err; -} - -/****************************************************************************** - - get_server_pid() - - Get the VM id with the given pid file. - -******************************************************************************/ - -#ifndef __WIN__ -pid_t get_server_pid(char *pid_file) -{ - char buf[FN_REFLEN]; - int fd, err; - char *p; - pid_t id= 0; - - /* discover id */ - fd= open(pid_file, O_RDONLY); - - err= read(fd, buf, FN_REFLEN); - - close(fd); - - if (err > 0) - { - /* terminate string */ - if ((p= strchr(buf, '\n')) != NULL) - { - *p= '\0'; - - /* check for a '\r' */ - if ((p= strchr(buf, '\r')) != NULL) - { - *p= '\0'; - } - } - else - { - buf[err]= '\0'; - } - - id= strtol(buf, NULL, 0); - } - - return id; -} - -/****************************************************************************** - - kill_server() - - Force a kill of the server with the given pid. - -******************************************************************************/ - -void kill_server(pid_t pid) -{ - if (pid > 0) - { -#if !defined(__NETWARE__) - /* Send SIGTERM to pid */ - kill(pid, SIGTERM); -#else /* __NETWARE__ */ - /* destroy vm */ - NXVmDestroy(pid); -#endif - } -} -#endif -/****************************************************************************** - - del_tree() - - Delete the directory and subdirectories. - -******************************************************************************/ - -void del_tree(char *dir) -{ -#ifndef __WIN__ - DIR *parent= opendir(dir); - struct dirent *entry; - char temp[FN_REFLEN]; - - if (parent == NULL) - { - return; - } - - while ((entry= readdir(parent)) != NULL) - { - /* create long name */ - snprintf(temp, FN_REFLEN, "%s/%s", dir, entry->d_name); - - if (entry->d_name[0] == '.') - { - /* Skip */ - } - else - { -/* FIXME missing test in acinclude.m4 */ -#ifndef STRUCT_DIRENT_HAS_D_TYPE - struct stat st; - - if (lstat(entry->d_name, &st) == -1) - { - /* FIXME error */ - return; - } - if (S_ISDIR(st.st_mode)) -#else - if (S_ISDIR(entry->d_type)) -#endif - { - /* delete subdirectory */ - del_tree(temp); - } - else - { - /* remove file */ - remove(temp); - } - } - } - /* remove directory */ - rmdir(dir); -#else - struct _finddata_t parent; -#if defined(_MSC_VER) && _MSC_VER > 1200 - intptr_t handle; -#else - long handle; -#endif /* _MSC_VER && _MSC_VER > 1200 */ - char temp[FN_REFLEN]; - char mask[FN_REFLEN]; - - snprintf(mask,FN_REFLEN,"%s/*.*",dir); - - if ((handle=_findfirst(mask,&parent)) == -1L) - { - return; - } - - do - { - /* create long name */ - snprintf(temp, FN_REFLEN, "%s/%s", dir, parent.name); - if (parent.name[0] == '.') - { - /* Skip */ - } - else - if (parent.attrib & _A_SUBDIR) - { - /* delete subdirectory */ - del_tree(temp); - } - else - { - /* remove file */ - remove(temp); - } - } while (_findnext(handle,&parent) == 0); - - _findclose(handle); - - /* remove directory */ - _rmdir(dir); -#endif -} - -/****************************************************************************** - - removef() - -******************************************************************************/ - -int removef(const char *format, ...) -{ -#ifdef __NETWARE__ - va_list ap; - char path[FN_REFLEN]; - - va_start(ap, format); - - vsnprintf(path, FN_REFLEN, format, ap); - - va_end(ap); - return remove(path); - -#elif __WIN__ - { - va_list ap; - char path[FN_REFLEN]; - struct _finddata_t parent; -#if defined(_MSC_VER) && _MSC_VER > 1200 - intptr_t handle; -#else - long handle; -#endif /* _MSC_VER && _MSC_VER > 1200 */ - char temp[FN_REFLEN]; - char *p; - - va_start(ap, format); - - vsnprintf(path, FN_REFLEN, format, ap); - - va_end(ap); - - p= path + strlen(path); - while (*p != '\\' && *p != '/' && p > path) p--; - - if ((handle=_findfirst(path,&parent)) == -1L) - { - /* if there is not files....it's ok */ - return 0; - } - - *p= '\0'; - - do - { - if (! (parent.attrib & _A_SUBDIR)) - { - snprintf(temp, FN_REFLEN, "%s/%s", path, parent.name); - remove(temp); - } - }while (_findnext(handle,&parent) == 0); - - _findclose(handle); - } -#else - DIR *parent; - struct dirent *entry; - char temp[FN_REFLEN]; - va_list ap; - char path[FN_REFLEN]; - char *p; - /* Get path with mask */ - va_start(ap, format); - - vsnprintf(path, FN_REFLEN, format, ap); - - va_end(ap); - - p= path + strlen(path); - while (*p != '\\' && *p != '/' && p > path) p--; - *p= '\0'; - p++; - - parent= opendir(path); - - if (parent == NULL) - { - return 1; /* Error, directory missing */ - } - - while ((entry= readdir(parent)) != NULL) - { - /* entry is not directory and entry matches with mask */ -#ifndef STRUCT_DIRENT_HAS_D_TYPE - struct stat st; - - /* create long name */ - snprintf(temp, FN_REFLEN, "%s/%s", path, entry->d_name); - - if (lstat(temp, &st) == -1) - { - return 1; /* Error couldn't lstat file */ - } - - if (!S_ISDIR(st.st_mode) && !fnmatch(p, entry->d_name,0)) -#else - if (!S_ISDIR(entry->d_type) && !fnmatch(p, entry->d_name,0)) -#endif - { - /* create long name */ - snprintf(temp, FN_REFLEN, "%s/%s", path, entry->d_name); - /* Delete only files */ - remove(temp); - } - } -#endif - return 0; -} - -/****************************************************************************** - - get_basedir() - -******************************************************************************/ - -void get_basedir(char *argv0, char *basedir) -{ - char temp[FN_REFLEN]; - char *p; - int position; - - ASSERT(argv0 != NULL); - ASSERT(basedir != NULL); - - strcpy(temp, strlwr(argv0)); - while ((p= strchr(temp, '\\')) != NULL) *p= '/'; - - if ((position= strinstr(temp, "/bin/")) != 0) - { - p= temp + position; - *p= '\0'; - strcpy(basedir, temp); - } -} - -uint strinstr(reg1 const char *str,reg4 const char *search) -{ - reg2 my_string i,j; - my_string start= (my_string) str; - - skipp: - while (*str != '\0') - { - if (*str++ == *search) - { - i=(my_string) str; - j= (my_string) search+1; - while (*j) - if (*i++ != *j++) goto skipp; - return ((uint) (str - start)); - } - } - return (0); -} - -/****************************************************************************** - - remove_empty_file() - -******************************************************************************/ - -void remove_empty_file(const char *file_name) -{ - struct stat file; - - if (!stat(file_name,&file)) - { - if (!file.st_size) - remove(file_name); - } -} diff --git a/mysql-test/my_manage.h b/mysql-test/my_manage.h deleted file mode 100644 index 5df77b01af8a402391b1aabbb0d5ef0848040b2e..0000000000000000000000000000000000000000 --- a/mysql-test/my_manage.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright (c) 2002 Novell, Inc. All Rights Reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef _MY_MANAGE -#define _MY_MANAGE - -/****************************************************************************** - - includes - -******************************************************************************/ - -#include <stdlib.h> -#ifndef __WIN__ -#include <unistd.h> -#endif -#ifndef __NETWARE__ -#include <string.h> -#include <my_global.h> -#include <m_string.h> - -#ifndef __WIN__ -#define strnicmp strncasecmp -#define strlwr(STRARG) (STRARG) -#else -int my_vsnprintf_(char *to, size_t n, const char* value, ...); -#endif -#endif - -/****************************************************************************** - - macros - -******************************************************************************/ - -#define ARG_BUF 10 -#define TRY_MAX 5 - -#ifdef __WIN__ -#define PATH_MAX _MAX_PATH -#define NAME_MAX _MAX_FNAME -#define kill(A,B) TerminateProcess((HANDLE)A,0) -#define NOT_NEED_PID 0 -#define MASTER_PID 1 -#define SLAVE_PID 2 -#define mysqld_timeout 60000 - -int pid_mode; -bool run_server; -bool skip_first_param; - -#define snprintf _snprintf -#define vsnprintf _vsnprintf -#endif - - -/****************************************************************************** - - structures - -******************************************************************************/ - -typedef struct -{ - - int argc; - char **argv; - - size_t size; - -} arg_list_t; - -#ifdef __WIN__ -typedef int pid_t; -#endif -/****************************************************************************** - - global variables - -******************************************************************************/ - -/****************************************************************************** - - prototypes - -******************************************************************************/ - -void init_args(arg_list_t *); -void add_arg(arg_list_t *, const char *, ...); -void free_args(arg_list_t *); - -#ifndef __WIN__ -int sleep_until_file_exists(char *); -int sleep_until_file_deleted(char *); -#else -int sleep_until_file_exists(HANDLE); -int sleep_until_file_deleted(HANDLE); -#endif -int wait_for_server_start(char *, char *, char *, char *, int,char *); - -#ifndef __WIN__ -int spawn(char *, arg_list_t *, int, char *, char *, char *, char *); -#else -int spawn(char *, arg_list_t *, int , char *, char *, char *, HANDLE *); -#endif - -#ifndef __WIN__ -int stop_server(char *, char *, char *, char *, int, char *,char *); -pid_t get_server_pid(char *); -void kill_server(pid_t pid); -#else -int stop_server(char *, char *, char *, char *, int, HANDLE,char *); -#endif -void del_tree(char *); -int removef(const char *, ...); - -void get_basedir(char *, char *); -void remove_empty_file(const char *file_name); - -bool create_system_files(const char *mdata,const char *output_file, bool test); - -#endif /* _MY_MANAGE */ diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c2e2ed8bf98c61263a586af8e2b4804c4f9d574a..a9a1d46079c26cb59668a268053f85d47ff5d6c9 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -144,7 +144,6 @@ our $glob_use_running_server= 0; our $glob_use_running_ndbcluster= 0; our $glob_use_running_ndbcluster_slave= 0; our $glob_use_embedded_server= 0; -our $glob_mysqld_restart= 0; our @glob_test_mode; our $using_ndbcluster_master= 0; @@ -285,7 +284,7 @@ our $opt_start_from; our $opt_strace_client; -our $opt_timer; +our $opt_timer= 1; our $opt_user; our $opt_user_test; @@ -503,7 +502,9 @@ sub initial_setup () { chomp($glob_cygwin_shell); } $glob_basedir= dirname($glob_mysql_test_dir); - $glob_mysql_bench_dir= "$glob_basedir/mysql-bench"; # FIXME make configurable + # Expect mysql-bench to be located adjacent to the source tree, by default + $glob_mysql_bench_dir= "$glob_basedir/../mysql-bench" + unless defined $glob_mysql_bench_dir; # needs to be same length to test logging (FIXME what???) $path_slave_load_tmpdir= "../../var/tmp"; @@ -531,10 +532,10 @@ sub command_line_setup () { my $opt_master_myport= 9306; my $opt_slave_myport= 9308; - $opt_ndbcluster_port= 9350; - $opt_ndbcluster_port_slave= 9358; - my $im_port= 9310; - my $im_mysqld1_port= 9312; + $opt_ndbcluster_port= 9310; + $opt_ndbcluster_port_slave= 9311; + my $im_port= 9312; + my $im_mysqld1_port= 9313; my $im_mysqld2_port= 9314; # @@ -609,7 +610,7 @@ sub command_line_setup () { # Specify ports 'master_port=i' => \$opt_master_myport, 'slave_port=i' => \$opt_slave_myport, - 'ndbcluster-port=i' => \$opt_ndbcluster_port, + 'ndbcluster-port|ndbcluster_port=i' => \$opt_ndbcluster_port, 'ndbcluster-port-slave=i' => \$opt_ndbcluster_port_slave, 'manager-port=i' => \$opt_manager_port, # Currently not used 'im-port=i' => \$im_port, # Instance Manager port. @@ -665,6 +666,7 @@ sub command_line_setup () { # Directories 'tmpdir=s' => \$opt_tmpdir, 'vardir=s' => \$opt_vardir, + 'benchdir=s' => \$glob_mysql_bench_dir, # Misc 'comment=s' => \$opt_comment, @@ -680,7 +682,7 @@ sub command_line_setup () { 'socket=s' => \$opt_socket, 'start-dirty' => \$opt_start_dirty, 'start-and-exit' => \$opt_start_and_exit, - 'timer' => \$opt_timer, + 'timer!' => \$opt_timer, 'unified-diff|udiff' => \$opt_udiff, 'user-test=s' => \$opt_user_test, 'user=s' => \$opt_user, @@ -1683,8 +1685,8 @@ sub run_benchmarks ($) { mtr_add_arg($args, "--create-options=TYPE=ndb"); } - my $benchdir= "$glob_basedir/sql-bench"; - chdir($benchdir); # FIXME check error + chdir($glob_mysql_bench_dir) + or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!"); # FIXME write shorter.... @@ -2562,7 +2564,7 @@ sub mysqld_arguments ($$$$$$) { mtr_add_arg($args, "%s--server-id=%d", $prefix, $id); mtr_add_arg($args, "%s--socket=%s", $prefix, $master->[$idx]->{'path_mysock'}); - mtr_add_arg($args, "%s--innodb_data_file_path=ibdata1:128M:autoextend", $prefix); + mtr_add_arg($args, "%s--innodb_data_file_path=ibdata1:10M:autoextend", $prefix); mtr_add_arg($args, "%s--local-infile", $prefix); mtr_add_arg($args, "%s--datadir=%s", $prefix, $master->[$idx]->{'path_myddir'}); @@ -2941,6 +2943,12 @@ sub im_start($$) { mtr_add_arg($args, "--defaults-file=%s", $instance_manager->{'defaults_file'}); + if ( $opt_debug ) + { + mtr_add_arg($args, "--debug=d:t:i:A,%s/log/im.trace", + $opt_vardir_trace); + } + foreach my $opt (@{$opts}) { mtr_add_arg($args, $opt); @@ -3194,11 +3202,6 @@ sub run_mysqltest ($) { mtr_init_args(\$args); - if ( $opt_valgrind_mysqltest ) - { - valgrind_arguments($args, \$exe); - } - mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--silent"); mtr_add_arg($args, "-v"); @@ -3314,6 +3317,17 @@ sub run_mysqltest ($) { # Add arguments that should not go into the MYSQL_TEST env var # ---------------------------------------------------------------------- + if ( $opt_valgrind_mysqltest ) + { + # Prefix the Valgrind options to the argument list. + # We do this here, since we do not want to Valgrind the nested invocations + # of mysqltest; that would mess up the stderr output causing test failure. + my @args_saved = @$args; + mtr_init_args(\$args); + valgrind_arguments($args, \$exe); + mtr_add_arg($args, "%s", $_) for @args_saved; + } + mtr_add_arg($args, "--test-file"); mtr_add_arg($args, $tinfo->{'path'}); @@ -3581,15 +3595,17 @@ Options to control what engine/variation to run compress Use the compressed protocol between client and server ssl Use ssl protocol between client and server skip-ssl Dont start server with support for ssl connections - bench Run the benchmark suite FIXME - small-bench FIXME + bench Run the benchmark suite + small-bench Run the benchmarks with --small-tests --small-tables Options to control directories to use - vardir=DIR The directory where files generated from the test run - is stored(default: ./var). Specifying a ramdisk or tmpfs - will speed up tests. + benchdir=DIR The directory where the benchmark suite is stored + (default: ../../mysql-bench) tmpdir=DIR The directory where temporary files are stored (default: ./var/tmp). + vardir=DIR The directory where files generated from the test run + is stored (default: ./var). Specifying a ramdisk or + tmpfs will speed up tests. Options to control what test suites or cases to run @@ -3604,8 +3620,9 @@ Options to control what test suites or cases to run skip-rpl Skip the replication test cases. skip-im Don't start IM, and skip the IM test cases skip-test=PREFIX Skip test cases which name are prefixed with PREFIX - big-test Pass "--big-test" to mysqltest which will set the environment - variable BIG_TEST, which can be checked from test cases. + big-test Pass "--big-test" to mysqltest which will set the + environment variable BIG_TEST, which can be checked + from test cases. Options that specify ports @@ -3631,25 +3648,29 @@ Options to run test on running server Options for debugging the product - gdb Start the mysqld(s) in gdb - manual-gdb Let user manually start mysqld in gdb, before running test(s) - manual-debug Let user manually start mysqld in debugger, before running test(s) + client-ddd Start mysqltest client in ddd + client-debugger=NAME Start mysqltest in the selected debugger client-gdb Start mysqltest client in gdb ddd Start mysqld in ddd - client-ddd Start mysqltest client in ddd + debug Dump trace output for all servers and client programs debugger=NAME Start mysqld in the selected debugger - client-debugger=NAME Start mysqltest in the selected debugger - strace-client FIXME + gdb Start the mysqld(s) in gdb + manual-debug Let user manually start mysqld in debugger, before + running test(s) + manual-gdb Let user manually start mysqld in gdb, before running + test(s) master-binary=PATH Specify the master "mysqld" to use slave-binary=PATH Specify the slave "mysqld" to use + strace-client Create strace output for mysqltest client Options for coverage, profiling etc gcov FIXME gprof FIXME - valgrind Run the "mysqltest" and "mysqld" executables using valgrind - valgrind-all Same as "valgrind" but will also add "verbose" and "--show-reachable" - flags to valgrind + valgrind Run the "mysqltest" and "mysqld" executables using + valgrind + valgrind-all Same as "valgrind" but will also add "verbose" and + "--show-reachable" flags to valgrind valgrind-mysqltest Run the "mysqltest" executable with valgrind valgrind-mysqld Run the "mysqld" executable with valgrind valgrind-options=ARGS Extra options to give valgrind @@ -3658,10 +3679,10 @@ Options for coverage, profiling etc Misc options comment=STR Write STR to the output + notimer Don't show test case execution time script-debug Debug this script itself - timer Show test case execution time - start-and-exit Only initiate and start the "mysqld" servers, use the startup - settings for the specified test case if any + start-and-exit Only initiate and start the "mysqld" servers, use + the startup settings for the specified test case if any start-dirty Only start the "mysqld" servers without initiation fast Don't try to cleanup from earlier runs reorder Reorder tests to get less server restarts @@ -3676,7 +3697,6 @@ Deprecated options Options not yet described, or that I want to look into more - debug local local-master netware diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 4485d8ca0739389347db31ace8fa80fa91b4f67b..aad71f89ef2fb69795e30dfd5bf3a06a2cc9a9cb 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -7,6 +7,12 @@ # List of failed cases (--force) backported from 4.1 by Joerg # :-) +#echo "##################################################"; +#echo "This script is deprecated and will soon be removed"; +#echo "Use mysql-test-run.pl instead"; +#echo "##################################################"; +#echo + #++ # Access Definitions #-- @@ -238,12 +244,9 @@ MASTER_MYPORT=9306 SLAVE_RUNNING=0 SLAVE_MYHOST=127.0.0.1 SLAVE_MYPORT=9308 # leave room for 2 masters for cluster tests -MYSQL_MANAGER_PORT=9305 # needs to be out of the way of slaves +MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log NDBCLUSTER_PORT=9350 NDBCLUSTER_PORT_SLAVE=9358 -MYSQL_MANAGER_PW_FILE=$MYSQL_TEST_DIR/var/tmp/manager.pwd -MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log -MYSQL_MANAGER_USER=root # # To make it easier for different devs to work on the same host, @@ -257,14 +260,12 @@ MYSQL_MANAGER_USER=root # if [ -n "$MTR_BUILD_THREAD" ] ; then MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 10 + 10000` - MYSQL_MANAGER_PORT=`expr $MASTER_MYPORT + 2` SLAVE_MYPORT=`expr $MASTER_MYPORT + 3` NDBCLUSTER_PORT=`expr $MASTER_MYPORT + 6` NDBCLUSTER_PORT_SLAVE=`expr $MASTER_MYPORT + 7` echo "Using MTR_BUILD_THREAD = $MTR_BUILD_THREAD" echo "Using MASTER_MYPORT = $MASTER_MYPORT" - echo "Using MYSQL_MANAGER_PORT = $MYSQL_MANAGER_PORT" echo "Using SLAVE_MYPORT = $SLAVE_MYPORT" echo "Using NDBCLUSTER_PORT = $NDBCLUSTER_PORT" echo "Using NDBCLUSTER_PORT_SLAVE = $NDBCLUSTER_PORT_SLAVE" @@ -330,6 +331,8 @@ STRESS_INIT_FILE="" STRESS_TEST_FILE="" STRESS_TEST="" +$ECHO "Logging: $0 $*" # To ensure we see all arguments in the output, for the test analysis tool + while test $# -gt 0; do case "$1" in --embedded-server) @@ -347,7 +350,6 @@ while test $# -gt 0; do --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;; --force) FORCE=1 ;; --timer) USE_TIMER=1 ;; - --verbose-manager) MANAGER_QUIET_OPT="" ;; --old-master) MASTER_40_ARGS="";; --master-binary=*) MASTER_MYSQLD=`$ECHO "$1" | $SED -e "s;--master-binary=;;"` ;; @@ -393,7 +395,6 @@ while test $# -gt 0; do LOCAL_MASTER=1 ;; --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;; --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;; - --manager-port=*) MYSQL_MANAGER_PORT=`$ECHO "$1" | $SED -e "s;--manager_port=;;"` ;; --ndbcluster_port=*) NDBCLUSTER_PORT=`$ECHO "$1" | $SED -e "s;--ndbcluster_port=;;"` ;; --ndbcluster-port=*) NDBCLUSTER_PORT=`$ECHO "$1" | $SED -e "s;--ndbcluster-port=;;"` ;; --ndbcluster-port-slave=*) NDBCLUSTER_PORT_SLAVE=`$ECHO "$1" | $SED -e "s;--ndbcluster-port-slave=;;"` ;; @@ -409,11 +410,6 @@ while test $# -gt 0; do MYSQL_TEST_SSL_OPTS="--ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem \ --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem \ --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem" ;; - --no-manager | --skip-manager) USE_MANAGER=0 ;; - --manager) - USE_MANAGER=1 - USE_RUNNING_SERVER=0 - ;; --start-and-exit) START_AND_EXIT=1 ;; @@ -631,7 +627,6 @@ fi #-- MYRUN_DIR=$MYSQL_TEST_DIR/var/run -MANAGER_PID_FILE="$MYRUN_DIR/manager.pid" MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data" MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock" @@ -745,9 +740,6 @@ if [ x$SOURCE_DIST = x1 ] ; then MYSQLADMIN="$CLIENT_BINDIR/mysqladmin" WAIT_PID="$BASEDIR/extra/mysql_waitpid" MYSQL_MY_PRINT_DEFAULTS="$BASEDIR/extra/my_print_defaults" - MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqltestmanagerc" - MYSQL_MANAGER="$BASEDIR/tools/mysqltestmanager" - MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqltestmanager-pwgen" MYSQL="$CLIENT_BINDIR/mysql" LANGUAGE="$BASEDIR/sql/share/english/" CHARSETSDIR="$BASEDIR/sql/share/charsets" @@ -808,9 +800,6 @@ else MYSQLADMIN="$CLIENT_BINDIR/mysqladmin" WAIT_PID="$CLIENT_BINDIR/mysql_waitpid" MYSQL_MY_PRINT_DEFAULTS="$CLIENT_BINDIR/my_print_defaults" - MYSQL_MANAGER="$CLIENT_BINDIR/mysqltestmanager" - MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqltestmanagerc" - MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqltestmanager-pwgen" MYSQL="$CLIENT_BINDIR/mysql" INSTALL_DB="./install_test_db --bin" MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables" @@ -1200,96 +1189,28 @@ abort_if_failed() fi } -start_manager() -{ - if [ $USE_MANAGER = 0 ] ; then - echo "Manager disabled, skipping manager start." - $RM -f $MYSQL_MANAGER_LOG - return - fi - $ECHO "Starting MySQL Manager" - if [ -f "$MANAGER_PID_FILE" ] ; then - kill `cat $MANAGER_PID_FILE` - sleep 1 - if [ -f "$MANAGER_PID_FILE" ] ; then - kill -9 `cat $MANAGER_PID_FILE` - sleep 1 - fi - fi - - $RM -f $MANAGER_PID_FILE - MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \ - -o $MYSQL_MANAGER_PW_FILE` - $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \ - --password-file=$MYSQL_MANAGER_PW_FILE --pid-file=$MANAGER_PID_FILE - abort_if_failed "Could not start MySQL manager" - mysqltest_manager_args="--manager-host=localhost \ - --manager-user=$MYSQL_MANAGER_USER \ - --manager-password=$MYSQL_MANAGER_PW \ - --manager-port=$MYSQL_MANAGER_PORT \ - --manager-wait-timeout=$START_WAIT_TIMEOUT" - MYSQL_TEST="$MYSQL_TEST $mysqltest_manager_args" - MYSQL_TEST_ARGS="$MYSQL_TEST_ARGS $mysqltest_manager_args" - while [ ! -f $MANAGER_PID_FILE ] ; do - sleep 1 - done - echo "Manager started" -} - -stop_manager() -{ - if [ $USE_MANAGER = 0 ] ; then - return - fi - $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \ - -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF -shutdown -EOF - echo "Manager terminated" - -} - -manager_launch() +launch_in_background() { - ident=$1 shift - if [ $USE_MANAGER = 0 ] ; then - echo $@ | /bin/sh >> $CUR_MYERR 2>&1 & - sleep 2 #hack - return - fi - $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \ - --password=$MYSQL_MANAGER_PW --port=$MYSQL_MANAGER_PORT <<EOF -def_exec $ident "$@" -set_exec_stdout $ident $CUR_MYERR -set_exec_stderr $ident $CUR_MYERR -set_exec_con $ident root localhost $CUR_MYSOCK -start_exec $ident $START_WAIT_TIMEOUT -EOF - abort_if_failed "Could not execute manager command" + echo $@ | /bin/sh >> $CUR_MYERR 2>&1 & + sleep 2 #hack + return } -manager_term() +shutdown_mysqld() { pid=$1 ident=$2 - if [ $USE_MANAGER = 0 ] ; then - # Shutdown time must be high as slave may be in reconnect - $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1 - res=$? - # Some systems require an extra connect - $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1 - if test $res = 0 - then - wait_for_pid $pid - fi - return $res + # Shutdown time must be high as slave may be in reconnect + $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=5 --shutdown_timeout=70 shutdown >> $MYSQL_MANAGER_LOG 2>&1 + res=$? + # Some systems require an extra connect + $MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock$3 --connect_timeout=1 ping >> $MYSQL_MANAGER_LOG 2>&1 + if test $res = 0 + then + wait_for_pid $pid fi - $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \ - --password=$MYSQL_MANAGER_PW --port=$MYSQL_MANAGER_PORT <<EOF -stop_exec $ident $STOP_WAIT_TIMEOUT -EOF - abort_if_failed "Could not execute manager command" + return $res } start_ndbcluster() @@ -1472,7 +1393,7 @@ start_master() if [ x$DO_DDD = x1 ] then $ECHO "set args $master_args" > $GDB_MASTER_INIT$1 - manager_launch master ddd -display $DISPLAY --debugger \ + launch_in_background master ddd -display $DISPLAY --debugger \ "gdb -x $GDB_MASTER_INIT$1" $MASTER_MYSQLD elif [ x$DO_GDB = x1 ] then @@ -1493,11 +1414,11 @@ end r EOF fi ) > $GDB_MASTER_INIT$1 - manager_launch master $XTERM -display $DISPLAY \ + launch_in_background master $XTERM -display $DISPLAY \ -title "Master" -e gdb -x $GDB_MASTER_INIT$1 $MASTER_MYSQLD fi else - manager_launch master $MASTER_MYSQLD $master_args + launch_in_background master $MASTER_MYSQLD $master_args fi sleep_until_file_created $MASTER_MYPID$1 $wait_for_master wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER @@ -1630,7 +1551,7 @@ start_slave() if [ x$DO_DDD = x1 ] then $ECHO "set args $slave_args" > $GDB_SLAVE_INIT - manager_launch $slave_ident ddd -display $DISPLAY --debugger \ + launch_in_background $slave_ident ddd -display $DISPLAY --debugger \ "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD elif [ x$DO_GDB = x1 ] then @@ -1651,11 +1572,11 @@ end r EOF fi ) > $GDB_SLAVE_INIT - manager_launch $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \ + launch_in_background $slave_ident $XTERM -display $DISPLAY -title "Slave" -e \ gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD fi else - manager_launch $slave_ident $SLAVE_MYSQLD $slave_args + launch_in_background $slave_ident $SLAVE_MYSQLD $slave_args fi eval "SLAVE$1_RUNNING=1" sleep_until_file_created $slave_pid $wait_for_slave @@ -1687,7 +1608,7 @@ stop_slave () if [ x$this_slave_running = x1 ] then pid=`$CAT $slave_pid` - manager_term $pid $slave_ident + shutdown_mysqld $pid $slave_ident if [ $? != 0 ] && [ -f $slave_pid ] then # try harder! $ECHO "slave not cooperating with mysqladmin, will try manual kill" @@ -1734,7 +1655,7 @@ stop_master () # MASTER_RUNNING=0 to get cleanup when calling start_master(). if [ x$USE_EMBEDDED_SERVER != x1 ] ; then pid=`$CAT $MASTER_MYPID$1` - manager_term $pid master $1 + shutdown_mysqld $pid master $1 if [ $? != 0 ] && [ -f $MASTER_MYPID$1 ] then # try harder! $ECHO "master not cooperating with mysqladmin, will try manual kill" @@ -2060,7 +1981,6 @@ run_testcase () [ -z "$DO_DDD" ] && [ -z "$USE_EMBEDDED_SERVER" ] then mysql_stop - stop_manager fi exit 1 fi @@ -2230,18 +2150,6 @@ then rm $MASTER_MYPID $MASTER_MYPID"1" $SLAVE_MYPID fi - # Kill any running managers - if [ -f "$MANAGER_PID_FILE" ] - then - kill `cat $MANAGER_PID_FILE` - sleep 1 - if [ -f "$MANAGER_PID_FILE" ] - then - kill -9 `cat $MANAGER_PID_FILE` - sleep 1 - fi - fi - # just to force stopping anything from previous runs USE_NDBCLUSTER_OPT=$USE_NDBCLUSTER stop_ndbcluster @@ -2265,10 +2173,8 @@ then USE_NDBCLUSTER_OPT= fi - start_manager - -# Do not automagically start daemons if we are in gdb or running only one test -# case +# Do not automagically start daemons if we are in gdb or running only one +# test case if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ] then mysql_start @@ -2315,7 +2221,6 @@ then fi cd $savedir mysql_stop - stop_manager exit fi @@ -2337,7 +2242,6 @@ then if [ $USE_RUNNING_SERVER -eq 0 ] ; then mysql_stop - stop_manager fi exit @@ -2384,7 +2288,6 @@ if [ -z "$DO_GDB" ] && [ $USE_RUNNING_SERVER -eq 0 ] && [ -z "$DO_DDD" ] then mysql_stop fi -stop_manager report_stats $ECHO diff --git a/mysql-test/mysql_test_run_new.c b/mysql-test/mysql_test_run_new.c deleted file mode 100644 index 79db71fa274cb86c62a31215fbdc9dca3ed5a827..0000000000000000000000000000000000000000 --- a/mysql-test/mysql_test_run_new.c +++ /dev/null @@ -1,1933 +0,0 @@ -/* - Copyright (c) 2002, 2003 Novell, Inc. All Rights Reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#ifndef __WIN__ -#include <dirent.h> -#endif -#include <string.h> -#ifdef __NETWARE__ -#include <screen.h> -#include <nks/vm.h> -#endif -#include <ctype.h> -#include <sys/stat.h> -#ifndef __WIN__ -#include <unistd.h> -#endif -#include <fcntl.h> -#ifdef __NETWARE__ -#include <sys/mode.h> -#endif -#ifdef __WIN__ -#include <windows.h> -#include <shlwapi.h> -#include <direct.h> -#endif - -#include "my_manage.h" - -/****************************************************************************** - - macros - -******************************************************************************/ - -#define HEADER "TEST RESULT \n" -#define DASH "-------------------------------------------------------\n" - -#define NW_TEST_SUFFIX ".nw-test" -#define NW_RESULT_SUFFIX ".nw-result" -#define TEST_SUFFIX ".test" -#define RESULT_SUFFIX ".result" -#define REJECT_SUFFIX ".reject" -#define OUT_SUFFIX ".out" -#define ERR_SUFFIX ".err" - -const char *TEST_PASS= "[ pass ]"; -const char *TEST_SKIP= "[ skip ]"; -const char *TEST_FAIL= "[ fail ]"; -const char *TEST_BAD= "[ bad ]"; -const char *TEST_IGNORE= "[ignore]"; - -/****************************************************************************** - - global variables - -******************************************************************************/ - -#ifdef __NETWARE__ -static char base_dir[FN_REFLEN]= "sys:/mysql"; -#else -static char base_dir[FN_REFLEN]= ".."; -#endif -static char db[FN_LEN]= "test"; -static char user[FN_LEN]= "root"; -static char password[FN_LEN]= ""; - -int master_port= 9306; -int slave_port= 9307; - -#if !defined(__NETWARE__) && !defined(__WIN__) -static char master_socket[FN_REFLEN]= "./var/tmp/master.sock"; -static char slave_socket[FN_REFLEN]= "./var/tmp/slave.sock"; -#endif - -#define MAX_COUNT_TESTES 1024 - -#ifdef __WIN__ -# define sting_compare_func _stricmp -#else -# ifdef HAVE_STRCASECMP -# define sting_compare_func strcasecmp -# else -# define sting_compare_func strcmp -# endif -#endif - -/* comma delimited list of tests to skip or empty string */ -#ifndef __WIN__ -static char skip_test[FN_REFLEN]= " lowercase_table3 , system_mysql_db_fix "; -#else -/* - The most ignore testes contain the calls of system command - - lowercase_table3 is disabled by Gerg - system_mysql_db_fix is disabled by Gerg - sp contains a command system - rpl_EE_error contains a command system - rpl_loaddatalocal contains a command system - ndb_autodiscover contains a command system - rpl_rotate_logs contains a command system - repair contains a command system - rpl_trunc_binlog contains a command system - mysqldump contains a command system - rpl000001 makes non-exit loop...temporary skiped -*/ -static char skip_test[FN_REFLEN]= -" lowercase_table3 ," -" system_mysql_db_fix ," -" sp ," -" rpl_EE_error ," -" rpl_loaddatalocal ," -" ndb_autodiscover ," -" rpl_rotate_logs ," -" repair ," -" rpl_trunc_binlog ," -" mysqldump ," -" rpl000001 ," - -" derived ," -" group_by ," -" select ," -" rpl000015 ," -" subselect "; -#endif -static char ignore_test[FN_REFLEN]= ""; - -static char bin_dir[FN_REFLEN]; -static char mysql_test_dir[FN_REFLEN]; -static char test_dir[FN_REFLEN]; -static char mysql_tmp_dir[FN_REFLEN]; -static char result_dir[FN_REFLEN]; -static char master_dir[FN_REFLEN]; -static char slave_dir[FN_REFLEN]; -static char slave1_dir[FN_REFLEN]; -static char slave2_dir[FN_REFLEN]; -static char lang_dir[FN_REFLEN]; -static char char_dir[FN_REFLEN]; - -static char mysqladmin_file[FN_REFLEN]; -static char mysqld_file[FN_REFLEN]; -static char mysqltest_file[FN_REFLEN]; -#ifndef __WIN__ -static char master_pid[FN_REFLEN]; -static char slave_pid[FN_REFLEN]; -static char sh_file[FN_REFLEN]= "/bin/sh"; -#else -static HANDLE master_pid; -static HANDLE slave_pid; -#endif - -static char master_opt[FN_REFLEN]= ""; -static char slave_opt[FN_REFLEN]= ""; - -static char slave_master_info[FN_REFLEN]= ""; - -static char master_init_script[FN_REFLEN]= ""; -static char slave_init_script[FN_REFLEN]= ""; - -/* OpenSSL */ -static char ca_cert[FN_REFLEN]; -static char server_cert[FN_REFLEN]; -static char server_key[FN_REFLEN]; -static char client_cert[FN_REFLEN]; -static char client_key[FN_REFLEN]; - -int total_skip= 0; -int total_pass= 0; -int total_fail= 0; -int total_test= 0; - -int total_ignore= 0; - -int use_openssl= FALSE; -int master_running= FALSE; -int slave_running= FALSE; -int skip_slave= TRUE; -int single_test= TRUE; - -int restarts= 0; - -FILE *log_fd= NULL; - -static char argument[FN_REFLEN]; - -/****************************************************************************** - - functions - -******************************************************************************/ - -/****************************************************************************** - - prototypes - -******************************************************************************/ - -void report_stats(); -void install_db(char *); -void mysql_install_db(); -void start_master(); -void start_slave(); -void mysql_start(); -void stop_slave(); -void stop_master(); -void mysql_stop(); -void mysql_restart(); -int read_option(char *, char *); -void run_test(char *); -void setup(char *); -void vlog(const char *, va_list); -void mlog(const char *, ...); -void log_info(const char *, ...); -void log_error(const char *, ...); -void log_errno(const char *, ...); -void die(const char *); -char *str_tok(char* dest, char *string, const char *delim); -#ifndef __WIN__ -void run_init_script(const char *script_name); -#endif -/****************************************************************************** - - report_stats() - - Report the gathered statistics. - -******************************************************************************/ - -void report_stats() -{ - if (total_fail == 0) - { - mlog("\nAll %d test(s) were successful.\n", total_test); - } - else - { - double percent= ((double)total_pass / total_test) * 100; - - mlog("\nFailed %u/%u test(s), %.02f%% successful.\n", - total_fail, total_test, percent); - mlog("\nThe .out and .err files in %s may give you some\n", result_dir); - mlog("hint of what when wrong.\n"); - mlog("\nIf you want to report this error, please first read " - "the documentation\n"); - mlog("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n"); - } -} - -/****************************************************************************** - - install_db() - - Install the a database. - -******************************************************************************/ - -void install_db(char *datadir) -{ - arg_list_t al; - int err; - char input[FN_REFLEN]; - char output[FN_REFLEN]; - char error[FN_REFLEN]; - - /* input file */ -#ifdef __NETWARE__ - snprintf(input, FN_REFLEN, "%s/bin/init_db.sql", base_dir); -#else - snprintf(input, FN_REFLEN, "%s/mysql-test/init_db.sql", base_dir); -#endif - snprintf(output, FN_REFLEN, "%s/install.out", datadir); - snprintf(error, FN_REFLEN, "%s/install.err", datadir); - - if (create_system_files(datadir,input, TRUE)) - die("Unable to create init_db.sql."); - /* args */ - init_args(&al); - add_arg(&al, mysqld_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--bootstrap"); - add_arg(&al, "--skip-grant-tables"); - add_arg(&al, "--basedir=%s", base_dir); - add_arg(&al, "--datadir=%s", datadir); - add_arg(&al, "--skip-innodb"); - add_arg(&al, "--skip-ndbcluster"); - add_arg(&al, "--skip-bdb"); -#ifndef __NETWARE__ - add_arg(&al, "--character-sets-dir=%s", char_dir); - add_arg(&al, "--language=%s", lang_dir); -#endif -// added - add_arg(&al, "--default-character-set=latin1"); - add_arg(&al, "--innodb_data_file_path=ibdata1:50M"); - - /* spawn */ - if ((err= spawn(mysqld_file, &al, TRUE, input, output, error, NULL)) != 0) - { - die("Unable to create database."); - } - - /* free args */ - free_args(&al); -} - -/****************************************************************************** - - mysql_install_db() - - Install the test databases. - -******************************************************************************/ - -void mysql_install_db() -{ - char temp[FN_REFLEN]; - - /* var directory */ - snprintf(temp, FN_REFLEN, "%s/var", mysql_test_dir); - - /* create var directory */ -#ifndef __WIN__ - mkdir(temp, S_IRWXU); - /* create subdirectories */ - mlog("Creating test-suite folders...\n"); - snprintf(temp, FN_REFLEN, "%s/var/run", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/tmp", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/master-data", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/master-data/mysql", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/master-data/test", mysql_test_dir); - mkdir(temp, S_IRWXU); - - snprintf(temp, FN_REFLEN, "%s/var/slave-data", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave-data/mysql", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave-data/test", mysql_test_dir); - mkdir(temp, S_IRWXU); - - snprintf(temp, FN_REFLEN, "%s/var/slave1-data", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave1-data/mysql", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave1-data/test", mysql_test_dir); - mkdir(temp, S_IRWXU); - - snprintf(temp, FN_REFLEN, "%s/var/slave2-data", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave2-data/mysql", mysql_test_dir); - mkdir(temp, S_IRWXU); - snprintf(temp, FN_REFLEN, "%s/var/slave2-data/test", mysql_test_dir); - mkdir(temp, S_IRWXU); -#else - mkdir(temp); - /* create subdirectories */ - mlog("Creating test-suite folders...\n"); - snprintf(temp, FN_REFLEN, "%s/var/run", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/tmp", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/master-data", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/master-data/mysql", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/master-data/test", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/slave-data", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/slave-data/mysql", mysql_test_dir); - mkdir(temp); - snprintf(temp, FN_REFLEN, "%s/var/slave-data/test", mysql_test_dir); - mkdir(temp); -#endif - - /* install databases */ - mlog("Creating test databases for master... \n"); - install_db(master_dir); - mlog("Creating test databases for slave... \n"); - install_db(slave_dir); - install_db(slave1_dir); - install_db(slave2_dir); -} - -/****************************************************************************** - - start_master() - - Start the master server. - -******************************************************************************/ - -void start_master() -{ - arg_list_t al; - int err; - char master_out[FN_REFLEN]; - char master_err[FN_REFLEN]; - char temp2[FN_REFLEN]; - - /* remove old berkeley db log files that can confuse the server */ - removef("%s/log.*", master_dir); - - /* remove stale binary logs */ - removef("%s/var/log/*-bin.*", mysql_test_dir); - - /* remove stale binary logs */ - removef("%s/var/log/*.index", mysql_test_dir); - - /* remove master.info file */ - removef("%s/master.info", master_dir); - - /* remove relay files */ - removef("%s/var/log/*relay*", mysql_test_dir); - - /* remove relay-log.info file */ - removef("%s/relay-log.info", master_dir); - - /* init script */ - if (master_init_script[0] != 0) - { -#ifdef __NETWARE__ - /* TODO: use the scripts */ - if (strinstr(master_init_script, "repair_part2-master.sh") != 0) - { - FILE *fp; - - /* create an empty index file */ - snprintf(temp, FN_REFLEN, "%s/test/t1.MYI", master_dir); - fp= fopen(temp, "wb+"); - - fputs("1", fp); - - fclose(fp); - } -#elif !defined(__WIN__) - run_init_script(master_init_script); -#endif - } - - /* redirection files */ - snprintf(master_out, FN_REFLEN, "%s/var/run/master%u.out", - mysql_test_dir, restarts); - snprintf(master_err, FN_REFLEN, "%s/var/run/master%u.err", - mysql_test_dir, restarts); -#ifndef __WIN__ - snprintf(temp2,FN_REFLEN,"%s/var",mysql_test_dir); - mkdir(temp2,S_IRWXU); - snprintf(temp2,FN_REFLEN,"%s/var/log",mysql_test_dir); - mkdir(temp2,S_IRWXU); -#else - snprintf(temp2,FN_REFLEN,"%s/var",mysql_test_dir); - mkdir(temp2); - snprintf(temp2,FN_REFLEN,"%s/var/log",mysql_test_dir); - mkdir(temp2); -#endif - /* args */ - init_args(&al); - add_arg(&al, "%s", mysqld_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--log-bin=%s/var/log/master-bin",mysql_test_dir); - add_arg(&al, "--server-id=1"); - add_arg(&al, "--basedir=%s", base_dir); - add_arg(&al, "--port=%u", master_port); -#if !defined(__NETWARE__) && !defined(__WIN__) - add_arg(&al, "--socket=%s",master_socket); -#endif - add_arg(&al, "--local-infile"); - add_arg(&al, "--core"); - add_arg(&al, "--log-bin-trust-function-creators"); - add_arg(&al, "--datadir=%s", master_dir); -#ifndef __WIN__ - add_arg(&al, "--pid-file=%s", master_pid); -#endif - add_arg(&al, "--character-sets-dir=%s", char_dir); - add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); - add_arg(&al, "--language=%s", lang_dir); - - add_arg(&al, "--rpl-recovery-rank=1"); - add_arg(&al, "--init-rpl-role=master"); - add_arg(&al, "--default-character-set=latin1"); -// add_arg(&al, "--innodb_data_file_path=ibdata1:50M"); -#ifdef DEBUG /* only for debug builds */ - add_arg(&al, "--debug"); -#endif - - if (use_openssl) - { - add_arg(&al, "--ssl-ca=%s", ca_cert); - add_arg(&al, "--ssl-cert=%s", server_cert); - add_arg(&al, "--ssl-key=%s", server_key); - } - - /* $MASTER_40_ARGS */ - add_arg(&al, "--rpl-recovery-rank=1"); - add_arg(&al, "--init-rpl-role=master"); - - /* $SMALL_SERVER */ - add_arg(&al, "-O"); - add_arg(&al, "key_buffer_size=1M"); - add_arg(&al, "-O"); - add_arg(&al, "sort_buffer=256K"); - add_arg(&al, "-O"); - add_arg(&al, "max_heap_table_size=1M"); - - /* $EXTRA_MASTER_OPT */ - if (master_opt[0] != 0) - { - char *p; - - p= (char *)str_tok(argument, master_opt, " \t"); - if (!strstr(master_opt, "timezone")) - { - while (p) - { - add_arg(&al, "%s", p); - p= (char *)str_tok(argument, NULL, " \t"); - } - } - } - - /* remove the pid file if it exists */ -#ifndef __WIN__ - remove(master_pid); -#endif - - /* spawn */ -#ifdef __WIN__ - if ((err= spawn(mysqld_file, &al, FALSE, NULL, - master_out, master_err, &master_pid)) == 0) -#else - if ((err= spawn(mysqld_file, &al, FALSE, NULL, - master_out, master_err, master_pid)) == 0) -#endif - { - sleep_until_file_exists(master_pid); - - if ((err= wait_for_server_start(bin_dir, mysqladmin_file, user, password, - master_port, mysql_tmp_dir)) == 0) - { - master_running= TRUE; - } - else - { - log_error("The master server went down early."); - } - } - else - { - log_error("Unable to start master server."); - } - - /* free_args */ - free_args(&al); -} - -/****************************************************************************** - - start_slave() - - Start the slave server. - -******************************************************************************/ - -void start_slave() -{ - arg_list_t al; - int err; - char slave_out[FN_REFLEN]; - char slave_err[FN_REFLEN]; - - /* skip? */ - if (skip_slave) return; - - /* remove stale binary logs */ - removef("%s/*-bin.*", slave_dir); - - /* remove stale binary logs */ - removef("%s/*.index", slave_dir); - - /* remove master.info file */ - removef("%s/master.info", slave_dir); - - /* remove relay files */ - removef("%s/var/log/*relay*", mysql_test_dir); - - /* remove relay-log.info file */ - removef("%s/relay-log.info", slave_dir); - - /* init script */ - if (slave_init_script[0] != 0) - { -#ifdef __NETWARE__ - /* TODO: use the scripts */ - if (strinstr(slave_init_script, "rpl000016-slave.sh") != 0) - { - /* create empty master.info file */ - snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir); - close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); - } - else if (strinstr(slave_init_script, "rpl000017-slave.sh") != 0) - { - FILE *fp; - - /* create a master.info file */ - snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir); - fp= fopen(temp, "wb+"); - - fputs("master-bin.000001\n", fp); - fputs("4\n", fp); - fputs("127.0.0.1\n", fp); - fputs("replicate\n", fp); - fputs("aaaaaaaaaaaaaaab\n", fp); - fputs("9306\n", fp); - fputs("1\n", fp); - fputs("0\n", fp); - - fclose(fp); - } - else if (strinstr(slave_init_script, "rpl_rotate_logs-slave.sh") != 0) - { - /* create empty master.info file */ - snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir); - close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); - } -#elif !defined(__WIN__) - run_init_script(slave_init_script); -#endif - } - - /* redirection files */ - snprintf(slave_out, FN_REFLEN, "%s/var/run/slave%u.out", - mysql_test_dir, restarts); - snprintf(slave_err, FN_REFLEN, "%s/var/run/slave%u.err", - mysql_test_dir, restarts); - - /* args */ - init_args(&al); - add_arg(&al, "%s", mysqld_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--log-bin=slave-bin"); - add_arg(&al, "--relay_log=slave-relay-bin"); - add_arg(&al, "--basedir=%s", base_dir); -#if !defined(__NETWARE__) && !defined(__WIN__) - add_arg(&al, "--socket=%s",slave_socket); -#endif - add_arg(&al, "--port=%u", slave_port); - add_arg(&al, "--datadir=%s", slave_dir); -#ifndef __WIN__ - add_arg(&al, "--pid-file=%s", slave_pid); -#endif - add_arg(&al, "--character-sets-dir=%s", char_dir); - add_arg(&al, "--core"); - add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); - add_arg(&al, "--language=%s", lang_dir); - - add_arg(&al, "--exit-info=256"); - add_arg(&al, "--log-slave-updates"); - add_arg(&al, "--init-rpl-role=slave"); - add_arg(&al, "--skip-innodb"); - add_arg(&al, "--skip-slave-start"); - add_arg(&al, "--slave-load-tmpdir=../../var/tmp"); - - add_arg(&al, "--report-user=%s", user); - add_arg(&al, "--report-host=127.0.0.1"); - add_arg(&al, "--report-port=%u", slave_port); - - add_arg(&al, "--master-retry-count=10"); - add_arg(&al, "-O"); - add_arg(&al, "slave_net_timeout=10"); - add_arg(&al, "--log-slave-updates"); - add_arg(&al, "--log=%s/var/log/slave.log", mysql_test_dir); - add_arg(&al, "--default-character-set=latin1"); - add_arg(&al, "--skip-ndbcluster"); - -#ifdef DEBUG /* only for debug builds */ - add_arg(&al, "--debug"); -#endif - - if (use_openssl) - { - add_arg(&al, "--ssl-ca=%s", ca_cert); - add_arg(&al, "--ssl-cert=%s", server_cert); - add_arg(&al, "--ssl-key=%s", server_key); - } - - /* slave master info */ - if (slave_master_info[0] != 0) - { - char *p; - - p= (char *)str_tok(argument, slave_master_info, " \t"); - - while (p) - { - add_arg(&al, "%s", p); - p= (char *)str_tok(argument, NULL, " \t"); - } - } - else - { - add_arg(&al, "--master-user=%s", user); - add_arg(&al, "--master-password=%s", password); - add_arg(&al, "--master-host=127.0.0.1"); - add_arg(&al, "--master-port=%u", master_port); - add_arg(&al, "--master-connect-retry=1"); - add_arg(&al, "--server-id=2"); - add_arg(&al, "--rpl-recovery-rank=2"); - } - - /* small server */ - add_arg(&al, "-O"); - add_arg(&al, "key_buffer_size=1M"); - add_arg(&al, "-O"); - add_arg(&al, "sort_buffer=256K"); - add_arg(&al, "-O"); - add_arg(&al, "max_heap_table_size=1M"); - - - /* opt args */ - if (slave_opt[0] != 0) - { - char *p; - - p= (char *)str_tok(argument, slave_opt, " \t"); - - while (p) - { - add_arg(&al, "%s", p); - p= (char *)str_tok(argument, NULL, " \t"); - } - } - - /* remove the pid file if it exists */ -#ifndef __WIN__ - remove(slave_pid); -#endif - /* spawn */ -#ifdef __WIN__ - if ((err= spawn(mysqld_file, &al, FALSE, NULL, - slave_out, slave_err, &slave_pid)) == 0) -#else - if ((err= spawn(mysqld_file, &al, FALSE, NULL, - slave_out, slave_err, slave_pid)) == 0) -#endif - { - sleep_until_file_exists(slave_pid); - - if ((err= wait_for_server_start(bin_dir, mysqladmin_file, user, password, - slave_port, mysql_tmp_dir)) == 0) - { - slave_running= TRUE; - } - else - { - log_error("The slave server went down early."); - } - } - else - { - log_error("Unable to start slave server."); - } - - /* free args */ - free_args(&al); -} - -/****************************************************************************** - - mysql_start() - - Start the mysql servers. - -******************************************************************************/ - -void mysql_start() -{ - - - printf("loading master...\r"); - start_master(); - - printf("loading slave...\r"); - start_slave(); - - /* activate the test screen */ -#ifdef __NETWARE__ - ActivateScreen(getscreenhandle()); -#endif -} - -/****************************************************************************** - - stop_slave() - - Stop the slave server. - -******************************************************************************/ - -void stop_slave() -{ - int err; - - /* running? */ - if (!slave_running) return; - - /* stop */ - if ((err= stop_server(bin_dir, mysqladmin_file, user, password, - slave_port, slave_pid, mysql_tmp_dir)) == 0) - { - slave_running= FALSE; - } - else - { - log_error("Unable to stop slave server."); - } -} - -/****************************************************************************** - - stop_master() - - Stop the master server. - -******************************************************************************/ - -void stop_master() -{ - int err; - - /* running? */ - if (!master_running) return; - - if ((err= stop_server(bin_dir, mysqladmin_file, user, password, - master_port, master_pid, mysql_tmp_dir)) == 0) - { - master_running= FALSE; - } - else - { - log_error("Unable to stop master server."); - } -} - -/****************************************************************************** - - mysql_stop() - - Stop the mysql servers. - -******************************************************************************/ - -void mysql_stop() -{ - - stop_master(); - - stop_slave(); - - /* activate the test screen */ -#ifdef __NETWARE__ - ActivateScreen(getscreenhandle()); -#endif -} - -/****************************************************************************** - - mysql_restart() - - Restart the mysql servers. - -******************************************************************************/ - -void mysql_restart() -{ -/* log_info("Restarting the MySQL server(s): %u", ++restarts); */ - - mysql_stop(); - - mlog(DASH); - sleep(1); - - mysql_start(); -} - -/****************************************************************************** - - read_option() - - Read the option file. - -******************************************************************************/ - -int read_option(char *opt_file, char *opt) -{ - int fd, err; - char *p; - char buf[FN_REFLEN]; - - /* copy current option */ - strncpy(buf, opt, FN_REFLEN); - - /* open options file */ - fd= open(opt_file, O_RDONLY); - err= read(fd, opt, FN_REFLEN); - close(fd); - - if (err > 0) - { - /* terminate string */ - if ((p= strchr(opt, '\n')) != NULL) - { - *p= 0; - - /* check for a '\r' */ - if ((p= strchr(opt, '\r')) != NULL) - { - *p= 0; - } - } - else - { - opt[err]= 0; - } - - /* check for $MYSQL_TEST_DIR */ - if ((p= strstr(opt, "$MYSQL_TEST_DIR")) != NULL) - { - char temp[FN_REFLEN]; - - *p= 0; - - strcpy(temp, p + strlen("$MYSQL_TEST_DIR")); - strcat(opt, mysql_test_dir); - strcat(opt, temp); - } - /* Check for double backslash and replace it with single bakslash */ - if ((p= strstr(opt, "\\\\")) != NULL) - { - /* bmove is guranteed to work byte by byte */ - bmove(p, p+1, strlen(p)+1); - } - } - else - { - /* clear option */ - *opt= 0; - } - - /* compare current option with previous */ - return strcmp(opt, buf); -} - -/****************************************************************************** - - run_test() - - Run the given test case. - -******************************************************************************/ - -void run_test(char *test) -{ - char temp[FN_REFLEN]; - const char *rstr; - int skip= FALSE, ignore=FALSE; - int restart= FALSE; - int flag= FALSE; - struct stat info; - - /* skip tests in the skip list */ - snprintf(temp, FN_REFLEN, " %s ", test); - skip= (strinstr(skip_test, temp) != 0); - if (skip == FALSE) - ignore= (strinstr(ignore_test, temp) != 0); - - snprintf(master_init_script, FN_REFLEN, "%s/%s-master.sh", test_dir, test); - snprintf(slave_init_script, FN_REFLEN, "%s/%s-slave.sh", test_dir, test); -#ifdef __WIN__ - if (! stat(master_init_script, &info)) - skip= TRUE; - if (!stat(slave_init_script, &info)) - skip= TRUE; -#endif - if (ignore) - { - /* show test */ - mlog("%-46s ", test); - - /* ignore */ - rstr= TEST_IGNORE; - ++total_ignore; - } - else if (!skip) /* skip test? */ - { - char test_file[FN_REFLEN]; - char master_opt_file[FN_REFLEN]; - char slave_opt_file[FN_REFLEN]; - char slave_master_info_file[FN_REFLEN]; - char result_file[FN_REFLEN]; - char reject_file[FN_REFLEN]; - char out_file[FN_REFLEN]; - char err_file[FN_REFLEN]; - int err; - arg_list_t al; - /* skip slave? */ - flag= skip_slave; - skip_slave= (strncmp(test, "rpl", 3) != 0); - if (flag != skip_slave) restart= TRUE; - - /* create files */ - snprintf(master_opt_file, FN_REFLEN, "%s/%s-master.opt", test_dir, test); - snprintf(slave_opt_file, FN_REFLEN, "%s/%s-slave.opt", test_dir, test); - snprintf(slave_master_info_file, FN_REFLEN, "%s/%s.slave-mi", - test_dir, test); - snprintf(reject_file, FN_REFLEN, "%s/%s%s", - result_dir, test, REJECT_SUFFIX); - snprintf(out_file, FN_REFLEN, "%s/%s%s", result_dir, test, OUT_SUFFIX); - snprintf(err_file, FN_REFLEN, "%s/%s%s", result_dir, test, ERR_SUFFIX); - - /* netware specific files */ - snprintf(test_file, FN_REFLEN, "%s/%s%s", test_dir, test, NW_TEST_SUFFIX); - if (stat(test_file, &info)) - { - snprintf(test_file, FN_REFLEN, "%s/%s%s", test_dir, test, TEST_SUFFIX); - if (access(test_file,0)) - { - printf("Invalid test name %s, %s file not found\n",test,test_file); - return; - } - } - - snprintf(result_file, FN_REFLEN, "%s/%s%s", - result_dir, test, NW_RESULT_SUFFIX); - if (stat(result_file, &info)) - { - snprintf(result_file, FN_REFLEN, "%s/%s%s", - result_dir, test, RESULT_SUFFIX); - } - - /* init scripts */ - if (stat(master_init_script, &info)) - master_init_script[0]= 0; - else - restart= TRUE; - - if (stat(slave_init_script, &info)) - slave_init_script[0]= 0; - else - restart= TRUE; - - /* read options */ - if (read_option(master_opt_file, master_opt)) restart= TRUE; - if (read_option(slave_opt_file, slave_opt)) restart= TRUE; - if (read_option(slave_master_info_file, slave_master_info)) restart= TRUE; - - /* cleanup previous run */ - remove(reject_file); - remove(out_file); - remove(err_file); - - /* start or restart? */ - if (!master_running) mysql_start(); - else if (restart) mysql_restart(); - - /* show test */ - mlog("%-46s ", test); - - /* args */ - init_args(&al); - add_arg(&al, "%s", mysqltest_file); - add_arg(&al, "--no-defaults"); - add_arg(&al, "--port=%u", master_port); -#if !defined(__NETWARE__) && !defined(__WIN__) - add_arg(&al, "--socket=%s", master_socket); - add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); -#endif - add_arg(&al, "--database=%s", db); - add_arg(&al, "--user=%s", user); - add_arg(&al, "--password=%s", password); - add_arg(&al, "--silent"); - add_arg(&al, "--basedir=%s/", mysql_test_dir); - add_arg(&al, "--host=127.0.0.1"); - add_arg(&al, "--skip-safemalloc"); - add_arg(&al, "-v"); - add_arg(&al, "-R"); - add_arg(&al, "%s", result_file); - - - if (use_openssl) - { - add_arg(&al, "--ssl-ca=%s", ca_cert); - add_arg(&al, "--ssl-cert=%s", client_cert); - add_arg(&al, "--ssl-key=%s", client_key); - } - - /* spawn */ - err= spawn(mysqltest_file, &al, TRUE, test_file, out_file, err_file, NULL); - /* free args */ - free_args(&al); - - remove_empty_file(out_file); - remove_empty_file(err_file); - - if (err == 0) - { - /* pass */ - rstr= TEST_PASS; - ++total_pass; - - /* increment total */ - ++total_test; - } - else if (err == 2) - { - /* skip */ - rstr= TEST_SKIP; - ++total_skip; - } - else if (err == 1) - { - /* fail */ - rstr= TEST_FAIL; - ++total_fail; - - /* increment total */ - ++total_test; - } - else - { - rstr= TEST_BAD; - } - } - else /* early skips */ - { - /* show test */ - mlog("%-46s ", test); - - /* skip */ - rstr= TEST_SKIP; - ++total_skip; - } - - /* result */ - mlog("%-14s\n", rstr); -} - -/****************************************************************************** - - vlog() - - Log the message. - -******************************************************************************/ - -void vlog(const char *format, va_list ap) -{ - vfprintf(stdout, format, ap); - fflush(stdout); - - if (log_fd) - { - vfprintf(log_fd, format, ap); - fflush(log_fd); - } -} - -/****************************************************************************** - - log() - - Log the message. - -******************************************************************************/ - -void mlog(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - - vlog(format, ap); - - va_end(ap); -} - -/****************************************************************************** - - log_info() - - Log the given information. - -******************************************************************************/ - -void log_info(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - - mlog("-- INFO : "); - vlog(format, ap); - mlog("\n"); - - va_end(ap); -} - -/****************************************************************************** - - log_error() - - Log the given error. - -******************************************************************************/ - -void log_error(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - - mlog("-- ERROR: "); - vlog(format, ap); - mlog("\n"); - - va_end(ap); -} - -/****************************************************************************** - - log_errno() - - Log the given error and errno. - -******************************************************************************/ - -void log_errno(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - - mlog("-- ERROR: (%003u) ", errno); - vlog(format, ap); - mlog("\n"); - - va_end(ap); -} - -/****************************************************************************** - - die() - - Exit the application. - -******************************************************************************/ - -void die(const char *msg) -{ - log_error(msg); -#ifdef __NETWARE__ - pressanykey(); -#endif - exit(-1); -} - -/****************************************************************************** - - setup() - - Setup the mysql test enviornment. - -******************************************************************************/ - -void setup(char *file __attribute__((unused))) -{ - char temp[FN_REFLEN]; -#if defined(__WIN__) || defined(__NETWARE__) - char file_path[FN_REFLEN*2]; -#endif - char *p; - int position; - - /* set the timezone for the timestamp test */ -#ifdef __WIN__ - _putenv( "TZ=GMT-3" ); -#else - putenv((char *)"TZ=GMT-3"); -#endif - /* find base dir */ -#ifdef __NETWARE__ - strcpy(temp, strlwr(file)); - while ((p= strchr(temp, '\\')) != NULL) *p= '/'; -#else - getcwd(temp, FN_REFLEN); - position= strlen(temp); - temp[position]= '/'; - temp[position+1]= 0; -#ifdef __WIN__ - while ((p= strchr(temp, '\\')) != NULL) *p= '/'; -#endif -#endif - - if ((position= strinstr(temp, "/mysql-test/")) != 0) - { - p= temp + position - 1; - *p= 0; - strcpy(base_dir, temp); - } - - log_info("Currect directory: %s",base_dir); - -#ifdef __NETWARE__ - /* setup paths */ - snprintf(bin_dir, FN_REFLEN, "%s/bin", base_dir); - snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir); - snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir); - snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir); - snprintf(result_dir, FN_REFLEN, "%s/r", mysql_test_dir); - snprintf(master_dir, FN_REFLEN, "%s/var/master-data", mysql_test_dir); - snprintf(slave_dir, FN_REFLEN, "%s/var/slave-data", mysql_test_dir); - snprintf(lang_dir, FN_REFLEN, "%s/share/english", base_dir); - snprintf(char_dir, FN_REFLEN, "%s/share/charsets", base_dir); - -#ifdef HAVE_OPENSSL - use_openssl= TRUE; -#endif /* HAVE_OPENSSL */ - - /* OpenSSL paths */ - snprintf(ca_cert, FN_REFLEN, "%s/std_data/cacert.pem", mysql_test_dir); - snprintf(server_cert, FN_REFLEN, "%s/std_data/server-cert.pem", mysql_test_dir); - snprintf(server_key, FN_REFLEN, "%s/std_data/server-key.pem", mysql_test_dir); - snprintf(client_cert, FN_REFLEN, "%s/std_data/client-cert.pem", mysql_test_dir); - snprintf(client_key, FN_REFLEN, "%s/std_data/client-key.pem", mysql_test_dir); - - /* setup files */ - snprintf(mysqld_file, FN_REFLEN, "%s/mysqld", bin_dir); - snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest", bin_dir); - snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin", bin_dir); - snprintf(master_pid, FN_REFLEN, "%s/var/run/master.pid", mysql_test_dir); - snprintf(slave_pid, FN_REFLEN, "%s/var/run/slave.pid", mysql_test_dir); -#elif __WIN__ - /* setup paths */ -#ifdef _DEBUG - snprintf(bin_dir, FN_REFLEN, "%s/client_debug", base_dir); -#else - snprintf(bin_dir, FN_REFLEN, "%s/client_release", base_dir); -#endif - snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir); - snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir); - snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir); - snprintf(result_dir, FN_REFLEN, "%s/r", mysql_test_dir); - snprintf(master_dir, FN_REFLEN, "%s/var/master-data", mysql_test_dir); - snprintf(slave_dir, FN_REFLEN, "%s/var/slave-data", mysql_test_dir); - snprintf(lang_dir, FN_REFLEN, "%s/share/english", base_dir); - snprintf(char_dir, FN_REFLEN, "%s/share/charsets", base_dir); - -#ifdef HAVE_OPENSSL - use_openssl= TRUE; -#endif /* HAVE_OPENSSL */ - - /* OpenSSL paths */ - snprintf(ca_cert, FN_REFLEN, "%s/std_data/cacert.pem", mysql_test_dir); - snprintf(server_cert, FN_REFLEN, "%s/std_data/server-cert.pem", mysql_test_dir); - snprintf(server_key, FN_REFLEN, "%s/std_data/server-key.pem", mysql_test_dir); - snprintf(client_cert, FN_REFLEN, "%s/std_data/client-cert.pem", mysql_test_dir); - snprintf(client_key, FN_REFLEN, "%s/std_data/client-key.pem", mysql_test_dir); - - /* setup files */ -#ifdef _DEBUG - snprintf(mysqld_file, FN_REFLEN, "%s/mysqld-debug.exe", bin_dir); -#else - snprintf(mysqld_file, FN_REFLEN, "%s/mysqld.exe", bin_dir); -#endif - snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest.exe", bin_dir); - snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin.exe", bin_dir); -#else - /* setup paths */ - snprintf(bin_dir, FN_REFLEN, "%s/client", base_dir); - snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir); - snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir); - snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir); - snprintf(result_dir, FN_REFLEN, "%s/r", mysql_test_dir); - snprintf(master_dir, FN_REFLEN, "%s/var/master-data", mysql_test_dir); - snprintf(slave_dir, FN_REFLEN, "%s/var/slave-data", mysql_test_dir); - snprintf(slave1_dir, FN_REFLEN, "%s/var/slave1-data", mysql_test_dir); - snprintf(slave2_dir, FN_REFLEN, "%s/var/slave2-data", mysql_test_dir); - snprintf(lang_dir, FN_REFLEN, "%s/sql/share/english", base_dir); - snprintf(char_dir, FN_REFLEN, "%s/sql/share/charsets", base_dir); - -#ifdef HAVE_OPENSSL - use_openssl= TRUE; -#endif /* HAVE_OPENSSL */ - - /* OpenSSL paths */ - snprintf(ca_cert, FN_REFLEN, "%s/std_data/cacert.pem", mysql_test_dir); - snprintf(server_cert, FN_REFLEN, "%s/std_data/server-cert.pem", mysql_test_dir); - snprintf(server_key, FN_REFLEN, "%s/std_data/server-key.pem", mysql_test_dir); - snprintf(client_cert, FN_REFLEN, "%s/std_data/client-cert.pem", mysql_test_dir); - snprintf(client_key, FN_REFLEN, "%s/std_data/client-key.pem", mysql_test_dir); - - /* setup files */ - snprintf(mysqld_file, FN_REFLEN, "%s/sql/mysqld", base_dir); - snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest", bin_dir); - snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin", bin_dir); - snprintf(master_pid, FN_REFLEN, "%s/var/run/master.pid", mysql_test_dir); - snprintf(slave_pid, FN_REFLEN, "%s/var/run/slave.pid", mysql_test_dir); - - snprintf(master_socket,FN_REFLEN, "%s/var/tmp/master.sock", mysql_test_dir); - snprintf(slave_socket,FN_REFLEN, "%s/var/tmp/slave.sock", mysql_test_dir); - -#endif - /* create log file */ - snprintf(temp, FN_REFLEN, "%s/mysql-test-run.log", mysql_test_dir); - if ((log_fd= fopen(temp, "w+")) == NULL) - { - log_errno("Unable to create log file."); - } - - /* prepare skip test list */ - while ((p= strchr(skip_test, ',')) != NULL) *p= ' '; - strcpy(temp, strlwr(skip_test)); - snprintf(skip_test, FN_REFLEN, " %s ", temp); - - /* environment */ -#ifdef __NETWARE__ - setenv("MYSQL_TEST_DIR", mysql_test_dir, 1); - snprintf(file_path, FN_REFLEN*2, - "%s/client/mysqldump --no-defaults -u root --port=%u", - bin_dir, master_port); - setenv("MYSQL_DUMP", file_path, 1); - snprintf(file_path, FN_REFLEN*2, - "%s/client/mysqlbinlog --no-defaults --local-load=%s", - bin_dir, mysql_tmp_dir); - setenv("MYSQL_BINLOG", file_path, 1); -#elif __WIN__ - snprintf(file_path,FN_REFLEN,"MYSQL_TEST_DIR=%s",mysql_test_dir); - _putenv(file_path); - snprintf(file_path, FN_REFLEN*2, - "MYSQL_DUMP=%s/mysqldump.exe --no-defaults -uroot --port=%u", - bin_dir, master_port); - _putenv(file_path); - snprintf(file_path, FN_REFLEN*2, - "MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s", - bin_dir, mysql_tmp_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "TESTS_BINDIR=%s/tests", base_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "CHARSETSDIR=%s/sql/share/charsets", base_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "MYSQL=%s/mysql --port=%u ", - bin_dir, master_port); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "MYSQL_FIX_SYSTEM_TABLES=%s/scripts/mysql_fix_privilege_tables --no-defaults " - "--host=localhost --port=%u " - "--basedir=%s --bindir=%s --verbose", - base_dir,master_port, base_dir, bin_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "NDB_TOOLS_DIR=%s/ndb/tools", base_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "CLIENT_BINDIR=%s", bin_dir); - _putenv(file_path); - - snprintf(file_path, FN_REFLEN*2, - "MYSQL_CLIENT_TEST=%s/tests/mysql_client_test --no-defaults --testcase " - "--user=root --port=%u --silent", - base_dir, master_port); - _putenv(file_path); - -#else - { - static char env_MYSQL_TEST_DIR[FN_REFLEN*2]; - static char env_MYSQL_DUMP[FN_REFLEN*2]; - static char env_MYSQL_BINLOG[FN_REFLEN*2]; - static char env_MASTER_MYSOCK[FN_REFLEN*2]; - static char env_TESTS_BINDIR[FN_REFLEN*2]; - static char env_CHARSETSDIR[FN_REFLEN*2]; - static char env_MYSQL[FN_REFLEN*2]; - static char env_MYSQL_FIX_SYSTEM_TABLES[FN_REFLEN*2]; - static char env_CLIENT_BINDIR[FN_REFLEN*2]; - static char env_MYSQL_CLIENT_TEST[FN_REFLEN*2]; - static char env_NDB_TOOLS_DIR[FN_REFLEN*2]; - static char env_NDB_MGM[FN_REFLEN*2]; - static char env_NDB_BACKUP_DIR[FN_REFLEN*2]; - static char env_NDB_TOOLS_OUTPUT[FN_REFLEN*2]; - - snprintf(env_MYSQL_TEST_DIR,FN_REFLEN*2, - "MYSQL_TEST_DIR=%s",mysql_test_dir); - putenv(env_MYSQL_TEST_DIR); - - snprintf(env_MYSQL_DUMP, FN_REFLEN*2,"MYSQL_DUMP=%s/mysqldump --no-defaults " - "-uroot --port=%u --socket=%s ", - bin_dir, master_port, master_socket); - putenv(env_MYSQL_DUMP); - - snprintf(env_MYSQL_BINLOG, FN_REFLEN*2, - "MYSQL_BINLOG=%s/mysqlbinlog --no-defaults --local-load=%s -uroot ", - bin_dir, mysql_tmp_dir); - putenv(env_MYSQL_BINLOG); - - snprintf(env_MASTER_MYSOCK, FN_REFLEN*2, - "MASTER_MYSOCK=%s", master_socket); - putenv(env_MASTER_MYSOCK); - - snprintf(env_TESTS_BINDIR, FN_REFLEN*2, - "TESTS_BINDIR=%s/tests", base_dir); - putenv(env_TESTS_BINDIR); - - snprintf(env_CHARSETSDIR, FN_REFLEN*2, - "CHARSETSDIR=%s/sql/share/charsets", base_dir); - putenv(env_CHARSETSDIR); - - snprintf(env_MYSQL, FN_REFLEN*2, - "MYSQL=%s/mysql --port=%u --socket=%s -uroot ", - bin_dir, master_port, master_socket); - putenv(env_MYSQL); - - snprintf(env_MYSQL_FIX_SYSTEM_TABLES, FN_REFLEN*2, - "MYSQL_FIX_SYSTEM_TABLES=%s/scripts/mysql_fix_privilege_tables --no-defaults " - "--host=localhost --port=%u --socket=%s " - "--basedir=%s --bindir=%s --verbose -uroot ", - base_dir,master_port, master_socket, base_dir, bin_dir); - putenv(env_MYSQL_FIX_SYSTEM_TABLES); - - - snprintf(env_CLIENT_BINDIR, FN_REFLEN*2, - "CLIENT_BINDIR=%s", bin_dir); - putenv(env_CLIENT_BINDIR); - - snprintf(env_MYSQL_CLIENT_TEST, FN_REFLEN*2, - "MYSQL_CLIENT_TEST=%s/tests/mysql_client_test --no-defaults --testcase " - "--user=root --socket=%s --port=%u --silent", - base_dir, master_socket, master_port); - putenv(env_MYSQL_CLIENT_TEST); - - // NDB - - snprintf(env_NDB_TOOLS_DIR, FN_REFLEN*2, - "NDB_TOOLS_DIR=%s/ndb/tools", base_dir); - putenv(env_NDB_TOOLS_DIR); - - snprintf(env_NDB_MGM, FN_REFLEN*2, - "NDB_MGM=%s/ndb/src/mgmclient/ndb_mgm", base_dir); - putenv(env_NDB_MGM); - - //NDBCLUSTER_PORT=9350 - snprintf(env_NDB_BACKUP_DIR, FN_REFLEN*2, - "NDB_BACKUP_DIR=%s/var/ndbcluster-%i", mysql_test_dir, 9350); - putenv(env_NDB_BACKUP_DIR); - - snprintf(env_NDB_TOOLS_OUTPUT, FN_REFLEN*2, - "NDB_TOOLS_OUTPUT=%s/var/log/ndb_tools.log", mysql_test_dir); - putenv(env_NDB_TOOLS_OUTPUT); - - putenv((char *)"NDB_STATUS_OK=1"); - -// NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm" -// NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT -// NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log - } - -#endif - -#ifndef __WIN__ - putenv((char *)"MASTER_MYPORT=9306"); - putenv((char *)"SLAVE_MYPORT=9307"); - putenv((char *)"MYSQL_TCP_PORT=3306"); - -#else - _putenv("MASTER_MYPORT=9306"); - _putenv("SLAVE_MYPORT=9307"); - _putenv("MYSQL_TCP_PORT=3306"); -#endif - -} - -/* - Compare names of testes for right order -*/ -int compare( const void *arg1, const void *arg2 ) -{ - return sting_compare_func( * ( char** ) arg1, * ( char** ) arg2 ); -} - - - -/****************************************************************************** - - main() - -******************************************************************************/ - -int main(int argc, char **argv) -{ - int is_ignore_list= 0; - char **names= 0; - char **testes= 0; - int name_index; - int index; - char var_dir[FN_REFLEN]; - /* setup */ - setup(argv[0]); - - /* delete all file in var */ - snprintf(var_dir,FN_REFLEN,"%s/var",mysql_test_dir); - del_tree(var_dir); - - /* - The --ignore option is comma saperated list of test cases to skip and - should be very first command line option to the test suite. - - The usage is now: - mysql_test_run --ignore=test1,test2 test3 test4 - where test1 and test2 are test cases to ignore - and test3 and test4 are test cases to run. - */ - if (argc >= 2 && !strnicmp(argv[1], "--ignore=", sizeof("--ignore=")-1)) - { - char *temp, *token; - temp= strdup(strchr(argv[1],'=') + 1); - for (token=str_tok(argument, temp, ","); token != NULL; - token=str_tok(argument, NULL, ",")) - { - if (strlen(ignore_test) + strlen(token) + 2 <= FN_REFLEN-1) - sprintf(ignore_test+strlen(ignore_test), " %s ", token); - else - { - free(temp); - die("ignore list too long."); - } - } - free(temp); - is_ignore_list= 1; - } - /* header */ -#ifndef __WIN__ - mlog("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE); -#else - mlog("MySQL Server ---, for %s (%s)\n\n", SYSTEM_TYPE, MACHINE_TYPE); -#endif - - mlog("Initializing Tests...\n"); - - /* install test databases */ - mysql_install_db(); - - mlog("Starting Tests...\n"); - - mlog("\n"); - mlog(HEADER); - mlog(DASH); - - if ( argc > 1 + is_ignore_list ) - { - int i; - - /* single test */ - single_test= TRUE; - - for (i= 1 + is_ignore_list; i < argc; i++) - { - /* run given test */ - run_test(argv[i]); - } - } - else - { - /* run all tests */ - testes= malloc(MAX_COUNT_TESTES*sizeof(void*)); - if (!testes) - die("can not allcate memory for sorting"); - names= testes; - name_index= 0; -#ifndef __WIN__ - struct dirent *entry; - DIR *parent; - char test[FN_LEN]; - int position; - - /* FIXME are we sure the list is sorted if using readdir()? */ - if ((parent= opendir(test_dir)) == NULL) /* Not thread safe */ - die("Unable to open tests directory."); - else - { - while ((entry= readdir(parent)) != NULL) /* Not thread safe */ - { - strcpy(test, strlwr(entry->d_name)); - /* find the test suffix */ - if ((position= strinstr(test, TEST_SUFFIX)) != 0) - { - if (name_index < MAX_COUNT_TESTES) - { - /* null terminate at the suffix */ - *(test + position - 1)= '\0'; - /* insert test */ - *names= malloc(FN_REFLEN); - strcpy(*names,test); - names++; - name_index++; - } - else - die("can not sort files, array is overloaded"); - } - } - closedir(parent); - } -#else - { - struct _finddata_t dir; - int* handle; - char test[FN_LEN]; - char mask[FN_REFLEN]; - int position; - - /* single test */ - single_test= FALSE; - - snprintf(mask,FN_REFLEN,"%s/*.test",test_dir); - - if ((handle=_findfirst(mask,&dir)) == -1L) - { - die("Unable to open tests directory."); - } - - - do - { - if (!(dir.attrib & _A_SUBDIR)) - { - strcpy(test, strlwr(dir.name)); - - /* find the test suffix */ - if ((position= strinstr(test, TEST_SUFFIX)) != 0) - { - if (name_index < MAX_COUNT_TESTES) - { - /* null terminate at the suffix */ - *(test + position - 1)= '\0'; - /* insert test */ - *names= malloc(FN_REFLEN); - strcpy(*names,test); - names++; - name_index++; - } - else - die("can not sort files, array is overloaded"); - } - } - }while (_findnext(handle,&dir) == 0); - - _findclose(handle); - } -#endif - qsort( (void *)testes, name_index, sizeof( char * ), compare ); - - for (index= 0; index < name_index; index++) - { - run_test(testes[index]); - free(testes[index]); - } - - free(testes); - } - - /* stop server */ - mysql_stop(); - - mlog(DASH); - mlog("\n"); - - mlog("Ending Tests...\n"); - - /* report stats */ - report_stats(); - - /* close log */ - if (log_fd) fclose(log_fd); - - /* keep results up */ -#ifdef __NETWARE__ - pressanykey(); -#endif - return 0; -} - - -/* - Synopsis: - This function breaks the string into a sequence of tokens. The difference - between this function and strtok is that it respects the quoted string i.e. - it skips any delimiter character within the quoted part of the string. - It return tokens by eliminating quote character. It modifies the input string - passed. It will work with whitespace delimeter but may not work properly with - other delimeter. If the delimeter will contain any quote character, then - function will not tokenize and will return null string. - e.g. if input string is - --init-slave="set global max_connections=500" --skip-external-locking - then the output will two string i.e. - --init-slave=set global max_connections=500 - --skip-external-locking - -Arguments: - string: input string - delim: set of delimiter character -Output: - return the null terminated token of NULL. -*/ -char *str_tok(char* dest, char *string, const char *delim) -{ - char *token; - char *ptr_end_token= NULL; - char *ptr_quote= NULL; - char *ptr_token= NULL; - int count_quotes= 0; - - *dest = '\0'; - if (strchr(delim,'\'') || strchr(delim,'\"')) - return NULL; - - token= (char*)strtok(string, delim); - if (token) - { - /* double quote is found */ - if (strchr(token,'\"')) - { - do - { - if (count_quotes & 1) - { - if (*dest == '\0') - sprintf(dest,"%s", ptr_token); - else - sprintf(dest,"%s %s", dest, ptr_token); - ptr_token= (char*)strtok(NULL, delim); - if (!ptr_token) - break; - } - else - { - ptr_token= token; - } - if (ptr_quote = strchr(ptr_token,'\"')) - { - ptr_end_token= ptr_token + strlen(ptr_token); - do - { -#ifndef __WIN__ - bmove(ptr_quote, ptr_quote+1, ptr_end_token - ptr_quote); -#endif - count_quotes++; - } while (ptr_quote != NULL && (ptr_quote = strchr(ptr_quote+1,'\"'))); - } - /* there are unpair quotes we have to search next quote*/ - } while (count_quotes & 1); - if (ptr_token != NULL) - { - if (*dest == '\0') - sprintf(dest,"%s", ptr_token); - else - sprintf(dest,"%s %s",dest,ptr_token); - } - } - else - { - sprintf(dest,"%s",token); - } - } - return token ? dest : NULL; -} - -#ifndef __WIN__ -/* - Synopsis: - This function run scripts files on Linux and Netware - -Arguments: - script_name: name of script file - -Output: - nothing -*/ - -void run_init_script(const char *script_name) -{ - arg_list_t al; - int err; - - /* args */ - init_args(&al); - add_arg(&al, sh_file); - add_arg(&al, script_name); - - /* spawn */ - if ((err= spawn(sh_file, &al, TRUE, NULL, NULL, NULL, NULL)) != 0) - { - die("Unable to run script."); - } - - /* free args */ - free_args(&al); -} -#endif diff --git a/mysql-test/ndb/Makefile.am b/mysql-test/ndb/Makefile.am index 2a1c59fd3596948ad723aed5fbf5e81db46b7fb5..4ddf61cf5cc615ff87a97431663af310ba8bf25b 100644 --- a/mysql-test/ndb/Makefile.am +++ b/mysql-test/ndb/Makefile.am @@ -1,14 +1,11 @@ -BUILT_SOURCES = ndbcluster - benchdir_root= $(prefix) testdir = $(benchdir_root)/mysql-test/ndb -test_SCRIPTS = ndbcluster - -noinst_HEADERS = ndbcluster.sh - +EXTRA_DIST = ndbcluster.sh +CLEANFILES = ndbcluster dist_test_DATA = ndb_config_2_node.ini ndb_config_1_node.ini +test_SCRIPTS = ndbcluster SUFFIXES = .sh diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result index 0be99e071cd4d2e75ea607e901c46324a7680084..098134580693fdb82f587856b6ba862381402a12 100644 --- a/mysql-test/r/archive.result +++ b/mysql-test/r/archive.result @@ -13809,4 +13809,11 @@ alter table t1 add unique key (i, v); select * from t1 where i between 2 and 4 and v in ('def','3r4f','lmn'); i v 4 3r4f +alter table t1 data directory="$MYSQLTEST_VARDIR/tmp"; +select * from t1; +i v +1 def +2 abc +4 3r4f +5 lmn drop table t1, t2, t4, t5; diff --git a/mysql-test/r/csv.result b/mysql-test/r/csv.result index 70eaac2eb4e5e4d86ee1aaa75299e869590a475b..3adcc895474e4f99fae1d604a4ba14631c432b25 100644 --- a/mysql-test/r/csv.result +++ b/mysql-test/r/csv.result @@ -5085,6 +5085,36 @@ Table Op Msg_type Msg_text test.test_repair_table5 repair status OK SELECT * FROM test_repair_table5; num magic_no company_name founded +INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT", 1876); +SELECT * FROM test_repair_table5; +num magic_no company_name founded +1 0102 CORRECT 1876 +FLUSH TABLES; +CHECK TABLE test_repair_table5; +Table Op Msg_type Msg_text +test.test_repair_table5 check error Corrupt +REPAIR TABLE test_repair_table5; +Table Op Msg_type Msg_text +test.test_repair_table5 repair status OK +SELECT * FROM test_repair_table5; +num magic_no company_name founded +1 0102 CORRECT 1876 +INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT2", 1876); +SELECT * FROM test_repair_table5; +num magic_no company_name founded +1 0102 CORRECT 1876 +1 0102 CORRECT2 1876 +FLUSH TABLES; +CHECK TABLE test_repair_table5; +Table Op Msg_type Msg_text +test.test_repair_table5 check error Corrupt +REPAIR TABLE test_repair_table5; +Table Op Msg_type Msg_text +test.test_repair_table5 repair status OK +SELECT * FROM test_repair_table5; +num magic_no company_name founded +1 0102 CORRECT 1876 +1 0102 CORRECT2 1876 DROP TABLE test_repair_table5; create table t1 (a int) engine=csv; insert t1 values (1); diff --git a/mysql-test/r/ctype_filename.result b/mysql-test/r/ctype_filename.result new file mode 100644 index 0000000000000000000000000000000000000000..acc32c7dedf668702c59ff54e756e07ddbca1094 --- /dev/null +++ b/mysql-test/r/ctype_filename.result @@ -0,0 +1,13 @@ +drop table if exists con, aux, nul, lpt1, com1, `clock$`; +create table con (a int); +drop table con; +create table aux (a int); +drop table aux; +create table nul (a int); +drop table nul; +create table lpt1 (a int); +drop table lpt1; +create table com1 (a int); +drop table com1; +create table `clock$` (a int); +drop table `clock$`; diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index edbdd6b08da000e5f03eb6d30371700a5f282f41..b5fd35d926f2e92624bbaed8532308ff4002a2c1 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -847,3 +847,28 @@ timestampdiff(year,'2004-02-28','2005-02-28') select timestampdiff(year,'2004-02-29','2005-02-28'); timestampdiff(year,'2004-02-29','2005-02-28') 0 +CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); +CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); +INSERT INTO t1 VALUES +(1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); +INSERT INTO t2 VALUES +(1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); +SELECT * FROM t1, t2 +WHERE t1.day BETWEEN +'2005.09.01' - INTERVAL 6 MONTH AND t2.day; +id day id day +1 2005-06-01 1 2005-08-01 +3 2005-07-01 1 2005-08-01 +1 2005-06-01 2 2005-06-15 +1 2005-06-01 3 2005-07-15 +3 2005-07-01 3 2005-07-15 +SELECT * FROM t1, t2 +WHERE CAST(t1.day AS DATE) BETWEEN +'2005.09.01' - INTERVAL 6 MONTH AND t2.day; +id day id day +1 2005-06-01 1 2005-08-01 +3 2005-07-01 1 2005-08-01 +1 2005-06-01 2 2005-06-15 +1 2005-06-01 3 2005-07-15 +3 2005-07-01 3 2005-07-15 +DROP TABLE t1,t2; diff --git a/mysql-test/r/having.result b/mysql-test/r/having.result index c827e11e50e605487597b3cc105905ce5953df84..fe918e4c3ffdc44917a4ebc6afcc0a51bc015f2a 100644 --- a/mysql-test/r/having.result +++ b/mysql-test/r/having.result @@ -360,8 +360,6 @@ s1 count(s1) y 1 drop table t1; DROP SCHEMA IF EXISTS HU; -Warnings: -Note 1008 Can't drop database 'HU'; database doesn't exist CREATE SCHEMA HU ; USE HU ; CREATE TABLE STAFF diff --git a/mysql-test/r/index_merge_innodb.result b/mysql-test/r/index_merge_innodb.result index b20e66a109813c0e04c4802842daa69c5fb37de8..d7dcc7853cd728f010c18ad14a4e50049e9eba4e 100644 --- a/mysql-test/r/index_merge_innodb.result +++ b/mysql-test/r/index_merge_innodb.result @@ -260,3 +260,25 @@ t_vers t_rele t_cust filler1 7.6 a 7.6 a drop table t1; +create table t1 ( +pk int(11) not null auto_increment, +a int(11) not null default '0', +b int(11) not null default '0', +c int(11) not null default '0', +filler1 datetime, filler2 varchar(15), +filler3 longtext, +kp1 varchar(4), kp2 varchar(7), +kp3 varchar(2), kp4 varchar(4), +kp5 varchar(7), +filler4 char(1), +primary key (pk), +key idx1(a,b,c), +key idx2(c), +key idx3(kp1,kp2,kp3,kp4,kp5) +) engine=innodb default charset=latin1; +set @fill=NULL; +SELECT COUNT(*) FROM t1 WHERE b = 0 AND a = 0 AND c = 13286427 AND +kp1='279' AND kp2='ELM0678' AND kp3='6' AND kp4='10' AND kp5 = 'R '; +COUNT(*) +1 +drop table t1; diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index bbeaf3519c2bd339b9bbb1aca8b871ad0609d228..a003ed14c77f0d67f8d73ab40e8e62c86ccf973e 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1640,6 +1640,30 @@ t2 CREATE TABLE `t2` ( CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`b`) REFERENCES `t1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table t2, t1; +flush status; +show status like "binlog_cache_use"; +Variable_name Value +Binlog_cache_use 0 +show status like "binlog_cache_disk_use"; +Variable_name Value +Binlog_cache_disk_use 0 +create table t1 (a int) engine=innodb; +show status like "binlog_cache_use"; +Variable_name Value +Binlog_cache_use 1 +show status like "binlog_cache_disk_use"; +Variable_name Value +Binlog_cache_disk_use 1 +begin; +delete from t1; +commit; +show status like "binlog_cache_use"; +Variable_name Value +Binlog_cache_use 2 +show status like "binlog_cache_disk_use"; +Variable_name Value +Binlog_cache_disk_use 1 +drop table t1; create table t1 (c char(10), index (c,c)) engine=innodb; ERROR 42S21: Duplicate column name 'c' create table t1 (c1 char(10), c2 char(10), index (c1,c2,c1)) engine=innodb; @@ -1751,6 +1775,21 @@ select count(*) from t1 where x = 18446744073709551601; count(*) 1 drop table t1; +show status like "Innodb_buffer_pool_pages_total"; +Variable_name Value +Innodb_buffer_pool_pages_total 512 +show status like "Innodb_page_size"; +Variable_name Value +Innodb_page_size 16384 +show status like "Innodb_rows_deleted"; +Variable_name Value +Innodb_rows_deleted 2070 +show status like "Innodb_rows_inserted"; +Variable_name Value +Innodb_rows_inserted 31727 +show status like "Innodb_rows_updated"; +Variable_name Value +Innodb_rows_updated 29530 show status like "Innodb_row_lock_waits"; Variable_name Value Innodb_row_lock_waits 0 @@ -3194,6 +3233,15 @@ drop trigger t2t; drop trigger t3t; drop trigger t4t; drop table t1, t2, t3, t4, t5; +create table t1(a date) engine=innodb; +create table t2(a date, key(a)) engine=innodb; +insert into t1 values('2005-10-01'); +insert into t2 values('2005-10-01'); +select * from t1, t2 +where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; +a a +2005-10-01 2005-10-01 +drop table t1, t2; CREATE TABLE t1 ( field1 varchar(8) NOT NULL DEFAULT '', field2 varchar(8) NOT NULL DEFAULT '', diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result index 57067bea36b48931d61d20853b9dba26fe04d2cc..ae50c714bba0ffaa64d94b8f0e6accc2e1b21fca 100644 --- a/mysql-test/r/mysql.result +++ b/mysql-test/r/mysql.result @@ -72,7 +72,16 @@ c_cp932 +----------------------+------------+--------+ | concat('>',col1,'<') | col2 | col3 | +----------------------+------------+--------+ -| >a < | b | 123421 | -| >a < | 0123456789 | 4 | -| >abcd< | | 4 | +| >a < | b | 123421 | +| >a < | 0123456789 | 4 | +| >abcd< | NULL | 4 | +----------------------+------------+--------+ ++------+------+---------------------------+ +| i | j | k | ++------+------+---------------------------+ +| 1 | NULL | NULL | +| NULL | NULL | <-----------------------> | +| NULL | NULL | <----- | +| NULL | NULL | Τη γλώσσα | +| NULL | NULL | á›–áš´ áš·á›–á› | ++------+------+---------------------------+ diff --git a/mysql-test/r/mysqlslap.result b/mysql-test/r/mysqlslap.result index 1a8b77fde1c45f19f3031826a1b97b0e0ac431ce..045a34a745841622c32bd9d1d89c22b02b8d6868 100644 --- a/mysql-test/r/mysqlslap.result +++ b/mysql-test/r/mysqlslap.result @@ -129,7 +129,6 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); select * from t1; select * from t2; -select * from t1; DROP SCHEMA IF EXISTS `mysqlslap`; DROP SCHEMA IF EXISTS `mysqlslap`; CREATE SCHEMA `mysqlslap`; @@ -141,5 +140,4 @@ INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2'); select * from t1; select * from t2; -select * from t1; DROP SCHEMA IF EXISTS `mysqlslap`; diff --git a/mysql-test/r/ndb_alter_table2.result b/mysql-test/r/ndb_alter_table2.result new file mode 100644 index 0000000000000000000000000000000000000000..3783c76447c26c1fbab56d9ba40657eef99c5bfa --- /dev/null +++ b/mysql-test/r/ndb_alter_table2.result @@ -0,0 +1,41 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +a INT NOT NULL PRIMARY KEY, +b INT NOT NULL +) ENGINE=ndbcluster; +BEGIN; +INSERT INTO t1 VALUES (9410,9412); +BEGIN; +INSERT INTO t1 VALUES (9411,9412); +BEGIN; +INSERT INTO t1 VALUES (9412,9412); +BEGIN; +INSERT INTO t1 VALUES (9413,9412); +BEGIN; +INSERT INTO t1 VALUES (9414,9412); +BEGIN; +INSERT INTO t1 VALUES (9415,9412); +ROLLBACK; +ROLLBACK; +ROLLBACK; +ROLLBACK; +ROLLBACK; +ROLLBACK; +drop table t1; +CREATE TABLE t1 ( +a INT NOT NULL PRIMARY KEY, +b INT NOT NULL, +c INT NOT NULL +) ENGINE=ndbcluster; +select * from t1; +select * from t1; +a b c +select * from t1; +a b c +select * from t1; +a b c +select * from t1; +a b c +select * from t1; +a b c +drop table t1; diff --git a/mysql-test/r/ndb_alter_table_stm.result b/mysql-test/r/ndb_alter_table_stm.result index 9c1d09a89705ca85bce3cc179628f3644398ebde..7cb7b990e2cac82a60f98527d36273421af8f97a 100644 --- a/mysql-test/r/ndb_alter_table_stm.result +++ b/mysql-test/r/ndb_alter_table_stm.result @@ -8,6 +8,7 @@ a b c 2 two two alter table t1 drop index c; select * from t1 where c = 'two'; +select * from t1 where c = 'two'; a b c 2 two two drop table t1; diff --git a/mysql-test/r/ndb_basic.result b/mysql-test/r/ndb_basic.result index 9477caf97abfbc372b3a199666cbda6397219061..4a1f5f587dfe3a42a1136ed7547c4900686cb63e 100644 --- a/mysql-test/r/ndb_basic.result +++ b/mysql-test/r/ndb_basic.result @@ -6,13 +6,6 @@ attr1 INT NOT NULL, attr2 INT, attr3 VARCHAR(10) ) ENGINE=ndbcluster; -drop table t1; -CREATE TABLE t1 ( -pk1 INT NOT NULL PRIMARY KEY, -attr1 INT NOT NULL, -attr2 INT, -attr3 VARCHAR(10) -) ENGINE=ndbcluster; SHOW INDEX FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 0 PRIMARY 1 pk1 A 0 NULL NULL BTREE diff --git a/mysql-test/r/ndb_binlog_ddl_multi.result b/mysql-test/r/ndb_binlog_ddl_multi.result index 3b217c50402d87ab324c6a09bd7656ee7da635af..f3e9b23920dd36c36273b4106133dadc83a7423a 100644 --- a/mysql-test/r/ndb_binlog_ddl_multi.result +++ b/mysql-test/r/ndb_binlog_ddl_multi.result @@ -27,11 +27,13 @@ master-bin1.000001 # Query # # use `test`; alter table t2 add column (b int) reset master; reset master; ALTER DATABASE mysqltest CHARACTER SET latin1; -drop table mysqltest.t1; show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # ALTER DATABASE mysqltest CHARACTER SET latin1 -master-bin.000001 # Query # # use `mysqltest`; drop table `t1` +show binlog events from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # ALTER DATABASE mysqltest CHARACTER SET latin1 +drop table mysqltest.t1; reset master; reset master; use test; @@ -79,7 +81,6 @@ DROP TABLESPACE ts1 ENGINE = NDB; DROP LOGFILE GROUP lg1 ENGINE =NDB; -drop table t1; show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin1.000001 # Query # # CREATE LOGFILE GROUP lg1 @@ -110,7 +111,37 @@ master-bin1.000001 # Query # # DROP TABLESPACE ts1 ENGINE = NDB master-bin1.000001 # Query # # DROP LOGFILE GROUP lg1 ENGINE =NDB -master-bin1.000001 # Query # # use `test`; drop table `t1` +show binlog events from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin1.000001 # Query # # CREATE LOGFILE GROUP lg1 +ADD UNDOFILE 'undofile.dat' +INITIAL_SIZE 16M +UNDO_BUFFER_SIZE = 1M +ENGINE=NDB +master-bin1.000001 # Query # # ALTER LOGFILE GROUP lg1 +ADD UNDOFILE 'undofile02.dat' +INITIAL_SIZE = 4M +ENGINE=NDB +master-bin1.000001 # Query # # CREATE TABLESPACE ts1 +ADD DATAFILE 'datafile.dat' +USE LOGFILE GROUP lg1 +INITIAL_SIZE 12M +ENGINE NDB +master-bin1.000001 # Query # # ALTER TABLESPACE ts1 +ADD DATAFILE 'datafile02.dat' +INITIAL_SIZE = 4M +ENGINE=NDB +master-bin1.000001 # Query # # ALTER TABLESPACE ts1 +DROP DATAFILE 'datafile.dat' +ENGINE = NDB +master-bin1.000001 # Query # # ALTER TABLESPACE ts1 +DROP DATAFILE 'datafile02.dat' +ENGINE = NDB +master-bin1.000001 # Query # # DROP TABLESPACE ts1 +ENGINE = NDB +master-bin1.000001 # Query # # DROP LOGFILE GROUP lg1 +ENGINE =NDB +drop table t1; reset master; show tables; Tables_in_test diff --git a/mysql-test/r/ndb_bitfield.result b/mysql-test/r/ndb_bitfield.result index 13fd31d7e88126642b587b35472ffddc94f95f7a..9a8c571cfba983c9d049d6ac6db23fad532b6e6a 100644 --- a/mysql-test/r/ndb_bitfield.result +++ b/mysql-test/r/ndb_bitfield.result @@ -201,21 +201,21 @@ create table t1 ( pk1 bit(9) not null primary key, b int ) engine=ndbcluster; -ERROR HY000: Can't create table 'test.t1' (errno: 140) +ERROR HY000: Can't create table 'test.t1' (errno: 906) show warnings; Level Code Message -Error 1296 Got error 739 'Unsupported primary key length' from NDB -Error 1005 Can't create table 'test.t1' (errno: 140) +Error 1296 Got error 906 'Unsupported attribute type in index' from NDB +Error 1005 Can't create table 'test.t1' (errno: 906) create table t1 ( pk1 int not null primary key, b bit(9), key(b) ) engine=ndbcluster; -ERROR HY000: Can't create table 'test.t1' (errno: 140) +ERROR HY000: Can't create table 'test.t1' (errno: 906) show warnings; Level Code Message -Error 1296 Got error 743 'Unsupported character set in table or index' from NDB -Error 1005 Can't create table 'test.t1' (errno: 140) +Error 1296 Got error 906 'Unsupported attribute type in index' from NDB +Error 1005 Can't create table 'test.t1' (errno: 906) create table t1 ( pk1 int primary key, b bit(32) not null diff --git a/mysql-test/r/ndb_blob_partition.result b/mysql-test/r/ndb_blob_partition.result new file mode 100644 index 0000000000000000000000000000000000000000..b08a91f0cdded1a9a85499bca49ba6c4195be41c --- /dev/null +++ b/mysql-test/r/ndb_blob_partition.result @@ -0,0 +1,104 @@ +drop table if exists t1; +create table t1 ( +a mediumint not null, +b text not null, +c int not null, +d longblob, +primary key using hash (a,c), +unique key (c) +) +engine=ndb +partition by range (c) +partitions 3 +( partition p1 values less than (200), +partition p2 values less than (300), +partition p3 values less than (400)); +insert into t1 values (1, @v1, 101, @v2); +insert into t1 values (1, @v2, 102, @v3); +insert into t1 values (1, @v3, 103, @v4); +insert into t1 values (2, @v4, 201, @v5); +insert into t1 values (2, @v5, 202, @v6); +insert into t1 values (2, @v6, 203, @v7); +insert into t1 values (3, @v7, 301, @v8); +insert into t1 values (3, @v8, 302, @v9); +insert into t1 values (3, @v9, 303, @v1); +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 101 10d3c783026b310218d10b7188da96a2401648c6 +1 10d3c783026b310218d10b7188da96a2401648c6 102 a33549d9844092289a58ac348dd59f09fc28406a +1 a33549d9844092289a58ac348dd59f09fc28406a 103 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 201 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 70fc9a7d08beebc522258bfb02000a30c77a8f1d 202 090565c580809efed3d369481a4bbb168b20713e +2 090565c580809efed3d369481a4bbb168b20713e 203 1e0070bec426871a46291de27b9bd6e4255ab4e5 +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 301 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 acbaba01bc2e682f015f40e79d9cbe475db3002e 302 9ee30d99162574f79c66ae95cdf132dcf9cbc259 +3 9ee30d99162574f79c66ae95cdf132dcf9cbc259 303 1d42dd9090cf78314a06665d4ea938c35cc760f4 +select a, sha1(b), c, sha1(d) from t1 where a = 1 and c = 101; +a sha1(b) c sha1(d) +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 101 10d3c783026b310218d10b7188da96a2401648c6 +select a, sha1(b), c, sha1(d) from t1 where a = 2 and c = 201; +a sha1(b) c sha1(d) +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 201 70fc9a7d08beebc522258bfb02000a30c77a8f1d +select a, sha1(b), c, sha1(d) from t1 where a = 3 and c = 301; +a sha1(b) c sha1(d) +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 301 acbaba01bc2e682f015f40e79d9cbe475db3002e +update t1 set b = @v3, d = @v4 where a = 1 and c = 102; +update t1 set b = @v6, d = @v7 where a = 2 and c = 202; +update t1 set b = @v9, d = @v1 where a = 3 and c = 302; +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 101 10d3c783026b310218d10b7188da96a2401648c6 +1 a33549d9844092289a58ac348dd59f09fc28406a 102 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c +1 a33549d9844092289a58ac348dd59f09fc28406a 103 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 201 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 090565c580809efed3d369481a4bbb168b20713e 202 1e0070bec426871a46291de27b9bd6e4255ab4e5 +2 090565c580809efed3d369481a4bbb168b20713e 203 1e0070bec426871a46291de27b9bd6e4255ab4e5 +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 301 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 9ee30d99162574f79c66ae95cdf132dcf9cbc259 302 1d42dd9090cf78314a06665d4ea938c35cc760f4 +3 9ee30d99162574f79c66ae95cdf132dcf9cbc259 303 1d42dd9090cf78314a06665d4ea938c35cc760f4 +update t1 set b = @v4, d = @v5 where c = 103; +update t1 set b = @v7, d = @v8 where c = 203; +update t1 set b = @v1, d = @v2 where c = 303; +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 101 10d3c783026b310218d10b7188da96a2401648c6 +1 a33549d9844092289a58ac348dd59f09fc28406a 102 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c +1 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 103 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 201 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 090565c580809efed3d369481a4bbb168b20713e 202 1e0070bec426871a46291de27b9bd6e4255ab4e5 +2 1e0070bec426871a46291de27b9bd6e4255ab4e5 203 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 301 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 9ee30d99162574f79c66ae95cdf132dcf9cbc259 302 1d42dd9090cf78314a06665d4ea938c35cc760f4 +3 1d42dd9090cf78314a06665d4ea938c35cc760f4 303 10d3c783026b310218d10b7188da96a2401648c6 +update t1 set b = @v5, d = @v6; +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +1 70fc9a7d08beebc522258bfb02000a30c77a8f1d 101 090565c580809efed3d369481a4bbb168b20713e +1 70fc9a7d08beebc522258bfb02000a30c77a8f1d 102 090565c580809efed3d369481a4bbb168b20713e +1 70fc9a7d08beebc522258bfb02000a30c77a8f1d 103 090565c580809efed3d369481a4bbb168b20713e +2 70fc9a7d08beebc522258bfb02000a30c77a8f1d 201 090565c580809efed3d369481a4bbb168b20713e +2 70fc9a7d08beebc522258bfb02000a30c77a8f1d 202 090565c580809efed3d369481a4bbb168b20713e +2 70fc9a7d08beebc522258bfb02000a30c77a8f1d 203 090565c580809efed3d369481a4bbb168b20713e +3 70fc9a7d08beebc522258bfb02000a30c77a8f1d 301 090565c580809efed3d369481a4bbb168b20713e +3 70fc9a7d08beebc522258bfb02000a30c77a8f1d 302 090565c580809efed3d369481a4bbb168b20713e +3 70fc9a7d08beebc522258bfb02000a30c77a8f1d 303 090565c580809efed3d369481a4bbb168b20713e +update t1 set b = @v1, d = @v2 where 100 < c and c < 200; +update t1 set b = @v4, d = @v5 where 200 < c and c < 300; +update t1 set b = @v7, d = @v8 where 300 < c and c < 400; +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 101 10d3c783026b310218d10b7188da96a2401648c6 +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 102 10d3c783026b310218d10b7188da96a2401648c6 +1 1d42dd9090cf78314a06665d4ea938c35cc760f4 103 10d3c783026b310218d10b7188da96a2401648c6 +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 201 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 202 70fc9a7d08beebc522258bfb02000a30c77a8f1d +2 daa61c6de36a0526f0d47dc29d6b9de7e6d2630c 203 70fc9a7d08beebc522258bfb02000a30c77a8f1d +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 301 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 302 acbaba01bc2e682f015f40e79d9cbe475db3002e +3 1e0070bec426871a46291de27b9bd6e4255ab4e5 303 acbaba01bc2e682f015f40e79d9cbe475db3002e +delete from t1 where a = 1 and c = 101; +delete from t1 where c = 102; +delete from t1; +select a, sha1(b), c, sha1(d) from t1 order by a; +a sha1(b) c sha1(d) +drop table t1; diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 2e293df50e2e21ab7234a5aa5de6a097d81ef953..0da071374ea1ae0e5a642196a4d08946339f7baf 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -839,4 +839,51 @@ SHOW TABLE STATUS; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned DROP TABLE t1; +create table t1 (a int) +partition by list (a) +(partition `s1 s2` values in (0)); +drop table t1; +create table t1 (a int) +partition by list (a) +(partition `7` values in (0)); +drop table t1; +create table t1 (a int) +partition by list (a) +(partition `s1 s2 ` values in (0)); +ERROR HY000: Incorrect partition name +create table t1 (a int) +partition by list (a) +subpartition by hash (a) +(partition p1 values in (0) (subpartition `p1 p2 `)); +ERROR HY000: Incorrect partition name +CREATE TABLE t1 (a int) +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (NULL)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY LIST (a) (PARTITION p0 VALUES IN (NULL) ENGINE = MyISAM) +DROP TABLE t1; +CREATE TABLE t1 (a int) +PARTITION BY RANGE(a) +(PARTITION p0 VALUES LESS THAN (NULL)); +ERROR 42000: Not allowed to use NULL value in VALUES LESS THAN near '))' at line 3 +create table t1 (s1 int auto_increment primary key) +partition by list (s1) +(partition p1 values in (1), +partition p2 values in (2), +partition p3 values in (3)); +insert into t1 values (null); +insert into t1 values (null); +insert into t1 values (null); +select auto_increment from information_schema.tables where table_name='t1'; +auto_increment +4 +select * from t1; +s1 +1 +2 +3 +drop table t1; End of 5.1 tests diff --git a/mysql-test/r/partition_grant.result b/mysql-test/r/partition_grant.result new file mode 100644 index 0000000000000000000000000000000000000000..da0e00c9858452b10ff83a979856bea034ff1acc --- /dev/null +++ b/mysql-test/r/partition_grant.result @@ -0,0 +1,23 @@ +drop schema if exists mysqltest_1; +create schema mysqltest_1; +use mysqltest_1; +create table t1 (a int) partition by list (a) (partition p1 values in (1), partition p2 values in (2), partition p3 values in (3)); +insert into t1 values (1),(2); +grant select,alter on mysqltest_1.* to mysqltest_1@localhost; +show grants for current_user; +Grants for mysqltest_1@localhost +GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' +GRANT SELECT, ALTER ON `mysqltest_1`.* TO 'mysqltest_1'@'localhost' +alter table t1 add b int; +alter table t1 drop partition p2; +ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1' +grant drop on mysqltest_1.* to mysqltest_1@localhost; +alter table t1 drop partition p2; +revoke alter on mysqltest_1.* from mysqltest_1@localhost; +alter table t1 drop partition p3; +ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1' +revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost; +drop user mysqltest_1@localhost; +drop table t1; +drop schema mysqltest_1; +End of 5.1 tests diff --git a/mysql-test/r/partition_hash.result b/mysql-test/r/partition_hash.result index 64dcf8c58371bd8088d8aefdb5b1b88cb0afa276..08faccd024e5faf8dad54bc058ef4da7f882696c 100644 --- a/mysql-test/r/partition_hash.result +++ b/mysql-test/r/partition_hash.result @@ -73,3 +73,29 @@ drop table t1; CREATE TABLE t1 (s1 int) ENGINE=BLACKHOLE PARTITION BY HASH (s1); INSERT INTO t1 VALUES (0); DROP TABLE t1; +create table t1 (c1 int DEFAULT NULL, +c2 varchar (30) DEFAULT NULL, +c3 date DEFAULT NULL) +engine = myisam +partition by hash (to_days(c3)) +partitions 12; +insert into t1 values +(136,'abc','2002-01-05'),(142,'abc','2002-02-14'),(162,'abc','2002-06-28'), +(182,'abc','2002-11-09'),(158,'abc','2002-06-01'),(184,'abc','2002-11-22'); +select * from t1; +c1 c2 c3 +136 abc 2002-01-05 +158 abc 2002-06-01 +142 abc 2002-02-14 +162 abc 2002-06-28 +182 abc 2002-11-09 +184 abc 2002-11-22 +select * from t1 where c3 between '2002-01-01' and '2002-12-31'; +c1 c2 c3 +136 abc 2002-01-05 +158 abc 2002-06-01 +142 abc 2002-02-14 +162 abc 2002-06-28 +182 abc 2002-11-09 +184 abc 2002-11-22 +drop table t1; diff --git a/mysql-test/r/partition_pruning.result b/mysql-test/r/partition_pruning.result index 8b959cb6a3eb2426a97472ecdca6665c79ceb753..b13f0d55e39cf733d3ff9642b318f16f33ecd07c 100644 --- a/mysql-test/r/partition_pruning.result +++ b/mysql-test/r/partition_pruning.result @@ -659,3 +659,14 @@ explain partitions select count(*) from t1 where s1 < 0 or s1 is null; id select_type table partitions type possible_keys key key_len ref rows Extra 1 SIMPLE t1 p3 system NULL NULL NULL NULL 1 drop table t1; +create table t1 (a char(32) primary key) +partition by key() +partitions 100; +insert into t1 values ('na'); +select * from t1; +a +na +select * from t1 where a like 'n%'; +a +na +drop table t1; diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index 6db5e8f8157ed9cd19dd15a61746fe5dc0ba5099..3de7ab61e73048c06f957306f340d2befb188e60 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -108,6 +108,9 @@ set @fvar= 123.4567; prepare stmt1 from @fvar; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123.4567' at line 1 drop table t1,t2; +deallocate prepare stmt3; +deallocate prepare stmt4; +deallocate prepare stmt5; PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?"; set @var='A'; EXECUTE stmt1 USING @var; @@ -253,6 +256,7 @@ set names latin1; execute `ü`; 1234 1234 +deallocate prepare `ü`; set names default; create table t1 (a varchar(10)) charset=utf8; insert into t1 (a) values ('yahoo'); @@ -781,6 +785,7 @@ EXECUTE b12651; 1 DROP VIEW b12651_V1; DROP TABLE b12651_T1, b12651_T2; +DEALLOCATE PREPARE b12651; prepare stmt from "select @@time_zone"; execute stmt; @@time_zone @@ -873,6 +878,130 @@ length(a) 10 drop table t1; deallocate prepare stmt; +create table t1 (col1 integer, col2 integer); +insert into t1 values(100,100),(101,101),(102,102),(103,103); +prepare stmt from 'select col1, col2 from t1 where (col1, col2) in ((?,?))'; +set @a=100, @b=100; +execute stmt using @a,@b; +col1 col2 +100 100 +set @a=101, @b=101; +execute stmt using @a,@b; +col1 col2 +101 101 +set @a=102, @b=102; +execute stmt using @a,@b; +col1 col2 +102 102 +set @a=102, @b=103; +execute stmt using @a,@b; +col1 col2 +deallocate prepare stmt; +drop table t1; +set @old_max_prepared_stmt_count= @@max_prepared_stmt_count; +show variables like 'max_prepared_stmt_count'; +Variable_name Value +max_prepared_stmt_count 16382 +show variables like 'prepared_stmt_count'; +Variable_name Value +prepared_stmt_count 0 +select @@max_prepared_stmt_count, @@prepared_stmt_count; +@@max_prepared_stmt_count @@prepared_stmt_count +16382 0 +set global max_prepared_stmt_count=-1; +select @@max_prepared_stmt_count; +@@max_prepared_stmt_count +0 +set global max_prepared_stmt_count=10000000000000000; +select @@max_prepared_stmt_count; +@@max_prepared_stmt_count +1048576 +set global max_prepared_stmt_count=default; +select @@max_prepared_stmt_count; +@@max_prepared_stmt_count +16382 +set @@max_prepared_stmt_count=1; +ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL +set max_prepared_stmt_count=1; +ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL +set local max_prepared_stmt_count=1; +ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL +set local prepared_stmt_count=0; +ERROR HY000: Variable 'prepared_stmt_count' is a read only variable +set @@prepared_stmt_count=0; +ERROR HY000: Variable 'prepared_stmt_count' is a read only variable +set global prepared_stmt_count=1; +ERROR HY000: Variable 'prepared_stmt_count' is a read only variable +set global max_prepared_stmt_count=1; +select @@max_prepared_stmt_count; +@@max_prepared_stmt_count +1 +set global max_prepared_stmt_count=0; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +@@max_prepared_stmt_count @@prepared_stmt_count +0 0 +prepare stmt from "select 1"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0) +select @@prepared_stmt_count; +@@prepared_stmt_count +0 +set global max_prepared_stmt_count=1; +prepare stmt from "select 1"; +select @@prepared_stmt_count; +@@prepared_stmt_count +1 +prepare stmt1 from "select 1"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 1) +select @@prepared_stmt_count; +@@prepared_stmt_count +1 +deallocate prepare stmt; +select @@prepared_stmt_count; +@@prepared_stmt_count +0 +prepare stmt from "select 1"; +select @@prepared_stmt_count; +@@prepared_stmt_count +1 +prepare stmt from "select 2"; +select @@prepared_stmt_count; +@@prepared_stmt_count +1 +select @@prepared_stmt_count, @@max_prepared_stmt_count; +@@prepared_stmt_count @@max_prepared_stmt_count +1 1 +set global max_prepared_stmt_count=0; +prepare stmt from "select 1"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0) +execute stmt; +ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE +select @@prepared_stmt_count; +@@prepared_stmt_count +0 +prepare stmt from "select 1"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0) +select @@prepared_stmt_count; +@@prepared_stmt_count +0 +set global max_prepared_stmt_count=3; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +@@max_prepared_stmt_count @@prepared_stmt_count +3 0 +prepare stmt from "select 1"; +prepare stmt from "select 2"; +prepare stmt1 from "select 3"; +prepare stmt2 from "select 4"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3) +prepare stmt2 from "select 4"; +ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3) +select @@max_prepared_stmt_count, @@prepared_stmt_count; +@@max_prepared_stmt_count @@prepared_stmt_count +3 3 +deallocate prepare stmt; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +@@max_prepared_stmt_count @@prepared_stmt_count +3 0 +set global max_prepared_stmt_count= @old_max_prepared_stmt_count; create table t1 (id int); prepare ins_call from "insert into t1 (id) values (1)"; execute ins_call; @@ -883,6 +1012,7 @@ drop table t1; create table t1 (a int, b int); insert into t1 (a,b) values (2,8),(1,9),(3,7); prepare stmt from "select * from t1 order by ?"; +set @a=NULL; execute stmt using @a; a b 2 8 diff --git a/mysql-test/r/rpl_ndb_dd_advance.result b/mysql-test/r/rpl_ndb_dd_advance.result index 9d9a4e5b5ad8ce9c5887138f1701f20a56b68a34..ba89592b532c93cc0325140af124355daf17ba13 100644 --- a/mysql-test/r/rpl_ndb_dd_advance.result +++ b/mysql-test/r/rpl_ndb_dd_advance.result @@ -370,13 +370,10 @@ COUNT(*) 10000 ***** Add some more records to master ********* ***** Finsh the slave sync process ******* -* 1. * @the_epoch:=MAX(epoch) <the_epoch> -* 2. * @the_pos:=Position @the_file:=SUBSTRING_INDEX(FILE, '/', -1) <the_pos> master-bin.000001 -* 3. * * 4. * * 5. * START SLAVE; diff --git a/mysql-test/r/rpl_ndb_relay_space.result b/mysql-test/r/rpl_ndb_relay_space.result deleted file mode 100644 index 1e25b7fe8c119900a5c3954d459d6751c901fe53..0000000000000000000000000000000000000000 --- a/mysql-test/r/rpl_ndb_relay_space.result +++ /dev/null @@ -1,25 +0,0 @@ -stop slave; -drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; -reset master; -reset slave; -drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; -start slave; -SHOW VARIABLES LIKE 'relay_log_space_limit'; -Variable_name Value -relay_log_space_limit 0 -CREATE TABLE t1 (name varchar(64), age smallint(3))ENGINE=NDB; -INSERT INTO t1 SET name='Andy', age=31; -INSERT t1 SET name='Jacob', age=2; -INSERT into t1 SET name='Caleb', age=1; -ALTER TABLE t1 ADD id int(8) ZEROFILL AUTO_INCREMENT PRIMARY KEY; -SELECT * FROM t1 ORDER BY id; -name age id -Andy 31 00000001 -Caleb 1 00000002 -Jacob 2 00000003 -SELECT * FROM t1 ORDER BY id; -name age id -Andy 31 00000001 -Caleb 1 00000002 -Jacob 2 00000003 -drop table t1; diff --git a/mysql-test/r/rpl_ndb_sync.result b/mysql-test/r/rpl_ndb_sync.result index 897737e95d5e4d56d4e3083d731f26a01eda41de..4ca731676031805484958266da3ca0a8f0781200 100644 --- a/mysql-test/r/rpl_ndb_sync.result +++ b/mysql-test/r/rpl_ndb_sync.result @@ -25,13 +25,13 @@ hex(c2) hex(c3) c1 0 1 BCDEF 1 0 CD 0 0 DEFGHIJKL -CREATE TEMPORARY TABLE IF NOT EXISTS cluster.backup_info (id INT, backup_id INT)ENGINE=HEAP; -DELETE FROM cluster.backup_info; -LOAD DATA INFILE '../tmp.dat' INTO TABLE cluster.backup_info FIELDS TERMINATED BY ','; -SELECT @the_backup_id:=backup_id FROM cluster.backup_info; +CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP; +DELETE FROM test.backup_info; +LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ','; +SELECT @the_backup_id:=backup_id FROM test.backup_info; @the_backup_id:=backup_id <the_backup_id> -DROP TABLE cluster.backup_info; +DROP TABLE test.backup_info; UPDATE t1 SET c2=0 WHERE c3="row2"; SELECT hex(c1),hex(c2),c3 FROM t1 ORDER BY c3; hex(c1) hex(c2) c3 diff --git a/mysql-test/r/rpl_relay_space_innodb.result b/mysql-test/r/rpl_relay_space_innodb.result index 80d8c48c2419001c6cbe1acbca84652c41674970..54aac2eca35660382d20a9cdee3d614234c5e90e 100644 --- a/mysql-test/r/rpl_relay_space_innodb.result +++ b/mysql-test/r/rpl_relay_space_innodb.result @@ -8,9 +8,9 @@ SHOW VARIABLES LIKE 'relay_log_space_limit'; Variable_name Value relay_log_space_limit 0 CREATE TABLE t1 (name varchar(64), age smallint(3))ENGINE=InnoDB; -INSERT INTO t1 SET name='Andy', age=31; -INSERT t1 SET name='Jacob', age=2; -INSERT into t1 SET name='Caleb', age=1; +INSERT INTO t1 SET name='Andy', age=31; +INSERT INTO t1 SET name='Jacob', age=2; +INSERT INTO t1 SET name='Caleb', age=1; ALTER TABLE t1 ADD id int(8) ZEROFILL AUTO_INCREMENT PRIMARY KEY; SELECT * FROM t1 ORDER BY id; name age id @@ -22,4 +22,4 @@ name age id Andy 31 00000001 Jacob 2 00000002 Caleb 1 00000003 -drop table t1; +DROP TABLE t1; diff --git a/mysql-test/r/rpl_relay_space_myisam.result b/mysql-test/r/rpl_relay_space_myisam.result index 02bff7ae881bf2455e8943d691ebc46dcda700a3..e8d2d63e46e3332ef6d4a5e833d254595c476ebf 100644 --- a/mysql-test/r/rpl_relay_space_myisam.result +++ b/mysql-test/r/rpl_relay_space_myisam.result @@ -8,9 +8,9 @@ SHOW VARIABLES LIKE 'relay_log_space_limit'; Variable_name Value relay_log_space_limit 0 CREATE TABLE t1 (name varchar(64), age smallint(3))ENGINE=MyISAM; -INSERT INTO t1 SET name='Andy', age=31; -INSERT t1 SET name='Jacob', age=2; -INSERT into t1 SET name='Caleb', age=1; +INSERT INTO t1 SET name='Andy', age=31; +INSERT INTO t1 SET name='Jacob', age=2; +INSERT INTO t1 SET name='Caleb', age=1; ALTER TABLE t1 ADD id int(8) ZEROFILL AUTO_INCREMENT PRIMARY KEY; SELECT * FROM t1 ORDER BY id; name age id @@ -22,4 +22,4 @@ name age id Andy 31 00000001 Jacob 2 00000002 Caleb 1 00000003 -drop table t1; +DROP TABLE t1; diff --git a/mysql-test/r/rpl_temporary.result b/mysql-test/r/rpl_temporary.result index 5e3030f2c7a600c706b10aab7e5e2e546a696ad2..bc5cc26207926fa62bf699ef6a7925f4863a6de4 100644 --- a/mysql-test/r/rpl_temporary.result +++ b/mysql-test/r/rpl_temporary.result @@ -74,3 +74,17 @@ f 7 drop table t1,t2; create temporary table t3 (f int); +create temporary table t4 (f int); +create table t5 (f int); +drop table if exists t999; +create temporary table t999 (f int); +LOAD DATA INFILE "./tmp/bl_dump_thread_id" into table t999; +drop table t999; +insert into t4 values (1); +kill `select id from information_schema.processlist where command='Binlog Dump'`; +insert into t5 select * from t4; +select * from t5 /* must be 1 after reconnection */; +f +1 +drop temporary table t4; +drop table t5; diff --git a/mysql-test/r/type_bit.result b/mysql-test/r/type_bit.result index 298ee9678a298416fef68bd74f79f0296057cfc3..c66adbe871d0aff2c31e884443918b862788a247 100644 --- a/mysql-test/r/type_bit.result +++ b/mysql-test/r/type_bit.result @@ -564,3 +564,12 @@ b1+0 sum(b1) sum(b2) 1 4 4 2 2 2 drop table t1, t2; +create table t1 (a bit(7)); +insert into t1 values (0x60); +select * from t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def test t1 t1 a a 16 7 1 Y 0 0 63 +a +` +drop table t1; +End of 5.0 tests diff --git a/mysql-test/r/type_bit_innodb.result b/mysql-test/r/type_bit_innodb.result index fcaa9bfeddaa30d655f39dd2a4a6473bcb481844..8dc016d5a4ac9464309d496196c492773eea9102 100644 --- a/mysql-test/r/type_bit_innodb.result +++ b/mysql-test/r/type_bit_innodb.result @@ -402,3 +402,12 @@ t1 CREATE TABLE `t1` ( `b` bit(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table t1; +create table t1 (a bit(7)) engine=innodb; +insert into t1 values (0x60); +select * from t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def test t1 t1 a a 16 7 1 Y 0 0 63 +a +` +drop table t1; +End of 5.0 tests diff --git a/mysql-test/r/upgrade.result b/mysql-test/r/upgrade.result index 9d35314d0c69a860b1365a22787e476e2b96c51f..8a2249480e9ba39f0128becbb940314e05c57a5e 100644 --- a/mysql-test/r/upgrade.result +++ b/mysql-test/r/upgrade.result @@ -41,19 +41,19 @@ t1 t-1 drop database `mysqltest1`; drop database `mysqltest-1`; -drop table if exists `txu@0023P@0023p1`; -drop table if exists `txu#P#p1`; -create table `txu#P#p1` (s1 int); -insert into `txu#P#p1` values (1); -select * from `txu@0023P@0023p1`; -ERROR 42S02: Table 'test.txu@0023P@0023p1' doesn't exist -create table `txu@0023P@0023p1` (s1 int); -insert into `txu@0023P@0023p1` values (2); -select * from `txu@0023P@0023p1`; +drop table if exists `txu@0023p@0023p1`; +drop table if exists `txu#p#p1`; +create table `txu#p#p1` (s1 int); +insert into `txu#p#p1` values (1); +select * from `txu@0023p@0023p1`; +ERROR 42S02: Table 'test.txu@0023p@0023p1' doesn't exist +create table `txu@0023p@0023p1` (s1 int); +insert into `txu@0023p@0023p1` values (2); +select * from `txu@0023p@0023p1`; s1 2 -select * from `txu#P#p1`; +select * from `txu#p#p1`; s1 1 -drop table `txu@0023P@0023p1`; -drop table `txu#P#p1`; +drop table `txu@0023p@0023p1`; +drop table `txu#p#p1`; diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index fc3e5475ae77dde63021158faf71b3b2955143ad..0b6ebe9dd8991d3b597c4fc8fa1766f2198cd507 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -2579,3 +2579,24 @@ COUNT(*) 2 DROP VIEW v2; DROP TABLE t1, t2; +CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, +td date DEFAULT NULL, KEY idx(td)); +INSERT INTO t1 VALUES +(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'), +(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'), +(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06'); +CREATE VIEW v1 AS SELECT * FROM t1; +SELECT * FROM t1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; +id td +2 2005-01-02 +3 2005-01-02 +4 2005-01-03 +5 2005-01-04 +SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; +id td +2 2005-01-02 +3 2005-01-02 +4 2005-01-03 +5 2005-01-04 +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result index 52f800000151646dfdb6ff4e0a0dbe8d441a9f0f..61dd1390a6aea912244713aac87a62fcaded0cb6 100644 --- a/mysql-test/r/xml.result +++ b/mysql-test/r/xml.result @@ -468,6 +468,30 @@ extractValue(@xml, '/a/@b[substring(.,2,1)="1"]') select extractValue(@xml, '/a/@b[substring(.,2,1)="2"]'); extractValue(@xml, '/a/@b[substring(.,2,1)="2"]') 12 22 +SET @xml='<a><b>b1</b><b>b2</b></a>'; +SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); +extractValue(@xml, '/a/b[string-length("x")=1]') +b1 b2 +SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); +extractValue(@xml, '/a/b[string-length("xx")=2]') +b1 b2 +SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); +extractValue(@xml, '/a/b[string-length("xxx")=2]') + +SELECT extractValue(@xml, '/a/b[string-length("x")]'); +extractValue(@xml, '/a/b[string-length("x")]') +b1 +SELECT extractValue(@xml, '/a/b[string-length("xx")]'); +extractValue(@xml, '/a/b[string-length("xx")]') +b2 +SELECT extractValue(@xml, '/a/b[string-length()]'); +extractValue(@xml, '/a/b[string-length()]') +b2 +SELECT extractValue(@xml, 'string-length()'); +ERROR HY000: XPATH syntax error: '' +SELECT extractValue(@xml, 'string-length("x")'); +extractValue(@xml, 'string-length("x")') +1 SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); extractValue(@xml,'/a/@b') @@ -609,9 +633,35 @@ extractvalue('<a>Jack</a>','/a[contains(../a,"j")]' collate latin1_bin) select extractvalue('<a>Jack</a>' collate latin1_bin,'/a[contains(../a,"j")]'); extractvalue('<a>Jack</a>' collate latin1_bin,'/a[contains(../a,"j")]') +select ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1'); +ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1') +test select extractValue('<e>1</e>','position()'); ERROR HY000: XPATH syntax error: '' select extractValue('<e>1</e>','last()'); ERROR HY000: XPATH syntax error: '' select extractValue('<e><a>1</a></e>','/e/'); ERROR HY000: XPATH syntax error: '' +set names utf8; +select extractValue('<Ñ><r>r</r></Ñ>','/Ñ/r'); +extractValue('<Ñ><r>r</r></Ñ>','/Ñ/r') +r +select extractValue('<r><Ñ>Ñ</Ñ></r>','/r/Ñ'); +extractValue('<r><Ñ>Ñ</Ñ></r>','/r/Ñ') +Ñ +select extractValue('<Ñ r="r"/>','/Ñ/@r'); +extractValue('<Ñ r="r"/>','/Ñ/@r') +r +select extractValue('<r Ñ="Ñ"/>','/r/@Ñ'); +extractValue('<r Ñ="Ñ"/>','/r/@Ñ') +Ñ +DROP PROCEDURE IF EXISTS p2; +CREATE PROCEDURE p2 () +BEGIN +DECLARE p LONGTEXT CHARACTER SET UTF8 DEFAULT '<Ñ><r>A</r></Ñ>'; +SELECT EXTRACTVALUE(p,'/Ñ/r'); +END// +CALL p2(); +EXTRACTVALUE(p,'/Ñ/r') +A +DROP PROCEDURE p2; diff --git a/SSL/cacert.pem b/mysql-test/std_data/cacert.pem similarity index 100% rename from SSL/cacert.pem rename to mysql-test/std_data/cacert.pem diff --git a/SSL/client-cert.pem b/mysql-test/std_data/client-cert.pem similarity index 100% rename from SSL/client-cert.pem rename to mysql-test/std_data/client-cert.pem diff --git a/SSL/client-key.pem b/mysql-test/std_data/client-key.pem similarity index 100% rename from SSL/client-key.pem rename to mysql-test/std_data/client-key.pem diff --git a/SSL/server-cert.pem b/mysql-test/std_data/server-cert.pem similarity index 100% rename from SSL/server-cert.pem rename to mysql-test/std_data/server-cert.pem diff --git a/SSL/server-key.pem b/mysql-test/std_data/server-key.pem similarity index 100% rename from SSL/server-key.pem rename to mysql-test/std_data/server-key.pem diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test index 535402c2e1363e325d3ecb003a18a96bc2861c84..7e091991475b2f8d4617297e6aa1319564483552 100644 --- a/mysql-test/t/archive.test +++ b/mysql-test/t/archive.test @@ -1486,6 +1486,9 @@ select * from t1; alter table t1 add unique key (i, v); select * from t1 where i between 2 and 4 and v in ('def','3r4f','lmn'); +alter table t1 data directory="$MYSQLTEST_VARDIR/tmp"; +select * from t1; + # # Cleanup, test is over # diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test index 7e09f44397c4dee88732152d92781086e2c804c5..533da5428558a2c027e39b8253e7a589072d4c27 100644 --- a/mysql-test/t/cast.test +++ b/mysql-test/t/cast.test @@ -171,6 +171,8 @@ select cast(1.0e+300 as signed int); CREATE TABLE t1 (f1 double); INSERT INTO t1 SET f1 = -1.0e+30 ; INSERT INTO t1 SET f1 = +1.0e+30 ; +# Expected result is +-1e+30, but Windows returns +-1e+030. +--replace_result 1e+030 1e+30 SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1; DROP TABLE t1; diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test index 63c76e79fc7e00bcd55303a0b8dba821e9d87a23..9ba99167ab9dfe1a47e1f7aea065e6007195137d 100644 --- a/mysql-test/t/csv.test +++ b/mysql-test/t/csv.test @@ -1477,8 +1477,29 @@ CREATE TABLE test_repair_table5 ( CHECK TABLE test_repair_table5; REPAIR TABLE test_repair_table5; SELECT * FROM test_repair_table5; -DROP TABLE test_repair_table5; +INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT", 1876); +SELECT * FROM test_repair_table5; +# Corrupt a table -- put a row with wrong # of columns at end of file +--exec perl -e 'print "\"1\",\"101\",\"IBM\"\n";' >> $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV + +FLUSH TABLES; +CHECK TABLE test_repair_table5; +REPAIR TABLE test_repair_table5; +# The correct record inserted should still be in the file +SELECT * FROM test_repair_table5; +INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT2", 1876); +SELECT * FROM test_repair_table5; + +# Corrupt table again -- put a row with wrong # of columns at end of file +--exec perl -e 'print "\"1\",\"101\",\"IBM\"\n";' >> $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV + +FLUSH TABLES; +CHECK TABLE test_repair_table5; +REPAIR TABLE test_repair_table5; +# The two correct records inserted should still be in the file +SELECT * FROM test_repair_table5; +DROP TABLE test_repair_table5; # # BUG#13406 - incorrect amount of "records deleted" diff --git a/mysql-test/t/ctype_filename.test b/mysql-test/t/ctype_filename.test new file mode 100644 index 0000000000000000000000000000000000000000..436ccfc4f2e00c3e12fd2c9577c04f3cbbaf2a18 --- /dev/null +++ b/mysql-test/t/ctype_filename.test @@ -0,0 +1,21 @@ +--disable_warnings +drop table if exists con, aux, nul, lpt1, com1, `clock$`; +--enable_warnings + +create table con (a int); +drop table con; + +create table aux (a int); +drop table aux; + +create table nul (a int); +drop table nul; + +create table lpt1 (a int); +drop table lpt1; + +create table com1 (a int); +drop table com1; + +create table `clock$` (a int); +drop table `clock$`; diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 8827eab6bb531df52626e14b3173913b1feed687..2a9feec91c11c79e6f35b2581c4195fdb15b4624 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -4,46 +4,53 @@ # # Separate the test case name and the comment with ':'. # -# <testcasename> : Comment test +# <testcasename> : BUG#<xxxx> <date disabled> <disabler> <comment> # # Do not use any TAB characters for whitespace. # ############################################################################## -events_bugs : test case unstable (race conditions). andrey will fix -events_stress : test case unstable. andrey will fix -events : test case unstable. andrey will fix -#ndb_alter_table_row : sometimes wrong error 1015!=1046 -ndb_autodiscover : Needs to be fixed w.r.t binlog -ndb_autodiscover2 : Needs to be fixed w.r.t binlog -#ndb_binlog_basic : Results are not deterministic, Tomas will fix -#ndb_binlog_multi : Results are not deterministic, Tomas will fix -ndb_cache2 : Bug #18597 -ndb_gis : Bug #18600 -ndb_load : Bug#17233 -partition_03ndb : Bug#16385 -ps_7ndb : dbug assert in RBR mode when executing test suite -#rpl_bit_npk : Bug#13418 -#rpl_ddl : Bug#15963 SBR does not show "Definer" correctly -rpl_ndb_dd_basic : Bug #18569 -rpl_ndb_2innodb : assertion in get_parts_for_update() -rpl_ndb_2myisam : assertion in get_parts_for_update() -rpl_ndb_auto_inc : Bug#17086 -rpl_ndb_basic : Bug #18592 -#rpl_ndb_blob : interferes with following tests, causing hang -#rpl_ndb_blob2 : interferes with following tests, causing hang -rpl_ndb_ddl : master hangs -#rpl_ndb_delete_nowhere : Bug#17400: delete & update of rows in table without pk fails -rpl_ndb_insert_ignore : Bug #18567 -rpl_ndb_innodb2ndb : Bug#18261: Cluster Replication: tests rpl_ndb_xxx2ndb fails -rpl_ndb_myisam2ndb : Bug#18261: Cluster Replication: tests rpl_ndb_xxx2ndb fails -rpl_ndb_multi_update3 : Bug#18627: Cluster Replication: rpl_ndb_multi_update3 fails on Intel 64 bit -rpl_ndb_log : result not deterministic, TBD if should remove -rpl_ndb_relay_space : Bug#16993 -#rpl_ndb_multi_update3 : Bug#17400: delete & update of rows in table without pk fails -rpl_switch_stm_row_mixed : Bug #18590 -rpl_row_inexist_tbl : Disabled since patch makes this test wait forever -rpl_sp : Bug#16456 -rpl_until : Unstable test case, bug#15886 -sp-goto : GOTO is currently is disabled - will be fixed in the future -mysqldump : BUG#18078 -udf : Bug#18564 (Permission by Brian) +events_bugs : BUG#17619 2006-02-21 andrey Race conditions +events_stress : BUG#17619 2006-02-21 andrey Race conditions +events : BUG#17619 2006-02-21 andrey Race conditions +events_scheduling : BUG#18958 2006-04-13 andrey Test case unstable +events_logs_tests : BUG#18953 2006-04-12 kent Test is randomly failing +ndb_autodiscover : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog +ndb_autodiscover2 : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog +ndb_cache2 : BUG#18597 2006-03-28 brian simultaneous drop table and ndb statistics update triggers node failure +ndb_cache_multi2 : BUG#18597 2006-04-10 kent simultaneous drop table and ndb statistics update triggers node failure +partition_03ndb : BUG#16385 2006-03-24 mikael Partitions: crash when updating a range partitioned NDB table +ps_7ndb : BUG#18950 2006-02-16 jmiller create table like does not obtain LOCK_open +rpl_deadlock_innodb : BUG#16920 2006-04-12 kent fails in show slave status (randomly) +rpl_ndb_2innodb : BUG#19004 2006-03-22 tomas ndb: partition by range and update hangs +rpl_ndb_2myisam : BUG#19004 2006-03-22 tomas ndb: partition by range and update hangs +rpl_ndb_auto_inc : BUG#17086 2006-02-16 jmiller CR: auto_increment_increment and auto_increment_offset produce duplicate key er +rpl_ndb_ddl : result file needs update + test needs to checked +rpl_ndb_innodb2ndb : BUG#18094 2006-03-16 mats Slave caches invalid table definition after atlters causes select failure +rpl_ndb_log : BUG#18947 2006-03-21 tomas CRBR: order in binlog of create table and insert (on different table) not determ +rpl_ndb_myisam2ndb : BUG#18094 2006-03-16 mats Slave caches invalid table definition after atlters causes select failure +#rpl_ndb_relay_space : BUG#16993 2006-02-16 jmiller RBR: ALTER TABLE ZEROFILL AUTO_INCREMENT is not replicated correctly +rpl_switch_stm_row_mixed : BUG#18590 2006-03-28 brian +#rpl_row_basic_7ndb : BUG#17400 2006-04-09 brian Cluster Replication: delete & update of rows in table without pk fails on slave. +rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly +rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed +rpl_row_inexist_tbl : BUG#18948 2006-03-09 mats Disabled since patch makes this test wait forever +rpl_sp : BUG#16456 2006-02-16 jmiller +rpl_until : BUG#15886 2006-02-16 jmiller Unstable test case +sp-goto : BUG#18949 2006-02-16 jmiller GOTO is currently is disabled - will be fixed in the future +mysqldump : BUG#18078 2006-03-10 lars +udf : BUG#18564 2006-03-27 ian (Permission by Brian) + +# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open +#ndb_binlog_ddl_multi : BUG#18976 2006-04-10 kent CRBR: multiple binlog, second binlog may miss schema log events + +# the below ndb failures have not been objerved for > 5 push builds, close bugs +#ndb_gis : BUG#18600 2006-03-28 brian ndb_gis test failure +#ndb_load : BUG#17233 2006-02-16 jmiller failed load data from infile causes mysqld dbug_assert, binlog not flushed +#rpl_ndb_basic : BUG#18592 2006-03-28 brian rpl_ndb_basic failure +#rpl_ndb_dd_advance : BUG#18924 2006-04-09 brian rpl_ndb_dd_advance failure +rpl_ndb_dd_partitions : BUG#18094 2006-04-19 mats Slave caches invalid table definition... +#rpl_ndb_dd_basic : BUG#18569 2006-03-28 brian rpl_ndb_dd_basic failure +#rpl_ndb_insert_ignore : BUG#18567 2006-03-28 brian rpl_ndb_insert_ignore failure +#rpl_ndb_multi_update2 : BUG#18928 2006-04-09 brian rpl_ndb_multi_update2 failed +#rpl_ndb_multi_update3 : BUG#18627 2006-03-29 monty Cluster Replication: rpl_ndb_multi_update3 fails on Intel 64 bit +#rpl_ndb_trig004 : BUG#18977 2006-04-10 kent Test fails randomly diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index c98c1c94609c18a08a1ba8da08a6a27da30f5770..4e4fb8f777a295ff5ef50acf944222a124170244 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -446,4 +446,26 @@ select timestampdiff(year,'1999-09-11','2001-9-11'); select timestampdiff(year,'2004-02-28','2005-02-28'); select timestampdiff(year,'2004-02-29','2005-02-28'); +# +# Bug #18618: BETWEEN for dates with the second argument being a constant +# expression and the first and the third arguments being fields +# + +CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); +CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); + +INSERT INTO t1 VALUES + (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); +INSERT INTO t2 VALUES + (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); + +SELECT * FROM t1, t2 + WHERE t1.day BETWEEN + '2005.09.01' - INTERVAL 6 MONTH AND t2.day; +SELECT * FROM t1, t2 + WHERE CAST(t1.day AS DATE) BETWEEN + '2005.09.01' - INTERVAL 6 MONTH AND t2.day; + +DROP TABLE t1,t2; + # End of 5.0 tests diff --git a/mysql-test/t/having.test b/mysql-test/t/having.test index 9e5bc4bc1360fa9bebe89fbb9a21b4565b6f8873..9b21e54465717a2f37ff4062b318b790d19b278b 100644 --- a/mysql-test/t/having.test +++ b/mysql-test/t/having.test @@ -354,7 +354,9 @@ drop table t1; # when the server is run on Windows or with --lower-case-table-names=1 # +--disable_warnings DROP SCHEMA IF EXISTS HU; +--enable_warnings CREATE SCHEMA HU ; USE HU ; diff --git a/mysql-test/t/index_merge_innodb.test b/mysql-test/t/index_merge_innodb.test index a48626a9ec3832eccbb9329c1c8ad6b39504d727..25f4e0b4e65af6aaf7bdccd01869b5b1efe7be13 100644 --- a/mysql-test/t/index_merge_innodb.test +++ b/mysql-test/t/index_merge_innodb.test @@ -248,3 +248,55 @@ select t_vers,t_rele,t_cust,filler1 from t1 where t_vers = '7.6' drop table t1; +# BUG#19021: Crash in index_merge/ROR-intersection optimizer under +# specific circumstances. +create table t1 ( + pk int(11) not null auto_increment, + a int(11) not null default '0', + b int(11) not null default '0', + c int(11) not null default '0', + + filler1 datetime, filler2 varchar(15), + filler3 longtext, + + kp1 varchar(4), kp2 varchar(7), + kp3 varchar(2), kp4 varchar(4), + kp5 varchar(7), + filler4 char(1), + + primary key (pk), + key idx1(a,b,c), + key idx2(c), + key idx3(kp1,kp2,kp3,kp4,kp5) +) engine=innodb default charset=latin1; +--disable_query_log +set @fill= uncompress(unhex(concat( +'F91D0000789CDD993D6FDB301086F7FE0A6D4E0105B8E3F1335D5BA028DA0EEDE28E1D320408', +'52A0713BF4D7571FB62C51A475924839080307B603E77DEE787C8FA41F9E9EEF7F1F8A87A7C3', +'AFE280C5DF9F8F7FEE9F8B1B2CB114D6902E918455245DB91300FA16E42D5201FA4EE29DA05D', +'B9FB3718A33718A3FA8C30AEFAFDE1F317D016AA67BA7A60FDE45BF5F8BA7B5BDE8812AA9F1A', +'069DB03C9804346644F3A3A6A1338DB572756A3C4D1BCC804CABF912C654AE9BB855A2B85962', +'3A479259CAE6A86C0411D01AE5483581EDCBD9A39C45252D532E533979EB9F82E971D979BDB4', +'8531105670740AFBFD1E34AAB0029E4AD0A1D46A6D0946A21A16038A5CD965CD2D524673F712', +'20C304477315CE18405EAF9BD0AFFEAC74FDA14F1FBF5BD34C769D73FBBEDF4750ADD4E5A99C', +'5C8DC04934AFA275D483D536D174C11B12AF27F8F888B41B6FC9DBA569E1FD7BD72D698130B7', +'91B23A98803512B3D31881E8DCDA2AC1754E3644C4BB3A8466750B911681274A39E35E8624B7', +'444A42AC1213F354758E3CF1A4CDD5A688C767CF1B11ABC5867CB15D8A18E0B91E9EC275BB94', +'58F33C2936F64690D55BC29E4A293D95A798D84217736CEAAA538CE1354269EE2162053FBC66', +'496D90CB53323CB279D3A6AF651B4B22B9E430743D83BE48E995A09D4FC9871C22D8D189B945', +'706911BCB8C3C774B9C08D2FC6ED853ADACA37A14A4CB2E027630E5B80ECACD939431B1CDF62', +'7D71487536EA2C678F59685E91F4B6C144BCCB94C1EBA9FA6F5552DDCA4E4539BE326A2720CB', +'45ED028EB3616AC93C46E775FEA9FA6DA7CFCEC6DEBA5FCD1F915EED4D983BDDB881528AD9AB', +'43C1576F29AAB35BDFBC21D422F52B307D350589D45225A887AC46C8EDD72D99EC3ED2E1BCEF', +'7AF26FC4C74097B6768A5EDAFA660CC64278F7E63F99AC954B'))); +prepare x from @fill; +execute x; +deallocate prepare x; +--enable_query_log +set @fill=NULL; +SELECT COUNT(*) FROM t1 WHERE b = 0 AND a = 0 AND c = 13286427 AND + kp1='279' AND kp2='ELM0678' AND kp3='6' AND kp4='10' AND kp5 = 'R '; + +drop table t1; + + diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 0a8e46d694ca3d486de8ea0b47439db9b752aa48..ab408e9b4a54379af1c5ed7f4b0c9c06740657a3 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -1141,6 +1141,41 @@ show create table t2; drop table t2, t1; +# +# Let us test binlog_cache_use and binlog_cache_disk_use status vars. +# Actually this test has nothing to do with innodb per se, it just requires +# transactional table. +# +flush status; +show status like "binlog_cache_use"; +show status like "binlog_cache_disk_use"; + +create table t1 (a int) engine=innodb; + +# Now we are going to create transaction which is long enough so its +# transaction binlog will be flushed to disk... +let $1=2000; +disable_query_log; +begin; +while ($1) +{ + eval insert into t1 values( $1 ); + dec $1; +} +commit; +enable_query_log; +show status like "binlog_cache_use"; +show status like "binlog_cache_disk_use"; + +# Transaction which should not be flushed to disk and so should not +# increase binlog_cache_disk_use. +begin; +delete from t1; +commit; +show status like "binlog_cache_use"; +show status like "binlog_cache_disk_use"; +drop table t1; + # # Bug #6126: Duplicate columns in keys gives misleading error message # @@ -1255,6 +1290,15 @@ select * from t1 where x > -16; select count(*) from t1 where x = 18446744073709551601; drop table t1; + +# Test for testable InnoDB status variables. This test +# uses previous ones(pages_created, rows_deleted, ...). +show status like "Innodb_buffer_pool_pages_total"; +show status like "Innodb_page_size"; +show status like "Innodb_rows_deleted"; +show status like "Innodb_rows_inserted"; +show status like "Innodb_rows_updated"; + # Test for row locks InnoDB status variables. show status like "Innodb_row_lock_waits"; show status like "Innodb_row_lock_current_waits"; @@ -2085,6 +2129,18 @@ connection default; disconnect a; disconnect b; +# +# Bug #14360: problem with intervals +# + +create table t1(a date) engine=innodb; +create table t2(a date, key(a)) engine=innodb; +insert into t1 values('2005-10-01'); +insert into t2 values('2005-10-01'); +select * from t1, t2 + where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; +drop table t1, t2; + # # Test that cascading updates leading to duplicate keys give the correct # error message (bug #9680) @@ -2137,4 +2193,3 @@ alter table t1 drop foreign key c2_fk; show create table t1; # drop table t1, t2; - diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test index ddde6cfa5d333e2077b47c0037421d9b5ccfd956..f3dd8e7e199987f1a843071511442180d1a99000 100644 --- a/mysql-test/t/insert.test +++ b/mysql-test/t/insert.test @@ -175,3 +175,4 @@ select count(*) from t2; insert into t2 select t1.* from t1, t2 t, t3 where t1.id1 = t.id2 and t.id2 = t3.id3; select count(*) from t2; drop table t1,t2,t3; + diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index dbf65845e6a7e6770743a0223cf6faa3cc234e7b..95cba2743dacc62ce3a7914ddd3b8ba929224f0f 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -61,3 +61,9 @@ drop table t1; # Bug#16859 -- NULLs in columns must not truncate data as if a C-language "string". # --exec $MYSQL -t test -e "create table t1 (col1 binary(4), col2 varchar(10), col3 int); insert into t1 values ('a', 'b', 123421),('a ', '0123456789', 4), ('abcd', '', 4); select concat('>',col1,'<'), col2, col3 from t1; drop table t1;" 2>&1 + +# +# Bug#18265 -- mysql client: No longer right-justifies numeric columns +# +--exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int, k char(25) charset utf8); insert into t1 (i) values (1); insert into t1 (k) values ('<----------------------->'); insert into t1 (k) values ('<-----'); insert into t1 (k) values ('Τη γλώσσα'); insert into t1 (k) values ('á›–áš´ áš·á›–á›'); select * from t1; DROP TABLE t1;" + diff --git a/mysql-test/t/ndb_alter_table2.test b/mysql-test/t/ndb_alter_table2.test new file mode 100644 index 0000000000000000000000000000000000000000..afe6e44f698168088ffbba9ba7ef67e30b5a22c9 --- /dev/null +++ b/mysql-test/t/ndb_alter_table2.test @@ -0,0 +1,85 @@ +-- source include/have_ndb.inc +-- source include/have_multi_ndb.inc +-- source include/not_embedded.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +connect (con1,localhost,root,,test); +connect (con2,localhost,root,,test); +connect (con3,localhost,root,,test); +connect (con4,localhost,root,,test); +connect (con5,localhost,root,,test); +connect (con6,localhost,root,,test); + +CREATE TABLE t1 ( + a INT NOT NULL PRIMARY KEY, + b INT NOT NULL +) ENGINE=ndbcluster; + +connection con1; +BEGIN; +INSERT INTO t1 VALUES (9410,9412); +connection con2; +BEGIN; +--send +INSERT INTO t1 VALUES (9411,9412); +connection con3; +BEGIN; +--send +INSERT INTO t1 VALUES (9412,9412); +connection con4; +BEGIN; +--send +INSERT INTO t1 VALUES (9413,9412); +connection con5; +BEGIN; +--send +INSERT INTO t1 VALUES (9414,9412); +connection con6; +BEGIN; +--send +INSERT INTO t1 VALUES (9415,9412); +connection con1; +sleep 1; + +ROLLBACK; +connection con2; +reap; +ROLLBACK; +connection con3; +reap; +ROLLBACK; +connection con4; +reap; +ROLLBACK; +connection con5; +reap; +ROLLBACK; +connection con6; +reap; +ROLLBACK; + +connection server2; + +drop table t1; +CREATE TABLE t1 ( + a INT NOT NULL PRIMARY KEY, + b INT NOT NULL, + c INT NOT NULL +) ENGINE=ndbcluster; + +connection server1; + +--disable_result_log +--error 0,1412 +select * from t1; +--enable_result_log +select * from t1; +select * from t1; +select * from t1; +select * from t1; +select * from t1; + +drop table t1; diff --git a/mysql-test/t/ndb_alter_table_stm.test b/mysql-test/t/ndb_alter_table_stm.test index 2c52b542b12cab917990f70ec1a48a2738d222c2..bf162dd0d50e497f498d85f749829c004c27c8ba 100644 --- a/mysql-test/t/ndb_alter_table_stm.test +++ b/mysql-test/t/ndb_alter_table_stm.test @@ -17,6 +17,12 @@ select * from t1 where c = 'two'; connection server1; alter table t1 drop index c; connection server2; + +--disable_result_log +--error 0,1412 +select * from t1 where c = 'two'; +--enable_result_log + select * from t1 where c = 'two'; connection server1; drop table t1; diff --git a/mysql-test/t/ndb_basic.test b/mysql-test/t/ndb_basic.test index df94545abea36739544754489df5baa780142540..ab62e3dd13a9f05407864157c2f159adf9a3c056 100644 --- a/mysql-test/t/ndb_basic.test +++ b/mysql-test/t/ndb_basic.test @@ -6,17 +6,6 @@ DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7; drop database if exists mysqltest; --enable_warnings -# workaround for bug#16445 -# remove to reproduce bug and run tests drom ndb start -# and with ndb_autodiscover disabled -CREATE TABLE t1 ( - pk1 INT NOT NULL PRIMARY KEY, - attr1 INT NOT NULL, - attr2 INT, - attr3 VARCHAR(10) -) ENGINE=ndbcluster; -drop table t1; - # # Basic test to show that the NDB # table handler is working diff --git a/mysql-test/t/ndb_binlog_ddl_multi.test b/mysql-test/t/ndb_binlog_ddl_multi.test index 120117d1e0a2b90ae5fd5b1616e8776199264e76..f41e7c3a527e5bde042b51f0feaf27ed5379da4c 100644 --- a/mysql-test/t/ndb_binlog_ddl_multi.test +++ b/mysql-test/t/ndb_binlog_ddl_multi.test @@ -58,13 +58,19 @@ reset master; ALTER DATABASE mysqltest CHARACTER SET latin1; -# drop table and drop should come after data events ---connection server2 -drop table mysqltest.t1; +# having drop here instead of below sometimes triggers bug#18976 +## drop table and drop should come after data events +#--connection server2 +#drop table mysqltest.t1; --connection server1 --source include/show_binlog_events.inc +# to track down bug#18976 +--real_sleep 10 +--source include/show_binlog_events.inc +--connection server2 +drop table mysqltest.t1; # drop database and drop should come after data events --connection server1 @@ -127,10 +133,16 @@ ENGINE = NDB; DROP LOGFILE GROUP lg1 ENGINE =NDB; -drop table t1; +# having drop here instead of below sometimes triggers bug#18976 +#drop table t1; --connection server2 --source include/show_binlog_events.inc +# to track down bug#18976 +--real_sleep 10 +--source include/show_binlog_events.inc + +drop table t1; # # Bug #17827 cluster: rename of several tables in one statement, diff --git a/mysql-test/t/ndb_blob_partition.test b/mysql-test/t/ndb_blob_partition.test new file mode 100644 index 0000000000000000000000000000000000000000..a3948cc949125ffccd97bf84f061dcc0096a182e --- /dev/null +++ b/mysql-test/t/ndb_blob_partition.test @@ -0,0 +1,93 @@ +--source include/have_ndb.inc +-- source include/not_embedded.inc + +--disable_warnings +drop table if exists t1; +--enable_warnings + +# +# Minimal NDB blobs test with range partitions. +# + +create table t1 ( + a mediumint not null, + b text not null, + c int not null, + d longblob, + primary key using hash (a,c), + unique key (c) +) + engine=ndb + partition by range (c) + partitions 3 + ( partition p1 values less than (200), + partition p2 values less than (300), + partition p3 values less than (400)); + +--disable_query_log +sleep 1; + +# length 61 +set @s0 = 'rggurloniukyehuxdbfkkyzlceixzrehqhvxvxbpwizzvjzpucqmzrhzxzfau'; +set @s1 = 'ykyymbzqgqlcjhlhmyqelfoaaohvtbekvifukdtnvcrrjveevfakxarxexomz'; +set @s2 = 'dbnfqyzgtqxalcrwtfsqabknvtfcbpoonxsjiqvmhnfikxxhcgoexlkoezvah'; + +set @v1 = repeat(@s0, 100); -- 1d42dd9090cf78314a06665d4ea938c35cc760f4 +set @v2 = repeat(@s1, 200); -- 10d3c783026b310218d10b7188da96a2401648c6 +set @v3 = repeat(@s2, 300); -- a33549d9844092289a58ac348dd59f09fc28406a +set @v4 = repeat(@s0, 400); -- daa61c6de36a0526f0d47dc29d6b9de7e6d2630c +set @v5 = repeat(@s1, 500); -- 70fc9a7d08beebc522258bfb02000a30c77a8f1d +set @v6 = repeat(@s2, 600); -- 090565c580809efed3d369481a4bbb168b20713e +set @v7 = repeat(@s0, 700); -- 1e0070bec426871a46291de27b9bd6e4255ab4e5 +set @v8 = repeat(@s1, 800); -- acbaba01bc2e682f015f40e79d9cbe475db3002e +set @v9 = repeat(@s2, 900); -- 9ee30d99162574f79c66ae95cdf132dcf9cbc259 +--enable_query_log + +# -- insert -- +insert into t1 values (1, @v1, 101, @v2); +insert into t1 values (1, @v2, 102, @v3); +insert into t1 values (1, @v3, 103, @v4); +insert into t1 values (2, @v4, 201, @v5); +insert into t1 values (2, @v5, 202, @v6); +insert into t1 values (2, @v6, 203, @v7); +insert into t1 values (3, @v7, 301, @v8); +insert into t1 values (3, @v8, 302, @v9); +insert into t1 values (3, @v9, 303, @v1); +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- pk read -- +select a, sha1(b), c, sha1(d) from t1 where a = 1 and c = 101; +select a, sha1(b), c, sha1(d) from t1 where a = 2 and c = 201; +select a, sha1(b), c, sha1(d) from t1 where a = 3 and c = 301; + +# -- pk update -- +update t1 set b = @v3, d = @v4 where a = 1 and c = 102; +update t1 set b = @v6, d = @v7 where a = 2 and c = 202; +update t1 set b = @v9, d = @v1 where a = 3 and c = 302; +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- hash index update -- +update t1 set b = @v4, d = @v5 where c = 103; +update t1 set b = @v7, d = @v8 where c = 203; +update t1 set b = @v1, d = @v2 where c = 303; +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- full scan update -- +update t1 set b = @v5, d = @v6; +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- range scan update +update t1 set b = @v1, d = @v2 where 100 < c and c < 200; +update t1 set b = @v4, d = @v5 where 200 < c and c < 300; +update t1 set b = @v7, d = @v8 where 300 < c and c < 400; +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- delete -- +delete from t1 where a = 1 and c = 101; +delete from t1 where c = 102; +# delete from t1 where c < 300; # XXX coredump +delete from t1; +select a, sha1(b), c, sha1(d) from t1 order by a; + +# -- clean up -- +drop table t1; diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index a3aa3f6f02542e016f6b7b25372922c45f9e1567..272cdc27af603c4d6c67ed17d9d004920be5b83a 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -956,4 +956,57 @@ PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM); SHOW TABLE STATUS; DROP TABLE t1; +# +#BUG 18750 Problems with partition names +# +create table t1 (a int) +partition by list (a) +(partition `s1 s2` values in (0)); +drop table t1; + +create table t1 (a int) +partition by list (a) +(partition `7` values in (0)); +drop table t1; + +--error ER_WRONG_PARTITION_NAME +create table t1 (a int) +partition by list (a) +(partition `s1 s2 ` values in (0)); + +--error ER_WRONG_PARTITION_NAME +create table t1 (a int) +partition by list (a) +subpartition by hash (a) +(partition p1 values in (0) (subpartition `p1 p2 `)); + +# +# BUG 18752 SHOW CREATE TABLE doesn't show NULL value in SHOW CREATE TABLE +# +CREATE TABLE t1 (a int) +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (NULL)); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--error 1064 +CREATE TABLE t1 (a int) +PARTITION BY RANGE(a) +(PARTITION p0 VALUES LESS THAN (NULL)); + +# +# Bug#18753 Partitions: auto_increment fails +# +create table t1 (s1 int auto_increment primary key) +partition by list (s1) +(partition p1 values in (1), + partition p2 values in (2), + partition p3 values in (3)); +insert into t1 values (null); +insert into t1 values (null); +insert into t1 values (null); +select auto_increment from information_schema.tables where table_name='t1'; +select * from t1; +drop table t1; + --echo End of 5.1 tests diff --git a/mysql-test/t/partition_grant.test b/mysql-test/t/partition_grant.test new file mode 100644 index 0000000000000000000000000000000000000000..e2e80a7ca0439edb7a2baa07e3bcadb18b6c20d8 --- /dev/null +++ b/mysql-test/t/partition_grant.test @@ -0,0 +1,51 @@ +-- source include/have_partition.inc +# Grant tests not performed with embedded server +-- source include/not_embedded.inc + +--disable_warnings +drop schema if exists mysqltest_1; +--enable_warnings + + +# +# Bug #17139: ALTER TABLE ... DROP PARTITION should require DROP privilege +# + +create schema mysqltest_1; +use mysqltest_1; + +create table t1 (a int) partition by list (a) (partition p1 values in (1), partition p2 values in (2), partition p3 values in (3)); +insert into t1 values (1),(2); + +grant select,alter on mysqltest_1.* to mysqltest_1@localhost; + +connect (conn1,localhost,mysqltest_1,,mysqltest_1); +show grants for current_user; +alter table t1 add b int; +--error ER_TABLEACCESS_DENIED_ERROR +alter table t1 drop partition p2; +disconnect conn1; + +connection default; +grant drop on mysqltest_1.* to mysqltest_1@localhost; + +connect (conn2,localhost,mysqltest_1,,mysqltest_1); +alter table t1 drop partition p2; +disconnect conn2; + +connection default; +revoke alter on mysqltest_1.* from mysqltest_1@localhost; + +connect (conn3,localhost,mysqltest_1,,mysqltest_1); +--error ER_TABLEACCESS_DENIED_ERROR +alter table t1 drop partition p3; +disconnect conn3; + +connection default; + +revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost; +drop user mysqltest_1@localhost; +drop table t1; +drop schema mysqltest_1; + +--echo End of 5.1 tests diff --git a/mysql-test/t/partition_hash.test b/mysql-test/t/partition_hash.test index 75a36713694bc093d7b95d53a265a760a649dc4a..8494de9837190d80fa3e58f3d44b6040c4f1badd 100644 --- a/mysql-test/t/partition_hash.test +++ b/mysql-test/t/partition_hash.test @@ -90,3 +90,22 @@ drop table t1; CREATE TABLE t1 (s1 int) ENGINE=BLACKHOLE PARTITION BY HASH (s1); INSERT INTO t1 VALUES (0); DROP TABLE t1; + +# +# BUG 18423 Hash partitioning can lose rows in some queries +# +create table t1 (c1 int DEFAULT NULL, + c2 varchar (30) DEFAULT NULL, + c3 date DEFAULT NULL) +engine = myisam +partition by hash (to_days(c3)) +partitions 12; + +insert into t1 values +(136,'abc','2002-01-05'),(142,'abc','2002-02-14'),(162,'abc','2002-06-28'), +(182,'abc','2002-11-09'),(158,'abc','2002-06-01'),(184,'abc','2002-11-22'); +select * from t1; +select * from t1 where c3 between '2002-01-01' and '2002-12-31'; + +drop table t1; + diff --git a/mysql-test/t/partition_pruning.test b/mysql-test/t/partition_pruning.test index 71fed4f20c9066e17bbcb825b7b17034f5cbc311..0c922392d32151f73252d07977a1068284ff7eb5 100644 --- a/mysql-test/t/partition_pruning.test +++ b/mysql-test/t/partition_pruning.test @@ -554,3 +554,15 @@ drop table t1; # No tests for NULLs in RANGE(monotonic_expr()) - they depend on BUG#15447 # being fixed. + +# +#BUG 17946 Like searches fail with partitioning +# +create table t1 (a char(32) primary key) +partition by key() +partitions 100; +insert into t1 values ('na'); +select * from t1; +select * from t1 where a like 'n%'; +drop table t1; + diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index b54efcad3a3e270b132ff9aea826aa1d5011fd32..9ffdb72ca22fef6268dbb5f80a024fdf48c1d13b 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -114,6 +114,9 @@ set @fvar= 123.4567; prepare stmt1 from @fvar; drop table t1,t2; +deallocate prepare stmt3; +deallocate prepare stmt4; +deallocate prepare stmt5; # # Bug #4105: Server crash on attempt to prepare a statement with character @@ -257,6 +260,7 @@ prepare `ü` from 'select 1234'; execute `ü` ; set names latin1; execute `ü`; +deallocate prepare `ü`; set names default; @@ -823,6 +827,7 @@ EXECUTE b12651; DROP VIEW b12651_V1; DROP TABLE b12651_T1, b12651_T2; +DEALLOCATE PREPARE b12651; # # Bug#9359 "Prepared statements take snapshot of system vars at PREPARE @@ -921,6 +926,143 @@ select length(a) from t1; drop table t1; deallocate prepare stmt; +# +# Bug#16248 "WHERE (col1,col2) IN ((?,?)) gives wrong results": +# check that ROW implementation is reexecution-friendly. +# +create table t1 (col1 integer, col2 integer); +insert into t1 values(100,100),(101,101),(102,102),(103,103); +prepare stmt from 'select col1, col2 from t1 where (col1, col2) in ((?,?))'; +set @a=100, @b=100; +execute stmt using @a,@b; +set @a=101, @b=101; +execute stmt using @a,@b; +set @a=102, @b=102; +execute stmt using @a,@b; +set @a=102, @b=103; +execute stmt using @a,@b; +deallocate prepare stmt; +drop table t1; + +# +# Bug#16365 Prepared Statements: DoS with too many open statements +# Check that the limit @@max_prpeared_stmt_count works. +# +# Save the old value +set @old_max_prepared_stmt_count= @@max_prepared_stmt_count; +# +# Disable prepared statement protocol: in this test we set +# @@max_prepared_stmt_count to 0 or 1 and would like to test the limit +# manually. +# +--disable_ps_protocol +# +# A. Check that the new variables are present in SHOW VARIABLES list. +# +show variables like 'max_prepared_stmt_count'; +show variables like 'prepared_stmt_count'; +# +# B. Check that the new variables are selectable. +# +select @@max_prepared_stmt_count, @@prepared_stmt_count; +# +# C. Check that max_prepared_stmt_count is settable (global only), +# whereas prepared_stmt_count is readonly. +# +set global max_prepared_stmt_count=-1; +select @@max_prepared_stmt_count; +set global max_prepared_stmt_count=10000000000000000; +select @@max_prepared_stmt_count; +set global max_prepared_stmt_count=default; +select @@max_prepared_stmt_count; +--error ER_GLOBAL_VARIABLE +set @@max_prepared_stmt_count=1; +--error ER_GLOBAL_VARIABLE +set max_prepared_stmt_count=1; +--error ER_GLOBAL_VARIABLE +set local max_prepared_stmt_count=1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set local prepared_stmt_count=0; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set @@prepared_stmt_count=0; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global prepared_stmt_count=1; +# set to a reasonable limit works +set global max_prepared_stmt_count=1; +select @@max_prepared_stmt_count; +# +# D. Check that the variables actually work. +# +set global max_prepared_stmt_count=0; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt from "select 1"; +select @@prepared_stmt_count; +set global max_prepared_stmt_count=1; +prepare stmt from "select 1"; +select @@prepared_stmt_count; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt1 from "select 1"; +select @@prepared_stmt_count; +deallocate prepare stmt; +select @@prepared_stmt_count; +# +# E. Check that we can prepare a statement with the same name +# successfully, without hitting the limit. +# +prepare stmt from "select 1"; +select @@prepared_stmt_count; +prepare stmt from "select 2"; +select @@prepared_stmt_count; +# +# F. We can set the max below the current count. In this case no new +# statements should be allowed to prepare. +# +select @@prepared_stmt_count, @@max_prepared_stmt_count; +set global max_prepared_stmt_count=0; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt from "select 1"; +# Result: the old statement is deallocated, the new is not created. +--error 1243 # ER_UNKNOWN_STMT_HANDLER +execute stmt; +select @@prepared_stmt_count; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt from "select 1"; +select @@prepared_stmt_count; +# +# G. Show that the variables are up to date even after a connection with all +# statements in it was terminated. +# +set global max_prepared_stmt_count=3; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +prepare stmt from "select 1"; +connect (con1,localhost,root,,); +connection con1; +prepare stmt from "select 2"; +prepare stmt1 from "select 3"; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt2 from "select 4"; +connection default; +--error ER_MAX_PREPARED_STMT_COUNT_REACHED +prepare stmt2 from "select 4"; +select @@max_prepared_stmt_count, @@prepared_stmt_count; +disconnect con1; +connection default; +# Wait for the connection to die: deal with a possible race +deallocate prepare stmt; +let $count= `select @@prepared_stmt_count`; +if ($count) +{ +--sleep 2 + let $count= `select @@prepared_stmt_count`; +} +select @@max_prepared_stmt_count, @@prepared_stmt_count; +# +# Restore the old value. +# +set global max_prepared_stmt_count= @old_max_prepared_stmt_count; +--enable_ps_protocol + # End of 4.1 tests # @@ -946,6 +1088,7 @@ insert into t1 (a,b) values (2,8),(1,9),(3,7); # Will order by index prepare stmt from "select * from t1 order by ?"; +set @a=NULL; execute stmt using @a; set @a=1; execute stmt using @a; diff --git a/mysql-test/t/rpl_ndb_bank.test b/mysql-test/t/rpl_ndb_bank.test index 102450fce91031a584f87701da62a27e745bd307..3601c841c540bef0c34280b34fdab3aca1b1c476 100644 --- a/mysql-test/t/rpl_ndb_bank.test +++ b/mysql-test/t/rpl_ndb_bank.test @@ -132,34 +132,7 @@ let the_backup_id=`select @the_backup_id`; # # now setup replication to continue from last epoch -# 1. get apply_status epoch from slave -# 2. get corresponding _next_ binlog postition from master -# 3. change master on slave -# 4. start the replication - -# 1. ---connection slave ---replace_column 1 <the_epoch> -SELECT @the_epoch:=MAX(epoch) FROM cluster.apply_status; ---let $the_epoch= `select @the_epoch` - -# 2. ---connection master ---replace_result $the_epoch <the_epoch> ---replace_column 1 <the_pos> -eval SELECT @the_pos:=Position,@the_file:=SUBSTRING_INDEX(FILE, '/', -1) - FROM cluster.binlog_index WHERE epoch > $the_epoch ORDER BY epoch ASC LIMIT 1; ---let $the_pos= `SELECT @the_pos` ---let $the_file= `SELECT @the_file` - -# 3. ---connection slave ---replace_result $the_pos <the_pos> -eval CHANGE MASTER TO - master_log_file = '$the_file', - master_log_pos = $the_pos; - -# 4. +--source include/ndb_setup_slave.inc --connection slave START SLAVE; diff --git a/mysql-test/t/rpl_ndb_basic.test b/mysql-test/t/rpl_ndb_basic.test index bcce02846420036d1a5c87021180bc8e807b6e7b..d7d1d50d88fdbac296083d375b804614a3a86893 100644 --- a/mysql-test/t/rpl_ndb_basic.test +++ b/mysql-test/t/rpl_ndb_basic.test @@ -146,4 +146,4 @@ select * from t1 order by nid; # cleanup --connection master DROP TABLE t1; -sync_slave_with_master; +-- source include/master-slave-end.inc diff --git a/mysql-test/t/rpl_ndb_dd_advance.test b/mysql-test/t/rpl_ndb_dd_advance.test index 97a6dae0decaae6abf31d4e9023a3760e90bc21e..80ff533ec5bd372d8a42f9097b0a15a9918474af 100644 --- a/mysql-test/t/rpl_ndb_dd_advance.test +++ b/mysql-test/t/rpl_ndb_dd_advance.test @@ -479,29 +479,9 @@ while ($j) # 5. start the replication --echo ***** Finsh the slave sync process ******* -# 1. ---echo * 1. * -connection slave; --disable_query_log ---replace_column 1 <the_epoch> -SELECT @the_epoch:=MAX(epoch) FROM cluster.apply_status; ---let $the_epoch= `select @the_epoch` - -# 2. ---echo * 2. * -connection master; ---replace_column 1 <the_pos> -eval SELECT @the_pos:=Position,@the_file:=SUBSTRING_INDEX(FILE, '/', -1) - FROM cluster.binlog_index WHERE epoch > $the_epoch ORDER BY epoch ASC LIMIT 1; ---let $the_pos= `SELECT @the_pos` ---let $the_file= `SELECT @the_file` - -# 3. ---echo * 3. * -connection slave; -eval CHANGE MASTER TO - master_log_file = '$the_file', - master_log_pos = $the_pos; +# 1. 2. 3. +--source include/ndb_setup_slave.inc --enable_query_log # 4. diff --git a/mysql-test/t/rpl_ndb_dd_basic.test b/mysql-test/t/rpl_ndb_dd_basic.test index f515e0299ac1f74abf2ad865361728aa80663c54..104be91e6e4d0c81758d720838e9caf44f038e8c 100644 --- a/mysql-test/t/rpl_ndb_dd_basic.test +++ b/mysql-test/t/rpl_ndb_dd_basic.test @@ -82,4 +82,4 @@ drop datafile 'datafile02.dat' engine=ndb; DROP TABLESPACE ts1 ENGINE=NDB; DROP LOGFILE GROUP lg1 ENGINE=NDB; ---sync_slave_with_master +-- source include/master-slave-end.inc diff --git a/mysql-test/t/rpl_ndb_dd_partitions.test b/mysql-test/t/rpl_ndb_dd_partitions.test new file mode 100644 index 0000000000000000000000000000000000000000..026c31bbdc780b03f069e4c8cc11c1c8a64e0723 --- /dev/null +++ b/mysql-test/t/rpl_ndb_dd_partitions.test @@ -0,0 +1,301 @@ +####################################### +# Author: JBM # +# Date: 2006-03-09 # +# Purpose: To test the replication of # +# Cluster Disk Data using partitions # +####################################### + +--source include/have_ndb.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--echo --- Doing pre test cleanup --- + +connection master; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_query_log + + +# Start by creating a logfile group +################################## + +CREATE LOGFILE GROUP lg1 +ADD UNDOFILE 'undofile.dat' +INITIAL_SIZE 16M +UNDO_BUFFER_SIZE = 1M +ENGINE=NDB; + +ALTER LOGFILE GROUP lg1 +ADD UNDOFILE 'undofile02.dat' +INITIAL_SIZE = 4M +ENGINE=NDB; + +################################################### +# Create a tablespace connected to the logfile group +################################################### + +CREATE TABLESPACE ts1 +ADD DATAFILE 'datafile.dat' +USE LOGFILE GROUP lg1 +INITIAL_SIZE 12M +ENGINE NDB; + +ALTER TABLESPACE ts1 +ADD DATAFILE 'datafile02.dat' +INITIAL_SIZE = 4M +ENGINE=NDB; + +################################################################# + +--echo --- Start test 2 partition RANGE testing -- +--echo --- Do setup -- + + +################################################# +# Requirment: Create table that is partitioned # +# by range on year i.e. year(t) and replicate # +# basice operations such at insert, update # +# delete between 2 different storage engines # +# Alter table and ensure table is handled # +# Correctly on the slave # +################################################# + +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(63), + bc CHAR(63), d DECIMAL(10,4) DEFAULT 0, + f FLOAT DEFAULT 0, total BIGINT UNSIGNED, + y YEAR, t DATE) + TABLESPACE ts1 STORAGE DISK + ENGINE=NDB + PARTITION BY RANGE (YEAR(t)) + (PARTITION p0 VALUES LESS THAN (1901), + PARTITION p1 VALUES LESS THAN (1946), + PARTITION p2 VALUES LESS THAN (1966), + PARTITION p3 VALUES LESS THAN (1986), + PARTITION p4 VALUES LESS THAN (2005), + PARTITION p5 VALUES LESS THAN MAXVALUE); + +--echo --- Show table on master --- + +SHOW CREATE TABLE t1; + +--echo --- Show table on slave -- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- Check that simple Alter statements are replicated correctly --- + +ALTER TABLE t1 MODIFY vc VARCHAR(255); + +--echo --- Show the new improved table on the master --- + +SHOW CREATE TABLE t1; + +--echo --- Make sure that our tables on slave are still same engine --- +--echo --- and that the alter statements replicated correctly --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- +--enable_query_log + +--source include/rpl_multi_engine3.inc + +--echo --- End test 2 partition RANGE testing --- +--echo --- Do Cleanup --- + +DROP TABLE IF EXISTS t1; + +######################################################## + +--echo --- Start test 3 partition LIST testing --- +--echo --- Do setup --- +################################################# + + +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(63), + bc CHAR(63), d DECIMAL(10,4) DEFAULT 0, + f FLOAT DEFAULT 0, total BIGINT UNSIGNED, + y YEAR, t DATE) + TABLESPACE ts1 STORAGE DISK + ENGINE=NDB + PARTITION BY LIST(id) + (PARTITION p0 VALUES IN (2, 4), + PARTITION p1 VALUES IN (42, 142)); + +--echo --- Test 3 Alter to add partition --- + +ALTER TABLE t1 ADD PARTITION (PARTITION p2 VALUES IN (412)); + +--echo --- Show table on master --- + +SHOW CREATE TABLE t1; + +--echo --- Show table on slave --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- Check that simple Alter statements are replicated correctly --- + +ALTER TABLE t1 MODIFY vc VARCHAR(255); + +--echo --- Show the new improved table on the master --- + +SHOW CREATE TABLE t1; + +--echo --- Make sure that our tables on slave are still same engine --- +--echo --- and that the alter statements replicated correctly --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- End test 3 partition LIST testing --- +--echo --- Do Cleanup -- + +DROP TABLE IF EXISTS t1; + +######################################################## + +--echo --- Start test 4 partition HASH testing --- +--echo --- Do setup --- +################################################# + + +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(63), + bc CHAR(63), d DECIMAL(10,4) DEFAULT 0, + f FLOAT DEFAULT 0, total BIGINT UNSIGNED, + y YEAR, t DATE) + TABLESPACE ts1 STORAGE DISK + ENGINE=NDB + PARTITION BY HASH( YEAR(t) ) + PARTITIONS 4; + +--echo --- show that tables have been created correctly --- + +SHOW CREATE TABLE t1; +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- Check that simple Alter statements are replicated correctly --- + +ALTER TABLE t1 MODIFY vc VARCHAR(255); + +--echo --- Show the new improved table on the master --- + +SHOW CREATE TABLE t1; + +--echo --- Make sure that our tables on slave are still same engine --- +--echo --- and that the alter statements replicated correctly --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- End test 4 partition HASH testing --- +--echo --- Do Cleanup -- + +DROP TABLE IF EXISTS t1; + +######################################################## + +--echo --- Start test 5 partition by key testing --- +--echo --- Create Table Section --- + +################################################# + +CREATE TABLE t1 (id MEDIUMINT NOT NULL, b1 BIT(8), vc VARCHAR(63), + bc CHAR(63), d DECIMAL(10,4) DEFAULT 0, + f FLOAT DEFAULT 0, total BIGINT UNSIGNED, + y YEAR, t DATE,PRIMARY KEY(id)) + TABLESPACE ts1 STORAGE DISK + ENGINE=NDB + PARTITION BY KEY() + PARTITIONS 4; + +--echo --- Show that tables on master are ndbcluster tables --- + +SHOW CREATE TABLE t1; + +--echo --- Show that tables on slave --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +# Okay lets see how it holds up to table changes +--echo --- Check that simple Alter statements are replicated correctly --- + +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id, total); + +--echo --- Show the new improved table on the master --- + +SHOW CREATE TABLE t1; + +--echo --- Make sure that our tables on slave are still right type --- +--echo --- and that the alter statements replicated correctly --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- Check that simple Alter statements are replicated correctly --- + +ALTER TABLE t1 MODIFY vc VARCHAR(255); + +--echo --- Show the new improved table on the master --- + +SHOW CREATE TABLE t1; + +--echo --- Make sure that our tables on slave are still same engine --- +--echo --- and that the alter statements replicated correctly --- + +sync_slave_with_master; +SHOW CREATE TABLE t1; + +--echo --- Perform basic operation on master --- +--echo --- and ensure replicated correctly --- + +--source include/rpl_multi_engine3.inc + +--echo --- End test 5 key partition testing --- +--echo --- Do Cleanup --- + +DROP TABLE IF EXISTS t1; + +# End of 5.1 test case diff --git a/mysql-test/t/rpl_ndb_delete_nowhere.test b/mysql-test/t/rpl_ndb_delete_nowhere.test index 7c8c16339cb303fb378792832cce339f246e6d8b..92ceddf7f5c89d2c806eb870be8c769d0badd0b5 100644 --- a/mysql-test/t/rpl_ndb_delete_nowhere.test +++ b/mysql-test/t/rpl_ndb_delete_nowhere.test @@ -3,5 +3,6 @@ # Share test code between engine tests # ######################################### --source include/have_ndb.inc +-- source include/have_binlog_format_row.inc let $engine_type=NDB; -- source extra/rpl_tests/rpl_delete_no_where.test diff --git a/mysql-test/t/rpl_ndb_insert_ignore.test b/mysql-test/t/rpl_ndb_insert_ignore.test index fbebd99a44c645616883dff43ced0edf0e40cdd0..17acb5983f4a5d931c6a43532bdbcee614aeb6f9 100644 --- a/mysql-test/t/rpl_ndb_insert_ignore.test +++ b/mysql-test/t/rpl_ndb_insert_ignore.test @@ -2,6 +2,7 @@ # Wrapper for rpl_insert_ignore.test# ##################################### -- source include/have_ndb.inc +-- source include/have_binlog_format_row.inc let $engine_type=NDB; let $engine_type2=myisam; -- source extra/rpl_tests/rpl_insert_ignore.test diff --git a/mysql-test/t/rpl_ndb_multi_update3.test b/mysql-test/t/rpl_ndb_multi_update3.test index 78f9f0fbc8d7253a79beda535d021b3c9eefdb58..008e2143987d5aca173f78fc56d8b249862caa34 100644 --- a/mysql-test/t/rpl_ndb_multi_update3.test +++ b/mysql-test/t/rpl_ndb_multi_update3.test @@ -3,5 +3,6 @@ # to reuse test code between engine runs # ############################################################ -- source include/have_ndb.inc +-- source include/have_binlog_format_row.inc let $engine_type=NDB; -- source extra/rpl_tests/rpl_multi_update3.test diff --git a/mysql-test/t/rpl_ndb_relay_space.test b/mysql-test/t/rpl_ndb_relay_space.test deleted file mode 100644 index 0484d8079961f4a2cdd68032954fdc8235c32a8a..0000000000000000000000000000000000000000 --- a/mysql-test/t/rpl_ndb_relay_space.test +++ /dev/null @@ -1,21 +0,0 @@ -################################### -# Wrapper rpl_sv_relay_space.test # -# This test has to be wrapped as # -# It tests ndb, innodb and MyISAM.# -# By Wrapping we are saving some # -# space and making the test more # -# Maintainable by only having one # -# test file and reusing the code # -# In Addition, INNODB has to have # -# Option files during this test # -# to force innodb on the slave # -# else the test will fail # -################################### -#Change Author: JBM # -#Change Date: 2006-02-03 # -#Change: Added Comments # -################################### ---source include/have_ndb.inc -let $engine_type=NDB; --- source extra/rpl_tests/rpl_sv_relay_space.test - diff --git a/mysql-test/t/rpl_ndb_sync.test b/mysql-test/t/rpl_ndb_sync.test index d56f4a4ad03738c5fed690573c3d5b50b1675d5b..95f56609ed70694b7cca5e7909d18fbb253106dd 100644 --- a/mysql-test/t/rpl_ndb_sync.test +++ b/mysql-test/t/rpl_ndb_sync.test @@ -8,13 +8,13 @@ # # stop the save -connection slave; +--connection slave STOP SLAVE; CREATE DATABASE ndbsynctest; USE ndbsynctest; # get some data on the master -connection master; +--connection master CREATE DATABASE ndbsynctest; USE ndbsynctest; CREATE TABLE t1 (c1 BIT(1) NOT NULL, c2 BIT(1) NOT NULL, c3 CHAR(15), PRIMARY KEY(c3)) ENGINE = NDB ; @@ -25,21 +25,14 @@ SELECT hex(c1),hex(c2),c3 FROM t1 ORDER BY c3; SELECT hex(c2),hex(c3),c1 FROM t2 ORDER BY c1; # take a backup on master ---exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "start backup" >> $NDB_TOOLS_OUTPUT ---exec $NDB_TOOLS_DIR/ndb_select_all --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 | grep 520093696 > $MYSQLTEST_VARDIR/tmp.dat -CREATE TEMPORARY TABLE IF NOT EXISTS cluster.backup_info (id INT, backup_id INT)ENGINE=HEAP; -DELETE FROM cluster.backup_info; -LOAD DATA INFILE '../tmp.dat' INTO TABLE cluster.backup_info FIELDS TERMINATED BY ','; ---replace_column 1 <the_backup_id> -SELECT @the_backup_id:=backup_id FROM cluster.backup_info; -let the_backup_id=`select @the_backup_id` ; -DROP TABLE cluster.backup_info; +--source include/ndb_backup.inc + # update a row UPDATE t1 SET c2=0 WHERE c3="row2"; SELECT hex(c1),hex(c2),c3 FROM t1 ORDER BY c3; # restore on slave, first check that nothing is there -connection slave +--connection slave # we should have no tables SHOW TABLES; @@ -66,40 +59,16 @@ SELECT hex(c2),hex(c3),c1 FROM t2 ORDER BY c1; # # now setup replication to continue from last epoch -# 1. get apply_status epoch from slave -# 2. get corresponding _next_ binlog postition from master -# 3. change master on slave - -# 1. -connection slave; ---replace_column 1 <the_epoch> -SELECT @the_epoch:=MAX(epoch) FROM cluster.apply_status; -let $the_epoch= `select @the_epoch` ; - -# 2. -connection master; ---replace_result $the_epoch <the_epoch> ---replace_column 1 <the_pos> -eval SELECT @the_pos:=Position,@the_file:=SUBSTRING_INDEX(FILE, '/', -1) - FROM cluster.binlog_index WHERE epoch > $the_epoch ORDER BY epoch ASC LIMIT 1; -let $the_pos= `SELECT @the_pos` ; -let $the_file= `SELECT @the_file` ; - -# 3. -connection slave; ---replace_result $the_pos <the_pos> -eval CHANGE MASTER TO - master_log_file = '$the_file', - master_log_pos = $the_pos ; +--source include/ndb_setup_slave.inc +--connection slave START SLAVE; # # # -connection master; -#sync_slave_with_master; ---sleep 2 -connection slave; +--connection master +--sync_slave_with_master +--connection slave --replace_result $MASTER_MYPORT MASTER_PORT --replace_column 1 <Slave_IO_State> 7 <Read_Master_Log_Pos> 8 <Relay_Log_File> 9 <Relay_Log_Pos> 16 <Replicate_Ignore_Table> 22 <Exec_Master_Log_Pos> 23 <Relay_Log_Space> 33 <Seconds_Behind_Master> SHOW SLAVE STATUS; @@ -111,22 +80,21 @@ SELECT hex(c2),hex(c3),c1 FROM t2 ORDER BY c1; # Cleanup # -connection master; +--connection master DROP DATABASE ndbsynctest; -#sync_slave_with_master; ---sleep 2 -connection slave; +--sync_slave_with_master +--connection slave STOP SLAVE; # # Test some replication commands # -connection master; +--connection master reset master; # should now contain nothing select * from cluster.binlog_index; -connection slave; +--connection slave reset slave; # should now contain nothing select * from cluster.apply_status; diff --git a/mysql-test/t/rpl_row_basic_8partition.test b/mysql-test/t/rpl_row_basic_8partition.test index 0e2518817fa598e08ee51d30bef08ef3a5b46436..8cad2226d4a4a36b18fbfa16112d9fbd11b53938 100644 --- a/mysql-test/t/rpl_row_basic_8partition.test +++ b/mysql-test/t/rpl_row_basic_8partition.test @@ -7,6 +7,7 @@ # partition tables with same engine (MyISAM) in both ends. # ############################################################ +--source include/have_partition.inc --source include/master-slave.inc connection master; --disable_warnings diff --git a/mysql-test/t/rpl_temporary.test b/mysql-test/t/rpl_temporary.test index 9c6056f9217c5c4a00d6d6814ab4b18c979fbea0..7269b54556b54e71c145e4a39cdab8bc1df0fe25 100644 --- a/mysql-test/t/rpl_temporary.test +++ b/mysql-test/t/rpl_temporary.test @@ -131,4 +131,30 @@ drop table t1,t2; create temporary table t3 (f int); sync_with_master; +# +# Bug#17284 erroneous temp table cleanup on slave +# + +connection master; +create temporary table t4 (f int); +create table t5 (f int); +sync_with_master; +# find dumper's $id +source include/get_binlog_dump_thread_id.inc; +insert into t4 values (1); +# a hint how to do that in 5.1 +--replace_result $id "`select id from information_schema.processlist where command='Binlog Dump'`" +eval kill $id; # to stimulate reconnection by slave w/o timeout +insert into t5 select * from t4; +save_master_pos; + +connection slave; +sync_with_master; +select * from t5 /* must be 1 after reconnection */; + +connection master; +drop temporary table t4; +drop table t5; + # The server will now close done +# End of 5.1 tests diff --git a/mysql-test/t/type_bit.test b/mysql-test/t/type_bit.test index 1f05a9574d67ef1462b25bcb3d856ba9c5af3239..e028dbc51d9fdbfb729fb5804a8b2c061797187e 100644 --- a/mysql-test/t/type_bit.test +++ b/mysql-test/t/type_bit.test @@ -227,3 +227,15 @@ select sum(a1), b1+0, b2+0 from t1 join t2 on b1 = b2 group by b1 order by 1; select 1 from t1 join t2 on b1 = b2 group by b1 order by 1; select b1+0,sum(b1), sum(b2) from t1 join t2 on b1 = b2 group by b1 order by 1; drop table t1, t2; + +# +# Bug #13601: Wrong field length reported for BIT fields +# +create table t1 (a bit(7)); +insert into t1 values (0x60); +--enable_metadata +select * from t1; +--disable_metadata +drop table t1; + +--echo End of 5.0 tests diff --git a/mysql-test/t/type_bit_innodb.test b/mysql-test/t/type_bit_innodb.test index ec433f40a88b8698d5d89d65bf615f077ea2f8df..dbca69d67f01f3a4e228e79d6ea99fddad091fff 100644 --- a/mysql-test/t/type_bit_innodb.test +++ b/mysql-test/t/type_bit_innodb.test @@ -133,3 +133,15 @@ show create table t1; alter table t1 engine=innodb; show create table t1; drop table t1; + +# +# Bug #13601: Wrong field length reported for BIT fields +# +create table t1 (a bit(7)) engine=innodb; +insert into t1 values (0x60); +--enable_metadata +select * from t1; +--disable_metadata +drop table t1; + +--echo End of 5.0 tests diff --git a/mysql-test/t/upgrade.test b/mysql-test/t/upgrade.test index f2017d81d5c2f26b860d707bda5f8b0a2323f93c..5c5046cf7e98a6d6830438c24e1fa608cd8bf6ae 100644 --- a/mysql-test/t/upgrade.test +++ b/mysql-test/t/upgrade.test @@ -34,16 +34,16 @@ drop database `mysqltest-1`; # Bug#17142: Crash if create with encoded name # --disable_warnings -drop table if exists `txu@0023P@0023p1`; -drop table if exists `txu#P#p1`; +drop table if exists `txu@0023p@0023p1`; +drop table if exists `txu#p#p1`; --enable_warnings -create table `txu#P#p1` (s1 int); -insert into `txu#P#p1` values (1); +create table `txu#p#p1` (s1 int); +insert into `txu#p#p1` values (1); --error 1146 -select * from `txu@0023P@0023p1`; -create table `txu@0023P@0023p1` (s1 int); -insert into `txu@0023P@0023p1` values (2); -select * from `txu@0023P@0023p1`; -select * from `txu#P#p1`; -drop table `txu@0023P@0023p1`; -drop table `txu#P#p1`; +select * from `txu@0023p@0023p1`; +create table `txu@0023p@0023p1` (s1 int); +insert into `txu@0023p@0023p1` values (2); +select * from `txu@0023p@0023p1`; +select * from `txu#p#p1`; +drop table `txu@0023p@0023p1`; +drop table `txu#p#p1`; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index fd9589a6f59e5b8600c30bf9c865ab9492079f11..82f053fb2231bf3ca2720c574fa6f534919ce9ca 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -2439,3 +2439,23 @@ SELECT COUNT(*) FROM t1 LEFT JOIN v2 ON t1.id=v2.id; DROP VIEW v2; DROP TABLE t1, t2; + +# +# Bug #16069: VIEW does return the same results as underlying SELECT +# with WHERE condition containing BETWEEN over dates + +CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, + td date DEFAULT NULL, KEY idx(td)); + +INSERT INTO t1 VALUES + (1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'), + (4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'), + (7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06'); + +CREATE VIEW v1 AS SELECT * FROM t1; + +SELECT * FROM t1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; +SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; + +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test index af3ec2d827e7a929df770b89ae12bd101f0e3773..8a12dbca51d9f20749c6157b8df6364923f0acd8 100644 --- a/mysql-test/t/xml.test +++ b/mysql-test/t/xml.test @@ -192,6 +192,20 @@ select extractValue(@xml, '/a/@b[substring(.,1,1)="2"]'); select extractValue(@xml, '/a/@b[substring(.,2,1)="1"]'); select extractValue(@xml, '/a/@b[substring(.,2,1)="2"]'); +# +# Bug#16319: XML: extractvalue() returns syntax errors for some functions +# +SET @xml='<a><b>b1</b><b>b2</b></a>'; +SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); +SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); +SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); +SELECT extractValue(@xml, '/a/b[string-length("x")]'); +SELECT extractValue(@xml, '/a/b[string-length("xx")]'); +SELECT extractValue(@xml, '/a/b[string-length()]'); +--error 1105 +SELECT extractValue(@xml, 'string-length()'); +SELECT extractValue(@xml, 'string-length("x")'); + SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); select extractValue(@xml,'/a/@b[contains(.,"1")]'); @@ -278,6 +292,12 @@ select extractvalue('<a>Jack</a>','/a[contains(../a,"j")]'); select extractvalue('<a>Jack</a>','/a[contains(../a,"j")]' collate latin1_bin); select extractvalue('<a>Jack</a>' collate latin1_bin,'/a[contains(../a,"j")]'); +# +# Bug#18285: ExtractValue not returning character +# data within <![CDATA[]]> as expected +# +select ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1'); + # # Bug #18171 XML: ExtractValue: the XPath position() # function crashes the server! @@ -295,3 +315,23 @@ select extractValue('<e>1</e>','last()'); --error 1105 select extractValue('<e><a>1</a></e>','/e/'); +# +# Bug#16233: XML: ExtractValue() fails with special characters +# +set names utf8; +select extractValue('<Ñ><r>r</r></Ñ>','/Ñ/r'); +select extractValue('<r><Ñ>Ñ</Ñ></r>','/r/Ñ'); +select extractValue('<Ñ r="r"/>','/Ñ/@r'); +select extractValue('<r Ñ="Ñ"/>','/r/@Ñ'); +--disable_warnings +DROP PROCEDURE IF EXISTS p2; +--enable_warnings +DELIMITER //; +CREATE PROCEDURE p2 () +BEGIN + DECLARE p LONGTEXT CHARACTER SET UTF8 DEFAULT '<Ñ><r>A</r></Ñ>'; + SELECT EXTRACTVALUE(p,'/Ñ/r'); +END// +DELIMITER ;// +CALL p2(); +DROP PROCEDURE p2; diff --git a/mysys/Makefile.am b/mysys/Makefile.am index 51ea249bbf619e68393b72e8222e1a1b6ef4dfe5..7a66164b775ed2d9d7557e82c3b053387cb3d618 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -22,10 +22,7 @@ INCLUDES = @ZLIB_INCLUDES@ -I$(top_builddir)/include \ pkglib_LIBRARIES = libmysys.a LDADD = libmysys.a ../dbug/libdbug.a \ ../strings/libmystrings.a -noinst_HEADERS = mysys_priv.h my_static.h \ - my_os2cond.c my_os2dirsrch.c my_os2dirsrch.h \ - my_os2dlfcn.c my_os2file64.c my_os2mutex.c \ - my_os2thread.c my_os2tls.c +noinst_HEADERS = mysys_priv.h my_static.h libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \ mf_path.c mf_loadpath.c my_file.c \ my_open.c my_create.c my_dup.c my_seek.c my_read.c \ @@ -73,6 +70,7 @@ DEFS = -DDEFAULT_BASEDIR=\"$(prefix)\" \ -DSHAREDIR="\"$(MYSQLSHAREdir)\"" \ -DDEFAULT_HOME_ENV=MYSQL_HOME \ -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX \ + -DDEFAULT_SYSCONFDIR="\"$(sysconfdir)\"" \ @DEFS@ libmysys_a_DEPENDENCIES= @THREAD_LOBJECTS@ diff --git a/mysys/default.c b/mysys/default.c index edd02402a2a46c7a194d4cb0aa4607227f64f206..580bcc19eca8e545809ed5f484f35d7e82fb93ab 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -48,7 +48,7 @@ char *defaults_extra_file=0; /* Which directories are searched for options (and in which order) */ -#define MAX_DEFAULT_DIRS 6 +#define MAX_DEFAULT_DIRS 7 const char *default_directories[MAX_DEFAULT_DIRS + 1]; #ifdef __WIN__ @@ -601,7 +601,7 @@ static int search_default_file_with_ext(Process_option_func opt_handler, strmov(name,config_file); } fn_format(name,name,"","",4); -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) { MY_STAT stat_info; if (!my_stat(name,&stat_info,MYF(0))) @@ -959,11 +959,13 @@ static uint my_get_system_windows_directory(char *buffer, uint size) 4. getenv(DEFAULT_HOME_ENV) 5. Directory above where the executable is located 6. "" + 7. --sysconfdir=<path> On Novell NetWare, this is: 1. sys:/etc/ 2. getenv(DEFAULT_HOME_ENV) 3. "" + 4. --sysconfdir=<path> On OS/2, this is: 1. getenv(ETC) @@ -971,12 +973,14 @@ static uint my_get_system_windows_directory(char *buffer, uint size) 3. getenv(DEFAULT_HOME_ENV) 4. "" 5. "~/" + 6. --sysconfdir=<path> Everywhere else, this is: 1. /etc/ 2. getenv(DEFAULT_HOME_ENV) 3. "" 4. "~/" + 5. --sysconfdir=<path> */ @@ -997,10 +1001,6 @@ static void init_default_directories() #elif defined(__NETWARE__) *ptr++= "sys:/etc/"; #else -#if defined(__EMX__) || defined(OS2) - if ((env= getenv("ETC"))) - *ptr++= env; -#endif *ptr++= "/etc/"; #endif if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV)))) @@ -1040,6 +1040,10 @@ static void init_default_directories() } *ptr++= (char *)&config_dir; } +#endif +#ifdef DEFAULT_SYSCONFDIR + if (DEFAULT_SYSCONFDIR != "") + *ptr++= DEFAULT_SYSCONFDIR; #endif *ptr= 0; /* end marker */ } diff --git a/mysys/mf_path.c b/mysys/mf_path.c index 1ecd5fbb2b121c9395aeb7611d316b6b60efc3da..cdaee74dd2c828b5fb3b648170906a52d6ded6fb 100644 --- a/mysys/mf_path.c +++ b/mysys/mf_path.c @@ -73,7 +73,7 @@ my_string my_path(my_string to, const char *progname, /* test if file without filename is found in path */ /* Returns to if found and to has dirpart if found, else NullS */ -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) +#if defined(MSDOS) || defined(__WIN__) #define F_OK 0 #define PATH_SEP ';' #define PROGRAM_EXTENSION ".exe" diff --git a/mysys/mf_tempdir.c b/mysys/mf_tempdir.c index e79980ab931ddeabb21164c8fc9d360fb6bb8806..d12b73a2ca2ad3ded3dd003ee9485fef16931370 100644 --- a/mysys/mf_tempdir.c +++ b/mysys/mf_tempdir.c @@ -17,7 +17,7 @@ #include "mysys_priv.h" #include <m_string.h> -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) #define DELIM ';' #else #define DELIM ':' @@ -38,7 +38,7 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) { /* Get default temporary directory */ pathlist=getenv("TMPDIR"); /* Use this if possible */ -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) if (!pathlist) pathlist=getenv("TEMP"); if (!pathlist) diff --git a/mysys/mf_tempfile.c b/mysys/mf_tempfile.c index a15bda4da6d74689bc64833a5f2b4a5a99c11fba..b079b9ec8e31385f0e736dee42755b6a7b16575a 100644 --- a/mysys/mf_tempfile.c +++ b/mysys/mf_tempfile.c @@ -24,7 +24,7 @@ #endif #ifdef HAVE_TEMPNAM -#if !defined(MSDOS) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(MSDOS) && !defined(__NETWARE__) extern char **environ; #endif #endif @@ -121,16 +121,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix, to[1]= 0; dir=to; } -#ifdef OS2 - /* changing environ variable doesn't work with VACPP */ - char buffer[256], *end; - buffer[sizeof(buffer)-1]= 0; - end= strxnmov(buffer, sizeof(buffer)-1, (char*) "TMP=", dir, NullS); - /* remove ending backslash */ - if (end[-1] == '\\') - end[-1]= 0; - putenv(buffer); -#elif !defined(__NETWARE__) +#if !defined(__NETWARE__) old_env= (char**) environ; if (dir) { /* Don't use TMPDIR if dir is given */ @@ -152,7 +143,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix, { DBUG_PRINT("error",("Got error: %d from tempnam",errno)); } -#if !defined(OS2) && !defined(__NETWARE__) +#if !defined(__NETWARE__) environ=(const char**) old_env; #endif } diff --git a/mysys/my_access.c b/mysys/my_access.c index 99e7a28914d857b1cb691c80619c5a3082a496e2..871de8de0b8f90479358bb9a306635762092a95f 100644 --- a/mysys/my_access.c +++ b/mysys/my_access.c @@ -54,24 +54,111 @@ int my_access(const char *path, int amode) #endif /* __WIN__ */ -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) /* List of file names that causes problem on windows NOTE that one can also not have file names of type CON.TXT + + NOTE: it is important to keep "CLOCK$" on the first place, + we skip it in check_if_legal_tablename. */ - static const char *reserved_names[]= { - "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", - "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", - "LPT7", "LPT8", "LPT9", "CLOCK$", + "CLOCK$", + "CON", "PRN", "AUX", "NUL", + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", NullS }; #define MAX_RESERVED_NAME_LENGTH 6 + +/* + Looks up a null-terminated string in a list, + case insensitively. + + SYNOPSIS + str_list_find() + list list of items + str item to find + + RETURN + 0 ok + 1 reserved file name +*/ +static int str_list_find(const char **list, const char *str) +{ + const char **name; + for (name= list; *name; name++) + { + if (!my_strcasecmp(&my_charset_latin1, *name, str)) + return 1; + } + return 0; +} + + +/* + A map for faster reserved_names lookup, + helps to avoid loops in many cases. + 1 - can be the first letter + 2 - can be the second letter + 4 - can be the third letter +*/ +static char reserved_map[256]= +{ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* !"#$%&'()*+,-./ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0123456789:;<=>? */ + 0,1,0,1,0,0,0,0,0,0,0,0,7,4,5,2, /* @ABCDEFGHIJKLMNO */ + 3,0,2,0,4,2,0,0,4,0,0,0,0,0,0,0, /* PQRSTUVWXYZ[\]^_ */ + 0,1,0,1,0,0,0,0,0,0,0,0,7,4,5,2, /* bcdefghijklmno */ + 3,0,2,0,4,2,0,0,4,0,0,0,0,0,0,0, /* pqrstuvwxyz{|}~. */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* ................ */ +}; + + +/* + Check if a table name may cause problems + + SYNOPSIS + check_if_legal_tablename + name Table name (without any extensions) + + DESCRIPTION + We don't check 'CLOCK$' because dollar sign is encoded as @0024, + making table file name 'CLOCK@0024', which is safe. + This is why we start lookup from the second element + (i.e. &reserver_name[1]) + + RETURN + 0 ok + 1 reserved file name +*/ + +int check_if_legal_tablename(const char *name) +{ + DBUG_ENTER("check_if_legal_tablename"); + DBUG_RETURN((reserved_map[(uchar) name[0]] & 1) && + (reserved_map[(uchar) name[1]] & 2) && + (reserved_map[(uchar) name[2]] & 4) && + str_list_find(&reserved_names[1], name)); +} + + +#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) + + /* Check if a path will access a reserverd file name that may cause problems @@ -111,12 +198,5 @@ int check_if_legal_filename(const char *path) } DBUG_RETURN(0); } -#endif - -#ifdef OS2 -int check_if_legal_filename(const char *path) -{ - return 0; -} -#endif /* OS2 */ +#endif /* defined(MSDOS) || defined(__WIN__) || defined(__EMX__) */ diff --git a/mysys/my_clock.c b/mysys/my_clock.c index a192bde056dc4aa695e288716722a845de5b95f5..384239bb2b27a7fe41867a23ab351383de236059 100644 --- a/mysys/my_clock.c +++ b/mysys/my_clock.c @@ -17,14 +17,14 @@ #define USES_TYPES #include "my_global.h" -#if !defined(_MSC_VER) && !defined(__BORLANDC__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(_MSC_VER) && !defined(__BORLANDC__) && !defined(__NETWARE__) #include "mysys_priv.h" #include <sys/times.h> #endif long my_clock(void) { -#if !defined(MSDOS) && !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(MSDOS) && !defined(__WIN__) && !defined(__NETWARE__) struct tms tmsbuf; VOID(times(&tmsbuf)); return (tmsbuf.tms_utime + tmsbuf.tms_stime); diff --git a/mysys/my_copy.c b/mysys/my_copy.c index 2fb022a25f2af5651a983d0bc7a0677321d720ef..342b1cdc10490492126682b869a2e4f1a468d76b 100644 --- a/mysys/my_copy.c +++ b/mysys/my_copy.c @@ -95,7 +95,7 @@ int my_copy(const char *from, const char *to, myf MyFlags) if (MyFlags & MY_HOLD_ORIGINAL_MODES && !new_file_stat) DBUG_RETURN(0); /* File copyed but not stat */ VOID(chmod(to, stat_buff.st_mode & 07777)); /* Copy modes */ -#if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(MSDOS) && !defined(__WIN__) && !defined(__NETWARE__) VOID(chown(to, stat_buff.st_uid,stat_buff.st_gid)); /* Copy ownership */ #endif #if !defined(VMS) && !defined(__ZTC__) diff --git a/mysys/my_create.c b/mysys/my_create.c index a85417c77015412abc20099fc9b373b316acfc12..d42e7e0db69568490be331ef6fe3214297b90ab0 100644 --- a/mysys/my_create.c +++ b/mysys/my_create.c @@ -19,7 +19,7 @@ #include <my_dir.h> #include "mysys_err.h" #include <errno.h> -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) +#if defined(MSDOS) || defined(__WIN__) #include <share.h> #endif @@ -41,13 +41,13 @@ File my_create(const char *FileName, int CreateFlags, int access_flags, DBUG_PRINT("my",("Name: '%s' CreateFlags: %d AccessFlags: %d MyFlags: %d", FileName, CreateFlags, access_flags, MyFlags)); -#if !defined(NO_OPEN_3) && !defined(__EMX__) +#if !defined(NO_OPEN_3) fd = open((my_string) FileName, access_flags | O_CREAT, CreateFlags ? CreateFlags : my_umask); #elif defined(VMS) fd = open((my_string) FileName, access_flags | O_CREAT, 0, "ctx=stm","ctx=bin"); -#elif defined(MSDOS) || defined(__EMX__) || defined(OS2) +#elif defined(MSDOS) if (access_flags & O_SHARE) fd = sopen((my_string) FileName, access_flags | O_CREAT | O_BINARY, SH_DENYNO, MY_S_IREAD | MY_S_IWRITE); diff --git a/mysys/my_dup.c b/mysys/my_dup.c index 4b7434e29ea12cd9ffa250a916ad9f1cc5e62447..f4c420eb45954a840f906d5a422880c5cb904d01 100644 --- a/mysys/my_dup.c +++ b/mysys/my_dup.c @@ -19,7 +19,7 @@ #include "mysys_err.h" #include <my_dir.h> #include <errno.h> -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) +#if defined(MSDOS) || defined(__WIN__) #include <share.h> #endif diff --git a/mysys/my_file.c b/mysys/my_file.c index 6a9d39cf94460a5a5aa7900c7799abbf6c203dff..4c333c7d7db4c04b3cf057be02a92d658af19d3a 100644 --- a/mysys/my_file.c +++ b/mysys/my_file.c @@ -33,7 +33,7 @@ May be more or less than max_file_limit! */ -#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) && !defined(HAVE_mit_thread) +#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) #ifndef RLIM_INFINITY #define RLIM_INFINITY ((uint) 0xffffffff) @@ -72,25 +72,6 @@ static uint set_max_open_files(uint max_file_limit) DBUG_RETURN(max_file_limit); } -#elif defined (OS2) - -static uint set_max_open_files(uint max_file_limit) -{ - LONG cbReqCount; - ULONG cbCurMaxFH0; - APIRET ulrc; - DBUG_ENTER("set_max_open_files"); - - /* get current limit */ - cbReqCount = 0; - DosSetRelMaxFH( &cbReqCount, &cbCurMaxFH0); - - /* set new limit */ - if ((cbReqCount = max_file_limit - cbCurMaxFH0) > 0) - ulrc = DosSetRelMaxFH( &cbReqCount, &cbCurMaxFH); - DBUG_RETURN(cbCurMaxFH0); -} - #else static int set_max_open_files(uint max_file_limit) { diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 5663ceaa60e171cfd93d6539a9b7fd8cba452d90..765c30bc2818672b353c44016bf7728de7221a82 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -26,14 +26,6 @@ #include <m_ctype.h> #include <dos.h> #include <direct.h> -#endif -#if defined(OS2) -#include <direct.h> -#endif - -#ifdef __EMX__ -/* chdir2 support also drive change */ -#define chdir _chdir2 #endif /* Gets current working directory in buff. Directory is allways ended @@ -95,14 +87,14 @@ int my_setwd(const char *dir, myf MyFlags) int res; size_s length; my_string start,pos; -#if defined(VMS) || defined(MSDOS) || defined(OS2) +#if defined(VMS) || defined(MSDOS) char buff[FN_REFLEN]; #endif DBUG_ENTER("my_setwd"); DBUG_PRINT("my",("dir: '%s' MyFlags %d", dir, MyFlags)); start=(my_string) dir; -#if defined(MSDOS) || defined(OS2) /* OS2/MSDOS chdir can't change drive */ +#if defined(MSDOS) /* MSDOS chdir can't change drive */ #if !defined(_DDL) && !defined(WIN32) if ((pos=(char*) strchr(dir,FN_DEVCHAR)) != 0) { @@ -113,13 +105,8 @@ int my_setwd(const char *dir, myf MyFlags) drives= (uint) -1; if ((pos-(byte*) dir) == 2 && drive > 0 && drive < 32) { -#ifdef OS2 - _chdrive(drive); - drives = _getdrive(); -#else _dos_setdrive(drive,&drives); _dos_getdrive(&drives); -#endif } if (drive != drives) { diff --git a/mysys/my_init.c b/mysys/my_init.c index 31757cd5df0e0aeb726c32acc194b30d4eb070ca..88b8e457bd65a31c138f8d3c6228a0aa2cd39d6f 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -87,13 +87,10 @@ my_bool my_init(void) #endif if (my_thread_global_init()) return 1; -#if !defined( __WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined( __WIN__) && !defined(__NETWARE__) sigfillset(&my_signals); /* signals blocked by mf_brkhant */ #endif #endif /* THREAD */ -#ifdef UNIXWARE_7 - (void) isatty(0); /* Go around connect() bug in UW7 */ -#endif { DBUG_ENTER("my_init"); DBUG_PROCESS((char*) (my_progname ? my_progname : "unknown")); diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 522fa56cbf144a4316eff061adbdc5652f7cfec8..e96286a94a805b54bd4bc68dc693442700422c50 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -26,9 +26,7 @@ # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else -#ifndef OS2 # define dirent direct -#endif # define NAMLEN(dirent) (dirent)->d_namlen # if defined(HAVE_SYS_NDIR_H) # include <sys/ndir.h> @@ -52,10 +50,6 @@ #include <descrip.h> #endif -#ifdef OS2 -#include "my_os2dirsrch.h" -#endif - #if defined(THREAD) && defined(HAVE_READDIR_R) #define READDIR(A,B,C) ((errno=readdir_r(A,B,&C)) != 0 || !C) #else @@ -384,11 +378,10 @@ MY_DIR *my_dir(const char *path, myf MyFlags) DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags)); /* Put LIB-CHAR as last path-character if not there */ - tmp_file=tmp_path; if (!*path) *tmp_file++ ='.'; /* From current dir */ - tmp_file= strmov(tmp_file,path); + tmp_file= strnmov(tmp_file, path, FN_REFLEN-5); if (tmp_file[-1] == FN_DEVCHAR) *tmp_file++= '.'; /* From current dev-dir */ if (tmp_file[-1] != FN_LIBCHAR) @@ -424,7 +417,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags) if ((handle=_findfirst(tmp_path,&find)) == -1L) #endif { - DBUG_PRINT("info", ("find_first returned error")); + DBUG_PRINT("info", ("findfirst returned error, errno: %d", errno)); if (errno != EINVAL) goto error; /* @@ -433,72 +426,76 @@ MY_DIR *my_dir(const char *path, myf MyFlags) continue and return zero files in dir */ } - - do + else { + + do + { #ifdef __BORLANDC__ - attrib= find.ff_attrib; + attrib= find.ff_attrib; #else - attrib= find.attrib; - /* - Do not show hidden and system files which Windows sometimes create. - Note. Because Borland's findfirst() is called with the third - argument = 0 hidden/system files are excluded from the search. - */ - if (attrib & (_A_HIDDEN | _A_SYSTEM)) - continue; -#endif + attrib= find.attrib; + /* + Do not show hidden and system files which Windows sometimes create. + Note. Because Borland's findfirst() is called with the third + argument = 0 hidden/system files are excluded from the search. + */ + if (attrib & (_A_HIDDEN | _A_SYSTEM)) + continue; +#endif #ifdef __BORLANDC__ - if (!(finfo.name= strdup_root(names_storage, find.ff_name))) - goto error; + if (!(finfo.name= strdup_root(names_storage, find.ff_name))) + goto error; #else - if (!(finfo.name= strdup_root(names_storage, find.name))) - goto error; -#endif - if (MyFlags & MY_WANT_STAT) - { - if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, - sizeof(MY_STAT)))) + if (!(finfo.name= strdup_root(names_storage, find.name))) goto error; - - bzero(finfo.mystat, sizeof(MY_STAT)); +#endif + if (MyFlags & MY_WANT_STAT) + { + if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, + sizeof(MY_STAT)))) + goto error; + + bzero(finfo.mystat, sizeof(MY_STAT)); #ifdef __BORLANDC__ - finfo.mystat->st_size=find.ff_fsize; + finfo.mystat->st_size=find.ff_fsize; #else - finfo.mystat->st_size=find.size; + finfo.mystat->st_size=find.size; #endif - mode=MY_S_IREAD; - if (!(attrib & _A_RDONLY)) - mode|=MY_S_IWRITE; - if (attrib & _A_SUBDIR) - mode|=MY_S_IFDIR; - finfo.mystat->st_mode=mode; + mode= MY_S_IREAD; + if (!(attrib & _A_RDONLY)) + mode|= MY_S_IWRITE; + if (attrib & _A_SUBDIR) + mode|= MY_S_IFDIR; + finfo.mystat->st_mode= mode; #ifdef __BORLANDC__ - finfo.mystat->st_mtime=((uint32) find.ff_ftime); + finfo.mystat->st_mtime= ((uint32) find.ff_ftime); #else - finfo.mystat->st_mtime=((uint32) find.time_write); + finfo.mystat->st_mtime= ((uint32) find.time_write); #endif - } - else - finfo.mystat= NULL; + } + else + finfo.mystat= NULL; - if (push_dynamic(dir_entries_storage, (gptr)&finfo)) - goto error; - + if (push_dynamic(dir_entries_storage, (gptr)&finfo)) + goto error; + } #ifdef __BORLANDC__ - } while (findnext(&find) == 0); + while (findnext(&find) == 0); #else - } while (_findnext(handle,&find) == 0); - - _findclose(handle); + while (_findnext(handle,&find) == 0); + + _findclose(handle); #endif + } result->dir_entry= (FILEINFO *)dir_entries_storage->buffer; result->number_off_files= dir_entries_storage->elements; - + if (!(MyFlags & MY_DONT_SORT)) qsort((void *) result->dir_entry, result->number_off_files, sizeof(FILEINFO), (qsort_cmp) comp_names); + DBUG_PRINT(exit, ("found %d files", result->number_off_files)); DBUG_RETURN(result); error: my_errno=errno; diff --git a/mysys/my_lock.c b/mysys/my_lock.c index 8f915d6003ac92d0286b953796bc9748e428afa9..919727e03d6af1dcaf81a6575c480fc34f6f5990 100644 --- a/mysys/my_lock.c +++ b/mysys/my_lock.c @@ -26,11 +26,6 @@ #ifdef __WIN__ #include <sys/locking.h> #endif -#ifdef __EMX__ -#define INCL_BASE -#define INCL_NOPMAPI -#include <os2emx.h> -#endif #ifdef __NETWARE__ #include <nks/fsio.h> #endif @@ -96,11 +91,6 @@ int my_lock(File fd, int locktype, my_off_t start, my_off_t length, DBUG_RETURN(0); } } -#elif defined(__EMX__) || defined(OS2) - - if (!_lock64( fd, locktype, start, length, MyFlags)) - DBUG_RETURN(0); - #elif defined(HAVE_LOCKING) /* Windows */ { diff --git a/mysys/my_mkdir.c b/mysys/my_mkdir.c index ba1f4c1f2d88be7fa8421697861b4aa54d8d0c2d..50f304ccce67de9d9fe1ffad2cc1e00de84f5bb1 100644 --- a/mysys/my_mkdir.c +++ b/mysys/my_mkdir.c @@ -27,7 +27,7 @@ int my_mkdir(const char *dir, int Flags, myf MyFlags) DBUG_ENTER("my_dir"); DBUG_PRINT("enter",("dir: %s",dir)); -#if defined(__WIN__) || defined(OS2) +#if defined(__WIN__) if (mkdir((char*) dir)) #else if (mkdir((char*) dir, Flags & my_umask_dir)) diff --git a/mysys/my_open.c b/mysys/my_open.c index 6ed3cb5becf87fde5f272c28c83f1b205b017d40..098d410d8ceaf0cce8d7cb2369e9dedf629a0431 100644 --- a/mysys/my_open.c +++ b/mysys/my_open.c @@ -19,7 +19,7 @@ #include "mysys_err.h" #include <my_dir.h> #include <errno.h> -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) +#if defined(MSDOS) || defined(__WIN__) #include <share.h> #endif @@ -45,7 +45,7 @@ File my_open(const char *FileName, int Flags, myf MyFlags) DBUG_ENTER("my_open"); DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", FileName, Flags, MyFlags)); -#if defined(MSDOS) || defined(__WIN__) || defined(__EMX__) || defined(OS2) +#if defined(MSDOS) || defined(__WIN__) /* Check that we don't try to open or create a file name that may cause problems for us in the future (like PRN) diff --git a/mysys/my_os2cond.c b/mysys/my_os2cond.c deleted file mode 100644 index bf3e85c26a9565c46583a1a04cecdb3007b44f1c..0000000000000000000000000000000000000000 --- a/mysys/my_os2cond.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/***************************************************************************** -** The following is a simple implementation of posix conditions -*****************************************************************************/ - -#undef SAFE_MUTEX /* Avoid safe_mutex redefinitions */ -#include "mysys_priv.h" -#if defined(THREAD) && defined(OS2) -#include <m_string.h> -#include <process.h> -#include <sys/timeb.h> - -int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) -{ - cond->waiting= 0; - /* Warp3 FP29 or Warp4 FP4 or better required */ - if (DosCreateEventSem(NULL, &cond->semaphore, 0x0800, 0)) - return ENOMEM; - return 0; -} - -int pthread_cond_destroy(pthread_cond_t *cond) -{ - for (;;) - { - APIRET rc; - if ((rc= DosCloseEventSem(cond->semaphore)) != 301) - return rc ? EINVAL : 0; - DosPostEventSem(cond->semaphore); - } -} - - -int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - int rval= 0; - cond->waiting++; - if (mutex) - pthread_mutex_unlock(mutex); - if (DosWaitEventSem(cond->semaphore, SEM_INDEFINITE_WAIT)) - rval= EINVAL; - if (mutex) - pthread_mutex_lock(mutex); - cond->waiting--; - return rval; -} - -int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime) -{ - struct timeb curtime; - int result; - long timeout; - int rval= 0; - - _ftime(&curtime); - timeout= ((long) (abstime->ts_sec - curtime.time) * 1000L + - (long) ((abstime->ts_nsec / 1000) - curtime.millitm) / 1000L); - if (timeout < 0) /* Some safety */ - timeout= 0L; - - cond->waiting++; - - if (mutex) - pthread_mutex_unlock(mutex); - if (DosWaitEventSem(cond->semaphore, timeout) != 0) - rval= ETIMEDOUT; - if (mutex) - pthread_mutex_lock(mutex); - - cond->waiting--; - - return rval; -} - - -int pthread_cond_signal(pthread_cond_t *cond) -{ - /* Bring the next thread off the condition queue: */ - DosPostEventSem(cond->semaphore); - return 0; -} - - -int pthread_cond_broadcast(pthread_cond_t *cond) -{ - int i; - /* Enter a loop to bring all threads off the condition queue */ - for (i= cond->waiting; i--;) - DosPostEventSem(cond->semaphore); - return 0; -} - - -int pthread_attr_init(pthread_attr_t *connect_att) -{ - connect_att->dwStackSize= 0; - connect_att->dwCreatingFlag= 0; - connect_att->priority= 0; - return 0; -} - -int pthread_attr_setstacksize(pthread_attr_t *connect_att, DWORD stack) -{ - connect_att->dwStackSize= stack; - return 0; -} - -int pthread_attr_setprio(pthread_attr_t *connect_att, int priority) -{ - connect_att->priority= priority; - return 0; -} - -int pthread_attr_destroy(pthread_attr_t *connect_att) -{ - bzero((gptr) connect_att, sizeof(*connect_att)); - return 0; -} - -/**************************************************************************** -** Fix localtime_r() to be a bit safer -****************************************************************************/ - -struct tm *localtime_r(const time_t *timep, struct tm *tmp) -{ - if (*timep == (time_t) - 1) /* This will crash win32 */ - { - bzero(tmp, sizeof(*tmp)); - } - else - { - struct tm *res= localtime(timep); - if (!res) /* Wrong date */ - { - bzero(tmp, sizeof(*tmp)); /* Keep things safe */ - return 0; - } - *tmp= *res; - } - return tmp; -} -#endif /* __WIN__ */ diff --git a/mysys/my_os2dirsrch.c b/mysys/my_os2dirsrch.c deleted file mode 100644 index 8d1f6ddd94721f897c532279ddb4decc27465c4f..0000000000000000000000000000000000000000 --- a/mysys/my_os2dirsrch.c +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000-2003 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - - -/* Win32 directory search emulation */ - -#if defined(OS2) - -long _findfirst( char* path, struct _finddata_t* dos_file) -{ - HDIR hdir = HDIR_CREATE; - APIRET rc; - FILEFINDBUF3 buf3; - ULONG entries = 1; - -#ifdef _DEBUG - printf( "_findfirst path %s\n", path); -#endif - - memset( &buf3, 0, sizeof( buf3)); - rc = DosFindFirst( - path, /* The ASCIIZ path name of the file or subdirectory to be found. */ - &hdir, /* The handle associated with this DosFindFirst request. */ - FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */ - &buf3, /* Result buffer. */ - sizeof( buf3), /* The length, in bytes, of pfindbuf. */ - &entries, /* Pointer to the number of entries: */ - FIL_STANDARD); /* The level of file information required. */ - -#ifdef _DEBUG - printf( "_findfirst rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, - buf3.achName); -#endif - - if (rc /* && entries == 0 */) - return -1; - - if (dos_file) - { - memset( dos_file, 0, sizeof( struct _finddata_t)); - strcpy( dos_file->name, buf3.achName); - dos_file->size = buf3.cbFile; - dos_file->attrib = buf3.attrFile; - } - return (ULONG) hdir; -} - - -long _findnext( long hdir, struct _finddata_t* dos_file) -{ - APIRET rc; - FILEFINDBUF3 buf3; - ULONG entries = 1; - - memset( &buf3, 0, sizeof( buf3)); - rc = DosFindNext(hdir, - &buf3, /* Result buffer. */ - sizeof( buf3), /* Length, in bytes, of pfindbuf. */ - &entries); /* Pointer to the number of entries */ - -#ifdef _DEBUG - printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, - buf3.achName); -#endif - - if (rc /* && entries == 0 */) - return -1; - - if (dos_file) - { - memset( dos_file, 0, sizeof( struct _finddata_t)); - strcpy( dos_file->name, buf3.achName); - dos_file->size = buf3.cbFile; - dos_file->attrib = buf3.attrFile; - } - return 0; -} - -void _findclose( long hdir) -{ - APIRET rc; - - rc = DosFindClose( hdir); -#ifdef _DEBUG - printf( "_findclose rc=%d hdir=%d\n", rc, hdir); -#endif -} - -DIR* opendir(char* path) -{ - DIR* dir = (DIR*) calloc(1, sizeof( DIR)); - char buffer[260]; - APIRET rc; - ULONG entries = 1; - - strmov(strmov(buffer, path), "*.*"); - -#ifdef _DEBUG - printf( "_findfirst path %s\n", buffer); -#endif - - dir->hdir = HDIR_CREATE; - memset( &dir->buf3, 0, sizeof( dir->buf3)); - rc = DosFindFirst( - buffer, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */ - &dir->hdir, /* Address of the handle associated with this DosFindFirst request. */ - FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */ - &dir->buf3, /* Result buffer. */ - sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */ - &entries, /* Pointer to the number of entries: */ - FIL_STANDARD); /* The level of file information required. */ - -#ifdef _DEBUG - printf( "opendir rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, dir->buf3.achName); -#endif - - if (rc /* && entries == 0 */) - return NULL; - - return dir; -} - - -struct dirent* readdir( DIR* dir) -{ - APIRET rc; - ULONG entries = 1; - - if (!dir->buf3.achName[0]) /* file not found on previous query */ - return NULL; - - /* copy last file name */ - strcpy( dir->ent.d_name, dir->buf3.achName); - - /* query next file */ - memset( &dir->buf3, 0, sizeof( dir->buf3)); - rc= DosFindNext( - dir->hdir, - &dir->buf3, /* Result buffer. */ - sizeof(dir->buf3), /* Length, in bytes, of pfindbuf. */ - &entries); /* Pointer to the number of entries */ - -#ifdef _DEBUG - printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, - dir->buf3.achName); -#endif - - if (rc /* && entries == 0 */) - *dir->buf3.achName= 0; /* reset name for next query */ - - return &dir->ent; -} - - -int closedir (DIR *dir) -{ - APIRET rc; - - rc = DosFindClose( dir->hdir); -#ifdef _DEBUG - printf( "_findclose rc=%d hdir=%d\n", rc, dir->hdir); -#endif - free(dir); - return 0; -} - -#endif /* OS2 */ diff --git a/mysys/my_os2dirsrch.h b/mysys/my_os2dirsrch.h deleted file mode 100644 index 3889f628bad3082c2d7f331fb685a919744752c0..0000000000000000000000000000000000000000 --- a/mysys/my_os2dirsrch.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* Win32 directory search emulation */ - -#ifndef __MY_OS2DIRSRCH2_H__ -#define __MY_OS2DIRSRCH2_H__ - -#ifdef __cplusplus_00 -extern "C" { -#endif - -struct _finddata_t -{ - unsigned attrib; -#ifdef NOT_USED - unsigned long time_create; /* -1 for FAT file systems */ - unsigned long time_access; /* -1 for FAT file systems */ - unsigned long time_write; -#endif - unsigned long size; - char name[260]; -#ifdef NOT_USED - uint16 wr_date; - uint16 wr_time; -#endif -}; - - -struct dirent -{ -#ifdef NOT_USED - unsigned attrib; - unsigned long time_create; /* -1 for FAT file systems */ - unsigned long time_access; /* -1 for FAT file systems */ - unsigned long time_write; - unsigned long size; -#endif - char d_name[260]; -#ifdef NOT_USED - uint16 wr_date; - uint16 wr_time; -#endif -}; - -struct DIR -{ - HDIR hdir; - FILEFINDBUF3 buf3; - struct dirent ent; -}; - -DIR *opendir ( char *); -struct dirent *readdir (DIR *); -int closedir (DIR *); - -#ifdef NOT_USED -#define _A_NORMAL FILE_NORMAL -#define _A_SUBDIR FILE_DIRECTORY -#define _A_RDONLY FILE_READONLY - -long _findfirst( char*, struct _finddata_t*); -long _findnext( long, struct _finddata_t*); -void _findclose( long); -#endif - -#ifdef __cplusplus_00 -} -#endif - -#endif /* __MY_OS2DIRSRCH2_H__ */ diff --git a/mysys/my_os2dlfcn.c b/mysys/my_os2dlfcn.c deleted file mode 100644 index 9c9a6061e8d0000cf3bfadf617d8c419e0dd7e52..0000000000000000000000000000000000000000 --- a/mysys/my_os2dlfcn.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/* - * dlfcn::Unix dynamic loading for OS/2 - * - * Compatibility layer for dynamic loading. - * Only minimal implementation - * -*/ - -#define RTLD_LAZY 0 -#define RTLD_NOW 0 - -void* dlopen( char* path, int flag); -char* dlerror( void); -void* dlsym( void* hmod, char* fn); -void dlclose( void* hmod); - -char fail[ 256]; - -void* dlopen( char* path, int flag) -{ - APIRET rc; - HMODULE hmod; - - rc = DosLoadModule( fail, sizeof( fail), path, &hmod); - if (rc) - return NULL; - - return (void*) hmod; -} - -char* dlerror( void) -{ - return fail; -} - -void* dlsym( void* hmod, char* fn) -{ - APIRET rc; - PFN addr; - - rc = DosQueryProcAddr( (HMODULE) hmod, 0l, fn, &addr); - if (rc) - return NULL; - - return (void*) addr; -} - -void dlclose( void* hmod) -{ - APIRET rc; - - rc = DosFreeModule( (HMODULE) hmod); - -} diff --git a/mysys/my_os2dlfcn.h0 b/mysys/my_os2dlfcn.h0 deleted file mode 100644 index 7f84d430230d88530a59b59d37196601971a5ac6..0000000000000000000000000000000000000000 --- a/mysys/my_os2dlfcn.h0 +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ -/* - * dlfcn::Unix dynamic loading for OS/2 - * - * Compatibility layer for dynamic loading. - * Only minimal implementation - * -*/ - -#ifndef __DLFCN_H__ -#define __DLFCN_H__ - -#define RTLD_LAZY 0 -#define RTLD_NOW 0 - -void* dlopen( char* path, int flag); -char* dlerror( void); -void* dlsym( void* hmod, char* fn); -void dlclose( void* hmod); - -#endif diff --git a/mysys/my_os2file64.c b/mysys/my_os2file64.c deleted file mode 100644 index 786e083adc4bc78372056e6cbc88495782cb2eaf..0000000000000000000000000000000000000000 --- a/mysys/my_os2file64.c +++ /dev/null @@ -1,394 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -void _OS2errno( APIRET rc); -longlong _lseek64( int fd, longlong offset, int seektype); -int _lock64( int fd, int locktype, my_off_t start, - my_off_t length, myf MyFlags); -int _sopen64( const char *name, int oflag, int shflag, int mask); - -/* - This class is used to define a global c++ variable, that - is initialized before main() gets called. -*/ - -class File64bit -{ - public: - File64bit(); /* default constructor */ -} initFile64bit; - -static APIRET (* APIENTRY _DosOpenL)(PCSZ pszFileName, - PHFILE phf, - PULONG pulAction, - LONGLONG cbFile, - ULONG ulAttribute, - ULONG fsOpenFlags, - ULONG fsOpenMode, - PEAOP2 peaop2); -static APIRET (* APIENTRY _DosSetFilePtrL)(HFILE hFile, - LONGLONG ib, - ULONG method, - PLONGLONG ibActual); -static APIRET (* APIENTRY _DosSetFileLocksL)(HFILE hFile, - PFILELOCKL pflUnlock, - PFILELOCKL pflLock, - ULONG timeout, - ULONG flags); - -#define EIO EINVAL -#define ESPIPE EBADSEEK - - -static unsigned char const errno_tab[] = -{ - 0 , EINVAL, ENOENT, ENOENT, EMFILE, /* 0..4 */ - EACCES, EBADF, EIO, ENOMEM, EIO, /* 5..9 */ - EINVAL, ENOEXEC,EINVAL, EINVAL, EINVAL, /* 10..14 */ - ENOENT, EBUSY, EXDEV, ENOENT, EROFS, /* 15..19 */ - EIO, EIO, EIO, EIO, EIO, /* 20..24 */ - EIO, EIO, EIO, ENOSPC, EIO, /* 25..29 */ - EIO, EIO, EACCES, EACCES, EIO, /* 30..34 */ - EIO, EIO, EIO, EIO, ENOSPC, /* 35..39 */ - EIO, EIO, EIO, EIO, EIO, /* 40..44 */ - EIO, EIO, EIO, EIO, EIO, /* 45..49 */ - EIO, EIO, EIO, EIO, EBUSY, /* 50..54 */ - EIO, EIO, EIO, EIO, EIO, /* 55..59 */ - EIO, ENOSPC, ENOSPC, EIO, EIO, /* 60..64 */ - EACCES, EIO, EIO, EIO, EIO, /* 65..69 */ - EIO, EIO, EIO, EROFS, EIO, /* 70..74 */ - EIO, EIO, EIO, EIO, EIO, /* 75..79 */ - EEXIST, EIO, ENOENT, EIO, EIO, /* 80..84 */ - EIO, EIO, EINVAL, EIO, EAGAIN, /* 85..89 */ - EIO, EIO, EIO, EIO, EIO, /* 90..94 */ - EINTR, EIO, EIO, EIO, EACCES, /* 95..99 */ - ENOMEM, EINVAL, EINVAL, ENOMEM, EINVAL, /* 100..104 */ - EINVAL, ENOMEM, EIO, EACCES, EPIPE, /* 105..109 */ - ENOENT, E2BIG, ENOSPC, ENOMEM, EBADF, /* 110..114 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 115..119 */ - EINVAL, EINVAL, EINVAL, ENOENT, EINVAL, /* 120..124 */ - ENOENT, ENOENT, ENOENT, ECHILD, ECHILD, /* 125..129 */ - EACCES, EINVAL, ESPIPE, EINVAL, EINVAL, /* 130..134 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 135..139 */ - EINVAL, EINVAL, EBUSY, EINVAL, EINVAL, /* 140..144 */ - EINVAL, EINVAL, EINVAL, EBUSY, EINVAL, /* 145..149 */ - EINVAL, EINVAL, ENOMEM, EINVAL, EINVAL, /* 150..154 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 155..159 */ - EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN, /* 160..164 */ - EINVAL, EINVAL, EACCES, EINVAL, EINVAL, /* 165..169 */ - EBUSY, EINVAL, EINVAL, EINVAL, EINVAL, /* 170..174 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 175..179 */ - EINVAL, EINVAL, EINVAL, EINVAL, ECHILD, /* 180..184 */ - EINVAL, EINVAL, ENOENT, EINVAL, EINVAL, /* 185..189 */ - ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 190..194 */ - ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 195..199 */ - ENOEXEC,ENOEXEC,ENOEXEC,ENOENT, EINVAL, /* 200..204 */ - EINVAL, ENAMETOOLONG, EINVAL, EINVAL, EINVAL, /* 205..209 */ - EINVAL, EINVAL, EACCES, ENOEXEC,ENOEXEC, /* 210..214 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 215..219 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 220..224 */ - EINVAL, EINVAL, EINVAL, ECHILD, EINVAL, /* 225..229 */ - EINVAL, EBUSY, EAGAIN, ENOTCONN, EINVAL, /* 230..234 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 235..239 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 240..244 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 245..249 */ - EACCES, EACCES, EINVAL, ENOENT, EINVAL, /* 250..254 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 255..259 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 260..264 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 265..269 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 270..274 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 275..279 */ - EINVAL, EINVAL, EINVAL, EINVAL, EEXIST, /* 280..284 */ - EEXIST, EINVAL, EINVAL, EINVAL, EINVAL, /* 285..289 */ - ENOMEM, EMFILE, EINVAL, EINVAL, EINVAL, /* 290..294 */ - EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, /* 295..299 */ - EINVAL, EBUSY, EINVAL, ESRCH, EINVAL, /* 300..304 */ - ESRCH, EINVAL, EINVAL, EINVAL, ESRCH, /* 305..309 */ - EINVAL, ENOMEM, EINVAL, EINVAL, EINVAL, /* 310..314 */ - EINVAL, E2BIG, ENOENT, EIO, EIO, /* 315..319 */ - EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN, /* 320..324 */ - EINVAL, EINVAL, EINVAL, EIO, ENOENT, /* 325..329 */ - EACCES, EACCES, EACCES, ENOENT, ENOMEM /* 330..334 */ -}; - -/* - * Initialize 64bit file access: dynamic load of WSeB API -*/ - File64bit :: File64bit() -{ - HMODULE hDoscalls; - - if (DosQueryModuleHandle("DOSCALLS", &hDoscalls) != NO_ERROR) - return; - - if (DosQueryProcAddr(hDoscalls, 981, NULL, (PFN *)&_DosOpenL) != NO_ERROR) - return; - - if (DosQueryProcAddr(hDoscalls, 988, NULL, (PFN *)&_DosSetFilePtrL) != NO_ERROR) { - _DosOpenL = NULL; - return; - } - - if (DosQueryProcAddr(hDoscalls, 986, NULL, (PFN *)&_DosSetFileLocksL) != NO_ERROR) { - _DosOpenL = NULL; - _DosSetFilePtrL = NULL; - return; - } - /* notify success */ -#ifdef MYSQL_SERVER - printf( "WSeB 64bit file API loaded.\n"); -#endif -} - -void _OS2errno( APIRET rc) -{ - if (rc >= sizeof (errno_tab)) - errno = EINVAL; - else - errno = errno_tab[rc]; -} - - -longlong _lseek64( int fd, longlong offset, int seektype) -{ - APIRET rc; - longlong actual; - - if (_DosSetFilePtrL) - rc = _DosSetFilePtrL( fd, offset, seektype, &actual); - else - { - ULONG ulActual; - rc = DosSetFilePtr( fd, (long) offset, seektype, &ulActual); - actual = ulActual; - } - - if (!rc) - return( actual); /* NO_ERROR */ - - _OS2errno( rc); /* set errno */ - return(-1); /* seek failed */ -} - - -inline APIRET _SetFileLocksL(HFILE hFile, - PFILELOCKL pflUnlock, - PFILELOCKL pflLock, - ULONG timeout, - ULONG flags) -{ - if (_DosSetFileLocksL) - { - APIRET rc; - rc = _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags); - - /* - on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that - only JFS can handle >2GB ranges. - */ - if (rc != 87) - return rc; - /* got INVALID_PARAMETER, fallback to standard call */ - } - - FILELOCK flUnlock = { pflUnlock->lOffset, pflUnlock->lRange }; - FILELOCK flLock = { pflLock->lOffset, pflLock->lRange }; - return DosSetFileLocks( hFile, &flUnlock, &flLock, timeout, flags); -} - - -int _lock64( int fd, int locktype, my_off_t start, - my_off_t length, myf MyFlags) -{ - FILELOCKL LockArea = {0,0}, UnlockArea = {0,0}; - ULONG readonly = 0; - APIRET rc = -1; - - switch (locktype) { - case F_UNLCK: - UnlockArea.lOffset = start; - UnlockArea.lRange = length ? length : LONGLONG_MAX; - break; - - case F_RDLCK: - case F_WRLCK: - LockArea.lOffset = start; - LockArea.lRange = length ? length : LONGLONG_MAX; - readonly = (locktype == F_RDLCK ? 1 : 0); - break; - - default: - errno = EINVAL; - rc = -1; - break; - } - - if (MyFlags & MY_DONT_WAIT) - { - rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly); - /* printf("fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc); */ - if (rc == 33) { /* Lock Violation */ - - DBUG_PRINT("info",("Was locked, trying with timeout")); - rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 1 * 1000, readonly); - /* printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc); */ - } - } - else - { - while (rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly) && - (rc == 33)) - { - printf("."); - DosSleep(1 * 1000); - } - /* printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc); */ - } - if (!rc) - return(0); /* NO_ERROR */ - _OS2errno( rc); /* set errno */ - return(-1); /* lock failed */ -} - - -int sopen(const char *name, int oflag, int shflag, int mask) -{ - int fail_errno; - APIRET rc = 0; - HFILE hf = 0; - ULONG ulAction = 0; - LONGLONG cbFile = 0; - ULONG ulAttribute = FILE_NORMAL; - ULONG fsOpenFlags = 0; - ULONG fsOpenMode = 0; - - /* Extract the access mode and sharing mode bits. */ - fsOpenMode = (shflag & 0xFF) | (oflag & 0x03); - - /* - Translate ERROR_OPEN_FAILED to ENOENT unless O_EXCL is set (see - below). - */ - fail_errno = ENOENT; - - /* - Compute `open_flag' depending on `flags'. Note that _SO_CREAT is - set for O_CREAT. - */ - - if (oflag & O_CREAT) - { - if (oflag & O_EXCL) - { - fsOpenFlags = OPEN_ACTION_FAIL_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - fail_errno = EEXIST; - } - else if (oflag & O_TRUNC) - fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - else - fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - - if (mask & S_IWRITE) - ulAttribute = FILE_NORMAL; - else - ulAttribute = FILE_READONLY; - - } - else if (oflag & O_TRUNC) - fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - else - fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - - /* Try to open the file and handle errors. */ - if (_DosOpenL) - rc = _DosOpenL( name, &hf, &ulAction, cbFile, - ulAttribute, fsOpenFlags, fsOpenMode, NULL); - else - rc = DosOpen( name, &hf, &ulAction, (LONG) cbFile, - ulAttribute, fsOpenFlags, fsOpenMode, NULL); - - if (rc == ERROR_OPEN_FAILED) - { - errno = fail_errno; - return -1; - } - if (rc != 0) - { - _OS2errno( rc); /* set errno */ - return -1; - } - if (oflag & O_APPEND) - _lseek64( hf, 0L, SEEK_END); - return hf; -} - - -int read(int fd, void *buffer, unsigned int count) -{ - APIRET rc; - ULONG actual; - - rc= DosRead( fd, (PVOID) buffer, count, &actual); - - if (!rc) - return( actual); /* NO_ERROR */ - _OS2errno( rc); /* set errno */ - return(-1); /* read failed */ -} - - -int write(int fd, const void *buffer, unsigned int count) -{ - APIRET rc; - ULONG actual; - - rc = DosWrite( fd, (PVOID) buffer, count, &actual); - - if (!rc) - return( actual); /* NO_ERROR */ - _OS2errno( rc); /* set errno */ - return(-1); /* write failed */ -} - - -int close( int fd) -{ - APIRET rc; - ULONG actual; - - rc = DosClose( fd); - - if (!rc) - return( 0); /* NO_ERROR */ - _OS2errno( rc); /* set errno */ - return(-1); /* close failed */ -} - - -int open( const char *name, int oflag) -{ - return sopen( name, oflag, OPEN_SHARE_DENYNONE, S_IREAD | S_IWRITE); -} - - -int open( const char *name, int oflag, int mask) -{ - return sopen( name, oflag, OPEN_SHARE_DENYNONE, mask); -} diff --git a/mysys/my_os2mutex.c b/mysys/my_os2mutex.c deleted file mode 100644 index 5010d6e8dd5af07fc2799dc81f32a63ee6d5c8c4..0000000000000000000000000000000000000000 --- a/mysys/my_os2mutex.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 1995 John Birrell <jb@cimlogic.com.au>. - * All rights reserved. - * - * Modified and extended by Antony T Curtis <antony.curtis@olcs.net> - * for use with OS/2. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by John Birrell. - * 4. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#include <stdlib.h> -#include <errno.h> -#ifdef _THREAD_SAFE - -int -pthread_mutex_init(pthread_mutex_t * mutex, - const pthread_mutexattr_t * mutex_attr) -{ - (void) DosCreateMutexSem(NULL,mutex,0,0); - return (0); /* Return the completion status: */ -} - - -int -pthread_mutex_destroy(pthread_mutex_t * mutex) -{ - APIRET rc; - - do - { - rc = DosCloseMutexSem(*mutex); - if (rc == 301) DosReleaseMutexSem(*mutex); - } while (rc == 301); - - *mutex = 0; - return (0); /* Return the completion status: */ -} - - -int -pthread_mutex_lock(pthread_mutex_t * mutex) -{ - APIRET rc; - - rc = DosRequestMutexSem(*mutex,SEM_INDEFINITE_WAIT); - if (rc) - return(EINVAL); - return (0); /* Return the completion status: */ -} - - -int -pthread_mutex_unlock(pthread_mutex_t * mutex) -{ - (void) DosReleaseMutexSem(*mutex); - return (0); /* Return the completion status: */ -} -#endif diff --git a/mysys/my_os2thread.c b/mysys/my_os2thread.c deleted file mode 100644 index 785ff07954d1721f28413643e7b5365dd5fee424..0000000000000000000000000000000000000000 --- a/mysys/my_os2thread.c +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -/***************************************************************************** -** Simulation of posix threads calls for OS/2 -*****************************************************************************/ - -#include "mysys_priv.h" -#if defined(THREAD) && defined(OS2) -#include <m_string.h> -#include <process.h> - -static pthread_mutex_t THR_LOCK_thread; - -struct pthread_map -{ - HANDLE pthreadself; - pthread_handler func; - void * param; -}; - -void win_pthread_init(void) -{ - pthread_mutex_init(&THR_LOCK_thread,NULL); -} - -/* -** We have tried to use '_beginthreadex' instead of '_beginthread' here -** but in this case the program leaks about 512 characters for each -** created thread ! -** As we want to save the created thread handler for other threads to -** use and to be returned by pthread_self() (instead of the Win32 pseudo -** handler), we have to go trough pthread_start() to catch the returned handler -** in the new thread. -*/ - -pthread_handler_t pthread_start(void *param) -{ - DBUG_ENTER("pthread_start"); - pthread_handler func=((struct pthread_map *) param)->func; - void *func_param=((struct pthread_map *) param)->param; - my_thread_init(); /* Will always succeed in windows */ - pthread_mutex_lock(&THR_LOCK_thread); /* Wait for beginthread to return */ - win_pthread_self=((struct pthread_map *) param)->pthreadself; - pthread_mutex_unlock(&THR_LOCK_thread); - free((char*) param); /* Free param from create */ - /* pthread_exit((void*) (*func)(func_param)); */ - (*func)(func_param); - DBUG_RETURN(0); -} - - -int pthread_create(pthread_t *thread_id, pthread_attr_t *attr, - pthread_handler func, void *param) -{ - HANDLE hThread; - struct pthread_map *map; - DBUG_ENTER("pthread_create"); - - if (!(map=(struct pthread_map *)malloc(sizeof(*map)))) - DBUG_RETURN(-1); - map->func=func; - map->param=param; - pthread_mutex_lock(&THR_LOCK_thread); -#ifdef __BORLANDC__ - hThread=(HANDLE)_beginthread((void(_USERENTRY *)(void *)) pthread_start, - attr->dwStackSize ? attr->dwStackSize : - 65535, (void*) map); -#elif defined( OS2) - hThread=(HANDLE)_beginthread((void( _Optlink *)(void *)) pthread_start, NULL, - attr->dwStackSize ? attr->dwStackSize : - 65535, (void*) map); -#else - hThread=(HANDLE)_beginthread((void( __cdecl *)(void *)) pthread_start, - attr->dwStackSize ? attr->dwStackSize : - 65535, (void*) map); -#endif - DBUG_PRINT("info", ("hThread=%lu",(long) hThread)); - *thread_id=map->pthreadself=hThread; - pthread_mutex_unlock(&THR_LOCK_thread); - - if (hThread == (HANDLE) -1) - { - int error=errno; - DBUG_PRINT("error", - ("Can't create thread to handle request (error %d)",error)); - DBUG_RETURN(error ? error : -1); - } -#ifdef OS2 - my_pthread_setprio(hThread, attr->priority); -#else - VOID(SetThreadPriority(hThread, attr->priority)) ; -#endif - DBUG_RETURN(0); -} - - -void pthread_exit(void *a) -{ - _endthread(); -} - -/* This is neaded to get the macro pthread_setspecific to work */ - -int win_pthread_setspecific(void *a,void *b,uint length) -{ - memcpy(a,b,length); - return 0; -} - -#endif diff --git a/mysys/my_os2tls.c b/mysys/my_os2tls.c deleted file mode 100644 index f7cf3b09283e5975faffc31e404d49f3f3d42ccb..0000000000000000000000000000000000000000 --- a/mysys/my_os2tls.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) Yuri Dario & 2000 MySQL AB - All the above parties has a full, independent copyright to - the following code, including the right to use the code in - any manner without any demands from the other parties. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -DWORD TlsAlloc( void); -BOOL TlsFree( DWORD); -PVOID TlsGetValue( DWORD); -BOOL TlsSetValue( DWORD, PVOID); - -#define TLS_MINIMUM_AVAILABLE 64 - - -PULONG tls_storage; /* TLS local storage */ -DWORD tls_bits[2]; /* TLS in-use bits */ -pthread_mutex_t tls_mutex; /* TLS mutex for in-use bits */ - - -DWORD TlsAlloc( void) -{ - DWORD index = -1; - DWORD mask, tibidx; - int i; - - if (tls_storage == NULL) - { - - APIRET rc; - - /* allocate memory for TLS storage */ - rc = DosAllocThreadLocalMemory( 1, &tls_storage); - if (rc) - fprintf( stderr, "DosAllocThreadLocalMemory error: return code = %u\n", - rc); - /* create a mutex */ - if (pthread_mutex_init( &tls_mutex, NULL)) - fprintf( stderr, "Failed to init TLS mutex\n"); - } - - pthread_mutex_lock( &tls_mutex); - - tibidx = 0; - if (tls_bits[0] == 0xFFFFFFFF) - { - if (tls_bits[1] == 0xFFFFFFFF) - { - fprintf( stderr, "tid#%d, no more TLS bits available\n", _threadid); - pthread_mutex_unlock( &tls_mutex); - return -1; - } - tibidx = 1; - } - - for (i=0; i<32; i++) - { - mask = (1 << i); - if ((tls_bits[ tibidx] & mask) == 0) - { - tls_bits[ tibidx] |= mask; - index = (tibidx*32) + i; - break; - } - } - tls_storage[index] = 0; - - pthread_mutex_unlock( &tls_mutex); - /* fprintf( stderr, "tid#%d, TlsAlloc index %d\n", _threadid, index); */ - return index; -} - -BOOL TlsFree( DWORD index) -{ - int tlsidx; - DWORD mask; - - if (index >= TLS_MINIMUM_AVAILABLE) - return NULL; - - pthread_mutex_lock( &tls_mutex); - - tlsidx = 0; - if (index > 32) - tlsidx++; - - mask = (1 << index); - if (tls_bits[ tlsidx] & mask) - { - tls_bits[tlsidx] &= ~mask; - tls_storage[index] = 0; - pthread_mutex_unlock( &tls_mutex); - return TRUE; - } - - pthread_mutex_unlock( &tls_mutex); - return FALSE; -} - - -PVOID TlsGetValue( DWORD index) -{ - if (index >= TLS_MINIMUM_AVAILABLE) - return NULL; - - /* verify if memory has been allocated for this thread */ - if (*tls_storage == NULL) - { - /* allocate memory for indexes */ - *tls_storage = (ULONG)calloc( TLS_MINIMUM_AVAILABLE, sizeof(int)); - /* fprintf(stderr, "tid#%d, tls_storage %x\n", _threadid, *tls_storage); */ - } - - ULONG* tls_array = (ULONG*) *tls_storage; - return (PVOID) tls_array[index]; -} - - -BOOL TlsSetValue( DWORD index, PVOID val) -{ - - /* verify if memory has been allocated for this thread */ - if (*tls_storage == NULL) - { - /* allocate memory for indexes */ - *tls_storage = (ULONG)calloc( TLS_MINIMUM_AVAILABLE, sizeof(int)); - /* fprintf(stderr, "tid#%d, tls_storage %x\n", _threadid, *tls_storage); */ - } - - if (index >= TLS_MINIMUM_AVAILABLE) - return FALSE; - - ULONG* tls_array = (ULONG*) *tls_storage; - /* fprintf( stderr, "tid#%d, TlsSetValue array %08x index %d -> %08x (old)\n", _threadid, tls_array, index, tls_array[ index]); */ - tls_array[ index] = (ULONG) val; - /* fprintf( stderr, "tid#%d, TlsSetValue array %08x index %d -> %08x\n", _threadid, tls_array, index, val); */ - return TRUE; -} diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c index 315e966bf432c5447b227e6b2c92dc7b557e4c55..80aa6b37dbc5dd2f3776d229cfce11adfadf793d 100644 --- a/mysys/my_pthread.c +++ b/mysys/my_pthread.c @@ -24,7 +24,7 @@ #include <m_string.h> #include <thr_alarm.h> -#if (defined(__BSD__) || defined(_BSDI_VERSION)) && !defined(HAVE_mit_thread) +#if (defined(__BSD__) || defined(_BSDI_VERSION)) #define SCHED_POLICY SCHED_RR #else #define SCHED_POLICY SCHED_OTHER @@ -76,9 +76,6 @@ void my_pthread_attr_setprio(pthread_attr_t *attr, int priority) #ifdef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC #undef pthread_getspecific -#ifdef HAVE_UNIXWARE7_THREADS -#define pthread_getspecific thr_getspecific -#endif void *my_pthread_getspecific_imp(pthread_key_t key) { @@ -190,7 +187,7 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res) ** Author: Gary Wisniewski <garyw@spidereye.com.au>, much modified by Monty ****************************************************************************/ -#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(OS2) +#if !defined(HAVE_SIGWAIT) && !defined(sigwait) && !defined(__WIN__) && !defined(HAVE_rts_threads) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) #if !defined(DONT_USE_SIGSUSPEND) @@ -429,7 +426,7 @@ int sigwait(sigset_t *setp, int *sigp) ** Patches for AIX and DEC OSF/1 3.2 *****************************************************************************/ -#if (defined(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT) && !defined(HAVE_UNIXWARE7_THREADS)) || defined(HAVE_DEC_3_2_THREADS) +#if defined(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT) #include <netdb.h> diff --git a/mysys/my_redel.c b/mysys/my_redel.c index 9af360424b07b8c36c3218c0783fcf3013359d3a..02d3db8b860a3be3724b321ee27b1f9b34653c59 100644 --- a/mysys/my_redel.c +++ b/mysys/my_redel.c @@ -90,7 +90,7 @@ int my_copystat(const char *from, const char *to, int MyFlags) return 1; VOID(chmod(to, statbuf.st_mode & 07777)); /* Copy modes */ -#if !defined(MSDOS) && !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(MSDOS) && !defined(__WIN__) && !defined(__NETWARE__) if (statbuf.st_nlink > 1 && MyFlags & MY_LINK_WARNING) { if (MyFlags & MY_LINK_WARNING) diff --git a/mysys/my_sleep.c b/mysys/my_sleep.c index 31eaf7eeb96404ab9ae8eac5ad4084d009b09200..2ef4c1f8382015cd7e6e6c8fb1345b79ff05c92b 100644 --- a/mysys/my_sleep.c +++ b/mysys/my_sleep.c @@ -25,8 +25,6 @@ void my_sleep(ulong m_seconds) delay(m_seconds/1000+1); #elif defined(__WIN__) Sleep(m_seconds/1000+1); /* Sleep() has millisecond arg */ -#elif defined(OS2) - DosSleep(m_seconds/1000+1); #elif defined(HAVE_SELECT) struct timeval t; t.tv_sec= m_seconds / 1000000L; diff --git a/mysys/my_static.c b/mysys/my_static.c index 17094548dbd9445ec921f243c6f5524b877b2a7f..4f3e2078a5d28b91425ed02812274bbfa96c102e 100644 --- a/mysys/my_static.c +++ b/mysys/my_static.c @@ -19,7 +19,7 @@ a shared library */ -#if !defined(stdin) || defined(OS2) +#if !defined(stdin) #include "mysys_priv.h" #include "my_static.h" #include "my_alarm.h" diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index d93f45091c67ed009ee559588422a042ffaada1b..9013cd6e79db0b9f2cf467b0370285373b7ce579 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -94,7 +94,7 @@ my_bool my_thread_global_init(void) pthread_mutex_init(&THR_LOCK_heap,MY_MUTEX_INIT_FAST); pthread_mutex_init(&THR_LOCK_net,MY_MUTEX_INIT_FAST); pthread_mutex_init(&THR_LOCK_charset,MY_MUTEX_INIT_FAST); -#if defined( __WIN__) || defined(OS2) +#if defined( __WIN__) win_pthread_init(); #endif #if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) @@ -217,19 +217,19 @@ void my_thread_end(void) tmp->dbug=0; } #endif -#if !defined(__bsdi__) && !defined(__OpenBSD__) || defined(HAVE_mit_thread) +#if !defined(__bsdi__) && !defined(__OpenBSD__) /* bsdi and openbsd 3.5 dumps core here */ pthread_cond_destroy(&tmp->suspend); #endif pthread_mutex_destroy(&tmp->mutex); -#if (!defined(__WIN__) && !defined(OS2)) || defined(USE_TLS) +#if !defined(__WIN__) || defined(USE_TLS) free(tmp); #else tmp->init= 0; #endif } /* The following free has to be done, even if my_thread_var() is 0 */ -#if (!defined(__WIN__) && !defined(OS2)) || defined(USE_TLS) +#if !defined(__WIN__) || defined(USE_TLS) pthread_setspecific(THR_KEY_mysys,0); #endif } @@ -260,7 +260,7 @@ long my_thread_id() { #if defined(HAVE_PTHREAD_GETSEQUENCE_NP) return pthread_getsequence_np(pthread_self()); -#elif (defined(__sun) || defined(__sgi) || defined(__linux__)) && !defined(HAVE_mit_thread) +#elif (defined(__sun) || defined(__sgi) || defined(__linux__)) return pthread_self(); #else return my_thread_var->id; diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c index 41914080a9d856dc627d1a9ede8a16e3bf906cc2..dcb41837d965a6a1c73d29366ba2fd0aa8624807 100644 --- a/mysys/thr_alarm.c +++ b/mysys/thr_alarm.c @@ -42,7 +42,7 @@ volatile my_bool alarm_thread_running= 0; static sig_handler process_alarm_part2(int sig); -#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) +#if !defined(__WIN__) static pthread_mutex_t LOCK_alarm; static pthread_cond_t COND_alarm; @@ -563,145 +563,6 @@ static void *alarm_handler(void *arg __attribute__((unused))) } #endif /* USE_ALARM_THREAD */ -/***************************************************************************** - thr_alarm for OS/2 -*****************************************************************************/ - -#elif defined(__EMX__) || defined(OS2) - -#define INCL_BASE -#define INCL_NOPMAPI -#include <os2.h> - -static pthread_mutex_t LOCK_alarm; -static sigset_t full_signal_set; -static QUEUE alarm_queue; -pthread_t alarm_thread; - -#ifdef USE_ALARM_THREAD -static pthread_cond_t COND_alarm; -static void *alarm_handler(void *arg); -#define reschedule_alarms() pthread_cond_signal(&COND_alarm) -#else -#define reschedule_alarms() pthread_kill(alarm_thread,THR_SERVER_ALARM) -#endif - -sig_handler process_alarm(int sig __attribute__((unused))) -{ - sigset_t old_mask; - ALARM *alarm_data; - DBUG_PRINT("info",("sig: %d active alarms: %d",sig,alarm_queue.elements)); -} - - -/* - Remove another thread from the alarm -*/ - -void thr_alarm_kill(pthread_t thread_id) -{ - uint i; - - pthread_mutex_lock(&LOCK_alarm); - for (i=0 ; i < alarm_queue.elements ; i++) - { - if (pthread_equal(((ALARM*) queue_element(&alarm_queue,i))->thread, - thread_id)) - { - ALARM *tmp=(ALARM*) queue_remove(&alarm_queue,i); - tmp->expire_time=0; - queue_insert(&alarm_queue,(byte*) tmp); - reschedule_alarms(); - break; - } - } - pthread_mutex_unlock(&LOCK_alarm); -} - -bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm) -{ - APIRET rc; - if (alarm_aborted) - { - alarm->alarmed.crono=0; - alarm->alarmed.event=0; - return 1; - } - if (rc = DosCreateEventSem(NULL,(HEV *) &alarm->alarmed.event, - DC_SEM_SHARED,FALSE)) - { - printf("Error creating event semaphore! [%d] \n",rc); - alarm->alarmed.crono=0; - alarm->alarmed.event=0; - return 1; - } - if (rc = DosAsyncTimer((long) sec*1000L, (HSEM) alarm->alarmed.event, - (HTIMER *) &alarm->alarmed.crono)) - { - printf("Error starting async timer! [%d] \n",rc); - DosCloseEventSem((HEV) alarm->alarmed.event); - alarm->alarmed.crono=0; - alarm->alarmed.event=0; - return 1; - } /* endif */ - (*alrm)= &alarm->alarmed; - return 1; -} - - -bool thr_got_alarm(thr_alarm_t *alrm_ptr) -{ - thr_alarm_t alrm= *alrm_ptr; - APIRET rc; - - if (alrm->crono) - { - rc = DosWaitEventSem((HEV) alrm->event, SEM_IMMEDIATE_RETURN); - if (rc == 0) { - DosCloseEventSem((HEV) alrm->event); - alrm->crono = 0; - alrm->event = 0; - } /* endif */ - } - return !alrm->crono || alarm_aborted; -} - - -void thr_end_alarm(thr_alarm_t *alrm_ptr) -{ - thr_alarm_t alrm= *alrm_ptr; - if (alrm->crono) - { - DosStopTimer((HTIMER) alrm->crono); - DosCloseEventSem((HEV) alrm->event); - alrm->crono = 0; - alrm->event = 0; - } -} - -void end_thr_alarm(my_bool free_structures) -{ - DBUG_ENTER("end_thr_alarm"); - alarm_aborted=1; /* No more alarms */ - DBUG_VOID_RETURN; -} - -void init_thr_alarm(uint max_alarm) -{ - DBUG_ENTER("init_thr_alarm"); - alarm_aborted=0; /* Yes, Gimmie alarms */ - DBUG_VOID_RETURN; -} - -void thr_alarm_info(ALARM_INFO *info) -{ - bzero((char*) info, sizeof(*info)); -} - -void resize_thr_alarm(uint max_alarms) -{ -} - /***************************************************************************** thr_alarm for win95 *****************************************************************************/ @@ -902,10 +763,8 @@ static sig_handler print_signal_warning(int sig) #ifdef DONT_REMEMBER_SIGNAL my_sigset(sig,print_signal_warning); /* int. thread system calls */ #endif -#ifndef OS2 if (sig == SIGALRM) alarm(2); /* reschedule alarm */ -#endif } #endif /* USE_ONE_SIGNAL_HAND */ @@ -922,7 +781,6 @@ static void *signal_hand(void *arg __attribute__((unused))) VOID(pthread_cond_signal(&COND_thread_count)); /* Tell main we are ready */ pthread_mutex_unlock(&LOCK_thread_count); -#ifndef OS2 sigemptyset(&set); /* Catch all signals */ sigaddset(&set,SIGINT); sigaddset(&set,SIGQUIT); @@ -939,7 +797,6 @@ static void *signal_hand(void *arg __attribute__((unused))) #else puts("Starting signal handling thread"); #endif -#endif /* OS2 */ printf("server alarm: %d thread alarm: %d\n", THR_SERVER_ALARM,THR_CLIENT_ALARM); DBUG_PRINT("info",("Starting signal and alarm handling thread")); @@ -962,9 +819,7 @@ static void *signal_hand(void *arg __attribute__((unused))) case SIGINT: case SIGQUIT: case SIGTERM: -#ifndef OS2 case SIGHUP: -#endif printf("Aborting nicely\n"); end_thr_alarm(0); break; @@ -974,13 +829,11 @@ static void *signal_hand(void *arg __attribute__((unused))) exit(1); return 0; /* Keep some compilers happy */ #endif -#ifndef OS2 #ifdef USE_ONE_SIGNAL_HAND case THR_SERVER_ALARM: process_alarm(sig); break; #endif -#endif /* OS2 */ } } } @@ -1002,7 +855,6 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) pthread_cond_init(&COND_thread_count,NULL); /* Start a alarm handling thread */ -#ifndef OS2 sigemptyset(&set); sigaddset(&set,SIGINT); sigaddset(&set,SIGQUIT); @@ -1020,7 +872,6 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) sigaddset(&set,THR_CLIENT_ALARM); VOID(pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0)); #endif -#endif /* OS2 */ pthread_attr_init(&thr_attr); pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS); diff --git a/os2/BldLevel.RES b/os2/BldLevel.RES deleted file mode 100644 index 302d9fc875e44865339845829d6bab220741c810..0000000000000000000000000000000000000000 Binary files a/os2/BldLevel.RES and /dev/null differ diff --git a/os2/BldLevel.cmd b/os2/BldLevel.cmd deleted file mode 100644 index d98d8c9dfb900cc009e5e870835addf5f9634df6..0000000000000000000000000000000000000000 --- a/os2/BldLevel.cmd +++ /dev/null @@ -1,10 +0,0 @@ -@echo off - -REM I'm using resources for BLDLEVEL info, because VA4 linker has the bad -REM feature of using versionstring content for padding files. - -REM To set fixpak level: -P"fixpak level" -SET MYSQL_VERSION=3.23.50 -SET MYSQL_BUILD=B1 - -BldLevelInf -V%MYSQL_VERSION% -N"MySQL AB, Yuri Dario" -D"MySQL %MYSQL_VERSION% for OS/2 - Build %MYSQL_BUILD%" -Len BldLevel.rc diff --git a/os2/BldLevel.rc b/os2/BldLevel.rc deleted file mode 100644 index ac028379892e2478f3d5a0d5ed8cf21c40365a6e..0000000000000000000000000000000000000000 --- a/os2/BldLevel.rc +++ /dev/null @@ -1 +0,0 @@ -RCDATA 1 { "@#MySQL AB, Yuri Dario:3.23.50#@##1## 24 Jun 2002 22:42:20 paperino::en::::@@MySQL 3.23.50 for OS/2 - Build B1" } diff --git a/os2/BldLevelInf.cmd b/os2/BldLevelInf.cmd deleted file mode 100644 index 40a85f3782a64c1cab78f12d2abe36cfdd4bbb0e..0000000000000000000000000000000000000000 --- a/os2/BldLevelInf.cmd +++ /dev/null @@ -1,570 +0,0 @@ -/* $Id: BldLevelInf.cmd,v 1.5 2001/01/26 21:33:13 phaller Exp $ - * - * Adds a Description string to the given .def-file. - * Fills in default values; like build time and host. - * - */ - -if RxFuncQuery('SysLoadFuncs') = 1 then -do - call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'; - call SysLoadFuncs; -end - - -/* - * Set default parameter values. - */ -sDefFileIn = ''; -sDefFileOut = ''; -sASDFeatureId = ''; -sCountryCode = ''; -sDateTime = left(' 'date()' 'time(), 26); -sDescription = 'Odin32'; -sFixPakVer = ''; -sHostname = strip(substr(VALUE('HOSTNAME',,'OS2ENVIRONMENT'), 1, 11)); -sLanguageCode = ''; -sMiniVer = ''; -sVendor = 'Project Odin'; -sVersion = '0.5'; - - -/* - * Parse parameters. - */ -parse arg sArgs -if (sArgs = '') then -do - call syntax; - exit(1); -end - -do while (sArgs <> '') - sArgs = strip(sArgs); - if (substr(sArgs, 1, 1) = '-' | substr(sArgs, 1, 1) = '/') then - do /* - * Option. - */ - ch = translate(substr(sArgs, 2, 1)); - if (pos(ch, 'ACDHLMNPRTV') < 1) then - do - say 'invalid option:' substr(sArgs, 1, 2); - call syntax; - exit(2); - end - - /* get value and advance sArgs to next or to end. */ - if (substr(sArgs, 3, 1) = '"') then - do - iNext = pos('"', sArgs, 4); - fQuote = 1; - end - else - do - iNext = pos(' ', sArgs, 3); - if (iNext <= 0) then - iNext = length(sArgs); - fQuote = 0; - end - - if (iNext > 3 | ch = 'R') then - do - sValue = substr(sArgs, 3 + fQuote, iNext - 3 - fQuote); - sArgs = strip(substr(sArgs, iNext+1)); - /*say 'iNext:' iNext 'sValue:' sValue 'sArgs:' sArgs; */ - - /* check if we're gonna search for something in an file. */ - if (sValue <> '' & pos('#define=', sValue) > 0) then - sValue = LookupDefine(sValue); - end - else - do - say 'syntax error near' substr(sArgs, 1, 2)'.'; - call syntax; - exit(3); - end - - - /* set value */ - select - when (ch = 'A') then /* ASD Feature Id */ - sASDFeatureId = sValue; - - when (ch = 'C') then /* Country code */ - sCountryCode = sValue; - - when (ch = 'D') then /* Description */ - sDescription = sValue; - - when (ch = 'H') then /* Hostname */ - sHostname = sValue; - - when (ch = 'L') then /* Language code */ - sLanguageCode = sValue; - - when (ch = 'M') then /* MiniVer */ - sMiniVer = sValue; - - when (ch = 'N') then /* Vendor */ - sVendor = sValue; - - when (ch = 'R') then /* Vendor */ - sDescription = ReadDescription(sValue, sDefFile); - - when (ch = 'P') then /* Fixpak version */ - sFixPakVer = sValue; - - when (ch = 'T') then /* Date Time */ - sDateTime = sValue; - - when (ch = 'V') then /* Version */ - sVersion = sValue; - - /* Otherwise it's an illegal option */ - otherwise - say 'invalid option:' substr(sArgs, 1, 2); - call syntax; - exit(2); - end /* select */ - end - else - do /* - * Defition file... - */ - if (sDefFileOut <> '') then - do - say 'Syntax error: Can''t specify more than two defintion files!'; - exit(4); - end - if (sDefFileIn = '') then - parse value sArgs with sDefFileIn' 'sArgs - else - parse value sArgs with sDefFileOut' 'sArgs - sArgs = strip(sArgs); - end -end - - -/* check that a defintion file was specified. */ -if (sDefFileIn = '') then -do - say 'Syntax error: Will have to specify a .def-file to update.'; - call syntax; - exit(5); -end - - -/* - * Trim strings to correct lengths. - */ -sVendor = strip(substr(sVendor, 1, 31)); -if (substr(sDateTime, 1, 1) <> ' ') then - sDateTime = ' ' || sDateTime; -sDateTime = left(sDateTime, 26); -sHostname = strip(substr(sHostname, 1, 11)); -sMiniVer = strip(substr(sMiniVer, 1, 11)); -sDescription = strip(substr(sDescription, 1, 80)); -sCountryCode = strip(substr(sCountryCode, 1, 4)); -sLanguageCode = strip(substr(sLanguageCode, 1, 4)); -sASDFeatureId = strip(substr(sASDFeatureId, 1, 11)); -sFixPakVer = strip(substr(sFixPakVer, 1, 11)); - - -/* - * Signature - */ -sEnhSign = '##1##' - -/* - * Build description string. - */ -sDescription = '@#'sVendor':'sVersion'#@'sEnhSign||, - sDateTime||sHostname||, - ':'sASDFeatureId':'sLanguageCode':'sCountryCode':'sMiniVer||, - '::'sFixPakVer'@@'sDescription; - -/* - * Update .def-file. - */ -call SysFileDelete(sDefFileIn); -rc = lineout( sDefFileIn, 'RCDATA 1 { "' || sDescription || '" }'); - -/*rc = UpdateDefFile(sDefFileIn, sDefFileOut, sDescription);*/ -exit(rc); - - -/** - * Display script syntax. - */ -syntax: procedure - say 'Syntax: MakeDesc.cmd [options] <deffile in> <deffile out> [options]' - say ' <deffile> Defitionfile which will have an DESCRIPTION appended.' - say 'Options:' - say ' -A<string> ASD Feature Id.' - say ' -C<string> Country code.' - say ' -D<string> Description.' - say ' -R[deffile] Read description from .def file.' - say ' -H<string> Hostname.' - say ' -L<string> Language code.' - say ' -M<string> MiniVer.' - say ' -N<string> Vendor.' - say ' -P<string> Fixpak version.' - say ' -T<string> Date Time.' - say ' -V<string> Version.' - say '<string> could be a double qoute qouted string or a single word.' - say ' You could also reference #defines in C/C++ include files.' - say ' The string should then have this form:' - say ' "#define=<DEFINE_NAME>,<includefile.h>"' - say ''; - - return; - - -/** - * Search for a #define in an C/C++ header or source file. - * - * @returns String containing the defined value - * found for the define in the header file. - * Quits on fatal errors. - * @param A string on the form: "#define=DEFINETOFIND,includefile.h" - * @remark Write only code... - let's hope it works. - */ -LookupDefine: procedure - parse arg '#'sDefine'='sMacro','sIncludeFile - - /* - * Validate parameters. - */ - sMacro = strip(sMacro); - sIncludeFile = strip(sIncludeFile); - if (sMacro = '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <DEFINE_NAME> was empty.'; - exit(-20); - end - if (sIncludeFile = '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <includefile.h> was empty.'; - exit(-20); - end - - - sIllegal = translate(translate(sMacro),, - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',, - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'); - - if (strip(translate(sIllegal, ' ', '!')) <> '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <DEFINE_NAME> contains illegal charater(s).' - say ' 'sMacro; - say ' 'translate(sIllegal, ' ', '!'); - exit(-20); - end - - /* - * Open include file. - */ - sRc = stream(sIncludeFile, 'c', 'open read'); - if (pos('READY', sRc) <> 1) then - do /* search INCLUDE variable */ - sFile = SysSearchPath('INCLUDE', sIncludeFile); - if (sFile = '') then - do - say 'Can''t find include file 'sIncludeFile'.'; - exit(-20); - end - sIncludeFile = sFile; - - sRc = stream(sIncludeFile, 'c', 'open read'); - if (pos('READY', sRc) <> 1) then - do - say 'Failed to open include file' sIncludeFile'.'; - exit(-20); - end - end - - /* - * Search the file line by line. - * We'll check for lines starting with a hash (#) char. - * Then check that the word after the hash is 'define'. - * Then match the next word with the macro name. - * Then then get the next rest of the line to comment or continuation char. - * (continuation is not supported) - * Finally strip quotes. - */ - sValue = ''; - do while (lines(sIncludeFile) > 0) - sLine = strip(linein(sIncludeFile)); - if (sLine = '') then - iterate; - if (substr(sLine, 1, 1) <> '#') then - iterate; - sLine = substr(sLine, 2); - if (word(sLine, 1) <> 'define') then - iterate; - sLine = strip(substr(sLine, wordpos(sLine, 1) + length('define')+1)); - if ( substr(sLine, 1, length(sMacro)) <> sMacro, - | substr(sLine, length(sMacro)+1, 1) <> ' ') then - iterate; - sLine = strip(substr(sLine, length(sMacro) + 1)); - if (sLine = '') then - do - say 'error: #define' sMacro' is empty.'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - - chQuote = substr(sLine, 1, 1); - if (chQuote = '"' | chQuote = "'") then - do /* quoted string */ - iLastQuote = 0; - do forever - iLast = pos(chQuote, sLine, 2); - if (iLast <= 0) then - leave; - if (substr(sLine, iLast, 1) = '\') then - iterate; - iLastQuote = iLast; - leave; - end - - if (iLastQuote <= 0) then - do - say 'C/C++ syntax error in 'sIncludefile': didn''t find end quote.'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - - call stream sIncludeFile, 'c', 'close'; - sValue = substr(sLine, 2, iLastQuote - 2); - say 'Found 'sMacro'='sValue; - return sValue; - end - else - do - iCommentCPP = pos('//',sLine); - iCommentC = pos('/*',sLine); - if (iCommentC > 0 & iCommentCPP > 0 & iCommentC > iCommentCPP) then - iComment = iCommentCPP; - else if (iCommentC > 0 & iCommentCPP > 0 & iCommentC < iCommentCPP) then - iComment = iCommentC; - else if (iCommentCPP > 0) then - iComment = iCommentCPP; - else if (iCommentC > 0) then - iComment = iCommentC; - else - iComment = 0; - - if (iComment > 0) then - sValue = strip(substr(sLine, 1, iComment-1)); - else - sValue = strip(sLine); - - if (sValue <> '') then - do - if (substr(sValue, length(sValue)) = '\') then - do - say 'Found continuation char: Multiline definitions are not supported!\n'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - end - - if (sValue = '') then - say 'warning: The #define has no value.'; - - call stream sIncludeFile, 'c', 'close'; - say 'Found 'sMacro'='sValue; - return sValue; - end - end - - call stream sIncludeFile, 'c', 'close'; - say 'error: didn''t find #define' sMacro'.'; - exit(-20); - - - -/** - * Reads the description line for a .def-file. - * @returns The Description string, with quotes removed. - * Empty string is acceptable. - * On error we'll terminate the script. - * @param sDefFile Filaname of .def-file to read the description from. - * @param sDefFile2 Used if sDefFile is empty. - * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no) - */ -ReadDescription: procedure; - parse arg sDefFile, sDefFile2 - - /* - * Validate parameters. - */ - if (sDefFile = '') then - sDefFile = sDefFile2; - if (sDefFile = '') then - do - say 'error: no definition file to get description from.' - exit(-1); - end - - /* - * Open file - */ - rc = stream(sDefFile, 'c', 'open read'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open deffile file.'; - exit(-1); - end - - - /* - * Search for the 'DESCRIPTION' line. - */ - do while (lines(sDefFile) > 0) - sLine = strip(linein(sDefFile)); - if (sLine = '') then - iterate; - if (translate(word(sLine, 1)) <> 'DESCRIPTION') then - iterate; - sLine = strip(substr(sLine, wordpos(sLine, 1) + length('DESCRIPTION')+1)); - - ch = substr(sLine, 1, 1); - if (ch <> "'" & ch <> '"') then - do - say 'syntax error: description line in' sDefFile 'is misformed.'; - call stream sDefFile, 'c', 'close'; - exit(-10); - end - - iEnd = pos(ch, sLine, 2); - if (iEnd <= 0) then - do - say 'syntax error: description line in' sDefFile 'is misformed.'; - call stream sDefFile, 'c', 'close'; - exit(-10); - end - - call stream sDefFile, 'c', 'close'; - sValue = substr(sLine, 2, iEnd - 2); - say 'Found Description:' sValue; - return sValue; - end - - call stream sDefFile, 'c', 'close'; - say 'info: Didn''t find description line in' sDefFile'.'; - return ''; - - -/** - * This is a function which reads sDefFileIn into and - * internal array and changes the DESCRIPTION text if found. - * If DESCRIPTION isn't found, it is added at the end. - * The array is written to sDefFileOut. - * @returns 0 on succes. - * Errorcode on error. - * @param sDefFileIn Input .def-file. - * @param sDefFileOut Output .def-file. Overwritten. - * @param sDescription New description string. - * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no) - */ -UpdateDefFile: procedure; - parse arg sDefFileIn, sDefFileOut, sDescription - - /* - * Validate parameters. - */ - if (sDefFileOut = '') then - sDefFileOut = sDefFileIn; - - /* - * Open file input file. - */ - rc = stream(sDefFileIn, 'c', 'open read'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open' sDefFileIn 'file.'; - return 110; - end - - - /* - * Search for the 'BLDLEVEL' line. - */ - i = 0; - fDescription = 0; - do while (lines(sDefFileIn) > 0) - /* - * Read line. - */ - i = i + 1; - asFile.i = linein(sDefFileIn); - - /* - * Look for BLDLEVEL; - */ - if (asFile.i = '') then - iterate; - if (translate(word(strip(asFile.i), 1)) <> 'BLDLEVEL') then - iterate; - if (fDescription) then - do - say 'warning: multiple descriptions lines. Line' i 'removed'; - i = i - 1; - iterate; - end - - /* - * Found description - replace with new description. - */ - asFile.i = "BldLevel = '"||sDescription||"'"; - fDescription = 1; - end - - /* - * Add description is none was found. - */ - if (\fDescription) then - do - i = i + 1; - asFile.i = "BldLevel = '"||sDescription||"'"; - end - asFile.0 = i; - - - /* - * Close input file and open output file. - */ - call stream sDefFileIn, 'c', 'close'; - call SysFileDelete(sDefFileOut); - rc = stream(sDefFileOut, 'c', 'open write'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open outputfile' sDefFileOut 'file.'; - return 110; - end - - /* - * Make firstline and write all the lines to the output file. - */ - /*call lineout sDefFileOut, '; Updated by makedesc.cmd', 1;*/ - do i = 1 to asFile.0 - rc = lineout(sDefFileOut, asFile.i); - if (rc > 0) then - do - say 'error: failed to write line' i 'to' sDefFileOut'.' - call stream sDefFileOut, 'c', 'close'; - return 5; - end - end - - /* - * Close output file and return succesfully. - */ - call stream sDefFileOut, 'c', 'close'; - return 0; - diff --git a/os2/ChangeLog.os2 b/os2/ChangeLog.os2 deleted file mode 100644 index 18356b840ed34ec89e50b31f8ecf86156abd5908..0000000000000000000000000000000000000000 --- a/os2/ChangeLog.os2 +++ /dev/null @@ -1,56 +0,0 @@ - - -2005/01/01 - - removed references to ISAM and MERGE - -2002/05/02 - - now libinit is automatically called on client dll startup - -2002/01/27 - - fixed console output for get_password - -2002/01/20 - - back-ported fix for fulltext indexes (wrong report by myisamchk) - -2001/11/21 - - MySQL 3.32.42 build 3 released. - -2001/11/19 - - got GNU Readline to compile with VAC++, now console has a working - history. - -2001/11/10 - - fixed file locking on non-JFS disks; DosSetFileLocksL does not - support ranges > 2GB on non-JFS disks. - -2001/09/16 - - fixed creation directory of temporary files - - enabled cached list file for deleting temp open files - -2001/09/10 - - Build source 3.23.42, released - -2001/09/08 - - fixed file api - -2001/06/12 - - fixed support for > 2GB file size, needs also DosOpenL - - mixed 64bit/32bit file size support, dinamic loading of - 64bit API. - -2001/06/03 - - added support for > 2GB file size - -2001/06/02 - - fixed file locking code - -2001/05/29 - - 3.23.38 build - -2001/05/20 - - rint fix - - isam O_RDONLY table handled fix - -2001/05/19 - - new TLS code, fixed parser crashes and many other problems. - - fixed pthread_cond_timedwait, now handle manager expires diff --git a/os2/Makefile.am b/os2/Makefile.am deleted file mode 100644 index 9feab6d1b2cd7d23e22dd7196b27ffea755bda31..0000000000000000000000000000000000000000 --- a/os2/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (C) 2002 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Process this file with automake to create Makefile.in - -EXTRA_DIST = BldLevel.RES BldLevel.cmd BldLevel.rc \ - BldLevelInf.cmd ChangeLog.os2 MySQL-Client.icc \ - MySQL-Opt.icc MySQL-Source.icc MySQL-Sql.icc \ - MySQL-Sql.irs MySQL-Util.icc MySQL-Util.irs \ - ReadMe.txt build-all.cmd mysql-inf.wis \ - mysql.wis mysqlalt.wis rint.cmd rint.obj rint.s -SUBDIRS = include - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/os2/MySQL-Client.icc b/os2/MySQL-Client.icc deleted file mode 100644 index bc614c1c723ce746e331b06843b17db64a13f525..0000000000000000000000000000000000000000 --- a/os2/MySQL-Client.icc +++ /dev/null @@ -1,122 +0,0 @@ -// disable code inlining when building static libs -InlineCode = "no" - -// include common options -include "MySQL-Opt.icc" -include "MySQL-Source.icc" - -option ProjectOptions = MySQLOptions -{ - - option file(genobject, "..\\OBJ\\ZLIB\\") - { - target "..\\bin\\mysql.dll" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source zlib - if debug_build { - source type('cpp') dbug - } - source type('cpp') my_sys - source type('cpp') my_sys_cli - source type('cpp') strings - source type('cpp') mysqlclientlib - source type('cpp') '..\libmysql\dll.c' - source BldLevelInfo - } - } - - option file(genobject, "..\\OBJ\\READLINE\\") - { - target "..\\bin\\mysql.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\client\\mysql.cc" - source BldLevelInfo - option define("HAVE_STRING_H", ), define("HAVE_CONFIG_H", ) - { - source GnuReadline - } - } - } - - target "..\\bin\\mysqladmin.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\client\\mysqladmin.c" - source BldLevelInfo - } - - target "..\\bin\\mysqldump.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\client\\mysqldump.c" - source BldLevelInfo - } - - target "..\\bin\\mysqlshow.exe" - { - // target source files - source type('cpp') "..\\client\\mysqlshow.c" - source BldLevelInfo - } - - target "..\\bin\\mysqlimport.exe" - { - // target source files - source type('cpp') "..\\client\\mysqlimport.c" - source BldLevelInfo - } - - target "..\\bin\\mysqltest.exe" - { - source type('cpp') "..\\client\\mysqltest.c" - source BldLevelInfo - } - - target "..\\bin\\mysqlbinlog.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\client\\mysqlbinlog.cc" - source BldLevelInfo - } - - target "..\\bin\\mysqlcheck.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - - // target source files - source type('cpp') "..\\client\\mysqlcheck.c" - source BldLevelInfo - } - -} diff --git a/os2/MySQL-Opt.icc b/os2/MySQL-Opt.icc deleted file mode 100644 index 56e89057862c9a5bad021bc89e487f5bc7027186..0000000000000000000000000000000000000000 --- a/os2/MySQL-Opt.icc +++ /dev/null @@ -1,59 +0,0 @@ -// set to 1 to enable debug code -debug_build = 0 - -// set to zlib relative directory name -zlib_dir = '../../zlib-1.1.4' - -// common options -option BaseOptions = link(defaultlibsname, "tcpip32.lib") - , link(libsearchpath, "..\\lib\\") - , link(libsearchpath, "..\\bin\\") - , link(pmtype, vio) - , link(padding, no) - , link(linkwithmultithreadlib, "yes") - , link(linkwithsharedlib, "no") - , link(stack, 131072, 131072) - , gen(initauto, "yes") - , define("__MT__", ) - , define("HAVE_BSD_SIGNALS", ) - , define("INCL_DOS", ) - , define("INCL_DOSERRORS", ) - , define("INCL_LONGLONG", ) - , define("OS2", ) - , define("USE_TLS", ) - , lang(signedchars, yes) - , incl(searchpath, "..") - , incl(searchpath, "include") - , incl(searchpath, "..\\include") - , incl(searchpath, "..\\my_sys") - , incl(searchpath, "..\\regex") - , incl(searchpath, "..\\sql") - , incl(searchpath, zlib_dir) - , incl(searchpath, "..\\..\\ufc") - , incl(searchpath, "..\\os2") - -option ReleaseOptions = link(debug, "no") - , define("DBUG_OFF", ) - , gen(arch, "pentium") - , opt(tune, "pentium2") - , opt(level, "0") - , opt(stackchaining, no) - , opt(size, yes) - , opt(autoinline, InlineCode) - , opt(inline, InlineCode) - , opt(schedule, no) - -option DebugOptions = link(debug, "yes") - , gen(debug, "yes") - , define("DBUG_ON", ) - - -if debug_build { - -option MySQLOptions = BaseOptions, DebugOptions - -} else { - -option MySQLOptions = BaseOptions, ReleaseOptions - -} diff --git a/os2/MySQL-Source.icc b/os2/MySQL-Source.icc deleted file mode 100644 index 342cb6c96b9a0072abf4b798151879b7e714e99c..0000000000000000000000000000000000000000 --- a/os2/MySQL-Source.icc +++ /dev/null @@ -1,324 +0,0 @@ -group client_global_pch = - 'os2.h', - 'assert.h', 'direct.h', 'errno.h', 'nerrno.h', - 'limits.h', 'io.h', 'math.h', - 'stdio.h', 'stdlib.h', 'stddef.h', - 'sys/stat.h', 'sys/types.h', 'sys/time.h', - 'types.h', 'string.h', 'stdarg.h', - - 'my_base.h', 'config-os2.h', 'my_dir.h', - 'global.h', 'thr_alarm.h', 'm_string.h', - 'mysql.h', 'zconf.h', 'zlib.h', 'mysys_err.h', - 'm_ctype.h', 'mysqld_error.h', - 'my_list.h', 'my_sys.h', 'my_net.h', - 'myisam.h', 'myisampack.h', '.\myisam\myisamdef.h', - '.\regex\my_regex.h' - -group server_global_pch = - 'os2.h', - 'string.h', 'assert.h', 'share.h', 'stdarg.h', 'stdio.h', - 'stdlib.h', 'stddef.h', 'math.h', 'io.h', 'limits.h', - 'process.h', 'errno.h', 'nerrno.h', 'sys/types.h', - 'sys/time.h', 'sys/stat.h', 'sys/param.h', 'sys/ioccom.h', - 'sys/filio.h', 'sys/sockio.h', 'sys/ioctlos2.h','sys/ioctl.h', 'types.h', - 'sys/utime.h', 'sys/select.h', 'sys/un.h', - 'netinet/in_systm.h', 'netinet/tcp.h', - - 'global.h', 'my_base.h', 'config-os2.h', - 'my_dir.h', 'my_sys.h', 'mysql.h', - 'my_bitmap.h', 'violite.h', 'mysql_priv.h', - 'm_string.h', 'm_ctype.h', - 'myisam.h', 'myisampack.h', '.\myisam\myisamdef.h', - 'sql_string.h', 'item.h', 'unireg.h', - 'field.h', 'sql_lex.h', 'sql_list.h', 'sql_repl.h', - 'md5.h', 'sql_acl.h', 'slave.h', - 'ha_myisam.h', 'procedure.h', 'sql_select.h', - 'errmsg.h', 't_ctype.h', 'direct.h', - 'mysys_err.h', 'zconf.h', 'zlib.h', - 'my_tree.h', '..\mysys\my_static.h', 'netdb.h', - 'thr_alarm.h', 'heap.h', '..\myisam\fulltext.h', - '..\myisam\ftdefs.h', 'myisammrg.h', - '.\regex\my_regex.h' - -group server_pch = - 'ha_heap.h', 'ha_myisammrg.h', 'opt_ft.h', - 'hash_filo.h', 'mini_client.h', 'sql_repl.h', - 'sql_analyse.h', 'item_create.h', '..\mysys\mysys_priv.h' - -group mysqlclientlib = - "..\\client\\readline.cc", - "..\\client\\sql_string.cc", - "..\\client\\completion_hash.cc", - "..\\libmysql\\libmysql.c", - "..\\libmysql\\errmsg.c", - "..\\libmysql\\get_password.c", - "..\\libmysql\\net.c", - "..\\libmysql\\password.c", - "..\\libmysql\\violite.c" - -group zlib = - zlib_dir "/compress.c", - zlib_dir "/crc32.c", - zlib_dir "/deflate.c", - zlib_dir "/gzio.c", - zlib_dir "/infblock.c", - zlib_dir "/infcodes.c", - zlib_dir "/inffast.c", - zlib_dir "/inflate.c", - zlib_dir "/inftrees.c", - zlib_dir "/infutil.c", - zlib_dir "/trees.c", - zlib_dir "/uncompr.c", - zlib_dir "/zutil.c", - zlib_dir "/adler32.c" - -group ufc = - "..\\..\\ufc\\crypt.c", - "..\\..\\ufc\\crypt_util.c", - "..\\..\\ufc\\crypt-entry.c" - -group sql = - "..\\sql\\convert.cc", - "..\\sql\\derror.cc", - "..\\sql\\field.cc", - "..\\sql\\field_conv.cc", - "..\\sql\\filesort.cc", - "..\\sql\\ha_heap.cc", - "..\\sql\\ha_myisam.cc", - "..\\sql\\ha_myisammrg.cc", - "..\\sql\\handler.cc", - "..\\sql\\hash_filo.cc", - "..\\sql\\hostname.cc", - "..\\sql\\init.cc", - "..\\sql\\item.cc", - "..\\sql\\item_buff.cc", - "..\\sql\\item_cmpfunc.cc", - "..\\sql\\item_create.cc", - "..\\sql\\item_func.cc", - "..\\sql\\item_strfunc.cc", - "..\\sql\\item_sum.cc", - "..\\sql\\item_timefunc.cc", - "..\\sql\\item_uniq.cc", - "..\\sql\\key.cc", - "..\\sql\\lock.cc", - "..\\sql\\log.cc", - "..\\sql\\log_event.cc", - "..\\sql\\md5.c", - "..\\sql\\mf_iocache.cc", - "..\\sql\\mini_client.cc", - "..\\sql\\mini_client_errors.c", - "..\\sql\\mysqld.cc", - "..\\sql\\net_pkg.cc", - "..\\sql\\net_serv.cc", - "..\\sql\\opt_ft.cc", - "..\\sql\\opt_range.cc", - "..\\sql\\OPT_SUM.cc", - "..\\sql\\password.c", - "..\\sql\\procedure.cc", - "..\\sql\\records.cc", - "..\\sql\\slave.cc", - "..\\sql\\sql_acl.cc", - "..\\sql\\sql_analyse.cc", - "..\\sql\\sql_base.cc", - "..\\sql\\sql_cache.cc", - "..\\sql\\sql_class.cc", - "..\\sql\\sql_crypt.cc", - "..\\sql\\sql_db.cc", - "..\\sql\\sql_do.cc", - "..\\sql\\sql_delete.cc", - "..\\sql\\sql_insert.cc", - "..\\sql\\sql_lex.cc", - "..\\sql\\sql_list.cc", - "..\\sql\\sql_load.cc", - "..\\sql\\sql_manager.cc", - "..\\sql\\sql_map.cc", - "..\\sql\\sql_parse.cc", - "..\\sql\\sql_rename.cc", - "..\\sql\\sql_repl.cc", - "..\\sql\\sql_select.cc", - "..\\sql\\sql_show.cc", - "..\\sql\\sql_string.cc", - "..\\sql\\sql_table.cc", - "..\\sql\\sql_test.cc", - "..\\sql\\sql_update.cc", - "..\\sql\\sql_udf.cc", - "..\\sql\\sql_yacc.c", - "..\\sql\\table.cc", - "..\\sql\\thr_malloc.cc", - "..\\sql\\time.cc", - "..\\sql\\unireg.cc", - "..\\sql\\violite.c" - -group strings = - "..\\strings\\bchange.c", - "..\\strings\\bmove.c", - "..\\strings\\bmove_upp.c", - "..\\strings\\ctype-big5.c", - "..\\strings\\ctype-czech.c", - "..\\strings\\ctype-euc_kr.c", - "..\\strings\\ctype-gb2312.c", - "..\\strings\\ctype-gbk.c", - "..\\strings\\ctype-sjis.c", - "..\\strings\\ctype-tis620.c", - "..\\strings\\ctype-ujis.c", - "..\\strings\\ctype.c", - "..\\strings\\int2str.c", - "..\\strings\\is_prefix.c", - "..\\strings\\llstr.c", - "..\\strings\\longlong2str.c", - "..\\strings\\str2int.c", - "..\\strings\\strappend.c", - "..\\strings\\strcend.c", - "..\\strings\\strcont.c", - "..\\strings\\strend.c", - "..\\strings\\strfill.c", - "..\\strings\\strinstr.c", - "..\\strings\\strmake.c", - "..\\strings\\strmov.c", - "..\\strings\\strnlen.c", - "..\\strings\\strnmov.c", - "..\\strings\\strtoull.c", - "..\\strings\\strxmov.c", - "..\\strings\\strxnmov.c" - -/* -*/ - - group heap = "..\\heap\\hp_block.c", "..\\heap\\hp_clear.c", - "..\\heap\\hp_close.c", "..\\heap\\hp_create.c", "..\\heap\\hp_delete.c", - "..\\heap\\hp_extra.c", "..\\heap\\hp_hash.c", - "..\\heap\\hp_info.c", "..\\heap\\hp_open.c", - "..\\heap\\hp_panic.c", "..\\heap\\hp_rename.c", - "..\\heap\\hp_rfirst.c", "..\\heap\\hp_rkey.c", - "..\\heap\\hp_rlast.c", "..\\heap\\hp_rnext.c", - "..\\heap\\hp_rprev.c", "..\\heap\\hp_rrnd.c", - "..\\heap\\hp_rsame.c", "..\\heap\\hp_scan.c", - "..\\heap\\hp_static.c", "..\\heap\\hp_update.c", - "..\\heap\\hp_write.c", "..\\heap\\_check.c", "..\\heap\\_rectest.c" - - - group myisammrg = "..\\myisammrg\\myrg_close.c", - "..\\myisammrg\\myrg_create.c", "..\\myisammrg\\myrg_delete.c", - "..\\myisammrg\\myrg_extra.c", "..\\myisammrg\\myrg_info.c", - "..\\myisammrg\\myrg_locking.c", - "..\\myisammrg\\myrg_open.c", "..\\myisammrg\\myrg_panic.c", - "..\\myisammrg\\myrg_queue.c", - "..\\myisammrg\\myrg_rfirst.c", "..\\myisammrg\\myrg_rkey.c", - "..\\myisammrg\\myrg_rlast.c", "..\\myisammrg\\myrg_rnext.c", - "..\\myisammrg\\myrg_rprev.c", "..\\myisammrg\\myrg_rrnd.c", - "..\\myisammrg\\myrg_rsame.c", - "..\\myisammrg\\myrg_static.c", - "..\\myisammrg\\myrg_update.c" - - group my_sys = "..\\mysys\\array.c", "..\\mysys\\charset.c", - "..\\mysys\\checksum.c", "..\\mysys\\default.c", "..\\mysys\\errors.c", - "..\\mysys\\getopt.c", "..\\mysys\\getopt1.c", - "..\\mysys\\getvar.c", "..\\mysys\\hash.c", "..\\mysys\\list.c", - "..\\mysys\\mf_brkhant.c", "..\\mysys\\mf_cache.c", - "..\\mysys\\mf_casecnv.c", "..\\mysys\\mf_dirname.c", - "..\\mysys\\mf_fn_ext.c", "..\\mysys\\mf_format.c", - "..\\mysys\\mf_getdate.c", - "..\\mysys\\mf_iocache2.c", "..\\mysys\\mf_keycache.c", - "..\\mysys\\mf_loadpath.c", "..\\mysys\\mf_pack.c", - "..\\mysys\\mf_pack2.c", "..\\mysys\\mf_path.c", - "..\\mysys\\mf_qsort2.c", - //"..\\mysys\\mf_qsort.c", - "..\\mysys\\mf_radix.c", "..\\mysys\\mf_same.c", - "..\\mysys\\mf_sort.c", "..\\mysys\\mf_soundex.c", - "..\\mysys\\mf_stripp.c", "..\\mysys\\mf_tempfile.c", - "..\\mysys\\mf_unixpath.c", "..\\mysys\\mf_wcomp.c", - "..\\mysys\\mf_wfile.c", "..\\mysys\\mulalloc.c", - "..\\mysys\\my_alarm.c", "..\\mysys\\my_alloc.c", - "..\\mysys\\my_append.c", "..\\mysys\\my_bitmap.c", - "..\\mysys\\my_chsize.c", "..\\mysys\\my_clock.c", - "..\\mysys\\my_compress.c", "..\\mysys\\my_copy.c", - "..\\mysys\\my_create.c", "..\\mysys\\my_delete.c", - "..\\mysys\\my_div.c", "..\\mysys\\my_error.c", - "..\\mysys\\my_fopen.c", "..\\mysys\\my_fstream.c", - "..\\mysys\\my_getwd.c", "..\\mysys\\my_init.c", - "..\\mysys\\my_lib.c", "..\\mysys\\my_lock.c", - "..\\mysys\\my_lockmem.c", "..\\mysys\\my_lread.c", - "..\\mysys\\my_lwrite.c", "..\\mysys\\my_malloc.c", - "..\\mysys\\my_messnc.c", "..\\mysys\\my_mkdir.c", - "..\\mysys\\my_net.c", "..\\mysys\\my_once.c", - "..\\mysys\\my_open.c", - "..\\mysys\\my_os2cond.c", - "..\\mysys\\my_os2dlfcn.c", - "..\\mysys\\my_os2dirsrch.c", - "..\\mysys\\my_os2mutex.c", "..\\mysys\\my_os2thread.c", - "..\\mysys\\my_os2tls.c", - "..\\mysys\\my_os2file64.c", - "..\\mysys\\my_pread.c", "..\\mysys\\my_pthread.c", - "..\\mysys\\my_quick.c", "..\\mysys\\my_read.c", - "..\\mysys\\my_realloc.c", "..\\mysys\\my_redel.c", - "..\\mysys\\my_rename.c", "..\\mysys\\my_seek.c", - "..\\mysys\\my_static.c", "..\\mysys\\my_tempnam.c", - "..\\mysys\\my_thr_init.c", "..\\mysys\\my_vsnprintf.c", - "..\\mysys\\my_write.c", "..\\mysys\\ptr_cmp.c", - "..\\mysys\\queues.c", "..\\mysys\\raid.cc", - //"..\\mysys\\safemalloc.c", - "..\\mysys\\string.c", - "..\\mysys\\thr_alarm.c", - "..\\mysys\\thr_mutex.c", "..\\mysys\\thr_rwlock.c", - "..\\mysys\\tree.c", "..\\mysys\\typelib.c" - - group my_sys_cli = "..\\mysys\\mf_iocache.c" - group my_sys_sql = "..\\mysys\\thr_lock.c" - - group myisam = "..\\myisam\\ft_parser.c", - "..\\myisam\\ft_search.c", "..\\myisam\\ft_static.c", - "..\\myisam\\ft_stopwords.c", "..\\myisam\\ft_update.c", - "..\\myisam\\mi_cache.c", "..\\myisam\\mi_changed.c", - //"..\\myisam\\mi_check.c", - "..\\myisam\\mi_checksum.c", - "..\\myisam\\mi_close.c", "..\\myisam\\mi_create.c", - "..\\myisam\\mi_dbug.c", "..\\myisam\\mi_delete.c", - "..\\myisam\\mi_delete_all.c", "..\\myisam\\mi_delete_table.c", - "..\\myisam\\mi_dynrec.c", "..\\myisam\\mi_extra.c", - //"..\\myisam\\mi_error.c", - "..\\myisam\\mi_info.c", "..\\myisam\\mi_key.c", - "..\\myisam\\mi_locking.c", "..\\myisam\\mi_log.c", - "..\\myisam\\mi_open.c", "..\\myisam\\mi_packrec.c", - "..\\myisam\\mi_page.c", "..\\myisam\\mi_panic.c", - "..\\myisam\\mi_range.c", "..\\myisam\\mi_rename.c", - "..\\myisam\\mi_rfirst.c", "..\\myisam\\mi_rkey.c", - "..\\myisam\\mi_rlast.c", "..\\myisam\\mi_rnext.c", - "..\\myisam\\mi_rnext_same.c", "..\\myisam\\mi_rprev.c", - "..\\myisam\\mi_rrnd.c", "..\\myisam\\mi_rsame.c", - "..\\myisam\\mi_rsamepos.c", "..\\myisam\\mi_scan.c", - "..\\myisam\\mi_search.c", "..\\myisam\\mi_static.c", - "..\\myisam\\mi_statrec.c", "..\\myisam\\mi_unique.c", - "..\\myisam\\mi_update.c", "..\\myisam\\mi_write.c" - //"..\\myisam\\sort.c" - - group dbug = "..\\dbug\\dbug.c", "..\\dbug\\factorial.c", "..\\dbug\\sanity.c" - - group regex = "..\\regex\\regcomp.c", "..\\regex\\regerror.c", - "..\\regex\\regexec.c", "..\\regex\\regfree.c", "..\\regex\\reginit.c" - - group BldLevelInfo = 'os2\BldLevel.rc' - - group GnuReadline = - "..\\readline\\bind.c", - "..\\readline\\callback.c", - "..\\readline\\complete.c", - "..\\readline\\display.c", - "..\\readline\\funmap.c", - "..\\readline\\histexpand.c", "..\\readline\\histfile.c", - "..\\readline\\history.c", "..\\readline\\histsearch.c", - "..\\readline\\input.c", "..\\readline\\isearch.c", - "..\\readline\\keymaps.c", - "..\\readline\\kill.c", - "..\\readline\\macro.c", - "..\\readline\\nls.c", "..\\readline\\parens.c", - "..\\readline\\readline.c", - "..\\readline\\rltty.c", - "..\\readline\\search.c", - "..\\readline\\shell.c", - "..\\readline\\signals.c", - "..\\readline\\terminal.c", - "..\\readline\\tilde.c", - "..\\readline\\undo.c", - "..\\readline\\util.c", - "..\\readline\\vi_mode.c", - "..\\readline\\xmalloc.c" diff --git a/os2/MySQL-Sql.icc b/os2/MySQL-Sql.icc deleted file mode 100644 index 7c8c61fe7de145e0ace0e68238c1eb6e16d6aa80..0000000000000000000000000000000000000000 --- a/os2/MySQL-Sql.icc +++ /dev/null @@ -1,44 +0,0 @@ -// disable code inlining when building static libs -InlineCode = "no" - -// include common options -include "MySQL-Opt.icc" -include "MySQL-Source.icc" - -run before sources('..\sql\sql_yacc.yy') targets('..\sql\sql_yacc.c') - 'bison -y -d -o ..\sql\sql_yacc.c ..\sql\sql_yacc.yy' - -option ProjectOptions = MySQLOptions - , define( "MYSQL_SERVER", "") -{ - - option file(genobject, "..\\OBJ\\ZLIB\\") - { - target "..\\bin\\mysqld.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') server_global_pch - } - source type('cpp') server_pch - - // target source files - source "rint.obj" - source zlib, ufc, regex, 'strings\bmove_upp.c' - if debug_build { - source type('cpp') dbug - } - source type('cpp') heap - source type('cpp') myisam - source type('cpp') myisammrg - source type('cpp') my_sys - source type('cpp') my_sys_sql - source type('cpp') strings - source type('cpp') sql, - "..\\myisam\\mi_check.c", - "..\\myisam\\sort.c" - source BldLevelInfo - } - } -} diff --git a/os2/MySQL-Sql.irs b/os2/MySQL-Sql.irs deleted file mode 100644 index b651a678c915164d6b6e8df5a12a3676d789f161..0000000000000000000000000000000000000000 --- a/os2/MySQL-Sql.irs +++ /dev/null @@ -1,7 +0,0 @@ -31 Run Specifications: Version 1.1 -40 E:\rd\MySQL\vacpp-3.23.50\bin\mysqld.exe -1 -0 -0 -5 Local -0 diff --git a/os2/MySQL-Util.icc b/os2/MySQL-Util.icc deleted file mode 100644 index 8eaee41b6a2ccb96b0e5764cb75f7fff35f547b0..0000000000000000000000000000000000000000 --- a/os2/MySQL-Util.icc +++ /dev/null @@ -1,171 +0,0 @@ -// disable code inlining when building static libs -InlineCode = "no" - -// include common options -include "MySQL-Opt.icc" -include "MySQL-Source.icc" - -option ProjectOptions = MySQLOptions - , link(defaultlibsname, "mysql.lib") -{ - - option file(genobject, "..\\OBJ\\ZLIB\\") - ,link(exportAll) - { - target "..\\bin\\mysqlu.dll" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source zlib, ufc, regex, 'strings\bmove_upp.c' - if debug_build { - source type('cpp') dbug - } - source type('cpp') heap - source type('cpp') myisam - source type('cpp') myisammrg - source type('cpp') my_sys - source type('cpp') my_sys_cli - source type('cpp') my_sys_sql - source type('cpp') strings - source type('cpp') '..\libmysql\dll.c' - source BldLevelInfo - } - } - - - target "..\\bin\\myisamchk.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\myisam\\myisamchk.c", - "..\\myisam\\mi_check.c", - "..\\myisam\\sort.c" - source BldLevelInfo - } - - target "..\\bin\\myisamlog.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\myisam\\myisamlog.c" - source BldLevelInfo - } - - target "..\\bin\\myisampack.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - // target source files - source type('cpp') "..\\myisam\\myisampack.c" - source BldLevelInfo - } - - target "..\\bin\\test\\comp_err.exe" - { - // target source files - source type('cpp') "..\\extra\\comp_err.c" - } - - target "..\\bin\\gen_lex_hash.exe" - { - // target source files - source type('cpp') "..\\sql\\gen_lex_hash.cc" - } - - target "..\\bin\\test\\mi_test1.exe" - { - // target source files - source type('cpp') "..\\myisam\\mi_test1.c" - } - target "..\\bin\\test\\mi_test2.exe" - { - // target source files - source type('cpp') "..\\myisam\\mi_test2.c" - } - target "..\\bin\\test\\ft_eval.exe" - { - // target source files - source type('cpp') "..\\myisam\\ft_eval.c" - } - target "..\\bin\\test\\ft_test1.exe" - { - // target source files - source type('cpp') "..\\myisam\\ft_test1.c" - } -/* - target "..\\bin\\test\\testhash.exe" - { - // target source files - source type('cpp') "..\\mysys\\testhash.c" - } -*/ - target "..\\bin\\test\\test_charset.exe" - { - // target source files - source type('cpp') "..\\mysys\\test_charset.c" - } - - target "..\\bin\\test\\hp_test1.exe" - { - // target source files - source type('cpp') "..\\heap\\hp_test1.c" - } - target "..\\bin\\test\\hp_test2.exe" - { - // target source files - source type('cpp') "..\\heap\\hp_test2.c" - } - -/* - option define( "MAIN", "") - { - target "..\\bin\\test\\thr_lock.exe" - { - // target source files - source type('cpp') "..\\mysys\\thr_lock.c" - } - } -*/ - - target "..\\bin\\test\\insert_test.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - source type('cpp') "..\\client\\insert_test.c" - } - target "..\\bin\\test\\select_test.exe" - { - source type('cpp') "..\\client\\select_test.c" - } - target "..\\bin\\test\\thread_test.exe" - { - // optimized precompiled headers - option macros('global', 'yes') - { - source type('cpp') client_global_pch - } - source type('cpp') "..\\client\\thread_test.c" - } - -} - -run after sources('..\bin\gen_lex_hash.exe') targets('..\sql\lex_hash.h') - 'cd ..\bin & ..\bin\gen_lex_hash.exe > ..\sql\lex_hash.h' diff --git a/os2/MySQL-Util.irs b/os2/MySQL-Util.irs deleted file mode 100644 index 183aa13ba277a7ff34e9ea7999c4430048326be6..0000000000000000000000000000000000000000 --- a/os2/MySQL-Util.irs +++ /dev/null @@ -1,3271 +0,0 @@ -31 Run Specifications: Version 1.1 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamchk.exe -1 -0 -0 -5 Local -0 -43 E:\rd\MySQL\vacpp-3.23.50\bin\myisamlog.exe -1 -0 -0 -5 Local -0 -44 E:\rd\MySQL\vacpp-3.23.50\bin\myisampack.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\comp_err.exe -1 -0 -0 -5 Local -0 -46 E:\rd\MySQL\vacpp-3.23.50\bin\gen_lex_hash.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\is_test1.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\is_test2.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\mi_test1.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\mi_test2.exe -1 -0 -0 -5 Local -0 -46 E:\rd\MySQL\vacpp-3.23.50\bin\test\ft_eval.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\ft_test1.exe -1 -0 -0 -5 Local -0 -51 E:\rd\MySQL\vacpp-3.23.50\bin\test\test_charset.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\hp_test1.exe -1 -0 -0 -5 Local -0 -47 E:\rd\MySQL\vacpp-3.23.50\bin\test\hp_test2.exe -1 -0 -0 -5 Local -0 -50 E:\rd\MySQL\vacpp-3.23.50\bin\test\insert_test.exe -1 -0 -0 -5 Local -0 -50 E:\rd\MySQL\vacpp-3.23.50\bin\test\select_test.exe -1 -0 -0 -5 Local -0 -50 E:\rd\MySQL\vacpp-3.23.50\bin\test\thread_test.exe -1 -0 -0 -5 Local -0 diff --git a/os2/ReadMe.txt b/os2/ReadMe.txt deleted file mode 100644 index 073c65290c081349b84ac171efc49da4b97064f9..0000000000000000000000000000000000000000 --- a/os2/ReadMe.txt +++ /dev/null @@ -1,205 +0,0 @@ -==================================================== - -Contents --------- -Welcome to the latest port of MySQL for OS/2 and eComStation. - -Modules included in this build: - - protocol data compression - - perl BDB/BDI support (not in this package) - - Library and header files for C/CPP developers included - -This package has been built using IBM VAC++ 4.0 - -The MySQL server is distributed under the GPL license. Please refer to -the file COPYING for the license information. - -The MySQL client library is distributed under the LGPL license. -Please refer to the file COPYING for the license information. - -Most of the MySQL clients are distributed under the GPL license, but -some files may be in the public domain. - -The latest information about MySQL can be found at: http://www.mysql.com - -To get the latest information about this port please subscribe to our -newsgroup/mailinglist mysql2 at groups.yahoo.com. - -To see what MySQL can do, take a look at the features section in the -manual. For future plans see the TODO appendix in the manual. - -New features/bug fixes history is in the news appendix in the manual. - -For the currently known bugs/misfeatures (known errors) see the bugs -appendix in the manual. The OS/2 section contains notes that are -specific to the MySQL OS/2 and eComStation version. - -Please note that MySQL is a constantly moving target. New builds for -Linux are made available every week. This port may therefore be a few -minor versions after the latest Linux/Win32 builds but its generally -more stable than the "latest and greates" port. - -MySQL is brought to you by: TcX DataKonsult AB & MySQL Finland AB - -This port is brought to you by: - -Yuri Dario <mc6530@mclink.it>, development, porting -Timo Maier <tam@gmx.de>, documentation, testing -John M Alfredsson <jma@jmast.se>, documentation, testing - - -Installation ------------- -Prerequisite: - -- OS/2 Warp 3 with FP ?? or later, - OS/2 Warp 4 with FP ?? or later, - OS/2 Warp Server for e-Business, - eComStation 1.0 (prev 1/2 OK) -- TCPIP 4.x installed (requires 32-bit tcpip stack) -- WarpIN installer 0.9.16 (ftp://ftp.os2.org/xworkplace/warpin-0-9-16.exe) - -Note: probably some fixpak level is required on both Warp3&Warp4 to - support >2GB file sizes. - -Save the installation archives into a temporary folder and double click -on the main package; otherwise you can drop the mysql package in your -WarpIN object or type - - WARPIN MYSQL-3-23-??-B1.WPI - -from the command line. -The configuration file for MySQL is named my.cnf and it is placed into -your %ETC% directory. Usually it located into the boot driver under - - x:\MPTN\ETC - -If the installation detect an existing configuration file, it will not be -overwritten, keeping you settings; see x:\...\mysql\data\my.cnf.sample -for new settings. This file is not deleted by uninstall process. -Startup options for MySQL daemon could be added there. - -As default, client connections uses data compression: if you don't like it, -remove the following from your %ETC%\my.cnf - - [client] - compress - -The server switches automatically compression mode on client request. - -This release comes with DLL client library MYSQL.DLL: it is installed by -default into mysql\bin together with client applications. Copy it to your -x:\OS2\DLL or another directory in your LIBPATH to run command line -utilities from every place. - -See documentation for manuals installation. - - -New features ------------- -With build 4, the sql daemon supports a new option - - --preload-client-dll - -that enables preloading of mysql.dll and mysqlu.dll directly by the -server. This way, client programs doesn't need to have the dll's in -the current libpath. - - -Documentation -------------- -Documentation is provided in separate files. You can use either -the PDF documentation (requires Adobe Acrobat Reader) or the -INF documentation (requires OS/2 view or NewView). - -The PDF documentation is found in - - MYSQL-3-23-??-PDF.WPI - -and the INF documentation is found in - - MYSQL-3-23-28-INF.WPI - -The latest documentation in other formats can always be downloaded from -http://www.mysql.com. However this documentation may not fully apply to -this port. -The INF documentation could contain errors because of semi-automatic -translation from texi original. Also it is not updated as the latest PDF -manual (sorry, but conversion from texi to ipf requires quite a lot of -work). -To install the manuals, their WPI must be placed in the same directory -of the main WPI package: once the main package installation is started, -new install options will be available (inf or pdf manual). - - -Support -------- -Since MySQL is a OpenSource freeware product there are no -formal support options available. - -Please subscribe to mysql2 at www.yahoogroups.com to get in contact -with other users using this port. - -http://www.yahoogroups.com/group/mysql2 - -This newsgroup/mailinglist is the official "home" of this port. - - -Donations ---------- -Since this software is ported for free, donations are welcome! -You can get also an extended support, which is not free and subject to -custom rates. -Ask in the mailing list for details. -At least, a post card is welcome! - - -Know problems -------------- -alter_table.test and show_check are failing, reporting a different status -message: actually seems only a different text, no bugs in table checking. - - -Apache/2 + PHP --------------- -To avoid problems with different socket when you use PHP and Apache -webserver, get the PHP4 module from the Apache Server for OS/2 homepage -http://silk.apana.org.au/apache/ - - -Developing MySQL ----------------- -If you want to help us develop MySQL for OS2/eComStation please join -the mysql2 mailinglist at www.egroups.com and ask for help to set up -your environment! - -All questions that are specific to the OS2/eComStation version should -be posted to this list! Please remember to include all relevant -information that may help solve your problem. - - -Building MySQL (VAC++ 4) ------------------------- -Place zlib-1.1.4 at the same level of mysql-3.23.50 -Place ufc lib at the same level of mysql-3.23.50 - -Add the following files: - include\config-os2.h - include\mysql_version.h - mysys\my_os2*.* -Get the following files from Windows source distribution: - strings\ctype_extra_sources.c - libmysql\dll.c - -Apply file and patches found in the src\ directory (if exists). -Create the following subdirectories - - bin\ - bin\test - lib\ - obj\ - obj\zlib - -Build os2\MySQL-Client.icc project first. -Then os2\MySQL-Util.icc; last is os2\MySQL-Sql.icc - diff --git a/os2/build-all.cmd b/os2/build-all.cmd deleted file mode 100644 index 23558946c7927b197ada89c508dbe6209fae0166..0000000000000000000000000000000000000000 --- a/os2/build-all.cmd +++ /dev/null @@ -1,10 +0,0 @@ - -mkdir ..\bin -mkdir ..\bin\test -mkdir ..\lib -mkdir ..\obj -mkdir ..\obj\zlib - -vacbld MySQL-Client.icc -showprogress=10 -showwarning >> build-all.log -vacbld MySQL-Sql.icc -showprogress=10 -showwarning >> build-all.log -vacbld MySQL-Util.icc -showprogress=10 -showwarning >> build-all.log diff --git a/os2/include/Makefile.am b/os2/include/Makefile.am deleted file mode 100644 index b0478e7c4702b69035bfc4e52464a89cf7a01fbc..0000000000000000000000000000000000000000 --- a/os2/include/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (C) 2002 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Process this file with automake to create Makefile.in - -EXTRA_DIST = config.h pwd.h sgtty.h termio.h -SUBDIRS = sys - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/os2/include/config.h b/os2/include/config.h deleted file mode 100644 index bb1e3d9bb0fa68b5bfb8cf026f056cab5c5822ce..0000000000000000000000000000000000000000 --- a/os2/include/config.h +++ /dev/null @@ -1,13 +0,0 @@ -#include <config-os2.h> -#include <types.h> - -#undef HAVE_POSIX_SIGNALS -#undef HAVE_BSD_SIGNALS -#define TERMIO_TTY_DRIVER - -#define ScreenCols() 80 -#define ScreenRows() 25 - -#define tputs(a,b,c) puts(a) -#define kbhit _kbhit -//#define _read_kbd(a, b, c) _kbhit() diff --git a/os2/include/pwd.h b/os2/include/pwd.h deleted file mode 100644 index ec283586db277000dbf5d6a3c879277286f230bc..0000000000000000000000000000000000000000 --- a/os2/include/pwd.h +++ /dev/null @@ -1 +0,0 @@ -/* dummy */ diff --git a/os2/include/sgtty.h b/os2/include/sgtty.h deleted file mode 100644 index ec283586db277000dbf5d6a3c879277286f230bc..0000000000000000000000000000000000000000 --- a/os2/include/sgtty.h +++ /dev/null @@ -1 +0,0 @@ -/* dummy */ diff --git a/os2/include/sys/Makefile.am b/os2/include/sys/Makefile.am deleted file mode 100644 index b68f968aafee0a8c820c3fd74e6cb6d324349dfb..0000000000000000000000000000000000000000 --- a/os2/include/sys/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2002 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Process this file with automake to create Makefile.in - -EXTRA_DIST = file.h - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/os2/include/sys/file.h b/os2/include/sys/file.h deleted file mode 100644 index ec283586db277000dbf5d6a3c879277286f230bc..0000000000000000000000000000000000000000 --- a/os2/include/sys/file.h +++ /dev/null @@ -1 +0,0 @@ -/* dummy */ diff --git a/os2/include/termio.h b/os2/include/termio.h deleted file mode 100644 index cad88caccf93bce9f9cb8eb572c5e20982378735..0000000000000000000000000000000000000000 --- a/os2/include/termio.h +++ /dev/null @@ -1,156 +0,0 @@ -/* sys/termio.h (emx+gcc) */ - -#ifndef _SYS_TERMIO_H -#define _SYS_TERMIO_H - -#if defined (__cplusplus) -extern "C" { -#endif - -/* Request codes */ - -#if !defined (TCGETA) -#define TCGETA 1 -#define TCSETA 2 -#define TCSETAW 3 -#define TCSETAF 4 -#define TCFLSH 5 -#define TCSBRK 6 -#define TCXONC 7 -#endif - -/* c_cc indexes */ - -#if !defined (VINTR) /* Symbols common to termio.h and termios.h */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VEOL 5 -#define VMIN 6 -#define VTIME 7 -#endif - -#define NCC 8 /* Number of the above */ - -/* c_iflag, emx ignores most of the following bits */ - -#if !defined (IGNBRK) /* Symbols common to termio.h and termios.h */ -#define IGNBRK 0x0001 -#define BRKINT 0x0002 -#define IGNPAR 0x0004 -#define PARMRK 0x0008 -#define INPCK 0x0010 -#define ISTRIP 0x0020 -#define INLCR 0x0040 -#define IGNCR 0x0080 -#define ICRNL 0x0100 -#define IUCLC 0x0200 -#define IXON 0x0400 -#define IXANY 0x0800 -#define IXOFF 0x1000 -#define IDELETE 0x8000 /* Extension (emx) */ -#endif - -/* c_oflag, emx ignores all of the following bits */ - -#if !defined (OPOST) /* Symbols common to termio.h and termios.h */ -#define OPOST 0x0001 -#endif -#define OLCUC 0x0002 -#define ONLCR 0x0004 -#define OCRNL 0x0008 -#define ONOCR 0x0010 -#define ONLRET 0x0020 -#define OFILL 0x0040 -#define OFDEL 0x0080 -#define NLDLY 0x0100 /* Mask */ -#define NL0 0x0000 -#define NL1 0x0100 -#define CRDLY 0x0600 /* Mask */ -#define CR0 0x0000 -#define CR1 0x0200 -#define CR2 0x0400 -#define CR3 0x0600 -#define TABDLY 0x1800 /* Mask */ -#define TAB0 0x0000 -#define TAB1 0x0800 -#define TAB2 0x1000 -#define TAB3 0x1800 -#define BSDLY 0x2000 /* Mask */ -#define BS0 0x0000 -#define BS1 0x2000 -#define VTDLY 0x4000 /* Mask */ -#define VT0 0x0000 -#define VT1 0x4000 -#define FFDLY 0x8000 /* Mask */ -#define FF0 0x0000 -#define FF1 0x8000 - -/* c_cflag, emx ignores all of the following bits */ - -#if !defined (CBAUD) -#define CBAUD 0x000f /* Mask */ -#endif -#if !defined (B0) /* Symbols common to termio.h and termios.h */ -#define B0 0x0000 -#define B50 0x0001 -#define B75 0x0002 -#define B110 0x0003 -#define B134 0x0004 -#define B150 0x0005 -#define B200 0x0006 -#define B300 0x0007 -#define B600 0x0008 -#define B1200 0x0009 -#define B1800 0x000a -#define B2400 0x000b -#define B4800 0x000c -#define B9600 0x000d -#define B19200 0x000e -#define B38400 0x000f -#define CSIZE 0x0030 /* Mask */ -#define CS5 0x0000 -#define CS6 0x0010 -#define CS7 0x0020 -#define CS8 0x0030 -#define CSTOPB 0x0040 -#define CREAD 0x0080 -#define PARENB 0x0100 -#define PARODD 0x0200 -#define HUPCL 0x0400 -#define CLOCAL 0x0800 -#define LOBLK 0x1000 -#endif - -/* c_lflag, emx ignores some of the following bits */ - -#if !defined (ISIG) /* Symbols common to termio.h and termios.h */ -#define ISIG 0x0001 -#define ICANON 0x0002 -#define XCASE 0x0004 -#define ECHO 0x0008 -#define ECHOE 0x0010 -#define ECHOK 0x0020 -#define ECHONL 0x0040 -#define NOFLSH 0x0080 -#define IDEFAULT 0x8000 /* Extension (emx) */ -#endif - - -struct termio -{ - unsigned int c_iflag; - unsigned int c_oflag; - unsigned int c_cflag; - unsigned int c_lflag; - unsigned int c_line; - unsigned char c_cc[NCC]; -}; - -#if defined (__cplusplus) -} -#endif - -#endif /* not _SYS_TERMIO_H */ diff --git a/os2/mysql-inf.wis b/os2/mysql-inf.wis deleted file mode 100644 index 55259567a2e7f8bd8b444e7d2456a19c3547b930..0000000000000000000000000000000000000000 --- a/os2/mysql-inf.wis +++ /dev/null @@ -1,15 +0,0 @@ -#include "mysql.ih" - -<WARPIN VERSION <$WARPIN_VERSION>> -<HEAD> -<MSG> -This is not an installable archive. - -Please download and install the main archive: - - mysql-<$MySQL-Ver>-bld1.wpi - -</MSG> -</HEAD> -</WARPIN> - \ No newline at end of file diff --git a/os2/mysql.wis b/os2/mysql.wis deleted file mode 100644 index 50207a0c499d7ced452fc22111fb760385ce75f8..0000000000000000000000000000000000000000 --- a/os2/mysql.wis +++ /dev/null @@ -1,127 +0,0 @@ -#include "mysql.ih" - -<WARPIN VERSION <$WARPIN_VERSION>> -<HEAD> - -<PCK INDEX=1 - PACKAGEID="TCX Datakonsult AB\MySQL for OS/2\SQL Database Engine\<$MySQL\Ver>" - TARGET="?:\usr\local\mysql" BASE - TITLE="SQL Database Engine" - EXECUTE="$(1)\bootstrap.cmd [bootstrap]" - CONFIG.SYS="SET EMXOPT=-h1024 | UNIQUE(-h)" - CREATEOBJECT="WPFolder|MySQL <$MySQL.Ver>|<WP_DESKTOP>|OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>" - CREATEOBJECT="WPProgram|Console|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=$(1)\bin\mysql.exe;STARTUPDIR=$(1)\bin;ICONFILE=$(1)\bin\icons\mysql-client.ico;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_CONSOLE>;" - CREATEOBJECT="WPProgram|Start server|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=$(1)\bin\mysqld.exe;ICONFILE=$(1)\bin\icons\mysql-startserver.ico;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_START>;" - CREATEOBJECT="WPProgram|Shutdown server|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=$(1)\bin\mysqladmin.exe;STARTUPDIR=$(1)\bin;PARAMETERS=-u root shutdown;ICONFILE=$(1)\bin\icons\mysql-shutdownserver.ico;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_SHUTDOWN>;" - CREATEOBJECT="WPProgram|Readme first|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=e.exe;PARAMETERS=$(1)\ReadMe.txt;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_README>;" - SELECT - >This package will install MySQL for OS/2 SQL engine -</PCK> - -<PCK INDEX=2 - PACKAGEID="TCX Datakonsult AB\MySQL for OS/2\Developement Kit\<$MySQL\Ver>" - TARGET="?:\usr\local\mysql" - TITLE="Developement Kit" - SELECT - >This package will install MySQL for OS/2 sdk -</PCK> - -<PCK INDEX=3 - PACKAGEID="TCX Datakonsult AB\MySQL for OS/2\PDF manual\<$MySQL\Ver>" - TARGET="?:\usr\local\mysql" - TITLE="PDF manual" - EXTERNAL="mysql-<$MySQL-Ver>-pdf.wpi" - CREATEOBJECT="WPShadow|PDF Manual|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|SHADOWID=$(1)\docs\manual.pdf" - SELECT - >This package will install MySQL for OS/2 documentation -</PCK> - -<PCK INDEX=4 - PACKAGEID="TCX Datakonsult AB\MySQL for OS/2\INF manual\3\23\28" - TARGET="?:\usr\local\mysql" - TITLE="INF manual" - EXTERNAL="mysql-3-23-28-gamma-inf.wpi" - CREATEOBJECT="WPProgram|MySQL Manual|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=view.exe;PARAMETERS=$(1)\docs\manual.inf;ICONFILE=$(1)\bin\icons\mysql-manual.ico;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_INFMANUAL>;" - SELECT - >This package will install MySQL for OS/2 documentation -</PCK> - -<PCK INDEX=5 - PACKAGEID="TCX Datakonsult AB\MySQL for OS/2\Test suite\<$MySQL\Ver>" - TARGET="?:\usr\local\mysql" - TITLE="Test suite" - EXTERNAL="mysql-<$MySQL-Ver>-test.wpi" - CREATEOBJECT="WPProgram|Run MySQL Test Suite|<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_FOLDER>|EXENAME=$(5)\mysql-test\mysql-test.cmd;PARAMETERS=$(1)\docs\manual.inf;ICONFILE=$(1)\bin\icons\mysql-manual.ico;OBJECTID=<MYSQL_<$MySQL.Major>_<$MySQL.Minor>_TESTSUITE>;" - SELECT - >This package will install MySQL for OS/2 test suite -</PCK> - -</HEAD> - -<!-- Here come the different pages. They are linked by - the <NEXTBUTTON> tags, which must have a target. - Each page must have a TYPE= attribute, which tells - WarpIn what will be visible on that page. --> - -<BODY> - -<!-- page1: introduction ->> -<PAGE INDEX=1 TYPE=README> -<TEXT> -</TEXT> -<NEXTBUTTON TARGET=2>~Next</NEXTBUTTON> -<README FORMAT=HTML> - -<P>Welcome to the latest port of <B>MySQL for OS/2 and eComStation</B>. -<BR> -<P>You are about to install <B>MySQL <$MySQL.Ver></B> - -<BR> -<BR> -<P>Select "Next" to continue. - -<P>Select "Cancel" to abort installation. -</README> -</PAGE> - -<!-- show ReadMe.txt --> -<PAGE INDEX=2 TYPE=README> -<NEXTBUTTON TARGET=3>~Next</NEXTBUTTON> -<TEXT> -</TEXT> -<README FORMAT=PLAIN EXTRACTFROMPCK="1">ReadMe.txt</README> -</PAGE> - -<!-- show GPL license --> -<PAGE INDEX=3 TYPE=README> -<NEXTBUTTON TARGET=4>~I agree</NEXTBUTTON> -<TEXT> -By pressing the "I agree" button, you agree to all terms and conditions to the below licence agreement. -</TEXT> -<README FORMAT=HTML EXTRACTFROMPCK="1">license.htm</README> -</PAGE> - - -<!-- The TYPE=CONTAINER will list the packages which can be installed. --> - -<PAGE INDEX=4 TYPE=CONTAINER> -<NEXTBUTTON TARGET=5>~Next</NEXTBUTTON> -<TEXT> -Please select the packages which are to be installed. You may change the target paths for the packages. -</TEXT> -</PAGE> - -<!-- Here's another TYPE=TEXT page before we install. - The special target "0" indicates that after this page we - should start installation. - Note that the TYPE=INSTALL page (which we had in Alpha #3) - is no longer supported. --> - -<PAGE INDEX=5 TYPE=TEXT> -<NEXTBUTTON TARGET=0>I~nstall</NEXTBUTTON> -<TEXT> -Press "Install" to begin installing this archive.</TEXT> -</PAGE> - -</BODY> -</WARPIN> diff --git a/os2/mysqlalt.wis b/os2/mysqlalt.wis deleted file mode 100644 index 55259567a2e7f8bd8b444e7d2456a19c3547b930..0000000000000000000000000000000000000000 --- a/os2/mysqlalt.wis +++ /dev/null @@ -1,15 +0,0 @@ -#include "mysql.ih" - -<WARPIN VERSION <$WARPIN_VERSION>> -<HEAD> -<MSG> -This is not an installable archive. - -Please download and install the main archive: - - mysql-<$MySQL-Ver>-bld1.wpi - -</MSG> -</HEAD> -</WARPIN> - \ No newline at end of file diff --git a/os2/rint.cmd b/os2/rint.cmd deleted file mode 100644 index 522eff166bf1e4ea93c769b3e43e845a1e9e26af..0000000000000000000000000000000000000000 --- a/os2/rint.cmd +++ /dev/null @@ -1,4 +0,0 @@ -REM -DLONG_DOUBLE -REM -DFLOAT -REM none -> double -gcc -Zomf -c -x assembler-with-cpp rint.s diff --git a/os2/rint.obj b/os2/rint.obj deleted file mode 100644 index 1231f093327af8218a33e9eb1d4582f7a635cdcb..0000000000000000000000000000000000000000 Binary files a/os2/rint.obj and /dev/null differ diff --git a/os2/rint.s b/os2/rint.s deleted file mode 100644 index 7f6569ed72c8cdd789c066ea15ba662820cee223..0000000000000000000000000000000000000000 --- a/os2/rint.s +++ /dev/null @@ -1,32 +0,0 @@ -/ rint.s (emx+gcc) -- Copyright (c) 1992-1996 by Eberhard Mattes - -#include <emx/asm386.h> - -#define FUNC MATHSUFFIX2(rint) - - .globl LABEL(FUNC) - - .text - - ALIGN - -/ double _rint (double x) - -#define cw1 0(%esp) -#define cw2 2(%esp) -/define ret_addr 4(%esp) -#define x 8(%esp) - -LABEL(FUNC): - PROFILE_NOFRAME - subl $4, %esp - fstcww cw1 - movw cw1, %ax - andw $0xf3ff, %ax /* round to nearest or even */ - movw %ax, cw2 - fldcww cw2 - FLD x /* x */ - frndint - fldcww cw1 - addl $4, %esp - EPILOGUE(FUNC) diff --git a/plugin/Makefile.am b/plugin/Makefile.am index da4ff0a8d5c7db5b43def5415e5893ed5f2d2b06..d0f68a9c84b3652544e3eb24c476e3c504164780 100644 --- a/plugin/Makefile.am +++ b/plugin/Makefile.am @@ -1 +1,6 @@ SUBDIRS= fulltext + +# extra plugin example files are listed here, to +# keep its Makefile.am cleaner as a template +EXTRA_DIST= fulltext/configure.in + diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 5d4d8863f98f780626cd6f954129d1d9b7219a50..56a2d4a7bc6ed9f4058b23e337affe760b57996b 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -31,7 +31,6 @@ bin_SCRIPTS = @server_scripts@ \ mysqlhotcopy \ mysqldumpslow \ mysql_explain_log \ - mysql_upgrade \ mysqld_multi \ mysql_create_system_tables @@ -58,7 +57,6 @@ EXTRA_SCRIPTS = make_binary_distribution.sh \ mysqldumpslow.sh \ mysql_explain_log.sh \ mysqld_multi.sh \ - mysql_upgrade.sh \ mysqld_safe.sh \ mysql_create_system_tables.sh @@ -87,7 +85,6 @@ CLEANFILES = @server_scripts@ \ mysqldumpslow \ mysql_explain_log \ mysql_tableinfo \ - mysql_upgrade \ mysqld_multi \ make_win_src_distribution \ mysql_create_system_tables diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 58ee5a734747a2c38385b42849d9e7803fee1587..aa29d48d50d10a27dab8893ca0e55cf09062ffdb 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -97,7 +97,7 @@ mkdir $BASE $BASE/bin $BASE/docs \ $BASE/mysql-test/extra/binlog_tests $BASE/mysql-test/extra/rpl_tests if [ $BASE_SYSTEM != "netware" ] ; then - mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $BASE/man \ + mkdir $BASE/share/mysql $BASE/tests $BASE/man \ $BASE/man/man1 $BASE/data $BASE/data/mysql $BASE/data/test chmod o-rwx $BASE/data $BASE/data/* @@ -154,14 +154,11 @@ if [ $BASE_SYSTEM = "netware" ] ; then # For all other platforms: else BIN_FILES="$BIN_FILES \ - client/mysqltestmanagerc \ - client/mysqltestmanager-pwgen tools/mysqltestmanager \ client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \ client/.libs/mysqlslap \ client/.libs/mysqldump client/.libs/mysqlimport \ client/.libs/mysqltest client/.libs/mysqlcheck \ - client/.libs/mysqlbinlog client/.libs/mysqltestmanagerc \ - client/.libs/mysqltestmanager-pwgen tools/.libs/mysqltestmanager \ + client/.libs/mysqlbinlog \ tests/.libs/mysql_client_test \ libmysqld/examples/.libs/mysql_client_test_embedded \ libmysqld/examples/.libs/mysqltest_embedded \ @@ -241,9 +238,10 @@ $CP mysql-test/std_data/*.dat mysql-test/std_data/*.frm \ mysql-test/std_data/des_key_file mysql-test/std_data/*.*001 \ mysql-test/std_data/*.cnf \ $BASE/mysql-test/std_data -$CP mysql-test/t/*.test mysql-test/t/*.imtest \ - mysql-test/t/*.disabled mysql-test/t/*.opt \ - mysql-test/t/*.slave-mi mysql-test/t/*.sh mysql-test/t/*.sql $BASE/mysql-test/t +$CP mysql-test/t/*.test $BASE/mysql-test/t +$CP mysql-test/t/*.imtest mysql-test/t/*.disabled $BASE/mysql-test/t +$CP mysql-test/t/*.opt mysql-test/t/*.slave-mi $BASE/mysql-test/t +$CP mysql-test/t/*.sh mysql-test/t/*.sql $BASE/mysql-test/t $CP mysql-test/r/*.result mysql-test/r/*.require \ $BASE/mysql-test/r $CP mysql-test/extra/binlog_tests/*.test $BASE/mysql-test/extra/binlog_tests @@ -265,8 +263,7 @@ if [ $BASE_SYSTEM != "netware" ] ; then mv $BASE/support-files/binary-configure $BASE/configure chmod a+x $BASE/bin/* $BASE/scripts/* $BASE/support-files/mysql-* \ $BASE/support-files/mysql.server $BASE/configure - $CP -r sql-bench/* $BASE/sql-bench - rm -f $BASE/sql-bench/*.sh $BASE/sql-bench/Makefile* $BASE/lib/*.la + rm -f $BASE/lib/*.la rm -f $BASE/bin/*.sql fi @@ -306,17 +303,9 @@ else rm -f $BASE/README.NW fi -# Dropped with 5.1.6-beta -# # Make safe_mysqld a symlink to mysqld_safe for backwards portability -# # To be removed in MySQL 4.1 -# if [ $BASE_SYSTEM != "netware" ] ; then -# (cd $BASE/bin ; ln -s mysqld_safe safe_mysqld ) -# fi - # Clean up if we did this from a bk tree -if [ -d $BASE/sql-bench/SCCS ] ; then +if [ -d $BASE/share/SCCS ] ; then find $BASE/share -name SCCS -print | xargs rm -rf - find $BASE/sql-bench -name SCCS -print | xargs rm -rf fi # NDB Cluster diff --git a/scripts/make_win_src_distribution.sh b/scripts/make_win_src_distribution.sh index 22c0ea7c8394d035d6e64953f670800afa305c04..b070e30c5c762c8cb5e37abab3c1cf5b956ce4b4 100644 --- a/scripts/make_win_src_distribution.sh +++ b/scripts/make_win_src_distribution.sh @@ -184,7 +184,7 @@ rm -r -f "$BASE/share/Makefile" rm -r -f "$BASE/share/Makefile.in" rm -r -f "$BASE/share/Makefile.am" -mkdir $BASE/Docs $BASE/extra $BASE/include $BASE/storage +mkdir $BASE/Docs $BASE/extra $BASE/include # # Copy directory files @@ -251,7 +251,7 @@ copy_dir_dirs() { for i in client dbug extra storage/heap include storage/archive storage/csv \ include/mysql libmysql libmysqld storage/myisam storage/example \ - storage/myisammrg mysys regex sql strings sql-common sql/examples \ + storage/myisammrg mysys regex sql strings sql-common \ tools vio zlib do copy_dir_files $i @@ -260,7 +260,7 @@ done # # Create project files for ndb # -make -C $SOURCE/storage/ndb windoze +#make -C $SOURCE/storage/ndb windoze # # Input directories to be copied recursively @@ -298,8 +298,6 @@ do fi done -cp extra/sql_state.h extra/mysqld_error.h $BASE/include - # # support files # @@ -316,7 +314,7 @@ done # Raw dirs from source tree # -for i in scripts sql-bench mysql-test SSL tests +for i in scripts mysql-test SSL tests do print_debug "Copying directory '$i'" if [ -d $i ] @@ -350,8 +348,6 @@ find $BASE \( -name "*.cnf" -o -name "*.ini" \ do unix_to_dos $v done -# File extension '.txt' matches too many other files, error messages etc. -unix_to_dos $BASE/Docs/*.txt mv $BASE/README $BASE/README.txt diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index c05fda745b0bc6d3a7531468398d1888eeba5287..865ab3e6db4a73be83b28aaf21b7d8605e1c5010 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -262,9 +262,6 @@ then echo "You can start the MySQL daemon with:" echo "cd @prefix@ ; $bindir/mysqld_safe &" echo - echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:" - echo "cd sql-bench ; perl run-all-tests" - echo fi echo "Please report any problems with the @scriptdir@/mysqlbug script!" echo diff --git a/scripts/mysql_prepare_privilege_tables_for_5.sql b/scripts/mysql_prepare_privilege_tables_for_5.sql deleted file mode 100644 index a9b6d43aee0266dbefdf216ce2573bd474b72c65..0000000000000000000000000000000000000000 --- a/scripts/mysql_prepare_privilege_tables_for_5.sql +++ /dev/null @@ -1,53 +0,0 @@ - -use mysql; - --- --- merging `host` table and `db` --- - -UPDATE IGNORE host SET Host='%' WHERE Host=''; -DELETE FROM host WHERE Host=''; - -INSERT IGNORE INTO db (User, Host, Select_priv, Insert_priv, Update_priv, - Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv, - Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv) - SELECT d.User, h.Host, - (d.Select_priv = 'Y' || h.Select_priv = 'Y') + 1, - (d.Insert_priv = 'Y' || h.Select_priv = 'Y') + 1, - (d.Update_priv = 'Y' || h.Update_priv = 'Y') + 1, - (d.Delete_priv = 'Y' || h.Delete_priv = 'Y') + 1, - (d.Create_priv = 'Y' || h.Create_priv = 'Y') + 1, - (d.Drop_priv = 'Y' || h.Drop_priv = 'Y') + 1, - (d.Grant_priv = 'Y' || h.Grant_priv = 'Y') + 1, - (d.References_priv = 'Y' || h.References_priv = 'Y') + 1, - (d.Index_priv = 'Y' || h.Index_priv = 'Y') + 1, - (d.Alter_priv = 'Y' || h.Alter_priv = 'Y') + 1, - (d.Create_tmp_table_priv = 'Y' || h.Create_tmp_table_priv = 'Y') + 1, - (d.Lock_tables_priv = 'Y' || h.Lock_tables_priv = 'Y') + 1 - FROM db d, host h WHERE d.Host = ''; - -UPDATE IGNORE db SET Host='%' WHERE Host = ''; -DELETE FROM db WHERE Host=''; - -TRUNCATE TABLE host; - --- --- Adding missing users to `user` table --- --- note that invalid password causes the user to be skipped during the --- load of grand tables (at mysqld startup) thus three following inserts --- do not affect anything - -INSERT IGNORE user (User, Host, Password) SELECT User, Host, "*" FROM db; -INSERT IGNORE user (User, Host, Password) SELECT User, Host, "*" FROM tables_priv; -INSERT IGNORE user (User, Host, Password) SELECT User, Host, "*" FROM columns_priv; - -SELECT DISTINCT -"There are user accounts with the username 'PUBLIC'. In the SQL-1999 -(or later) standard this name is reserved for PUBLIC role and can -not be used as a valid user name. Consider renaming these accounts before -upgrading to MySQL-5.0. -These accounts are:" x -FROM user WHERE user='PUBLIC'; -SELECT CONCAT(user,'@',host) FROM user WHERE user='PUBLIC'; - diff --git a/scripts/mysql_upgrade.sh b/scripts/mysql_upgrade.sh deleted file mode 100644 index c9f375b6c5bb18fc6c39fb514f049a93ddb43d58..0000000000000000000000000000000000000000 --- a/scripts/mysql_upgrade.sh +++ /dev/null @@ -1,203 +0,0 @@ -#!/bin/sh -# Copyright (C) 2002-2003 MySQL AB -# For a more info consult the file COPYRIGHT distributed with this file. - -# Runs mysqlcheck --check-upgrade in case it has not been done on this -# major MySQL version - -# This script should always be run when upgrading from one major version -# to another (ie: 4.1 -> 5.0 -> 5.1) - -# -# Note that in most cases one have to use '--password' as -# arguments as these needs to be passed on to the mysqlcheck command - - -user=root - -case "$1" in - --no-defaults|--defaults-file=*|--defaults-extra-file=*) - defaults="$1"; shift - ;; -esac - -parse_arguments() { - # We only need to pass arguments through to the server if we don't - # handle them here. So, we collect unrecognized options (passed on - # the command line) into the args variable. - pick_args= - if test "$1" = PICK-ARGS-FROM-ARGV - then - pick_args=1 - shift - fi - - for arg do - case "$arg" in - --basedir=*) MY_BASEDIR_VERSION=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; - --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; - --ldata=*|--data=*|--datadir=*) DATADIR=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; - --force) force=1 ;; - --verbose) verbose=1 ;; - --help) help_option=1 ;; - *) - if test -n "$pick_args" - then - # This sed command makes sure that any special chars are quoted, - # so the arg gets passed exactly to the server. - args="$args "`echo "$arg" | sed -e 's,\([^a-zA-Z0-9_.=-]\),\\\\\1,g'` - fi - ;; - esac - done -} - -# -# Find where my_print_defaults is -# - -find_my_print_defaults () { - if test -x ./bin/my_print_defaults - then - print_defaults="./bin/my_print_defaults" - elif test -x ./extra/my_print_defaults - then - print_defaults="./extra/my_print_defaults" - elif test -x @bindir@/my_print_defaults - then - print_defaults="@bindir@/my_print_defaults" - elif test -x @bindir@/mysql_print_defaults - then - print_defaults="@bindir@/mysql_print_defaults" - else - print_defaults="my_print_defaults" - fi -} - -find_my_print_defaults - -# Get first arguments from the my.cfg file, groups [mysqld] and -# [mysql_upgrade], and then merge with the command line arguments - -args= -DATADIR= -bindir= -MY_BASEDIR_VERSION= -verbose=0 -force=0 -help_option=0 - -parse_arguments `$print_defaults $defaults mysqld mysql_upgrade` -parse_arguments PICK-ARGS-FROM-ARGV "$@" - -if test $help_option = 1 -then - echo "MySQL utility script to upgrade database to the current server version" - echo "" - echo "It takes the following arguments:" - echo " --help Show this help message" - echo " --basedir Specifies the directory where MySQL is installed" - echo " --datadir Specifies the data directory" - echo " --force Mysql_upgrade.info file will be ignored" - echo " --user Username for server login if not current user" - echo " --verbose Display more output about the process" - echo "" - - exit 0 -fi - -# -# Try to find where binaries are installed -# - -MY_PWD=`pwd` -# Check for the directories we would expect from a binary release install -if test -z "$MY_BASEDIR_VERSION" -then - if test -f ./share/mysql/english/errmsg.sys -a -x ./bin/mysqld - then - MY_BASEDIR_VERSION=$MY_PWD # Where bin, share and data are - bindir="$MY_BASEDIR_VERSION/bin" - # Check for the directories we would expect from a source install - elif test -f ./share/mysql/english/errmsg.sys -a -x ./libexec/mysqld - then - MY_BASEDIR_VERSION=$MY_PWD # Where libexec, share and var are - bindir="$MY_BASEDIR_VERSION/bin" -# Since we didn't find anything, used the compiled-in defaults - else - MY_BASEDIR_VERSION=@prefix@ - bindir=@bindir@ - fi -else - bindir="$MY_BASEDIR_VERSION/bin" -fi - -# -# Try to find the data directory -# - -if test -z "$DATADIR" -then - # Try where the binary installs put it - if test -d $MY_BASEDIR_VERSION/data/mysql - then - DATADIR=$MY_BASEDIR_VERSION/data - # Next try where the source installs put it - elif test -d $MY_BASEDIR_VERSION/var/mysql - then - DATADIR=$MY_BASEDIR_VERSION/var - # Or just give up and use our compiled-in default - else - DATADIR=@localstatedir@ - fi -fi - -if test ! -x "$bindir/mysqlcheck" -then - echo "Can't find program '$bindir/mysqlcheck'" - echo "Please restart with --basedir=mysql-install-directory" - exit 1 -fi - -if test ! -f "$DATADIR/mysql/user.frm" -then - echo "Can't find data directory. Please restart with --datadir=path-to-data-dir" - exit 1 -fi - -CHECK_FILE=$DATADIR/mysql_upgrade.info - -if test -f $CHECK_FILE -a $force = 0 -then - version=`cat $CHECK_FILE` - if test "$version" = "@MYSQL_BASE_VERSION@" - then - if test $verbose = 1 - then - echo "mysql_upgrade already done for this version" - fi - $bindir/mysql_fix_privilege_tables --silent $args - exit 0 - fi -fi - -# -# Run the upgrade -# - -check_args="--check-upgrade --all-databases --auto-repair --user=$user" - -if test $verbose = 1 -then - echo "Running $bindir/mysqlcheck $args $check_args" -fi - -$bindir/mysqlcheck $check_args $args -if [ $? = 0 ] -then - # Remember base version so that we don't run this script again on the - # same base version - echo "@MYSQL_BASE_VERSION@" > $CHECK_FILE -fi - -$bindir/mysql_fix_privilege_tables --silent --user=$user $args diff --git a/scripts/mysqld_safe-watch.sh b/scripts/mysqld_safe-watch.sh deleted file mode 100644 index c59b3b2614d37637356243f8dc21b305e9c9b767..0000000000000000000000000000000000000000 --- a/scripts/mysqld_safe-watch.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/sh -# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB -# This file is public domain and comes with NO WARRANTY of any kind -# -# scripts to start the MySQL demon and restart it if it dies unexpectedly -# -# This should be executed in the MySQL base directory if you are using a -# binary installation that has other paths than you are using. -# -# mysql.server works by first doing a cd to the base directory and from there -# executing mysqld_safe - -# Check if we are starting this relative (for the binary release) -if test -f ./data/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \ - -x ./bin/mysqld -then - MY_BASEDIR_VERSION=`pwd` # Where bin, share and data is - DATADIR=$MY_BASEDIR_VERSION/data # Where the databases are - ledir=$MY_BASEDIR_VERSION/bin # Where mysqld are -# Check if this is a 'moved install directory' -elif test -f ./var/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \ - -x ./libexec/mysqld -then - MY_BASEDIR_VERSION=`pwd` # Where libexec, share and var is - DATADIR=$MY_BASEDIR_VERSION/var # Where the databases are - ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld are -else - MY_BASEDIR_VERSION=/usr/local/mysql - DATADIR=/usr/local/mysql/var - ledir=/usr/local/mysql/libexec -fi - -hostname=`@HOSTNAME@` -pidfile=$DATADIR/$hostname.pid -log=$DATADIR/$hostname.log -err=$DATADIR/$hostname.err -lockfile=$DATADIR/$hostname.lock - -# -# If there exists an old pid file, check if the demon is already running -# Note: The switches to 'ps' may depend on your operating system - -if test -f $pidfile -then - PID=`cat $pidfile` - if /bin/kill -0 $PID - then - if /bin/ps -p $PID | grep mysqld > /dev/null - then # The pid contains a mysqld process - echo "A mysqld process already exists" - echo "A mysqld process already exists at " `date` >> $log - exit 1; - fi - fi - rm -f $pidfile - if test -f $pidfile - then - echo "Fatal error: Can't remove the pid file: $pidfile" - echo "Fatal error: Can't remove the pid file: $pidfile at " `date` >> $log - echo "Please remove it manually and start $0 again" - echo "mysqld demon not started" - exit 1; - fi -fi - -echo "Starting mysqld demon with databases from $DATADIR" - -#Default communication ports -#MYSQL_TCP_PORT=3306 -if test -z "$MYSQL_UNIX_PORT" -then - MYSQL_UNIX_PORT="/tmp/mysql.sock" - export MYSQL_UNIX_PORT -fi -#export MYSQL_TCP_PORT - -# Does this work on all systems? -#if type ulimit | grep "shell builtin" > /dev/null -#then -# ulimit -n 256 > /dev/null 2>&1 # Fix for BSD and FreeBSD systems -#fi - -echo "mysqld started on " `date` >> $log -bin/zap -f $lockfile < /dev/null > /dev/null 2>&1 -rm -f $lockfile -$MY_BASEDIR_VERSION/bin/watchdog_mysqld $lockfile $pidfile $MY_BASEDIR_VERSION/bin $DATADIR 3 10 >> $err 2>&1 & -restart_pid=$! - -while true -do - rm -f $MYSQL_UNIX_PORT $pidfile # Some extra safety - lockfile -1 -r10 $lockfile >/dev/null 2>&1 - if test "$#" -eq 0 - then - nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \ - --skip-locking >> $err 2>&1 & - else - nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \ - --skip-locking "$@" >> $err 2>&1 & - fi - pid=$! - rm -f $lockfile - wait $pid; - - lockfile -1 -r10 $lockfile >/dev/null 2>&1 - rm -f $lockfile - if test ! -f $pidfile # This is removed if normal shutdown - then - break; - fi - if true - then - # Test if one proces was hanging. - # This is only a fix for Linux (running as base 3 mysqld processes) - # but should work for the rest of the servers. - # The only thing is ps x => redhat 5 gives warnings when using ps -x. - # kill -9 is used or the proces won't react on the kill. - numofproces=`ps x | grep -v "grep" | grep -c $ledir/mysqld` - echo -e "\nNumber of processes running now: $numofproces" | tee -a $log - I=1 - while test "$I" -le "$numofproces" - do - PROC=`ps x | grep $ledir/mysqld | grep -v "grep" | tail -1` - for T in $PROC - do - break - done - # echo "TEST $I - $T **" - if kill -9 $T - then - echo "mysqld proces hanging, pid $T - killed" | tee -a $log - else - break - fi - I=`expr $I + 1` - done - fi - echo "mysqld restarted" | tee -a $log - # Check all tables and repair any wrong tables. - $MY_BASEDIR_VERSION/bin/isamchk -sf $DATADIR/*/*.ISM >> $err 2>&1 -done -if test $restart_pid -gt 0 -then - kill $restart_pid > /dev/null 2>&1 - sleep 1; - kill -9 $restart_pid > /dev/null 2>&1 -fi - -echo -n "mysqld ended on " `date` >> $log -echo "mysqld demon ended" diff --git a/server-tools/instance-manager/guardian.cc b/server-tools/instance-manager/guardian.cc index 7a5322638464cd6b86489739be155f92d0132fae..3be672cd71c423ebe8fc8ea0b929ca1530961519 100644 --- a/server-tools/instance-manager/guardian.cc +++ b/server-tools/instance-manager/guardian.cc @@ -201,8 +201,6 @@ void Guardian_thread::run() while (node != NULL) { - struct timespec timeout; - GUARD_NODE *current_node= (GUARD_NODE *) node->data; instance= ((GUARD_NODE *) node->data)->instance; process_instance(instance, current_node, &guarded_instances, node); diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc index d2946270b9e44ccb16cd0c6c7ad587ccb665d6c1..06a6e1ebc63e49e72e018d0a6071cc8f5e24bb92 100644 --- a/server-tools/instance-manager/instance_options.cc +++ b/server-tools/instance-manager/instance_options.cc @@ -132,7 +132,7 @@ int Instance_options::fill_instance_version() bzero(result, MAX_VERSION_STRING_LENGTH); - rc= parse_output_and_get_value(cmd.buffer, mysqld_path, + rc= parse_output_and_get_value(cmd.buffer, "Ver", result, MAX_VERSION_STRING_LENGTH, GET_LINE); diff --git a/server-tools/instance-manager/mysql_connection.cc b/server-tools/instance-manager/mysql_connection.cc index bf39c843f0afe014afde6887dbf297f5d6a2b836..dcd1807701fd9e71b157dbafd5f1b114a630bf26 100644 --- a/server-tools/instance-manager/mysql_connection.cc +++ b/server-tools/instance-manager/mysql_connection.cc @@ -136,7 +136,7 @@ int Mysql_connection_thread::init() /* Initialize random number generator */ { ulong seed1= (ulong) &rand_st + rand(); - ulong seed2= rand() + time(0); + ulong seed2= (ulong) rand() + time(0); randominit(&rand_st, seed1, seed2); } /* Fill scramble - server's random message used for handshake */ diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc index e7d366e7457b219371361db915589c3d7897664b..85fea76c079a03049333cfcb1989cea41c12f81c 100644 --- a/server-tools/instance-manager/options.cc +++ b/server-tools/instance-manager/options.cc @@ -57,6 +57,9 @@ uint Options::port_number= DEFAULT_PORT; char **Options::saved_argv= NULL; /* Remember if the config file was forced */ bool Options::is_forced_default_file= 0; +#ifndef DBUG_OFF +const char *Options::default_dbug_option= "d:t:i:O,im.trace"; +#endif /* List of options, accepted by the instance manager. @@ -88,40 +91,30 @@ static struct my_option my_long_options[] = { "help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, - { "log", OPT_LOG, "Path to log file. Used only with --run-as-service.", - (gptr *) &Options::log_file_name, (gptr *) &Options::log_file_name, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - - { "pid-file", OPT_PID_FILE, "Pid file to use.", - (gptr *) &Options::pid_file_name, (gptr *) &Options::pid_file_name, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - - { "socket", OPT_SOCKET, "Socket file to use for connection.", - (gptr *) &Options::socket_file_name, (gptr *) &Options::socket_file_name, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - - { "passwd", 'P', "Prepare entry for passwd file and exit.", 0, 0, 0, - GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, - { "bind-address", OPT_BIND_ADDRESS, "Bind address to use for connection.", (gptr *) &Options::bind_address, (gptr *) &Options::bind_address, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - { "port", OPT_PORT, "Port number to use for connections", - (gptr *) &Options::port_number, (gptr *) &Options::port_number, - 0, GET_UINT, REQUIRED_ARG, DEFAULT_PORT, 0, 0, 0, 0, 0 }, - - { "password-file", OPT_PASSWORD_FILE, "Look for Instance Manager users" - " and passwords here.", - (gptr *) &Options::password_file_name, - (gptr *) &Options::password_file_name, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, +#ifndef DBUG_OFF + {"debug", '#', "Debug log.", + (gptr*) &Options::default_dbug_option, (gptr*) &Options::default_dbug_option, + 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#endif { "default-mysqld-path", OPT_MYSQLD_PATH, "Where to look for MySQL" " Server binary.", (gptr *) &Options::default_mysqld_path, (gptr *) &Options::default_mysqld_path, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 }, +#ifdef __WIN__ + { "install", OPT_INSTALL_SERVICE, "Install as system service.", + (gptr *) &Options::install_as_service, (gptr*) &Options::install_as_service, + 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0 }, +#endif + + { "log", OPT_LOG, "Path to log file. Used only with --run-as-service.", + (gptr *) &Options::log_file_name, (gptr *) &Options::log_file_name, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, { "monitoring-interval", OPT_MONITORING_INTERVAL, "Interval to monitor" " instances in seconds.", @@ -129,26 +122,49 @@ static struct my_option my_long_options[] = (gptr *) &Options::monitoring_interval, 0, GET_UINT, REQUIRED_ARG, DEFAULT_MONITORING_INTERVAL, 0, 0, 0, 0, 0 }, + + { "passwd", 'P', "Prepare entry for passwd file and exit.", 0, 0, 0, + GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, + + { "password-file", OPT_PASSWORD_FILE, "Look for Instance Manager users" + " and passwords here.", + (gptr *) &Options::password_file_name, + (gptr *) &Options::password_file_name, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + + { "pid-file", OPT_PID_FILE, "Pid file to use.", + (gptr *) &Options::pid_file_name, (gptr *) &Options::pid_file_name, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + + { "port", OPT_PORT, "Port number to use for connections", + (gptr *) &Options::port_number, (gptr *) &Options::port_number, + 0, GET_UINT, REQUIRED_ARG, DEFAULT_PORT, 0, 0, 0, 0, 0 }, + #ifdef __WIN__ - { "install", OPT_INSTALL_SERVICE, "Install as system service.", - (gptr *) &Options::install_as_service, (gptr*) &Options::install_as_service, - 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0 }, { "remove", OPT_REMOVE_SERVICE, "Remove system service.", (gptr *)&Options::remove_service, (gptr*) &Options::remove_service, 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0}, - { "standalone", OPT_STAND_ALONE, "Run the application in stand alone mode.", - (gptr *)&Options::stand_alone, (gptr*) &Options::stand_alone, - 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0}, #else { "run-as-service", OPT_RUN_AS_SERVICE, "Daemonize and start angel process.", (gptr *) &Options::run_as_service, 0, 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0 }, +#endif + { "socket", OPT_SOCKET, "Socket file to use for connection.", + (gptr *) &Options::socket_file_name, (gptr *) &Options::socket_file_name, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + +#ifdef __WIN__ + { "standalone", OPT_STAND_ALONE, "Run the application in stand alone mode.", + (gptr *)&Options::stand_alone, (gptr*) &Options::stand_alone, + 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 0, 0}, +#else { "user", OPT_USER, "Username to start mysqlmanager", (gptr *) &Options::user, (gptr *) &Options::user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, #endif + { "version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, @@ -226,7 +242,7 @@ C_MODE_START static my_bool get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) + char *argument) { switch(optid) { case 'V': @@ -238,6 +254,12 @@ get_one_option(int optid, case '?': usage(); exit(0); + case '#': +#ifndef DBUG_OFF + DBUG_SET(argument ? argument : Options::default_dbug_option); + DBUG_SET_INITIAL(argument ? argument : Options::default_dbug_option); +#endif + break; } return 0; } diff --git a/server-tools/instance-manager/options.h b/server-tools/instance-manager/options.h index abb094eac93108f1774f226c6a0d9b059eca9d75..06818288606576fdec84bd24ca9141817d51c869 100644 --- a/server-tools/instance-manager/options.h +++ b/server-tools/instance-manager/options.h @@ -51,6 +51,10 @@ struct Options /* argv pointer returned by load_defaults() to be used by free_defaults() */ static char **saved_argv; +#ifndef DBUG_OFF + static const char *default_dbug_option; +#endif + int load(int argc, char **argv); void cleanup(); #ifdef __WIN__ diff --git a/server-tools/instance-manager/parse_output.cc b/server-tools/instance-manager/parse_output.cc index ebc45c1f7d45980c8f5d611c6cf5c66b1894e677..64bb6a6485f7b9f59ba8b4ea9ecd108158131c18 100644 --- a/server-tools/instance-manager/parse_output.cc +++ b/server-tools/instance-manager/parse_output.cc @@ -96,14 +96,14 @@ int parse_output_and_get_value(const char *command, const char *word, linebuf[sizeof(linebuf) - 1]= '\0'; /* safety */ /* - Compare the start of our line with the word(s) we are looking for. + Find the word(s) we are looking for in the line */ - if (!strncmp(word, linep, wordlen)) + if ((linep= strstr(linep, word))) { /* If we have found our word(s), then move linep past the word(s) */ - linep+= wordlen; + linep+= wordlen; if (flag & GET_VALUE) { trim_space((const char**) &linep, &found_word_len); diff --git a/sql-bench/.cvsignore b/sql-bench/.cvsignore deleted file mode 100644 index 208e8ca321c7c3e3def21ff93bcb8d4a07c87143..0000000000000000000000000000000000000000 --- a/sql-bench/.cvsignore +++ /dev/null @@ -1,18 +0,0 @@ -Makefile -Makefile.in -bench-init.pl -compare-results -copy-db -crash-me -fix-perl-ref -output -run-all-tests -server-cfg -test-ATIS -test-alter-table -test-big-tables -test-connect -test-create -test-insert -test-select -test-wisconsin diff --git a/sql-bench/ChangeLog b/sql-bench/ChangeLog deleted file mode 100644 index ca7fb34ce9744b304432bcf970c585728ec61844..0000000000000000000000000000000000000000 --- a/sql-bench/ChangeLog +++ /dev/null @@ -1,16 +0,0 @@ -2000-05-19 Michael Widenius <monty@tik.pp.sci.fi> - -* Added a lot of COUNT(DISTINCT ...) tests. - -1998-08-16 Michael Widenius <monty@monty.pp.sci.fi> - -* The insert test generates now a table with 300,000 rows. - The insert test table is now 3 columns instead of one to make it - 'a bit more realistic'. -* New option --small to run a small version of some tests. -* Added a lot of min(), max() and count() tests. -* Changed some tests to make them harder on MySQL 3.22.5 - (The new key optimization made the old test not completely fair against - other databases that doesn't do this) -* Added new test categories (order_by_on_key, min_max, min_max_on_key) -* Added diff --git a/sql-bench/Comments/Access.crash-me b/sql-bench/Comments/Access.crash-me deleted file mode 100644 index f4a419aa159053d1ec092cebebb2c0fb9c1b1547..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/Access.crash-me +++ /dev/null @@ -1,40 +0,0 @@ -Access 97 tested through ODBC 1998.04.19, by monty@mysql.com - -Access 97 has a bug when on executes a SELECT follwed very fast with a -DROP TABLE or a DROP INDEX command: - -[Microsoft][ODBC Microsoft Access 97 Driver] The database engine couldn't lock table 'crash_q' because it's already in use by another person or process. (SQL-S1 -000)(DBD: st_execute/SQLExecute err=-1) - -Debugging SQL queries in Access 97 is terrible because most error messages -are of type: - -Error: [Microsoft][ODBC Microsoft Access 97 Driver] Syntax error in CREATE TABLE statement. (SQL-37000)(DBD: st_prepare/SQLPrepare err=-1) - -Which doesn't tell a thing! - --------------- - -Access 2000 tested through ODBC 2000.01.02, by monty@mysql.com - -crash-me takes a LONG time to run under Access 2000. - -The '1+NULL' and the 'OR and AND in WHERE' tests kills -Activestate Perl, build 521, DBI-DBC with an OUT OF MEMORY error. -The later test also kills perl/access with some internal errors. -To go around this one must run crash-me repeatedly with the --restart option. - -Testing of the 'constant string size' (< 500K) takes a LOT of memory -in Access (at least 250M on My computer). - -Testing of number of 'simple expressions' takes REALLY a lot of time -and memory; At some point I was up to 350M of used memory! - -To fix the above, I modified crash-me to have lower max limits in the -above tests. - -Benchmarks (under Win98): - -Running the connect-test will take up all available memory and this -will not be freed even after quitting perl! There is probably some -bug in the Access connect code that eats memory! diff --git a/sql-bench/Comments/Adabas.crash-me b/sql-bench/Comments/Adabas.crash-me deleted file mode 100644 index d36d05047ccbbc395409a0ec3bbd443e5433a737..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/Adabas.crash-me +++ /dev/null @@ -1,36 +0,0 @@ - -I did not spend much time for tuning crash-me or the limits file. In short, -here's what I did: - - - Put engine into ANSI SQL mode by using the following odbc.ini: - - [ODBC Data Sources] - test - - [test] - ServerDB=test - ServerNode= - SQLMode=3 - - - Grabbed the db_Oracle package and copied it to db_Adabas - - Implemented a 'version' method. - - Ran crash-me with the --restart option; it failed when guessing the - query_size. - - Reran crash-me 3 or 4 times until it succeeded. At some point it - justified its name; I had to restart the Adabas server in the - table name length test ... - - Finally crash-me succeeded. - -That's it, folks. The benchmarks have been running on my P90 machine, -32 MB RAM, with Red Hat Linux 5.0 (Kernel 2.0.33, glibc-2.0.7-6). -Mysql was version 3.21.30, Adabas was version 6.1.15.42 (the one from -the promotion CD of 1997). I was using X11 and Emacs while benchmarking. - -An interesting note: The mysql server had 4 processes, the three usual -ones and a process for serving me, each about 2 MB RAM, including a -shared memory segment of about 900K. Adabas had 10 processes running from -the start, each about 16-20 MB, including a shared segment of 1-5 MB. You -guess which one I prefer ... :-) - - -Jochen Wiedmann, joe@ispsoft.de diff --git a/sql-bench/Comments/Empress.crash-me b/sql-bench/Comments/Empress.crash-me deleted file mode 100644 index b60bf4f19a9e0e63add80679562594dc7a179185..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/Empress.crash-me +++ /dev/null @@ -1,102 +0,0 @@ -***************************************************************** -NOTE: -This is an old comment about how it was to run crash-me on empress -the first time. I think it was on Empress 6.0 -***************************************************************** - -start testing empress ... -added a nice line for the max join .... -strip the as out of the from field ... -that's working on empress .... - -at this moment with .... -max constant string size in where .... taking a lot of memory ... -at this moment (it's still growing just waiting till it stops ..) 99mb .. -sorry it started growing again ... -max 170 mb ... then it gives an error ... -Yes it crashed ..... -at max constant string size in where ... with IOT trap/Abort(core dumped) :-) -nice isn't it ... hope it saved the things .... -I outcommented the sig story because I could see how the script is running -and I wasn't sure if SIG{PIPE} ='DEFAULT' ... is working ... -restarting with limit 8333xxx ... couldn't see it any more ... -query is printed ...(200000 lines ..). mmm Nice IOT trap/Abort ... -and again ..and again ... -aha ... and now it's going further ... -max constant string string size in select: ... -taking 100 mb -crashing over and over again .... -max simple expressions ... -is taking ... 82 mb ... -mmmm this is taking very very very long .... after 10 minutes I will kill it and run it again ... I think he can't proces this query that fast ... and will crash any way ... -still growing very slow to the 90 mb ... -killed it ... strange is ... it don't react on ctrl-c ... but kill 15 does work -mmm still bussy with killing his self ... memory is growing to 128 mb ... -sorry .. 150 mb .. and then the output .. -maybe something for the extra things for crash-me ... -if debug .... -if length $query > 300 ... just print $errstr .. else print $query + $errstr .. -at this moment he is still bussy printing .... -first clear all locks ... with empadm test lockclear ... else it will give me -the error with a lock ... -restarting at 4194297 .... mmm a bit high I think ... -after 5 minutes I will kill it ... -mmm have to kill it again ... took 30 mb ..now growing to 42 mb .. -restarting at 838859 ... hope this will crash normaly ... :-) -I will give it again 5 minutes to complete ... -taking 12 mb .... will kill it ... after 4 minutes .... -restarting at 167771 ... taking 6 mb ... give it again 5 minutes .... - will kill it again ... else it becomes to late tonight ... -mmm started with 33xxxx and it crashes ...:-) yes ... -can't we build in a function which will restart his self again ... -mmmm this is really boring .. start it over and over again ... -WHO .... NICE >>>> -Restarting this with high limit: 4097 -................. -*** Program Bug *** setexpr: unknown EXPR = 1254 (4e6) -isn't it ... starting it again ... -finally finished with 4092 .... -now max big expression ..... -directly taking .. 85 mb ... give it again 5 minutes ... -mmm I am going to kill it again ... mmm it grows to 146 mb ... -restarting with 1026 ... taking 25 mb .. -won't give him that long ... because it will crash any way (just a ques) .. -killed it ... -restarting at 205 ... hope this will work .... -won't think so ... give it 2 minutes ... taking 12 mb ... -killed it ...restarting at ... 40 ... yes it crashes ... - 7 is crashing ... 1 ....is good .. finaly ... a long way ... -now max stacked expressions .... -taking 80 mb ... mmmm what sort of test is this ...it looks more like a harddisk test .. but it crashes .. nice ... -mmm a YACC overflow ... that's a nice error ... -but it goes on ... yep it didn't crashed just an error ... - mmm -my patch for the join didn't work ... let's take a look what goes wrong ... -saw it ... forgot some little thing .. mm not .. them ... another little typo -mmm again a really nice bug ... -Restarting this with high limit: 131 -... -*** Program Bug *** xflkadd: too many read locks -them the lock forgotten .... -mmmm bigger problem ... -with empadm test lockinfo ... gives ... -*** System Problem *** no more clients can be registered in coordinator - -*** User Error *** '/usr/local/empress/rdbms/bin/test' is not a valid database -that's really really nice .... -hmmm after coordclear ... it's fine again ... -strange ... - after restarting it again the script ... it is going further .... -the overflow trick is nice and working good ... -now I have table 'crash_q' does not exist for every thing ... -normal ...???? mmm went after all good .. so I think it's normal ... -mmmm a lot of table 'crash_q' does not exist ... again ... -sometimes when the overflow is there ... I restart it and it is saying ... -restarting at xxxx that's not good ... but hey ... what the hack ... -maybe that's good because if one test run's more then 200 times .... -it won't exceeds that test ... -.... -yes finally the end of crash-me ... -at last ... crash-me safe: yes ... -yep don't think so he .... - diff --git a/sql-bench/Comments/FrontBase.benchmark b/sql-bench/Comments/FrontBase.benchmark deleted file mode 100644 index 03386a4d8834e5c2b228d632e3cff128d6f1708d..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/FrontBase.benchmark +++ /dev/null @@ -1,59 +0,0 @@ -# This file describes how to run benchmarks and crash-me with FrontBase - -Installed components: - -- FrontBase-2.1-8.rpm - (had to run with rpm -i --nodeps; the rpm wanted libreadline.so.4.0, - but only libreadline.so.4.1 was available) - -- DBD-FB-0.03.tar.gz - (perl Makefile.Pl; - make; - make test; - make install;) - -- DBI-1.14.tar.gz - (perl Makefile.Pl; - make; - make test; - make install;) - -- Msql-Mysql-modules-1.2215.tar.gz - (perl Makefile.Pl; - make; - make test; - make install;) - -After installations: - -- cd /etc/rc.d - FBWeb start - FrontBase start - -- cd /usr/local/mysql/sql-bench -- FBExec & -- FrontBase test - -crash-me: - -There were a lot of troubles running the crash-me; FrontBase core -dumped several tens of times while crash-me was trying to determine -the maximum values in different areas. - -The crash-me program itself was also needed to be tuned quite a lot -for FB. There were also some bugs/lacking features in the crash-me -program, which are now fixed to the new version. - -After we finally got the limits, we runned the benchmarks. - -benchmarks: - -Problems again. Frontbase core dumped with every part of the -benchmark (8/8) tests. After a lot of fine-tuning we got the -benchmarks to run through. The maximum values had to be dropped -down a lot in many of the tests. - -The benchmarks were run with the following command: - -perl run-all-tests --server=frontbase --host=prima ---cmp=frontbase,mysql --tcpip --log diff --git a/sql-bench/Comments/Informix.crash-me b/sql-bench/Comments/Informix.crash-me deleted file mode 100644 index 557db012dd8355b357e10df9c657dd2a1aefc118..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/Informix.crash-me +++ /dev/null @@ -1,26 +0,0 @@ -***************************************************************** -NOTE: -I, Monty, pulled this comment out from the public mail I got from -Honza when he published the first crash-me run on Informix -***************************************************************** - -Also attached are diffs from server-cfg and crash-me -- some of -them are actual bugs in the code, some add extensions for Informix, -some of the comment-outs were necessary to finish the test. Some of -the problematic pieces that are commented out sent Informix to -veeeery long load 1 on the machine (max_conditions for example), so -could be considered crashes, but I'd prefer that someone checks the -code before giving out such a conclusion. - -Some of the code that is commented out failed with some other SQL -error message which might mean a problem with the sequence of commands -in crash-me. Interesting thing, some of the tests failed for the -first time but in the next or third run went OK, so the results are -results of more iterations (like column doesn't exist in the first -try but the second pass goes OK). - -I'd like to hear your comments on the bug fixes and Informix specific -code before we go into debugging the problems. - -Yours, - Honza Pazdziora diff --git a/sql-bench/Comments/interbase b/sql-bench/Comments/interbase deleted file mode 100644 index addaf74b63f403d54ba39ec7d84ed19deab775eb..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/interbase +++ /dev/null @@ -1,18 +0,0 @@ -Running crash-me on Interbase: -I -- got opensource version of interbase 6.0.1 - (both mode, classic and superserver), -- set up DBD::InterBase from cpan, -- created database "test" and set sql_dialect for that database to 3 -- executed crash-me for both interbase's models (classic and superserver). - -There were some problems during the execution: -1) Sometimes client side got SIGSEGV , At that moment server side - writes - gds__alloc: non-positive size allocation request - to log file. - This problem has both models. I am not shure if it's interbase or - DBD:InterBase problem (though DBD::InterBase made all nesessary - tests during the installation without any problem) - -2) In "superserver" mode ibserver several times died (and ibguard restarted it) diff --git a/sql-bench/Comments/mysql.benchmark b/sql-bench/Comments/mysql.benchmark deleted file mode 100644 index 9c28e8e506b9c2621f2bfcdd1d9b0d1be3faebed..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/mysql.benchmark +++ /dev/null @@ -1,39 +0,0 @@ -# This file describes how to run MySQL benchmarks with MySQL -# - -# The test was run on a Intel Xeon 2x 550 Mzh machine with 1G memory, -# 9G hard disk. The OS is Suse 6.4, with Linux 2.2.14 compiled with SMP -# support -# Both the perl client and the database server is run -# on the same machine. No other cpu intensive process was used during -# the benchmark. - -# -# -# First, install MySQL from RPM or compile it according to the -# recommendations in the MySQL manual -# - -# Start MySQL - -bin/safe_mysqld -O key_buffer=16M & - -# -# Now we run the test that can be found in the sql-bench directory in the -# MySQL 3.23 source distribution with and without --fast -# -# Note that if you want to make a results that is comparead to some database, -# You should add "--cmp=databasename" as an extra option to the test -# -$CMP=--cmp=pg - -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" $CMP -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --fast $CMP - -# If you want to store the results in a output/RUN-xxx file, you should -# repeate the benchmark with the extra option --log --use-old-result -# This will create a the RUN file based of the previous results -# - -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --log --use-old-result $CMP -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 1G, key_buffer=16M" --fast --log --use-old-result $CMP diff --git a/sql-bench/Comments/postgres.benchmark b/sql-bench/Comments/postgres.benchmark deleted file mode 100644 index c52a53699e0ede0324d15853f9e5256a20080b54..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/postgres.benchmark +++ /dev/null @@ -1,107 +0,0 @@ -# This file describes how to run MySQL benchmark suite with PostgreSQL -# -# WARNING: -# -# Don't run the --fast test on a PostgreSQL 7.1.1 database on -# which you have any critical data; During one of our test runs -# PostgreSQL got a corrupted database and all data was destroyed! -# When we tried to restart postmaster, It died with a -# 'no such file or directory' error and never recovered from that! -# -# Another time vacuum() filled our system disk with had 6G free -# while vaccuming a table of 60 M. -# -# WARNING - -# The test was run on a Intel Xeon 2x 550 Mzh machine with 1G memory, -# 9G hard disk. The OS is Suse 7.1, with Linux 2.4.2 compiled with SMP -# support -# Both the perl client and the database server is run -# on the same machine. No other cpu intensive process was used during -# the benchmark. -# -# During the test we run PostgreSQL with -o -F, not async mode (not ACID safe) -# because when we started postmaster without -o -F, PostgreSQL log files -# filled up a 9G disk until postmaster crashed. -# We did however notice that with -o -F, PostgreSQL was a magnitude slower -# than when not using -o -F. - -# -# First, install postgresql-7.1.2.tar.gz - -# Adding the following lines to your ~/.bash_profile or -# corresponding file. If you are using csh, use ´setenv´. - -export POSTGRES_INCLUDE=/usr/local/pg/include -export POSTGRES_LIB=/usr/local/pg/lib - -PATH=$PATH:/usr/local/pg/bin -MANPATH=$MANPATH:/usr/local/pg/man - -# -# Add the following line to /etc/ld.so.conf: -# - -/usr/local/pg/lib - -# and run: - -ldconfig - -# untar the postgres source distribution, cd to postgresql-* -# and run the following commands: - -CFLAGS=-O3 ./configure -gmake -gmake install - -mkdir /usr/local/pg/data -chown postgres /usr/local/pg/data -su - postgres -/usr/local/pg/bin/initdb -D /usr/local/pg/data -/usr/local/pg/bin/postmaster -o -F -D /usr/local/pg/data & -/usr/local/pg/bin/createdb test -exit - -# -# Second, install packages DBD-Pg-1.00.tar.gz and DBI-1.18.tar.gz, -# available from http://www.perl.com/CPAN/ - -export POSTGRES_LIB=/usr/local/pg/lib/ -export POSTGRES_INCLUDE=/usr/local/pg/include/postgresql -perl Makefile.PL -make -make install - -# -# Now we run the test that can be found in the sql-bench directory in the -# MySQL 3.23 source distribution. -# -# We did run two tests: -# The standard test - -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 512M, pg started with -o -F" --user=postgres --server=pg --cmp=mysql - -# When running with --fast we run the following vacuum commands on -# the database between each major update of the tables: -# vacuum anlyze table -# vacuum table -# or -# vacuum analyze -# vacuum - -# The time for vacuum() is accounted for in the book-keeping() column, not -# in the test that updates the database. - -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 512M, pg started with -o -F" --user=postgres --server=pg --cmp=mysql --fast - -# If you want to store the results in a output/RUN-xxx file, you should -# repeate the benchmark with the extra option --log --use-old-result -# This will create a the RUN file based of the previous results - -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 512M, pg started with -o -F" --user=postgres --server=pg --cmp=mysql --log --use-old-result -run-all-tests --comment="Intel Xeon, 2x550 Mhz, 512MG, pg started with -o -F" --user=postgres --server=pg --cmp=mysql --fast --log --use-old-result - -# Between running the different tests we dropped and recreated the PostgreSQL -# database to ensure that PostgreSQL should get a clean start, -# independent of the previous runs. diff --git a/sql-bench/Comments/postgres.crash-me b/sql-bench/Comments/postgres.crash-me deleted file mode 100644 index c693817cc91a3ce2fcedcf7e25d0653e2b3aca7b..0000000000000000000000000000000000000000 --- a/sql-bench/Comments/postgres.crash-me +++ /dev/null @@ -1,30 +0,0 @@ -***************************************************************** -NOTE: -This is an old comment about how it was to run crash-me on postgreSQL -the first time. I think it was on pg 6.2 -***************************************************************** - -mmm memory use of postgres is very very much ... -at this moment I am testing it ... -and the tables in join: is taking 200MB memory ... -I am happy to have 400mb swap ... so he can do have it ... -but other programs will give some errors ... -just a second ago ... vim core dumped .. XFree crashed full ... to the prompt -the menu bar of redhat disappeared .... -at this momemt the max is 215 mb memore postgres is taking ... - -the problem with postgres is the following error: -PQexec() -- Request was sent to backend, but backend closed the channel before r -esponding. This probably means the backend terminated abnormally before or whil -e processing the request - -I think we can solve this with a goto command ... to go back again ... after -the connect again ... -postgres is taking 377 mb .... mmm allmost out of memory ... 53mb left .. -mmm it's growing ... 389 mb ..393 mb ... 397 mb .. better can wait for the out of memory ... i think 409 412 max ... - -ps added some nice code for the channel closing ... -it must now do again the query when the error is the above error ... -hopes this helps ... -after crashing my X again ... -I stopped testing postgres diff --git a/sql-bench/Data/ATIS/aircraft.txt b/sql-bench/Data/ATIS/aircraft.txt deleted file mode 100644 index a8d91c391c40f0e4f2ac58b2a3028a32619ce747..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/aircraft.txt +++ /dev/null @@ -1,135 +0,0 @@ -'ATR','AEROSPATIALE/AERITALIA (ALL SERIES)',2,'TURBOPROP','NO',80.58,73.83,32446,49,10603,277,0,'YES' -'SSC','AEROSPATIALE-BRITISH AEROSPACE (BAC) CONCORDE',4,'JET','NO',83.83,203.75,400000,128,25000,1400,3800,'YES' -'CRV','AEROSPATIALE CARAVELLE (ALL SERIES)',2,'JET','NO',112.50,118.83,127870,140,29100,512,2150,'YES' -'ND2','AEROSPATIALE N 262/FRAKES MOHAWK 298',2,'TURBOPROP','NO',71.83,63.25,23370,27,5810,240,500,'YES' -'NDH','AEROSPATIALE SA 365 DAUPHIN 2',1,'HELICOPTER','NO',0.00,43.50,6615,14,0,196,423,'NO' -'AGH','AGUSTA A 109 A',2,'HELICOPTER','NO',36.08,35.14,5402,6,0,165,351,'NO' -'AB3','AIRBUS INDUSTRIE (ALL SERIES)',2,'JET','YES',147.08,175.91,313060,345,68000,576,2100,'YES' -'AN2','ANTONOV AN22 FREIGHTER',4,'TURBOPROP','YES',211.29,189.62,551156,28,99280,375,3107,'' -'AN4','ANTONOV AN24',2,'TURBOPROP','NO',95.83,77.25,42997,50,8150,295,807,'NO' -'AN6','ANTONOV AN26 FREIGHTER',2,'TURBOPROP','NO',95.79,77.20,49297,50,0,280,342,'' -'BEC','BEECHCRAFT (ALL SERIES)',2,'TURBOPROP','NO',0.00,0.00,0,0,0,0,0,'NO' -'BEB','BEECHCRAFT BARON',2,'PROPELLER','NO',37.83,28.00,5120,6,1965,225,1085,'NO' -'BEQ','BEECHCRAFT QUEEN AIR',2,'PROPELLER','NO',50.25,35.50,8800,11,3578,214,1185,'NO' -'BEO','BEECHCRAFT TWIN BONANZA',2,'PROPELLER','NO',45.95,31.50,6300,5,2230,201,1110,'NO' -'BE8','BEECHCRAFT 18/VOLPAR TURBO 18',2,'PROPELLER','NO',49.66,35.25,9900,15,4055,256,1515,'NO' -'BE9','BEECHCRAFT C99 AIRLINER',2,'TURBOPROP','NO',45.66,44.50,10900,15,5123,280,1150,'NO' -'BH2','BELL (ALL SERIES)',1,'HELICOPTER','NO',33.25,39.08,3200,4,860,140,341,'NO' -'DHP','BOEING CANADA DHC-2 BEAVER',1,'PROPELLER','NO',48.00,30.25,5100,10,1800,143,733,'' -'DHB','BOEING CANADA DHC-2 TURBO BEAVER',1,'TURBOPROP','NO',48.00,35.25,5370,10,1800,157,750,'NO' -'DHO','BOEING CANADA DHC-3 OTTER',1,'PROPELLER','NO',58.00,41.83,8000,10,2100,132,960,'NO' -'DHT','BOEING CANADA DHC-6 TWIN OTTER',2,'TURBOPROP','NO',65.00,51.75,12500,20,4420,209,745,'NO' -'DH7','BOEING CANADA DHC-7 DASH-7 PASSENGER',4,'TURBOPROP','NO',93.00,80.58,43000,50,15000,275,850,'YES' -'DH8','BOEING CANADA DHC-8 DASH-8 (ALL SERIES)',2,'TURBOPROP','NO',84.00,75.00,0,32,0,300,691,'' -'707','BOEING 707 PASSENGER (ALL SERIES)',4,'JET','NO',130.83,145.08,258000,181,52000,615,6325,'YES' -'70M','BOEING 707-320C MIXED CONFIGURATION',4,'JET','NO',145.75,152.91,336000,145,83447,615,5750,'YES' -'727','BOEING 727 PASSENGER (ALL SERIES)',3,'JET','NO',108.00,133.16,170000,131,35900,622,3000,'YES' -'72M','BOEING 727-100C/100QC MIXED CONFIGURATION',3,'JET','NO',108.00,133.16,160000,96,30500,600,0,'YES' -'72S','BOEING 727-200 (ALL SERIES)',3,'JET','NO',108.00,153.16,191000,145,40670,622,2400,'YES' -'737','BOEING 737 PASSENGER (ALL SERIES)',2,'JET','NO',93.00,94.00,111000,138,29093,577,1300,'YES' -'73M','BOEING 737-200C/200QC MIXED CONFIGURATION',2,'JET','NO',93.00,100.16,125000,130,33561,573,1800,'YES' -'73S','BOEING 737 PASSENGER (ALL 200/200C SERIES)',2,'JET','NO',93.00,100.16,120000,130,34050,577,2300,'YES' -'733','BOEING 737-300',2,'JET','NO',94.75,105.58,135000,138,35500,550,2500,'YES' -'74M','BOEING 747 MIXED CONFIGURATION (ALL SERIES)',4,'JET','YES',195.66,231.83,78500,238,165710,600,5500,'YES' -'747','BOEING 747 PASSENGER (ALL SERIES)',4,'JET','YES',195.66,321.83,833000,452,134000,557,7500,'YES' -'74L','BOEING 747SP',4,'JET','YES',195.66,184.75,700000,430,98000,564,6730,'YES' -'757','BOEING 757-200 PASSENGER',2,'JET','NO',124.50,155.25,220000,224,38940,560,2440,'YES' -'767','BOEING 767 (ALL SERIES)',2,'JET','YES',156.08,159.16,312000,290,69000,550,4500,'YES' -'B11','BRITISH AEROSPACE (BAC) ONE-ELEVEN (ALL SERIES)',2,'JET','NO',88.50,93.50,78500,79,17600,550,1430,'YES' -'VGP','BRITISH AEROSPACE (BAC-VICKERS) VANGUARD PASSENGER',4,'TURBOPROP','NO',118.00,122.87,146500,139,21500,405,2910,'YES' -'VCV','BRITISH AEROSPACE (BAC-VICKERS) VISCOUNT (ALL SERIES)',4,'TURBOPROP','NO',93.70,85.66,72500,75,14500,352,1725,'YES' -'HPH','BRITISH AEROSPACE (HANDLEY PAGE) HERALD',2,'TURBOPROP','NO',113.00,96.83,82000,74,12000,266,3150,'YES' -'HPJ','BRITISH AEROSPACE (HANDLEY PAGE) JETSTREAM 1/200',2,'TURBOPROP','NO',52.00,47.08,12550,18,4100,250,1440,'YES' -'DHH','BRITISH AEROSPACE (HAWKER SIDDELEY) HERON',4,'PROPELLER','NO',71.50,48.50,13500,17,2100,195,0,'NO' -'TRD','BRITISH AEROSPACE (HAWKER SIDDELEY) TRIDENT (ALL SERIES)',3,'JET','NO',95.00,114.75,135500,103,24500,606,2700,'YES' -'HS7','BRITISH AEROSPACE (HAWKER SIDDELEY) 748 PASSENGER',2,'TURBOPROP','NO',98.50,67.00,46500,56,11363,275,850,'YES' -'J31','BRITISH AEROSPACE JETSTREAM 31',2,'TURBOPROP','NO',52.00,47.12,12566,18,0,282,1380,'YES' -'141','BRITISH AEROSPACE 146-100',4,'JET','NO',86.41,85.83,74600,88,17277,460,1450,'YES' -'142','BRITISH AEROSPACE 146-200 PASSENGER',4,'JET','NO',86.41,93.66,89500,100,21000,460,1450,'YES' -'BNI','BRITTEN-NORMAN BN-2A/B ISLANDER/BN-2T TURBINE ISLANDER',2,'PROPELLER','NO',49.00,35.66,6300,10,2000,260,425,'NO' -'BNT','BRITTEN-NORMAN BN-2A MK III TRISLANDER',3,'PROPELLER','NO',53.00,43.75,9350,18,4000,180,0,'NO' -'CS2','CASA C-212/NUSANTARA NC-212 AVIOCAR',2,'TURBOPROP','NO',62.50,45.83,16427,28,6077,230,1400,'NO' -'CNA','CESSNA (ALL SERIES)',1,'TURBOPROP','NO',0.00,0.00,0,0,0,0,0,'NO' -'CN2','CESSNA STATIONAIR/TURBO STATIONAIR 6',1,'PROPELLER','NO',35.83,28.00,3600,7,1792,169,702,'NO' -'CNT','CESSNA STATIONAIR 207/TURBO STATIONAIR 7/8',1,'PROPELLER','NO',35.83,31.75,3800,7,1729,185,581,'NO' -'CN4','CESSNA 402/402 UTILILINER',2,'PROPELLER','NO',39.91,36.08,6300,8,2436,239,562,'NO' -'CVR','CONVAIR (ALL SERIES)',2,'TURBOPROP','NO',105.33,79.16,54600,56,11200,350,1100,'YES' -'CWC','CURTISS C-46 COMMANDO',2,'PROPELLER','NO',108.08,76.33,40000,60,12000,220,1600,'NO' -'DAM','DASSAULT-BREGUET MERCURE',2,'JET','NO',100.25,114.25,120150,0,32850,574,1094,'YES' -'DOS','DORNIER DO 28',2,'PROPELLER','NO',51.02,37.02,8852,15,3000,160,708,'' -'DO8','DORNIER 228 (ALL SERIES)',2,'TURBOPROP','NO',55.58,49.25,12570,19,6000,231,1065,'NO' -'EMB','EMBRAER EMP-110 BANDEIRANTE',2,'TURBOPROP','NO',50.16,49.41,12500,19,5000,262,900,'NO' -'EM2','EMBRAER EMP-120 BRASILIA',2,'TURBOPROP','NO',64.89,64.70,12295,30,0,288,628,'YES' -'FK7','FAIRCHILD INDUSTRIES FH-227',2,'TURBOPROP','NO',95.16,83.08,43500,52,11500,294,1520,'YES' -'SWM','FAIRCHILD (SWEARINGEN) METRO/MERLIN',2,'TURBOPROP','NO',46.25,59.33,12500,19,3950,294,2139,'YES' -'F27','FOKKER F27 FRIENDSHIP/FAIRCHILD (ALL SERIES)',2,'TURBOPROP','NO',95.16,82.16,45000,56,13500,265,1450,'YES' -'F28','FOKKER F28 FELLOWSHIP (ALL SERIES)',2,'JET','NO',82.25,96.16,73000,85,19623,523,1055,'YES' -'CD2','GOVERNMENT AIRCRAFT FACTORIES N22B/N24A NOMAD',2,'TURBOPROP','NO',54.00,43.00,8500,16,3000,165,850,'NO' -'GRA','GRUMMAN G-111 ALBATROSS G-111',2,'AMPHIBIAN','NO',96.66,61.25,31000,28,7965,160,1500,'NO' -'GRG','GRUMMAN G-21 GOOSE',2,'AMPHIBIAN','NO',49.00,38.33,8000,10,2000,160,825,'NO' -'GRM','GRUMMAN G-73 MALLARD',2,'AMPHIBIAN','NO',66.66,48.33,12750,10,1950,180,1245,'NO' -'GRS','GULFSTREAM AEROSPACE (GRUMMAN) GULFSTREAM 1/1-C',2,'TURBOPROP','NO',78.33,63.75,36000,37,4300,345,2300,'YES' -'IL4','ILYUSHIN IL14',2,'PROPELLER','NO',104.00,69.91,36380,24,4800,224,1250,'NO' -'IL8','ILYUSHIN IL18',4,'TURBOPROP','NO',122.70,117.79,119000,125,30860,403,1860,'YES' -'IL6','ILYUSHIN IL62/62M',4,'JET','NO',141.29,174.16,347224,186,50706,528,5716,'YES' -'ILW','ILYUSHIN IL86',4,'JET','YES',157.68,197.54,454152,350,0,575,0,'YES' -'LOM','LOCKHEED L188 ELECTRA MIXED CONFIGURATION',4,'TURBOPROP','NO',99.00,104.50,116000,0,0,390,2200,'' -'LOE','LOCKHEED L188 ELECTRA PASSENGER',4,'TURBOPROP','NO',99.00,104.54,116000,104,22000,405,2750,'YES' -'L10','LOCKHEED L1011 (ALL SERIES)',3,'JET','YES',155.25,177.58,430000,400,95500,615,3450,'YES' -'L15','LOCKHEED L1011-500 TRISTAR',3,'JET','YES',155.33,164.20,496000,330,115000,580,5998,'YES' -'MR4','MARTIN 404',2,'PROPELLER','NO',93.25,74.58,44900,44,9500,255,900,'YES' -'DC3','MCDONNELL DOUGLAS DC3/C47 DAKOTA PASSENGER',2,'PROPELLER','NO',95.00,64.50,25200,30,7380,207,1330,'NO' -'DC4','MCDONNELL DOUGLAS DOUGLAS DC4/C-54 SKYMASTER PASSENGER',4,'PROPELLER','NO',117.50,93.91,73800,80,11440,230,2750,'NO' -'DC6','MCDONNELL DOUGLAS DC6 (ALL SERIES)',4,'PROPELLER','NO',117.50,101.50,93200,80,12310,309,3070,'YES' -'D8M','MCDONNELL DOUGLAS DC8 MIXED CONFIGURATION (ALL SEIRES)',4,'JET','NO',142.33,187.41,325000,259,66665,600,3700,'YES' -'DC8','MCDONNELL DOUGLAS DC8 PASSENGER (ALL 20-50 SERIES)',4,'JET','NO',142.25,150.41,315000,176,34000,544,7010,'YES' -'D8S','MCDONNELL DOUGLAS DC8 (ALL 60/70 SERIES)',4,'JET','NO',142.25,187.33,325000,259,66665,580,7150,'YES' -'DC9','MCDONNELL DOUGLAS DC9 (ALL 10 & 20 SERIES)',2,'JET','NO',93.25,104.33,98000,90,20850,593,2200,'YES' -'D95','MCDONNELL DOUGLAS DC9-50',2,'JET','NO',93.25,133.41,12200,139,32615,593,2550,'YES' -'D10','MCDONNELL DOUGLAS DC10 (ALL SERIES)',3,'JET','YES',155.25,182.25,455000,380,98490,608,6350,'YES' -'M80','MCDONNELL DOUGLAS (MD-80 SERIES)',2,'JET','NO',107.83,147.83,140000,172,0,579,3060,'YES' -'MIH','MIL MI-8',2,'HELICOPTER','NO',50.20,108.85,26455,28,0,140,311,'' -'MU2','MITSUBISHI MU2/MARQUISE/SOLITARE',2,'TURBOPROP','NO',39.16,39.41,11575,8,0,347,1606,'' -'YS1','NAMC YS-11',2,'TURBOPROP','NO',105.00,86.25,51800,60,12550,292,1980,'YES' -'PN6','PARTENAVIA P.68 VICTOR',2,'PROPELLER','NO',39.37,31.33,4387,7,0,185,1312,'' -'PL6','PILATUS PC-6 TURBO-PORTER',1,'TURBOPROP','NO',49.66,35.75,4850,0,0,151,644,'' -'PA6','PIPER AEROSTAR',2,'TURBOPROP','NO',34.16,54.75,5500,6,240,250,1400,'YES' -'PAZ','PIPER APACHE/AZTEC',2,'PROPELLER','NO',37.33,31.16,5200,6,2151,206,1519,'NO' -'PAC','PIPER CHEROKEE',1,'PROPELLER','NO',32.83,27.66,3400,7,1544,167,856,'NO' -'PAH','PIPER NAVAJO/MOHAVE/CHIEFTAIN',2,'PROPELLER','NO',40.50,34.50,7000,8,0,254,1019,'NO' -'PAS','PIPER SENECA',2,'PROPELLER','NO',38.91,28.50,4570,7,1747,219,1036,'NO' -'PA1','PIPER T-1020/1040',2,'TURBOPROP','NO',41.08,36.66,9000,9,3800,250,900,'NO' -'ACD','ROCKWELL COMMANDER (ALL SERIES)',2,'PROPELLER','NO',49.50,35.08,6750,7,2750,205,1220,'YES' -'SF3','SAAB-FAIRCHILD 340',2,'TURBOPROP','NO',70.33,63.75,25020,34,0,300,920,'YES' -'SA2','SAUNDERS ST-27',2,'TURBOPROP','NO',71.50,59.00,13500,23,0,230,0,'NO' -'SHP','SHORTS SKYLINER',2,'TURBOPROP','NO',64.91,40.00,12500,19,4600,188,694,'YES' -'SHS','SHORTS SKYVAN',2,'TURBOPROP','NO',64.91,40.08,12500,19,0,188,694,'' -'SH3','SHORTS 330 PASSENGER',2,'TURBOPROP','NO',74.66,58.00,22000,30,7500,218,1137,'NO' -'SH6','SHORTS 360',2,'TURBOPROP','NO',74.83,70.83,26000,36,7500,244,1151,'NO' -'S58','SIKORSKY S58T',1,'HELICOPTER','NO',56.00,47.25,13000,16,0,127,278,'NO' -'S61','SIKORSKY S61',2,'HELICOPTER','NO',62.00,72.00,20500,30,5500,139,282,'NO' -'TU3','TUPOLEV TU134',2,'JET','NO',95.16,112.71,98100,72,14300,546,1490,'YES' -'TU5','TUPOLEV TU154',3,'JET','NO',123.20,157.14,198410,164,44090,605,3280,'YES' -'WLH','WESTLAND 30',2,'HELICOPTER','NO',43.66,52.16,12350,21,0,0,100,'' -'YK4','YAKOVLEV YAK-40',3,'JET','NO',82.08,66.75,35270,40,5070,342,1240,'YES' -'YK2','YAKOVLEV YAK-42',3,'JET','NO',112.20,119.35,114640,120,2000,510,621,'YES' -'100','FOKKER 100',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'146','BRITISH AEROSPACE 146 (ALL SERIES)',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'310','AIRBUS INDUSTRIE A310 (ALL SERIES)',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'320','AIRBUS INDUSTRIE A320 (ALL SERIES)',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'734','BOEING 737-400',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'743','BOEING 737-300 PASSENGER',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'744','BOEING 747-400 PASSENGER',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'74E','BOEING 747-400 MIXED CONFIGURATION',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'763','BOEING 767-300/300ER',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'BE1','BEECHCRAFT 1900',0,'TURBOPROP','',0.00,0.00,0,0,0,0,0,'' -'BUS','BUS',0,'','',0.00,0.00,0,0,0,0,0,'' -'CNJ','CESSNA CITATION',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'D3M','DOUGLAS DC3/C-47 DAKOTA MIXED CONFIGURATION',0,'PROPELLER','',0.00,0.00,0,0,0,0,0,'' -'D9S','MCDONNELL DOUGLAS DC9 (ALL 30/40/50 & 80 SERIES)',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'DHM','BOEING CANADA DHC-7 DASH 7 MIXED CONFIGURATION',0,'TURBOPROP','',0.00,0.00,0,0,0,0,0,'' -'LMO','LIMOSINE',0,'','',0.00,0.00,0,0,0,0,0,'' -'M87','MCDONNELL DOUGLAS MD-87',0,'JET','',0.00,0.00,0,0,0,0,0,'' -'NDE','AEROSPATIALE AS 350 ECUREUIL/AS 355 ECUREUIL 2',1,'TURBOPROP','',0.00,0.00,0,0,0,0,0,'' -'PAG','PIPER (ALL SERIES)',0,'PROPELLER','',0.00,0.00,0,0,0,0,0,'' -'S76','SIKORSKY S76',1,'TURBOPROP','',0.00,0.00,0,0,0,0,0,'' diff --git a/sql-bench/Data/ATIS/airline.txt b/sql-bench/Data/ATIS/airline.txt deleted file mode 100644 index 7e825a5c59639626f92096713daba2a4c1c5d82b..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/airline.txt +++ /dev/null @@ -1,314 +0,0 @@ -'AA','AMERICAN AIRLINES','' -'AC','AIR CANADA','' -'AD','EXEC EXPRESS II,INC.','' -'AF','AIR FRANCE','' -'AG','ATLANTIC AIRWAYS LIMITED','' -'AM','AEROMEXICO - AEROVIAS DE MEXICO S.A. DE C.V.','' -'AP','ASPEN AIRWAYS,INC.','' -'AQ','ALOHA AIRLINES INC.','' -'AR','AEROLINEAS ARGENTINAS','' -'AS','ALASKA AIRLINES','' -'AT','ROYAL AIR MAROC','' -'AV','AVIANCA','' -'AY','FINNAIR','' -'AZ','ALITALIA','' -'BA','BRITISH AIRWAYS','' -'BE','ENTERPRISE AIRLINES,INC.','' -'BF','MARKAIR,INC.','' -'BK','CHALKS/PARADISE ISLAND AIRLINES','' -'BL','AIR BVI,LTD.','' -'BW','BWIA INTERNATIONAL','' -'CA','CAAC','' -'CD','TRANS-PROVINCIAL AIRLINES LTD.','' -'CH','BEMIDJI AIRLINES','' -'CI','CHINA AIRLINES LTD.','' -'CO','CONTINENTAL AIRLINES','' -'CP','CANADIAN AIRLINES INTERNATIONAL LTD.','' -'CS','AIR TORONTO','' -'CT','MIDCONTINENT AIRLINES INC.','' -'CU','CUBANA AIRLINES','' -'CX','CATHAY PACIFIC AIRWAYS LTD.','' -'DD','COMMAND AIRWAYS,INC.','' -'DE','PRIME AIR,INC.','' -'DF','AERO COACH AVIATION INTERNATIONAL,INC.','' -'DL','DELTA AIR LINES,INC.','' -'DO','DOMINICANA DE AVIACION','' -'DQ','COASTAL AIR TRANSPORT','' -'DV','NANTUCKET AIRLINES','' -'EA','EASTERN AIR LINES,INC.','' -'ED','CCAIR INC.','' -'EI','AER LINGUS P.L.C.','' -'EJ','NEW ENGLAND AIRLINES,INC.','' -'EM','EMPIRE AIRWAYS','' -'EU','EMPRESA ECUATORIANA DE AVIACION','' -'EV','ATLANTIC SOUTHEAST AIRLINES,INC.','' -'FC','CHAPARRAL AIRLINES,INC.','' -'FH','MALL AIRWAYS INC.','' -'FI','ICELANDAIR','' -'FK','FLAMENCO AIRWAYS,INC.','' -'FN','SFO HEICOPTER AIRLINES,INC.','' -'FQ','AIR ARUBA','' -'FX','EXPRESS AIR,INC.','' -'FY','METROFLIGHT AIRLINES','' -'GA','GARUDA INDONESIAN AIRWAYS','' -'GM','AIR AMERICA','' -'GQ','BIG SKY AIRLINES','' -'GS','BAS AIRLINES','' -'GU','AVIATECA S.A.','' -'HA','HAWAIIAN AIR LINES','' -'HD','NEW YORK HELICOPTER CORPORATION','' -'HE','KEYSTONE AIR SERVICE LTD.','' -'HG','HARBOR AIRLINES,INC','' -'HI','GRAND CANYON HELICOPTERS','' -'HP','AMERICA WEST AIRLINES,INC.','' -'HQ','BUSINESS EXPRESS','' -'HY','METRO AIRLINES','' -'IB','IBERIA','' -'IF','INTERFUG','' -'IH','CHANNEL FLYING,INC.','SERVICE TEMPORARILY SUSPENDED' -'IN','EAST HAMPTON AIRE','' -'IU','HELITRANS AIR SERVICE,INC.','' -'JB','HELIJET AIRWAYS','' -'JC','ROCKY MOUNTAIN AIRWAYS','' -'JF','L.A.B. FYING SERVICE,INC.','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'JI','JET EXPRESS','' -'JL','JAPAN AIRLINES','' -'JM','AIR JAMAICA LIMITED','' -'JO','HOLIDAY AIRLINES,INC.','' -'JQ','TRANS-JAMAICAN AIRLINES LTD.','' -'JR','AERO CALIFORNIA','' -'JT','IOWA AIRWAYS,INC.','' -'JU','YUGOSLAV AIRLINES (JAT)','' -'JV','BEARSKIN LAKE AIR SERVICE LIMITED','' -'KE','KOREAN AIR','' -'KI','TIME AIR LTD.','' -'KL','KLM-ROYAL DUTCH AIRLINES','' -'KS','PENINSULA AIRWAYS,INC.','' -'KW','CARNIVAL AIR LINES','' -'KX','CAYMAN AIRWAYS,LTD.','' -'LA','LAN CHILE S.A.','' -'LH','LUFTHANSA GERMAN AIRLINES','' -'LI','LIAT (1974) LTD.','' -'LM','ALM-ANTILLEAN AIRLINES','' -'LR','LACSA','' -'LS','ILIAMNA AIR TAXI,INC.','' -'LV','LAV-LINEA AEROPOSTAL VENEZOLANA','' -'LW','AIR NEVADA','' -'LY','EL AL ISRAEL AIRLINES','' -'MG','MGM GRAND AIR,INC.','' -'MH','MALAYSIAN AIRLINE SYSTEM','' -'ML','MIDWAY AIRLINES,INC.','' -'MO','CALM AIR INTERNATIONAL LTD.','' -'MQ','SIMMONS AIRLINES','' -'MX','MEXICANA DE AVIACION','' -'NA','EXECUTIVE AIR CHARTER','' -'ND','INTAIR','' -'NN','C.A.A.A.-AIR MARTINIQUE','' -'NQ','CUMBERLAND AIRLINES','' -'NR','NORONTAIR','' -'NV','NORTHWEST TERRITORIAL AIRWAYS,LTD.','' -'NW','NORTHWEST AIRLINES,INC.','' -'OA','OLYMPIC AIRWAYS','' -'OB','TEMPUS AIR LTD.','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'OE','WESTAIR AIRLINES','' -'OG','AIR GUADELOUPE','' -'OH','COMAIR,INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'OJ','AIR ST.-BARTHELEMY','' -'OK','CZECHOSLOVAK AIRLINES','' -'OO','SKY WEST AIRLINES','' -'OQ','AEROLIBERTAD S.A. DE C.V.','' -'OT','EVERGREEN ALASKA','' -'OU','CITY EXPRESS','' -'OY','SUNAIRE','' -'PA','PAN AMERICAN WORLD AIRWAYS,INC.','' -'PD','PEM AIR LIMITED','' -'PK','PAKISTAN INTERNATIONAL AIRLINES','' -'PN','COASTAL AIRWAYS','' -'PQ','HOLIDAY AIRWAYS','SERVICE TEMPORARILY SUSPENDED' -'PR','PHILIPPINE AIRLINES,INC.','' -'PS','CENTRAL STATES AIRLINES,INC.','' -'PT','PBA-PROVINCETOWN-BOSTON AIRLINE,INC.','' -'PV','PANORAMA AIR','' -'PY','SURINAM AIRWAYS LTD.','' -'QA','AERO CARIBE','' -'QB','INTER-QUEBEC','' -'QD','GRAND AIRWAYS,INC.','' -'QF','QANTAS AIRWAYS LTD.','' -'QO','BAR HARBOR AIRLINES','' -'QQ','DRUMMOND ISLAND AIR','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'QR','AIR SATELLITE,INC.','' -'QS','PROPHETER AVIATION','' -'QW','TURKS AND CAICOS NATIONAL AIRLINE','' -'QX','HORIZON AIR','' -'QY','AERO VIRGIN ISLANDS CORP','' -'RG','VARIG,S.A.','' -'RH','REGAL BAHAMAS INTERNATIONAL AIRLINES','' -'RJ','ROYAL JORDANIAN','' -'RM','WINGS WEST AIRLINE,INC.','' -'RP','PRECISION AIRLINES','' -'RV','REEVE ALEUTIAN AIRWAYS,INC.','' -'SE','WINGS OF ALASKA','' -'SK','SCANDINAVIAN AIRLINES SYSTEM','' -'SN','SABENA BELGIAN WORLD AIRLINES','' -'SQ','SINGAPORE AIRLINES','' -'SR','SWISSAIR','' -'SS','METRO AIRLINES NORTHEAST INC.','' -'SU','AEROFLOT-SOVIET AIRLINES','' -'SV','SAUDI ARABIAN AIRLINES','' -'SX','CHRISTMAN AIR SYSTEM','' -'TB','TRUMP SHUTTLE,INC.','' -'TE','AIR NEW ZEALAND-INTERNATIONAL','' -'TG','THAI AIRWAYS INTERNATIONAL,LTD.','' -'TO','ALKAN AIR LTD.','' -'TP','TAP AIR PORTUGAL','' -'TV','HAITI TRANS AIR S.A.','' -'TW','TRANS WORLD AIRLINES,INC.','' -'TZ','AMERICAN TRANS AIR','' -'UA','UNITED AIRLINES','' -'UC','LADECO-LINEA AEREA DEL COBRE','' -'UE','AIR LA','' -'UJ','AIR SEDONA','' -'UO','DIRECT AIR,INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'UP','BAHAMASAIR','' -'US','USAIR','' -'UT','U.T.A. - UNION DE TRANSPORTS AERIENS','' -'UW','PERIMETER AIRLINES (INLAND) LTD.','' -'VA','VIASA','' -'VI','VIEQUES AIR LINK,INC.','' -'VW','TRANSPORTES AEROMAR,S.A. DE C.V.','' -'WD','WARDAIR','' -'WJ','LABRADOR AIRWAYS,LTD.','' -'WM','WINDWARD ISLAND AIRWAYS INTERNATIONAL N.V.','' -'WN','SOUTHWEST AIRLINES','' -'WP','ALOHA ISLANDAIR,INC.','' -'WQ','WINGS AIRWAYS','NATL AIR TRANSPORTATION ASSOC,INC.' -'WS','WESTATES AIRLINES','SERVICE TEMPORARILY SUSPENDED' -'WV','MIDWEST AVIATION','' -'XE','SOUTHCENTRAL AIR,INC.','' -'XJ','MESABA AVIATION','' -'XK','RESORT COMMUTER,INC.','' -'XQ','ACTION AIRLINES','' -'XV','PRESIDENTIAL AIRWAYS,INC.','' -'XW','WALKER\'S INTERNATIONAL','' -'XY','RYAN AIR,INC.','' -'YE','GRAND CANYON AIRLINES,INC.','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'YI','AIR SUNSHINE INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'YL','LONG ISLAND AIRLINES','' -'YN','AIR CREEBEC INC.','' -'YR','SCENIC AIRLINES INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'YS','SAN JUAN AIRLINES','' -'YU','AEROLINEAS DOMINICANAS,S.A. - DOMINAIR','' -'YV','MESA AIRLINES','' -'YW','STATESWEST AIRLINES,INC.','' -'YX','MIDWEST EXPRESS AIRLINES,INC.','' -'ZD','ROSS AVIATION,INC.','NATL AIR TRANSPORTATION ASSOC,INC' -'ZE','AIR CARIBE INTERNATIONAL,INC.','' -'ZK','GREAT LAKES AVIATION,LTD.','' -'ZO','MOHAWK AIRLINES','' -'ZP','VIRGIN AIR,INC.','' -'ZS','HISPANIOLA AIRWAYS C. POR A.','' -'ZV','AIR MIDWEST','' -'ZW','AIR WISCONSIN','' -'ZX','AIR BC,LTD.','' -'2E','HERMENS/MARKAIR EXPRESS','' -'2F','FRONTIER FLYING SERVICE','' -'2P','PRAIRIE FLYING SERVICE (1976) LTD.','' -'2Q','AQUILA AIR LTD','' -'2V','NORTHEAST EXPRESS REGIONAL AIRLINES','NATL AIR TRANSPORTATION ASSOC,INC.' -'2Z','SERVICIOS AEROS LITORAL S.A. DE C.V.','' -'3A','ALLIANCE AIRLINES','' -'3C','CAMAI AIR','' -'3G','VIRGIN ISLANDS SEAPLANE SHUTTLE','SERVICE TEMPORARILY SUSPENDED' -'3H','AIR INUIT (1985) LTD.','' -'3L','AIR-LIFT ASSOCIATES,INC','' -'3N','PAC AIR','' -'3R','AIR MOLOKAI - TROPIC AIRLINES','SERVICE TEMPORARILY SUSPENDED' -'3S','SHUSWAP AIR','' -'3V','WAGLISLA AIR INC.','' -'4A','AIRWAYS INTERNATIONAL,INC.','' -'4B','OLSON AIR SERVICE,INC.','' -'4E','TANANA AIR SERVICE','' -'4F','FRONTIER AIR','' -'4G','INLET AIRLINES,INC.','' -'4K','KENN BOREK AIR LTD.','' -'4L','AIR ALMA INC.','' -'4N','AIR NORTH','' -'4T','PACIFIC RIM AIRLINES LTD.','' -'4V','VOYAGEUR AIRWAYS LTD.','' -'4W','WRANGELL AIR SERVICE','' -'4Y','YUTE AIR ALASKA,INC.','SERVICE TEMPORARILY SUSPENDED' -'5A','ALPINE AVIATION,INC.','' -'5B','BELLAIR INC.','' -'5E','HUB EXPRESS,INC.','' -'5K','KENMORE AIR HARBOR,INC.','' -'5L','LAREDO AIR,INC.','' -'5N','SEAGULL AIR SERVICE,INC.','SERVICE TEMPORARILY SUSPENDED' -'5P','PTARMIGAN AIRWAYS LTD','' -'5S','AIRSPEED AVIATION INC.','' -'5T','AVIACION DEL NOROESTE','' -'5U','SKAGWAY AIR SERVICE,INC.','' -'5V','AVIAIR AVIATION (1984) LTD.','' -'5W','CHARTAIR,INC.','' -'6A','PANAMA AIRWAYS','' -'6B','BAXTER AVIATION','' -'6C','CAPE SMYTHE AIR SERVICE,INC.','' -'6D','ALASKA ISLAND AIR,INC.','' -'6E','BURRARD AIR LTD.','' -'6G','LAS VEGAS AIRLINES','' -'6J','SOUTHERN JERSEY AIRWAYS,INC.','' -'6K','KEEWATIN AIR LIMITED','' -'6L','AKLAK AIR LTD.','' -'6M','40-MILE AIR,LTD.','' -'6P','PROPAIR INC.','' -'6Q','BARROW AIR,INC.','' -'6S','KETCHIKAN AIR SERVICE,INC.','' -'6T','TYEE AIRWAYS LIMITED','' -'6V','AIR VEGAS,INC.','' -'6W','WILDERNESS AIRLINE (1975) LTD.','' -'7A','HAINES AIRWAYS,INC.','' -'7D','TRUMP AIR','' -'7F','FIRST AIR','' -'7G','GULFSTREAM AIRLINES,INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'7H','ERA AVIATION','' -'7K','LARRY\'S FLYING SERVICE,INC','' -'7L','LAKE UNION AIR SERVICE','' -'7N','NORTHLAND AIR MANITOBA LIMITED','' -'7Q','CALIFORNIA AIR SHUTTLE','' -'7R','GCS AIR SERVICE,INC.','' -'7T','TRANS COTE INC.','' -'7V','ALPHA AIR','' -'7W','AIR SASK AVIATION','' -'8B','BAKER AVIATION,INC.','' -'8D','SKYLINK AIRLINES','SERVICE TEMPORARILY SUSPENDED' -'8E','BERING AIR,INC.','' -'8F','WILBUR\'S INC.','' -'8G','GP EXPRESS AIRLINES,INC.','' -'8H','HARBOR AIR SERVICE','' -'8K','AIR MUSKOKA','' -'8L','SERVICIO AEREO LEO LOPEZ','' -'8M','APEX AIRLINES','' -'8N','NASHVILLE EAGLE,INC.','' -'8P','POCONO AIRLINES','' -'8R','WRA,INC.','' -'8T','TRI AIR,INC.','SERVICE TEMPORARILY SUSPENDED' -'8V','WRIGHT AIR SERVICE,INC.','' -'9A','AIR ATLANTIC LTD.','' -'9C','ICARUS FLYING SERVICE,LTD.','' -'9D','DELTA AIR CHARTER LTD.','' -'9E','EXPRESS AIRLINES I,INC.','' -'9F','SKYCRAFT AIR TRANSPORT INC.','' -'9K','CAPE AIR','' -'9M','CENTRAL MOUNTAIN AIR LTD.','' -'9N','TRANS STATES AIRLINES,INC.','' -'9Q','TAQUAN AIR SERVICE,INC.','' -'9S','SABOURIN LAKE AIRWAYS LTD.','' -'9V','AIR SCHEFFERVILLE','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'GD','AIR SOUTH,INC.','NATL AIR TRANSPORTATION ASSOC,INC.' -'VL','SUN PACIFIC AIRLINES,INC.','' -'3D','EDGARTOWN AIR,INC.','' -'4Q','TRANS NORTH AVIATION,LTD.','CARRIER PERFORMS SEASONAL SERVICE ONLY' -'4R','RAVEN AIR,INC.','' -'4X','L\'EXPRESS AIRLINES','' -'5C','CONQUEST AIRLINES CORP.','' -'7C','SIERRA VISTA AVIATION','SERVICE TEMPORARILY SUSPENDED' -'MC','MILITARY AIRLIFT COMMAND (MAC)-U.S. DEPARTMENT OF THE AIR FORCE','' diff --git a/sql-bench/Data/ATIS/airport.txt b/sql-bench/Data/ATIS/airport.txt deleted file mode 100644 index 9da49b2b2f0b2dfda27313118faa69071bd673f0..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/airport.txt +++ /dev/null @@ -1,9 +0,0 @@ -'ATL','WILLIAM B. HARTSFIELD','ATLANTA,GEORGIA','GA','USA','EST' -'BOS','LOGAN INTERNATIONAL','BOSTON,MASSACHUSETTS','MA','USA','EST' -'BWI','BALTIMORE/WASHINGTON INTERNATIONAL','BALTIMORE,MARYLAND','MD','USA','EST' -'DEN','STAPLETON INTERNATIONAL','DENVER,COLORADO','CO','USA','MST' -'DFW','DALLAS/FORT WORTH INTERNATIONAL','DALLAS/FT. WORTH,TEXAS','TX','USA','CST' -'OAK','METROPOLITAN OAKLAND INTERNATIONAL','OAKLAND,CALIFORNIA','CA','USA','PST' -'PHL','PHILADELPHIA INTERNATIONAL','PHILADELPHIA PA/WILM\'TON,DE','PA','USA','EST' -'PIT','GREATER PITTSBURGH','PITTSBURGH,PENNSYLVANIA','PA','USA','EST' -'SFO','SAN FRANCISCO INTERNATIONAL','SAN FRANCISCO,CALIFORNIA','CA','USA','PST' diff --git a/sql-bench/Data/ATIS/airport_service.txt b/sql-bench/Data/ATIS/airport_service.txt deleted file mode 100644 index c38aa186db3cefc52f431c1dc9c1257591202192..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/airport_service.txt +++ /dev/null @@ -1,14 +0,0 @@ -'MATL','ATL',9.0,'S',45 -'BBOS','BOS',3.0,'NE',30 -'DDFW','DFW',13.0,'NW',70 -'FDFW','DFW',17.0,'E',55 -'DDEN','DEN',6.5,'NE',30 -'PPHL','PHL',7.0,'SW',35 -'PPIT','PIT',17.0,'W',55 -'OOAK','OAK',10.0,'SE',15 -'OOAK','SFO',24.0,'SW',60 -'SSFO','SFO',8.0,'SE',30 -'SSFO','OAK',18.0,'SE',60 -'WWAS','BWI',32.0,'NE',50 -'BBWI','BWI',10.0,'S',25 -'','',0.0,'',0 diff --git a/sql-bench/Data/ATIS/city.txt b/sql-bench/Data/ATIS/city.txt deleted file mode 100644 index eb826a37283bde8d771d1019c8d8223fd0b339c7..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/city.txt +++ /dev/null @@ -1,11 +0,0 @@ -'MATL','ATLANTA','GA','USA','EST' -'BBOS','BOSTON','MA','USA','EST' -'DDFW','DALLAS','TX','USA','CST' -'FDFW','FORT WORTH','TX','USA','CST' -'DDEN','DENVER','CO','USA','MST' -'PPHL','PHILADELPHIA','PA','USA','EST' -'PPIT','PITTSBURGH','PA','USA','EST' -'SSFO','SAN FRANCISCO','CA','USA','PST' -'OOAK','OAKLAND','CA','USA','PST' -'WWAS','WASHINGTON','DC','USA','EST' -'BBWI','BALTIMORE','MD','USA','EST' diff --git a/sql-bench/Data/ATIS/class_of_service.txt b/sql-bench/Data/ATIS/class_of_service.txt deleted file mode 100644 index ab9b9c481929abb633a4fe7ef9ce1e1375289d49..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/class_of_service.txt +++ /dev/null @@ -1,27 +0,0 @@ -'R',1,'SUPERSONIC AIRCRAFT' -'P',2,'FIRST CLASS PREMIUM' -'F',3,'FIRST CLASS' -'A',4,'FIRST CLASS DISCOUNTED' -'J',5,'BUSINESS CLASS PREMIUM' -'C',6,'BUSINESS CLASS' -'D',7,'BUSINESS CLASS DISCOUNTED' -'S',8,'STANDARD CLASS' -'W',9,'COACH ECONOMY CLASS PREMIUM' -'FN',10,'FIRST CLASS NIGHT SERVICE' -'Y',11,'COACH ECONOMY CLASS' -'CN',12,'BUSINESS CLASS NIGHT SERVICE' -'YN',13,'COACH ECONOMY CLASS NIGHT SERVICE' -'B',14,'COACH ECONOMY CLASS DISCOUNTED' -'H',15,'COACH ECONOMY CLASS DISCOUNTED' -'Q',16,'COACH ECONOMY CLASS DISCOUNTED' -'M',17,'COACH ECONOMY CLASS DISCOUNTED' -'T',18,'COACH ECONOMY CLASS DISCOUNTED' -'K',19,'THRIFT ECONOMY CLASS' -'L',20,'THRIFT ECONOMY CLASS DISCOUNTED' -'V',21,'THRIFT ECONOMY CLASS DISCOUNTED' -'BN',22,'COACH ECONOMY CLASS DISCOUNTED NIGHT SERVICE' -'QN',23,'COACH ECONOMY CLASS DISCOUNTED NIGHT SERVICE' -'KN',24,'THRIFT ECONOMY CLASS DISCOUNTED NIGHT SERVICE' -'VN',25,'THRIFT ECONOMY CLASS DISCOUNTED NIGHT SERVICE' -'U',26,'SHUTTLE SERVICE (NO RESERVATION NEEDED - SEAT GUARANTEED)' -'E',27,'SHUTTLE SERVICE (NO RESERVATION ALLOWED - SEAT TO BE CONFIRMED AT CHECK-IN)' diff --git a/sql-bench/Data/ATIS/code_description.txt b/sql-bench/Data/ATIS/code_description.txt deleted file mode 100644 index d832a21b019236abcf82372bc4c5d20057748ff8..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/code_description.txt +++ /dev/null @@ -1,15 +0,0 @@ -'-','A DASH IN A DAY CODE POSITION INDICATES NON-OPERATION ON THAT DAY' -'AP','ADVANCE PURCHASE EXCURSION FARE' -'CAD','CANADIAN DOLLARS' -'EX','EXCURSION FARE' -'H','HIGHEST LEVEL OF FARE HAVING MORE THAN ONE SEASONAL LEVEL' -'J','THIRD LEVEL OF FARE HAVING MORE THAN THREE SEASONAL LEVELS' -'K','SECOND LEVEL OF A FARE HAVING MORE THAN TWO SEASONAL LEVELS' -'L','LOWEST LEVEL OF FARE HAVING MORE THAN ONE SEASONAL LEVEL' -'MEP','MEXICAN PESOS' -'O','SECOND LEVEL OF A FARE HAVING MORE THAN TWO SEASONAL LEVELS' -'N','NIGHT SERVICE' -'VU','VISIT USA FARE' -'W','WHEN USED AS PART OF A FARE CLASS SUCH AS YW,INDICATES WEEKEND APPLICATION.' -'X','WHEN USED AS PART OF A FARE CLASS SUCH AS YX,INDICATES WEEKDAY APPLICATION.' -'U.S.','48 CONTIGUOUS STATES (NOT INCLUDING ALASKA AND HAWAII) UNLESS OTHERWISE NOTED.' diff --git a/sql-bench/Data/ATIS/compound_class.txt b/sql-bench/Data/ATIS/compound_class.txt deleted file mode 100644 index 86c0df5b53381718be175f68c7a0be709cc1b03d..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/compound_class.txt +++ /dev/null @@ -1,149 +0,0 @@ -'A','A','FIRST','NO','NO','YES','NO','NONE','1234567' -'AH','A','FIRST','NO','NO','YES','NO','HIGH','1234567' -'AJ','A','FIRST','NO','NO','YES','NO','MID','1234567' -'AL','A','FIRST','NO','NO','YES','NO','LOW','1234567' -'B','B','COACH','NO','YES','YES','NO','NONE','1234567' -'BH','B','COACH','NO','YES','YES','NO','HIGH','1234567' -'BHW','B','COACH','NO','YES','YES','NO','HIGH','-----67' -'BHX','B','COACH','NO','YES','YES','NO','HIGH','12345--' -'BL','B','COACH','NO','YES','YES','NO','LOW','1234567' -'BLW','B','COACH','NO','YES','YES','NO','LOW','-----67' -'BLX','B','COACH','NO','YES','YES','NO','LOW','12345--' -'BN','BN','COACH','NO','YES','YES','YES','NONE','1234567' -'BO','B','COACH','NO','YES','YES','NO','MID','1234567' -'BOW','B','COACH','NO','YES','YES','NO','MID','-----67' -'BOX','B','COACH','NO','YES','YES','NO','MID','12345--' -'BW','B','COACH','NO','YES','YES','NO','NONE','-----67' -'BX','B','COACH','NO','YES','YES','NO','NONE','12345--' -'C','C','BUSINESS','NO','NO','NO','NO','NONE','1234567' -'CH','C','BUSINESS','NO','NO','NO','NO','HIGH','1234567' -'CHW','C','BUSINESS','NO','NO','NO','NO','HIGH','-----67' -'CHX','C','BUSINESS','NO','NO','NO','NO','HIGH','12345--' -'CL','C','BUSINESS','NO','NO','NO','NO','LOW','1234567' -'CLW','C','BUSINESS','NO','NO','NO','NO','LOW','-----67' -'CLX','C','BUSINESS','NO','NO','NO','NO','LOW','12345--' -'CN','CN','BUSINESS','NO','NO','NO','YES','NONE','1234567' -'CO','C','BUSINESS','NO','NO','NO','NO','MID','1234567' -'CW','C','BUSINESS','NO','NO','NO','NO','NONE','-----67' -'CX','C','BUSINESS','NO','NO','NO','NO','NONE','12345--' -'D','D','BUSINESS','NO','NO','YES','NO','NONE','1234567' -'F','F','FIRST','NO','NO','NO','NO','NONE','1234567' -'FH','F','FIRST','NO','NO','NO','NO','HIGH','1234567' -'FHW','F','FIRST','NO','NO','NO','NO','HIGH','-----67' -'FHX','F','FIRST','NO','NO','NO','NO','HIGH','12345--' -'FL','F','FIRST','NO','NO','NO','NO','LOW','1234567' -'FLW','F','FIRST','NO','NO','NO','NO','LOW','-----67' -'FLX','F','FIRST','NO','NO','NO','NO','LOW','12345--' -'FN','FN','FIRST','NO','NO','NO','YES','NONE','1234567' -'FO','F','FIRST','NO','NO','NO','NO','MID','1234567' -'FW','F','FIRST','NO','NO','NO','NO','NONE','-----67' -'FX','F','FIRST','NO','NO','NO','NO','NONE','12345--' -'H','H','COACH','NO','YES','YES','NO','NONE','1234567' -'HH','H','COACH','NO','YES','YES','NO','HIGH','1234567' -'HHW','H','COACH','NO','YES','YES','NO','HIGH','-----67' -'HHX','H','COACH','NO','YES','YES','NO','HIGH','12345--' -'HK','H','COACH','NO','YES','YES','NO','MID','1234567' -'HKW','H','COACH','NO','YES','YES','NO','MID','-----67' -'HKX','H','COACH','NO','YES','YES','NO','MID','12345--' -'HL','H','COACH','NO','YES','YES','NO','LOW','1234567' -'HLW','H','COACH','NO','YES','YES','NO','LOW','-----67' -'HLX','H','COACH','NO','YES','YES','NO','LOW','12345--' -'HO','H','COACH','NO','YES','YES','NO','MID','1234567' -'HOW','H','COACH','NO','YES','YES','NO','MID','-----67' -'HOX','H','COACH','NO','YES','YES','NO','MID','12345--' -'HW','H','COACH','NO','YES','YES','NO','NONE','-----67' -'HX','H','COACH','NO','YES','YES','NO','NONE','12345--' -'J','J','BUSINESS','YES','NO','NO','NO','NONE','1234567' -'JH','J','BUSINESS','YES','NO','NO','NO','HIGH','1234567' -'JK','J','BUSINESS','YES','NO','NO','NO','MID','1234567' -'JL','J','BUSINESS','YES','NO','NO','NO','LOW','1234567' -'JO','J','BUSINESS','YES','NO','NO','NO','MID','1234567' -'K','K','THRIFT','NO','YES','NO','NO','NONE','1234567' -'KH','K','THRIFT','NO','YES','NO','NO','HIGH','1234567' -'KHW','K','THRIFT','NO','YES','NO','NO','HIGH','-----67' -'KHX','K','THRIFT','NO','YES','NO','NO','HIGH','12345--' -'KL','K','THRIFT','NO','YES','NO','NO','LOW','1234567' -'KLW','K','THRIFT','NO','YES','NO','NO','LOW','-----67' -'KLX','K','THRIFT','NO','YES','NO','NO','LOW','12345--' -'KN','KN','THRIFT','NO','YES','YES','YES','NONE','1234567' -'KO','K','THRIFT','NO','YES','NO','NO','MID','1234567' -'KW','K','THRIFT','NO','YES','NO','NO','NONE','-----67' -'KX','K','THRIFT','NO','YES','NO','NO','NONE','12345--' -'L','L','THRIFT','NO','YES','YES','NO','NONE','1234567' -'LH','L','THRIFT','NO','YES','YES','NO','HIGH','1234567' -'LHW','L','THRIFT','NO','YES','YES','NO','HIGH','-----67' -'LHX','L','THRIFT','NO','YES','YES','NO','HIGH','12345--' -'LL','L','THRIFT','NO','YES','YES','NO','LOW','1234567' -'LLW','L','THRIFT','NO','YES','YES','NO','LOW','-----67' -'LLX','L','THRIFT','NO','YES','YES','NO','LOW','12345--' -'LO','L','THRIFT','NO','YES','YES','NO','MID','1234567' -'LOW','L','THRIFT','NO','YES','YES','NO','MID','-----67' -'LOX','L','THRIFT','NO','YES','YES','NO','MID','12345--' -'LW','L','THRIFT','NO','YES','YES','NO','NONE','-----67' -'LX','L','THRIFT','NO','YES','YES','NO','NONE','12345--' -'M','M','COACH','NO','YES','YES','NO','NONE','1234567' -'MH','M','COACH','NO','YES','YES','NO','HIGH','1234567' -'MHW','M','COACH','NO','YES','YES','NO','HIGH','-----67' -'MHX','M','COACH','NO','YES','YES','NO','HIGH','12345--' -'MKW','M','COACH','NO','YES','YES','NO','MID','-----67' -'MKX','M','COACH','NO','YES','YES','NO','MID','12345--' -'ML','M','COACH','NO','YES','YES','NO','LOW','1234567' -'MLW','M','COACH','NO','YES','YES','NO','LOW','-----67' -'MLX','M','COACH','NO','YES','YES','NO','LOW','12345--' -'MO','M','COACH','NO','YES','YES','NO','MID','1234567' -'MOW','M','COACH','NO','YES','YES','NO','MID','-----67' -'MOX','M','COACH','NO','YES','YES','NO','MID','12345--' -'MW','M','COACH','NO','YES','YES','NO','NONE','-----67' -'MX','M','COACH','NO','YES','YES','NO','NONE','12345--' -'P','P','FIRST','YES','NO','NO','NO','NONE','1234567' -'Q','Q','COACH','NO','YES','YES','NO','NONE','1234567' -'QH','Q','COACH','NO','YES','YES','NO','HIGH','1234567' -'QHW','Q','COACH','NO','YES','YES','NO','HIGH','-----67' -'QHX','Q','COACH','NO','YES','YES','NO','HIGH','12345--' -'QL','Q','COACH','NO','YES','YES','NO','LOW','1234567' -'QLW','Q','COACH','NO','YES','YES','NO','LOW','-----67' -'QLX','Q','COACH','NO','YES','YES','NO','LOW','12345--' -'QN','QN','COACH','NO','YES','YES','YES','NONE','1234567' -'QO','Q','COACH','NO','YES','YES','NO','MID','1234567' -'QOW','Q','COACH','NO','YES','YES','NO','MID','-----67' -'QOX','Q','COACH','NO','YES','YES','NO','MID','12345--' -'QW','Q','COACH','NO','YES','YES','NO','NONE','-----67' -'QX','Q','COACH','NO','YES','YES','NO','NONE','12345--' -'R','R','SUPERSONIC','NO','NO','NO','NO','NONE','1234567' -'S','S','STANDARD','NO','NO','NO','NO','NONE','1234567' -'SH','S','STANDARD','NO','NO','NO','NO','HIGH','1234567' -'SL','S','STANDARD','NO','NO','NO','NO','LOW','1234567' -'T','T','COACH','NO','YES','YES','NO','NONE','1234567' -'TH','T','COACH','NO','YES','YES','NO','HIGH','1234567' -'TL','T','COACH','NO','YES','YES','NO','LOW','1234567' -'TO','T','COACH','NO','YES','YES','NO','MID','1234567' -'V','V','THRIFT','NO','YES','YES','NO','NONE','1234567' -'VH','V','THRIFT','NO','YES','YES','NO','HIGH','1234567' -'VHW','V','THRIFT','NO','YES','YES','NO','HIGH','-----67' -'VHX','V','THRIFT','NO','YES','YES','NO','HIGH','12345--' -'VK','V','THRIFT','NO','YES','YES','NO','MID','1234567' -'VL','V','THRIFT','NO','YES','YES','NO','LOW','1234567' -'VLW','V','THRIFT','NO','YES','YES','NO','LOW','-----67' -'VLX','V','THRIFT','NO','YES','YES','NO','LOW','12345--' -'VO','V','THRIFT','NO','YES','YES','NO','MID','1234567' -'VOW','V','THRIFT','NO','YES','YES','NO','MID','-----67' -'VOX','V','THRIFT','NO','YES','YES','NO','MID','12345--' -'VW','V','THRIFT','NO','YES','YES','NO','NONE','-----67' -'VX','V','THRIFT','NO','YES','YES','NO','NONE','12345--' -'Y','Y','COACH','NO','YES','NO','NO','NONE','1234567' -'YH','Y','COACH','NO','YES','NO','NO','HIGH','1234567' -'YHW','Y','COACH','NO','YES','NO','NO','HIGH','-----67' -'YHX','Y','COACH','NO','YES','NO','NO','HIGH','12345--' -'YJ','Y','COACH','NO','YES','NO','NO','MID','1234567' -'YJW','Y','COACH','NO','YES','NO','NO','MID','-----67' -'YJX','Y','COACH','NO','YES','NO','NO','MID','12345--' -'YK','Y','COACH','NO','YES','NO','NO','MID','1234567' -'YL','Y','COACH','NO','YES','NO','NO','LOW','1234567' -'YLW','Y','COACH','NO','YES','NO','NO','LOW','-----67' -'YLX','Y','COACH','NO','YES','NO','NO','LOW','12345--' -'YN','YN','COACH','NO','YES','NO','YES','NONE','1234567' -'YO','Y','COACH','NO','YES','NO','NO','MID','1234567' -'YOW','Y','COACH','NO','YES','NO','NO','MID','-----67' -'YOX','Y','COACH','NO','YES','NO','NO','MID','12345--' -'YW','Y','COACH','NO','YES','NO','NO','NONE','-----67' -'YX','Y','COACH','NO','YES','NO','NO','NONE','12345--' diff --git a/sql-bench/Data/ATIS/connect_leg.txt b/sql-bench/Data/ATIS/connect_leg.txt deleted file mode 100644 index 43f860bb77927f8f8b79b515b1f9b2f9ac72a199..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/connect_leg.txt +++ /dev/null @@ -1,351 +0,0 @@ -305276,1,106231 -305276,2,137225 -305277,1,106237 -305277,2,137231 -305280,1,106247 -305280,2,137237 -305416,1,112030 -305416,1,112031 -305416,2,112773 -305424,1,112033 -305424,2,112784 -305429,1,112040 -305429,2,112793 -305429,2,112794 -305435,1,112046 -305435,2,112806 -305436,1,112051 -305436,2,112808 -306026,1,133430 -306026,2,111891 -306031,1,133432 -306031,2,111896 -306304,1,144155 -306304,2,112766 -306307,1,144143 -306307,2,111891 -306309,1,144158 -306309,2,112784 -306314,1,144163 -306314,2,112793 -306314,2,112794 -306317,1,144167 -306317,2,112805 -306318,1,144150 -306318,2,111896 -306319,1,144169 -306319,2,112808 -308292,1,112766 -308292,2,101952 -308296,1,112773 -308296,2,101953 -308301,1,112784 -308301,2,101955 -308304,1,112793 -308304,1,112794 -308304,2,101958 -308320,1,112030 -308320,1,112031 -308320,2,112904 -308330,1,111892 -308330,2,101955 -308334,1,112040 -308334,2,112907 -308924,1,133432 -308924,2,111941 -309189,1,144060 -309189,2,101955 -309198,1,144163 -309198,2,112907 -309204,1,144150 -309204,2,111941 -312733,1,102767 -312733,2,137320 -312734,1,102771 -312734,2,137326 -312737,1,102777 -312737,2,137335 -313006,1,112805 -313006,2,101929 -313024,1,111886 -313024,2,101909 -313025,1,112030 -313025,1,112031 -313025,2,112866 -313025,2,112867 -313030,1,111888 -313030,2,101916 -313030,2,101917 -313034,1,112033 -313034,2,112870 -313037,1,111892 -313037,2,101922 -313041,1,112040 -313041,2,112873 -313048,1,111895 -313048,2,101929 -313867,1,133430 -313867,2,111928 -314256,1,144143 -314256,2,111928 -314259,1,144158 -314259,2,112870 -314263,1,144060 -314263,2,101922 -314268,1,144163 -314268,2,112873 -314269,1,144148 -314269,2,111931 -329933,1,107159 -329933,2,102144 -329937,1,107162 -329937,2,102150 -329941,1,107165 -329941,2,102166 -329944,1,107166 -329944,2,102177 -329947,1,107168 -329947,2,102191 -330865,1,133430 -330865,2,112034 -330867,1,133431 -330867,2,112043 -330870,1,133432 -330870,2,112049 -330947,1,137221 -330947,2,102144 -330956,1,137224 -330956,2,102150 -330962,1,137228 -330962,2,102166 -330964,1,137230 -330964,2,102173 -330967,1,137233 -330967,2,102177 -330971,1,137235 -330971,2,102190 -330974,1,137238 -330974,2,102191 -330977,1,138817 -330977,2,102144 -330981,1,138821 -330981,2,102150 -330984,1,138823 -330984,2,102166 -330989,1,138830 -330989,1,138831 -330989,2,102191 -331132,1,144143 -331132,2,112034 -331133,1,144148 -331133,2,112043 -331134,1,144150 -331134,2,112049 -333051,1,102136 -333051,1,102137 -333051,2,112992 -333054,1,102148 -333054,2,113000 -333059,1,102162 -333059,1,102163 -333059,2,113003 -333067,1,102190 -333067,2,113012 -333067,2,113013 -333086,1,107159 -333086,2,102122 -333091,1,107258 -333091,2,113000 -333099,1,107165 -333099,2,102127 -333110,1,107168 -333110,2,102135 -333153,1,105700 -333153,2,107255 -333158,1,105592 -333158,2,102127 -333168,1,105599 -333168,2,102135 -334183,1,137221 -334183,2,102122 -334190,1,137354 -334190,2,107255 -334198,1,137233 -334198,2,102133 -334202,1,137238 -334202,2,102135 -334210,1,138817 -334210,2,102122 -334218,1,138879 -334218,2,107255 -334222,1,138823 -334222,2,102127 -334230,1,138830 -334230,1,138831 -334230,2,102135 -393490,1,102125 -393490,2,112352 -393507,1,107254 -393507,2,112352 -393546,1,105794 -393546,2,112352 -393547,1,105795 -393547,2,112352 -393553,1,105799 -393553,2,112354 -393637,1,112991 -393637,2,112351 -393641,1,113004 -393641,2,112353 -393643,1,113008 -393643,2,112354 -393950,1,137407 -393950,2,112352 -393953,1,137412 -393953,2,112354 -402327,1,112766 -402327,2,102770 -402332,1,112773 -402332,2,102773 -402339,1,112784 -402339,2,102776 -402343,1,112790 -402343,2,102779 -402346,1,112793 -402346,1,112794 -402346,2,102782 -402350,1,112805 -402350,2,102784 -402376,1,112030 -402376,1,112031 -402376,2,113577 -402382,1,111888 -402382,2,102773 -402388,1,111892 -402388,2,102776 -402391,1,111939 -402391,2,107478 -402397,1,112046 -402397,2,113583 -402398,1,111895 -402398,2,102784 -403125,1,133430 -403125,2,112415 -403128,1,133431 -403128,2,112417 -403468,1,144143 -403468,2,112415 -403472,1,144158 -403472,2,113579 -403474,1,144060 -403474,2,102776 -403479,1,144148 -403479,2,112417 -403481,1,144062 -403481,1,144063 -403481,2,102782 -403485,1,144167 -403485,2,113583 -403486,1,144066 -403486,2,102784 -403488,1,144067 -403488,2,102766 -405211,1,112773 -405211,2,102800 -405214,1,112784 -405214,2,102802 -405214,2,102803 -405217,1,112793 -405217,1,112794 -405217,2,102807 -405219,1,112805 -405219,2,102809 -405235,1,111886 -405235,2,102795 -405236,1,111886 -405236,2,102796 -405241,1,111888 -405241,2,102800 -405250,1,111892 -405250,2,102802 -405250,2,102803 -405253,1,111939 -405253,2,107492 -405258,1,111895 -405258,2,102809 -405963,1,144060 -405963,2,102802 -405963,2,102803 -405970,1,144066 -405970,2,102809 -405971,1,144067 -405971,2,102796 -420730,1,102136 -420730,1,102137 -420730,2,113705 -420735,1,102148 -420735,2,113712 -420736,1,102125 -420736,2,112516 -420739,1,102162 -420739,1,102163 -420739,2,113715 -420745,1,102173 -420745,2,113719 -420747,1,102129 -420747,2,112526 -420751,1,102190 -420751,2,113721 -420782,1,107486 -420782,2,139353 -420783,1,107258 -420783,2,113712 -420785,1,107254 -420785,2,112516 -420791,1,107165 -420791,2,102929 -420792,1,107487 -420792,2,139355 -420798,1,107489 -420798,2,139356 -420887,1,105802 -420887,2,113712 -420888,1,105794 -420888,2,112516 -420893,1,105805 -420893,2,113715 -420894,1,106266 -420894,2,139355 -420903,1,105595 -420903,2,102932 -420911,1,105799 -420911,2,112526 -420912,1,105812 -420912,2,113721 -421176,1,112991 -421176,2,112513 -421177,1,112998 -421177,2,112516 -421179,1,113004 -421179,2,112524 -421180,1,113008 -421180,2,112526 -421181,1,113010 -421181,2,112527 -422233,1,137221 -422233,2,102923 -422233,2,102924 -422240,1,137415 -422240,2,113712 -422241,1,137407 -422241,2,112516 -422249,1,137228 -422249,2,102929 -422262,1,137412 -422262,2,112526 -422263,1,137423 -422263,2,113721 -422277,1,138821 -422277,2,102927 -422281,1,138823 -422281,2,102929 diff --git a/sql-bench/Data/ATIS/date_day.txt b/sql-bench/Data/ATIS/date_day.txt deleted file mode 100644 index b96ac310fde592d80ec28013884346f5edb9ed96..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/date_day.txt +++ /dev/null @@ -1,1826 +0,0 @@ -"1","1","1990","MONDAY" -"1","2","1990","TUESDAY" -"1","3","1990","WEDNESDAY" -"1","4","1990","THURSDAY" -"1","5","1990","FRIDAY" -"1","6","1990","SATURDAY" -"1","7","1990","SUNDAY" -"1","8","1990","MONDAY" -"1","9","1990","TUESDAY" -"1","10","1990","WEDNESDAY" -"1","11","1990","THURSDAY" -"1","12","1990","FRIDAY" -"1","13","1990","SATURDAY" -"1","14","1990","SUNDAY" -"1","15","1990","MONDAY" -"1","16","1990","TUESDAY" -"1","17","1990","WEDNESDAY" -"1","18","1990","THURSDAY" -"1","19","1990","FRIDAY" -"1","20","1990","SATURDAY" -"1","21","1990","SUNDAY" -"1","22","1990","MONDAY" -"1","23","1990","TUESDAY" -"1","24","1990","WEDNESDAY" -"1","25","1990","THURSDAY" -"1","26","1990","FRIDAY" -"1","27","1990","SATURDAY" -"1","28","1990","SUNDAY" -"1","29","1990","MONDAY" -"1","30","1990","TUESDAY" -"1","31","1990","WEDNESDAY" -"2","1","1990","THURSDAY" -"2","2","1990","FRIDAY" -"2","3","1990","SATURDAY" -"2","4","1990","SUNDAY" -"2","5","1990","MONDAY" -"2","6","1990","TUESDAY" -"2","7","1990","WEDNESDAY" -"2","8","1990","THURSDAY" -"2","9","1990","FRIDAY" -"2","10","1990","SATURDAY" -"2","11","1990","SUNDAY" -"2","12","1990","MONDAY" -"2","13","1990","TUESDAY" -"2","14","1990","WEDNESDAY" -"2","15","1990","THURSDAY" -"2","16","1990","FRIDAY" -"2","17","1990","SATURDAY" -"2","18","1990","SUNDAY" -"2","19","1990","MONDAY" -"2","20","1990","TUESDAY" -"2","21","1990","WEDNESDAY" -"2","22","1990","THURSDAY" -"2","23","1990","FRIDAY" -"2","24","1990","SATURDAY" -"2","25","1990","SUNDAY" -"2","26","1990","MONDAY" -"2","27","1990","TUESDAY" -"2","28","1990","WEDNESDAY" -"3","1","1990","THURSDAY" -"3","2","1990","FRIDAY" -"3","3","1990","SATURDAY" -"3","4","1990","SUNDAY" -"3","5","1990","MONDAY" -"3","6","1990","TUESDAY" -"3","7","1990","WEDNESDAY" -"3","8","1990","THURSDAY" -"3","9","1990","FRIDAY" -"3","10","1990","SATURDAY" -"3","11","1990","SUNDAY" -"3","12","1990","MONDAY" -"3","13","1990","TUESDAY" -"3","14","1990","WEDNESDAY" -"3","15","1990","THURSDAY" -"3","16","1990","FRIDAY" -"3","17","1990","SATURDAY" -"3","18","1990","SUNDAY" -"3","19","1990","MONDAY" -"3","20","1990","TUESDAY" -"3","21","1990","WEDNESDAY" -"3","22","1990","THURSDAY" -"3","23","1990","FRIDAY" -"3","24","1990","SATURDAY" -"3","25","1990","SUNDAY" -"3","26","1990","MONDAY" -"3","27","1990","TUESDAY" -"3","28","1990","WEDNESDAY" -"3","29","1990","THURSDAY" -"3","30","1990","FRIDAY" -"3","31","1990","SATURDAY" -"4","1","1990","SUNDAY" -"4","2","1990","MONDAY" -"4","3","1990","TUESDAY" -"4","4","1990","WEDNESDAY" -"4","5","1990","THURSDAY" -"4","6","1990","FRIDAY" -"4","7","1990","SATURDAY" -"4","8","1990","SUNDAY" -"4","9","1990","MONDAY" -"4","10","1990","TUESDAY" -"4","11","1990","WEDNESDAY" -"4","12","1990","THURSDAY" -"4","13","1990","FRIDAY" -"4","14","1990","SATURDAY" -"4","15","1990","SUNDAY" -"4","16","1990","MONDAY" -"4","17","1990","TUESDAY" -"4","18","1990","WEDNESDAY" -"4","19","1990","THURSDAY" -"4","20","1990","FRIDAY" -"4","21","1990","SATURDAY" -"4","22","1990","SUNDAY" -"4","23","1990","MONDAY" -"4","24","1990","TUESDAY" -"4","25","1990","WEDNESDAY" -"4","26","1990","THURSDAY" -"4","27","1990","FRIDAY" -"4","28","1990","SATURDAY" -"4","29","1990","SUNDAY" -"4","30","1990","MONDAY" -"5","1","1990","TUESDAY" -"5","2","1990","WEDNESDAY" -"5","3","1990","THURSDAY" -"5","4","1990","FRIDAY" -"5","5","1990","SATURDAY" -"5","6","1990","SUNDAY" -"5","7","1990","MONDAY" -"5","8","1990","TUESDAY" -"5","9","1990","WEDNESDAY" -"5","10","1990","THURSDAY" -"5","11","1990","FRIDAY" -"5","12","1990","SATURDAY" -"5","13","1990","SUNDAY" -"5","14","1990","MONDAY" -"5","15","1990","TUESDAY" -"5","16","1990","WEDNESDAY" -"5","17","1990","THURSDAY" -"5","18","1990","FRIDAY" -"5","19","1990","SATURDAY" -"5","20","1990","SUNDAY" -"5","21","1990","MONDAY" -"5","22","1990","TUESDAY" -"5","23","1990","WEDNESDAY" -"5","24","1990","THURSDAY" -"5","25","1990","FRIDAY" -"5","26","1990","SATURDAY" -"5","27","1990","SUNDAY" -"5","28","1990","MONDAY" -"5","29","1990","TUESDAY" -"5","30","1990","WEDNESDAY" -"5","31","1990","THURSDAY" -"6","1","1990","FRIDAY" -"6","2","1990","SATURDAY" -"6","3","1990","SUNDAY" -"6","4","1990","MONDAY" -"6","5","1990","TUESDAY" -"6","6","1990","WEDNESDAY" -"6","7","1990","THURSDAY" -"6","8","1990","FRIDAY" -"6","9","1990","SATURDAY" -"6","10","1990","SUNDAY" -"6","11","1990","MONDAY" -"6","12","1990","TUESDAY" -"6","13","1990","WEDNESDAY" -"6","14","1990","THURSDAY" -"6","15","1990","FRIDAY" -"6","16","1990","SATURDAY" -"6","17","1990","SUNDAY" -"6","18","1990","MONDAY" -"6","19","1990","TUESDAY" -"6","20","1990","WEDNESDAY" -"6","21","1990","THURSDAY" -"6","22","1990","FRIDAY" -"6","23","1990","SATURDAY" -"6","24","1990","SUNDAY" -"6","25","1990","MONDAY" -"6","26","1990","TUESDAY" -"6","27","1990","WEDNESDAY" -"6","28","1990","THURSDAY" -"6","29","1990","FRIDAY" -"6","30","1990","SATURDAY" -"7","1","1990","SUNDAY" -"7","2","1990","MONDAY" -"7","3","1990","TUESDAY" -"7","4","1990","WEDNESDAY" -"7","5","1990","THURSDAY" -"7","6","1990","FRIDAY" -"7","7","1990","SATURDAY" -"7","8","1990","SUNDAY" -"7","9","1990","MONDAY" -"7","10","1990","TUESDAY" -"7","11","1990","WEDNESDAY" -"7","12","1990","THURSDAY" -"7","13","1990","FRIDAY" -"7","14","1990","SATURDAY" -"7","15","1990","SUNDAY" -"7","16","1990","MONDAY" -"7","17","1990","TUESDAY" -"7","18","1990","WEDNESDAY" -"7","19","1990","THURSDAY" -"7","20","1990","FRIDAY" -"7","21","1990","SATURDAY" -"7","22","1990","SUNDAY" -"7","23","1990","MONDAY" -"7","24","1990","TUESDAY" -"7","25","1990","WEDNESDAY" -"7","26","1990","THURSDAY" -"7","27","1990","FRIDAY" -"7","28","1990","SATURDAY" -"7","29","1990","SUNDAY" -"7","30","1990","MONDAY" -"7","31","1990","TUESDAY" -"8","1","1990","WEDNESDAY" -"8","2","1990","THURSDAY" -"8","3","1990","FRIDAY" -"8","4","1990","SATURDAY" -"8","5","1990","SUNDAY" -"8","6","1990","MONDAY" -"8","7","1990","TUESDAY" -"8","8","1990","WEDNESDAY" -"8","9","1990","THURSDAY" -"8","10","1990","FRIDAY" -"8","11","1990","SATURDAY" -"8","12","1990","SUNDAY" -"8","13","1990","MONDAY" -"8","14","1990","TUESDAY" -"8","15","1990","WEDNESDAY" -"8","16","1990","THURSDAY" -"8","17","1990","FRIDAY" -"8","18","1990","SATURDAY" -"8","19","1990","SUNDAY" -"8","20","1990","MONDAY" -"8","21","1990","TUESDAY" -"8","22","1990","WEDNESDAY" -"8","23","1990","THURSDAY" -"8","24","1990","FRIDAY" -"8","25","1990","SATURDAY" -"8","26","1990","SUNDAY" -"8","27","1990","MONDAY" -"8","28","1990","TUESDAY" -"8","29","1990","WEDNESDAY" -"8","30","1990","THURSDAY" -"8","31","1990","FRIDAY" -"9","1","1990","SATURDAY" -"9","2","1990","SUNDAY" -"9","3","1990","MONDAY" -"9","4","1990","TUESDAY" -"9","5","1990","WEDNESDAY" -"9","6","1990","THURSDAY" -"9","7","1990","FRIDAY" -"9","8","1990","SATURDAY" -"9","9","1990","SUNDAY" -"9","10","1990","MONDAY" -"9","11","1990","TUESDAY" -"9","12","1990","WEDNESDAY" -"9","13","1990","THURSDAY" -"9","14","1990","FRIDAY" -"9","15","1990","SATURDAY" -"9","16","1990","SUNDAY" -"9","17","1990","MONDAY" -"9","18","1990","TUESDAY" -"9","19","1990","WEDNESDAY" -"9","20","1990","THURSDAY" -"9","21","1990","FRIDAY" -"9","22","1990","SATURDAY" -"9","23","1990","SUNDAY" -"9","24","1990","MONDAY" -"9","25","1990","TUESDAY" -"9","26","1990","WEDNESDAY" -"9","27","1990","THURSDAY" -"9","28","1990","FRIDAY" -"9","29","1990","SATURDAY" -"9","30","1990","SUNDAY" -"10","1","1990","MONDAY" -"10","2","1990","TUESDAY" -"10","3","1990","WEDNESDAY" -"10","4","1990","THURSDAY" -"10","5","1990","FRIDAY" -"10","6","1990","SATURDAY" -"10","7","1990","SUNDAY" -"10","8","1990","MONDAY" -"10","9","1990","TUESDAY" -"10","10","1990","WEDNESDAY" -"10","11","1990","THURSDAY" -"10","12","1990","FRIDAY" -"10","13","1990","SATURDAY" -"10","14","1990","SUNDAY" -"10","15","1990","MONDAY" -"10","16","1990","TUESDAY" -"10","17","1990","WEDNESDAY" -"10","18","1990","THURSDAY" -"10","19","1990","FRIDAY" -"10","20","1990","SATURDAY" -"10","21","1990","SUNDAY" -"10","22","1990","MONDAY" -"10","23","1990","TUESDAY" -"10","24","1990","WEDNESDAY" -"10","25","1990","THURSDAY" -"10","26","1990","FRIDAY" -"10","27","1990","SATURDAY" -"10","28","1990","SUNDAY" -"10","29","1990","MONDAY" -"10","30","1990","TUESDAY" -"10","31","1990","WEDNESDAY" -"11","1","1990","THURSDAY" -"11","2","1990","FRIDAY" -"11","3","1990","SATURDAY" -"11","4","1990","SUNDAY" -"11","5","1990","MONDAY" -"11","6","1990","TUESDAY" -"11","7","1990","WEDNESDAY" -"11","8","1990","THURSDAY" -"11","9","1990","FRIDAY" -"11","10","1990","SATURDAY" -"11","11","1990","SUNDAY" -"11","12","1990","MONDAY" -"11","13","1990","TUESDAY" -"11","14","1990","WEDNESDAY" -"11","15","1990","THURSDAY" -"11","16","1990","FRIDAY" -"11","17","1990","SATURDAY" -"11","18","1990","SUNDAY" -"11","19","1990","MONDAY" -"11","20","1990","TUESDAY" -"11","21","1990","WEDNESDAY" -"11","22","1990","THURSDAY" -"11","23","1990","FRIDAY" -"11","24","1990","SATURDAY" -"11","25","1990","SUNDAY" -"11","26","1990","MONDAY" -"11","27","1990","TUESDAY" -"11","28","1990","WEDNESDAY" -"11","29","1990","THURSDAY" -"11","30","1990","FRIDAY" -"12","1","1990","SATURDAY" -"12","2","1990","SUNDAY" -"12","3","1990","MONDAY" -"12","4","1990","TUESDAY" -"12","5","1990","WEDNESDAY" -"12","6","1990","THURSDAY" -"12","7","1990","FRIDAY" -"12","8","1990","SATURDAY" -"12","9","1990","SUNDAY" -"12","10","1990","MONDAY" -"12","11","1990","TUESDAY" -"12","12","1990","WEDNESDAY" -"12","13","1990","THURSDAY" -"12","14","1990","FRIDAY" -"12","15","1990","SATURDAY" -"12","16","1990","SUNDAY" -"12","17","1990","MONDAY" -"12","18","1990","TUESDAY" -"12","19","1990","WEDNESDAY" -"12","20","1990","THURSDAY" -"12","21","1990","FRIDAY" -"12","22","1990","SATURDAY" -"12","23","1990","SUNDAY" -"12","24","1990","MONDAY" -"12","25","1990","TUESDAY" -"12","26","1990","WEDNESDAY" -"12","27","1990","THURSDAY" -"12","28","1990","FRIDAY" -"12","29","1990","SATURDAY" -"12","30","1990","SUNDAY" -"12","31","1990","MONDAY" -"1","1","1991","TUESDAY" -"1","2","1991","WEDNESDAY" -"1","3","1991","THURSDAY" -"1","4","1991","FRIDAY" -"1","5","1991","SATURDAY" -"1","6","1991","SUNDAY" -"1","7","1991","MONDAY" -"1","8","1991","TUESDAY" -"1","9","1991","WEDNESDAY" -"1","10","1991","THURSDAY" -"1","11","1991","FRIDAY" -"1","12","1991","SATURDAY" -"1","13","1991","SUNDAY" -"1","14","1991","MONDAY" -"1","15","1991","TUESDAY" -"1","16","1991","WEDNESDAY" -"1","17","1991","THURSDAY" -"1","18","1991","FRIDAY" -"1","19","1991","SATURDAY" -"1","20","1991","SUNDAY" -"1","21","1991","MONDAY" -"1","22","1991","TUESDAY" -"1","23","1991","WEDNESDAY" -"1","24","1991","THURSDAY" -"1","25","1991","FRIDAY" -"1","26","1991","SATURDAY" -"1","27","1991","SUNDAY" -"1","28","1991","MONDAY" -"1","29","1991","TUESDAY" -"1","30","1991","WEDNESDAY" -"1","31","1991","THURSDAY" -"2","1","1991","FRIDAY" -"2","2","1991","SATURDAY" -"2","3","1991","SUNDAY" -"2","4","1991","MONDAY" -"2","5","1991","TUESDAY" -"2","6","1991","WEDNESDAY" -"2","7","1991","THURSDAY" -"2","8","1991","FRIDAY" -"2","9","1991","SATURDAY" -"2","10","1991","SUNDAY" -"2","11","1991","MONDAY" -"2","12","1991","TUESDAY" -"2","13","1991","WEDNESDAY" -"2","14","1991","THURSDAY" -"2","15","1991","FRIDAY" -"2","16","1991","SATURDAY" -"2","17","1991","SUNDAY" -"2","18","1991","MONDAY" -"2","19","1991","TUESDAY" -"2","20","1991","WEDNESDAY" -"2","21","1991","THURSDAY" -"2","22","1991","FRIDAY" -"2","23","1991","SATURDAY" -"2","24","1991","SUNDAY" -"2","25","1991","MONDAY" -"2","26","1991","TUESDAY" -"2","27","1991","WEDNESDAY" -"2","28","1991","THURSDAY" -"3","1","1991","FRIDAY" -"3","2","1991","SATURDAY" -"3","3","1991","SUNDAY" -"3","4","1991","MONDAY" -"3","5","1991","TUESDAY" -"3","6","1991","WEDNESDAY" -"3","7","1991","THURSDAY" -"3","8","1991","FRIDAY" -"3","9","1991","SATURDAY" -"3","10","1991","SUNDAY" -"3","11","1991","MONDAY" -"3","12","1991","TUESDAY" -"3","13","1991","WEDNESDAY" -"3","14","1991","THURSDAY" -"3","15","1991","FRIDAY" -"3","16","1991","SATURDAY" -"3","17","1991","SUNDAY" -"3","18","1991","MONDAY" -"3","19","1991","TUESDAY" -"3","20","1991","WEDNESDAY" -"3","21","1991","THURSDAY" -"3","22","1991","FRIDAY" -"3","23","1991","SATURDAY" -"3","24","1991","SUNDAY" -"3","25","1991","MONDAY" -"3","26","1991","TUESDAY" -"3","27","1991","WEDNESDAY" -"3","28","1991","THURSDAY" -"3","29","1991","FRIDAY" -"3","30","1991","SATURDAY" -"3","31","1991","SUNDAY" -"4","1","1991","MONDAY" -"4","2","1991","TUESDAY" -"4","3","1991","WEDNESDAY" -"4","4","1991","THURSDAY" -"4","5","1991","FRIDAY" -"4","6","1991","SATURDAY" -"4","7","1991","SUNDAY" -"4","8","1991","MONDAY" -"4","9","1991","TUESDAY" -"4","10","1991","WEDNESDAY" -"4","11","1991","THURSDAY" -"4","12","1991","FRIDAY" -"4","13","1991","SATURDAY" -"4","14","1991","SUNDAY" -"4","15","1991","MONDAY" -"4","16","1991","TUESDAY" -"4","17","1991","WEDNESDAY" -"4","18","1991","THURSDAY" -"4","19","1991","FRIDAY" -"4","20","1991","SATURDAY" -"4","21","1991","SUNDAY" -"4","22","1991","MONDAY" -"4","23","1991","TUESDAY" -"4","24","1991","WEDNESDAY" -"4","25","1991","THURSDAY" -"4","26","1991","FRIDAY" -"4","27","1991","SATURDAY" -"4","28","1991","SUNDAY" -"4","29","1991","MONDAY" -"4","30","1991","TUESDAY" -"5","1","1991","WEDNESDAY" -"5","2","1991","THURSDAY" -"5","3","1991","FRIDAY" -"5","4","1991","SATURDAY" -"5","5","1991","SUNDAY" -"5","6","1991","MONDAY" -"5","7","1991","TUESDAY" -"5","8","1991","WEDNESDAY" -"5","9","1991","THURSDAY" -"5","10","1991","FRIDAY" -"5","11","1991","SATURDAY" -"5","12","1991","SUNDAY" -"5","13","1991","MONDAY" -"5","14","1991","TUESDAY" -"5","15","1991","WEDNESDAY" -"5","16","1991","THURSDAY" -"5","17","1991","FRIDAY" -"5","18","1991","SATURDAY" -"5","19","1991","SUNDAY" -"5","20","1991","MONDAY" -"5","21","1991","TUESDAY" -"5","22","1991","WEDNESDAY" -"5","23","1991","THURSDAY" -"5","24","1991","FRIDAY" -"5","25","1991","SATURDAY" -"5","26","1991","SUNDAY" -"5","27","1991","MONDAY" -"5","28","1991","TUESDAY" -"5","29","1991","WEDNESDAY" -"5","30","1991","THURSDAY" -"5","31","1991","FRIDAY" -"6","1","1991","SATURDAY" -"6","2","1991","SUNDAY" -"6","3","1991","MONDAY" -"6","4","1991","TUESDAY" -"6","5","1991","WEDNESDAY" -"6","6","1991","THURSDAY" -"6","7","1991","FRIDAY" -"6","8","1991","SATURDAY" -"6","9","1991","SUNDAY" -"6","10","1991","MONDAY" -"6","11","1991","TUESDAY" -"6","12","1991","WEDNESDAY" -"6","13","1991","THURSDAY" -"6","14","1991","FRIDAY" -"6","15","1991","SATURDAY" -"6","16","1991","SUNDAY" -"6","17","1991","MONDAY" -"6","18","1991","TUESDAY" -"6","19","1991","WEDNESDAY" -"6","20","1991","THURSDAY" -"6","21","1991","FRIDAY" -"6","22","1991","SATURDAY" -"6","23","1991","SUNDAY" -"6","24","1991","MONDAY" -"6","25","1991","TUESDAY" -"6","26","1991","WEDNESDAY" -"6","27","1991","THURSDAY" -"6","28","1991","FRIDAY" -"6","29","1991","SATURDAY" -"6","30","1991","SUNDAY" -"7","1","1991","MONDAY" -"7","2","1991","TUESDAY" -"7","3","1991","WEDNESDAY" -"7","4","1991","THURSDAY" -"7","5","1991","FRIDAY" -"7","6","1991","SATURDAY" -"7","7","1991","SUNDAY" -"7","8","1991","MONDAY" -"7","9","1991","TUESDAY" -"7","10","1991","WEDNESDAY" -"7","11","1991","THURSDAY" -"7","12","1991","FRIDAY" -"7","13","1991","SATURDAY" -"7","14","1991","SUNDAY" -"7","15","1991","MONDAY" -"7","16","1991","TUESDAY" -"7","17","1991","WEDNESDAY" -"7","18","1991","THURSDAY" -"7","19","1991","FRIDAY" -"7","20","1991","SATURDAY" -"7","21","1991","SUNDAY" -"7","22","1991","MONDAY" -"7","23","1991","TUESDAY" -"7","24","1991","WEDNESDAY" -"7","25","1991","THURSDAY" -"7","26","1991","FRIDAY" -"7","27","1991","SATURDAY" -"7","28","1991","SUNDAY" -"7","29","1991","MONDAY" -"7","30","1991","TUESDAY" -"7","31","1991","WEDNESDAY" -"8","1","1991","THURSDAY" -"8","2","1991","FRIDAY" -"8","3","1991","SATURDAY" -"8","4","1991","SUNDAY" -"8","5","1991","MONDAY" -"8","6","1991","TUESDAY" -"8","7","1991","WEDNESDAY" -"8","8","1991","THURSDAY" -"8","9","1991","FRIDAY" -"8","10","1991","SATURDAY" -"8","11","1991","SUNDAY" -"8","12","1991","MONDAY" -"8","13","1991","TUESDAY" -"8","14","1991","WEDNESDAY" -"8","15","1991","THURSDAY" -"8","16","1991","FRIDAY" -"8","17","1991","SATURDAY" -"8","18","1991","SUNDAY" -"8","19","1991","MONDAY" -"8","20","1991","TUESDAY" -"8","21","1991","WEDNESDAY" -"8","22","1991","THURSDAY" -"8","23","1991","FRIDAY" -"8","24","1991","SATURDAY" -"8","25","1991","SUNDAY" -"8","26","1991","MONDAY" -"8","27","1991","TUESDAY" -"8","28","1991","WEDNESDAY" -"8","29","1991","THURSDAY" -"8","30","1991","FRIDAY" -"8","31","1991","SATURDAY" -"9","1","1991","SUNDAY" -"9","2","1991","MONDAY" -"9","3","1991","TUESDAY" -"9","4","1991","WEDNESDAY" -"9","5","1991","THURSDAY" -"9","6","1991","FRIDAY" -"9","7","1991","SATURDAY" -"9","8","1991","SUNDAY" -"9","9","1991","MONDAY" -"9","10","1991","TUESDAY" -"9","11","1991","WEDNESDAY" -"9","12","1991","THURSDAY" -"9","13","1991","FRIDAY" -"9","14","1991","SATURDAY" -"9","15","1991","SUNDAY" -"9","16","1991","MONDAY" -"9","17","1991","TUESDAY" -"9","18","1991","WEDNESDAY" -"9","19","1991","THURSDAY" -"9","20","1991","FRIDAY" -"9","21","1991","SATURDAY" -"9","22","1991","SUNDAY" -"9","23","1991","MONDAY" -"9","24","1991","TUESDAY" -"9","25","1991","WEDNESDAY" -"9","26","1991","THURSDAY" -"9","27","1991","FRIDAY" -"9","28","1991","SATURDAY" -"9","29","1991","SUNDAY" -"9","30","1991","MONDAY" -"10","1","1991","TUESDAY" -"10","2","1991","WEDNESDAY" -"10","3","1991","THURSDAY" -"10","4","1991","FRIDAY" -"10","5","1991","SATURDAY" -"10","6","1991","SUNDAY" -"10","7","1991","MONDAY" -"10","8","1991","TUESDAY" -"10","9","1991","WEDNESDAY" -"10","10","1991","THURSDAY" -"10","11","1991","FRIDAY" -"10","12","1991","SATURDAY" -"10","13","1991","SUNDAY" -"10","14","1991","MONDAY" -"10","15","1991","TUESDAY" -"10","16","1991","WEDNESDAY" -"10","17","1991","THURSDAY" -"10","18","1991","FRIDAY" -"10","19","1991","SATURDAY" -"10","20","1991","SUNDAY" -"10","21","1991","MONDAY" -"10","22","1991","TUESDAY" -"10","23","1991","WEDNESDAY" -"10","24","1991","THURSDAY" -"10","25","1991","FRIDAY" -"10","26","1991","SATURDAY" -"10","27","1991","SUNDAY" -"10","28","1991","MONDAY" -"10","29","1991","TUESDAY" -"10","30","1991","WEDNESDAY" -"10","31","1991","THURSDAY" -"11","1","1991","FRIDAY" -"11","2","1991","SATURDAY" -"11","3","1991","SUNDAY" -"11","4","1991","MONDAY" -"11","5","1991","TUESDAY" -"11","6","1991","WEDNESDAY" -"11","7","1991","THURSDAY" -"11","8","1991","FRIDAY" -"11","9","1991","SATURDAY" -"11","10","1991","SUNDAY" -"11","11","1991","MONDAY" -"11","12","1991","TUESDAY" -"11","13","1991","WEDNESDAY" -"11","14","1991","THURSDAY" -"11","15","1991","FRIDAY" -"11","16","1991","SATURDAY" -"11","17","1991","SUNDAY" -"11","18","1991","MONDAY" -"11","19","1991","TUESDAY" -"11","20","1991","WEDNESDAY" -"11","21","1991","THURSDAY" -"11","22","1991","FRIDAY" -"11","23","1991","SATURDAY" -"11","24","1991","SUNDAY" -"11","25","1991","MONDAY" -"11","26","1991","TUESDAY" -"11","27","1991","WEDNESDAY" -"11","28","1991","THURSDAY" -"11","29","1991","FRIDAY" -"11","30","1991","SATURDAY" -"12","1","1991","SUNDAY" -"12","2","1991","MONDAY" -"12","3","1991","TUESDAY" -"12","4","1991","WEDNESDAY" -"12","5","1991","THURSDAY" -"12","6","1991","FRIDAY" -"12","7","1991","SATURDAY" -"12","8","1991","SUNDAY" -"12","9","1991","MONDAY" -"12","10","1991","TUESDAY" -"12","11","1991","WEDNESDAY" -"12","12","1991","THURSDAY" -"12","13","1991","FRIDAY" -"12","14","1991","SATURDAY" -"12","15","1991","SUNDAY" -"12","16","1991","MONDAY" -"12","17","1991","TUESDAY" -"12","18","1991","WEDNESDAY" -"12","19","1991","THURSDAY" -"12","20","1991","FRIDAY" -"12","21","1991","SATURDAY" -"12","22","1991","SUNDAY" -"12","23","1991","MONDAY" -"12","24","1991","TUESDAY" -"12","25","1991","WEDNESDAY" -"12","26","1991","THURSDAY" -"12","27","1991","FRIDAY" -"12","28","1991","SATURDAY" -"12","29","1991","SUNDAY" -"12","30","1991","MONDAY" -"12","31","1991","TUESDAY" -"1","1","1992","WEDNESDAY" -"1","2","1992","THURSDAY" -"1","3","1992","FRIDAY" -"1","4","1992","SATURDAY" -"1","5","1992","SUNDAY" -"1","6","1992","MONDAY" -"1","7","1992","TUESDAY" -"1","8","1992","WEDNESDAY" -"1","9","1992","THURSDAY" -"1","10","1992","FRIDAY" -"1","11","1992","SATURDAY" -"1","12","1992","SUNDAY" -"1","13","1992","MONDAY" -"1","14","1992","TUESDAY" -"1","15","1992","WEDNESDAY" -"1","16","1992","THURSDAY" -"1","17","1992","FRIDAY" -"1","18","1992","SATURDAY" -"1","19","1992","SUNDAY" -"1","20","1992","MONDAY" -"1","21","1992","TUESDAY" -"1","22","1992","WEDNESDAY" -"1","23","1992","THURSDAY" -"1","24","1992","FRIDAY" -"1","25","1992","SATURDAY" -"1","26","1992","SUNDAY" -"1","27","1992","MONDAY" -"1","28","1992","TUESDAY" -"1","29","1992","WEDNESDAY" -"1","30","1992","THURSDAY" -"1","31","1992","FRIDAY" -"2","1","1992","SATURDAY" -"2","2","1992","SUNDAY" -"2","3","1992","MONDAY" -"2","4","1992","TUESDAY" -"2","5","1992","WEDNESDAY" -"2","6","1992","THURSDAY" -"2","7","1992","FRIDAY" -"2","8","1992","SATURDAY" -"2","9","1992","SUNDAY" -"2","10","1992","MONDAY" -"2","11","1992","TUESDAY" -"2","12","1992","WEDNESDAY" -"2","13","1992","THURSDAY" -"2","14","1992","FRIDAY" -"2","15","1992","SATURDAY" -"2","16","1992","SUNDAY" -"2","17","1992","MONDAY" -"2","18","1992","TUESDAY" -"2","19","1992","WEDNESDAY" -"2","20","1992","THURSDAY" -"2","21","1992","FRIDAY" -"2","22","1992","SATURDAY" -"2","23","1992","SUNDAY" -"2","24","1992","MONDAY" -"2","25","1992","TUESDAY" -"2","26","1992","WEDNESDAY" -"2","27","1992","THURSDAY" -"2","28","1992","FRIDAY" -"2","29","1992","SATURDAY" -"3","1","1992","SUNDAY" -"3","2","1992","MONDAY" -"3","3","1992","TUESDAY" -"3","4","1992","WEDNESDAY" -"3","5","1992","THURSDAY" -"3","6","1992","FRIDAY" -"3","7","1992","SATURDAY" -"3","8","1992","SUNDAY" -"3","9","1992","MONDAY" -"3","10","1992","TUESDAY" -"3","11","1992","WEDNESDAY" -"3","12","1992","THURSDAY" -"3","13","1992","FRIDAY" -"3","14","1992","SATURDAY" -"3","15","1992","SUNDAY" -"3","16","1992","MONDAY" -"3","17","1992","TUESDAY" -"3","18","1992","WEDNESDAY" -"3","19","1992","THURSDAY" -"3","20","1992","FRIDAY" -"3","21","1992","SATURDAY" -"3","22","1992","SUNDAY" -"3","23","1992","MONDAY" -"3","24","1992","TUESDAY" -"3","25","1992","WEDNESDAY" -"3","26","1992","THURSDAY" -"3","27","1992","FRIDAY" -"3","28","1992","SATURDAY" -"3","29","1992","SUNDAY" -"3","30","1992","MONDAY" -"3","31","1992","TUESDAY" -"4","1","1992","WEDNESDAY" -"4","2","1992","THURSDAY" -"4","3","1992","FRIDAY" -"4","4","1992","SATURDAY" -"4","5","1992","SUNDAY" -"4","6","1992","MONDAY" -"4","7","1992","TUESDAY" -"4","8","1992","WEDNESDAY" -"4","9","1992","THURSDAY" -"4","10","1992","FRIDAY" -"4","11","1992","SATURDAY" -"4","12","1992","SUNDAY" -"4","13","1992","MONDAY" -"4","14","1992","TUESDAY" -"4","15","1992","WEDNESDAY" -"4","16","1992","THURSDAY" -"4","17","1992","FRIDAY" -"4","18","1992","SATURDAY" -"4","19","1992","SUNDAY" -"4","20","1992","MONDAY" -"4","21","1992","TUESDAY" -"4","22","1992","WEDNESDAY" -"4","23","1992","THURSDAY" -"4","24","1992","FRIDAY" -"4","25","1992","SATURDAY" -"4","26","1992","SUNDAY" -"4","27","1992","MONDAY" -"4","28","1992","TUESDAY" -"4","29","1992","WEDNESDAY" -"4","30","1992","THURSDAY" -"5","1","1992","FRIDAY" -"5","2","1992","SATURDAY" -"5","3","1992","SUNDAY" -"5","4","1992","MONDAY" -"5","5","1992","TUESDAY" -"5","6","1992","WEDNESDAY" -"5","7","1992","THURSDAY" -"5","8","1992","FRIDAY" -"5","9","1992","SATURDAY" -"5","10","1992","SUNDAY" -"5","11","1992","MONDAY" -"5","12","1992","TUESDAY" -"5","13","1992","WEDNESDAY" -"5","14","1992","THURSDAY" -"5","15","1992","FRIDAY" -"5","16","1992","SATURDAY" -"5","17","1992","SUNDAY" -"5","18","1992","MONDAY" -"5","19","1992","TUESDAY" -"5","20","1992","WEDNESDAY" -"5","21","1992","THURSDAY" -"5","22","1992","FRIDAY" -"5","23","1992","SATURDAY" -"5","24","1992","SUNDAY" -"5","25","1992","MONDAY" -"5","26","1992","TUESDAY" -"5","27","1992","WEDNESDAY" -"5","28","1992","THURSDAY" -"5","29","1992","FRIDAY" -"5","30","1992","SATURDAY" -"5","31","1992","SUNDAY" -"6","1","1992","MONDAY" -"6","2","1992","TUESDAY" -"6","3","1992","WEDNESDAY" -"6","4","1992","THURSDAY" -"6","5","1992","FRIDAY" -"6","6","1992","SATURDAY" -"6","7","1992","SUNDAY" -"6","8","1992","MONDAY" -"6","9","1992","TUESDAY" -"6","10","1992","WEDNESDAY" -"6","11","1992","THURSDAY" -"6","12","1992","FRIDAY" -"6","13","1992","SATURDAY" -"6","14","1992","SUNDAY" -"6","15","1992","MONDAY" -"6","16","1992","TUESDAY" -"6","17","1992","WEDNESDAY" -"6","18","1992","THURSDAY" -"6","19","1992","FRIDAY" -"6","20","1992","SATURDAY" -"6","21","1992","SUNDAY" -"6","22","1992","MONDAY" -"6","23","1992","TUESDAY" -"6","24","1992","WEDNESDAY" -"6","25","1992","THURSDAY" -"6","26","1992","FRIDAY" -"6","27","1992","SATURDAY" -"6","28","1992","SUNDAY" -"6","29","1992","MONDAY" -"6","30","1992","TUESDAY" -"7","1","1992","WEDNESDAY" -"7","2","1992","THURSDAY" -"7","3","1992","FRIDAY" -"7","4","1992","SATURDAY" -"7","5","1992","SUNDAY" -"7","6","1992","MONDAY" -"7","7","1992","TUESDAY" -"7","8","1992","WEDNESDAY" -"7","9","1992","THURSDAY" -"7","10","1992","FRIDAY" -"7","11","1992","SATURDAY" -"7","12","1992","SUNDAY" -"7","13","1992","MONDAY" -"7","14","1992","TUESDAY" -"7","15","1992","WEDNESDAY" -"7","16","1992","THURSDAY" -"7","17","1992","FRIDAY" -"7","18","1992","SATURDAY" -"7","19","1992","SUNDAY" -"7","20","1992","MONDAY" -"7","21","1992","TUESDAY" -"7","22","1992","WEDNESDAY" -"7","23","1992","THURSDAY" -"7","24","1992","FRIDAY" -"7","25","1992","SATURDAY" -"7","26","1992","SUNDAY" -"7","27","1992","MONDAY" -"7","28","1992","TUESDAY" -"7","29","1992","WEDNESDAY" -"7","30","1992","THURSDAY" -"7","31","1992","FRIDAY" -"8","1","1992","SATURDAY" -"8","2","1992","SUNDAY" -"8","3","1992","MONDAY" -"8","4","1992","TUESDAY" -"8","5","1992","WEDNESDAY" -"8","6","1992","THURSDAY" -"8","7","1992","FRIDAY" -"8","8","1992","SATURDAY" -"8","9","1992","SUNDAY" -"8","10","1992","MONDAY" -"8","11","1992","TUESDAY" -"8","12","1992","WEDNESDAY" -"8","13","1992","THURSDAY" -"8","14","1992","FRIDAY" -"8","15","1992","SATURDAY" -"8","16","1992","SUNDAY" -"8","17","1992","MONDAY" -"8","18","1992","TUESDAY" -"8","19","1992","WEDNESDAY" -"8","20","1992","THURSDAY" -"8","21","1992","FRIDAY" -"8","22","1992","SATURDAY" -"8","23","1992","SUNDAY" -"8","24","1992","MONDAY" -"8","25","1992","TUESDAY" -"8","26","1992","WEDNESDAY" -"8","27","1992","THURSDAY" -"8","28","1992","FRIDAY" -"8","29","1992","SATURDAY" -"8","30","1992","SUNDAY" -"8","31","1992","MONDAY" -"9","1","1992","TUESDAY" -"9","2","1992","WEDNESDAY" -"9","3","1992","THURSDAY" -"9","4","1992","FRIDAY" -"9","5","1992","SATURDAY" -"9","6","1992","SUNDAY" -"9","7","1992","MONDAY" -"9","8","1992","TUESDAY" -"9","9","1992","WEDNESDAY" -"9","10","1992","THURSDAY" -"9","11","1992","FRIDAY" -"9","12","1992","SATURDAY" -"9","13","1992","SUNDAY" -"9","14","1992","MONDAY" -"9","15","1992","TUESDAY" -"9","16","1992","WEDNESDAY" -"9","17","1992","THURSDAY" -"9","18","1992","FRIDAY" -"9","19","1992","SATURDAY" -"9","20","1992","SUNDAY" -"9","21","1992","MONDAY" -"9","22","1992","TUESDAY" -"9","23","1992","WEDNESDAY" -"9","24","1992","THURSDAY" -"9","25","1992","FRIDAY" -"9","26","1992","SATURDAY" -"9","27","1992","SUNDAY" -"9","28","1992","MONDAY" -"9","29","1992","TUESDAY" -"9","30","1992","WEDNESDAY" -"10","1","1992","THURSDAY" -"10","2","1992","FRIDAY" -"10","3","1992","SATURDAY" -"10","4","1992","SUNDAY" -"10","5","1992","MONDAY" -"10","6","1992","TUESDAY" -"10","7","1992","WEDNESDAY" -"10","8","1992","THURSDAY" -"10","9","1992","FRIDAY" -"10","10","1992","SATURDAY" -"10","11","1992","SUNDAY" -"10","12","1992","MONDAY" -"10","13","1992","TUESDAY" -"10","14","1992","WEDNESDAY" -"10","15","1992","THURSDAY" -"10","16","1992","FRIDAY" -"10","17","1992","SATURDAY" -"10","18","1992","SUNDAY" -"10","19","1992","MONDAY" -"10","20","1992","TUESDAY" -"10","21","1992","WEDNESDAY" -"10","22","1992","THURSDAY" -"10","23","1992","FRIDAY" -"10","24","1992","SATURDAY" -"10","25","1992","SUNDAY" -"10","26","1992","MONDAY" -"10","27","1992","TUESDAY" -"10","28","1992","WEDNESDAY" -"10","29","1992","THURSDAY" -"10","30","1992","FRIDAY" -"10","31","1992","SATURDAY" -"11","1","1992","SUNDAY" -"11","2","1992","MONDAY" -"11","3","1992","TUESDAY" -"11","4","1992","WEDNESDAY" -"11","5","1992","THURSDAY" -"11","6","1992","FRIDAY" -"11","7","1992","SATURDAY" -"11","8","1992","SUNDAY" -"11","9","1992","MONDAY" -"11","10","1992","TUESDAY" -"11","11","1992","WEDNESDAY" -"11","12","1992","THURSDAY" -"11","13","1992","FRIDAY" -"11","14","1992","SATURDAY" -"11","15","1992","SUNDAY" -"11","16","1992","MONDAY" -"11","17","1992","TUESDAY" -"11","18","1992","WEDNESDAY" -"11","19","1992","THURSDAY" -"11","20","1992","FRIDAY" -"11","21","1992","SATURDAY" -"11","22","1992","SUNDAY" -"11","23","1992","MONDAY" -"11","24","1992","TUESDAY" -"11","25","1992","WEDNESDAY" -"11","26","1992","THURSDAY" -"11","27","1992","FRIDAY" -"11","28","1992","SATURDAY" -"11","29","1992","SUNDAY" -"11","30","1992","MONDAY" -"12","1","1992","TUESDAY" -"12","2","1992","WEDNESDAY" -"12","3","1992","THURSDAY" -"12","4","1992","FRIDAY" -"12","5","1992","SATURDAY" -"12","6","1992","SUNDAY" -"12","7","1992","MONDAY" -"12","8","1992","TUESDAY" -"12","9","1992","WEDNESDAY" -"12","10","1992","THURSDAY" -"12","11","1992","FRIDAY" -"12","12","1992","SATURDAY" -"12","13","1992","SUNDAY" -"12","14","1992","MONDAY" -"12","15","1992","TUESDAY" -"12","16","1992","WEDNESDAY" -"12","17","1992","THURSDAY" -"12","18","1992","FRIDAY" -"12","19","1992","SATURDAY" -"12","20","1992","SUNDAY" -"12","21","1992","MONDAY" -"12","22","1992","TUESDAY" -"12","23","1992","WEDNESDAY" -"12","24","1992","THURSDAY" -"12","25","1992","FRIDAY" -"12","26","1992","SATURDAY" -"12","27","1992","SUNDAY" -"12","28","1992","MONDAY" -"12","29","1992","TUESDAY" -"12","30","1992","WEDNESDAY" -"12","31","1992","THURSDAY" -"1","1","1993","FRIDAY" -"1","2","1993","SATURDAY" -"1","3","1993","SUNDAY" -"1","4","1993","MONDAY" -"1","5","1993","TUESDAY" -"1","6","1993","WEDNESDAY" -"1","7","1993","THURSDAY" -"1","8","1993","FRIDAY" -"1","9","1993","SATURDAY" -"1","10","1993","SUNDAY" -"1","11","1993","MONDAY" -"1","12","1993","TUESDAY" -"1","13","1993","WEDNESDAY" -"1","14","1993","THURSDAY" -"1","15","1993","FRIDAY" -"1","16","1993","SATURDAY" -"1","17","1993","SUNDAY" -"1","18","1993","MONDAY" -"1","19","1993","TUESDAY" -"1","20","1993","WEDNESDAY" -"1","21","1993","THURSDAY" -"1","22","1993","FRIDAY" -"1","23","1993","SATURDAY" -"1","24","1993","SUNDAY" -"1","25","1993","MONDAY" -"1","26","1993","TUESDAY" -"1","27","1993","WEDNESDAY" -"1","28","1993","THURSDAY" -"1","29","1993","FRIDAY" -"1","30","1993","SATURDAY" -"1","31","1993","SUNDAY" -"2","1","1993","MONDAY" -"2","2","1993","TUESDAY" -"2","3","1993","WEDNESDAY" -"2","4","1993","THURSDAY" -"2","5","1993","FRIDAY" -"2","6","1993","SATURDAY" -"2","7","1993","SUNDAY" -"2","8","1993","MONDAY" -"2","9","1993","TUESDAY" -"2","10","1993","WEDNESDAY" -"2","11","1993","THURSDAY" -"2","12","1993","FRIDAY" -"2","13","1993","SATURDAY" -"2","14","1993","SUNDAY" -"2","15","1993","MONDAY" -"2","16","1993","TUESDAY" -"2","17","1993","WEDNESDAY" -"2","18","1993","THURSDAY" -"2","19","1993","FRIDAY" -"2","20","1993","SATURDAY" -"2","21","1993","SUNDAY" -"2","22","1993","MONDAY" -"2","23","1993","TUESDAY" -"2","24","1993","WEDNESDAY" -"2","25","1993","THURSDAY" -"2","26","1993","FRIDAY" -"2","27","1993","SATURDAY" -"2","28","1993","SUNDAY" -"3","1","1993","MONDAY" -"3","2","1993","TUESDAY" -"3","3","1993","WEDNESDAY" -"3","4","1993","THURSDAY" -"3","5","1993","FRIDAY" -"3","6","1993","SATURDAY" -"3","7","1993","SUNDAY" -"3","8","1993","MONDAY" -"3","9","1993","TUESDAY" -"3","10","1993","WEDNESDAY" -"3","11","1993","THURSDAY" -"3","12","1993","FRIDAY" -"3","13","1993","SATURDAY" -"3","14","1993","SUNDAY" -"3","15","1993","MONDAY" -"3","16","1993","TUESDAY" -"3","17","1993","WEDNESDAY" -"3","18","1993","THURSDAY" -"3","19","1993","FRIDAY" -"3","20","1993","SATURDAY" -"3","21","1993","SUNDAY" -"3","22","1993","MONDAY" -"3","23","1993","TUESDAY" -"3","24","1993","WEDNESDAY" -"3","25","1993","THURSDAY" -"3","26","1993","FRIDAY" -"3","27","1993","SATURDAY" -"3","28","1993","SUNDAY" -"3","29","1993","MONDAY" -"3","30","1993","TUESDAY" -"3","31","1993","WEDNESDAY" -"4","1","1993","THURSDAY" -"4","2","1993","FRIDAY" -"4","3","1993","SATURDAY" -"4","4","1993","SUNDAY" -"4","5","1993","MONDAY" -"4","6","1993","TUESDAY" -"4","7","1993","WEDNESDAY" -"4","8","1993","THURSDAY" -"4","9","1993","FRIDAY" -"4","10","1993","SATURDAY" -"4","11","1993","SUNDAY" -"4","12","1993","MONDAY" -"4","13","1993","TUESDAY" -"4","14","1993","WEDNESDAY" -"4","15","1993","THURSDAY" -"4","16","1993","FRIDAY" -"4","17","1993","SATURDAY" -"4","18","1993","SUNDAY" -"4","19","1993","MONDAY" -"4","20","1993","TUESDAY" -"4","21","1993","WEDNESDAY" -"4","22","1993","THURSDAY" -"4","23","1993","FRIDAY" -"4","24","1993","SATURDAY" -"4","25","1993","SUNDAY" -"4","26","1993","MONDAY" -"4","27","1993","TUESDAY" -"4","28","1993","WEDNESDAY" -"4","29","1993","THURSDAY" -"4","30","1993","FRIDAY" -"5","1","1993","SATURDAY" -"5","2","1993","SUNDAY" -"5","3","1993","MONDAY" -"5","4","1993","TUESDAY" -"5","5","1993","WEDNESDAY" -"5","6","1993","THURSDAY" -"5","7","1993","FRIDAY" -"5","8","1993","SATURDAY" -"5","9","1993","SUNDAY" -"5","10","1993","MONDAY" -"5","11","1993","TUESDAY" -"5","12","1993","WEDNESDAY" -"5","13","1993","THURSDAY" -"5","14","1993","FRIDAY" -"5","15","1993","SATURDAY" -"5","16","1993","SUNDAY" -"5","17","1993","MONDAY" -"5","18","1993","TUESDAY" -"5","19","1993","WEDNESDAY" -"5","20","1993","THURSDAY" -"5","21","1993","FRIDAY" -"5","22","1993","SATURDAY" -"5","23","1993","SUNDAY" -"5","24","1993","MONDAY" -"5","25","1993","TUESDAY" -"5","26","1993","WEDNESDAY" -"5","27","1993","THURSDAY" -"5","28","1993","FRIDAY" -"5","29","1993","SATURDAY" -"5","30","1993","SUNDAY" -"5","31","1993","MONDAY" -"6","1","1993","TUESDAY" -"6","2","1993","WEDNESDAY" -"6","3","1993","THURSDAY" -"6","4","1993","FRIDAY" -"6","5","1993","SATURDAY" -"6","6","1993","SUNDAY" -"6","7","1993","MONDAY" -"6","8","1993","TUESDAY" -"6","9","1993","WEDNESDAY" -"6","10","1993","THURSDAY" -"6","11","1993","FRIDAY" -"6","12","1993","SATURDAY" -"6","13","1993","SUNDAY" -"6","14","1993","MONDAY" -"6","15","1993","TUESDAY" -"6","16","1993","WEDNESDAY" -"6","17","1993","THURSDAY" -"6","18","1993","FRIDAY" -"6","19","1993","SATURDAY" -"6","20","1993","SUNDAY" -"6","21","1993","MONDAY" -"6","22","1993","TUESDAY" -"6","23","1993","WEDNESDAY" -"6","24","1993","THURSDAY" -"6","25","1993","FRIDAY" -"6","26","1993","SATURDAY" -"6","27","1993","SUNDAY" -"6","28","1993","MONDAY" -"6","29","1993","TUESDAY" -"6","30","1993","WEDNESDAY" -"7","1","1993","THURSDAY" -"7","2","1993","FRIDAY" -"7","3","1993","SATURDAY" -"7","4","1993","SUNDAY" -"7","5","1993","MONDAY" -"7","6","1993","TUESDAY" -"7","7","1993","WEDNESDAY" -"7","8","1993","THURSDAY" -"7","9","1993","FRIDAY" -"7","10","1993","SATURDAY" -"7","11","1993","SUNDAY" -"7","12","1993","MONDAY" -"7","13","1993","TUESDAY" -"7","14","1993","WEDNESDAY" -"7","15","1993","THURSDAY" -"7","16","1993","FRIDAY" -"7","17","1993","SATURDAY" -"7","18","1993","SUNDAY" -"7","19","1993","MONDAY" -"7","20","1993","TUESDAY" -"7","21","1993","WEDNESDAY" -"7","22","1993","THURSDAY" -"7","23","1993","FRIDAY" -"7","24","1993","SATURDAY" -"7","25","1993","SUNDAY" -"7","26","1993","MONDAY" -"7","27","1993","TUESDAY" -"7","28","1993","WEDNESDAY" -"7","29","1993","THURSDAY" -"7","30","1993","FRIDAY" -"7","31","1993","SATURDAY" -"8","1","1993","SUNDAY" -"8","2","1993","MONDAY" -"8","3","1993","TUESDAY" -"8","4","1993","WEDNESDAY" -"8","5","1993","THURSDAY" -"8","6","1993","FRIDAY" -"8","7","1993","SATURDAY" -"8","8","1993","SUNDAY" -"8","9","1993","MONDAY" -"8","10","1993","TUESDAY" -"8","11","1993","WEDNESDAY" -"8","12","1993","THURSDAY" -"8","13","1993","FRIDAY" -"8","14","1993","SATURDAY" -"8","15","1993","SUNDAY" -"8","16","1993","MONDAY" -"8","17","1993","TUESDAY" -"8","18","1993","WEDNESDAY" -"8","19","1993","THURSDAY" -"8","20","1993","FRIDAY" -"8","21","1993","SATURDAY" -"8","22","1993","SUNDAY" -"8","23","1993","MONDAY" -"8","24","1993","TUESDAY" -"8","25","1993","WEDNESDAY" -"8","26","1993","THURSDAY" -"8","27","1993","FRIDAY" -"8","28","1993","SATURDAY" -"8","29","1993","SUNDAY" -"8","30","1993","MONDAY" -"8","31","1993","TUESDAY" -"9","1","1993","WEDNESDAY" -"9","2","1993","THURSDAY" -"9","3","1993","FRIDAY" -"9","4","1993","SATURDAY" -"9","5","1993","SUNDAY" -"9","6","1993","MONDAY" -"9","7","1993","TUESDAY" -"9","8","1993","WEDNESDAY" -"9","9","1993","THURSDAY" -"9","10","1993","FRIDAY" -"9","11","1993","SATURDAY" -"9","12","1993","SUNDAY" -"9","13","1993","MONDAY" -"9","14","1993","TUESDAY" -"9","15","1993","WEDNESDAY" -"9","16","1993","THURSDAY" -"9","17","1993","FRIDAY" -"9","18","1993","SATURDAY" -"9","19","1993","SUNDAY" -"9","20","1993","MONDAY" -"9","21","1993","TUESDAY" -"9","22","1993","WEDNESDAY" -"9","23","1993","THURSDAY" -"9","24","1993","FRIDAY" -"9","25","1993","SATURDAY" -"9","26","1993","SUNDAY" -"9","27","1993","MONDAY" -"9","28","1993","TUESDAY" -"9","29","1993","WEDNESDAY" -"9","30","1993","THURSDAY" -"10","1","1993","FRIDAY" -"10","2","1993","SATURDAY" -"10","3","1993","SUNDAY" -"10","4","1993","MONDAY" -"10","5","1993","TUESDAY" -"10","6","1993","WEDNESDAY" -"10","7","1993","THURSDAY" -"10","8","1993","FRIDAY" -"10","9","1993","SATURDAY" -"10","10","1993","SUNDAY" -"10","11","1993","MONDAY" -"10","12","1993","TUESDAY" -"10","13","1993","WEDNESDAY" -"10","14","1993","THURSDAY" -"10","15","1993","FRIDAY" -"10","16","1993","SATURDAY" -"10","17","1993","SUNDAY" -"10","18","1993","MONDAY" -"10","19","1993","TUESDAY" -"10","20","1993","WEDNESDAY" -"10","21","1993","THURSDAY" -"10","22","1993","FRIDAY" -"10","23","1993","SATURDAY" -"10","24","1993","SUNDAY" -"10","25","1993","MONDAY" -"10","26","1993","TUESDAY" -"10","27","1993","WEDNESDAY" -"10","28","1993","THURSDAY" -"10","29","1993","FRIDAY" -"10","30","1993","SATURDAY" -"10","31","1993","SUNDAY" -"11","1","1993","MONDAY" -"11","2","1993","TUESDAY" -"11","3","1993","WEDNESDAY" -"11","4","1993","THURSDAY" -"11","5","1993","FRIDAY" -"11","6","1993","SATURDAY" -"11","7","1993","SUNDAY" -"11","8","1993","MONDAY" -"11","9","1993","TUESDAY" -"11","10","1993","WEDNESDAY" -"11","11","1993","THURSDAY" -"11","12","1993","FRIDAY" -"11","13","1993","SATURDAY" -"11","14","1993","SUNDAY" -"11","15","1993","MONDAY" -"11","16","1993","TUESDAY" -"11","17","1993","WEDNESDAY" -"11","18","1993","THURSDAY" -"11","19","1993","FRIDAY" -"11","20","1993","SATURDAY" -"11","21","1993","SUNDAY" -"11","22","1993","MONDAY" -"11","23","1993","TUESDAY" -"11","24","1993","WEDNESDAY" -"11","25","1993","THURSDAY" -"11","26","1993","FRIDAY" -"11","27","1993","SATURDAY" -"11","28","1993","SUNDAY" -"11","29","1993","MONDAY" -"11","30","1993","TUESDAY" -"12","1","1993","WEDNESDAY" -"12","2","1993","THURSDAY" -"12","3","1993","FRIDAY" -"12","4","1993","SATURDAY" -"12","5","1993","SUNDAY" -"12","6","1993","MONDAY" -"12","7","1993","TUESDAY" -"12","8","1993","WEDNESDAY" -"12","9","1993","THURSDAY" -"12","10","1993","FRIDAY" -"12","11","1993","SATURDAY" -"12","12","1993","SUNDAY" -"12","13","1993","MONDAY" -"12","14","1993","TUESDAY" -"12","15","1993","WEDNESDAY" -"12","16","1993","THURSDAY" -"12","17","1993","FRIDAY" -"12","18","1993","SATURDAY" -"12","19","1993","SUNDAY" -"12","20","1993","MONDAY" -"12","21","1993","TUESDAY" -"12","22","1993","WEDNESDAY" -"12","23","1993","THURSDAY" -"12","24","1993","FRIDAY" -"12","25","1993","SATURDAY" -"12","26","1993","SUNDAY" -"12","27","1993","MONDAY" -"12","28","1993","TUESDAY" -"12","29","1993","WEDNESDAY" -"12","30","1993","THURSDAY" -"12","31","1993","FRIDAY" -"1","1","1994","SATURDAY" -"1","2","1994","SUNDAY" -"1","3","1994","MONDAY" -"1","4","1994","TUESDAY" -"1","5","1994","WEDNESDAY" -"1","6","1994","THURSDAY" -"1","7","1994","FRIDAY" -"1","8","1994","SATURDAY" -"1","9","1994","SUNDAY" -"1","10","1994","MONDAY" -"1","11","1994","TUESDAY" -"1","12","1994","WEDNESDAY" -"1","13","1994","THURSDAY" -"1","14","1994","FRIDAY" -"1","15","1994","SATURDAY" -"1","16","1994","SUNDAY" -"1","17","1994","MONDAY" -"1","18","1994","TUESDAY" -"1","19","1994","WEDNESDAY" -"1","20","1994","THURSDAY" -"1","21","1994","FRIDAY" -"1","22","1994","SATURDAY" -"1","23","1994","SUNDAY" -"1","24","1994","MONDAY" -"1","25","1994","TUESDAY" -"1","26","1994","WEDNESDAY" -"1","27","1994","THURSDAY" -"1","28","1994","FRIDAY" -"1","29","1994","SATURDAY" -"1","30","1994","SUNDAY" -"1","31","1994","MONDAY" -"2","1","1994","TUESDAY" -"2","2","1994","WEDNESDAY" -"2","3","1994","THURSDAY" -"2","4","1994","FRIDAY" -"2","5","1994","SATURDAY" -"2","6","1994","SUNDAY" -"2","7","1994","MONDAY" -"2","8","1994","TUESDAY" -"2","9","1994","WEDNESDAY" -"2","10","1994","THURSDAY" -"2","11","1994","FRIDAY" -"2","12","1994","SATURDAY" -"2","13","1994","SUNDAY" -"2","14","1994","MONDAY" -"2","15","1994","TUESDAY" -"2","16","1994","WEDNESDAY" -"2","17","1994","THURSDAY" -"2","18","1994","FRIDAY" -"2","19","1994","SATURDAY" -"2","20","1994","SUNDAY" -"2","21","1994","MONDAY" -"2","22","1994","TUESDAY" -"2","23","1994","WEDNESDAY" -"2","24","1994","THURSDAY" -"2","25","1994","FRIDAY" -"2","26","1994","SATURDAY" -"2","27","1994","SUNDAY" -"2","28","1994","MONDAY" -"3","1","1994","TUESDAY" -"3","2","1994","WEDNESDAY" -"3","3","1994","THURSDAY" -"3","4","1994","FRIDAY" -"3","5","1994","SATURDAY" -"3","6","1994","SUNDAY" -"3","7","1994","MONDAY" -"3","8","1994","TUESDAY" -"3","9","1994","WEDNESDAY" -"3","10","1994","THURSDAY" -"3","11","1994","FRIDAY" -"3","12","1994","SATURDAY" -"3","13","1994","SUNDAY" -"3","14","1994","MONDAY" -"3","15","1994","TUESDAY" -"3","16","1994","WEDNESDAY" -"3","17","1994","THURSDAY" -"3","18","1994","FRIDAY" -"3","19","1994","SATURDAY" -"3","20","1994","SUNDAY" -"3","21","1994","MONDAY" -"3","22","1994","TUESDAY" -"3","23","1994","WEDNESDAY" -"3","24","1994","THURSDAY" -"3","25","1994","FRIDAY" -"3","26","1994","SATURDAY" -"3","27","1994","SUNDAY" -"3","28","1994","MONDAY" -"3","29","1994","TUESDAY" -"3","30","1994","WEDNESDAY" -"3","31","1994","THURSDAY" -"4","1","1994","FRIDAY" -"4","2","1994","SATURDAY" -"4","3","1994","SUNDAY" -"4","4","1994","MONDAY" -"4","5","1994","TUESDAY" -"4","6","1994","WEDNESDAY" -"4","7","1994","THURSDAY" -"4","8","1994","FRIDAY" -"4","9","1994","SATURDAY" -"4","10","1994","SUNDAY" -"4","11","1994","MONDAY" -"4","12","1994","TUESDAY" -"4","13","1994","WEDNESDAY" -"4","14","1994","THURSDAY" -"4","15","1994","FRIDAY" -"4","16","1994","SATURDAY" -"4","17","1994","SUNDAY" -"4","18","1994","MONDAY" -"4","19","1994","TUESDAY" -"4","20","1994","WEDNESDAY" -"4","21","1994","THURSDAY" -"4","22","1994","FRIDAY" -"4","23","1994","SATURDAY" -"4","24","1994","SUNDAY" -"4","25","1994","MONDAY" -"4","26","1994","TUESDAY" -"4","27","1994","WEDNESDAY" -"4","28","1994","THURSDAY" -"4","29","1994","FRIDAY" -"4","30","1994","SATURDAY" -"5","1","1994","SUNDAY" -"5","2","1994","MONDAY" -"5","3","1994","TUESDAY" -"5","4","1994","WEDNESDAY" -"5","5","1994","THURSDAY" -"5","6","1994","FRIDAY" -"5","7","1994","SATURDAY" -"5","8","1994","SUNDAY" -"5","9","1994","MONDAY" -"5","10","1994","TUESDAY" -"5","11","1994","WEDNESDAY" -"5","12","1994","THURSDAY" -"5","13","1994","FRIDAY" -"5","14","1994","SATURDAY" -"5","15","1994","SUNDAY" -"5","16","1994","MONDAY" -"5","17","1994","TUESDAY" -"5","18","1994","WEDNESDAY" -"5","19","1994","THURSDAY" -"5","20","1994","FRIDAY" -"5","21","1994","SATURDAY" -"5","22","1994","SUNDAY" -"5","23","1994","MONDAY" -"5","24","1994","TUESDAY" -"5","25","1994","WEDNESDAY" -"5","26","1994","THURSDAY" -"5","27","1994","FRIDAY" -"5","28","1994","SATURDAY" -"5","29","1994","SUNDAY" -"5","30","1994","MONDAY" -"5","31","1994","TUESDAY" -"6","1","1994","WEDNESDAY" -"6","2","1994","THURSDAY" -"6","3","1994","FRIDAY" -"6","4","1994","SATURDAY" -"6","5","1994","SUNDAY" -"6","6","1994","MONDAY" -"6","7","1994","TUESDAY" -"6","8","1994","WEDNESDAY" -"6","9","1994","THURSDAY" -"6","10","1994","FRIDAY" -"6","11","1994","SATURDAY" -"6","12","1994","SUNDAY" -"6","13","1994","MONDAY" -"6","14","1994","TUESDAY" -"6","15","1994","WEDNESDAY" -"6","16","1994","THURSDAY" -"6","17","1994","FRIDAY" -"6","18","1994","SATURDAY" -"6","19","1994","SUNDAY" -"6","20","1994","MONDAY" -"6","21","1994","TUESDAY" -"6","22","1994","WEDNESDAY" -"6","23","1994","THURSDAY" -"6","24","1994","FRIDAY" -"6","25","1994","SATURDAY" -"6","26","1994","SUNDAY" -"6","27","1994","MONDAY" -"6","28","1994","TUESDAY" -"6","29","1994","WEDNESDAY" -"6","30","1994","THURSDAY" -"7","1","1994","FRIDAY" -"7","2","1994","SATURDAY" -"7","3","1994","SUNDAY" -"7","4","1994","MONDAY" -"7","5","1994","TUESDAY" -"7","6","1994","WEDNESDAY" -"7","7","1994","THURSDAY" -"7","8","1994","FRIDAY" -"7","9","1994","SATURDAY" -"7","10","1994","SUNDAY" -"7","11","1994","MONDAY" -"7","12","1994","TUESDAY" -"7","13","1994","WEDNESDAY" -"7","14","1994","THURSDAY" -"7","15","1994","FRIDAY" -"7","16","1994","SATURDAY" -"7","17","1994","SUNDAY" -"7","18","1994","MONDAY" -"7","19","1994","TUESDAY" -"7","20","1994","WEDNESDAY" -"7","21","1994","THURSDAY" -"7","22","1994","FRIDAY" -"7","23","1994","SATURDAY" -"7","24","1994","SUNDAY" -"7","25","1994","MONDAY" -"7","26","1994","TUESDAY" -"7","27","1994","WEDNESDAY" -"7","28","1994","THURSDAY" -"7","29","1994","FRIDAY" -"7","30","1994","SATURDAY" -"7","31","1994","SUNDAY" -"8","1","1994","MONDAY" -"8","2","1994","TUESDAY" -"8","3","1994","WEDNESDAY" -"8","4","1994","THURSDAY" -"8","5","1994","FRIDAY" -"8","6","1994","SATURDAY" -"8","7","1994","SUNDAY" -"8","8","1994","MONDAY" -"8","9","1994","TUESDAY" -"8","10","1994","WEDNESDAY" -"8","11","1994","THURSDAY" -"8","12","1994","FRIDAY" -"8","13","1994","SATURDAY" -"8","14","1994","SUNDAY" -"8","15","1994","MONDAY" -"8","16","1994","TUESDAY" -"8","17","1994","WEDNESDAY" -"8","18","1994","THURSDAY" -"8","19","1994","FRIDAY" -"8","20","1994","SATURDAY" -"8","21","1994","SUNDAY" -"8","22","1994","MONDAY" -"8","23","1994","TUESDAY" -"8","24","1994","WEDNESDAY" -"8","25","1994","THURSDAY" -"8","26","1994","FRIDAY" -"8","27","1994","SATURDAY" -"8","28","1994","SUNDAY" -"8","29","1994","MONDAY" -"8","30","1994","TUESDAY" -"8","31","1994","WEDNESDAY" -"9","1","1994","THURSDAY" -"9","2","1994","FRIDAY" -"9","3","1994","SATURDAY" -"9","4","1994","SUNDAY" -"9","5","1994","MONDAY" -"9","6","1994","TUESDAY" -"9","7","1994","WEDNESDAY" -"9","8","1994","THURSDAY" -"9","9","1994","FRIDAY" -"9","10","1994","SATURDAY" -"9","11","1994","SUNDAY" -"9","12","1994","MONDAY" -"9","13","1994","TUESDAY" -"9","14","1994","WEDNESDAY" -"9","15","1994","THURSDAY" -"9","16","1994","FRIDAY" -"9","17","1994","SATURDAY" -"9","18","1994","SUNDAY" -"9","19","1994","MONDAY" -"9","20","1994","TUESDAY" -"9","21","1994","WEDNESDAY" -"9","22","1994","THURSDAY" -"9","23","1994","FRIDAY" -"9","24","1994","SATURDAY" -"9","25","1994","SUNDAY" -"9","26","1994","MONDAY" -"9","27","1994","TUESDAY" -"9","28","1994","WEDNESDAY" -"9","29","1994","THURSDAY" -"9","30","1994","FRIDAY" -"10","1","1994","SATURDAY" -"10","2","1994","SUNDAY" -"10","3","1994","MONDAY" -"10","4","1994","TUESDAY" -"10","5","1994","WEDNESDAY" -"10","6","1994","THURSDAY" -"10","7","1994","FRIDAY" -"10","8","1994","SATURDAY" -"10","9","1994","SUNDAY" -"10","10","1994","MONDAY" -"10","11","1994","TUESDAY" -"10","12","1994","WEDNESDAY" -"10","13","1994","THURSDAY" -"10","14","1994","FRIDAY" -"10","15","1994","SATURDAY" -"10","16","1994","SUNDAY" -"10","17","1994","MONDAY" -"10","18","1994","TUESDAY" -"10","19","1994","WEDNESDAY" -"10","20","1994","THURSDAY" -"10","21","1994","FRIDAY" -"10","22","1994","SATURDAY" -"10","23","1994","SUNDAY" -"10","24","1994","MONDAY" -"10","25","1994","TUESDAY" -"10","26","1994","WEDNESDAY" -"10","27","1994","THURSDAY" -"10","28","1994","FRIDAY" -"10","29","1994","SATURDAY" -"10","30","1994","SUNDAY" -"10","31","1994","MONDAY" -"11","1","1994","TUESDAY" -"11","2","1994","WEDNESDAY" -"11","3","1994","THURSDAY" -"11","4","1994","FRIDAY" -"11","5","1994","SATURDAY" -"11","6","1994","SUNDAY" -"11","7","1994","MONDAY" -"11","8","1994","TUESDAY" -"11","9","1994","WEDNESDAY" -"11","10","1994","THURSDAY" -"11","11","1994","FRIDAY" -"11","12","1994","SATURDAY" -"11","13","1994","SUNDAY" -"11","14","1994","MONDAY" -"11","15","1994","TUESDAY" -"11","16","1994","WEDNESDAY" -"11","17","1994","THURSDAY" -"11","18","1994","FRIDAY" -"11","19","1994","SATURDAY" -"11","20","1994","SUNDAY" -"11","21","1994","MONDAY" -"11","22","1994","TUESDAY" -"11","23","1994","WEDNESDAY" -"11","24","1994","THURSDAY" -"11","25","1994","FRIDAY" -"11","26","1994","SATURDAY" -"11","27","1994","SUNDAY" -"11","28","1994","MONDAY" -"11","29","1994","TUESDAY" -"11","30","1994","WEDNESDAY" -"12","1","1994","THURSDAY" -"12","2","1994","FRIDAY" -"12","3","1994","SATURDAY" -"12","4","1994","SUNDAY" -"12","5","1994","MONDAY" -"12","6","1994","TUESDAY" -"12","7","1994","WEDNESDAY" -"12","8","1994","THURSDAY" -"12","9","1994","FRIDAY" -"12","10","1994","SATURDAY" -"12","11","1994","SUNDAY" -"12","12","1994","MONDAY" -"12","13","1994","TUESDAY" -"12","14","1994","WEDNESDAY" -"12","15","1994","THURSDAY" -"12","16","1994","FRIDAY" -"12","17","1994","SATURDAY" -"12","18","1994","SUNDAY" -"12","19","1994","MONDAY" -"12","20","1994","TUESDAY" -"12","21","1994","WEDNESDAY" -"12","22","1994","THURSDAY" -"12","23","1994","FRIDAY" -"12","24","1994","SATURDAY" -"12","25","1994","SUNDAY" -"12","26","1994","MONDAY" -"12","27","1994","TUESDAY" -"12","28","1994","WEDNESDAY" -"12","29","1994","THURSDAY" -"12","30","1994","FRIDAY" -"12","31","1994","SATURDAY" diff --git a/sql-bench/Data/ATIS/day_name.txt b/sql-bench/Data/ATIS/day_name.txt deleted file mode 100644 index eca77e3729fad0a427a5a93ce644b300fdc97751..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/day_name.txt +++ /dev/null @@ -1,7 +0,0 @@ -1,'MONDAY' -2,'TUESDAY' -3,'WEDNESDAY' -4,'THURSDAY' -5,'FRIDAY' -6,'SATURDAY' -7,'SUNDAY' diff --git a/sql-bench/Data/ATIS/dual_carrier.txt b/sql-bench/Data/ATIS/dual_carrier.txt deleted file mode 100644 index ecfc2e688b9c3bb573ad60afe893cb00920d7068..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/dual_carrier.txt +++ /dev/null @@ -1,114 +0,0 @@ -'AA','AA',3000,5799,'AMERICAN EAGLE' -'AC','RJ',1001,1010,'AIR CANADA' -'AC','CS',1100,1199,'AIR CANADA' -'AC','GX',1200,1499,'AIR CANADA' -'AC','ZX',1500,1799,'AIR CANADA' -'AC','QK',1800,1899,'AIR CANADA' -'AC','3J',1900,1949,'AIR CANADA' -'AC','3J',1977,1981,'AIR CANADA' -'AC','3J',1990,1999,'AIR CANADA' -'AC','NV',1950,1976,'AIR CANADA' -'AC','NV',1982,1989,'AIR CANADA' -'AQ','WP',1000,1999,'ALOHA AIRLINES,INC' -'AS','QX',2000,2199,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','QX',2260,2999,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','BF',2200,2259,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','BF',4000,4199,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','JF',4400,4499,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','KN',4500,4599,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','8E',4600,4699,'ALASKA AIRLINES COMMUTER SERVICE' -'AS','7H',4800,4899,'ALASKA AIRLINES COMMUTER SERVICE' -'BA','BE',8001,8002,'BRITISH AIRWAYS' -'BA','BE',8004,8004,'BRITISH AIRWAYS' -'BA','UA',8022,8022,'BRITISH AIRWAYS' -'BA','UA',8154,8155,'BRITISH AIRWAYS' -'BA','UA',8159,8159,'BRITISH AIRWAYS' -'BA','UA',8235,8235,'BRITISH AIRWAYS' -'BA','UA',8243,8243,'BRITISH AIRWAYS' -'BA','UA',8246,8246,'BRITISH AIRWAYS' -'BA','UA',8064,8064,'BRITISH AIRWAYS' -'BA','UA',8269,8269,'BRITISH AIRWAYS' -'BA','UA',8300,8300,'BRITISH AIRWAYS' -'BF','2E',1100,1399,'MARKAIR,INC.' -'BF','2E',1800,1899,'MARKAIR,INC.' -'CO','CO',950,967,'CONTINENTAL AIRLINES/AIR MICRONESIA' -'CO','CO',970,997,'CONTINENTAL AIRLINES/AIR MICRONESIA' -'CO','CO',1880,1899,'CONTINENTAL AIRLINES/AIR MICRONESIA' -'CO','CO',3300,3399,'CONTINENTAL AIRLINES/AIR MICRONESIA' -'CO','SK',8900,8949,'CONTINENTAL AIRLINES/SAS SCANDINAVIAN AIRLINES SYSTEM' -'CO','SK',9000,9125,'CONTINENTAL AIRLINES/SAS SCANDINAVIAN AIRLINES SYSTEM' -'CO','SK',9370,9435,'CONTINENTAL AIRLINES/SAS SCANDINAVIAN AIRLINES SYSTEM' -'CO','JC',2000,2499,'CONTINENTAL EXPRESS' -'CO','RU',2500,2799,'CONTINENTAL EXPRESS' -'CO','RU',3000,3025,'CONTINENTAL EXPRESS' -'CO','RU',4400,4999,'CONTINENTAL EXPRESS' -'CO','CO',2800,2999,'CONTINENTAL EXPRESS/RESORT EXPRESS' -'CO','CO',3026,3099,'CONTINENTAL EXPRESS/HOME JAMES' -'CO','CO',3100,3199,'CONTINENTAL EXPRESS/COLORADO MOUNTAIN EXPRESS' -'CO','6J',3200,3299,'CONTINENTAL EXPRESS/SOUTHERN JERSEY AIRWAYS,INC.' -'CO','QO',3400,3999,'CONTINENTAL EXPRESS/BAR HARBOR AIRLINES' -'CP','SK',68,69,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','LH',144,145,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',950,951,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',954,955,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',957,958,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',960,961,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',963,964,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',967,968,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',983,983,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',986,986,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',988,988,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',991,992,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','WD',994,995,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','PJ',1001,1010,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','KI',1100,1272,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','KI',1274,1274,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','KI',1276,1276,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','KI',1278,1283,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','KI',1285,1288,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','MO',1300,1359,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','9A',1400,1499,'CANADIAN AIRLINES INTERNATIONAL LTD. CANADIAN PARTNERS' -'CP','CP',1800,1999,'CANADIAN AIRLINES INTERNATIONAL LTD./ONTARIO EXPRESS LTD.' -'DL','EV',2000,2999,'DELTA CONNECTION' -'DL','OH',3000,3699,'DELTA CONNECTION' -'DL','HQ',4300,4999,'DELTA CONNECTION' -'DL','OO',5200,5999,'DELTA CONNECTION' -'EA','LI',2300,2399,'EASTERN EXPRESS' -'EA','HY',2900,3299,'EASTERN EXPRESS' -'EA','QO',3700,3999,'EASTERN EXPRESS' -'KL','UK',2843,2843,'KLM-ROYAL DUTCH AIRLINES' -'KL','UK',2845,2845,'KLM-ROYAL DUTCH AIRLINES' -'KL','UK',2847,2847,'KLM-ROYAL DUTCH AIRLINES' -'ML','JT',1500,1550,'THE MIDWAY CONNECTION/IOWA AIRWAYS' -'ML','ML',1600,1999,'THE MIDWAY CONNECTION/MIDWAY COMMUTER/FISCHER BROS. AVIATION' -'ND','QR',240,259,'INTAIR' -'ND','ND',940,959,'INTAIR/ALEXANDAIR,INC.' -'NW','QX',2000,2399,'NORTHWEST AIRLINES' -'NW','US',4000,4999,'NORTHWEST AIRLINES' -'NW','9E',2500,2999,'NORTHWEST AIRLINK' -'NW','XJ',3000,3399,'NORTHWEST AIRLINK' -'NW','RP',3500,3799,'NORTHWEST AIRLINK' -'NW','GQ',3800,3999,'NORTHWEST AIRLINK' -'PA','RZ',270,271,'PAN AM EXPRESS,INC.' -'PA','RZ',4500,4999,'PAN AM EXPRESS,INC.' -'PA','MA',4072,4073,'PAN AMERICAN WORLD AIRWAYS,INC./MALEV-HUNGARIAN AIRLINES' -'PA','JP',4076,4077,'PAN AMERICAN WORLD AIRWAYS,INC./ADRIA AIRWAYS' -'QF','AA',301,302,'QANTAS AIRWAYS LTD.' -'QK','QK',803,804,'AIR NOVA INC./NEWFOUNDLAND LABRADOR AIR TRANSPORT,LTD.' -'QY','QY',600,615,'AERO VIRGIN ISLANDS CORP./TAINO AIRWAYS' -'TW','US',8150,8155,'TRANS WORLD AIRLINES,INC.' -'TW','US',8156,8199,'TRANS WORLD AIRLINES,INC.' -'TW','9N',7000,7199,'TRANS WORLD EXPRESS,' -'TW','ZV',7300,7499,'TRANS WORLD EXPRESS,' -'TW','JI',7550,7569,'TRANS WORLD EXPRESS,' -'TW','8P',7570,7699,'TRANS WORLD EXPRESS,' -'TW','SS',7750,7949,'TRANS WORLD EXPRESS,' -'UA','XV',2100,2349,'UNITED EXPRESS' -'UA','NO',2375,2624,'UNITED EXPRESS' -'UA','ZW',2640,3099,'UNITED EXPRESS' -'UA','OE',3100,3569,'UNITED EXPRESS' -'UA','AP',3640,3999,'UNITED EXPRESS' -'US','US',3000,4999,'USAIR EXPRESS' -'YX','YX',1000,1999,'MIDWEST EXPRESS CONNECTION/SKYWAY AIRLINES INC.' -'2F','2F',526,529,'FRONTIER FLYING SERVICE/TATONDUK AIR SERVICE' -'','',0,0,'' diff --git a/sql-bench/Data/ATIS/fare.txt b/sql-bench/Data/ATIS/fare.txt deleted file mode 100644 index 5585a29afce9b8f565acb737ecc9649a42bc9272..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/fare.txt +++ /dev/null @@ -1,534 +0,0 @@ -'7100001','ATL','BOS','F','','',497.00,994.00 -'7100002','ATL','BOS','FN','','',348.00,696.00 -'7100003','ATL','BOS','Y','','',331.00,662.00 -'7100004','ATL','BOS','YN','','',266.00,532.00 -'7100005','ATL','BOS','K','','AP/57',0.00,388.00 -'7100006','ATL','BOS','KO','','AP/57',0.00,368.00 -'7100007','ATL','BOS','QW','','AP/57',0.00,268.00 -'7100008','ATL','BOS','QX','','AP/57',0.00,248.00 -'7100009','ATL','BOS','B','','VU/1',230.00,0.00 -'7100010','ATL','BOS','Y','','VU/1',226.00,0.00 -'7100011','ATL','BWI','F','','',428.00,856.00 -'7100012','ATL','BWI','FN','','',299.00,598.00 -'7100013','ATL','BWI','Y','','',286.00,572.00 -'7100014','ATL','BWI','YN','','',230.00,460.00 -'7100015','ATL','BWI','QW','','AP/57',0.00,248.00 -'7100016','ATL','BWI','QX','','AP/57',0.00,208.00 -'7100017','ATL','BWI','B','','VU/1',199.00,0.00 -'7100018','ATL','BWI','Y','','VU/1',196.00,0.00 -'7100019','ATL','DEN','F','UA','',685.00,1370.00 -'7100020','ATL','DEN','F','','',677.00,1354.00 -'7100021','ATL','DEN','FN','','',475.00,950.00 -'7100022','ATL','DEN','Y','UA','',457.00,914.00 -'7100023','ATL','DEN','Y','','',452.00,904.00 -'7100024','ATL','DEN','B','DL','',435.00,870.00 -'7100025','ATL','DEN','H','EA','',410.00,820.00 -'7100026','ATL','DEN','M','DL','',410.00,820.00 -'7100027','ATL','DEN','YN','','',361.00,722.00 -'7100028','ATL','DEN','MW','','AP/57',0.00,438.00 -'7100029','ATL','DEN','MX','','AP/57',0.00,378.00 -'7100030','ATL','DEN','QW','','AP/57',0.00,298.00 -'7100031','ATL','DEN','QX','','AP/57',0.00,238.00 -'7100032','ATL','DEN','B','','VU/1',314.00,0.00 -'7100033','ATL','DEN','Y','','VU/1',314.00,0.00 -'7100034','ATL','DEN','B','','AP/55',304.00,0.00 -'7100035','ATL','DEN','H','','AP/55',228.00,0.00 -'7100036','ATL','DFW','F','AA','',512.00,1024.00 -'7100037','ATL','DFW','F','DL','',504.00,1008.00 -'7100038','ATL','DFW','F','','',503.00,1006.00 -'7100039','ATL','DFW','FN','AA','',360.00,720.00 -'7100040','ATL','DFW','FN','','',352.00,704.00 -'7100041','ATL','DFW','Y','','',341.00,682.00 -'7100042','ATL','DFW','Y','DL','',336.00,672.00 -'7100043','ATL','DFW','YN','AA','',277.00,554.00 -'7100044','ATL','DFW','YN','','',272.00,544.00 -'7100045','ATL','DFW','QW','','AP/80',0.00,268.00 -'7100046','ATL','DFW','QX','','AP/80',0.00,228.00 -'7100047','ATL','DFW','B','','VU/1',233.00,0.00 -'7100048','ATL','DFW','Y','AA','VU/1',233.00,0.00 -'7100049','ATL','DFW','M','','VU/1',233.00,0.00 -'7100050','ATL','DFW','Y','','VU/1',222.00,0.00 -'7100051','ATL','OAK','F','UA','',843.00,1686.00 -'7100052','ATL','OAK','Y','UA','',557.00,1114.00 -'7100053','ATL','OAK','QW','','AP/80',0.00,398.00 -'7100054','ATL','OAK','QX','','AP/80',0.00,348.00 -'7100055','ATL','OAK','B','','AP/68',503.00,0.00 -'7100056','ATL','OAK','B','','VU/1',387.00,0.00 -'7100057','ATL','OAK','Y','','VU/1',376.00,0.00 -'7100058','ATL','PHL','F','US','',465.00,930.00 -'7100059','ATL','PHL','F','','',449.00,898.00 -'7100060','ATL','PHL','FN','','',314.00,628.00 -'7100061','ATL','PHL','Y','','',295.00,590.00 -'7100062','ATL','PHL','Y','US','',290.00,580.00 -'7100063','ATL','PHL','YN','','',243.00,486.00 -'7100064','ATL','PHL','KW','','AP/57',0.00,268.00 -'7100065','ATL','PHL','QW','','AP/80',0.00,268.00 -'7100066','ATL','PHL','QW','','AP/57',0.00,268.00 -'7100067','ATL','PHL','KX','','AP/57',0.00,228.00 -'7100068','ATL','PHL','QX','','AP/57',0.00,228.00 -'7100069','ATL','PHL','QX','','AP/80',0.00,228.00 -'7100070','ATL','PHL','B','','VU/1',205.00,0.00 -'7100071','ATL','PHL','Y','','VU/1',205.00,0.00 -'7100072','ATL','PIT','F','','',416.00,832.00 -'7100073','ATL','PIT','FN','','',291.00,582.00 -'7100074','ATL','PIT','Y','','',274.00,548.00 -'7100075','ATL','PIT','YN','','',217.00,434.00 -'7100076','ATL','PIT','KW','','AP/57',0.00,268.00 -'7100077','ATL','PIT','QW','','AP/57',0.00,248.00 -'7100078','ATL','PIT','KX','','AP/57',0.00,228.00 -'7100079','ATL','PIT','QX','','AP/57',0.00,208.00 -'7100080','ATL','PIT','B','','VU/1',190.00,0.00 -'7100081','ATL','PIT','Y','','VU/1',190.00,0.00 -'7100082','ATL','SFO','F','','',828.00,1656.00 -'7100083','ATL','SFO','Y','','',552.00,1104.00 -'7100084','ATL','SFO','QW','','AP/57',0.00,398.00 -'7100085','ATL','SFO','QX','','AP/57',0.00,358.00 -'7100086','ATL','SFO','K','','AP/68',435.00,0.00 -'7100087','ATL','SFO','Q','','AP/68',435.00,0.00 -'7100088','ATL','SFO','B','','VU/1',383.00,0.00 -'7100089','ATL','SFO','Y','','VU/1',376.00,0.00 -'7100090','BOS','ATL','F','','',497.00,994.00 -'7100091','BOS','ATL','FN','','',348.00,696.00 -'7100092','BOS','ATL','Y','','',331.00,662.00 -'7100093','BOS','ATL','YN','','',266.00,532.00 -'7100094','BOS','ATL','K','','AP/57',0.00,388.00 -'7100095','BOS','ATL','KO','','AP/57',0.00,368.00 -'7100096','BOS','ATL','QW','','AP/57',0.00,268.00 -'7100097','BOS','ATL','QX','','AP/57',0.00,248.00 -'7100098','BOS','ATL','B','','VU/1',230.00,0.00 -'7100099','BOS','ATL','Y','','VU/1',226.00,0.00 -'7100100','BOS','BWI','F','','',368.00,736.00 -'7100101','BOS','BWI','Y','','',161.00,322.00 -'7100102','BOS','BWI','Y','','VU/1',109.00,0.00 -'7100103','BOS','DEN','F','','',713.00,1426.00 -'7100104','BOS','DEN','Y','','',475.00,950.00 -'7100105','BOS','DEN','QW','','AP/80',0.00,378.00 -'7100106','BOS','DEN','QX','','AP/80',0.00,338.00 -'7100107','BOS','DEN','B','','VU/1',379.00,0.00 -'7100108','BOS','DEN','Y','','VU/1',326.00,0.00 -'7100109','BOS','DFW','F','AA','',773.00,1546.00 -'7100110','BOS','DFW','F','DL','',765.00,1530.00 -'7100111','BOS','DFW','Y','AA','',515.00,1030.00 -'7100112','BOS','DFW','Y','DL','',510.00,1020.00 -'7100113','BOS','DFW','B','','VU/1',354.00,0.00 -'7100114','BOS','DFW','Y','','VU/1',354.00,0.00 -'7100115','BOS','PHL','F','','',210.00,420.00 -'7100116','BOS','PHL','Y','DL','',147.00,294.00 -'7100117','BOS','PHL','B','DL','',140.00,280.00 -'7100118','BOS','PHL','K','','',140.00,280.00 -'7100119','BOS','PHL','Y','DL','',140.00,280.00 -'7100120','BOS','PHL','Y','','',140.00,280.00 -'7100121','BOS','PHL','B','','AP/75',0.00,270.00 -'7100122','BOS','PHL','B','DL','',129.00,258.00 -'7100123','BOS','PHL','B','US','',109.00,218.00 -'7100124','BOS','PHL','M','ML','',109.00,218.00 -'7100125','BOS','PHL','Q','','AP/27',0.00,188.00 -'7100126','BOS','PHL','B','','AP/44',129.00,0.00 -'7100127','BOS','PHL','B','','VU/1',102.00,0.00 -'7100128','BOS','PHL','Y','','VU/1',97.00,0.00 -'7100129','BOS','PIT','F','','',330.00,660.00 -'7100130','BOS','PIT','Y','','',240.00,480.00 -'7100131','BOS','PIT','Y','','VU/1',153.00,0.00 -'7100132','BOS','SFO','F','','',860.00,1720.00 -'7100133','BOS','SFO','F','AA','',852.00,1704.00 -'7100134','BOS','SFO','C','','',635.00,1270.00 -'7100135','BOS','SFO','Y','TW','',605.00,1210.00 -'7100136','BOS','SFO','Y','UA','',605.00,1210.00 -'7100137','BOS','SFO','Y','','',573.00,1146.00 -'7100138','BOS','SFO','B','AA','',508.00,1016.00 -'7100139','BOS','SFO','KW','','AP/57',0.00,418.00 -'7100140','BOS','SFO','QW','','AP/80',0.00,418.00 -'7100141','BOS','SFO','KX','','AP/57',0.00,378.00 -'7100142','BOS','SFO','QX','','AP/80',0.00,378.00 -'7100143','BOS','SFO','B','','VU/1',412.00,0.00 -'7100144','BOS','SFO','M','','VU/1',394.00,0.00 -'7100145','BOS','SFO','Y','','VU/1',394.00,0.00 -'7100146','BWI','ATL','F','','',428.00,856.00 -'7100147','BWI','ATL','FN','','',299.00,598.00 -'7100148','BWI','ATL','Y','','',286.00,572.00 -'7100149','BWI','ATL','YN','','',230.00,460.00 -'7100150','BWI','ATL','QW','','AP/57',0.00,248.00 -'7100151','BWI','ATL','QX','','AP/57',0.00,208.00 -'7100152','BWI','ATL','B','','VU/1',199.00,0.00 -'7100153','BWI','ATL','Y','','VU/1',196.00,0.00 -'7100154','BWI','BOS','F','','',368.00,736.00 -'7100155','BWI','BOS','Y','','',161.00,322.00 -'7100156','BWI','BOS','Y','','VU/1',109.00,0.00 -'7100157','BWI','DEN','F','US','',653.00,1306.00 -'7100158','BWI','DEN','F','','',645.00,1290.00 -'7100159','BWI','DEN','Y','UA','',424.00,848.00 -'7100160','BWI','DEN','Y','','',420.00,840.00 -'7100161','BWI','DEN','Q','US','',238.00,476.00 -'7100162','BWI','DEN','QW','','AP/80',0.00,306.00 -'7100163','BWI','DEN','QX','','AP/80',0.00,256.00 -'7100164','BWI','DEN','Y','','VU/1',280.00,0.00 -'7100165','BWI','DFW','F','AA','',630.00,1260.00 -'7100166','BWI','DFW','F','','',622.00,1244.00 -'7100167','BWI','DFW','Y','AA','',420.00,840.00 -'7100168','BWI','DFW','Y','','',415.00,830.00 -'7100169','BWI','DFW','B','','VU/1',288.00,0.00 -'7100170','BWI','DFW','Y','','VU/1',288.00,0.00 -'7100171','BWI','PHL','Y','','',165.00,330.00 -'7100172','BWI','PHL','M','','',106.00,212.00 -'7100173','BWI','PHL','Y','','VU/1',115.00,0.00 -'7100174','BWI','PIT','F','','',172.00,344.00 -'7100175','BWI','PIT','Y','','',119.00,238.00 -'7100176','BWI','PIT','Y','','VU/1',80.00,0.00 -'7100177','DEN','ATL','F','UA','',685.00,1370.00 -'7100178','DEN','ATL','F','','',677.00,1354.00 -'7100179','DEN','ATL','FN','','',475.00,950.00 -'7100180','DEN','ATL','Y','UA','',457.00,914.00 -'7100181','DEN','ATL','Y','','',452.00,904.00 -'7100182','DEN','ATL','B','DL','',435.00,870.00 -'7100183','DEN','ATL','H','','',410.00,820.00 -'7100184','DEN','ATL','M','DL','',410.00,820.00 -'7100185','DEN','ATL','YN','','',361.00,722.00 -'7100186','DEN','ATL','MW','','AP/57',0.00,438.00 -'7100187','DEN','ATL','MX','','AP/57',0.00,378.00 -'7100188','DEN','ATL','QW','','AP/57',0.00,298.00 -'7100189','DEN','ATL','QX','','AP/57',0.00,238.00 -'7100190','DEN','ATL','B','','VU/1',314.00,0.00 -'7100191','DEN','ATL','Y','','VU/1',314.00,0.00 -'7100192','DEN','ATL','B','','AP/55',304.00,0.00 -'7100193','DEN','BOS','F','','',713.00,1426.00 -'7100194','DEN','BOS','F','US','',705.00,1410.00 -'7100195','DEN','BOS','Y','','',475.00,950.00 -'7100196','DEN','BOS','Y','US','',470.00,940.00 -'7100197','DEN','BOS','B','US','',382.00,764.00 -'7100198','DEN','BOS','M','DL','',295.00,590.00 -'7100199','DEN','BOS','Q','US','',295.00,590.00 -'7100200','DEN','BOS','Q','DL','',238.00,476.00 -'7100201','DEN','BOS','KW','','AP/57',0.00,378.00 -'7100202','DEN','BOS','QW','','AP/80',0.00,378.00 -'7100203','DEN','BOS','KX','','AP/57',0.00,338.00 -'7100204','DEN','BOS','QX','','AP/80',0.00,338.00 -'7100205','DEN','BOS','B','','VU/1',379.00,0.00 -'7100206','DEN','BOS','Y','','VU/1',326.00,0.00 -'7100207','DEN','BWI','F','US','',653.00,1306.00 -'7100208','DEN','BWI','F','UA','',645.00,1290.00 -'7100209','DEN','BWI','Y','','',424.00,848.00 -'7100210','DEN','BWI','Y','US','',420.00,840.00 -'7100211','DEN','BWI','Q','US','',238.00,476.00 -'7100212','DEN','BWI','QW','','AP/80',0.00,306.00 -'7100213','DEN','BWI','QX','','AP/80',0.00,256.00 -'7100214','DEN','BWI','M','','VU/1',296.00,0.00 -'7100215','DEN','BWI','Y','','VU/1',280.00,0.00 -'7100216','DEN','DFW','F','','',489.00,978.00 -'7100217','DEN','DFW','F','DL','',481.00,962.00 -'7100218','DEN','DFW','FN','AA','',344.00,688.00 -'7100219','DEN','DFW','FN','','',336.00,672.00 -'7100220','DEN','DFW','Y','','',305.00,610.00 -'7100221','DEN','DFW','Y','DL','',300.00,600.00 -'7100222','DEN','DFW','YN','AA','',261.00,522.00 -'7100223','DEN','DFW','YN','','',256.00,512.00 -'7100224','DEN','DFW','QW','','AP/80',0.00,268.00 -'7100225','DEN','DFW','QX','','AP/80',0.00,228.00 -'7100226','DEN','DFW','B','','VU/1',208.00,0.00 -'7100227','DEN','DFW','Y','','VU/1',208.00,0.00 -'7100228','DEN','OAK','F','','',488.00,976.00 -'7100229','DEN','OAK','Y','','',325.00,650.00 -'7100230','DEN','OAK','QW','','AP/80',0.00,288.00 -'7100231','DEN','OAK','QX','','AP/80',0.00,248.00 -'7100232','DEN','OAK','Y','','VU/1',222.00,0.00 -'7100233','DEN','PHL','F','','',706.00,1412.00 -'7100234','DEN','PHL','Y','','',470.00,940.00 -'7100235','DEN','PHL','FN','','',441.00,882.00 -'7100236','DEN','PHL','YN','','',336.00,672.00 -'7100237','DEN','PHL','KW','','AP/57',0.00,488.00 -'7100238','DEN','PHL','KX','','AP/57',0.00,418.00 -'7100239','DEN','PHL','QW','','AP/80',0.00,348.00 -'7100240','DEN','PHL','QX','','AP/80',0.00,278.00 -'7100241','DEN','PHL','Y','','VU/1',323.00,0.00 -'7100242','DEN','PHL','B','','VU/1',297.00,0.00 -'7100243','DEN','PIT','F','','',647.00,1294.00 -'7100244','DEN','PIT','Y','','',412.00,824.00 -'7100245','DEN','PIT','Q','','',287.00,574.00 -'7100246','DEN','PIT','Y','','VU/1',285.00,0.00 -'7100247','DEN','SFO','F','','',488.00,976.00 -'7100248','DEN','SFO','Y','','',325.00,650.00 -'7100249','DEN','SFO','YN','','',325.00,650.00 -'7100250','DEN','SFO','QW','','AP/80',0.00,288.00 -'7100251','DEN','SFO','QX','','AP/80',0.00,248.00 -'7100252','DEN','SFO','B','','VU/1',222.00,0.00 -'7100253','DEN','SFO','Y','','VU/1',222.00,0.00 -'7100254','DFW','ATL','F','AA','',512.00,1024.00 -'7100255','DFW','ATL','F','DL','',504.00,1008.00 -'7100256','DFW','ATL','F','','',488.00,976.00 -'7100257','DFW','ATL','FN','AA','',360.00,720.00 -'7100258','DFW','ATL','FN','','',352.00,704.00 -'7100259','DFW','ATL','Y','AA','',341.00,682.00 -'7100260','DFW','ATL','Y','DL','',336.00,672.00 -'7100261','DFW','ATL','YN','AA','',277.00,554.00 -'7100262','DFW','ATL','YN','','',272.00,544.00 -'7100263','DFW','ATL','QW','','AP/80',0.00,268.00 -'7100264','DFW','ATL','QX','','AP/80',0.00,228.00 -'7100265','DFW','ATL','B','','VU/1',233.00,0.00 -'7100266','DFW','ATL','Y','AA','VU/1',233.00,0.00 -'7100267','DFW','ATL','Y','','VU/1',222.00,0.00 -'7100268','DFW','BOS','F','AA','',773.00,1546.00 -'7100269','DFW','BOS','F','','',765.00,1530.00 -'7100270','DFW','BOS','Y','AA','',515.00,1030.00 -'7100271','DFW','BOS','Y','DL','',510.00,1020.00 -'7100272','DFW','BOS','B','','VU/1',354.00,0.00 -'7100273','DFW','BOS','Y','AA','VU/1',354.00,0.00 -'7100274','DFW','BOS','Y','','VU/1',341.00,0.00 -'7100275','DFW','BWI','F','AA','',630.00,1260.00 -'7100276','DFW','BWI','F','','',622.00,1244.00 -'7100277','DFW','BWI','Y','AA','',420.00,840.00 -'7100278','DFW','BWI','Y','','',415.00,830.00 -'7100279','DFW','BWI','B','','VU/1',288.00,0.00 -'7100280','DFW','BWI','Y','','VU/1',288.00,0.00 -'7100281','DFW','DEN','F','','',489.00,978.00 -'7100282','DFW','DEN','F','DL','',481.00,962.00 -'7100283','DFW','DEN','FN','AA','',344.00,688.00 -'7100284','DFW','DEN','FN','','',336.00,672.00 -'7100285','DFW','DEN','Y','','',305.00,610.00 -'7100286','DFW','DEN','Y','DL','',300.00,600.00 -'7100287','DFW','DEN','YN','AA','',261.00,522.00 -'7100288','DFW','DEN','YN','','',256.00,512.00 -'7100289','DFW','DEN','QW','','AP/80',0.00,268.00 -'7100290','DFW','DEN','QX','','AP/80',0.00,228.00 -'7100291','DFW','DEN','B','','VU/1',208.00,0.00 -'7100292','DFW','DEN','Y','','VU/1',208.00,0.00 -'7100293','DFW','OAK','F','AA','',717.00,1434.00 -'7100294','DFW','OAK','F','','',646.00,1292.00 -'7100295','DFW','OAK','FN','','',504.00,1008.00 -'7100296','DFW','OAK','Y','AA','',478.00,956.00 -'7100297','DFW','OAK','Y','','',467.00,934.00 -'7100298','DFW','OAK','YN','','',386.00,772.00 -'7100299','DFW','OAK','QW','','AP/80',0.00,378.00 -'7100300','DFW','OAK','QX','','AP/80',0.00,338.00 -'7100301','DFW','OAK','Y','','VU/1',328.00,0.00 -'7100302','DFW','PHL','F','AA','',745.00,1490.00 -'7100303','DFW','PHL','F','','',737.00,1474.00 -'7100304','DFW','PHL','FN','','',516.00,1032.00 -'7100305','DFW','PHL','Y','AA','',496.00,992.00 -'7100306','DFW','PHL','Y','DL','',491.00,982.00 -'7100307','DFW','PHL','YN','','',396.00,792.00 -'7100308','DFW','PHL','B','','VU/1',341.00,0.00 -'7100309','DFW','PHL','Y','','VU/1',341.00,0.00 -'7100310','DFW','PIT','F','','',611.00,1222.00 -'7100311','DFW','PIT','Y','AA','',420.00,840.00 -'7100312','DFW','PIT','Y','AA','',380.00,760.00 -'7100313','DFW','PIT','Y','','',375.00,750.00 -'7100314','DFW','PIT','B','','VU/1',279.00,0.00 -'7100315','DFW','PIT','Y','','VU/1',260.00,0.00 -'7100316','DFW','SFO','F','','',717.00,1434.00 -'7100317','DFW','SFO','F','DL','',709.00,1418.00 -'7100318','DFW','SFO','FN','AA','',504.00,1008.00 -'7100319','DFW','SFO','FN','','',496.00,992.00 -'7100320','DFW','SFO','Y','','',478.00,956.00 -'7100321','DFW','SFO','Y','DL','',473.00,946.00 -'7100322','DFW','SFO','YN','AA','',386.00,772.00 -'7100323','DFW','SFO','YN','','',381.00,762.00 -'7100324','DFW','SFO','QW','','AP/80',0.00,378.00 -'7100325','DFW','SFO','QX','','AP/80',0.00,338.00 -'7100326','DFW','SFO','B','','VU/1',328.00,0.00 -'7100327','DFW','SFO','Y','','VU/1',328.00,0.00 -'7100328','OAK','BOS','F','','',836.00,1672.00 -'7100329','OAK','BOS','Y','','',557.00,1114.00 -'7100330','OAK','BOS','QW','','AP/80',0.00,418.00 -'7100331','OAK','BOS','QX','','AP/80',0.00,378.00 -'7100332','OAK','BOS','Y','','VU/1',394.00,0.00 -'7100333','OAK','DEN','F','','',488.00,976.00 -'7100334','OAK','DEN','Y','','',325.00,650.00 -'7100335','OAK','DEN','QW','','AP/80',0.00,288.00 -'7100336','OAK','DEN','QX','','AP/80',0.00,248.00 -'7100337','OAK','DEN','Y','','VU/1',222.00,0.00 -'7100338','OAK','DFW','F','','',717.00,1434.00 -'7100339','OAK','DFW','FN','','',504.00,1008.00 -'7100340','OAK','DFW','Y','','',478.00,956.00 -'7100341','OAK','DFW','YN','','',386.00,772.00 -'7100342','OAK','DFW','Y','','VU/1',328.00,0.00 -'7100343','OAK','PHL','F','AA','',877.00,1754.00 -'7100344','OAK','PHL','Y','AA','',584.00,1168.00 -'7100345','OAK','PHL','B','AA','',488.00,976.00 -'7100346','OAK','PHL','Y','','VU/1',402.00,0.00 -'7100347','OAK','SFO','Y','','',110.00,220.00 -'7100348','OAK','SFO','YN','','',54.00,108.00 -'7100349','OAK','SFO','Y','AA','VU/1',61.00,0.00 -'7100350','PHL','ATL','F','US','',465.00,930.00 -'7100351','PHL','ATL','F','','',449.00,898.00 -'7100352','PHL','ATL','FN','','',314.00,628.00 -'7100353','PHL','ATL','Y','DL','',295.00,590.00 -'7100354','PHL','ATL','Y','EA','',295.00,590.00 -'7100355','PHL','ATL','Y','','',290.00,580.00 -'7100356','PHL','ATL','YN','','',243.00,486.00 -'7100357','PHL','ATL','KW','','AP/57',0.00,268.00 -'7100358','PHL','ATL','QW','','AP/57',0.00,268.00 -'7100359','PHL','ATL','KX','','AP/57',0.00,228.00 -'7100360','PHL','ATL','QX','','AP/57',0.00,228.00 -'7100361','PHL','ATL','B','','VU/1',205.00,0.00 -'7100362','PHL','ATL','Y','','VU/1',205.00,0.00 -'7100363','PHL','BOS','F','','',210.00,420.00 -'7100364','PHL','BOS','FN','','',147.00,294.00 -'7100365','PHL','BOS','Y','DL','',147.00,294.00 -'7100366','PHL','BOS','B','DL','',140.00,280.00 -'7100367','PHL','BOS','K','','',140.00,280.00 -'7100368','PHL','BOS','Y','DL','',140.00,280.00 -'7100369','PHL','BOS','Y','','',140.00,280.00 -'7100370','PHL','BOS','B','','AP/75',0.00,270.00 -'7100371','PHL','BOS','B','DL','',129.00,258.00 -'7100372','PHL','BOS','YN','','',119.00,238.00 -'7100373','PHL','BOS','B','US','',109.00,218.00 -'7100374','PHL','BOS','M','ML','',109.00,218.00 -'7100375','PHL','BOS','Q','','AP/27',0.00,188.00 -'7100376','PHL','BOS','B','','AP/44',129.00,0.00 -'7100377','PHL','BOS','B','','VU/1',102.00,0.00 -'7100378','PHL','BOS','Y','','VU/1',97.00,0.00 -'7100379','PHL','BWI','Y','','',165.00,330.00 -'7100380','PHL','BWI','M','','',106.00,212.00 -'7100381','PHL','BWI','Y','','VU/1',115.00,0.00 -'7100382','PHL','DEN','F','','',706.00,1412.00 -'7100383','PHL','DEN','F','DL','',630.00,1260.00 -'7100384','PHL','DEN','Y','','',470.00,940.00 -'7100385','PHL','DEN','Y','DL','',420.00,840.00 -'7100386','PHL','DEN','KW','','AP/57',0.00,488.00 -'7100387','PHL','DEN','KX','','AP/57',0.00,418.00 -'7100388','PHL','DEN','QW','','AP/80',0.00,348.00 -'7100389','PHL','DEN','QX','','AP/80',0.00,278.00 -'7100390','PHL','DEN','Y','','VU/1',323.00,0.00 -'7100391','PHL','DEN','B','','VU/1',297.00,0.00 -'7100392','PHL','DFW','F','AA','',745.00,1490.00 -'7100393','PHL','DFW','F','','',737.00,1474.00 -'7100394','PHL','DFW','Y','AA','',496.00,992.00 -'7100395','PHL','DFW','Y','DL','',491.00,982.00 -'7100396','PHL','DFW','B','','VU/1',341.00,0.00 -'7100397','PHL','DFW','Y','AA','VU/1',341.00,0.00 -'7100398','PHL','DFW','M','','AP/68',284.00,0.00 -'7100399','PHL','DFW','Y','','VU/1',283.00,0.00 -'7100400','PHL','OAK','F','AA','',877.00,1754.00 -'7100401','PHL','OAK','Y','AA','',584.00,1168.00 -'7100402','PHL','OAK','B','AA','',488.00,976.00 -'7100403','PHL','OAK','Y','','VU/1',402.00,0.00 -'7100404','PHL','PIT','F','','',189.00,378.00 -'7100405','PHL','PIT','Y','','',131.00,262.00 -'7100406','PHL','PIT','Y','','VU/1',88.00,0.00 -'7100407','PHL','SFO','F','US','',995.00,1990.00 -'7100408','PHL','SFO','F','','',887.00,1774.00 -'7100409','PHL','SFO','Y','','',591.00,1182.00 -'7100410','PHL','SFO','Y','US','',586.00,1172.00 -'7100411','PHL','SFO','B','US','',483.00,966.00 -'7100412','PHL','SFO','QW','','AP/80',0.00,418.00 -'7100413','PHL','SFO','QX','','AP/80',0.00,378.00 -'7100414','PHL','SFO','B','','AP/55',488.00,0.00 -'7100415','PHL','SFO','B','','VU/1',407.00,0.00 -'7100416','PHL','SFO','M','','VU/1',407.00,0.00 -'7100417','PHL','SFO','Y','','VU/1',407.00,0.00 -'7100418','PHL','SFO','Y','US','VU/1',388.00,0.00 -'7100419','PIT','ATL','F','','',416.00,832.00 -'7100420','PIT','ATL','FN','','',291.00,582.00 -'7100421','PIT','ATL','Y','','',274.00,548.00 -'7100422','PIT','ATL','YN','','',217.00,434.00 -'7100423','PIT','ATL','KW','','AP/57',0.00,268.00 -'7100424','PIT','ATL','QW','','AP/57',0.00,248.00 -'7100425','PIT','ATL','KX','','AP/57',0.00,228.00 -'7100426','PIT','ATL','QX','','AP/57',0.00,208.00 -'7100427','PIT','ATL','B','','VU/1',190.00,0.00 -'7100428','PIT','ATL','Y','','VU/1',190.00,0.00 -'7100429','PIT','BOS','F','','',330.00,660.00 -'7100430','PIT','BOS','Y','','',240.00,480.00 -'7100431','PIT','BOS','Y','','VU/1',153.00,0.00 -'7100432','PIT','BWI','F','','',172.00,344.00 -'7100433','PIT','BWI','Y','','',119.00,238.00 -'7100434','PIT','BWI','Y','','VU/1',80.00,0.00 -'7100435','PIT','DEN','F','US','',647.00,1294.00 -'7100436','PIT','DEN','F','','',607.00,1214.00 -'7100437','PIT','DEN','Y','AA','',422.00,844.00 -'7100438','PIT','DEN','Y','','',412.00,824.00 -'7100439','PIT','DEN','Q','','',287.00,574.00 -'7100440','PIT','DEN','M','','',282.00,564.00 -'7100441','PIT','DEN','Y','AA','VU/1',299.00,0.00 -'7100442','PIT','DEN','Y','','VU/1',285.00,0.00 -'7100443','PIT','DFW','F','','',611.00,1222.00 -'7100444','PIT','DFW','Y','AA','',420.00,840.00 -'7100445','PIT','DFW','Y','AA','',380.00,760.00 -'7100446','PIT','DFW','Y','','',375.00,750.00 -'7100447','PIT','DFW','BW','','AP/57',0.00,428.00 -'7100448','PIT','DFW','BX','','AP/57',0.00,378.00 -'7100449','PIT','DFW','B','','VU/1',279.00,0.00 -'7100450','PIT','DFW','M','','VU/1',260.00,0.00 -'7100451','PIT','DFW','Y','','VU/1',260.00,0.00 -'7100452','PIT','PHL','F','','',189.00,378.00 -'7100453','PIT','PHL','Y','','',131.00,262.00 -'7100454','PIT','PHL','Y','','VU/1',88.00,0.00 -'7100455','PIT','SFO','F','US','',819.00,1638.00 -'7100456','PIT','SFO','Y','','',546.00,1092.00 -'7100457','PIT','SFO','QW','','AP/80',0.00,398.00 -'7100458','PIT','SFO','QX','','AP/80',0.00,358.00 -'7100459','PIT','SFO','Y','','VU/1',379.00,0.00 -'7100460','SFO','ATL','F','','',828.00,1656.00 -'7100461','SFO','ATL','F','AA','',821.00,1642.00 -'7100462','SFO','ATL','FN','','',580.00,1160.00 -'7100463','SFO','ATL','Y','','',552.00,1104.00 -'7100464','SFO','ATL','Y','AA','',547.00,1094.00 -'7100465','SFO','ATL','B','AA','',475.00,950.00 -'7100466','SFO','ATL','YN','EA','',445.00,890.00 -'7100467','SFO','ATL','YN','DL','',442.00,884.00 -'7100468','SFO','ATL','M','AA','',430.00,860.00 -'7100469','SFO','ATL','QW','','AP/57',0.00,398.00 -'7100470','SFO','ATL','QX','','AP/57',0.00,358.00 -'7100471','SFO','ATL','K','','AP/68',435.00,0.00 -'7100472','SFO','ATL','Q','','AP/68',435.00,0.00 -'7100473','SFO','ATL','B','','VU/1',383.00,0.00 -'7100474','SFO','ATL','Y','AA','VU/1',383.00,0.00 -'7100475','SFO','ATL','Y','','VU/1',376.00,0.00 -'7100476','SFO','BOS','F','US','',995.00,1990.00 -'7100477','SFO','BOS','F','DL','',890.00,1780.00 -'7100478','SFO','BOS','F','','',860.00,1720.00 -'7100479','SFO','BOS','C','','',635.00,1270.00 -'7100480','SFO','BOS','Y','TW','',605.00,1210.00 -'7100481','SFO','BOS','Y','UA','',605.00,1210.00 -'7100482','SFO','BOS','Y','DL','',593.00,1186.00 -'7100483','SFO','BOS','Y','','',573.00,1146.00 -'7100484','SFO','BOS','Y','US','',568.00,1136.00 -'7100485','SFO','BOS','B','AA','',508.00,1016.00 -'7100486','SFO','BOS','B','DL','',503.00,1006.00 -'7100487','SFO','BOS','B','US','',503.00,1006.00 -'7100488','SFO','BOS','KW','','AP/57',0.00,418.00 -'7100489','SFO','BOS','QW','','AP/80',0.00,418.00 -'7100490','SFO','BOS','KX','','AP/57',0.00,378.00 -'7100491','SFO','BOS','QX','','AP/80',0.00,378.00 -'7100492','SFO','BOS','B','','VU/1',412.00,0.00 -'7100493','SFO','BOS','M','','VU/1',394.00,0.00 -'7100494','SFO','BOS','Y','','VU/1',394.00,0.00 -'7100495','SFO','BWI','F','','',781.00,1562.00 -'7100496','SFO','BWI','Y','','',516.00,1032.00 -'7100497','SFO','BWI','B','','',449.00,898.00 -'7100498','SFO','BWI','Q','','',405.00,810.00 -'7100499','SFO','BWI','Y','','VU/1',358.00,0.00 -'7100500','SFO','DEN','F','','',488.00,976.00 -'7100501','SFO','DEN','Y','','',325.00,650.00 -'7100502','SFO','DEN','QW','','AP/80',0.00,288.00 -'7100503','SFO','DEN','QX','','AP/80',0.00,248.00 -'7100504','SFO','DEN','Y','','VU/1',222.00,0.00 -'7100505','SFO','DFW','F','','',717.00,1434.00 -'7100506','SFO','DFW','F','DL','',709.00,1418.00 -'7100507','SFO','DFW','FN','AA','',504.00,1008.00 -'7100508','SFO','DFW','FN','','',496.00,992.00 -'7100509','SFO','DFW','Y','','',478.00,956.00 -'7100510','SFO','DFW','Y','DL','',473.00,946.00 -'7100511','SFO','DFW','YN','AA','',386.00,772.00 -'7100512','SFO','DFW','YN','','',381.00,762.00 -'7100513','SFO','DFW','QW','','AP/80',0.00,378.00 -'7100514','SFO','DFW','QX','','AP/80',0.00,338.00 -'7100515','SFO','DFW','B','','VU/1',328.00,0.00 -'7100516','SFO','DFW','Y','','VU/1',328.00,0.00 -'7100517','SFO','OAK','Y','','',110.00,220.00 -'7100518','SFO','OAK','YN','','',54.00,108.00 -'7100519','SFO','OAK','Y','AA','VU/1',61.00,0.00 -'7100520','SFO','PHL','F','US','',995.00,1990.00 -'7100521','SFO','PHL','F','','',887.00,1774.00 -'7100522','SFO','PHL','Y','','',591.00,1182.00 -'7100523','SFO','PHL','Y','US','',586.00,1172.00 -'7100524','SFO','PHL','B','US','',483.00,966.00 -'7100525','SFO','PHL','QW','','AP/80',0.00,418.00 -'7100526','SFO','PHL','QX','','AP/80',0.00,378.00 -'7100527','SFO','PHL','B','','AP/55',488.00,0.00 -'7100528','SFO','PHL','B','','VU/1',407.00,0.00 -'7100529','SFO','PHL','M','','VU/1',407.00,0.00 -'7100530','SFO','PHL','Y','','VU/1',407.00,0.00 -'7100531','SFO','PHL','Y','US','VU/1',388.00,0.00 -'7100532','SFO','PIT','F','US','',819.00,1638.00 -'7100533','SFO','PIT','Y','','',546.00,1092.00 -'7100534','SFO','PIT','Y','','VU/1',379.00,0.00 diff --git a/sql-bench/Data/ATIS/fconnection.txt b/sql-bench/Data/ATIS/fconnection.txt deleted file mode 100644 index 39d0bd7578063f3cb509214c852a79b54d99cc17..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/fconnection.txt +++ /dev/null @@ -1,164 +0,0 @@ -312733,'ATL','BOS',740,1127,'1234567',0,1,227 -312734,'ATL','BOS',1200,1548,'1234567',0,1,228 -312737,'ATL','BOS',1650,2053,'1234567',0,1,243 -333051,'ATL','DEN',630,910,'1234567',0,1,280 -333054,'ATL','DEN',1000,1245,'1234567',0,1,285 -333059,'ATL','DEN',1319,1554,'1234567',0,1,275 -333067,'ATL','DEN',2029,2320,'1234567',0,1,291 -393490,'ATL','OAK',1000,1339,'1234567',0,1,399 -420730,'ATL','SFO',630,955,'1234567',0,1,385 -420735,'ATL','SFO',1000,1325,'1234567',0,1,385 -420736,'ATL','SFO',1000,1336,'1234567',0,1,396 -420739,'ATL','SFO',1319,1650,'1234567',0,1,391 -420745,'ATL','SFO',1650,2050,'1234567',0,1,420 -420747,'ATL','SFO',1825,2214,'1234567',0,1,409 -420751,'ATL','SFO',2029,2350,'1234567',0,1,381 -305276,'BOS','ATL',705,1110,'1234567',0,1,245 -305277,'BOS','ATL',1125,1615,'1234567',0,1,290 -305280,'BOS','ATL',1645,2101,'1234567',0,1,256 -333153,'BOS','DEN',1000,1410,'1234567',0,1,370 -333158,'BOS','DEN',1156,1615,'1234567',0,1,379 -333168,'BOS','DEN',1850,2320,'1234567',0,1,390 -393546,'BOS','OAK',838,1339,'123456-',0,1,481 -393547,'BOS','OAK',840,1339,'------7',0,1,479 -393553,'BOS','OAK',1720,2205,'1234567',0,1,465 -420887,'BOS','SFO',805,1325,'1234567',0,1,500 -420888,'BOS','SFO',838,1336,'123456-',0,1,478 -420893,'BOS','SFO',1132,1650,'1234567',0,1,498 -420894,'BOS','SFO',1210,1652,'1234567',0,1,462 -420903,'BOS','SFO',1520,2115,'1234567',0,1,535 -420911,'BOS','SFO',1720,2214,'1234567',0,1,474 -420912,'BOS','SFO',1845,2350,'1234567',0,1,485 -333086,'BWI','DEN',550,955,'1234567',0,1,365 -333091,'BWI','DEN',845,1245,'1234567',0,1,360 -333099,'BWI','DEN',1230,1615,'1234567',0,1,345 -333110,'BWI','DEN',1945,2320,'1234567',0,1,335 -329933,'BWI','DFW',550,930,'1234567',0,1,280 -329937,'BWI','DFW',900,1250,'1234567',0,1,290 -329941,'BWI','DFW',1230,1620,'1234567',0,1,290 -329944,'BWI','DFW',1600,1955,'1234567',0,1,295 -329947,'BWI','DFW',1945,2321,'1234567',0,1,276 -393507,'BWI','OAK',915,1339,'1234567',0,1,444 -420782,'BWI','SFO',800,1217,'123456-',0,1,437 -420783,'BWI','SFO',845,1325,'1234567',0,1,460 -420785,'BWI','SFO',915,1336,'1234567',0,1,441 -420791,'BWI','SFO',1230,1730,'1234567',0,1,480 -420792,'BWI','SFO',1240,1652,'1234567',0,1,432 -420798,'BWI','SFO',1620,2022,'1234567',0,1,422 -305416,'DEN','ATL',620,1244,'1234567',0,1,264 -305424,'DEN','ATL',950,1606,'1234567',0,1,256 -305429,'DEN','ATL',1325,1943,'1234567',0,1,258 -305435,'DEN','ATL',1700,100,'1234567',0,1,360 -305436,'DEN','ATL',1955,230,'1234567',0,1,275 -313024,'DEN','BOS',55,855,'1234567',0,1,360 -313025,'DEN','BOS',620,1435,'1234567',0,1,375 -313030,'DEN','BOS',800,1550,'1234567',0,1,350 -313034,'DEN','BOS',950,1755,'1234567',0,1,365 -313037,'DEN','BOS',1055,1920,'1234567',0,1,385 -313041,'DEN','BOS',1325,2125,'1234567',0,1,360 -313048,'DEN','BOS',1815,153,'1234567',0,1,338 -308320,'DEN','BWI',620,1400,'1234567',0,1,340 -308330,'DEN','BWI',1055,1850,'1234567',0,1,355 -308334,'DEN','BWI',1325,2045,'1234567',0,1,320 -402376,'DEN','PHL',620,1350,'1234567',0,1,330 -402382,'DEN','PHL',800,1515,'1234567',0,1,315 -402388,'DEN','PHL',1055,1840,'1234567',0,1,345 -402391,'DEN','PHL',1455,2146,'12345-7',0,1,291 -402397,'DEN','PHL',1700,15,'1234567',0,1,315 -402398,'DEN','PHL',1815,130,'1234567',0,1,315 -405235,'DEN','PIT',55,803,'1234567',0,1,308 -405236,'DEN','PIT',55,1000,'1234567',0,1,425 -405241,'DEN','PIT',800,1510,'1234567',0,1,310 -405250,'DEN','PIT',1055,1845,'1234567',0,1,350 -405253,'DEN','PIT',1455,2202,'1234567',0,1,307 -405258,'DEN','PIT',1815,59,'1234567',0,1,284 -313006,'DFW','BOS',2010,153,'1234567',0,1,283 -308292,'DFW','BWI',625,1145,'1234567',0,1,260 -308296,'DFW','BWI',945,1510,'1234567',0,1,265 -308301,'DFW','BWI',1305,1850,'1234567',0,1,285 -308304,'DFW','BWI',1650,2230,'1234567',0,1,280 -393637,'DFW','OAK',700,1014,'123456-',0,1,314 -393641,'DFW','OAK',1547,1852,'1234567',0,1,305 -393643,'DFW','OAK',1850,2205,'12345-7',0,1,315 -402327,'DFW','PHL',625,1200,'1234567',0,1,275 -402332,'DFW','PHL',945,1515,'1234567',0,1,270 -402339,'DFW','PHL',1305,1840,'1234567',0,1,275 -402343,'DFW','PHL',1501,2045,'1234567',0,1,284 -402346,'DFW','PHL',1650,2220,'1234567',0,1,270 -402350,'DFW','PHL',2010,130,'1234567',0,1,260 -405211,'DFW','PIT',945,1510,'1234567',0,1,265 -405214,'DFW','PIT',1305,1845,'1234567',0,1,280 -405217,'DFW','PIT',1650,2205,'1234567',0,1,255 -405219,'DFW','PIT',2010,59,'1234567',0,1,229 -421176,'DFW','SFO',700,1006,'123456-',0,1,306 -421177,'DFW','SFO',1032,1336,'1234567',0,1,304 -421179,'DFW','SFO',1547,1912,'1234567',0,1,325 -421180,'DFW','SFO',1850,2214,'12345-7',0,1,324 -421181,'DFW','SFO',1940,2310,'1234567',0,1,330 -306026,'OAK','ATL',625,1537,'1234567',0,1,372 -306031,'OAK','ATL',1425,2330,'1234567',0,1,365 -313867,'OAK','BOS',625,1619,'1234567',0,1,414 -308924,'OAK','BWI',1425,2332,'1234567',0,1,367 -330865,'OAK','DFW',625,1312,'1234567',0,1,287 -330867,'OAK','DFW',1105,1753,'1234567',0,1,288 -330870,'OAK','DFW',1425,2122,'12345-7',0,1,297 -403125,'OAK','PHL',625,1553,'1234567',0,1,388 -403128,'OAK','PHL',1105,2041,'1234567',0,1,396 -334183,'PHL','DEN',540,955,'1234567',0,1,375 -334190,'PHL','DEN',840,1410,'123456-',0,1,450 -334198,'PHL','DEN',1600,2015,'1234567',0,1,375 -334202,'PHL','DEN',1935,2320,'1234567',0,1,345 -330947,'PHL','DFW',540,930,'1234567',0,1,290 -330956,'PHL','DFW',900,1250,'1234567',0,1,290 -330962,'PHL','DFW',1230,1620,'1234567',0,1,290 -330964,'PHL','DFW',1405,1805,'1234567',0,1,300 -330967,'PHL','DFW',1600,1955,'1234567',0,1,295 -330971,'PHL','DFW',1750,2140,'1234567',0,1,290 -330974,'PHL','DFW',1935,2321,'1234567',0,1,286 -393950,'PHL','OAK',905,1339,'1234567',0,1,454 -393953,'PHL','OAK',1753,2205,'1234567',0,1,432 -422233,'PHL','SFO',540,1110,'1234567',0,1,510 -422240,'PHL','SFO',830,1325,'1234567',0,1,475 -422241,'PHL','SFO',905,1336,'1234567',0,1,451 -422249,'PHL','SFO',1230,1730,'1234567',0,1,480 -422262,'PHL','SFO',1753,2214,'1234567',0,1,441 -422263,'PHL','SFO',1915,2350,'1234567',0,1,455 -334210,'PIT','DEN',600,955,'1234567',0,1,355 -334218,'PIT','DEN',1030,1410,'1234567',0,1,340 -334222,'PIT','DEN',1245,1615,'1234567',0,1,330 -334230,'PIT','DEN',1945,2320,'1234567',0,1,335 -330977,'PIT','DFW',600,930,'1234567',0,1,270 -330981,'PIT','DFW',910,1250,'1234567',0,1,280 -330984,'PIT','DFW',1245,1620,'1234567',0,1,275 -330989,'PIT','DFW',1945,2321,'1234567',0,1,276 -422277,'PIT','SFO',910,1410,'1234567',0,1,480 -422281,'PIT','SFO',1245,1730,'1234567',0,1,465 -306304,'SFO','ATL',20,917,'1234567',0,1,357 -306307,'SFO','ATL',620,1537,'1234567',0,1,377 -306309,'SFO','ATL',700,1606,'1234567',0,1,366 -306314,'SFO','ATL',1059,1943,'1234567',0,1,344 -306317,'SFO','ATL',1425,2258,'1234567',0,1,333 -306318,'SFO','ATL',1431,2330,'1234567',0,1,359 -306319,'SFO','ATL',1750,230,'1234567',0,1,340 -314256,'SFO','BOS',620,1619,'1234567',0,1,419 -314259,'SFO','BOS',700,1755,'1234567',0,1,475 -314263,'SFO','BOS',815,1920,'1234567',0,1,485 -314268,'SFO','BOS',1059,2125,'1234567',0,1,446 -314269,'SFO','BOS',1108,2056,'1234567',0,1,408 -309189,'SFO','BWI',815,1850,'1234567',0,1,455 -309198,'SFO','BWI',1059,2045,'1234567',0,1,406 -309204,'SFO','BWI',1431,2332,'1234567',0,1,361 -331132,'SFO','DFW',620,1312,'1234567',0,1,292 -331133,'SFO','DFW',1108,1753,'1234567',0,1,285 -331134,'SFO','DFW',1431,2122,'12345-7',0,1,291 -403468,'SFO','PHL',620,1553,'1234567',0,1,393 -403472,'SFO','PHL',700,1705,'1234567',0,1,425 -403474,'SFO','PHL',815,1840,'1234567',0,1,445 -403479,'SFO','PHL',1108,2041,'1234567',0,1,393 -403481,'SFO','PHL',1215,2220,'1234567',0,1,425 -403485,'SFO','PHL',1425,15,'1234567',0,1,410 -403486,'SFO','PHL',1530,130,'1234567',0,1,420 -403488,'SFO','PHL',2220,825,'1234567',0,1,425 -405963,'SFO','PIT',815,1845,'1234567',0,1,450 -405970,'SFO','PIT',1530,59,'1234567',0,1,389 -405971,'SFO','PIT',2220,1000,'1234567',0,1,520 diff --git a/sql-bench/Data/ATIS/flight.txt b/sql-bench/Data/ATIS/flight.txt deleted file mode 100644 index 9f68008518eec6f264554de2f647cb05403df9be..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/flight.txt +++ /dev/null @@ -1,579 +0,0 @@ -101908,'1234567','ATL','BOS',636,1000,'DL',296,'FNYNBNMQ','72S','B',1,'N',204 -101909,'1234567','ATL','BOS',641,855,'DL',314,'FNYNBNMQ','72S','B',0,'N',134 -101910,'1234567','ATL','BOS',755,1019,'EA',140,'FYHQK','D9S','B',0,'N',144 -101911,'1234567','ATL','BOS',920,1150,'EA',534,'FYHQK','D9S','B',0,'N',150 -101912,'1234567','ATL','BOS',959,1215,'DL',410,'FYBMQ','757','B',0,'N',136 -101913,'1234567','ATL','BOS',1010,1355,'DL',726,'FYBMQ','72S','S',1,'N',225 -101914,'1234567','ATL','BOS',1057,1320,'EA',640,'YHQKL','72S','L',0,'N',143 -101915,'1234567','ATL','BOS',1229,1456,'EA',142,'FYHQK','D9S','L',0,'N',147 -101916,'-----6-','ATL','BOS',1325,1550,'DL',110,'FYBMQ','767','L',0,'N',145 -101917,'12345-7','ATL','BOS',1325,1550,'DL',110,'FYBMQ','763','L',0,'N',145 -101918,'1234567','ATL','BOS',1426,1656,'EA',644,'FYHQK','D9S','S',0,'N',150 -101922,'1234567','ATL','BOS',1655,1920,'DL',134,'FYBMQ','L10','D',0,'N',145 -101923,'1234567','ATL','BOS',1800,2032,'EA',144,'FYHQK','757','D',0,'N',152 -101924,'1234567','ATL','BOS',1851,2219,'DL',106,'FYBMQ','M80','D',1,'N',208 -101925,'1234567','ATL','BOS',1855,2122,'DL',326,'FYBMQ','72S','D',0,'N',147 -101926,'1234567','ATL','BOS',1950,2220,'EA',148,'FYHQK','D9S','S',0,'N',150 -101927,'------7','ATL','BOS',2035,2255,'DL',166,'FYBMQ','L10','S/',0,'N',140 -101928,'123456-','ATL','BOS',2035,2255,'DL',116,'FYBMQ','L10','S/',0,'N',140 -101929,'1234567','ATL','BOS',2345,153,'DL',162,'FNYNBNMQ','757','',0,'N',128 -101951,'1234567','ATL','BWI',915,1055,'EA',202,'FYHQK','D9S','S',0,'N',100 -101952,'1234567','ATL','BWI',1002,1145,'DL',1204,'FYBMQ','M80','',0,'N',103 -101953,'1234567','ATL','BWI',1330,1510,'DL',662,'FYBMQ','M80','L',0,'N',100 -101954,'1234567','ATL','BWI',1423,1610,'EA',206,'FYHQK','D9S','',0,'N',107 -101955,'1234567','ATL','BWI',1704,1850,'DL',294,'FYBMQ','757','D',0,'N',106 -101956,'1234567','ATL','BWI',1800,1937,'EA',210,'FYHQK','D9S','D',0,'N',97 -101957,'1234567','ATL','BWI',1955,2140,'EA',212,'FYHQK','D9S','S',0,'N',105 -101958,'1234567','ATL','BWI',2048,2230,'DL',256,'FYBMQ','757','',0,'N',102 -101959,'1234567','ATL','BWI',2140,2318,'EA',208,'FNYNHQNK','72S','',0,'N',98 -102122,'1234567','ATL','DEN',840,955,'DL',445,'FYBMQ','757','B',0,'N',195 -102123,'1234567','ATL','DEN',934,1054,'EA',821,'FYHQK','72S','B',0,'N',200 -102125,'1234567','ATL','DEN',1000,1124,'UA',915,'FYBMQ','73S','S',0,'N',204 -102126,'1234567','ATL','DEN',1200,1305,'DL',257,'FYBMQ','72S','L',0,'N',185 -102127,'1234567','ATL','DEN',1510,1615,'DL',1083,'FYBMQ','72S','S',0,'N',185 -102128,'1234567','ATL','DEN',1755,1910,'EA',825,'FYHQK','72S','D',0,'N',195 -102129,'1234567','ATL','DEN',1825,1946,'UA',673,'FYBMQ','733','D',0,'N',201 -102133,'1234567','ATL','DEN',1900,2015,'DL',675,'FYBMQ','72S','D',0,'N',195 -102134,'1234567','ATL','DEN',2145,2308,'EA',823,'FNYNHQNK','757','S',0,'N',203 -102135,'1234567','ATL','DEN',2219,2320,'DL',229,'FNYNBNMQ','72S','',0,'N',181 -102136,'--34567','ATL','DFW',630,740,'DL',131,'FNYNBNMQ','L10','B',0,'N',130 -102137,'12-----','ATL','DFW',630,740,'DL',131,'FNYNBNMQ','763','B',0,'N',130 -102139,'1234567','ATL','DFW',730,849,'AA',1339,'FYBMV','M80','B',0,'N',139 -102144,'1234567','ATL','DFW',823,930,'DL',671,'FYBMQ','72S','B',0,'N',127 -102147,'1234567','ATL','DFW',901,1027,'AA',447,'FYBMV','M80','S',0,'N',146 -102148,'1234567','ATL','DFW',1000,1110,'DL',17,'FYBMQ','L15','S',0,'N',130 -102150,'1234567','ATL','DFW',1145,1250,'DL',545,'FYBMQ','72S','L',0,'N',125 -102162,'--34567','ATL','DFW',1319,1430,'DL',179,'FYBMQ','763','L',0,'N',131 -102163,'12-----','ATL','DFW',1319,1430,'DL',179,'FYBMQ','L10','L',0,'N',131 -102164,'1234567','ATL','DFW',1347,1505,'AA',237,'FYBMV','M80','S',0,'N',138 -102165,'-2-----','ATL','DFW',1415,1525,'LH',442,'FCBMK','74M','D',0,'N',130 -102166,'1234567','ATL','DFW',1510,1620,'DL',1145,'FYBMQ','757','S',0,'N',130 -102172,'1234567','ATL','DFW',1634,1759,'AA',351,'FYBMV','M80','S',0,'N',145 -102173,'1234567','ATL','DFW',1650,1805,'DL',82,'FYBMQ','L10','D',0,'N',135 -102177,'1234567','ATL','DFW',1840,1955,'DL',405,'FYBMQ','M80','D',0,'N',135 -102188,'1234567','ATL','DFW',1925,2050,'AA',1419,'FNYNBMV','M80','D',0,'N',145 -102190,'1234567','ATL','DFW',2029,2140,'DL',275,'FNYNBNMQ','763','',0,'N',131 -102191,'1234567','ATL','DFW',2213,2321,'DL',574,'FNYNBNMQ','M80','',0,'N',128 -102192,'12345-7','ATL','DFW',2335,40,'DL',1107,'FNYNBNMQ','D9S','',0,'N',125 -102674,'1234567','ATL','OAK',1825,2205,'UA',673,'FYBMQ','733','D',1,'N',400 -102766,'1234567','ATL','PHL',636,825,'DL',296,'FNYNBNMQ','72S','B',0,'N',109 -102767,'1234567','ATL','PHL',740,929,'US',258,'FYBHQ','D9S','B',0,'N',109 -102768,'1234567','ATL','PHL',805,956,'EA',124,'FYHQK','D9S','B',0,'N',111 -102769,'1234567','ATL','PHL',935,1125,'EA',126,'FYHQK','D9S','S',0,'N',110 -102770,'1234567','ATL','PHL',1010,1200,'DL',726,'FYBMQ','72S','',0,'N',110 -102771,'1234567','ATL','PHL',1200,1345,'US',29,'FYBHQ','733','L',0,'N',105 -102772,'1234567','ATL','PHL',1215,1415,'EA',610,'FYHQK','D9S','L',0,'N',120 -102773,'1234567','ATL','PHL',1322,1515,'DL',424,'FYBMQ','72S','L',0,'N',113 -102774,'1234567','ATL','PHL',1417,1607,'EA',324,'FYHQK','D9S','',0,'N',110 -102775,'1234567','ATL','PHL',1605,1800,'EA',602,'FYHQK','D9S','S',0,'N',115 -102776,'1234567','ATL','PHL',1649,1840,'DL',1206,'FYBMQ','767','D',0,'N',111 -102777,'1234567','ATL','PHL',1650,1835,'US',1786,'FYBHQ','73S','D',0,'N',105 -102778,'1234567','ATL','PHL',1802,1959,'EA',120,'FYHQK','D9S','D',0,'N',117 -102779,'1234567','ATL','PHL',1851,2045,'DL',106,'FYBMQ','M80','D',0,'N',114 -102781,'1234567','ATL','PHL',1957,2151,'EA',604,'FYHQK','D9S','S',0,'N',114 -102782,'1234567','ATL','PHL',2035,2220,'DL',250,'FYBMQ','72S','',0,'N',105 -102783,'1234567','ATL','PHL',2140,2335,'EA',128,'FNYNHQNK','D9S','',0,'N',115 -102784,'1234567','ATL','PHL',2350,130,'DL',1210,'FNYNBNMQ','757','',0,'N',100 -102795,'1234567','ATL','PIT',630,803,'US',339,'FYBHQ','D9S','B',0,'N',93 -102796,'1234567','ATL','PIT',831,1000,'DL',842,'FYBMQ','D9S','B',0,'N',89 -102797,'1234567','ATL','PIT',925,1100,'EA',302,'FYHQK','D9S','S',0,'N',95 -102798,'1234567','ATL','PIT',1105,1238,'US',248,'FYBHQ','D9S','L',0,'N',93 -102799,'1234567','ATL','PIT',1225,1405,'EA',308,'FYHQK','757','L',0,'N',100 -102800,'1234567','ATL','PIT',1340,1510,'DL',628,'FYBMQ','73S','',0,'N',90 -102801,'1234567','ATL','PIT',1540,1713,'US',508,'FYBHQ','D9S','L/S',0,'N',93 -102802,'-----67','ATL','PIT',1711,1845,'DL',1132,'FYBMQ','73S','D',0,'N',94 -102803,'12345--','ATL','PIT',1711,1845,'DL',1132,'FYBMQ','72S','D',0,'N',94 -102804,'1234567','ATL','PIT',1759,1933,'EA',310,'YHQKL','72S','D',0,'N',94 -102805,'1234567','ATL','PIT',1920,2056,'US',480,'FYBHQ','D9S','D',0,'N',96 -102806,'1234567','ATL','PIT',1959,2139,'EA',312,'FYHQK','757','S/',0,'N',100 -102807,'1234567','ATL','PIT',2030,2205,'DL',1076,'FYBMQ','73S','',0,'N',95 -102808,'1234567','ATL','PIT',2145,2313,'EA',314,'FNYNHQNK','D9S','',0,'N',88 -102809,'1234567','ATL','PIT',2334,59,'DL',311,'FNYNBNMQ','D9S','',0,'N',85 -102923,'------7','ATL','SFO',912,1110,'DL',137,'FYBMQ','767','B',0,'N',298 -102924,'123456-','ATL','SFO',912,1110,'DL',137,'FYBMQ','L10','B',0,'N',298 -102925,'1234567','ATL','SFO',930,1157,'EA',71,'FYHQK','757','B',0,'N',327 -102927,'1234567','ATL','SFO',1200,1410,'DL',977,'FYBMQ','757','L',0,'N',310 -102929,'1234567','ATL','SFO',1525,1730,'DL',97,'FYBMQ','763','D',0,'N',305 -102930,'1234567','ATL','SFO',1625,1844,'EA',73,'FYHQK','757','D',0,'N',319 -102932,'1234567','ATL','SFO',1855,2115,'DL',99,'FYBMQ','767','D',0,'N',320 -102933,'1234567','ATL','SFO',2010,2229,'EA',77,'FYHQK','757','D',0,'N',319 -105584,'1234567','BOS','ATL',630,913,'DL',225,'FYBMQ','M80','B',0,'N',163 -105586,'1234567','BOS','ATL',700,946,'EA',147,'FNYNHQNK','72S','B',0,'N',166 -105588,'1234567','BOS','ATL',815,1100,'DL',219,'FYBMQ','L10','B',0,'N',165 -105589,'1234567','BOS','ATL',832,1126,'EA',643,'FYHQK','D9S','B',0,'N',174 -105590,'1234567','BOS','ATL',955,1235,'DL',547,'FYBMQ','72S','B',0,'N',160 -105591,'1234567','BOS','ATL',1035,1327,'EA',145,'FYHQK','D9S','L',0,'N',172 -105592,'1234567','BOS','ATL',1156,1435,'DL',708,'FYBMQ','767','L',0,'N',159 -105593,'1234567','BOS','ATL',1240,1525,'EA',143,'FYHQK','D9S','L',0,'N',165 -105594,'1234567','BOS','ATL',1421,1709,'EA',645,'YHQKL','72S','S',0,'N',168 -105595,'1234567','BOS','ATL',1520,1804,'DL',975,'FYBMQ','757','S',0,'N',164 -105597,'1234567','BOS','ATL',1605,1900,'EA',141,'FYHQK','72S','D',0,'N',175 -105598,'1234567','BOS','ATL',1758,2049,'EA',149,'FYHQK','D9S','D',0,'N',171 -105599,'1234567','BOS','ATL',1850,2128,'DL',323,'FYBMQ','757','D',0,'N',158 -105601,'1234567','BOS','ATL',2024,2258,'DL',541,'FNYNBNMQ','L10','S',0,'N',154 -105698,'1234567','BOS','BWI',645,811,'US',369,'FYBHQ','733','B/S',0,'N',86 -105699,'1234567','BOS','BWI',930,1056,'US',511,'FYBHQ','733','S/',0,'N',86 -105700,'1234567','BOS','BWI',1000,1127,'US',437,'FYBHQ','M80','S/',0,'N',87 -105701,'1234567','BOS','BWI',1330,1451,'US',269,'FYBHQ','D9S','S',0,'N',81 -105702,'1234567','BOS','BWI',1505,1626,'US',428,'FYBHQ','D9S','',0,'N',81 -105703,'1234567','BOS','BWI',1745,1912,'US',1581,'FYBHQ','72S','S',0,'N',87 -105704,'1234567','BOS','BWI',1955,2122,'US',1609,'FYBHQ','73S','',0,'N',87 -105705,'12345-7','BOS','BWI',2140,2306,'US',76,'FYBHQ','733','',0,'N',86 -105794,'123456-','BOS','DEN',838,1110,'UA',201,'FYBMQ','D8S','B',0,'N',272 -105795,'------7','BOS','DEN',840,1112,'UA',343,'FYBMQ','D8S','B',0,'N',272 -105796,'1234567','BOS','DEN',855,1140,'CO',1209,'FYQHK','M80','B',0,'N',285 -105798,'1234567','BOS','DEN',1425,1732,'CO',1215,'FYQHK','733','S',0,'N',307 -105799,'1234567','BOS','DEN',1720,1949,'UA',281,'FYBMQ','D8S','D',0,'N',269 -105800,'12345-7','BOS','DEN',1740,2033,'CO',1765,'FYQHK','M80','D',0,'N',293 -105801,'1234567','BOS','DFW',653,1017,'AA',315,'FYBMV','D10','B',0,'N',264 -105802,'1234567','BOS','DFW',805,1110,'DL',831,'FYBMQ','757','B',0,'N',245 -105803,'1234567','BOS','DFW',830,1209,'AA',1099,'FYBMV','M80','B',0,'N',279 -105805,'1234567','BOS','DFW',1132,1430,'DL',169,'FYBMQ','757','L',0,'N',238 -105806,'1234567','BOS','DFW',1149,1520,'AA',813,'FYBMV','767','L',0,'N',271 -105807,'1234567','BOS','DFW',1428,1750,'AA',215,'FYBMV','D10','S',0,'N',262 -105808,'1234567','BOS','DFW',1445,1755,'DL',697,'FYBMQ','72S','S',0,'N',250 -105810,'1234567','BOS','DFW',1721,2144,'DL',589,'FYBMQ','72S','SD',1,'N',323 -105811,'1234567','BOS','DFW',1740,2100,'AA',155,'FYBMV','767','D',0,'N',260 -105812,'1234567','BOS','DFW',1845,2144,'DL',487,'FYBMQ','72S','D',0,'N',239 -106229,'123456-','BOS','PHL',630,750,'US',1800,'FYBHQ','734','S',0,'N',80 -106230,'1234567','BOS','PHL',700,820,'ML',455,'FYMHQ','D9S','B/S',0,'N',80 -106231,'1234567','BOS','PHL',705,817,'US',567,'FYBHQ','72S','S',0,'N',72 -106232,'1234567','BOS','PHL',817,940,'DL',891,'FYBMQ','72S','B/S',0,'N',83 -106234,'1234567','BOS','PHL',850,1010,'US',577,'FYBHQ','100','',0,'N',80 -106235,'123456-','BOS','PHL',910,1030,'ML',437,'FYMHQ','D9S','B/S',0,'N',80 -106236,'1234567','BOS','PHL',1030,1150,'US',569,'FYBHQ','733','',0,'N',80 -106237,'1234567','BOS','PHL',1125,1245,'US',359,'FYBHQ','733','',0,'N',80 -106238,'1234567','BOS','PHL',1142,1300,'DL',949,'FYBMQ','72S','S',0,'N',78 -106239,'1234567','BOS','PHL',1215,1335,'ML',425,'FYMHQ','D9S','L/S',0,'N',80 -106240,'-2-4--7','BOS','PHL',1325,1445,'LH',420,'FCBMK','D10','',0,'N',80 -106241,'1234567','BOS','PHL',1400,1520,'ML',439,'FYMHQ','D9S','',0,'N',80 -106242,'1234567','BOS','PHL',1414,1535,'DL',639,'FYBMQ','72S','',0,'N',81 -106245,'12345-7','BOS','PHL',1510,1629,'US',731,'FYBHQ','D9S','',0,'N',79 -106246,'1234567','BOS','PHL',1545,1704,'US',297,'FYBHQ','D9S','',0,'N',79 -106247,'1234567','BOS','PHL',1645,1808,'US',1664,'FYBHQ','733','',0,'N',83 -106248,'1234567','BOS','PHL',1721,1840,'DL',589,'FYBMQ','72S','S',0,'N',79 -106249,'1234567','BOS','PHL',1745,1905,'ML',413,'FYMHQ','D9S','D/S',0,'N',80 -106250,'12345-7','BOS','PHL',1805,1924,'US',101,'FYBHQ','D9S','',0,'N',79 -106251,'12345-7','BOS','PHL',1855,2015,'US',293,'FYBHQ','733','',0,'N',80 -106252,'12345-7','BOS','PHL',1900,2019,'ML',431,'FYMHQ','D9S','D/S',0,'N',79 -106253,'1234567','BOS','PHL',1950,2111,'US',411,'FYBHQ','M80','',0,'N',81 -106254,'1234567','BOS','PHL',2033,2150,'DL',339,'FYBMQ','72S','',0,'N',77 -106255,'12345-7','BOS','PHL',2145,2304,'US',307,'FYBHQ','D9S','',0,'N',79 -106262,'123456-','BOS','PIT',630,950,'US',1800,'FYBHQ','734','S',1,'N',200 -106263,'1234567','BOS','PIT',715,857,'US',476,'FYBHQ','72S','B',0,'N',102 -106264,'1234567','BOS','PIT',810,953,'US',65,'FYBHQ','D9S','B',0,'N',103 -106265,'1234567','BOS','PIT',1145,1333,'US',167,'FYBHQ','733','S',0,'N',108 -106266,'1234567','BOS','PIT',1210,1353,'US',81,'FYBHQ','M80','S',0,'N',103 -106267,'1234567','BOS','PIT',1520,1706,'US',148,'FYBHQ','73S','S/',0,'N',106 -106268,'1234567','BOS','PIT',1640,1823,'US',303,'FYBHQ','D9S','S/',0,'N',103 -106269,'1234567','BOS','PIT',1755,1941,'US',1652,'FYBHQ','73S','S',0,'N',106 -106270,'12345-7','BOS','PIT',1855,2207,'US',293,'FYBHQ','733','',1,'N',192 -106271,'12345-7','BOS','PIT',2105,2248,'US',345,'FYBHQ','M80','',0,'N',103 -106365,'1234567','BOS','SFO',800,1131,'UA',21,'FYBMQ','D10','B',0,'N',391 -106366,'------7','BOS','SFO',840,1336,'UA',343,'FYBMQ','D8S','BL',1,'N',476 -106373,'1234567','BOS','SFO',1149,1758,'AA',813,'FYBMV','767','LD',1,'N',549 -106375,'12345-7','BOS','SFO',1740,2310,'CO',1765,'FYQHK','M80','D',1,'N',510 -106376,'1234567','BOS','SFO',1745,2127,'UA',93,'FYBMQ','D8S','D',0,'N',402 -106377,'1234567','BOS','SFO',1810,2137,'TW',61,'FCYBQ','L10','D',0,'N',387 -107159,'1234567','BWI','ATL',550,739,'DL',995,'FNYNBNMQ','M80','B',0,'N',109 -107160,'1234567','BWI','ATL',640,835,'EA',207,'FNYNHQNK','72S','B',0,'N',115 -107161,'1234567','BWI','ATL',800,1001,'EA',203,'FYHQK','D9S','B',0,'N',121 -107162,'1234567','BWI','ATL',900,1050,'DL',125,'FYBMQ','757','S',0,'N',110 -107163,'1234567','BWI','ATL',940,1137,'EA',201,'FYHQK','D9S','S',0,'N',117 -107164,'1234567','BWI','ATL',1144,1335,'EA',205,'FYHQK','D9S','L',0,'N',111 -107165,'1234567','BWI','ATL',1230,1423,'DL',539,'FYBMQ','M80','L',0,'N',113 -107166,'1234567','BWI','ATL',1600,1750,'DL',1055,'FYBMQ','M80','S/',0,'N',110 -107167,'1234567','BWI','ATL',1659,1854,'EA',131,'FYHQK','D9S','D',0,'N',115 -107168,'1234567','BWI','ATL',1945,2128,'DL',469,'FYBMQ','757','',0,'N',103 -107193,'123456-','BWI','BOS',720,839,'US',1049,'FYBHQ','72S','B/S',0,'N',79 -107194,'1234567','BWI','BOS',905,1025,'US',600,'FYBHQ','733','S/',0,'N',80 -107195,'1234567','BWI','BOS',1010,1130,'US',1508,'FYBHQ','72S','S/',0,'N',80 -107196,'1234567','BWI','BOS',1310,1430,'US',324,'FYBHQ','73S','S',0,'N',80 -107197,'1234567','BWI','BOS',1630,1749,'US',1016,'FYBHQ','72S','',0,'N',79 -107198,'1234567','BWI','BOS',1745,1905,'US',1586,'FYBHQ','73S','S',0,'N',80 -107199,'1234567','BWI','BOS',2045,2205,'US',1750,'FYBHQ','734','',0,'N',80 -107200,'1234567','BWI','BOS',2110,2231,'US',368,'FYBHQ','733','',0,'N',81 -107253,'123456-','BWI','DEN',800,1135,'US',1402,'FYBHQ','733','SB',1,'N',335 -107254,'1234567','BWI','DEN',915,1110,'UA',277,'FYBMQ','72S','B',0,'N',235 -107255,'1234567','BWI','DEN',1205,1410,'US',2123,'FYBHQ','734','L',0,'N',245 -107256,'1234567','BWI','DEN',1745,1933,'UA',707,'FYBMQ','72S','D',0,'N',228 -107257,'1234567','BWI','DFW',745,1015,'AA',195,'FYBMV','M80','B',0,'N',210 -107258,'1234567','BWI','DFW',845,1100,'DL',1028,'FYBMQ','D9S','B',0,'N',195 -107259,'1234567','BWI','DFW',1245,1518,'AA',273,'FYBMV','72S','L',0,'N',213 -107260,'1234567','BWI','DFW',1505,1745,'AA',1179,'FYBMV','M80','S',0,'N',220 -107261,'1234567','BWI','DFW',1530,1800,'DL',743,'FYBMQ','73S','S',0,'N',210 -107264,'1234567','BWI','DFW',1852,2120,'AA',599,'FYBMV','72S','D',0,'N',208 -107470,'123456-','BWI','PHL',715,808,'US',3724,'YBHQM','SH3','',0,'Y',53 -107471,'1234567','BWI','PHL',1000,1053,'US',4518,'YBHQM','DH8','',0,'Y',53 -107472,'1234567','BWI','PHL',1205,1258,'US',3533,'YBHQM','SH6','',0,'Y',53 -107473,'1234567','BWI','PHL',1325,1415,'US',4393,'YBHQM','DH8','',0,'Y',50 -107474,'12345-7','BWI','PHL',1500,1543,'US',4386,'YBHQM','DH8','',0,'Y',43 -107475,'1234567','BWI','PHL',1640,1733,'US',3738,'YBHQM','SH3','',0,'Y',53 -107476,'12345-7','BWI','PHL',1930,2020,'US',3753,'YBHQM','SH3','',0,'Y',50 -107477,'12345-7','BWI','PHL',2010,2103,'US',3721,'YBHQM','SH6','',0,'Y',53 -107478,'12345-7','BWI','PHL',2053,2146,'US',3671,'YBHQM','SH6','',0,'Y',53 -107484,'123456-','BWI','PIT',700,758,'US',351,'FYBHQ','734','S',0,'N',58 -107485,'------7','BWI','PIT',715,815,'US',931,'FYBHQ','100','S',0,'N',60 -107486,'123456-','BWI','PIT',800,901,'US',1402,'FYBHQ','733','S',0,'N',61 -107487,'1234567','BWI','PIT',1240,1343,'US',1276,'FYBHQ','733','',0,'N',63 -107488,'------7','BWI','PIT',1300,1406,'US',977,'FYBHQ','F28','',0,'N',66 -107489,'1234567','BWI','PIT',1620,1720,'US',451,'FYBHQ','72S','',0,'N',60 -107490,'1234567','BWI','PIT',1710,1812,'US',189,'FYBHQ','D9S','',0,'N',62 -107491,'1234567','BWI','PIT',1825,1928,'US',1605,'FYBHQ','733','',0,'N',63 -107492,'1234567','BWI','PIT',2100,2202,'US',1216,'FYBHQ','73S','',0,'N',62 -111886,'1234567','DEN','ATL',55,527,'DL',296,'FNYNBNMQ','72S','',0,'N',152 -111887,'1234567','DEN','ATL',215,654,'EA',820,'FNYNHQNK','757','S',0,'N',159 -111888,'1234567','DEN','ATL',800,1235,'DL',402,'FYBMQ','72S','B',0,'N',155 -111889,'1234567','DEN','ATL',825,1315,'EA',822,'FYHQK','72S','B',0,'N',170 -111891,'1234567','DEN','ATL',1039,1537,'UA',408,'FYBMQ','733','L',0,'N',178 -111892,'1234567','DEN','ATL',1055,1541,'DL',317,'FYBMQ','757','L',0,'N',166 -111893,'1234567','DEN','ATL',1155,1645,'EA',824,'FYHQK','72S','L',0,'N',170 -111894,'1234567','DEN','ATL',1450,1925,'DL',704,'FYBMQ','757','D',0,'N',155 -111895,'1234567','DEN','ATL',1815,2250,'DL',1644,'FYBMQ','72S','D',0,'N',155 -111896,'1234567','DEN','ATL',1837,2330,'UA',886,'FYBMQ','73S','D',0,'N',173 -111924,'1234567','DEN','BOS',55,1000,'DL',296,'FNYNBNMQ','72S','B',2,'N',425 -111928,'1234567','DEN','BOS',1039,1619,'UA',352,'FYBMQ','D8S','L',0,'N',220 -111929,'1234567','DEN','BOS',1105,1700,'CO',1234,'FYQHK','M80','L',0,'N',235 -111930,'1234567','DEN','BOS',1455,2205,'US',1750,'FYBHQ','734','L',1,'N',310 -111931,'1234567','DEN','BOS',1520,2056,'UA',354,'FYBMQ','72S','D',0,'N',216 -111932,'1234567','DEN','BOS',1605,2145,'CO',1220,'FYQHK','M80','D',0,'N',220 -111933,'12345-7','DEN','BOS',1935,132,'CO',1270,'FYQHK','733','D',0,'N',237 -111937,'1234567','DEN','BWI',1045,1553,'UA',658,'FYBMQ','72S','L',0,'N',188 -111939,'1234567','DEN','BWI',1455,2010,'US',1750,'FYBHQ','734','L',0,'N',195 -111941,'1234567','DEN','BWI',1828,2332,'UA',302,'FYBMQ','72S','D',0,'N',184 -112028,'1234567','DEN','DFW',450,742,'AA',1412,'FNYNBMV','M80','',0,'N',112 -112029,'123456-','DEN','DFW',605,851,'UA',216,'FYBMQ','733','B',0,'N',106 -112030,'--34567','DEN','DFW',620,906,'DL',465,'FNYNBNMQ','M80','B',0,'N',106 -112031,'12-----','DEN','DFW',620,906,'DL',465,'FNYNBNMQ','72S','B',0,'N',106 -112032,'1234567','DEN','DFW',901,1210,'AA',912,'FYBMV','M80','S',0,'N',129 -112033,'1234567','DEN','DFW',950,1235,'DL',335,'FYBMQ','M80','S',0,'N',105 -112034,'1234567','DEN','DFW',1029,1312,'UA',438,'FYBMQ','727','L',0,'N',103 -112035,'1234567','DEN','DFW',1040,1343,'AA',464,'FYBMV','M80','S',0,'N',123 -112036,'1234567','DEN','DFW',1105,1353,'CO',1226,'FYQHK','72S','L',0,'N',108 -112037,'1234567','DEN','DFW',1210,1504,'AA',242,'FYBMV','M80','L',0,'N',114 -112038,'-----6-','DEN','DFW',1310,1555,'UA',888,'FYBMQ','727','S',0,'N',105 -112039,'12345-7','DEN','DFW',1310,1555,'UA',880,'FYBMQ','727','S',0,'N',105 -112041,'1234567','DEN','DFW',1325,1615,'CO',90,'FYQHK','72S','S',0,'N',110 -112040,'1234567','DEN','DFW',1325,1615,'DL',870,'FYBMQ','M80','L',0,'N',110 -112042,'1234567','DEN','DFW',1340,1628,'AA',50,'FYBMV','M80','',0,'N',108 -112043,'1234567','DEN','DFW',1507,1753,'UA',450,'FYBMQ','727','',0,'N',106 -112044,'1234567','DEN','DFW',1605,1905,'CO',1652,'FYQHK','M80','D',0,'N',120 -112045,'1234567','DEN','DFW',1613,1923,'AA',618,'FYBMV','72S','D',0,'N',130 -112046,'1234567','DEN','DFW',1700,1943,'DL',742,'FYBMQ','72S','D',0,'N',103 -112047,'1234567','DEN','DFW',1723,2006,'UA',714,'FYBMQ','72S','D',0,'N',103 -112048,'1234567','DEN','DFW',1808,2103,'AA',1486,'FYBMV','M80','D',0,'N',115 -112049,'12345-7','DEN','DFW',1835,2122,'UA',664,'FYBMQ','727','D',0,'N',107 -112050,'1234567','DEN','DFW',1925,2220,'CO',935,'FYQHK','733','S',0,'N',115 -112051,'1234567','DEN','DFW',1955,2240,'DL',661,'FNYNBNMQ','72S','S',0,'N',105 -112052,'1234567','DEN','DFW',2036,2327,'AA',1432,'FNYNBMV','M80','',0,'N',111 -112351,'1234567','DEN','OAK',840,1014,'UA',389,'FYBMQ','727','B',0,'N',154 -112352,'1234567','DEN','OAK',1208,1339,'UA',551,'FYBMQ','727','L',0,'N',151 -112353,'1234567','DEN','OAK',1715,1852,'UA',645,'FYBMQ','73S','D',0,'N',157 -112354,'1234567','DEN','OAK',2030,2205,'UA',673,'FYBMQ','733','',0,'N',155 -112413,'1234567','DEN','PHL',55,825,'DL',296,'FNYNBNMQ','72S','B',1,'N',330 -112415,'1234567','DEN','PHL',1033,1553,'UA',270,'FYBMQ','D8S','L',0,'N',200 -112416,'1234567','DEN','PHL',1120,1705,'CO',1602,'FYQHK','733','L',0,'N',225 -112417,'1234567','DEN','PHL',1524,2041,'UA',494,'FYBMQ','D10','D',0,'N',197 -112418,'1234567','DEN','PHL',1615,2146,'CO',784,'FYQHK','72S','D/S',0,'N',211 -112440,'1234567','DEN','PIT',730,1225,'US',1039,'FYBHQ','734','B',0,'N',175 -112441,'1234567','DEN','PIT',1035,1527,'US',1520,'FYBHQ','733','B',0,'N',172 -112442,'1234567','DEN','PIT',1605,2057,'US',1421,'FYBHQ','733','D',0,'N',172 -112513,'1234567','DEN','SFO',830,1006,'UA',819,'FCYBM','D10','B',0,'N',156 -112514,'1234567','DEN','SFO',840,1041,'CO',1679,'FYQHK','733','B',0,'N',181 -112515,'1234567','DEN','SFO',935,1110,'UA',315,'FYBMQ','72S','S',0,'N',155 -112516,'1234567','DEN','SFO',1200,1336,'UA',343,'FYBMQ','D8S','L',0,'N',156 -112519,'12345-7','DEN','SFO',1220,1416,'CO',1295,'FYQHK','733','L',0,'N',176 -112518,'-----6-','DEN','SFO',1220,1416,'CO',1291,'FYQHK','72S','L',0,'N',176 -112520,'1234567','DEN','SFO',1408,1535,'UA',773,'FYBMQ','727','S',0,'N',147 -112524,'1234567','DEN','SFO',1735,1912,'UA',207,'FYBMQ','757','D',0,'N',157 -112525,'1234567','DEN','SFO',1810,1947,'CO',511,'FYQHK','72S','D/S',0,'N',157 -112526,'1234567','DEN','SFO',2045,2214,'UA',297,'FYBMQ','72S','',0,'N',149 -112527,'1234567','DEN','SFO',2130,2310,'CO',1765,'FQYNHK','M80','',0,'N',160 -112766,'1234567','DFW','ATL',625,917,'DL',16,'FYBMQ','L15','B',0,'N',112 -112771,'1234567','DFW','ATL',658,950,'AA',864,'FNYNBMV','M80','B',0,'N',112 -112772,'1234567','DFW','ATL',800,1050,'DL',83,'FYBMQ','L10','B',0,'N',110 -112773,'1234567','DFW','ATL',945,1244,'DL',790,'FYBMQ','767','S',0,'N',119 -112777,'1234567','DFW','ATL',1140,1434,'DL',446,'FYBMQ','M80','L',0,'N',114 -112783,'1234567','DFW','ATL',1251,1549,'AA',504,'FYBMV','M80','L',0,'N',118 -112784,'1234567','DFW','ATL',1305,1606,'DL',796,'FYBMQ','763','L',0,'N',121 -112789,'1234567','DFW','ATL',1442,1746,'AA',482,'FYBMV','M80','S',0,'N',124 -112790,'1234567','DFW','ATL',1501,1753,'DL',688,'FYBMQ','763','S',0,'N',112 -112793,'--34567','DFW','ATL',1650,1943,'DL',748,'FYBMQ','L10','D',0,'N',113 -112794,'12-----','DFW','ATL',1650,1943,'DL',748,'FYBMQ','763','D',0,'N',113 -112797,'-2-----','DFW','ATL',1705,2005,'LH',443,'FCBMK','74M','D',0,'N',120 -112798,'1234567','DFW','ATL',1716,2016,'AA',222,'FYBMV','M80','D',0,'N',120 -112802,'1234567','DFW','ATL',1840,2133,'DL',832,'FYBMQ','M80','D',0,'N',113 -112804,'1234567','DFW','ATL',1958,2255,'AA',496,'FNYNBMV','M80','S/',0,'N',117 -112805,'1234567','DFW','ATL',2010,2258,'DL',1720,'FYBMQ','72S','S/',0,'N',108 -112806,'1234567','DFW','ATL',2215,100,'DL',1008,'FNYNBNMQ','D9S','',0,'N',105 -112807,'1234567','DFW','ATL',2257,151,'AA',628,'FNYNBMV','M80','',0,'N',114 -112808,'1234567','DFW','ATL',2345,230,'DL',1030,'FNYNBNMQ','M80','',0,'N',105 -112864,'1234567','DFW','BOS',641,1104,'AA',928,'FYBMV','767','B',0,'N',203 -112867,'12-----','DFW','BOS',1005,1435,'DL',694,'FYBMQ','72S','B',0,'N',210 -112866,'--34567','DFW','BOS',1005,1435,'DL',694,'FYBMQ','M80','B',0,'N',210 -112869,'1234567','DFW','BOS',1304,1730,'AA',28,'FYBMV','D10','L/S',0,'N',206 -112870,'1234567','DFW','BOS',1315,1755,'DL',128,'FYBMQ','757','L',0,'N',220 -112872,'1234567','DFW','BOS',1448,1925,'AA',634,'FYBMV','767','S',0,'N',217 -112873,'1234567','DFW','BOS',1705,2125,'DL',670,'FYBMQ','72S','D',0,'N',200 -112874,'1234567','DFW','BOS',1719,2152,'AA',154,'FYBMV','D10','D',0,'N',213 -112903,'1234567','DFW','BWI',822,1200,'AA',314,'FYBMV','72S','B',0,'N',158 -112904,'1234567','DFW','BWI',1020,1400,'DL',430,'FYBMQ','73S','L',0,'N',160 -112905,'1234567','DFW','BWI',1426,1807,'AA',600,'FYBMV','72S','S',0,'N',161 -112907,'1234567','DFW','BWI',1708,2045,'DL',605,'FYBMQ','M80','D',0,'N',157 -112908,'1234567','DFW','BWI',1717,2110,'AA',268,'FYBMV','M80','D',0,'N',173 -112909,'1234567','DFW','BWI',1957,2334,'AA',376,'FYBMV','72S','S',0,'N',157 -112989,'1234567','DFW','DEN',650,800,'CO',1149,'FYQHK','733','B',0,'N',130 -112990,'1234567','DFW','DEN',658,753,'AA',1443,'FYBMV','M80','B',0,'N',115 -112991,'123456-','DFW','DEN',700,753,'UA',953,'FYBMQ','72S','B',0,'N',113 -112992,'1234567','DFW','DEN',816,910,'DL',416,'FYBMQ','M80','B',0,'N',114 -112993,'1234567','DFW','DEN',822,932,'AA',445,'FYBMV','M80','B',0,'N',130 -112994,'1234567','DFW','DEN',830,921,'UA',985,'FYBMQ','727','B',0,'N',111 -112995,'1234567','DFW','DEN',941,1047,'AA',521,'FYBMV','M80','S',0,'N',126 -112996,'-----6-','DFW','DEN',1030,1130,'CO',1291,'FYQHK','72S','S',0,'N',120 -112997,'12345-7','DFW','DEN',1030,1130,'CO',215,'FYQHK','72S','S',0,'N',120 -112998,'1234567','DFW','DEN',1032,1125,'UA',551,'FYBMQ','727','S',0,'N',113 -112999,'1234567','DFW','DEN',1108,11,'AA',419,'FYBMV','M80','S',0,'N',123 -113000,'1234567','DFW','DEN',1151,1245,'DL',551,'FYBMQ','M80','L',0,'N',114 -113001,'1234567','DFW','DEN',1240,1333,'UA',773,'FYBMQ','727','L',0,'N',113 -113002,'1234567','DFW','DEN',1428,1528,'AA',1249,'FYBMV','72S','',0,'N',120 -113003,'1234567','DFW','DEN',1500,1554,'DL',309,'FYBMQ','72S','',0,'N',114 -113004,'1234567','DFW','DEN',1547,1646,'UA',725,'FYBMQ','733','',0,'N',119 -113005,'1234567','DFW','DEN',1607,1714,'AA',51,'FYBMV','M80','',0,'N',127 -113006,'1234567','DFW','DEN',1630,1729,'CO',469,'FYQHK','72S','',0,'N',119 -113007,'1234567','DFW','DEN',1835,1936,'AA',193,'FNYNBMV','M80','D',0,'N',121 -113008,'12345-7','DFW','DEN',1850,1951,'UA',475,'FYBMQ','733','D',0,'N',121 -113009,'1234567','DFW','DEN',1855,1950,'DL',807,'FYBMQ','72S','D',0,'N',115 -113010,'1234567','DFW','DEN',1940,2040,'CO',271,'FYQHK','M80','D/S',0,'N',120 -113011,'1234567','DFW','DEN',2153,2253,'AA',313,'FNYNBMV','M80','',0,'N',120 -113013,'1-----7','DFW','DEN',2225,2320,'DL',621,'FNYNBNMQ','72S','',0,'N',115 -113012,'-23456-','DFW','DEN',2225,2320,'DL',621,'FNYNBNMQ','M80','',0,'N',115 -113498,'1234567','DFW','OAK',943,1133,'AA',877,'FYBMV','M80','B',0,'N',230 -113499,'1234567','DFW','OAK',1032,1339,'UA',551,'FYBMQ','727','SL',1,'N',307 -113500,'1234567','DFW','OAK',1835,2023,'AA',459,'FYBMV','M80','D',0,'N',228 -113501,'1234567','DFW','OAK',2153,2343,'AA',367,'FNYNBMV','M80','',0,'N',230 -113576,'1234567','DFW','PHL',703,1106,'AA',124,'FYBMV','M80','B',0,'N',183 -113577,'1234567','DFW','PHL',950,1350,'DL',1006,'FYBMQ','73S','B',0,'N',180 -113578,'1234567','DFW','PHL',1303,1706,'AA',1010,'FYBMV','767','L/S',0,'N',183 -113579,'1234567','DFW','PHL',1310,1705,'DL',234,'FYBMQ','72S','L',0,'N',175 -113581,'1234567','DFW','PHL',1718,2130,'AA',586,'FYBMV','M80','D',0,'N',192 -113582,'1234567','DFW','PHL',1959,2358,'AA',1074,'FYBMV','M80','S/',0,'N',179 -113583,'1234567','DFW','PHL',2025,15,'DL',1546,'FNYNBNMQ','72S','S',0,'N',170 -113595,'1234567','DFW','PIT',825,1200,'AA',478,'FYBMV','M80','B',0,'N',155 -113596,'1234567','DFW','PIT',845,1214,'US',326,'FYBHQ','M80','B',0,'N',149 -113597,'1234567','DFW','PIT',1230,1559,'US',96,'FYBHQ','M80','L',0,'N',149 -113599,'1234567','DFW','PIT',1434,1804,'AA',296,'FYBMV','M80','S',0,'N',150 -113600,'1234567','DFW','PIT',1720,2059,'US',504,'FYBHQ','M80','D',0,'N',159 -113602,'1234567','DFW','PIT',1958,2328,'AA',144,'FYBMV','M80','S/',0,'N',150 -113705,'1234567','DFW','SFO',815,955,'DL',825,'FYBMQ','757','B',0,'N',220 -113706,'1234567','DFW','SFO',826,1013,'AA',203,'FYBMV','D10','B',0,'N',227 -113707,'1234567','DFW','SFO',935,1127,'UA',459,'FYBMQ','733','L',0,'N',232 -113709,'1234567','DFW','SFO',944,1147,'AA',125,'FYBMV','M80','B',0,'N',243 -113710,'-----6-','DFW','SFO',1030,1416,'CO',1291,'FYQHK','72S','SL',1,'N',346 -113711,'1234567','DFW','SFO',1107,59,'AA',295,'FYBMV','D10','L',0,'N',232 -113712,'1234567','DFW','SFO',1143,1325,'DL',149,'FYBMQ','767','L',0,'N',222 -113713,'1234567','DFW','SFO',1240,1535,'UA',773,'FYBMQ','727','LS',1,'N',295 -113715,'1234567','DFW','SFO',1510,1650,'DL',887,'FYBMQ','757','S',0,'N',220 -113716,'1234567','DFW','SFO',1604,1758,'AA',813,'FYBMV','767','D',0,'N',234 -113717,'1234567','DFW','SFO',1705,1858,'AA',1119,'FYBMV','767','D',0,'N',233 -113718,'1234567','DFW','SFO',1840,2029,'AA',71,'FYBMV','D10','D',0,'N',229 -113719,'1234567','DFW','SFO',1900,2050,'DL',139,'FYBMQ','757','D',0,'N',230 -113720,'1234567','DFW','SFO',2155,2341,'AA',37,'FNYNBMV','767','S',0,'N',226 -113721,'1234567','DFW','SFO',2214,2350,'DL',395,'FNYNBNMQ','757','S',0,'N',216 -133423,'1234567','OAK','BOS',1105,2056,'UA',354,'FYBMQ','72S','LD',1,'N',411 -133430,'1234567','OAK','DEN',625,949,'UA',982,'FYBMQ','733','B',0,'N',144 -133431,'1234567','OAK','DEN',1105,1417,'UA',354,'FYBMQ','72S','L',0,'N',132 -133432,'1234567','OAK','DEN',1425,1740,'UA',436,'FYBMQ','727','S',0,'N',135 -133433,'1234567','OAK','DEN',1930,2251,'UA',384,'FYBMQ','73S','S/',0,'N',141 -133434,'1234567','OAK','DFW',35,552,'AA',534,'FNYNBMV','M80','',0,'N',197 -133435,'1234567','OAK','DFW',640,1214,'AA',1086,'FYBMV','M80','B',0,'N',214 -133436,'1234567','OAK','DFW',1345,1912,'AA',1074,'FYBMV','M80','L',0,'N',207 -133516,'1234567','OAK','PHL',1345,2358,'AA',1074,'FYBMV','M80','LS/L',1,'N',433 -133567,'123456-','OAK','SFO',530,554,'AA',5112,'YNBMVQ','SWM','',0,'Y',24 -133568,'------7','OAK','SFO',735,759,'AA',5235,'YBMVQ','SWM','',0,'Y',24 -133569,'------7','OAK','SFO',1020,1055,'AA',5140,'YBMVQ','SWM','',0,'Y',35 -137221,'1234567','PHL','ATL',540,740,'DL',201,'FNYNBNMQ','72S','B',0,'N',120 -137222,'1234567','PHL','ATL',635,844,'EA',121,'FNYNHQNK','D9S','B',0,'N',129 -137223,'1234567','PHL','ATL',800,1004,'EA',601,'FYHQK','D9S','B',0,'N',124 -137224,'1234567','PHL','ATL',900,1104,'DL',803,'FYBMQ','757','S',0,'N',124 -137225,'1234567','PHL','ATL',900,1110,'US',667,'FYBHQ','733','B',0,'N',130 -137226,'1234567','PHL','ATL',930,1142,'EA',125,'FYHQK','D9S','S',0,'N',132 -137227,'1234567','PHL','ATL',1115,1320,'EA',123,'FYHQK','D9S','L',0,'N',125 -137228,'1234567','PHL','ATL',1230,1430,'DL',1083,'FYBMQ','72S','L',0,'N',120 -137229,'1234567','PHL','ATL',1304,1512,'EA',127,'FYHQK','D9S','L',0,'N',128 -137230,'1234567','PHL','ATL',1405,1605,'DL',429,'FYBMQ','72S','',0,'N',120 -137231,'1234567','PHL','ATL',1405,1615,'US',1623,'FYBHQ','73S','L/S',0,'N',130 -137232,'1234567','PHL','ATL',1500,1710,'EA',603,'FYHQK','D9S','S/',0,'N',130 -137233,'1234567','PHL','ATL',1600,1805,'DL',1507,'FYBMQ','72S','S',0,'N',125 -137234,'1234567','PHL','ATL',1700,1909,'EA',329,'FYHQK','D9S','D',0,'N',129 -137235,'1234567','PHL','ATL',1750,1950,'DL',101,'FYBMQ','72S','D',0,'N',120 -137236,'1234567','PHL','ATL',1850,2055,'EA',129,'FYHQK','D9S','D',0,'N',125 -137237,'1234567','PHL','ATL',1855,2101,'US',289,'FYBHQ','D9S','D',0,'N',126 -137238,'1234567','PHL','ATL',1935,2137,'DL',389,'FYBMQ','767','D',0,'N',122 -137315,'1234567','PHL','BOS',615,719,'DL',562,'FYBMQ','757','B/S',0,'N',64 -137316,'1234567','PHL','BOS',700,805,'US',292,'FYBHQ','733','S',0,'N',65 -137317,'123456-','PHL','BOS',700,820,'ML',436,'FYMHQ','D9S','B/S',0,'N',80 -137318,'1234567','PHL','BOS',800,907,'US',1557,'FYBHQ','73S','S',0,'N',67 -137319,'1234567','PHL','BOS',855,1000,'DL',296,'FYBMQ','72S','',0,'N',65 -137320,'1234567','PHL','BOS',1020,1127,'US',424,'FYBHQ','M80','',0,'N',67 -137321,'1234567','PHL','BOS',1020,1140,'ML',400,'FYMHQ','D9S','',0,'N',80 -137322,'1234567','PHL','BOS',1200,1315,'ML',438,'FYMHQ','D9S','L/S',0,'N',75 -137323,'1234567','PHL','BOS',1250,1355,'DL',726,'FYBMQ','72S','S',0,'N',65 -137324,'1234567','PHL','BOS',1325,1432,'US',122,'FYBHQ','D9S','',0,'N',67 -137326,'1234567','PHL','BOS',1440,1548,'US',404,'FYBHQ','72S','',0,'N',68 -137327,'1234567','PHL','BOS',1520,1627,'US',282,'FYBHQ','73S','',0,'N',67 -137328,'1234567','PHL','BOS',1540,1700,'ML',420,'FYMHQ','D9S','',0,'N',80 -137329,'1234567','PHL','BOS',1600,1707,'US',2,'FYBHQ','73S','',0,'N',67 -137330,'-2-4--7','PHL','BOS',1615,1730,'LH',421,'FCBMK','D10','',0,'N',75 -137331,'1234567','PHL','BOS',1650,1755,'DL',648,'FYBMQ','72S','S',0,'N',65 -137332,'12345-7','PHL','BOS',1700,1820,'ML',430,'FYMHQ','D9S','',0,'N',80 -137333,'1234567','PHL','BOS',1755,1902,'US',196,'FYBHQ','M80','',0,'N',67 -137334,'12345-7','PHL','BOS',1855,2002,'US',460,'FYBHQ','D9S','',0,'N',67 -137335,'1234567','PHL','BOS',1945,2053,'US',162,'FYBHQ','72S','',0,'N',68 -137336,'12345-7','PHL','BOS',2030,2137,'US',539,'FYBHQ','D9S','',0,'N',67 -137337,'1234567','PHL','BOS',2055,2215,'ML',432,'FYMHQ','D9S','',0,'N',80 -137338,'12345-7','PHL','BOS',2100,2207,'US',279,'FYBHQ','734','',0,'N',67 -137339,'1234567','PHL','BOS',2115,2219,'DL',106,'FNYNBNMQ','M80','',0,'N',64 -137353,'12345--','PHL','BWI',715,804,'US',3745,'YBHQM','SH3','',0,'Y',49 -137354,'123456-','PHL','BWI',840,929,'US',3725,'YBHQM','SH3','',0,'Y',49 -137355,'1234567','PHL','BWI',1100,1150,'US',3609,'YBHQM','SH6','',0,'Y',50 -137356,'1234567','PHL','BWI',1200,1250,'US',3765,'YBHQM','SH3','',0,'Y',50 -137357,'1234567','PHL','BWI',1335,1425,'US',4517,'YBHQM','DH8','',0,'Y',50 -137358,'1234567','PHL','BWI',1520,1620,'US',3749,'YBHQM','SH3','',0,'Y',60 -137359,'1234567','PHL','BWI',1854,1944,'US',3357,'YBHQM','J31','',0,'Y',50 -137360,'12345-7','PHL','BWI',2045,2135,'US',3753,'YBHQM','SH3','',0,'Y',50 -137361,'12345-7','PHL','BWI',2150,2240,'US',4400,'YBHQM','DH8','',0,'Y',50 -137407,'1234567','PHL','DEN',905,1107,'UA',131,'FYBMQ','D10','B',0,'N',242 -137408,'1234567','PHL','DEN',915,1138,'CO',781,'FYQHK','72S','B',0,'N',263 -137410,'1234567','PHL','DEN',1230,1615,'DL',1083,'FYBMQ','72S','LS',1,'N',345 -137412,'1234567','PHL','DEN',1753,1955,'UA',355,'FYBMQ','D8S','D',0,'N',242 -137413,'1234567','PHL','DEN',1800,2037,'CO',1631,'FYQHK','733','D',0,'N',277 -137414,'1234567','PHL','DFW',720,1014,'AA',487,'FYBMV','M80','B',0,'N',234 -137415,'1234567','PHL','DFW',830,1050,'DL',217,'FYBMQ','72S','B',0,'N',200 -137417,'1234567','PHL','DFW',1212,1502,'AA',883,'FYBMV','M80','L',0,'N',230 -137419,'1234567','PHL','DFW',1440,1710,'DL',1061,'FYBMQ','73S','S',0,'N',210 -137420,'1234567','PHL','DFW',1500,1747,'AA',459,'FYBMV','M80','S',0,'N',227 -137422,'1234567','PHL','DFW',1805,2047,'AA',573,'FYBMV','767','D',0,'N',222 -137423,'1234567','PHL','DFW',1915,2144,'DL',589,'FYBMQ','72S','D',0,'N',209 -137685,'1234567','PHL','OAK',1500,2023,'AA',459,'FYBMV','M80','SD',1,'N',503 -137732,'1234567','PHL','PIT',700,806,'US',71,'FYBHQ','733','B',0,'N',66 -137733,'1234567','PHL','PIT',740,847,'US',39,'FYBHQ','733','B',0,'N',67 -137734,'123456-','PHL','PIT',840,950,'US',1800,'FYBHQ','734','S/',0,'N',70 -137735,'1234567','PHL','PIT',1010,1115,'US',358,'FYBHQ','M80','S/',0,'N',65 -137736,'1234567','PHL','PIT',1235,1341,'US',37,'FYBHQ','733','S',0,'N',66 -137737,'1234567','PHL','PIT',1600,1706,'US',778,'FYBHQ','733','S/',0,'N',66 -137738,'1234567','PHL','PIT',1715,1822,'US',1580,'FYBHQ','734','S/',0,'N',67 -137739,'1234567','PHL','PIT',1810,1916,'US',772,'FYBHQ','72S','S',0,'N',66 -137740,'1234567','PHL','PIT',2100,2207,'US',293,'FYBHQ','733','',0,'N',67 -137811,'1234567','PHL','SFO',800,1121,'UA',143,'FYBMQ','767','B',0,'N',381 -137814,'1234567','PHL','SFO',1235,1652,'US',37,'FYBHQ','733','SL',1,'N',437 -137817,'1234567','PHL','SFO',1655,2005,'UA',101,'FYBMQ','D8S','D',0,'N',370 -138817,'1234567','PIT','ATL',600,739,'DL',357,'FNYNBNMQ','73S','B',0,'N',99 -138818,'1234567','PIT','ATL',645,825,'EA',303,'FYHQK','D9S','B',0,'N',100 -138819,'1234567','PIT','ATL',827,1004,'EA',301,'YHQKL','72S','B',0,'N',97 -138820,'1234567','PIT','ATL',845,1025,'US',573,'FYBHQ','D9S','B',0,'N',100 -138821,'1234567','PIT','ATL',910,1048,'DL',1059,'FYBMQ','D9S','S',0,'N',98 -138822,'1234567','PIT','ATL',1150,1329,'EA',307,'FYHQK','D9S','L',0,'N',99 -138823,'1234567','PIT','ATL',1245,1420,'DL',631,'FYBMQ','D9S','L',0,'N',95 -138824,'1234567','PIT','ATL',1320,1500,'US',18,'FYBHQ','D9S','L',0,'N',100 -138825,'1234567','PIT','ATL',1520,1701,'EA',311,'YHQKL','72S','S',0,'N',101 -138827,'1234567','PIT','ATL',1600,1735,'DL',709,'FYBMQ','73S','',0,'N',95 -138828,'1234567','PIT','ATL',1750,1930,'US',1103,'FYBHQ','733','D',0,'N',100 -138829,'1234567','PIT','ATL',1855,2035,'EA',327,'FYHQK','757','D',0,'N',100 -138830,'-----67','PIT','ATL',1945,2118,'DL',381,'FNYNBNMQ','73S','D',0,'N',93 -138831,'12345--','PIT','ATL',1945,2118,'DL',381,'FNYNBNMQ','72S','D',0,'N',93 -138832,'1234567','PIT','ATL',2025,2205,'US',412,'FYBHQ','D9S','D/S',0,'N',100 -138860,'1234567','PIT','BOS',710,839,'US',732,'FYBHQ','733','B',0,'N',89 -138861,'1234567','PIT','BOS',840,1006,'US',736,'FYBHQ','733','S/',0,'N',86 -138862,'1234567','PIT','BOS',1200,1328,'US',674,'FYBHQ','M80','S',0,'N',88 -138863,'1234567','PIT','BOS',1310,1440,'US',418,'FYBHQ','D9S','S',0,'N',90 -138864,'1234567','PIT','BOS',1355,1524,'US',794,'FYBHQ','D9S','S/',0,'N',89 -138865,'1234567','PIT','BOS',1640,1809,'US',14,'FYBHQ','733','S/',0,'N',89 -138866,'1234567','PIT','BOS',1800,2053,'US',162,'FYBHQ','72S','S',1,'N',173 -138867,'12345-7','PIT','BOS',1930,2058,'US',400,'FYBHQ','73S','S',0,'N',88 -138868,'1234567','PIT','BOS',2155,2322,'US',30,'FYBHQ','72S','',0,'N',87 -138878,'1234567','PIT','BWI',845,938,'US',446,'FYBHQ','72S','',0,'N',53 -138879,'1234567','PIT','BWI',1030,1129,'US',1801,'FYBHQ','734','',0,'N',59 -138880,'1234567','PIT','BWI',1400,1458,'US',538,'FYBHQ','D9S','',0,'N',58 -138881,'1234567','PIT','BWI',1525,1621,'US',1982,'FYBHQ','F28','',0,'N',56 -138882,'1234567','PIT','BWI',1640,1737,'US',2153,'FYBHQ','733','',0,'N',57 -138883,'-----6-','PIT','BWI',1810,1910,'US',975,'FYBHQ','F28','',0,'N',60 -138884,'1234567','PIT','BWI',2155,2252,'US',1793,'FYBHQ','733','',0,'N',57 -138963,'1234567','PIT','DEN',950,1135,'US',1402,'FYBHQ','733','B',0,'N',225 -138964,'1234567','PIT','DEN',1330,1510,'US',1417,'FYBHQ','733','L',0,'N',220 -138965,'1234567','PIT','DEN',1854,2253,'AA',313,'FYBMV','M80','D',1,'N',359 -138966,'1234567','PIT','DEN',2035,2226,'US',1742,'FYBHQ','734','D',0,'N',231 -138970,'1234567','PIT','DFW',640,852,'AA',493,'FYBMV','M80','B',0,'N',192 -138971,'1234567','PIT','DFW',940,1149,'US',7,'FYBHQ','M80','B',0,'N',189 -138973,'1234567','PIT','DFW',1301,1514,'AA',425,'FYBMV','M80','L/S',0,'N',193 -138974,'1234567','PIT','DFW',1430,1639,'US',503,'FYBHQ','M80','L',0,'N',189 -138976,'1234567','PIT','DFW',1854,2107,'AA',313,'FYBMV','M80','D',0,'N',193 -138977,'1234567','PIT','DFW',2020,2229,'US',19,'FYBHQ','M80','D',0,'N',189 -139264,'1234567','PIT','PHL',700,755,'US',771,'FYBHQ','72S','B',0,'N',55 -139265,'1234567','PIT','PHL',740,850,'US',620,'FYBHQ','733','B',0,'N',70 -139266,'1234567','PIT','PHL',850,958,'US',606,'FYBHQ','733','S/',0,'N',68 -139267,'1234567','PIT','PHL',1150,1251,'US',122,'FYBHQ','D9S','S',0,'N',61 -139268,'1234567','PIT','PHL',1325,1430,'US',198,'FYBHQ','733','S',0,'N',65 -139269,'1234567','PIT','PHL',1640,1745,'US',1438,'FYBHQ','733','S/',0,'N',65 -139270,'1234567','PIT','PHL',1800,1900,'US',162,'FYBHQ','72S','S',0,'N',60 -139271,'1234567','PIT','PHL',1955,2100,'US',166,'FYBHQ','733','',0,'N',65 -139272,'12345-7','PIT','PHL',2045,2145,'US',1984,'FYBHQ','73S','',0,'N',60 -139273,'1234567','PIT','PHL',2145,2250,'US',1678,'FYBHQ','734','',0,'N',65 -139353,'1234567','PIT','SFO',945,1217,'US',31,'FYBHQ','72S','B',0,'N',332 -139355,'1234567','PIT','SFO',1430,1652,'US',37,'FYBHQ','733','L',0,'N',322 -139356,'1234567','PIT','SFO',1750,2022,'US',33,'FYBHQ','733','D',0,'N',332 -139357,'1234567','PIT','SFO',2020,2250,'US',35,'FYBHQ','733','D',0,'N',330 -144059,'1234567','SFO','ATL',645,1549,'AA',504,'FYBMV','M80','BL',1,'N',364 -144060,'1234567','SFO','ATL',815,1540,'DL',98,'FYBMQ','763','B',0,'N',265 -144061,'1234567','SFO','ATL',900,1644,'EA',70,'FYHQK','757','B',0,'N',284 -144062,'------7','SFO','ATL',1215,1933,'DL',116,'FYBMQ','767','L',0,'N',258 -144063,'123456-','SFO','ATL',1215,1933,'DL',116,'FYBMQ','L10','L',0,'N',258 -144065,'1234567','SFO','ATL',1310,2041,'EA',72,'FYHQK','757','L',0,'N',271 -144066,'1234567','SFO','ATL',1530,2248,'DL',162,'FYBMQ','757','D',0,'N',258 -144067,'1234567','SFO','ATL',2220,540,'DL',156,'FNYNBNMQ','767','S',0,'N',260 -144069,'1234567','SFO','ATL',2340,657,'EA',74,'FNYNHQNK','757','S',0,'N',257 -144087,'1234567','SFO','BOS',30,1104,'AA',928,'FNYNBMV','767','B',1,'N',454 -144088,'1234567','SFO','BOS',650,1700,'CO',1234,'FYQHK','M80','BL',1,'N',430 -144089,'1234567','SFO','BOS',800,1627,'UA',92,'FYBMQ','D8S','B',0,'N',327 -144090,'1234567','SFO','BOS',825,1639,'TW',754,'FCYBQ','L10','B',0,'N',314 -144092,'123456-','SFO','BOS',1215,2255,'DL',116,'FYBMQ','L10','LS/L',1,'N',460 -144093,'1234567','SFO','BOS',1320,2322,'US',30,'FYBHQ','72S','L',1,'N',422 -144094,'1234567','SFO','BOS',1340,2202,'UA',20,'FYBMQ','D10','L',0,'N',322 -144095,'1234567','SFO','BOS',1530,153,'DL',162,'FYBMQ','757','D',1,'N',443 -144110,'1234567','SFO','BWI',755,1737,'US',2153,'FYBHQ','733','B',1,'N',402 -144143,'1234567','SFO','DEN',620,946,'UA',194,'FYBMQ','D10','B',0,'N',146 -144144,'1234567','SFO','DEN',650,1017,'CO',1234,'FYQHK','M80','B',0,'N',147 -144145,'-----6-','SFO','DEN',900,1223,'UA',888,'FYBMQ','727','B',0,'N',143 -144146,'12345--','SFO','DEN',900,1223,'UA',880,'FYBMQ','727','B',0,'N',143 -144147,'1234567','SFO','DEN',915,1244,'CO',64,'FYQHK','72S','B',0,'N',149 -144148,'1234567','SFO','DEN',1108,1428,'UA',820,'FCYBM','D10','L',0,'N',140 -144149,'1234567','SFO','DEN',1155,1523,'CO',1212,'FYQHK','733','L',0,'N',148 -144150,'1234567','SFO','DEN',1431,1753,'UA',178,'FYBMQ','D8S','S',0,'N',142 -144152,'12345-7','SFO','DEN',1520,1850,'CO',886,'FYQHK','733','S',0,'N',150 -144151,'-----6-','SFO','DEN',1520,1850,'CO',886,'FYQHK','72S','S',0,'N',150 -144153,'1234567','SFO','DEN',1825,2143,'UA',346,'FYBMQ','73S','D',0,'N',138 -144155,'1234567','SFO','DFW',20,522,'DL',374,'FNYNBNMQ','757','S',0,'N',182 -144156,'1234567','SFO','DFW',30,548,'AA',928,'FNYNBMV','767','',0,'N',198 -144157,'1234567','SFO','DFW',645,1204,'AA',504,'FYBMV','M80','B',0,'N',199 -144158,'1234567','SFO','DFW',700,1221,'DL',838,'FYBMQ','767','B',0,'N',201 -144159,'1234567','SFO','DFW',800,1315,'AA',70,'FYBMV','D10','B',0,'N',195 -144160,'-----6-','SFO','DFW',900,1555,'UA',888,'FYBMQ','727','BS',1,'N',295 -144161,'12345--','SFO','DFW',900,1555,'UA',880,'FYBMQ','727','BS',1,'N',295 -144162,'1234567','SFO','DFW',945,1503,'AA',986,'FYBMV','767','B',0,'N',198 -144163,'1234567','SFO','DFW',1059,1612,'DL',1014,'FYBMQ','757','L',0,'N',193 -144164,'1234567','SFO','DFW',1105,1622,'AA',288,'FYBMV','D10','L',0,'N',197 -144165,'1234567','SFO','DFW',1240,1808,'UA',478,'FYBMQ','733','L',0,'N',208 -144166,'1234567','SFO','DFW',1349,1910,'AA',404,'FYBMV','D10','L',0,'N',201 -144167,'1234567','SFO','DFW',1425,1937,'DL',180,'FYBMQ','767','L',0,'N',192 -144168,'1234567','SFO','DFW',1655,2215,'AA',264,'FYBMV','767','D',0,'N',200 -144169,'1234567','SFO','DFW',1750,2258,'DL',852,'FYBMQ','757','D',0,'N',188 -144477,'1234567','SFO','OAK',1250,1319,'AA',5302,'YBMVQ','SWM','',0,'Y',29 -144478,'-----6-','SFO','OAK',1749,1809,'AA',5130,'YBMVQ','SWM','',0,'Y',20 -144479,'-----6-','SFO','OAK',1831,1853,'AA',5111,'YBMVQ','SWM','',0,'Y',22 -144480,'12345-7','SFO','OAK',2221,2247,'AA',5104,'YNBMVQ','SWM','',0,'Y',26 -144541,'1234567','SFO','PHL',810,1608,'UA',130,'FYBMQ','D8S','B',0,'N',298 -144543,'1234567','SFO','PHL',1125,2100,'US',166,'FYBHQ','733','L',1,'N',395 -144547,'1234567','SFO','PHL',1330,2141,'UA',94,'FYBMQ','767','L',0,'N',311 -144572,'1234567','SFO','PIT',755,1534,'US',2153,'FYBHQ','733','B',0,'N',279 -144574,'1234567','SFO','PIT',1125,1856,'US',166,'FYBHQ','733','L',0,'N',271 -144575,'1234567','SFO','PIT',1320,2046,'US',30,'FYBHQ','72S','L',0,'N',266 -144576,'1234567','SFO','PIT',2355,726,'US',604,'FYBHQ','733','D',0,'N',271 diff --git a/sql-bench/Data/ATIS/flight_class.txt b/sql-bench/Data/ATIS/flight_class.txt deleted file mode 100644 index fb8bd241f438aae1755f03dcdfe4547f47e5232d..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/flight_class.txt +++ /dev/null @@ -1,2895 +0,0 @@ -101909,'FN' -101909,'YN' -101909,'BN' -101909,'M' -101909,'Q' -101910,'F' -101910,'Y' -101910,'H' -101910,'Q' -101910,'K' -101911,'F' -101911,'Y' -101911,'H' -101911,'Q' -101911,'K' -101912,'F' -101912,'Y' -101912,'B' -101912,'M' -101912,'Q' -101914,'Y' -101914,'H' -101914,'Q' -101914,'K' -101914,'L' -101915,'F' -101915,'Y' -101915,'H' -101915,'Q' -101915,'K' -101916,'F' -101916,'Y' -101916,'B' -101916,'M' -101916,'Q' -101917,'F' -101917,'Y' -101917,'B' -101917,'M' -101917,'Q' -101918,'F' -101918,'Y' -101918,'H' -101918,'Q' -101918,'K' -101922,'F' -101922,'Y' -101922,'B' -101922,'M' -101922,'Q' -101923,'F' -101923,'Y' -101923,'H' -101923,'Q' -101923,'K' -101925,'F' -101925,'Y' -101925,'B' -101925,'M' -101925,'Q' -101926,'F' -101926,'Y' -101926,'H' -101926,'Q' -101926,'K' -101927,'F' -101927,'Y' -101927,'B' -101927,'M' -101927,'Q' -101928,'F' -101928,'Y' -101928,'B' -101928,'M' -101928,'Q' -101929,'FN' -101929,'YN' -101929,'BN' -101929,'M' -101929,'Q' -101951,'F' -101951,'Y' -101951,'H' -101951,'Q' -101951,'K' -101952,'F' -101952,'Y' -101952,'B' -101952,'M' -101952,'Q' -101953,'F' -101953,'Y' -101953,'B' -101953,'M' -101953,'Q' -101954,'F' -101954,'Y' -101954,'H' -101954,'Q' -101954,'K' -101955,'F' -101955,'Y' -101955,'B' -101955,'M' -101955,'Q' -101956,'F' -101956,'Y' -101956,'H' -101956,'Q' -101956,'K' -101957,'F' -101957,'Y' -101957,'H' -101957,'Q' -101957,'K' -101958,'F' -101958,'Y' -101958,'B' -101958,'M' -101958,'Q' -101959,'FN' -101959,'YN' -101959,'H' -101959,'QN' -101959,'K' -102122,'F' -102122,'Y' -102122,'B' -102122,'M' -102122,'Q' -102123,'F' -102123,'Y' -102123,'H' -102123,'Q' -102123,'K' -102125,'F' -102125,'Y' -102125,'B' -102125,'M' -102125,'Q' -102126,'F' -102126,'Y' -102126,'B' -102126,'M' -102126,'Q' -102127,'F' -102127,'Y' -102127,'B' -102127,'M' -102127,'Q' -102128,'F' -102128,'Y' -102128,'H' -102128,'Q' -102128,'K' -102129,'F' -102129,'Y' -102129,'B' -102129,'M' -102129,'Q' -102133,'F' -102133,'Y' -102133,'B' -102133,'M' -102133,'Q' -102134,'FN' -102134,'YN' -102134,'H' -102134,'QN' -102134,'K' -102135,'FN' -102135,'YN' -102135,'BN' -102135,'M' -102135,'Q' -102136,'FN' -102136,'YN' -102136,'BN' -102136,'M' -102136,'Q' -102137,'FN' -102137,'YN' -102137,'BN' -102137,'M' -102137,'Q' -102139,'F' -102139,'Y' -102139,'B' -102139,'M' -102139,'V' -102144,'F' -102144,'Y' -102144,'B' -102144,'M' -102144,'Q' -102147,'F' -102147,'Y' -102147,'B' -102147,'M' -102147,'V' -102148,'F' -102148,'Y' -102148,'B' -102148,'M' -102148,'Q' -102150,'F' -102150,'Y' -102150,'B' -102150,'M' -102150,'Q' -102162,'F' -102162,'Y' -102162,'B' -102162,'M' -102162,'Q' -102163,'F' -102163,'Y' -102163,'B' -102163,'M' -102163,'Q' -102164,'F' -102164,'Y' -102164,'B' -102164,'M' -102164,'V' -102165,'F' -102165,'C' -102165,'B' -102165,'M' -102165,'K' -102166,'F' -102166,'Y' -102166,'B' -102166,'M' -102166,'Q' -102172,'F' -102172,'Y' -102172,'B' -102172,'M' -102172,'V' -102173,'F' -102173,'Y' -102173,'B' -102173,'M' -102173,'Q' -102177,'F' -102177,'Y' -102177,'B' -102177,'M' -102177,'Q' -102188,'FN' -102188,'YN' -102188,'B' -102188,'M' -102188,'V' -102190,'FN' -102190,'YN' -102190,'BN' -102190,'M' -102190,'Q' -102191,'FN' -102191,'YN' -102191,'BN' -102191,'M' -102191,'Q' -102192,'FN' -102192,'YN' -102192,'BN' -102192,'M' -102192,'Q' -102766,'FN' -102766,'YN' -102766,'BN' -102766,'M' -102766,'Q' -102767,'F' -102767,'Y' -102767,'B' -102767,'H' -102767,'Q' -102768,'F' -102768,'Y' -102768,'H' -102768,'Q' -102768,'K' -102769,'F' -102769,'Y' -102769,'H' -102769,'Q' -102769,'K' -102770,'F' -102770,'Y' -102770,'B' -102770,'M' -102770,'Q' -102771,'F' -102771,'Y' -102771,'B' -102771,'H' -102771,'Q' -102772,'F' -102772,'Y' -102772,'H' -102772,'Q' -102772,'K' -102773,'F' -102773,'Y' -102773,'B' -102773,'M' -102773,'Q' -102774,'F' -102774,'Y' -102774,'H' -102774,'Q' -102774,'K' -102775,'F' -102775,'Y' -102775,'H' -102775,'Q' -102775,'K' -102776,'F' -102776,'Y' -102776,'B' -102776,'M' -102776,'Q' -102777,'F' -102777,'Y' -102777,'B' -102777,'H' -102777,'Q' -102778,'F' -102778,'Y' -102778,'H' -102778,'Q' -102778,'K' -102779,'F' -102779,'Y' -102779,'B' -102779,'M' -102779,'Q' -102781,'F' -102781,'Y' -102781,'H' -102781,'Q' -102781,'K' -102782,'F' -102782,'Y' -102782,'B' -102782,'M' -102782,'Q' -102783,'FN' -102783,'YN' -102783,'H' -102783,'QN' -102783,'K' -102784,'FN' -102784,'YN' -102784,'BN' -102784,'M' -102784,'Q' -102795,'F' -102795,'Y' -102795,'B' -102795,'H' -102795,'Q' -102796,'F' -102796,'Y' -102796,'B' -102796,'M' -102796,'Q' -102797,'F' -102797,'Y' -102797,'H' -102797,'Q' -102797,'K' -102798,'F' -102798,'Y' -102798,'B' -102798,'H' -102798,'Q' -102799,'F' -102799,'Y' -102799,'H' -102799,'Q' -102799,'K' -102800,'F' -102800,'Y' -102800,'B' -102800,'M' -102800,'Q' -102801,'F' -102801,'Y' -102801,'B' -102801,'H' -102801,'Q' -102802,'F' -102802,'Y' -102802,'B' -102802,'M' -102802,'Q' -102803,'F' -102803,'Y' -102803,'B' -102803,'M' -102803,'Q' -102804,'Y' -102804,'H' -102804,'Q' -102804,'K' -102804,'L' -102805,'F' -102805,'Y' -102805,'B' -102805,'H' -102805,'Q' -102806,'F' -102806,'Y' -102806,'H' -102806,'Q' -102806,'K' -102807,'F' -102807,'Y' -102807,'B' -102807,'M' -102807,'Q' -102808,'FN' -102808,'YN' -102808,'H' -102808,'QN' -102808,'K' -102809,'FN' -102809,'YN' -102809,'BN' -102809,'M' -102809,'Q' -102923,'F' -102923,'Y' -102923,'B' -102923,'M' -102923,'Q' -102924,'F' -102924,'Y' -102924,'B' -102924,'M' -102924,'Q' -102925,'F' -102925,'Y' -102925,'H' -102925,'Q' -102925,'K' -102927,'F' -102927,'Y' -102927,'B' -102927,'M' -102927,'Q' -102929,'F' -102929,'Y' -102929,'B' -102929,'M' -102929,'Q' -102930,'F' -102930,'Y' -102930,'H' -102930,'Q' -102930,'K' -102932,'F' -102932,'Y' -102932,'B' -102932,'M' -102932,'Q' -102933,'F' -102933,'Y' -102933,'H' -102933,'Q' -102933,'K' -105584,'F' -105584,'Y' -105584,'B' -105584,'M' -105584,'Q' -105586,'FN' -105586,'YN' -105586,'H' -105586,'QN' -105586,'K' -105588,'F' -105588,'Y' -105588,'B' -105588,'M' -105588,'Q' -105589,'F' -105589,'Y' -105589,'H' -105589,'Q' -105589,'K' -105590,'F' -105590,'Y' -105590,'B' -105590,'M' -105590,'Q' -105591,'F' -105591,'Y' -105591,'H' -105591,'Q' -105591,'K' -105592,'F' -105592,'Y' -105592,'B' -105592,'M' -105592,'Q' -105593,'F' -105593,'Y' -105593,'H' -105593,'Q' -105593,'K' -105594,'Y' -105594,'H' -105594,'Q' -105594,'K' -105594,'L' -105595,'F' -105595,'Y' -105595,'B' -105595,'M' -105595,'Q' -105597,'F' -105597,'Y' -105597,'H' -105597,'Q' -105597,'K' -105598,'F' -105598,'Y' -105598,'H' -105598,'Q' -105598,'K' -105599,'F' -105599,'Y' -105599,'B' -105599,'M' -105599,'Q' -105601,'FN' -105601,'YN' -105601,'BN' -105601,'M' -105601,'Q' -105698,'F' -105698,'Y' -105698,'B' -105698,'H' -105698,'Q' -105699,'F' -105699,'Y' -105699,'B' -105699,'H' -105699,'Q' -105700,'F' -105700,'Y' -105700,'B' -105700,'H' -105700,'Q' -105701,'F' -105701,'Y' -105701,'B' -105701,'H' -105701,'Q' -105702,'F' -105702,'Y' -105702,'B' -105702,'H' -105702,'Q' -105703,'F' -105703,'Y' -105703,'B' -105703,'H' -105703,'Q' -105704,'F' -105704,'Y' -105704,'B' -105704,'H' -105704,'Q' -105705,'F' -105705,'Y' -105705,'B' -105705,'H' -105705,'Q' -105794,'F' -105794,'Y' -105794,'B' -105794,'M' -105794,'Q' -105795,'F' -105795,'Y' -105795,'B' -105795,'M' -105795,'Q' -105796,'F' -105796,'Y' -105796,'Q' -105796,'H' -105796,'K' -105798,'F' -105798,'Y' -105798,'Q' -105798,'H' -105798,'K' -105799,'F' -105799,'Y' -105799,'B' -105799,'M' -105799,'Q' -105800,'F' -105800,'Y' -105800,'Q' -105800,'H' -105800,'K' -105801,'F' -105801,'Y' -105801,'B' -105801,'M' -105801,'V' -105802,'F' -105802,'Y' -105802,'B' -105802,'M' -105802,'Q' -105803,'F' -105803,'Y' -105803,'B' -105803,'M' -105803,'V' -105805,'F' -105805,'Y' -105805,'B' -105805,'M' -105805,'Q' -105806,'F' -105806,'Y' -105806,'B' -105806,'M' -105806,'V' -105807,'F' -105807,'Y' -105807,'B' -105807,'M' -105807,'V' -105808,'F' -105808,'Y' -105808,'B' -105808,'M' -105808,'Q' -105811,'F' -105811,'Y' -105811,'B' -105811,'M' -105811,'V' -105812,'F' -105812,'Y' -105812,'B' -105812,'M' -105812,'Q' -106229,'F' -106229,'Y' -106229,'B' -106229,'H' -106229,'Q' -106230,'F' -106230,'Y' -106230,'M' -106230,'H' -106230,'Q' -106231,'F' -106231,'Y' -106231,'B' -106231,'H' -106231,'Q' -106232,'F' -106232,'Y' -106232,'B' -106232,'M' -106232,'Q' -106234,'F' -106234,'Y' -106234,'B' -106234,'H' -106234,'Q' -106235,'F' -106235,'Y' -106235,'M' -106235,'H' -106235,'Q' -106236,'F' -106236,'Y' -106236,'B' -106236,'H' -106236,'Q' -106237,'F' -106237,'Y' -106237,'B' -106237,'H' -106237,'Q' -106238,'F' -106238,'Y' -106238,'B' -106238,'M' -106238,'Q' -106239,'F' -106239,'Y' -106239,'M' -106239,'H' -106239,'Q' -106240,'F' -106240,'C' -106240,'B' -106240,'M' -106240,'K' -106241,'F' -106241,'Y' -106241,'M' -106241,'H' -106241,'Q' -106242,'F' -106242,'Y' -106242,'B' -106242,'M' -106242,'Q' -106245,'F' -106245,'Y' -106245,'B' -106245,'H' -106245,'Q' -106246,'F' -106246,'Y' -106246,'B' -106246,'H' -106246,'Q' -106247,'F' -106247,'Y' -106247,'B' -106247,'H' -106247,'Q' -106248,'F' -106248,'Y' -106248,'B' -106248,'M' -106248,'Q' -106249,'F' -106249,'Y' -106249,'M' -106249,'H' -106249,'Q' -106250,'F' -106250,'Y' -106250,'B' -106250,'H' -106250,'Q' -106251,'F' -106251,'Y' -106251,'B' -106251,'H' -106251,'Q' -106252,'F' -106252,'Y' -106252,'M' -106252,'H' -106252,'Q' -106253,'F' -106253,'Y' -106253,'B' -106253,'H' -106253,'Q' -106254,'F' -106254,'Y' -106254,'B' -106254,'M' -106254,'Q' -106255,'F' -106255,'Y' -106255,'B' -106255,'H' -106255,'Q' -106263,'F' -106263,'Y' -106263,'B' -106263,'H' -106263,'Q' -106264,'F' -106264,'Y' -106264,'B' -106264,'H' -106264,'Q' -106265,'F' -106265,'Y' -106265,'B' -106265,'H' -106265,'Q' -106266,'F' -106266,'Y' -106266,'B' -106266,'H' -106266,'Q' -106267,'F' -106267,'Y' -106267,'B' -106267,'H' -106267,'Q' -106268,'F' -106268,'Y' -106268,'B' -106268,'H' -106268,'Q' -106269,'F' -106269,'Y' -106269,'B' -106269,'H' -106269,'Q' -106271,'F' -106271,'Y' -106271,'B' -106271,'H' -106271,'Q' -106365,'F' -106365,'Y' -106365,'B' -106365,'M' -106365,'Q' -106376,'F' -106376,'Y' -106376,'B' -106376,'M' -106376,'Q' -106377,'F' -106377,'C' -106377,'Y' -106377,'B' -106377,'Q' -107159,'FN' -107159,'YN' -107159,'BN' -107159,'M' -107159,'Q' -107160,'FN' -107160,'YN' -107160,'H' -107160,'QN' -107160,'K' -107161,'F' -107161,'Y' -107161,'H' -107161,'Q' -107161,'K' -107162,'F' -107162,'Y' -107162,'B' -107162,'M' -107162,'Q' -107163,'F' -107163,'Y' -107163,'H' -107163,'Q' -107163,'K' -107164,'F' -107164,'Y' -107164,'H' -107164,'Q' -107164,'K' -107165,'F' -107165,'Y' -107165,'B' -107165,'M' -107165,'Q' -107166,'F' -107166,'Y' -107166,'B' -107166,'M' -107166,'Q' -107167,'F' -107167,'Y' -107167,'H' -107167,'Q' -107167,'K' -107168,'F' -107168,'Y' -107168,'B' -107168,'M' -107168,'Q' -107193,'F' -107193,'Y' -107193,'B' -107193,'H' -107193,'Q' -107194,'F' -107194,'Y' -107194,'B' -107194,'H' -107194,'Q' -107195,'F' -107195,'Y' -107195,'B' -107195,'H' -107195,'Q' -107196,'F' -107196,'Y' -107196,'B' -107196,'H' -107196,'Q' -107197,'F' -107197,'Y' -107197,'B' -107197,'H' -107197,'Q' -107198,'F' -107198,'Y' -107198,'B' -107198,'H' -107198,'Q' -107199,'F' -107199,'Y' -107199,'B' -107199,'H' -107199,'Q' -107200,'F' -107200,'Y' -107200,'B' -107200,'H' -107200,'Q' -107254,'F' -107254,'Y' -107254,'B' -107254,'M' -107254,'Q' -107255,'F' -107255,'Y' -107255,'B' -107255,'H' -107255,'Q' -107256,'F' -107256,'Y' -107256,'B' -107256,'M' -107256,'Q' -107257,'F' -107257,'Y' -107257,'B' -107257,'M' -107257,'V' -107258,'F' -107258,'Y' -107258,'B' -107258,'M' -107258,'Q' -107259,'F' -107259,'Y' -107259,'B' -107259,'M' -107259,'V' -107260,'F' -107260,'Y' -107260,'B' -107260,'M' -107260,'V' -107261,'F' -107261,'Y' -107261,'B' -107261,'M' -107261,'Q' -107264,'F' -107264,'Y' -107264,'B' -107264,'M' -107264,'V' -107470,'Y' -107470,'B' -107470,'H' -107470,'Q' -107470,'M' -107471,'Y' -107471,'B' -107471,'H' -107471,'Q' -107471,'M' -107472,'Y' -107472,'B' -107472,'H' -107472,'Q' -107472,'M' -107473,'Y' -107473,'B' -107473,'H' -107473,'Q' -107473,'M' -107474,'Y' -107474,'B' -107474,'H' -107474,'Q' -107474,'M' -107475,'Y' -107475,'B' -107475,'H' -107475,'Q' -107475,'M' -107476,'Y' -107476,'B' -107476,'H' -107476,'Q' -107476,'M' -107477,'Y' -107477,'B' -107477,'H' -107477,'Q' -107477,'M' -107478,'Y' -107478,'B' -107478,'H' -107478,'Q' -107478,'M' -107484,'F' -107484,'Y' -107484,'B' -107484,'H' -107484,'Q' -107485,'F' -107485,'Y' -107485,'B' -107485,'H' -107485,'Q' -107486,'F' -107486,'Y' -107486,'B' -107486,'H' -107486,'Q' -107487,'F' -107487,'Y' -107487,'B' -107487,'H' -107487,'Q' -107488,'F' -107488,'Y' -107488,'B' -107488,'H' -107488,'Q' -107489,'F' -107489,'Y' -107489,'B' -107489,'H' -107489,'Q' -107490,'F' -107490,'Y' -107490,'B' -107490,'H' -107490,'Q' -107491,'F' -107491,'Y' -107491,'B' -107491,'H' -107491,'Q' -107492,'F' -107492,'Y' -107492,'B' -107492,'H' -107492,'Q' -111886,'FN' -111886,'YN' -111886,'BN' -111886,'M' -111886,'Q' -111887,'FN' -111887,'YN' -111887,'H' -111887,'QN' -111887,'K' -111888,'F' -111888,'Y' -111888,'B' -111888,'M' -111888,'Q' -111889,'F' -111889,'Y' -111889,'H' -111889,'Q' -111889,'K' -111891,'F' -111891,'Y' -111891,'B' -111891,'M' -111891,'Q' -111892,'F' -111892,'Y' -111892,'B' -111892,'M' -111892,'Q' -111893,'F' -111893,'Y' -111893,'H' -111893,'Q' -111893,'K' -111894,'F' -111894,'Y' -111894,'B' -111894,'M' -111894,'Q' -111895,'F' -111895,'Y' -111895,'B' -111895,'M' -111895,'Q' -111896,'F' -111896,'Y' -111896,'B' -111896,'M' -111896,'Q' -111928,'F' -111928,'Y' -111928,'B' -111928,'M' -111928,'Q' -111929,'F' -111929,'Y' -111929,'Q' -111929,'H' -111929,'K' -111931,'F' -111931,'Y' -111931,'B' -111931,'M' -111931,'Q' -111932,'F' -111932,'Y' -111932,'Q' -111932,'H' -111932,'K' -111933,'F' -111933,'Y' -111933,'Q' -111933,'H' -111933,'K' -111937,'F' -111937,'Y' -111937,'B' -111937,'M' -111937,'Q' -111939,'F' -111939,'Y' -111939,'B' -111939,'H' -111939,'Q' -111941,'F' -111941,'Y' -111941,'B' -111941,'M' -111941,'Q' -112028,'FN' -112028,'YN' -112028,'B' -112028,'M' -112028,'V' -112029,'F' -112029,'Y' -112029,'B' -112029,'M' -112029,'Q' -112030,'FN' -112030,'YN' -112030,'BN' -112030,'M' -112030,'Q' -112031,'FN' -112031,'YN' -112031,'BN' -112031,'M' -112031,'Q' -112032,'F' -112032,'Y' -112032,'B' -112032,'M' -112032,'V' -112033,'F' -112033,'Y' -112033,'B' -112033,'M' -112033,'Q' -112034,'F' -112034,'Y' -112034,'B' -112034,'M' -112034,'Q' -112035,'F' -112035,'Y' -112035,'B' -112035,'M' -112035,'V' -112036,'F' -112036,'Y' -112036,'Q' -112036,'H' -112036,'K' -112037,'F' -112037,'Y' -112037,'B' -112037,'M' -112037,'V' -112038,'F' -112038,'Y' -112038,'B' -112038,'M' -112038,'Q' -112039,'F' -112039,'Y' -112039,'B' -112039,'M' -112039,'Q' -112040,'F' -112040,'Y' -112040,'B' -112040,'M' -112040,'Q' -112041,'F' -112041,'Y' -112041,'Q' -112041,'H' -112041,'K' -112042,'F' -112042,'Y' -112042,'B' -112042,'M' -112042,'V' -112043,'F' -112043,'Y' -112043,'B' -112043,'M' -112043,'Q' -112044,'F' -112044,'Y' -112044,'Q' -112044,'H' -112044,'K' -112045,'F' -112045,'Y' -112045,'B' -112045,'M' -112045,'V' -112046,'F' -112046,'Y' -112046,'B' -112046,'M' -112046,'Q' -112047,'F' -112047,'Y' -112047,'B' -112047,'M' -112047,'Q' -112048,'F' -112048,'Y' -112048,'B' -112048,'M' -112048,'V' -112049,'F' -112049,'Y' -112049,'B' -112049,'M' -112049,'Q' -112050,'F' -112050,'Y' -112050,'Q' -112050,'H' -112050,'K' -112051,'FN' -112051,'YN' -112051,'BN' -112051,'M' -112051,'Q' -112052,'FN' -112052,'YN' -112052,'B' -112052,'M' -112052,'V' -112351,'F' -112351,'Y' -112351,'B' -112351,'M' -112351,'Q' -112352,'F' -112352,'Y' -112352,'B' -112352,'M' -112352,'Q' -112353,'F' -112353,'Y' -112353,'B' -112353,'M' -112353,'Q' -112354,'F' -112354,'Y' -112354,'B' -112354,'M' -112354,'Q' -112415,'F' -112415,'Y' -112415,'B' -112415,'M' -112415,'Q' -112416,'F' -112416,'Y' -112416,'Q' -112416,'H' -112416,'K' -112417,'F' -112417,'Y' -112417,'B' -112417,'M' -112417,'Q' -112418,'F' -112418,'Y' -112418,'Q' -112418,'H' -112418,'K' -112440,'F' -112440,'Y' -112440,'B' -112440,'H' -112440,'Q' -112441,'F' -112441,'Y' -112441,'B' -112441,'H' -112441,'Q' -112442,'F' -112442,'Y' -112442,'B' -112442,'H' -112442,'Q' -112513,'F' -112513,'C' -112513,'Y' -112513,'B' -112513,'M' -112514,'F' -112514,'Y' -112514,'Q' -112514,'H' -112514,'K' -112515,'F' -112515,'Y' -112515,'B' -112515,'M' -112515,'Q' -112516,'F' -112516,'Y' -112516,'B' -112516,'M' -112516,'Q' -112518,'F' -112518,'Y' -112518,'Q' -112518,'H' -112518,'K' -112519,'F' -112519,'Y' -112519,'Q' -112519,'H' -112519,'K' -112520,'F' -112520,'Y' -112520,'B' -112520,'M' -112520,'Q' -112524,'F' -112524,'Y' -112524,'B' -112524,'M' -112524,'Q' -112525,'F' -112525,'Y' -112525,'Q' -112525,'H' -112525,'K' -112526,'F' -112526,'Y' -112526,'B' -112526,'M' -112526,'Q' -112527,'F' -112527,'Q' -112527,'YN' -112527,'H' -112527,'K' -112766,'F' -112766,'Y' -112766,'B' -112766,'M' -112766,'Q' -112771,'FN' -112771,'YN' -112771,'B' -112771,'M' -112771,'V' -112772,'F' -112772,'Y' -112772,'B' -112772,'M' -112772,'Q' -112773,'F' -112773,'Y' -112773,'B' -112773,'M' -112773,'Q' -112777,'F' -112777,'Y' -112777,'B' -112777,'M' -112777,'Q' -112783,'F' -112783,'Y' -112783,'B' -112783,'M' -112783,'V' -112784,'F' -112784,'Y' -112784,'B' -112784,'M' -112784,'Q' -112789,'F' -112789,'Y' -112789,'B' -112789,'M' -112789,'V' -112790,'F' -112790,'Y' -112790,'B' -112790,'M' -112790,'Q' -112793,'F' -112793,'Y' -112793,'B' -112793,'M' -112793,'Q' -112794,'F' -112794,'Y' -112794,'B' -112794,'M' -112794,'Q' -112797,'F' -112797,'C' -112797,'B' -112797,'M' -112797,'K' -112798,'F' -112798,'Y' -112798,'B' -112798,'M' -112798,'V' -112802,'F' -112802,'Y' -112802,'B' -112802,'M' -112802,'Q' -112804,'FN' -112804,'YN' -112804,'B' -112804,'M' -112804,'V' -112805,'F' -112805,'Y' -112805,'B' -112805,'M' -112805,'Q' -112806,'FN' -112806,'YN' -112806,'BN' -112806,'M' -112806,'Q' -112807,'FN' -112807,'YN' -112807,'B' -112807,'M' -112807,'V' -112808,'FN' -112808,'YN' -112808,'BN' -112808,'M' -112808,'Q' -112864,'F' -112864,'Y' -112864,'B' -112864,'M' -112864,'V' -112866,'F' -112866,'Y' -112866,'B' -112866,'M' -112866,'Q' -112867,'F' -112867,'Y' -112867,'B' -112867,'M' -112867,'Q' -112869,'F' -112869,'Y' -112869,'B' -112869,'M' -112869,'V' -112870,'F' -112870,'Y' -112870,'B' -112870,'M' -112870,'Q' -112872,'F' -112872,'Y' -112872,'B' -112872,'M' -112872,'V' -112873,'F' -112873,'Y' -112873,'B' -112873,'M' -112873,'Q' -112874,'F' -112874,'Y' -112874,'B' -112874,'M' -112874,'V' -112903,'F' -112903,'Y' -112903,'B' -112903,'M' -112903,'V' -112904,'F' -112904,'Y' -112904,'B' -112904,'M' -112904,'Q' -112905,'F' -112905,'Y' -112905,'B' -112905,'M' -112905,'V' -112907,'F' -112907,'Y' -112907,'B' -112907,'M' -112907,'Q' -112908,'F' -112908,'Y' -112908,'B' -112908,'M' -112908,'V' -112909,'F' -112909,'Y' -112909,'B' -112909,'M' -112909,'V' -112989,'F' -112989,'Y' -112989,'Q' -112989,'H' -112989,'K' -112990,'F' -112990,'Y' -112990,'B' -112990,'M' -112990,'V' -112991,'F' -112991,'Y' -112991,'B' -112991,'M' -112991,'Q' -112992,'F' -112992,'Y' -112992,'B' -112992,'M' -112992,'Q' -112993,'F' -112993,'Y' -112993,'B' -112993,'M' -112993,'V' -112994,'F' -112994,'Y' -112994,'B' -112994,'M' -112994,'Q' -112995,'F' -112995,'Y' -112995,'B' -112995,'M' -112995,'V' -112996,'F' -112996,'Y' -112996,'Q' -112996,'H' -112996,'K' -112997,'F' -112997,'Y' -112997,'Q' -112997,'H' -112997,'K' -112998,'F' -112998,'Y' -112998,'B' -112998,'M' -112998,'Q' -112999,'F' -112999,'Y' -112999,'B' -112999,'M' -112999,'V' -113000,'F' -113000,'Y' -113000,'B' -113000,'M' -113000,'Q' -113001,'F' -113001,'Y' -113001,'B' -113001,'M' -113001,'Q' -113002,'F' -113002,'Y' -113002,'B' -113002,'M' -113002,'V' -113003,'F' -113003,'Y' -113003,'B' -113003,'M' -113003,'Q' -113004,'F' -113004,'Y' -113004,'B' -113004,'M' -113004,'Q' -113005,'F' -113005,'Y' -113005,'B' -113005,'M' -113005,'V' -113006,'F' -113006,'Y' -113006,'Q' -113006,'H' -113006,'K' -113007,'FN' -113007,'YN' -113007,'B' -113007,'M' -113007,'V' -113008,'F' -113008,'Y' -113008,'B' -113008,'M' -113008,'Q' -113009,'F' -113009,'Y' -113009,'B' -113009,'M' -113009,'Q' -113010,'F' -113010,'Y' -113010,'Q' -113010,'H' -113010,'K' -113011,'FN' -113011,'YN' -113011,'B' -113011,'M' -113011,'V' -113012,'FN' -113012,'YN' -113012,'BN' -113012,'M' -113012,'Q' -113013,'FN' -113013,'YN' -113013,'BN' -113013,'M' -113013,'Q' -113498,'F' -113498,'Y' -113498,'B' -113498,'M' -113498,'V' -113500,'F' -113500,'Y' -113500,'B' -113500,'M' -113500,'V' -113501,'FN' -113501,'YN' -113501,'B' -113501,'M' -113501,'V' -113576,'F' -113576,'Y' -113576,'B' -113576,'M' -113576,'V' -113577,'F' -113577,'Y' -113577,'B' -113577,'M' -113577,'Q' -113578,'F' -113578,'Y' -113578,'B' -113578,'M' -113578,'V' -113579,'F' -113579,'Y' -113579,'B' -113579,'M' -113579,'Q' -113581,'F' -113581,'Y' -113581,'B' -113581,'M' -113581,'V' -113582,'F' -113582,'Y' -113582,'B' -113582,'M' -113582,'V' -113583,'FN' -113583,'YN' -113583,'BN' -113583,'M' -113583,'Q' -113595,'F' -113595,'Y' -113595,'B' -113595,'M' -113595,'V' -113596,'F' -113596,'Y' -113596,'B' -113596,'H' -113596,'Q' -113597,'F' -113597,'Y' -113597,'B' -113597,'H' -113597,'Q' -113599,'F' -113599,'Y' -113599,'B' -113599,'M' -113599,'V' -113600,'F' -113600,'Y' -113600,'B' -113600,'H' -113600,'Q' -113602,'F' -113602,'Y' -113602,'B' -113602,'M' -113602,'V' -113705,'F' -113705,'Y' -113705,'B' -113705,'M' -113705,'Q' -113706,'F' -113706,'Y' -113706,'B' -113706,'M' -113706,'V' -113707,'F' -113707,'Y' -113707,'B' -113707,'M' -113707,'Q' -113709,'F' -113709,'Y' -113709,'B' -113709,'M' -113709,'V' -113711,'F' -113711,'Y' -113711,'B' -113711,'M' -113711,'V' -113712,'F' -113712,'Y' -113712,'B' -113712,'M' -113712,'Q' -113715,'F' -113715,'Y' -113715,'B' -113715,'M' -113715,'Q' -113716,'F' -113716,'Y' -113716,'B' -113716,'M' -113716,'V' -113717,'F' -113717,'Y' -113717,'B' -113717,'M' -113717,'V' -113718,'F' -113718,'Y' -113718,'B' -113718,'M' -113718,'V' -113719,'F' -113719,'Y' -113719,'B' -113719,'M' -113719,'Q' -113720,'FN' -113720,'YN' -113720,'B' -113720,'M' -113720,'V' -113721,'FN' -113721,'YN' -113721,'BN' -113721,'M' -113721,'Q' -133430,'F' -133430,'Y' -133430,'B' -133430,'M' -133430,'Q' -133431,'F' -133431,'Y' -133431,'B' -133431,'M' -133431,'Q' -133432,'F' -133432,'Y' -133432,'B' -133432,'M' -133432,'Q' -133433,'F' -133433,'Y' -133433,'B' -133433,'M' -133433,'Q' -133434,'FN' -133434,'YN' -133434,'B' -133434,'M' -133434,'V' -133435,'F' -133435,'Y' -133435,'B' -133435,'M' -133435,'V' -133436,'F' -133436,'Y' -133436,'B' -133436,'M' -133436,'V' -133567,'YN' -133567,'B' -133567,'M' -133567,'V' -133567,'Q' -133568,'Y' -133568,'B' -133568,'M' -133568,'V' -133568,'Q' -133569,'Y' -133569,'B' -133569,'M' -133569,'V' -133569,'Q' -137221,'FN' -137221,'YN' -137221,'BN' -137221,'M' -137221,'Q' -137222,'FN' -137222,'YN' -137222,'H' -137222,'QN' -137222,'K' -137223,'F' -137223,'Y' -137223,'H' -137223,'Q' -137223,'K' -137224,'F' -137224,'Y' -137224,'B' -137224,'M' -137224,'Q' -137225,'F' -137225,'Y' -137225,'B' -137225,'H' -137225,'Q' -137226,'F' -137226,'Y' -137226,'H' -137226,'Q' -137226,'K' -137227,'F' -137227,'Y' -137227,'H' -137227,'Q' -137227,'K' -137228,'F' -137228,'Y' -137228,'B' -137228,'M' -137228,'Q' -137229,'F' -137229,'Y' -137229,'H' -137229,'Q' -137229,'K' -137230,'F' -137230,'Y' -137230,'B' -137230,'M' -137230,'Q' -137231,'F' -137231,'Y' -137231,'B' -137231,'H' -137231,'Q' -137232,'F' -137232,'Y' -137232,'H' -137232,'Q' -137232,'K' -137233,'F' -137233,'Y' -137233,'B' -137233,'M' -137233,'Q' -137234,'F' -137234,'Y' -137234,'H' -137234,'Q' -137234,'K' -137235,'F' -137235,'Y' -137235,'B' -137235,'M' -137235,'Q' -137236,'F' -137236,'Y' -137236,'H' -137236,'Q' -137236,'K' -137237,'F' -137237,'Y' -137237,'B' -137237,'H' -137237,'Q' -137238,'F' -137238,'Y' -137238,'B' -137238,'M' -137238,'Q' -137315,'F' -137315,'Y' -137315,'B' -137315,'M' -137315,'Q' -137316,'F' -137316,'Y' -137316,'B' -137316,'H' -137316,'Q' -137317,'F' -137317,'Y' -137317,'M' -137317,'H' -137317,'Q' -137318,'F' -137318,'Y' -137318,'B' -137318,'H' -137318,'Q' -137319,'F' -137319,'Y' -137319,'B' -137319,'M' -137319,'Q' -137320,'F' -137320,'Y' -137320,'B' -137320,'H' -137320,'Q' -137321,'F' -137321,'Y' -137321,'M' -137321,'H' -137321,'Q' -137322,'F' -137322,'Y' -137322,'M' -137322,'H' -137322,'Q' -137323,'F' -137323,'Y' -137323,'B' -137323,'M' -137323,'Q' -137324,'F' -137324,'Y' -137324,'B' -137324,'H' -137324,'Q' -137326,'F' -137326,'Y' -137326,'B' -137326,'H' -137326,'Q' -137327,'F' -137327,'Y' -137327,'B' -137327,'H' -137327,'Q' -137328,'F' -137328,'Y' -137328,'M' -137328,'H' -137328,'Q' -137329,'F' -137329,'Y' -137329,'B' -137329,'H' -137329,'Q' -137330,'F' -137330,'C' -137330,'B' -137330,'M' -137330,'K' -137331,'F' -137331,'Y' -137331,'B' -137331,'M' -137331,'Q' -137332,'F' -137332,'Y' -137332,'M' -137332,'H' -137332,'Q' -137333,'F' -137333,'Y' -137333,'B' -137333,'H' -137333,'Q' -137334,'F' -137334,'Y' -137334,'B' -137334,'H' -137334,'Q' -137335,'F' -137335,'Y' -137335,'B' -137335,'H' -137335,'Q' -137336,'F' -137336,'Y' -137336,'B' -137336,'H' -137336,'Q' -137337,'F' -137337,'Y' -137337,'M' -137337,'H' -137337,'Q' -137338,'F' -137338,'Y' -137338,'B' -137338,'H' -137338,'Q' -137339,'FN' -137339,'YN' -137339,'BN' -137339,'M' -137339,'Q' -137353,'Y' -137353,'B' -137353,'H' -137353,'Q' -137353,'M' -137354,'Y' -137354,'B' -137354,'H' -137354,'Q' -137354,'M' -137355,'Y' -137355,'B' -137355,'H' -137355,'Q' -137355,'M' -137356,'Y' -137356,'B' -137356,'H' -137356,'Q' -137356,'M' -137357,'Y' -137357,'B' -137357,'H' -137357,'Q' -137357,'M' -137358,'Y' -137358,'B' -137358,'H' -137358,'Q' -137358,'M' -137359,'Y' -137359,'B' -137359,'H' -137359,'Q' -137359,'M' -137360,'Y' -137360,'B' -137360,'H' -137360,'Q' -137360,'M' -137361,'Y' -137361,'B' -137361,'H' -137361,'Q' -137361,'M' -137407,'F' -137407,'Y' -137407,'B' -137407,'M' -137407,'Q' -137408,'F' -137408,'Y' -137408,'Q' -137408,'H' -137408,'K' -137412,'F' -137412,'Y' -137412,'B' -137412,'M' -137412,'Q' -137413,'F' -137413,'Y' -137413,'Q' -137413,'H' -137413,'K' -137414,'F' -137414,'Y' -137414,'B' -137414,'M' -137414,'V' -137415,'F' -137415,'Y' -137415,'B' -137415,'M' -137415,'Q' -137417,'F' -137417,'Y' -137417,'B' -137417,'M' -137417,'V' -137419,'F' -137419,'Y' -137419,'B' -137419,'M' -137419,'Q' -137420,'F' -137420,'Y' -137420,'B' -137420,'M' -137420,'V' -137422,'F' -137422,'Y' -137422,'B' -137422,'M' -137422,'V' -137423,'F' -137423,'Y' -137423,'B' -137423,'M' -137423,'Q' -137732,'F' -137732,'Y' -137732,'B' -137732,'H' -137732,'Q' -137733,'F' -137733,'Y' -137733,'B' -137733,'H' -137733,'Q' -137734,'F' -137734,'Y' -137734,'B' -137734,'H' -137734,'Q' -137735,'F' -137735,'Y' -137735,'B' -137735,'H' -137735,'Q' -137736,'F' -137736,'Y' -137736,'B' -137736,'H' -137736,'Q' -137737,'F' -137737,'Y' -137737,'B' -137737,'H' -137737,'Q' -137738,'F' -137738,'Y' -137738,'B' -137738,'H' -137738,'Q' -137739,'F' -137739,'Y' -137739,'B' -137739,'H' -137739,'Q' -137740,'F' -137740,'Y' -137740,'B' -137740,'H' -137740,'Q' -137811,'F' -137811,'Y' -137811,'B' -137811,'M' -137811,'Q' -137817,'F' -137817,'Y' -137817,'B' -137817,'M' -137817,'Q' -138817,'FN' -138817,'YN' -138817,'BN' -138817,'M' -138817,'Q' -138818,'F' -138818,'Y' -138818,'H' -138818,'Q' -138818,'K' -138819,'Y' -138819,'H' -138819,'Q' -138819,'K' -138819,'L' -138820,'F' -138820,'Y' -138820,'B' -138820,'H' -138820,'Q' -138821,'F' -138821,'Y' -138821,'B' -138821,'M' -138821,'Q' -138822,'F' -138822,'Y' -138822,'H' -138822,'Q' -138822,'K' -138823,'F' -138823,'Y' -138823,'B' -138823,'M' -138823,'Q' -138824,'F' -138824,'Y' -138824,'B' -138824,'H' -138824,'Q' -138825,'Y' -138825,'H' -138825,'Q' -138825,'K' -138825,'L' -138827,'F' -138827,'Y' -138827,'B' -138827,'M' -138827,'Q' -138828,'F' -138828,'Y' -138828,'B' -138828,'H' -138828,'Q' -138829,'F' -138829,'Y' -138829,'H' -138829,'Q' -138829,'K' -138830,'FN' -138830,'YN' -138830,'BN' -138830,'M' -138830,'Q' -138831,'FN' -138831,'YN' -138831,'BN' -138831,'M' -138831,'Q' -138832,'F' -138832,'Y' -138832,'B' -138832,'H' -138832,'Q' -138860,'F' -138860,'Y' -138860,'B' -138860,'H' -138860,'Q' -138861,'F' -138861,'Y' -138861,'B' -138861,'H' -138861,'Q' -138862,'F' -138862,'Y' -138862,'B' -138862,'H' -138862,'Q' -138863,'F' -138863,'Y' -138863,'B' -138863,'H' -138863,'Q' -138864,'F' -138864,'Y' -138864,'B' -138864,'H' -138864,'Q' -138865,'F' -138865,'Y' -138865,'B' -138865,'H' -138865,'Q' -138867,'F' -138867,'Y' -138867,'B' -138867,'H' -138867,'Q' -138868,'F' -138868,'Y' -138868,'B' -138868,'H' -138868,'Q' -138878,'F' -138878,'Y' -138878,'B' -138878,'H' -138878,'Q' -138879,'F' -138879,'Y' -138879,'B' -138879,'H' -138879,'Q' -138880,'F' -138880,'Y' -138880,'B' -138880,'H' -138880,'Q' -138881,'F' -138881,'Y' -138881,'B' -138881,'H' -138881,'Q' -138882,'F' -138882,'Y' -138882,'B' -138882,'H' -138882,'Q' -138883,'F' -138883,'Y' -138883,'B' -138883,'H' -138883,'Q' -138884,'F' -138884,'Y' -138884,'B' -138884,'H' -138884,'Q' -138963,'F' -138963,'Y' -138963,'B' -138963,'H' -138963,'Q' -138964,'F' -138964,'Y' -138964,'B' -138964,'H' -138964,'Q' -138966,'F' -138966,'Y' -138966,'B' -138966,'H' -138966,'Q' -138970,'F' -138970,'Y' -138970,'B' -138970,'M' -138970,'V' -138971,'F' -138971,'Y' -138971,'B' -138971,'H' -138971,'Q' -138973,'F' -138973,'Y' -138973,'B' -138973,'M' -138973,'V' -138974,'F' -138974,'Y' -138974,'B' -138974,'H' -138974,'Q' -138976,'F' -138976,'Y' -138976,'B' -138976,'M' -138976,'V' -138977,'F' -138977,'Y' -138977,'B' -138977,'H' -138977,'Q' -139264,'F' -139264,'Y' -139264,'B' -139264,'H' -139264,'Q' -139265,'F' -139265,'Y' -139265,'B' -139265,'H' -139265,'Q' -139266,'F' -139266,'Y' -139266,'B' -139266,'H' -139266,'Q' -139267,'F' -139267,'Y' -139267,'B' -139267,'H' -139267,'Q' -139268,'F' -139268,'Y' -139268,'B' -139268,'H' -139268,'Q' -139269,'F' -139269,'Y' -139269,'B' -139269,'H' -139269,'Q' -139270,'F' -139270,'Y' -139270,'B' -139270,'H' -139270,'Q' -139271,'F' -139271,'Y' -139271,'B' -139271,'H' -139271,'Q' -139272,'F' -139272,'Y' -139272,'B' -139272,'H' -139272,'Q' -139273,'F' -139273,'Y' -139273,'B' -139273,'H' -139273,'Q' -139353,'F' -139353,'Y' -139353,'B' -139353,'H' -139353,'Q' -139355,'F' -139355,'Y' -139355,'B' -139355,'H' -139355,'Q' -139356,'F' -139356,'Y' -139356,'B' -139356,'H' -139356,'Q' -139357,'F' -139357,'Y' -139357,'B' -139357,'H' -139357,'Q' -144060,'F' -144060,'Y' -144060,'B' -144060,'M' -144060,'Q' -144061,'F' -144061,'Y' -144061,'H' -144061,'Q' -144061,'K' -144062,'F' -144062,'Y' -144062,'B' -144062,'M' -144062,'Q' -144063,'F' -144063,'Y' -144063,'B' -144063,'M' -144063,'Q' -144065,'F' -144065,'Y' -144065,'H' -144065,'Q' -144065,'K' -144066,'F' -144066,'Y' -144066,'B' -144066,'M' -144066,'Q' -144067,'FN' -144067,'YN' -144067,'BN' -144067,'M' -144067,'Q' -144069,'FN' -144069,'YN' -144069,'H' -144069,'QN' -144069,'K' -144089,'F' -144089,'Y' -144089,'B' -144089,'M' -144089,'Q' -144090,'F' -144090,'C' -144090,'Y' -144090,'B' -144090,'Q' -144094,'F' -144094,'Y' -144094,'B' -144094,'M' -144094,'Q' -144143,'F' -144143,'Y' -144143,'B' -144143,'M' -144143,'Q' -144144,'F' -144144,'Y' -144144,'Q' -144144,'H' -144144,'K' -144145,'F' -144145,'Y' -144145,'B' -144145,'M' -144145,'Q' -144146,'F' -144146,'Y' -144146,'B' -144146,'M' -144146,'Q' -144147,'F' -144147,'Y' -144147,'Q' -144147,'H' -144147,'K' -144148,'F' -144148,'C' -144148,'Y' -144148,'B' -144148,'M' -144149,'F' -144149,'Y' -144149,'Q' -144149,'H' -144149,'K' -144150,'F' -144150,'Y' -144150,'B' -144150,'M' -144150,'Q' -144151,'F' -144151,'Y' -144151,'Q' -144151,'H' -144151,'K' -144152,'F' -144152,'Y' -144152,'Q' -144152,'H' -144152,'K' -144153,'F' -144153,'Y' -144153,'B' -144153,'M' -144153,'Q' -144155,'FN' -144155,'YN' -144155,'BN' -144155,'M' -144155,'Q' -144156,'FN' -144156,'YN' -144156,'B' -144156,'M' -144156,'V' -144157,'F' -144157,'Y' -144157,'B' -144157,'M' -144157,'V' -144158,'F' -144158,'Y' -144158,'B' -144158,'M' -144158,'Q' -144159,'F' -144159,'Y' -144159,'B' -144159,'M' -144159,'V' -144162,'F' -144162,'Y' -144162,'B' -144162,'M' -144162,'V' -144163,'F' -144163,'Y' -144163,'B' -144163,'M' -144163,'Q' -144164,'F' -144164,'Y' -144164,'B' -144164,'M' -144164,'V' -144165,'F' -144165,'Y' -144165,'B' -144165,'M' -144165,'Q' -144166,'F' -144166,'Y' -144166,'B' -144166,'M' -144166,'V' -144167,'F' -144167,'Y' -144167,'B' -144167,'M' -144167,'Q' -144168,'F' -144168,'Y' -144168,'B' -144168,'M' -144168,'V' -144169,'F' -144169,'Y' -144169,'B' -144169,'M' -144169,'Q' -144477,'Y' -144477,'B' -144477,'M' -144477,'V' -144477,'Q' -144478,'Y' -144478,'B' -144478,'M' -144478,'V' -144478,'Q' -144479,'Y' -144479,'B' -144479,'M' -144479,'V' -144479,'Q' -144480,'YN' -144480,'B' -144480,'M' -144480,'V' -144480,'Q' -144541,'F' -144541,'Y' -144541,'B' -144541,'M' -144541,'Q' -144547,'F' -144547,'Y' -144547,'B' -144547,'M' -144547,'Q' -144572,'F' -144572,'Y' -144572,'B' -144572,'H' -144572,'Q' -144574,'F' -144574,'Y' -144574,'B' -144574,'H' -144574,'Q' -144575,'F' -144575,'Y' -144575,'B' -144575,'H' -144575,'Q' -144576,'F' -144576,'Y' -144576,'B' -144576,'H' -144576,'Q' -101908,'FN' -101908,'YN' -101908,'BN' -101908,'M' -101908,'Q' -101913,'F' -101913,'Y' -101913,'B' -101913,'M' -101913,'Q' -101924,'F' -101924,'Y' -101924,'B' -101924,'M' -101924,'Q' -102674,'F' -102674,'Y' -102674,'B' -102674,'M' -102674,'Q' -105810,'F' -105810,'Y' -105810,'B' -105810,'M' -105810,'Q' -106262,'F' -106262,'Y' -106262,'B' -106262,'H' -106262,'Q' -106270,'F' -106270,'Y' -106270,'B' -106270,'H' -106270,'Q' -106366,'F' -106366,'Y' -106366,'B' -106366,'M' -106366,'Q' -106373,'F' -106373,'Y' -106373,'B' -106373,'M' -106373,'V' -106375,'F' -106375,'Y' -106375,'Q' -106375,'H' -106375,'K' -107253,'F' -107253,'Y' -107253,'B' -107253,'H' -107253,'Q' -111924,'FN' -111924,'YN' -111924,'BN' -111924,'M' -111924,'Q' -111930,'F' -111930,'Y' -111930,'B' -111930,'H' -111930,'Q' -112413,'FN' -112413,'YN' -112413,'BN' -112413,'M' -112413,'Q' -113499,'F' -113499,'Y' -113499,'B' -113499,'M' -113499,'Q' -113710,'F' -113710,'Y' -113710,'Q' -113710,'H' -113710,'K' -113713,'F' -113713,'Y' -113713,'B' -113713,'M' -113713,'Q' -133423,'F' -133423,'Y' -133423,'B' -133423,'M' -133423,'Q' -133516,'F' -133516,'Y' -133516,'B' -133516,'M' -133516,'V' -137410,'F' -137410,'Y' -137410,'B' -137410,'M' -137410,'Q' -137685,'F' -137685,'Y' -137685,'B' -137685,'M' -137685,'V' -137814,'F' -137814,'Y' -137814,'B' -137814,'H' -137814,'Q' -138866,'F' -138866,'Y' -138866,'B' -138866,'H' -138866,'Q' -138965,'F' -138965,'Y' -138965,'B' -138965,'M' -138965,'V' -144059,'F' -144059,'Y' -144059,'B' -144059,'M' -144059,'V' -144087,'FN' -144087,'YN' -144087,'B' -144087,'M' -144087,'V' -144088,'F' -144088,'Y' -144088,'Q' -144088,'H' -144088,'K' -144092,'F' -144092,'Y' -144092,'B' -144092,'M' -144092,'Q' -144093,'F' -144093,'Y' -144093,'B' -144093,'H' -144093,'Q' -144095,'F' -144095,'Y' -144095,'B' -144095,'M' -144095,'Q' -144110,'F' -144110,'Y' -144110,'B' -144110,'H' -144110,'Q' -144160,'F' -144160,'Y' -144160,'B' -144160,'M' -144160,'Q' -144161,'F' -144161,'Y' -144161,'B' -144161,'M' -144161,'Q' -144543,'F' -144543,'Y' -144543,'B' -144543,'H' -144543,'Q' diff --git a/sql-bench/Data/ATIS/flight_day.txt b/sql-bench/Data/ATIS/flight_day.txt deleted file mode 100644 index ef181d112c1c93efdc90bc54589248c43482ac0e..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/flight_day.txt +++ /dev/null @@ -1,448 +0,0 @@ -'1234567',1,'MONDAY' -'1234567',2,'TUESDAY' -'1234567',3,'WEDNESDAY' -'1234567',4,'THURSDAY' -'1234567',5,'FRIDAY' -'1234567',6,'SATURDAY' -'1234567',7,'SUNDAY' -'-234567',2,'TUESDAY' -'-234567',3,'WEDNESDAY' -'-234567',4,'THURSDAY' -'-234567',5,'FRIDAY' -'-234567',6,'SATURDAY' -'-234567',7,'SUNDAY' -'1-34567',1,'MONDAY' -'1-34567',3,'WEDNESDAY' -'1-34567',4,'THURSDAY' -'1-34567',5,'FRIDAY' -'1-34567',6,'SATURDAY' -'1-34567',7,'SUNDAY' -'--34567',3,'WEDNESDAY' -'--34567',4,'THURSDAY' -'--34567',5,'FRIDAY' -'--34567',6,'SATURDAY' -'--34567',7,'SUNDAY' -'12-4567',1,'MONDAY' -'12-4567',2,'TUESDAY' -'12-4567',4,'THURSDAY' -'12-4567',5,'FRIDAY' -'12-4567',6,'SATURDAY' -'12-4567',7,'SUNDAY' -'-2-4567',2,'TUESDAY' -'-2-4567',4,'THURSDAY' -'-2-4567',5,'FRIDAY' -'-2-4567',6,'SATURDAY' -'-2-4567',7,'SUNDAY' -'1--4567',1,'MONDAY' -'1--4567',4,'THURSDAY' -'1--4567',5,'FRIDAY' -'1--4567',6,'SATURDAY' -'1--4567',7,'SUNDAY' -'---4567',4,'THURSDAY' -'---4567',5,'FRIDAY' -'---4567',6,'SATURDAY' -'---4567',7,'SUNDAY' -'123-567',1,'MONDAY' -'123-567',2,'TUESDAY' -'123-567',3,'WEDNESDAY' -'123-567',5,'FRIDAY' -'123-567',6,'SATURDAY' -'123-567',7,'SUNDAY' -'-23-567',2,'TUESDAY' -'-23-567',3,'WEDNESDAY' -'-23-567',5,'FRIDAY' -'-23-567',6,'SATURDAY' -'-23-567',7,'SUNDAY' -'1-3-567',1,'MONDAY' -'1-3-567',3,'WEDNESDAY' -'1-3-567',5,'FRIDAY' -'1-3-567',6,'SATURDAY' -'1-3-567',7,'SUNDAY' -'--3-567',3,'WEDNESDAY' -'--3-567',5,'FRIDAY' -'--3-567',6,'SATURDAY' -'--3-567',7,'SUNDAY' -'12--567',1,'MONDAY' -'12--567',2,'TUESDAY' -'12--567',5,'FRIDAY' -'12--567',6,'SATURDAY' -'12--567',7,'SUNDAY' -'-2--567',2,'TUESDAY' -'-2--567',5,'FRIDAY' -'-2--567',6,'SATURDAY' -'-2--567',7,'SUNDAY' -'1---567',1,'MONDAY' -'1---567',5,'FRIDAY' -'1---567',6,'SATURDAY' -'1---567',7,'SUNDAY' -'----567',5,'FRIDAY' -'----567',6,'SATURDAY' -'----567',7,'SUNDAY' -'1234-67',1,'MONDAY' -'1234-67',2,'TUESDAY' -'1234-67',3,'WEDNESDAY' -'1234-67',4,'THURSDAY' -'1234-67',6,'SATURDAY' -'1234-67',7,'SUNDAY' -'-234-67',2,'TUESDAY' -'-234-67',3,'WEDNESDAY' -'-234-67',4,'THURSDAY' -'-234-67',6,'SATURDAY' -'-234-67',7,'SUNDAY' -'1-34-67',1,'MONDAY' -'1-34-67',3,'WEDNESDAY' -'1-34-67',4,'THURSDAY' -'1-34-67',6,'SATURDAY' -'1-34-67',7,'SUNDAY' -'--34-67',3,'WEDNESDAY' -'--34-67',4,'THURSDAY' -'--34-67',6,'SATURDAY' -'--34-67',7,'SUNDAY' -'12-4-67',1,'MONDAY' -'12-4-67',2,'TUESDAY' -'12-4-67',4,'THURSDAY' -'12-4-67',6,'SATURDAY' -'12-4-67',7,'SUNDAY' -'-2-4-67',2,'TUESDAY' -'-2-4-67',4,'THURSDAY' -'-2-4-67',6,'SATURDAY' -'-2-4-67',7,'SUNDAY' -'1--4-67',1,'MONDAY' -'1--4-67',4,'THURSDAY' -'1--4-67',6,'SATURDAY' -'1--4-67',7,'SUNDAY' -'---4-67',4,'THURSDAY' -'---4-67',6,'SATURDAY' -'---4-67',7,'SUNDAY' -'123--67',1,'MONDAY' -'123--67',2,'TUESDAY' -'123--67',3,'WEDNESDAY' -'123--67',6,'SATURDAY' -'123--67',7,'SUNDAY' -'-23--67',2,'TUESDAY' -'-23--67',3,'WEDNESDAY' -'-23--67',6,'SATURDAY' -'-23--67',7,'SUNDAY' -'1-3--67',1,'MONDAY' -'1-3--67',3,'WEDNESDAY' -'1-3--67',6,'SATURDAY' -'1-3--67',7,'SUNDAY' -'--3--67',3,'WEDNESDAY' -'--3--67',6,'SATURDAY' -'--3--67',7,'SUNDAY' -'12---67',1,'MONDAY' -'12---67',2,'TUESDAY' -'12---67',6,'SATURDAY' -'12---67',7,'SUNDAY' -'-2---67',2,'TUESDAY' -'-2---67',6,'SATURDAY' -'-2---67',7,'SUNDAY' -'1----67',1,'MONDAY' -'1----67',6,'SATURDAY' -'1----67',7,'SUNDAY' -'-----67',6,'SATURDAY' -'-----67',7,'SUNDAY' -'12345-7',1,'MONDAY' -'12345-7',2,'TUESDAY' -'12345-7',3,'WEDNESDAY' -'12345-7',4,'THURSDAY' -'12345-7',5,'FRIDAY' -'12345-7',7,'SUNDAY' -'-2345-7',2,'TUESDAY' -'-2345-7',3,'WEDNESDAY' -'-2345-7',4,'THURSDAY' -'-2345-7',5,'FRIDAY' -'-2345-7',7,'SUNDAY' -'1-345-7',1,'MONDAY' -'1-345-7',3,'WEDNESDAY' -'1-345-7',4,'THURSDAY' -'1-345-7',5,'FRIDAY' -'1-345-7',7,'SUNDAY' -'--345-7',3,'WEDNESDAY' -'--345-7',4,'THURSDAY' -'--345-7',5,'FRIDAY' -'--345-7',7,'SUNDAY' -'12-45-7',1,'MONDAY' -'12-45-7',2,'TUESDAY' -'12-45-7',4,'THURSDAY' -'12-45-7',5,'FRIDAY' -'12-45-7',7,'SUNDAY' -'-2-45-7',2,'TUESDAY' -'-2-45-7',4,'THURSDAY' -'-2-45-7',5,'FRIDAY' -'-2-45-7',7,'SUNDAY' -'1--45-7',1,'MONDAY' -'1--45-7',4,'THURSDAY' -'1--45-7',5,'FRIDAY' -'1--45-7',7,'SUNDAY' -'---45-7',4,'THURSDAY' -'---45-7',5,'FRIDAY' -'---45-7',7,'SUNDAY' -'123-5-7',1,'MONDAY' -'123-5-7',2,'TUESDAY' -'123-5-7',3,'WEDNESDAY' -'123-5-7',5,'FRIDAY' -'123-5-7',7,'SUNDAY' -'-23-5-7',2,'TUESDAY' -'-23-5-7',3,'WEDNESDAY' -'-23-5-7',5,'FRIDAY' -'-23-5-7',7,'SUNDAY' -'1-3-5-7',1,'MONDAY' -'1-3-5-7',3,'WEDNESDAY' -'1-3-5-7',5,'FRIDAY' -'1-3-5-7',7,'SUNDAY' -'--3-5-7',3,'WEDNESDAY' -'--3-5-7',5,'FRIDAY' -'--3-5-7',7,'SUNDAY' -'12--5-7',1,'MONDAY' -'12--5-7',2,'TUESDAY' -'12--5-7',5,'FRIDAY' -'12--5-7',7,'SUNDAY' -'-2--5-7',2,'TUESDAY' -'-2--5-7',5,'FRIDAY' -'-2--5-7',7,'SUNDAY' -'1---5-7',1,'MONDAY' -'1---5-7',5,'FRIDAY' -'1---5-7',7,'SUNDAY' -'----5-7',5,'FRIDAY' -'----5-7',7,'SUNDAY' -'1234--7',1,'MONDAY' -'1234--7',2,'TUESDAY' -'1234--7',3,'WEDNESDAY' -'1234--7',4,'THURSDAY' -'1234--7',7,'SUNDAY' -'-234--7',2,'TUESDAY' -'-234--7',3,'WEDNESDAY' -'-234--7',4,'THURSDAY' -'-234--7',7,'SUNDAY' -'1-34--7',1,'MONDAY' -'1-34--7',3,'WEDNESDAY' -'1-34--7',4,'THURSDAY' -'1-34--7',7,'SUNDAY' -'--34--7',3,'WEDNESDAY' -'--34--7',4,'THURSDAY' -'--34--7',7,'SUNDAY' -'12-4--7',1,'MONDAY' -'12-4--7',2,'TUESDAY' -'12-4--7',4,'THURSDAY' -'12-4--7',7,'SUNDAY' -'-2-4--7',2,'TUESDAY' -'-2-4--7',4,'THURSDAY' -'-2-4--7',7,'SUNDAY' -'1--4--7',1,'MONDAY' -'1--4--7',4,'THURSDAY' -'1--4--7',7,'SUNDAY' -'---4--7',4,'THURSDAY' -'---4--7',7,'SUNDAY' -'123---7',1,'MONDAY' -'123---7',2,'TUESDAY' -'123---7',3,'WEDNESDAY' -'123---7',7,'SUNDAY' -'-23---7',2,'TUESDAY' -'-23---7',3,'WEDNESDAY' -'-23---7',7,'SUNDAY' -'1-3---7',1,'MONDAY' -'1-3---7',3,'WEDNESDAY' -'1-3---7',7,'SUNDAY' -'--3---7',3,'WEDNESDAY' -'--3---7',7,'SUNDAY' -'12----7',1,'MONDAY' -'12----7',2,'TUESDAY' -'12----7',7,'SUNDAY' -'-2----7',2,'TUESDAY' -'-2----7',7,'SUNDAY' -'1-----7',1,'MONDAY' -'1-----7',7,'SUNDAY' -'------7',7,'SUNDAY' -'123456-',1,'MONDAY' -'123456-',2,'TUESDAY' -'123456-',3,'WEDNESDAY' -'123456-',4,'THURSDAY' -'123456-',5,'FRIDAY' -'123456-',6,'SATURDAY' -'-23456-',2,'TUESDAY' -'-23456-',3,'WEDNESDAY' -'-23456-',4,'THURSDAY' -'-23456-',5,'FRIDAY' -'-23456-',6,'SATURDAY' -'1-3456-',1,'MONDAY' -'1-3456-',3,'WEDNESDAY' -'1-3456-',4,'THURSDAY' -'1-3456-',5,'FRIDAY' -'1-3456-',6,'SATURDAY' -'--3456-',3,'WEDNESDAY' -'--3456-',4,'THURSDAY' -'--3456-',5,'FRIDAY' -'--3456-',6,'SATURDAY' -'12-456-',1,'MONDAY' -'12-456-',2,'TUESDAY' -'12-456-',4,'THURSDAY' -'12-456-',5,'FRIDAY' -'12-456-',6,'SATURDAY' -'-2-456-',2,'TUESDAY' -'-2-456-',4,'THURSDAY' -'-2-456-',5,'FRIDAY' -'-2-456-',6,'SATURDAY' -'1--456-',1,'MONDAY' -'1--456-',4,'THURSDAY' -'1--456-',5,'FRIDAY' -'1--456-',6,'SATURDAY' -'---456-',4,'THURSDAY' -'---456-',5,'FRIDAY' -'---456-',6,'SATURDAY' -'123-56-',1,'MONDAY' -'123-56-',2,'TUESDAY' -'123-56-',3,'WEDNESDAY' -'123-56-',5,'FRIDAY' -'123-56-',6,'SATURDAY' -'-23-56-',2,'TUESDAY' -'-23-56-',3,'WEDNESDAY' -'-23-56-',5,'FRIDAY' -'-23-56-',6,'SATURDAY' -'1-3-56-',1,'MONDAY' -'1-3-56-',3,'WEDNESDAY' -'1-3-56-',5,'FRIDAY' -'1-3-56-',6,'SATURDAY' -'--3-56-',3,'WEDNESDAY' -'--3-56-',5,'FRIDAY' -'--3-56-',6,'SATURDAY' -'12--56-',1,'MONDAY' -'12--56-',2,'TUESDAY' -'12--56-',5,'FRIDAY' -'12--56-',6,'SATURDAY' -'-2--56-',2,'TUESDAY' -'-2--56-',5,'FRIDAY' -'-2--56-',6,'SATURDAY' -'1---56-',1,'MONDAY' -'1---56-',5,'FRIDAY' -'1---56-',6,'SATURDAY' -'----56-',5,'FRIDAY' -'----56-',6,'SATURDAY' -'1234-6-',1,'MONDAY' -'1234-6-',2,'TUESDAY' -'1234-6-',3,'WEDNESDAY' -'1234-6-',4,'THURSDAY' -'1234-6-',6,'SATURDAY' -'-234-6-',2,'TUESDAY' -'-234-6-',3,'WEDNESDAY' -'-234-6-',4,'THURSDAY' -'-234-6-',6,'SATURDAY' -'1-34-6-',1,'MONDAY' -'1-34-6-',3,'WEDNESDAY' -'1-34-6-',4,'THURSDAY' -'1-34-6-',6,'SATURDAY' -'--34-6-',3,'WEDNESDAY' -'--34-6-',4,'THURSDAY' -'--34-6-',6,'SATURDAY' -'12-4-6-',1,'MONDAY' -'12-4-6-',2,'TUESDAY' -'12-4-6-',4,'THURSDAY' -'12-4-6-',6,'SATURDAY' -'-2-4-6-',2,'TUESDAY' -'-2-4-6-',4,'THURSDAY' -'-2-4-6-',6,'SATURDAY' -'1--4-6-',1,'MONDAY' -'1--4-6-',4,'THURSDAY' -'1--4-6-',6,'SATURDAY' -'---4-6-',4,'THURSDAY' -'---4-6-',6,'SATURDAY' -'123--6-',1,'MONDAY' -'123--6-',2,'TUESDAY' -'123--6-',3,'WEDNESDAY' -'123--6-',6,'SATURDAY' -'-23--6-',2,'TUESDAY' -'-23--6-',3,'WEDNESDAY' -'-23--6-',6,'SATURDAY' -'1-3--6-',1,'MONDAY' -'1-3--6-',3,'WEDNESDAY' -'1-3--6-',6,'SATURDAY' -'--3--6-',3,'WEDNESDAY' -'--3--6-',6,'SATURDAY' -'12---6-',1,'MONDAY' -'12---6-',2,'TUESDAY' -'12---6-',6,'SATURDAY' -'-2---6-',2,'TUESDAY' -'-2---6-',6,'SATURDAY' -'1----6-',1,'MONDAY' -'1----6-',6,'SATURDAY' -'-----6-',6,'SATURDAY' -'12345--',1,'MONDAY' -'12345--',2,'TUESDAY' -'12345--',3,'WEDNESDAY' -'12345--',4,'THURSDAY' -'12345--',5,'FRIDAY' -'-2345--',2,'TUESDAY' -'-2345--',3,'WEDNESDAY' -'-2345--',4,'THURSDAY' -'-2345--',5,'FRIDAY' -'1-345--',1,'MONDAY' -'1-345--',3,'WEDNESDAY' -'1-345--',4,'THURSDAY' -'1-345--',5,'FRIDAY' -'--345--',3,'WEDNESDAY' -'--345--',4,'THURSDAY' -'--345--',5,'FRIDAY' -'12-45--',1,'MONDAY' -'12-45--',2,'TUESDAY' -'12-45--',4,'THURSDAY' -'12-45--',5,'FRIDAY' -'-2-45--',2,'TUESDAY' -'-2-45--',4,'THURSDAY' -'-2-45--',5,'FRIDAY' -'1--45--',1,'MONDAY' -'1--45--',4,'THURSDAY' -'1--45--',5,'FRIDAY' -'---45--',4,'THURSDAY' -'---45--',5,'FRIDAY' -'123-5--',1,'MONDAY' -'123-5--',2,'TUESDAY' -'123-5--',3,'WEDNESDAY' -'123-5--',5,'FRIDAY' -'-23-5--',2,'TUESDAY' -'-23-5--',3,'WEDNESDAY' -'-23-5--',5,'FRIDAY' -'1-3-5--',1,'MONDAY' -'1-3-5--',3,'WEDNESDAY' -'1-3-5--',5,'FRIDAY' -'--3-5--',3,'WEDNESDAY' -'--3-5--',5,'FRIDAY' -'12--5--',1,'MONDAY' -'12--5--',2,'TUESDAY' -'12--5--',5,'FRIDAY' -'-2--5--',2,'TUESDAY' -'-2--5--',5,'FRIDAY' -'1---5--',1,'MONDAY' -'1---5--',5,'FRIDAY' -'----5--',5,'FRIDAY' -'1234---',1,'MONDAY' -'1234---',2,'TUESDAY' -'1234---',3,'WEDNESDAY' -'1234---',4,'THURSDAY' -'-234---',2,'TUESDAY' -'-234---',3,'WEDNESDAY' -'-234---',4,'THURSDAY' -'1-34---',1,'MONDAY' -'1-34---',3,'WEDNESDAY' -'1-34---',4,'THURSDAY' -'--34---',3,'WEDNESDAY' -'--34---',4,'THURSDAY' -'12-4---',1,'MONDAY' -'12-4---',2,'TUESDAY' -'12-4---',4,'THURSDAY' -'-2-4---',2,'TUESDAY' -'-2-4---',4,'THURSDAY' -'1--4---',1,'MONDAY' -'1--4---',4,'THURSDAY' -'---4---',4,'THURSDAY' -'123----',1,'MONDAY' -'123----',2,'TUESDAY' -'123----',3,'WEDNESDAY' -'-23----',2,'TUESDAY' -'-23----',3,'WEDNESDAY' -'1-3----',1,'MONDAY' -'1-3----',3,'WEDNESDAY' -'--3----',3,'WEDNESDAY' -'12-----',1,'MONDAY' -'12-----',2,'TUESDAY' -'-2-----',2,'TUESDAY' -'1------',1,'MONDAY' diff --git a/sql-bench/Data/ATIS/flight_fare.txt b/sql-bench/Data/ATIS/flight_fare.txt deleted file mode 100644 index 1ca85f9b9e9670b2798ff17727d1ec18061573a3..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/flight_fare.txt +++ /dev/null @@ -1,2998 +0,0 @@ -101910,'7100001' -101911,'7100001' -101912,'7100001' -101915,'7100001' -101916,'7100001' -101917,'7100001' -101918,'7100001' -101922,'7100001' -101923,'7100001' -101925,'7100001' -101926,'7100001' -101927,'7100001' -101928,'7100001' -101913,'7100001' -101924,'7100001' -101909,'7100002' -101929,'7100002' -101908,'7100002' -101910,'7100003' -101911,'7100003' -101912,'7100003' -101914,'7100003' -101915,'7100003' -101916,'7100003' -101917,'7100003' -101918,'7100003' -101922,'7100003' -101923,'7100003' -101925,'7100003' -101926,'7100003' -101927,'7100003' -101928,'7100003' -101913,'7100003' -101924,'7100003' -101909,'7100004' -101929,'7100004' -101908,'7100004' -101910,'7100005' -101911,'7100005' -101914,'7100005' -101915,'7100005' -101918,'7100005' -101923,'7100005' -101926,'7100005' -101910,'7100006' -101911,'7100006' -101914,'7100006' -101915,'7100006' -101918,'7100006' -101923,'7100006' -101926,'7100006' -101908,'7100007' -101913,'7100007' -101924,'7100007' -101909,'7100007' -101910,'7100007' -101911,'7100007' -101912,'7100007' -101914,'7100007' -101915,'7100007' -101916,'7100007' -101917,'7100007' -101918,'7100007' -101922,'7100007' -101923,'7100007' -101925,'7100007' -101926,'7100007' -101927,'7100007' -101928,'7100007' -101929,'7100007' -101908,'7100008' -101913,'7100008' -101924,'7100008' -101909,'7100008' -101910,'7100008' -101911,'7100008' -101912,'7100008' -101914,'7100008' -101915,'7100008' -101917,'7100008' -101918,'7100008' -101922,'7100008' -101923,'7100008' -101925,'7100008' -101926,'7100008' -101928,'7100008' -101929,'7100008' -101913,'7100009' -101924,'7100009' -101912,'7100009' -101916,'7100009' -101917,'7100009' -101922,'7100009' -101925,'7100009' -101927,'7100009' -101928,'7100009' -101913,'7100010' -101924,'7100010' -101910,'7100010' -101911,'7100010' -101912,'7100010' -101914,'7100010' -101915,'7100010' -101916,'7100010' -101917,'7100010' -101918,'7100010' -101922,'7100010' -101923,'7100010' -101925,'7100010' -101926,'7100010' -101927,'7100010' -101928,'7100010' -101951,'7100011' -101952,'7100011' -101953,'7100011' -101954,'7100011' -101955,'7100011' -101956,'7100011' -101957,'7100011' -101958,'7100011' -101959,'7100012' -101951,'7100013' -101952,'7100013' -101953,'7100013' -101954,'7100013' -101955,'7100013' -101956,'7100013' -101957,'7100013' -101958,'7100013' -101959,'7100014' -101951,'7100015' -101952,'7100015' -101953,'7100015' -101954,'7100015' -101955,'7100015' -101956,'7100015' -101957,'7100015' -101958,'7100015' -101951,'7100016' -101952,'7100016' -101953,'7100016' -101954,'7100016' -101955,'7100016' -101956,'7100016' -101957,'7100016' -101958,'7100016' -101952,'7100017' -101953,'7100017' -101955,'7100017' -101958,'7100017' -101951,'7100018' -101952,'7100018' -101953,'7100018' -101954,'7100018' -101955,'7100018' -101956,'7100018' -101957,'7100018' -101958,'7100018' -102125,'7100019' -102129,'7100019' -102122,'7100020' -102123,'7100020' -102126,'7100020' -102127,'7100020' -102128,'7100020' -102133,'7100020' -102134,'7100021' -102135,'7100021' -102125,'7100022' -102129,'7100022' -102122,'7100023' -102123,'7100023' -102126,'7100023' -102127,'7100023' -102128,'7100023' -102133,'7100023' -102122,'7100024' -102126,'7100024' -102127,'7100024' -102133,'7100024' -102123,'7100025' -102128,'7100025' -102134,'7100025' -102122,'7100026' -102126,'7100026' -102127,'7100026' -102133,'7100026' -102135,'7100026' -102134,'7100027' -102135,'7100027' -102122,'7100028' -102125,'7100028' -102126,'7100028' -102127,'7100028' -102129,'7100028' -102133,'7100028' -102135,'7100028' -102122,'7100029' -102125,'7100029' -102126,'7100029' -102127,'7100029' -102129,'7100029' -102133,'7100029' -102135,'7100029' -102122,'7100030' -102123,'7100030' -102125,'7100030' -102126,'7100030' -102127,'7100030' -102128,'7100030' -102129,'7100030' -102133,'7100030' -102135,'7100030' -102122,'7100031' -102123,'7100031' -102125,'7100031' -102126,'7100031' -102127,'7100031' -102128,'7100031' -102129,'7100031' -102133,'7100031' -102135,'7100031' -102122,'7100032' -102125,'7100032' -102126,'7100032' -102127,'7100032' -102129,'7100032' -102133,'7100032' -102122,'7100033' -102123,'7100033' -102125,'7100033' -102126,'7100033' -102127,'7100033' -102128,'7100033' -102129,'7100033' -102133,'7100033' -102122,'7100034' -102125,'7100034' -102126,'7100034' -102127,'7100034' -102129,'7100034' -102133,'7100034' -102123,'7100035' -102128,'7100035' -102134,'7100035' -102139,'7100036' -102147,'7100036' -102164,'7100036' -102172,'7100036' -102144,'7100037' -102148,'7100037' -102150,'7100037' -102162,'7100037' -102163,'7100037' -102166,'7100037' -102173,'7100037' -102177,'7100037' -102165,'7100038' -102188,'7100039' -102136,'7100040' -102137,'7100040' -102190,'7100040' -102191,'7100040' -102192,'7100040' -102139,'7100041' -102147,'7100041' -102164,'7100041' -102172,'7100041' -102144,'7100042' -102148,'7100042' -102150,'7100042' -102162,'7100042' -102163,'7100042' -102166,'7100042' -102173,'7100042' -102177,'7100042' -102188,'7100043' -102136,'7100044' -102137,'7100044' -102190,'7100044' -102191,'7100044' -102192,'7100044' -102136,'7100045' -102144,'7100045' -102148,'7100045' -102150,'7100045' -102162,'7100045' -102166,'7100045' -102173,'7100045' -102177,'7100045' -102190,'7100045' -102191,'7100045' -102192,'7100045' -102136,'7100046' -102137,'7100046' -102144,'7100046' -102148,'7100046' -102150,'7100046' -102162,'7100046' -102163,'7100046' -102166,'7100046' -102173,'7100046' -102177,'7100046' -102190,'7100046' -102191,'7100046' -102192,'7100046' -102144,'7100047' -102148,'7100047' -102150,'7100047' -102162,'7100047' -102163,'7100047' -102165,'7100047' -102166,'7100047' -102173,'7100047' -102177,'7100047' -102139,'7100048' -102147,'7100048' -102164,'7100048' -102172,'7100048' -102136,'7100049' -102137,'7100049' -102144,'7100049' -102148,'7100049' -102150,'7100049' -102162,'7100049' -102163,'7100049' -102165,'7100049' -102166,'7100049' -102173,'7100049' -102177,'7100049' -102190,'7100049' -102191,'7100049' -102192,'7100049' -102144,'7100050' -102148,'7100050' -102150,'7100050' -102162,'7100050' -102163,'7100050' -102166,'7100050' -102173,'7100050' -102177,'7100050' -102674,'7100051' -102674,'7100052' -102674,'7100053' -102674,'7100054' -102674,'7100055' -102674,'7100056' -102674,'7100057' -102767,'7100058' -102771,'7100058' -102777,'7100058' -102768,'7100059' -102769,'7100059' -102770,'7100059' -102772,'7100059' -102773,'7100059' -102774,'7100059' -102775,'7100059' -102776,'7100059' -102778,'7100059' -102779,'7100059' -102781,'7100059' -102782,'7100059' -102766,'7100060' -102783,'7100060' -102784,'7100060' -102768,'7100061' -102769,'7100061' -102770,'7100061' -102772,'7100061' -102773,'7100061' -102774,'7100061' -102775,'7100061' -102776,'7100061' -102778,'7100061' -102779,'7100061' -102781,'7100061' -102782,'7100061' -102767,'7100062' -102771,'7100062' -102777,'7100062' -102766,'7100063' -102783,'7100063' -102784,'7100063' -102768,'7100064' -102769,'7100064' -102772,'7100064' -102774,'7100064' -102775,'7100064' -102778,'7100064' -102781,'7100064' -102783,'7100064' -102766,'7100065' -102767,'7100065' -102768,'7100065' -102769,'7100065' -102770,'7100065' -102771,'7100065' -102772,'7100065' -102773,'7100065' -102774,'7100065' -102775,'7100065' -102776,'7100065' -102777,'7100065' -102778,'7100065' -102779,'7100065' -102781,'7100065' -102782,'7100065' -102784,'7100065' -102766,'7100066' -102767,'7100066' -102768,'7100066' -102769,'7100066' -102770,'7100066' -102771,'7100066' -102772,'7100066' -102773,'7100066' -102774,'7100066' -102775,'7100066' -102776,'7100066' -102777,'7100066' -102778,'7100066' -102779,'7100066' -102781,'7100066' -102782,'7100066' -102784,'7100066' -102768,'7100067' -102769,'7100067' -102772,'7100067' -102774,'7100067' -102775,'7100067' -102778,'7100067' -102781,'7100067' -102783,'7100067' -102766,'7100068' -102767,'7100068' -102768,'7100068' -102769,'7100068' -102770,'7100068' -102771,'7100068' -102772,'7100068' -102773,'7100068' -102774,'7100068' -102775,'7100068' -102776,'7100068' -102777,'7100068' -102778,'7100068' -102779,'7100068' -102781,'7100068' -102782,'7100068' -102784,'7100068' -102766,'7100069' -102767,'7100069' -102768,'7100069' -102769,'7100069' -102770,'7100069' -102771,'7100069' -102772,'7100069' -102773,'7100069' -102774,'7100069' -102775,'7100069' -102776,'7100069' -102777,'7100069' -102778,'7100069' -102779,'7100069' -102781,'7100069' -102782,'7100069' -102784,'7100069' -102767,'7100070' -102770,'7100070' -102771,'7100070' -102773,'7100070' -102776,'7100070' -102777,'7100070' -102779,'7100070' -102782,'7100070' -102767,'7100071' -102768,'7100071' -102769,'7100071' -102770,'7100071' -102771,'7100071' -102772,'7100071' -102773,'7100071' -102774,'7100071' -102775,'7100071' -102776,'7100071' -102777,'7100071' -102778,'7100071' -102779,'7100071' -102781,'7100071' -102782,'7100071' -102795,'7100072' -102796,'7100072' -102797,'7100072' -102798,'7100072' -102799,'7100072' -102800,'7100072' -102801,'7100072' -102802,'7100072' -102803,'7100072' -102805,'7100072' -102806,'7100072' -102807,'7100072' -102808,'7100073' -102809,'7100073' -102795,'7100074' -102796,'7100074' -102797,'7100074' -102798,'7100074' -102799,'7100074' -102800,'7100074' -102801,'7100074' -102802,'7100074' -102803,'7100074' -102804,'7100074' -102805,'7100074' -102806,'7100074' -102807,'7100074' -102808,'7100075' -102809,'7100075' -102797,'7100076' -102799,'7100076' -102804,'7100076' -102806,'7100076' -102808,'7100076' -102795,'7100077' -102796,'7100077' -102797,'7100077' -102798,'7100077' -102799,'7100077' -102800,'7100077' -102801,'7100077' -102802,'7100077' -102804,'7100077' -102805,'7100077' -102806,'7100077' -102807,'7100077' -102809,'7100077' -102797,'7100078' -102799,'7100078' -102804,'7100078' -102806,'7100078' -102808,'7100078' -102795,'7100079' -102796,'7100079' -102797,'7100079' -102798,'7100079' -102799,'7100079' -102800,'7100079' -102801,'7100079' -102803,'7100079' -102804,'7100079' -102805,'7100079' -102806,'7100079' -102807,'7100079' -102809,'7100079' -102795,'7100080' -102796,'7100080' -102798,'7100080' -102800,'7100080' -102801,'7100080' -102802,'7100080' -102803,'7100080' -102805,'7100080' -102807,'7100080' -102795,'7100081' -102796,'7100081' -102797,'7100081' -102798,'7100081' -102799,'7100081' -102800,'7100081' -102801,'7100081' -102802,'7100081' -102803,'7100081' -102804,'7100081' -102805,'7100081' -102806,'7100081' -102807,'7100081' -102923,'7100082' -102924,'7100082' -102925,'7100082' -102927,'7100082' -102929,'7100082' -102930,'7100082' -102932,'7100082' -102933,'7100082' -102923,'7100083' -102924,'7100083' -102925,'7100083' -102927,'7100083' -102929,'7100083' -102930,'7100083' -102932,'7100083' -102933,'7100083' -102923,'7100084' -102924,'7100084' -102925,'7100084' -102927,'7100084' -102929,'7100084' -102930,'7100084' -102932,'7100084' -102933,'7100084' -102924,'7100085' -102925,'7100085' -102927,'7100085' -102929,'7100085' -102930,'7100085' -102932,'7100085' -102933,'7100085' -102925,'7100086' -102930,'7100086' -102933,'7100086' -102923,'7100087' -102924,'7100087' -102925,'7100087' -102927,'7100087' -102929,'7100087' -102930,'7100087' -102932,'7100087' -102933,'7100087' -102923,'7100088' -102924,'7100088' -102927,'7100088' -102929,'7100088' -102932,'7100088' -102923,'7100089' -102924,'7100089' -102925,'7100089' -102927,'7100089' -102929,'7100089' -102930,'7100089' -102932,'7100089' -102933,'7100089' -105584,'7100090' -105588,'7100090' -105589,'7100090' -105590,'7100090' -105591,'7100090' -105592,'7100090' -105593,'7100090' -105595,'7100090' -105597,'7100090' -105598,'7100090' -105599,'7100090' -105586,'7100091' -105601,'7100091' -105584,'7100092' -105588,'7100092' -105589,'7100092' -105590,'7100092' -105591,'7100092' -105592,'7100092' -105593,'7100092' -105594,'7100092' -105595,'7100092' -105597,'7100092' -105598,'7100092' -105599,'7100092' -105586,'7100093' -105601,'7100093' -105586,'7100094' -105589,'7100094' -105591,'7100094' -105593,'7100094' -105594,'7100094' -105597,'7100094' -105598,'7100094' -105586,'7100095' -105589,'7100095' -105591,'7100095' -105593,'7100095' -105594,'7100095' -105597,'7100095' -105598,'7100095' -105584,'7100096' -105588,'7100096' -105589,'7100096' -105590,'7100096' -105591,'7100096' -105592,'7100096' -105593,'7100096' -105594,'7100096' -105595,'7100096' -105597,'7100096' -105598,'7100096' -105599,'7100096' -105601,'7100096' -105584,'7100097' -105588,'7100097' -105589,'7100097' -105590,'7100097' -105591,'7100097' -105592,'7100097' -105593,'7100097' -105594,'7100097' -105595,'7100097' -105597,'7100097' -105598,'7100097' -105599,'7100097' -105601,'7100097' -105584,'7100098' -105588,'7100098' -105590,'7100098' -105592,'7100098' -105595,'7100098' -105599,'7100098' -105584,'7100099' -105588,'7100099' -105589,'7100099' -105590,'7100099' -105591,'7100099' -105592,'7100099' -105593,'7100099' -105594,'7100099' -105595,'7100099' -105597,'7100099' -105598,'7100099' -105599,'7100099' -105698,'7100100' -105699,'7100100' -105700,'7100100' -105701,'7100100' -105702,'7100100' -105703,'7100100' -105704,'7100100' -105705,'7100100' -105698,'7100101' -105699,'7100101' -105700,'7100101' -105701,'7100101' -105702,'7100101' -105703,'7100101' -105704,'7100101' -105705,'7100101' -105698,'7100102' -105699,'7100102' -105700,'7100102' -105701,'7100102' -105702,'7100102' -105703,'7100102' -105704,'7100102' -105705,'7100102' -105794,'7100103' -105795,'7100103' -105796,'7100103' -105798,'7100103' -105799,'7100103' -105800,'7100103' -105794,'7100104' -105795,'7100104' -105796,'7100104' -105798,'7100104' -105799,'7100104' -105800,'7100104' -105794,'7100105' -105795,'7100105' -105796,'7100105' -105798,'7100105' -105799,'7100105' -105800,'7100105' -105794,'7100106' -105796,'7100106' -105798,'7100106' -105799,'7100106' -105800,'7100106' -105794,'7100107' -105795,'7100107' -105799,'7100107' -105794,'7100108' -105795,'7100108' -105796,'7100108' -105798,'7100108' -105799,'7100108' -105800,'7100108' -105801,'7100109' -105803,'7100109' -105806,'7100109' -105807,'7100109' -105811,'7100109' -105802,'7100110' -105805,'7100110' -105808,'7100110' -105812,'7100110' -105810,'7100110' -105801,'7100111' -105803,'7100111' -105806,'7100111' -105807,'7100111' -105811,'7100111' -105802,'7100112' -105805,'7100112' -105808,'7100112' -105812,'7100112' -105810,'7100112' -105810,'7100113' -105801,'7100113' -105802,'7100113' -105803,'7100113' -105805,'7100113' -105806,'7100113' -105807,'7100113' -105808,'7100113' -105811,'7100113' -105812,'7100113' -105810,'7100114' -105801,'7100114' -105802,'7100114' -105803,'7100114' -105805,'7100114' -105806,'7100114' -105807,'7100114' -105808,'7100114' -105811,'7100114' -105812,'7100114' -106229,'7100115' -106230,'7100115' -106231,'7100115' -106232,'7100115' -106234,'7100115' -106235,'7100115' -106236,'7100115' -106237,'7100115' -106238,'7100115' -106239,'7100115' -106240,'7100115' -106241,'7100115' -106242,'7100115' -106245,'7100115' -106246,'7100115' -106247,'7100115' -106248,'7100115' -106249,'7100115' -106250,'7100115' -106251,'7100115' -106252,'7100115' -106253,'7100115' -106254,'7100115' -106255,'7100115' -106232,'7100116' -106238,'7100116' -106242,'7100116' -106248,'7100116' -106254,'7100116' -106232,'7100117' -106238,'7100117' -106242,'7100117' -106248,'7100117' -106254,'7100117' -106240,'7100118' -106232,'7100119' -106238,'7100119' -106242,'7100119' -106248,'7100119' -106254,'7100119' -106229,'7100120' -106230,'7100120' -106231,'7100120' -106234,'7100120' -106235,'7100120' -106236,'7100120' -106237,'7100120' -106239,'7100120' -106241,'7100120' -106245,'7100120' -106246,'7100120' -106247,'7100120' -106249,'7100120' -106250,'7100120' -106251,'7100120' -106252,'7100120' -106253,'7100120' -106255,'7100120' -106229,'7100121' -106231,'7100121' -106232,'7100121' -106234,'7100121' -106236,'7100121' -106237,'7100121' -106238,'7100121' -106240,'7100121' -106242,'7100121' -106245,'7100121' -106246,'7100121' -106247,'7100121' -106248,'7100121' -106250,'7100121' -106251,'7100121' -106253,'7100121' -106254,'7100121' -106255,'7100121' -106232,'7100122' -106238,'7100122' -106242,'7100122' -106248,'7100122' -106254,'7100122' -106229,'7100123' -106231,'7100123' -106234,'7100123' -106236,'7100123' -106237,'7100123' -106245,'7100123' -106246,'7100123' -106247,'7100123' -106250,'7100123' -106251,'7100123' -106253,'7100123' -106255,'7100123' -106230,'7100124' -106235,'7100124' -106239,'7100124' -106241,'7100124' -106249,'7100124' -106252,'7100124' -106229,'7100125' -106230,'7100125' -106231,'7100125' -106232,'7100125' -106234,'7100125' -106235,'7100125' -106236,'7100125' -106237,'7100125' -106238,'7100125' -106239,'7100125' -106241,'7100125' -106242,'7100125' -106245,'7100125' -106246,'7100125' -106247,'7100125' -106248,'7100125' -106249,'7100125' -106250,'7100125' -106251,'7100125' -106252,'7100125' -106253,'7100125' -106254,'7100125' -106255,'7100125' -106229,'7100126' -106231,'7100126' -106232,'7100126' -106234,'7100126' -106236,'7100126' -106237,'7100126' -106238,'7100126' -106240,'7100126' -106242,'7100126' -106245,'7100126' -106246,'7100126' -106247,'7100126' -106248,'7100126' -106250,'7100126' -106251,'7100126' -106253,'7100126' -106254,'7100126' -106255,'7100126' -106229,'7100127' -106231,'7100127' -106232,'7100127' -106234,'7100127' -106236,'7100127' -106237,'7100127' -106238,'7100127' -106240,'7100127' -106242,'7100127' -106245,'7100127' -106246,'7100127' -106247,'7100127' -106248,'7100127' -106250,'7100127' -106251,'7100127' -106253,'7100127' -106254,'7100127' -106255,'7100127' -106229,'7100128' -106230,'7100128' -106231,'7100128' -106232,'7100128' -106234,'7100128' -106235,'7100128' -106236,'7100128' -106237,'7100128' -106238,'7100128' -106239,'7100128' -106241,'7100128' -106242,'7100128' -106245,'7100128' -106246,'7100128' -106247,'7100128' -106248,'7100128' -106249,'7100128' -106250,'7100128' -106251,'7100128' -106252,'7100128' -106253,'7100128' -106254,'7100128' -106255,'7100128' -106263,'7100129' -106264,'7100129' -106265,'7100129' -106266,'7100129' -106267,'7100129' -106268,'7100129' -106269,'7100129' -106271,'7100129' -106262,'7100129' -106270,'7100129' -106263,'7100130' -106264,'7100130' -106265,'7100130' -106266,'7100130' -106267,'7100130' -106268,'7100130' -106269,'7100130' -106271,'7100130' -106262,'7100130' -106270,'7100130' -106262,'7100131' -106270,'7100131' -106263,'7100131' -106264,'7100131' -106265,'7100131' -106266,'7100131' -106267,'7100131' -106268,'7100131' -106269,'7100131' -106271,'7100131' -106365,'7100132' -106376,'7100132' -106377,'7100132' -106366,'7100132' -106375,'7100132' -106373,'7100133' -106377,'7100134' -106377,'7100135' -106365,'7100136' -106376,'7100136' -106366,'7100136' -106373,'7100137' -106375,'7100137' -106373,'7100138' -106375,'7100139' -106366,'7100140' -106375,'7100140' -106365,'7100140' -106376,'7100140' -106377,'7100140' -106375,'7100141' -106375,'7100142' -106365,'7100142' -106376,'7100142' -106377,'7100142' -106366,'7100143' -106373,'7100143' -106365,'7100143' -106376,'7100143' -106377,'7100143' -106366,'7100144' -106373,'7100144' -106365,'7100144' -106376,'7100144' -106366,'7100145' -106373,'7100145' -106375,'7100145' -106365,'7100145' -106376,'7100145' -106377,'7100145' -107161,'7100146' -107162,'7100146' -107163,'7100146' -107164,'7100146' -107165,'7100146' -107166,'7100146' -107167,'7100146' -107168,'7100146' -107159,'7100147' -107160,'7100147' -107161,'7100148' -107162,'7100148' -107163,'7100148' -107164,'7100148' -107165,'7100148' -107166,'7100148' -107167,'7100148' -107168,'7100148' -107159,'7100149' -107160,'7100149' -107159,'7100150' -107161,'7100150' -107162,'7100150' -107163,'7100150' -107164,'7100150' -107165,'7100150' -107166,'7100150' -107167,'7100150' -107168,'7100150' -107159,'7100151' -107161,'7100151' -107162,'7100151' -107163,'7100151' -107164,'7100151' -107165,'7100151' -107166,'7100151' -107167,'7100151' -107168,'7100151' -107162,'7100152' -107165,'7100152' -107166,'7100152' -107168,'7100152' -107161,'7100153' -107162,'7100153' -107163,'7100153' -107164,'7100153' -107165,'7100153' -107166,'7100153' -107167,'7100153' -107168,'7100153' -107193,'7100154' -107194,'7100154' -107195,'7100154' -107196,'7100154' -107197,'7100154' -107198,'7100154' -107199,'7100154' -107200,'7100154' -107193,'7100155' -107194,'7100155' -107195,'7100155' -107196,'7100155' -107197,'7100155' -107198,'7100155' -107199,'7100155' -107200,'7100155' -107193,'7100156' -107194,'7100156' -107195,'7100156' -107196,'7100156' -107197,'7100156' -107198,'7100156' -107199,'7100156' -107200,'7100156' -107255,'7100157' -107253,'7100157' -107254,'7100158' -107256,'7100158' -107254,'7100159' -107256,'7100159' -107255,'7100160' -107253,'7100160' -107255,'7100161' -107253,'7100161' -107253,'7100162' -107254,'7100162' -107255,'7100162' -107256,'7100162' -107253,'7100163' -107254,'7100163' -107255,'7100163' -107256,'7100163' -107253,'7100164' -107254,'7100164' -107255,'7100164' -107256,'7100164' -107257,'7100165' -107259,'7100165' -107260,'7100165' -107264,'7100165' -107258,'7100166' -107261,'7100166' -107257,'7100167' -107259,'7100167' -107260,'7100167' -107264,'7100167' -107258,'7100168' -107261,'7100168' -107257,'7100169' -107258,'7100169' -107259,'7100169' -107260,'7100169' -107261,'7100169' -107264,'7100169' -107257,'7100170' -107258,'7100170' -107259,'7100170' -107260,'7100170' -107261,'7100170' -107264,'7100170' -107470,'7100171' -107471,'7100171' -107472,'7100171' -107473,'7100171' -107474,'7100171' -107475,'7100171' -107476,'7100171' -107477,'7100171' -107478,'7100171' -107470,'7100172' -107471,'7100172' -107472,'7100172' -107473,'7100172' -107474,'7100172' -107475,'7100172' -107476,'7100172' -107477,'7100172' -107478,'7100172' -107470,'7100173' -107471,'7100173' -107472,'7100173' -107473,'7100173' -107474,'7100173' -107475,'7100173' -107476,'7100173' -107477,'7100173' -107478,'7100173' -107484,'7100174' -107485,'7100174' -107486,'7100174' -107487,'7100174' -107488,'7100174' -107489,'7100174' -107490,'7100174' -107491,'7100174' -107492,'7100174' -107484,'7100175' -107485,'7100175' -107486,'7100175' -107487,'7100175' -107488,'7100175' -107489,'7100175' -107490,'7100175' -107491,'7100175' -107492,'7100175' -107484,'7100176' -107485,'7100176' -107486,'7100176' -107487,'7100176' -107488,'7100176' -107489,'7100176' -107490,'7100176' -107491,'7100176' -107492,'7100176' -111891,'7100177' -111896,'7100177' -111888,'7100178' -111889,'7100178' -111892,'7100178' -111893,'7100178' -111894,'7100178' -111895,'7100178' -111886,'7100179' -111887,'7100179' -111891,'7100180' -111896,'7100180' -111888,'7100181' -111889,'7100181' -111892,'7100181' -111893,'7100181' -111894,'7100181' -111895,'7100181' -111888,'7100182' -111892,'7100182' -111894,'7100182' -111895,'7100182' -111887,'7100183' -111889,'7100183' -111893,'7100183' -111886,'7100184' -111888,'7100184' -111892,'7100184' -111894,'7100184' -111895,'7100184' -111886,'7100185' -111887,'7100185' -111886,'7100186' -111888,'7100186' -111891,'7100186' -111892,'7100186' -111894,'7100186' -111895,'7100186' -111896,'7100186' -111886,'7100187' -111888,'7100187' -111891,'7100187' -111892,'7100187' -111894,'7100187' -111895,'7100187' -111896,'7100187' -111886,'7100188' -111888,'7100188' -111889,'7100188' -111891,'7100188' -111892,'7100188' -111893,'7100188' -111894,'7100188' -111895,'7100188' -111896,'7100188' -111886,'7100189' -111888,'7100189' -111889,'7100189' -111891,'7100189' -111892,'7100189' -111893,'7100189' -111894,'7100189' -111895,'7100189' -111896,'7100189' -111888,'7100190' -111891,'7100190' -111892,'7100190' -111894,'7100190' -111895,'7100190' -111896,'7100190' -111888,'7100191' -111889,'7100191' -111891,'7100191' -111892,'7100191' -111893,'7100191' -111894,'7100191' -111895,'7100191' -111896,'7100191' -111888,'7100192' -111891,'7100192' -111892,'7100192' -111894,'7100192' -111895,'7100192' -111896,'7100192' -111928,'7100193' -111929,'7100193' -111931,'7100193' -111932,'7100193' -111933,'7100193' -111930,'7100194' -111928,'7100195' -111929,'7100195' -111931,'7100195' -111932,'7100195' -111933,'7100195' -111930,'7100196' -111930,'7100197' -111924,'7100198' -111930,'7100199' -111924,'7100200' -111929,'7100201' -111932,'7100201' -111933,'7100201' -111924,'7100202' -111930,'7100202' -111928,'7100202' -111929,'7100202' -111931,'7100202' -111932,'7100202' -111933,'7100202' -111929,'7100203' -111932,'7100203' -111933,'7100203' -111924,'7100204' -111930,'7100204' -111928,'7100204' -111929,'7100204' -111931,'7100204' -111932,'7100204' -111933,'7100204' -111930,'7100205' -111928,'7100205' -111931,'7100205' -111930,'7100206' -111928,'7100206' -111929,'7100206' -111931,'7100206' -111932,'7100206' -111933,'7100206' -111939,'7100207' -111937,'7100208' -111941,'7100208' -111937,'7100209' -111941,'7100209' -111939,'7100210' -111939,'7100211' -111937,'7100212' -111939,'7100212' -111941,'7100212' -111937,'7100213' -111939,'7100213' -111941,'7100213' -111937,'7100214' -111941,'7100214' -111937,'7100215' -111939,'7100215' -111941,'7100215' -112029,'7100216' -112032,'7100216' -112034,'7100216' -112035,'7100216' -112036,'7100216' -112037,'7100216' -112038,'7100216' -112039,'7100216' -112041,'7100216' -112042,'7100216' -112043,'7100216' -112044,'7100216' -112045,'7100216' -112047,'7100216' -112048,'7100216' -112049,'7100216' -112050,'7100216' -112033,'7100217' -112040,'7100217' -112046,'7100217' -112028,'7100218' -112052,'7100218' -112030,'7100219' -112031,'7100219' -112051,'7100219' -112029,'7100220' -112032,'7100220' -112034,'7100220' -112035,'7100220' -112036,'7100220' -112037,'7100220' -112038,'7100220' -112039,'7100220' -112041,'7100220' -112042,'7100220' -112043,'7100220' -112044,'7100220' -112045,'7100220' -112047,'7100220' -112048,'7100220' -112049,'7100220' -112050,'7100220' -112033,'7100221' -112040,'7100221' -112046,'7100221' -112028,'7100222' -112052,'7100222' -112030,'7100223' -112031,'7100223' -112051,'7100223' -112029,'7100224' -112030,'7100224' -112033,'7100224' -112034,'7100224' -112036,'7100224' -112038,'7100224' -112039,'7100224' -112040,'7100224' -112041,'7100224' -112043,'7100224' -112044,'7100224' -112046,'7100224' -112047,'7100224' -112049,'7100224' -112050,'7100224' -112051,'7100224' -112029,'7100225' -112030,'7100225' -112031,'7100225' -112033,'7100225' -112034,'7100225' -112036,'7100225' -112039,'7100225' -112040,'7100225' -112041,'7100225' -112043,'7100225' -112044,'7100225' -112046,'7100225' -112047,'7100225' -112049,'7100225' -112050,'7100225' -112051,'7100225' -112028,'7100226' -112029,'7100226' -112032,'7100226' -112033,'7100226' -112034,'7100226' -112035,'7100226' -112037,'7100226' -112038,'7100226' -112039,'7100226' -112040,'7100226' -112042,'7100226' -112043,'7100226' -112045,'7100226' -112046,'7100226' -112047,'7100226' -112048,'7100226' -112049,'7100226' -112052,'7100226' -112029,'7100227' -112032,'7100227' -112033,'7100227' -112034,'7100227' -112035,'7100227' -112036,'7100227' -112037,'7100227' -112038,'7100227' -112039,'7100227' -112040,'7100227' -112041,'7100227' -112042,'7100227' -112043,'7100227' -112044,'7100227' -112045,'7100227' -112046,'7100227' -112047,'7100227' -112048,'7100227' -112049,'7100227' -112050,'7100227' -112351,'7100228' -112352,'7100228' -112353,'7100228' -112354,'7100228' -112351,'7100229' -112352,'7100229' -112353,'7100229' -112354,'7100229' -112351,'7100230' -112352,'7100230' -112353,'7100230' -112354,'7100230' -112351,'7100231' -112352,'7100231' -112353,'7100231' -112354,'7100231' -112351,'7100232' -112352,'7100232' -112353,'7100232' -112354,'7100232' -112415,'7100233' -112416,'7100233' -112417,'7100233' -112418,'7100233' -112415,'7100234' -112416,'7100234' -112417,'7100234' -112418,'7100234' -112413,'7100235' -112413,'7100236' -112416,'7100237' -112418,'7100237' -112416,'7100238' -112418,'7100238' -112413,'7100239' -112415,'7100239' -112416,'7100239' -112417,'7100239' -112418,'7100239' -112413,'7100240' -112415,'7100240' -112416,'7100240' -112417,'7100240' -112418,'7100240' -112415,'7100241' -112416,'7100241' -112417,'7100241' -112418,'7100241' -112415,'7100242' -112417,'7100242' -112440,'7100243' -112441,'7100243' -112442,'7100243' -112440,'7100244' -112441,'7100244' -112442,'7100244' -112440,'7100245' -112441,'7100245' -112442,'7100245' -112440,'7100246' -112441,'7100246' -112442,'7100246' -112513,'7100247' -112514,'7100247' -112515,'7100247' -112516,'7100247' -112518,'7100247' -112519,'7100247' -112520,'7100247' -112524,'7100247' -112525,'7100247' -112526,'7100247' -112527,'7100247' -112513,'7100248' -112514,'7100248' -112515,'7100248' -112516,'7100248' -112518,'7100248' -112519,'7100248' -112520,'7100248' -112524,'7100248' -112525,'7100248' -112526,'7100248' -112527,'7100249' -112514,'7100250' -112515,'7100250' -112516,'7100250' -112518,'7100250' -112519,'7100250' -112520,'7100250' -112524,'7100250' -112525,'7100250' -112526,'7100250' -112527,'7100250' -112514,'7100251' -112515,'7100251' -112516,'7100251' -112519,'7100251' -112520,'7100251' -112524,'7100251' -112525,'7100251' -112526,'7100251' -112527,'7100251' -112513,'7100252' -112515,'7100252' -112516,'7100252' -112520,'7100252' -112524,'7100252' -112526,'7100252' -112513,'7100253' -112514,'7100253' -112515,'7100253' -112516,'7100253' -112518,'7100253' -112519,'7100253' -112520,'7100253' -112524,'7100253' -112525,'7100253' -112526,'7100253' -112783,'7100254' -112789,'7100254' -112798,'7100254' -112766,'7100255' -112772,'7100255' -112773,'7100255' -112777,'7100255' -112784,'7100255' -112790,'7100255' -112793,'7100255' -112794,'7100255' -112802,'7100255' -112805,'7100255' -112797,'7100256' -112771,'7100257' -112804,'7100257' -112807,'7100257' -112806,'7100258' -112808,'7100258' -112783,'7100259' -112789,'7100259' -112798,'7100259' -112766,'7100260' -112772,'7100260' -112773,'7100260' -112777,'7100260' -112784,'7100260' -112790,'7100260' -112793,'7100260' -112794,'7100260' -112802,'7100260' -112805,'7100260' -112771,'7100261' -112804,'7100261' -112807,'7100261' -112806,'7100262' -112808,'7100262' -112766,'7100263' -112772,'7100263' -112773,'7100263' -112777,'7100263' -112784,'7100263' -112790,'7100263' -112793,'7100263' -112802,'7100263' -112805,'7100263' -112806,'7100263' -112808,'7100263' -112766,'7100264' -112772,'7100264' -112773,'7100264' -112777,'7100264' -112784,'7100264' -112790,'7100264' -112793,'7100264' -112794,'7100264' -112802,'7100264' -112805,'7100264' -112806,'7100264' -112808,'7100264' -112766,'7100265' -112772,'7100265' -112773,'7100265' -112777,'7100265' -112784,'7100265' -112790,'7100265' -112793,'7100265' -112794,'7100265' -112797,'7100265' -112802,'7100265' -112805,'7100265' -112783,'7100266' -112789,'7100266' -112798,'7100266' -112766,'7100267' -112772,'7100267' -112773,'7100267' -112777,'7100267' -112784,'7100267' -112790,'7100267' -112793,'7100267' -112794,'7100267' -112802,'7100267' -112805,'7100267' -112864,'7100268' -112869,'7100268' -112872,'7100268' -112874,'7100268' -112866,'7100269' -112867,'7100269' -112870,'7100269' -112873,'7100269' -112864,'7100270' -112869,'7100270' -112872,'7100270' -112874,'7100270' -112866,'7100271' -112867,'7100271' -112870,'7100271' -112873,'7100271' -112866,'7100272' -112867,'7100272' -112870,'7100272' -112873,'7100272' -112864,'7100273' -112869,'7100273' -112872,'7100273' -112874,'7100273' -112866,'7100274' -112867,'7100274' -112870,'7100274' -112873,'7100274' -112903,'7100275' -112905,'7100275' -112908,'7100275' -112909,'7100275' -112904,'7100276' -112907,'7100276' -112903,'7100277' -112905,'7100277' -112908,'7100277' -112909,'7100277' -112904,'7100278' -112907,'7100278' -112903,'7100279' -112904,'7100279' -112905,'7100279' -112907,'7100279' -112908,'7100279' -112909,'7100279' -112903,'7100280' -112904,'7100280' -112905,'7100280' -112907,'7100280' -112908,'7100280' -112909,'7100280' -112989,'7100281' -112990,'7100281' -112991,'7100281' -112993,'7100281' -112994,'7100281' -112995,'7100281' -112996,'7100281' -112997,'7100281' -112998,'7100281' -112999,'7100281' -113001,'7100281' -113002,'7100281' -113004,'7100281' -113005,'7100281' -113006,'7100281' -113008,'7100281' -113010,'7100281' -112992,'7100282' -113000,'7100282' -113003,'7100282' -113009,'7100282' -113007,'7100283' -113011,'7100283' -113012,'7100284' -113013,'7100284' -112989,'7100285' -112990,'7100285' -112991,'7100285' -112993,'7100285' -112994,'7100285' -112995,'7100285' -112996,'7100285' -112997,'7100285' -112998,'7100285' -112999,'7100285' -113001,'7100285' -113002,'7100285' -113004,'7100285' -113005,'7100285' -113006,'7100285' -113008,'7100285' -113010,'7100285' -112992,'7100286' -113000,'7100286' -113003,'7100286' -113009,'7100286' -113007,'7100287' -113011,'7100287' -113012,'7100288' -113013,'7100288' -112989,'7100289' -112991,'7100289' -112992,'7100289' -112994,'7100289' -112996,'7100289' -112997,'7100289' -112998,'7100289' -113000,'7100289' -113001,'7100289' -113003,'7100289' -113004,'7100289' -113006,'7100289' -113008,'7100289' -113009,'7100289' -113010,'7100289' -113012,'7100289' -113013,'7100289' -112989,'7100290' -112991,'7100290' -112992,'7100290' -112994,'7100290' -112997,'7100290' -112998,'7100290' -113000,'7100290' -113001,'7100290' -113003,'7100290' -113004,'7100290' -113006,'7100290' -113008,'7100290' -113009,'7100290' -113010,'7100290' -113012,'7100290' -113013,'7100290' -112990,'7100291' -112991,'7100291' -112992,'7100291' -112993,'7100291' -112994,'7100291' -112995,'7100291' -112998,'7100291' -112999,'7100291' -113000,'7100291' -113001,'7100291' -113002,'7100291' -113003,'7100291' -113004,'7100291' -113005,'7100291' -113007,'7100291' -113008,'7100291' -113009,'7100291' -113011,'7100291' -112989,'7100292' -112990,'7100292' -112991,'7100292' -112992,'7100292' -112993,'7100292' -112994,'7100292' -112995,'7100292' -112996,'7100292' -112997,'7100292' -112998,'7100292' -112999,'7100292' -113000,'7100292' -113001,'7100292' -113002,'7100292' -113003,'7100292' -113004,'7100292' -113005,'7100292' -113006,'7100292' -113008,'7100292' -113009,'7100292' -113010,'7100292' -113498,'7100293' -113500,'7100293' -113499,'7100294' -113501,'7100295' -113498,'7100296' -113500,'7100296' -113499,'7100297' -113501,'7100298' -113499,'7100299' -113499,'7100300' -113499,'7100301' -113498,'7100301' -113500,'7100301' -113576,'7100302' -113578,'7100302' -113581,'7100302' -113582,'7100302' -113577,'7100303' -113579,'7100303' -113583,'7100304' -113576,'7100305' -113578,'7100305' -113581,'7100305' -113582,'7100305' -113577,'7100306' -113579,'7100306' -113583,'7100307' -113576,'7100308' -113577,'7100308' -113578,'7100308' -113579,'7100308' -113581,'7100308' -113582,'7100308' -113577,'7100309' -113578,'7100309' -113579,'7100309' -113581,'7100309' -113582,'7100309' -113576,'7100309' -113595,'7100310' -113596,'7100310' -113597,'7100310' -113599,'7100310' -113600,'7100310' -113602,'7100310' -113595,'7100311' -113599,'7100311' -113602,'7100311' -113595,'7100312' -113599,'7100312' -113602,'7100312' -113596,'7100313' -113597,'7100313' -113600,'7100313' -113595,'7100314' -113596,'7100314' -113597,'7100314' -113599,'7100314' -113600,'7100314' -113602,'7100314' -113595,'7100315' -113596,'7100315' -113597,'7100315' -113599,'7100315' -113600,'7100315' -113602,'7100315' -113706,'7100316' -113707,'7100316' -113709,'7100316' -113711,'7100316' -113716,'7100316' -113717,'7100316' -113718,'7100316' -113710,'7100316' -113713,'7100316' -113705,'7100317' -113712,'7100317' -113715,'7100317' -113719,'7100317' -113720,'7100318' -113721,'7100319' -113706,'7100320' -113707,'7100320' -113709,'7100320' -113711,'7100320' -113716,'7100320' -113717,'7100320' -113718,'7100320' -113710,'7100320' -113713,'7100320' -113705,'7100321' -113712,'7100321' -113715,'7100321' -113719,'7100321' -113720,'7100322' -113721,'7100323' -113705,'7100324' -113707,'7100324' -113712,'7100324' -113715,'7100324' -113719,'7100324' -113721,'7100324' -113710,'7100324' -113713,'7100324' -113705,'7100325' -113707,'7100325' -113712,'7100325' -113715,'7100325' -113719,'7100325' -113721,'7100325' -113713,'7100325' -113705,'7100326' -113706,'7100326' -113707,'7100326' -113709,'7100326' -113711,'7100326' -113712,'7100326' -113715,'7100326' -113716,'7100326' -113717,'7100326' -113718,'7100326' -113719,'7100326' -113720,'7100326' -113713,'7100326' -113705,'7100327' -113706,'7100327' -113707,'7100327' -113709,'7100327' -113711,'7100327' -113712,'7100327' -113715,'7100327' -113716,'7100327' -113717,'7100327' -113718,'7100327' -113719,'7100327' -113710,'7100327' -113713,'7100327' -133423,'7100328' -133423,'7100329' -133423,'7100330' -133423,'7100331' -133423,'7100332' -133430,'7100333' -133431,'7100333' -133432,'7100333' -133433,'7100333' -133430,'7100334' -133431,'7100334' -133432,'7100334' -133433,'7100334' -133430,'7100335' -133431,'7100335' -133432,'7100335' -133433,'7100335' -133430,'7100336' -133431,'7100336' -133432,'7100336' -133433,'7100336' -133430,'7100337' -133431,'7100337' -133432,'7100337' -133433,'7100337' -133435,'7100338' -133436,'7100338' -133434,'7100339' -133435,'7100340' -133436,'7100340' -133434,'7100341' -133435,'7100342' -133436,'7100342' -133516,'7100343' -133516,'7100344' -133516,'7100345' -133516,'7100346' -133568,'7100347' -133569,'7100347' -133567,'7100348' -133568,'7100349' -133569,'7100349' -137225,'7100350' -137231,'7100350' -137237,'7100350' -137223,'7100351' -137224,'7100351' -137226,'7100351' -137227,'7100351' -137228,'7100351' -137229,'7100351' -137230,'7100351' -137232,'7100351' -137233,'7100351' -137234,'7100351' -137235,'7100351' -137236,'7100351' -137238,'7100351' -137221,'7100352' -137222,'7100352' -137224,'7100353' -137228,'7100353' -137230,'7100353' -137233,'7100353' -137235,'7100353' -137238,'7100353' -137223,'7100354' -137226,'7100354' -137227,'7100354' -137229,'7100354' -137232,'7100354' -137234,'7100354' -137236,'7100354' -137225,'7100355' -137231,'7100355' -137237,'7100355' -137221,'7100356' -137222,'7100356' -137222,'7100357' -137223,'7100357' -137226,'7100357' -137227,'7100357' -137229,'7100357' -137232,'7100357' -137234,'7100357' -137236,'7100357' -137221,'7100358' -137223,'7100358' -137224,'7100358' -137225,'7100358' -137226,'7100358' -137227,'7100358' -137228,'7100358' -137229,'7100358' -137230,'7100358' -137231,'7100358' -137232,'7100358' -137233,'7100358' -137234,'7100358' -137235,'7100358' -137236,'7100358' -137237,'7100358' -137238,'7100358' -137222,'7100359' -137223,'7100359' -137226,'7100359' -137227,'7100359' -137229,'7100359' -137232,'7100359' -137234,'7100359' -137236,'7100359' -137221,'7100360' -137223,'7100360' -137224,'7100360' -137225,'7100360' -137226,'7100360' -137227,'7100360' -137228,'7100360' -137229,'7100360' -137230,'7100360' -137231,'7100360' -137232,'7100360' -137233,'7100360' -137234,'7100360' -137235,'7100360' -137236,'7100360' -137237,'7100360' -137238,'7100360' -137224,'7100361' -137225,'7100361' -137228,'7100361' -137230,'7100361' -137231,'7100361' -137233,'7100361' -137235,'7100361' -137237,'7100361' -137238,'7100361' -137223,'7100362' -137224,'7100362' -137225,'7100362' -137226,'7100362' -137227,'7100362' -137228,'7100362' -137229,'7100362' -137230,'7100362' -137231,'7100362' -137232,'7100362' -137233,'7100362' -137234,'7100362' -137235,'7100362' -137236,'7100362' -137237,'7100362' -137238,'7100362' -137315,'7100363' -137316,'7100363' -137317,'7100363' -137318,'7100363' -137319,'7100363' -137320,'7100363' -137321,'7100363' -137322,'7100363' -137323,'7100363' -137324,'7100363' -137326,'7100363' -137327,'7100363' -137328,'7100363' -137329,'7100363' -137330,'7100363' -137331,'7100363' -137332,'7100363' -137333,'7100363' -137334,'7100363' -137335,'7100363' -137336,'7100363' -137337,'7100363' -137338,'7100363' -137339,'7100364' -137315,'7100365' -137319,'7100365' -137323,'7100365' -137331,'7100365' -137315,'7100366' -137319,'7100366' -137323,'7100366' -137331,'7100366' -137330,'7100367' -137315,'7100368' -137319,'7100368' -137323,'7100368' -137331,'7100368' -137316,'7100369' -137317,'7100369' -137318,'7100369' -137320,'7100369' -137321,'7100369' -137322,'7100369' -137324,'7100369' -137326,'7100369' -137327,'7100369' -137328,'7100369' -137329,'7100369' -137332,'7100369' -137333,'7100369' -137334,'7100369' -137335,'7100369' -137336,'7100369' -137337,'7100369' -137338,'7100369' -137315,'7100370' -137316,'7100370' -137318,'7100370' -137319,'7100370' -137320,'7100370' -137323,'7100370' -137324,'7100370' -137326,'7100370' -137327,'7100370' -137329,'7100370' -137330,'7100370' -137331,'7100370' -137333,'7100370' -137334,'7100370' -137335,'7100370' -137336,'7100370' -137338,'7100370' -137315,'7100371' -137319,'7100371' -137323,'7100371' -137331,'7100371' -137339,'7100372' -137316,'7100373' -137318,'7100373' -137320,'7100373' -137324,'7100373' -137326,'7100373' -137327,'7100373' -137329,'7100373' -137333,'7100373' -137334,'7100373' -137335,'7100373' -137336,'7100373' -137338,'7100373' -137317,'7100374' -137321,'7100374' -137322,'7100374' -137328,'7100374' -137332,'7100374' -137337,'7100374' -137315,'7100375' -137316,'7100375' -137317,'7100375' -137318,'7100375' -137319,'7100375' -137320,'7100375' -137321,'7100375' -137322,'7100375' -137323,'7100375' -137324,'7100375' -137326,'7100375' -137327,'7100375' -137328,'7100375' -137329,'7100375' -137331,'7100375' -137332,'7100375' -137333,'7100375' -137334,'7100375' -137335,'7100375' -137336,'7100375' -137337,'7100375' -137338,'7100375' -137339,'7100375' -137315,'7100376' -137316,'7100376' -137318,'7100376' -137319,'7100376' -137320,'7100376' -137323,'7100376' -137324,'7100376' -137326,'7100376' -137327,'7100376' -137329,'7100376' -137330,'7100376' -137331,'7100376' -137333,'7100376' -137334,'7100376' -137335,'7100376' -137336,'7100376' -137338,'7100376' -137315,'7100377' -137316,'7100377' -137318,'7100377' -137319,'7100377' -137320,'7100377' -137323,'7100377' -137324,'7100377' -137326,'7100377' -137327,'7100377' -137329,'7100377' -137330,'7100377' -137331,'7100377' -137333,'7100377' -137334,'7100377' -137335,'7100377' -137336,'7100377' -137338,'7100377' -137315,'7100378' -137316,'7100378' -137317,'7100378' -137318,'7100378' -137319,'7100378' -137320,'7100378' -137321,'7100378' -137322,'7100378' -137323,'7100378' -137324,'7100378' -137326,'7100378' -137327,'7100378' -137328,'7100378' -137329,'7100378' -137331,'7100378' -137332,'7100378' -137333,'7100378' -137334,'7100378' -137335,'7100378' -137336,'7100378' -137337,'7100378' -137338,'7100378' -137353,'7100379' -137354,'7100379' -137355,'7100379' -137356,'7100379' -137357,'7100379' -137358,'7100379' -137359,'7100379' -137360,'7100379' -137361,'7100379' -137353,'7100380' -137354,'7100380' -137355,'7100380' -137356,'7100380' -137357,'7100380' -137358,'7100380' -137359,'7100380' -137360,'7100380' -137361,'7100380' -137353,'7100381' -137354,'7100381' -137355,'7100381' -137356,'7100381' -137357,'7100381' -137358,'7100381' -137359,'7100381' -137360,'7100381' -137361,'7100381' -137407,'7100382' -137408,'7100382' -137412,'7100382' -137413,'7100382' -137410,'7100383' -137407,'7100384' -137408,'7100384' -137412,'7100384' -137413,'7100384' -137410,'7100385' -137408,'7100386' -137413,'7100386' -137408,'7100387' -137413,'7100387' -137407,'7100388' -137408,'7100388' -137412,'7100388' -137413,'7100388' -137410,'7100388' -137407,'7100389' -137408,'7100389' -137412,'7100389' -137413,'7100389' -137410,'7100389' -137407,'7100390' -137408,'7100390' -137412,'7100390' -137413,'7100390' -137410,'7100390' -137407,'7100391' -137412,'7100391' -137410,'7100391' -137414,'7100392' -137417,'7100392' -137420,'7100392' -137422,'7100392' -137415,'7100393' -137419,'7100393' -137423,'7100393' -137414,'7100394' -137417,'7100394' -137420,'7100394' -137422,'7100394' -137415,'7100395' -137419,'7100395' -137423,'7100395' -137415,'7100396' -137419,'7100396' -137423,'7100396' -137414,'7100397' -137417,'7100397' -137420,'7100397' -137422,'7100397' -137415,'7100398' -137419,'7100398' -137423,'7100398' -137415,'7100399' -137419,'7100399' -137423,'7100399' -137685,'7100400' -137685,'7100401' -137685,'7100402' -137685,'7100403' -137732,'7100404' -137733,'7100404' -137734,'7100404' -137735,'7100404' -137736,'7100404' -137737,'7100404' -137738,'7100404' -137739,'7100404' -137740,'7100404' -137732,'7100405' -137733,'7100405' -137734,'7100405' -137735,'7100405' -137736,'7100405' -137737,'7100405' -137738,'7100405' -137739,'7100405' -137740,'7100405' -137732,'7100406' -137733,'7100406' -137734,'7100406' -137735,'7100406' -137736,'7100406' -137737,'7100406' -137738,'7100406' -137739,'7100406' -137740,'7100406' -137814,'7100407' -137811,'7100408' -137817,'7100408' -137811,'7100409' -137817,'7100409' -137814,'7100410' -137814,'7100411' -137811,'7100412' -137817,'7100412' -137811,'7100413' -137817,'7100413' -137811,'7100414' -137817,'7100414' -137811,'7100415' -137817,'7100415' -137811,'7100416' -137817,'7100416' -137811,'7100417' -137817,'7100417' -137814,'7100418' -138818,'7100419' -138820,'7100419' -138821,'7100419' -138822,'7100419' -138823,'7100419' -138824,'7100419' -138827,'7100419' -138828,'7100419' -138829,'7100419' -138832,'7100419' -138817,'7100420' -138830,'7100420' -138831,'7100420' -138818,'7100421' -138819,'7100421' -138820,'7100421' -138821,'7100421' -138822,'7100421' -138823,'7100421' -138824,'7100421' -138825,'7100421' -138827,'7100421' -138828,'7100421' -138829,'7100421' -138832,'7100421' -138817,'7100422' -138830,'7100422' -138831,'7100422' -138818,'7100423' -138819,'7100423' -138822,'7100423' -138825,'7100423' -138829,'7100423' -138817,'7100424' -138818,'7100424' -138819,'7100424' -138820,'7100424' -138821,'7100424' -138822,'7100424' -138823,'7100424' -138824,'7100424' -138825,'7100424' -138827,'7100424' -138828,'7100424' -138829,'7100424' -138830,'7100424' -138832,'7100424' -138818,'7100425' -138819,'7100425' -138822,'7100425' -138825,'7100425' -138829,'7100425' -138817,'7100426' -138818,'7100426' -138819,'7100426' -138820,'7100426' -138821,'7100426' -138822,'7100426' -138823,'7100426' -138824,'7100426' -138825,'7100426' -138827,'7100426' -138828,'7100426' -138829,'7100426' -138831,'7100426' -138832,'7100426' -138820,'7100427' -138821,'7100427' -138823,'7100427' -138824,'7100427' -138827,'7100427' -138828,'7100427' -138832,'7100427' -138818,'7100428' -138819,'7100428' -138820,'7100428' -138821,'7100428' -138822,'7100428' -138823,'7100428' -138824,'7100428' -138825,'7100428' -138827,'7100428' -138828,'7100428' -138829,'7100428' -138832,'7100428' -138860,'7100429' -138861,'7100429' -138862,'7100429' -138863,'7100429' -138864,'7100429' -138865,'7100429' -138867,'7100429' -138868,'7100429' -138866,'7100429' -138860,'7100430' -138861,'7100430' -138862,'7100430' -138863,'7100430' -138864,'7100430' -138865,'7100430' -138867,'7100430' -138868,'7100430' -138866,'7100430' -138860,'7100431' -138861,'7100431' -138862,'7100431' -138863,'7100431' -138864,'7100431' -138865,'7100431' -138867,'7100431' -138868,'7100431' -138866,'7100431' -138878,'7100432' -138879,'7100432' -138880,'7100432' -138881,'7100432' -138882,'7100432' -138883,'7100432' -138884,'7100432' -138878,'7100433' -138879,'7100433' -138880,'7100433' -138881,'7100433' -138882,'7100433' -138883,'7100433' -138884,'7100433' -138878,'7100434' -138879,'7100434' -138880,'7100434' -138881,'7100434' -138882,'7100434' -138883,'7100434' -138884,'7100434' -138963,'7100435' -138964,'7100435' -138966,'7100435' -138965,'7100436' -138965,'7100437' -138963,'7100438' -138964,'7100438' -138966,'7100438' -138963,'7100439' -138964,'7100439' -138966,'7100439' -138965,'7100440' -138965,'7100441' -138963,'7100442' -138964,'7100442' -138966,'7100442' -138970,'7100443' -138971,'7100443' -138973,'7100443' -138974,'7100443' -138976,'7100443' -138977,'7100443' -138970,'7100444' -138973,'7100444' -138976,'7100444' -138970,'7100445' -138973,'7100445' -138976,'7100445' -138971,'7100446' -138974,'7100446' -138977,'7100446' -138970,'7100447' -138971,'7100447' -138973,'7100447' -138974,'7100447' -138976,'7100447' -138977,'7100447' -138970,'7100448' -138971,'7100448' -138973,'7100448' -138974,'7100448' -138976,'7100448' -138977,'7100448' -138970,'7100449' -138971,'7100449' -138973,'7100449' -138974,'7100449' -138976,'7100449' -138977,'7100449' -138970,'7100450' -138973,'7100450' -138976,'7100450' -138970,'7100451' -138971,'7100451' -138973,'7100451' -138974,'7100451' -138976,'7100451' -138977,'7100451' -139264,'7100452' -139265,'7100452' -139266,'7100452' -139267,'7100452' -139268,'7100452' -139269,'7100452' -139270,'7100452' -139271,'7100452' -139272,'7100452' -139273,'7100452' -139264,'7100453' -139265,'7100453' -139266,'7100453' -139267,'7100453' -139268,'7100453' -139269,'7100453' -139270,'7100453' -139271,'7100453' -139272,'7100453' -139273,'7100453' -139264,'7100454' -139265,'7100454' -139266,'7100454' -139267,'7100454' -139268,'7100454' -139269,'7100454' -139270,'7100454' -139271,'7100454' -139272,'7100454' -139273,'7100454' -139353,'7100455' -139355,'7100455' -139356,'7100455' -139357,'7100455' -139353,'7100456' -139355,'7100456' -139356,'7100456' -139357,'7100456' -139353,'7100457' -139355,'7100457' -139356,'7100457' -139357,'7100457' -139353,'7100458' -139355,'7100458' -139356,'7100458' -139357,'7100458' -139353,'7100459' -139355,'7100459' -139356,'7100459' -139357,'7100459' -144060,'7100460' -144061,'7100460' -144062,'7100460' -144063,'7100460' -144065,'7100460' -144066,'7100460' -144059,'7100461' -144067,'7100462' -144069,'7100462' -144060,'7100463' -144061,'7100463' -144062,'7100463' -144063,'7100463' -144065,'7100463' -144066,'7100463' -144059,'7100464' -144059,'7100465' -144069,'7100466' -144067,'7100467' -144059,'7100468' -144060,'7100469' -144061,'7100469' -144062,'7100469' -144063,'7100469' -144065,'7100469' -144066,'7100469' -144067,'7100469' -144060,'7100470' -144061,'7100470' -144063,'7100470' -144065,'7100470' -144066,'7100470' -144067,'7100470' -144061,'7100471' -144065,'7100471' -144069,'7100471' -144060,'7100472' -144061,'7100472' -144062,'7100472' -144063,'7100472' -144065,'7100472' -144066,'7100472' -144067,'7100472' -144060,'7100473' -144062,'7100473' -144063,'7100473' -144066,'7100473' -144059,'7100474' -144060,'7100475' -144061,'7100475' -144062,'7100475' -144063,'7100475' -144065,'7100475' -144066,'7100475' -144093,'7100476' -144092,'7100477' -144095,'7100477' -144089,'7100478' -144090,'7100478' -144094,'7100478' -144088,'7100478' -144090,'7100479' -144090,'7100480' -144089,'7100481' -144094,'7100481' -144092,'7100482' -144095,'7100482' -144088,'7100483' -144093,'7100484' -144087,'7100485' -144092,'7100486' -144095,'7100486' -144093,'7100487' -144088,'7100488' -144089,'7100489' -144090,'7100489' -144094,'7100489' -144088,'7100489' -144092,'7100489' -144093,'7100489' -144095,'7100489' -144088,'7100490' -144089,'7100491' -144090,'7100491' -144094,'7100491' -144088,'7100491' -144092,'7100491' -144093,'7100491' -144095,'7100491' -144089,'7100492' -144090,'7100492' -144094,'7100492' -144087,'7100492' -144092,'7100492' -144093,'7100492' -144095,'7100492' -144089,'7100493' -144094,'7100493' -144087,'7100493' -144092,'7100493' -144095,'7100493' -144089,'7100494' -144090,'7100494' -144094,'7100494' -144088,'7100494' -144092,'7100494' -144093,'7100494' -144095,'7100494' -144110,'7100495' -144110,'7100496' -144110,'7100497' -144110,'7100498' -144110,'7100499' -144143,'7100500' -144144,'7100500' -144145,'7100500' -144146,'7100500' -144147,'7100500' -144148,'7100500' -144149,'7100500' -144150,'7100500' -144151,'7100500' -144152,'7100500' -144153,'7100500' -144143,'7100501' -144144,'7100501' -144145,'7100501' -144146,'7100501' -144147,'7100501' -144148,'7100501' -144149,'7100501' -144150,'7100501' -144151,'7100501' -144152,'7100501' -144153,'7100501' -144143,'7100502' -144144,'7100502' -144145,'7100502' -144147,'7100502' -144149,'7100502' -144150,'7100502' -144151,'7100502' -144152,'7100502' -144153,'7100502' -144143,'7100503' -144144,'7100503' -144146,'7100503' -144147,'7100503' -144149,'7100503' -144150,'7100503' -144152,'7100503' -144153,'7100503' -144143,'7100504' -144144,'7100504' -144145,'7100504' -144146,'7100504' -144147,'7100504' -144148,'7100504' -144149,'7100504' -144150,'7100504' -144151,'7100504' -144152,'7100504' -144153,'7100504' -144157,'7100505' -144159,'7100505' -144162,'7100505' -144164,'7100505' -144165,'7100505' -144166,'7100505' -144168,'7100505' -144160,'7100505' -144161,'7100505' -144158,'7100506' -144163,'7100506' -144167,'7100506' -144169,'7100506' -144156,'7100507' -144155,'7100508' -144157,'7100509' -144159,'7100509' -144162,'7100509' -144164,'7100509' -144165,'7100509' -144166,'7100509' -144168,'7100509' -144160,'7100509' -144161,'7100509' -144158,'7100510' -144163,'7100510' -144167,'7100510' -144169,'7100510' -144156,'7100511' -144155,'7100512' -144155,'7100513' -144158,'7100513' -144163,'7100513' -144165,'7100513' -144167,'7100513' -144169,'7100513' -144160,'7100513' -144155,'7100514' -144158,'7100514' -144163,'7100514' -144165,'7100514' -144167,'7100514' -144169,'7100514' -144161,'7100514' -144156,'7100515' -144157,'7100515' -144158,'7100515' -144159,'7100515' -144162,'7100515' -144163,'7100515' -144164,'7100515' -144165,'7100515' -144166,'7100515' -144167,'7100515' -144168,'7100515' -144169,'7100515' -144160,'7100515' -144161,'7100515' -144157,'7100516' -144158,'7100516' -144159,'7100516' -144162,'7100516' -144163,'7100516' -144164,'7100516' -144165,'7100516' -144166,'7100516' -144167,'7100516' -144168,'7100516' -144169,'7100516' -144160,'7100516' -144161,'7100516' -144477,'7100517' -144478,'7100517' -144479,'7100517' -144480,'7100518' -144477,'7100519' -144478,'7100519' -144479,'7100519' -144543,'7100520' -144541,'7100521' -144547,'7100521' -144541,'7100522' -144547,'7100522' -144543,'7100523' -144543,'7100524' -144541,'7100525' -144547,'7100525' -144541,'7100526' -144547,'7100526' -144541,'7100527' -144547,'7100527' -144541,'7100528' -144547,'7100528' -144541,'7100529' -144547,'7100529' -144541,'7100530' -144547,'7100530' -144543,'7100531' -144572,'7100532' -144574,'7100532' -144575,'7100532' -144576,'7100532' -144572,'7100533' -144574,'7100533' -144575,'7100533' -144576,'7100533' -144572,'7100534' -144574,'7100534' -144575,'7100534' -144576,'7100534' diff --git a/sql-bench/Data/ATIS/food_service.txt b/sql-bench/Data/ATIS/food_service.txt deleted file mode 100644 index 7297e244cc902c3b5f54baac6e1e6b6ed3e619fc..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/food_service.txt +++ /dev/null @@ -1,121 +0,0 @@ -'B',1,'FIRST','BREAKFAST' -'B',1,'COACH','BREAKFAST' -'B/',1,'FIRST','BREAKFAST' -'B/S',1,'FIRST','BREAKFAST' -'B/S',1,'COACH','SNACK' -'BD',1,'FIRST','BREAKFAST' -'BD',2,'FIRST','DINNER' -'BD',1,'COACH','BREAKFAST' -'BD',2,'COACH','DINNER' -'BDS',1,'FIRST','BREAKFAST' -'BDS',2,'FIRST','DINNER' -'BDS',3,'FIRST','SNACK' -'BDS',1,'COACH','BREAKFAST' -'BDS',2,'COACH','DINNER' -'BDS',3,'COACH','SNACK' -'BL',1,'FIRST','BREAKFAST' -'BL',2,'FIRST','LUNCH' -'BL',1,'COACH','BREAKFAST' -'BL',2,'COACH','LUNCH' -'BLD',1,'FIRST','BREAKFAST' -'BLD',2,'FIRST','LUNCH' -'BLD',3,'FIRST','DINNER' -'BLD',1,'COACH','BREAKFAST' -'BLD',2,'COACH','LUNCH' -'BLD',3,'COACH','DINNER' -'BLS',1,'FIRST','BREAKFAST' -'BLS',2,'FIRST','LUNCH' -'BLS',3,'FIRST','SNACK' -'BLS',1,'COACH','BREAKFAST' -'BLS',2,'COACH','LUNCH' -'BLS',3,'COACH','SNACK' -'BS',1,'FIRST','BREAKFAST' -'BS',2,'FIRST','SNACK' -'BS',1,'COACH','BREAKFAST' -'BS',2,'COACH','SNACK' -'BSD',1,'FIRST','BREAKFAST' -'BSD',2,'FIRST','SNACK' -'BSD',3,'FIRST','DINNER' -'BSD',1,'COACH','BREAKFAST' -'BSD',2,'COACH','SNACK' -'BSD',3,'COACH','DINNER' -'BSL',1,'FIRST','BREAKFAST' -'BSL',2,'FIRST','SNACK' -'BSL',3,'FIRST','LUNCH' -'BSL',1,'COACH','BREAKFAST' -'BSL',2,'COACH','SNACK' -'BSL',3,'COACH','LUNCH' -'D',1,'FIRST','DINNER' -'D',2,'COACH','DINNER' -'D/',1,'FIRST','DINNER' -'D/S',1,'FIRST','DINNER' -'D/S',1,'COACH','SNACK' -'DB',1,'FIRST','DINNER' -'DB',2,'FIRST','BREAKFAST' -'DB',1,'COACH','DINNER' -'DB',2,'COACH','BREAKFAST' -'DS',1,'FIRST','DINNER' -'DS',2,'FIRST','SNACK' -'DS',1,'COACH','DINNER' -'DS',2,'COACH','SNACK' -'L',1,'FIRST','LUNCH' -'L',1,'COACH','LUNCH' -'L/',1,'FIRST','LUNCH' -'L/S',1,'FIRST','LUNCH' -'L/S',1,'COACH','SNACK' -'LD',1,'FIRST','LUNCH' -'LD',2,'FIRST','DINNER' -'LD',1,'COACH','LUNCH' -'LD',2,'COACH','DINNER' -'LDS',1,'FIRST','LUNCH' -'LDS',2,'FIRST','DINNER' -'LDS',3,'FIRST','SNACK' -'LDS',1,'COACH','LUNCH' -'LDS',2,'COACH','DINNER' -'LDS',3,'COACH','SNACK' -'LS',1,'FIRST','LUNCH' -'LS',2,'FIRST','SNACK' -'LS',1,'COACH','LUNCH' -'LS',2,'COACH','SNACK' -'LS/L',1,'FIRST','LUNCH' -'LS/L',2,'FIRST','SNACK' -'LS/L',1,'COACH','LUNCH' -'LSD',1,'FIRST','LUNCH' -'LSD',2,'FIRST','SNACK' -'LSD',3,'FIRST','DINNER' -'LSD',1,'COACH','LUNCH' -'LSD',2,'COACH','SNACK' -'LSD',3,'COACH','DINNER' -'S',1,'FIRST','SNACK' -'S',1,'COACH','SNACK' -'S/',1,'FIRST','SNACK' -'SB',1,'FIRST','SNACK' -'SB',2,'FIRST','BREAKFAST' -'SB',1,'COACH','SNACK' -'SB',2,'COACH','BREAKFAST' -'SBD',1,'FIRST','SNACK' -'SBD',2,'FIRST','BREAKFAST' -'SBD',3,'FIRST','DINNER' -'SBD',1,'COACH','SNACK' -'SBD',2,'COACH','BREAKFAST' -'SBD',3,'COACH','DINNER' -'SBL',1,'FIRST','SNACK' -'SBL',2,'FIRST','BREAKFAST' -'SBL',3,'FIRST','LUNCH' -'SBL',1,'COACH','SNACK' -'SBL',2,'COACH','BREAKFAST' -'SBL',3,'COACH','LUNCH' -'SD',1,'FIRST','SNACK' -'SD',2,'FIRST','DINNER' -'SD',1,'COACH','SNACK' -'SD',2,'COACH','DINNER' -'SL',1,'FIRST','SNACK' -'SL',2,'FIRST','LUNCH' -'SL',1,'COACH','SNACK' -'SL',2,'COACH','LUNCH' -'SLD',1,'FIRST','SNACK' -'SLD',2,'FIRST','LUNCH' -'SLD',3,'FIRST','DINNER' -'SLD',1,'COACH','SNACK' -'SLD',2,'COACH','LUNCH' -'SLD',3,'COACH','DINNER' diff --git a/sql-bench/Data/ATIS/ground_service.txt b/sql-bench/Data/ATIS/ground_service.txt deleted file mode 100644 index 02f18757fededbcbea8f8579bc93c009f1c77f9c..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/ground_service.txt +++ /dev/null @@ -1,33 +0,0 @@ -'MATL','ATL','L',9.00 -'MATL','ATL','R',0.00 -'MATL','ATL','A',0.00 -'BBOS','BOS','L',5.00 -'BBOS','BOS','R',0.00 -'BBOS','BOS','A',0.00 -'DDFW','DFW','R',0.00 -'DDFW','DFW','L',6.00 -'FDFW','DFW','L',6.00 -'FDFW','DFW','R',0.00 -'DDEN','DEN','L',5.00 -'DDEN','DEN','R',0.00 -'DDEN','DEN','A',0.00 -'PPHL','PHL','L',4.75 -'PPHL','PHL','R',0.00 -'PPHL','PHL','A',0.00 -'PPIT','PIT','L',7.50 -'PPIT','PIT','R',0.00 -'PPIT','PIT','A',0.00 -'OOAK','OAK','L',3.50 -'OOAK','OAK','R',0.00 -'OOAK','SFO','L',6.00 -'OOAK','SFO','R',0.00 -'OOAK','SFO','A',0.00 -'SSFO','SFO','L',4.00 -'SSFO','SFO','R',0.00 -'SSFO','SFO','A',0.00 -'SSFO','OAK','L',5.00 -'WWAS','BWI','L',12.00 -'BBWI','BWI','L',5.00 -'BBWI','BWI','R',0.00 -'BBWI','BWI','A',0.00 -'','','',0.00 diff --git a/sql-bench/Data/ATIS/month_name.txt b/sql-bench/Data/ATIS/month_name.txt deleted file mode 100644 index 947735f18b44fc487c7283507df4de252827b631..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/month_name.txt +++ /dev/null @@ -1,12 +0,0 @@ -1,'JANUARY' -2,'FEBRUARY' -3,'MARCH' -4,'APRIL' -5,'MAY' -6,'JUNE' -7,'JULY' -8,'AUGUST' -9,'SEPTEMBER' -10,'OCTOBER' -11,'NOVEMBER' -12,'DECEMBER' diff --git a/sql-bench/Data/ATIS/restrict_carrier.txt b/sql-bench/Data/ATIS/restrict_carrier.txt deleted file mode 100644 index 814fc9ce034e10906339d6f641e551618912a584..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/restrict_carrier.txt +++ /dev/null @@ -1,612 +0,0 @@ -'AP/1','AA' -'AP/2','AA' -'AP/2','AF' -'AP/2','AM' -'AP/2','EA' -'AP/2','KX' -'AP/2','MX' -'AP/2','NW' -'AP/4','AA' -'AP/4','AC' -'AP/4','AS' -'AP/4','BW' -'AP/4','CO' -'AP/4','DL' -'AP/4','EA' -'AP/4','KW' -'AP/4','LI' -'AP/4','MX' -'AP/4','PA' -'AP/4','TW' -'AP/6','AC' -'AP/6','BA' -'AP/6','CB' -'AP/6','EA' -'AP/6','ND' -'AP/6','NW' -'AP/6','OU' -'AP/6','PA' -'AP/6','US' -'AP/6','WD' -'AP/10','AA' -'AP/10','AC' -'AP/10','AM' -'AP/10','CO' -'AP/10','DL' -'AP/10','EA' -'AP/10','FH' -'AP/10','NW' -'AP/10','RP' -'AP/10','TW' -'AP/10','UA' -'AP/10','US' -'AP/12','AA' -'AP/12','CO' -'AP/12','DL' -'AP/12','EA' -'AP/12','JM' -'AP/12','ML' -'AP/12','MX' -'AP/12','PA' -'AP/12','TW' -'AP/12','US' -'AP/13','AA' -'AP/13','JM' -'AP/14','AA' -'AP/14','EA' -'AP/14','KX' -'AP/14','NW' -'AP/14','PA' -'AP/16','AC' -'AP/16','CX' -'AP/16','DL' -'AP/16','EA' -'AP/16','SN' -'AP/16','TW' -'AP/16','UA' -'AP/17','AA' -'AP/18','CP' -'AP/18','MX' -'AP/19','AC' -'AP/19','BW' -'AP/19','CU' -'AP/19','EA' -'AP/19','JM' -'AP/20','AA' -'AP/20','AC' -'AP/20','AS' -'AP/20','CO' -'AP/20','CP' -'AP/20','DL' -'AP/20','EA' -'AP/20','FH' -'AP/20','HP' -'AP/20','LH' -'AP/20','ND' -'AP/20','NR' -'AP/20','NW' -'AP/20','NX' -'AP/20','OU' -'AP/20','QB' -'AP/20','TG' -'AP/20','UA' -'AP/20','US' -'AP/20','WD' -'AP/20','YN' -'AP/20','4F' -'AP/20','4V' -'AP/20','7F' -'AP/20','8D' -'AP/21','AA' -'AP/21','AC' -'AP/21','EA' -'AP/21','KX' -'AP/21','NW' -'AP/25','AA' -'AP/25','AS' -'AP/25','EA' -'AP/25','LR' -'AP/25','MX' -'AP/25','PA' -'AP/27','AA' -'AP/27','CO' -'AP/27','DL' -'AP/27','EA' -'AP/27','HP' -'AP/27','ML' -'AP/27','NW' -'AP/27','PA' -'AP/27','TW' -'AP/27','UA' -'AP/27','US' -'AP/27','WN' -'AP/32','AA' -'AP/32','AC' -'AP/32','BA' -'AP/32','CP' -'AP/32','NW' -'AP/33','LM' -'AP/35','AA' -'AP/35','AC' -'AP/35','AS' -'AP/35','CO' -'AP/35','DF' -'AP/35','EA' -'AP/35','HA' -'AP/35','HP' -'AP/35','LM' -'AP/35','ND' -'AP/35','NW' -'AP/35','PA' -'AP/35','TW' -'AP/35','UA' -'AP/35','WD' -'AP/43','AA' -'AP/43','DF' -'AP/43','UA' -'AP/43','US' -'AP/44','AA' -'AP/44','AC' -'AP/44','AD' -'AP/44','AS' -'AP/44','BE' -'AP/44','CO' -'AP/44','DF' -'AP/44','DL' -'AP/44','EA' -'AP/44','FH' -'AP/44','HP' -'AP/44','IN' -'AP/44','IT' -'AP/44','KS' -'AP/44','ML' -'AP/44','NW' -'AP/44','PA' -'AP/44','TW' -'AP/44','UA' -'AP/44','UO' -'AP/44','US' -'AP/44','WN' -'AP/44','YN' -'AP/44','YV' -'AP/44','YW' -'AP/44','YX' -'AP/44','ZO' -'AP/44','ZK' -'AP/44','3S' -'AP/44','5A' -'AP/44','5C' -'AP/44','7F' -'AP/44','7V' -'AP/44','8G' -'AP/47','AA' -'AP/47','DO' -'AP/48','AA' -'AP/48','AC' -'AP/48','BL' -'AP/48','BW' -'AP/48','CO' -'AP/48','CP' -'AP/48','DL' -'AP/48','EA' -'AP/48','IV' -'AP/48','KW' -'AP/48','KX' -'AP/48','ML' -'AP/48','MX' -'AP/48','NR' -'AP/48','NW' -'AP/48','PA' -'AP/48','PD' -'AP/48','TW' -'AP/48','UA' -'AP/48','YV' -'AP/48','8D' -'AP/55','AA' -'AP/55','AC' -'AP/55','AS' -'AP/55','CH' -'AP/55','CO' -'AP/55','CP' -'AP/55','CT' -'AP/55','DL' -'AP/55','EA' -'AP/55','GM' -'AP/55','HA' -'AP/55','HP' -'AP/55','ML' -'AP/55','ND' -'AP/55','NR' -'AP/55','NW' -'AP/55','OD' -'AP/55','PA' -'AP/55','RP' -'AP/55','TW' -'AP/55','UA' -'AP/55','UE' -'AP/55','US' -'AP/55','WD' -'AP/55','YW' -'AP/55','YX' -'AP/55','YK' -'AP/55','ZV' -'AP/55','2V' -'AP/55','3N' -'AP/55','4N' -'AP/55','4W' -'AP/55','5A' -'AP/55','5C' -'AP/55','5L' -'AP/55','8D' -'AP/56','AA' -'AP/56','DL' -'AP/56','GM' -'AP/56','HA' -'AP/56','HP' -'AP/56','PA' -'AP/56','TW' -'AP/56','UA' -'AP/56','WD' -'AP/57','AA' -'AP/57','AC' -'AP/57','AS' -'AP/57','BE' -'AP/57','CO' -'AP/57','CP' -'AP/57','CT' -'AP/57','DL' -'AP/57','EA' -'AP/57','HP' -'AP/57','ML' -'AP/57','ND' -'AP/57','NW' -'AP/57','PA' -'AP/57','PD' -'AP/57','PS' -'AP/57','TW' -'AP/57','UA' -'AP/57','US' -'AP/57','YV' -'AP/57','YW' -'AP/57','YX' -'AP/57','ZV' -'AP/57','2P' -'AP/57','2V' -'AP/57','3N' -'AP/57','4N' -'AP/57','4X' -'AP/57','8G' -'AP/58','AS' -'AP/58','EA' -'AP/58','7H' -'AP/59','DL' -'AP/59','JN' -'AP/60','AC' -'AP/60','EA' -'AP/60','NW' -'AP/60','UA' -'AP/60','US' -'AP/61','CO' -'AP/61','FY' -'AP/61','JR' -'AP/61','2V' -'AP/68','AA' -'AP/68','AD' -'AP/68','AM' -'AP/68','AS' -'AP/68','BE' -'AP/68','CO' -'AP/68','CP' -'AP/68','CT' -'AP/68','DF' -'AP/68','DL' -'AP/68','EA' -'AP/68','EM' -'AP/68','HP' -'AP/68','IN' -'AP/68','ML' -'AP/68','MX' -'AP/68','NW' -'AP/68','OU' -'AP/68','PA' -'AP/68','QQ' -'AP/68','QS' -'AP/68','RP' -'AP/68','TW' -'AP/68','UA' -'AP/68','US' -'AP/68','YN' -'AP/68','YV' -'AP/68','YW' -'AP/68','YX' -'AP/68','ZE' -'AP/68','ZK' -'AP/68','3N' -'AP/68','5C' -'AP/68','7L' -'AP/70','AC' -'AP/70','BW' -'AP/70','EA' -'AP/70','PA' -'AP/73','AA' -'AP/73','DL' -'AP/73','EA' -'AP/73','ML' -'AP/73','PA' -'AP/73','TW' -'AP/75','AA' -'AP/75','AC' -'AP/75','AS' -'AP/75','CH' -'AP/75','CO' -'AP/75','CP' -'AP/75','DL' -'AP/75','EA' -'AP/75','HP' -'AP/75','JV' -'AP/75','KS' -'AP/75','LH' -'AP/75','ML' -'AP/75','MX' -'AP/75','ND' -'AP/75','NW' -'AP/75','OU' -'AP/75','PA' -'AP/75','RP' -'AP/75','RV' -'AP/75','TW' -'AP/75','UA' -'AP/75','US' -'AP/75','WD' -'AP/75','XE' -'AP/75','YN' -'AP/75','YV' -'AP/75','ZO' -'AP/75','7F' -'AP/75','8D' -'AP/76','MX' -'AP/76','NW' -'AP/80','AA' -'AP/80','AC' -'AP/80','AR' -'AP/80','AS' -'AP/80','BA' -'AP/80','CO' -'AP/80','CP' -'AP/80','DL' -'AP/80','EA' -'AP/80','HP' -'AP/80','JB' -'AP/80','JL' -'AP/80','JV' -'AP/80','LA' -'AP/80','LH' -'AP/80','ND' -'AP/80','NW' -'AP/80','PA' -'AP/80','TG' -'AP/80','UA' -'AP/80','US' -'AP/80','UW' -'AP/80','WD' -'AP/80','YN' -'AP/80','4V' -'AP/80','7E' -'AP/80','8D' -'AP/87','AC' -'AP/94','AA' -'AP/94','AC' -'AP/94','EA' -'AP/94','LM' -'AP/94','NW' -'EX/1','AR' -'EX/1','IB' -'EX/2','AB' -'EX/2','BW' -'EX/2','FQ' -'EX/2','MX' -'EX/2','UA' -'EX/2','UP' -'EX/3','AA' -'EX/3','CO' -'EX/3','DL' -'EX/3','EA' -'EX/3','HP' -'EX/3','PA' -'EX/3','US' -'EX/5','LR' -'EX/9','AA' -'EX/9','AC' -'EX/9','AM' -'EX/9','BA' -'EX/9','CO' -'EX/9','EA' -'EX/9','FQ' -'EX/9','HP' -'EX/9','PA' -'EX/9','TV' -'EX/11','AA' -'EX/11','AM' -'EX/11','CO' -'EX/11','CP' -'EX/11','CX' -'EX/11','DL' -'EX/11','JT' -'EX/11','LA' -'EX/11','MX' -'EX/11','NW' -'EX/11','PA' -'EX/11','UA' -'EX/12','AS' -'EX/12','CP' -'EX/12','CX' -'EX/13','AC' -'EX/13','AS' -'EX/13','BF' -'EX/13','BW' -'EX/13','DL' -'EX/13','KS' -'EX/13','LM' -'EX/13','ML' -'EX/13','YV' -'EX/13','ZV' -'EX/13','7H' -'EX/14','AA' -'EX/14','AS' -'EX/14','BE' -'EX/14','CO' -'EX/14','CP' -'EX/14','DL' -'EX/14','EA' -'EX/14','IN' -'EX/14','ML' -'EX/14','NW' -'EX/14','PA' -'EX/14','PD' -'EX/14','TW' -'EX/14','UA' -'EX/14','US' -'EX/14','WN' -'EX/14','YW' -'EX/14','ZV' -'EX/14','2V' -'EX/14','4N' -'EX/14','4X' -'EX/14','7F' -'EX/14','8D' -'EX/15','AC' -'EX/15','BW' -'EX/15','CU' -'EX/15','HP' -'EX/15','JM' -'EX/17','AA' -'EX/17','AM' -'EX/17','AS' -'EX/17','DL' -'EX/17','EA' -'EX/17','JL' -'EX/17','LH' -'EX/17','PA' -'EX/17','UA' -'EX/19','BW' -'EX/19','KX' -'EX/20','AA' -'EX/20','CO' -'EX/20','DL' -'EX/20','HE' -'EX/20','JM' -'EX/20','ML' -'EX/20','MX' -'EX/20','NW' -'EX/20','PA' -'EX/20','UA' -'EX/20','8R' -'EX/21','AA' -'EX/21','JM' -'EX/25','AA' -'EX/25','MX' -'EX/29','AA' -'EX/29','AM' -'EX/29','CO' -'EX/29','EA' -'EX/29','LH' -'EX/32','AA' -'EX/32','EA' -'EX/32','JM' -'EX/33','AA' -'EX/33','JM' -'EX/33','LI' -'EX/33','UA' -'EX/33','5T' -'EX/34','EA' -'EX/34','IN' -'EX/34','JM' -'EX/34','KW' -'EX/34','UE' -'EX/34','UP' -'EX/34','YV' -'EX/34','YL' -'EX/36','AA' -'EX/36','AC' -'EX/36','CO' -'EX/36','CP' -'EX/36','LI' -'EX/36','OU' -'EX/36','US' -'EX/38','AA' -'EX/38','EA' -'EX/38','JM' -'EX/38','KX' -'EX/43','AA' -'EX/43','AS' -'EX/43','CO' -'EX/43','CT' -'EX/43','DL' -'EX/43','EA' -'EX/43','HP' -'EX/43','MX' -'EX/43','NW' -'EX/43','OG' -'EX/43','PA' -'EX/43','TW' -'EX/43','UA' -'EX/43','US' -'EX/45','NW' -'EX/47','AA' -'EX/47','CO' -'EX/47','DL' -'EX/47','EA' -'EX/47','JM' -'EX/47','JR' -'EX/47','ML' -'EX/47','NW' -'EX/47','OG' -'EX/47','PA' -'EX/47','TW' -'EX/47','US' -'EX/48','AC' -'EX/48','AF' -'EX/48','CO' -'EX/48','CP' -'EX/48','DL' -'EX/48','JM' -'EX/48','KW' -'EX/48','MX' -'EX/48','PA' -'EX/48','SN' -'EX/55','AA' -'EX/55','AF' -'EX/55','BW' -'EX/55','CO' -'EX/55','DO' -'EX/55','EA' -'EX/55','JM' -'EX/55','KX' -'EX/55','LI' -'EX/55','LM' -'EX/55','NW' -'EX/55','PA' -'EX/55','PY' -'EX/55','TW' -'EX/55','UP' -'EX/55','2V' -'VU/1','AA' -'VU/1','AC' -'VU/1','AQ' -'VU/1','AS' -'VU/1','CP' -'VU/1','CT' -'VU/1','CX' -'VU/1','DL' -'VU/1','EA' -'VU/1','HP' -'VU/1','LW' -'VU/1','ND' -'VU/1','NW' -'VU/1','PA' -'VU/1','TB' -'VU/1','TW' -'VU/1','UA' -'VU/1','US' -'VU/1','YR' -'VU/1','6G' diff --git a/sql-bench/Data/ATIS/restrict_class.txt b/sql-bench/Data/ATIS/restrict_class.txt deleted file mode 100644 index 1e1ac71178cda0593cda9b0fd451fa622eb06771..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/restrict_class.txt +++ /dev/null @@ -1,4 +0,0 @@ -'AP/2','B7NR' -'AP/2','BW7NR' -'AP/2','BWE14' -'AP/2','YAP14' diff --git a/sql-bench/Data/ATIS/restriction.txt b/sql-bench/Data/ATIS/restriction.txt deleted file mode 100644 index e72af1c16b6e485d1e3ee1488a5781b284257f57..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/restriction.txt +++ /dev/null @@ -1,65 +0,0 @@ -'AP/1','FOR TRAVEL ORIGINATING AND TERMINATING IN HAWAII','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'Y',3,150 -'AP/2','FOR TRAVEL BETWEEN UNITED STATES AND CARIBBEAN','TOUR CONDUCTORS',7,'N',3,14 -'AP/4','FOR TRAVEL BETWEEN UNITED STATES AND MEXICO','CHILDREN\'S FARES,SALES AGENTS',7,'Y',3,21 -'AP/6','FOR TRAVEL TO/FROM CANADA','CHILDREN\'S FARES,FAMILY FARES,TOUR CONDUCTORS,VISIT USA FARES',7,'Y',3,30 -'AP/10','FOR TRAVEL TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',30,'Y',3,21 -'AP/12','FOR TRAVEL BETWEEN UNITED STATES AND CARIBBEAN','CONTACT CARRIER',14,'N',3,21 -'AP/13','TRAVEL BETWEEN U.S. AND CANADA,AND POINTS IN CARIBBEAN','CONTACT CARRIER',3,'Y',0,180 -'AP/14','TRAVEL BETWEEN POINTS NAMED AND ARE NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',3,'Y',1,3 -'AP/16','FARES ARE NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',14,'Y',3,21 -'AP/17','ROUND TRIP TRAVEL BETWEEN U.S. AND MEXICO','SALES AGENTS (VIA AA TOUR CONDUCTORS)',7,'N',3,30 -'AP/18','ROUND TRIP TRAVEL BETWEEN CANADA AND MEXICO','FAMILY FARES,SALES AGENTS,TOUR CONDUCTORS',7,'N',7,180 -'AP/19','RND TRIP BETWEEN CANADA AND CARIBBEAN. NOT APPLICABLE TO/FROM INTERMEDIATE PNTS','CHILDREN\'S FARES,SALES AGENT,TOUR CONDUCTORS',7,'N',7,30 -'AP/20','ROUND TRIP EXCURSION FARES,NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\S FARES,FAMILY FARES,TOUR CONDUCTORS',14,'Y',3,180 -'AP/21','TRAVEL TO/FROM U.S.A. AND CANADA,NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','SALES AGENTS,TOUR CONDUCTORS',14,'N',7,7 -'AP/25','FARES DO NOT APPLY TO/FROM INTERMEDIATE POINTS ON THE ROUTING','SALES AGENTS,TOUR CONDUCTORS',7,'Y',3,60 -'AP/27','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',7,'Y',0,180 -'AP/32','ROUND TRIP CHARTER TO HAWAII. FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S AND FAMILY FARES,HAWAII COMMON FARE,SALES AGENTS,TOUR CONDUCTORS',7,'Y',3,30 -'AP/33','ROUND TRIP BETWEEN U.S. AND CARIBBEAN','CHILDREN\'S FARE,SALES AGENTS,TOUR CONDUCTORS',14,'Y',6,21 -'AP/35','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','SALES AGENTS,TOUR CONDUCTORS',7,'Y',0,30 -'AP/43','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARE,SALES AGENTS,TOUR CONDUCTORS',14,'N',3,3 -'AP/44','ONE_WAY TRAVEL,DURING PEAK/NON-PEAK HOURS','CONTACT CARRIER',4,'Y',0,0 -'AP/47','ROUND TRIP TRAVEL','CONTACT CARRIER',14,'Y',7,30 -'AP/48','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','SALES AGENTS,TOUR CONDUCTORS,VISIT USA FARES,CHILDREN\'S FARES',7,'Y',0,0 -'AP/55','MAY COMBINE FARES (EXCEPT VIA DELTA AIRLINES) SEATS LIMITED VIA UNITED AIRLINES','CONTACT CARRIER',3,'N',0,0 -'AP/56','SEATS ARE LIMITED','CONTACT CARRIERS',7,'Y',3,45 -'AP/57','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'Y',3,180 -'AP/58','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'Y',3,330 -'AP/59','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',14,'N',7,30 -'AP/60','ROUND TRIP TRAVEL BETWEEN U.S. AND CANADA','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'N',3,365 -'AP/61','FARES MAYBE COMBINED','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'Y',0,60 -'AP/68','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',7,'Y',0,0 -'AP/70','ROUND TRIP TRAVEL. FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','SALES AGENTS,TOUR CONDUCTORS,VISIT U.S.A. FARES,CHILDREN\'S FARES',14,'Y',7,14 -'AP/73','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',7,'N',0,30 -'AP/75','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','SALES AGENTS,TOUR CONDUCTORS,VISIT U.S.A. FARES,CHILDREN\'S FARES',7,'Y',3,60 -'AP/76','ROUND TRIP TRAVEL BETWEEN U.S. AND JAMAICA','SALES AGENTS,TOUR CONDUCTORS',7,'N',0,14 -'AP/80','FARES APPLY TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,FAMILY FARES,SALES AGENTS,TOUR CONDUCTORS',14,'N',3,30 -'AP/87','FARES APPLY TO ROUND TRIP TRAVEL','CONTACT CARRIER',14,'Y',7,21 -'AP/94','FOR ROUND TRIP TRAVEL. FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',7,'Y',7,21 -'EX/1','FOR CIRCLE TRIP TRAVEL','CHILDREN\'S FARES,SALES AGENTS',0,'Y',5,60 -'EX/2','ECONOMY CLASS EXCURSION FARES','SALES AGENTS,TOUR CONDUCTORS',0,'Y',0,21 -'EX/3','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CONTACT CARRIER',0,'Y',2,45 -'EX/5','FOR ROUND TRIP TRAVEL','CONTACT CARRIER',0,'N',5,30 -'EX/9','FARES DO NOT APPLY TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',0,'N',0,30 -'EX/11','FARES MAY BE COMBINED','CONTACT CARRIER',0,'Y',0,60 -'EX/12','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES',0,'Y',3,180 -'EX/13','FARES NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,FAMILY FARES,SALES AGENTS,TOUR CONDUCTORS',0,'Y',0,3 -'EX/14','FARES MAY BE COMBINED','CONTACT CARRIER',0,'N',3,330 -'EX/15','ROUND TRIP TRAVEL BETWEEN CANADA AND CARIBBEAN','CONTACT CARRIER',0,'Y',7,45 -'EX/17','ROUND TRIP EXCURSION FARES','SALES AGENTS,TOUR CONDUCTORS',0,'N',0,180 -'EX/19','ROUND TRIP EXCURSION FARES BETWEEN CANADA AND CARIBBEAN','CONTACT CARRIER',0,'Y',7,7 -'EX/20','ROUND TRIP EXCURSION FARES','CONTACT CARRIER',0,'Y',0,14 -'EX/21','TRAVEL BETWEEN THE U.S.A. AND CARIBBEAN','SALES AGENTS,TOUR CONDUCTORS',0,'N',0,7 -'EX/25','VIA AA,ROUND TRIP TRAVEL BETWEEN SAN JUAN AND ACAPULCO/MEXICO CITY','SALES AGENTS,TOUR CONDUCTORS',0,'Y',3,14 -'EX/29','ROUND TRIP TRAVEL BETWEEN U.S.,CARIBBEAN,AND MEXICO','CHILDREN\'S FARES',0,'Y',0,21 -'EX/32','TRAVEL ORIGINATING IN JAMAICA','SALES AGENTS,TOUR CONDUCTORS',0,'N',0,365 -'EX/33','ROUND TRIP TRAVEL TO JAMAICA/CARIBBEAN','CHILDREN\'S FARES,TOUR CONDUCTORS',0,'N',0,21 -'EX/34','ONE DAY AWAY ROUND TRIP FARES','SALES AGENTS,TOUR CONDUCTORS',0,'N',1,1 -'EX/36','ROUND TRIP TRAVEL. NOT APPLICABLE TO/FROM INTERMEDIATE POINTS','CHILDREN\'S FARES,FAMILY FARES,TOUR CONDUCTORS',0,'Y',1,2 -'EX/38','SAME DAY FARES (VIA EASTERN AIRLINES)','SALES AGENTS,TOUR CONDUCTORS',0,'N',1,1 -'EX/43','ROUND TRIP EXCURSION FARES','CONTACT CARRIER',0,'Y',0,365 -'EX/45','VIA AMERICAN AIRLINES ROUND TRIP TRAVEL BETWEEN KINGSTON/MONTEGO BAY','CHILDREN\'S FARES,SALES AGENTS,TOUR CONDUCTORS',0,'N',3,21 -'EX/47','ROUND TRIP TRAVEL BETWEEN U.S.,CANADA,AND CARIBBEAN','CONTACT CARRIER',0,'Y',3,21 -'EX/48','WEEKEND EXCURSION FARE','CHILDREN\'S FARE,FAMILY FARES,SALES AGENTS,TOUR CONDUCTORS',0,'N',7,365 -'EX/55','FARES MAY BE COMBINED','SALES AGENTS',0,'Y',3,21 -'VU/1','VISIT USA: INTERNATIONAL TRAVEL BEGINNING AND ENDING OUTSIDE U.S.','SALES AGENTS',0,'Y',3,21 diff --git a/sql-bench/Data/ATIS/state.txt b/sql-bench/Data/ATIS/state.txt deleted file mode 100644 index 9c113450b2719c45e18e113e52bc7fa793b420b2..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/state.txt +++ /dev/null @@ -1,63 +0,0 @@ -'AB','ALBERTA','CANADA' -'AK','ALASKA','USA' -'AL','ALABAMA','USA' -'AR','ARKANSAS','USA' -'AZ','ARIZONA','USA' -'BC','BRITISH COLUMBIA','CANADA' -'CA','CALIFORNIA','USA' -'CO','COLORADO','USA' -'CT','CONNECTICUT','USA' -'DC','DISTRICT OF COLUMBIA','USA' -'DE','DELAWARE','USA' -'FL','FLORIDA','USA' -'GA','GEORGIA','USA' -'HI','HAWAII','USA' -'IA','IOWA','USA' -'ID','IDAHO','USA' -'IL','ILLINOIS','USA' -'IN','INDIANA','USA' -'KS','KANSAS','USA' -'KY','KENTUCKY','USA' -'LA','LOUISIANA','USA' -'MA','MASSACHUSETTS','USA' -'MB','MANITOBA','CANADA' -'MD','MARYLAND','USA' -'ME','MAINE','USA' -'MI','MICHIGAN','USA' -'MN','MINNESOTA','USA' -'MO','MISSOURI','USA' -'MS','MISSISSIPPI','USA' -'MT','MONTANA','USA' -'NB','NEW BRUNSWICK','CANADA' -'NC','NORTH CAROLINA','USA' -'ND','NORTH DAKOTA','USA' -'NE','NEBRASKA','USA' -'NF','NEWFOUNDLAND','CANADA' -'NH','NEW HAMPSHIRE','USA' -'NJ','NEW JERSEY','USA' -'NM','NEW MEXICO','USA' -'NS','NOVA SCOTIA','CANADA' -'NT','NORTHWEST TERRITORIES','CANADA' -'NV','NEVADA','USA' -'NY','NEW YORK','USA' -'OH','OHIO','USA' -'OK','OKLAHOMA','USA' -'ON','ONTARIO','CANADA' -'OR','OREGON','USA' -'PA','PENNSYLVANIA','USA' -'PE','PRINCE EDWARD ISLAND','CANADA' -'PQ','QUEBEC','CANADA' -'RI','RHODE ISLAND','USA' -'SC','SOUTH CAROLINA','USA' -'SD','SOUTH DAKOTA','USA' -'SK','SASKATCHEWAN','CANADA' -'TN','TENNESSEE','USA' -'TX','TEXAS','USA' -'UT','UTAH','USA' -'VA','VIRGINIA','USA' -'VT','VERMONT','USA' -'WA','WASHINGTON','USA' -'WI','WISCONSIN','USA' -'WV','WEST VIRGINIA','USA' -'WY','WYOMING','USA' -'YT','YUKON TERRITORY','CANADA' diff --git a/sql-bench/Data/ATIS/stop.txt b/sql-bench/Data/ATIS/stop.txt deleted file mode 100644 index c731f82f3ffa1603903bff595b171079fac53079..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/stop.txt +++ /dev/null @@ -1,69 +0,0 @@ -101908,1,102766 -101908,2,137319 -101913,1,102770 -101913,2,137323 -101924,1,102779 -101924,2,137339 -102674,1,102129 -102674,2,112354 -105810,1,106248 -105810,2,137423 -106262,1,106229 -106262,2,137734 -106270,1,106251 -106270,2,137740 -106366,1,105795 -106366,2,112516 -106373,1,105806 -106373,2,113716 -106375,1,105800 -106375,2,112527 -107253,1,107486 -107253,2,138963 -111924,1,111886 -111924,2,102766 -111924,3,137319 -111930,1,111939 -111930,2,107199 -112413,1,111886 -112413,2,102766 -113499,1,112998 -113499,2,112352 -113710,1,112996 -113710,2,112518 -113713,1,113001 -113713,2,112520 -133423,1,133431 -133423,2,111931 -133516,1,133436 -133516,2,113582 -137410,1,137228 -137410,2,102127 -137685,1,137420 -137685,2,113500 -137814,1,137736 -137814,2,139355 -138866,1,139270 -138866,2,137335 -138965,1,138976 -138965,2,113011 -144059,1,144157 -144059,2,112783 -144087,1,144156 -144087,2,112864 -144088,1,144144 -144088,2,111929 -144092,1,144063 -144092,2,101928 -144093,1,144575 -144093,2,138868 -144095,1,144066 -144095,2,101929 -144110,1,144572 -144110,2,138882 -144160,1,144145 -144160,2,112038 -144161,1,144146 -144161,2,112039 -144543,1,144574 -144543,2,139271 diff --git a/sql-bench/Data/ATIS/stop1.txt b/sql-bench/Data/ATIS/stop1.txt deleted file mode 100644 index c731f82f3ffa1603903bff595b171079fac53079..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/stop1.txt +++ /dev/null @@ -1,69 +0,0 @@ -101908,1,102766 -101908,2,137319 -101913,1,102770 -101913,2,137323 -101924,1,102779 -101924,2,137339 -102674,1,102129 -102674,2,112354 -105810,1,106248 -105810,2,137423 -106262,1,106229 -106262,2,137734 -106270,1,106251 -106270,2,137740 -106366,1,105795 -106366,2,112516 -106373,1,105806 -106373,2,113716 -106375,1,105800 -106375,2,112527 -107253,1,107486 -107253,2,138963 -111924,1,111886 -111924,2,102766 -111924,3,137319 -111930,1,111939 -111930,2,107199 -112413,1,111886 -112413,2,102766 -113499,1,112998 -113499,2,112352 -113710,1,112996 -113710,2,112518 -113713,1,113001 -113713,2,112520 -133423,1,133431 -133423,2,111931 -133516,1,133436 -133516,2,113582 -137410,1,137228 -137410,2,102127 -137685,1,137420 -137685,2,113500 -137814,1,137736 -137814,2,139355 -138866,1,139270 -138866,2,137335 -138965,1,138976 -138965,2,113011 -144059,1,144157 -144059,2,112783 -144087,1,144156 -144087,2,112864 -144088,1,144144 -144088,2,111929 -144092,1,144063 -144092,2,101928 -144093,1,144575 -144093,2,138868 -144095,1,144066 -144095,2,101929 -144110,1,144572 -144110,2,138882 -144160,1,144145 -144160,2,112038 -144161,1,144146 -144161,2,112039 -144543,1,144574 -144543,2,139271 diff --git a/sql-bench/Data/ATIS/time_interval.txt b/sql-bench/Data/ATIS/time_interval.txt deleted file mode 100644 index f645dedbf34507bcd32163b5527668d8e34c417e..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/time_interval.txt +++ /dev/null @@ -1,12 +0,0 @@ -'morning',0000,1200 -'afternoon',1200,1800 -'evening',1800,2000 -'day',600,1800 -'night',1800,2400 -'night',000,600 -'early morning',0000,800 -'mid-morning',800,1000 -'late morning',1000,1200 -'early afternoon',1200,1400 -'mid-afternoon',1400,1600 -'late afternoon',1600,1800 diff --git a/sql-bench/Data/ATIS/time_zone.txt b/sql-bench/Data/ATIS/time_zone.txt deleted file mode 100644 index 1cc3dc488d08a949aff00dac1da08ef6714cf999..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/time_zone.txt +++ /dev/null @@ -1,9 +0,0 @@ -'HST','HAWAII/ALEUTIAN STANDARD TIME' -'AST','ALASKA STANDARD TIME' -'YST','YUKON STANDARD TIME' -'PST','PACIFIC STANDARD TIME' -'MST','MOUNTAIN STANDARD TIME' -'CST','CENTRAL STANDARD TIME' -'EST','EASTERN STANDARD TIME' -'AST','ATLANTIC STANDARD TIME' -'NST','NEWFOUNDLAND STANDARD TIME' diff --git a/sql-bench/Data/ATIS/transport.txt b/sql-bench/Data/ATIS/transport.txt deleted file mode 100644 index 3c3faf6a4bdad3f02fa45b3e1c93e42a9f652477..0000000000000000000000000000000000000000 --- a/sql-bench/Data/ATIS/transport.txt +++ /dev/null @@ -1,4 +0,0 @@ -'L','LIMOUSINE' -'T','TAXI' -'R','RENTAL CAR' -'A','AIR TAXI OPERATION' diff --git a/sql-bench/Data/Wisconsin/onek.data b/sql-bench/Data/Wisconsin/onek.data deleted file mode 100644 index 4afe4483ceb37c5f375251225a51710e1c034765..0000000000000000000000000000000000000000 --- a/sql-bench/Data/Wisconsin/onek.data +++ /dev/null @@ -1,1000 +0,0 @@ -147,0,1,3,7,7,7,47,147,147,147,14,15,'RFAAAA','AAAAAA','AAAAxx' -931,1,1,3,1,11,1,31,131,431,931,2,3,'VJAAAA','BAAAAA','HHHHxx' -714,2,0,2,4,14,4,14,114,214,714,8,9,'MBAAAA','CAAAAA','OOOOxx' -711,3,1,3,1,11,1,11,111,211,711,2,3,'JBAAAA','DAAAAA','VVVVxx' -883,4,1,3,3,3,3,83,83,383,883,6,7,'ZHAAAA','EAAAAA','AAAAxx' -439,5,1,3,9,19,9,39,39,439,439,18,19,'XQAAAA','FAAAAA','HHHHxx' -670,6,0,2,0,10,0,70,70,170,670,0,1,'UZAAAA','GAAAAA','OOOOxx' -543,7,1,3,3,3,3,43,143,43,543,6,7,'XUAAAA','HAAAAA','VVVVxx' -425,8,1,1,5,5,5,25,25,425,425,10,11,'JQAAAA','IAAAAA','AAAAxx' -800,9,0,0,0,0,0,0,0,300,800,0,1,'UEAAAA','JAAAAA','HHHHxx' -489,10,1,1,9,9,9,89,89,489,489,18,19,'VSAAAA','KAAAAA','OOOOxx' -494,11,0,2,4,14,4,94,94,494,494,8,9,'ATAAAA','LAAAAA','VVVVxx' -880,12,0,0,0,0,0,80,80,380,880,0,1,'WHAAAA','MAAAAA','AAAAxx' -611,13,1,3,1,11,1,11,11,111,611,2,3,'NXAAAA','NAAAAA','HHHHxx' -226,14,0,2,6,6,6,26,26,226,226,12,13,'SIAAAA','OAAAAA','OOOOxx' -774,15,0,2,4,14,4,74,174,274,774,8,9,'UDAAAA','PAAAAA','VVVVxx' -298,16,0,2,8,18,8,98,98,298,298,16,17,'MLAAAA','QAAAAA','AAAAxx' -682,17,0,2,2,2,2,82,82,182,682,4,5,'GAAAAA','RAAAAA','HHHHxx' -864,18,0,0,4,4,4,64,64,364,864,8,9,'GHAAAA','SAAAAA','OOOOxx' -183,19,1,3,3,3,3,83,183,183,183,6,7,'BHAAAA','TAAAAA','VVVVxx' -885,20,1,1,5,5,5,85,85,385,885,10,11,'BIAAAA','UAAAAA','AAAAxx' -997,21,1,1,7,17,7,97,197,497,997,14,15,'JMAAAA','VAAAAA','HHHHxx' -966,22,0,2,6,6,6,66,166,466,966,12,13,'ELAAAA','WAAAAA','OOOOxx' -389,23,1,1,9,9,9,89,189,389,389,18,19,'ZOAAAA','XAAAAA','VVVVxx' -846,24,0,2,6,6,6,46,46,346,846,12,13,'OGAAAA','YAAAAA','AAAAxx' -206,25,0,2,6,6,6,6,6,206,206,12,13,'YHAAAA','ZAAAAA','HHHHxx' -239,26,1,3,9,19,9,39,39,239,239,18,19,'FJAAAA','ABAAAA','OOOOxx' -365,27,1,1,5,5,5,65,165,365,365,10,11,'BOAAAA','BBAAAA','VVVVxx' -204,28,0,0,4,4,4,4,4,204,204,8,9,'WHAAAA','CBAAAA','AAAAxx' -690,29,0,2,0,10,0,90,90,190,690,0,1,'OAAAAA','DBAAAA','HHHHxx' -69,30,1,1,9,9,9,69,69,69,69,18,19,'RCAAAA','EBAAAA','OOOOxx' -358,31,0,2,8,18,8,58,158,358,358,16,17,'UNAAAA','FBAAAA','VVVVxx' -269,32,1,1,9,9,9,69,69,269,269,18,19,'JKAAAA','GBAAAA','AAAAxx' -663,33,1,3,3,3,3,63,63,163,663,6,7,'NZAAAA','HBAAAA','HHHHxx' -608,34,0,0,8,8,8,8,8,108,608,16,17,'KXAAAA','IBAAAA','OOOOxx' -398,35,0,2,8,18,8,98,198,398,398,16,17,'IPAAAA','JBAAAA','VVVVxx' -330,36,0,2,0,10,0,30,130,330,330,0,1,'SMAAAA','KBAAAA','AAAAxx' -529,37,1,1,9,9,9,29,129,29,529,18,19,'JUAAAA','LBAAAA','HHHHxx' -555,38,1,3,5,15,5,55,155,55,555,10,11,'JVAAAA','MBAAAA','OOOOxx' -746,39,0,2,6,6,6,46,146,246,746,12,13,'SCAAAA','NBAAAA','VVVVxx' -558,40,0,2,8,18,8,58,158,58,558,16,17,'MVAAAA','OBAAAA','AAAAxx' -574,41,0,2,4,14,4,74,174,74,574,8,9,'CWAAAA','PBAAAA','HHHHxx' -343,42,1,3,3,3,3,43,143,343,343,6,7,'FNAAAA','QBAAAA','OOOOxx' -120,43,0,0,0,0,0,20,120,120,120,0,1,'QEAAAA','RBAAAA','VVVVxx' -461,44,1,1,1,1,1,61,61,461,461,2,3,'TRAAAA','SBAAAA','AAAAxx' -754,45,0,2,4,14,4,54,154,254,754,8,9,'ADAAAA','TBAAAA','HHHHxx' -772,46,0,0,2,12,2,72,172,272,772,4,5,'SDAAAA','UBAAAA','OOOOxx' -749,47,1,1,9,9,9,49,149,249,749,18,19,'VCAAAA','VBAAAA','VVVVxx' -386,48,0,2,6,6,6,86,186,386,386,12,13,'WOAAAA','WBAAAA','AAAAxx' -9,49,1,1,9,9,9,9,9,9,9,18,19,'JAAAAA','XBAAAA','HHHHxx' -771,50,1,3,1,11,1,71,171,271,771,2,3,'RDAAAA','YBAAAA','OOOOxx' -470,51,0,2,0,10,0,70,70,470,470,0,1,'CSAAAA','ZBAAAA','VVVVxx' -238,52,0,2,8,18,8,38,38,238,238,16,17,'EJAAAA','ACAAAA','AAAAxx' -86,53,0,2,6,6,6,86,86,86,86,12,13,'IDAAAA','BCAAAA','HHHHxx' -56,54,0,0,6,16,6,56,56,56,56,12,13,'ECAAAA','CCAAAA','OOOOxx' -767,55,1,3,7,7,7,67,167,267,767,14,15,'NDAAAA','DCAAAA','VVVVxx' -363,56,1,3,3,3,3,63,163,363,363,6,7,'ZNAAAA','ECAAAA','AAAAxx' -655,57,1,3,5,15,5,55,55,155,655,10,11,'FZAAAA','FCAAAA','HHHHxx' -394,58,0,2,4,14,4,94,194,394,394,8,9,'EPAAAA','GCAAAA','OOOOxx' -223,59,1,3,3,3,3,23,23,223,223,6,7,'PIAAAA','HCAAAA','VVVVxx' -946,60,0,2,6,6,6,46,146,446,946,12,13,'KKAAAA','ICAAAA','AAAAxx' -863,61,1,3,3,3,3,63,63,363,863,6,7,'FHAAAA','JCAAAA','HHHHxx' -913,62,1,1,3,13,3,13,113,413,913,6,7,'DJAAAA','KCAAAA','OOOOxx' -737,63,1,1,7,17,7,37,137,237,737,14,15,'JCAAAA','LCAAAA','VVVVxx' -65,64,1,1,5,5,5,65,65,65,65,10,11,'NCAAAA','MCAAAA','AAAAxx' -251,65,1,3,1,11,1,51,51,251,251,2,3,'RJAAAA','NCAAAA','HHHHxx' -686,66,0,2,6,6,6,86,86,186,686,12,13,'KAAAAA','OCAAAA','OOOOxx' -971,67,1,3,1,11,1,71,171,471,971,2,3,'JLAAAA','PCAAAA','VVVVxx' -775,68,1,3,5,15,5,75,175,275,775,10,11,'VDAAAA','QCAAAA','AAAAxx' -577,69,1,1,7,17,7,77,177,77,577,14,15,'FWAAAA','RCAAAA','HHHHxx' -830,70,0,2,0,10,0,30,30,330,830,0,1,'YFAAAA','SCAAAA','OOOOxx' -787,71,1,3,7,7,7,87,187,287,787,14,15,'HEAAAA','TCAAAA','VVVVxx' -898,72,0,2,8,18,8,98,98,398,898,16,17,'OIAAAA','UCAAAA','AAAAxx' -588,73,0,0,8,8,8,88,188,88,588,16,17,'QWAAAA','VCAAAA','HHHHxx' -872,74,0,0,2,12,2,72,72,372,872,4,5,'OHAAAA','WCAAAA','OOOOxx' -397,75,1,1,7,17,7,97,197,397,397,14,15,'HPAAAA','XCAAAA','VVVVxx' -51,76,1,3,1,11,1,51,51,51,51,2,3,'ZBAAAA','YCAAAA','AAAAxx' -381,77,1,1,1,1,1,81,181,381,381,2,3,'ROAAAA','ZCAAAA','HHHHxx' -632,78,0,0,2,12,2,32,32,132,632,4,5,'IYAAAA','ADAAAA','OOOOxx' -31,79,1,3,1,11,1,31,31,31,31,2,3,'FBAAAA','BDAAAA','VVVVxx' -855,80,1,3,5,15,5,55,55,355,855,10,11,'XGAAAA','CDAAAA','AAAAxx' -699,81,1,3,9,19,9,99,99,199,699,18,19,'XAAAAA','DDAAAA','HHHHxx' -562,82,0,2,2,2,2,62,162,62,562,4,5,'QVAAAA','EDAAAA','OOOOxx' -681,83,1,1,1,1,1,81,81,181,681,2,3,'FAAAAA','FDAAAA','VVVVxx' -585,84,1,1,5,5,5,85,185,85,585,10,11,'NWAAAA','GDAAAA','AAAAxx' -35,85,1,3,5,15,5,35,35,35,35,10,11,'JBAAAA','HDAAAA','HHHHxx' -962,86,0,2,2,2,2,62,162,462,962,4,5,'ALAAAA','IDAAAA','OOOOxx' -282,87,0,2,2,2,2,82,82,282,282,4,5,'WKAAAA','JDAAAA','VVVVxx' -254,88,0,2,4,14,4,54,54,254,254,8,9,'UJAAAA','KDAAAA','AAAAxx' -514,89,0,2,4,14,4,14,114,14,514,8,9,'UTAAAA','LDAAAA','HHHHxx' -406,90,0,2,6,6,6,6,6,406,406,12,13,'QPAAAA','MDAAAA','OOOOxx' -544,91,0,0,4,4,4,44,144,44,544,8,9,'YUAAAA','NDAAAA','VVVVxx' -704,92,0,0,4,4,4,4,104,204,704,8,9,'CBAAAA','ODAAAA','AAAAxx' -948,93,0,0,8,8,8,48,148,448,948,16,17,'MKAAAA','PDAAAA','HHHHxx' -412,94,0,0,2,12,2,12,12,412,412,4,5,'WPAAAA','QDAAAA','OOOOxx' -200,95,0,0,0,0,0,0,0,200,200,0,1,'SHAAAA','RDAAAA','VVVVxx' -583,96,1,3,3,3,3,83,183,83,583,6,7,'LWAAAA','SDAAAA','AAAAxx' -486,97,0,2,6,6,6,86,86,486,486,12,13,'SSAAAA','TDAAAA','HHHHxx' -666,98,0,2,6,6,6,66,66,166,666,12,13,'QZAAAA','UDAAAA','OOOOxx' -436,99,0,0,6,16,6,36,36,436,436,12,13,'UQAAAA','VDAAAA','VVVVxx' -842,100,0,2,2,2,2,42,42,342,842,4,5,'KGAAAA','WDAAAA','AAAAxx' -99,101,1,3,9,19,9,99,99,99,99,18,19,'VDAAAA','XDAAAA','HHHHxx' -656,102,0,0,6,16,6,56,56,156,656,12,13,'GZAAAA','YDAAAA','OOOOxx' -673,103,1,1,3,13,3,73,73,173,673,6,7,'XZAAAA','ZDAAAA','VVVVxx' -371,104,1,3,1,11,1,71,171,371,371,2,3,'HOAAAA','AEAAAA','AAAAxx' -869,105,1,1,9,9,9,69,69,369,869,18,19,'LHAAAA','BEAAAA','HHHHxx' -569,106,1,1,9,9,9,69,169,69,569,18,19,'XVAAAA','CEAAAA','OOOOxx' -616,107,0,0,6,16,6,16,16,116,616,12,13,'SXAAAA','DEAAAA','VVVVxx' -612,108,0,0,2,12,2,12,12,112,612,4,5,'OXAAAA','EEAAAA','AAAAxx' -505,109,1,1,5,5,5,5,105,5,505,10,11,'LTAAAA','FEAAAA','HHHHxx' -922,110,0,2,2,2,2,22,122,422,922,4,5,'MJAAAA','GEAAAA','OOOOxx' -221,111,1,1,1,1,1,21,21,221,221,2,3,'NIAAAA','HEAAAA','VVVVxx' -388,112,0,0,8,8,8,88,188,388,388,16,17,'YOAAAA','IEAAAA','AAAAxx' -567,113,1,3,7,7,7,67,167,67,567,14,15,'VVAAAA','JEAAAA','HHHHxx' -58,114,0,2,8,18,8,58,58,58,58,16,17,'GCAAAA','KEAAAA','OOOOxx' -316,115,0,0,6,16,6,16,116,316,316,12,13,'EMAAAA','LEAAAA','VVVVxx' -659,116,1,3,9,19,9,59,59,159,659,18,19,'JZAAAA','MEAAAA','AAAAxx' -501,117,1,1,1,1,1,1,101,1,501,2,3,'HTAAAA','NEAAAA','HHHHxx' -815,118,1,3,5,15,5,15,15,315,815,10,11,'JFAAAA','OEAAAA','OOOOxx' -638,119,0,2,8,18,8,38,38,138,638,16,17,'OYAAAA','PEAAAA','VVVVxx' -696,120,0,0,6,16,6,96,96,196,696,12,13,'UAAAAA','QEAAAA','AAAAxx' -734,121,0,2,4,14,4,34,134,234,734,8,9,'GCAAAA','REAAAA','HHHHxx' -237,122,1,1,7,17,7,37,37,237,237,14,15,'DJAAAA','SEAAAA','OOOOxx' -816,123,0,0,6,16,6,16,16,316,816,12,13,'KFAAAA','TEAAAA','VVVVxx' -917,124,1,1,7,17,7,17,117,417,917,14,15,'HJAAAA','UEAAAA','AAAAxx' -844,125,0,0,4,4,4,44,44,344,844,8,9,'MGAAAA','VEAAAA','HHHHxx' -657,126,1,1,7,17,7,57,57,157,657,14,15,'HZAAAA','WEAAAA','OOOOxx' -952,127,0,0,2,12,2,52,152,452,952,4,5,'QKAAAA','XEAAAA','VVVVxx' -519,128,1,3,9,19,9,19,119,19,519,18,19,'ZTAAAA','YEAAAA','AAAAxx' -792,129,0,0,2,12,2,92,192,292,792,4,5,'MEAAAA','ZEAAAA','HHHHxx' -275,130,1,3,5,15,5,75,75,275,275,10,11,'PKAAAA','AFAAAA','OOOOxx' -319,131,1,3,9,19,9,19,119,319,319,18,19,'HMAAAA','BFAAAA','VVVVxx' -487,132,1,3,7,7,7,87,87,487,487,14,15,'TSAAAA','CFAAAA','AAAAxx' -945,133,1,1,5,5,5,45,145,445,945,10,11,'JKAAAA','DFAAAA','HHHHxx' -584,134,0,0,4,4,4,84,184,84,584,8,9,'MWAAAA','EFAAAA','OOOOxx' -765,135,1,1,5,5,5,65,165,265,765,10,11,'LDAAAA','FFAAAA','VVVVxx' -814,136,0,2,4,14,4,14,14,314,814,8,9,'IFAAAA','GFAAAA','AAAAxx' -359,137,1,3,9,19,9,59,159,359,359,18,19,'VNAAAA','HFAAAA','HHHHxx' -548,138,0,0,8,8,8,48,148,48,548,16,17,'CVAAAA','IFAAAA','OOOOxx' -811,139,1,3,1,11,1,11,11,311,811,2,3,'FFAAAA','JFAAAA','VVVVxx' -531,140,1,3,1,11,1,31,131,31,531,2,3,'LUAAAA','KFAAAA','AAAAxx' -104,141,0,0,4,4,4,4,104,104,104,8,9,'AEAAAA','LFAAAA','HHHHxx' -33,142,1,1,3,13,3,33,33,33,33,6,7,'HBAAAA','MFAAAA','OOOOxx' -404,143,0,0,4,4,4,4,4,404,404,8,9,'OPAAAA','NFAAAA','VVVVxx' -995,144,1,3,5,15,5,95,195,495,995,10,11,'HMAAAA','OFAAAA','AAAAxx' -408,145,0,0,8,8,8,8,8,408,408,16,17,'SPAAAA','PFAAAA','HHHHxx' -93,146,1,1,3,13,3,93,93,93,93,6,7,'PDAAAA','QFAAAA','OOOOxx' -794,147,0,2,4,14,4,94,194,294,794,8,9,'OEAAAA','RFAAAA','VVVVxx' -833,148,1,1,3,13,3,33,33,333,833,6,7,'BGAAAA','SFAAAA','AAAAxx' -615,149,1,3,5,15,5,15,15,115,615,10,11,'RXAAAA','TFAAAA','HHHHxx' -333,150,1,1,3,13,3,33,133,333,333,6,7,'VMAAAA','UFAAAA','OOOOxx' -357,151,1,1,7,17,7,57,157,357,357,14,15,'TNAAAA','VFAAAA','VVVVxx' -999,152,1,3,9,19,9,99,199,499,999,18,19,'LMAAAA','WFAAAA','AAAAxx' -515,153,1,3,5,15,5,15,115,15,515,10,11,'VTAAAA','XFAAAA','HHHHxx' -685,154,1,1,5,5,5,85,85,185,685,10,11,'JAAAAA','YFAAAA','OOOOxx' -692,155,0,0,2,12,2,92,92,192,692,4,5,'QAAAAA','ZFAAAA','VVVVxx' -627,156,1,3,7,7,7,27,27,127,627,14,15,'DYAAAA','AGAAAA','AAAAxx' -654,157,0,2,4,14,4,54,54,154,654,8,9,'EZAAAA','BGAAAA','HHHHxx' -115,158,1,3,5,15,5,15,115,115,115,10,11,'LEAAAA','CGAAAA','OOOOxx' -75,159,1,3,5,15,5,75,75,75,75,10,11,'XCAAAA','DGAAAA','VVVVxx' -14,160,0,2,4,14,4,14,14,14,14,8,9,'OAAAAA','EGAAAA','AAAAxx' -148,161,0,0,8,8,8,48,148,148,148,16,17,'SFAAAA','FGAAAA','HHHHxx' -201,162,1,1,1,1,1,1,1,201,201,2,3,'THAAAA','GGAAAA','OOOOxx' -862,163,0,2,2,2,2,62,62,362,862,4,5,'EHAAAA','HGAAAA','VVVVxx' -634,164,0,2,4,14,4,34,34,134,634,8,9,'KYAAAA','IGAAAA','AAAAxx' -589,165,1,1,9,9,9,89,189,89,589,18,19,'RWAAAA','JGAAAA','HHHHxx' -142,166,0,2,2,2,2,42,142,142,142,4,5,'MFAAAA','KGAAAA','OOOOxx' -545,167,1,1,5,5,5,45,145,45,545,10,11,'ZUAAAA','LGAAAA','VVVVxx' -983,168,1,3,3,3,3,83,183,483,983,6,7,'VLAAAA','MGAAAA','AAAAxx' -87,169,1,3,7,7,7,87,87,87,87,14,15,'JDAAAA','NGAAAA','HHHHxx' -335,170,1,3,5,15,5,35,135,335,335,10,11,'XMAAAA','OGAAAA','OOOOxx' -915,171,1,3,5,15,5,15,115,415,915,10,11,'FJAAAA','PGAAAA','VVVVxx' -286,172,0,2,6,6,6,86,86,286,286,12,13,'ALAAAA','QGAAAA','AAAAxx' -361,173,1,1,1,1,1,61,161,361,361,2,3,'XNAAAA','RGAAAA','HHHHxx' -97,174,1,1,7,17,7,97,97,97,97,14,15,'TDAAAA','SGAAAA','OOOOxx' -98,175,0,2,8,18,8,98,98,98,98,16,17,'UDAAAA','TGAAAA','VVVVxx' -377,176,1,1,7,17,7,77,177,377,377,14,15,'NOAAAA','UGAAAA','AAAAxx' -525,177,1,1,5,5,5,25,125,25,525,10,11,'FUAAAA','VGAAAA','HHHHxx' -448,178,0,0,8,8,8,48,48,448,448,16,17,'GRAAAA','WGAAAA','OOOOxx' -154,179,0,2,4,14,4,54,154,154,154,8,9,'YFAAAA','XGAAAA','VVVVxx' -866,180,0,2,6,6,6,66,66,366,866,12,13,'IHAAAA','YGAAAA','AAAAxx' -741,181,1,1,1,1,1,41,141,241,741,2,3,'NCAAAA','ZGAAAA','HHHHxx' -172,182,0,0,2,12,2,72,172,172,172,4,5,'QGAAAA','AHAAAA','OOOOxx' -843,183,1,3,3,3,3,43,43,343,843,6,7,'LGAAAA','BHAAAA','VVVVxx' -378,184,0,2,8,18,8,78,178,378,378,16,17,'OOAAAA','CHAAAA','AAAAxx' -804,185,0,0,4,4,4,4,4,304,804,8,9,'YEAAAA','DHAAAA','HHHHxx' -596,186,0,0,6,16,6,96,196,96,596,12,13,'YWAAAA','EHAAAA','OOOOxx' -77,187,1,1,7,17,7,77,77,77,77,14,15,'ZCAAAA','FHAAAA','VVVVxx' -572,188,0,0,2,12,2,72,172,72,572,4,5,'AWAAAA','GHAAAA','AAAAxx' -444,189,0,0,4,4,4,44,44,444,444,8,9,'CRAAAA','HHAAAA','HHHHxx' -47,190,1,3,7,7,7,47,47,47,47,14,15,'VBAAAA','IHAAAA','OOOOxx' -274,191,0,2,4,14,4,74,74,274,274,8,9,'OKAAAA','JHAAAA','VVVVxx' -40,192,0,0,0,0,0,40,40,40,40,0,1,'OBAAAA','KHAAAA','AAAAxx' -339,193,1,3,9,19,9,39,139,339,339,18,19,'BNAAAA','LHAAAA','HHHHxx' -13,194,1,1,3,13,3,13,13,13,13,6,7,'NAAAAA','MHAAAA','OOOOxx' -878,195,0,2,8,18,8,78,78,378,878,16,17,'UHAAAA','NHAAAA','VVVVxx' -53,196,1,1,3,13,3,53,53,53,53,6,7,'BCAAAA','OHAAAA','AAAAxx' -939,197,1,3,9,19,9,39,139,439,939,18,19,'DKAAAA','PHAAAA','HHHHxx' -928,198,0,0,8,8,8,28,128,428,928,16,17,'SJAAAA','QHAAAA','OOOOxx' -886,199,0,2,6,6,6,86,86,386,886,12,13,'CIAAAA','RHAAAA','VVVVxx' -267,200,1,3,7,7,7,67,67,267,267,14,15,'HKAAAA','SHAAAA','AAAAxx' -105,201,1,1,5,5,5,5,105,105,105,10,11,'BEAAAA','THAAAA','HHHHxx' -312,202,0,0,2,12,2,12,112,312,312,4,5,'AMAAAA','UHAAAA','OOOOxx' -552,203,0,0,2,12,2,52,152,52,552,4,5,'GVAAAA','VHAAAA','VVVVxx' -918,204,0,2,8,18,8,18,118,418,918,16,17,'IJAAAA','WHAAAA','AAAAxx' -114,205,0,2,4,14,4,14,114,114,114,8,9,'KEAAAA','XHAAAA','HHHHxx' -805,206,1,1,5,5,5,5,5,305,805,10,11,'ZEAAAA','YHAAAA','OOOOxx' -875,207,1,3,5,15,5,75,75,375,875,10,11,'RHAAAA','ZHAAAA','VVVVxx' -225,208,1,1,5,5,5,25,25,225,225,10,11,'RIAAAA','AIAAAA','AAAAxx' -495,209,1,3,5,15,5,95,95,495,495,10,11,'BTAAAA','BIAAAA','HHHHxx' -150,210,0,2,0,10,0,50,150,150,150,0,1,'UFAAAA','CIAAAA','OOOOxx' -759,211,1,3,9,19,9,59,159,259,759,18,19,'FDAAAA','DIAAAA','VVVVxx' -149,212,1,1,9,9,9,49,149,149,149,18,19,'TFAAAA','EIAAAA','AAAAxx' -480,213,0,0,0,0,0,80,80,480,480,0,1,'MSAAAA','FIAAAA','HHHHxx' -1,214,1,1,1,1,1,1,1,1,1,2,3,'BAAAAA','GIAAAA','OOOOxx' -557,215,1,1,7,17,7,57,157,57,557,14,15,'LVAAAA','HIAAAA','VVVVxx' -295,216,1,3,5,15,5,95,95,295,295,10,11,'JLAAAA','IIAAAA','AAAAxx' -854,217,0,2,4,14,4,54,54,354,854,8,9,'WGAAAA','JIAAAA','HHHHxx' -420,218,0,0,0,0,0,20,20,420,420,0,1,'EQAAAA','KIAAAA','OOOOxx' -414,219,0,2,4,14,4,14,14,414,414,8,9,'YPAAAA','LIAAAA','VVVVxx' -758,220,0,2,8,18,8,58,158,258,758,16,17,'EDAAAA','MIAAAA','AAAAxx' -879,221,1,3,9,19,9,79,79,379,879,18,19,'VHAAAA','NIAAAA','HHHHxx' -332,222,0,0,2,12,2,32,132,332,332,4,5,'UMAAAA','OIAAAA','OOOOxx' -78,223,0,2,8,18,8,78,78,78,78,16,17,'ADAAAA','PIAAAA','VVVVxx' -851,224,1,3,1,11,1,51,51,351,851,2,3,'TGAAAA','QIAAAA','AAAAxx' -592,225,0,0,2,12,2,92,192,92,592,4,5,'UWAAAA','RIAAAA','HHHHxx' -979,226,1,3,9,19,9,79,179,479,979,18,19,'RLAAAA','SIAAAA','OOOOxx' -989,227,1,1,9,9,9,89,189,489,989,18,19,'BMAAAA','TIAAAA','VVVVxx' -752,228,0,0,2,12,2,52,152,252,752,4,5,'YCAAAA','UIAAAA','AAAAxx' -214,229,0,2,4,14,4,14,14,214,214,8,9,'GIAAAA','VIAAAA','HHHHxx' -453,230,1,1,3,13,3,53,53,453,453,6,7,'LRAAAA','WIAAAA','OOOOxx' -540,231,0,0,0,0,0,40,140,40,540,0,1,'UUAAAA','XIAAAA','VVVVxx' -597,232,1,1,7,17,7,97,197,97,597,14,15,'ZWAAAA','YIAAAA','AAAAxx' -356,233,0,0,6,16,6,56,156,356,356,12,13,'SNAAAA','ZIAAAA','HHHHxx' -720,234,0,0,0,0,0,20,120,220,720,0,1,'SBAAAA','AJAAAA','OOOOxx' -367,235,1,3,7,7,7,67,167,367,367,14,15,'DOAAAA','BJAAAA','VVVVxx' -762,236,0,2,2,2,2,62,162,262,762,4,5,'IDAAAA','CJAAAA','AAAAxx' -986,237,0,2,6,6,6,86,186,486,986,12,13,'YLAAAA','DJAAAA','HHHHxx' -924,238,0,0,4,4,4,24,124,424,924,8,9,'OJAAAA','EJAAAA','OOOOxx' -779,239,1,3,9,19,9,79,179,279,779,18,19,'ZDAAAA','FJAAAA','VVVVxx' -684,240,0,0,4,4,4,84,84,184,684,8,9,'IAAAAA','GJAAAA','AAAAxx' -413,241,1,1,3,13,3,13,13,413,413,6,7,'XPAAAA','HJAAAA','HHHHxx' -479,242,1,3,9,19,9,79,79,479,479,18,19,'LSAAAA','IJAAAA','OOOOxx' -731,243,1,3,1,11,1,31,131,231,731,2,3,'DCAAAA','JJAAAA','VVVVxx' -409,244,1,1,9,9,9,9,9,409,409,18,19,'TPAAAA','KJAAAA','AAAAxx' -372,245,0,0,2,12,2,72,172,372,372,4,5,'IOAAAA','LJAAAA','HHHHxx' -139,246,1,3,9,19,9,39,139,139,139,18,19,'JFAAAA','MJAAAA','OOOOxx' -717,247,1,1,7,17,7,17,117,217,717,14,15,'PBAAAA','NJAAAA','VVVVxx' -539,248,1,3,9,19,9,39,139,39,539,18,19,'TUAAAA','OJAAAA','AAAAxx' -318,249,0,2,8,18,8,18,118,318,318,16,17,'GMAAAA','PJAAAA','HHHHxx' -208,250,0,0,8,8,8,8,8,208,208,16,17,'AIAAAA','QJAAAA','OOOOxx' -797,251,1,1,7,17,7,97,197,297,797,14,15,'REAAAA','RJAAAA','VVVVxx' -661,252,1,1,1,1,1,61,61,161,661,2,3,'LZAAAA','SJAAAA','AAAAxx' -50,253,0,2,0,10,0,50,50,50,50,0,1,'YBAAAA','TJAAAA','HHHHxx' -102,254,0,2,2,2,2,2,102,102,102,4,5,'YDAAAA','UJAAAA','OOOOxx' -484,255,0,0,4,4,4,84,84,484,484,8,9,'QSAAAA','VJAAAA','VVVVxx' -108,256,0,0,8,8,8,8,108,108,108,16,17,'EEAAAA','WJAAAA','AAAAxx' -140,257,0,0,0,0,0,40,140,140,140,0,1,'KFAAAA','XJAAAA','HHHHxx' -996,258,0,0,6,16,6,96,196,496,996,12,13,'IMAAAA','YJAAAA','OOOOxx' -687,259,1,3,7,7,7,87,87,187,687,14,15,'LAAAAA','ZJAAAA','VVVVxx' -241,260,1,1,1,1,1,41,41,241,241,2,3,'HJAAAA','AKAAAA','AAAAxx' -923,261,1,3,3,3,3,23,123,423,923,6,7,'NJAAAA','BKAAAA','HHHHxx' -500,262,0,0,0,0,0,0,100,0,500,0,1,'GTAAAA','CKAAAA','OOOOxx' -536,263,0,0,6,16,6,36,136,36,536,12,13,'QUAAAA','DKAAAA','VVVVxx' -490,264,0,2,0,10,0,90,90,490,490,0,1,'WSAAAA','EKAAAA','AAAAxx' -773,265,1,1,3,13,3,73,173,273,773,6,7,'TDAAAA','FKAAAA','HHHHxx' -19,266,1,3,9,19,9,19,19,19,19,18,19,'TAAAAA','GKAAAA','OOOOxx' -534,267,0,2,4,14,4,34,134,34,534,8,9,'OUAAAA','HKAAAA','VVVVxx' -941,268,1,1,1,1,1,41,141,441,941,2,3,'FKAAAA','IKAAAA','AAAAxx' -477,269,1,1,7,17,7,77,77,477,477,14,15,'JSAAAA','JKAAAA','HHHHxx' -173,270,1,1,3,13,3,73,173,173,173,6,7,'RGAAAA','KKAAAA','OOOOxx' -113,271,1,1,3,13,3,13,113,113,113,6,7,'JEAAAA','LKAAAA','VVVVxx' -526,272,0,2,6,6,6,26,126,26,526,12,13,'GUAAAA','MKAAAA','AAAAxx' -727,273,1,3,7,7,7,27,127,227,727,14,15,'ZBAAAA','NKAAAA','HHHHxx' -302,274,0,2,2,2,2,2,102,302,302,4,5,'QLAAAA','OKAAAA','OOOOxx' -789,275,1,1,9,9,9,89,189,289,789,18,19,'JEAAAA','PKAAAA','VVVVxx' -447,276,1,3,7,7,7,47,47,447,447,14,15,'FRAAAA','QKAAAA','AAAAxx' -884,277,0,0,4,4,4,84,84,384,884,8,9,'AIAAAA','RKAAAA','HHHHxx' -718,278,0,2,8,18,8,18,118,218,718,16,17,'QBAAAA','SKAAAA','OOOOxx' -818,279,0,2,8,18,8,18,18,318,818,16,17,'MFAAAA','TKAAAA','VVVVxx' -466,280,0,2,6,6,6,66,66,466,466,12,13,'YRAAAA','UKAAAA','AAAAxx' -131,281,1,3,1,11,1,31,131,131,131,2,3,'BFAAAA','VKAAAA','HHHHxx' -503,282,1,3,3,3,3,3,103,3,503,6,7,'JTAAAA','WKAAAA','OOOOxx' -364,283,0,0,4,4,4,64,164,364,364,8,9,'AOAAAA','XKAAAA','VVVVxx' -934,284,0,2,4,14,4,34,134,434,934,8,9,'YJAAAA','YKAAAA','AAAAxx' -542,285,0,2,2,2,2,42,142,42,542,4,5,'WUAAAA','ZKAAAA','HHHHxx' -146,286,0,2,6,6,6,46,146,146,146,12,13,'QFAAAA','ALAAAA','OOOOxx' -652,287,0,0,2,12,2,52,52,152,652,4,5,'CZAAAA','BLAAAA','VVVVxx' -566,288,0,2,6,6,6,66,166,66,566,12,13,'UVAAAA','CLAAAA','AAAAxx' -788,289,0,0,8,8,8,88,188,288,788,16,17,'IEAAAA','DLAAAA','HHHHxx' -168,290,0,0,8,8,8,68,168,168,168,16,17,'MGAAAA','ELAAAA','OOOOxx' -736,291,0,0,6,16,6,36,136,236,736,12,13,'ICAAAA','FLAAAA','VVVVxx' -795,292,1,3,5,15,5,95,195,295,795,10,11,'PEAAAA','GLAAAA','AAAAxx' -103,293,1,3,3,3,3,3,103,103,103,6,7,'ZDAAAA','HLAAAA','HHHHxx' -763,294,1,3,3,3,3,63,163,263,763,6,7,'JDAAAA','ILAAAA','OOOOxx' -256,295,0,0,6,16,6,56,56,256,256,12,13,'WJAAAA','JLAAAA','VVVVxx' -63,296,1,3,3,3,3,63,63,63,63,6,7,'LCAAAA','KLAAAA','AAAAxx' -702,297,0,2,2,2,2,2,102,202,702,4,5,'ABAAAA','LLAAAA','HHHHxx' -390,298,0,2,0,10,0,90,190,390,390,0,1,'APAAAA','MLAAAA','OOOOxx' -116,299,0,0,6,16,6,16,116,116,116,12,13,'MEAAAA','NLAAAA','VVVVxx' -354,300,0,2,4,14,4,54,154,354,354,8,9,'QNAAAA','OLAAAA','AAAAxx' -162,301,0,2,2,2,2,62,162,162,162,4,5,'GGAAAA','PLAAAA','HHHHxx' -71,302,1,3,1,11,1,71,71,71,71,2,3,'TCAAAA','QLAAAA','OOOOxx' -916,303,0,0,6,16,6,16,116,416,916,12,13,'GJAAAA','RLAAAA','VVVVxx' -565,304,1,1,5,5,5,65,165,65,565,10,11,'TVAAAA','SLAAAA','AAAAxx' -509,305,1,1,9,9,9,9,109,9,509,18,19,'PTAAAA','TLAAAA','HHHHxx' -20,306,0,0,0,0,0,20,20,20,20,0,1,'UAAAAA','ULAAAA','OOOOxx' -813,307,1,1,3,13,3,13,13,313,813,6,7,'HFAAAA','VLAAAA','VVVVxx' -80,308,0,0,0,0,0,80,80,80,80,0,1,'CDAAAA','WLAAAA','AAAAxx' -400,309,0,0,0,0,0,0,0,400,400,0,1,'KPAAAA','XLAAAA','HHHHxx' -888,310,0,0,8,8,8,88,88,388,888,16,17,'EIAAAA','YLAAAA','OOOOxx' -825,311,1,1,5,5,5,25,25,325,825,10,11,'TFAAAA','ZLAAAA','VVVVxx' -401,312,1,1,1,1,1,1,1,401,401,2,3,'LPAAAA','AMAAAA','AAAAxx' -158,313,0,2,8,18,8,58,158,158,158,16,17,'CGAAAA','BMAAAA','HHHHxx' -973,314,1,1,3,13,3,73,173,473,973,6,7,'LLAAAA','CMAAAA','OOOOxx' -324,315,0,0,4,4,4,24,124,324,324,8,9,'MMAAAA','DMAAAA','VVVVxx' -873,316,1,1,3,13,3,73,73,373,873,6,7,'PHAAAA','EMAAAA','AAAAxx' -676,317,0,0,6,16,6,76,76,176,676,12,13,'AAAAAA','FMAAAA','HHHHxx' -199,318,1,3,9,19,9,99,199,199,199,18,19,'RHAAAA','GMAAAA','OOOOxx' -304,319,0,0,4,4,4,4,104,304,304,8,9,'SLAAAA','HMAAAA','VVVVxx' -338,320,0,2,8,18,8,38,138,338,338,16,17,'ANAAAA','IMAAAA','AAAAxx' -743,321,1,3,3,3,3,43,143,243,743,6,7,'PCAAAA','JMAAAA','HHHHxx' -730,322,0,2,0,10,0,30,130,230,730,0,1,'CCAAAA','KMAAAA','OOOOxx' -130,323,0,2,0,10,0,30,130,130,130,0,1,'AFAAAA','LMAAAA','VVVVxx' -224,324,0,0,4,4,4,24,24,224,224,8,9,'QIAAAA','MMAAAA','AAAAxx' -216,325,0,0,6,16,6,16,16,216,216,12,13,'IIAAAA','NMAAAA','HHHHxx' -2,326,0,2,2,2,2,2,2,2,2,4,5,'CAAAAA','OMAAAA','OOOOxx' -836,327,0,0,6,16,6,36,36,336,836,12,13,'EGAAAA','PMAAAA','VVVVxx' -443,328,1,3,3,3,3,43,43,443,443,6,7,'BRAAAA','QMAAAA','AAAAxx' -777,329,1,1,7,17,7,77,177,277,777,14,15,'XDAAAA','RMAAAA','HHHHxx' -126,330,0,2,6,6,6,26,126,126,126,12,13,'WEAAAA','SMAAAA','OOOOxx' -117,331,1,1,7,17,7,17,117,117,117,14,15,'NEAAAA','TMAAAA','VVVVxx' -633,332,1,1,3,13,3,33,33,133,633,6,7,'JYAAAA','UMAAAA','AAAAxx' -310,333,0,2,0,10,0,10,110,310,310,0,1,'YLAAAA','VMAAAA','HHHHxx' -622,334,0,2,2,2,2,22,22,122,622,4,5,'YXAAAA','WMAAAA','OOOOxx' -268,335,0,0,8,8,8,68,68,268,268,16,17,'IKAAAA','XMAAAA','VVVVxx' -384,336,0,0,4,4,4,84,184,384,384,8,9,'UOAAAA','YMAAAA','AAAAxx' -460,337,0,0,0,0,0,60,60,460,460,0,1,'SRAAAA','ZMAAAA','HHHHxx' -475,338,1,3,5,15,5,75,75,475,475,10,11,'HSAAAA','ANAAAA','OOOOxx' -624,339,0,0,4,4,4,24,24,124,624,8,9,'AYAAAA','BNAAAA','VVVVxx' -826,340,0,2,6,6,6,26,26,326,826,12,13,'UFAAAA','CNAAAA','AAAAxx' -680,341,0,0,0,0,0,80,80,180,680,0,1,'EAAAAA','DNAAAA','HHHHxx' -306,342,0,2,6,6,6,6,106,306,306,12,13,'ULAAAA','ENAAAA','OOOOxx' -896,343,0,0,6,16,6,96,96,396,896,12,13,'MIAAAA','FNAAAA','VVVVxx' -30,344,0,2,0,10,0,30,30,30,30,0,1,'EBAAAA','GNAAAA','AAAAxx' -576,345,0,0,6,16,6,76,176,76,576,12,13,'EWAAAA','HNAAAA','HHHHxx' -551,346,1,3,1,11,1,51,151,51,551,2,3,'FVAAAA','INAAAA','OOOOxx' -639,347,1,3,9,19,9,39,39,139,639,18,19,'PYAAAA','JNAAAA','VVVVxx' -975,348,1,3,5,15,5,75,175,475,975,10,11,'NLAAAA','KNAAAA','AAAAxx' -882,349,0,2,2,2,2,82,82,382,882,4,5,'YHAAAA','LNAAAA','HHHHxx' -160,350,0,0,0,0,0,60,160,160,160,0,1,'EGAAAA','MNAAAA','OOOOxx' -522,351,0,2,2,2,2,22,122,22,522,4,5,'CUAAAA','NNAAAA','VVVVxx' -620,352,0,0,0,0,0,20,20,120,620,0,1,'WXAAAA','ONAAAA','AAAAxx' -719,353,1,3,9,19,9,19,119,219,719,18,19,'RBAAAA','PNAAAA','HHHHxx' -88,354,0,0,8,8,8,88,88,88,88,16,17,'KDAAAA','QNAAAA','OOOOxx' -614,355,0,2,4,14,4,14,14,114,614,8,9,'QXAAAA','RNAAAA','VVVVxx' -54,356,0,2,4,14,4,54,54,54,54,8,9,'CCAAAA','SNAAAA','AAAAxx' -209,357,1,1,9,9,9,9,9,209,209,18,19,'BIAAAA','TNAAAA','HHHHxx' -67,358,1,3,7,7,7,67,67,67,67,14,15,'PCAAAA','UNAAAA','OOOOxx' -809,359,1,1,9,9,9,9,9,309,809,18,19,'DFAAAA','VNAAAA','VVVVxx' -982,360,0,2,2,2,2,82,182,482,982,4,5,'ULAAAA','WNAAAA','AAAAxx' -817,361,1,1,7,17,7,17,17,317,817,14,15,'LFAAAA','XNAAAA','HHHHxx' -187,362,1,3,7,7,7,87,187,187,187,14,15,'FHAAAA','YNAAAA','OOOOxx' -992,363,0,0,2,12,2,92,192,492,992,4,5,'EMAAAA','ZNAAAA','VVVVxx' -580,364,0,0,0,0,0,80,180,80,580,0,1,'IWAAAA','AOAAAA','AAAAxx' -658,365,0,2,8,18,8,58,58,158,658,16,17,'IZAAAA','BOAAAA','HHHHxx' -222,366,0,2,2,2,2,22,22,222,222,4,5,'OIAAAA','COAAAA','OOOOxx' -667,367,1,3,7,7,7,67,67,167,667,14,15,'RZAAAA','DOAAAA','VVVVxx' -715,368,1,3,5,15,5,15,115,215,715,10,11,'NBAAAA','EOAAAA','AAAAxx' -990,369,0,2,0,10,0,90,190,490,990,0,1,'CMAAAA','FOAAAA','HHHHxx' -22,370,0,2,2,2,2,22,22,22,22,4,5,'WAAAAA','GOAAAA','OOOOxx' -362,371,0,2,2,2,2,62,162,362,362,4,5,'YNAAAA','HOAAAA','VVVVxx' -376,372,0,0,6,16,6,76,176,376,376,12,13,'MOAAAA','IOAAAA','AAAAxx' -246,373,0,2,6,6,6,46,46,246,246,12,13,'MJAAAA','JOAAAA','HHHHxx' -300,374,0,0,0,0,0,0,100,300,300,0,1,'OLAAAA','KOAAAA','OOOOxx' -231,375,1,3,1,11,1,31,31,231,231,2,3,'XIAAAA','LOAAAA','VVVVxx' -151,376,1,3,1,11,1,51,151,151,151,2,3,'VFAAAA','MOAAAA','AAAAxx' -29,377,1,1,9,9,9,29,29,29,29,18,19,'DBAAAA','NOAAAA','HHHHxx' -297,378,1,1,7,17,7,97,97,297,297,14,15,'LLAAAA','OOAAAA','OOOOxx' -403,379,1,3,3,3,3,3,3,403,403,6,7,'NPAAAA','POAAAA','VVVVxx' -716,380,0,0,6,16,6,16,116,216,716,12,13,'OBAAAA','QOAAAA','AAAAxx' -260,381,0,0,0,0,0,60,60,260,260,0,1,'AKAAAA','ROAAAA','HHHHxx' -170,382,0,2,0,10,0,70,170,170,170,0,1,'OGAAAA','SOAAAA','OOOOxx' -285,383,1,1,5,5,5,85,85,285,285,10,11,'ZKAAAA','TOAAAA','VVVVxx' -82,384,0,2,2,2,2,82,82,82,82,4,5,'EDAAAA','UOAAAA','AAAAxx' -958,385,0,2,8,18,8,58,158,458,958,16,17,'WKAAAA','VOAAAA','HHHHxx' -175,386,1,3,5,15,5,75,175,175,175,10,11,'TGAAAA','WOAAAA','OOOOxx' -671,387,1,3,1,11,1,71,71,171,671,2,3,'VZAAAA','XOAAAA','VVVVxx' -822,388,0,2,2,2,2,22,22,322,822,4,5,'QFAAAA','YOAAAA','AAAAxx' -573,389,1,1,3,13,3,73,173,73,573,6,7,'BWAAAA','ZOAAAA','HHHHxx' -723,390,1,3,3,3,3,23,123,223,723,6,7,'VBAAAA','APAAAA','OOOOxx' -195,391,1,3,5,15,5,95,195,195,195,10,11,'NHAAAA','BPAAAA','VVVVxx' -197,392,1,1,7,17,7,97,197,197,197,14,15,'PHAAAA','CPAAAA','AAAAxx' -755,393,1,3,5,15,5,55,155,255,755,10,11,'BDAAAA','DPAAAA','HHHHxx' -42,394,0,2,2,2,2,42,42,42,42,4,5,'QBAAAA','EPAAAA','OOOOxx' -897,395,1,1,7,17,7,97,97,397,897,14,15,'NIAAAA','FPAAAA','VVVVxx' -309,396,1,1,9,9,9,9,109,309,309,18,19,'XLAAAA','GPAAAA','AAAAxx' -724,397,0,0,4,4,4,24,124,224,724,8,9,'WBAAAA','HPAAAA','HHHHxx' -474,398,0,2,4,14,4,74,74,474,474,8,9,'GSAAAA','IPAAAA','OOOOxx' -345,399,1,1,5,5,5,45,145,345,345,10,11,'HNAAAA','JPAAAA','VVVVxx' -678,400,0,2,8,18,8,78,78,178,678,16,17,'CAAAAA','KPAAAA','AAAAxx' -757,401,1,1,7,17,7,57,157,257,757,14,15,'DDAAAA','LPAAAA','HHHHxx' -600,402,0,0,0,0,0,0,0,100,600,0,1,'CXAAAA','MPAAAA','OOOOxx' -184,403,0,0,4,4,4,84,184,184,184,8,9,'CHAAAA','NPAAAA','VVVVxx' -155,404,1,3,5,15,5,55,155,155,155,10,11,'ZFAAAA','OPAAAA','AAAAxx' -136,405,0,0,6,16,6,36,136,136,136,12,13,'GFAAAA','PPAAAA','HHHHxx' -889,406,1,1,9,9,9,89,89,389,889,18,19,'FIAAAA','QPAAAA','OOOOxx' -95,407,1,3,5,15,5,95,95,95,95,10,11,'RDAAAA','RPAAAA','VVVVxx' -549,408,1,1,9,9,9,49,149,49,549,18,19,'DVAAAA','SPAAAA','AAAAxx' -81,409,1,1,1,1,1,81,81,81,81,2,3,'DDAAAA','TPAAAA','HHHHxx' -679,410,1,3,9,19,9,79,79,179,679,18,19,'DAAAAA','UPAAAA','OOOOxx' -27,411,1,3,7,7,7,27,27,27,27,14,15,'BBAAAA','VPAAAA','VVVVxx' -748,412,0,0,8,8,8,48,148,248,748,16,17,'UCAAAA','WPAAAA','AAAAxx' -107,413,1,3,7,7,7,7,107,107,107,14,15,'DEAAAA','XPAAAA','HHHHxx' -870,414,0,2,0,10,0,70,70,370,870,0,1,'MHAAAA','YPAAAA','OOOOxx' -848,415,0,0,8,8,8,48,48,348,848,16,17,'QGAAAA','ZPAAAA','VVVVxx' -764,416,0,0,4,4,4,64,164,264,764,8,9,'KDAAAA','AQAAAA','AAAAxx' -535,417,1,3,5,15,5,35,135,35,535,10,11,'PUAAAA','BQAAAA','HHHHxx' -211,418,1,3,1,11,1,11,11,211,211,2,3,'DIAAAA','CQAAAA','OOOOxx' -625,419,1,1,5,5,5,25,25,125,625,10,11,'BYAAAA','DQAAAA','VVVVxx' -96,420,0,0,6,16,6,96,96,96,96,12,13,'SDAAAA','EQAAAA','AAAAxx' -828,421,0,0,8,8,8,28,28,328,828,16,17,'WFAAAA','FQAAAA','HHHHxx' -229,422,1,1,9,9,9,29,29,229,229,18,19,'VIAAAA','GQAAAA','OOOOxx' -602,423,0,2,2,2,2,2,2,102,602,4,5,'EXAAAA','HQAAAA','VVVVxx' -742,424,0,2,2,2,2,42,142,242,742,4,5,'OCAAAA','IQAAAA','AAAAxx' -451,425,1,3,1,11,1,51,51,451,451,2,3,'JRAAAA','JQAAAA','HHHHxx' -991,426,1,3,1,11,1,91,191,491,991,2,3,'DMAAAA','KQAAAA','OOOOxx' -301,427,1,1,1,1,1,1,101,301,301,2,3,'PLAAAA','LQAAAA','VVVVxx' -510,428,0,2,0,10,0,10,110,10,510,0,1,'QTAAAA','MQAAAA','AAAAxx' -299,429,1,3,9,19,9,99,99,299,299,18,19,'NLAAAA','NQAAAA','HHHHxx' -961,430,1,1,1,1,1,61,161,461,961,2,3,'ZKAAAA','OQAAAA','OOOOxx' -3,431,1,3,3,3,3,3,3,3,3,6,7,'DAAAAA','PQAAAA','VVVVxx' -106,432,0,2,6,6,6,6,106,106,106,12,13,'CEAAAA','QQAAAA','AAAAxx' -591,433,1,3,1,11,1,91,191,91,591,2,3,'TWAAAA','RQAAAA','HHHHxx' -700,434,0,0,0,0,0,0,100,200,700,0,1,'YAAAAA','SQAAAA','OOOOxx' -841,435,1,1,1,1,1,41,41,341,841,2,3,'JGAAAA','TQAAAA','VVVVxx' -829,436,1,1,9,9,9,29,29,329,829,18,19,'XFAAAA','UQAAAA','AAAAxx' -508,437,0,0,8,8,8,8,108,8,508,16,17,'OTAAAA','VQAAAA','HHHHxx' -750,438,0,2,0,10,0,50,150,250,750,0,1,'WCAAAA','WQAAAA','OOOOxx' -665,439,1,1,5,5,5,65,65,165,665,10,11,'PZAAAA','XQAAAA','VVVVxx' -157,440,1,1,7,17,7,57,157,157,157,14,15,'BGAAAA','YQAAAA','AAAAxx' -694,441,0,2,4,14,4,94,94,194,694,8,9,'SAAAAA','ZQAAAA','HHHHxx' -176,442,0,0,6,16,6,76,176,176,176,12,13,'UGAAAA','ARAAAA','OOOOxx' -950,443,0,2,0,10,0,50,150,450,950,0,1,'OKAAAA','BRAAAA','VVVVxx' -970,444,0,2,0,10,0,70,170,470,970,0,1,'ILAAAA','CRAAAA','AAAAxx' -496,445,0,0,6,16,6,96,96,496,496,12,13,'CTAAAA','DRAAAA','HHHHxx' -429,446,1,1,9,9,9,29,29,429,429,18,19,'NQAAAA','ERAAAA','OOOOxx' -907,447,1,3,7,7,7,7,107,407,907,14,15,'XIAAAA','FRAAAA','VVVVxx' -72,448,0,0,2,12,2,72,72,72,72,4,5,'UCAAAA','GRAAAA','AAAAxx' -186,449,0,2,6,6,6,86,186,186,186,12,13,'EHAAAA','HRAAAA','HHHHxx' -713,450,1,1,3,13,3,13,113,213,713,6,7,'LBAAAA','IRAAAA','OOOOxx' -432,451,0,0,2,12,2,32,32,432,432,4,5,'QQAAAA','JRAAAA','VVVVxx' -735,452,1,3,5,15,5,35,135,235,735,10,11,'HCAAAA','KRAAAA','AAAAxx' -516,453,0,0,6,16,6,16,116,16,516,12,13,'WTAAAA','LRAAAA','HHHHxx' -964,454,0,0,4,4,4,64,164,464,964,8,9,'CLAAAA','MRAAAA','OOOOxx' -840,455,0,0,0,0,0,40,40,340,840,0,1,'IGAAAA','NRAAAA','VVVVxx' -550,456,0,2,0,10,0,50,150,50,550,0,1,'EVAAAA','ORAAAA','AAAAxx' -360,457,0,0,0,0,0,60,160,360,360,0,1,'WNAAAA','PRAAAA','HHHHxx' -827,458,1,3,7,7,7,27,27,327,827,14,15,'VFAAAA','QRAAAA','OOOOxx' -959,459,1,3,9,19,9,59,159,459,959,18,19,'XKAAAA','RRAAAA','VVVVxx' -454,460,0,2,4,14,4,54,54,454,454,8,9,'MRAAAA','SRAAAA','AAAAxx' -819,461,1,3,9,19,9,19,19,319,819,18,19,'NFAAAA','TRAAAA','HHHHxx' -745,462,1,1,5,5,5,45,145,245,745,10,11,'RCAAAA','URAAAA','OOOOxx' -279,463,1,3,9,19,9,79,79,279,279,18,19,'TKAAAA','VRAAAA','VVVVxx' -426,464,0,2,6,6,6,26,26,426,426,12,13,'KQAAAA','WRAAAA','AAAAxx' -70,465,0,2,0,10,0,70,70,70,70,0,1,'SCAAAA','XRAAAA','HHHHxx' -637,466,1,1,7,17,7,37,37,137,637,14,15,'NYAAAA','YRAAAA','OOOOxx' -417,467,1,1,7,17,7,17,17,417,417,14,15,'BQAAAA','ZRAAAA','VVVVxx' -586,468,0,2,6,6,6,86,186,86,586,12,13,'OWAAAA','ASAAAA','AAAAxx' -314,469,0,2,4,14,4,14,114,314,314,8,9,'CMAAAA','BSAAAA','HHHHxx' -101,470,1,1,1,1,1,1,101,101,101,2,3,'XDAAAA','CSAAAA','OOOOxx' -205,471,1,1,5,5,5,5,5,205,205,10,11,'XHAAAA','DSAAAA','VVVVxx' -969,472,1,1,9,9,9,69,169,469,969,18,19,'HLAAAA','ESAAAA','AAAAxx' -217,473,1,1,7,17,7,17,17,217,217,14,15,'JIAAAA','FSAAAA','HHHHxx' -281,474,1,1,1,1,1,81,81,281,281,2,3,'VKAAAA','GSAAAA','OOOOxx' -984,475,0,0,4,4,4,84,184,484,984,8,9,'WLAAAA','HSAAAA','VVVVxx' -366,476,0,2,6,6,6,66,166,366,366,12,13,'COAAAA','ISAAAA','AAAAxx' -483,477,1,3,3,3,3,83,83,483,483,6,7,'PSAAAA','JSAAAA','HHHHxx' -838,478,0,2,8,18,8,38,38,338,838,16,17,'GGAAAA','KSAAAA','OOOOxx' -64,479,0,0,4,4,4,64,64,64,64,8,9,'MCAAAA','LSAAAA','VVVVxx' -981,480,1,1,1,1,1,81,181,481,981,2,3,'TLAAAA','MSAAAA','AAAAxx' -538,481,0,2,8,18,8,38,138,38,538,16,17,'SUAAAA','NSAAAA','HHHHxx' -39,482,1,3,9,19,9,39,39,39,39,18,19,'NBAAAA','OSAAAA','OOOOxx' -60,483,0,0,0,0,0,60,60,60,60,0,1,'ICAAAA','PSAAAA','VVVVxx' -874,484,0,2,4,14,4,74,74,374,874,8,9,'QHAAAA','QSAAAA','AAAAxx' -955,485,1,3,5,15,5,55,155,455,955,10,11,'TKAAAA','RSAAAA','HHHHxx' -347,486,1,3,7,7,7,47,147,347,347,14,15,'JNAAAA','SSAAAA','OOOOxx' -227,487,1,3,7,7,7,27,27,227,227,14,15,'TIAAAA','TSAAAA','VVVVxx' -44,488,0,0,4,4,4,44,44,44,44,8,9,'SBAAAA','USAAAA','AAAAxx' -446,489,0,2,6,6,6,46,46,446,446,12,13,'ERAAAA','VSAAAA','HHHHxx' -605,490,1,1,5,5,5,5,5,105,605,10,11,'HXAAAA','WSAAAA','OOOOxx' -570,491,0,2,0,10,0,70,170,70,570,0,1,'YVAAAA','XSAAAA','VVVVxx' -895,492,1,3,5,15,5,95,95,395,895,10,11,'LIAAAA','YSAAAA','AAAAxx' -760,493,0,0,0,0,0,60,160,260,760,0,1,'GDAAAA','ZSAAAA','HHHHxx' -428,494,0,0,8,8,8,28,28,428,428,16,17,'MQAAAA','ATAAAA','OOOOxx' -628,495,0,0,8,8,8,28,28,128,628,16,17,'EYAAAA','BTAAAA','VVVVxx' -933,496,1,1,3,13,3,33,133,433,933,6,7,'XJAAAA','CTAAAA','AAAAxx' -263,497,1,3,3,3,3,63,63,263,263,6,7,'DKAAAA','DTAAAA','HHHHxx' -729,498,1,1,9,9,9,29,129,229,729,18,19,'BCAAAA','ETAAAA','OOOOxx' -860,499,0,0,0,0,0,60,60,360,860,0,1,'CHAAAA','FTAAAA','VVVVxx' -76,500,0,0,6,16,6,76,76,76,76,12,13,'YCAAAA','GTAAAA','AAAAxx' -293,501,1,1,3,13,3,93,93,293,293,6,7,'HLAAAA','HTAAAA','HHHHxx' -296,502,0,0,6,16,6,96,96,296,296,12,13,'KLAAAA','ITAAAA','OOOOxx' -124,503,0,0,4,4,4,24,124,124,124,8,9,'UEAAAA','JTAAAA','VVVVxx' -568,504,0,0,8,8,8,68,168,68,568,16,17,'WVAAAA','KTAAAA','AAAAxx' -337,505,1,1,7,17,7,37,137,337,337,14,15,'ZMAAAA','LTAAAA','HHHHxx' -464,506,0,0,4,4,4,64,64,464,464,8,9,'WRAAAA','MTAAAA','OOOOxx' -582,507,0,2,2,2,2,82,182,82,582,4,5,'KWAAAA','NTAAAA','VVVVxx' -207,508,1,3,7,7,7,7,7,207,207,14,15,'ZHAAAA','OTAAAA','AAAAxx' -518,509,0,2,8,18,8,18,118,18,518,16,17,'YTAAAA','PTAAAA','HHHHxx' -513,510,1,1,3,13,3,13,113,13,513,6,7,'TTAAAA','QTAAAA','OOOOxx' -127,511,1,3,7,7,7,27,127,127,127,14,15,'XEAAAA','RTAAAA','VVVVxx' -396,512,0,0,6,16,6,96,196,396,396,12,13,'GPAAAA','STAAAA','AAAAxx' -781,513,1,1,1,1,1,81,181,281,781,2,3,'BEAAAA','TTAAAA','HHHHxx' -233,514,1,1,3,13,3,33,33,233,233,6,7,'ZIAAAA','UTAAAA','OOOOxx' -709,515,1,1,9,9,9,9,109,209,709,18,19,'HBAAAA','VTAAAA','VVVVxx' -325,516,1,1,5,5,5,25,125,325,325,10,11,'NMAAAA','WTAAAA','AAAAxx' -143,517,1,3,3,3,3,43,143,143,143,6,7,'NFAAAA','XTAAAA','HHHHxx' -824,518,0,0,4,4,4,24,24,324,824,8,9,'SFAAAA','YTAAAA','OOOOxx' -122,519,0,2,2,2,2,22,122,122,122,4,5,'SEAAAA','ZTAAAA','VVVVxx' -10,520,0,2,0,10,0,10,10,10,10,0,1,'KAAAAA','AUAAAA','AAAAxx' -41,521,1,1,1,1,1,41,41,41,41,2,3,'PBAAAA','BUAAAA','HHHHxx' -618,522,0,2,8,18,8,18,18,118,618,16,17,'UXAAAA','CUAAAA','OOOOxx' -161,523,1,1,1,1,1,61,161,161,161,2,3,'FGAAAA','DUAAAA','VVVVxx' -801,524,1,1,1,1,1,1,1,301,801,2,3,'VEAAAA','EUAAAA','AAAAxx' -768,525,0,0,8,8,8,68,168,268,768,16,17,'ODAAAA','FUAAAA','HHHHxx' -642,526,0,2,2,2,2,42,42,142,642,4,5,'SYAAAA','GUAAAA','OOOOxx' -803,527,1,3,3,3,3,3,3,303,803,6,7,'XEAAAA','HUAAAA','VVVVxx' -317,528,1,1,7,17,7,17,117,317,317,14,15,'FMAAAA','IUAAAA','AAAAxx' -938,529,0,2,8,18,8,38,138,438,938,16,17,'CKAAAA','JUAAAA','HHHHxx' -649,530,1,1,9,9,9,49,49,149,649,18,19,'ZYAAAA','KUAAAA','OOOOxx' -738,531,0,2,8,18,8,38,138,238,738,16,17,'KCAAAA','LUAAAA','VVVVxx' -344,532,0,0,4,4,4,44,144,344,344,8,9,'GNAAAA','MUAAAA','AAAAxx' -399,533,1,3,9,19,9,99,199,399,399,18,19,'JPAAAA','NUAAAA','HHHHxx' -609,534,1,1,9,9,9,9,9,109,609,18,19,'LXAAAA','OUAAAA','OOOOxx' -677,535,1,1,7,17,7,77,77,177,677,14,15,'BAAAAA','PUAAAA','VVVVxx' -478,536,0,2,8,18,8,78,78,478,478,16,17,'KSAAAA','QUAAAA','AAAAxx' -452,537,0,0,2,12,2,52,52,452,452,4,5,'KRAAAA','RUAAAA','HHHHxx' -261,538,1,1,1,1,1,61,61,261,261,2,3,'BKAAAA','SUAAAA','OOOOxx' -449,539,1,1,9,9,9,49,49,449,449,18,19,'HRAAAA','TUAAAA','VVVVxx' -433,540,1,1,3,13,3,33,33,433,433,6,7,'RQAAAA','UUAAAA','AAAAxx' -5,541,1,1,5,5,5,5,5,5,5,10,11,'FAAAAA','VUAAAA','HHHHxx' -664,542,0,0,4,4,4,64,64,164,664,8,9,'OZAAAA','WUAAAA','OOOOxx' -887,543,1,3,7,7,7,87,87,387,887,14,15,'DIAAAA','XUAAAA','VVVVxx' -546,544,0,2,6,6,6,46,146,46,546,12,13,'AVAAAA','YUAAAA','AAAAxx' -253,545,1,1,3,13,3,53,53,253,253,6,7,'TJAAAA','ZUAAAA','HHHHxx' -235,546,1,3,5,15,5,35,35,235,235,10,11,'BJAAAA','AVAAAA','OOOOxx' -258,547,0,2,8,18,8,58,58,258,258,16,17,'YJAAAA','BVAAAA','VVVVxx' -621,548,1,1,1,1,1,21,21,121,621,2,3,'XXAAAA','CVAAAA','AAAAxx' -998,549,0,2,8,18,8,98,198,498,998,16,17,'KMAAAA','DVAAAA','HHHHxx' -236,550,0,0,6,16,6,36,36,236,236,12,13,'CJAAAA','EVAAAA','OOOOxx' -537,551,1,1,7,17,7,37,137,37,537,14,15,'RUAAAA','FVAAAA','VVVVxx' -769,552,1,1,9,9,9,69,169,269,769,18,19,'PDAAAA','GVAAAA','AAAAxx' -921,553,1,1,1,1,1,21,121,421,921,2,3,'LJAAAA','HVAAAA','HHHHxx' -951,554,1,3,1,11,1,51,151,451,951,2,3,'PKAAAA','IVAAAA','OOOOxx' -240,555,0,0,0,0,0,40,40,240,240,0,1,'GJAAAA','JVAAAA','VVVVxx' -644,556,0,0,4,4,4,44,44,144,644,8,9,'UYAAAA','KVAAAA','AAAAxx' -352,557,0,0,2,12,2,52,152,352,352,4,5,'ONAAAA','LVAAAA','HHHHxx' -613,558,1,1,3,13,3,13,13,113,613,6,7,'PXAAAA','MVAAAA','OOOOxx' -784,559,0,0,4,4,4,84,184,284,784,8,9,'EEAAAA','NVAAAA','VVVVxx' -61,560,1,1,1,1,1,61,61,61,61,2,3,'JCAAAA','OVAAAA','AAAAxx' -144,561,0,0,4,4,4,44,144,144,144,8,9,'OFAAAA','PVAAAA','HHHHxx' -94,562,0,2,4,14,4,94,94,94,94,8,9,'QDAAAA','QVAAAA','OOOOxx' -270,563,0,2,0,10,0,70,70,270,270,0,1,'KKAAAA','RVAAAA','VVVVxx' -942,564,0,2,2,2,2,42,142,442,942,4,5,'GKAAAA','SVAAAA','AAAAxx' -756,565,0,0,6,16,6,56,156,256,756,12,13,'CDAAAA','TVAAAA','HHHHxx' -321,566,1,1,1,1,1,21,121,321,321,2,3,'JMAAAA','UVAAAA','OOOOxx' -36,567,0,0,6,16,6,36,36,36,36,12,13,'KBAAAA','VVAAAA','VVVVxx' -232,568,0,0,2,12,2,32,32,232,232,4,5,'YIAAAA','WVAAAA','AAAAxx' -430,569,0,2,0,10,0,30,30,430,430,0,1,'OQAAAA','XVAAAA','HHHHxx' -177,570,1,1,7,17,7,77,177,177,177,14,15,'VGAAAA','YVAAAA','OOOOxx' -220,571,0,0,0,0,0,20,20,220,220,0,1,'MIAAAA','ZVAAAA','VVVVxx' -109,572,1,1,9,9,9,9,109,109,109,18,19,'FEAAAA','AWAAAA','AAAAxx' -419,573,1,3,9,19,9,19,19,419,419,18,19,'DQAAAA','BWAAAA','HHHHxx' -135,574,1,3,5,15,5,35,135,135,135,10,11,'FFAAAA','CWAAAA','OOOOxx' -610,575,0,2,0,10,0,10,10,110,610,0,1,'MXAAAA','DWAAAA','VVVVxx' -956,576,0,0,6,16,6,56,156,456,956,12,13,'UKAAAA','EWAAAA','AAAAxx' -626,577,0,2,6,6,6,26,26,126,626,12,13,'CYAAAA','FWAAAA','HHHHxx' -375,578,1,3,5,15,5,75,175,375,375,10,11,'LOAAAA','GWAAAA','OOOOxx' -976,579,0,0,6,16,6,76,176,476,976,12,13,'OLAAAA','HWAAAA','VVVVxx' -152,580,0,0,2,12,2,52,152,152,152,4,5,'WFAAAA','IWAAAA','AAAAxx' -308,581,0,0,8,8,8,8,108,308,308,16,17,'WLAAAA','JWAAAA','HHHHxx' -445,582,1,1,5,5,5,45,45,445,445,10,11,'DRAAAA','KWAAAA','OOOOxx' -326,583,0,2,6,6,6,26,126,326,326,12,13,'OMAAAA','LWAAAA','VVVVxx' -422,584,0,2,2,2,2,22,22,422,422,4,5,'GQAAAA','MWAAAA','AAAAxx' -972,585,0,0,2,12,2,72,172,472,972,4,5,'KLAAAA','NWAAAA','HHHHxx' -45,586,1,1,5,5,5,45,45,45,45,10,11,'TBAAAA','OWAAAA','OOOOxx' -725,587,1,1,5,5,5,25,125,225,725,10,11,'XBAAAA','PWAAAA','VVVVxx' -753,588,1,1,3,13,3,53,153,253,753,6,7,'ZCAAAA','QWAAAA','AAAAxx' -493,589,1,1,3,13,3,93,93,493,493,6,7,'ZSAAAA','RWAAAA','HHHHxx' -601,590,1,1,1,1,1,1,1,101,601,2,3,'DXAAAA','SWAAAA','OOOOxx' -463,591,1,3,3,3,3,63,63,463,463,6,7,'VRAAAA','TWAAAA','VVVVxx' -303,592,1,3,3,3,3,3,103,303,303,6,7,'RLAAAA','UWAAAA','AAAAxx' -59,593,1,3,9,19,9,59,59,59,59,18,19,'HCAAAA','VWAAAA','HHHHxx' -595,594,1,3,5,15,5,95,195,95,595,10,11,'XWAAAA','WWAAAA','OOOOxx' -807,595,1,3,7,7,7,7,7,307,807,14,15,'BFAAAA','XWAAAA','VVVVxx' -424,596,0,0,4,4,4,24,24,424,424,8,9,'IQAAAA','YWAAAA','AAAAxx' -521,597,1,1,1,1,1,21,121,21,521,2,3,'BUAAAA','ZWAAAA','HHHHxx' -341,598,1,1,1,1,1,41,141,341,341,2,3,'DNAAAA','AXAAAA','OOOOxx' -571,599,1,3,1,11,1,71,171,71,571,2,3,'ZVAAAA','BXAAAA','VVVVxx' -165,600,1,1,5,5,5,65,165,165,165,10,11,'JGAAAA','CXAAAA','AAAAxx' -908,601,0,0,8,8,8,8,108,408,908,16,17,'YIAAAA','DXAAAA','HHHHxx' -351,602,1,3,1,11,1,51,151,351,351,2,3,'NNAAAA','EXAAAA','OOOOxx' -334,603,0,2,4,14,4,34,134,334,334,8,9,'WMAAAA','FXAAAA','VVVVxx' -636,604,0,0,6,16,6,36,36,136,636,12,13,'MYAAAA','GXAAAA','AAAAxx' -138,605,0,2,8,18,8,38,138,138,138,16,17,'IFAAAA','HXAAAA','HHHHxx' -438,606,0,2,8,18,8,38,38,438,438,16,17,'WQAAAA','IXAAAA','OOOOxx' -391,607,1,3,1,11,1,91,191,391,391,2,3,'BPAAAA','JXAAAA','VVVVxx' -395,608,1,3,5,15,5,95,195,395,395,10,11,'FPAAAA','KXAAAA','AAAAxx' -502,609,0,2,2,2,2,2,102,2,502,4,5,'ITAAAA','LXAAAA','HHHHxx' -85,610,1,1,5,5,5,85,85,85,85,10,11,'HDAAAA','MXAAAA','OOOOxx' -786,611,0,2,6,6,6,86,186,286,786,12,13,'GEAAAA','NXAAAA','VVVVxx' -619,612,1,3,9,19,9,19,19,119,619,18,19,'VXAAAA','OXAAAA','AAAAxx' -440,613,0,0,0,0,0,40,40,440,440,0,1,'YQAAAA','PXAAAA','HHHHxx' -949,614,1,1,9,9,9,49,149,449,949,18,19,'NKAAAA','QXAAAA','OOOOxx' -691,615,1,3,1,11,1,91,91,191,691,2,3,'PAAAAA','RXAAAA','VVVVxx' -348,616,0,0,8,8,8,48,148,348,348,16,17,'KNAAAA','SXAAAA','AAAAxx' -506,617,0,2,6,6,6,6,106,6,506,12,13,'MTAAAA','TXAAAA','HHHHxx' -192,618,0,0,2,12,2,92,192,192,192,4,5,'KHAAAA','UXAAAA','OOOOxx' -369,619,1,1,9,9,9,69,169,369,369,18,19,'FOAAAA','VXAAAA','VVVVxx' -311,620,1,3,1,11,1,11,111,311,311,2,3,'ZLAAAA','WXAAAA','AAAAxx' -273,621,1,1,3,13,3,73,73,273,273,6,7,'NKAAAA','XXAAAA','HHHHxx' -770,622,0,2,0,10,0,70,170,270,770,0,1,'QDAAAA','YXAAAA','OOOOxx' -191,623,1,3,1,11,1,91,191,191,191,2,3,'JHAAAA','ZXAAAA','VVVVxx' -90,624,0,2,0,10,0,90,90,90,90,0,1,'MDAAAA','AYAAAA','AAAAxx' -163,625,1,3,3,3,3,63,163,163,163,6,7,'HGAAAA','BYAAAA','HHHHxx' -350,626,0,2,0,10,0,50,150,350,350,0,1,'MNAAAA','CYAAAA','OOOOxx' -55,627,1,3,5,15,5,55,55,55,55,10,11,'DCAAAA','DYAAAA','VVVVxx' -488,628,0,0,8,8,8,88,88,488,488,16,17,'USAAAA','EYAAAA','AAAAxx' -215,629,1,3,5,15,5,15,15,215,215,10,11,'HIAAAA','FYAAAA','HHHHxx' -732,630,0,0,2,12,2,32,132,232,732,4,5,'ECAAAA','GYAAAA','OOOOxx' -688,631,0,0,8,8,8,88,88,188,688,16,17,'MAAAAA','HYAAAA','VVVVxx' -520,632,0,0,0,0,0,20,120,20,520,0,1,'AUAAAA','IYAAAA','AAAAxx' -62,633,0,2,2,2,2,62,62,62,62,4,5,'KCAAAA','JYAAAA','HHHHxx' -423,634,1,3,3,3,3,23,23,423,423,6,7,'HQAAAA','KYAAAA','OOOOxx' -242,635,0,2,2,2,2,42,42,242,242,4,5,'IJAAAA','LYAAAA','VVVVxx' -193,636,1,1,3,13,3,93,193,193,193,6,7,'LHAAAA','MYAAAA','AAAAxx' -648,637,0,0,8,8,8,48,48,148,648,16,17,'YYAAAA','NYAAAA','HHHHxx' -459,638,1,3,9,19,9,59,59,459,459,18,19,'RRAAAA','OYAAAA','OOOOxx' -196,639,0,0,6,16,6,96,196,196,196,12,13,'OHAAAA','PYAAAA','VVVVxx' -476,640,0,0,6,16,6,76,76,476,476,12,13,'ISAAAA','QYAAAA','AAAAxx' -903,641,1,3,3,3,3,3,103,403,903,6,7,'TIAAAA','RYAAAA','HHHHxx' -974,642,0,2,4,14,4,74,174,474,974,8,9,'MLAAAA','SYAAAA','OOOOxx' -603,643,1,3,3,3,3,3,3,103,603,6,7,'FXAAAA','TYAAAA','VVVVxx' -12,644,0,0,2,12,2,12,12,12,12,4,5,'MAAAAA','UYAAAA','AAAAxx' -599,645,1,3,9,19,9,99,199,99,599,18,19,'BXAAAA','VYAAAA','HHHHxx' -914,646,0,2,4,14,4,14,114,414,914,8,9,'EJAAAA','WYAAAA','OOOOxx' -7,647,1,3,7,7,7,7,7,7,7,14,15,'HAAAAA','XYAAAA','VVVVxx' -213,648,1,1,3,13,3,13,13,213,213,6,7,'FIAAAA','YYAAAA','AAAAxx' -174,649,0,2,4,14,4,74,174,174,174,8,9,'SGAAAA','ZYAAAA','HHHHxx' -392,650,0,0,2,12,2,92,192,392,392,4,5,'CPAAAA','AZAAAA','OOOOxx' -674,651,0,2,4,14,4,74,74,174,674,8,9,'YZAAAA','BZAAAA','VVVVxx' -650,652,0,2,0,10,0,50,50,150,650,0,1,'AZAAAA','CZAAAA','AAAAxx' -8,653,0,0,8,8,8,8,8,8,8,16,17,'IAAAAA','DZAAAA','HHHHxx' -492,654,0,0,2,12,2,92,92,492,492,4,5,'YSAAAA','EZAAAA','OOOOxx' -322,655,0,2,2,2,2,22,122,322,322,4,5,'KMAAAA','FZAAAA','VVVVxx' -315,656,1,3,5,15,5,15,115,315,315,10,11,'DMAAAA','GZAAAA','AAAAxx' -380,657,0,0,0,0,0,80,180,380,380,0,1,'QOAAAA','HZAAAA','HHHHxx' -353,658,1,1,3,13,3,53,153,353,353,6,7,'PNAAAA','IZAAAA','OOOOxx' -892,659,0,0,2,12,2,92,92,392,892,4,5,'IIAAAA','JZAAAA','VVVVxx' -932,660,0,0,2,12,2,32,132,432,932,4,5,'WJAAAA','KZAAAA','AAAAxx' -993,661,1,1,3,13,3,93,193,493,993,6,7,'FMAAAA','LZAAAA','HHHHxx' -859,662,1,3,9,19,9,59,59,359,859,18,19,'BHAAAA','MZAAAA','OOOOxx' -806,663,0,2,6,6,6,6,6,306,806,12,13,'AFAAAA','NZAAAA','VVVVxx' -145,664,1,1,5,5,5,45,145,145,145,10,11,'PFAAAA','OZAAAA','AAAAxx' -373,665,1,1,3,13,3,73,173,373,373,6,7,'JOAAAA','PZAAAA','HHHHxx' -418,666,0,2,8,18,8,18,18,418,418,16,17,'CQAAAA','QZAAAA','OOOOxx' -865,667,1,1,5,5,5,65,65,365,865,10,11,'HHAAAA','RZAAAA','VVVVxx' -462,668,0,2,2,2,2,62,62,462,462,4,5,'URAAAA','SZAAAA','AAAAxx' -24,669,0,0,4,4,4,24,24,24,24,8,9,'YAAAAA','TZAAAA','HHHHxx' -920,670,0,0,0,0,0,20,120,420,920,0,1,'KJAAAA','UZAAAA','OOOOxx' -672,671,0,0,2,12,2,72,72,172,672,4,5,'WZAAAA','VZAAAA','VVVVxx' -92,672,0,0,2,12,2,92,92,92,92,4,5,'ODAAAA','WZAAAA','AAAAxx' -721,673,1,1,1,1,1,21,121,221,721,2,3,'TBAAAA','XZAAAA','HHHHxx' -646,674,0,2,6,6,6,46,46,146,646,12,13,'WYAAAA','YZAAAA','OOOOxx' -910,675,0,2,0,10,0,10,110,410,910,0,1,'AJAAAA','ZZAAAA','VVVVxx' -909,676,1,1,9,9,9,9,109,409,909,18,19,'ZIAAAA','AABAAA','AAAAxx' -630,677,0,2,0,10,0,30,30,130,630,0,1,'GYAAAA','BABAAA','HHHHxx' -482,678,0,2,2,2,2,82,82,482,482,4,5,'OSAAAA','CABAAA','OOOOxx' -559,679,1,3,9,19,9,59,159,59,559,18,19,'NVAAAA','DABAAA','VVVVxx' -853,680,1,1,3,13,3,53,53,353,853,6,7,'VGAAAA','EABAAA','AAAAxx' -141,681,1,1,1,1,1,41,141,141,141,2,3,'LFAAAA','FABAAA','HHHHxx' -266,682,0,2,6,6,6,66,66,266,266,12,13,'GKAAAA','GABAAA','OOOOxx' -835,683,1,3,5,15,5,35,35,335,835,10,11,'DGAAAA','HABAAA','VVVVxx' -164,684,0,0,4,4,4,64,164,164,164,8,9,'IGAAAA','IABAAA','AAAAxx' -629,685,1,1,9,9,9,29,29,129,629,18,19,'FYAAAA','JABAAA','HHHHxx' -203,686,1,3,3,3,3,3,3,203,203,6,7,'VHAAAA','KABAAA','OOOOxx' -411,687,1,3,1,11,1,11,11,411,411,2,3,'VPAAAA','LABAAA','VVVVxx' -930,688,0,2,0,10,0,30,130,430,930,0,1,'UJAAAA','MABAAA','AAAAxx' -435,689,1,3,5,15,5,35,35,435,435,10,11,'TQAAAA','NABAAA','HHHHxx' -563,690,1,3,3,3,3,63,163,63,563,6,7,'RVAAAA','OABAAA','OOOOxx' -960,691,0,0,0,0,0,60,160,460,960,0,1,'YKAAAA','PABAAA','VVVVxx' -733,692,1,1,3,13,3,33,133,233,733,6,7,'FCAAAA','QABAAA','AAAAxx' -967,693,1,3,7,7,7,67,167,467,967,14,15,'FLAAAA','RABAAA','HHHHxx' -668,694,0,0,8,8,8,68,68,168,668,16,17,'SZAAAA','SABAAA','OOOOxx' -994,695,0,2,4,14,4,94,194,494,994,8,9,'GMAAAA','TABAAA','VVVVxx' -129,696,1,1,9,9,9,29,129,129,129,18,19,'ZEAAAA','UABAAA','AAAAxx' -954,697,0,2,4,14,4,54,154,454,954,8,9,'SKAAAA','VABAAA','HHHHxx' -68,698,0,0,8,8,8,68,68,68,68,16,17,'QCAAAA','WABAAA','OOOOxx' -79,699,1,3,9,19,9,79,79,79,79,18,19,'BDAAAA','XABAAA','VVVVxx' -121,700,1,1,1,1,1,21,121,121,121,2,3,'REAAAA','YABAAA','AAAAxx' -740,701,0,0,0,0,0,40,140,240,740,0,1,'MCAAAA','ZABAAA','HHHHxx' -902,702,0,2,2,2,2,2,102,402,902,4,5,'SIAAAA','ABBAAA','OOOOxx' -695,703,1,3,5,15,5,95,95,195,695,10,11,'TAAAAA','BBBAAA','VVVVxx' -455,704,1,3,5,15,5,55,55,455,455,10,11,'NRAAAA','CBBAAA','AAAAxx' -89,705,1,1,9,9,9,89,89,89,89,18,19,'LDAAAA','DBBAAA','HHHHxx' -893,706,1,1,3,13,3,93,93,393,893,6,7,'JIAAAA','EBBAAA','OOOOxx' -202,707,0,2,2,2,2,2,2,202,202,4,5,'UHAAAA','FBBAAA','VVVVxx' -132,708,0,0,2,12,2,32,132,132,132,4,5,'CFAAAA','GBBAAA','AAAAxx' -782,709,0,2,2,2,2,82,182,282,782,4,5,'CEAAAA','HBBAAA','HHHHxx' -512,710,0,0,2,12,2,12,112,12,512,4,5,'STAAAA','IBBAAA','OOOOxx' -857,711,1,1,7,17,7,57,57,357,857,14,15,'ZGAAAA','JBBAAA','VVVVxx' -248,712,0,0,8,8,8,48,48,248,248,16,17,'OJAAAA','KBBAAA','AAAAxx' -858,713,0,2,8,18,8,58,58,358,858,16,17,'AHAAAA','LBBAAA','HHHHxx' -527,714,1,3,7,7,7,27,127,27,527,14,15,'HUAAAA','MBBAAA','OOOOxx' -450,715,0,2,0,10,0,50,50,450,450,0,1,'IRAAAA','NBBAAA','VVVVxx' -712,716,0,0,2,12,2,12,112,212,712,4,5,'KBAAAA','OBBAAA','AAAAxx' -153,717,1,1,3,13,3,53,153,153,153,6,7,'XFAAAA','PBBAAA','HHHHxx' -587,718,1,3,7,7,7,87,187,87,587,14,15,'PWAAAA','QBBAAA','OOOOxx' -593,719,1,1,3,13,3,93,193,93,593,6,7,'VWAAAA','RBBAAA','VVVVxx' -249,720,1,1,9,9,9,49,49,249,249,18,19,'PJAAAA','SBBAAA','AAAAxx' -128,721,0,0,8,8,8,28,128,128,128,16,17,'YEAAAA','TBBAAA','HHHHxx' -675,722,1,3,5,15,5,75,75,175,675,10,11,'ZZAAAA','UBBAAA','OOOOxx' -929,723,1,1,9,9,9,29,129,429,929,18,19,'TJAAAA','VBBAAA','VVVVxx' -156,724,0,0,6,16,6,56,156,156,156,12,13,'AGAAAA','WBBAAA','AAAAxx' -415,725,1,3,5,15,5,15,15,415,415,10,11,'ZPAAAA','XBBAAA','HHHHxx' -28,726,0,0,8,8,8,28,28,28,28,16,17,'CBAAAA','YBBAAA','OOOOxx' -18,727,0,2,8,18,8,18,18,18,18,16,17,'SAAAAA','ZBBAAA','VVVVxx' -255,728,1,3,5,15,5,55,55,255,255,10,11,'VJAAAA','ACBAAA','AAAAxx' -793,729,1,1,3,13,3,93,193,293,793,6,7,'NEAAAA','BCBAAA','HHHHxx' -554,730,0,2,4,14,4,54,154,54,554,8,9,'IVAAAA','CCBAAA','OOOOxx' -467,731,1,3,7,7,7,67,67,467,467,14,15,'ZRAAAA','DCBAAA','VVVVxx' -410,732,0,2,0,10,0,10,10,410,410,0,1,'UPAAAA','ECBAAA','AAAAxx' -651,733,1,3,1,11,1,51,51,151,651,2,3,'BZAAAA','FCBAAA','HHHHxx' -287,734,1,3,7,7,7,87,87,287,287,14,15,'BLAAAA','GCBAAA','OOOOxx' -640,735,0,0,0,0,0,40,40,140,640,0,1,'QYAAAA','HCBAAA','VVVVxx' -245,736,1,1,5,5,5,45,45,245,245,10,11,'LJAAAA','ICBAAA','AAAAxx' -21,737,1,1,1,1,1,21,21,21,21,2,3,'VAAAAA','JCBAAA','HHHHxx' -83,738,1,3,3,3,3,83,83,83,83,6,7,'FDAAAA','KCBAAA','OOOOxx' -228,739,0,0,8,8,8,28,28,228,228,16,17,'UIAAAA','LCBAAA','VVVVxx' -323,740,1,3,3,3,3,23,123,323,323,6,7,'LMAAAA','MCBAAA','AAAAxx' -594,741,0,2,4,14,4,94,194,94,594,8,9,'WWAAAA','NCBAAA','HHHHxx' -528,742,0,0,8,8,8,28,128,28,528,16,17,'IUAAAA','OCBAAA','OOOOxx' -276,743,0,0,6,16,6,76,76,276,276,12,13,'QKAAAA','PCBAAA','VVVVxx' -598,744,0,2,8,18,8,98,198,98,598,16,17,'AXAAAA','QCBAAA','AAAAxx' -635,745,1,3,5,15,5,35,35,135,635,10,11,'LYAAAA','RCBAAA','HHHHxx' -868,746,0,0,8,8,8,68,68,368,868,16,17,'KHAAAA','SCBAAA','OOOOxx' -290,747,0,2,0,10,0,90,90,290,290,0,1,'ELAAAA','TCBAAA','VVVVxx' -468,748,0,0,8,8,8,68,68,468,468,16,17,'ASAAAA','UCBAAA','AAAAxx' -689,749,1,1,9,9,9,89,89,189,689,18,19,'NAAAAA','VCBAAA','HHHHxx' -799,750,1,3,9,19,9,99,199,299,799,18,19,'TEAAAA','WCBAAA','OOOOxx' -210,751,0,2,0,10,0,10,10,210,210,0,1,'CIAAAA','XCBAAA','VVVVxx' -346,752,0,2,6,6,6,46,146,346,346,12,13,'INAAAA','YCBAAA','AAAAxx' -957,753,1,1,7,17,7,57,157,457,957,14,15,'VKAAAA','ZCBAAA','HHHHxx' -905,754,1,1,5,5,5,5,105,405,905,10,11,'VIAAAA','ADBAAA','OOOOxx' -523,755,1,3,3,3,3,23,123,23,523,6,7,'DUAAAA','BDBAAA','VVVVxx' -899,756,1,3,9,19,9,99,99,399,899,18,19,'PIAAAA','CDBAAA','AAAAxx' -867,757,1,3,7,7,7,67,67,367,867,14,15,'JHAAAA','DDBAAA','HHHHxx' -11,758,1,3,1,11,1,11,11,11,11,2,3,'LAAAAA','EDBAAA','OOOOxx' -320,759,0,0,0,0,0,20,120,320,320,0,1,'IMAAAA','FDBAAA','VVVVxx' -766,760,0,2,6,6,6,66,166,266,766,12,13,'MDAAAA','GDBAAA','AAAAxx' -84,761,0,0,4,4,4,84,84,84,84,8,9,'GDAAAA','HDBAAA','HHHHxx' -507,762,1,3,7,7,7,7,107,7,507,14,15,'NTAAAA','IDBAAA','OOOOxx' -471,763,1,3,1,11,1,71,71,471,471,2,3,'DSAAAA','JDBAAA','VVVVxx' -517,764,1,1,7,17,7,17,117,17,517,14,15,'XTAAAA','KDBAAA','AAAAxx' -234,765,0,2,4,14,4,34,34,234,234,8,9,'AJAAAA','LDBAAA','HHHHxx' -988,766,0,0,8,8,8,88,188,488,988,16,17,'AMAAAA','MDBAAA','OOOOxx' -473,767,1,1,3,13,3,73,73,473,473,6,7,'FSAAAA','NDBAAA','VVVVxx' -66,768,0,2,6,6,6,66,66,66,66,12,13,'OCAAAA','ODBAAA','AAAAxx' -530,769,0,2,0,10,0,30,130,30,530,0,1,'KUAAAA','PDBAAA','HHHHxx' -834,770,0,2,4,14,4,34,34,334,834,8,9,'CGAAAA','QDBAAA','OOOOxx' -894,771,0,2,4,14,4,94,94,394,894,8,9,'KIAAAA','RDBAAA','VVVVxx' -481,772,1,1,1,1,1,81,81,481,481,2,3,'NSAAAA','SDBAAA','AAAAxx' -280,773,0,0,0,0,0,80,80,280,280,0,1,'UKAAAA','TDBAAA','HHHHxx' -705,774,1,1,5,5,5,5,105,205,705,10,11,'DBAAAA','UDBAAA','OOOOxx' -218,775,0,2,8,18,8,18,18,218,218,16,17,'KIAAAA','VDBAAA','VVVVxx' -560,776,0,0,0,0,0,60,160,60,560,0,1,'OVAAAA','WDBAAA','AAAAxx' -123,777,1,3,3,3,3,23,123,123,123,6,7,'TEAAAA','XDBAAA','HHHHxx' -289,778,1,1,9,9,9,89,89,289,289,18,19,'DLAAAA','YDBAAA','OOOOxx' -189,779,1,1,9,9,9,89,189,189,189,18,19,'HHAAAA','ZDBAAA','VVVVxx' -541,780,1,1,1,1,1,41,141,41,541,2,3,'VUAAAA','AEBAAA','AAAAxx' -876,781,0,0,6,16,6,76,76,376,876,12,13,'SHAAAA','BEBAAA','HHHHxx' -504,782,0,0,4,4,4,4,104,4,504,8,9,'KTAAAA','CEBAAA','OOOOxx' -643,783,1,3,3,3,3,43,43,143,643,6,7,'TYAAAA','DEBAAA','VVVVxx' -73,784,1,1,3,13,3,73,73,73,73,6,7,'VCAAAA','EEBAAA','AAAAxx' -465,785,1,1,5,5,5,65,65,465,465,10,11,'XRAAAA','FEBAAA','HHHHxx' -861,786,1,1,1,1,1,61,61,361,861,2,3,'DHAAAA','GEBAAA','OOOOxx' -355,787,1,3,5,15,5,55,155,355,355,10,11,'RNAAAA','HEBAAA','VVVVxx' -441,788,1,1,1,1,1,41,41,441,441,2,3,'ZQAAAA','IEBAAA','AAAAxx' -219,789,1,3,9,19,9,19,19,219,219,18,19,'LIAAAA','JEBAAA','HHHHxx' -839,790,1,3,9,19,9,39,39,339,839,18,19,'HGAAAA','KEBAAA','OOOOxx' -271,791,1,3,1,11,1,71,71,271,271,2,3,'LKAAAA','LEBAAA','VVVVxx' -212,792,0,0,2,12,2,12,12,212,212,4,5,'EIAAAA','MEBAAA','AAAAxx' -904,793,0,0,4,4,4,4,104,404,904,8,9,'UIAAAA','NEBAAA','HHHHxx' -244,794,0,0,4,4,4,44,44,244,244,8,9,'KJAAAA','OEBAAA','OOOOxx' -751,795,1,3,1,11,1,51,151,251,751,2,3,'XCAAAA','PEBAAA','VVVVxx' -944,796,0,0,4,4,4,44,144,444,944,8,9,'IKAAAA','QEBAAA','AAAAxx' -305,797,1,1,5,5,5,5,105,305,305,10,11,'TLAAAA','REBAAA','HHHHxx' -617,798,1,1,7,17,7,17,17,117,617,14,15,'TXAAAA','SEBAAA','OOOOxx' -891,799,1,3,1,11,1,91,91,391,891,2,3,'HIAAAA','TEBAAA','VVVVxx' -653,800,1,1,3,13,3,53,53,153,653,6,7,'DZAAAA','UEBAAA','AAAAxx' -845,801,1,1,5,5,5,45,45,345,845,10,11,'NGAAAA','VEBAAA','HHHHxx' -936,802,0,0,6,16,6,36,136,436,936,12,13,'AKAAAA','WEBAAA','OOOOxx' -91,803,1,3,1,11,1,91,91,91,91,2,3,'NDAAAA','XEBAAA','VVVVxx' -442,804,0,2,2,2,2,42,42,442,442,4,5,'ARAAAA','YEBAAA','AAAAxx' -498,805,0,2,8,18,8,98,98,498,498,16,17,'ETAAAA','ZEBAAA','HHHHxx' -987,806,1,3,7,7,7,87,187,487,987,14,15,'ZLAAAA','AFBAAA','OOOOxx' -194,807,0,2,4,14,4,94,194,194,194,8,9,'MHAAAA','BFBAAA','VVVVxx' -927,808,1,3,7,7,7,27,127,427,927,14,15,'RJAAAA','CFBAAA','AAAAxx' -607,809,1,3,7,7,7,7,7,107,607,14,15,'JXAAAA','DFBAAA','HHHHxx' -119,810,1,3,9,19,9,19,119,119,119,18,19,'PEAAAA','EFBAAA','OOOOxx' -182,811,0,2,2,2,2,82,182,182,182,4,5,'AHAAAA','FFBAAA','VVVVxx' -606,812,0,2,6,6,6,6,6,106,606,12,13,'IXAAAA','GFBAAA','AAAAxx' -849,813,1,1,9,9,9,49,49,349,849,18,19,'RGAAAA','HFBAAA','HHHHxx' -34,814,0,2,4,14,4,34,34,34,34,8,9,'IBAAAA','IFBAAA','OOOOxx' -683,815,1,3,3,3,3,83,83,183,683,6,7,'HAAAAA','JFBAAA','VVVVxx' -134,816,0,2,4,14,4,34,134,134,134,8,9,'EFAAAA','KFBAAA','AAAAxx' -331,817,1,3,1,11,1,31,131,331,331,2,3,'TMAAAA','LFBAAA','HHHHxx' -808,818,0,0,8,8,8,8,8,308,808,16,17,'CFAAAA','MFBAAA','OOOOxx' -703,819,1,3,3,3,3,3,103,203,703,6,7,'BBAAAA','NFBAAA','VVVVxx' -669,820,1,1,9,9,9,69,69,169,669,18,19,'TZAAAA','OFBAAA','AAAAxx' -264,821,0,0,4,4,4,64,64,264,264,8,9,'EKAAAA','PFBAAA','HHHHxx' -277,822,1,1,7,17,7,77,77,277,277,14,15,'RKAAAA','QFBAAA','OOOOxx' -877,823,1,1,7,17,7,77,77,377,877,14,15,'THAAAA','RFBAAA','VVVVxx' -783,824,1,3,3,3,3,83,183,283,783,6,7,'DEAAAA','SFBAAA','AAAAxx' -791,825,1,3,1,11,1,91,191,291,791,2,3,'LEAAAA','TFBAAA','HHHHxx' -171,826,1,3,1,11,1,71,171,171,171,2,3,'PGAAAA','UFBAAA','OOOOxx' -564,827,0,0,4,4,4,64,164,64,564,8,9,'SVAAAA','VFBAAA','VVVVxx' -230,828,0,2,0,10,0,30,30,230,230,0,1,'WIAAAA','WFBAAA','AAAAxx' -881,829,1,1,1,1,1,81,81,381,881,2,3,'XHAAAA','XFBAAA','HHHHxx' -890,830,0,2,0,10,0,90,90,390,890,0,1,'GIAAAA','YFBAAA','OOOOxx' -374,831,0,2,4,14,4,74,174,374,374,8,9,'KOAAAA','ZFBAAA','VVVVxx' -697,832,1,1,7,17,7,97,97,197,697,14,15,'VAAAAA','AGBAAA','AAAAxx' -4,833,0,0,4,4,4,4,4,4,4,8,9,'EAAAAA','BGBAAA','HHHHxx' -385,834,1,1,5,5,5,85,185,385,385,10,11,'VOAAAA','CGBAAA','OOOOxx' -739,835,1,3,9,19,9,39,139,239,739,18,19,'LCAAAA','DGBAAA','VVVVxx' -623,836,1,3,3,3,3,23,23,123,623,6,7,'ZXAAAA','EGBAAA','AAAAxx' -547,837,1,3,7,7,7,47,147,47,547,14,15,'BVAAAA','FGBAAA','HHHHxx' -532,838,0,0,2,12,2,32,132,32,532,4,5,'MUAAAA','GGBAAA','OOOOxx' -383,839,1,3,3,3,3,83,183,383,383,6,7,'TOAAAA','HGBAAA','VVVVxx' -181,840,1,1,1,1,1,81,181,181,181,2,3,'ZGAAAA','IGBAAA','AAAAxx' -327,841,1,3,7,7,7,27,127,327,327,14,15,'PMAAAA','JGBAAA','HHHHxx' -701,842,1,1,1,1,1,1,101,201,701,2,3,'ZAAAAA','KGBAAA','OOOOxx' -111,843,1,3,1,11,1,11,111,111,111,2,3,'HEAAAA','LGBAAA','VVVVxx' -977,844,1,1,7,17,7,77,177,477,977,14,15,'PLAAAA','MGBAAA','AAAAxx' -431,845,1,3,1,11,1,31,31,431,431,2,3,'PQAAAA','NGBAAA','HHHHxx' -456,846,0,0,6,16,6,56,56,456,456,12,13,'ORAAAA','OGBAAA','OOOOxx' -368,847,0,0,8,8,8,68,168,368,368,16,17,'EOAAAA','PGBAAA','VVVVxx' -32,848,0,0,2,12,2,32,32,32,32,4,5,'GBAAAA','QGBAAA','AAAAxx' -125,849,1,1,5,5,5,25,125,125,125,10,11,'VEAAAA','RGBAAA','HHHHxx' -847,850,1,3,7,7,7,47,47,347,847,14,15,'PGAAAA','SGBAAA','OOOOxx' -485,851,1,1,5,5,5,85,85,485,485,10,11,'RSAAAA','TGBAAA','VVVVxx' -387,852,1,3,7,7,7,87,187,387,387,14,15,'XOAAAA','UGBAAA','AAAAxx' -288,853,0,0,8,8,8,88,88,288,288,16,17,'CLAAAA','VGBAAA','HHHHxx' -919,854,1,3,9,19,9,19,119,419,919,18,19,'JJAAAA','WGBAAA','OOOOxx' -393,855,1,1,3,13,3,93,193,393,393,6,7,'DPAAAA','XGBAAA','VVVVxx' -953,856,1,1,3,13,3,53,153,453,953,6,7,'RKAAAA','YGBAAA','AAAAxx' -798,857,0,2,8,18,8,98,198,298,798,16,17,'SEAAAA','ZGBAAA','HHHHxx' -940,858,0,0,0,0,0,40,140,440,940,0,1,'EKAAAA','AHBAAA','OOOOxx' -198,859,0,2,8,18,8,98,198,198,198,16,17,'QHAAAA','BHBAAA','VVVVxx' -25,860,1,1,5,5,5,25,25,25,25,10,11,'ZAAAAA','CHBAAA','AAAAxx' -190,861,0,2,0,10,0,90,190,190,190,0,1,'IHAAAA','DHBAAA','HHHHxx' -820,862,0,0,0,0,0,20,20,320,820,0,1,'OFAAAA','EHBAAA','OOOOxx' -15,863,1,3,5,15,5,15,15,15,15,10,11,'PAAAAA','FHBAAA','VVVVxx' -427,864,1,3,7,7,7,27,27,427,427,14,15,'LQAAAA','GHBAAA','AAAAxx' -349,865,1,1,9,9,9,49,149,349,349,18,19,'LNAAAA','HHBAAA','HHHHxx' -785,866,1,1,5,5,5,85,185,285,785,10,11,'FEAAAA','IHBAAA','OOOOxx' -340,867,0,0,0,0,0,40,140,340,340,0,1,'CNAAAA','JHBAAA','VVVVxx' -292,868,0,0,2,12,2,92,92,292,292,4,5,'GLAAAA','KHBAAA','AAAAxx' -17,869,1,1,7,17,7,17,17,17,17,14,15,'RAAAAA','LHBAAA','HHHHxx' -985,870,1,1,5,5,5,85,185,485,985,10,11,'XLAAAA','MHBAAA','OOOOxx' -645,871,1,1,5,5,5,45,45,145,645,10,11,'VYAAAA','NHBAAA','VVVVxx' -631,872,1,3,1,11,1,31,31,131,631,2,3,'HYAAAA','OHBAAA','AAAAxx' -761,873,1,1,1,1,1,61,161,261,761,2,3,'HDAAAA','PHBAAA','HHHHxx' -707,874,1,3,7,7,7,7,107,207,707,14,15,'FBAAAA','QHBAAA','OOOOxx' -776,875,0,0,6,16,6,76,176,276,776,12,13,'WDAAAA','RHBAAA','VVVVxx' -856,876,0,0,6,16,6,56,56,356,856,12,13,'YGAAAA','SHBAAA','AAAAxx' -978,877,0,2,8,18,8,78,178,478,978,16,17,'QLAAAA','THBAAA','HHHHxx' -710,878,0,2,0,10,0,10,110,210,710,0,1,'IBAAAA','UHBAAA','OOOOxx' -604,879,0,0,4,4,4,4,4,104,604,8,9,'GXAAAA','VHBAAA','VVVVxx' -291,880,1,3,1,11,1,91,91,291,291,2,3,'FLAAAA','WHBAAA','AAAAxx' -747,881,1,3,7,7,7,47,147,247,747,14,15,'TCAAAA','XHBAAA','HHHHxx' -837,882,1,1,7,17,7,37,37,337,837,14,15,'FGAAAA','YHBAAA','OOOOxx' -722,883,0,2,2,2,2,22,122,222,722,4,5,'UBAAAA','ZHBAAA','VVVVxx' -925,884,1,1,5,5,5,25,125,425,925,10,11,'PJAAAA','AIBAAA','AAAAxx' -49,885,1,1,9,9,9,49,49,49,49,18,19,'XBAAAA','BIBAAA','HHHHxx' -832,886,0,0,2,12,2,32,32,332,832,4,5,'AGAAAA','CIBAAA','OOOOxx' -336,887,0,0,6,16,6,36,136,336,336,12,13,'YMAAAA','DIBAAA','VVVVxx' -185,888,1,1,5,5,5,85,185,185,185,10,11,'DHAAAA','EIBAAA','AAAAxx' -434,889,0,2,4,14,4,34,34,434,434,8,9,'SQAAAA','FIBAAA','HHHHxx' -284,890,0,0,4,4,4,84,84,284,284,8,9,'YKAAAA','GIBAAA','OOOOxx' -812,891,0,0,2,12,2,12,12,312,812,4,5,'GFAAAA','HIBAAA','VVVVxx' -810,892,0,2,0,10,0,10,10,310,810,0,1,'EFAAAA','IIBAAA','AAAAxx' -252,893,0,0,2,12,2,52,52,252,252,4,5,'SJAAAA','JIBAAA','HHHHxx' -965,894,1,1,5,5,5,65,165,465,965,10,11,'DLAAAA','KIBAAA','OOOOxx' -110,895,0,2,0,10,0,10,110,110,110,0,1,'GEAAAA','LIBAAA','VVVVxx' -698,896,0,2,8,18,8,98,98,198,698,16,17,'WAAAAA','MIBAAA','AAAAxx' -283,897,1,3,3,3,3,83,83,283,283,6,7,'XKAAAA','NIBAAA','HHHHxx' -533,898,1,1,3,13,3,33,133,33,533,6,7,'NUAAAA','OIBAAA','OOOOxx' -662,899,0,2,2,2,2,62,62,162,662,4,5,'MZAAAA','PIBAAA','VVVVxx' -329,900,1,1,9,9,9,29,129,329,329,18,19,'RMAAAA','QIBAAA','AAAAxx' -250,901,0,2,0,10,0,50,50,250,250,0,1,'QJAAAA','RIBAAA','HHHHxx' -407,902,1,3,7,7,7,7,7,407,407,14,15,'RPAAAA','SIBAAA','OOOOxx' -823,903,1,3,3,3,3,23,23,323,823,6,7,'RFAAAA','TIBAAA','VVVVxx' -852,904,0,0,2,12,2,52,52,352,852,4,5,'UGAAAA','UIBAAA','AAAAxx' -871,905,1,3,1,11,1,71,71,371,871,2,3,'NHAAAA','VIBAAA','HHHHxx' -118,906,0,2,8,18,8,18,118,118,118,16,17,'OEAAAA','WIBAAA','OOOOxx' -912,907,0,0,2,12,2,12,112,412,912,4,5,'CJAAAA','XIBAAA','VVVVxx' -458,908,0,2,8,18,8,58,58,458,458,16,17,'QRAAAA','YIBAAA','AAAAxx' -926,909,0,2,6,6,6,26,126,426,926,12,13,'QJAAAA','ZIBAAA','HHHHxx' -328,910,0,0,8,8,8,28,128,328,328,16,17,'QMAAAA','AJBAAA','OOOOxx' -980,911,0,0,0,0,0,80,180,480,980,0,1,'SLAAAA','BJBAAA','VVVVxx' -259,912,1,3,9,19,9,59,59,259,259,18,19,'ZJAAAA','CJBAAA','AAAAxx' -900,913,0,0,0,0,0,0,100,400,900,0,1,'QIAAAA','DJBAAA','HHHHxx' -137,914,1,1,7,17,7,37,137,137,137,14,15,'HFAAAA','EJBAAA','OOOOxx' -159,915,1,3,9,19,9,59,159,159,159,18,19,'DGAAAA','FJBAAA','VVVVxx' -243,916,1,3,3,3,3,43,43,243,243,6,7,'JJAAAA','GJBAAA','AAAAxx' -472,917,0,0,2,12,2,72,72,472,472,4,5,'ESAAAA','HJBAAA','HHHHxx' -796,918,0,0,6,16,6,96,196,296,796,12,13,'QEAAAA','IJBAAA','OOOOxx' -382,919,0,2,2,2,2,82,182,382,382,4,5,'SOAAAA','JJBAAA','VVVVxx' -911,920,1,3,1,11,1,11,111,411,911,2,3,'BJAAAA','KJBAAA','AAAAxx' -179,921,1,3,9,19,9,79,179,179,179,18,19,'XGAAAA','LJBAAA','HHHHxx' -778,922,0,2,8,18,8,78,178,278,778,16,17,'YDAAAA','MJBAAA','OOOOxx' -405,923,1,1,5,5,5,5,5,405,405,10,11,'PPAAAA','NJBAAA','VVVVxx' -265,924,1,1,5,5,5,65,65,265,265,10,11,'FKAAAA','OJBAAA','AAAAxx' -556,925,0,0,6,16,6,56,156,56,556,12,13,'KVAAAA','PJBAAA','HHHHxx' -16,926,0,0,6,16,6,16,16,16,16,12,13,'QAAAAA','QJBAAA','OOOOxx' -706,927,0,2,6,6,6,6,106,206,706,12,13,'EBAAAA','RJBAAA','VVVVxx' -497,928,1,1,7,17,7,97,97,497,497,14,15,'DTAAAA','SJBAAA','AAAAxx' -708,929,0,0,8,8,8,8,108,208,708,16,17,'GBAAAA','TJBAAA','HHHHxx' -46,930,0,2,6,6,6,46,46,46,46,12,13,'UBAAAA','UJBAAA','OOOOxx' -901,931,1,1,1,1,1,1,101,401,901,2,3,'RIAAAA','VJBAAA','VVVVxx' -416,932,0,0,6,16,6,16,16,416,416,12,13,'AQAAAA','WJBAAA','AAAAxx' -307,933,1,3,7,7,7,7,107,307,307,14,15,'VLAAAA','XJBAAA','HHHHxx' -166,934,0,2,6,6,6,66,166,166,166,12,13,'KGAAAA','YJBAAA','OOOOxx' -178,935,0,2,8,18,8,78,178,178,178,16,17,'WGAAAA','ZJBAAA','VVVVxx' -499,936,1,3,9,19,9,99,99,499,499,18,19,'FTAAAA','AKBAAA','AAAAxx' -257,937,1,1,7,17,7,57,57,257,257,14,15,'XJAAAA','BKBAAA','HHHHxx' -342,938,0,2,2,2,2,42,142,342,342,4,5,'ENAAAA','CKBAAA','OOOOxx' -850,939,0,2,0,10,0,50,50,350,850,0,1,'SGAAAA','DKBAAA','VVVVxx' -313,940,1,1,3,13,3,13,113,313,313,6,7,'BMAAAA','EKBAAA','AAAAxx' -831,941,1,3,1,11,1,31,31,331,831,2,3,'ZFAAAA','FKBAAA','HHHHxx' -57,942,1,1,7,17,7,57,57,57,57,14,15,'FCAAAA','GKBAAA','OOOOxx' -37,943,1,1,7,17,7,37,37,37,37,14,15,'LBAAAA','HKBAAA','VVVVxx' -511,944,1,3,1,11,1,11,111,11,511,2,3,'RTAAAA','IKBAAA','AAAAxx' -578,945,0,2,8,18,8,78,178,78,578,16,17,'GWAAAA','JKBAAA','HHHHxx' -100,946,0,0,0,0,0,0,100,100,100,0,1,'WDAAAA','KKBAAA','OOOOxx' -935,947,1,3,5,15,5,35,135,435,935,10,11,'ZJAAAA','LKBAAA','VVVVxx' -821,948,1,1,1,1,1,21,21,321,821,2,3,'PFAAAA','MKBAAA','AAAAxx' -294,949,0,2,4,14,4,94,94,294,294,8,9,'ILAAAA','NKBAAA','HHHHxx' -575,950,1,3,5,15,5,75,175,75,575,10,11,'DWAAAA','OKBAAA','OOOOxx' -272,951,0,0,2,12,2,72,72,272,272,4,5,'MKAAAA','PKBAAA','VVVVxx' -491,952,1,3,1,11,1,91,91,491,491,2,3,'XSAAAA','QKBAAA','AAAAxx' -43,953,1,3,3,3,3,43,43,43,43,6,7,'RBAAAA','RKBAAA','HHHHxx' -167,954,1,3,7,7,7,67,167,167,167,14,15,'LGAAAA','SKBAAA','OOOOxx' -457,955,1,1,7,17,7,57,57,457,457,14,15,'PRAAAA','TKBAAA','VVVVxx' -647,956,1,3,7,7,7,47,47,147,647,14,15,'XYAAAA','UKBAAA','AAAAxx' -180,957,0,0,0,0,0,80,180,180,180,0,1,'YGAAAA','VKBAAA','HHHHxx' -48,958,0,0,8,8,8,48,48,48,48,16,17,'WBAAAA','WKBAAA','OOOOxx' -553,959,1,1,3,13,3,53,153,53,553,6,7,'HVAAAA','XKBAAA','VVVVxx' -188,960,0,0,8,8,8,88,188,188,188,16,17,'GHAAAA','YKBAAA','AAAAxx' -262,961,0,2,2,2,2,62,62,262,262,4,5,'CKAAAA','ZKBAAA','HHHHxx' -728,962,0,0,8,8,8,28,128,228,728,16,17,'ACAAAA','ALBAAA','OOOOxx' -581,963,1,1,1,1,1,81,181,81,581,2,3,'JWAAAA','BLBAAA','VVVVxx' -937,964,1,1,7,17,7,37,137,437,937,14,15,'BKAAAA','CLBAAA','AAAAxx' -370,965,0,2,0,10,0,70,170,370,370,0,1,'GOAAAA','DLBAAA','HHHHxx' -590,966,0,2,0,10,0,90,190,90,590,0,1,'SWAAAA','ELBAAA','OOOOxx' -421,967,1,1,1,1,1,21,21,421,421,2,3,'FQAAAA','FLBAAA','VVVVxx' -693,968,1,1,3,13,3,93,93,193,693,6,7,'RAAAAA','GLBAAA','AAAAxx' -906,969,0,2,6,6,6,6,106,406,906,12,13,'WIAAAA','HLBAAA','HHHHxx' -802,970,0,2,2,2,2,2,2,302,802,4,5,'WEAAAA','ILBAAA','OOOOxx' -38,971,0,2,8,18,8,38,38,38,38,16,17,'MBAAAA','JLBAAA','VVVVxx' -790,972,0,2,0,10,0,90,190,290,790,0,1,'KEAAAA','KLBAAA','AAAAxx' -726,973,0,2,6,6,6,26,126,226,726,12,13,'YBAAAA','LLBAAA','HHHHxx' -23,974,1,3,3,3,3,23,23,23,23,6,7,'XAAAAA','MLBAAA','OOOOxx' -641,975,1,1,1,1,1,41,41,141,641,2,3,'RYAAAA','NLBAAA','VVVVxx' -524,976,0,0,4,4,4,24,124,24,524,8,9,'EUAAAA','OLBAAA','AAAAxx' -169,977,1,1,9,9,9,69,169,169,169,18,19,'NGAAAA','PLBAAA','HHHHxx' -6,978,0,2,6,6,6,6,6,6,6,12,13,'GAAAAA','QLBAAA','OOOOxx' -943,979,1,3,3,3,3,43,143,443,943,6,7,'HKAAAA','RLBAAA','VVVVxx' -26,980,0,2,6,6,6,26,26,26,26,12,13,'ABAAAA','SLBAAA','AAAAxx' -469,981,1,1,9,9,9,69,69,469,469,18,19,'BSAAAA','TLBAAA','HHHHxx' -968,982,0,0,8,8,8,68,168,468,968,16,17,'GLAAAA','ULBAAA','OOOOxx' -947,983,1,3,7,7,7,47,147,447,947,14,15,'LKAAAA','VLBAAA','VVVVxx' -133,984,1,1,3,13,3,33,133,133,133,6,7,'DFAAAA','WLBAAA','AAAAxx' -52,985,0,0,2,12,2,52,52,52,52,4,5,'ACAAAA','XLBAAA','HHHHxx' -660,986,0,0,0,0,0,60,60,160,660,0,1,'KZAAAA','YLBAAA','OOOOxx' -780,987,0,0,0,0,0,80,180,280,780,0,1,'AEAAAA','ZLBAAA','VVVVxx' -963,988,1,3,3,3,3,63,163,463,963,6,7,'BLAAAA','AMBAAA','AAAAxx' -561,989,1,1,1,1,1,61,161,61,561,2,3,'PVAAAA','BMBAAA','HHHHxx' -402,990,0,2,2,2,2,2,2,402,402,4,5,'MPAAAA','CMBAAA','OOOOxx' -437,991,1,1,7,17,7,37,37,437,437,14,15,'VQAAAA','DMBAAA','VVVVxx' -112,992,0,0,2,12,2,12,112,112,112,4,5,'IEAAAA','EMBAAA','AAAAxx' -247,993,1,3,7,7,7,47,47,247,247,14,15,'NJAAAA','FMBAAA','HHHHxx' -579,994,1,3,9,19,9,79,179,79,579,18,19,'HWAAAA','GMBAAA','OOOOxx' -379,995,1,3,9,19,9,79,179,379,379,18,19,'POAAAA','HMBAAA','VVVVxx' -74,996,0,2,4,14,4,74,74,74,74,8,9,'WCAAAA','IMBAAA','AAAAxx' -744,997,0,0,4,4,4,44,144,244,744,8,9,'QCAAAA','JMBAAA','HHHHxx' -0,998,0,0,0,0,0,0,0,0,0,0,1,'AAAAAA','KMBAAA','OOOOxx' -278,999,0,2,8,18,8,78,78,278,278,16,17,'SKAAAA','LMBAAA','VVVVxx' diff --git a/sql-bench/Data/Wisconsin/tenk.data b/sql-bench/Data/Wisconsin/tenk.data deleted file mode 100644 index e9d200a0a8bf4bde5dfed224a3042f0701056986..0000000000000000000000000000000000000000 --- a/sql-bench/Data/Wisconsin/tenk.data +++ /dev/null @@ -1,10000 +0,0 @@ -8800,0,0,0,0,0,0,800,800,3800,8800,0,1,'MAAAAA','AAAAAA','AAAAxx' -1891,1,1,3,1,11,91,891,1891,1891,1891,182,183,'TUAAAA','BAAAAA','HHHHxx' -3420,2,0,0,0,0,20,420,1420,3420,3420,40,41,'OBAAAA','CAAAAA','OOOOxx' -9850,3,0,2,0,10,50,850,1850,4850,9850,100,101,'WOAAAA','DAAAAA','VVVVxx' -7164,4,0,0,4,4,64,164,1164,2164,7164,128,129,'OPAAAA','EAAAAA','AAAAxx' -8009,5,1,1,9,9,9,9,9,3009,8009,18,19,'BWAAAA','FAAAAA','HHHHxx' -5057,6,1,1,7,17,57,57,1057,57,5057,114,115,'NMAAAA','GAAAAA','OOOOxx' -6701,7,1,1,1,1,1,701,701,1701,6701,2,3,'TXAAAA','HAAAAA','VVVVxx' -4321,8,1,1,1,1,21,321,321,4321,4321,42,43,'FKAAAA','IAAAAA','AAAAxx' -3043,9,1,3,3,3,43,43,1043,3043,3043,86,87,'BNAAAA','JAAAAA','HHHHxx' -1314,10,0,2,4,14,14,314,1314,1314,1314,28,29,'OYAAAA','KAAAAA','OOOOxx' -1504,11,0,0,4,4,4,504,1504,1504,1504,8,9,'WFAAAA','LAAAAA','VVVVxx' -5222,12,0,2,2,2,22,222,1222,222,5222,44,45,'WSAAAA','MAAAAA','AAAAxx' -6243,13,1,3,3,3,43,243,243,1243,6243,86,87,'DGAAAA','NAAAAA','HHHHxx' -5471,14,1,3,1,11,71,471,1471,471,5471,142,143,'LCAAAA','OAAAAA','OOOOxx' -5006,15,0,2,6,6,6,6,1006,6,5006,12,13,'OKAAAA','PAAAAA','VVVVxx' -5387,16,1,3,7,7,87,387,1387,387,5387,174,175,'FZAAAA','QAAAAA','AAAAxx' -5785,17,1,1,5,5,85,785,1785,785,5785,170,171,'NOAAAA','RAAAAA','HHHHxx' -6621,18,1,1,1,1,21,621,621,1621,6621,42,43,'RUAAAA','SAAAAA','OOOOxx' -6969,19,1,1,9,9,69,969,969,1969,6969,138,139,'BIAAAA','TAAAAA','VVVVxx' -9460,20,0,0,0,0,60,460,1460,4460,9460,120,121,'WZAAAA','UAAAAA','AAAAxx' -59,21,1,3,9,19,59,59,59,59,59,118,119,'HCAAAA','VAAAAA','HHHHxx' -8020,22,0,0,0,0,20,20,20,3020,8020,40,41,'MWAAAA','WAAAAA','OOOOxx' -7695,23,1,3,5,15,95,695,1695,2695,7695,190,191,'ZJAAAA','XAAAAA','VVVVxx' -3442,24,0,2,2,2,42,442,1442,3442,3442,84,85,'KCAAAA','YAAAAA','AAAAxx' -5119,25,1,3,9,19,19,119,1119,119,5119,38,39,'XOAAAA','ZAAAAA','HHHHxx' -646,26,0,2,6,6,46,646,646,646,646,92,93,'WYAAAA','ABAAAA','OOOOxx' -9605,27,1,1,5,5,5,605,1605,4605,9605,10,11,'LFAAAA','BBAAAA','VVVVxx' -263,28,1,3,3,3,63,263,263,263,263,126,127,'DKAAAA','CBAAAA','AAAAxx' -3269,29,1,1,9,9,69,269,1269,3269,3269,138,139,'TVAAAA','DBAAAA','HHHHxx' -1839,30,1,3,9,19,39,839,1839,1839,1839,78,79,'TSAAAA','EBAAAA','OOOOxx' -9144,31,0,0,4,4,44,144,1144,4144,9144,88,89,'SNAAAA','FBAAAA','VVVVxx' -2513,32,1,1,3,13,13,513,513,2513,2513,26,27,'RSAAAA','GBAAAA','AAAAxx' -8850,33,0,2,0,10,50,850,850,3850,8850,100,101,'KCAAAA','HBAAAA','HHHHxx' -236,34,0,0,6,16,36,236,236,236,236,72,73,'CJAAAA','IBAAAA','OOOOxx' -3162,35,0,2,2,2,62,162,1162,3162,3162,124,125,'QRAAAA','JBAAAA','VVVVxx' -4380,36,0,0,0,0,80,380,380,4380,4380,160,161,'MMAAAA','KBAAAA','AAAAxx' -8095,37,1,3,5,15,95,95,95,3095,8095,190,191,'JZAAAA','LBAAAA','HHHHxx' -209,38,1,1,9,9,9,209,209,209,209,18,19,'BIAAAA','MBAAAA','OOOOxx' -3055,39,1,3,5,15,55,55,1055,3055,3055,110,111,'NNAAAA','NBAAAA','VVVVxx' -6921,40,1,1,1,1,21,921,921,1921,6921,42,43,'FGAAAA','OBAAAA','AAAAxx' -7046,41,0,2,6,6,46,46,1046,2046,7046,92,93,'ALAAAA','PBAAAA','HHHHxx' -7912,42,0,0,2,12,12,912,1912,2912,7912,24,25,'ISAAAA','QBAAAA','OOOOxx' -7267,43,1,3,7,7,67,267,1267,2267,7267,134,135,'NTAAAA','RBAAAA','VVVVxx' -3599,44,1,3,9,19,99,599,1599,3599,3599,198,199,'LIAAAA','SBAAAA','AAAAxx' -923,45,1,3,3,3,23,923,923,923,923,46,47,'NJAAAA','TBAAAA','HHHHxx' -1437,46,1,1,7,17,37,437,1437,1437,1437,74,75,'HDAAAA','UBAAAA','OOOOxx' -6439,47,1,3,9,19,39,439,439,1439,6439,78,79,'RNAAAA','VBAAAA','VVVVxx' -6989,48,1,1,9,9,89,989,989,1989,6989,178,179,'VIAAAA','WBAAAA','AAAAxx' -8798,49,0,2,8,18,98,798,798,3798,8798,196,197,'KAAAAA','XBAAAA','HHHHxx' -5960,50,0,0,0,0,60,960,1960,960,5960,120,121,'GVAAAA','YBAAAA','OOOOxx' -5832,51,0,0,2,12,32,832,1832,832,5832,64,65,'IQAAAA','ZBAAAA','VVVVxx' -6066,52,0,2,6,6,66,66,66,1066,6066,132,133,'IZAAAA','ACAAAA','AAAAxx' -322,53,0,2,2,2,22,322,322,322,322,44,45,'KMAAAA','BCAAAA','HHHHxx' -8321,54,1,1,1,1,21,321,321,3321,8321,42,43,'BIAAAA','CCAAAA','OOOOxx' -734,55,0,2,4,14,34,734,734,734,734,68,69,'GCAAAA','DCAAAA','VVVVxx' -688,56,0,0,8,8,88,688,688,688,688,176,177,'MAAAAA','ECAAAA','AAAAxx' -4212,57,0,0,2,12,12,212,212,4212,4212,24,25,'AGAAAA','FCAAAA','HHHHxx' -9653,58,1,1,3,13,53,653,1653,4653,9653,106,107,'HHAAAA','GCAAAA','OOOOxx' -2677,59,1,1,7,17,77,677,677,2677,2677,154,155,'ZYAAAA','HCAAAA','VVVVxx' -5423,60,1,3,3,3,23,423,1423,423,5423,46,47,'PAAAAA','ICAAAA','AAAAxx' -2592,61,0,0,2,12,92,592,592,2592,2592,184,185,'SVAAAA','JCAAAA','HHHHxx' -3233,62,1,1,3,13,33,233,1233,3233,3233,66,67,'JUAAAA','KCAAAA','OOOOxx' -5032,63,0,0,2,12,32,32,1032,32,5032,64,65,'OLAAAA','LCAAAA','VVVVxx' -2525,64,1,1,5,5,25,525,525,2525,2525,50,51,'DTAAAA','MCAAAA','AAAAxx' -4450,65,0,2,0,10,50,450,450,4450,4450,100,101,'EPAAAA','NCAAAA','HHHHxx' -5778,66,0,2,8,18,78,778,1778,778,5778,156,157,'GOAAAA','OCAAAA','OOOOxx' -5852,67,0,0,2,12,52,852,1852,852,5852,104,105,'CRAAAA','PCAAAA','VVVVxx' -5404,68,0,0,4,4,4,404,1404,404,5404,8,9,'WZAAAA','QCAAAA','AAAAxx' -6223,69,1,3,3,3,23,223,223,1223,6223,46,47,'JFAAAA','RCAAAA','HHHHxx' -6133,70,1,1,3,13,33,133,133,1133,6133,66,67,'XBAAAA','SCAAAA','OOOOxx' -9112,71,0,0,2,12,12,112,1112,4112,9112,24,25,'MMAAAA','TCAAAA','VVVVxx' -7575,72,1,3,5,15,75,575,1575,2575,7575,150,151,'JFAAAA','UCAAAA','AAAAxx' -7414,73,0,2,4,14,14,414,1414,2414,7414,28,29,'EZAAAA','VCAAAA','HHHHxx' -9741,74,1,1,1,1,41,741,1741,4741,9741,82,83,'RKAAAA','WCAAAA','OOOOxx' -3767,75,1,3,7,7,67,767,1767,3767,3767,134,135,'XOAAAA','XCAAAA','VVVVxx' -9372,76,0,0,2,12,72,372,1372,4372,9372,144,145,'MWAAAA','YCAAAA','AAAAxx' -8976,77,0,0,6,16,76,976,976,3976,8976,152,153,'GHAAAA','ZCAAAA','HHHHxx' -4071,78,1,3,1,11,71,71,71,4071,4071,142,143,'PAAAAA','ADAAAA','OOOOxx' -1311,79,1,3,1,11,11,311,1311,1311,1311,22,23,'LYAAAA','BDAAAA','VVVVxx' -2604,80,0,0,4,4,4,604,604,2604,2604,8,9,'EWAAAA','CDAAAA','AAAAxx' -8840,81,0,0,0,0,40,840,840,3840,8840,80,81,'ACAAAA','DDAAAA','HHHHxx' -567,82,1,3,7,7,67,567,567,567,567,134,135,'VVAAAA','EDAAAA','OOOOxx' -5215,83,1,3,5,15,15,215,1215,215,5215,30,31,'PSAAAA','FDAAAA','VVVVxx' -5474,84,0,2,4,14,74,474,1474,474,5474,148,149,'OCAAAA','GDAAAA','AAAAxx' -3906,85,0,2,6,6,6,906,1906,3906,3906,12,13,'GUAAAA','HDAAAA','HHHHxx' -1769,86,1,1,9,9,69,769,1769,1769,1769,138,139,'BQAAAA','IDAAAA','OOOOxx' -1454,87,0,2,4,14,54,454,1454,1454,1454,108,109,'YDAAAA','JDAAAA','VVVVxx' -6877,88,1,1,7,17,77,877,877,1877,6877,154,155,'NEAAAA','KDAAAA','AAAAxx' -6501,89,1,1,1,1,1,501,501,1501,6501,2,3,'BQAAAA','LDAAAA','HHHHxx' -934,90,0,2,4,14,34,934,934,934,934,68,69,'YJAAAA','MDAAAA','OOOOxx' -4075,91,1,3,5,15,75,75,75,4075,4075,150,151,'TAAAAA','NDAAAA','VVVVxx' -3180,92,0,0,0,0,80,180,1180,3180,3180,160,161,'ISAAAA','ODAAAA','AAAAxx' -7787,93,1,3,7,7,87,787,1787,2787,7787,174,175,'NNAAAA','PDAAAA','HHHHxx' -6401,94,1,1,1,1,1,401,401,1401,6401,2,3,'FMAAAA','QDAAAA','OOOOxx' -4244,95,0,0,4,4,44,244,244,4244,4244,88,89,'GHAAAA','RDAAAA','VVVVxx' -4591,96,1,3,1,11,91,591,591,4591,4591,182,183,'PUAAAA','SDAAAA','AAAAxx' -4113,97,1,1,3,13,13,113,113,4113,4113,26,27,'FCAAAA','TDAAAA','HHHHxx' -5925,98,1,1,5,5,25,925,1925,925,5925,50,51,'XTAAAA','UDAAAA','OOOOxx' -1987,99,1,3,7,7,87,987,1987,1987,1987,174,175,'LYAAAA','VDAAAA','VVVVxx' -8248,100,0,0,8,8,48,248,248,3248,8248,96,97,'GFAAAA','WDAAAA','AAAAxx' -4151,101,1,3,1,11,51,151,151,4151,4151,102,103,'RDAAAA','XDAAAA','HHHHxx' -8670,102,0,2,0,10,70,670,670,3670,8670,140,141,'MVAAAA','YDAAAA','OOOOxx' -6194,103,0,2,4,14,94,194,194,1194,6194,188,189,'GEAAAA','ZDAAAA','VVVVxx' -88,104,0,0,8,8,88,88,88,88,88,176,177,'KDAAAA','AEAAAA','AAAAxx' -4058,105,0,2,8,18,58,58,58,4058,4058,116,117,'CAAAAA','BEAAAA','HHHHxx' -2742,106,0,2,2,2,42,742,742,2742,2742,84,85,'MBAAAA','CEAAAA','OOOOxx' -8275,107,1,3,5,15,75,275,275,3275,8275,150,151,'HGAAAA','DEAAAA','VVVVxx' -4258,108,0,2,8,18,58,258,258,4258,4258,116,117,'UHAAAA','EEAAAA','AAAAxx' -6129,109,1,1,9,9,29,129,129,1129,6129,58,59,'TBAAAA','FEAAAA','HHHHxx' -7243,110,1,3,3,3,43,243,1243,2243,7243,86,87,'PSAAAA','GEAAAA','OOOOxx' -2392,111,0,0,2,12,92,392,392,2392,2392,184,185,'AOAAAA','HEAAAA','VVVVxx' -9853,112,1,1,3,13,53,853,1853,4853,9853,106,107,'ZOAAAA','IEAAAA','AAAAxx' -6064,113,0,0,4,4,64,64,64,1064,6064,128,129,'GZAAAA','JEAAAA','HHHHxx' -4391,114,1,3,1,11,91,391,391,4391,4391,182,183,'XMAAAA','KEAAAA','OOOOxx' -726,115,0,2,6,6,26,726,726,726,726,52,53,'YBAAAA','LEAAAA','VVVVxx' -6957,116,1,1,7,17,57,957,957,1957,6957,114,115,'PHAAAA','MEAAAA','AAAAxx' -3853,117,1,1,3,13,53,853,1853,3853,3853,106,107,'FSAAAA','NEAAAA','HHHHxx' -4524,118,0,0,4,4,24,524,524,4524,4524,48,49,'ASAAAA','OEAAAA','OOOOxx' -5330,119,0,2,0,10,30,330,1330,330,5330,60,61,'AXAAAA','PEAAAA','VVVVxx' -6671,120,1,3,1,11,71,671,671,1671,6671,142,143,'PWAAAA','QEAAAA','AAAAxx' -5314,121,0,2,4,14,14,314,1314,314,5314,28,29,'KWAAAA','REAAAA','HHHHxx' -9202,122,0,2,2,2,2,202,1202,4202,9202,4,5,'YPAAAA','SEAAAA','OOOOxx' -4596,123,0,0,6,16,96,596,596,4596,4596,192,193,'UUAAAA','TEAAAA','VVVVxx' -8951,124,1,3,1,11,51,951,951,3951,8951,102,103,'HGAAAA','UEAAAA','AAAAxx' -9902,125,0,2,2,2,2,902,1902,4902,9902,4,5,'WQAAAA','VEAAAA','HHHHxx' -1440,126,0,0,0,0,40,440,1440,1440,1440,80,81,'KDAAAA','WEAAAA','OOOOxx' -5339,127,1,3,9,19,39,339,1339,339,5339,78,79,'JXAAAA','XEAAAA','VVVVxx' -3371,128,1,3,1,11,71,371,1371,3371,3371,142,143,'RZAAAA','YEAAAA','AAAAxx' -4467,129,1,3,7,7,67,467,467,4467,4467,134,135,'VPAAAA','ZEAAAA','HHHHxx' -6216,130,0,0,6,16,16,216,216,1216,6216,32,33,'CFAAAA','AFAAAA','OOOOxx' -5364,131,0,0,4,4,64,364,1364,364,5364,128,129,'IYAAAA','BFAAAA','VVVVxx' -7547,132,1,3,7,7,47,547,1547,2547,7547,94,95,'HEAAAA','CFAAAA','AAAAxx' -4338,133,0,2,8,18,38,338,338,4338,4338,76,77,'WKAAAA','DFAAAA','HHHHxx' -3481,134,1,1,1,1,81,481,1481,3481,3481,162,163,'XDAAAA','EFAAAA','OOOOxx' -826,135,0,2,6,6,26,826,826,826,826,52,53,'UFAAAA','FFAAAA','VVVVxx' -3647,136,1,3,7,7,47,647,1647,3647,3647,94,95,'HKAAAA','GFAAAA','AAAAxx' -3337,137,1,1,7,17,37,337,1337,3337,3337,74,75,'JYAAAA','HFAAAA','HHHHxx' -3591,138,1,3,1,11,91,591,1591,3591,3591,182,183,'DIAAAA','IFAAAA','OOOOxx' -7192,139,0,0,2,12,92,192,1192,2192,7192,184,185,'QQAAAA','JFAAAA','VVVVxx' -1078,140,0,2,8,18,78,78,1078,1078,1078,156,157,'MPAAAA','KFAAAA','AAAAxx' -1310,141,0,2,0,10,10,310,1310,1310,1310,20,21,'KYAAAA','LFAAAA','HHHHxx' -9642,142,0,2,2,2,42,642,1642,4642,9642,84,85,'WGAAAA','MFAAAA','OOOOxx' -39,143,1,3,9,19,39,39,39,39,39,78,79,'NBAAAA','NFAAAA','VVVVxx' -8682,144,0,2,2,2,82,682,682,3682,8682,164,165,'YVAAAA','OFAAAA','AAAAxx' -1794,145,0,2,4,14,94,794,1794,1794,1794,188,189,'ARAAAA','PFAAAA','HHHHxx' -5630,146,0,2,0,10,30,630,1630,630,5630,60,61,'OIAAAA','QFAAAA','OOOOxx' -6748,147,0,0,8,8,48,748,748,1748,6748,96,97,'OZAAAA','RFAAAA','VVVVxx' -3766,148,0,2,6,6,66,766,1766,3766,3766,132,133,'WOAAAA','SFAAAA','AAAAxx' -6403,149,1,3,3,3,3,403,403,1403,6403,6,7,'HMAAAA','TFAAAA','HHHHxx' -175,150,1,3,5,15,75,175,175,175,175,150,151,'TGAAAA','UFAAAA','OOOOxx' -2179,151,1,3,9,19,79,179,179,2179,2179,158,159,'VFAAAA','VFAAAA','VVVVxx' -7897,152,1,1,7,17,97,897,1897,2897,7897,194,195,'TRAAAA','WFAAAA','AAAAxx' -2760,153,0,0,0,0,60,760,760,2760,2760,120,121,'ECAAAA','XFAAAA','HHHHxx' -1675,154,1,3,5,15,75,675,1675,1675,1675,150,151,'LMAAAA','YFAAAA','OOOOxx' -2564,155,0,0,4,4,64,564,564,2564,2564,128,129,'QUAAAA','ZFAAAA','VVVVxx' -157,156,1,1,7,17,57,157,157,157,157,114,115,'BGAAAA','AGAAAA','AAAAxx' -8779,157,1,3,9,19,79,779,779,3779,8779,158,159,'RZAAAA','BGAAAA','HHHHxx' -9591,158,1,3,1,11,91,591,1591,4591,9591,182,183,'XEAAAA','CGAAAA','OOOOxx' -8732,159,0,0,2,12,32,732,732,3732,8732,64,65,'WXAAAA','DGAAAA','VVVVxx' -139,160,1,3,9,19,39,139,139,139,139,78,79,'JFAAAA','EGAAAA','AAAAxx' -5372,161,0,0,2,12,72,372,1372,372,5372,144,145,'QYAAAA','FGAAAA','HHHHxx' -1278,162,0,2,8,18,78,278,1278,1278,1278,156,157,'EXAAAA','GGAAAA','OOOOxx' -4697,163,1,1,7,17,97,697,697,4697,4697,194,195,'RYAAAA','HGAAAA','VVVVxx' -8610,164,0,2,0,10,10,610,610,3610,8610,20,21,'ETAAAA','IGAAAA','AAAAxx' -8180,165,0,0,0,0,80,180,180,3180,8180,160,161,'QCAAAA','JGAAAA','HHHHxx' -2399,166,1,3,9,19,99,399,399,2399,2399,198,199,'HOAAAA','KGAAAA','OOOOxx' -615,167,1,3,5,15,15,615,615,615,615,30,31,'RXAAAA','LGAAAA','VVVVxx' -7629,168,1,1,9,9,29,629,1629,2629,7629,58,59,'LHAAAA','MGAAAA','AAAAxx' -7628,169,0,0,8,8,28,628,1628,2628,7628,56,57,'KHAAAA','NGAAAA','HHHHxx' -4659,170,1,3,9,19,59,659,659,4659,4659,118,119,'FXAAAA','OGAAAA','OOOOxx' -5865,171,1,1,5,5,65,865,1865,865,5865,130,131,'PRAAAA','PGAAAA','VVVVxx' -3973,172,1,1,3,13,73,973,1973,3973,3973,146,147,'VWAAAA','QGAAAA','AAAAxx' -552,173,0,0,2,12,52,552,552,552,552,104,105,'GVAAAA','RGAAAA','HHHHxx' -708,174,0,0,8,8,8,708,708,708,708,16,17,'GBAAAA','SGAAAA','OOOOxx' -3550,175,0,2,0,10,50,550,1550,3550,3550,100,101,'OGAAAA','TGAAAA','VVVVxx' -5547,176,1,3,7,7,47,547,1547,547,5547,94,95,'JFAAAA','UGAAAA','AAAAxx' -489,177,1,1,9,9,89,489,489,489,489,178,179,'VSAAAA','VGAAAA','HHHHxx' -3794,178,0,2,4,14,94,794,1794,3794,3794,188,189,'YPAAAA','WGAAAA','OOOOxx' -9479,179,1,3,9,19,79,479,1479,4479,9479,158,159,'PAAAAA','XGAAAA','VVVVxx' -6435,180,1,3,5,15,35,435,435,1435,6435,70,71,'NNAAAA','YGAAAA','AAAAxx' -5120,181,0,0,0,0,20,120,1120,120,5120,40,41,'YOAAAA','ZGAAAA','HHHHxx' -3615,182,1,3,5,15,15,615,1615,3615,3615,30,31,'BJAAAA','AHAAAA','OOOOxx' -8399,183,1,3,9,19,99,399,399,3399,8399,198,199,'BLAAAA','BHAAAA','VVVVxx' -2155,184,1,3,5,15,55,155,155,2155,2155,110,111,'XEAAAA','CHAAAA','AAAAxx' -6690,185,0,2,0,10,90,690,690,1690,6690,180,181,'IXAAAA','DHAAAA','HHHHxx' -1683,186,1,3,3,3,83,683,1683,1683,1683,166,167,'TMAAAA','EHAAAA','OOOOxx' -6302,187,0,2,2,2,2,302,302,1302,6302,4,5,'KIAAAA','FHAAAA','VVVVxx' -516,188,0,0,6,16,16,516,516,516,516,32,33,'WTAAAA','GHAAAA','AAAAxx' -3901,189,1,1,1,1,1,901,1901,3901,3901,2,3,'BUAAAA','HHAAAA','HHHHxx' -6938,190,0,2,8,18,38,938,938,1938,6938,76,77,'WGAAAA','IHAAAA','OOOOxx' -7484,191,0,0,4,4,84,484,1484,2484,7484,168,169,'WBAAAA','JHAAAA','VVVVxx' -7424,192,0,0,4,4,24,424,1424,2424,7424,48,49,'OZAAAA','KHAAAA','AAAAxx' -9410,193,0,2,0,10,10,410,1410,4410,9410,20,21,'YXAAAA','LHAAAA','HHHHxx' -1714,194,0,2,4,14,14,714,1714,1714,1714,28,29,'YNAAAA','MHAAAA','OOOOxx' -8278,195,0,2,8,18,78,278,278,3278,8278,156,157,'KGAAAA','NHAAAA','VVVVxx' -3158,196,0,2,8,18,58,158,1158,3158,3158,116,117,'MRAAAA','OHAAAA','AAAAxx' -2511,197,1,3,1,11,11,511,511,2511,2511,22,23,'PSAAAA','PHAAAA','HHHHxx' -2912,198,0,0,2,12,12,912,912,2912,2912,24,25,'AIAAAA','QHAAAA','OOOOxx' -2648,199,0,0,8,8,48,648,648,2648,2648,96,97,'WXAAAA','RHAAAA','VVVVxx' -9385,200,1,1,5,5,85,385,1385,4385,9385,170,171,'ZWAAAA','SHAAAA','AAAAxx' -7545,201,1,1,5,5,45,545,1545,2545,7545,90,91,'FEAAAA','THAAAA','HHHHxx' -8407,202,1,3,7,7,7,407,407,3407,8407,14,15,'JLAAAA','UHAAAA','OOOOxx' -5893,203,1,1,3,13,93,893,1893,893,5893,186,187,'RSAAAA','VHAAAA','VVVVxx' -7049,204,1,1,9,9,49,49,1049,2049,7049,98,99,'DLAAAA','WHAAAA','AAAAxx' -6812,205,0,0,2,12,12,812,812,1812,6812,24,25,'ACAAAA','XHAAAA','HHHHxx' -3649,206,1,1,9,9,49,649,1649,3649,3649,98,99,'JKAAAA','YHAAAA','OOOOxx' -9275,207,1,3,5,15,75,275,1275,4275,9275,150,151,'TSAAAA','ZHAAAA','VVVVxx' -1179,208,1,3,9,19,79,179,1179,1179,1179,158,159,'JTAAAA','AIAAAA','AAAAxx' -969,209,1,1,9,9,69,969,969,969,969,138,139,'HLAAAA','BIAAAA','HHHHxx' -7920,210,0,0,0,0,20,920,1920,2920,7920,40,41,'QSAAAA','CIAAAA','OOOOxx' -998,211,0,2,8,18,98,998,998,998,998,196,197,'KMAAAA','DIAAAA','VVVVxx' -3958,212,0,2,8,18,58,958,1958,3958,3958,116,117,'GWAAAA','EIAAAA','AAAAxx' -6052,213,0,0,2,12,52,52,52,1052,6052,104,105,'UYAAAA','FIAAAA','HHHHxx' -8791,214,1,3,1,11,91,791,791,3791,8791,182,183,'DAAAAA','GIAAAA','OOOOxx' -5191,215,1,3,1,11,91,191,1191,191,5191,182,183,'RRAAAA','HIAAAA','VVVVxx' -4267,216,1,3,7,7,67,267,267,4267,4267,134,135,'DIAAAA','IIAAAA','AAAAxx' -2829,217,1,1,9,9,29,829,829,2829,2829,58,59,'VEAAAA','JIAAAA','HHHHxx' -6396,218,0,0,6,16,96,396,396,1396,6396,192,193,'AMAAAA','KIAAAA','OOOOxx' -9413,219,1,1,3,13,13,413,1413,4413,9413,26,27,'BYAAAA','LIAAAA','VVVVxx' -614,220,0,2,4,14,14,614,614,614,614,28,29,'QXAAAA','MIAAAA','AAAAxx' -4660,221,0,0,0,0,60,660,660,4660,4660,120,121,'GXAAAA','NIAAAA','HHHHxx' -8834,222,0,2,4,14,34,834,834,3834,8834,68,69,'UBAAAA','OIAAAA','OOOOxx' -2767,223,1,3,7,7,67,767,767,2767,2767,134,135,'LCAAAA','PIAAAA','VVVVxx' -2444,224,0,0,4,4,44,444,444,2444,2444,88,89,'AQAAAA','QIAAAA','AAAAxx' -4129,225,1,1,9,9,29,129,129,4129,4129,58,59,'VCAAAA','RIAAAA','HHHHxx' -3394,226,0,2,4,14,94,394,1394,3394,3394,188,189,'OAAAAA','SIAAAA','OOOOxx' -2705,227,1,1,5,5,5,705,705,2705,2705,10,11,'BAAAAA','TIAAAA','VVVVxx' -8499,228,1,3,9,19,99,499,499,3499,8499,198,199,'XOAAAA','UIAAAA','AAAAxx' -8852,229,0,0,2,12,52,852,852,3852,8852,104,105,'MCAAAA','VIAAAA','HHHHxx' -6174,230,0,2,4,14,74,174,174,1174,6174,148,149,'MDAAAA','WIAAAA','OOOOxx' -750,231,0,2,0,10,50,750,750,750,750,100,101,'WCAAAA','XIAAAA','VVVVxx' -8164,232,0,0,4,4,64,164,164,3164,8164,128,129,'ACAAAA','YIAAAA','AAAAxx' -4930,233,0,2,0,10,30,930,930,4930,4930,60,61,'QHAAAA','ZIAAAA','HHHHxx' -9904,234,0,0,4,4,4,904,1904,4904,9904,8,9,'YQAAAA','AJAAAA','OOOOxx' -7378,235,0,2,8,18,78,378,1378,2378,7378,156,157,'UXAAAA','BJAAAA','VVVVxx' -2927,236,1,3,7,7,27,927,927,2927,2927,54,55,'PIAAAA','CJAAAA','AAAAxx' -7155,237,1,3,5,15,55,155,1155,2155,7155,110,111,'FPAAAA','DJAAAA','HHHHxx' -1302,238,0,2,2,2,2,302,1302,1302,1302,4,5,'CYAAAA','EJAAAA','OOOOxx' -5904,239,0,0,4,4,4,904,1904,904,5904,8,9,'CTAAAA','FJAAAA','VVVVxx' -9687,240,1,3,7,7,87,687,1687,4687,9687,174,175,'PIAAAA','GJAAAA','AAAAxx' -3553,241,1,1,3,13,53,553,1553,3553,3553,106,107,'RGAAAA','HJAAAA','HHHHxx' -4447,242,1,3,7,7,47,447,447,4447,4447,94,95,'BPAAAA','IJAAAA','OOOOxx' -6878,243,0,2,8,18,78,878,878,1878,6878,156,157,'OEAAAA','JJAAAA','VVVVxx' -9470,244,0,2,0,10,70,470,1470,4470,9470,140,141,'GAAAAA','KJAAAA','AAAAxx' -9735,245,1,3,5,15,35,735,1735,4735,9735,70,71,'LKAAAA','LJAAAA','HHHHxx' -5967,246,1,3,7,7,67,967,1967,967,5967,134,135,'NVAAAA','MJAAAA','OOOOxx' -6601,247,1,1,1,1,1,601,601,1601,6601,2,3,'XTAAAA','NJAAAA','VVVVxx' -7631,248,1,3,1,11,31,631,1631,2631,7631,62,63,'NHAAAA','OJAAAA','AAAAxx' -3559,249,1,3,9,19,59,559,1559,3559,3559,118,119,'XGAAAA','PJAAAA','HHHHxx' -2247,250,1,3,7,7,47,247,247,2247,2247,94,95,'LIAAAA','QJAAAA','OOOOxx' -9649,251,1,1,9,9,49,649,1649,4649,9649,98,99,'DHAAAA','RJAAAA','VVVVxx' -808,252,0,0,8,8,8,808,808,808,808,16,17,'CFAAAA','SJAAAA','AAAAxx' -240,253,0,0,0,0,40,240,240,240,240,80,81,'GJAAAA','TJAAAA','HHHHxx' -5031,254,1,3,1,11,31,31,1031,31,5031,62,63,'NLAAAA','UJAAAA','OOOOxx' -9563,255,1,3,3,3,63,563,1563,4563,9563,126,127,'VDAAAA','VJAAAA','VVVVxx' -5656,256,0,0,6,16,56,656,1656,656,5656,112,113,'OJAAAA','WJAAAA','AAAAxx' -3886,257,0,2,6,6,86,886,1886,3886,3886,172,173,'MTAAAA','XJAAAA','HHHHxx' -2431,258,1,3,1,11,31,431,431,2431,2431,62,63,'NPAAAA','YJAAAA','OOOOxx' -5560,259,0,0,0,0,60,560,1560,560,5560,120,121,'WFAAAA','ZJAAAA','VVVVxx' -9065,260,1,1,5,5,65,65,1065,4065,9065,130,131,'RKAAAA','AKAAAA','AAAAxx' -8130,261,0,2,0,10,30,130,130,3130,8130,60,61,'SAAAAA','BKAAAA','HHHHxx' -4054,262,0,2,4,14,54,54,54,4054,4054,108,109,'YZAAAA','CKAAAA','OOOOxx' -873,263,1,1,3,13,73,873,873,873,873,146,147,'PHAAAA','DKAAAA','VVVVxx' -3092,264,0,0,2,12,92,92,1092,3092,3092,184,185,'YOAAAA','EKAAAA','AAAAxx' -6697,265,1,1,7,17,97,697,697,1697,6697,194,195,'PXAAAA','FKAAAA','HHHHxx' -2452,266,0,0,2,12,52,452,452,2452,2452,104,105,'IQAAAA','GKAAAA','OOOOxx' -7867,267,1,3,7,7,67,867,1867,2867,7867,134,135,'PQAAAA','HKAAAA','VVVVxx' -3753,268,1,1,3,13,53,753,1753,3753,3753,106,107,'JOAAAA','IKAAAA','AAAAxx' -7834,269,0,2,4,14,34,834,1834,2834,7834,68,69,'IPAAAA','JKAAAA','HHHHxx' -5846,270,0,2,6,6,46,846,1846,846,5846,92,93,'WQAAAA','KKAAAA','OOOOxx' -7604,271,0,0,4,4,4,604,1604,2604,7604,8,9,'MGAAAA','LKAAAA','VVVVxx' -3452,272,0,0,2,12,52,452,1452,3452,3452,104,105,'UCAAAA','MKAAAA','AAAAxx' -4788,273,0,0,8,8,88,788,788,4788,4788,176,177,'ECAAAA','NKAAAA','HHHHxx' -8600,274,0,0,0,0,0,600,600,3600,8600,0,1,'USAAAA','OKAAAA','OOOOxx' -8511,275,1,3,1,11,11,511,511,3511,8511,22,23,'JPAAAA','PKAAAA','VVVVxx' -4452,276,0,0,2,12,52,452,452,4452,4452,104,105,'GPAAAA','QKAAAA','AAAAxx' -1709,277,1,1,9,9,9,709,1709,1709,1709,18,19,'TNAAAA','RKAAAA','HHHHxx' -3440,278,0,0,0,0,40,440,1440,3440,3440,80,81,'ICAAAA','SKAAAA','OOOOxx' -9188,279,0,0,8,8,88,188,1188,4188,9188,176,177,'KPAAAA','TKAAAA','VVVVxx' -3058,280,0,2,8,18,58,58,1058,3058,3058,116,117,'QNAAAA','UKAAAA','AAAAxx' -5821,281,1,1,1,1,21,821,1821,821,5821,42,43,'XPAAAA','VKAAAA','HHHHxx' -3428,282,0,0,8,8,28,428,1428,3428,3428,56,57,'WBAAAA','WKAAAA','OOOOxx' -3581,283,1,1,1,1,81,581,1581,3581,3581,162,163,'THAAAA','XKAAAA','VVVVxx' -7523,284,1,3,3,3,23,523,1523,2523,7523,46,47,'JDAAAA','YKAAAA','AAAAxx' -3131,285,1,3,1,11,31,131,1131,3131,3131,62,63,'LQAAAA','ZKAAAA','HHHHxx' -2404,286,0,0,4,4,4,404,404,2404,2404,8,9,'MOAAAA','ALAAAA','OOOOxx' -5453,287,1,1,3,13,53,453,1453,453,5453,106,107,'TBAAAA','BLAAAA','VVVVxx' -1599,288,1,3,9,19,99,599,1599,1599,1599,198,199,'NJAAAA','CLAAAA','AAAAxx' -7081,289,1,1,1,1,81,81,1081,2081,7081,162,163,'JMAAAA','DLAAAA','HHHHxx' -1750,290,0,2,0,10,50,750,1750,1750,1750,100,101,'IPAAAA','ELAAAA','OOOOxx' -5085,291,1,1,5,5,85,85,1085,85,5085,170,171,'PNAAAA','FLAAAA','VVVVxx' -9777,292,1,1,7,17,77,777,1777,4777,9777,154,155,'BMAAAA','GLAAAA','AAAAxx' -574,293,0,2,4,14,74,574,574,574,574,148,149,'CWAAAA','HLAAAA','HHHHxx' -5984,294,0,0,4,4,84,984,1984,984,5984,168,169,'EWAAAA','ILAAAA','OOOOxx' -7039,295,1,3,9,19,39,39,1039,2039,7039,78,79,'TKAAAA','JLAAAA','VVVVxx' -7143,296,1,3,3,3,43,143,1143,2143,7143,86,87,'TOAAAA','KLAAAA','AAAAxx' -5702,297,0,2,2,2,2,702,1702,702,5702,4,5,'ILAAAA','LLAAAA','HHHHxx' -362,298,0,2,2,2,62,362,362,362,362,124,125,'YNAAAA','MLAAAA','OOOOxx' -6997,299,1,1,7,17,97,997,997,1997,6997,194,195,'DJAAAA','NLAAAA','VVVVxx' -2529,300,1,1,9,9,29,529,529,2529,2529,58,59,'HTAAAA','OLAAAA','AAAAxx' -6319,301,1,3,9,19,19,319,319,1319,6319,38,39,'BJAAAA','PLAAAA','HHHHxx' -954,302,0,2,4,14,54,954,954,954,954,108,109,'SKAAAA','QLAAAA','OOOOxx' -3413,303,1,1,3,13,13,413,1413,3413,3413,26,27,'HBAAAA','RLAAAA','VVVVxx' -9081,304,1,1,1,1,81,81,1081,4081,9081,162,163,'HLAAAA','SLAAAA','AAAAxx' -5599,305,1,3,9,19,99,599,1599,599,5599,198,199,'JHAAAA','TLAAAA','HHHHxx' -4772,306,0,0,2,12,72,772,772,4772,4772,144,145,'OBAAAA','ULAAAA','OOOOxx' -1124,307,0,0,4,4,24,124,1124,1124,1124,48,49,'GRAAAA','VLAAAA','VVVVxx' -7793,308,1,1,3,13,93,793,1793,2793,7793,186,187,'TNAAAA','WLAAAA','AAAAxx' -4201,309,1,1,1,1,1,201,201,4201,4201,2,3,'PFAAAA','XLAAAA','HHHHxx' -7015,310,1,3,5,15,15,15,1015,2015,7015,30,31,'VJAAAA','YLAAAA','OOOOxx' -5936,311,0,0,6,16,36,936,1936,936,5936,72,73,'IUAAAA','ZLAAAA','VVVVxx' -4625,312,1,1,5,5,25,625,625,4625,4625,50,51,'XVAAAA','AMAAAA','AAAAxx' -4989,313,1,1,9,9,89,989,989,4989,4989,178,179,'XJAAAA','BMAAAA','HHHHxx' -4949,314,1,1,9,9,49,949,949,4949,4949,98,99,'JIAAAA','CMAAAA','OOOOxx' -6273,315,1,1,3,13,73,273,273,1273,6273,146,147,'HHAAAA','DMAAAA','VVVVxx' -4478,316,0,2,8,18,78,478,478,4478,4478,156,157,'GQAAAA','EMAAAA','AAAAxx' -8854,317,0,2,4,14,54,854,854,3854,8854,108,109,'OCAAAA','FMAAAA','HHHHxx' -2105,318,1,1,5,5,5,105,105,2105,2105,10,11,'ZCAAAA','GMAAAA','OOOOxx' -8345,319,1,1,5,5,45,345,345,3345,8345,90,91,'ZIAAAA','HMAAAA','VVVVxx' -1941,320,1,1,1,1,41,941,1941,1941,1941,82,83,'RWAAAA','IMAAAA','AAAAxx' -1765,321,1,1,5,5,65,765,1765,1765,1765,130,131,'XPAAAA','JMAAAA','HHHHxx' -9592,322,0,0,2,12,92,592,1592,4592,9592,184,185,'YEAAAA','KMAAAA','OOOOxx' -1694,323,0,2,4,14,94,694,1694,1694,1694,188,189,'ENAAAA','LMAAAA','VVVVxx' -8940,324,0,0,0,0,40,940,940,3940,8940,80,81,'WFAAAA','MMAAAA','AAAAxx' -7264,325,0,0,4,4,64,264,1264,2264,7264,128,129,'KTAAAA','NMAAAA','HHHHxx' -4699,326,1,3,9,19,99,699,699,4699,4699,198,199,'TYAAAA','OMAAAA','OOOOxx' -4541,327,1,1,1,1,41,541,541,4541,4541,82,83,'RSAAAA','PMAAAA','VVVVxx' -5768,328,0,0,8,8,68,768,1768,768,5768,136,137,'WNAAAA','QMAAAA','AAAAxx' -6183,329,1,3,3,3,83,183,183,1183,6183,166,167,'VDAAAA','RMAAAA','HHHHxx' -7457,330,1,1,7,17,57,457,1457,2457,7457,114,115,'VAAAAA','SMAAAA','OOOOxx' -7317,331,1,1,7,17,17,317,1317,2317,7317,34,35,'LVAAAA','TMAAAA','VVVVxx' -1944,332,0,0,4,4,44,944,1944,1944,1944,88,89,'UWAAAA','UMAAAA','AAAAxx' -665,333,1,1,5,5,65,665,665,665,665,130,131,'PZAAAA','VMAAAA','HHHHxx' -5974,334,0,2,4,14,74,974,1974,974,5974,148,149,'UVAAAA','WMAAAA','OOOOxx' -7370,335,0,2,0,10,70,370,1370,2370,7370,140,141,'MXAAAA','XMAAAA','VVVVxx' -9196,336,0,0,6,16,96,196,1196,4196,9196,192,193,'SPAAAA','YMAAAA','AAAAxx' -6796,337,0,0,6,16,96,796,796,1796,6796,192,193,'KBAAAA','ZMAAAA','HHHHxx' -6180,338,0,0,0,0,80,180,180,1180,6180,160,161,'SDAAAA','ANAAAA','OOOOxx' -8557,339,1,1,7,17,57,557,557,3557,8557,114,115,'DRAAAA','BNAAAA','VVVVxx' -928,340,0,0,8,8,28,928,928,928,928,56,57,'SJAAAA','CNAAAA','AAAAxx' -6275,341,1,3,5,15,75,275,275,1275,6275,150,151,'JHAAAA','DNAAAA','HHHHxx' -409,342,1,1,9,9,9,409,409,409,409,18,19,'TPAAAA','ENAAAA','OOOOxx' -6442,343,0,2,2,2,42,442,442,1442,6442,84,85,'UNAAAA','FNAAAA','VVVVxx' -5889,344,1,1,9,9,89,889,1889,889,5889,178,179,'NSAAAA','GNAAAA','AAAAxx' -5180,345,0,0,0,0,80,180,1180,180,5180,160,161,'GRAAAA','HNAAAA','HHHHxx' -1629,346,1,1,9,9,29,629,1629,1629,1629,58,59,'RKAAAA','INAAAA','OOOOxx' -6088,347,0,0,8,8,88,88,88,1088,6088,176,177,'EAAAAA','JNAAAA','VVVVxx' -5598,348,0,2,8,18,98,598,1598,598,5598,196,197,'IHAAAA','KNAAAA','AAAAxx' -1803,349,1,3,3,3,3,803,1803,1803,1803,6,7,'JRAAAA','LNAAAA','HHHHxx' -2330,350,0,2,0,10,30,330,330,2330,2330,60,61,'QLAAAA','MNAAAA','OOOOxx' -5901,351,1,1,1,1,1,901,1901,901,5901,2,3,'ZSAAAA','NNAAAA','VVVVxx' -780,352,0,0,0,0,80,780,780,780,780,160,161,'AEAAAA','ONAAAA','AAAAxx' -7171,353,1,3,1,11,71,171,1171,2171,7171,142,143,'VPAAAA','PNAAAA','HHHHxx' -8778,354,0,2,8,18,78,778,778,3778,8778,156,157,'QZAAAA','QNAAAA','OOOOxx' -6622,355,0,2,2,2,22,622,622,1622,6622,44,45,'SUAAAA','RNAAAA','VVVVxx' -9938,356,0,2,8,18,38,938,1938,4938,9938,76,77,'GSAAAA','SNAAAA','AAAAxx' -8254,357,0,2,4,14,54,254,254,3254,8254,108,109,'MFAAAA','TNAAAA','HHHHxx' -1951,358,1,3,1,11,51,951,1951,1951,1951,102,103,'BXAAAA','UNAAAA','OOOOxx' -1434,359,0,2,4,14,34,434,1434,1434,1434,68,69,'EDAAAA','VNAAAA','VVVVxx' -7539,360,1,3,9,19,39,539,1539,2539,7539,78,79,'ZDAAAA','WNAAAA','AAAAxx' -600,361,0,0,0,0,0,600,600,600,600,0,1,'CXAAAA','XNAAAA','HHHHxx' -3122,362,0,2,2,2,22,122,1122,3122,3122,44,45,'CQAAAA','YNAAAA','OOOOxx' -5704,363,0,0,4,4,4,704,1704,704,5704,8,9,'KLAAAA','ZNAAAA','VVVVxx' -6300,364,0,0,0,0,0,300,300,1300,6300,0,1,'IIAAAA','AOAAAA','AAAAxx' -4585,365,1,1,5,5,85,585,585,4585,4585,170,171,'JUAAAA','BOAAAA','HHHHxx' -6313,366,1,1,3,13,13,313,313,1313,6313,26,27,'VIAAAA','COAAAA','OOOOxx' -3154,367,0,2,4,14,54,154,1154,3154,3154,108,109,'IRAAAA','DOAAAA','VVVVxx' -642,368,0,2,2,2,42,642,642,642,642,84,85,'SYAAAA','EOAAAA','AAAAxx' -7736,369,0,0,6,16,36,736,1736,2736,7736,72,73,'OLAAAA','FOAAAA','HHHHxx' -5087,370,1,3,7,7,87,87,1087,87,5087,174,175,'RNAAAA','GOAAAA','OOOOxx' -5708,371,0,0,8,8,8,708,1708,708,5708,16,17,'OLAAAA','HOAAAA','VVVVxx' -8169,372,1,1,9,9,69,169,169,3169,8169,138,139,'FCAAAA','IOAAAA','AAAAxx' -9768,373,0,0,8,8,68,768,1768,4768,9768,136,137,'SLAAAA','JOAAAA','HHHHxx' -3874,374,0,2,4,14,74,874,1874,3874,3874,148,149,'ATAAAA','KOAAAA','OOOOxx' -6831,375,1,3,1,11,31,831,831,1831,6831,62,63,'TCAAAA','LOAAAA','VVVVxx' -18,376,0,2,8,18,18,18,18,18,18,36,37,'SAAAAA','MOAAAA','AAAAxx' -6375,377,1,3,5,15,75,375,375,1375,6375,150,151,'FLAAAA','NOAAAA','HHHHxx' -7106,378,0,2,6,6,6,106,1106,2106,7106,12,13,'INAAAA','OOAAAA','OOOOxx' -5926,379,0,2,6,6,26,926,1926,926,5926,52,53,'YTAAAA','POAAAA','VVVVxx' -4956,380,0,0,6,16,56,956,956,4956,4956,112,113,'QIAAAA','QOAAAA','AAAAxx' -7042,381,0,2,2,2,42,42,1042,2042,7042,84,85,'WKAAAA','ROAAAA','HHHHxx' -6043,382,1,3,3,3,43,43,43,1043,6043,86,87,'LYAAAA','SOAAAA','OOOOxx' -2084,383,0,0,4,4,84,84,84,2084,2084,168,169,'ECAAAA','TOAAAA','VVVVxx' -6038,384,0,2,8,18,38,38,38,1038,6038,76,77,'GYAAAA','UOAAAA','AAAAxx' -7253,385,1,1,3,13,53,253,1253,2253,7253,106,107,'ZSAAAA','VOAAAA','HHHHxx' -2061,386,1,1,1,1,61,61,61,2061,2061,122,123,'HBAAAA','WOAAAA','OOOOxx' -7800,387,0,0,0,0,0,800,1800,2800,7800,0,1,'AOAAAA','XOAAAA','VVVVxx' -4970,388,0,2,0,10,70,970,970,4970,4970,140,141,'EJAAAA','YOAAAA','AAAAxx' -8580,389,0,0,0,0,80,580,580,3580,8580,160,161,'ASAAAA','ZOAAAA','HHHHxx' -9173,390,1,1,3,13,73,173,1173,4173,9173,146,147,'VOAAAA','APAAAA','OOOOxx' -8558,391,0,2,8,18,58,558,558,3558,8558,116,117,'ERAAAA','BPAAAA','VVVVxx' -3897,392,1,1,7,17,97,897,1897,3897,3897,194,195,'XTAAAA','CPAAAA','AAAAxx' -5069,393,1,1,9,9,69,69,1069,69,5069,138,139,'ZMAAAA','DPAAAA','HHHHxx' -2301,394,1,1,1,1,1,301,301,2301,2301,2,3,'NKAAAA','EPAAAA','OOOOxx' -9863,395,1,3,3,3,63,863,1863,4863,9863,126,127,'JPAAAA','FPAAAA','VVVVxx' -5733,396,1,1,3,13,33,733,1733,733,5733,66,67,'NMAAAA','GPAAAA','AAAAxx' -2338,397,0,2,8,18,38,338,338,2338,2338,76,77,'YLAAAA','HPAAAA','HHHHxx' -9639,398,1,3,9,19,39,639,1639,4639,9639,78,79,'TGAAAA','IPAAAA','OOOOxx' -1139,399,1,3,9,19,39,139,1139,1139,1139,78,79,'VRAAAA','JPAAAA','VVVVxx' -2293,400,1,1,3,13,93,293,293,2293,2293,186,187,'FKAAAA','KPAAAA','AAAAxx' -6125,401,1,1,5,5,25,125,125,1125,6125,50,51,'PBAAAA','LPAAAA','HHHHxx' -5374,402,0,2,4,14,74,374,1374,374,5374,148,149,'SYAAAA','MPAAAA','OOOOxx' -7216,403,0,0,6,16,16,216,1216,2216,7216,32,33,'ORAAAA','NPAAAA','VVVVxx' -2285,404,1,1,5,5,85,285,285,2285,2285,170,171,'XJAAAA','OPAAAA','AAAAxx' -2387,405,1,3,7,7,87,387,387,2387,2387,174,175,'VNAAAA','PPAAAA','HHHHxx' -5015,406,1,3,5,15,15,15,1015,15,5015,30,31,'XKAAAA','QPAAAA','OOOOxx' -2087,407,1,3,7,7,87,87,87,2087,2087,174,175,'HCAAAA','RPAAAA','VVVVxx' -4938,408,0,2,8,18,38,938,938,4938,4938,76,77,'YHAAAA','SPAAAA','AAAAxx' -3635,409,1,3,5,15,35,635,1635,3635,3635,70,71,'VJAAAA','TPAAAA','HHHHxx' -7737,410,1,1,7,17,37,737,1737,2737,7737,74,75,'PLAAAA','UPAAAA','OOOOxx' -8056,411,0,0,6,16,56,56,56,3056,8056,112,113,'WXAAAA','VPAAAA','VVVVxx' -4502,412,0,2,2,2,2,502,502,4502,4502,4,5,'ERAAAA','WPAAAA','AAAAxx' -54,413,0,2,4,14,54,54,54,54,54,108,109,'CCAAAA','XPAAAA','HHHHxx' -3182,414,0,2,2,2,82,182,1182,3182,3182,164,165,'KSAAAA','YPAAAA','OOOOxx' -3718,415,0,2,8,18,18,718,1718,3718,3718,36,37,'ANAAAA','ZPAAAA','VVVVxx' -3989,416,1,1,9,9,89,989,1989,3989,3989,178,179,'LXAAAA','AQAAAA','AAAAxx' -8028,417,0,0,8,8,28,28,28,3028,8028,56,57,'UWAAAA','BQAAAA','HHHHxx' -1426,418,0,2,6,6,26,426,1426,1426,1426,52,53,'WCAAAA','CQAAAA','OOOOxx' -3801,419,1,1,1,1,1,801,1801,3801,3801,2,3,'FQAAAA','DQAAAA','VVVVxx' -241,420,1,1,1,1,41,241,241,241,241,82,83,'HJAAAA','EQAAAA','AAAAxx' -8000,421,0,0,0,0,0,0,0,3000,8000,0,1,'SVAAAA','FQAAAA','HHHHxx' -8357,422,1,1,7,17,57,357,357,3357,8357,114,115,'LJAAAA','GQAAAA','OOOOxx' -7548,423,0,0,8,8,48,548,1548,2548,7548,96,97,'IEAAAA','HQAAAA','VVVVxx' -7307,424,1,3,7,7,7,307,1307,2307,7307,14,15,'BVAAAA','IQAAAA','AAAAxx' -2275,425,1,3,5,15,75,275,275,2275,2275,150,151,'NJAAAA','JQAAAA','HHHHxx' -2718,426,0,2,8,18,18,718,718,2718,2718,36,37,'OAAAAA','KQAAAA','OOOOxx' -7068,427,0,0,8,8,68,68,1068,2068,7068,136,137,'WLAAAA','LQAAAA','VVVVxx' -3181,428,1,1,1,1,81,181,1181,3181,3181,162,163,'JSAAAA','MQAAAA','AAAAxx' -749,429,1,1,9,9,49,749,749,749,749,98,99,'VCAAAA','NQAAAA','HHHHxx' -5195,430,1,3,5,15,95,195,1195,195,5195,190,191,'VRAAAA','OQAAAA','OOOOxx' -6136,431,0,0,6,16,36,136,136,1136,6136,72,73,'ACAAAA','PQAAAA','VVVVxx' -8012,432,0,0,2,12,12,12,12,3012,8012,24,25,'EWAAAA','QQAAAA','AAAAxx' -3957,433,1,1,7,17,57,957,1957,3957,3957,114,115,'FWAAAA','RQAAAA','HHHHxx' -3083,434,1,3,3,3,83,83,1083,3083,3083,166,167,'POAAAA','SQAAAA','OOOOxx' -9997,435,1,1,7,17,97,997,1997,4997,9997,194,195,'NUAAAA','TQAAAA','VVVVxx' -3299,436,1,3,9,19,99,299,1299,3299,3299,198,199,'XWAAAA','UQAAAA','AAAAxx' -846,437,0,2,6,6,46,846,846,846,846,92,93,'OGAAAA','VQAAAA','HHHHxx' -2985,438,1,1,5,5,85,985,985,2985,2985,170,171,'VKAAAA','WQAAAA','OOOOxx' -9238,439,0,2,8,18,38,238,1238,4238,9238,76,77,'IRAAAA','XQAAAA','VVVVxx' -1403,440,1,3,3,3,3,403,1403,1403,1403,6,7,'ZBAAAA','YQAAAA','AAAAxx' -5563,441,1,3,3,3,63,563,1563,563,5563,126,127,'ZFAAAA','ZQAAAA','HHHHxx' -7965,442,1,1,5,5,65,965,1965,2965,7965,130,131,'JUAAAA','ARAAAA','OOOOxx' -4512,443,0,0,2,12,12,512,512,4512,4512,24,25,'ORAAAA','BRAAAA','VVVVxx' -9730,444,0,2,0,10,30,730,1730,4730,9730,60,61,'GKAAAA','CRAAAA','AAAAxx' -1129,445,1,1,9,9,29,129,1129,1129,1129,58,59,'LRAAAA','DRAAAA','HHHHxx' -2624,446,0,0,4,4,24,624,624,2624,2624,48,49,'YWAAAA','ERAAAA','OOOOxx' -8178,447,0,2,8,18,78,178,178,3178,8178,156,157,'OCAAAA','FRAAAA','VVVVxx' -6468,448,0,0,8,8,68,468,468,1468,6468,136,137,'UOAAAA','GRAAAA','AAAAxx' -3027,449,1,3,7,7,27,27,1027,3027,3027,54,55,'LMAAAA','HRAAAA','HHHHxx' -3845,450,1,1,5,5,45,845,1845,3845,3845,90,91,'XRAAAA','IRAAAA','OOOOxx' -786,451,0,2,6,6,86,786,786,786,786,172,173,'GEAAAA','JRAAAA','VVVVxx' -4971,452,1,3,1,11,71,971,971,4971,4971,142,143,'FJAAAA','KRAAAA','AAAAxx' -1542,453,0,2,2,2,42,542,1542,1542,1542,84,85,'IHAAAA','LRAAAA','HHHHxx' -7967,454,1,3,7,7,67,967,1967,2967,7967,134,135,'LUAAAA','MRAAAA','OOOOxx' -443,455,1,3,3,3,43,443,443,443,443,86,87,'BRAAAA','NRAAAA','VVVVxx' -7318,456,0,2,8,18,18,318,1318,2318,7318,36,37,'MVAAAA','ORAAAA','AAAAxx' -4913,457,1,1,3,13,13,913,913,4913,4913,26,27,'ZGAAAA','PRAAAA','HHHHxx' -9466,458,0,2,6,6,66,466,1466,4466,9466,132,133,'CAAAAA','QRAAAA','OOOOxx' -7866,459,0,2,6,6,66,866,1866,2866,7866,132,133,'OQAAAA','RRAAAA','VVVVxx' -784,460,0,0,4,4,84,784,784,784,784,168,169,'EEAAAA','SRAAAA','AAAAxx' -9040,461,0,0,0,0,40,40,1040,4040,9040,80,81,'SJAAAA','TRAAAA','HHHHxx' -3954,462,0,2,4,14,54,954,1954,3954,3954,108,109,'CWAAAA','URAAAA','OOOOxx' -4183,463,1,3,3,3,83,183,183,4183,4183,166,167,'XEAAAA','VRAAAA','VVVVxx' -3608,464,0,0,8,8,8,608,1608,3608,3608,16,17,'UIAAAA','WRAAAA','AAAAxx' -7630,465,0,2,0,10,30,630,1630,2630,7630,60,61,'MHAAAA','XRAAAA','HHHHxx' -590,466,0,2,0,10,90,590,590,590,590,180,181,'SWAAAA','YRAAAA','OOOOxx' -3453,467,1,1,3,13,53,453,1453,3453,3453,106,107,'VCAAAA','ZRAAAA','VVVVxx' -7757,468,1,1,7,17,57,757,1757,2757,7757,114,115,'JMAAAA','ASAAAA','AAAAxx' -7394,469,0,2,4,14,94,394,1394,2394,7394,188,189,'KYAAAA','BSAAAA','HHHHxx' -396,470,0,0,6,16,96,396,396,396,396,192,193,'GPAAAA','CSAAAA','OOOOxx' -7873,471,1,1,3,13,73,873,1873,2873,7873,146,147,'VQAAAA','DSAAAA','VVVVxx' -1553,472,1,1,3,13,53,553,1553,1553,1553,106,107,'THAAAA','ESAAAA','AAAAxx' -598,473,0,2,8,18,98,598,598,598,598,196,197,'AXAAAA','FSAAAA','HHHHxx' -7191,474,1,3,1,11,91,191,1191,2191,7191,182,183,'PQAAAA','GSAAAA','OOOOxx' -8116,475,0,0,6,16,16,116,116,3116,8116,32,33,'EAAAAA','HSAAAA','VVVVxx' -2516,476,0,0,6,16,16,516,516,2516,2516,32,33,'USAAAA','ISAAAA','AAAAxx' -7750,477,0,2,0,10,50,750,1750,2750,7750,100,101,'CMAAAA','JSAAAA','HHHHxx' -6625,478,1,1,5,5,25,625,625,1625,6625,50,51,'VUAAAA','KSAAAA','OOOOxx' -8838,479,0,2,8,18,38,838,838,3838,8838,76,77,'YBAAAA','LSAAAA','VVVVxx' -4636,480,0,0,6,16,36,636,636,4636,4636,72,73,'IWAAAA','MSAAAA','AAAAxx' -7627,481,1,3,7,7,27,627,1627,2627,7627,54,55,'JHAAAA','NSAAAA','HHHHxx' -1690,482,0,2,0,10,90,690,1690,1690,1690,180,181,'ANAAAA','OSAAAA','OOOOxx' -7071,483,1,3,1,11,71,71,1071,2071,7071,142,143,'ZLAAAA','PSAAAA','VVVVxx' -2081,484,1,1,1,1,81,81,81,2081,2081,162,163,'BCAAAA','QSAAAA','AAAAxx' -7138,485,0,2,8,18,38,138,1138,2138,7138,76,77,'OOAAAA','RSAAAA','HHHHxx' -864,486,0,0,4,4,64,864,864,864,864,128,129,'GHAAAA','SSAAAA','OOOOxx' -6392,487,0,0,2,12,92,392,392,1392,6392,184,185,'WLAAAA','TSAAAA','VVVVxx' -7544,488,0,0,4,4,44,544,1544,2544,7544,88,89,'EEAAAA','USAAAA','AAAAxx' -5438,489,0,2,8,18,38,438,1438,438,5438,76,77,'EBAAAA','VSAAAA','HHHHxx' -7099,490,1,3,9,19,99,99,1099,2099,7099,198,199,'BNAAAA','WSAAAA','OOOOxx' -5157,491,1,1,7,17,57,157,1157,157,5157,114,115,'JQAAAA','XSAAAA','VVVVxx' -3391,492,1,3,1,11,91,391,1391,3391,3391,182,183,'LAAAAA','YSAAAA','AAAAxx' -3805,493,1,1,5,5,5,805,1805,3805,3805,10,11,'JQAAAA','ZSAAAA','HHHHxx' -2110,494,0,2,0,10,10,110,110,2110,2110,20,21,'EDAAAA','ATAAAA','OOOOxx' -3176,495,0,0,6,16,76,176,1176,3176,3176,152,153,'ESAAAA','BTAAAA','VVVVxx' -5918,496,0,2,8,18,18,918,1918,918,5918,36,37,'QTAAAA','CTAAAA','AAAAxx' -1218,497,0,2,8,18,18,218,1218,1218,1218,36,37,'WUAAAA','DTAAAA','HHHHxx' -6683,498,1,3,3,3,83,683,683,1683,6683,166,167,'BXAAAA','ETAAAA','OOOOxx' -914,499,0,2,4,14,14,914,914,914,914,28,29,'EJAAAA','FTAAAA','VVVVxx' -4737,500,1,1,7,17,37,737,737,4737,4737,74,75,'FAAAAA','GTAAAA','AAAAxx' -7286,501,0,2,6,6,86,286,1286,2286,7286,172,173,'GUAAAA','HTAAAA','HHHHxx' -9975,502,1,3,5,15,75,975,1975,4975,9975,150,151,'RTAAAA','ITAAAA','OOOOxx' -8030,503,0,2,0,10,30,30,30,3030,8030,60,61,'WWAAAA','JTAAAA','VVVVxx' -7364,504,0,0,4,4,64,364,1364,2364,7364,128,129,'GXAAAA','KTAAAA','AAAAxx' -1389,505,1,1,9,9,89,389,1389,1389,1389,178,179,'LBAAAA','LTAAAA','HHHHxx' -4025,506,1,1,5,5,25,25,25,4025,4025,50,51,'VYAAAA','MTAAAA','OOOOxx' -4835,507,1,3,5,15,35,835,835,4835,4835,70,71,'ZDAAAA','NTAAAA','VVVVxx' -8045,508,1,1,5,5,45,45,45,3045,8045,90,91,'LXAAAA','OTAAAA','AAAAxx' -1864,509,0,0,4,4,64,864,1864,1864,1864,128,129,'STAAAA','PTAAAA','HHHHxx' -3313,510,1,1,3,13,13,313,1313,3313,3313,26,27,'LXAAAA','QTAAAA','OOOOxx' -2384,511,0,0,4,4,84,384,384,2384,2384,168,169,'SNAAAA','RTAAAA','VVVVxx' -6115,512,1,3,5,15,15,115,115,1115,6115,30,31,'FBAAAA','STAAAA','AAAAxx' -5705,513,1,1,5,5,5,705,1705,705,5705,10,11,'LLAAAA','TTAAAA','HHHHxx' -9269,514,1,1,9,9,69,269,1269,4269,9269,138,139,'NSAAAA','UTAAAA','OOOOxx' -3379,515,1,3,9,19,79,379,1379,3379,3379,158,159,'ZZAAAA','VTAAAA','VVVVxx' -8205,516,1,1,5,5,5,205,205,3205,8205,10,11,'PDAAAA','WTAAAA','AAAAxx' -6575,517,1,3,5,15,75,575,575,1575,6575,150,151,'XSAAAA','XTAAAA','HHHHxx' -486,518,0,2,6,6,86,486,486,486,486,172,173,'SSAAAA','YTAAAA','OOOOxx' -4894,519,0,2,4,14,94,894,894,4894,4894,188,189,'GGAAAA','ZTAAAA','VVVVxx' -3090,520,0,2,0,10,90,90,1090,3090,3090,180,181,'WOAAAA','AUAAAA','AAAAxx' -759,521,1,3,9,19,59,759,759,759,759,118,119,'FDAAAA','BUAAAA','HHHHxx' -4864,522,0,0,4,4,64,864,864,4864,4864,128,129,'CFAAAA','CUAAAA','OOOOxx' -4083,523,1,3,3,3,83,83,83,4083,4083,166,167,'BBAAAA','DUAAAA','VVVVxx' -6918,524,0,2,8,18,18,918,918,1918,6918,36,37,'CGAAAA','EUAAAA','AAAAxx' -8146,525,0,2,6,6,46,146,146,3146,8146,92,93,'IBAAAA','FUAAAA','HHHHxx' -1523,526,1,3,3,3,23,523,1523,1523,1523,46,47,'PGAAAA','GUAAAA','OOOOxx' -1591,527,1,3,1,11,91,591,1591,1591,1591,182,183,'FJAAAA','HUAAAA','VVVVxx' -3343,528,1,3,3,3,43,343,1343,3343,3343,86,87,'PYAAAA','IUAAAA','AAAAxx' -1391,529,1,3,1,11,91,391,1391,1391,1391,182,183,'NBAAAA','JUAAAA','HHHHxx' -9963,530,1,3,3,3,63,963,1963,4963,9963,126,127,'FTAAAA','KUAAAA','OOOOxx' -2423,531,1,3,3,3,23,423,423,2423,2423,46,47,'FPAAAA','LUAAAA','VVVVxx' -1822,532,0,2,2,2,22,822,1822,1822,1822,44,45,'CSAAAA','MUAAAA','AAAAxx' -8706,533,0,2,6,6,6,706,706,3706,8706,12,13,'WWAAAA','NUAAAA','HHHHxx' -3001,534,1,1,1,1,1,1,1001,3001,3001,2,3,'LLAAAA','OUAAAA','OOOOxx' -6707,535,1,3,7,7,7,707,707,1707,6707,14,15,'ZXAAAA','PUAAAA','VVVVxx' -2121,536,1,1,1,1,21,121,121,2121,2121,42,43,'PDAAAA','QUAAAA','AAAAxx' -5814,537,0,2,4,14,14,814,1814,814,5814,28,29,'QPAAAA','RUAAAA','HHHHxx' -2659,538,1,3,9,19,59,659,659,2659,2659,118,119,'HYAAAA','SUAAAA','OOOOxx' -2016,539,0,0,6,16,16,16,16,2016,2016,32,33,'OZAAAA','TUAAAA','VVVVxx' -4286,540,0,2,6,6,86,286,286,4286,4286,172,173,'WIAAAA','UUAAAA','AAAAxx' -9205,541,1,1,5,5,5,205,1205,4205,9205,10,11,'BQAAAA','VUAAAA','HHHHxx' -3496,542,0,0,6,16,96,496,1496,3496,3496,192,193,'MEAAAA','WUAAAA','OOOOxx' -5333,543,1,1,3,13,33,333,1333,333,5333,66,67,'DXAAAA','XUAAAA','VVVVxx' -5571,544,1,3,1,11,71,571,1571,571,5571,142,143,'HGAAAA','YUAAAA','AAAAxx' -1696,545,0,0,6,16,96,696,1696,1696,1696,192,193,'GNAAAA','ZUAAAA','HHHHxx' -4871,546,1,3,1,11,71,871,871,4871,4871,142,143,'JFAAAA','AVAAAA','OOOOxx' -4852,547,0,0,2,12,52,852,852,4852,4852,104,105,'QEAAAA','BVAAAA','VVVVxx' -8483,548,1,3,3,3,83,483,483,3483,8483,166,167,'HOAAAA','CVAAAA','AAAAxx' -1376,549,0,0,6,16,76,376,1376,1376,1376,152,153,'YAAAAA','DVAAAA','HHHHxx' -5456,550,0,0,6,16,56,456,1456,456,5456,112,113,'WBAAAA','EVAAAA','OOOOxx' -499,551,1,3,9,19,99,499,499,499,499,198,199,'FTAAAA','FVAAAA','VVVVxx' -3463,552,1,3,3,3,63,463,1463,3463,3463,126,127,'FDAAAA','GVAAAA','AAAAxx' -7426,553,0,2,6,6,26,426,1426,2426,7426,52,53,'QZAAAA','HVAAAA','HHHHxx' -5341,554,1,1,1,1,41,341,1341,341,5341,82,83,'LXAAAA','IVAAAA','OOOOxx' -9309,555,1,1,9,9,9,309,1309,4309,9309,18,19,'BUAAAA','JVAAAA','VVVVxx' -2055,556,1,3,5,15,55,55,55,2055,2055,110,111,'BBAAAA','KVAAAA','AAAAxx' -2199,557,1,3,9,19,99,199,199,2199,2199,198,199,'PGAAAA','LVAAAA','HHHHxx' -7235,558,1,3,5,15,35,235,1235,2235,7235,70,71,'HSAAAA','MVAAAA','OOOOxx' -8661,559,1,1,1,1,61,661,661,3661,8661,122,123,'DVAAAA','NVAAAA','VVVVxx' -9494,560,0,2,4,14,94,494,1494,4494,9494,188,189,'EBAAAA','OVAAAA','AAAAxx' -935,561,1,3,5,15,35,935,935,935,935,70,71,'ZJAAAA','PVAAAA','HHHHxx' -7044,562,0,0,4,4,44,44,1044,2044,7044,88,89,'YKAAAA','QVAAAA','OOOOxx' -1974,563,0,2,4,14,74,974,1974,1974,1974,148,149,'YXAAAA','RVAAAA','VVVVxx' -9679,564,1,3,9,19,79,679,1679,4679,9679,158,159,'HIAAAA','SVAAAA','AAAAxx' -9822,565,0,2,2,2,22,822,1822,4822,9822,44,45,'UNAAAA','TVAAAA','HHHHxx' -4088,566,0,0,8,8,88,88,88,4088,4088,176,177,'GBAAAA','UVAAAA','OOOOxx' -1749,567,1,1,9,9,49,749,1749,1749,1749,98,99,'HPAAAA','VVAAAA','VVVVxx' -2116,568,0,0,6,16,16,116,116,2116,2116,32,33,'KDAAAA','WVAAAA','AAAAxx' -976,569,0,0,6,16,76,976,976,976,976,152,153,'OLAAAA','XVAAAA','HHHHxx' -8689,570,1,1,9,9,89,689,689,3689,8689,178,179,'FWAAAA','YVAAAA','OOOOxx' -2563,571,1,3,3,3,63,563,563,2563,2563,126,127,'PUAAAA','ZVAAAA','VVVVxx' -7195,572,1,3,5,15,95,195,1195,2195,7195,190,191,'TQAAAA','AWAAAA','AAAAxx' -9985,573,1,1,5,5,85,985,1985,4985,9985,170,171,'BUAAAA','BWAAAA','HHHHxx' -7699,574,1,3,9,19,99,699,1699,2699,7699,198,199,'DKAAAA','CWAAAA','OOOOxx' -5311,575,1,3,1,11,11,311,1311,311,5311,22,23,'HWAAAA','DWAAAA','VVVVxx' -295,576,1,3,5,15,95,295,295,295,295,190,191,'JLAAAA','EWAAAA','AAAAxx' -8214,577,0,2,4,14,14,214,214,3214,8214,28,29,'YDAAAA','FWAAAA','HHHHxx' -3275,578,1,3,5,15,75,275,1275,3275,3275,150,151,'ZVAAAA','GWAAAA','OOOOxx' -9646,579,0,2,6,6,46,646,1646,4646,9646,92,93,'AHAAAA','HWAAAA','VVVVxx' -1908,580,0,0,8,8,8,908,1908,1908,1908,16,17,'KVAAAA','IWAAAA','AAAAxx' -3858,581,0,2,8,18,58,858,1858,3858,3858,116,117,'KSAAAA','JWAAAA','HHHHxx' -9362,582,0,2,2,2,62,362,1362,4362,9362,124,125,'CWAAAA','KWAAAA','OOOOxx' -9307,583,1,3,7,7,7,307,1307,4307,9307,14,15,'ZTAAAA','LWAAAA','VVVVxx' -6124,584,0,0,4,4,24,124,124,1124,6124,48,49,'OBAAAA','MWAAAA','AAAAxx' -2405,585,1,1,5,5,5,405,405,2405,2405,10,11,'NOAAAA','NWAAAA','HHHHxx' -8422,586,0,2,2,2,22,422,422,3422,8422,44,45,'YLAAAA','OWAAAA','OOOOxx' -393,587,1,1,3,13,93,393,393,393,393,186,187,'DPAAAA','PWAAAA','VVVVxx' -8973,588,1,1,3,13,73,973,973,3973,8973,146,147,'DHAAAA','QWAAAA','AAAAxx' -5171,589,1,3,1,11,71,171,1171,171,5171,142,143,'XQAAAA','RWAAAA','HHHHxx' -4929,590,1,1,9,9,29,929,929,4929,4929,58,59,'PHAAAA','SWAAAA','OOOOxx' -6935,591,1,3,5,15,35,935,935,1935,6935,70,71,'TGAAAA','TWAAAA','VVVVxx' -8584,592,0,0,4,4,84,584,584,3584,8584,168,169,'ESAAAA','UWAAAA','AAAAxx' -1035,593,1,3,5,15,35,35,1035,1035,1035,70,71,'VNAAAA','VWAAAA','HHHHxx' -3734,594,0,2,4,14,34,734,1734,3734,3734,68,69,'QNAAAA','WWAAAA','OOOOxx' -1458,595,0,2,8,18,58,458,1458,1458,1458,116,117,'CEAAAA','XWAAAA','VVVVxx' -8746,596,0,2,6,6,46,746,746,3746,8746,92,93,'KYAAAA','YWAAAA','AAAAxx' -1677,597,1,1,7,17,77,677,1677,1677,1677,154,155,'NMAAAA','ZWAAAA','HHHHxx' -8502,598,0,2,2,2,2,502,502,3502,8502,4,5,'APAAAA','AXAAAA','OOOOxx' -7752,599,0,0,2,12,52,752,1752,2752,7752,104,105,'EMAAAA','BXAAAA','VVVVxx' -2556,600,0,0,6,16,56,556,556,2556,2556,112,113,'IUAAAA','CXAAAA','AAAAxx' -6426,601,0,2,6,6,26,426,426,1426,6426,52,53,'ENAAAA','DXAAAA','HHHHxx' -8420,602,0,0,0,0,20,420,420,3420,8420,40,41,'WLAAAA','EXAAAA','OOOOxx' -4462,603,0,2,2,2,62,462,462,4462,4462,124,125,'QPAAAA','FXAAAA','VVVVxx' -1378,604,0,2,8,18,78,378,1378,1378,1378,156,157,'ABAAAA','GXAAAA','AAAAxx' -1387,605,1,3,7,7,87,387,1387,1387,1387,174,175,'JBAAAA','HXAAAA','HHHHxx' -8094,606,0,2,4,14,94,94,94,3094,8094,188,189,'IZAAAA','IXAAAA','OOOOxx' -7247,607,1,3,7,7,47,247,1247,2247,7247,94,95,'TSAAAA','JXAAAA','VVVVxx' -4261,608,1,1,1,1,61,261,261,4261,4261,122,123,'XHAAAA','KXAAAA','AAAAxx' -5029,609,1,1,9,9,29,29,1029,29,5029,58,59,'LLAAAA','LXAAAA','HHHHxx' -3625,610,1,1,5,5,25,625,1625,3625,3625,50,51,'LJAAAA','MXAAAA','OOOOxx' -8068,611,0,0,8,8,68,68,68,3068,8068,136,137,'IYAAAA','NXAAAA','VVVVxx' -102,612,0,2,2,2,2,102,102,102,102,4,5,'YDAAAA','OXAAAA','AAAAxx' -5596,613,0,0,6,16,96,596,1596,596,5596,192,193,'GHAAAA','PXAAAA','HHHHxx' -5872,614,0,0,2,12,72,872,1872,872,5872,144,145,'WRAAAA','QXAAAA','OOOOxx' -4742,615,0,2,2,2,42,742,742,4742,4742,84,85,'KAAAAA','RXAAAA','VVVVxx' -2117,616,1,1,7,17,17,117,117,2117,2117,34,35,'LDAAAA','SXAAAA','AAAAxx' -3945,617,1,1,5,5,45,945,1945,3945,3945,90,91,'TVAAAA','TXAAAA','HHHHxx' -7483,618,1,3,3,3,83,483,1483,2483,7483,166,167,'VBAAAA','UXAAAA','OOOOxx' -4455,619,1,3,5,15,55,455,455,4455,4455,110,111,'JPAAAA','VXAAAA','VVVVxx' -609,620,1,1,9,9,9,609,609,609,609,18,19,'LXAAAA','WXAAAA','AAAAxx' -9829,621,1,1,9,9,29,829,1829,4829,9829,58,59,'BOAAAA','XXAAAA','HHHHxx' -4857,622,1,1,7,17,57,857,857,4857,4857,114,115,'VEAAAA','YXAAAA','OOOOxx' -3314,623,0,2,4,14,14,314,1314,3314,3314,28,29,'MXAAAA','ZXAAAA','VVVVxx' -5353,624,1,1,3,13,53,353,1353,353,5353,106,107,'XXAAAA','AYAAAA','AAAAxx' -4909,625,1,1,9,9,9,909,909,4909,4909,18,19,'VGAAAA','BYAAAA','HHHHxx' -7597,626,1,1,7,17,97,597,1597,2597,7597,194,195,'FGAAAA','CYAAAA','OOOOxx' -2683,627,1,3,3,3,83,683,683,2683,2683,166,167,'FZAAAA','DYAAAA','VVVVxx' -3223,628,1,3,3,3,23,223,1223,3223,3223,46,47,'ZTAAAA','EYAAAA','AAAAxx' -5363,629,1,3,3,3,63,363,1363,363,5363,126,127,'HYAAAA','FYAAAA','HHHHxx' -4578,630,0,2,8,18,78,578,578,4578,4578,156,157,'CUAAAA','GYAAAA','OOOOxx' -5544,631,0,0,4,4,44,544,1544,544,5544,88,89,'GFAAAA','HYAAAA','VVVVxx' -1589,632,1,1,9,9,89,589,1589,1589,1589,178,179,'DJAAAA','IYAAAA','AAAAxx' -7412,633,0,0,2,12,12,412,1412,2412,7412,24,25,'CZAAAA','JYAAAA','HHHHxx' -3803,634,1,3,3,3,3,803,1803,3803,3803,6,7,'HQAAAA','KYAAAA','OOOOxx' -6179,635,1,3,9,19,79,179,179,1179,6179,158,159,'RDAAAA','LYAAAA','VVVVxx' -5588,636,0,0,8,8,88,588,1588,588,5588,176,177,'YGAAAA','MYAAAA','AAAAxx' -2134,637,0,2,4,14,34,134,134,2134,2134,68,69,'CEAAAA','NYAAAA','HHHHxx' -4383,638,1,3,3,3,83,383,383,4383,4383,166,167,'PMAAAA','OYAAAA','OOOOxx' -6995,639,1,3,5,15,95,995,995,1995,6995,190,191,'BJAAAA','PYAAAA','VVVVxx' -6598,640,0,2,8,18,98,598,598,1598,6598,196,197,'UTAAAA','QYAAAA','AAAAxx' -8731,641,1,3,1,11,31,731,731,3731,8731,62,63,'VXAAAA','RYAAAA','HHHHxx' -7177,642,1,1,7,17,77,177,1177,2177,7177,154,155,'BQAAAA','SYAAAA','OOOOxx' -6578,643,0,2,8,18,78,578,578,1578,6578,156,157,'ATAAAA','TYAAAA','VVVVxx' -9393,644,1,1,3,13,93,393,1393,4393,9393,186,187,'HXAAAA','UYAAAA','AAAAxx' -1276,645,0,0,6,16,76,276,1276,1276,1276,152,153,'CXAAAA','VYAAAA','HHHHxx' -8766,646,0,2,6,6,66,766,766,3766,8766,132,133,'EZAAAA','WYAAAA','OOOOxx' -1015,647,1,3,5,15,15,15,1015,1015,1015,30,31,'BNAAAA','XYAAAA','VVVVxx' -4396,648,0,0,6,16,96,396,396,4396,4396,192,193,'CNAAAA','YYAAAA','AAAAxx' -5564,649,0,0,4,4,64,564,1564,564,5564,128,129,'AGAAAA','ZYAAAA','HHHHxx' -927,650,1,3,7,7,27,927,927,927,927,54,55,'RJAAAA','AZAAAA','OOOOxx' -3306,651,0,2,6,6,6,306,1306,3306,3306,12,13,'EXAAAA','BZAAAA','VVVVxx' -1615,652,1,3,5,15,15,615,1615,1615,1615,30,31,'DKAAAA','CZAAAA','AAAAxx' -4550,653,0,2,0,10,50,550,550,4550,4550,100,101,'ATAAAA','DZAAAA','HHHHxx' -2468,654,0,0,8,8,68,468,468,2468,2468,136,137,'YQAAAA','EZAAAA','OOOOxx' -5336,655,0,0,6,16,36,336,1336,336,5336,72,73,'GXAAAA','FZAAAA','VVVVxx' -4471,656,1,3,1,11,71,471,471,4471,4471,142,143,'ZPAAAA','GZAAAA','AAAAxx' -8085,657,1,1,5,5,85,85,85,3085,8085,170,171,'ZYAAAA','HZAAAA','HHHHxx' -540,658,0,0,0,0,40,540,540,540,540,80,81,'UUAAAA','IZAAAA','OOOOxx' -5108,659,0,0,8,8,8,108,1108,108,5108,16,17,'MOAAAA','JZAAAA','VVVVxx' -8015,660,1,3,5,15,15,15,15,3015,8015,30,31,'HWAAAA','KZAAAA','AAAAxx' -2857,661,1,1,7,17,57,857,857,2857,2857,114,115,'XFAAAA','LZAAAA','HHHHxx' -9472,662,0,0,2,12,72,472,1472,4472,9472,144,145,'IAAAAA','MZAAAA','OOOOxx' -5666,663,0,2,6,6,66,666,1666,666,5666,132,133,'YJAAAA','NZAAAA','VVVVxx' -3555,664,1,3,5,15,55,555,1555,3555,3555,110,111,'TGAAAA','OZAAAA','AAAAxx' -378,665,0,2,8,18,78,378,378,378,378,156,157,'OOAAAA','PZAAAA','HHHHxx' -4466,666,0,2,6,6,66,466,466,4466,4466,132,133,'UPAAAA','QZAAAA','OOOOxx' -3247,667,1,3,7,7,47,247,1247,3247,3247,94,95,'XUAAAA','RZAAAA','VVVVxx' -6570,668,0,2,0,10,70,570,570,1570,6570,140,141,'SSAAAA','SZAAAA','AAAAxx' -5655,669,1,3,5,15,55,655,1655,655,5655,110,111,'NJAAAA','TZAAAA','HHHHxx' -917,670,1,1,7,17,17,917,917,917,917,34,35,'HJAAAA','UZAAAA','OOOOxx' -3637,671,1,1,7,17,37,637,1637,3637,3637,74,75,'XJAAAA','VZAAAA','VVVVxx' -3668,672,0,0,8,8,68,668,1668,3668,3668,136,137,'CLAAAA','WZAAAA','AAAAxx' -5644,673,0,0,4,4,44,644,1644,644,5644,88,89,'CJAAAA','XZAAAA','HHHHxx' -8286,674,0,2,6,6,86,286,286,3286,8286,172,173,'SGAAAA','YZAAAA','OOOOxx' -6896,675,0,0,6,16,96,896,896,1896,6896,192,193,'GFAAAA','ZZAAAA','VVVVxx' -2870,676,0,2,0,10,70,870,870,2870,2870,140,141,'KGAAAA','AABAAA','AAAAxx' -8041,677,1,1,1,1,41,41,41,3041,8041,82,83,'HXAAAA','BABAAA','HHHHxx' -8137,678,1,1,7,17,37,137,137,3137,8137,74,75,'ZAAAAA','CABAAA','OOOOxx' -4823,679,1,3,3,3,23,823,823,4823,4823,46,47,'NDAAAA','DABAAA','VVVVxx' -2438,680,0,2,8,18,38,438,438,2438,2438,76,77,'UPAAAA','EABAAA','AAAAxx' -6329,681,1,1,9,9,29,329,329,1329,6329,58,59,'LJAAAA','FABAAA','HHHHxx' -623,682,1,3,3,3,23,623,623,623,623,46,47,'ZXAAAA','GABAAA','OOOOxx' -1360,683,0,0,0,0,60,360,1360,1360,1360,120,121,'IAAAAA','HABAAA','VVVVxx' -7987,684,1,3,7,7,87,987,1987,2987,7987,174,175,'FVAAAA','IABAAA','AAAAxx' -9788,685,0,0,8,8,88,788,1788,4788,9788,176,177,'MMAAAA','JABAAA','HHHHxx' -3212,686,0,0,2,12,12,212,1212,3212,3212,24,25,'OTAAAA','KABAAA','OOOOxx' -2725,687,1,1,5,5,25,725,725,2725,2725,50,51,'VAAAAA','LABAAA','VVVVxx' -7837,688,1,1,7,17,37,837,1837,2837,7837,74,75,'LPAAAA','MABAAA','AAAAxx' -4746,689,0,2,6,6,46,746,746,4746,4746,92,93,'OAAAAA','NABAAA','HHHHxx' -3986,690,0,2,6,6,86,986,1986,3986,3986,172,173,'IXAAAA','OABAAA','OOOOxx' -9128,691,0,0,8,8,28,128,1128,4128,9128,56,57,'CNAAAA','PABAAA','VVVVxx' -5044,692,0,0,4,4,44,44,1044,44,5044,88,89,'AMAAAA','QABAAA','AAAAxx' -8132,693,0,0,2,12,32,132,132,3132,8132,64,65,'UAAAAA','RABAAA','HHHHxx' -9992,694,0,0,2,12,92,992,1992,4992,9992,184,185,'IUAAAA','SABAAA','OOOOxx' -8468,695,0,0,8,8,68,468,468,3468,8468,136,137,'SNAAAA','TABAAA','VVVVxx' -6876,696,0,0,6,16,76,876,876,1876,6876,152,153,'MEAAAA','UABAAA','AAAAxx' -3532,697,0,0,2,12,32,532,1532,3532,3532,64,65,'WFAAAA','VABAAA','HHHHxx' -2140,698,0,0,0,0,40,140,140,2140,2140,80,81,'IEAAAA','WABAAA','OOOOxx' -2183,699,1,3,3,3,83,183,183,2183,2183,166,167,'ZFAAAA','XABAAA','VVVVxx' -9766,700,0,2,6,6,66,766,1766,4766,9766,132,133,'QLAAAA','YABAAA','AAAAxx' -7943,701,1,3,3,3,43,943,1943,2943,7943,86,87,'NTAAAA','ZABAAA','HHHHxx' -9243,702,1,3,3,3,43,243,1243,4243,9243,86,87,'NRAAAA','ABBAAA','OOOOxx' -6241,703,1,1,1,1,41,241,241,1241,6241,82,83,'BGAAAA','BBBAAA','VVVVxx' -9540,704,0,0,0,0,40,540,1540,4540,9540,80,81,'YCAAAA','CBBAAA','AAAAxx' -7418,705,0,2,8,18,18,418,1418,2418,7418,36,37,'IZAAAA','DBBAAA','HHHHxx' -1603,706,1,3,3,3,3,603,1603,1603,1603,6,7,'RJAAAA','EBBAAA','OOOOxx' -8950,707,0,2,0,10,50,950,950,3950,8950,100,101,'GGAAAA','FBBAAA','VVVVxx' -6933,708,1,1,3,13,33,933,933,1933,6933,66,67,'RGAAAA','GBBAAA','AAAAxx' -2646,709,0,2,6,6,46,646,646,2646,2646,92,93,'UXAAAA','HBBAAA','HHHHxx' -3447,710,1,3,7,7,47,447,1447,3447,3447,94,95,'PCAAAA','IBBAAA','OOOOxx' -9957,711,1,1,7,17,57,957,1957,4957,9957,114,115,'ZSAAAA','JBBAAA','VVVVxx' -4623,712,1,3,3,3,23,623,623,4623,4623,46,47,'VVAAAA','KBBAAA','AAAAxx' -9058,713,0,2,8,18,58,58,1058,4058,9058,116,117,'KKAAAA','LBBAAA','HHHHxx' -7361,714,1,1,1,1,61,361,1361,2361,7361,122,123,'DXAAAA','MBBAAA','OOOOxx' -2489,715,1,1,9,9,89,489,489,2489,2489,178,179,'TRAAAA','NBBAAA','VVVVxx' -7643,716,1,3,3,3,43,643,1643,2643,7643,86,87,'ZHAAAA','OBBAAA','AAAAxx' -9166,717,0,2,6,6,66,166,1166,4166,9166,132,133,'OOAAAA','PBBAAA','HHHHxx' -7789,718,1,1,9,9,89,789,1789,2789,7789,178,179,'PNAAAA','QBBAAA','OOOOxx' -2332,719,0,0,2,12,32,332,332,2332,2332,64,65,'SLAAAA','RBBAAA','VVVVxx' -1832,720,0,0,2,12,32,832,1832,1832,1832,64,65,'MSAAAA','SBBAAA','AAAAxx' -8375,721,1,3,5,15,75,375,375,3375,8375,150,151,'DKAAAA','TBBAAA','HHHHxx' -948,722,0,0,8,8,48,948,948,948,948,96,97,'MKAAAA','UBBAAA','OOOOxx' -5613,723,1,1,3,13,13,613,1613,613,5613,26,27,'XHAAAA','VBBAAA','VVVVxx' -6310,724,0,2,0,10,10,310,310,1310,6310,20,21,'SIAAAA','WBBAAA','AAAAxx' -4254,725,0,2,4,14,54,254,254,4254,4254,108,109,'QHAAAA','XBBAAA','HHHHxx' -4260,726,0,0,0,0,60,260,260,4260,4260,120,121,'WHAAAA','YBBAAA','OOOOxx' -2060,727,0,0,0,0,60,60,60,2060,2060,120,121,'GBAAAA','ZBBAAA','VVVVxx' -4831,728,1,3,1,11,31,831,831,4831,4831,62,63,'VDAAAA','ACBAAA','AAAAxx' -6176,729,0,0,6,16,76,176,176,1176,6176,152,153,'ODAAAA','BCBAAA','HHHHxx' -6688,730,0,0,8,8,88,688,688,1688,6688,176,177,'GXAAAA','CCBAAA','OOOOxx' -5752,731,0,0,2,12,52,752,1752,752,5752,104,105,'GNAAAA','DCBAAA','VVVVxx' -8714,732,0,2,4,14,14,714,714,3714,8714,28,29,'EXAAAA','ECBAAA','AAAAxx' -6739,733,1,3,9,19,39,739,739,1739,6739,78,79,'FZAAAA','FCBAAA','HHHHxx' -7066,734,0,2,6,6,66,66,1066,2066,7066,132,133,'ULAAAA','GCBAAA','OOOOxx' -7250,735,0,2,0,10,50,250,1250,2250,7250,100,101,'WSAAAA','HCBAAA','VVVVxx' -3161,736,1,1,1,1,61,161,1161,3161,3161,122,123,'PRAAAA','ICBAAA','AAAAxx' -1411,737,1,3,1,11,11,411,1411,1411,1411,22,23,'HCAAAA','JCBAAA','HHHHxx' -9301,738,1,1,1,1,1,301,1301,4301,9301,2,3,'TTAAAA','KCBAAA','OOOOxx' -8324,739,0,0,4,4,24,324,324,3324,8324,48,49,'EIAAAA','LCBAAA','VVVVxx' -9641,740,1,1,1,1,41,641,1641,4641,9641,82,83,'VGAAAA','MCBAAA','AAAAxx' -7077,741,1,1,7,17,77,77,1077,2077,7077,154,155,'FMAAAA','NCBAAA','HHHHxx' -9888,742,0,0,8,8,88,888,1888,4888,9888,176,177,'IQAAAA','OCBAAA','OOOOxx' -9909,743,1,1,9,9,9,909,1909,4909,9909,18,19,'DRAAAA','PCBAAA','VVVVxx' -2209,744,1,1,9,9,9,209,209,2209,2209,18,19,'ZGAAAA','QCBAAA','AAAAxx' -6904,745,0,0,4,4,4,904,904,1904,6904,8,9,'OFAAAA','RCBAAA','HHHHxx' -6608,746,0,0,8,8,8,608,608,1608,6608,16,17,'EUAAAA','SCBAAA','OOOOxx' -8400,747,0,0,0,0,0,400,400,3400,8400,0,1,'CLAAAA','TCBAAA','VVVVxx' -5124,748,0,0,4,4,24,124,1124,124,5124,48,49,'CPAAAA','UCBAAA','AAAAxx' -5484,749,0,0,4,4,84,484,1484,484,5484,168,169,'YCAAAA','VCBAAA','HHHHxx' -3575,750,1,3,5,15,75,575,1575,3575,3575,150,151,'NHAAAA','WCBAAA','OOOOxx' -9723,751,1,3,3,3,23,723,1723,4723,9723,46,47,'ZJAAAA','XCBAAA','VVVVxx' -360,752,0,0,0,0,60,360,360,360,360,120,121,'WNAAAA','YCBAAA','AAAAxx' -1059,753,1,3,9,19,59,59,1059,1059,1059,118,119,'TOAAAA','ZCBAAA','HHHHxx' -4941,754,1,1,1,1,41,941,941,4941,4941,82,83,'BIAAAA','ADBAAA','OOOOxx' -2535,755,1,3,5,15,35,535,535,2535,2535,70,71,'NTAAAA','BDBAAA','VVVVxx' -4119,756,1,3,9,19,19,119,119,4119,4119,38,39,'LCAAAA','CDBAAA','AAAAxx' -3725,757,1,1,5,5,25,725,1725,3725,3725,50,51,'HNAAAA','DDBAAA','HHHHxx' -4758,758,0,2,8,18,58,758,758,4758,4758,116,117,'ABAAAA','EDBAAA','OOOOxx' -9593,759,1,1,3,13,93,593,1593,4593,9593,186,187,'ZEAAAA','FDBAAA','VVVVxx' -4663,760,1,3,3,3,63,663,663,4663,4663,126,127,'JXAAAA','GDBAAA','AAAAxx' -7734,761,0,2,4,14,34,734,1734,2734,7734,68,69,'MLAAAA','HDBAAA','HHHHxx' -9156,762,0,0,6,16,56,156,1156,4156,9156,112,113,'EOAAAA','IDBAAA','OOOOxx' -8120,763,0,0,0,0,20,120,120,3120,8120,40,41,'IAAAAA','JDBAAA','VVVVxx' -4385,764,1,1,5,5,85,385,385,4385,4385,170,171,'RMAAAA','KDBAAA','AAAAxx' -2926,765,0,2,6,6,26,926,926,2926,2926,52,53,'OIAAAA','LDBAAA','HHHHxx' -4186,766,0,2,6,6,86,186,186,4186,4186,172,173,'AFAAAA','MDBAAA','OOOOxx' -2508,767,0,0,8,8,8,508,508,2508,2508,16,17,'MSAAAA','NDBAAA','VVVVxx' -4012,768,0,0,2,12,12,12,12,4012,4012,24,25,'IYAAAA','ODBAAA','AAAAxx' -6266,769,0,2,6,6,66,266,266,1266,6266,132,133,'AHAAAA','PDBAAA','HHHHxx' -3709,770,1,1,9,9,9,709,1709,3709,3709,18,19,'RMAAAA','QDBAAA','OOOOxx' -7289,771,1,1,9,9,89,289,1289,2289,7289,178,179,'JUAAAA','RDBAAA','VVVVxx' -8875,772,1,3,5,15,75,875,875,3875,8875,150,151,'JDAAAA','SDBAAA','AAAAxx' -4412,773,0,0,2,12,12,412,412,4412,4412,24,25,'SNAAAA','TDBAAA','HHHHxx' -3033,774,1,1,3,13,33,33,1033,3033,3033,66,67,'RMAAAA','UDBAAA','OOOOxx' -1645,775,1,1,5,5,45,645,1645,1645,1645,90,91,'HLAAAA','VDBAAA','VVVVxx' -3557,776,1,1,7,17,57,557,1557,3557,3557,114,115,'VGAAAA','WDBAAA','AAAAxx' -6316,777,0,0,6,16,16,316,316,1316,6316,32,33,'YIAAAA','XDBAAA','HHHHxx' -2054,778,0,2,4,14,54,54,54,2054,2054,108,109,'ABAAAA','YDBAAA','OOOOxx' -7031,779,1,3,1,11,31,31,1031,2031,7031,62,63,'LKAAAA','ZDBAAA','VVVVxx' -3405,780,1,1,5,5,5,405,1405,3405,3405,10,11,'ZAAAAA','AEBAAA','AAAAxx' -5343,781,1,3,3,3,43,343,1343,343,5343,86,87,'NXAAAA','BEBAAA','HHHHxx' -5240,782,0,0,0,0,40,240,1240,240,5240,80,81,'OTAAAA','CEBAAA','OOOOxx' -9650,783,0,2,0,10,50,650,1650,4650,9650,100,101,'EHAAAA','DEBAAA','VVVVxx' -3777,784,1,1,7,17,77,777,1777,3777,3777,154,155,'HPAAAA','EEBAAA','AAAAxx' -9041,785,1,1,1,1,41,41,1041,4041,9041,82,83,'TJAAAA','FEBAAA','HHHHxx' -6923,786,1,3,3,3,23,923,923,1923,6923,46,47,'HGAAAA','GEBAAA','OOOOxx' -2977,787,1,1,7,17,77,977,977,2977,2977,154,155,'NKAAAA','HEBAAA','VVVVxx' -5500,788,0,0,0,0,0,500,1500,500,5500,0,1,'ODAAAA','IEBAAA','AAAAxx' -1044,789,0,0,4,4,44,44,1044,1044,1044,88,89,'EOAAAA','JEBAAA','HHHHxx' -434,790,0,2,4,14,34,434,434,434,434,68,69,'SQAAAA','KEBAAA','OOOOxx' -611,791,1,3,1,11,11,611,611,611,611,22,23,'NXAAAA','LEBAAA','VVVVxx' -5760,792,0,0,0,0,60,760,1760,760,5760,120,121,'ONAAAA','MEBAAA','AAAAxx' -2445,793,1,1,5,5,45,445,445,2445,2445,90,91,'BQAAAA','NEBAAA','HHHHxx' -7098,794,0,2,8,18,98,98,1098,2098,7098,196,197,'ANAAAA','OEBAAA','OOOOxx' -2188,795,0,0,8,8,88,188,188,2188,2188,176,177,'EGAAAA','PEBAAA','VVVVxx' -4597,796,1,1,7,17,97,597,597,4597,4597,194,195,'VUAAAA','QEBAAA','AAAAxx' -1913,797,1,1,3,13,13,913,1913,1913,1913,26,27,'PVAAAA','REBAAA','HHHHxx' -8696,798,0,0,6,16,96,696,696,3696,8696,192,193,'MWAAAA','SEBAAA','OOOOxx' -3332,799,0,0,2,12,32,332,1332,3332,3332,64,65,'EYAAAA','TEBAAA','VVVVxx' -8760,800,0,0,0,0,60,760,760,3760,8760,120,121,'YYAAAA','UEBAAA','AAAAxx' -3215,801,1,3,5,15,15,215,1215,3215,3215,30,31,'RTAAAA','VEBAAA','HHHHxx' -1625,802,1,1,5,5,25,625,1625,1625,1625,50,51,'NKAAAA','WEBAAA','OOOOxx' -4219,803,1,3,9,19,19,219,219,4219,4219,38,39,'HGAAAA','XEBAAA','VVVVxx' -415,804,1,3,5,15,15,415,415,415,415,30,31,'ZPAAAA','YEBAAA','AAAAxx' -4242,805,0,2,2,2,42,242,242,4242,4242,84,85,'EHAAAA','ZEBAAA','HHHHxx' -8660,806,0,0,0,0,60,660,660,3660,8660,120,121,'CVAAAA','AFBAAA','OOOOxx' -6525,807,1,1,5,5,25,525,525,1525,6525,50,51,'ZQAAAA','BFBAAA','VVVVxx' -2141,808,1,1,1,1,41,141,141,2141,2141,82,83,'JEAAAA','CFBAAA','AAAAxx' -5152,809,0,0,2,12,52,152,1152,152,5152,104,105,'EQAAAA','DFBAAA','HHHHxx' -8560,810,0,0,0,0,60,560,560,3560,8560,120,121,'GRAAAA','EFBAAA','OOOOxx' -9835,811,1,3,5,15,35,835,1835,4835,9835,70,71,'HOAAAA','FFBAAA','VVVVxx' -2657,812,1,1,7,17,57,657,657,2657,2657,114,115,'FYAAAA','GFBAAA','AAAAxx' -6085,813,1,1,5,5,85,85,85,1085,6085,170,171,'BAAAAA','HFBAAA','HHHHxx' -6698,814,0,2,8,18,98,698,698,1698,6698,196,197,'QXAAAA','IFBAAA','OOOOxx' -5421,815,1,1,1,1,21,421,1421,421,5421,42,43,'NAAAAA','JFBAAA','VVVVxx' -6661,816,1,1,1,1,61,661,661,1661,6661,122,123,'FWAAAA','KFBAAA','AAAAxx' -5645,817,1,1,5,5,45,645,1645,645,5645,90,91,'DJAAAA','LFBAAA','HHHHxx' -1248,818,0,0,8,8,48,248,1248,1248,1248,96,97,'AWAAAA','MFBAAA','OOOOxx' -5690,819,0,2,0,10,90,690,1690,690,5690,180,181,'WKAAAA','NFBAAA','VVVVxx' -4762,820,0,2,2,2,62,762,762,4762,4762,124,125,'EBAAAA','OFBAAA','AAAAxx' -1455,821,1,3,5,15,55,455,1455,1455,1455,110,111,'ZDAAAA','PFBAAA','HHHHxx' -9846,822,0,2,6,6,46,846,1846,4846,9846,92,93,'SOAAAA','QFBAAA','OOOOxx' -5295,823,1,3,5,15,95,295,1295,295,5295,190,191,'RVAAAA','RFBAAA','VVVVxx' -2826,824,0,2,6,6,26,826,826,2826,2826,52,53,'SEAAAA','SFBAAA','AAAAxx' -7496,825,0,0,6,16,96,496,1496,2496,7496,192,193,'ICAAAA','TFBAAA','HHHHxx' -3024,826,0,0,4,4,24,24,1024,3024,3024,48,49,'IMAAAA','UFBAAA','OOOOxx' -4945,827,1,1,5,5,45,945,945,4945,4945,90,91,'FIAAAA','VFBAAA','VVVVxx' -4404,828,0,0,4,4,4,404,404,4404,4404,8,9,'KNAAAA','WFBAAA','AAAAxx' -9302,829,0,2,2,2,2,302,1302,4302,9302,4,5,'UTAAAA','XFBAAA','HHHHxx' -1286,830,0,2,6,6,86,286,1286,1286,1286,172,173,'MXAAAA','YFBAAA','OOOOxx' -8435,831,1,3,5,15,35,435,435,3435,8435,70,71,'LMAAAA','ZFBAAA','VVVVxx' -8969,832,1,1,9,9,69,969,969,3969,8969,138,139,'ZGAAAA','AGBAAA','AAAAxx' -3302,833,0,2,2,2,2,302,1302,3302,3302,4,5,'AXAAAA','BGBAAA','HHHHxx' -9753,834,1,1,3,13,53,753,1753,4753,9753,106,107,'DLAAAA','CGBAAA','OOOOxx' -9374,835,0,2,4,14,74,374,1374,4374,9374,148,149,'OWAAAA','DGBAAA','VVVVxx' -4907,836,1,3,7,7,7,907,907,4907,4907,14,15,'TGAAAA','EGBAAA','AAAAxx' -1659,837,1,3,9,19,59,659,1659,1659,1659,118,119,'VLAAAA','FGBAAA','HHHHxx' -5095,838,1,3,5,15,95,95,1095,95,5095,190,191,'ZNAAAA','GGBAAA','OOOOxx' -9446,839,0,2,6,6,46,446,1446,4446,9446,92,93,'IZAAAA','HGBAAA','VVVVxx' -8528,840,0,0,8,8,28,528,528,3528,8528,56,57,'AQAAAA','IGBAAA','AAAAxx' -4890,841,0,2,0,10,90,890,890,4890,4890,180,181,'CGAAAA','JGBAAA','HHHHxx' -1221,842,1,1,1,1,21,221,1221,1221,1221,42,43,'ZUAAAA','KGBAAA','OOOOxx' -5583,843,1,3,3,3,83,583,1583,583,5583,166,167,'TGAAAA','LGBAAA','VVVVxx' -7303,844,1,3,3,3,3,303,1303,2303,7303,6,7,'XUAAAA','MGBAAA','AAAAxx' -406,845,0,2,6,6,6,406,406,406,406,12,13,'QPAAAA','NGBAAA','HHHHxx' -7542,846,0,2,2,2,42,542,1542,2542,7542,84,85,'CEAAAA','OGBAAA','OOOOxx' -9507,847,1,3,7,7,7,507,1507,4507,9507,14,15,'RBAAAA','PGBAAA','VVVVxx' -9511,848,1,3,1,11,11,511,1511,4511,9511,22,23,'VBAAAA','QGBAAA','AAAAxx' -1373,849,1,1,3,13,73,373,1373,1373,1373,146,147,'VAAAAA','RGBAAA','HHHHxx' -6556,850,0,0,6,16,56,556,556,1556,6556,112,113,'ESAAAA','SGBAAA','OOOOxx' -4117,851,1,1,7,17,17,117,117,4117,4117,34,35,'JCAAAA','TGBAAA','VVVVxx' -7794,852,0,2,4,14,94,794,1794,2794,7794,188,189,'UNAAAA','UGBAAA','AAAAxx' -7170,853,0,2,0,10,70,170,1170,2170,7170,140,141,'UPAAAA','VGBAAA','HHHHxx' -5809,854,1,1,9,9,9,809,1809,809,5809,18,19,'LPAAAA','WGBAAA','OOOOxx' -7828,855,0,0,8,8,28,828,1828,2828,7828,56,57,'CPAAAA','XGBAAA','VVVVxx' -8046,856,0,2,6,6,46,46,46,3046,8046,92,93,'MXAAAA','YGBAAA','AAAAxx' -4833,857,1,1,3,13,33,833,833,4833,4833,66,67,'XDAAAA','ZGBAAA','HHHHxx' -2107,858,1,3,7,7,7,107,107,2107,2107,14,15,'BDAAAA','AHBAAA','OOOOxx' -4276,859,0,0,6,16,76,276,276,4276,4276,152,153,'MIAAAA','BHBAAA','VVVVxx' -9536,860,0,0,6,16,36,536,1536,4536,9536,72,73,'UCAAAA','CHBAAA','AAAAxx' -5549,861,1,1,9,9,49,549,1549,549,5549,98,99,'LFAAAA','DHBAAA','HHHHxx' -6427,862,1,3,7,7,27,427,427,1427,6427,54,55,'FNAAAA','EHBAAA','OOOOxx' -1382,863,0,2,2,2,82,382,1382,1382,1382,164,165,'EBAAAA','FHBAAA','VVVVxx' -3256,864,0,0,6,16,56,256,1256,3256,3256,112,113,'GVAAAA','GHBAAA','AAAAxx' -3270,865,0,2,0,10,70,270,1270,3270,3270,140,141,'UVAAAA','HHBAAA','HHHHxx' -4808,866,0,0,8,8,8,808,808,4808,4808,16,17,'YCAAAA','IHBAAA','OOOOxx' -7938,867,0,2,8,18,38,938,1938,2938,7938,76,77,'ITAAAA','JHBAAA','VVVVxx' -4405,868,1,1,5,5,5,405,405,4405,4405,10,11,'LNAAAA','KHBAAA','AAAAxx' -2264,869,0,0,4,4,64,264,264,2264,2264,128,129,'CJAAAA','LHBAAA','HHHHxx' -80,870,0,0,0,0,80,80,80,80,80,160,161,'CDAAAA','MHBAAA','OOOOxx' -320,871,0,0,0,0,20,320,320,320,320,40,41,'IMAAAA','NHBAAA','VVVVxx' -2383,872,1,3,3,3,83,383,383,2383,2383,166,167,'RNAAAA','OHBAAA','AAAAxx' -3146,873,0,2,6,6,46,146,1146,3146,3146,92,93,'ARAAAA','PHBAAA','HHHHxx' -6911,874,1,3,1,11,11,911,911,1911,6911,22,23,'VFAAAA','QHBAAA','OOOOxx' -7377,875,1,1,7,17,77,377,1377,2377,7377,154,155,'TXAAAA','RHBAAA','VVVVxx' -9965,876,1,1,5,5,65,965,1965,4965,9965,130,131,'HTAAAA','SHBAAA','AAAAxx' -8361,877,1,1,1,1,61,361,361,3361,8361,122,123,'PJAAAA','THBAAA','HHHHxx' -9417,878,1,1,7,17,17,417,1417,4417,9417,34,35,'FYAAAA','UHBAAA','OOOOxx' -2483,879,1,3,3,3,83,483,483,2483,2483,166,167,'NRAAAA','VHBAAA','VVVVxx' -9843,880,1,3,3,3,43,843,1843,4843,9843,86,87,'POAAAA','WHBAAA','AAAAxx' -6395,881,1,3,5,15,95,395,395,1395,6395,190,191,'ZLAAAA','XHBAAA','HHHHxx' -6444,882,0,0,4,4,44,444,444,1444,6444,88,89,'WNAAAA','YHBAAA','OOOOxx' -1820,883,0,0,0,0,20,820,1820,1820,1820,40,41,'ASAAAA','ZHBAAA','VVVVxx' -2768,884,0,0,8,8,68,768,768,2768,2768,136,137,'MCAAAA','AIBAAA','AAAAxx' -5413,885,1,1,3,13,13,413,1413,413,5413,26,27,'FAAAAA','BIBAAA','HHHHxx' -2923,886,1,3,3,3,23,923,923,2923,2923,46,47,'LIAAAA','CIBAAA','OOOOxx' -5286,887,0,2,6,6,86,286,1286,286,5286,172,173,'IVAAAA','DIBAAA','VVVVxx' -6126,888,0,2,6,6,26,126,126,1126,6126,52,53,'QBAAAA','EIBAAA','AAAAxx' -8343,889,1,3,3,3,43,343,343,3343,8343,86,87,'XIAAAA','FIBAAA','HHHHxx' -6010,890,0,2,0,10,10,10,10,1010,6010,20,21,'EXAAAA','GIBAAA','OOOOxx' -4177,891,1,1,7,17,77,177,177,4177,4177,154,155,'REAAAA','HIBAAA','VVVVxx' -5808,892,0,0,8,8,8,808,1808,808,5808,16,17,'KPAAAA','IIBAAA','AAAAxx' -4859,893,1,3,9,19,59,859,859,4859,4859,118,119,'XEAAAA','JIBAAA','HHHHxx' -9252,894,0,0,2,12,52,252,1252,4252,9252,104,105,'WRAAAA','KIBAAA','OOOOxx' -2941,895,1,1,1,1,41,941,941,2941,2941,82,83,'DJAAAA','LIBAAA','VVVVxx' -8693,896,1,1,3,13,93,693,693,3693,8693,186,187,'JWAAAA','MIBAAA','AAAAxx' -4432,897,0,0,2,12,32,432,432,4432,4432,64,65,'MOAAAA','NIBAAA','HHHHxx' -2371,898,1,3,1,11,71,371,371,2371,2371,142,143,'FNAAAA','OIBAAA','OOOOxx' -7546,899,0,2,6,6,46,546,1546,2546,7546,92,93,'GEAAAA','PIBAAA','VVVVxx' -1369,900,1,1,9,9,69,369,1369,1369,1369,138,139,'RAAAAA','QIBAAA','AAAAxx' -4687,901,1,3,7,7,87,687,687,4687,4687,174,175,'HYAAAA','RIBAAA','HHHHxx' -8941,902,1,1,1,1,41,941,941,3941,8941,82,83,'XFAAAA','SIBAAA','OOOOxx' -226,903,0,2,6,6,26,226,226,226,226,52,53,'SIAAAA','TIBAAA','VVVVxx' -3493,904,1,1,3,13,93,493,1493,3493,3493,186,187,'JEAAAA','UIBAAA','AAAAxx' -6433,905,1,1,3,13,33,433,433,1433,6433,66,67,'LNAAAA','VIBAAA','HHHHxx' -9189,906,1,1,9,9,89,189,1189,4189,9189,178,179,'LPAAAA','WIBAAA','OOOOxx' -6027,907,1,3,7,7,27,27,27,1027,6027,54,55,'VXAAAA','XIBAAA','VVVVxx' -4615,908,1,3,5,15,15,615,615,4615,4615,30,31,'NVAAAA','YIBAAA','AAAAxx' -5320,909,0,0,0,0,20,320,1320,320,5320,40,41,'QWAAAA','ZIBAAA','HHHHxx' -7002,910,0,2,2,2,2,2,1002,2002,7002,4,5,'IJAAAA','AJBAAA','OOOOxx' -7367,911,1,3,7,7,67,367,1367,2367,7367,134,135,'JXAAAA','BJBAAA','VVVVxx' -289,912,1,1,9,9,89,289,289,289,289,178,179,'DLAAAA','CJBAAA','AAAAxx' -407,913,1,3,7,7,7,407,407,407,407,14,15,'RPAAAA','DJBAAA','HHHHxx' -504,914,0,0,4,4,4,504,504,504,504,8,9,'KTAAAA','EJBAAA','OOOOxx' -8301,915,1,1,1,1,1,301,301,3301,8301,2,3,'HHAAAA','FJBAAA','VVVVxx' -1396,916,0,0,6,16,96,396,1396,1396,1396,192,193,'SBAAAA','GJBAAA','AAAAxx' -4794,917,0,2,4,14,94,794,794,4794,4794,188,189,'KCAAAA','HJBAAA','HHHHxx' -6400,918,0,0,0,0,0,400,400,1400,6400,0,1,'EMAAAA','IJBAAA','OOOOxx' -1275,919,1,3,5,15,75,275,1275,1275,1275,150,151,'BXAAAA','JJBAAA','VVVVxx' -5797,920,1,1,7,17,97,797,1797,797,5797,194,195,'ZOAAAA','KJBAAA','AAAAxx' -2221,921,1,1,1,1,21,221,221,2221,2221,42,43,'LHAAAA','LJBAAA','HHHHxx' -2504,922,0,0,4,4,4,504,504,2504,2504,8,9,'ISAAAA','MJBAAA','OOOOxx' -2143,923,1,3,3,3,43,143,143,2143,2143,86,87,'LEAAAA','NJBAAA','VVVVxx' -1083,924,1,3,3,3,83,83,1083,1083,1083,166,167,'RPAAAA','OJBAAA','AAAAxx' -6148,925,0,0,8,8,48,148,148,1148,6148,96,97,'MCAAAA','PJBAAA','HHHHxx' -3612,926,0,0,2,12,12,612,1612,3612,3612,24,25,'YIAAAA','QJBAAA','OOOOxx' -9499,927,1,3,9,19,99,499,1499,4499,9499,198,199,'JBAAAA','RJBAAA','VVVVxx' -5773,928,1,1,3,13,73,773,1773,773,5773,146,147,'BOAAAA','SJBAAA','AAAAxx' -1014,929,0,2,4,14,14,14,1014,1014,1014,28,29,'ANAAAA','TJBAAA','HHHHxx' -1427,930,1,3,7,7,27,427,1427,1427,1427,54,55,'XCAAAA','UJBAAA','OOOOxx' -6770,931,0,2,0,10,70,770,770,1770,6770,140,141,'KAAAAA','VJBAAA','VVVVxx' -9042,932,0,2,2,2,42,42,1042,4042,9042,84,85,'UJAAAA','WJBAAA','AAAAxx' -9892,933,0,0,2,12,92,892,1892,4892,9892,184,185,'MQAAAA','XJBAAA','HHHHxx' -1771,934,1,3,1,11,71,771,1771,1771,1771,142,143,'DQAAAA','YJBAAA','OOOOxx' -7392,935,0,0,2,12,92,392,1392,2392,7392,184,185,'IYAAAA','ZJBAAA','VVVVxx' -4465,936,1,1,5,5,65,465,465,4465,4465,130,131,'TPAAAA','AKBAAA','AAAAxx' -278,937,0,2,8,18,78,278,278,278,278,156,157,'SKAAAA','BKBAAA','HHHHxx' -7776,938,0,0,6,16,76,776,1776,2776,7776,152,153,'CNAAAA','CKBAAA','OOOOxx' -3763,939,1,3,3,3,63,763,1763,3763,3763,126,127,'TOAAAA','DKBAAA','VVVVxx' -7503,940,1,3,3,3,3,503,1503,2503,7503,6,7,'PCAAAA','EKBAAA','AAAAxx' -3793,941,1,1,3,13,93,793,1793,3793,3793,186,187,'XPAAAA','FKBAAA','HHHHxx' -6510,942,0,2,0,10,10,510,510,1510,6510,20,21,'KQAAAA','GKBAAA','OOOOxx' -7641,943,1,1,1,1,41,641,1641,2641,7641,82,83,'XHAAAA','HKBAAA','VVVVxx' -3228,944,0,0,8,8,28,228,1228,3228,3228,56,57,'EUAAAA','IKBAAA','AAAAxx' -194,945,0,2,4,14,94,194,194,194,194,188,189,'MHAAAA','JKBAAA','HHHHxx' -8555,946,1,3,5,15,55,555,555,3555,8555,110,111,'BRAAAA','KKBAAA','OOOOxx' -4997,947,1,1,7,17,97,997,997,4997,4997,194,195,'FKAAAA','LKBAAA','VVVVxx' -8687,948,1,3,7,7,87,687,687,3687,8687,174,175,'DWAAAA','MKBAAA','AAAAxx' -6632,949,0,0,2,12,32,632,632,1632,6632,64,65,'CVAAAA','NKBAAA','HHHHxx' -9607,950,1,3,7,7,7,607,1607,4607,9607,14,15,'NFAAAA','OKBAAA','OOOOxx' -6201,951,1,1,1,1,1,201,201,1201,6201,2,3,'NEAAAA','PKBAAA','VVVVxx' -857,952,1,1,7,17,57,857,857,857,857,114,115,'ZGAAAA','QKBAAA','AAAAxx' -5623,953,1,3,3,3,23,623,1623,623,5623,46,47,'HIAAAA','RKBAAA','HHHHxx' -5979,954,1,3,9,19,79,979,1979,979,5979,158,159,'ZVAAAA','SKBAAA','OOOOxx' -2201,955,1,1,1,1,1,201,201,2201,2201,2,3,'RGAAAA','TKBAAA','VVVVxx' -3166,956,0,2,6,6,66,166,1166,3166,3166,132,133,'URAAAA','UKBAAA','AAAAxx' -6249,957,1,1,9,9,49,249,249,1249,6249,98,99,'JGAAAA','VKBAAA','HHHHxx' -3271,958,1,3,1,11,71,271,1271,3271,3271,142,143,'VVAAAA','WKBAAA','OOOOxx' -7777,959,1,1,7,17,77,777,1777,2777,7777,154,155,'DNAAAA','XKBAAA','VVVVxx' -6732,960,0,0,2,12,32,732,732,1732,6732,64,65,'YYAAAA','YKBAAA','AAAAxx' -6297,961,1,1,7,17,97,297,297,1297,6297,194,195,'FIAAAA','ZKBAAA','HHHHxx' -5685,962,1,1,5,5,85,685,1685,685,5685,170,171,'RKAAAA','ALBAAA','OOOOxx' -9931,963,1,3,1,11,31,931,1931,4931,9931,62,63,'ZRAAAA','BLBAAA','VVVVxx' -7485,964,1,1,5,5,85,485,1485,2485,7485,170,171,'XBAAAA','CLBAAA','AAAAxx' -386,965,0,2,6,6,86,386,386,386,386,172,173,'WOAAAA','DLBAAA','HHHHxx' -8204,966,0,0,4,4,4,204,204,3204,8204,8,9,'ODAAAA','ELBAAA','OOOOxx' -3606,967,0,2,6,6,6,606,1606,3606,3606,12,13,'SIAAAA','FLBAAA','VVVVxx' -1692,968,0,0,2,12,92,692,1692,1692,1692,184,185,'CNAAAA','GLBAAA','AAAAxx' -3002,969,0,2,2,2,2,2,1002,3002,3002,4,5,'MLAAAA','HLBAAA','HHHHxx' -9676,970,0,0,6,16,76,676,1676,4676,9676,152,153,'EIAAAA','ILBAAA','OOOOxx' -915,971,1,3,5,15,15,915,915,915,915,30,31,'FJAAAA','JLBAAA','VVVVxx' -7706,972,0,2,6,6,6,706,1706,2706,7706,12,13,'KKAAAA','KLBAAA','AAAAxx' -6080,973,0,0,0,0,80,80,80,1080,6080,160,161,'WZAAAA','LLBAAA','HHHHxx' -1860,974,0,0,0,0,60,860,1860,1860,1860,120,121,'OTAAAA','MLBAAA','OOOOxx' -1444,975,0,0,4,4,44,444,1444,1444,1444,88,89,'ODAAAA','NLBAAA','VVVVxx' -7208,976,0,0,8,8,8,208,1208,2208,7208,16,17,'GRAAAA','OLBAAA','AAAAxx' -8554,977,0,2,4,14,54,554,554,3554,8554,108,109,'ARAAAA','PLBAAA','HHHHxx' -2028,978,0,0,8,8,28,28,28,2028,2028,56,57,'AAAAAA','QLBAAA','OOOOxx' -9893,979,1,1,3,13,93,893,1893,4893,9893,186,187,'NQAAAA','RLBAAA','VVVVxx' -4740,980,0,0,0,0,40,740,740,4740,4740,80,81,'IAAAAA','SLBAAA','AAAAxx' -6186,981,0,2,6,6,86,186,186,1186,6186,172,173,'YDAAAA','TLBAAA','HHHHxx' -6357,982,1,1,7,17,57,357,357,1357,6357,114,115,'NKAAAA','ULBAAA','OOOOxx' -3699,983,1,3,9,19,99,699,1699,3699,3699,198,199,'HMAAAA','VLBAAA','VVVVxx' -7620,984,0,0,0,0,20,620,1620,2620,7620,40,41,'CHAAAA','WLBAAA','AAAAxx' -921,985,1,1,1,1,21,921,921,921,921,42,43,'LJAAAA','XLBAAA','HHHHxx' -5506,986,0,2,6,6,6,506,1506,506,5506,12,13,'UDAAAA','YLBAAA','OOOOxx' -8851,987,1,3,1,11,51,851,851,3851,8851,102,103,'LCAAAA','ZLBAAA','VVVVxx' -3205,988,1,1,5,5,5,205,1205,3205,3205,10,11,'HTAAAA','AMBAAA','AAAAxx' -1956,989,0,0,6,16,56,956,1956,1956,1956,112,113,'GXAAAA','BMBAAA','HHHHxx' -6272,990,0,0,2,12,72,272,272,1272,6272,144,145,'GHAAAA','CMBAAA','OOOOxx' -1509,991,1,1,9,9,9,509,1509,1509,1509,18,19,'BGAAAA','DMBAAA','VVVVxx' -53,992,1,1,3,13,53,53,53,53,53,106,107,'BCAAAA','EMBAAA','AAAAxx' -213,993,1,1,3,13,13,213,213,213,213,26,27,'FIAAAA','FMBAAA','HHHHxx' -4924,994,0,0,4,4,24,924,924,4924,4924,48,49,'KHAAAA','GMBAAA','OOOOxx' -2097,995,1,1,7,17,97,97,97,2097,2097,194,195,'RCAAAA','HMBAAA','VVVVxx' -4607,996,1,3,7,7,7,607,607,4607,4607,14,15,'FVAAAA','IMBAAA','AAAAxx' -1582,997,0,2,2,2,82,582,1582,1582,1582,164,165,'WIAAAA','JMBAAA','HHHHxx' -6643,998,1,3,3,3,43,643,643,1643,6643,86,87,'NVAAAA','KMBAAA','OOOOxx' -2238,999,0,2,8,18,38,238,238,2238,2238,76,77,'CIAAAA','LMBAAA','VVVVxx' -2942,1000,0,2,2,2,42,942,942,2942,2942,84,85,'EJAAAA','MMBAAA','AAAAxx' -1655,1001,1,3,5,15,55,655,1655,1655,1655,110,111,'RLAAAA','NMBAAA','HHHHxx' -3226,1002,0,2,6,6,26,226,1226,3226,3226,52,53,'CUAAAA','OMBAAA','OOOOxx' -4263,1003,1,3,3,3,63,263,263,4263,4263,126,127,'ZHAAAA','PMBAAA','VVVVxx' -960,1004,0,0,0,0,60,960,960,960,960,120,121,'YKAAAA','QMBAAA','AAAAxx' -1213,1005,1,1,3,13,13,213,1213,1213,1213,26,27,'RUAAAA','RMBAAA','HHHHxx' -1845,1006,1,1,5,5,45,845,1845,1845,1845,90,91,'ZSAAAA','SMBAAA','OOOOxx' -6944,1007,0,0,4,4,44,944,944,1944,6944,88,89,'CHAAAA','TMBAAA','VVVVxx' -5284,1008,0,0,4,4,84,284,1284,284,5284,168,169,'GVAAAA','UMBAAA','AAAAxx' -188,1009,0,0,8,8,88,188,188,188,188,176,177,'GHAAAA','VMBAAA','HHHHxx' -748,1010,0,0,8,8,48,748,748,748,748,96,97,'UCAAAA','WMBAAA','OOOOxx' -2226,1011,0,2,6,6,26,226,226,2226,2226,52,53,'QHAAAA','XMBAAA','VVVVxx' -7342,1012,0,2,2,2,42,342,1342,2342,7342,84,85,'KWAAAA','YMBAAA','AAAAxx' -6120,1013,0,0,0,0,20,120,120,1120,6120,40,41,'KBAAAA','ZMBAAA','HHHHxx' -536,1014,0,0,6,16,36,536,536,536,536,72,73,'QUAAAA','ANBAAA','OOOOxx' -3239,1015,1,3,9,19,39,239,1239,3239,3239,78,79,'PUAAAA','BNBAAA','VVVVxx' -2832,1016,0,0,2,12,32,832,832,2832,2832,64,65,'YEAAAA','CNBAAA','AAAAxx' -5296,1017,0,0,6,16,96,296,1296,296,5296,192,193,'SVAAAA','DNBAAA','HHHHxx' -5795,1018,1,3,5,15,95,795,1795,795,5795,190,191,'XOAAAA','ENBAAA','OOOOxx' -6290,1019,0,2,0,10,90,290,290,1290,6290,180,181,'YHAAAA','FNBAAA','VVVVxx' -4916,1020,0,0,6,16,16,916,916,4916,4916,32,33,'CHAAAA','GNBAAA','AAAAxx' -8366,1021,0,2,6,6,66,366,366,3366,8366,132,133,'UJAAAA','HNBAAA','HHHHxx' -4248,1022,0,0,8,8,48,248,248,4248,4248,96,97,'KHAAAA','INBAAA','OOOOxx' -6460,1023,0,0,0,0,60,460,460,1460,6460,120,121,'MOAAAA','JNBAAA','VVVVxx' -9296,1024,0,0,6,16,96,296,1296,4296,9296,192,193,'OTAAAA','KNBAAA','AAAAxx' -3486,1025,0,2,6,6,86,486,1486,3486,3486,172,173,'CEAAAA','LNBAAA','HHHHxx' -5664,1026,0,0,4,4,64,664,1664,664,5664,128,129,'WJAAAA','MNBAAA','OOOOxx' -7624,1027,0,0,4,4,24,624,1624,2624,7624,48,49,'GHAAAA','NNBAAA','VVVVxx' -2790,1028,0,2,0,10,90,790,790,2790,2790,180,181,'IDAAAA','ONBAAA','AAAAxx' -682,1029,0,2,2,2,82,682,682,682,682,164,165,'GAAAAA','PNBAAA','HHHHxx' -6412,1030,0,0,2,12,12,412,412,1412,6412,24,25,'QMAAAA','QNBAAA','OOOOxx' -6882,1031,0,2,2,2,82,882,882,1882,6882,164,165,'SEAAAA','RNBAAA','VVVVxx' -1332,1032,0,0,2,12,32,332,1332,1332,1332,64,65,'GZAAAA','SNBAAA','AAAAxx' -4911,1033,1,3,1,11,11,911,911,4911,4911,22,23,'XGAAAA','TNBAAA','HHHHxx' -3528,1034,0,0,8,8,28,528,1528,3528,3528,56,57,'SFAAAA','UNBAAA','OOOOxx' -271,1035,1,3,1,11,71,271,271,271,271,142,143,'LKAAAA','VNBAAA','VVVVxx' -7007,1036,1,3,7,7,7,7,1007,2007,7007,14,15,'NJAAAA','WNBAAA','AAAAxx' -2198,1037,0,2,8,18,98,198,198,2198,2198,196,197,'OGAAAA','XNBAAA','HHHHxx' -4266,1038,0,2,6,6,66,266,266,4266,4266,132,133,'CIAAAA','YNBAAA','OOOOxx' -9867,1039,1,3,7,7,67,867,1867,4867,9867,134,135,'NPAAAA','ZNBAAA','VVVVxx' -7602,1040,0,2,2,2,2,602,1602,2602,7602,4,5,'KGAAAA','AOBAAA','AAAAxx' -7521,1041,1,1,1,1,21,521,1521,2521,7521,42,43,'HDAAAA','BOBAAA','HHHHxx' -7200,1042,0,0,0,0,0,200,1200,2200,7200,0,1,'YQAAAA','COBAAA','OOOOxx' -4816,1043,0,0,6,16,16,816,816,4816,4816,32,33,'GDAAAA','DOBAAA','VVVVxx' -1669,1044,1,1,9,9,69,669,1669,1669,1669,138,139,'FMAAAA','EOBAAA','AAAAxx' -4764,1045,0,0,4,4,64,764,764,4764,4764,128,129,'GBAAAA','FOBAAA','HHHHxx' -7393,1046,1,1,3,13,93,393,1393,2393,7393,186,187,'JYAAAA','GOBAAA','OOOOxx' -7434,1047,0,2,4,14,34,434,1434,2434,7434,68,69,'YZAAAA','HOBAAA','VVVVxx' -9079,1048,1,3,9,19,79,79,1079,4079,9079,158,159,'FLAAAA','IOBAAA','AAAAxx' -9668,1049,0,0,8,8,68,668,1668,4668,9668,136,137,'WHAAAA','JOBAAA','HHHHxx' -7184,1050,0,0,4,4,84,184,1184,2184,7184,168,169,'IQAAAA','KOBAAA','OOOOxx' -7347,1051,1,3,7,7,47,347,1347,2347,7347,94,95,'PWAAAA','LOBAAA','VVVVxx' -951,1052,1,3,1,11,51,951,951,951,951,102,103,'PKAAAA','MOBAAA','AAAAxx' -4513,1053,1,1,3,13,13,513,513,4513,4513,26,27,'PRAAAA','NOBAAA','HHHHxx' -2692,1054,0,0,2,12,92,692,692,2692,2692,184,185,'OZAAAA','OOBAAA','OOOOxx' -9930,1055,0,2,0,10,30,930,1930,4930,9930,60,61,'YRAAAA','POBAAA','VVVVxx' -4516,1056,0,0,6,16,16,516,516,4516,4516,32,33,'SRAAAA','QOBAAA','AAAAxx' -1592,1057,0,0,2,12,92,592,1592,1592,1592,184,185,'GJAAAA','ROBAAA','HHHHxx' -6312,1058,0,0,2,12,12,312,312,1312,6312,24,25,'UIAAAA','SOBAAA','OOOOxx' -185,1059,1,1,5,5,85,185,185,185,185,170,171,'DHAAAA','TOBAAA','VVVVxx' -1848,1060,0,0,8,8,48,848,1848,1848,1848,96,97,'CTAAAA','UOBAAA','AAAAxx' -5844,1061,0,0,4,4,44,844,1844,844,5844,88,89,'UQAAAA','VOBAAA','HHHHxx' -1666,1062,0,2,6,6,66,666,1666,1666,1666,132,133,'CMAAAA','WOBAAA','OOOOxx' -5864,1063,0,0,4,4,64,864,1864,864,5864,128,129,'ORAAAA','XOBAAA','VVVVxx' -1004,1064,0,0,4,4,4,4,1004,1004,1004,8,9,'QMAAAA','YOBAAA','AAAAxx' -1758,1065,0,2,8,18,58,758,1758,1758,1758,116,117,'QPAAAA','ZOBAAA','HHHHxx' -8823,1066,1,3,3,3,23,823,823,3823,8823,46,47,'JBAAAA','APBAAA','OOOOxx' -129,1067,1,1,9,9,29,129,129,129,129,58,59,'ZEAAAA','BPBAAA','VVVVxx' -5703,1068,1,3,3,3,3,703,1703,703,5703,6,7,'JLAAAA','CPBAAA','AAAAxx' -3331,1069,1,3,1,11,31,331,1331,3331,3331,62,63,'DYAAAA','DPBAAA','HHHHxx' -5791,1070,1,3,1,11,91,791,1791,791,5791,182,183,'TOAAAA','EPBAAA','OOOOxx' -4421,1071,1,1,1,1,21,421,421,4421,4421,42,43,'BOAAAA','FPBAAA','VVVVxx' -9740,1072,0,0,0,0,40,740,1740,4740,9740,80,81,'QKAAAA','GPBAAA','AAAAxx' -798,1073,0,2,8,18,98,798,798,798,798,196,197,'SEAAAA','HPBAAA','HHHHxx' -571,1074,1,3,1,11,71,571,571,571,571,142,143,'ZVAAAA','IPBAAA','OOOOxx' -7084,1075,0,0,4,4,84,84,1084,2084,7084,168,169,'MMAAAA','JPBAAA','VVVVxx' -650,1076,0,2,0,10,50,650,650,650,650,100,101,'AZAAAA','KPBAAA','AAAAxx' -1467,1077,1,3,7,7,67,467,1467,1467,1467,134,135,'LEAAAA','LPBAAA','HHHHxx' -5446,1078,0,2,6,6,46,446,1446,446,5446,92,93,'MBAAAA','MPBAAA','OOOOxx' -830,1079,0,2,0,10,30,830,830,830,830,60,61,'YFAAAA','NPBAAA','VVVVxx' -5516,1080,0,0,6,16,16,516,1516,516,5516,32,33,'EEAAAA','OPBAAA','AAAAxx' -8520,1081,0,0,0,0,20,520,520,3520,8520,40,41,'SPAAAA','PPBAAA','HHHHxx' -1152,1082,0,0,2,12,52,152,1152,1152,1152,104,105,'ISAAAA','QPBAAA','OOOOxx' -862,1083,0,2,2,2,62,862,862,862,862,124,125,'EHAAAA','RPBAAA','VVVVxx' -454,1084,0,2,4,14,54,454,454,454,454,108,109,'MRAAAA','SPBAAA','AAAAxx' -9956,1085,0,0,6,16,56,956,1956,4956,9956,112,113,'YSAAAA','TPBAAA','HHHHxx' -1654,1086,0,2,4,14,54,654,1654,1654,1654,108,109,'QLAAAA','UPBAAA','OOOOxx' -257,1087,1,1,7,17,57,257,257,257,257,114,115,'XJAAAA','VPBAAA','VVVVxx' -5469,1088,1,1,9,9,69,469,1469,469,5469,138,139,'JCAAAA','WPBAAA','AAAAxx' -9075,1089,1,3,5,15,75,75,1075,4075,9075,150,151,'BLAAAA','XPBAAA','HHHHxx' -7799,1090,1,3,9,19,99,799,1799,2799,7799,198,199,'ZNAAAA','YPBAAA','OOOOxx' -2001,1091,1,1,1,1,1,1,1,2001,2001,2,3,'ZYAAAA','ZPBAAA','VVVVxx' -9786,1092,0,2,6,6,86,786,1786,4786,9786,172,173,'KMAAAA','AQBAAA','AAAAxx' -7281,1093,1,1,1,1,81,281,1281,2281,7281,162,163,'BUAAAA','BQBAAA','HHHHxx' -5137,1094,1,1,7,17,37,137,1137,137,5137,74,75,'PPAAAA','CQBAAA','OOOOxx' -4053,1095,1,1,3,13,53,53,53,4053,4053,106,107,'XZAAAA','DQBAAA','VVVVxx' -7911,1096,1,3,1,11,11,911,1911,2911,7911,22,23,'HSAAAA','EQBAAA','AAAAxx' -4298,1097,0,2,8,18,98,298,298,4298,4298,196,197,'IJAAAA','FQBAAA','HHHHxx' -4805,1098,1,1,5,5,5,805,805,4805,4805,10,11,'VCAAAA','GQBAAA','OOOOxx' -9038,1099,0,2,8,18,38,38,1038,4038,9038,76,77,'QJAAAA','HQBAAA','VVVVxx' -8023,1100,1,3,3,3,23,23,23,3023,8023,46,47,'PWAAAA','IQBAAA','AAAAxx' -6595,1101,1,3,5,15,95,595,595,1595,6595,190,191,'RTAAAA','JQBAAA','HHHHxx' -9831,1102,1,3,1,11,31,831,1831,4831,9831,62,63,'DOAAAA','KQBAAA','OOOOxx' -788,1103,0,0,8,8,88,788,788,788,788,176,177,'IEAAAA','LQBAAA','VVVVxx' -902,1104,0,2,2,2,2,902,902,902,902,4,5,'SIAAAA','MQBAAA','AAAAxx' -9137,1105,1,1,7,17,37,137,1137,4137,9137,74,75,'LNAAAA','NQBAAA','HHHHxx' -1744,1106,0,0,4,4,44,744,1744,1744,1744,88,89,'CPAAAA','OQBAAA','OOOOxx' -7285,1107,1,1,5,5,85,285,1285,2285,7285,170,171,'FUAAAA','PQBAAA','VVVVxx' -7006,1108,0,2,6,6,6,6,1006,2006,7006,12,13,'MJAAAA','QQBAAA','AAAAxx' -9236,1109,0,0,6,16,36,236,1236,4236,9236,72,73,'GRAAAA','RQBAAA','HHHHxx' -5472,1110,0,0,2,12,72,472,1472,472,5472,144,145,'MCAAAA','SQBAAA','OOOOxx' -7975,1111,1,3,5,15,75,975,1975,2975,7975,150,151,'TUAAAA','TQBAAA','VVVVxx' -4181,1112,1,1,1,1,81,181,181,4181,4181,162,163,'VEAAAA','UQBAAA','AAAAxx' -7677,1113,1,1,7,17,77,677,1677,2677,7677,154,155,'HJAAAA','VQBAAA','HHHHxx' -35,1114,1,3,5,15,35,35,35,35,35,70,71,'JBAAAA','WQBAAA','OOOOxx' -6813,1115,1,1,3,13,13,813,813,1813,6813,26,27,'BCAAAA','XQBAAA','VVVVxx' -6618,1116,0,2,8,18,18,618,618,1618,6618,36,37,'OUAAAA','YQBAAA','AAAAxx' -8069,1117,1,1,9,9,69,69,69,3069,8069,138,139,'JYAAAA','ZQBAAA','HHHHxx' -3071,1118,1,3,1,11,71,71,1071,3071,3071,142,143,'DOAAAA','ARBAAA','OOOOxx' -4390,1119,0,2,0,10,90,390,390,4390,4390,180,181,'WMAAAA','BRBAAA','VVVVxx' -7764,1120,0,0,4,4,64,764,1764,2764,7764,128,129,'QMAAAA','CRBAAA','AAAAxx' -8163,1121,1,3,3,3,63,163,163,3163,8163,126,127,'ZBAAAA','DRBAAA','HHHHxx' -1961,1122,1,1,1,1,61,961,1961,1961,1961,122,123,'LXAAAA','ERBAAA','OOOOxx' -1103,1123,1,3,3,3,3,103,1103,1103,1103,6,7,'LQAAAA','FRBAAA','VVVVxx' -5486,1124,0,2,6,6,86,486,1486,486,5486,172,173,'ADAAAA','GRBAAA','AAAAxx' -9513,1125,1,1,3,13,13,513,1513,4513,9513,26,27,'XBAAAA','HRBAAA','HHHHxx' -7311,1126,1,3,1,11,11,311,1311,2311,7311,22,23,'FVAAAA','IRBAAA','OOOOxx' -4144,1127,0,0,4,4,44,144,144,4144,4144,88,89,'KDAAAA','JRBAAA','VVVVxx' -7901,1128,1,1,1,1,1,901,1901,2901,7901,2,3,'XRAAAA','KRBAAA','AAAAxx' -4629,1129,1,1,9,9,29,629,629,4629,4629,58,59,'BWAAAA','LRBAAA','HHHHxx' -6858,1130,0,2,8,18,58,858,858,1858,6858,116,117,'UDAAAA','MRBAAA','OOOOxx' -125,1131,1,1,5,5,25,125,125,125,125,50,51,'VEAAAA','NRBAAA','VVVVxx' -3834,1132,0,2,4,14,34,834,1834,3834,3834,68,69,'MRAAAA','ORBAAA','AAAAxx' -8155,1133,1,3,5,15,55,155,155,3155,8155,110,111,'RBAAAA','PRBAAA','HHHHxx' -8230,1134,0,2,0,10,30,230,230,3230,8230,60,61,'OEAAAA','QRBAAA','OOOOxx' -744,1135,0,0,4,4,44,744,744,744,744,88,89,'QCAAAA','RRBAAA','VVVVxx' -357,1136,1,1,7,17,57,357,357,357,357,114,115,'TNAAAA','SRBAAA','AAAAxx' -2159,1137,1,3,9,19,59,159,159,2159,2159,118,119,'BFAAAA','TRBAAA','HHHHxx' -8559,1138,1,3,9,19,59,559,559,3559,8559,118,119,'FRAAAA','URBAAA','OOOOxx' -6866,1139,0,2,6,6,66,866,866,1866,6866,132,133,'CEAAAA','VRBAAA','VVVVxx' -3863,1140,1,3,3,3,63,863,1863,3863,3863,126,127,'PSAAAA','WRBAAA','AAAAxx' -4193,1141,1,1,3,13,93,193,193,4193,4193,186,187,'HFAAAA','XRBAAA','HHHHxx' -3277,1142,1,1,7,17,77,277,1277,3277,3277,154,155,'BWAAAA','YRBAAA','OOOOxx' -5577,1143,1,1,7,17,77,577,1577,577,5577,154,155,'NGAAAA','ZRBAAA','VVVVxx' -9503,1144,1,3,3,3,3,503,1503,4503,9503,6,7,'NBAAAA','ASBAAA','AAAAxx' -7642,1145,0,2,2,2,42,642,1642,2642,7642,84,85,'YHAAAA','BSBAAA','HHHHxx' -6197,1146,1,1,7,17,97,197,197,1197,6197,194,195,'JEAAAA','CSBAAA','OOOOxx' -8995,1147,1,3,5,15,95,995,995,3995,8995,190,191,'ZHAAAA','DSBAAA','VVVVxx' -440,1148,0,0,0,0,40,440,440,440,440,80,81,'YQAAAA','ESBAAA','AAAAxx' -8418,1149,0,2,8,18,18,418,418,3418,8418,36,37,'ULAAAA','FSBAAA','HHHHxx' -8531,1150,1,3,1,11,31,531,531,3531,8531,62,63,'DQAAAA','GSBAAA','OOOOxx' -3790,1151,0,2,0,10,90,790,1790,3790,3790,180,181,'UPAAAA','HSBAAA','VVVVxx' -7610,1152,0,2,0,10,10,610,1610,2610,7610,20,21,'SGAAAA','ISBAAA','AAAAxx' -1252,1153,0,0,2,12,52,252,1252,1252,1252,104,105,'EWAAAA','JSBAAA','HHHHxx' -7559,1154,1,3,9,19,59,559,1559,2559,7559,118,119,'TEAAAA','KSBAAA','OOOOxx' -9945,1155,1,1,5,5,45,945,1945,4945,9945,90,91,'NSAAAA','LSBAAA','VVVVxx' -9023,1156,1,3,3,3,23,23,1023,4023,9023,46,47,'BJAAAA','MSBAAA','AAAAxx' -3516,1157,0,0,6,16,16,516,1516,3516,3516,32,33,'GFAAAA','NSBAAA','HHHHxx' -4671,1158,1,3,1,11,71,671,671,4671,4671,142,143,'RXAAAA','OSBAAA','OOOOxx' -1465,1159,1,1,5,5,65,465,1465,1465,1465,130,131,'JEAAAA','PSBAAA','VVVVxx' -9515,1160,1,3,5,15,15,515,1515,4515,9515,30,31,'ZBAAAA','QSBAAA','AAAAxx' -3242,1161,0,2,2,2,42,242,1242,3242,3242,84,85,'SUAAAA','RSBAAA','HHHHxx' -1732,1162,0,0,2,12,32,732,1732,1732,1732,64,65,'QOAAAA','SSBAAA','OOOOxx' -1678,1163,0,2,8,18,78,678,1678,1678,1678,156,157,'OMAAAA','TSBAAA','VVVVxx' -1464,1164,0,0,4,4,64,464,1464,1464,1464,128,129,'IEAAAA','USBAAA','AAAAxx' -6546,1165,0,2,6,6,46,546,546,1546,6546,92,93,'URAAAA','VSBAAA','HHHHxx' -4448,1166,0,0,8,8,48,448,448,4448,4448,96,97,'CPAAAA','WSBAAA','OOOOxx' -9847,1167,1,3,7,7,47,847,1847,4847,9847,94,95,'TOAAAA','XSBAAA','VVVVxx' -8264,1168,0,0,4,4,64,264,264,3264,8264,128,129,'WFAAAA','YSBAAA','AAAAxx' -1620,1169,0,0,0,0,20,620,1620,1620,1620,40,41,'IKAAAA','ZSBAAA','HHHHxx' -9388,1170,0,0,8,8,88,388,1388,4388,9388,176,177,'CXAAAA','ATBAAA','OOOOxx' -6445,1171,1,1,5,5,45,445,445,1445,6445,90,91,'XNAAAA','BTBAAA','VVVVxx' -4789,1172,1,1,9,9,89,789,789,4789,4789,178,179,'FCAAAA','CTBAAA','AAAAxx' -1562,1173,0,2,2,2,62,562,1562,1562,1562,124,125,'CIAAAA','DTBAAA','HHHHxx' -7305,1174,1,1,5,5,5,305,1305,2305,7305,10,11,'ZUAAAA','ETBAAA','OOOOxx' -6344,1175,0,0,4,4,44,344,344,1344,6344,88,89,'AKAAAA','FTBAAA','VVVVxx' -5130,1176,0,2,0,10,30,130,1130,130,5130,60,61,'IPAAAA','GTBAAA','AAAAxx' -3284,1177,0,0,4,4,84,284,1284,3284,3284,168,169,'IWAAAA','HTBAAA','HHHHxx' -6346,1178,0,2,6,6,46,346,346,1346,6346,92,93,'CKAAAA','ITBAAA','OOOOxx' -1061,1179,1,1,1,1,61,61,1061,1061,1061,122,123,'VOAAAA','JTBAAA','VVVVxx' -872,1180,0,0,2,12,72,872,872,872,872,144,145,'OHAAAA','KTBAAA','AAAAxx' -123,1181,1,3,3,3,23,123,123,123,123,46,47,'TEAAAA','LTBAAA','HHHHxx' -7903,1182,1,3,3,3,3,903,1903,2903,7903,6,7,'ZRAAAA','MTBAAA','OOOOxx' -560,1183,0,0,0,0,60,560,560,560,560,120,121,'OVAAAA','NTBAAA','VVVVxx' -4446,1184,0,2,6,6,46,446,446,4446,4446,92,93,'APAAAA','OTBAAA','AAAAxx' -3909,1185,1,1,9,9,9,909,1909,3909,3909,18,19,'JUAAAA','PTBAAA','HHHHxx' -669,1186,1,1,9,9,69,669,669,669,669,138,139,'TZAAAA','QTBAAA','OOOOxx' -7843,1187,1,3,3,3,43,843,1843,2843,7843,86,87,'RPAAAA','RTBAAA','VVVVxx' -2546,1188,0,2,6,6,46,546,546,2546,2546,92,93,'YTAAAA','STBAAA','AAAAxx' -6757,1189,1,1,7,17,57,757,757,1757,6757,114,115,'XZAAAA','TTBAAA','HHHHxx' -466,1190,0,2,6,6,66,466,466,466,466,132,133,'YRAAAA','UTBAAA','OOOOxx' -5556,1191,0,0,6,16,56,556,1556,556,5556,112,113,'SFAAAA','VTBAAA','VVVVxx' -7196,1192,0,0,6,16,96,196,1196,2196,7196,192,193,'UQAAAA','WTBAAA','AAAAxx' -2947,1193,1,3,7,7,47,947,947,2947,2947,94,95,'JJAAAA','XTBAAA','HHHHxx' -6493,1194,1,1,3,13,93,493,493,1493,6493,186,187,'TPAAAA','YTBAAA','OOOOxx' -7203,1195,1,3,3,3,3,203,1203,2203,7203,6,7,'BRAAAA','ZTBAAA','VVVVxx' -3716,1196,0,0,6,16,16,716,1716,3716,3716,32,33,'YMAAAA','AUBAAA','AAAAxx' -8058,1197,0,2,8,18,58,58,58,3058,8058,116,117,'YXAAAA','BUBAAA','HHHHxx' -433,1198,1,1,3,13,33,433,433,433,433,66,67,'RQAAAA','CUBAAA','OOOOxx' -7649,1199,1,1,9,9,49,649,1649,2649,7649,98,99,'FIAAAA','DUBAAA','VVVVxx' -6966,1200,0,2,6,6,66,966,966,1966,6966,132,133,'YHAAAA','EUBAAA','AAAAxx' -553,1201,1,1,3,13,53,553,553,553,553,106,107,'HVAAAA','FUBAAA','HHHHxx' -3677,1202,1,1,7,17,77,677,1677,3677,3677,154,155,'LLAAAA','GUBAAA','OOOOxx' -2344,1203,0,0,4,4,44,344,344,2344,2344,88,89,'EMAAAA','HUBAAA','VVVVxx' -7439,1204,1,3,9,19,39,439,1439,2439,7439,78,79,'DAAAAA','IUBAAA','AAAAxx' -3910,1205,0,2,0,10,10,910,1910,3910,3910,20,21,'KUAAAA','JUBAAA','HHHHxx' -3638,1206,0,2,8,18,38,638,1638,3638,3638,76,77,'YJAAAA','KUBAAA','OOOOxx' -6637,1207,1,1,7,17,37,637,637,1637,6637,74,75,'HVAAAA','LUBAAA','VVVVxx' -4438,1208,0,2,8,18,38,438,438,4438,4438,76,77,'SOAAAA','MUBAAA','AAAAxx' -171,1209,1,3,1,11,71,171,171,171,171,142,143,'PGAAAA','NUBAAA','HHHHxx' -310,1210,0,2,0,10,10,310,310,310,310,20,21,'YLAAAA','OUBAAA','OOOOxx' -2714,1211,0,2,4,14,14,714,714,2714,2714,28,29,'KAAAAA','PUBAAA','VVVVxx' -5199,1212,1,3,9,19,99,199,1199,199,5199,198,199,'ZRAAAA','QUBAAA','AAAAxx' -8005,1213,1,1,5,5,5,5,5,3005,8005,10,11,'XVAAAA','RUBAAA','HHHHxx' -3188,1214,0,0,8,8,88,188,1188,3188,3188,176,177,'QSAAAA','SUBAAA','OOOOxx' -1518,1215,0,2,8,18,18,518,1518,1518,1518,36,37,'KGAAAA','TUBAAA','VVVVxx' -6760,1216,0,0,0,0,60,760,760,1760,6760,120,121,'AAAAAA','UUBAAA','AAAAxx' -9373,1217,1,1,3,13,73,373,1373,4373,9373,146,147,'NWAAAA','VUBAAA','HHHHxx' -1938,1218,0,2,8,18,38,938,1938,1938,1938,76,77,'OWAAAA','WUBAAA','OOOOxx' -2865,1219,1,1,5,5,65,865,865,2865,2865,130,131,'FGAAAA','XUBAAA','VVVVxx' -3203,1220,1,3,3,3,3,203,1203,3203,3203,6,7,'FTAAAA','YUBAAA','AAAAxx' -6025,1221,1,1,5,5,25,25,25,1025,6025,50,51,'TXAAAA','ZUBAAA','HHHHxx' -8684,1222,0,0,4,4,84,684,684,3684,8684,168,169,'AWAAAA','AVBAAA','OOOOxx' -7732,1223,0,0,2,12,32,732,1732,2732,7732,64,65,'KLAAAA','BVBAAA','VVVVxx' -3218,1224,0,2,8,18,18,218,1218,3218,3218,36,37,'UTAAAA','CVBAAA','AAAAxx' -525,1225,1,1,5,5,25,525,525,525,525,50,51,'FUAAAA','DVBAAA','HHHHxx' -601,1226,1,1,1,1,1,601,601,601,601,2,3,'DXAAAA','EVBAAA','OOOOxx' -6091,1227,1,3,1,11,91,91,91,1091,6091,182,183,'HAAAAA','FVBAAA','VVVVxx' -4498,1228,0,2,8,18,98,498,498,4498,4498,196,197,'ARAAAA','GVBAAA','AAAAxx' -8192,1229,0,0,2,12,92,192,192,3192,8192,184,185,'CDAAAA','HVBAAA','HHHHxx' -8006,1230,0,2,6,6,6,6,6,3006,8006,12,13,'YVAAAA','IVBAAA','OOOOxx' -6157,1231,1,1,7,17,57,157,157,1157,6157,114,115,'VCAAAA','JVBAAA','VVVVxx' -312,1232,0,0,2,12,12,312,312,312,312,24,25,'AMAAAA','KVBAAA','AAAAxx' -8652,1233,0,0,2,12,52,652,652,3652,8652,104,105,'UUAAAA','LVBAAA','HHHHxx' -2787,1234,1,3,7,7,87,787,787,2787,2787,174,175,'FDAAAA','MVBAAA','OOOOxx' -1782,1235,0,2,2,2,82,782,1782,1782,1782,164,165,'OQAAAA','NVBAAA','VVVVxx' -23,1236,1,3,3,3,23,23,23,23,23,46,47,'XAAAAA','OVBAAA','AAAAxx' -1206,1237,0,2,6,6,6,206,1206,1206,1206,12,13,'KUAAAA','PVBAAA','HHHHxx' -1076,1238,0,0,6,16,76,76,1076,1076,1076,152,153,'KPAAAA','QVBAAA','OOOOxx' -5379,1239,1,3,9,19,79,379,1379,379,5379,158,159,'XYAAAA','RVBAAA','VVVVxx' -2047,1240,1,3,7,7,47,47,47,2047,2047,94,95,'TAAAAA','SVBAAA','AAAAxx' -6262,1241,0,2,2,2,62,262,262,1262,6262,124,125,'WGAAAA','TVBAAA','HHHHxx' -1840,1242,0,0,0,0,40,840,1840,1840,1840,80,81,'USAAAA','UVBAAA','OOOOxx' -2106,1243,0,2,6,6,6,106,106,2106,2106,12,13,'ADAAAA','VVBAAA','VVVVxx' -1307,1244,1,3,7,7,7,307,1307,1307,1307,14,15,'HYAAAA','WVBAAA','AAAAxx' -735,1245,1,3,5,15,35,735,735,735,735,70,71,'HCAAAA','XVBAAA','HHHHxx' -3657,1246,1,1,7,17,57,657,1657,3657,3657,114,115,'RKAAAA','YVBAAA','OOOOxx' -3006,1247,0,2,6,6,6,6,1006,3006,3006,12,13,'QLAAAA','ZVBAAA','VVVVxx' -1538,1248,0,2,8,18,38,538,1538,1538,1538,76,77,'EHAAAA','AWBAAA','AAAAxx' -6098,1249,0,2,8,18,98,98,98,1098,6098,196,197,'OAAAAA','BWBAAA','HHHHxx' -5267,1250,1,3,7,7,67,267,1267,267,5267,134,135,'PUAAAA','CWBAAA','OOOOxx' -9757,1251,1,1,7,17,57,757,1757,4757,9757,114,115,'HLAAAA','DWBAAA','VVVVxx' -1236,1252,0,0,6,16,36,236,1236,1236,1236,72,73,'OVAAAA','EWBAAA','AAAAxx' -83,1253,1,3,3,3,83,83,83,83,83,166,167,'FDAAAA','FWBAAA','HHHHxx' -9227,1254,1,3,7,7,27,227,1227,4227,9227,54,55,'XQAAAA','GWBAAA','OOOOxx' -8772,1255,0,0,2,12,72,772,772,3772,8772,144,145,'KZAAAA','HWBAAA','VVVVxx' -8822,1256,0,2,2,2,22,822,822,3822,8822,44,45,'IBAAAA','IWBAAA','AAAAxx' -7167,1257,1,3,7,7,67,167,1167,2167,7167,134,135,'RPAAAA','JWBAAA','HHHHxx' -6909,1258,1,1,9,9,9,909,909,1909,6909,18,19,'TFAAAA','KWBAAA','OOOOxx' -1439,1259,1,3,9,19,39,439,1439,1439,1439,78,79,'JDAAAA','LWBAAA','VVVVxx' -2370,1260,0,2,0,10,70,370,370,2370,2370,140,141,'ENAAAA','MWBAAA','AAAAxx' -4577,1261,1,1,7,17,77,577,577,4577,4577,154,155,'BUAAAA','NWBAAA','HHHHxx' -2575,1262,1,3,5,15,75,575,575,2575,2575,150,151,'BVAAAA','OWBAAA','OOOOxx' -2795,1263,1,3,5,15,95,795,795,2795,2795,190,191,'NDAAAA','PWBAAA','VVVVxx' -5520,1264,0,0,0,0,20,520,1520,520,5520,40,41,'IEAAAA','QWBAAA','AAAAxx' -382,1265,0,2,2,2,82,382,382,382,382,164,165,'SOAAAA','RWBAAA','HHHHxx' -6335,1266,1,3,5,15,35,335,335,1335,6335,70,71,'RJAAAA','SWBAAA','OOOOxx' -8430,1267,0,2,0,10,30,430,430,3430,8430,60,61,'GMAAAA','TWBAAA','VVVVxx' -4131,1268,1,3,1,11,31,131,131,4131,4131,62,63,'XCAAAA','UWBAAA','AAAAxx' -9332,1269,0,0,2,12,32,332,1332,4332,9332,64,65,'YUAAAA','VWBAAA','HHHHxx' -293,1270,1,1,3,13,93,293,293,293,293,186,187,'HLAAAA','WWBAAA','OOOOxx' -2276,1271,0,0,6,16,76,276,276,2276,2276,152,153,'OJAAAA','XWBAAA','VVVVxx' -5687,1272,1,3,7,7,87,687,1687,687,5687,174,175,'TKAAAA','YWBAAA','AAAAxx' -5862,1273,0,2,2,2,62,862,1862,862,5862,124,125,'MRAAAA','ZWBAAA','HHHHxx' -5073,1274,1,1,3,13,73,73,1073,73,5073,146,147,'DNAAAA','AXBAAA','OOOOxx' -4170,1275,0,2,0,10,70,170,170,4170,4170,140,141,'KEAAAA','BXBAAA','VVVVxx' -5039,1276,1,3,9,19,39,39,1039,39,5039,78,79,'VLAAAA','CXBAAA','AAAAxx' -3294,1277,0,2,4,14,94,294,1294,3294,3294,188,189,'SWAAAA','DXBAAA','HHHHxx' -6015,1278,1,3,5,15,15,15,15,1015,6015,30,31,'JXAAAA','EXBAAA','OOOOxx' -9015,1279,1,3,5,15,15,15,1015,4015,9015,30,31,'TIAAAA','FXBAAA','VVVVxx' -9785,1280,1,1,5,5,85,785,1785,4785,9785,170,171,'JMAAAA','GXBAAA','AAAAxx' -4312,1281,0,0,2,12,12,312,312,4312,4312,24,25,'WJAAAA','HXBAAA','HHHHxx' -6343,1282,1,3,3,3,43,343,343,1343,6343,86,87,'ZJAAAA','IXBAAA','OOOOxx' -2161,1283,1,1,1,1,61,161,161,2161,2161,122,123,'DFAAAA','JXBAAA','VVVVxx' -4490,1284,0,2,0,10,90,490,490,4490,4490,180,181,'SQAAAA','KXBAAA','AAAAxx' -4454,1285,0,2,4,14,54,454,454,4454,4454,108,109,'IPAAAA','LXBAAA','HHHHxx' -7647,1286,1,3,7,7,47,647,1647,2647,7647,94,95,'DIAAAA','MXBAAA','OOOOxx' -1028,1287,0,0,8,8,28,28,1028,1028,1028,56,57,'ONAAAA','NXBAAA','VVVVxx' -2965,1288,1,1,5,5,65,965,965,2965,2965,130,131,'BKAAAA','OXBAAA','AAAAxx' -9900,1289,0,0,0,0,0,900,1900,4900,9900,0,1,'UQAAAA','PXBAAA','HHHHxx' -5509,1290,1,1,9,9,9,509,1509,509,5509,18,19,'XDAAAA','QXBAAA','OOOOxx' -7751,1291,1,3,1,11,51,751,1751,2751,7751,102,103,'DMAAAA','RXBAAA','VVVVxx' -9594,1292,0,2,4,14,94,594,1594,4594,9594,188,189,'AFAAAA','SXBAAA','AAAAxx' -7632,1293,0,0,2,12,32,632,1632,2632,7632,64,65,'OHAAAA','TXBAAA','HHHHxx' -6528,1294,0,0,8,8,28,528,528,1528,6528,56,57,'CRAAAA','UXBAAA','OOOOxx' -1041,1295,1,1,1,1,41,41,1041,1041,1041,82,83,'BOAAAA','VXBAAA','VVVVxx' -1534,1296,0,2,4,14,34,534,1534,1534,1534,68,69,'AHAAAA','WXBAAA','AAAAxx' -4229,1297,1,1,9,9,29,229,229,4229,4229,58,59,'RGAAAA','XXBAAA','HHHHxx' -84,1298,0,0,4,4,84,84,84,84,84,168,169,'GDAAAA','YXBAAA','OOOOxx' -2189,1299,1,1,9,9,89,189,189,2189,2189,178,179,'FGAAAA','ZXBAAA','VVVVxx' -7566,1300,0,2,6,6,66,566,1566,2566,7566,132,133,'AFAAAA','AYBAAA','AAAAxx' -707,1301,1,3,7,7,7,707,707,707,707,14,15,'FBAAAA','BYBAAA','HHHHxx' -581,1302,1,1,1,1,81,581,581,581,581,162,163,'JWAAAA','CYBAAA','OOOOxx' -6753,1303,1,1,3,13,53,753,753,1753,6753,106,107,'TZAAAA','DYBAAA','VVVVxx' -8604,1304,0,0,4,4,4,604,604,3604,8604,8,9,'YSAAAA','EYBAAA','AAAAxx' -373,1305,1,1,3,13,73,373,373,373,373,146,147,'JOAAAA','FYBAAA','HHHHxx' -9635,1306,1,3,5,15,35,635,1635,4635,9635,70,71,'PGAAAA','GYBAAA','OOOOxx' -9277,1307,1,1,7,17,77,277,1277,4277,9277,154,155,'VSAAAA','HYBAAA','VVVVxx' -7117,1308,1,1,7,17,17,117,1117,2117,7117,34,35,'TNAAAA','IYBAAA','AAAAxx' -8564,1309,0,0,4,4,64,564,564,3564,8564,128,129,'KRAAAA','JYBAAA','HHHHxx' -1697,1310,1,1,7,17,97,697,1697,1697,1697,194,195,'HNAAAA','KYBAAA','OOOOxx' -7840,1311,0,0,0,0,40,840,1840,2840,7840,80,81,'OPAAAA','LYBAAA','VVVVxx' -3646,1312,0,2,6,6,46,646,1646,3646,3646,92,93,'GKAAAA','MYBAAA','AAAAxx' -368,1313,0,0,8,8,68,368,368,368,368,136,137,'EOAAAA','NYBAAA','HHHHxx' -4797,1314,1,1,7,17,97,797,797,4797,4797,194,195,'NCAAAA','OYBAAA','OOOOxx' -5300,1315,0,0,0,0,0,300,1300,300,5300,0,1,'WVAAAA','PYBAAA','VVVVxx' -7664,1316,0,0,4,4,64,664,1664,2664,7664,128,129,'UIAAAA','QYBAAA','AAAAxx' -1466,1317,0,2,6,6,66,466,1466,1466,1466,132,133,'KEAAAA','RYBAAA','HHHHxx' -2477,1318,1,1,7,17,77,477,477,2477,2477,154,155,'HRAAAA','SYBAAA','OOOOxx' -2036,1319,0,0,6,16,36,36,36,2036,2036,72,73,'IAAAAA','TYBAAA','VVVVxx' -3624,1320,0,0,4,4,24,624,1624,3624,3624,48,49,'KJAAAA','UYBAAA','AAAAxx' -5099,1321,1,3,9,19,99,99,1099,99,5099,198,199,'DOAAAA','VYBAAA','HHHHxx' -1308,1322,0,0,8,8,8,308,1308,1308,1308,16,17,'IYAAAA','WYBAAA','OOOOxx' -3704,1323,0,0,4,4,4,704,1704,3704,3704,8,9,'MMAAAA','XYBAAA','VVVVxx' -2451,1324,1,3,1,11,51,451,451,2451,2451,102,103,'HQAAAA','YYBAAA','AAAAxx' -4898,1325,0,2,8,18,98,898,898,4898,4898,196,197,'KGAAAA','ZYBAAA','HHHHxx' -4959,1326,1,3,9,19,59,959,959,4959,4959,118,119,'TIAAAA','AZBAAA','OOOOxx' -5942,1327,0,2,2,2,42,942,1942,942,5942,84,85,'OUAAAA','BZBAAA','VVVVxx' -2425,1328,1,1,5,5,25,425,425,2425,2425,50,51,'HPAAAA','CZBAAA','AAAAxx' -7760,1329,0,0,0,0,60,760,1760,2760,7760,120,121,'MMAAAA','DZBAAA','HHHHxx' -6294,1330,0,2,4,14,94,294,294,1294,6294,188,189,'CIAAAA','EZBAAA','OOOOxx' -6785,1331,1,1,5,5,85,785,785,1785,6785,170,171,'ZAAAAA','FZBAAA','VVVVxx' -3542,1332,0,2,2,2,42,542,1542,3542,3542,84,85,'GGAAAA','GZBAAA','AAAAxx' -1809,1333,1,1,9,9,9,809,1809,1809,1809,18,19,'PRAAAA','HZBAAA','HHHHxx' -130,1334,0,2,0,10,30,130,130,130,130,60,61,'AFAAAA','IZBAAA','OOOOxx' -8672,1335,0,0,2,12,72,672,672,3672,8672,144,145,'OVAAAA','JZBAAA','VVVVxx' -2125,1336,1,1,5,5,25,125,125,2125,2125,50,51,'TDAAAA','KZBAAA','AAAAxx' -7683,1337,1,3,3,3,83,683,1683,2683,7683,166,167,'NJAAAA','LZBAAA','HHHHxx' -7842,1338,0,2,2,2,42,842,1842,2842,7842,84,85,'QPAAAA','MZBAAA','OOOOxx' -9584,1339,0,0,4,4,84,584,1584,4584,9584,168,169,'QEAAAA','NZBAAA','VVVVxx' -7963,1340,1,3,3,3,63,963,1963,2963,7963,126,127,'HUAAAA','OZBAAA','AAAAxx' -8581,1341,1,1,1,1,81,581,581,3581,8581,162,163,'BSAAAA','PZBAAA','HHHHxx' -2135,1342,1,3,5,15,35,135,135,2135,2135,70,71,'DEAAAA','QZBAAA','OOOOxx' -7352,1343,0,0,2,12,52,352,1352,2352,7352,104,105,'UWAAAA','RZBAAA','VVVVxx' -5789,1344,1,1,9,9,89,789,1789,789,5789,178,179,'ROAAAA','SZBAAA','AAAAxx' -8490,1345,0,2,0,10,90,490,490,3490,8490,180,181,'OOAAAA','TZBAAA','HHHHxx' -2145,1346,1,1,5,5,45,145,145,2145,2145,90,91,'NEAAAA','UZBAAA','OOOOxx' -7021,1347,1,1,1,1,21,21,1021,2021,7021,42,43,'BKAAAA','VZBAAA','VVVVxx' -3736,1348,0,0,6,16,36,736,1736,3736,3736,72,73,'SNAAAA','WZBAAA','AAAAxx' -7396,1349,0,0,6,16,96,396,1396,2396,7396,192,193,'MYAAAA','XZBAAA','HHHHxx' -6334,1350,0,2,4,14,34,334,334,1334,6334,68,69,'QJAAAA','YZBAAA','OOOOxx' -5461,1351,1,1,1,1,61,461,1461,461,5461,122,123,'BCAAAA','ZZBAAA','VVVVxx' -5337,1352,1,1,7,17,37,337,1337,337,5337,74,75,'HXAAAA','AACAAA','AAAAxx' -7440,1353,0,0,0,0,40,440,1440,2440,7440,80,81,'EAAAAA','BACAAA','HHHHxx' -6879,1354,1,3,9,19,79,879,879,1879,6879,158,159,'PEAAAA','CACAAA','OOOOxx' -2432,1355,0,0,2,12,32,432,432,2432,2432,64,65,'OPAAAA','DACAAA','VVVVxx' -8529,1356,1,1,9,9,29,529,529,3529,8529,58,59,'BQAAAA','EACAAA','AAAAxx' -7859,1357,1,3,9,19,59,859,1859,2859,7859,118,119,'HQAAAA','FACAAA','HHHHxx' -15,1358,1,3,5,15,15,15,15,15,15,30,31,'PAAAAA','GACAAA','OOOOxx' -7475,1359,1,3,5,15,75,475,1475,2475,7475,150,151,'NBAAAA','HACAAA','VVVVxx' -717,1360,1,1,7,17,17,717,717,717,717,34,35,'PBAAAA','IACAAA','AAAAxx' -250,1361,0,2,0,10,50,250,250,250,250,100,101,'QJAAAA','JACAAA','HHHHxx' -4700,1362,0,0,0,0,0,700,700,4700,4700,0,1,'UYAAAA','KACAAA','OOOOxx' -7510,1363,0,2,0,10,10,510,1510,2510,7510,20,21,'WCAAAA','LACAAA','VVVVxx' -4562,1364,0,2,2,2,62,562,562,4562,4562,124,125,'MTAAAA','MACAAA','AAAAxx' -8075,1365,1,3,5,15,75,75,75,3075,8075,150,151,'PYAAAA','NACAAA','HHHHxx' -871,1366,1,3,1,11,71,871,871,871,871,142,143,'NHAAAA','OACAAA','OOOOxx' -7161,1367,1,1,1,1,61,161,1161,2161,7161,122,123,'LPAAAA','PACAAA','VVVVxx' -9109,1368,1,1,9,9,9,109,1109,4109,9109,18,19,'JMAAAA','QACAAA','AAAAxx' -8675,1369,1,3,5,15,75,675,675,3675,8675,150,151,'RVAAAA','RACAAA','HHHHxx' -1025,1370,1,1,5,5,25,25,1025,1025,1025,50,51,'LNAAAA','SACAAA','OOOOxx' -4065,1371,1,1,5,5,65,65,65,4065,4065,130,131,'JAAAAA','TACAAA','VVVVxx' -3511,1372,1,3,1,11,11,511,1511,3511,3511,22,23,'BFAAAA','UACAAA','AAAAxx' -9840,1373,0,0,0,0,40,840,1840,4840,9840,80,81,'MOAAAA','VACAAA','HHHHxx' -7495,1374,1,3,5,15,95,495,1495,2495,7495,190,191,'HCAAAA','WACAAA','OOOOxx' -55,1375,1,3,5,15,55,55,55,55,55,110,111,'DCAAAA','XACAAA','VVVVxx' -6151,1376,1,3,1,11,51,151,151,1151,6151,102,103,'PCAAAA','YACAAA','AAAAxx' -2512,1377,0,0,2,12,12,512,512,2512,2512,24,25,'QSAAAA','ZACAAA','HHHHxx' -5881,1378,1,1,1,1,81,881,1881,881,5881,162,163,'FSAAAA','ABCAAA','OOOOxx' -1442,1379,0,2,2,2,42,442,1442,1442,1442,84,85,'MDAAAA','BBCAAA','VVVVxx' -1270,1380,0,2,0,10,70,270,1270,1270,1270,140,141,'WWAAAA','CBCAAA','AAAAxx' -959,1381,1,3,9,19,59,959,959,959,959,118,119,'XKAAAA','DBCAAA','HHHHxx' -8251,1382,1,3,1,11,51,251,251,3251,8251,102,103,'JFAAAA','EBCAAA','OOOOxx' -3051,1383,1,3,1,11,51,51,1051,3051,3051,102,103,'JNAAAA','FBCAAA','VVVVxx' -5052,1384,0,0,2,12,52,52,1052,52,5052,104,105,'IMAAAA','GBCAAA','AAAAxx' -1863,1385,1,3,3,3,63,863,1863,1863,1863,126,127,'RTAAAA','HBCAAA','HHHHxx' -344,1386,0,0,4,4,44,344,344,344,344,88,89,'GNAAAA','IBCAAA','OOOOxx' -3590,1387,0,2,0,10,90,590,1590,3590,3590,180,181,'CIAAAA','JBCAAA','VVVVxx' -4223,1388,1,3,3,3,23,223,223,4223,4223,46,47,'LGAAAA','KBCAAA','AAAAxx' -2284,1389,0,0,4,4,84,284,284,2284,2284,168,169,'WJAAAA','LBCAAA','HHHHxx' -9425,1390,1,1,5,5,25,425,1425,4425,9425,50,51,'NYAAAA','MBCAAA','OOOOxx' -6221,1391,1,1,1,1,21,221,221,1221,6221,42,43,'HFAAAA','NBCAAA','VVVVxx' -195,1392,1,3,5,15,95,195,195,195,195,190,191,'NHAAAA','OBCAAA','AAAAxx' -1517,1393,1,1,7,17,17,517,1517,1517,1517,34,35,'JGAAAA','PBCAAA','HHHHxx' -3791,1394,1,3,1,11,91,791,1791,3791,3791,182,183,'VPAAAA','QBCAAA','OOOOxx' -572,1395,0,0,2,12,72,572,572,572,572,144,145,'AWAAAA','RBCAAA','VVVVxx' -46,1396,0,2,6,6,46,46,46,46,46,92,93,'UBAAAA','SBCAAA','AAAAxx' -9451,1397,1,3,1,11,51,451,1451,4451,9451,102,103,'NZAAAA','TBCAAA','HHHHxx' -3359,1398,1,3,9,19,59,359,1359,3359,3359,118,119,'FZAAAA','UBCAAA','OOOOxx' -8867,1399,1,3,7,7,67,867,867,3867,8867,134,135,'BDAAAA','VBCAAA','VVVVxx' -674,1400,0,2,4,14,74,674,674,674,674,148,149,'YZAAAA','WBCAAA','AAAAxx' -2674,1401,0,2,4,14,74,674,674,2674,2674,148,149,'WYAAAA','XBCAAA','HHHHxx' -6523,1402,1,3,3,3,23,523,523,1523,6523,46,47,'XQAAAA','YBCAAA','OOOOxx' -6210,1403,0,2,0,10,10,210,210,1210,6210,20,21,'WEAAAA','ZBCAAA','VVVVxx' -7564,1404,0,0,4,4,64,564,1564,2564,7564,128,129,'YEAAAA','ACCAAA','AAAAxx' -4776,1405,0,0,6,16,76,776,776,4776,4776,152,153,'SBAAAA','BCCAAA','HHHHxx' -2993,1406,1,1,3,13,93,993,993,2993,2993,186,187,'DLAAAA','CCCAAA','OOOOxx' -2969,1407,1,1,9,9,69,969,969,2969,2969,138,139,'FKAAAA','DCCAAA','VVVVxx' -1762,1408,0,2,2,2,62,762,1762,1762,1762,124,125,'UPAAAA','ECCAAA','AAAAxx' -685,1409,1,1,5,5,85,685,685,685,685,170,171,'JAAAAA','FCCAAA','HHHHxx' -5312,1410,0,0,2,12,12,312,1312,312,5312,24,25,'IWAAAA','GCCAAA','OOOOxx' -3264,1411,0,0,4,4,64,264,1264,3264,3264,128,129,'OVAAAA','HCCAAA','VVVVxx' -7008,1412,0,0,8,8,8,8,1008,2008,7008,16,17,'OJAAAA','ICCAAA','AAAAxx' -5167,1413,1,3,7,7,67,167,1167,167,5167,134,135,'TQAAAA','JCCAAA','HHHHxx' -3060,1414,0,0,0,0,60,60,1060,3060,3060,120,121,'SNAAAA','KCCAAA','OOOOxx' -1752,1415,0,0,2,12,52,752,1752,1752,1752,104,105,'KPAAAA','LCCAAA','VVVVxx' -1016,1416,0,0,6,16,16,16,1016,1016,1016,32,33,'CNAAAA','MCCAAA','AAAAxx' -7365,1417,1,1,5,5,65,365,1365,2365,7365,130,131,'HXAAAA','NCCAAA','HHHHxx' -4358,1418,0,2,8,18,58,358,358,4358,4358,116,117,'QLAAAA','OCCAAA','OOOOxx' -2819,1419,1,3,9,19,19,819,819,2819,2819,38,39,'LEAAAA','PCCAAA','VVVVxx' -6727,1420,1,3,7,7,27,727,727,1727,6727,54,55,'TYAAAA','QCCAAA','AAAAxx' -1459,1421,1,3,9,19,59,459,1459,1459,1459,118,119,'DEAAAA','RCCAAA','HHHHxx' -1708,1422,0,0,8,8,8,708,1708,1708,1708,16,17,'SNAAAA','SCCAAA','OOOOxx' -471,1423,1,3,1,11,71,471,471,471,471,142,143,'DSAAAA','TCCAAA','VVVVxx' -387,1424,1,3,7,7,87,387,387,387,387,174,175,'XOAAAA','UCCAAA','AAAAxx' -1166,1425,0,2,6,6,66,166,1166,1166,1166,132,133,'WSAAAA','VCCAAA','HHHHxx' -2400,1426,0,0,0,0,0,400,400,2400,2400,0,1,'IOAAAA','WCCAAA','OOOOxx' -3584,1427,0,0,4,4,84,584,1584,3584,3584,168,169,'WHAAAA','XCCAAA','VVVVxx' -6423,1428,1,3,3,3,23,423,423,1423,6423,46,47,'BNAAAA','YCCAAA','AAAAxx' -9520,1429,0,0,0,0,20,520,1520,4520,9520,40,41,'ECAAAA','ZCCAAA','HHHHxx' -8080,1430,0,0,0,0,80,80,80,3080,8080,160,161,'UYAAAA','ADCAAA','OOOOxx' -5709,1431,1,1,9,9,9,709,1709,709,5709,18,19,'PLAAAA','BDCAAA','VVVVxx' -1131,1432,1,3,1,11,31,131,1131,1131,1131,62,63,'NRAAAA','CDCAAA','AAAAxx' -8562,1433,0,2,2,2,62,562,562,3562,8562,124,125,'IRAAAA','DDCAAA','HHHHxx' -5766,1434,0,2,6,6,66,766,1766,766,5766,132,133,'UNAAAA','EDCAAA','OOOOxx' -245,1435,1,1,5,5,45,245,245,245,245,90,91,'LJAAAA','FDCAAA','VVVVxx' -9869,1436,1,1,9,9,69,869,1869,4869,9869,138,139,'PPAAAA','GDCAAA','AAAAxx' -3533,1437,1,1,3,13,33,533,1533,3533,3533,66,67,'XFAAAA','HDCAAA','HHHHxx' -5109,1438,1,1,9,9,9,109,1109,109,5109,18,19,'NOAAAA','IDCAAA','OOOOxx' -977,1439,1,1,7,17,77,977,977,977,977,154,155,'PLAAAA','JDCAAA','VVVVxx' -1651,1440,1,3,1,11,51,651,1651,1651,1651,102,103,'NLAAAA','KDCAAA','AAAAxx' -1357,1441,1,1,7,17,57,357,1357,1357,1357,114,115,'FAAAAA','LDCAAA','HHHHxx' -9087,1442,1,3,7,7,87,87,1087,4087,9087,174,175,'NLAAAA','MDCAAA','OOOOxx' -3399,1443,1,3,9,19,99,399,1399,3399,3399,198,199,'TAAAAA','NDCAAA','VVVVxx' -7543,1444,1,3,3,3,43,543,1543,2543,7543,86,87,'DEAAAA','ODCAAA','AAAAxx' -2469,1445,1,1,9,9,69,469,469,2469,2469,138,139,'ZQAAAA','PDCAAA','HHHHxx' -8305,1446,1,1,5,5,5,305,305,3305,8305,10,11,'LHAAAA','QDCAAA','OOOOxx' -3265,1447,1,1,5,5,65,265,1265,3265,3265,130,131,'PVAAAA','RDCAAA','VVVVxx' -9977,1448,1,1,7,17,77,977,1977,4977,9977,154,155,'TTAAAA','SDCAAA','AAAAxx' -3961,1449,1,1,1,1,61,961,1961,3961,3961,122,123,'JWAAAA','TDCAAA','HHHHxx' -4952,1450,0,0,2,12,52,952,952,4952,4952,104,105,'MIAAAA','UDCAAA','OOOOxx' -5173,1451,1,1,3,13,73,173,1173,173,5173,146,147,'ZQAAAA','VDCAAA','VVVVxx' -860,1452,0,0,0,0,60,860,860,860,860,120,121,'CHAAAA','WDCAAA','AAAAxx' -4523,1453,1,3,3,3,23,523,523,4523,4523,46,47,'ZRAAAA','XDCAAA','HHHHxx' -2361,1454,1,1,1,1,61,361,361,2361,2361,122,123,'VMAAAA','YDCAAA','OOOOxx' -7877,1455,1,1,7,17,77,877,1877,2877,7877,154,155,'ZQAAAA','ZDCAAA','VVVVxx' -3422,1456,0,2,2,2,22,422,1422,3422,3422,44,45,'QBAAAA','AECAAA','AAAAxx' -5781,1457,1,1,1,1,81,781,1781,781,5781,162,163,'JOAAAA','BECAAA','HHHHxx' -4752,1458,0,0,2,12,52,752,752,4752,4752,104,105,'UAAAAA','CECAAA','OOOOxx' -1786,1459,0,2,6,6,86,786,1786,1786,1786,172,173,'SQAAAA','DECAAA','VVVVxx' -1892,1460,0,0,2,12,92,892,1892,1892,1892,184,185,'UUAAAA','EECAAA','AAAAxx' -6389,1461,1,1,9,9,89,389,389,1389,6389,178,179,'TLAAAA','FECAAA','HHHHxx' -8644,1462,0,0,4,4,44,644,644,3644,8644,88,89,'MUAAAA','GECAAA','OOOOxx' -9056,1463,0,0,6,16,56,56,1056,4056,9056,112,113,'IKAAAA','HECAAA','VVVVxx' -1423,1464,1,3,3,3,23,423,1423,1423,1423,46,47,'TCAAAA','IECAAA','AAAAxx' -4901,1465,1,1,1,1,1,901,901,4901,4901,2,3,'NGAAAA','JECAAA','HHHHxx' -3859,1466,1,3,9,19,59,859,1859,3859,3859,118,119,'LSAAAA','KECAAA','OOOOxx' -2324,1467,0,0,4,4,24,324,324,2324,2324,48,49,'KLAAAA','LECAAA','VVVVxx' -8101,1468,1,1,1,1,1,101,101,3101,8101,2,3,'PZAAAA','MECAAA','AAAAxx' -8016,1469,0,0,6,16,16,16,16,3016,8016,32,33,'IWAAAA','NECAAA','HHHHxx' -5826,1470,0,2,6,6,26,826,1826,826,5826,52,53,'CQAAAA','OECAAA','OOOOxx' -8266,1471,0,2,6,6,66,266,266,3266,8266,132,133,'YFAAAA','PECAAA','VVVVxx' -7558,1472,0,2,8,18,58,558,1558,2558,7558,116,117,'SEAAAA','QECAAA','AAAAxx' -6976,1473,0,0,6,16,76,976,976,1976,6976,152,153,'IIAAAA','RECAAA','HHHHxx' -222,1474,0,2,2,2,22,222,222,222,222,44,45,'OIAAAA','SECAAA','OOOOxx' -1624,1475,0,0,4,4,24,624,1624,1624,1624,48,49,'MKAAAA','TECAAA','VVVVxx' -1250,1476,0,2,0,10,50,250,1250,1250,1250,100,101,'CWAAAA','UECAAA','AAAAxx' -1621,1477,1,1,1,1,21,621,1621,1621,1621,42,43,'JKAAAA','VECAAA','HHHHxx' -2350,1478,0,2,0,10,50,350,350,2350,2350,100,101,'KMAAAA','WECAAA','OOOOxx' -5239,1479,1,3,9,19,39,239,1239,239,5239,78,79,'NTAAAA','XECAAA','VVVVxx' -6681,1480,1,1,1,1,81,681,681,1681,6681,162,163,'ZWAAAA','YECAAA','AAAAxx' -4983,1481,1,3,3,3,83,983,983,4983,4983,166,167,'RJAAAA','ZECAAA','HHHHxx' -7149,1482,1,1,9,9,49,149,1149,2149,7149,98,99,'ZOAAAA','AFCAAA','OOOOxx' -3502,1483,0,2,2,2,2,502,1502,3502,3502,4,5,'SEAAAA','BFCAAA','VVVVxx' -3133,1484,1,1,3,13,33,133,1133,3133,3133,66,67,'NQAAAA','CFCAAA','AAAAxx' -8342,1485,0,2,2,2,42,342,342,3342,8342,84,85,'WIAAAA','DFCAAA','HHHHxx' -3041,1486,1,1,1,1,41,41,1041,3041,3041,82,83,'ZMAAAA','EFCAAA','OOOOxx' -5383,1487,1,3,3,3,83,383,1383,383,5383,166,167,'BZAAAA','FFCAAA','VVVVxx' -3916,1488,0,0,6,16,16,916,1916,3916,3916,32,33,'QUAAAA','GFCAAA','AAAAxx' -1438,1489,0,2,8,18,38,438,1438,1438,1438,76,77,'IDAAAA','HFCAAA','HHHHxx' -9408,1490,0,0,8,8,8,408,1408,4408,9408,16,17,'WXAAAA','IFCAAA','OOOOxx' -5783,1491,1,3,3,3,83,783,1783,783,5783,166,167,'LOAAAA','JFCAAA','VVVVxx' -683,1492,1,3,3,3,83,683,683,683,683,166,167,'HAAAAA','KFCAAA','AAAAxx' -9381,1493,1,1,1,1,81,381,1381,4381,9381,162,163,'VWAAAA','LFCAAA','HHHHxx' -5676,1494,0,0,6,16,76,676,1676,676,5676,152,153,'IKAAAA','MFCAAA','OOOOxx' -3224,1495,0,0,4,4,24,224,1224,3224,3224,48,49,'AUAAAA','NFCAAA','VVVVxx' -8332,1496,0,0,2,12,32,332,332,3332,8332,64,65,'MIAAAA','OFCAAA','AAAAxx' -3372,1497,0,0,2,12,72,372,1372,3372,3372,144,145,'SZAAAA','PFCAAA','HHHHxx' -7436,1498,0,0,6,16,36,436,1436,2436,7436,72,73,'AAAAAA','QFCAAA','OOOOxx' -5010,1499,0,2,0,10,10,10,1010,10,5010,20,21,'SKAAAA','RFCAAA','VVVVxx' -7256,1500,0,0,6,16,56,256,1256,2256,7256,112,113,'CTAAAA','SFCAAA','AAAAxx' -961,1501,1,1,1,1,61,961,961,961,961,122,123,'ZKAAAA','TFCAAA','HHHHxx' -4182,1502,0,2,2,2,82,182,182,4182,4182,164,165,'WEAAAA','UFCAAA','OOOOxx' -639,1503,1,3,9,19,39,639,639,639,639,78,79,'PYAAAA','VFCAAA','VVVVxx' -8836,1504,0,0,6,16,36,836,836,3836,8836,72,73,'WBAAAA','WFCAAA','AAAAxx' -8705,1505,1,1,5,5,5,705,705,3705,8705,10,11,'VWAAAA','XFCAAA','HHHHxx' -32,1506,0,0,2,12,32,32,32,32,32,64,65,'GBAAAA','YFCAAA','OOOOxx' -7913,1507,1,1,3,13,13,913,1913,2913,7913,26,27,'JSAAAA','ZFCAAA','VVVVxx' -229,1508,1,1,9,9,29,229,229,229,229,58,59,'VIAAAA','AGCAAA','AAAAxx' -2393,1509,1,1,3,13,93,393,393,2393,2393,186,187,'BOAAAA','BGCAAA','HHHHxx' -2815,1510,1,3,5,15,15,815,815,2815,2815,30,31,'HEAAAA','CGCAAA','OOOOxx' -4858,1511,0,2,8,18,58,858,858,4858,4858,116,117,'WEAAAA','DGCAAA','VVVVxx' -6283,1512,1,3,3,3,83,283,283,1283,6283,166,167,'RHAAAA','EGCAAA','AAAAxx' -4147,1513,1,3,7,7,47,147,147,4147,4147,94,95,'NDAAAA','FGCAAA','HHHHxx' -6801,1514,1,1,1,1,1,801,801,1801,6801,2,3,'PBAAAA','GGCAAA','OOOOxx' -1011,1515,1,3,1,11,11,11,1011,1011,1011,22,23,'XMAAAA','HGCAAA','VVVVxx' -2527,1516,1,3,7,7,27,527,527,2527,2527,54,55,'FTAAAA','IGCAAA','AAAAxx' -381,1517,1,1,1,1,81,381,381,381,381,162,163,'ROAAAA','JGCAAA','HHHHxx' -3366,1518,0,2,6,6,66,366,1366,3366,3366,132,133,'MZAAAA','KGCAAA','OOOOxx' -9636,1519,0,0,6,16,36,636,1636,4636,9636,72,73,'QGAAAA','LGCAAA','VVVVxx' -2239,1520,1,3,9,19,39,239,239,2239,2239,78,79,'DIAAAA','MGCAAA','AAAAxx' -5911,1521,1,3,1,11,11,911,1911,911,5911,22,23,'JTAAAA','NGCAAA','HHHHxx' -449,1522,1,1,9,9,49,449,449,449,449,98,99,'HRAAAA','OGCAAA','OOOOxx' -5118,1523,0,2,8,18,18,118,1118,118,5118,36,37,'WOAAAA','PGCAAA','VVVVxx' -7684,1524,0,0,4,4,84,684,1684,2684,7684,168,169,'OJAAAA','QGCAAA','AAAAxx' -804,1525,0,0,4,4,4,804,804,804,804,8,9,'YEAAAA','RGCAAA','HHHHxx' -8378,1526,0,2,8,18,78,378,378,3378,8378,156,157,'GKAAAA','SGCAAA','OOOOxx' -9855,1527,1,3,5,15,55,855,1855,4855,9855,110,111,'BPAAAA','TGCAAA','VVVVxx' -1995,1528,1,3,5,15,95,995,1995,1995,1995,190,191,'TYAAAA','UGCAAA','AAAAxx' -1979,1529,1,3,9,19,79,979,1979,1979,1979,158,159,'DYAAAA','VGCAAA','HHHHxx' -4510,1530,0,2,0,10,10,510,510,4510,4510,20,21,'MRAAAA','WGCAAA','OOOOxx' -3792,1531,0,0,2,12,92,792,1792,3792,3792,184,185,'WPAAAA','XGCAAA','VVVVxx' -3541,1532,1,1,1,1,41,541,1541,3541,3541,82,83,'FGAAAA','YGCAAA','AAAAxx' -8847,1533,1,3,7,7,47,847,847,3847,8847,94,95,'HCAAAA','ZGCAAA','HHHHxx' -1336,1534,0,0,6,16,36,336,1336,1336,1336,72,73,'KZAAAA','AHCAAA','OOOOxx' -6780,1535,0,0,0,0,80,780,780,1780,6780,160,161,'UAAAAA','BHCAAA','VVVVxx' -8711,1536,1,3,1,11,11,711,711,3711,8711,22,23,'BXAAAA','CHCAAA','AAAAxx' -7839,1537,1,3,9,19,39,839,1839,2839,7839,78,79,'NPAAAA','DHCAAA','HHHHxx' -677,1538,1,1,7,17,77,677,677,677,677,154,155,'BAAAAA','EHCAAA','OOOOxx' -1574,1539,0,2,4,14,74,574,1574,1574,1574,148,149,'OIAAAA','FHCAAA','VVVVxx' -2905,1540,1,1,5,5,5,905,905,2905,2905,10,11,'THAAAA','GHCAAA','AAAAxx' -1879,1541,1,3,9,19,79,879,1879,1879,1879,158,159,'HUAAAA','HHCAAA','HHHHxx' -7820,1542,0,0,0,0,20,820,1820,2820,7820,40,41,'UOAAAA','IHCAAA','OOOOxx' -4308,1543,0,0,8,8,8,308,308,4308,4308,16,17,'SJAAAA','JHCAAA','VVVVxx' -4474,1544,0,2,4,14,74,474,474,4474,4474,148,149,'CQAAAA','KHCAAA','AAAAxx' -6985,1545,1,1,5,5,85,985,985,1985,6985,170,171,'RIAAAA','LHCAAA','HHHHxx' -6929,1546,1,1,9,9,29,929,929,1929,6929,58,59,'NGAAAA','MHCAAA','OOOOxx' -777,1547,1,1,7,17,77,777,777,777,777,154,155,'XDAAAA','NHCAAA','VVVVxx' -8271,1548,1,3,1,11,71,271,271,3271,8271,142,143,'DGAAAA','OHCAAA','AAAAxx' -2389,1549,1,1,9,9,89,389,389,2389,2389,178,179,'XNAAAA','PHCAAA','HHHHxx' -946,1550,0,2,6,6,46,946,946,946,946,92,93,'KKAAAA','QHCAAA','OOOOxx' -9682,1551,0,2,2,2,82,682,1682,4682,9682,164,165,'KIAAAA','RHCAAA','VVVVxx' -8722,1552,0,2,2,2,22,722,722,3722,8722,44,45,'MXAAAA','SHCAAA','AAAAxx' -470,1553,0,2,0,10,70,470,470,470,470,140,141,'CSAAAA','THCAAA','HHHHxx' -7425,1554,1,1,5,5,25,425,1425,2425,7425,50,51,'PZAAAA','UHCAAA','OOOOxx' -2372,1555,0,0,2,12,72,372,372,2372,2372,144,145,'GNAAAA','VHCAAA','VVVVxx' -508,1556,0,0,8,8,8,508,508,508,508,16,17,'OTAAAA','WHCAAA','AAAAxx' -163,1557,1,3,3,3,63,163,163,163,163,126,127,'HGAAAA','XHCAAA','HHHHxx' -6579,1558,1,3,9,19,79,579,579,1579,6579,158,159,'BTAAAA','YHCAAA','OOOOxx' -2355,1559,1,3,5,15,55,355,355,2355,2355,110,111,'PMAAAA','ZHCAAA','VVVVxx' -70,1560,0,2,0,10,70,70,70,70,70,140,141,'SCAAAA','AICAAA','AAAAxx' -651,1561,1,3,1,11,51,651,651,651,651,102,103,'BZAAAA','BICAAA','HHHHxx' -4436,1562,0,0,6,16,36,436,436,4436,4436,72,73,'QOAAAA','CICAAA','OOOOxx' -4240,1563,0,0,0,0,40,240,240,4240,4240,80,81,'CHAAAA','DICAAA','VVVVxx' -2722,1564,0,2,2,2,22,722,722,2722,2722,44,45,'SAAAAA','EICAAA','AAAAxx' -8937,1565,1,1,7,17,37,937,937,3937,8937,74,75,'TFAAAA','FICAAA','HHHHxx' -8364,1566,0,0,4,4,64,364,364,3364,8364,128,129,'SJAAAA','GICAAA','OOOOxx' -8317,1567,1,1,7,17,17,317,317,3317,8317,34,35,'XHAAAA','HICAAA','VVVVxx' -8872,1568,0,0,2,12,72,872,872,3872,8872,144,145,'GDAAAA','IICAAA','AAAAxx' -5512,1569,0,0,2,12,12,512,1512,512,5512,24,25,'AEAAAA','JICAAA','HHHHxx' -6651,1570,1,3,1,11,51,651,651,1651,6651,102,103,'VVAAAA','KICAAA','OOOOxx' -5976,1571,0,0,6,16,76,976,1976,976,5976,152,153,'WVAAAA','LICAAA','VVVVxx' -3301,1572,1,1,1,1,1,301,1301,3301,3301,2,3,'ZWAAAA','MICAAA','AAAAxx' -6784,1573,0,0,4,4,84,784,784,1784,6784,168,169,'YAAAAA','NICAAA','HHHHxx' -573,1574,1,1,3,13,73,573,573,573,573,146,147,'BWAAAA','OICAAA','OOOOxx' -3015,1575,1,3,5,15,15,15,1015,3015,3015,30,31,'ZLAAAA','PICAAA','VVVVxx' -8245,1576,1,1,5,5,45,245,245,3245,8245,90,91,'DFAAAA','QICAAA','AAAAxx' -5251,1577,1,3,1,11,51,251,1251,251,5251,102,103,'ZTAAAA','RICAAA','HHHHxx' -2281,1578,1,1,1,1,81,281,281,2281,2281,162,163,'TJAAAA','SICAAA','OOOOxx' -518,1579,0,2,8,18,18,518,518,518,518,36,37,'YTAAAA','TICAAA','VVVVxx' -9839,1580,1,3,9,19,39,839,1839,4839,9839,78,79,'LOAAAA','UICAAA','AAAAxx' -4526,1581,0,2,6,6,26,526,526,4526,4526,52,53,'CSAAAA','VICAAA','HHHHxx' -1261,1582,1,1,1,1,61,261,1261,1261,1261,122,123,'NWAAAA','WICAAA','OOOOxx' -4259,1583,1,3,9,19,59,259,259,4259,4259,118,119,'VHAAAA','XICAAA','VVVVxx' -9098,1584,0,2,8,18,98,98,1098,4098,9098,196,197,'YLAAAA','YICAAA','AAAAxx' -6037,1585,1,1,7,17,37,37,37,1037,6037,74,75,'FYAAAA','ZICAAA','HHHHxx' -4284,1586,0,0,4,4,84,284,284,4284,4284,168,169,'UIAAAA','AJCAAA','OOOOxx' -3267,1587,1,3,7,7,67,267,1267,3267,3267,134,135,'RVAAAA','BJCAAA','VVVVxx' -5908,1588,0,0,8,8,8,908,1908,908,5908,16,17,'GTAAAA','CJCAAA','AAAAxx' -1549,1589,1,1,9,9,49,549,1549,1549,1549,98,99,'PHAAAA','DJCAAA','HHHHxx' -8736,1590,0,0,6,16,36,736,736,3736,8736,72,73,'AYAAAA','EJCAAA','OOOOxx' -2008,1591,0,0,8,8,8,8,8,2008,2008,16,17,'GZAAAA','FJCAAA','VVVVxx' -548,1592,0,0,8,8,48,548,548,548,548,96,97,'CVAAAA','GJCAAA','AAAAxx' -8846,1593,0,2,6,6,46,846,846,3846,8846,92,93,'GCAAAA','HJCAAA','HHHHxx' -8374,1594,0,2,4,14,74,374,374,3374,8374,148,149,'CKAAAA','IJCAAA','OOOOxx' -7986,1595,0,2,6,6,86,986,1986,2986,7986,172,173,'EVAAAA','JJCAAA','VVVVxx' -6819,1596,1,3,9,19,19,819,819,1819,6819,38,39,'HCAAAA','KJCAAA','AAAAxx' -4418,1597,0,2,8,18,18,418,418,4418,4418,36,37,'YNAAAA','LJCAAA','HHHHxx' -833,1598,1,1,3,13,33,833,833,833,833,66,67,'BGAAAA','MJCAAA','OOOOxx' -4416,1599,0,0,6,16,16,416,416,4416,4416,32,33,'WNAAAA','NJCAAA','VVVVxx' -4902,1600,0,2,2,2,2,902,902,4902,4902,4,5,'OGAAAA','OJCAAA','AAAAxx' -6828,1601,0,0,8,8,28,828,828,1828,6828,56,57,'QCAAAA','PJCAAA','HHHHxx' -1118,1602,0,2,8,18,18,118,1118,1118,1118,36,37,'ARAAAA','QJCAAA','OOOOxx' -9993,1603,1,1,3,13,93,993,1993,4993,9993,186,187,'JUAAAA','RJCAAA','VVVVxx' -1430,1604,0,2,0,10,30,430,1430,1430,1430,60,61,'ADAAAA','SJCAAA','AAAAxx' -5670,1605,0,2,0,10,70,670,1670,670,5670,140,141,'CKAAAA','TJCAAA','HHHHxx' -5424,1606,0,0,4,4,24,424,1424,424,5424,48,49,'QAAAAA','UJCAAA','OOOOxx' -5561,1607,1,1,1,1,61,561,1561,561,5561,122,123,'XFAAAA','VJCAAA','VVVVxx' -2027,1608,1,3,7,7,27,27,27,2027,2027,54,55,'ZZAAAA','WJCAAA','AAAAxx' -6924,1609,0,0,4,4,24,924,924,1924,6924,48,49,'IGAAAA','XJCAAA','HHHHxx' -5946,1610,0,2,6,6,46,946,1946,946,5946,92,93,'SUAAAA','YJCAAA','OOOOxx' -4294,1611,0,2,4,14,94,294,294,4294,4294,188,189,'EJAAAA','ZJCAAA','VVVVxx' -2936,1612,0,0,6,16,36,936,936,2936,2936,72,73,'YIAAAA','AKCAAA','AAAAxx' -3855,1613,1,3,5,15,55,855,1855,3855,3855,110,111,'HSAAAA','BKCAAA','HHHHxx' -455,1614,1,3,5,15,55,455,455,455,455,110,111,'NRAAAA','CKCAAA','OOOOxx' -2918,1615,0,2,8,18,18,918,918,2918,2918,36,37,'GIAAAA','DKCAAA','VVVVxx' -448,1616,0,0,8,8,48,448,448,448,448,96,97,'GRAAAA','EKCAAA','AAAAxx' -2149,1617,1,1,9,9,49,149,149,2149,2149,98,99,'REAAAA','FKCAAA','HHHHxx' -8890,1618,0,2,0,10,90,890,890,3890,8890,180,181,'YDAAAA','GKCAAA','OOOOxx' -8919,1619,1,3,9,19,19,919,919,3919,8919,38,39,'BFAAAA','HKCAAA','VVVVxx' -4957,1620,1,1,7,17,57,957,957,4957,4957,114,115,'RIAAAA','IKCAAA','AAAAxx' -4,1621,0,0,4,4,4,4,4,4,4,8,9,'EAAAAA','JKCAAA','HHHHxx' -4837,1622,1,1,7,17,37,837,837,4837,4837,74,75,'BEAAAA','KKCAAA','OOOOxx' -3976,1623,0,0,6,16,76,976,1976,3976,3976,152,153,'YWAAAA','LKCAAA','VVVVxx' -9459,1624,1,3,9,19,59,459,1459,4459,9459,118,119,'VZAAAA','MKCAAA','AAAAxx' -7097,1625,1,1,7,17,97,97,1097,2097,7097,194,195,'ZMAAAA','NKCAAA','HHHHxx' -9226,1626,0,2,6,6,26,226,1226,4226,9226,52,53,'WQAAAA','OKCAAA','OOOOxx' -5803,1627,1,3,3,3,3,803,1803,803,5803,6,7,'FPAAAA','PKCAAA','VVVVxx' -21,1628,1,1,1,1,21,21,21,21,21,42,43,'VAAAAA','QKCAAA','AAAAxx' -5275,1629,1,3,5,15,75,275,1275,275,5275,150,151,'XUAAAA','RKCAAA','HHHHxx' -3488,1630,0,0,8,8,88,488,1488,3488,3488,176,177,'EEAAAA','SKCAAA','OOOOxx' -1595,1631,1,3,5,15,95,595,1595,1595,1595,190,191,'JJAAAA','TKCAAA','VVVVxx' -5212,1632,0,0,2,12,12,212,1212,212,5212,24,25,'MSAAAA','UKCAAA','AAAAxx' -6574,1633,0,2,4,14,74,574,574,1574,6574,148,149,'WSAAAA','VKCAAA','HHHHxx' -7524,1634,0,0,4,4,24,524,1524,2524,7524,48,49,'KDAAAA','WKCAAA','OOOOxx' -6100,1635,0,0,0,0,0,100,100,1100,6100,0,1,'QAAAAA','XKCAAA','VVVVxx' -1198,1636,0,2,8,18,98,198,1198,1198,1198,196,197,'CUAAAA','YKCAAA','AAAAxx' -7345,1637,1,1,5,5,45,345,1345,2345,7345,90,91,'NWAAAA','ZKCAAA','HHHHxx' -5020,1638,0,0,0,0,20,20,1020,20,5020,40,41,'CLAAAA','ALCAAA','OOOOxx' -6925,1639,1,1,5,5,25,925,925,1925,6925,50,51,'JGAAAA','BLCAAA','VVVVxx' -8915,1640,1,3,5,15,15,915,915,3915,8915,30,31,'XEAAAA','CLCAAA','AAAAxx' -3088,1641,0,0,8,8,88,88,1088,3088,3088,176,177,'UOAAAA','DLCAAA','HHHHxx' -4828,1642,0,0,8,8,28,828,828,4828,4828,56,57,'SDAAAA','ELCAAA','OOOOxx' -7276,1643,0,0,6,16,76,276,1276,2276,7276,152,153,'WTAAAA','FLCAAA','VVVVxx' -299,1644,1,3,9,19,99,299,299,299,299,198,199,'NLAAAA','GLCAAA','AAAAxx' -76,1645,0,0,6,16,76,76,76,76,76,152,153,'YCAAAA','HLCAAA','HHHHxx' -8458,1646,0,2,8,18,58,458,458,3458,8458,116,117,'INAAAA','ILCAAA','OOOOxx' -7207,1647,1,3,7,7,7,207,1207,2207,7207,14,15,'FRAAAA','JLCAAA','VVVVxx' -5585,1648,1,1,5,5,85,585,1585,585,5585,170,171,'VGAAAA','KLCAAA','AAAAxx' -3234,1649,0,2,4,14,34,234,1234,3234,3234,68,69,'KUAAAA','LLCAAA','HHHHxx' -8001,1650,1,1,1,1,1,1,1,3001,8001,2,3,'TVAAAA','MLCAAA','OOOOxx' -1319,1651,1,3,9,19,19,319,1319,1319,1319,38,39,'TYAAAA','NLCAAA','VVVVxx' -6342,1652,0,2,2,2,42,342,342,1342,6342,84,85,'YJAAAA','OLCAAA','AAAAxx' -9199,1653,1,3,9,19,99,199,1199,4199,9199,198,199,'VPAAAA','PLCAAA','HHHHxx' -5696,1654,0,0,6,16,96,696,1696,696,5696,192,193,'CLAAAA','QLCAAA','OOOOxx' -2562,1655,0,2,2,2,62,562,562,2562,2562,124,125,'OUAAAA','RLCAAA','VVVVxx' -4226,1656,0,2,6,6,26,226,226,4226,4226,52,53,'OGAAAA','SLCAAA','AAAAxx' -1184,1657,0,0,4,4,84,184,1184,1184,1184,168,169,'OTAAAA','TLCAAA','HHHHxx' -5807,1658,1,3,7,7,7,807,1807,807,5807,14,15,'JPAAAA','ULCAAA','OOOOxx' -1890,1659,0,2,0,10,90,890,1890,1890,1890,180,181,'SUAAAA','VLCAAA','VVVVxx' -451,1660,1,3,1,11,51,451,451,451,451,102,103,'JRAAAA','WLCAAA','AAAAxx' -1049,1661,1,1,9,9,49,49,1049,1049,1049,98,99,'JOAAAA','XLCAAA','HHHHxx' -5272,1662,0,0,2,12,72,272,1272,272,5272,144,145,'UUAAAA','YLCAAA','OOOOxx' -4588,1663,0,0,8,8,88,588,588,4588,4588,176,177,'MUAAAA','ZLCAAA','VVVVxx' -5213,1664,1,1,3,13,13,213,1213,213,5213,26,27,'NSAAAA','AMCAAA','AAAAxx' -9543,1665,1,3,3,3,43,543,1543,4543,9543,86,87,'BDAAAA','BMCAAA','HHHHxx' -6318,1666,0,2,8,18,18,318,318,1318,6318,36,37,'AJAAAA','CMCAAA','OOOOxx' -7992,1667,0,0,2,12,92,992,1992,2992,7992,184,185,'KVAAAA','DMCAAA','VVVVxx' -4619,1668,1,3,9,19,19,619,619,4619,4619,38,39,'RVAAAA','EMCAAA','AAAAxx' -7189,1669,1,1,9,9,89,189,1189,2189,7189,178,179,'NQAAAA','FMCAAA','HHHHxx' -2178,1670,0,2,8,18,78,178,178,2178,2178,156,157,'UFAAAA','GMCAAA','OOOOxx' -4928,1671,0,0,8,8,28,928,928,4928,4928,56,57,'OHAAAA','HMCAAA','VVVVxx' -3966,1672,0,2,6,6,66,966,1966,3966,3966,132,133,'OWAAAA','IMCAAA','AAAAxx' -9790,1673,0,2,0,10,90,790,1790,4790,9790,180,181,'OMAAAA','JMCAAA','HHHHxx' -9150,1674,0,2,0,10,50,150,1150,4150,9150,100,101,'YNAAAA','KMCAAA','OOOOxx' -313,1675,1,1,3,13,13,313,313,313,313,26,27,'BMAAAA','LMCAAA','VVVVxx' -1614,1676,0,2,4,14,14,614,1614,1614,1614,28,29,'CKAAAA','MMCAAA','AAAAxx' -1581,1677,1,1,1,1,81,581,1581,1581,1581,162,163,'VIAAAA','NMCAAA','HHHHxx' -3674,1678,0,2,4,14,74,674,1674,3674,3674,148,149,'ILAAAA','OMCAAA','OOOOxx' -3444,1679,0,0,4,4,44,444,1444,3444,3444,88,89,'MCAAAA','PMCAAA','VVVVxx' -1050,1680,0,2,0,10,50,50,1050,1050,1050,100,101,'KOAAAA','QMCAAA','AAAAxx' -8241,1681,1,1,1,1,41,241,241,3241,8241,82,83,'ZEAAAA','RMCAAA','HHHHxx' -3382,1682,0,2,2,2,82,382,1382,3382,3382,164,165,'CAAAAA','SMCAAA','OOOOxx' -7105,1683,1,1,5,5,5,105,1105,2105,7105,10,11,'HNAAAA','TMCAAA','VVVVxx' -2957,1684,1,1,7,17,57,957,957,2957,2957,114,115,'TJAAAA','UMCAAA','AAAAxx' -6162,1685,0,2,2,2,62,162,162,1162,6162,124,125,'ADAAAA','VMCAAA','HHHHxx' -5150,1686,0,2,0,10,50,150,1150,150,5150,100,101,'CQAAAA','WMCAAA','OOOOxx' -2622,1687,0,2,2,2,22,622,622,2622,2622,44,45,'WWAAAA','XMCAAA','VVVVxx' -2240,1688,0,0,0,0,40,240,240,2240,2240,80,81,'EIAAAA','YMCAAA','AAAAxx' -8880,1689,0,0,0,0,80,880,880,3880,8880,160,161,'ODAAAA','ZMCAAA','HHHHxx' -9250,1690,0,2,0,10,50,250,1250,4250,9250,100,101,'URAAAA','ANCAAA','OOOOxx' -7010,1691,0,2,0,10,10,10,1010,2010,7010,20,21,'QJAAAA','BNCAAA','VVVVxx' -1098,1692,0,2,8,18,98,98,1098,1098,1098,196,197,'GQAAAA','CNCAAA','AAAAxx' -648,1693,0,0,8,8,48,648,648,648,648,96,97,'YYAAAA','DNCAAA','HHHHxx' -5536,1694,0,0,6,16,36,536,1536,536,5536,72,73,'YEAAAA','ENCAAA','OOOOxx' -7858,1695,0,2,8,18,58,858,1858,2858,7858,116,117,'GQAAAA','FNCAAA','VVVVxx' -7053,1696,1,1,3,13,53,53,1053,2053,7053,106,107,'HLAAAA','GNCAAA','AAAAxx' -8681,1697,1,1,1,1,81,681,681,3681,8681,162,163,'XVAAAA','HNCAAA','HHHHxx' -8832,1698,0,0,2,12,32,832,832,3832,8832,64,65,'SBAAAA','INCAAA','OOOOxx' -6836,1699,0,0,6,16,36,836,836,1836,6836,72,73,'YCAAAA','JNCAAA','VVVVxx' -4856,1700,0,0,6,16,56,856,856,4856,4856,112,113,'UEAAAA','KNCAAA','AAAAxx' -345,1701,1,1,5,5,45,345,345,345,345,90,91,'HNAAAA','LNCAAA','HHHHxx' -6559,1702,1,3,9,19,59,559,559,1559,6559,118,119,'HSAAAA','MNCAAA','OOOOxx' -3017,1703,1,1,7,17,17,17,1017,3017,3017,34,35,'BMAAAA','NNCAAA','VVVVxx' -4176,1704,0,0,6,16,76,176,176,4176,4176,152,153,'QEAAAA','ONCAAA','AAAAxx' -2839,1705,1,3,9,19,39,839,839,2839,2839,78,79,'FFAAAA','PNCAAA','HHHHxx' -6065,1706,1,1,5,5,65,65,65,1065,6065,130,131,'HZAAAA','QNCAAA','OOOOxx' -7360,1707,0,0,0,0,60,360,1360,2360,7360,120,121,'CXAAAA','RNCAAA','VVVVxx' -9527,1708,1,3,7,7,27,527,1527,4527,9527,54,55,'LCAAAA','SNCAAA','AAAAxx' -8849,1709,1,1,9,9,49,849,849,3849,8849,98,99,'JCAAAA','TNCAAA','HHHHxx' -7274,1710,0,2,4,14,74,274,1274,2274,7274,148,149,'UTAAAA','UNCAAA','OOOOxx' -4368,1711,0,0,8,8,68,368,368,4368,4368,136,137,'AMAAAA','VNCAAA','VVVVxx' -2488,1712,0,0,8,8,88,488,488,2488,2488,176,177,'SRAAAA','WNCAAA','AAAAxx' -4674,1713,0,2,4,14,74,674,674,4674,4674,148,149,'UXAAAA','XNCAAA','HHHHxx' -365,1714,1,1,5,5,65,365,365,365,365,130,131,'BOAAAA','YNCAAA','OOOOxx' -5897,1715,1,1,7,17,97,897,1897,897,5897,194,195,'VSAAAA','ZNCAAA','VVVVxx' -8918,1716,0,2,8,18,18,918,918,3918,8918,36,37,'AFAAAA','AOCAAA','AAAAxx' -1988,1717,0,0,8,8,88,988,1988,1988,1988,176,177,'MYAAAA','BOCAAA','HHHHxx' -1210,1718,0,2,0,10,10,210,1210,1210,1210,20,21,'OUAAAA','COCAAA','OOOOxx' -2945,1719,1,1,5,5,45,945,945,2945,2945,90,91,'HJAAAA','DOCAAA','VVVVxx' -555,1720,1,3,5,15,55,555,555,555,555,110,111,'JVAAAA','EOCAAA','AAAAxx' -9615,1721,1,3,5,15,15,615,1615,4615,9615,30,31,'VFAAAA','FOCAAA','HHHHxx' -9939,1722,1,3,9,19,39,939,1939,4939,9939,78,79,'HSAAAA','GOCAAA','OOOOxx' -1216,1723,0,0,6,16,16,216,1216,1216,1216,32,33,'UUAAAA','HOCAAA','VVVVxx' -745,1724,1,1,5,5,45,745,745,745,745,90,91,'RCAAAA','IOCAAA','AAAAxx' -3326,1725,0,2,6,6,26,326,1326,3326,3326,52,53,'YXAAAA','JOCAAA','HHHHxx' -953,1726,1,1,3,13,53,953,953,953,953,106,107,'RKAAAA','KOCAAA','OOOOxx' -444,1727,0,0,4,4,44,444,444,444,444,88,89,'CRAAAA','LOCAAA','VVVVxx' -280,1728,0,0,0,0,80,280,280,280,280,160,161,'UKAAAA','MOCAAA','AAAAxx' -3707,1729,1,3,7,7,7,707,1707,3707,3707,14,15,'PMAAAA','NOCAAA','HHHHxx' -1351,1730,1,3,1,11,51,351,1351,1351,1351,102,103,'ZZAAAA','OOCAAA','OOOOxx' -1280,1731,0,0,0,0,80,280,1280,1280,1280,160,161,'GXAAAA','POCAAA','VVVVxx' -628,1732,0,0,8,8,28,628,628,628,628,56,57,'EYAAAA','QOCAAA','AAAAxx' -6198,1733,0,2,8,18,98,198,198,1198,6198,196,197,'KEAAAA','ROCAAA','HHHHxx' -1957,1734,1,1,7,17,57,957,1957,1957,1957,114,115,'HXAAAA','SOCAAA','OOOOxx' -9241,1735,1,1,1,1,41,241,1241,4241,9241,82,83,'LRAAAA','TOCAAA','VVVVxx' -303,1736,1,3,3,3,3,303,303,303,303,6,7,'RLAAAA','UOCAAA','AAAAxx' -1945,1737,1,1,5,5,45,945,1945,1945,1945,90,91,'VWAAAA','VOCAAA','HHHHxx' -3634,1738,0,2,4,14,34,634,1634,3634,3634,68,69,'UJAAAA','WOCAAA','OOOOxx' -4768,1739,0,0,8,8,68,768,768,4768,4768,136,137,'KBAAAA','XOCAAA','VVVVxx' -9262,1740,0,2,2,2,62,262,1262,4262,9262,124,125,'GSAAAA','YOCAAA','AAAAxx' -2610,1741,0,2,0,10,10,610,610,2610,2610,20,21,'KWAAAA','ZOCAAA','HHHHxx' -6640,1742,0,0,0,0,40,640,640,1640,6640,80,81,'KVAAAA','APCAAA','OOOOxx' -3338,1743,0,2,8,18,38,338,1338,3338,3338,76,77,'KYAAAA','BPCAAA','VVVVxx' -6560,1744,0,0,0,0,60,560,560,1560,6560,120,121,'ISAAAA','CPCAAA','AAAAxx' -5986,1745,0,2,6,6,86,986,1986,986,5986,172,173,'GWAAAA','DPCAAA','HHHHxx' -2970,1746,0,2,0,10,70,970,970,2970,2970,140,141,'GKAAAA','EPCAAA','OOOOxx' -4731,1747,1,3,1,11,31,731,731,4731,4731,62,63,'ZZAAAA','FPCAAA','VVVVxx' -9486,1748,0,2,6,6,86,486,1486,4486,9486,172,173,'WAAAAA','GPCAAA','AAAAxx' -7204,1749,0,0,4,4,4,204,1204,2204,7204,8,9,'CRAAAA','HPCAAA','HHHHxx' -6685,1750,1,1,5,5,85,685,685,1685,6685,170,171,'DXAAAA','IPCAAA','OOOOxx' -6852,1751,0,0,2,12,52,852,852,1852,6852,104,105,'ODAAAA','JPCAAA','VVVVxx' -2325,1752,1,1,5,5,25,325,325,2325,2325,50,51,'LLAAAA','KPCAAA','AAAAxx' -1063,1753,1,3,3,3,63,63,1063,1063,1063,126,127,'XOAAAA','LPCAAA','HHHHxx' -6810,1754,0,2,0,10,10,810,810,1810,6810,20,21,'YBAAAA','MPCAAA','OOOOxx' -7718,1755,0,2,8,18,18,718,1718,2718,7718,36,37,'WKAAAA','NPCAAA','VVVVxx' -1680,1756,0,0,0,0,80,680,1680,1680,1680,160,161,'QMAAAA','OPCAAA','AAAAxx' -7402,1757,0,2,2,2,2,402,1402,2402,7402,4,5,'SYAAAA','PPCAAA','HHHHxx' -4134,1758,0,2,4,14,34,134,134,4134,4134,68,69,'ADAAAA','QPCAAA','OOOOxx' -8232,1759,0,0,2,12,32,232,232,3232,8232,64,65,'QEAAAA','RPCAAA','VVVVxx' -6682,1760,0,2,2,2,82,682,682,1682,6682,164,165,'AXAAAA','SPCAAA','AAAAxx' -7952,1761,0,0,2,12,52,952,1952,2952,7952,104,105,'WTAAAA','TPCAAA','HHHHxx' -5943,1762,1,3,3,3,43,943,1943,943,5943,86,87,'PUAAAA','UPCAAA','OOOOxx' -5394,1763,0,2,4,14,94,394,1394,394,5394,188,189,'MZAAAA','VPCAAA','VVVVxx' -6554,1764,0,2,4,14,54,554,554,1554,6554,108,109,'CSAAAA','WPCAAA','AAAAxx' -8186,1765,0,2,6,6,86,186,186,3186,8186,172,173,'WCAAAA','XPCAAA','HHHHxx' -199,1766,1,3,9,19,99,199,199,199,199,198,199,'RHAAAA','YPCAAA','OOOOxx' -3386,1767,0,2,6,6,86,386,1386,3386,3386,172,173,'GAAAAA','ZPCAAA','VVVVxx' -8974,1768,0,2,4,14,74,974,974,3974,8974,148,149,'EHAAAA','AQCAAA','AAAAxx' -8140,1769,0,0,0,0,40,140,140,3140,8140,80,81,'CBAAAA','BQCAAA','HHHHxx' -3723,1770,1,3,3,3,23,723,1723,3723,3723,46,47,'FNAAAA','CQCAAA','OOOOxx' -8827,1771,1,3,7,7,27,827,827,3827,8827,54,55,'NBAAAA','DQCAAA','VVVVxx' -1998,1772,0,2,8,18,98,998,1998,1998,1998,196,197,'WYAAAA','EQCAAA','AAAAxx' -879,1773,1,3,9,19,79,879,879,879,879,158,159,'VHAAAA','FQCAAA','HHHHxx' -892,1774,0,0,2,12,92,892,892,892,892,184,185,'IIAAAA','GQCAAA','OOOOxx' -9468,1775,0,0,8,8,68,468,1468,4468,9468,136,137,'EAAAAA','HQCAAA','VVVVxx' -3797,1776,1,1,7,17,97,797,1797,3797,3797,194,195,'BQAAAA','IQCAAA','AAAAxx' -8379,1777,1,3,9,19,79,379,379,3379,8379,158,159,'HKAAAA','JQCAAA','HHHHxx' -2817,1778,1,1,7,17,17,817,817,2817,2817,34,35,'JEAAAA','KQCAAA','OOOOxx' -789,1779,1,1,9,9,89,789,789,789,789,178,179,'JEAAAA','LQCAAA','VVVVxx' -3871,1780,1,3,1,11,71,871,1871,3871,3871,142,143,'XSAAAA','MQCAAA','AAAAxx' -7931,1781,1,3,1,11,31,931,1931,2931,7931,62,63,'BTAAAA','NQCAAA','HHHHxx' -3636,1782,0,0,6,16,36,636,1636,3636,3636,72,73,'WJAAAA','OQCAAA','OOOOxx' -699,1783,1,3,9,19,99,699,699,699,699,198,199,'XAAAAA','PQCAAA','VVVVxx' -6850,1784,0,2,0,10,50,850,850,1850,6850,100,101,'MDAAAA','QQCAAA','AAAAxx' -6394,1785,0,2,4,14,94,394,394,1394,6394,188,189,'YLAAAA','RQCAAA','HHHHxx' -3475,1786,1,3,5,15,75,475,1475,3475,3475,150,151,'RDAAAA','SQCAAA','OOOOxx' -3026,1787,0,2,6,6,26,26,1026,3026,3026,52,53,'KMAAAA','TQCAAA','VVVVxx' -876,1788,0,0,6,16,76,876,876,876,876,152,153,'SHAAAA','UQCAAA','AAAAxx' -1992,1789,0,0,2,12,92,992,1992,1992,1992,184,185,'QYAAAA','VQCAAA','HHHHxx' -3079,1790,1,3,9,19,79,79,1079,3079,3079,158,159,'LOAAAA','WQCAAA','OOOOxx' -8128,1791,0,0,8,8,28,128,128,3128,8128,56,57,'QAAAAA','XQCAAA','VVVVxx' -8123,1792,1,3,3,3,23,123,123,3123,8123,46,47,'LAAAAA','YQCAAA','AAAAxx' -3285,1793,1,1,5,5,85,285,1285,3285,3285,170,171,'JWAAAA','ZQCAAA','HHHHxx' -9315,1794,1,3,5,15,15,315,1315,4315,9315,30,31,'HUAAAA','ARCAAA','OOOOxx' -9862,1795,0,2,2,2,62,862,1862,4862,9862,124,125,'IPAAAA','BRCAAA','VVVVxx' -2764,1796,0,0,4,4,64,764,764,2764,2764,128,129,'ICAAAA','CRCAAA','AAAAxx' -3544,1797,0,0,4,4,44,544,1544,3544,3544,88,89,'IGAAAA','DRCAAA','HHHHxx' -7747,1798,1,3,7,7,47,747,1747,2747,7747,94,95,'ZLAAAA','ERCAAA','OOOOxx' -7725,1799,1,1,5,5,25,725,1725,2725,7725,50,51,'DLAAAA','FRCAAA','VVVVxx' -2449,1800,1,1,9,9,49,449,449,2449,2449,98,99,'FQAAAA','GRCAAA','AAAAxx' -8967,1801,1,3,7,7,67,967,967,3967,8967,134,135,'XGAAAA','HRCAAA','HHHHxx' -7371,1802,1,3,1,11,71,371,1371,2371,7371,142,143,'NXAAAA','IRCAAA','OOOOxx' -2158,1803,0,2,8,18,58,158,158,2158,2158,116,117,'AFAAAA','JRCAAA','VVVVxx' -5590,1804,0,2,0,10,90,590,1590,590,5590,180,181,'AHAAAA','KRCAAA','AAAAxx' -8072,1805,0,0,2,12,72,72,72,3072,8072,144,145,'MYAAAA','LRCAAA','HHHHxx' -1971,1806,1,3,1,11,71,971,1971,1971,1971,142,143,'VXAAAA','MRCAAA','OOOOxx' -772,1807,0,0,2,12,72,772,772,772,772,144,145,'SDAAAA','NRCAAA','VVVVxx' -3433,1808,1,1,3,13,33,433,1433,3433,3433,66,67,'BCAAAA','ORCAAA','AAAAxx' -8419,1809,1,3,9,19,19,419,419,3419,8419,38,39,'VLAAAA','PRCAAA','HHHHxx' -1493,1810,1,1,3,13,93,493,1493,1493,1493,186,187,'LFAAAA','QRCAAA','OOOOxx' -2584,1811,0,0,4,4,84,584,584,2584,2584,168,169,'KVAAAA','RRCAAA','VVVVxx' -9502,1812,0,2,2,2,2,502,1502,4502,9502,4,5,'MBAAAA','SRCAAA','AAAAxx' -4673,1813,1,1,3,13,73,673,673,4673,4673,146,147,'TXAAAA','TRCAAA','HHHHxx' -7403,1814,1,3,3,3,3,403,1403,2403,7403,6,7,'TYAAAA','URCAAA','OOOOxx' -7103,1815,1,3,3,3,3,103,1103,2103,7103,6,7,'FNAAAA','VRCAAA','VVVVxx' -7026,1816,0,2,6,6,26,26,1026,2026,7026,52,53,'GKAAAA','WRCAAA','AAAAxx' -8574,1817,0,2,4,14,74,574,574,3574,8574,148,149,'URAAAA','XRCAAA','HHHHxx' -1366,1818,0,2,6,6,66,366,1366,1366,1366,132,133,'OAAAAA','YRCAAA','OOOOxx' -5787,1819,1,3,7,7,87,787,1787,787,5787,174,175,'POAAAA','ZRCAAA','VVVVxx' -2552,1820,0,0,2,12,52,552,552,2552,2552,104,105,'EUAAAA','ASCAAA','AAAAxx' -4557,1821,1,1,7,17,57,557,557,4557,4557,114,115,'HTAAAA','BSCAAA','HHHHxx' -3237,1822,1,1,7,17,37,237,1237,3237,3237,74,75,'NUAAAA','CSCAAA','OOOOxx' -6901,1823,1,1,1,1,1,901,901,1901,6901,2,3,'LFAAAA','DSCAAA','VVVVxx' -7708,1824,0,0,8,8,8,708,1708,2708,7708,16,17,'MKAAAA','ESCAAA','AAAAxx' -2011,1825,1,3,1,11,11,11,11,2011,2011,22,23,'JZAAAA','FSCAAA','HHHHxx' -9455,1826,1,3,5,15,55,455,1455,4455,9455,110,111,'RZAAAA','GSCAAA','OOOOxx' -5228,1827,0,0,8,8,28,228,1228,228,5228,56,57,'CTAAAA','HSCAAA','VVVVxx' -4043,1828,1,3,3,3,43,43,43,4043,4043,86,87,'NZAAAA','ISCAAA','AAAAxx' -8242,1829,0,2,2,2,42,242,242,3242,8242,84,85,'AFAAAA','JSCAAA','HHHHxx' -6351,1830,1,3,1,11,51,351,351,1351,6351,102,103,'HKAAAA','KSCAAA','OOOOxx' -5899,1831,1,3,9,19,99,899,1899,899,5899,198,199,'XSAAAA','LSCAAA','VVVVxx' -4849,1832,1,1,9,9,49,849,849,4849,4849,98,99,'NEAAAA','MSCAAA','AAAAxx' -9583,1833,1,3,3,3,83,583,1583,4583,9583,166,167,'PEAAAA','NSCAAA','HHHHxx' -4994,1834,0,2,4,14,94,994,994,4994,4994,188,189,'CKAAAA','OSCAAA','OOOOxx' -9787,1835,1,3,7,7,87,787,1787,4787,9787,174,175,'LMAAAA','PSCAAA','VVVVxx' -243,1836,1,3,3,3,43,243,243,243,243,86,87,'JJAAAA','QSCAAA','AAAAxx' -3931,1837,1,3,1,11,31,931,1931,3931,3931,62,63,'FVAAAA','RSCAAA','HHHHxx' -5945,1838,1,1,5,5,45,945,1945,945,5945,90,91,'RUAAAA','SSCAAA','OOOOxx' -1325,1839,1,1,5,5,25,325,1325,1325,1325,50,51,'ZYAAAA','TSCAAA','VVVVxx' -4142,1840,0,2,2,2,42,142,142,4142,4142,84,85,'IDAAAA','USCAAA','AAAAxx' -1963,1841,1,3,3,3,63,963,1963,1963,1963,126,127,'NXAAAA','VSCAAA','HHHHxx' -7041,1842,1,1,1,1,41,41,1041,2041,7041,82,83,'VKAAAA','WSCAAA','OOOOxx' -3074,1843,0,2,4,14,74,74,1074,3074,3074,148,149,'GOAAAA','XSCAAA','VVVVxx' -3290,1844,0,2,0,10,90,290,1290,3290,3290,180,181,'OWAAAA','YSCAAA','AAAAxx' -4146,1845,0,2,6,6,46,146,146,4146,4146,92,93,'MDAAAA','ZSCAAA','HHHHxx' -3832,1846,0,0,2,12,32,832,1832,3832,3832,64,65,'KRAAAA','ATCAAA','OOOOxx' -2217,1847,1,1,7,17,17,217,217,2217,2217,34,35,'HHAAAA','BTCAAA','VVVVxx' -635,1848,1,3,5,15,35,635,635,635,635,70,71,'LYAAAA','CTCAAA','AAAAxx' -6967,1849,1,3,7,7,67,967,967,1967,6967,134,135,'ZHAAAA','DTCAAA','HHHHxx' -3522,1850,0,2,2,2,22,522,1522,3522,3522,44,45,'MFAAAA','ETCAAA','OOOOxx' -2471,1851,1,3,1,11,71,471,471,2471,2471,142,143,'BRAAAA','FTCAAA','VVVVxx' -4236,1852,0,0,6,16,36,236,236,4236,4236,72,73,'YGAAAA','GTCAAA','AAAAxx' -853,1853,1,1,3,13,53,853,853,853,853,106,107,'VGAAAA','HTCAAA','HHHHxx' -3754,1854,0,2,4,14,54,754,1754,3754,3754,108,109,'KOAAAA','ITCAAA','OOOOxx' -796,1855,0,0,6,16,96,796,796,796,796,192,193,'QEAAAA','JTCAAA','VVVVxx' -4640,1856,0,0,0,0,40,640,640,4640,4640,80,81,'MWAAAA','KTCAAA','AAAAxx' -9496,1857,0,0,6,16,96,496,1496,4496,9496,192,193,'GBAAAA','LTCAAA','HHHHxx' -6873,1858,1,1,3,13,73,873,873,1873,6873,146,147,'JEAAAA','MTCAAA','OOOOxx' -4632,1859,0,0,2,12,32,632,632,4632,4632,64,65,'EWAAAA','NTCAAA','VVVVxx' -5758,1860,0,2,8,18,58,758,1758,758,5758,116,117,'MNAAAA','OTCAAA','AAAAxx' -6514,1861,0,2,4,14,14,514,514,1514,6514,28,29,'OQAAAA','PTCAAA','HHHHxx' -9510,1862,0,2,0,10,10,510,1510,4510,9510,20,21,'UBAAAA','QTCAAA','OOOOxx' -8411,1863,1,3,1,11,11,411,411,3411,8411,22,23,'NLAAAA','RTCAAA','VVVVxx' -7762,1864,0,2,2,2,62,762,1762,2762,7762,124,125,'OMAAAA','STCAAA','AAAAxx' -2225,1865,1,1,5,5,25,225,225,2225,2225,50,51,'PHAAAA','TTCAAA','HHHHxx' -4373,1866,1,1,3,13,73,373,373,4373,4373,146,147,'FMAAAA','UTCAAA','OOOOxx' -7326,1867,0,2,6,6,26,326,1326,2326,7326,52,53,'UVAAAA','VTCAAA','VVVVxx' -8651,1868,1,3,1,11,51,651,651,3651,8651,102,103,'TUAAAA','WTCAAA','AAAAxx' -9825,1869,1,1,5,5,25,825,1825,4825,9825,50,51,'XNAAAA','XTCAAA','HHHHxx' -2988,1870,0,0,8,8,88,988,988,2988,2988,176,177,'YKAAAA','YTCAAA','OOOOxx' -8138,1871,0,2,8,18,38,138,138,3138,8138,76,77,'ABAAAA','ZTCAAA','VVVVxx' -7792,1872,0,0,2,12,92,792,1792,2792,7792,184,185,'SNAAAA','AUCAAA','AAAAxx' -1232,1873,0,0,2,12,32,232,1232,1232,1232,64,65,'KVAAAA','BUCAAA','HHHHxx' -8221,1874,1,1,1,1,21,221,221,3221,8221,42,43,'FEAAAA','CUCAAA','OOOOxx' -4044,1875,0,0,4,4,44,44,44,4044,4044,88,89,'OZAAAA','DUCAAA','VVVVxx' -1204,1876,0,0,4,4,4,204,1204,1204,1204,8,9,'IUAAAA','EUCAAA','AAAAxx' -5145,1877,1,1,5,5,45,145,1145,145,5145,90,91,'XPAAAA','FUCAAA','HHHHxx' -7791,1878,1,3,1,11,91,791,1791,2791,7791,182,183,'RNAAAA','GUCAAA','OOOOxx' -8270,1879,0,2,0,10,70,270,270,3270,8270,140,141,'CGAAAA','HUCAAA','VVVVxx' -9427,1880,1,3,7,7,27,427,1427,4427,9427,54,55,'PYAAAA','IUCAAA','AAAAxx' -2152,1881,0,0,2,12,52,152,152,2152,2152,104,105,'UEAAAA','JUCAAA','HHHHxx' -7790,1882,0,2,0,10,90,790,1790,2790,7790,180,181,'QNAAAA','KUCAAA','OOOOxx' -5301,1883,1,1,1,1,1,301,1301,301,5301,2,3,'XVAAAA','LUCAAA','VVVVxx' -626,1884,0,2,6,6,26,626,626,626,626,52,53,'CYAAAA','MUCAAA','AAAAxx' -260,1885,0,0,0,0,60,260,260,260,260,120,121,'AKAAAA','NUCAAA','HHHHxx' -4369,1886,1,1,9,9,69,369,369,4369,4369,138,139,'BMAAAA','OUCAAA','OOOOxx' -5457,1887,1,1,7,17,57,457,1457,457,5457,114,115,'XBAAAA','PUCAAA','VVVVxx' -3468,1888,0,0,8,8,68,468,1468,3468,3468,136,137,'KDAAAA','QUCAAA','AAAAxx' -2257,1889,1,1,7,17,57,257,257,2257,2257,114,115,'VIAAAA','RUCAAA','HHHHxx' -9318,1890,0,2,8,18,18,318,1318,4318,9318,36,37,'KUAAAA','SUCAAA','OOOOxx' -8762,1891,0,2,2,2,62,762,762,3762,8762,124,125,'AZAAAA','TUCAAA','VVVVxx' -9153,1892,1,1,3,13,53,153,1153,4153,9153,106,107,'BOAAAA','UUCAAA','AAAAxx' -9220,1893,0,0,0,0,20,220,1220,4220,9220,40,41,'QQAAAA','VUCAAA','HHHHxx' -8003,1894,1,3,3,3,3,3,3,3003,8003,6,7,'VVAAAA','WUCAAA','OOOOxx' -7257,1895,1,1,7,17,57,257,1257,2257,7257,114,115,'DTAAAA','XUCAAA','VVVVxx' -3930,1896,0,2,0,10,30,930,1930,3930,3930,60,61,'EVAAAA','YUCAAA','AAAAxx' -2976,1897,0,0,6,16,76,976,976,2976,2976,152,153,'MKAAAA','ZUCAAA','HHHHxx' -2531,1898,1,3,1,11,31,531,531,2531,2531,62,63,'JTAAAA','AVCAAA','OOOOxx' -2250,1899,0,2,0,10,50,250,250,2250,2250,100,101,'OIAAAA','BVCAAA','VVVVxx' -8549,1900,1,1,9,9,49,549,549,3549,8549,98,99,'VQAAAA','CVCAAA','AAAAxx' -7197,1901,1,1,7,17,97,197,1197,2197,7197,194,195,'VQAAAA','DVCAAA','HHHHxx' -5916,1902,0,0,6,16,16,916,1916,916,5916,32,33,'OTAAAA','EVCAAA','OOOOxx' -5287,1903,1,3,7,7,87,287,1287,287,5287,174,175,'JVAAAA','FVCAAA','VVVVxx' -9095,1904,1,3,5,15,95,95,1095,4095,9095,190,191,'VLAAAA','GVCAAA','AAAAxx' -7137,1905,1,1,7,17,37,137,1137,2137,7137,74,75,'NOAAAA','HVCAAA','HHHHxx' -7902,1906,0,2,2,2,2,902,1902,2902,7902,4,5,'YRAAAA','IVCAAA','OOOOxx' -7598,1907,0,2,8,18,98,598,1598,2598,7598,196,197,'GGAAAA','JVCAAA','VVVVxx' -5652,1908,0,0,2,12,52,652,1652,652,5652,104,105,'KJAAAA','KVCAAA','AAAAxx' -2017,1909,1,1,7,17,17,17,17,2017,2017,34,35,'PZAAAA','LVCAAA','HHHHxx' -7255,1910,1,3,5,15,55,255,1255,2255,7255,110,111,'BTAAAA','MVCAAA','OOOOxx' -7999,1911,1,3,9,19,99,999,1999,2999,7999,198,199,'RVAAAA','NVCAAA','VVVVxx' -5388,1912,0,0,8,8,88,388,1388,388,5388,176,177,'GZAAAA','OVCAAA','AAAAxx' -8754,1913,0,2,4,14,54,754,754,3754,8754,108,109,'SYAAAA','PVCAAA','HHHHxx' -5415,1914,1,3,5,15,15,415,1415,415,5415,30,31,'HAAAAA','QVCAAA','OOOOxx' -8861,1915,1,1,1,1,61,861,861,3861,8861,122,123,'VCAAAA','RVCAAA','VVVVxx' -2874,1916,0,2,4,14,74,874,874,2874,2874,148,149,'OGAAAA','SVCAAA','AAAAxx' -9910,1917,0,2,0,10,10,910,1910,4910,9910,20,21,'ERAAAA','TVCAAA','HHHHxx' -5178,1918,0,2,8,18,78,178,1178,178,5178,156,157,'ERAAAA','UVCAAA','OOOOxx' -5698,1919,0,2,8,18,98,698,1698,698,5698,196,197,'ELAAAA','VVCAAA','VVVVxx' -8500,1920,0,0,0,0,0,500,500,3500,8500,0,1,'YOAAAA','WVCAAA','AAAAxx' -1814,1921,0,2,4,14,14,814,1814,1814,1814,28,29,'URAAAA','XVCAAA','HHHHxx' -4968,1922,0,0,8,8,68,968,968,4968,4968,136,137,'CJAAAA','YVCAAA','OOOOxx' -2642,1923,0,2,2,2,42,642,642,2642,2642,84,85,'QXAAAA','ZVCAAA','VVVVxx' -1578,1924,0,2,8,18,78,578,1578,1578,1578,156,157,'SIAAAA','AWCAAA','AAAAxx' -4774,1925,0,2,4,14,74,774,774,4774,4774,148,149,'QBAAAA','BWCAAA','HHHHxx' -7062,1926,0,2,2,2,62,62,1062,2062,7062,124,125,'QLAAAA','CWCAAA','OOOOxx' -5381,1927,1,1,1,1,81,381,1381,381,5381,162,163,'ZYAAAA','DWCAAA','VVVVxx' -7985,1928,1,1,5,5,85,985,1985,2985,7985,170,171,'DVAAAA','EWCAAA','AAAAxx' -3850,1929,0,2,0,10,50,850,1850,3850,3850,100,101,'CSAAAA','FWCAAA','HHHHxx' -5624,1930,0,0,4,4,24,624,1624,624,5624,48,49,'IIAAAA','GWCAAA','OOOOxx' -8948,1931,0,0,8,8,48,948,948,3948,8948,96,97,'EGAAAA','HWCAAA','VVVVxx' -995,1932,1,3,5,15,95,995,995,995,995,190,191,'HMAAAA','IWCAAA','AAAAxx' -5058,1933,0,2,8,18,58,58,1058,58,5058,116,117,'OMAAAA','JWCAAA','HHHHxx' -9670,1934,0,2,0,10,70,670,1670,4670,9670,140,141,'YHAAAA','KWCAAA','OOOOxx' -3115,1935,1,3,5,15,15,115,1115,3115,3115,30,31,'VPAAAA','LWCAAA','VVVVxx' -4935,1936,1,3,5,15,35,935,935,4935,4935,70,71,'VHAAAA','MWCAAA','AAAAxx' -4735,1937,1,3,5,15,35,735,735,4735,4735,70,71,'DAAAAA','NWCAAA','HHHHxx' -1348,1938,0,0,8,8,48,348,1348,1348,1348,96,97,'WZAAAA','OWCAAA','OOOOxx' -2380,1939,0,0,0,0,80,380,380,2380,2380,160,161,'ONAAAA','PWCAAA','VVVVxx' -4246,1940,0,2,6,6,46,246,246,4246,4246,92,93,'IHAAAA','QWCAAA','AAAAxx' -522,1941,0,2,2,2,22,522,522,522,522,44,45,'CUAAAA','RWCAAA','HHHHxx' -1701,1942,1,1,1,1,1,701,1701,1701,1701,2,3,'LNAAAA','SWCAAA','OOOOxx' -9709,1943,1,1,9,9,9,709,1709,4709,9709,18,19,'LJAAAA','TWCAAA','VVVVxx' -8829,1944,1,1,9,9,29,829,829,3829,8829,58,59,'PBAAAA','UWCAAA','AAAAxx' -7936,1945,0,0,6,16,36,936,1936,2936,7936,72,73,'GTAAAA','VWCAAA','HHHHxx' -8474,1946,0,2,4,14,74,474,474,3474,8474,148,149,'YNAAAA','WWCAAA','OOOOxx' -4676,1947,0,0,6,16,76,676,676,4676,4676,152,153,'WXAAAA','XWCAAA','VVVVxx' -6303,1948,1,3,3,3,3,303,303,1303,6303,6,7,'LIAAAA','YWCAAA','AAAAxx' -3485,1949,1,1,5,5,85,485,1485,3485,3485,170,171,'BEAAAA','ZWCAAA','HHHHxx' -2695,1950,1,3,5,15,95,695,695,2695,2695,190,191,'RZAAAA','AXCAAA','OOOOxx' -8830,1951,0,2,0,10,30,830,830,3830,8830,60,61,'QBAAAA','BXCAAA','VVVVxx' -898,1952,0,2,8,18,98,898,898,898,898,196,197,'OIAAAA','CXCAAA','AAAAxx' -7268,1953,0,0,8,8,68,268,1268,2268,7268,136,137,'OTAAAA','DXCAAA','HHHHxx' -6568,1954,0,0,8,8,68,568,568,1568,6568,136,137,'QSAAAA','EXCAAA','OOOOxx' -9724,1955,0,0,4,4,24,724,1724,4724,9724,48,49,'AKAAAA','FXCAAA','VVVVxx' -3329,1956,1,1,9,9,29,329,1329,3329,3329,58,59,'BYAAAA','GXCAAA','AAAAxx' -9860,1957,0,0,0,0,60,860,1860,4860,9860,120,121,'GPAAAA','HXCAAA','HHHHxx' -6833,1958,1,1,3,13,33,833,833,1833,6833,66,67,'VCAAAA','IXCAAA','OOOOxx' -5956,1959,0,0,6,16,56,956,1956,956,5956,112,113,'CVAAAA','JXCAAA','VVVVxx' -3963,1960,1,3,3,3,63,963,1963,3963,3963,126,127,'LWAAAA','KXCAAA','AAAAxx' -883,1961,1,3,3,3,83,883,883,883,883,166,167,'ZHAAAA','LXCAAA','HHHHxx' -2761,1962,1,1,1,1,61,761,761,2761,2761,122,123,'FCAAAA','MXCAAA','OOOOxx' -4644,1963,0,0,4,4,44,644,644,4644,4644,88,89,'QWAAAA','NXCAAA','VVVVxx' -1358,1964,0,2,8,18,58,358,1358,1358,1358,116,117,'GAAAAA','OXCAAA','AAAAxx' -2049,1965,1,1,9,9,49,49,49,2049,2049,98,99,'VAAAAA','PXCAAA','HHHHxx' -2193,1966,1,1,3,13,93,193,193,2193,2193,186,187,'JGAAAA','QXCAAA','OOOOxx' -9435,1967,1,3,5,15,35,435,1435,4435,9435,70,71,'XYAAAA','RXCAAA','VVVVxx' -5890,1968,0,2,0,10,90,890,1890,890,5890,180,181,'OSAAAA','SXCAAA','AAAAxx' -8149,1969,1,1,9,9,49,149,149,3149,8149,98,99,'LBAAAA','TXCAAA','HHHHxx' -423,1970,1,3,3,3,23,423,423,423,423,46,47,'HQAAAA','UXCAAA','OOOOxx' -7980,1971,0,0,0,0,80,980,1980,2980,7980,160,161,'YUAAAA','VXCAAA','VVVVxx' -9019,1972,1,3,9,19,19,19,1019,4019,9019,38,39,'XIAAAA','WXCAAA','AAAAxx' -1647,1973,1,3,7,7,47,647,1647,1647,1647,94,95,'JLAAAA','XXCAAA','HHHHxx' -9495,1974,1,3,5,15,95,495,1495,4495,9495,190,191,'FBAAAA','YXCAAA','OOOOxx' -3904,1975,0,0,4,4,4,904,1904,3904,3904,8,9,'EUAAAA','ZXCAAA','VVVVxx' -5838,1976,0,2,8,18,38,838,1838,838,5838,76,77,'OQAAAA','AYCAAA','AAAAxx' -3866,1977,0,2,6,6,66,866,1866,3866,3866,132,133,'SSAAAA','BYCAAA','HHHHxx' -3093,1978,1,1,3,13,93,93,1093,3093,3093,186,187,'ZOAAAA','CYCAAA','OOOOxx' -9666,1979,0,2,6,6,66,666,1666,4666,9666,132,133,'UHAAAA','DYCAAA','VVVVxx' -1246,1980,0,2,6,6,46,246,1246,1246,1246,92,93,'YVAAAA','EYCAAA','AAAAxx' -9759,1981,1,3,9,19,59,759,1759,4759,9759,118,119,'JLAAAA','FYCAAA','HHHHxx' -7174,1982,0,2,4,14,74,174,1174,2174,7174,148,149,'YPAAAA','GYCAAA','OOOOxx' -7678,1983,0,2,8,18,78,678,1678,2678,7678,156,157,'IJAAAA','HYCAAA','VVVVxx' -3004,1984,0,0,4,4,4,4,1004,3004,3004,8,9,'OLAAAA','IYCAAA','AAAAxx' -5607,1985,1,3,7,7,7,607,1607,607,5607,14,15,'RHAAAA','JYCAAA','HHHHxx' -8510,1986,0,2,0,10,10,510,510,3510,8510,20,21,'IPAAAA','KYCAAA','OOOOxx' -1483,1987,1,3,3,3,83,483,1483,1483,1483,166,167,'BFAAAA','LYCAAA','VVVVxx' -2915,1988,1,3,5,15,15,915,915,2915,2915,30,31,'DIAAAA','MYCAAA','AAAAxx' -1548,1989,0,0,8,8,48,548,1548,1548,1548,96,97,'OHAAAA','NYCAAA','HHHHxx' -5767,1990,1,3,7,7,67,767,1767,767,5767,134,135,'VNAAAA','OYCAAA','OOOOxx' -3214,1991,0,2,4,14,14,214,1214,3214,3214,28,29,'QTAAAA','PYCAAA','VVVVxx' -8663,1992,1,3,3,3,63,663,663,3663,8663,126,127,'FVAAAA','QYCAAA','AAAAxx' -5425,1993,1,1,5,5,25,425,1425,425,5425,50,51,'RAAAAA','RYCAAA','HHHHxx' -8530,1994,0,2,0,10,30,530,530,3530,8530,60,61,'CQAAAA','SYCAAA','OOOOxx' -821,1995,1,1,1,1,21,821,821,821,821,42,43,'PFAAAA','TYCAAA','VVVVxx' -8816,1996,0,0,6,16,16,816,816,3816,8816,32,33,'CBAAAA','UYCAAA','AAAAxx' -9367,1997,1,3,7,7,67,367,1367,4367,9367,134,135,'HWAAAA','VYCAAA','HHHHxx' -4138,1998,0,2,8,18,38,138,138,4138,4138,76,77,'EDAAAA','WYCAAA','OOOOxx' -94,1999,0,2,4,14,94,94,94,94,94,188,189,'QDAAAA','XYCAAA','VVVVxx' -1858,2000,0,2,8,18,58,858,1858,1858,1858,116,117,'MTAAAA','YYCAAA','AAAAxx' -5513,2001,1,1,3,13,13,513,1513,513,5513,26,27,'BEAAAA','ZYCAAA','HHHHxx' -9620,2002,0,0,0,0,20,620,1620,4620,9620,40,41,'AGAAAA','AZCAAA','OOOOxx' -4770,2003,0,2,0,10,70,770,770,4770,4770,140,141,'MBAAAA','BZCAAA','VVVVxx' -5193,2004,1,1,3,13,93,193,1193,193,5193,186,187,'TRAAAA','CZCAAA','AAAAxx' -198,2005,0,2,8,18,98,198,198,198,198,196,197,'QHAAAA','DZCAAA','HHHHxx' -417,2006,1,1,7,17,17,417,417,417,417,34,35,'BQAAAA','EZCAAA','OOOOxx' -173,2007,1,1,3,13,73,173,173,173,173,146,147,'RGAAAA','FZCAAA','VVVVxx' -6248,2008,0,0,8,8,48,248,248,1248,6248,96,97,'IGAAAA','GZCAAA','AAAAxx' -302,2009,0,2,2,2,2,302,302,302,302,4,5,'QLAAAA','HZCAAA','HHHHxx' -8983,2010,1,3,3,3,83,983,983,3983,8983,166,167,'NHAAAA','IZCAAA','OOOOxx' -4840,2011,0,0,0,0,40,840,840,4840,4840,80,81,'EEAAAA','JZCAAA','VVVVxx' -2876,2012,0,0,6,16,76,876,876,2876,2876,152,153,'QGAAAA','KZCAAA','AAAAxx' -5841,2013,1,1,1,1,41,841,1841,841,5841,82,83,'RQAAAA','LZCAAA','HHHHxx' -2766,2014,0,2,6,6,66,766,766,2766,2766,132,133,'KCAAAA','MZCAAA','OOOOxx' -9482,2015,0,2,2,2,82,482,1482,4482,9482,164,165,'SAAAAA','NZCAAA','VVVVxx' -5335,2016,1,3,5,15,35,335,1335,335,5335,70,71,'FXAAAA','OZCAAA','AAAAxx' -1502,2017,0,2,2,2,2,502,1502,1502,1502,4,5,'UFAAAA','PZCAAA','HHHHxx' -9291,2018,1,3,1,11,91,291,1291,4291,9291,182,183,'JTAAAA','QZCAAA','OOOOxx' -8655,2019,1,3,5,15,55,655,655,3655,8655,110,111,'XUAAAA','RZCAAA','VVVVxx' -1687,2020,1,3,7,7,87,687,1687,1687,1687,174,175,'XMAAAA','SZCAAA','AAAAxx' -8171,2021,1,3,1,11,71,171,171,3171,8171,142,143,'HCAAAA','TZCAAA','HHHHxx' -5699,2022,1,3,9,19,99,699,1699,699,5699,198,199,'FLAAAA','UZCAAA','OOOOxx' -1462,2023,0,2,2,2,62,462,1462,1462,1462,124,125,'GEAAAA','VZCAAA','VVVVxx' -608,2024,0,0,8,8,8,608,608,608,608,16,17,'KXAAAA','WZCAAA','AAAAxx' -6860,2025,0,0,0,0,60,860,860,1860,6860,120,121,'WDAAAA','XZCAAA','HHHHxx' -6063,2026,1,3,3,3,63,63,63,1063,6063,126,127,'FZAAAA','YZCAAA','OOOOxx' -1422,2027,0,2,2,2,22,422,1422,1422,1422,44,45,'SCAAAA','ZZCAAA','VVVVxx' -1932,2028,0,0,2,12,32,932,1932,1932,1932,64,65,'IWAAAA','AADAAA','AAAAxx' -5065,2029,1,1,5,5,65,65,1065,65,5065,130,131,'VMAAAA','BADAAA','HHHHxx' -432,2030,0,0,2,12,32,432,432,432,432,64,65,'QQAAAA','CADAAA','OOOOxx' -4680,2031,0,0,0,0,80,680,680,4680,4680,160,161,'AYAAAA','DADAAA','VVVVxx' -8172,2032,0,0,2,12,72,172,172,3172,8172,144,145,'ICAAAA','EADAAA','AAAAxx' -8668,2033,0,0,8,8,68,668,668,3668,8668,136,137,'KVAAAA','FADAAA','HHHHxx' -256,2034,0,0,6,16,56,256,256,256,256,112,113,'WJAAAA','GADAAA','OOOOxx' -2500,2035,0,0,0,0,0,500,500,2500,2500,0,1,'ESAAAA','HADAAA','VVVVxx' -274,2036,0,2,4,14,74,274,274,274,274,148,149,'OKAAAA','IADAAA','AAAAxx' -5907,2037,1,3,7,7,7,907,1907,907,5907,14,15,'FTAAAA','JADAAA','HHHHxx' -8587,2038,1,3,7,7,87,587,587,3587,8587,174,175,'HSAAAA','KADAAA','OOOOxx' -9942,2039,0,2,2,2,42,942,1942,4942,9942,84,85,'KSAAAA','LADAAA','VVVVxx' -116,2040,0,0,6,16,16,116,116,116,116,32,33,'MEAAAA','MADAAA','AAAAxx' -7134,2041,0,2,4,14,34,134,1134,2134,7134,68,69,'KOAAAA','NADAAA','HHHHxx' -9002,2042,0,2,2,2,2,2,1002,4002,9002,4,5,'GIAAAA','OADAAA','OOOOxx' -1209,2043,1,1,9,9,9,209,1209,1209,1209,18,19,'NUAAAA','PADAAA','VVVVxx' -9983,2044,1,3,3,3,83,983,1983,4983,9983,166,167,'ZTAAAA','QADAAA','AAAAxx' -1761,2045,1,1,1,1,61,761,1761,1761,1761,122,123,'TPAAAA','RADAAA','HHHHxx' -7723,2046,1,3,3,3,23,723,1723,2723,7723,46,47,'BLAAAA','SADAAA','OOOOxx' -6518,2047,0,2,8,18,18,518,518,1518,6518,36,37,'SQAAAA','TADAAA','VVVVxx' -1372,2048,0,0,2,12,72,372,1372,1372,1372,144,145,'UAAAAA','UADAAA','AAAAxx' -3587,2049,1,3,7,7,87,587,1587,3587,3587,174,175,'ZHAAAA','VADAAA','HHHHxx' -5323,2050,1,3,3,3,23,323,1323,323,5323,46,47,'TWAAAA','WADAAA','OOOOxx' -5902,2051,0,2,2,2,2,902,1902,902,5902,4,5,'ATAAAA','XADAAA','VVVVxx' -3749,2052,1,1,9,9,49,749,1749,3749,3749,98,99,'FOAAAA','YADAAA','AAAAxx' -5965,2053,1,1,5,5,65,965,1965,965,5965,130,131,'LVAAAA','ZADAAA','HHHHxx' -663,2054,1,3,3,3,63,663,663,663,663,126,127,'NZAAAA','ABDAAA','OOOOxx' -36,2055,0,0,6,16,36,36,36,36,36,72,73,'KBAAAA','BBDAAA','VVVVxx' -9782,2056,0,2,2,2,82,782,1782,4782,9782,164,165,'GMAAAA','CBDAAA','AAAAxx' -5412,2057,0,0,2,12,12,412,1412,412,5412,24,25,'EAAAAA','DBDAAA','HHHHxx' -9961,2058,1,1,1,1,61,961,1961,4961,9961,122,123,'DTAAAA','EBDAAA','OOOOxx' -6492,2059,0,0,2,12,92,492,492,1492,6492,184,185,'SPAAAA','FBDAAA','VVVVxx' -4234,2060,0,2,4,14,34,234,234,4234,4234,68,69,'WGAAAA','GBDAAA','AAAAxx' -4922,2061,0,2,2,2,22,922,922,4922,4922,44,45,'IHAAAA','HBDAAA','HHHHxx' -6166,2062,0,2,6,6,66,166,166,1166,6166,132,133,'EDAAAA','IBDAAA','OOOOxx' -7019,2063,1,3,9,19,19,19,1019,2019,7019,38,39,'ZJAAAA','JBDAAA','VVVVxx' -7805,2064,1,1,5,5,5,805,1805,2805,7805,10,11,'FOAAAA','KBDAAA','AAAAxx' -9808,2065,0,0,8,8,8,808,1808,4808,9808,16,17,'GNAAAA','LBDAAA','HHHHxx' -2550,2066,0,2,0,10,50,550,550,2550,2550,100,101,'CUAAAA','MBDAAA','OOOOxx' -8626,2067,0,2,6,6,26,626,626,3626,8626,52,53,'UTAAAA','NBDAAA','VVVVxx' -5649,2068,1,1,9,9,49,649,1649,649,5649,98,99,'HJAAAA','OBDAAA','AAAAxx' -3117,2069,1,1,7,17,17,117,1117,3117,3117,34,35,'XPAAAA','PBDAAA','HHHHxx' -866,2070,0,2,6,6,66,866,866,866,866,132,133,'IHAAAA','QBDAAA','OOOOxx' -2323,2071,1,3,3,3,23,323,323,2323,2323,46,47,'JLAAAA','RBDAAA','VVVVxx' -5132,2072,0,0,2,12,32,132,1132,132,5132,64,65,'KPAAAA','SBDAAA','AAAAxx' -9222,2073,0,2,2,2,22,222,1222,4222,9222,44,45,'SQAAAA','TBDAAA','HHHHxx' -3934,2074,0,2,4,14,34,934,1934,3934,3934,68,69,'IVAAAA','UBDAAA','OOOOxx' -4845,2075,1,1,5,5,45,845,845,4845,4845,90,91,'JEAAAA','VBDAAA','VVVVxx' -7714,2076,0,2,4,14,14,714,1714,2714,7714,28,29,'SKAAAA','WBDAAA','AAAAxx' -9818,2077,0,2,8,18,18,818,1818,4818,9818,36,37,'QNAAAA','XBDAAA','HHHHxx' -2219,2078,1,3,9,19,19,219,219,2219,2219,38,39,'JHAAAA','YBDAAA','OOOOxx' -6573,2079,1,1,3,13,73,573,573,1573,6573,146,147,'VSAAAA','ZBDAAA','VVVVxx' -4555,2080,1,3,5,15,55,555,555,4555,4555,110,111,'FTAAAA','ACDAAA','AAAAxx' -7306,2081,0,2,6,6,6,306,1306,2306,7306,12,13,'AVAAAA','BCDAAA','HHHHxx' -9313,2082,1,1,3,13,13,313,1313,4313,9313,26,27,'FUAAAA','CCDAAA','OOOOxx' -3924,2083,0,0,4,4,24,924,1924,3924,3924,48,49,'YUAAAA','DCDAAA','VVVVxx' -5176,2084,0,0,6,16,76,176,1176,176,5176,152,153,'CRAAAA','ECDAAA','AAAAxx' -9767,2085,1,3,7,7,67,767,1767,4767,9767,134,135,'RLAAAA','FCDAAA','HHHHxx' -905,2086,1,1,5,5,5,905,905,905,905,10,11,'VIAAAA','GCDAAA','OOOOxx' -8037,2087,1,1,7,17,37,37,37,3037,8037,74,75,'DXAAAA','HCDAAA','VVVVxx' -8133,2088,1,1,3,13,33,133,133,3133,8133,66,67,'VAAAAA','ICDAAA','AAAAxx' -2954,2089,0,2,4,14,54,954,954,2954,2954,108,109,'QJAAAA','JCDAAA','HHHHxx' -7262,2090,0,2,2,2,62,262,1262,2262,7262,124,125,'ITAAAA','KCDAAA','OOOOxx' -8768,2091,0,0,8,8,68,768,768,3768,8768,136,137,'GZAAAA','LCDAAA','VVVVxx' -6953,2092,1,1,3,13,53,953,953,1953,6953,106,107,'LHAAAA','MCDAAA','AAAAxx' -1984,2093,0,0,4,4,84,984,1984,1984,1984,168,169,'IYAAAA','NCDAAA','HHHHxx' -9348,2094,0,0,8,8,48,348,1348,4348,9348,96,97,'OVAAAA','OCDAAA','OOOOxx' -7769,2095,1,1,9,9,69,769,1769,2769,7769,138,139,'VMAAAA','PCDAAA','VVVVxx' -2994,2096,0,2,4,14,94,994,994,2994,2994,188,189,'ELAAAA','QCDAAA','AAAAxx' -5938,2097,0,2,8,18,38,938,1938,938,5938,76,77,'KUAAAA','RCDAAA','HHHHxx' -556,2098,0,0,6,16,56,556,556,556,556,112,113,'KVAAAA','SCDAAA','OOOOxx' -2577,2099,1,1,7,17,77,577,577,2577,2577,154,155,'DVAAAA','TCDAAA','VVVVxx' -8733,2100,1,1,3,13,33,733,733,3733,8733,66,67,'XXAAAA','UCDAAA','AAAAxx' -3108,2101,0,0,8,8,8,108,1108,3108,3108,16,17,'OPAAAA','VCDAAA','HHHHxx' -4166,2102,0,2,6,6,66,166,166,4166,4166,132,133,'GEAAAA','WCDAAA','OOOOxx' -3170,2103,0,2,0,10,70,170,1170,3170,3170,140,141,'YRAAAA','XCDAAA','VVVVxx' -8118,2104,0,2,8,18,18,118,118,3118,8118,36,37,'GAAAAA','YCDAAA','AAAAxx' -8454,2105,0,2,4,14,54,454,454,3454,8454,108,109,'ENAAAA','ZCDAAA','HHHHxx' -5338,2106,0,2,8,18,38,338,1338,338,5338,76,77,'IXAAAA','ADDAAA','OOOOxx' -402,2107,0,2,2,2,2,402,402,402,402,4,5,'MPAAAA','BDDAAA','VVVVxx' -5673,2108,1,1,3,13,73,673,1673,673,5673,146,147,'FKAAAA','CDDAAA','AAAAxx' -4324,2109,0,0,4,4,24,324,324,4324,4324,48,49,'IKAAAA','DDDAAA','HHHHxx' -1943,2110,1,3,3,3,43,943,1943,1943,1943,86,87,'TWAAAA','EDDAAA','OOOOxx' -7703,2111,1,3,3,3,3,703,1703,2703,7703,6,7,'HKAAAA','FDDAAA','VVVVxx' -7180,2112,0,0,0,0,80,180,1180,2180,7180,160,161,'EQAAAA','GDDAAA','AAAAxx' -5478,2113,0,2,8,18,78,478,1478,478,5478,156,157,'SCAAAA','HDDAAA','HHHHxx' -5775,2114,1,3,5,15,75,775,1775,775,5775,150,151,'DOAAAA','IDDAAA','OOOOxx' -6952,2115,0,0,2,12,52,952,952,1952,6952,104,105,'KHAAAA','JDDAAA','VVVVxx' -9022,2116,0,2,2,2,22,22,1022,4022,9022,44,45,'AJAAAA','KDDAAA','AAAAxx' -547,2117,1,3,7,7,47,547,547,547,547,94,95,'BVAAAA','LDDAAA','HHHHxx' -5877,2118,1,1,7,17,77,877,1877,877,5877,154,155,'BSAAAA','MDDAAA','OOOOxx' -9580,2119,0,0,0,0,80,580,1580,4580,9580,160,161,'MEAAAA','NDDAAA','VVVVxx' -6094,2120,0,2,4,14,94,94,94,1094,6094,188,189,'KAAAAA','ODDAAA','AAAAxx' -3398,2121,0,2,8,18,98,398,1398,3398,3398,196,197,'SAAAAA','PDDAAA','HHHHxx' -4574,2122,0,2,4,14,74,574,574,4574,4574,148,149,'YTAAAA','QDDAAA','OOOOxx' -3675,2123,1,3,5,15,75,675,1675,3675,3675,150,151,'JLAAAA','RDDAAA','VVVVxx' -6413,2124,1,1,3,13,13,413,413,1413,6413,26,27,'RMAAAA','SDDAAA','AAAAxx' -9851,2125,1,3,1,11,51,851,1851,4851,9851,102,103,'XOAAAA','TDDAAA','HHHHxx' -126,2126,0,2,6,6,26,126,126,126,126,52,53,'WEAAAA','UDDAAA','OOOOxx' -6803,2127,1,3,3,3,3,803,803,1803,6803,6,7,'RBAAAA','VDDAAA','VVVVxx' -6949,2128,1,1,9,9,49,949,949,1949,6949,98,99,'HHAAAA','WDDAAA','AAAAxx' -115,2129,1,3,5,15,15,115,115,115,115,30,31,'LEAAAA','XDDAAA','HHHHxx' -4165,2130,1,1,5,5,65,165,165,4165,4165,130,131,'FEAAAA','YDDAAA','OOOOxx' -201,2131,1,1,1,1,1,201,201,201,201,2,3,'THAAAA','ZDDAAA','VVVVxx' -9324,2132,0,0,4,4,24,324,1324,4324,9324,48,49,'QUAAAA','AEDAAA','AAAAxx' -6562,2133,0,2,2,2,62,562,562,1562,6562,124,125,'KSAAAA','BEDAAA','HHHHxx' -1917,2134,1,1,7,17,17,917,1917,1917,1917,34,35,'TVAAAA','CEDAAA','OOOOxx' -558,2135,0,2,8,18,58,558,558,558,558,116,117,'MVAAAA','DEDAAA','VVVVxx' -8515,2136,1,3,5,15,15,515,515,3515,8515,30,31,'NPAAAA','EEDAAA','AAAAxx' -6321,2137,1,1,1,1,21,321,321,1321,6321,42,43,'DJAAAA','FEDAAA','HHHHxx' -6892,2138,0,0,2,12,92,892,892,1892,6892,184,185,'CFAAAA','GEDAAA','OOOOxx' -1001,2139,1,1,1,1,1,1,1001,1001,1001,2,3,'NMAAAA','HEDAAA','VVVVxx' -2858,2140,0,2,8,18,58,858,858,2858,2858,116,117,'YFAAAA','IEDAAA','AAAAxx' -2434,2141,0,2,4,14,34,434,434,2434,2434,68,69,'QPAAAA','JEDAAA','HHHHxx' -4460,2142,0,0,0,0,60,460,460,4460,4460,120,121,'OPAAAA','KEDAAA','OOOOxx' -5447,2143,1,3,7,7,47,447,1447,447,5447,94,95,'NBAAAA','LEDAAA','VVVVxx' -3799,2144,1,3,9,19,99,799,1799,3799,3799,198,199,'DQAAAA','MEDAAA','AAAAxx' -4310,2145,0,2,0,10,10,310,310,4310,4310,20,21,'UJAAAA','NEDAAA','HHHHxx' -405,2146,1,1,5,5,5,405,405,405,405,10,11,'PPAAAA','OEDAAA','OOOOxx' -4573,2147,1,1,3,13,73,573,573,4573,4573,146,147,'XTAAAA','PEDAAA','VVVVxx' -706,2148,0,2,6,6,6,706,706,706,706,12,13,'EBAAAA','QEDAAA','AAAAxx' -7619,2149,1,3,9,19,19,619,1619,2619,7619,38,39,'BHAAAA','REDAAA','HHHHxx' -7959,2150,1,3,9,19,59,959,1959,2959,7959,118,119,'DUAAAA','SEDAAA','OOOOxx' -6712,2151,0,0,2,12,12,712,712,1712,6712,24,25,'EYAAAA','TEDAAA','VVVVxx' -6959,2152,1,3,9,19,59,959,959,1959,6959,118,119,'RHAAAA','UEDAAA','AAAAxx' -9791,2153,1,3,1,11,91,791,1791,4791,9791,182,183,'PMAAAA','VEDAAA','HHHHxx' -2112,2154,0,0,2,12,12,112,112,2112,2112,24,25,'GDAAAA','WEDAAA','OOOOxx' -9114,2155,0,2,4,14,14,114,1114,4114,9114,28,29,'OMAAAA','XEDAAA','VVVVxx' -3506,2156,0,2,6,6,6,506,1506,3506,3506,12,13,'WEAAAA','YEDAAA','AAAAxx' -5002,2157,0,2,2,2,2,2,1002,2,5002,4,5,'KKAAAA','ZEDAAA','HHHHxx' -3518,2158,0,2,8,18,18,518,1518,3518,3518,36,37,'IFAAAA','AFDAAA','OOOOxx' -602,2159,0,2,2,2,2,602,602,602,602,4,5,'EXAAAA','BFDAAA','VVVVxx' -9060,2160,0,0,0,0,60,60,1060,4060,9060,120,121,'MKAAAA','CFDAAA','AAAAxx' -3292,2161,0,0,2,12,92,292,1292,3292,3292,184,185,'QWAAAA','DFDAAA','HHHHxx' -77,2162,1,1,7,17,77,77,77,77,77,154,155,'ZCAAAA','EFDAAA','OOOOxx' -1420,2163,0,0,0,0,20,420,1420,1420,1420,40,41,'QCAAAA','FFDAAA','VVVVxx' -6001,2164,1,1,1,1,1,1,1,1001,6001,2,3,'VWAAAA','GFDAAA','AAAAxx' -7477,2165,1,1,7,17,77,477,1477,2477,7477,154,155,'PBAAAA','HFDAAA','HHHHxx' -6655,2166,1,3,5,15,55,655,655,1655,6655,110,111,'ZVAAAA','IFDAAA','OOOOxx' -7845,2167,1,1,5,5,45,845,1845,2845,7845,90,91,'TPAAAA','JFDAAA','VVVVxx' -8484,2168,0,0,4,4,84,484,484,3484,8484,168,169,'IOAAAA','KFDAAA','AAAAxx' -4345,2169,1,1,5,5,45,345,345,4345,4345,90,91,'DLAAAA','LFDAAA','HHHHxx' -4250,2170,0,2,0,10,50,250,250,4250,4250,100,101,'MHAAAA','MFDAAA','OOOOxx' -2391,2171,1,3,1,11,91,391,391,2391,2391,182,183,'ZNAAAA','NFDAAA','VVVVxx' -6884,2172,0,0,4,4,84,884,884,1884,6884,168,169,'UEAAAA','OFDAAA','AAAAxx' -7270,2173,0,2,0,10,70,270,1270,2270,7270,140,141,'QTAAAA','PFDAAA','HHHHxx' -2499,2174,1,3,9,19,99,499,499,2499,2499,198,199,'DSAAAA','QFDAAA','OOOOxx' -7312,2175,0,0,2,12,12,312,1312,2312,7312,24,25,'GVAAAA','RFDAAA','VVVVxx' -7113,2176,1,1,3,13,13,113,1113,2113,7113,26,27,'PNAAAA','SFDAAA','AAAAxx' -6695,2177,1,3,5,15,95,695,695,1695,6695,190,191,'NXAAAA','TFDAAA','HHHHxx' -6521,2178,1,1,1,1,21,521,521,1521,6521,42,43,'VQAAAA','UFDAAA','OOOOxx' -272,2179,0,0,2,12,72,272,272,272,272,144,145,'MKAAAA','VFDAAA','VVVVxx' -9976,2180,0,0,6,16,76,976,1976,4976,9976,152,153,'STAAAA','WFDAAA','AAAAxx' -992,2181,0,0,2,12,92,992,992,992,992,184,185,'EMAAAA','XFDAAA','HHHHxx' -6158,2182,0,2,8,18,58,158,158,1158,6158,116,117,'WCAAAA','YFDAAA','OOOOxx' -3281,2183,1,1,1,1,81,281,1281,3281,3281,162,163,'FWAAAA','ZFDAAA','VVVVxx' -7446,2184,0,2,6,6,46,446,1446,2446,7446,92,93,'KAAAAA','AGDAAA','AAAAxx' -4679,2185,1,3,9,19,79,679,679,4679,4679,158,159,'ZXAAAA','BGDAAA','HHHHxx' -5203,2186,1,3,3,3,3,203,1203,203,5203,6,7,'DSAAAA','CGDAAA','OOOOxx' -9874,2187,0,2,4,14,74,874,1874,4874,9874,148,149,'UPAAAA','DGDAAA','VVVVxx' -8371,2188,1,3,1,11,71,371,371,3371,8371,142,143,'ZJAAAA','EGDAAA','AAAAxx' -9086,2189,0,2,6,6,86,86,1086,4086,9086,172,173,'MLAAAA','FGDAAA','HHHHxx' -430,2190,0,2,0,10,30,430,430,430,430,60,61,'OQAAAA','GGDAAA','OOOOxx' -8749,2191,1,1,9,9,49,749,749,3749,8749,98,99,'NYAAAA','HGDAAA','VVVVxx' -577,2192,1,1,7,17,77,577,577,577,577,154,155,'FWAAAA','IGDAAA','AAAAxx' -4884,2193,0,0,4,4,84,884,884,4884,4884,168,169,'WFAAAA','JGDAAA','HHHHxx' -3421,2194,1,1,1,1,21,421,1421,3421,3421,42,43,'PBAAAA','KGDAAA','OOOOxx' -2812,2195,0,0,2,12,12,812,812,2812,2812,24,25,'EEAAAA','LGDAAA','VVVVxx' -5958,2196,0,2,8,18,58,958,1958,958,5958,116,117,'EVAAAA','MGDAAA','AAAAxx' -9901,2197,1,1,1,1,1,901,1901,4901,9901,2,3,'VQAAAA','NGDAAA','HHHHxx' -8478,2198,0,2,8,18,78,478,478,3478,8478,156,157,'COAAAA','OGDAAA','OOOOxx' -6545,2199,1,1,5,5,45,545,545,1545,6545,90,91,'TRAAAA','PGDAAA','VVVVxx' -1479,2200,1,3,9,19,79,479,1479,1479,1479,158,159,'XEAAAA','QGDAAA','AAAAxx' -1046,2201,0,2,6,6,46,46,1046,1046,1046,92,93,'GOAAAA','RGDAAA','HHHHxx' -6372,2202,0,0,2,12,72,372,372,1372,6372,144,145,'CLAAAA','SGDAAA','OOOOxx' -8206,2203,0,2,6,6,6,206,206,3206,8206,12,13,'QDAAAA','TGDAAA','VVVVxx' -9544,2204,0,0,4,4,44,544,1544,4544,9544,88,89,'CDAAAA','UGDAAA','AAAAxx' -9287,2205,1,3,7,7,87,287,1287,4287,9287,174,175,'FTAAAA','VGDAAA','HHHHxx' -6786,2206,0,2,6,6,86,786,786,1786,6786,172,173,'ABAAAA','WGDAAA','OOOOxx' -6511,2207,1,3,1,11,11,511,511,1511,6511,22,23,'LQAAAA','XGDAAA','VVVVxx' -603,2208,1,3,3,3,3,603,603,603,603,6,7,'FXAAAA','YGDAAA','AAAAxx' -2022,2209,0,2,2,2,22,22,22,2022,2022,44,45,'UZAAAA','ZGDAAA','HHHHxx' -2086,2210,0,2,6,6,86,86,86,2086,2086,172,173,'GCAAAA','AHDAAA','OOOOxx' -1969,2211,1,1,9,9,69,969,1969,1969,1969,138,139,'TXAAAA','BHDAAA','VVVVxx' -4841,2212,1,1,1,1,41,841,841,4841,4841,82,83,'FEAAAA','CHDAAA','AAAAxx' -5845,2213,1,1,5,5,45,845,1845,845,5845,90,91,'VQAAAA','DHDAAA','HHHHxx' -4635,2214,1,3,5,15,35,635,635,4635,4635,70,71,'HWAAAA','EHDAAA','OOOOxx' -4658,2215,0,2,8,18,58,658,658,4658,4658,116,117,'EXAAAA','FHDAAA','VVVVxx' -2896,2216,0,0,6,16,96,896,896,2896,2896,192,193,'KHAAAA','GHDAAA','AAAAxx' -5179,2217,1,3,9,19,79,179,1179,179,5179,158,159,'FRAAAA','HHDAAA','HHHHxx' -8667,2218,1,3,7,7,67,667,667,3667,8667,134,135,'JVAAAA','IHDAAA','OOOOxx' -7294,2219,0,2,4,14,94,294,1294,2294,7294,188,189,'OUAAAA','JHDAAA','VVVVxx' -3706,2220,0,2,6,6,6,706,1706,3706,3706,12,13,'OMAAAA','KHDAAA','AAAAxx' -8389,2221,1,1,9,9,89,389,389,3389,8389,178,179,'RKAAAA','LHDAAA','HHHHxx' -2486,2222,0,2,6,6,86,486,486,2486,2486,172,173,'QRAAAA','MHDAAA','OOOOxx' -8743,2223,1,3,3,3,43,743,743,3743,8743,86,87,'HYAAAA','NHDAAA','VVVVxx' -2777,2224,1,1,7,17,77,777,777,2777,2777,154,155,'VCAAAA','OHDAAA','AAAAxx' -2113,2225,1,1,3,13,13,113,113,2113,2113,26,27,'HDAAAA','PHDAAA','HHHHxx' -2076,2226,0,0,6,16,76,76,76,2076,2076,152,153,'WBAAAA','QHDAAA','OOOOxx' -2300,2227,0,0,0,0,0,300,300,2300,2300,0,1,'MKAAAA','RHDAAA','VVVVxx' -6894,2228,0,2,4,14,94,894,894,1894,6894,188,189,'EFAAAA','SHDAAA','AAAAxx' -6939,2229,1,3,9,19,39,939,939,1939,6939,78,79,'XGAAAA','THDAAA','HHHHxx' -446,2230,0,2,6,6,46,446,446,446,446,92,93,'ERAAAA','UHDAAA','OOOOxx' -6218,2231,0,2,8,18,18,218,218,1218,6218,36,37,'EFAAAA','VHDAAA','VVVVxx' -1295,2232,1,3,5,15,95,295,1295,1295,1295,190,191,'VXAAAA','WHDAAA','AAAAxx' -5135,2233,1,3,5,15,35,135,1135,135,5135,70,71,'NPAAAA','XHDAAA','HHHHxx' -8122,2234,0,2,2,2,22,122,122,3122,8122,44,45,'KAAAAA','YHDAAA','OOOOxx' -316,2235,0,0,6,16,16,316,316,316,316,32,33,'EMAAAA','ZHDAAA','VVVVxx' -514,2236,0,2,4,14,14,514,514,514,514,28,29,'UTAAAA','AIDAAA','AAAAxx' -7970,2237,0,2,0,10,70,970,1970,2970,7970,140,141,'OUAAAA','BIDAAA','HHHHxx' -9350,2238,0,2,0,10,50,350,1350,4350,9350,100,101,'QVAAAA','CIDAAA','OOOOxx' -3700,2239,0,0,0,0,0,700,1700,3700,3700,0,1,'IMAAAA','DIDAAA','VVVVxx' -582,2240,0,2,2,2,82,582,582,582,582,164,165,'KWAAAA','EIDAAA','AAAAxx' -9722,2241,0,2,2,2,22,722,1722,4722,9722,44,45,'YJAAAA','FIDAAA','HHHHxx' -7398,2242,0,2,8,18,98,398,1398,2398,7398,196,197,'OYAAAA','GIDAAA','OOOOxx' -2265,2243,1,1,5,5,65,265,265,2265,2265,130,131,'DJAAAA','HIDAAA','VVVVxx' -3049,2244,1,1,9,9,49,49,1049,3049,3049,98,99,'HNAAAA','IIDAAA','AAAAxx' -9121,2245,1,1,1,1,21,121,1121,4121,9121,42,43,'VMAAAA','JIDAAA','HHHHxx' -4275,2246,1,3,5,15,75,275,275,4275,4275,150,151,'LIAAAA','KIDAAA','OOOOxx' -6567,2247,1,3,7,7,67,567,567,1567,6567,134,135,'PSAAAA','LIDAAA','VVVVxx' -6755,2248,1,3,5,15,55,755,755,1755,6755,110,111,'VZAAAA','MIDAAA','AAAAxx' -4535,2249,1,3,5,15,35,535,535,4535,4535,70,71,'LSAAAA','NIDAAA','HHHHxx' -7968,2250,0,0,8,8,68,968,1968,2968,7968,136,137,'MUAAAA','OIDAAA','OOOOxx' -3412,2251,0,0,2,12,12,412,1412,3412,3412,24,25,'GBAAAA','PIDAAA','VVVVxx' -6112,2252,0,0,2,12,12,112,112,1112,6112,24,25,'CBAAAA','QIDAAA','AAAAxx' -6805,2253,1,1,5,5,5,805,805,1805,6805,10,11,'TBAAAA','RIDAAA','HHHHxx' -2880,2254,0,0,0,0,80,880,880,2880,2880,160,161,'UGAAAA','SIDAAA','OOOOxx' -7710,2255,0,2,0,10,10,710,1710,2710,7710,20,21,'OKAAAA','TIDAAA','VVVVxx' -7949,2256,1,1,9,9,49,949,1949,2949,7949,98,99,'TTAAAA','UIDAAA','AAAAxx' -7043,2257,1,3,3,3,43,43,1043,2043,7043,86,87,'XKAAAA','VIDAAA','HHHHxx' -9012,2258,0,0,2,12,12,12,1012,4012,9012,24,25,'QIAAAA','WIDAAA','OOOOxx' -878,2259,0,2,8,18,78,878,878,878,878,156,157,'UHAAAA','XIDAAA','VVVVxx' -7930,2260,0,2,0,10,30,930,1930,2930,7930,60,61,'ATAAAA','YIDAAA','AAAAxx' -667,2261,1,3,7,7,67,667,667,667,667,134,135,'RZAAAA','ZIDAAA','HHHHxx' -1905,2262,1,1,5,5,5,905,1905,1905,1905,10,11,'HVAAAA','AJDAAA','OOOOxx' -4958,2263,0,2,8,18,58,958,958,4958,4958,116,117,'SIAAAA','BJDAAA','VVVVxx' -2973,2264,1,1,3,13,73,973,973,2973,2973,146,147,'JKAAAA','CJDAAA','AAAAxx' -3631,2265,1,3,1,11,31,631,1631,3631,3631,62,63,'RJAAAA','DJDAAA','HHHHxx' -5868,2266,0,0,8,8,68,868,1868,868,5868,136,137,'SRAAAA','EJDAAA','OOOOxx' -2873,2267,1,1,3,13,73,873,873,2873,2873,146,147,'NGAAAA','FJDAAA','VVVVxx' -6941,2268,1,1,1,1,41,941,941,1941,6941,82,83,'ZGAAAA','GJDAAA','AAAAxx' -6384,2269,0,0,4,4,84,384,384,1384,6384,168,169,'OLAAAA','HJDAAA','HHHHxx' -3806,2270,0,2,6,6,6,806,1806,3806,3806,12,13,'KQAAAA','IJDAAA','OOOOxx' -5079,2271,1,3,9,19,79,79,1079,79,5079,158,159,'JNAAAA','JJDAAA','VVVVxx' -1970,2272,0,2,0,10,70,970,1970,1970,1970,140,141,'UXAAAA','KJDAAA','AAAAxx' -7810,2273,0,2,0,10,10,810,1810,2810,7810,20,21,'KOAAAA','LJDAAA','HHHHxx' -4639,2274,1,3,9,19,39,639,639,4639,4639,78,79,'LWAAAA','MJDAAA','OOOOxx' -6527,2275,1,3,7,7,27,527,527,1527,6527,54,55,'BRAAAA','NJDAAA','VVVVxx' -8079,2276,1,3,9,19,79,79,79,3079,8079,158,159,'TYAAAA','OJDAAA','AAAAxx' -2740,2277,0,0,0,0,40,740,740,2740,2740,80,81,'KBAAAA','PJDAAA','HHHHxx' -2337,2278,1,1,7,17,37,337,337,2337,2337,74,75,'XLAAAA','QJDAAA','OOOOxx' -6670,2279,0,2,0,10,70,670,670,1670,6670,140,141,'OWAAAA','RJDAAA','VVVVxx' -2345,2280,1,1,5,5,45,345,345,2345,2345,90,91,'FMAAAA','SJDAAA','AAAAxx' -401,2281,1,1,1,1,1,401,401,401,401,2,3,'LPAAAA','TJDAAA','HHHHxx' -2704,2282,0,0,4,4,4,704,704,2704,2704,8,9,'AAAAAA','UJDAAA','OOOOxx' -5530,2283,0,2,0,10,30,530,1530,530,5530,60,61,'SEAAAA','VJDAAA','VVVVxx' -51,2284,1,3,1,11,51,51,51,51,51,102,103,'ZBAAAA','WJDAAA','AAAAxx' -4282,2285,0,2,2,2,82,282,282,4282,4282,164,165,'SIAAAA','XJDAAA','HHHHxx' -7336,2286,0,0,6,16,36,336,1336,2336,7336,72,73,'EWAAAA','YJDAAA','OOOOxx' -8320,2287,0,0,0,0,20,320,320,3320,8320,40,41,'AIAAAA','ZJDAAA','VVVVxx' -7772,2288,0,0,2,12,72,772,1772,2772,7772,144,145,'YMAAAA','AKDAAA','AAAAxx' -1894,2289,0,2,4,14,94,894,1894,1894,1894,188,189,'WUAAAA','BKDAAA','HHHHxx' -2320,2290,0,0,0,0,20,320,320,2320,2320,40,41,'GLAAAA','CKDAAA','OOOOxx' -6232,2291,0,0,2,12,32,232,232,1232,6232,64,65,'SFAAAA','DKDAAA','VVVVxx' -2833,2292,1,1,3,13,33,833,833,2833,2833,66,67,'ZEAAAA','EKDAAA','AAAAxx' -8265,2293,1,1,5,5,65,265,265,3265,8265,130,131,'XFAAAA','FKDAAA','HHHHxx' -4589,2294,1,1,9,9,89,589,589,4589,4589,178,179,'NUAAAA','GKDAAA','OOOOxx' -8182,2295,0,2,2,2,82,182,182,3182,8182,164,165,'SCAAAA','HKDAAA','VVVVxx' -8337,2296,1,1,7,17,37,337,337,3337,8337,74,75,'RIAAAA','IKDAAA','AAAAxx' -8210,2297,0,2,0,10,10,210,210,3210,8210,20,21,'UDAAAA','JKDAAA','HHHHxx' -1406,2298,0,2,6,6,6,406,1406,1406,1406,12,13,'CCAAAA','KKDAAA','OOOOxx' -4463,2299,1,3,3,3,63,463,463,4463,4463,126,127,'RPAAAA','LKDAAA','VVVVxx' -4347,2300,1,3,7,7,47,347,347,4347,4347,94,95,'FLAAAA','MKDAAA','AAAAxx' -181,2301,1,1,1,1,81,181,181,181,181,162,163,'ZGAAAA','NKDAAA','HHHHxx' -9986,2302,0,2,6,6,86,986,1986,4986,9986,172,173,'CUAAAA','OKDAAA','OOOOxx' -661,2303,1,1,1,1,61,661,661,661,661,122,123,'LZAAAA','PKDAAA','VVVVxx' -4105,2304,1,1,5,5,5,105,105,4105,4105,10,11,'XBAAAA','QKDAAA','AAAAxx' -2187,2305,1,3,7,7,87,187,187,2187,2187,174,175,'DGAAAA','RKDAAA','HHHHxx' -1628,2306,0,0,8,8,28,628,1628,1628,1628,56,57,'QKAAAA','SKDAAA','OOOOxx' -3119,2307,1,3,9,19,19,119,1119,3119,3119,38,39,'ZPAAAA','TKDAAA','VVVVxx' -6804,2308,0,0,4,4,4,804,804,1804,6804,8,9,'SBAAAA','UKDAAA','AAAAxx' -9918,2309,0,2,8,18,18,918,1918,4918,9918,36,37,'MRAAAA','VKDAAA','HHHHxx' -8916,2310,0,0,6,16,16,916,916,3916,8916,32,33,'YEAAAA','WKDAAA','OOOOxx' -6057,2311,1,1,7,17,57,57,57,1057,6057,114,115,'ZYAAAA','XKDAAA','VVVVxx' -3622,2312,0,2,2,2,22,622,1622,3622,3622,44,45,'IJAAAA','YKDAAA','AAAAxx' -9168,2313,0,0,8,8,68,168,1168,4168,9168,136,137,'QOAAAA','ZKDAAA','HHHHxx' -3720,2314,0,0,0,0,20,720,1720,3720,3720,40,41,'CNAAAA','ALDAAA','OOOOxx' -9927,2315,1,3,7,7,27,927,1927,4927,9927,54,55,'VRAAAA','BLDAAA','VVVVxx' -5616,2316,0,0,6,16,16,616,1616,616,5616,32,33,'AIAAAA','CLDAAA','AAAAxx' -5210,2317,0,2,0,10,10,210,1210,210,5210,20,21,'KSAAAA','DLDAAA','HHHHxx' -636,2318,0,0,6,16,36,636,636,636,636,72,73,'MYAAAA','ELDAAA','OOOOxx' -9936,2319,0,0,6,16,36,936,1936,4936,9936,72,73,'ESAAAA','FLDAAA','VVVVxx' -2316,2320,0,0,6,16,16,316,316,2316,2316,32,33,'CLAAAA','GLDAAA','AAAAxx' -4363,2321,1,3,3,3,63,363,363,4363,4363,126,127,'VLAAAA','HLDAAA','HHHHxx' -7657,2322,1,1,7,17,57,657,1657,2657,7657,114,115,'NIAAAA','ILDAAA','OOOOxx' -697,2323,1,1,7,17,97,697,697,697,697,194,195,'VAAAAA','JLDAAA','VVVVxx' -912,2324,0,0,2,12,12,912,912,912,912,24,25,'CJAAAA','KLDAAA','AAAAxx' -8806,2325,0,2,6,6,6,806,806,3806,8806,12,13,'SAAAAA','LLDAAA','HHHHxx' -9698,2326,0,2,8,18,98,698,1698,4698,9698,196,197,'AJAAAA','MLDAAA','OOOOxx' -6191,2327,1,3,1,11,91,191,191,1191,6191,182,183,'DEAAAA','NLDAAA','VVVVxx' -1188,2328,0,0,8,8,88,188,1188,1188,1188,176,177,'STAAAA','OLDAAA','AAAAxx' -7676,2329,0,0,6,16,76,676,1676,2676,7676,152,153,'GJAAAA','PLDAAA','HHHHxx' -7073,2330,1,1,3,13,73,73,1073,2073,7073,146,147,'BMAAAA','QLDAAA','OOOOxx' -8019,2331,1,3,9,19,19,19,19,3019,8019,38,39,'LWAAAA','RLDAAA','VVVVxx' -4726,2332,0,2,6,6,26,726,726,4726,4726,52,53,'UZAAAA','SLDAAA','AAAAxx' -4648,2333,0,0,8,8,48,648,648,4648,4648,96,97,'UWAAAA','TLDAAA','HHHHxx' -3227,2334,1,3,7,7,27,227,1227,3227,3227,54,55,'DUAAAA','ULDAAA','OOOOxx' -7232,2335,0,0,2,12,32,232,1232,2232,7232,64,65,'ESAAAA','VLDAAA','VVVVxx' -9761,2336,1,1,1,1,61,761,1761,4761,9761,122,123,'LLAAAA','WLDAAA','AAAAxx' -3105,2337,1,1,5,5,5,105,1105,3105,3105,10,11,'LPAAAA','XLDAAA','HHHHxx' -5266,2338,0,2,6,6,66,266,1266,266,5266,132,133,'OUAAAA','YLDAAA','OOOOxx' -6788,2339,0,0,8,8,88,788,788,1788,6788,176,177,'CBAAAA','ZLDAAA','VVVVxx' -2442,2340,0,2,2,2,42,442,442,2442,2442,84,85,'YPAAAA','AMDAAA','AAAAxx' -8198,2341,0,2,8,18,98,198,198,3198,8198,196,197,'IDAAAA','BMDAAA','HHHHxx' -5806,2342,0,2,6,6,6,806,1806,806,5806,12,13,'IPAAAA','CMDAAA','OOOOxx' -8928,2343,0,0,8,8,28,928,928,3928,8928,56,57,'KFAAAA','DMDAAA','VVVVxx' -1657,2344,1,1,7,17,57,657,1657,1657,1657,114,115,'TLAAAA','EMDAAA','AAAAxx' -9164,2345,0,0,4,4,64,164,1164,4164,9164,128,129,'MOAAAA','FMDAAA','HHHHxx' -1851,2346,1,3,1,11,51,851,1851,1851,1851,102,103,'FTAAAA','GMDAAA','OOOOxx' -4744,2347,0,0,4,4,44,744,744,4744,4744,88,89,'MAAAAA','HMDAAA','VVVVxx' -8055,2348,1,3,5,15,55,55,55,3055,8055,110,111,'VXAAAA','IMDAAA','AAAAxx' -1533,2349,1,1,3,13,33,533,1533,1533,1533,66,67,'ZGAAAA','JMDAAA','HHHHxx' -1260,2350,0,0,0,0,60,260,1260,1260,1260,120,121,'MWAAAA','KMDAAA','OOOOxx' -1290,2351,0,2,0,10,90,290,1290,1290,1290,180,181,'QXAAAA','LMDAAA','VVVVxx' -297,2352,1,1,7,17,97,297,297,297,297,194,195,'LLAAAA','MMDAAA','AAAAxx' -4145,2353,1,1,5,5,45,145,145,4145,4145,90,91,'LDAAAA','NMDAAA','HHHHxx' -863,2354,1,3,3,3,63,863,863,863,863,126,127,'FHAAAA','OMDAAA','OOOOxx' -3423,2355,1,3,3,3,23,423,1423,3423,3423,46,47,'RBAAAA','PMDAAA','VVVVxx' -8750,2356,0,2,0,10,50,750,750,3750,8750,100,101,'OYAAAA','QMDAAA','AAAAxx' -3546,2357,0,2,6,6,46,546,1546,3546,3546,92,93,'KGAAAA','RMDAAA','HHHHxx' -3678,2358,0,2,8,18,78,678,1678,3678,3678,156,157,'MLAAAA','SMDAAA','OOOOxx' -5313,2359,1,1,3,13,13,313,1313,313,5313,26,27,'JWAAAA','TMDAAA','VVVVxx' -6233,2360,1,1,3,13,33,233,233,1233,6233,66,67,'TFAAAA','UMDAAA','AAAAxx' -5802,2361,0,2,2,2,2,802,1802,802,5802,4,5,'EPAAAA','VMDAAA','HHHHxx' -7059,2362,1,3,9,19,59,59,1059,2059,7059,118,119,'NLAAAA','WMDAAA','OOOOxx' -6481,2363,1,1,1,1,81,481,481,1481,6481,162,163,'HPAAAA','XMDAAA','VVVVxx' -1596,2364,0,0,6,16,96,596,1596,1596,1596,192,193,'KJAAAA','YMDAAA','AAAAxx' -8181,2365,1,1,1,1,81,181,181,3181,8181,162,163,'RCAAAA','ZMDAAA','HHHHxx' -5368,2366,0,0,8,8,68,368,1368,368,5368,136,137,'MYAAAA','ANDAAA','OOOOxx' -9416,2367,0,0,6,16,16,416,1416,4416,9416,32,33,'EYAAAA','BNDAAA','VVVVxx' -9521,2368,1,1,1,1,21,521,1521,4521,9521,42,43,'FCAAAA','CNDAAA','AAAAxx' -1042,2369,0,2,2,2,42,42,1042,1042,1042,84,85,'COAAAA','DNDAAA','HHHHxx' -4503,2370,1,3,3,3,3,503,503,4503,4503,6,7,'FRAAAA','ENDAAA','OOOOxx' -3023,2371,1,3,3,3,23,23,1023,3023,3023,46,47,'HMAAAA','FNDAAA','VVVVxx' -1976,2372,0,0,6,16,76,976,1976,1976,1976,152,153,'AYAAAA','GNDAAA','AAAAxx' -5610,2373,0,2,0,10,10,610,1610,610,5610,20,21,'UHAAAA','HNDAAA','HHHHxx' -7410,2374,0,2,0,10,10,410,1410,2410,7410,20,21,'AZAAAA','INDAAA','OOOOxx' -7872,2375,0,0,2,12,72,872,1872,2872,7872,144,145,'UQAAAA','JNDAAA','VVVVxx' -8591,2376,1,3,1,11,91,591,591,3591,8591,182,183,'LSAAAA','KNDAAA','AAAAxx' -1804,2377,0,0,4,4,4,804,1804,1804,1804,8,9,'KRAAAA','LNDAAA','HHHHxx' -5299,2378,1,3,9,19,99,299,1299,299,5299,198,199,'VVAAAA','MNDAAA','OOOOxx' -4695,2379,1,3,5,15,95,695,695,4695,4695,190,191,'PYAAAA','NNDAAA','VVVVxx' -2672,2380,0,0,2,12,72,672,672,2672,2672,144,145,'UYAAAA','ONDAAA','AAAAxx' -585,2381,1,1,5,5,85,585,585,585,585,170,171,'NWAAAA','PNDAAA','HHHHxx' -8622,2382,0,2,2,2,22,622,622,3622,8622,44,45,'QTAAAA','QNDAAA','OOOOxx' -3780,2383,0,0,0,0,80,780,1780,3780,3780,160,161,'KPAAAA','RNDAAA','VVVVxx' -7941,2384,1,1,1,1,41,941,1941,2941,7941,82,83,'LTAAAA','SNDAAA','AAAAxx' -3305,2385,1,1,5,5,5,305,1305,3305,3305,10,11,'DXAAAA','TNDAAA','HHHHxx' -8653,2386,1,1,3,13,53,653,653,3653,8653,106,107,'VUAAAA','UNDAAA','OOOOxx' -5756,2387,0,0,6,16,56,756,1756,756,5756,112,113,'KNAAAA','VNDAAA','VVVVxx' -576,2388,0,0,6,16,76,576,576,576,576,152,153,'EWAAAA','WNDAAA','AAAAxx' -1915,2389,1,3,5,15,15,915,1915,1915,1915,30,31,'RVAAAA','XNDAAA','HHHHxx' -4627,2390,1,3,7,7,27,627,627,4627,4627,54,55,'ZVAAAA','YNDAAA','OOOOxx' -920,2391,0,0,0,0,20,920,920,920,920,40,41,'KJAAAA','ZNDAAA','VVVVxx' -2537,2392,1,1,7,17,37,537,537,2537,2537,74,75,'PTAAAA','AODAAA','AAAAxx' -50,2393,0,2,0,10,50,50,50,50,50,100,101,'YBAAAA','BODAAA','HHHHxx' -1313,2394,1,1,3,13,13,313,1313,1313,1313,26,27,'NYAAAA','CODAAA','OOOOxx' -8542,2395,0,2,2,2,42,542,542,3542,8542,84,85,'OQAAAA','DODAAA','VVVVxx' -6428,2396,0,0,8,8,28,428,428,1428,6428,56,57,'GNAAAA','EODAAA','AAAAxx' -4351,2397,1,3,1,11,51,351,351,4351,4351,102,103,'JLAAAA','FODAAA','HHHHxx' -2050,2398,0,2,0,10,50,50,50,2050,2050,100,101,'WAAAAA','GODAAA','OOOOxx' -5162,2399,0,2,2,2,62,162,1162,162,5162,124,125,'OQAAAA','HODAAA','VVVVxx' -8229,2400,1,1,9,9,29,229,229,3229,8229,58,59,'NEAAAA','IODAAA','AAAAxx' -7782,2401,0,2,2,2,82,782,1782,2782,7782,164,165,'INAAAA','JODAAA','HHHHxx' -1563,2402,1,3,3,3,63,563,1563,1563,1563,126,127,'DIAAAA','KODAAA','OOOOxx' -267,2403,1,3,7,7,67,267,267,267,267,134,135,'HKAAAA','LODAAA','VVVVxx' -5138,2404,0,2,8,18,38,138,1138,138,5138,76,77,'QPAAAA','MODAAA','AAAAxx' -7022,2405,0,2,2,2,22,22,1022,2022,7022,44,45,'CKAAAA','NODAAA','HHHHxx' -6705,2406,1,1,5,5,5,705,705,1705,6705,10,11,'XXAAAA','OODAAA','OOOOxx' -6190,2407,0,2,0,10,90,190,190,1190,6190,180,181,'CEAAAA','PODAAA','VVVVxx' -8226,2408,0,2,6,6,26,226,226,3226,8226,52,53,'KEAAAA','QODAAA','AAAAxx' -8882,2409,0,2,2,2,82,882,882,3882,8882,164,165,'QDAAAA','RODAAA','HHHHxx' -5181,2410,1,1,1,1,81,181,1181,181,5181,162,163,'HRAAAA','SODAAA','OOOOxx' -4598,2411,0,2,8,18,98,598,598,4598,4598,196,197,'WUAAAA','TODAAA','VVVVxx' -4882,2412,0,2,2,2,82,882,882,4882,4882,164,165,'UFAAAA','UODAAA','AAAAxx' -7490,2413,0,2,0,10,90,490,1490,2490,7490,180,181,'CCAAAA','VODAAA','HHHHxx' -5224,2414,0,0,4,4,24,224,1224,224,5224,48,49,'YSAAAA','WODAAA','OOOOxx' -2174,2415,0,2,4,14,74,174,174,2174,2174,148,149,'QFAAAA','XODAAA','VVVVxx' -3059,2416,1,3,9,19,59,59,1059,3059,3059,118,119,'RNAAAA','YODAAA','AAAAxx' -8790,2417,0,2,0,10,90,790,790,3790,8790,180,181,'CAAAAA','ZODAAA','HHHHxx' -2222,2418,0,2,2,2,22,222,222,2222,2222,44,45,'MHAAAA','APDAAA','OOOOxx' -5473,2419,1,1,3,13,73,473,1473,473,5473,146,147,'NCAAAA','BPDAAA','VVVVxx' -937,2420,1,1,7,17,37,937,937,937,937,74,75,'BKAAAA','CPDAAA','AAAAxx' -2975,2421,1,3,5,15,75,975,975,2975,2975,150,151,'LKAAAA','DPDAAA','HHHHxx' -9569,2422,1,1,9,9,69,569,1569,4569,9569,138,139,'BEAAAA','EPDAAA','OOOOxx' -3456,2423,0,0,6,16,56,456,1456,3456,3456,112,113,'YCAAAA','FPDAAA','VVVVxx' -6657,2424,1,1,7,17,57,657,657,1657,6657,114,115,'BWAAAA','GPDAAA','AAAAxx' -3776,2425,0,0,6,16,76,776,1776,3776,3776,152,153,'GPAAAA','HPDAAA','HHHHxx' -6072,2426,0,0,2,12,72,72,72,1072,6072,144,145,'OZAAAA','IPDAAA','OOOOxx' -8129,2427,1,1,9,9,29,129,129,3129,8129,58,59,'RAAAAA','JPDAAA','VVVVxx' -1085,2428,1,1,5,5,85,85,1085,1085,1085,170,171,'TPAAAA','KPDAAA','AAAAxx' -2079,2429,1,3,9,19,79,79,79,2079,2079,158,159,'ZBAAAA','LPDAAA','HHHHxx' -1200,2430,0,0,0,0,0,200,1200,1200,1200,0,1,'EUAAAA','MPDAAA','OOOOxx' -3276,2431,0,0,6,16,76,276,1276,3276,3276,152,153,'AWAAAA','NPDAAA','VVVVxx' -2608,2432,0,0,8,8,8,608,608,2608,2608,16,17,'IWAAAA','OPDAAA','AAAAxx' -702,2433,0,2,2,2,2,702,702,702,702,4,5,'ABAAAA','PPDAAA','HHHHxx' -5750,2434,0,2,0,10,50,750,1750,750,5750,100,101,'ENAAAA','QPDAAA','OOOOxx' -2776,2435,0,0,6,16,76,776,776,2776,2776,152,153,'UCAAAA','RPDAAA','VVVVxx' -9151,2436,1,3,1,11,51,151,1151,4151,9151,102,103,'ZNAAAA','SPDAAA','AAAAxx' -3282,2437,0,2,2,2,82,282,1282,3282,3282,164,165,'GWAAAA','TPDAAA','HHHHxx' -408,2438,0,0,8,8,8,408,408,408,408,16,17,'SPAAAA','UPDAAA','OOOOxx' -3473,2439,1,1,3,13,73,473,1473,3473,3473,146,147,'PDAAAA','VPDAAA','VVVVxx' -7095,2440,1,3,5,15,95,95,1095,2095,7095,190,191,'XMAAAA','WPDAAA','AAAAxx' -3288,2441,0,0,8,8,88,288,1288,3288,3288,176,177,'MWAAAA','XPDAAA','HHHHxx' -8215,2442,1,3,5,15,15,215,215,3215,8215,30,31,'ZDAAAA','YPDAAA','OOOOxx' -6244,2443,0,0,4,4,44,244,244,1244,6244,88,89,'EGAAAA','ZPDAAA','VVVVxx' -8440,2444,0,0,0,0,40,440,440,3440,8440,80,81,'QMAAAA','AQDAAA','AAAAxx' -3800,2445,0,0,0,0,0,800,1800,3800,3800,0,1,'EQAAAA','BQDAAA','HHHHxx' -7279,2446,1,3,9,19,79,279,1279,2279,7279,158,159,'ZTAAAA','CQDAAA','OOOOxx' -9206,2447,0,2,6,6,6,206,1206,4206,9206,12,13,'CQAAAA','DQDAAA','VVVVxx' -6465,2448,1,1,5,5,65,465,465,1465,6465,130,131,'ROAAAA','EQDAAA','AAAAxx' -4127,2449,1,3,7,7,27,127,127,4127,4127,54,55,'TCAAAA','FQDAAA','HHHHxx' -7463,2450,1,3,3,3,63,463,1463,2463,7463,126,127,'BBAAAA','GQDAAA','OOOOxx' -5117,2451,1,1,7,17,17,117,1117,117,5117,34,35,'VOAAAA','HQDAAA','VVVVxx' -4715,2452,1,3,5,15,15,715,715,4715,4715,30,31,'JZAAAA','IQDAAA','AAAAxx' -2010,2453,0,2,0,10,10,10,10,2010,2010,20,21,'IZAAAA','JQDAAA','HHHHxx' -6486,2454,0,2,6,6,86,486,486,1486,6486,172,173,'MPAAAA','KQDAAA','OOOOxx' -6434,2455,0,2,4,14,34,434,434,1434,6434,68,69,'MNAAAA','LQDAAA','VVVVxx' -2151,2456,1,3,1,11,51,151,151,2151,2151,102,103,'TEAAAA','MQDAAA','AAAAxx' -4821,2457,1,1,1,1,21,821,821,4821,4821,42,43,'LDAAAA','NQDAAA','HHHHxx' -6507,2458,1,3,7,7,7,507,507,1507,6507,14,15,'HQAAAA','OQDAAA','OOOOxx' -8741,2459,1,1,1,1,41,741,741,3741,8741,82,83,'FYAAAA','PQDAAA','VVVVxx' -6846,2460,0,2,6,6,46,846,846,1846,6846,92,93,'IDAAAA','QQDAAA','AAAAxx' -4525,2461,1,1,5,5,25,525,525,4525,4525,50,51,'BSAAAA','RQDAAA','HHHHxx' -8299,2462,1,3,9,19,99,299,299,3299,8299,198,199,'FHAAAA','SQDAAA','OOOOxx' -5465,2463,1,1,5,5,65,465,1465,465,5465,130,131,'FCAAAA','TQDAAA','VVVVxx' -7206,2464,0,2,6,6,6,206,1206,2206,7206,12,13,'ERAAAA','UQDAAA','AAAAxx' -2616,2465,0,0,6,16,16,616,616,2616,2616,32,33,'QWAAAA','VQDAAA','HHHHxx' -4440,2466,0,0,0,0,40,440,440,4440,4440,80,81,'UOAAAA','WQDAAA','OOOOxx' -6109,2467,1,1,9,9,9,109,109,1109,6109,18,19,'ZAAAAA','XQDAAA','VVVVxx' -7905,2468,1,1,5,5,5,905,1905,2905,7905,10,11,'BSAAAA','YQDAAA','AAAAxx' -6498,2469,0,2,8,18,98,498,498,1498,6498,196,197,'YPAAAA','ZQDAAA','HHHHxx' -2034,2470,0,2,4,14,34,34,34,2034,2034,68,69,'GAAAAA','ARDAAA','OOOOxx' -7693,2471,1,1,3,13,93,693,1693,2693,7693,186,187,'XJAAAA','BRDAAA','VVVVxx' -7511,2472,1,3,1,11,11,511,1511,2511,7511,22,23,'XCAAAA','CRDAAA','AAAAxx' -7531,2473,1,3,1,11,31,531,1531,2531,7531,62,63,'RDAAAA','DRDAAA','HHHHxx' -6869,2474,1,1,9,9,69,869,869,1869,6869,138,139,'FEAAAA','ERDAAA','OOOOxx' -2763,2475,1,3,3,3,63,763,763,2763,2763,126,127,'HCAAAA','FRDAAA','VVVVxx' -575,2476,1,3,5,15,75,575,575,575,575,150,151,'DWAAAA','GRDAAA','AAAAxx' -8953,2477,1,1,3,13,53,953,953,3953,8953,106,107,'JGAAAA','HRDAAA','HHHHxx' -5833,2478,1,1,3,13,33,833,1833,833,5833,66,67,'JQAAAA','IRDAAA','OOOOxx' -9035,2479,1,3,5,15,35,35,1035,4035,9035,70,71,'NJAAAA','JRDAAA','VVVVxx' -9123,2480,1,3,3,3,23,123,1123,4123,9123,46,47,'XMAAAA','KRDAAA','AAAAxx' -206,2481,0,2,6,6,6,206,206,206,206,12,13,'YHAAAA','LRDAAA','HHHHxx' -4155,2482,1,3,5,15,55,155,155,4155,4155,110,111,'VDAAAA','MRDAAA','OOOOxx' -532,2483,0,0,2,12,32,532,532,532,532,64,65,'MUAAAA','NRDAAA','VVVVxx' -1370,2484,0,2,0,10,70,370,1370,1370,1370,140,141,'SAAAAA','ORDAAA','AAAAxx' -7656,2485,0,0,6,16,56,656,1656,2656,7656,112,113,'MIAAAA','PRDAAA','HHHHxx' -7735,2486,1,3,5,15,35,735,1735,2735,7735,70,71,'NLAAAA','QRDAAA','OOOOxx' -2118,2487,0,2,8,18,18,118,118,2118,2118,36,37,'MDAAAA','RRDAAA','VVVVxx' -6914,2488,0,2,4,14,14,914,914,1914,6914,28,29,'YFAAAA','SRDAAA','AAAAxx' -6277,2489,1,1,7,17,77,277,277,1277,6277,154,155,'LHAAAA','TRDAAA','HHHHxx' -6347,2490,1,3,7,7,47,347,347,1347,6347,94,95,'DKAAAA','URDAAA','OOOOxx' -4030,2491,0,2,0,10,30,30,30,4030,4030,60,61,'AZAAAA','VRDAAA','VVVVxx' -9673,2492,1,1,3,13,73,673,1673,4673,9673,146,147,'BIAAAA','WRDAAA','AAAAxx' -2015,2493,1,3,5,15,15,15,15,2015,2015,30,31,'NZAAAA','XRDAAA','HHHHxx' -1317,2494,1,1,7,17,17,317,1317,1317,1317,34,35,'RYAAAA','YRDAAA','OOOOxx' -404,2495,0,0,4,4,4,404,404,404,404,8,9,'OPAAAA','ZRDAAA','VVVVxx' -1604,2496,0,0,4,4,4,604,1604,1604,1604,8,9,'SJAAAA','ASDAAA','AAAAxx' -1912,2497,0,0,2,12,12,912,1912,1912,1912,24,25,'OVAAAA','BSDAAA','HHHHxx' -5727,2498,1,3,7,7,27,727,1727,727,5727,54,55,'HMAAAA','CSDAAA','OOOOxx' -4538,2499,0,2,8,18,38,538,538,4538,4538,76,77,'OSAAAA','DSDAAA','VVVVxx' -6868,2500,0,0,8,8,68,868,868,1868,6868,136,137,'EEAAAA','ESDAAA','AAAAxx' -9801,2501,1,1,1,1,1,801,1801,4801,9801,2,3,'ZMAAAA','FSDAAA','HHHHxx' -1781,2502,1,1,1,1,81,781,1781,1781,1781,162,163,'NQAAAA','GSDAAA','OOOOxx' -7061,2503,1,1,1,1,61,61,1061,2061,7061,122,123,'PLAAAA','HSDAAA','VVVVxx' -2412,2504,0,0,2,12,12,412,412,2412,2412,24,25,'UOAAAA','ISDAAA','AAAAxx' -9191,2505,1,3,1,11,91,191,1191,4191,9191,182,183,'NPAAAA','JSDAAA','HHHHxx' -1958,2506,0,2,8,18,58,958,1958,1958,1958,116,117,'IXAAAA','KSDAAA','OOOOxx' -2203,2507,1,3,3,3,3,203,203,2203,2203,6,7,'TGAAAA','LSDAAA','VVVVxx' -9104,2508,0,0,4,4,4,104,1104,4104,9104,8,9,'EMAAAA','MSDAAA','AAAAxx' -3837,2509,1,1,7,17,37,837,1837,3837,3837,74,75,'PRAAAA','NSDAAA','HHHHxx' -7055,2510,1,3,5,15,55,55,1055,2055,7055,110,111,'JLAAAA','OSDAAA','OOOOxx' -4612,2511,0,0,2,12,12,612,612,4612,4612,24,25,'KVAAAA','PSDAAA','VVVVxx' -6420,2512,0,0,0,0,20,420,420,1420,6420,40,41,'YMAAAA','QSDAAA','AAAAxx' -613,2513,1,1,3,13,13,613,613,613,613,26,27,'PXAAAA','RSDAAA','HHHHxx' -1691,2514,1,3,1,11,91,691,1691,1691,1691,182,183,'BNAAAA','SSDAAA','OOOOxx' -33,2515,1,1,3,13,33,33,33,33,33,66,67,'HBAAAA','TSDAAA','VVVVxx' -875,2516,1,3,5,15,75,875,875,875,875,150,151,'RHAAAA','USDAAA','AAAAxx' -9030,2517,0,2,0,10,30,30,1030,4030,9030,60,61,'IJAAAA','VSDAAA','HHHHxx' -4285,2518,1,1,5,5,85,285,285,4285,4285,170,171,'VIAAAA','WSDAAA','OOOOxx' -6236,2519,0,0,6,16,36,236,236,1236,6236,72,73,'WFAAAA','XSDAAA','VVVVxx' -4702,2520,0,2,2,2,2,702,702,4702,4702,4,5,'WYAAAA','YSDAAA','AAAAxx' -3441,2521,1,1,1,1,41,441,1441,3441,3441,82,83,'JCAAAA','ZSDAAA','HHHHxx' -2150,2522,0,2,0,10,50,150,150,2150,2150,100,101,'SEAAAA','ATDAAA','OOOOxx' -1852,2523,0,0,2,12,52,852,1852,1852,1852,104,105,'GTAAAA','BTDAAA','VVVVxx' -7713,2524,1,1,3,13,13,713,1713,2713,7713,26,27,'RKAAAA','CTDAAA','AAAAxx' -6849,2525,1,1,9,9,49,849,849,1849,6849,98,99,'LDAAAA','DTDAAA','HHHHxx' -3425,2526,1,1,5,5,25,425,1425,3425,3425,50,51,'TBAAAA','ETDAAA','OOOOxx' -4681,2527,1,1,1,1,81,681,681,4681,4681,162,163,'BYAAAA','FTDAAA','VVVVxx' -1134,2528,0,2,4,14,34,134,1134,1134,1134,68,69,'QRAAAA','GTDAAA','AAAAxx' -7462,2529,0,2,2,2,62,462,1462,2462,7462,124,125,'ABAAAA','HTDAAA','HHHHxx' -2148,2530,0,0,8,8,48,148,148,2148,2148,96,97,'QEAAAA','ITDAAA','OOOOxx' -5921,2531,1,1,1,1,21,921,1921,921,5921,42,43,'TTAAAA','JTDAAA','VVVVxx' -118,2532,0,2,8,18,18,118,118,118,118,36,37,'OEAAAA','KTDAAA','AAAAxx' -3065,2533,1,1,5,5,65,65,1065,3065,3065,130,131,'XNAAAA','LTDAAA','HHHHxx' -6590,2534,0,2,0,10,90,590,590,1590,6590,180,181,'MTAAAA','MTDAAA','OOOOxx' -4993,2535,1,1,3,13,93,993,993,4993,4993,186,187,'BKAAAA','NTDAAA','VVVVxx' -6818,2536,0,2,8,18,18,818,818,1818,6818,36,37,'GCAAAA','OTDAAA','AAAAxx' -1449,2537,1,1,9,9,49,449,1449,1449,1449,98,99,'TDAAAA','PTDAAA','HHHHxx' -2039,2538,1,3,9,19,39,39,39,2039,2039,78,79,'LAAAAA','QTDAAA','OOOOxx' -2524,2539,0,0,4,4,24,524,524,2524,2524,48,49,'CTAAAA','RTDAAA','VVVVxx' -1481,2540,1,1,1,1,81,481,1481,1481,1481,162,163,'ZEAAAA','STDAAA','AAAAxx' -6984,2541,0,0,4,4,84,984,984,1984,6984,168,169,'QIAAAA','TTDAAA','HHHHxx' -3960,2542,0,0,0,0,60,960,1960,3960,3960,120,121,'IWAAAA','UTDAAA','OOOOxx' -1983,2543,1,3,3,3,83,983,1983,1983,1983,166,167,'HYAAAA','VTDAAA','VVVVxx' -6379,2544,1,3,9,19,79,379,379,1379,6379,158,159,'JLAAAA','WTDAAA','AAAAxx' -8975,2545,1,3,5,15,75,975,975,3975,8975,150,151,'FHAAAA','XTDAAA','HHHHxx' -1102,2546,0,2,2,2,2,102,1102,1102,1102,4,5,'KQAAAA','YTDAAA','OOOOxx' -2517,2547,1,1,7,17,17,517,517,2517,2517,34,35,'VSAAAA','ZTDAAA','VVVVxx' -712,2548,0,0,2,12,12,712,712,712,712,24,25,'KBAAAA','AUDAAA','AAAAxx' -5419,2549,1,3,9,19,19,419,1419,419,5419,38,39,'LAAAAA','BUDAAA','HHHHxx' -723,2550,1,3,3,3,23,723,723,723,723,46,47,'VBAAAA','CUDAAA','OOOOxx' -8057,2551,1,1,7,17,57,57,57,3057,8057,114,115,'XXAAAA','DUDAAA','VVVVxx' -7471,2552,1,3,1,11,71,471,1471,2471,7471,142,143,'JBAAAA','EUDAAA','AAAAxx' -8855,2553,1,3,5,15,55,855,855,3855,8855,110,111,'PCAAAA','FUDAAA','HHHHxx' -5074,2554,0,2,4,14,74,74,1074,74,5074,148,149,'ENAAAA','GUDAAA','OOOOxx' -7139,2555,1,3,9,19,39,139,1139,2139,7139,78,79,'POAAAA','HUDAAA','VVVVxx' -3833,2556,1,1,3,13,33,833,1833,3833,3833,66,67,'LRAAAA','IUDAAA','AAAAxx' -5186,2557,0,2,6,6,86,186,1186,186,5186,172,173,'MRAAAA','JUDAAA','HHHHxx' -9436,2558,0,0,6,16,36,436,1436,4436,9436,72,73,'YYAAAA','KUDAAA','OOOOxx' -8859,2559,1,3,9,19,59,859,859,3859,8859,118,119,'TCAAAA','LUDAAA','VVVVxx' -6943,2560,1,3,3,3,43,943,943,1943,6943,86,87,'BHAAAA','MUDAAA','AAAAxx' -2315,2561,1,3,5,15,15,315,315,2315,2315,30,31,'BLAAAA','NUDAAA','HHHHxx' -1394,2562,0,2,4,14,94,394,1394,1394,1394,188,189,'QBAAAA','OUDAAA','OOOOxx' -8863,2563,1,3,3,3,63,863,863,3863,8863,126,127,'XCAAAA','PUDAAA','VVVVxx' -8812,2564,0,0,2,12,12,812,812,3812,8812,24,25,'YAAAAA','QUDAAA','AAAAxx' -7498,2565,0,2,8,18,98,498,1498,2498,7498,196,197,'KCAAAA','RUDAAA','HHHHxx' -8962,2566,0,2,2,2,62,962,962,3962,8962,124,125,'SGAAAA','SUDAAA','OOOOxx' -2533,2567,1,1,3,13,33,533,533,2533,2533,66,67,'LTAAAA','TUDAAA','VVVVxx' -8188,2568,0,0,8,8,88,188,188,3188,8188,176,177,'YCAAAA','UUDAAA','AAAAxx' -6137,2569,1,1,7,17,37,137,137,1137,6137,74,75,'BCAAAA','VUDAAA','HHHHxx' -974,2570,0,2,4,14,74,974,974,974,974,148,149,'MLAAAA','WUDAAA','OOOOxx' -2751,2571,1,3,1,11,51,751,751,2751,2751,102,103,'VBAAAA','XUDAAA','VVVVxx' -4975,2572,1,3,5,15,75,975,975,4975,4975,150,151,'JJAAAA','YUDAAA','AAAAxx' -3411,2573,1,3,1,11,11,411,1411,3411,3411,22,23,'FBAAAA','ZUDAAA','HHHHxx' -3143,2574,1,3,3,3,43,143,1143,3143,3143,86,87,'XQAAAA','AVDAAA','OOOOxx' -8011,2575,1,3,1,11,11,11,11,3011,8011,22,23,'DWAAAA','BVDAAA','VVVVxx' -988,2576,0,0,8,8,88,988,988,988,988,176,177,'AMAAAA','CVDAAA','AAAAxx' -4289,2577,1,1,9,9,89,289,289,4289,4289,178,179,'ZIAAAA','DVDAAA','HHHHxx' -8105,2578,1,1,5,5,5,105,105,3105,8105,10,11,'TZAAAA','EVDAAA','OOOOxx' -9885,2579,1,1,5,5,85,885,1885,4885,9885,170,171,'FQAAAA','FVDAAA','VVVVxx' -1002,2580,0,2,2,2,2,2,1002,1002,1002,4,5,'OMAAAA','GVDAAA','AAAAxx' -5827,2581,1,3,7,7,27,827,1827,827,5827,54,55,'DQAAAA','HVDAAA','HHHHxx' -1228,2582,0,0,8,8,28,228,1228,1228,1228,56,57,'GVAAAA','IVDAAA','OOOOxx' -6352,2583,0,0,2,12,52,352,352,1352,6352,104,105,'IKAAAA','JVDAAA','VVVVxx' -8868,2584,0,0,8,8,68,868,868,3868,8868,136,137,'CDAAAA','KVDAAA','AAAAxx' -3643,2585,1,3,3,3,43,643,1643,3643,3643,86,87,'DKAAAA','LVDAAA','HHHHxx' -1468,2586,0,0,8,8,68,468,1468,1468,1468,136,137,'MEAAAA','MVDAAA','OOOOxx' -8415,2587,1,3,5,15,15,415,415,3415,8415,30,31,'RLAAAA','NVDAAA','VVVVxx' -9631,2588,1,3,1,11,31,631,1631,4631,9631,62,63,'LGAAAA','OVDAAA','AAAAxx' -7408,2589,0,0,8,8,8,408,1408,2408,7408,16,17,'YYAAAA','PVDAAA','HHHHxx' -1934,2590,0,2,4,14,34,934,1934,1934,1934,68,69,'KWAAAA','QVDAAA','OOOOxx' -996,2591,0,0,6,16,96,996,996,996,996,192,193,'IMAAAA','RVDAAA','VVVVxx' -8027,2592,1,3,7,7,27,27,27,3027,8027,54,55,'TWAAAA','SVDAAA','AAAAxx' -8464,2593,0,0,4,4,64,464,464,3464,8464,128,129,'ONAAAA','TVDAAA','HHHHxx' -5007,2594,1,3,7,7,7,7,1007,7,5007,14,15,'PKAAAA','UVDAAA','OOOOxx' -8356,2595,0,0,6,16,56,356,356,3356,8356,112,113,'KJAAAA','VVDAAA','VVVVxx' -4579,2596,1,3,9,19,79,579,579,4579,4579,158,159,'DUAAAA','WVDAAA','AAAAxx' -8513,2597,1,1,3,13,13,513,513,3513,8513,26,27,'LPAAAA','XVDAAA','HHHHxx' -383,2598,1,3,3,3,83,383,383,383,383,166,167,'TOAAAA','YVDAAA','OOOOxx' -9304,2599,0,0,4,4,4,304,1304,4304,9304,8,9,'WTAAAA','ZVDAAA','VVVVxx' -7224,2600,0,0,4,4,24,224,1224,2224,7224,48,49,'WRAAAA','AWDAAA','AAAAxx' -6023,2601,1,3,3,3,23,23,23,1023,6023,46,47,'RXAAAA','BWDAAA','HHHHxx' -2746,2602,0,2,6,6,46,746,746,2746,2746,92,93,'QBAAAA','CWDAAA','OOOOxx' -137,2603,1,1,7,17,37,137,137,137,137,74,75,'HFAAAA','DWDAAA','VVVVxx' -9441,2604,1,1,1,1,41,441,1441,4441,9441,82,83,'DZAAAA','EWDAAA','AAAAxx' -3690,2605,0,2,0,10,90,690,1690,3690,3690,180,181,'YLAAAA','FWDAAA','HHHHxx' -913,2606,1,1,3,13,13,913,913,913,913,26,27,'DJAAAA','GWDAAA','OOOOxx' -1768,2607,0,0,8,8,68,768,1768,1768,1768,136,137,'AQAAAA','HWDAAA','VVVVxx' -8492,2608,0,0,2,12,92,492,492,3492,8492,184,185,'QOAAAA','IWDAAA','AAAAxx' -8083,2609,1,3,3,3,83,83,83,3083,8083,166,167,'XYAAAA','JWDAAA','HHHHxx' -4609,2610,1,1,9,9,9,609,609,4609,4609,18,19,'HVAAAA','KWDAAA','OOOOxx' -7520,2611,0,0,0,0,20,520,1520,2520,7520,40,41,'GDAAAA','LWDAAA','VVVVxx' -4231,2612,1,3,1,11,31,231,231,4231,4231,62,63,'TGAAAA','MWDAAA','AAAAxx' -6022,2613,0,2,2,2,22,22,22,1022,6022,44,45,'QXAAAA','NWDAAA','HHHHxx' -9784,2614,0,0,4,4,84,784,1784,4784,9784,168,169,'IMAAAA','OWDAAA','OOOOxx' -1343,2615,1,3,3,3,43,343,1343,1343,1343,86,87,'RZAAAA','PWDAAA','VVVVxx' -7549,2616,1,1,9,9,49,549,1549,2549,7549,98,99,'JEAAAA','QWDAAA','AAAAxx' -269,2617,1,1,9,9,69,269,269,269,269,138,139,'JKAAAA','RWDAAA','HHHHxx' -1069,2618,1,1,9,9,69,69,1069,1069,1069,138,139,'DPAAAA','SWDAAA','OOOOxx' -4610,2619,0,2,0,10,10,610,610,4610,4610,20,21,'IVAAAA','TWDAAA','VVVVxx' -482,2620,0,2,2,2,82,482,482,482,482,164,165,'OSAAAA','UWDAAA','AAAAxx' -3025,2621,1,1,5,5,25,25,1025,3025,3025,50,51,'JMAAAA','VWDAAA','HHHHxx' -7914,2622,0,2,4,14,14,914,1914,2914,7914,28,29,'KSAAAA','WWDAAA','OOOOxx' -3198,2623,0,2,8,18,98,198,1198,3198,3198,196,197,'ATAAAA','XWDAAA','VVVVxx' -1187,2624,1,3,7,7,87,187,1187,1187,1187,174,175,'RTAAAA','YWDAAA','AAAAxx' -4707,2625,1,3,7,7,7,707,707,4707,4707,14,15,'BZAAAA','ZWDAAA','HHHHxx' -8279,2626,1,3,9,19,79,279,279,3279,8279,158,159,'LGAAAA','AXDAAA','OOOOxx' -6127,2627,1,3,7,7,27,127,127,1127,6127,54,55,'RBAAAA','BXDAAA','VVVVxx' -1305,2628,1,1,5,5,5,305,1305,1305,1305,10,11,'FYAAAA','CXDAAA','AAAAxx' -4804,2629,0,0,4,4,4,804,804,4804,4804,8,9,'UCAAAA','DXDAAA','HHHHxx' -6069,2630,1,1,9,9,69,69,69,1069,6069,138,139,'LZAAAA','EXDAAA','OOOOxx' -9229,2631,1,1,9,9,29,229,1229,4229,9229,58,59,'ZQAAAA','FXDAAA','VVVVxx' -4703,2632,1,3,3,3,3,703,703,4703,4703,6,7,'XYAAAA','GXDAAA','AAAAxx' -6410,2633,0,2,0,10,10,410,410,1410,6410,20,21,'OMAAAA','HXDAAA','HHHHxx' -944,2634,0,0,4,4,44,944,944,944,944,88,89,'IKAAAA','IXDAAA','OOOOxx' -3744,2635,0,0,4,4,44,744,1744,3744,3744,88,89,'AOAAAA','JXDAAA','VVVVxx' -1127,2636,1,3,7,7,27,127,1127,1127,1127,54,55,'JRAAAA','KXDAAA','AAAAxx' -6693,2637,1,1,3,13,93,693,693,1693,6693,186,187,'LXAAAA','LXDAAA','HHHHxx' -583,2638,1,3,3,3,83,583,583,583,583,166,167,'LWAAAA','MXDAAA','OOOOxx' -2684,2639,0,0,4,4,84,684,684,2684,2684,168,169,'GZAAAA','NXDAAA','VVVVxx' -6192,2640,0,0,2,12,92,192,192,1192,6192,184,185,'EEAAAA','OXDAAA','AAAAxx' -4157,2641,1,1,7,17,57,157,157,4157,4157,114,115,'XDAAAA','PXDAAA','HHHHxx' -6470,2642,0,2,0,10,70,470,470,1470,6470,140,141,'WOAAAA','QXDAAA','OOOOxx' -8965,2643,1,1,5,5,65,965,965,3965,8965,130,131,'VGAAAA','RXDAAA','VVVVxx' -1433,2644,1,1,3,13,33,433,1433,1433,1433,66,67,'DDAAAA','SXDAAA','AAAAxx' -4570,2645,0,2,0,10,70,570,570,4570,4570,140,141,'UTAAAA','TXDAAA','HHHHxx' -1806,2646,0,2,6,6,6,806,1806,1806,1806,12,13,'MRAAAA','UXDAAA','OOOOxx' -1230,2647,0,2,0,10,30,230,1230,1230,1230,60,61,'IVAAAA','VXDAAA','VVVVxx' -2283,2648,1,3,3,3,83,283,283,2283,2283,166,167,'VJAAAA','WXDAAA','AAAAxx' -6456,2649,0,0,6,16,56,456,456,1456,6456,112,113,'IOAAAA','XXDAAA','HHHHxx' -7427,2650,1,3,7,7,27,427,1427,2427,7427,54,55,'RZAAAA','YXDAAA','OOOOxx' -8310,2651,0,2,0,10,10,310,310,3310,8310,20,21,'QHAAAA','ZXDAAA','VVVVxx' -8103,2652,1,3,3,3,3,103,103,3103,8103,6,7,'RZAAAA','AYDAAA','AAAAxx' -3947,2653,1,3,7,7,47,947,1947,3947,3947,94,95,'VVAAAA','BYDAAA','HHHHxx' -3414,2654,0,2,4,14,14,414,1414,3414,3414,28,29,'IBAAAA','CYDAAA','OOOOxx' -2043,2655,1,3,3,3,43,43,43,2043,2043,86,87,'PAAAAA','DYDAAA','VVVVxx' -4393,2656,1,1,3,13,93,393,393,4393,4393,186,187,'ZMAAAA','EYDAAA','AAAAxx' -6664,2657,0,0,4,4,64,664,664,1664,6664,128,129,'IWAAAA','FYDAAA','HHHHxx' -4545,2658,1,1,5,5,45,545,545,4545,4545,90,91,'VSAAAA','GYDAAA','OOOOxx' -7637,2659,1,1,7,17,37,637,1637,2637,7637,74,75,'THAAAA','HYDAAA','VVVVxx' -1359,2660,1,3,9,19,59,359,1359,1359,1359,118,119,'HAAAAA','IYDAAA','AAAAxx' -5018,2661,0,2,8,18,18,18,1018,18,5018,36,37,'ALAAAA','JYDAAA','HHHHxx' -987,2662,1,3,7,7,87,987,987,987,987,174,175,'ZLAAAA','KYDAAA','OOOOxx' -1320,2663,0,0,0,0,20,320,1320,1320,1320,40,41,'UYAAAA','LYDAAA','VVVVxx' -9311,2664,1,3,1,11,11,311,1311,4311,9311,22,23,'DUAAAA','MYDAAA','AAAAxx' -7993,2665,1,1,3,13,93,993,1993,2993,7993,186,187,'LVAAAA','NYDAAA','HHHHxx' -7588,2666,0,0,8,8,88,588,1588,2588,7588,176,177,'WFAAAA','OYDAAA','OOOOxx' -5983,2667,1,3,3,3,83,983,1983,983,5983,166,167,'DWAAAA','PYDAAA','VVVVxx' -4070,2668,0,2,0,10,70,70,70,4070,4070,140,141,'OAAAAA','QYDAAA','AAAAxx' -8349,2669,1,1,9,9,49,349,349,3349,8349,98,99,'DJAAAA','RYDAAA','HHHHxx' -3810,2670,0,2,0,10,10,810,1810,3810,3810,20,21,'OQAAAA','SYDAAA','OOOOxx' -6948,2671,0,0,8,8,48,948,948,1948,6948,96,97,'GHAAAA','TYDAAA','VVVVxx' -7153,2672,1,1,3,13,53,153,1153,2153,7153,106,107,'DPAAAA','UYDAAA','AAAAxx' -5371,2673,1,3,1,11,71,371,1371,371,5371,142,143,'PYAAAA','VYDAAA','HHHHxx' -8316,2674,0,0,6,16,16,316,316,3316,8316,32,33,'WHAAAA','WYDAAA','OOOOxx' -5903,2675,1,3,3,3,3,903,1903,903,5903,6,7,'BTAAAA','XYDAAA','VVVVxx' -6718,2676,0,2,8,18,18,718,718,1718,6718,36,37,'KYAAAA','YYDAAA','AAAAxx' -4759,2677,1,3,9,19,59,759,759,4759,4759,118,119,'BBAAAA','ZYDAAA','HHHHxx' -2555,2678,1,3,5,15,55,555,555,2555,2555,110,111,'HUAAAA','AZDAAA','OOOOxx' -3457,2679,1,1,7,17,57,457,1457,3457,3457,114,115,'ZCAAAA','BZDAAA','VVVVxx' -9626,2680,0,2,6,6,26,626,1626,4626,9626,52,53,'GGAAAA','CZDAAA','AAAAxx' -2570,2681,0,2,0,10,70,570,570,2570,2570,140,141,'WUAAAA','DZDAAA','HHHHxx' -7964,2682,0,0,4,4,64,964,1964,2964,7964,128,129,'IUAAAA','EZDAAA','OOOOxx' -1543,2683,1,3,3,3,43,543,1543,1543,1543,86,87,'JHAAAA','FZDAAA','VVVVxx' -929,2684,1,1,9,9,29,929,929,929,929,58,59,'TJAAAA','GZDAAA','AAAAxx' -9244,2685,0,0,4,4,44,244,1244,4244,9244,88,89,'ORAAAA','HZDAAA','HHHHxx' -9210,2686,0,2,0,10,10,210,1210,4210,9210,20,21,'GQAAAA','IZDAAA','OOOOxx' -8334,2687,0,2,4,14,34,334,334,3334,8334,68,69,'OIAAAA','JZDAAA','VVVVxx' -9310,2688,0,2,0,10,10,310,1310,4310,9310,20,21,'CUAAAA','KZDAAA','AAAAxx' -5024,2689,0,0,4,4,24,24,1024,24,5024,48,49,'GLAAAA','LZDAAA','HHHHxx' -8794,2690,0,2,4,14,94,794,794,3794,8794,188,189,'GAAAAA','MZDAAA','OOOOxx' -4091,2691,1,3,1,11,91,91,91,4091,4091,182,183,'JBAAAA','NZDAAA','VVVVxx' -649,2692,1,1,9,9,49,649,649,649,649,98,99,'ZYAAAA','OZDAAA','AAAAxx' -8505,2693,1,1,5,5,5,505,505,3505,8505,10,11,'DPAAAA','PZDAAA','HHHHxx' -6652,2694,0,0,2,12,52,652,652,1652,6652,104,105,'WVAAAA','QZDAAA','OOOOxx' -8945,2695,1,1,5,5,45,945,945,3945,8945,90,91,'BGAAAA','RZDAAA','VVVVxx' -2095,2696,1,3,5,15,95,95,95,2095,2095,190,191,'PCAAAA','SZDAAA','AAAAxx' -8676,2697,0,0,6,16,76,676,676,3676,8676,152,153,'SVAAAA','TZDAAA','HHHHxx' -3994,2698,0,2,4,14,94,994,1994,3994,3994,188,189,'QXAAAA','UZDAAA','OOOOxx' -2859,2699,1,3,9,19,59,859,859,2859,2859,118,119,'ZFAAAA','VZDAAA','VVVVxx' -5403,2700,1,3,3,3,3,403,1403,403,5403,6,7,'VZAAAA','WZDAAA','AAAAxx' -3254,2701,0,2,4,14,54,254,1254,3254,3254,108,109,'EVAAAA','XZDAAA','HHHHxx' -7339,2702,1,3,9,19,39,339,1339,2339,7339,78,79,'HWAAAA','YZDAAA','OOOOxx' -7220,2703,0,0,0,0,20,220,1220,2220,7220,40,41,'SRAAAA','ZZDAAA','VVVVxx' -4154,2704,0,2,4,14,54,154,154,4154,4154,108,109,'UDAAAA','AAEAAA','AAAAxx' -7570,2705,0,2,0,10,70,570,1570,2570,7570,140,141,'EFAAAA','BAEAAA','HHHHxx' -2576,2706,0,0,6,16,76,576,576,2576,2576,152,153,'CVAAAA','CAEAAA','OOOOxx' -5764,2707,0,0,4,4,64,764,1764,764,5764,128,129,'SNAAAA','DAEAAA','VVVVxx' -4314,2708,0,2,4,14,14,314,314,4314,4314,28,29,'YJAAAA','EAEAAA','AAAAxx' -2274,2709,0,2,4,14,74,274,274,2274,2274,148,149,'MJAAAA','FAEAAA','HHHHxx' -9756,2710,0,0,6,16,56,756,1756,4756,9756,112,113,'GLAAAA','GAEAAA','OOOOxx' -8274,2711,0,2,4,14,74,274,274,3274,8274,148,149,'GGAAAA','HAEAAA','VVVVxx' -1289,2712,1,1,9,9,89,289,1289,1289,1289,178,179,'PXAAAA','IAEAAA','AAAAxx' -7335,2713,1,3,5,15,35,335,1335,2335,7335,70,71,'DWAAAA','JAEAAA','HHHHxx' -5351,2714,1,3,1,11,51,351,1351,351,5351,102,103,'VXAAAA','KAEAAA','OOOOxx' -8978,2715,0,2,8,18,78,978,978,3978,8978,156,157,'IHAAAA','LAEAAA','VVVVxx' -2,2716,0,2,2,2,2,2,2,2,2,4,5,'CAAAAA','MAEAAA','AAAAxx' -8906,2717,0,2,6,6,6,906,906,3906,8906,12,13,'OEAAAA','NAEAAA','HHHHxx' -6388,2718,0,0,8,8,88,388,388,1388,6388,176,177,'SLAAAA','OAEAAA','OOOOxx' -5675,2719,1,3,5,15,75,675,1675,675,5675,150,151,'HKAAAA','PAEAAA','VVVVxx' -255,2720,1,3,5,15,55,255,255,255,255,110,111,'VJAAAA','QAEAAA','AAAAxx' -9538,2721,0,2,8,18,38,538,1538,4538,9538,76,77,'WCAAAA','RAEAAA','HHHHxx' -1480,2722,0,0,0,0,80,480,1480,1480,1480,160,161,'YEAAAA','SAEAAA','OOOOxx' -4015,2723,1,3,5,15,15,15,15,4015,4015,30,31,'LYAAAA','TAEAAA','VVVVxx' -5166,2724,0,2,6,6,66,166,1166,166,5166,132,133,'SQAAAA','UAEAAA','AAAAxx' -91,2725,1,3,1,11,91,91,91,91,91,182,183,'NDAAAA','VAEAAA','HHHHxx' -2958,2726,0,2,8,18,58,958,958,2958,2958,116,117,'UJAAAA','WAEAAA','OOOOxx' -9131,2727,1,3,1,11,31,131,1131,4131,9131,62,63,'FNAAAA','XAEAAA','VVVVxx' -3944,2728,0,0,4,4,44,944,1944,3944,3944,88,89,'SVAAAA','YAEAAA','AAAAxx' -4514,2729,0,2,4,14,14,514,514,4514,4514,28,29,'QRAAAA','ZAEAAA','HHHHxx' -5661,2730,1,1,1,1,61,661,1661,661,5661,122,123,'TJAAAA','ABEAAA','OOOOxx' -8724,2731,0,0,4,4,24,724,724,3724,8724,48,49,'OXAAAA','BBEAAA','VVVVxx' -6408,2732,0,0,8,8,8,408,408,1408,6408,16,17,'MMAAAA','CBEAAA','AAAAxx' -5013,2733,1,1,3,13,13,13,1013,13,5013,26,27,'VKAAAA','DBEAAA','HHHHxx' -6156,2734,0,0,6,16,56,156,156,1156,6156,112,113,'UCAAAA','EBEAAA','OOOOxx' -7350,2735,0,2,0,10,50,350,1350,2350,7350,100,101,'SWAAAA','FBEAAA','VVVVxx' -9858,2736,0,2,8,18,58,858,1858,4858,9858,116,117,'EPAAAA','GBEAAA','AAAAxx' -895,2737,1,3,5,15,95,895,895,895,895,190,191,'LIAAAA','HBEAAA','HHHHxx' -8368,2738,0,0,8,8,68,368,368,3368,8368,136,137,'WJAAAA','IBEAAA','OOOOxx' -179,2739,1,3,9,19,79,179,179,179,179,158,159,'XGAAAA','JBEAAA','VVVVxx' -4048,2740,0,0,8,8,48,48,48,4048,4048,96,97,'SZAAAA','KBEAAA','AAAAxx' -3073,2741,1,1,3,13,73,73,1073,3073,3073,146,147,'FOAAAA','LBEAAA','HHHHxx' -321,2742,1,1,1,1,21,321,321,321,321,42,43,'JMAAAA','MBEAAA','OOOOxx' -5352,2743,0,0,2,12,52,352,1352,352,5352,104,105,'WXAAAA','NBEAAA','VVVVxx' -1940,2744,0,0,0,0,40,940,1940,1940,1940,80,81,'QWAAAA','OBEAAA','AAAAxx' -8803,2745,1,3,3,3,3,803,803,3803,8803,6,7,'PAAAAA','PBEAAA','HHHHxx' -791,2746,1,3,1,11,91,791,791,791,791,182,183,'LEAAAA','QBEAAA','OOOOxx' -9809,2747,1,1,9,9,9,809,1809,4809,9809,18,19,'HNAAAA','RBEAAA','VVVVxx' -5519,2748,1,3,9,19,19,519,1519,519,5519,38,39,'HEAAAA','SBEAAA','AAAAxx' -7420,2749,0,0,0,0,20,420,1420,2420,7420,40,41,'KZAAAA','TBEAAA','HHHHxx' -7541,2750,1,1,1,1,41,541,1541,2541,7541,82,83,'BEAAAA','UBEAAA','OOOOxx' -6538,2751,0,2,8,18,38,538,538,1538,6538,76,77,'MRAAAA','VBEAAA','VVVVxx' -710,2752,0,2,0,10,10,710,710,710,710,20,21,'IBAAAA','WBEAAA','AAAAxx' -9488,2753,0,0,8,8,88,488,1488,4488,9488,176,177,'YAAAAA','XBEAAA','HHHHxx' -3135,2754,1,3,5,15,35,135,1135,3135,3135,70,71,'PQAAAA','YBEAAA','OOOOxx' -4273,2755,1,1,3,13,73,273,273,4273,4273,146,147,'JIAAAA','ZBEAAA','VVVVxx' -629,2756,1,1,9,9,29,629,629,629,629,58,59,'FYAAAA','ACEAAA','AAAAxx' -9167,2757,1,3,7,7,67,167,1167,4167,9167,134,135,'POAAAA','BCEAAA','HHHHxx' -751,2758,1,3,1,11,51,751,751,751,751,102,103,'XCAAAA','CCEAAA','OOOOxx' -1126,2759,0,2,6,6,26,126,1126,1126,1126,52,53,'IRAAAA','DCEAAA','VVVVxx' -3724,2760,0,0,4,4,24,724,1724,3724,3724,48,49,'GNAAAA','ECEAAA','AAAAxx' -1789,2761,1,1,9,9,89,789,1789,1789,1789,178,179,'VQAAAA','FCEAAA','HHHHxx' -792,2762,0,0,2,12,92,792,792,792,792,184,185,'MEAAAA','GCEAAA','OOOOxx' -2771,2763,1,3,1,11,71,771,771,2771,2771,142,143,'PCAAAA','HCEAAA','VVVVxx' -4313,2764,1,1,3,13,13,313,313,4313,4313,26,27,'XJAAAA','ICEAAA','AAAAxx' -9312,2765,0,0,2,12,12,312,1312,4312,9312,24,25,'EUAAAA','JCEAAA','HHHHxx' -955,2766,1,3,5,15,55,955,955,955,955,110,111,'TKAAAA','KCEAAA','OOOOxx' -6382,2767,0,2,2,2,82,382,382,1382,6382,164,165,'MLAAAA','LCEAAA','VVVVxx' -7875,2768,1,3,5,15,75,875,1875,2875,7875,150,151,'XQAAAA','MCEAAA','AAAAxx' -7491,2769,1,3,1,11,91,491,1491,2491,7491,182,183,'DCAAAA','NCEAAA','HHHHxx' -8193,2770,1,1,3,13,93,193,193,3193,8193,186,187,'DDAAAA','OCEAAA','OOOOxx' -968,2771,0,0,8,8,68,968,968,968,968,136,137,'GLAAAA','PCEAAA','VVVVxx' -4951,2772,1,3,1,11,51,951,951,4951,4951,102,103,'LIAAAA','QCEAAA','AAAAxx' -2204,2773,0,0,4,4,4,204,204,2204,2204,8,9,'UGAAAA','RCEAAA','HHHHxx' -2066,2774,0,2,6,6,66,66,66,2066,2066,132,133,'MBAAAA','SCEAAA','OOOOxx' -2631,2775,1,3,1,11,31,631,631,2631,2631,62,63,'FXAAAA','TCEAAA','VVVVxx' -8947,2776,1,3,7,7,47,947,947,3947,8947,94,95,'DGAAAA','UCEAAA','AAAAxx' -8033,2777,1,1,3,13,33,33,33,3033,8033,66,67,'ZWAAAA','VCEAAA','HHHHxx' -6264,2778,0,0,4,4,64,264,264,1264,6264,128,129,'YGAAAA','WCEAAA','OOOOxx' -7778,2779,0,2,8,18,78,778,1778,2778,7778,156,157,'ENAAAA','XCEAAA','VVVVxx' -9701,2780,1,1,1,1,1,701,1701,4701,9701,2,3,'DJAAAA','YCEAAA','AAAAxx' -5091,2781,1,3,1,11,91,91,1091,91,5091,182,183,'VNAAAA','ZCEAAA','HHHHxx' -7577,2782,1,1,7,17,77,577,1577,2577,7577,154,155,'LFAAAA','ADEAAA','OOOOxx' -3345,2783,1,1,5,5,45,345,1345,3345,3345,90,91,'RYAAAA','BDEAAA','VVVVxx' -7329,2784,1,1,9,9,29,329,1329,2329,7329,58,59,'XVAAAA','CDEAAA','AAAAxx' -7551,2785,1,3,1,11,51,551,1551,2551,7551,102,103,'LEAAAA','DDEAAA','HHHHxx' -6207,2786,1,3,7,7,7,207,207,1207,6207,14,15,'TEAAAA','EDEAAA','OOOOxx' -8664,2787,0,0,4,4,64,664,664,3664,8664,128,129,'GVAAAA','FDEAAA','VVVVxx' -8394,2788,0,2,4,14,94,394,394,3394,8394,188,189,'WKAAAA','GDEAAA','AAAAxx' -7324,2789,0,0,4,4,24,324,1324,2324,7324,48,49,'SVAAAA','HDEAAA','HHHHxx' -2713,2790,1,1,3,13,13,713,713,2713,2713,26,27,'JAAAAA','IDEAAA','OOOOxx' -2230,2791,0,2,0,10,30,230,230,2230,2230,60,61,'UHAAAA','JDEAAA','VVVVxx' -9211,2792,1,3,1,11,11,211,1211,4211,9211,22,23,'HQAAAA','KDEAAA','AAAAxx' -1296,2793,0,0,6,16,96,296,1296,1296,1296,192,193,'WXAAAA','LDEAAA','HHHHxx' -8104,2794,0,0,4,4,4,104,104,3104,8104,8,9,'SZAAAA','MDEAAA','OOOOxx' -6916,2795,0,0,6,16,16,916,916,1916,6916,32,33,'AGAAAA','NDEAAA','VVVVxx' -2208,2796,0,0,8,8,8,208,208,2208,2208,16,17,'YGAAAA','ODEAAA','AAAAxx' -3935,2797,1,3,5,15,35,935,1935,3935,3935,70,71,'JVAAAA','PDEAAA','HHHHxx' -7814,2798,0,2,4,14,14,814,1814,2814,7814,28,29,'OOAAAA','QDEAAA','OOOOxx' -6508,2799,0,0,8,8,8,508,508,1508,6508,16,17,'IQAAAA','RDEAAA','VVVVxx' -1703,2800,1,3,3,3,3,703,1703,1703,1703,6,7,'NNAAAA','SDEAAA','AAAAxx' -5640,2801,0,0,0,0,40,640,1640,640,5640,80,81,'YIAAAA','TDEAAA','HHHHxx' -6417,2802,1,1,7,17,17,417,417,1417,6417,34,35,'VMAAAA','UDEAAA','OOOOxx' -1713,2803,1,1,3,13,13,713,1713,1713,1713,26,27,'XNAAAA','VDEAAA','VVVVxx' -5309,2804,1,1,9,9,9,309,1309,309,5309,18,19,'FWAAAA','WDEAAA','AAAAxx' -4364,2805,0,0,4,4,64,364,364,4364,4364,128,129,'WLAAAA','XDEAAA','HHHHxx' -619,2806,1,3,9,19,19,619,619,619,619,38,39,'VXAAAA','YDEAAA','OOOOxx' -9498,2807,0,2,8,18,98,498,1498,4498,9498,196,197,'IBAAAA','ZDEAAA','VVVVxx' -2804,2808,0,0,4,4,4,804,804,2804,2804,8,9,'WDAAAA','AEEAAA','AAAAxx' -2220,2809,0,0,0,0,20,220,220,2220,2220,40,41,'KHAAAA','BEEAAA','HHHHxx' -9542,2810,0,2,2,2,42,542,1542,4542,9542,84,85,'ADAAAA','CEEAAA','OOOOxx' -3349,2811,1,1,9,9,49,349,1349,3349,3349,98,99,'VYAAAA','DEEAAA','VVVVxx' -9198,2812,0,2,8,18,98,198,1198,4198,9198,196,197,'UPAAAA','EEEAAA','AAAAxx' -2727,2813,1,3,7,7,27,727,727,2727,2727,54,55,'XAAAAA','FEEAAA','HHHHxx' -3768,2814,0,0,8,8,68,768,1768,3768,3768,136,137,'YOAAAA','GEEAAA','OOOOxx' -2334,2815,0,2,4,14,34,334,334,2334,2334,68,69,'ULAAAA','HEEAAA','VVVVxx' -7770,2816,0,2,0,10,70,770,1770,2770,7770,140,141,'WMAAAA','IEEAAA','AAAAxx' -5963,2817,1,3,3,3,63,963,1963,963,5963,126,127,'JVAAAA','JEEAAA','HHHHxx' -4732,2818,0,0,2,12,32,732,732,4732,4732,64,65,'AAAAAA','KEEAAA','OOOOxx' -2448,2819,0,0,8,8,48,448,448,2448,2448,96,97,'EQAAAA','LEEAAA','VVVVxx' -5998,2820,0,2,8,18,98,998,1998,998,5998,196,197,'SWAAAA','MEEAAA','AAAAxx' -8577,2821,1,1,7,17,77,577,577,3577,8577,154,155,'XRAAAA','NEEAAA','HHHHxx' -266,2822,0,2,6,6,66,266,266,266,266,132,133,'GKAAAA','OEEAAA','OOOOxx' -2169,2823,1,1,9,9,69,169,169,2169,2169,138,139,'LFAAAA','PEEAAA','VVVVxx' -8228,2824,0,0,8,8,28,228,228,3228,8228,56,57,'MEAAAA','QEEAAA','AAAAxx' -4813,2825,1,1,3,13,13,813,813,4813,4813,26,27,'DDAAAA','REEAAA','HHHHxx' -2769,2826,1,1,9,9,69,769,769,2769,2769,138,139,'NCAAAA','SEEAAA','OOOOxx' -8382,2827,0,2,2,2,82,382,382,3382,8382,164,165,'KKAAAA','TEEAAA','VVVVxx' -1717,2828,1,1,7,17,17,717,1717,1717,1717,34,35,'BOAAAA','UEEAAA','AAAAxx' -7178,2829,0,2,8,18,78,178,1178,2178,7178,156,157,'CQAAAA','VEEAAA','HHHHxx' -9547,2830,1,3,7,7,47,547,1547,4547,9547,94,95,'FDAAAA','WEEAAA','OOOOxx' -8187,2831,1,3,7,7,87,187,187,3187,8187,174,175,'XCAAAA','XEEAAA','VVVVxx' -3168,2832,0,0,8,8,68,168,1168,3168,3168,136,137,'WRAAAA','YEEAAA','AAAAxx' -2180,2833,0,0,0,0,80,180,180,2180,2180,160,161,'WFAAAA','ZEEAAA','HHHHxx' -859,2834,1,3,9,19,59,859,859,859,859,118,119,'BHAAAA','AFEAAA','OOOOxx' -1554,2835,0,2,4,14,54,554,1554,1554,1554,108,109,'UHAAAA','BFEAAA','VVVVxx' -3567,2836,1,3,7,7,67,567,1567,3567,3567,134,135,'FHAAAA','CFEAAA','AAAAxx' -5985,2837,1,1,5,5,85,985,1985,985,5985,170,171,'FWAAAA','DFEAAA','HHHHxx' -1,2838,1,1,1,1,1,1,1,1,1,2,3,'BAAAAA','EFEAAA','OOOOxx' -5937,2839,1,1,7,17,37,937,1937,937,5937,74,75,'JUAAAA','FFEAAA','VVVVxx' -7594,2840,0,2,4,14,94,594,1594,2594,7594,188,189,'CGAAAA','GFEAAA','AAAAxx' -3783,2841,1,3,3,3,83,783,1783,3783,3783,166,167,'NPAAAA','HFEAAA','HHHHxx' -6841,2842,1,1,1,1,41,841,841,1841,6841,82,83,'DDAAAA','IFEAAA','OOOOxx' -9694,2843,0,2,4,14,94,694,1694,4694,9694,188,189,'WIAAAA','JFEAAA','VVVVxx' -4322,2844,0,2,2,2,22,322,322,4322,4322,44,45,'GKAAAA','KFEAAA','AAAAxx' -6012,2845,0,0,2,12,12,12,12,1012,6012,24,25,'GXAAAA','LFEAAA','HHHHxx' -108,2846,0,0,8,8,8,108,108,108,108,16,17,'EEAAAA','MFEAAA','OOOOxx' -3396,2847,0,0,6,16,96,396,1396,3396,3396,192,193,'QAAAAA','NFEAAA','VVVVxx' -8643,2848,1,3,3,3,43,643,643,3643,8643,86,87,'LUAAAA','OFEAAA','AAAAxx' -6087,2849,1,3,7,7,87,87,87,1087,6087,174,175,'DAAAAA','PFEAAA','HHHHxx' -2629,2850,1,1,9,9,29,629,629,2629,2629,58,59,'DXAAAA','QFEAAA','OOOOxx' -3009,2851,1,1,9,9,9,9,1009,3009,3009,18,19,'TLAAAA','RFEAAA','VVVVxx' -438,2852,0,2,8,18,38,438,438,438,438,76,77,'WQAAAA','SFEAAA','AAAAxx' -2480,2853,0,0,0,0,80,480,480,2480,2480,160,161,'KRAAAA','TFEAAA','HHHHxx' -936,2854,0,0,6,16,36,936,936,936,936,72,73,'AKAAAA','UFEAAA','OOOOxx' -6,2855,0,2,6,6,6,6,6,6,6,12,13,'GAAAAA','VFEAAA','VVVVxx' -768,2856,0,0,8,8,68,768,768,768,768,136,137,'ODAAAA','WFEAAA','AAAAxx' -1564,2857,0,0,4,4,64,564,1564,1564,1564,128,129,'EIAAAA','XFEAAA','HHHHxx' -3236,2858,0,0,6,16,36,236,1236,3236,3236,72,73,'MUAAAA','YFEAAA','OOOOxx' -3932,2859,0,0,2,12,32,932,1932,3932,3932,64,65,'GVAAAA','ZFEAAA','VVVVxx' -8914,2860,0,2,4,14,14,914,914,3914,8914,28,29,'WEAAAA','AGEAAA','AAAAxx' -119,2861,1,3,9,19,19,119,119,119,119,38,39,'PEAAAA','BGEAAA','HHHHxx' -6034,2862,0,2,4,14,34,34,34,1034,6034,68,69,'CYAAAA','CGEAAA','OOOOxx' -5384,2863,0,0,4,4,84,384,1384,384,5384,168,169,'CZAAAA','DGEAAA','VVVVxx' -6885,2864,1,1,5,5,85,885,885,1885,6885,170,171,'VEAAAA','EGEAAA','AAAAxx' -232,2865,0,0,2,12,32,232,232,232,232,64,65,'YIAAAA','FGEAAA','HHHHxx' -1293,2866,1,1,3,13,93,293,1293,1293,1293,186,187,'TXAAAA','GGEAAA','OOOOxx' -9204,2867,0,0,4,4,4,204,1204,4204,9204,8,9,'AQAAAA','HGEAAA','VVVVxx' -527,2868,1,3,7,7,27,527,527,527,527,54,55,'HUAAAA','IGEAAA','AAAAxx' -6539,2869,1,3,9,19,39,539,539,1539,6539,78,79,'NRAAAA','JGEAAA','HHHHxx' -3679,2870,1,3,9,19,79,679,1679,3679,3679,158,159,'NLAAAA','KGEAAA','OOOOxx' -8282,2871,0,2,2,2,82,282,282,3282,8282,164,165,'OGAAAA','LGEAAA','VVVVxx' -5027,2872,1,3,7,7,27,27,1027,27,5027,54,55,'JLAAAA','MGEAAA','AAAAxx' -7694,2873,0,2,4,14,94,694,1694,2694,7694,188,189,'YJAAAA','NGEAAA','HHHHxx' -473,2874,1,1,3,13,73,473,473,473,473,146,147,'FSAAAA','OGEAAA','OOOOxx' -6325,2875,1,1,5,5,25,325,325,1325,6325,50,51,'HJAAAA','PGEAAA','VVVVxx' -8761,2876,1,1,1,1,61,761,761,3761,8761,122,123,'ZYAAAA','QGEAAA','AAAAxx' -6184,2877,0,0,4,4,84,184,184,1184,6184,168,169,'WDAAAA','RGEAAA','HHHHxx' -419,2878,1,3,9,19,19,419,419,419,419,38,39,'DQAAAA','SGEAAA','OOOOxx' -6111,2879,1,3,1,11,11,111,111,1111,6111,22,23,'BBAAAA','TGEAAA','VVVVxx' -3836,2880,0,0,6,16,36,836,1836,3836,3836,72,73,'ORAAAA','UGEAAA','AAAAxx' -4086,2881,0,2,6,6,86,86,86,4086,4086,172,173,'EBAAAA','VGEAAA','HHHHxx' -5818,2882,0,2,8,18,18,818,1818,818,5818,36,37,'UPAAAA','WGEAAA','OOOOxx' -4528,2883,0,0,8,8,28,528,528,4528,4528,56,57,'ESAAAA','XGEAAA','VVVVxx' -7199,2884,1,3,9,19,99,199,1199,2199,7199,198,199,'XQAAAA','YGEAAA','AAAAxx' -1847,2885,1,3,7,7,47,847,1847,1847,1847,94,95,'BTAAAA','ZGEAAA','HHHHxx' -2875,2886,1,3,5,15,75,875,875,2875,2875,150,151,'PGAAAA','AHEAAA','OOOOxx' -2872,2887,0,0,2,12,72,872,872,2872,2872,144,145,'MGAAAA','BHEAAA','VVVVxx' -3972,2888,0,0,2,12,72,972,1972,3972,3972,144,145,'UWAAAA','CHEAAA','AAAAxx' -7590,2889,0,2,0,10,90,590,1590,2590,7590,180,181,'YFAAAA','DHEAAA','HHHHxx' -1914,2890,0,2,4,14,14,914,1914,1914,1914,28,29,'QVAAAA','EHEAAA','OOOOxx' -1658,2891,0,2,8,18,58,658,1658,1658,1658,116,117,'ULAAAA','FHEAAA','VVVVxx' -2126,2892,0,2,6,6,26,126,126,2126,2126,52,53,'UDAAAA','GHEAAA','AAAAxx' -645,2893,1,1,5,5,45,645,645,645,645,90,91,'VYAAAA','HHEAAA','HHHHxx' -6636,2894,0,0,6,16,36,636,636,1636,6636,72,73,'GVAAAA','IHEAAA','OOOOxx' -1469,2895,1,1,9,9,69,469,1469,1469,1469,138,139,'NEAAAA','JHEAAA','VVVVxx' -1377,2896,1,1,7,17,77,377,1377,1377,1377,154,155,'ZAAAAA','KHEAAA','AAAAxx' -8425,2897,1,1,5,5,25,425,425,3425,8425,50,51,'BMAAAA','LHEAAA','HHHHxx' -9300,2898,0,0,0,0,0,300,1300,4300,9300,0,1,'STAAAA','MHEAAA','OOOOxx' -5355,2899,1,3,5,15,55,355,1355,355,5355,110,111,'ZXAAAA','NHEAAA','VVVVxx' -840,2900,0,0,0,0,40,840,840,840,840,80,81,'IGAAAA','OHEAAA','AAAAxx' -5185,2901,1,1,5,5,85,185,1185,185,5185,170,171,'LRAAAA','PHEAAA','HHHHxx' -6467,2902,1,3,7,7,67,467,467,1467,6467,134,135,'TOAAAA','QHEAAA','OOOOxx' -58,2903,0,2,8,18,58,58,58,58,58,116,117,'GCAAAA','RHEAAA','VVVVxx' -5051,2904,1,3,1,11,51,51,1051,51,5051,102,103,'HMAAAA','SHEAAA','AAAAxx' -8901,2905,1,1,1,1,1,901,901,3901,8901,2,3,'JEAAAA','THEAAA','HHHHxx' -1550,2906,0,2,0,10,50,550,1550,1550,1550,100,101,'QHAAAA','UHEAAA','OOOOxx' -1698,2907,0,2,8,18,98,698,1698,1698,1698,196,197,'INAAAA','VHEAAA','VVVVxx' -802,2908,0,2,2,2,2,802,802,802,802,4,5,'WEAAAA','WHEAAA','AAAAxx' -2440,2909,0,0,0,0,40,440,440,2440,2440,80,81,'WPAAAA','XHEAAA','HHHHxx' -2260,2910,0,0,0,0,60,260,260,2260,2260,120,121,'YIAAAA','YHEAAA','OOOOxx' -8218,2911,0,2,8,18,18,218,218,3218,8218,36,37,'CEAAAA','ZHEAAA','VVVVxx' -5144,2912,0,0,4,4,44,144,1144,144,5144,88,89,'WPAAAA','AIEAAA','AAAAxx' -4822,2913,0,2,2,2,22,822,822,4822,4822,44,45,'MDAAAA','BIEAAA','HHHHxx' -9476,2914,0,0,6,16,76,476,1476,4476,9476,152,153,'MAAAAA','CIEAAA','OOOOxx' -7535,2915,1,3,5,15,35,535,1535,2535,7535,70,71,'VDAAAA','DIEAAA','VVVVxx' -8738,2916,0,2,8,18,38,738,738,3738,8738,76,77,'CYAAAA','EIEAAA','AAAAxx' -7946,2917,0,2,6,6,46,946,1946,2946,7946,92,93,'QTAAAA','FIEAAA','HHHHxx' -8143,2918,1,3,3,3,43,143,143,3143,8143,86,87,'FBAAAA','GIEAAA','OOOOxx' -2623,2919,1,3,3,3,23,623,623,2623,2623,46,47,'XWAAAA','HIEAAA','VVVVxx' -5209,2920,1,1,9,9,9,209,1209,209,5209,18,19,'JSAAAA','IIEAAA','AAAAxx' -7674,2921,0,2,4,14,74,674,1674,2674,7674,148,149,'EJAAAA','JIEAAA','HHHHxx' -1135,2922,1,3,5,15,35,135,1135,1135,1135,70,71,'RRAAAA','KIEAAA','OOOOxx' -424,2923,0,0,4,4,24,424,424,424,424,48,49,'IQAAAA','LIEAAA','VVVVxx' -942,2924,0,2,2,2,42,942,942,942,942,84,85,'GKAAAA','MIEAAA','AAAAxx' -7813,2925,1,1,3,13,13,813,1813,2813,7813,26,27,'NOAAAA','NIEAAA','HHHHxx' -3539,2926,1,3,9,19,39,539,1539,3539,3539,78,79,'DGAAAA','OIEAAA','OOOOxx' -2909,2927,1,1,9,9,9,909,909,2909,2909,18,19,'XHAAAA','PIEAAA','VVVVxx' -3748,2928,0,0,8,8,48,748,1748,3748,3748,96,97,'EOAAAA','QIEAAA','AAAAxx' -2996,2929,0,0,6,16,96,996,996,2996,2996,192,193,'GLAAAA','RIEAAA','HHHHxx' -1869,2930,1,1,9,9,69,869,1869,1869,1869,138,139,'XTAAAA','SIEAAA','OOOOxx' -8151,2931,1,3,1,11,51,151,151,3151,8151,102,103,'NBAAAA','TIEAAA','VVVVxx' -6361,2932,1,1,1,1,61,361,361,1361,6361,122,123,'RKAAAA','UIEAAA','AAAAxx' -5568,2933,0,0,8,8,68,568,1568,568,5568,136,137,'EGAAAA','VIEAAA','HHHHxx' -2796,2934,0,0,6,16,96,796,796,2796,2796,192,193,'ODAAAA','WIEAAA','OOOOxx' -8489,2935,1,1,9,9,89,489,489,3489,8489,178,179,'NOAAAA','XIEAAA','VVVVxx' -9183,2936,1,3,3,3,83,183,1183,4183,9183,166,167,'FPAAAA','YIEAAA','AAAAxx' -8227,2937,1,3,7,7,27,227,227,3227,8227,54,55,'LEAAAA','ZIEAAA','HHHHxx' -1844,2938,0,0,4,4,44,844,1844,1844,1844,88,89,'YSAAAA','AJEAAA','OOOOxx' -3975,2939,1,3,5,15,75,975,1975,3975,3975,150,151,'XWAAAA','BJEAAA','VVVVxx' -6490,2940,0,2,0,10,90,490,490,1490,6490,180,181,'QPAAAA','CJEAAA','AAAAxx' -8303,2941,1,3,3,3,3,303,303,3303,8303,6,7,'JHAAAA','DJEAAA','HHHHxx' -7334,2942,0,2,4,14,34,334,1334,2334,7334,68,69,'CWAAAA','EJEAAA','OOOOxx' -2382,2943,0,2,2,2,82,382,382,2382,2382,164,165,'QNAAAA','FJEAAA','VVVVxx' -177,2944,1,1,7,17,77,177,177,177,177,154,155,'VGAAAA','GJEAAA','AAAAxx' -8117,2945,1,1,7,17,17,117,117,3117,8117,34,35,'FAAAAA','HJEAAA','HHHHxx' -5485,2946,1,1,5,5,85,485,1485,485,5485,170,171,'ZCAAAA','IJEAAA','OOOOxx' -6544,2947,0,0,4,4,44,544,544,1544,6544,88,89,'SRAAAA','JJEAAA','VVVVxx' -8517,2948,1,1,7,17,17,517,517,3517,8517,34,35,'PPAAAA','KJEAAA','AAAAxx' -2252,2949,0,0,2,12,52,252,252,2252,2252,104,105,'QIAAAA','LJEAAA','HHHHxx' -4480,2950,0,0,0,0,80,480,480,4480,4480,160,161,'IQAAAA','MJEAAA','OOOOxx' -4785,2951,1,1,5,5,85,785,785,4785,4785,170,171,'BCAAAA','NJEAAA','VVVVxx' -9700,2952,0,0,0,0,0,700,1700,4700,9700,0,1,'CJAAAA','OJEAAA','AAAAxx' -2122,2953,0,2,2,2,22,122,122,2122,2122,44,45,'QDAAAA','PJEAAA','HHHHxx' -8783,2954,1,3,3,3,83,783,783,3783,8783,166,167,'VZAAAA','QJEAAA','OOOOxx' -1453,2955,1,1,3,13,53,453,1453,1453,1453,106,107,'XDAAAA','RJEAAA','VVVVxx' -3908,2956,0,0,8,8,8,908,1908,3908,3908,16,17,'IUAAAA','SJEAAA','AAAAxx' -7707,2957,1,3,7,7,7,707,1707,2707,7707,14,15,'LKAAAA','TJEAAA','HHHHxx' -9049,2958,1,1,9,9,49,49,1049,4049,9049,98,99,'BKAAAA','UJEAAA','OOOOxx' -654,2959,0,2,4,14,54,654,654,654,654,108,109,'EZAAAA','VJEAAA','VVVVxx' -3336,2960,0,0,6,16,36,336,1336,3336,3336,72,73,'IYAAAA','WJEAAA','AAAAxx' -622,2961,0,2,2,2,22,622,622,622,622,44,45,'YXAAAA','XJEAAA','HHHHxx' -8398,2962,0,2,8,18,98,398,398,3398,8398,196,197,'ALAAAA','YJEAAA','OOOOxx' -9193,2963,1,1,3,13,93,193,1193,4193,9193,186,187,'PPAAAA','ZJEAAA','VVVVxx' -7896,2964,0,0,6,16,96,896,1896,2896,7896,192,193,'SRAAAA','AKEAAA','AAAAxx' -9798,2965,0,2,8,18,98,798,1798,4798,9798,196,197,'WMAAAA','BKEAAA','HHHHxx' -2881,2966,1,1,1,1,81,881,881,2881,2881,162,163,'VGAAAA','CKEAAA','OOOOxx' -672,2967,0,0,2,12,72,672,672,672,672,144,145,'WZAAAA','DKEAAA','VVVVxx' -6743,2968,1,3,3,3,43,743,743,1743,6743,86,87,'JZAAAA','EKEAAA','AAAAxx' -8935,2969,1,3,5,15,35,935,935,3935,8935,70,71,'RFAAAA','FKEAAA','HHHHxx' -2426,2970,0,2,6,6,26,426,426,2426,2426,52,53,'IPAAAA','GKEAAA','OOOOxx' -722,2971,0,2,2,2,22,722,722,722,722,44,45,'UBAAAA','HKEAAA','VVVVxx' -5088,2972,0,0,8,8,88,88,1088,88,5088,176,177,'SNAAAA','IKEAAA','AAAAxx' -8677,2973,1,1,7,17,77,677,677,3677,8677,154,155,'TVAAAA','JKEAAA','HHHHxx' -6963,2974,1,3,3,3,63,963,963,1963,6963,126,127,'VHAAAA','KKEAAA','OOOOxx' -1653,2975,1,1,3,13,53,653,1653,1653,1653,106,107,'PLAAAA','LKEAAA','VVVVxx' -7295,2976,1,3,5,15,95,295,1295,2295,7295,190,191,'PUAAAA','MKEAAA','AAAAxx' -6675,2977,1,3,5,15,75,675,675,1675,6675,150,151,'TWAAAA','NKEAAA','HHHHxx' -7183,2978,1,3,3,3,83,183,1183,2183,7183,166,167,'HQAAAA','OKEAAA','OOOOxx' -4378,2979,0,2,8,18,78,378,378,4378,4378,156,157,'KMAAAA','PKEAAA','VVVVxx' -2157,2980,1,1,7,17,57,157,157,2157,2157,114,115,'ZEAAAA','QKEAAA','AAAAxx' -2621,2981,1,1,1,1,21,621,621,2621,2621,42,43,'VWAAAA','RKEAAA','HHHHxx' -9278,2982,0,2,8,18,78,278,1278,4278,9278,156,157,'WSAAAA','SKEAAA','OOOOxx' -79,2983,1,3,9,19,79,79,79,79,79,158,159,'BDAAAA','TKEAAA','VVVVxx' -7358,2984,0,2,8,18,58,358,1358,2358,7358,116,117,'AXAAAA','UKEAAA','AAAAxx' -3589,2985,1,1,9,9,89,589,1589,3589,3589,178,179,'BIAAAA','VKEAAA','HHHHxx' -1254,2986,0,2,4,14,54,254,1254,1254,1254,108,109,'GWAAAA','WKEAAA','OOOOxx' -3490,2987,0,2,0,10,90,490,1490,3490,3490,180,181,'GEAAAA','XKEAAA','VVVVxx' -7533,2988,1,1,3,13,33,533,1533,2533,7533,66,67,'TDAAAA','YKEAAA','AAAAxx' -2800,2989,0,0,0,0,0,800,800,2800,2800,0,1,'SDAAAA','ZKEAAA','HHHHxx' -351,2990,1,3,1,11,51,351,351,351,351,102,103,'NNAAAA','ALEAAA','OOOOxx' -4359,2991,1,3,9,19,59,359,359,4359,4359,118,119,'RLAAAA','BLEAAA','VVVVxx' -5788,2992,0,0,8,8,88,788,1788,788,5788,176,177,'QOAAAA','CLEAAA','AAAAxx' -5521,2993,1,1,1,1,21,521,1521,521,5521,42,43,'JEAAAA','DLEAAA','HHHHxx' -3351,2994,1,3,1,11,51,351,1351,3351,3351,102,103,'XYAAAA','ELEAAA','OOOOxx' -5129,2995,1,1,9,9,29,129,1129,129,5129,58,59,'HPAAAA','FLEAAA','VVVVxx' -315,2996,1,3,5,15,15,315,315,315,315,30,31,'DMAAAA','GLEAAA','AAAAxx' -7552,2997,0,0,2,12,52,552,1552,2552,7552,104,105,'MEAAAA','HLEAAA','HHHHxx' -9176,2998,0,0,6,16,76,176,1176,4176,9176,152,153,'YOAAAA','ILEAAA','OOOOxx' -7458,2999,0,2,8,18,58,458,1458,2458,7458,116,117,'WAAAAA','JLEAAA','VVVVxx' -279,3000,1,3,9,19,79,279,279,279,279,158,159,'TKAAAA','KLEAAA','AAAAxx' -738,3001,0,2,8,18,38,738,738,738,738,76,77,'KCAAAA','LLEAAA','HHHHxx' -2557,3002,1,1,7,17,57,557,557,2557,2557,114,115,'JUAAAA','MLEAAA','OOOOxx' -9395,3003,1,3,5,15,95,395,1395,4395,9395,190,191,'JXAAAA','NLEAAA','VVVVxx' -7214,3004,0,2,4,14,14,214,1214,2214,7214,28,29,'MRAAAA','OLEAAA','AAAAxx' -6354,3005,0,2,4,14,54,354,354,1354,6354,108,109,'KKAAAA','PLEAAA','HHHHxx' -4799,3006,1,3,9,19,99,799,799,4799,4799,198,199,'PCAAAA','QLEAAA','OOOOxx' -1231,3007,1,3,1,11,31,231,1231,1231,1231,62,63,'JVAAAA','RLEAAA','VVVVxx' -5252,3008,0,0,2,12,52,252,1252,252,5252,104,105,'AUAAAA','SLEAAA','AAAAxx' -5250,3009,0,2,0,10,50,250,1250,250,5250,100,101,'YTAAAA','TLEAAA','HHHHxx' -9319,3010,1,3,9,19,19,319,1319,4319,9319,38,39,'LUAAAA','ULEAAA','OOOOxx' -1724,3011,0,0,4,4,24,724,1724,1724,1724,48,49,'IOAAAA','VLEAAA','VVVVxx' -7947,3012,1,3,7,7,47,947,1947,2947,7947,94,95,'RTAAAA','WLEAAA','AAAAxx' -1105,3013,1,1,5,5,5,105,1105,1105,1105,10,11,'NQAAAA','XLEAAA','HHHHxx' -1417,3014,1,1,7,17,17,417,1417,1417,1417,34,35,'NCAAAA','YLEAAA','OOOOxx' -7101,3015,1,1,1,1,1,101,1101,2101,7101,2,3,'DNAAAA','ZLEAAA','VVVVxx' -1088,3016,0,0,8,8,88,88,1088,1088,1088,176,177,'WPAAAA','AMEAAA','AAAAxx' -979,3017,1,3,9,19,79,979,979,979,979,158,159,'RLAAAA','BMEAAA','HHHHxx' -7589,3018,1,1,9,9,89,589,1589,2589,7589,178,179,'XFAAAA','CMEAAA','OOOOxx' -8952,3019,0,0,2,12,52,952,952,3952,8952,104,105,'IGAAAA','DMEAAA','VVVVxx' -2864,3020,0,0,4,4,64,864,864,2864,2864,128,129,'EGAAAA','EMEAAA','AAAAxx' -234,3021,0,2,4,14,34,234,234,234,234,68,69,'AJAAAA','FMEAAA','HHHHxx' -7231,3022,1,3,1,11,31,231,1231,2231,7231,62,63,'DSAAAA','GMEAAA','OOOOxx' -6792,3023,0,0,2,12,92,792,792,1792,6792,184,185,'GBAAAA','HMEAAA','VVVVxx' -4311,3024,1,3,1,11,11,311,311,4311,4311,22,23,'VJAAAA','IMEAAA','AAAAxx' -3374,3025,0,2,4,14,74,374,1374,3374,3374,148,149,'UZAAAA','JMEAAA','HHHHxx' -3367,3026,1,3,7,7,67,367,1367,3367,3367,134,135,'NZAAAA','KMEAAA','OOOOxx' -2598,3027,0,2,8,18,98,598,598,2598,2598,196,197,'YVAAAA','LMEAAA','VVVVxx' -1033,3028,1,1,3,13,33,33,1033,1033,1033,66,67,'TNAAAA','MMEAAA','AAAAxx' -7803,3029,1,3,3,3,3,803,1803,2803,7803,6,7,'DOAAAA','NMEAAA','HHHHxx' -3870,3030,0,2,0,10,70,870,1870,3870,3870,140,141,'WSAAAA','OMEAAA','OOOOxx' -4962,3031,0,2,2,2,62,962,962,4962,4962,124,125,'WIAAAA','PMEAAA','VVVVxx' -4842,3032,0,2,2,2,42,842,842,4842,4842,84,85,'GEAAAA','QMEAAA','AAAAxx' -8814,3033,0,2,4,14,14,814,814,3814,8814,28,29,'ABAAAA','RMEAAA','HHHHxx' -3429,3034,1,1,9,9,29,429,1429,3429,3429,58,59,'XBAAAA','SMEAAA','OOOOxx' -6550,3035,0,2,0,10,50,550,550,1550,6550,100,101,'YRAAAA','TMEAAA','VVVVxx' -6317,3036,1,1,7,17,17,317,317,1317,6317,34,35,'ZIAAAA','UMEAAA','AAAAxx' -5023,3037,1,3,3,3,23,23,1023,23,5023,46,47,'FLAAAA','VMEAAA','HHHHxx' -5825,3038,1,1,5,5,25,825,1825,825,5825,50,51,'BQAAAA','WMEAAA','OOOOxx' -5297,3039,1,1,7,17,97,297,1297,297,5297,194,195,'TVAAAA','XMEAAA','VVVVxx' -8764,3040,0,0,4,4,64,764,764,3764,8764,128,129,'CZAAAA','YMEAAA','AAAAxx' -5084,3041,0,0,4,4,84,84,1084,84,5084,168,169,'ONAAAA','ZMEAAA','HHHHxx' -6808,3042,0,0,8,8,8,808,808,1808,6808,16,17,'WBAAAA','ANEAAA','OOOOxx' -1780,3043,0,0,0,0,80,780,1780,1780,1780,160,161,'MQAAAA','BNEAAA','VVVVxx' -4092,3044,0,0,2,12,92,92,92,4092,4092,184,185,'KBAAAA','CNEAAA','AAAAxx' -3618,3045,0,2,8,18,18,618,1618,3618,3618,36,37,'EJAAAA','DNEAAA','HHHHxx' -7299,3046,1,3,9,19,99,299,1299,2299,7299,198,199,'TUAAAA','ENEAAA','OOOOxx' -8544,3047,0,0,4,4,44,544,544,3544,8544,88,89,'QQAAAA','FNEAAA','VVVVxx' -2359,3048,1,3,9,19,59,359,359,2359,2359,118,119,'TMAAAA','GNEAAA','AAAAxx' -1939,3049,1,3,9,19,39,939,1939,1939,1939,78,79,'PWAAAA','HNEAAA','HHHHxx' -5834,3050,0,2,4,14,34,834,1834,834,5834,68,69,'KQAAAA','INEAAA','OOOOxx' -1997,3051,1,1,7,17,97,997,1997,1997,1997,194,195,'VYAAAA','JNEAAA','VVVVxx' -7917,3052,1,1,7,17,17,917,1917,2917,7917,34,35,'NSAAAA','KNEAAA','AAAAxx' -2098,3053,0,2,8,18,98,98,98,2098,2098,196,197,'SCAAAA','LNEAAA','HHHHxx' -7576,3054,0,0,6,16,76,576,1576,2576,7576,152,153,'KFAAAA','MNEAAA','OOOOxx' -376,3055,0,0,6,16,76,376,376,376,376,152,153,'MOAAAA','NNEAAA','VVVVxx' -8535,3056,1,3,5,15,35,535,535,3535,8535,70,71,'HQAAAA','ONEAAA','AAAAxx' -5659,3057,1,3,9,19,59,659,1659,659,5659,118,119,'RJAAAA','PNEAAA','HHHHxx' -2786,3058,0,2,6,6,86,786,786,2786,2786,172,173,'EDAAAA','QNEAAA','OOOOxx' -8820,3059,0,0,0,0,20,820,820,3820,8820,40,41,'GBAAAA','RNEAAA','VVVVxx' -1229,3060,1,1,9,9,29,229,1229,1229,1229,58,59,'HVAAAA','SNEAAA','AAAAxx' -9321,3061,1,1,1,1,21,321,1321,4321,9321,42,43,'NUAAAA','TNEAAA','HHHHxx' -7662,3062,0,2,2,2,62,662,1662,2662,7662,124,125,'SIAAAA','UNEAAA','OOOOxx' -5535,3063,1,3,5,15,35,535,1535,535,5535,70,71,'XEAAAA','VNEAAA','VVVVxx' -4889,3064,1,1,9,9,89,889,889,4889,4889,178,179,'BGAAAA','WNEAAA','AAAAxx' -8259,3065,1,3,9,19,59,259,259,3259,8259,118,119,'RFAAAA','XNEAAA','HHHHxx' -6789,3066,1,1,9,9,89,789,789,1789,6789,178,179,'DBAAAA','YNEAAA','OOOOxx' -5411,3067,1,3,1,11,11,411,1411,411,5411,22,23,'DAAAAA','ZNEAAA','VVVVxx' -6992,3068,0,0,2,12,92,992,992,1992,6992,184,185,'YIAAAA','AOEAAA','AAAAxx' -7698,3069,0,2,8,18,98,698,1698,2698,7698,196,197,'CKAAAA','BOEAAA','HHHHxx' -2342,3070,0,2,2,2,42,342,342,2342,2342,84,85,'CMAAAA','COEAAA','OOOOxx' -1501,3071,1,1,1,1,1,501,1501,1501,1501,2,3,'TFAAAA','DOEAAA','VVVVxx' -6322,3072,0,2,2,2,22,322,322,1322,6322,44,45,'EJAAAA','EOEAAA','AAAAxx' -9861,3073,1,1,1,1,61,861,1861,4861,9861,122,123,'HPAAAA','FOEAAA','HHHHxx' -9802,3074,0,2,2,2,2,802,1802,4802,9802,4,5,'ANAAAA','GOEAAA','OOOOxx' -4750,3075,0,2,0,10,50,750,750,4750,4750,100,101,'SAAAAA','HOEAAA','VVVVxx' -5855,3076,1,3,5,15,55,855,1855,855,5855,110,111,'FRAAAA','IOEAAA','AAAAxx' -4304,3077,0,0,4,4,4,304,304,4304,4304,8,9,'OJAAAA','JOEAAA','HHHHxx' -2605,3078,1,1,5,5,5,605,605,2605,2605,10,11,'FWAAAA','KOEAAA','OOOOxx' -1802,3079,0,2,2,2,2,802,1802,1802,1802,4,5,'IRAAAA','LOEAAA','VVVVxx' -9368,3080,0,0,8,8,68,368,1368,4368,9368,136,137,'IWAAAA','MOEAAA','AAAAxx' -7107,3081,1,3,7,7,7,107,1107,2107,7107,14,15,'JNAAAA','NOEAAA','HHHHxx' -8895,3082,1,3,5,15,95,895,895,3895,8895,190,191,'DEAAAA','OOEAAA','OOOOxx' -3750,3083,0,2,0,10,50,750,1750,3750,3750,100,101,'GOAAAA','POEAAA','VVVVxx' -8934,3084,0,2,4,14,34,934,934,3934,8934,68,69,'QFAAAA','QOEAAA','AAAAxx' -9464,3085,0,0,4,4,64,464,1464,4464,9464,128,129,'AAAAAA','ROEAAA','HHHHxx' -1928,3086,0,0,8,8,28,928,1928,1928,1928,56,57,'EWAAAA','SOEAAA','OOOOxx' -3196,3087,0,0,6,16,96,196,1196,3196,3196,192,193,'YSAAAA','TOEAAA','VVVVxx' -5256,3088,0,0,6,16,56,256,1256,256,5256,112,113,'EUAAAA','UOEAAA','AAAAxx' -7119,3089,1,3,9,19,19,119,1119,2119,7119,38,39,'VNAAAA','VOEAAA','HHHHxx' -4495,3090,1,3,5,15,95,495,495,4495,4495,190,191,'XQAAAA','WOEAAA','OOOOxx' -9292,3091,0,0,2,12,92,292,1292,4292,9292,184,185,'KTAAAA','XOEAAA','VVVVxx' -1617,3092,1,1,7,17,17,617,1617,1617,1617,34,35,'FKAAAA','YOEAAA','AAAAxx' -481,3093,1,1,1,1,81,481,481,481,481,162,163,'NSAAAA','ZOEAAA','HHHHxx' -56,3094,0,0,6,16,56,56,56,56,56,112,113,'ECAAAA','APEAAA','OOOOxx' -9120,3095,0,0,0,0,20,120,1120,4120,9120,40,41,'UMAAAA','BPEAAA','VVVVxx' -1306,3096,0,2,6,6,6,306,1306,1306,1306,12,13,'GYAAAA','CPEAAA','AAAAxx' -7773,3097,1,1,3,13,73,773,1773,2773,7773,146,147,'ZMAAAA','DPEAAA','HHHHxx' -4863,3098,1,3,3,3,63,863,863,4863,4863,126,127,'BFAAAA','EPEAAA','OOOOxx' -1114,3099,0,2,4,14,14,114,1114,1114,1114,28,29,'WQAAAA','FPEAAA','VVVVxx' -8124,3100,0,0,4,4,24,124,124,3124,8124,48,49,'MAAAAA','GPEAAA','AAAAxx' -6254,3101,0,2,4,14,54,254,254,1254,6254,108,109,'OGAAAA','HPEAAA','HHHHxx' -8109,3102,1,1,9,9,9,109,109,3109,8109,18,19,'XZAAAA','IPEAAA','OOOOxx' -1747,3103,1,3,7,7,47,747,1747,1747,1747,94,95,'FPAAAA','JPEAAA','VVVVxx' -6185,3104,1,1,5,5,85,185,185,1185,6185,170,171,'XDAAAA','KPEAAA','AAAAxx' -3388,3105,0,0,8,8,88,388,1388,3388,3388,176,177,'IAAAAA','LPEAAA','HHHHxx' -4905,3106,1,1,5,5,5,905,905,4905,4905,10,11,'RGAAAA','MPEAAA','OOOOxx' -5728,3107,0,0,8,8,28,728,1728,728,5728,56,57,'IMAAAA','NPEAAA','VVVVxx' -7507,3108,1,3,7,7,7,507,1507,2507,7507,14,15,'TCAAAA','OPEAAA','AAAAxx' -5662,3109,0,2,2,2,62,662,1662,662,5662,124,125,'UJAAAA','PPEAAA','HHHHxx' -1686,3110,0,2,6,6,86,686,1686,1686,1686,172,173,'WMAAAA','QPEAAA','OOOOxx' -5202,3111,0,2,2,2,2,202,1202,202,5202,4,5,'CSAAAA','RPEAAA','VVVVxx' -6905,3112,1,1,5,5,5,905,905,1905,6905,10,11,'PFAAAA','SPEAAA','AAAAxx' -9577,3113,1,1,7,17,77,577,1577,4577,9577,154,155,'JEAAAA','TPEAAA','HHHHxx' -7194,3114,0,2,4,14,94,194,1194,2194,7194,188,189,'SQAAAA','UPEAAA','OOOOxx' -7016,3115,0,0,6,16,16,16,1016,2016,7016,32,33,'WJAAAA','VPEAAA','VVVVxx' -8905,3116,1,1,5,5,5,905,905,3905,8905,10,11,'NEAAAA','WPEAAA','AAAAxx' -3419,3117,1,3,9,19,19,419,1419,3419,3419,38,39,'NBAAAA','XPEAAA','HHHHxx' -6881,3118,1,1,1,1,81,881,881,1881,6881,162,163,'REAAAA','YPEAAA','OOOOxx' -8370,3119,0,2,0,10,70,370,370,3370,8370,140,141,'YJAAAA','ZPEAAA','VVVVxx' -6117,3120,1,1,7,17,17,117,117,1117,6117,34,35,'HBAAAA','AQEAAA','AAAAxx' -1636,3121,0,0,6,16,36,636,1636,1636,1636,72,73,'YKAAAA','BQEAAA','HHHHxx' -6857,3122,1,1,7,17,57,857,857,1857,6857,114,115,'TDAAAA','CQEAAA','OOOOxx' -7163,3123,1,3,3,3,63,163,1163,2163,7163,126,127,'NPAAAA','DQEAAA','VVVVxx' -5040,3124,0,0,0,0,40,40,1040,40,5040,80,81,'WLAAAA','EQEAAA','AAAAxx' -6263,3125,1,3,3,3,63,263,263,1263,6263,126,127,'XGAAAA','FQEAAA','HHHHxx' -4809,3126,1,1,9,9,9,809,809,4809,4809,18,19,'ZCAAAA','GQEAAA','OOOOxx' -900,3127,0,0,0,0,0,900,900,900,900,0,1,'QIAAAA','HQEAAA','VVVVxx' -3199,3128,1,3,9,19,99,199,1199,3199,3199,198,199,'BTAAAA','IQEAAA','AAAAxx' -4156,3129,0,0,6,16,56,156,156,4156,4156,112,113,'WDAAAA','JQEAAA','HHHHxx' -3501,3130,1,1,1,1,1,501,1501,3501,3501,2,3,'REAAAA','KQEAAA','OOOOxx' -164,3131,0,0,4,4,64,164,164,164,164,128,129,'IGAAAA','LQEAAA','VVVVxx' -9548,3132,0,0,8,8,48,548,1548,4548,9548,96,97,'GDAAAA','MQEAAA','AAAAxx' -1149,3133,1,1,9,9,49,149,1149,1149,1149,98,99,'FSAAAA','NQEAAA','HHHHxx' -1962,3134,0,2,2,2,62,962,1962,1962,1962,124,125,'MXAAAA','OQEAAA','OOOOxx' -4072,3135,0,0,2,12,72,72,72,4072,4072,144,145,'QAAAAA','PQEAAA','VVVVxx' -4280,3136,0,0,0,0,80,280,280,4280,4280,160,161,'QIAAAA','QQEAAA','AAAAxx' -1398,3137,0,2,8,18,98,398,1398,1398,1398,196,197,'UBAAAA','RQEAAA','HHHHxx' -725,3138,1,1,5,5,25,725,725,725,725,50,51,'XBAAAA','SQEAAA','OOOOxx' -3988,3139,0,0,8,8,88,988,1988,3988,3988,176,177,'KXAAAA','TQEAAA','VVVVxx' -5059,3140,1,3,9,19,59,59,1059,59,5059,118,119,'PMAAAA','UQEAAA','AAAAxx' -2632,3141,0,0,2,12,32,632,632,2632,2632,64,65,'GXAAAA','VQEAAA','HHHHxx' -1909,3142,1,1,9,9,9,909,1909,1909,1909,18,19,'LVAAAA','WQEAAA','OOOOxx' -6827,3143,1,3,7,7,27,827,827,1827,6827,54,55,'PCAAAA','XQEAAA','VVVVxx' -8156,3144,0,0,6,16,56,156,156,3156,8156,112,113,'SBAAAA','YQEAAA','AAAAxx' -1192,3145,0,0,2,12,92,192,1192,1192,1192,184,185,'WTAAAA','ZQEAAA','HHHHxx' -9545,3146,1,1,5,5,45,545,1545,4545,9545,90,91,'DDAAAA','AREAAA','OOOOxx' -2249,3147,1,1,9,9,49,249,249,2249,2249,98,99,'NIAAAA','BREAAA','VVVVxx' -5580,3148,0,0,0,0,80,580,1580,580,5580,160,161,'QGAAAA','CREAAA','AAAAxx' -8403,3149,1,3,3,3,3,403,403,3403,8403,6,7,'FLAAAA','DREAAA','HHHHxx' -4024,3150,0,0,4,4,24,24,24,4024,4024,48,49,'UYAAAA','EREAAA','OOOOxx' -1866,3151,0,2,6,6,66,866,1866,1866,1866,132,133,'UTAAAA','FREAAA','VVVVxx' -9251,3152,1,3,1,11,51,251,1251,4251,9251,102,103,'VRAAAA','GREAAA','AAAAxx' -9979,3153,1,3,9,19,79,979,1979,4979,9979,158,159,'VTAAAA','HREAAA','HHHHxx' -9899,3154,1,3,9,19,99,899,1899,4899,9899,198,199,'TQAAAA','IREAAA','OOOOxx' -2540,3155,0,0,0,0,40,540,540,2540,2540,80,81,'STAAAA','JREAAA','VVVVxx' -8957,3156,1,1,7,17,57,957,957,3957,8957,114,115,'NGAAAA','KREAAA','AAAAxx' -7702,3157,0,2,2,2,2,702,1702,2702,7702,4,5,'GKAAAA','LREAAA','HHHHxx' -4211,3158,1,3,1,11,11,211,211,4211,4211,22,23,'ZFAAAA','MREAAA','OOOOxx' -6684,3159,0,0,4,4,84,684,684,1684,6684,168,169,'CXAAAA','NREAAA','VVVVxx' -3883,3160,1,3,3,3,83,883,1883,3883,3883,166,167,'JTAAAA','OREAAA','AAAAxx' -3531,3161,1,3,1,11,31,531,1531,3531,3531,62,63,'VFAAAA','PREAAA','HHHHxx' -9178,3162,0,2,8,18,78,178,1178,4178,9178,156,157,'APAAAA','QREAAA','OOOOxx' -3389,3163,1,1,9,9,89,389,1389,3389,3389,178,179,'JAAAAA','RREAAA','VVVVxx' -7874,3164,0,2,4,14,74,874,1874,2874,7874,148,149,'WQAAAA','SREAAA','AAAAxx' -4522,3165,0,2,2,2,22,522,522,4522,4522,44,45,'YRAAAA','TREAAA','HHHHxx' -9399,3166,1,3,9,19,99,399,1399,4399,9399,198,199,'NXAAAA','UREAAA','OOOOxx' -9083,3167,1,3,3,3,83,83,1083,4083,9083,166,167,'JLAAAA','VREAAA','VVVVxx' -1530,3168,0,2,0,10,30,530,1530,1530,1530,60,61,'WGAAAA','WREAAA','AAAAxx' -2360,3169,0,0,0,0,60,360,360,2360,2360,120,121,'UMAAAA','XREAAA','HHHHxx' -4908,3170,0,0,8,8,8,908,908,4908,4908,16,17,'UGAAAA','YREAAA','OOOOxx' -4628,3171,0,0,8,8,28,628,628,4628,4628,56,57,'AWAAAA','ZREAAA','VVVVxx' -3889,3172,1,1,9,9,89,889,1889,3889,3889,178,179,'PTAAAA','ASEAAA','AAAAxx' -1331,3173,1,3,1,11,31,331,1331,1331,1331,62,63,'FZAAAA','BSEAAA','HHHHxx' -1942,3174,0,2,2,2,42,942,1942,1942,1942,84,85,'SWAAAA','CSEAAA','OOOOxx' -4734,3175,0,2,4,14,34,734,734,4734,4734,68,69,'CAAAAA','DSEAAA','VVVVxx' -8386,3176,0,2,6,6,86,386,386,3386,8386,172,173,'OKAAAA','ESEAAA','AAAAxx' -3586,3177,0,2,6,6,86,586,1586,3586,3586,172,173,'YHAAAA','FSEAAA','HHHHxx' -2354,3178,0,2,4,14,54,354,354,2354,2354,108,109,'OMAAAA','GSEAAA','OOOOxx' -7108,3179,0,0,8,8,8,108,1108,2108,7108,16,17,'KNAAAA','HSEAAA','VVVVxx' -1857,3180,1,1,7,17,57,857,1857,1857,1857,114,115,'LTAAAA','ISEAAA','AAAAxx' -2544,3181,0,0,4,4,44,544,544,2544,2544,88,89,'WTAAAA','JSEAAA','HHHHxx' -819,3182,1,3,9,19,19,819,819,819,819,38,39,'NFAAAA','KSEAAA','OOOOxx' -2878,3183,0,2,8,18,78,878,878,2878,2878,156,157,'SGAAAA','LSEAAA','VVVVxx' -1772,3184,0,0,2,12,72,772,1772,1772,1772,144,145,'EQAAAA','MSEAAA','AAAAxx' -354,3185,0,2,4,14,54,354,354,354,354,108,109,'QNAAAA','NSEAAA','HHHHxx' -3259,3186,1,3,9,19,59,259,1259,3259,3259,118,119,'JVAAAA','OSEAAA','OOOOxx' -2170,3187,0,2,0,10,70,170,170,2170,2170,140,141,'MFAAAA','PSEAAA','VVVVxx' -1190,3188,0,2,0,10,90,190,1190,1190,1190,180,181,'UTAAAA','QSEAAA','AAAAxx' -3607,3189,1,3,7,7,7,607,1607,3607,3607,14,15,'TIAAAA','RSEAAA','HHHHxx' -4661,3190,1,1,1,1,61,661,661,4661,4661,122,123,'HXAAAA','SSEAAA','OOOOxx' -1796,3191,0,0,6,16,96,796,1796,1796,1796,192,193,'CRAAAA','TSEAAA','VVVVxx' -1561,3192,1,1,1,1,61,561,1561,1561,1561,122,123,'BIAAAA','USEAAA','AAAAxx' -4336,3193,0,0,6,16,36,336,336,4336,4336,72,73,'UKAAAA','VSEAAA','HHHHxx' -7550,3194,0,2,0,10,50,550,1550,2550,7550,100,101,'KEAAAA','WSEAAA','OOOOxx' -3238,3195,0,2,8,18,38,238,1238,3238,3238,76,77,'OUAAAA','XSEAAA','VVVVxx' -9870,3196,0,2,0,10,70,870,1870,4870,9870,140,141,'QPAAAA','YSEAAA','AAAAxx' -6502,3197,0,2,2,2,2,502,502,1502,6502,4,5,'CQAAAA','ZSEAAA','HHHHxx' -3903,3198,1,3,3,3,3,903,1903,3903,3903,6,7,'DUAAAA','ATEAAA','OOOOxx' -2869,3199,1,1,9,9,69,869,869,2869,2869,138,139,'JGAAAA','BTEAAA','VVVVxx' -5072,3200,0,0,2,12,72,72,1072,72,5072,144,145,'CNAAAA','CTEAAA','AAAAxx' -1201,3201,1,1,1,1,1,201,1201,1201,1201,2,3,'FUAAAA','DTEAAA','HHHHxx' -6245,3202,1,1,5,5,45,245,245,1245,6245,90,91,'FGAAAA','ETEAAA','OOOOxx' -1402,3203,0,2,2,2,2,402,1402,1402,1402,4,5,'YBAAAA','FTEAAA','VVVVxx' -2594,3204,0,2,4,14,94,594,594,2594,2594,188,189,'UVAAAA','GTEAAA','AAAAxx' -9171,3205,1,3,1,11,71,171,1171,4171,9171,142,143,'TOAAAA','HTEAAA','HHHHxx' -2620,3206,0,0,0,0,20,620,620,2620,2620,40,41,'UWAAAA','ITEAAA','OOOOxx' -6309,3207,1,1,9,9,9,309,309,1309,6309,18,19,'RIAAAA','JTEAAA','VVVVxx' -1285,3208,1,1,5,5,85,285,1285,1285,1285,170,171,'LXAAAA','KTEAAA','AAAAxx' -5466,3209,0,2,6,6,66,466,1466,466,5466,132,133,'GCAAAA','LTEAAA','HHHHxx' -168,3210,0,0,8,8,68,168,168,168,168,136,137,'MGAAAA','MTEAAA','OOOOxx' -1410,3211,0,2,0,10,10,410,1410,1410,1410,20,21,'GCAAAA','NTEAAA','VVVVxx' -6332,3212,0,0,2,12,32,332,332,1332,6332,64,65,'OJAAAA','OTEAAA','AAAAxx' -9530,3213,0,2,0,10,30,530,1530,4530,9530,60,61,'OCAAAA','PTEAAA','HHHHxx' -7749,3214,1,1,9,9,49,749,1749,2749,7749,98,99,'BMAAAA','QTEAAA','OOOOxx' -3656,3215,0,0,6,16,56,656,1656,3656,3656,112,113,'QKAAAA','RTEAAA','VVVVxx' -37,3216,1,1,7,17,37,37,37,37,37,74,75,'LBAAAA','STEAAA','AAAAxx' -2744,3217,0,0,4,4,44,744,744,2744,2744,88,89,'OBAAAA','TTEAAA','HHHHxx' -4206,3218,0,2,6,6,6,206,206,4206,4206,12,13,'UFAAAA','UTEAAA','OOOOxx' -1846,3219,0,2,6,6,46,846,1846,1846,1846,92,93,'ATAAAA','VTEAAA','VVVVxx' -9913,3220,1,1,3,13,13,913,1913,4913,9913,26,27,'HRAAAA','WTEAAA','AAAAxx' -4078,3221,0,2,8,18,78,78,78,4078,4078,156,157,'WAAAAA','XTEAAA','HHHHxx' -2080,3222,0,0,0,0,80,80,80,2080,2080,160,161,'ACAAAA','YTEAAA','OOOOxx' -4169,3223,1,1,9,9,69,169,169,4169,4169,138,139,'JEAAAA','ZTEAAA','VVVVxx' -2070,3224,0,2,0,10,70,70,70,2070,2070,140,141,'QBAAAA','AUEAAA','AAAAxx' -4500,3225,0,0,0,0,0,500,500,4500,4500,0,1,'CRAAAA','BUEAAA','HHHHxx' -4123,3226,1,3,3,3,23,123,123,4123,4123,46,47,'PCAAAA','CUEAAA','OOOOxx' -5594,3227,0,2,4,14,94,594,1594,594,5594,188,189,'EHAAAA','DUEAAA','VVVVxx' -9941,3228,1,1,1,1,41,941,1941,4941,9941,82,83,'JSAAAA','EUEAAA','AAAAxx' -7154,3229,0,2,4,14,54,154,1154,2154,7154,108,109,'EPAAAA','FUEAAA','HHHHxx' -8340,3230,0,0,0,0,40,340,340,3340,8340,80,81,'UIAAAA','GUEAAA','OOOOxx' -7110,3231,0,2,0,10,10,110,1110,2110,7110,20,21,'MNAAAA','HUEAAA','VVVVxx' -7795,3232,1,3,5,15,95,795,1795,2795,7795,190,191,'VNAAAA','IUEAAA','AAAAxx' -132,3233,0,0,2,12,32,132,132,132,132,64,65,'CFAAAA','JUEAAA','HHHHxx' -4603,3234,1,3,3,3,3,603,603,4603,4603,6,7,'BVAAAA','KUEAAA','OOOOxx' -9720,3235,0,0,0,0,20,720,1720,4720,9720,40,41,'WJAAAA','LUEAAA','VVVVxx' -1460,3236,0,0,0,0,60,460,1460,1460,1460,120,121,'EEAAAA','MUEAAA','AAAAxx' -4677,3237,1,1,7,17,77,677,677,4677,4677,154,155,'XXAAAA','NUEAAA','HHHHxx' -9272,3238,0,0,2,12,72,272,1272,4272,9272,144,145,'QSAAAA','OUEAAA','OOOOxx' -2279,3239,1,3,9,19,79,279,279,2279,2279,158,159,'RJAAAA','PUEAAA','VVVVxx' -4587,3240,1,3,7,7,87,587,587,4587,4587,174,175,'LUAAAA','QUEAAA','AAAAxx' -2244,3241,0,0,4,4,44,244,244,2244,2244,88,89,'IIAAAA','RUEAAA','HHHHxx' -742,3242,0,2,2,2,42,742,742,742,742,84,85,'OCAAAA','SUEAAA','OOOOxx' -4426,3243,0,2,6,6,26,426,426,4426,4426,52,53,'GOAAAA','TUEAAA','VVVVxx' -4571,3244,1,3,1,11,71,571,571,4571,4571,142,143,'VTAAAA','UUEAAA','AAAAxx' -4775,3245,1,3,5,15,75,775,775,4775,4775,150,151,'RBAAAA','VUEAAA','HHHHxx' -24,3246,0,0,4,4,24,24,24,24,24,48,49,'YAAAAA','WUEAAA','OOOOxx' -4175,3247,1,3,5,15,75,175,175,4175,4175,150,151,'PEAAAA','XUEAAA','VVVVxx' -9877,3248,1,1,7,17,77,877,1877,4877,9877,154,155,'XPAAAA','YUEAAA','AAAAxx' -7271,3249,1,3,1,11,71,271,1271,2271,7271,142,143,'RTAAAA','ZUEAAA','HHHHxx' -5468,3250,0,0,8,8,68,468,1468,468,5468,136,137,'ICAAAA','AVEAAA','OOOOxx' -6106,3251,0,2,6,6,6,106,106,1106,6106,12,13,'WAAAAA','BVEAAA','VVVVxx' -9005,3252,1,1,5,5,5,5,1005,4005,9005,10,11,'JIAAAA','CVEAAA','AAAAxx' -109,3253,1,1,9,9,9,109,109,109,109,18,19,'FEAAAA','DVEAAA','HHHHxx' -6365,3254,1,1,5,5,65,365,365,1365,6365,130,131,'VKAAAA','EVEAAA','OOOOxx' -7437,3255,1,1,7,17,37,437,1437,2437,7437,74,75,'BAAAAA','FVEAAA','VVVVxx' -7979,3256,1,3,9,19,79,979,1979,2979,7979,158,159,'XUAAAA','GVEAAA','AAAAxx' -6050,3257,0,2,0,10,50,50,50,1050,6050,100,101,'SYAAAA','HVEAAA','HHHHxx' -2853,3258,1,1,3,13,53,853,853,2853,2853,106,107,'TFAAAA','IVEAAA','OOOOxx' -7603,3259,1,3,3,3,3,603,1603,2603,7603,6,7,'LGAAAA','JVEAAA','VVVVxx' -483,3260,1,3,3,3,83,483,483,483,483,166,167,'PSAAAA','KVEAAA','AAAAxx' -5994,3261,0,2,4,14,94,994,1994,994,5994,188,189,'OWAAAA','LVEAAA','HHHHxx' -6708,3262,0,0,8,8,8,708,708,1708,6708,16,17,'AYAAAA','MVEAAA','OOOOxx' -5090,3263,0,2,0,10,90,90,1090,90,5090,180,181,'UNAAAA','NVEAAA','VVVVxx' -4608,3264,0,0,8,8,8,608,608,4608,4608,16,17,'GVAAAA','OVEAAA','AAAAxx' -4551,3265,1,3,1,11,51,551,551,4551,4551,102,103,'BTAAAA','PVEAAA','HHHHxx' -5437,3266,1,1,7,17,37,437,1437,437,5437,74,75,'DBAAAA','QVEAAA','OOOOxx' -4130,3267,0,2,0,10,30,130,130,4130,4130,60,61,'WCAAAA','RVEAAA','VVVVxx' -6363,3268,1,3,3,3,63,363,363,1363,6363,126,127,'TKAAAA','SVEAAA','AAAAxx' -1499,3269,1,3,9,19,99,499,1499,1499,1499,198,199,'RFAAAA','TVEAAA','HHHHxx' -384,3270,0,0,4,4,84,384,384,384,384,168,169,'UOAAAA','UVEAAA','OOOOxx' -2266,3271,0,2,6,6,66,266,266,2266,2266,132,133,'EJAAAA','VVEAAA','VVVVxx' -6018,3272,0,2,8,18,18,18,18,1018,6018,36,37,'MXAAAA','WVEAAA','AAAAxx' -7915,3273,1,3,5,15,15,915,1915,2915,7915,30,31,'LSAAAA','XVEAAA','HHHHxx' -6167,3274,1,3,7,7,67,167,167,1167,6167,134,135,'FDAAAA','YVEAAA','OOOOxx' -9988,3275,0,0,8,8,88,988,1988,4988,9988,176,177,'EUAAAA','ZVEAAA','VVVVxx' -6599,3276,1,3,9,19,99,599,599,1599,6599,198,199,'VTAAAA','AWEAAA','AAAAxx' -1693,3277,1,1,3,13,93,693,1693,1693,1693,186,187,'DNAAAA','BWEAAA','HHHHxx' -5971,3278,1,3,1,11,71,971,1971,971,5971,142,143,'RVAAAA','CWEAAA','OOOOxx' -8470,3279,0,2,0,10,70,470,470,3470,8470,140,141,'UNAAAA','DWEAAA','VVVVxx' -2807,3280,1,3,7,7,7,807,807,2807,2807,14,15,'ZDAAAA','EWEAAA','AAAAxx' -1120,3281,0,0,0,0,20,120,1120,1120,1120,40,41,'CRAAAA','FWEAAA','HHHHxx' -5924,3282,0,0,4,4,24,924,1924,924,5924,48,49,'WTAAAA','GWEAAA','OOOOxx' -9025,3283,1,1,5,5,25,25,1025,4025,9025,50,51,'DJAAAA','HWEAAA','VVVVxx' -9454,3284,0,2,4,14,54,454,1454,4454,9454,108,109,'QZAAAA','IWEAAA','AAAAxx' -2259,3285,1,3,9,19,59,259,259,2259,2259,118,119,'XIAAAA','JWEAAA','HHHHxx' -5249,3286,1,1,9,9,49,249,1249,249,5249,98,99,'XTAAAA','KWEAAA','OOOOxx' -6350,3287,0,2,0,10,50,350,350,1350,6350,100,101,'GKAAAA','LWEAAA','VVVVxx' -2930,3288,0,2,0,10,30,930,930,2930,2930,60,61,'SIAAAA','MWEAAA','AAAAxx' -6055,3289,1,3,5,15,55,55,55,1055,6055,110,111,'XYAAAA','NWEAAA','HHHHxx' -7691,3290,1,3,1,11,91,691,1691,2691,7691,182,183,'VJAAAA','OWEAAA','OOOOxx' -1573,3291,1,1,3,13,73,573,1573,1573,1573,146,147,'NIAAAA','PWEAAA','VVVVxx' -9943,3292,1,3,3,3,43,943,1943,4943,9943,86,87,'LSAAAA','QWEAAA','AAAAxx' -3085,3293,1,1,5,5,85,85,1085,3085,3085,170,171,'ROAAAA','RWEAAA','HHHHxx' -5928,3294,0,0,8,8,28,928,1928,928,5928,56,57,'AUAAAA','SWEAAA','OOOOxx' -887,3295,1,3,7,7,87,887,887,887,887,174,175,'DIAAAA','TWEAAA','VVVVxx' -4630,3296,0,2,0,10,30,630,630,4630,4630,60,61,'CWAAAA','UWEAAA','AAAAxx' -9827,3297,1,3,7,7,27,827,1827,4827,9827,54,55,'ZNAAAA','VWEAAA','HHHHxx' -8926,3298,0,2,6,6,26,926,926,3926,8926,52,53,'IFAAAA','WWEAAA','OOOOxx' -5726,3299,0,2,6,6,26,726,1726,726,5726,52,53,'GMAAAA','XWEAAA','VVVVxx' -1569,3300,1,1,9,9,69,569,1569,1569,1569,138,139,'JIAAAA','YWEAAA','AAAAxx' -8074,3301,0,2,4,14,74,74,74,3074,8074,148,149,'OYAAAA','ZWEAAA','HHHHxx' -7909,3302,1,1,9,9,9,909,1909,2909,7909,18,19,'FSAAAA','AXEAAA','OOOOxx' -8367,3303,1,3,7,7,67,367,367,3367,8367,134,135,'VJAAAA','BXEAAA','VVVVxx' -7217,3304,1,1,7,17,17,217,1217,2217,7217,34,35,'PRAAAA','CXEAAA','AAAAxx' -5254,3305,0,2,4,14,54,254,1254,254,5254,108,109,'CUAAAA','DXEAAA','HHHHxx' -1181,3306,1,1,1,1,81,181,1181,1181,1181,162,163,'LTAAAA','EXEAAA','OOOOxx' -6907,3307,1,3,7,7,7,907,907,1907,6907,14,15,'RFAAAA','FXEAAA','VVVVxx' -5508,3308,0,0,8,8,8,508,1508,508,5508,16,17,'WDAAAA','GXEAAA','AAAAxx' -4782,3309,0,2,2,2,82,782,782,4782,4782,164,165,'YBAAAA','HXEAAA','HHHHxx' -793,3310,1,1,3,13,93,793,793,793,793,186,187,'NEAAAA','IXEAAA','OOOOxx' -5740,3311,0,0,0,0,40,740,1740,740,5740,80,81,'UMAAAA','JXEAAA','VVVVxx' -3107,3312,1,3,7,7,7,107,1107,3107,3107,14,15,'NPAAAA','KXEAAA','AAAAxx' -1197,3313,1,1,7,17,97,197,1197,1197,1197,194,195,'BUAAAA','LXEAAA','HHHHxx' -4376,3314,0,0,6,16,76,376,376,4376,4376,152,153,'IMAAAA','MXEAAA','OOOOxx' -6226,3315,0,2,6,6,26,226,226,1226,6226,52,53,'MFAAAA','NXEAAA','VVVVxx' -5033,3316,1,1,3,13,33,33,1033,33,5033,66,67,'PLAAAA','OXEAAA','AAAAxx' -5494,3317,0,2,4,14,94,494,1494,494,5494,188,189,'IDAAAA','PXEAAA','HHHHxx' -3244,3318,0,0,4,4,44,244,1244,3244,3244,88,89,'UUAAAA','QXEAAA','OOOOxx' -7670,3319,0,2,0,10,70,670,1670,2670,7670,140,141,'AJAAAA','RXEAAA','VVVVxx' -9273,3320,1,1,3,13,73,273,1273,4273,9273,146,147,'RSAAAA','SXEAAA','AAAAxx' -5248,3321,0,0,8,8,48,248,1248,248,5248,96,97,'WTAAAA','TXEAAA','HHHHxx' -3381,3322,1,1,1,1,81,381,1381,3381,3381,162,163,'BAAAAA','UXEAAA','OOOOxx' -4136,3323,0,0,6,16,36,136,136,4136,4136,72,73,'CDAAAA','VXEAAA','VVVVxx' -4163,3324,1,3,3,3,63,163,163,4163,4163,126,127,'DEAAAA','WXEAAA','AAAAxx' -4270,3325,0,2,0,10,70,270,270,4270,4270,140,141,'GIAAAA','XXEAAA','HHHHxx' -1729,3326,1,1,9,9,29,729,1729,1729,1729,58,59,'NOAAAA','YXEAAA','OOOOxx' -2778,3327,0,2,8,18,78,778,778,2778,2778,156,157,'WCAAAA','ZXEAAA','VVVVxx' -5082,3328,0,2,2,2,82,82,1082,82,5082,164,165,'MNAAAA','AYEAAA','AAAAxx' -870,3329,0,2,0,10,70,870,870,870,870,140,141,'MHAAAA','BYEAAA','HHHHxx' -4192,3330,0,0,2,12,92,192,192,4192,4192,184,185,'GFAAAA','CYEAAA','OOOOxx' -308,3331,0,0,8,8,8,308,308,308,308,16,17,'WLAAAA','DYEAAA','VVVVxx' -6783,3332,1,3,3,3,83,783,783,1783,6783,166,167,'XAAAAA','EYEAAA','AAAAxx' -7611,3333,1,3,1,11,11,611,1611,2611,7611,22,23,'TGAAAA','FYEAAA','HHHHxx' -4221,3334,1,1,1,1,21,221,221,4221,4221,42,43,'JGAAAA','GYEAAA','OOOOxx' -6353,3335,1,1,3,13,53,353,353,1353,6353,106,107,'JKAAAA','HYEAAA','VVVVxx' -1830,3336,0,2,0,10,30,830,1830,1830,1830,60,61,'KSAAAA','IYEAAA','AAAAxx' -2437,3337,1,1,7,17,37,437,437,2437,2437,74,75,'TPAAAA','JYEAAA','HHHHxx' -3360,3338,0,0,0,0,60,360,1360,3360,3360,120,121,'GZAAAA','KYEAAA','OOOOxx' -1829,3339,1,1,9,9,29,829,1829,1829,1829,58,59,'JSAAAA','LYEAAA','VVVVxx' -9475,3340,1,3,5,15,75,475,1475,4475,9475,150,151,'LAAAAA','MYEAAA','AAAAxx' -4566,3341,0,2,6,6,66,566,566,4566,4566,132,133,'QTAAAA','NYEAAA','HHHHxx' -9944,3342,0,0,4,4,44,944,1944,4944,9944,88,89,'MSAAAA','OYEAAA','OOOOxx' -6054,3343,0,2,4,14,54,54,54,1054,6054,108,109,'WYAAAA','PYEAAA','VVVVxx' -4722,3344,0,2,2,2,22,722,722,4722,4722,44,45,'QZAAAA','QYEAAA','AAAAxx' -2779,3345,1,3,9,19,79,779,779,2779,2779,158,159,'XCAAAA','RYEAAA','HHHHxx' -8051,3346,1,3,1,11,51,51,51,3051,8051,102,103,'RXAAAA','SYEAAA','OOOOxx' -9671,3347,1,3,1,11,71,671,1671,4671,9671,142,143,'ZHAAAA','TYEAAA','VVVVxx' -6084,3348,0,0,4,4,84,84,84,1084,6084,168,169,'AAAAAA','UYEAAA','AAAAxx' -3729,3349,1,1,9,9,29,729,1729,3729,3729,58,59,'LNAAAA','VYEAAA','HHHHxx' -6627,3350,1,3,7,7,27,627,627,1627,6627,54,55,'XUAAAA','WYEAAA','OOOOxx' -4769,3351,1,1,9,9,69,769,769,4769,4769,138,139,'LBAAAA','XYEAAA','VVVVxx' -2224,3352,0,0,4,4,24,224,224,2224,2224,48,49,'OHAAAA','YYEAAA','AAAAxx' -1404,3353,0,0,4,4,4,404,1404,1404,1404,8,9,'ACAAAA','ZYEAAA','HHHHxx' -8532,3354,0,0,2,12,32,532,532,3532,8532,64,65,'EQAAAA','AZEAAA','OOOOxx' -6759,3355,1,3,9,19,59,759,759,1759,6759,118,119,'ZZAAAA','BZEAAA','VVVVxx' -6404,3356,0,0,4,4,4,404,404,1404,6404,8,9,'IMAAAA','CZEAAA','AAAAxx' -3144,3357,0,0,4,4,44,144,1144,3144,3144,88,89,'YQAAAA','DZEAAA','HHHHxx' -973,3358,1,1,3,13,73,973,973,973,973,146,147,'LLAAAA','EZEAAA','OOOOxx' -9789,3359,1,1,9,9,89,789,1789,4789,9789,178,179,'NMAAAA','FZEAAA','VVVVxx' -6181,3360,1,1,1,1,81,181,181,1181,6181,162,163,'TDAAAA','GZEAAA','AAAAxx' -1519,3361,1,3,9,19,19,519,1519,1519,1519,38,39,'LGAAAA','HZEAAA','HHHHxx' -9729,3362,1,1,9,9,29,729,1729,4729,9729,58,59,'FKAAAA','IZEAAA','OOOOxx' -8167,3363,1,3,7,7,67,167,167,3167,8167,134,135,'DCAAAA','JZEAAA','VVVVxx' -3830,3364,0,2,0,10,30,830,1830,3830,3830,60,61,'IRAAAA','KZEAAA','AAAAxx' -6286,3365,0,2,6,6,86,286,286,1286,6286,172,173,'UHAAAA','LZEAAA','HHHHxx' -3047,3366,1,3,7,7,47,47,1047,3047,3047,94,95,'FNAAAA','MZEAAA','OOOOxx' -3183,3367,1,3,3,3,83,183,1183,3183,3183,166,167,'LSAAAA','NZEAAA','VVVVxx' -6687,3368,1,3,7,7,87,687,687,1687,6687,174,175,'FXAAAA','OZEAAA','AAAAxx' -2783,3369,1,3,3,3,83,783,783,2783,2783,166,167,'BDAAAA','PZEAAA','HHHHxx' -9920,3370,0,0,0,0,20,920,1920,4920,9920,40,41,'ORAAAA','QZEAAA','OOOOxx' -4847,3371,1,3,7,7,47,847,847,4847,4847,94,95,'LEAAAA','RZEAAA','VVVVxx' -3645,3372,1,1,5,5,45,645,1645,3645,3645,90,91,'FKAAAA','SZEAAA','AAAAxx' -7406,3373,0,2,6,6,6,406,1406,2406,7406,12,13,'WYAAAA','TZEAAA','HHHHxx' -6003,3374,1,3,3,3,3,3,3,1003,6003,6,7,'XWAAAA','UZEAAA','OOOOxx' -3408,3375,0,0,8,8,8,408,1408,3408,3408,16,17,'CBAAAA','VZEAAA','VVVVxx' -4243,3376,1,3,3,3,43,243,243,4243,4243,86,87,'FHAAAA','WZEAAA','AAAAxx' -1622,3377,0,2,2,2,22,622,1622,1622,1622,44,45,'KKAAAA','XZEAAA','HHHHxx' -5319,3378,1,3,9,19,19,319,1319,319,5319,38,39,'PWAAAA','YZEAAA','OOOOxx' -4033,3379,1,1,3,13,33,33,33,4033,4033,66,67,'DZAAAA','ZZEAAA','VVVVxx' -8573,3380,1,1,3,13,73,573,573,3573,8573,146,147,'TRAAAA','AAFAAA','AAAAxx' -8404,3381,0,0,4,4,4,404,404,3404,8404,8,9,'GLAAAA','BAFAAA','HHHHxx' -6993,3382,1,1,3,13,93,993,993,1993,6993,186,187,'ZIAAAA','CAFAAA','OOOOxx' -660,3383,0,0,0,0,60,660,660,660,660,120,121,'KZAAAA','DAFAAA','VVVVxx' -1136,3384,0,0,6,16,36,136,1136,1136,1136,72,73,'SRAAAA','EAFAAA','AAAAxx' -3393,3385,1,1,3,13,93,393,1393,3393,3393,186,187,'NAAAAA','FAFAAA','HHHHxx' -9743,3386,1,3,3,3,43,743,1743,4743,9743,86,87,'TKAAAA','GAFAAA','OOOOxx' -9705,3387,1,1,5,5,5,705,1705,4705,9705,10,11,'HJAAAA','HAFAAA','VVVVxx' -6960,3388,0,0,0,0,60,960,960,1960,6960,120,121,'SHAAAA','IAFAAA','AAAAxx' -2753,3389,1,1,3,13,53,753,753,2753,2753,106,107,'XBAAAA','JAFAAA','HHHHxx' -906,3390,0,2,6,6,6,906,906,906,906,12,13,'WIAAAA','KAFAAA','OOOOxx' -999,3391,1,3,9,19,99,999,999,999,999,198,199,'LMAAAA','LAFAAA','VVVVxx' -6927,3392,1,3,7,7,27,927,927,1927,6927,54,55,'LGAAAA','MAFAAA','AAAAxx' -4846,3393,0,2,6,6,46,846,846,4846,4846,92,93,'KEAAAA','NAFAAA','HHHHxx' -676,3394,0,0,6,16,76,676,676,676,676,152,153,'AAAAAA','OAFAAA','OOOOxx' -8612,3395,0,0,2,12,12,612,612,3612,8612,24,25,'GTAAAA','PAFAAA','VVVVxx' -4111,3396,1,3,1,11,11,111,111,4111,4111,22,23,'DCAAAA','QAFAAA','AAAAxx' -9994,3397,0,2,4,14,94,994,1994,4994,9994,188,189,'KUAAAA','RAFAAA','HHHHxx' -4399,3398,1,3,9,19,99,399,399,4399,4399,198,199,'FNAAAA','SAFAAA','OOOOxx' -4464,3399,0,0,4,4,64,464,464,4464,4464,128,129,'SPAAAA','TAFAAA','VVVVxx' -7316,3400,0,0,6,16,16,316,1316,2316,7316,32,33,'KVAAAA','UAFAAA','AAAAxx' -8982,3401,0,2,2,2,82,982,982,3982,8982,164,165,'MHAAAA','VAFAAA','HHHHxx' -1871,3402,1,3,1,11,71,871,1871,1871,1871,142,143,'ZTAAAA','WAFAAA','OOOOxx' -4082,3403,0,2,2,2,82,82,82,4082,4082,164,165,'ABAAAA','XAFAAA','VVVVxx' -3949,3404,1,1,9,9,49,949,1949,3949,3949,98,99,'XVAAAA','YAFAAA','AAAAxx' -9352,3405,0,0,2,12,52,352,1352,4352,9352,104,105,'SVAAAA','ZAFAAA','HHHHxx' -9638,3406,0,2,8,18,38,638,1638,4638,9638,76,77,'SGAAAA','ABFAAA','OOOOxx' -8177,3407,1,1,7,17,77,177,177,3177,8177,154,155,'NCAAAA','BBFAAA','VVVVxx' -3499,3408,1,3,9,19,99,499,1499,3499,3499,198,199,'PEAAAA','CBFAAA','AAAAxx' -4233,3409,1,1,3,13,33,233,233,4233,4233,66,67,'VGAAAA','DBFAAA','HHHHxx' -1953,3410,1,1,3,13,53,953,1953,1953,1953,106,107,'DXAAAA','EBFAAA','OOOOxx' -7372,3411,0,0,2,12,72,372,1372,2372,7372,144,145,'OXAAAA','FBFAAA','VVVVxx' -5127,3412,1,3,7,7,27,127,1127,127,5127,54,55,'FPAAAA','GBFAAA','AAAAxx' -4384,3413,0,0,4,4,84,384,384,4384,4384,168,169,'QMAAAA','HBFAAA','HHHHxx' -9964,3414,0,0,4,4,64,964,1964,4964,9964,128,129,'GTAAAA','IBFAAA','OOOOxx' -5392,3415,0,0,2,12,92,392,1392,392,5392,184,185,'KZAAAA','JBFAAA','VVVVxx' -616,3416,0,0,6,16,16,616,616,616,616,32,33,'SXAAAA','KBFAAA','AAAAxx' -591,3417,1,3,1,11,91,591,591,591,591,182,183,'TWAAAA','LBFAAA','HHHHxx' -6422,3418,0,2,2,2,22,422,422,1422,6422,44,45,'ANAAAA','MBFAAA','OOOOxx' -6551,3419,1,3,1,11,51,551,551,1551,6551,102,103,'ZRAAAA','NBFAAA','VVVVxx' -9286,3420,0,2,6,6,86,286,1286,4286,9286,172,173,'ETAAAA','OBFAAA','AAAAxx' -3817,3421,1,1,7,17,17,817,1817,3817,3817,34,35,'VQAAAA','PBFAAA','HHHHxx' -7717,3422,1,1,7,17,17,717,1717,2717,7717,34,35,'VKAAAA','QBFAAA','OOOOxx' -8718,3423,0,2,8,18,18,718,718,3718,8718,36,37,'IXAAAA','RBFAAA','VVVVxx' -8608,3424,0,0,8,8,8,608,608,3608,8608,16,17,'CTAAAA','SBFAAA','AAAAxx' -2242,3425,0,2,2,2,42,242,242,2242,2242,84,85,'GIAAAA','TBFAAA','HHHHxx' -4811,3426,1,3,1,11,11,811,811,4811,4811,22,23,'BDAAAA','UBFAAA','OOOOxx' -6838,3427,0,2,8,18,38,838,838,1838,6838,76,77,'ADAAAA','VBFAAA','VVVVxx' -787,3428,1,3,7,7,87,787,787,787,787,174,175,'HEAAAA','WBFAAA','AAAAxx' -7940,3429,0,0,0,0,40,940,1940,2940,7940,80,81,'KTAAAA','XBFAAA','HHHHxx' -336,3430,0,0,6,16,36,336,336,336,336,72,73,'YMAAAA','YBFAAA','OOOOxx' -9859,3431,1,3,9,19,59,859,1859,4859,9859,118,119,'FPAAAA','ZBFAAA','VVVVxx' -3864,3432,0,0,4,4,64,864,1864,3864,3864,128,129,'QSAAAA','ACFAAA','AAAAxx' -7162,3433,0,2,2,2,62,162,1162,2162,7162,124,125,'MPAAAA','BCFAAA','HHHHxx' -2071,3434,1,3,1,11,71,71,71,2071,2071,142,143,'RBAAAA','CCFAAA','OOOOxx' -7469,3435,1,1,9,9,69,469,1469,2469,7469,138,139,'HBAAAA','DCFAAA','VVVVxx' -2917,3436,1,1,7,17,17,917,917,2917,2917,34,35,'FIAAAA','ECFAAA','AAAAxx' -7486,3437,0,2,6,6,86,486,1486,2486,7486,172,173,'YBAAAA','FCFAAA','HHHHxx' -3355,3438,1,3,5,15,55,355,1355,3355,3355,110,111,'BZAAAA','GCFAAA','OOOOxx' -6998,3439,0,2,8,18,98,998,998,1998,6998,196,197,'EJAAAA','HCFAAA','VVVVxx' -5498,3440,0,2,8,18,98,498,1498,498,5498,196,197,'MDAAAA','ICFAAA','AAAAxx' -5113,3441,1,1,3,13,13,113,1113,113,5113,26,27,'ROAAAA','JCFAAA','HHHHxx' -2846,3442,0,2,6,6,46,846,846,2846,2846,92,93,'MFAAAA','KCFAAA','OOOOxx' -6834,3443,0,2,4,14,34,834,834,1834,6834,68,69,'WCAAAA','LCFAAA','VVVVxx' -8925,3444,1,1,5,5,25,925,925,3925,8925,50,51,'HFAAAA','MCFAAA','AAAAxx' -2757,3445,1,1,7,17,57,757,757,2757,2757,114,115,'BCAAAA','NCFAAA','HHHHxx' -2775,3446,1,3,5,15,75,775,775,2775,2775,150,151,'TCAAAA','OCFAAA','OOOOxx' -6182,3447,0,2,2,2,82,182,182,1182,6182,164,165,'UDAAAA','PCFAAA','VVVVxx' -4488,3448,0,0,8,8,88,488,488,4488,4488,176,177,'QQAAAA','QCFAAA','AAAAxx' -8523,3449,1,3,3,3,23,523,523,3523,8523,46,47,'VPAAAA','RCFAAA','HHHHxx' -52,3450,0,0,2,12,52,52,52,52,52,104,105,'ACAAAA','SCFAAA','OOOOxx' -7251,3451,1,3,1,11,51,251,1251,2251,7251,102,103,'XSAAAA','TCFAAA','VVVVxx' -6130,3452,0,2,0,10,30,130,130,1130,6130,60,61,'UBAAAA','UCFAAA','AAAAxx' -205,3453,1,1,5,5,5,205,205,205,205,10,11,'XHAAAA','VCFAAA','HHHHxx' -1186,3454,0,2,6,6,86,186,1186,1186,1186,172,173,'QTAAAA','WCFAAA','OOOOxx' -1738,3455,0,2,8,18,38,738,1738,1738,1738,76,77,'WOAAAA','XCFAAA','VVVVxx' -9485,3456,1,1,5,5,85,485,1485,4485,9485,170,171,'VAAAAA','YCFAAA','AAAAxx' -4235,3457,1,3,5,15,35,235,235,4235,4235,70,71,'XGAAAA','ZCFAAA','HHHHxx' -7891,3458,1,3,1,11,91,891,1891,2891,7891,182,183,'NRAAAA','ADFAAA','OOOOxx' -4960,3459,0,0,0,0,60,960,960,4960,4960,120,121,'UIAAAA','BDFAAA','VVVVxx' -8911,3460,1,3,1,11,11,911,911,3911,8911,22,23,'TEAAAA','CDFAAA','AAAAxx' -1219,3461,1,3,9,19,19,219,1219,1219,1219,38,39,'XUAAAA','DDFAAA','HHHHxx' -9652,3462,0,0,2,12,52,652,1652,4652,9652,104,105,'GHAAAA','EDFAAA','OOOOxx' -9715,3463,1,3,5,15,15,715,1715,4715,9715,30,31,'RJAAAA','FDFAAA','VVVVxx' -6629,3464,1,1,9,9,29,629,629,1629,6629,58,59,'ZUAAAA','GDFAAA','AAAAxx' -700,3465,0,0,0,0,0,700,700,700,700,0,1,'YAAAAA','HDFAAA','HHHHxx' -9819,3466,1,3,9,19,19,819,1819,4819,9819,38,39,'RNAAAA','IDFAAA','OOOOxx' -5188,3467,0,0,8,8,88,188,1188,188,5188,176,177,'ORAAAA','JDFAAA','VVVVxx' -5367,3468,1,3,7,7,67,367,1367,367,5367,134,135,'LYAAAA','KDFAAA','AAAAxx' -6447,3469,1,3,7,7,47,447,447,1447,6447,94,95,'ZNAAAA','LDFAAA','HHHHxx' -720,3470,0,0,0,0,20,720,720,720,720,40,41,'SBAAAA','MDFAAA','OOOOxx' -9157,3471,1,1,7,17,57,157,1157,4157,9157,114,115,'FOAAAA','NDFAAA','VVVVxx' -1082,3472,0,2,2,2,82,82,1082,1082,1082,164,165,'QPAAAA','ODFAAA','AAAAxx' -3179,3473,1,3,9,19,79,179,1179,3179,3179,158,159,'HSAAAA','PDFAAA','HHHHxx' -4818,3474,0,2,8,18,18,818,818,4818,4818,36,37,'IDAAAA','QDFAAA','OOOOxx' -7607,3475,1,3,7,7,7,607,1607,2607,7607,14,15,'PGAAAA','RDFAAA','VVVVxx' -2352,3476,0,0,2,12,52,352,352,2352,2352,104,105,'MMAAAA','SDFAAA','AAAAxx' -1170,3477,0,2,0,10,70,170,1170,1170,1170,140,141,'ATAAAA','TDFAAA','HHHHxx' -4269,3478,1,1,9,9,69,269,269,4269,4269,138,139,'FIAAAA','UDFAAA','OOOOxx' -8767,3479,1,3,7,7,67,767,767,3767,8767,134,135,'FZAAAA','VDFAAA','VVVVxx' -3984,3480,0,0,4,4,84,984,1984,3984,3984,168,169,'GXAAAA','WDFAAA','AAAAxx' -3190,3481,0,2,0,10,90,190,1190,3190,3190,180,181,'SSAAAA','XDFAAA','HHHHxx' -7456,3482,0,0,6,16,56,456,1456,2456,7456,112,113,'UAAAAA','YDFAAA','OOOOxx' -4348,3483,0,0,8,8,48,348,348,4348,4348,96,97,'GLAAAA','ZDFAAA','VVVVxx' -3150,3484,0,2,0,10,50,150,1150,3150,3150,100,101,'ERAAAA','AEFAAA','AAAAxx' -8780,3485,0,0,0,0,80,780,780,3780,8780,160,161,'SZAAAA','BEFAAA','HHHHxx' -2553,3486,1,1,3,13,53,553,553,2553,2553,106,107,'FUAAAA','CEFAAA','OOOOxx' -7526,3487,0,2,6,6,26,526,1526,2526,7526,52,53,'MDAAAA','DEFAAA','VVVVxx' -2031,3488,1,3,1,11,31,31,31,2031,2031,62,63,'DAAAAA','EEFAAA','AAAAxx' -8793,3489,1,1,3,13,93,793,793,3793,8793,186,187,'FAAAAA','FEFAAA','HHHHxx' -1122,3490,0,2,2,2,22,122,1122,1122,1122,44,45,'ERAAAA','GEFAAA','OOOOxx' -1855,3491,1,3,5,15,55,855,1855,1855,1855,110,111,'JTAAAA','HEFAAA','VVVVxx' -6613,3492,1,1,3,13,13,613,613,1613,6613,26,27,'JUAAAA','IEFAAA','AAAAxx' -3231,3493,1,3,1,11,31,231,1231,3231,3231,62,63,'HUAAAA','JEFAAA','HHHHxx' -9101,3494,1,1,1,1,1,101,1101,4101,9101,2,3,'BMAAAA','KEFAAA','OOOOxx' -4937,3495,1,1,7,17,37,937,937,4937,4937,74,75,'XHAAAA','LEFAAA','VVVVxx' -666,3496,0,2,6,6,66,666,666,666,666,132,133,'QZAAAA','MEFAAA','AAAAxx' -8943,3497,1,3,3,3,43,943,943,3943,8943,86,87,'ZFAAAA','NEFAAA','HHHHxx' -6164,3498,0,0,4,4,64,164,164,1164,6164,128,129,'CDAAAA','OEFAAA','OOOOxx' -1081,3499,1,1,1,1,81,81,1081,1081,1081,162,163,'PPAAAA','PEFAAA','VVVVxx' -210,3500,0,2,0,10,10,210,210,210,210,20,21,'CIAAAA','QEFAAA','AAAAxx' -6024,3501,0,0,4,4,24,24,24,1024,6024,48,49,'SXAAAA','REFAAA','HHHHxx' -5715,3502,1,3,5,15,15,715,1715,715,5715,30,31,'VLAAAA','SEFAAA','OOOOxx' -8938,3503,0,2,8,18,38,938,938,3938,8938,76,77,'UFAAAA','TEFAAA','VVVVxx' -1326,3504,0,2,6,6,26,326,1326,1326,1326,52,53,'AZAAAA','UEFAAA','AAAAxx' -7111,3505,1,3,1,11,11,111,1111,2111,7111,22,23,'NNAAAA','VEFAAA','HHHHxx' -757,3506,1,1,7,17,57,757,757,757,757,114,115,'DDAAAA','WEFAAA','OOOOxx' -8933,3507,1,1,3,13,33,933,933,3933,8933,66,67,'PFAAAA','XEFAAA','VVVVxx' -6495,3508,1,3,5,15,95,495,495,1495,6495,190,191,'VPAAAA','YEFAAA','AAAAxx' -3134,3509,0,2,4,14,34,134,1134,3134,3134,68,69,'OQAAAA','ZEFAAA','HHHHxx' -1304,3510,0,0,4,4,4,304,1304,1304,1304,8,9,'EYAAAA','AFFAAA','OOOOxx' -1835,3511,1,3,5,15,35,835,1835,1835,1835,70,71,'PSAAAA','BFFAAA','VVVVxx' -7275,3512,1,3,5,15,75,275,1275,2275,7275,150,151,'VTAAAA','CFFAAA','AAAAxx' -7337,3513,1,1,7,17,37,337,1337,2337,7337,74,75,'FWAAAA','DFFAAA','HHHHxx' -1282,3514,0,2,2,2,82,282,1282,1282,1282,164,165,'IXAAAA','EFFAAA','OOOOxx' -6566,3515,0,2,6,6,66,566,566,1566,6566,132,133,'OSAAAA','FFFAAA','VVVVxx' -3786,3516,0,2,6,6,86,786,1786,3786,3786,172,173,'QPAAAA','GFFAAA','AAAAxx' -5741,3517,1,1,1,1,41,741,1741,741,5741,82,83,'VMAAAA','HFFAAA','HHHHxx' -6076,3518,0,0,6,16,76,76,76,1076,6076,152,153,'SZAAAA','IFFAAA','OOOOxx' -9998,3519,0,2,8,18,98,998,1998,4998,9998,196,197,'OUAAAA','JFFAAA','VVVVxx' -6268,3520,0,0,8,8,68,268,268,1268,6268,136,137,'CHAAAA','KFFAAA','AAAAxx' -9647,3521,1,3,7,7,47,647,1647,4647,9647,94,95,'BHAAAA','LFFAAA','HHHHxx' -4877,3522,1,1,7,17,77,877,877,4877,4877,154,155,'PFAAAA','MFFAAA','OOOOxx' -2652,3523,0,0,2,12,52,652,652,2652,2652,104,105,'AYAAAA','NFFAAA','VVVVxx' -1247,3524,1,3,7,7,47,247,1247,1247,1247,94,95,'ZVAAAA','OFFAAA','AAAAxx' -2721,3525,1,1,1,1,21,721,721,2721,2721,42,43,'RAAAAA','PFFAAA','HHHHxx' -5968,3526,0,0,8,8,68,968,1968,968,5968,136,137,'OVAAAA','QFFAAA','OOOOxx' -9570,3527,0,2,0,10,70,570,1570,4570,9570,140,141,'CEAAAA','RFFAAA','VVVVxx' -6425,3528,1,1,5,5,25,425,425,1425,6425,50,51,'DNAAAA','SFFAAA','AAAAxx' -5451,3529,1,3,1,11,51,451,1451,451,5451,102,103,'RBAAAA','TFFAAA','HHHHxx' -5668,3530,0,0,8,8,68,668,1668,668,5668,136,137,'AKAAAA','UFFAAA','OOOOxx' -9493,3531,1,1,3,13,93,493,1493,4493,9493,186,187,'DBAAAA','VFFAAA','VVVVxx' -7973,3532,1,1,3,13,73,973,1973,2973,7973,146,147,'RUAAAA','WFFAAA','AAAAxx' -8250,3533,0,2,0,10,50,250,250,3250,8250,100,101,'IFAAAA','XFFAAA','HHHHxx' -82,3534,0,2,2,2,82,82,82,82,82,164,165,'EDAAAA','YFFAAA','OOOOxx' -6258,3535,0,2,8,18,58,258,258,1258,6258,116,117,'SGAAAA','ZFFAAA','VVVVxx' -9978,3536,0,2,8,18,78,978,1978,4978,9978,156,157,'UTAAAA','AGFAAA','AAAAxx' -6930,3537,0,2,0,10,30,930,930,1930,6930,60,61,'OGAAAA','BGFAAA','HHHHxx' -3746,3538,0,2,6,6,46,746,1746,3746,3746,92,93,'COAAAA','CGFAAA','OOOOxx' -7065,3539,1,1,5,5,65,65,1065,2065,7065,130,131,'TLAAAA','DGFAAA','VVVVxx' -4281,3540,1,1,1,1,81,281,281,4281,4281,162,163,'RIAAAA','EGFAAA','AAAAxx' -4367,3541,1,3,7,7,67,367,367,4367,4367,134,135,'ZLAAAA','FGFAAA','HHHHxx' -9526,3542,0,2,6,6,26,526,1526,4526,9526,52,53,'KCAAAA','GGFAAA','OOOOxx' -5880,3543,0,0,0,0,80,880,1880,880,5880,160,161,'ESAAAA','HGFAAA','VVVVxx' -8480,3544,0,0,0,0,80,480,480,3480,8480,160,161,'EOAAAA','IGFAAA','AAAAxx' -2476,3545,0,0,6,16,76,476,476,2476,2476,152,153,'GRAAAA','JGFAAA','HHHHxx' -9074,3546,0,2,4,14,74,74,1074,4074,9074,148,149,'ALAAAA','KGFAAA','OOOOxx' -4830,3547,0,2,0,10,30,830,830,4830,4830,60,61,'UDAAAA','LGFAAA','VVVVxx' -3207,3548,1,3,7,7,7,207,1207,3207,3207,14,15,'JTAAAA','MGFAAA','AAAAxx' -7894,3549,0,2,4,14,94,894,1894,2894,7894,188,189,'QRAAAA','NGFAAA','HHHHxx' -3860,3550,0,0,0,0,60,860,1860,3860,3860,120,121,'MSAAAA','OGFAAA','OOOOxx' -5293,3551,1,1,3,13,93,293,1293,293,5293,186,187,'PVAAAA','PGFAAA','VVVVxx' -6895,3552,1,3,5,15,95,895,895,1895,6895,190,191,'FFAAAA','QGFAAA','AAAAxx' -9908,3553,0,0,8,8,8,908,1908,4908,9908,16,17,'CRAAAA','RGFAAA','HHHHxx' -9247,3554,1,3,7,7,47,247,1247,4247,9247,94,95,'RRAAAA','SGFAAA','OOOOxx' -8110,3555,0,2,0,10,10,110,110,3110,8110,20,21,'YZAAAA','TGFAAA','VVVVxx' -4716,3556,0,0,6,16,16,716,716,4716,4716,32,33,'KZAAAA','UGFAAA','AAAAxx' -4979,3557,1,3,9,19,79,979,979,4979,4979,158,159,'NJAAAA','VGFAAA','HHHHxx' -5280,3558,0,0,0,0,80,280,1280,280,5280,160,161,'CVAAAA','WGFAAA','OOOOxx' -8326,3559,0,2,6,6,26,326,326,3326,8326,52,53,'GIAAAA','XGFAAA','VVVVxx' -5572,3560,0,0,2,12,72,572,1572,572,5572,144,145,'IGAAAA','YGFAAA','AAAAxx' -4665,3561,1,1,5,5,65,665,665,4665,4665,130,131,'LXAAAA','ZGFAAA','HHHHxx' -3665,3562,1,1,5,5,65,665,1665,3665,3665,130,131,'ZKAAAA','AHFAAA','OOOOxx' -6744,3563,0,0,4,4,44,744,744,1744,6744,88,89,'KZAAAA','BHFAAA','VVVVxx' -1897,3564,1,1,7,17,97,897,1897,1897,1897,194,195,'ZUAAAA','CHFAAA','AAAAxx' -1220,3565,0,0,0,0,20,220,1220,1220,1220,40,41,'YUAAAA','DHFAAA','HHHHxx' -2614,3566,0,2,4,14,14,614,614,2614,2614,28,29,'OWAAAA','EHFAAA','OOOOxx' -8509,3567,1,1,9,9,9,509,509,3509,8509,18,19,'HPAAAA','FHFAAA','VVVVxx' -8521,3568,1,1,1,1,21,521,521,3521,8521,42,43,'TPAAAA','GHFAAA','AAAAxx' -4121,3569,1,1,1,1,21,121,121,4121,4121,42,43,'NCAAAA','HHFAAA','HHHHxx' -9663,3570,1,3,3,3,63,663,1663,4663,9663,126,127,'RHAAAA','IHFAAA','OOOOxx' -2346,3571,0,2,6,6,46,346,346,2346,2346,92,93,'GMAAAA','JHFAAA','VVVVxx' -3370,3572,0,2,0,10,70,370,1370,3370,3370,140,141,'QZAAAA','KHFAAA','AAAAxx' -1498,3573,0,2,8,18,98,498,1498,1498,1498,196,197,'QFAAAA','LHFAAA','HHHHxx' -7422,3574,0,2,2,2,22,422,1422,2422,7422,44,45,'MZAAAA','MHFAAA','OOOOxx' -3472,3575,0,0,2,12,72,472,1472,3472,3472,144,145,'ODAAAA','NHFAAA','VVVVxx' -4126,3576,0,2,6,6,26,126,126,4126,4126,52,53,'SCAAAA','OHFAAA','AAAAxx' -4494,3577,0,2,4,14,94,494,494,4494,4494,188,189,'WQAAAA','PHFAAA','HHHHxx' -6323,3578,1,3,3,3,23,323,323,1323,6323,46,47,'FJAAAA','QHFAAA','OOOOxx' -2823,3579,1,3,3,3,23,823,823,2823,2823,46,47,'PEAAAA','RHFAAA','VVVVxx' -8596,3580,0,0,6,16,96,596,596,3596,8596,192,193,'QSAAAA','SHFAAA','AAAAxx' -6642,3581,0,2,2,2,42,642,642,1642,6642,84,85,'MVAAAA','THFAAA','HHHHxx' -9276,3582,0,0,6,16,76,276,1276,4276,9276,152,153,'USAAAA','UHFAAA','OOOOxx' -4148,3583,0,0,8,8,48,148,148,4148,4148,96,97,'ODAAAA','VHFAAA','VVVVxx' -9770,3584,0,2,0,10,70,770,1770,4770,9770,140,141,'ULAAAA','WHFAAA','AAAAxx' -9812,3585,0,0,2,12,12,812,1812,4812,9812,24,25,'KNAAAA','XHFAAA','HHHHxx' -4419,3586,1,3,9,19,19,419,419,4419,4419,38,39,'ZNAAAA','YHFAAA','OOOOxx' -3802,3587,0,2,2,2,2,802,1802,3802,3802,4,5,'GQAAAA','ZHFAAA','VVVVxx' -3210,3588,0,2,0,10,10,210,1210,3210,3210,20,21,'MTAAAA','AIFAAA','AAAAxx' -6794,3589,0,2,4,14,94,794,794,1794,6794,188,189,'IBAAAA','BIFAAA','HHHHxx' -242,3590,0,2,2,2,42,242,242,242,242,84,85,'IJAAAA','CIFAAA','OOOOxx' -962,3591,0,2,2,2,62,962,962,962,962,124,125,'ALAAAA','DIFAAA','VVVVxx' -7151,3592,1,3,1,11,51,151,1151,2151,7151,102,103,'BPAAAA','EIFAAA','AAAAxx' -9440,3593,0,0,0,0,40,440,1440,4440,9440,80,81,'CZAAAA','FIFAAA','HHHHxx' -721,3594,1,1,1,1,21,721,721,721,721,42,43,'TBAAAA','GIFAAA','OOOOxx' -2119,3595,1,3,9,19,19,119,119,2119,2119,38,39,'NDAAAA','HIFAAA','VVVVxx' -9883,3596,1,3,3,3,83,883,1883,4883,9883,166,167,'DQAAAA','IIFAAA','AAAAxx' -5071,3597,1,3,1,11,71,71,1071,71,5071,142,143,'BNAAAA','JIFAAA','HHHHxx' -8239,3598,1,3,9,19,39,239,239,3239,8239,78,79,'XEAAAA','KIFAAA','OOOOxx' -7451,3599,1,3,1,11,51,451,1451,2451,7451,102,103,'PAAAAA','LIFAAA','VVVVxx' -9517,3600,1,1,7,17,17,517,1517,4517,9517,34,35,'BCAAAA','MIFAAA','AAAAxx' -9180,3601,0,0,0,0,80,180,1180,4180,9180,160,161,'CPAAAA','NIFAAA','HHHHxx' -9327,3602,1,3,7,7,27,327,1327,4327,9327,54,55,'TUAAAA','OIFAAA','OOOOxx' -5462,3603,0,2,2,2,62,462,1462,462,5462,124,125,'CCAAAA','PIFAAA','VVVVxx' -8306,3604,0,2,6,6,6,306,306,3306,8306,12,13,'MHAAAA','QIFAAA','AAAAxx' -6234,3605,0,2,4,14,34,234,234,1234,6234,68,69,'UFAAAA','RIFAAA','HHHHxx' -8771,3606,1,3,1,11,71,771,771,3771,8771,142,143,'JZAAAA','SIFAAA','OOOOxx' -5853,3607,1,1,3,13,53,853,1853,853,5853,106,107,'DRAAAA','TIFAAA','VVVVxx' -8373,3608,1,1,3,13,73,373,373,3373,8373,146,147,'BKAAAA','UIFAAA','AAAAxx' -5017,3609,1,1,7,17,17,17,1017,17,5017,34,35,'ZKAAAA','VIFAAA','HHHHxx' -8025,3610,1,1,5,5,25,25,25,3025,8025,50,51,'RWAAAA','WIFAAA','OOOOxx' -2526,3611,0,2,6,6,26,526,526,2526,2526,52,53,'ETAAAA','XIFAAA','VVVVxx' -7419,3612,1,3,9,19,19,419,1419,2419,7419,38,39,'JZAAAA','YIFAAA','AAAAxx' -4572,3613,0,0,2,12,72,572,572,4572,4572,144,145,'WTAAAA','ZIFAAA','HHHHxx' -7744,3614,0,0,4,4,44,744,1744,2744,7744,88,89,'WLAAAA','AJFAAA','OOOOxx' -8825,3615,1,1,5,5,25,825,825,3825,8825,50,51,'LBAAAA','BJFAAA','VVVVxx' -6067,3616,1,3,7,7,67,67,67,1067,6067,134,135,'JZAAAA','CJFAAA','AAAAxx' -3291,3617,1,3,1,11,91,291,1291,3291,3291,182,183,'PWAAAA','DJFAAA','HHHHxx' -7115,3618,1,3,5,15,15,115,1115,2115,7115,30,31,'RNAAAA','EJFAAA','OOOOxx' -2626,3619,0,2,6,6,26,626,626,2626,2626,52,53,'AXAAAA','FJFAAA','VVVVxx' -4109,3620,1,1,9,9,9,109,109,4109,4109,18,19,'BCAAAA','GJFAAA','AAAAxx' -4056,3621,0,0,6,16,56,56,56,4056,4056,112,113,'AAAAAA','HJFAAA','HHHHxx' -6811,3622,1,3,1,11,11,811,811,1811,6811,22,23,'ZBAAAA','IJFAAA','OOOOxx' -680,3623,0,0,0,0,80,680,680,680,680,160,161,'EAAAAA','JJFAAA','VVVVxx' -474,3624,0,2,4,14,74,474,474,474,474,148,149,'GSAAAA','KJFAAA','AAAAxx' -9294,3625,0,2,4,14,94,294,1294,4294,9294,188,189,'MTAAAA','LJFAAA','HHHHxx' -7555,3626,1,3,5,15,55,555,1555,2555,7555,110,111,'PEAAAA','MJFAAA','OOOOxx' -8076,3627,0,0,6,16,76,76,76,3076,8076,152,153,'QYAAAA','NJFAAA','VVVVxx' -3840,3628,0,0,0,0,40,840,1840,3840,3840,80,81,'SRAAAA','OJFAAA','AAAAxx' -5955,3629,1,3,5,15,55,955,1955,955,5955,110,111,'BVAAAA','PJFAAA','HHHHxx' -994,3630,0,2,4,14,94,994,994,994,994,188,189,'GMAAAA','QJFAAA','OOOOxx' -2089,3631,1,1,9,9,89,89,89,2089,2089,178,179,'JCAAAA','RJFAAA','VVVVxx' -869,3632,1,1,9,9,69,869,869,869,869,138,139,'LHAAAA','SJFAAA','AAAAxx' -1223,3633,1,3,3,3,23,223,1223,1223,1223,46,47,'BVAAAA','TJFAAA','HHHHxx' -1514,3634,0,2,4,14,14,514,1514,1514,1514,28,29,'GGAAAA','UJFAAA','OOOOxx' -4891,3635,1,3,1,11,91,891,891,4891,4891,182,183,'DGAAAA','VJFAAA','VVVVxx' -4190,3636,0,2,0,10,90,190,190,4190,4190,180,181,'EFAAAA','WJFAAA','AAAAxx' -4377,3637,1,1,7,17,77,377,377,4377,4377,154,155,'JMAAAA','XJFAAA','HHHHxx' -9195,3638,1,3,5,15,95,195,1195,4195,9195,190,191,'RPAAAA','YJFAAA','OOOOxx' -3827,3639,1,3,7,7,27,827,1827,3827,3827,54,55,'FRAAAA','ZJFAAA','VVVVxx' -7386,3640,0,2,6,6,86,386,1386,2386,7386,172,173,'CYAAAA','AKFAAA','AAAAxx' -6665,3641,1,1,5,5,65,665,665,1665,6665,130,131,'JWAAAA','BKFAAA','HHHHxx' -7514,3642,0,2,4,14,14,514,1514,2514,7514,28,29,'ADAAAA','CKFAAA','OOOOxx' -6431,3643,1,3,1,11,31,431,431,1431,6431,62,63,'JNAAAA','DKFAAA','VVVVxx' -3251,3644,1,3,1,11,51,251,1251,3251,3251,102,103,'BVAAAA','EKFAAA','AAAAxx' -8439,3645,1,3,9,19,39,439,439,3439,8439,78,79,'PMAAAA','FKFAAA','HHHHxx' -831,3646,1,3,1,11,31,831,831,831,831,62,63,'ZFAAAA','GKFAAA','OOOOxx' -8485,3647,1,1,5,5,85,485,485,3485,8485,170,171,'JOAAAA','HKFAAA','VVVVxx' -7314,3648,0,2,4,14,14,314,1314,2314,7314,28,29,'IVAAAA','IKFAAA','AAAAxx' -3044,3649,0,0,4,4,44,44,1044,3044,3044,88,89,'CNAAAA','JKFAAA','HHHHxx' -4283,3650,1,3,3,3,83,283,283,4283,4283,166,167,'TIAAAA','KKFAAA','OOOOxx' -298,3651,0,2,8,18,98,298,298,298,298,196,197,'MLAAAA','LKFAAA','VVVVxx' -7114,3652,0,2,4,14,14,114,1114,2114,7114,28,29,'QNAAAA','MKFAAA','AAAAxx' -9664,3653,0,0,4,4,64,664,1664,4664,9664,128,129,'SHAAAA','NKFAAA','HHHHxx' -5315,3654,1,3,5,15,15,315,1315,315,5315,30,31,'LWAAAA','OKFAAA','OOOOxx' -2164,3655,0,0,4,4,64,164,164,2164,2164,128,129,'GFAAAA','PKFAAA','VVVVxx' -3390,3656,0,2,0,10,90,390,1390,3390,3390,180,181,'KAAAAA','QKFAAA','AAAAxx' -836,3657,0,0,6,16,36,836,836,836,836,72,73,'EGAAAA','RKFAAA','HHHHxx' -3316,3658,0,0,6,16,16,316,1316,3316,3316,32,33,'OXAAAA','SKFAAA','OOOOxx' -1284,3659,0,0,4,4,84,284,1284,1284,1284,168,169,'KXAAAA','TKFAAA','VVVVxx' -2497,3660,1,1,7,17,97,497,497,2497,2497,194,195,'BSAAAA','UKFAAA','AAAAxx' -1374,3661,0,2,4,14,74,374,1374,1374,1374,148,149,'WAAAAA','VKFAAA','HHHHxx' -9525,3662,1,1,5,5,25,525,1525,4525,9525,50,51,'JCAAAA','WKFAAA','OOOOxx' -2911,3663,1,3,1,11,11,911,911,2911,2911,22,23,'ZHAAAA','XKFAAA','VVVVxx' -9686,3664,0,2,6,6,86,686,1686,4686,9686,172,173,'OIAAAA','YKFAAA','AAAAxx' -584,3665,0,0,4,4,84,584,584,584,584,168,169,'MWAAAA','ZKFAAA','HHHHxx' -5653,3666,1,1,3,13,53,653,1653,653,5653,106,107,'LJAAAA','ALFAAA','OOOOxx' -4986,3667,0,2,6,6,86,986,986,4986,4986,172,173,'UJAAAA','BLFAAA','VVVVxx' -6049,3668,1,1,9,9,49,49,49,1049,6049,98,99,'RYAAAA','CLFAAA','AAAAxx' -9891,3669,1,3,1,11,91,891,1891,4891,9891,182,183,'LQAAAA','DLFAAA','HHHHxx' -8809,3670,1,1,9,9,9,809,809,3809,8809,18,19,'VAAAAA','ELFAAA','OOOOxx' -8598,3671,0,2,8,18,98,598,598,3598,8598,196,197,'SSAAAA','FLFAAA','VVVVxx' -2573,3672,1,1,3,13,73,573,573,2573,2573,146,147,'ZUAAAA','GLFAAA','AAAAxx' -6864,3673,0,0,4,4,64,864,864,1864,6864,128,129,'AEAAAA','HLFAAA','HHHHxx' -7932,3674,0,0,2,12,32,932,1932,2932,7932,64,65,'CTAAAA','ILFAAA','OOOOxx' -6605,3675,1,1,5,5,5,605,605,1605,6605,10,11,'BUAAAA','JLFAAA','VVVVxx' -9500,3676,0,0,0,0,0,500,1500,4500,9500,0,1,'KBAAAA','KLFAAA','AAAAxx' -8742,3677,0,2,2,2,42,742,742,3742,8742,84,85,'GYAAAA','LLFAAA','HHHHxx' -9815,3678,1,3,5,15,15,815,1815,4815,9815,30,31,'NNAAAA','MLFAAA','OOOOxx' -3319,3679,1,3,9,19,19,319,1319,3319,3319,38,39,'RXAAAA','NLFAAA','VVVVxx' -184,3680,0,0,4,4,84,184,184,184,184,168,169,'CHAAAA','OLFAAA','AAAAxx' -8886,3681,0,2,6,6,86,886,886,3886,8886,172,173,'UDAAAA','PLFAAA','HHHHxx' -7050,3682,0,2,0,10,50,50,1050,2050,7050,100,101,'ELAAAA','QLFAAA','OOOOxx' -9781,3683,1,1,1,1,81,781,1781,4781,9781,162,163,'FMAAAA','RLFAAA','VVVVxx' -2443,3684,1,3,3,3,43,443,443,2443,2443,86,87,'ZPAAAA','SLFAAA','AAAAxx' -1160,3685,0,0,0,0,60,160,1160,1160,1160,120,121,'QSAAAA','TLFAAA','HHHHxx' -4600,3686,0,0,0,0,0,600,600,4600,4600,0,1,'YUAAAA','ULFAAA','OOOOxx' -813,3687,1,1,3,13,13,813,813,813,813,26,27,'HFAAAA','VLFAAA','VVVVxx' -5078,3688,0,2,8,18,78,78,1078,78,5078,156,157,'INAAAA','WLFAAA','AAAAxx' -9008,3689,0,0,8,8,8,8,1008,4008,9008,16,17,'MIAAAA','XLFAAA','HHHHxx' -9016,3690,0,0,6,16,16,16,1016,4016,9016,32,33,'UIAAAA','YLFAAA','OOOOxx' -2747,3691,1,3,7,7,47,747,747,2747,2747,94,95,'RBAAAA','ZLFAAA','VVVVxx' -3106,3692,0,2,6,6,6,106,1106,3106,3106,12,13,'MPAAAA','AMFAAA','AAAAxx' -8235,3693,1,3,5,15,35,235,235,3235,8235,70,71,'TEAAAA','BMFAAA','HHHHxx' -5582,3694,0,2,2,2,82,582,1582,582,5582,164,165,'SGAAAA','CMFAAA','OOOOxx' -4334,3695,0,2,4,14,34,334,334,4334,4334,68,69,'SKAAAA','DMFAAA','VVVVxx' -1612,3696,0,0,2,12,12,612,1612,1612,1612,24,25,'AKAAAA','EMFAAA','AAAAxx' -5650,3697,0,2,0,10,50,650,1650,650,5650,100,101,'IJAAAA','FMFAAA','HHHHxx' -6086,3698,0,2,6,6,86,86,86,1086,6086,172,173,'CAAAAA','GMFAAA','OOOOxx' -9667,3699,1,3,7,7,67,667,1667,4667,9667,134,135,'VHAAAA','HMFAAA','VVVVxx' -4215,3700,1,3,5,15,15,215,215,4215,4215,30,31,'DGAAAA','IMFAAA','AAAAxx' -8553,3701,1,1,3,13,53,553,553,3553,8553,106,107,'ZQAAAA','JMFAAA','HHHHxx' -9066,3702,0,2,6,6,66,66,1066,4066,9066,132,133,'SKAAAA','KMFAAA','OOOOxx' -1092,3703,0,0,2,12,92,92,1092,1092,1092,184,185,'AQAAAA','LMFAAA','VVVVxx' -2848,3704,0,0,8,8,48,848,848,2848,2848,96,97,'OFAAAA','MMFAAA','AAAAxx' -2765,3705,1,1,5,5,65,765,765,2765,2765,130,131,'JCAAAA','NMFAAA','HHHHxx' -6513,3706,1,1,3,13,13,513,513,1513,6513,26,27,'NQAAAA','OMFAAA','OOOOxx' -6541,3707,1,1,1,1,41,541,541,1541,6541,82,83,'PRAAAA','PMFAAA','VVVVxx' -9617,3708,1,1,7,17,17,617,1617,4617,9617,34,35,'XFAAAA','QMFAAA','AAAAxx' -5870,3709,0,2,0,10,70,870,1870,870,5870,140,141,'URAAAA','RMFAAA','HHHHxx' -8811,3710,1,3,1,11,11,811,811,3811,8811,22,23,'XAAAAA','SMFAAA','OOOOxx' -4529,3711,1,1,9,9,29,529,529,4529,4529,58,59,'FSAAAA','TMFAAA','VVVVxx' -161,3712,1,1,1,1,61,161,161,161,161,122,123,'FGAAAA','UMFAAA','AAAAxx' -641,3713,1,1,1,1,41,641,641,641,641,82,83,'RYAAAA','VMFAAA','HHHHxx' -4767,3714,1,3,7,7,67,767,767,4767,4767,134,135,'JBAAAA','WMFAAA','OOOOxx' -6293,3715,1,1,3,13,93,293,293,1293,6293,186,187,'BIAAAA','XMFAAA','VVVVxx' -3816,3716,0,0,6,16,16,816,1816,3816,3816,32,33,'UQAAAA','YMFAAA','AAAAxx' -4748,3717,0,0,8,8,48,748,748,4748,4748,96,97,'QAAAAA','ZMFAAA','HHHHxx' -9924,3718,0,0,4,4,24,924,1924,4924,9924,48,49,'SRAAAA','ANFAAA','OOOOxx' -6716,3719,0,0,6,16,16,716,716,1716,6716,32,33,'IYAAAA','BNFAAA','VVVVxx' -8828,3720,0,0,8,8,28,828,828,3828,8828,56,57,'OBAAAA','CNFAAA','AAAAxx' -4967,3721,1,3,7,7,67,967,967,4967,4967,134,135,'BJAAAA','DNFAAA','HHHHxx' -9680,3722,0,0,0,0,80,680,1680,4680,9680,160,161,'IIAAAA','ENFAAA','OOOOxx' -2784,3723,0,0,4,4,84,784,784,2784,2784,168,169,'CDAAAA','FNFAAA','VVVVxx' -2882,3724,0,2,2,2,82,882,882,2882,2882,164,165,'WGAAAA','GNFAAA','AAAAxx' -3641,3725,1,1,1,1,41,641,1641,3641,3641,82,83,'BKAAAA','HNFAAA','HHHHxx' -5537,3726,1,1,7,17,37,537,1537,537,5537,74,75,'ZEAAAA','INFAAA','OOOOxx' -820,3727,0,0,0,0,20,820,820,820,820,40,41,'OFAAAA','JNFAAA','VVVVxx' -5847,3728,1,3,7,7,47,847,1847,847,5847,94,95,'XQAAAA','KNFAAA','AAAAxx' -566,3729,0,2,6,6,66,566,566,566,566,132,133,'UVAAAA','LNFAAA','HHHHxx' -2246,3730,0,2,6,6,46,246,246,2246,2246,92,93,'KIAAAA','MNFAAA','OOOOxx' -6680,3731,0,0,0,0,80,680,680,1680,6680,160,161,'YWAAAA','NNFAAA','VVVVxx' -2014,3732,0,2,4,14,14,14,14,2014,2014,28,29,'MZAAAA','ONFAAA','AAAAxx' -8355,3733,1,3,5,15,55,355,355,3355,8355,110,111,'JJAAAA','PNFAAA','HHHHxx' -1610,3734,0,2,0,10,10,610,1610,1610,1610,20,21,'YJAAAA','QNFAAA','OOOOxx' -9719,3735,1,3,9,19,19,719,1719,4719,9719,38,39,'VJAAAA','RNFAAA','VVVVxx' -8498,3736,0,2,8,18,98,498,498,3498,8498,196,197,'WOAAAA','SNFAAA','AAAAxx' -5883,3737,1,3,3,3,83,883,1883,883,5883,166,167,'HSAAAA','TNFAAA','HHHHxx' -7380,3738,0,0,0,0,80,380,1380,2380,7380,160,161,'WXAAAA','UNFAAA','OOOOxx' -8865,3739,1,1,5,5,65,865,865,3865,8865,130,131,'ZCAAAA','VNFAAA','VVVVxx' -4743,3740,1,3,3,3,43,743,743,4743,4743,86,87,'LAAAAA','WNFAAA','AAAAxx' -5086,3741,0,2,6,6,86,86,1086,86,5086,172,173,'QNAAAA','XNFAAA','HHHHxx' -2739,3742,1,3,9,19,39,739,739,2739,2739,78,79,'JBAAAA','YNFAAA','OOOOxx' -9375,3743,1,3,5,15,75,375,1375,4375,9375,150,151,'PWAAAA','ZNFAAA','VVVVxx' -7876,3744,0,0,6,16,76,876,1876,2876,7876,152,153,'YQAAAA','AOFAAA','AAAAxx' -453,3745,1,1,3,13,53,453,453,453,453,106,107,'LRAAAA','BOFAAA','HHHHxx' -6987,3746,1,3,7,7,87,987,987,1987,6987,174,175,'TIAAAA','COFAAA','OOOOxx' -2860,3747,0,0,0,0,60,860,860,2860,2860,120,121,'AGAAAA','DOFAAA','VVVVxx' -8372,3748,0,0,2,12,72,372,372,3372,8372,144,145,'AKAAAA','EOFAAA','AAAAxx' -2048,3749,0,0,8,8,48,48,48,2048,2048,96,97,'UAAAAA','FOFAAA','HHHHxx' -9231,3750,1,3,1,11,31,231,1231,4231,9231,62,63,'BRAAAA','GOFAAA','OOOOxx' -634,3751,0,2,4,14,34,634,634,634,634,68,69,'KYAAAA','HOFAAA','VVVVxx' -3998,3752,0,2,8,18,98,998,1998,3998,3998,196,197,'UXAAAA','IOFAAA','AAAAxx' -4728,3753,0,0,8,8,28,728,728,4728,4728,56,57,'WZAAAA','JOFAAA','HHHHxx' -579,3754,1,3,9,19,79,579,579,579,579,158,159,'HWAAAA','KOFAAA','OOOOxx' -815,3755,1,3,5,15,15,815,815,815,815,30,31,'JFAAAA','LOFAAA','VVVVxx' -1009,3756,1,1,9,9,9,9,1009,1009,1009,18,19,'VMAAAA','MOFAAA','AAAAxx' -6596,3757,0,0,6,16,96,596,596,1596,6596,192,193,'STAAAA','NOFAAA','HHHHxx' -2793,3758,1,1,3,13,93,793,793,2793,2793,186,187,'LDAAAA','OOFAAA','OOOOxx' -9589,3759,1,1,9,9,89,589,1589,4589,9589,178,179,'VEAAAA','POFAAA','VVVVxx' -2794,3760,0,2,4,14,94,794,794,2794,2794,188,189,'MDAAAA','QOFAAA','AAAAxx' -2551,3761,1,3,1,11,51,551,551,2551,2551,102,103,'DUAAAA','ROFAAA','HHHHxx' -1588,3762,0,0,8,8,88,588,1588,1588,1588,176,177,'CJAAAA','SOFAAA','OOOOxx' -4443,3763,1,3,3,3,43,443,443,4443,4443,86,87,'XOAAAA','TOFAAA','VVVVxx' -5009,3764,1,1,9,9,9,9,1009,9,5009,18,19,'RKAAAA','UOFAAA','AAAAxx' -4287,3765,1,3,7,7,87,287,287,4287,4287,174,175,'XIAAAA','VOFAAA','HHHHxx' -2167,3766,1,3,7,7,67,167,167,2167,2167,134,135,'JFAAAA','WOFAAA','OOOOxx' -2290,3767,0,2,0,10,90,290,290,2290,2290,180,181,'CKAAAA','XOFAAA','VVVVxx' -7225,3768,1,1,5,5,25,225,1225,2225,7225,50,51,'XRAAAA','YOFAAA','AAAAxx' -8992,3769,0,0,2,12,92,992,992,3992,8992,184,185,'WHAAAA','ZOFAAA','HHHHxx' -1540,3770,0,0,0,0,40,540,1540,1540,1540,80,81,'GHAAAA','APFAAA','OOOOxx' -2029,3771,1,1,9,9,29,29,29,2029,2029,58,59,'BAAAAA','BPFAAA','VVVVxx' -2855,3772,1,3,5,15,55,855,855,2855,2855,110,111,'VFAAAA','CPFAAA','AAAAxx' -3534,3773,0,2,4,14,34,534,1534,3534,3534,68,69,'YFAAAA','DPFAAA','HHHHxx' -8078,3774,0,2,8,18,78,78,78,3078,8078,156,157,'SYAAAA','EPFAAA','OOOOxx' -9778,3775,0,2,8,18,78,778,1778,4778,9778,156,157,'CMAAAA','FPFAAA','VVVVxx' -3543,3776,1,3,3,3,43,543,1543,3543,3543,86,87,'HGAAAA','GPFAAA','AAAAxx' -4778,3777,0,2,8,18,78,778,778,4778,4778,156,157,'UBAAAA','HPFAAA','HHHHxx' -8931,3778,1,3,1,11,31,931,931,3931,8931,62,63,'NFAAAA','IPFAAA','OOOOxx' -557,3779,1,1,7,17,57,557,557,557,557,114,115,'LVAAAA','JPFAAA','VVVVxx' -5546,3780,0,2,6,6,46,546,1546,546,5546,92,93,'IFAAAA','KPFAAA','AAAAxx' -7527,3781,1,3,7,7,27,527,1527,2527,7527,54,55,'NDAAAA','LPFAAA','HHHHxx' -5000,3782,0,0,0,0,0,0,1000,0,5000,0,1,'IKAAAA','MPFAAA','OOOOxx' -7587,3783,1,3,7,7,87,587,1587,2587,7587,174,175,'VFAAAA','NPFAAA','VVVVxx' -3014,3784,0,2,4,14,14,14,1014,3014,3014,28,29,'YLAAAA','OPFAAA','AAAAxx' -5276,3785,0,0,6,16,76,276,1276,276,5276,152,153,'YUAAAA','PPFAAA','HHHHxx' -6457,3786,1,1,7,17,57,457,457,1457,6457,114,115,'JOAAAA','QPFAAA','OOOOxx' -389,3787,1,1,9,9,89,389,389,389,389,178,179,'ZOAAAA','RPFAAA','VVVVxx' -7104,3788,0,0,4,4,4,104,1104,2104,7104,8,9,'GNAAAA','SPFAAA','AAAAxx' -9995,3789,1,3,5,15,95,995,1995,4995,9995,190,191,'LUAAAA','TPFAAA','HHHHxx' -7368,3790,0,0,8,8,68,368,1368,2368,7368,136,137,'KXAAAA','UPFAAA','OOOOxx' -3258,3791,0,2,8,18,58,258,1258,3258,3258,116,117,'IVAAAA','VPFAAA','VVVVxx' -9208,3792,0,0,8,8,8,208,1208,4208,9208,16,17,'EQAAAA','WPFAAA','AAAAxx' -2396,3793,0,0,6,16,96,396,396,2396,2396,192,193,'EOAAAA','XPFAAA','HHHHxx' -1715,3794,1,3,5,15,15,715,1715,1715,1715,30,31,'ZNAAAA','YPFAAA','OOOOxx' -1240,3795,0,0,0,0,40,240,1240,1240,1240,80,81,'SVAAAA','ZPFAAA','VVVVxx' -1952,3796,0,0,2,12,52,952,1952,1952,1952,104,105,'CXAAAA','AQFAAA','AAAAxx' -4403,3797,1,3,3,3,3,403,403,4403,4403,6,7,'JNAAAA','BQFAAA','HHHHxx' -6333,3798,1,1,3,13,33,333,333,1333,6333,66,67,'PJAAAA','CQFAAA','OOOOxx' -2492,3799,0,0,2,12,92,492,492,2492,2492,184,185,'WRAAAA','DQFAAA','VVVVxx' -6543,3800,1,3,3,3,43,543,543,1543,6543,86,87,'RRAAAA','EQFAAA','AAAAxx' -5548,3801,0,0,8,8,48,548,1548,548,5548,96,97,'KFAAAA','FQFAAA','HHHHxx' -3458,3802,0,2,8,18,58,458,1458,3458,3458,116,117,'ADAAAA','GQFAAA','OOOOxx' -2588,3803,0,0,8,8,88,588,588,2588,2588,176,177,'OVAAAA','HQFAAA','VVVVxx' -1364,3804,0,0,4,4,64,364,1364,1364,1364,128,129,'MAAAAA','IQFAAA','AAAAxx' -9856,3805,0,0,6,16,56,856,1856,4856,9856,112,113,'CPAAAA','JQFAAA','HHHHxx' -4964,3806,0,0,4,4,64,964,964,4964,4964,128,129,'YIAAAA','KQFAAA','OOOOxx' -773,3807,1,1,3,13,73,773,773,773,773,146,147,'TDAAAA','LQFAAA','VVVVxx' -6402,3808,0,2,2,2,2,402,402,1402,6402,4,5,'GMAAAA','MQFAAA','AAAAxx' -7213,3809,1,1,3,13,13,213,1213,2213,7213,26,27,'LRAAAA','NQFAAA','HHHHxx' -3385,3810,1,1,5,5,85,385,1385,3385,3385,170,171,'FAAAAA','OQFAAA','OOOOxx' -6005,3811,1,1,5,5,5,5,5,1005,6005,10,11,'ZWAAAA','PQFAAA','VVVVxx' -9346,3812,0,2,6,6,46,346,1346,4346,9346,92,93,'MVAAAA','QQFAAA','AAAAxx' -1831,3813,1,3,1,11,31,831,1831,1831,1831,62,63,'LSAAAA','RQFAAA','HHHHxx' -5406,3814,0,2,6,6,6,406,1406,406,5406,12,13,'YZAAAA','SQFAAA','OOOOxx' -2154,3815,0,2,4,14,54,154,154,2154,2154,108,109,'WEAAAA','TQFAAA','VVVVxx' -3721,3816,1,1,1,1,21,721,1721,3721,3721,42,43,'DNAAAA','UQFAAA','AAAAxx' -2889,3817,1,1,9,9,89,889,889,2889,2889,178,179,'DHAAAA','VQFAAA','HHHHxx' -4410,3818,0,2,0,10,10,410,410,4410,4410,20,21,'QNAAAA','WQFAAA','OOOOxx' -7102,3819,0,2,2,2,2,102,1102,2102,7102,4,5,'ENAAAA','XQFAAA','VVVVxx' -4057,3820,1,1,7,17,57,57,57,4057,4057,114,115,'BAAAAA','YQFAAA','AAAAxx' -9780,3821,0,0,0,0,80,780,1780,4780,9780,160,161,'EMAAAA','ZQFAAA','HHHHxx' -9481,3822,1,1,1,1,81,481,1481,4481,9481,162,163,'RAAAAA','ARFAAA','OOOOxx' -2366,3823,0,2,6,6,66,366,366,2366,2366,132,133,'ANAAAA','BRFAAA','VVVVxx' -2708,3824,0,0,8,8,8,708,708,2708,2708,16,17,'EAAAAA','CRFAAA','AAAAxx' -7399,3825,1,3,9,19,99,399,1399,2399,7399,198,199,'PYAAAA','DRFAAA','HHHHxx' -5234,3826,0,2,4,14,34,234,1234,234,5234,68,69,'ITAAAA','ERFAAA','OOOOxx' -1843,3827,1,3,3,3,43,843,1843,1843,1843,86,87,'XSAAAA','FRFAAA','VVVVxx' -1006,3828,0,2,6,6,6,6,1006,1006,1006,12,13,'SMAAAA','GRFAAA','AAAAxx' -7696,3829,0,0,6,16,96,696,1696,2696,7696,192,193,'AKAAAA','HRFAAA','HHHHxx' -6411,3830,1,3,1,11,11,411,411,1411,6411,22,23,'PMAAAA','IRFAAA','OOOOxx' -3913,3831,1,1,3,13,13,913,1913,3913,3913,26,27,'NUAAAA','JRFAAA','VVVVxx' -2538,3832,0,2,8,18,38,538,538,2538,2538,76,77,'QTAAAA','KRFAAA','AAAAxx' -3019,3833,1,3,9,19,19,19,1019,3019,3019,38,39,'DMAAAA','LRFAAA','HHHHxx' -107,3834,1,3,7,7,7,107,107,107,107,14,15,'DEAAAA','MRFAAA','OOOOxx' -427,3835,1,3,7,7,27,427,427,427,427,54,55,'LQAAAA','NRFAAA','VVVVxx' -9849,3836,1,1,9,9,49,849,1849,4849,9849,98,99,'VOAAAA','ORFAAA','AAAAxx' -4195,3837,1,3,5,15,95,195,195,4195,4195,190,191,'JFAAAA','PRFAAA','HHHHxx' -9215,3838,1,3,5,15,15,215,1215,4215,9215,30,31,'LQAAAA','QRFAAA','OOOOxx' -3165,3839,1,1,5,5,65,165,1165,3165,3165,130,131,'TRAAAA','RRFAAA','VVVVxx' -3280,3840,0,0,0,0,80,280,1280,3280,3280,160,161,'EWAAAA','SRFAAA','AAAAxx' -4477,3841,1,1,7,17,77,477,477,4477,4477,154,155,'FQAAAA','TRFAAA','HHHHxx' -5885,3842,1,1,5,5,85,885,1885,885,5885,170,171,'JSAAAA','URFAAA','OOOOxx' -3311,3843,1,3,1,11,11,311,1311,3311,3311,22,23,'JXAAAA','VRFAAA','VVVVxx' -6453,3844,1,1,3,13,53,453,453,1453,6453,106,107,'FOAAAA','WRFAAA','AAAAxx' -8527,3845,1,3,7,7,27,527,527,3527,8527,54,55,'ZPAAAA','XRFAAA','HHHHxx' -1921,3846,1,1,1,1,21,921,1921,1921,1921,42,43,'XVAAAA','YRFAAA','OOOOxx' -2427,3847,1,3,7,7,27,427,427,2427,2427,54,55,'JPAAAA','ZRFAAA','VVVVxx' -3691,3848,1,3,1,11,91,691,1691,3691,3691,182,183,'ZLAAAA','ASFAAA','AAAAxx' -3882,3849,0,2,2,2,82,882,1882,3882,3882,164,165,'ITAAAA','BSFAAA','HHHHxx' -562,3850,0,2,2,2,62,562,562,562,562,124,125,'QVAAAA','CSFAAA','OOOOxx' -377,3851,1,1,7,17,77,377,377,377,377,154,155,'NOAAAA','DSFAAA','VVVVxx' -1497,3852,1,1,7,17,97,497,1497,1497,1497,194,195,'PFAAAA','ESFAAA','AAAAxx' -4453,3853,1,1,3,13,53,453,453,4453,4453,106,107,'HPAAAA','FSFAAA','HHHHxx' -4678,3854,0,2,8,18,78,678,678,4678,4678,156,157,'YXAAAA','GSFAAA','OOOOxx' -2234,3855,0,2,4,14,34,234,234,2234,2234,68,69,'YHAAAA','HSFAAA','VVVVxx' -1073,3856,1,1,3,13,73,73,1073,1073,1073,146,147,'HPAAAA','ISFAAA','AAAAxx' -6479,3857,1,3,9,19,79,479,479,1479,6479,158,159,'FPAAAA','JSFAAA','HHHHxx' -5665,3858,1,1,5,5,65,665,1665,665,5665,130,131,'XJAAAA','KSFAAA','OOOOxx' -586,3859,0,2,6,6,86,586,586,586,586,172,173,'OWAAAA','LSFAAA','VVVVxx' -1584,3860,0,0,4,4,84,584,1584,1584,1584,168,169,'YIAAAA','MSFAAA','AAAAxx' -2574,3861,0,2,4,14,74,574,574,2574,2574,148,149,'AVAAAA','NSFAAA','HHHHxx' -9833,3862,1,1,3,13,33,833,1833,4833,9833,66,67,'FOAAAA','OSFAAA','OOOOxx' -6726,3863,0,2,6,6,26,726,726,1726,6726,52,53,'SYAAAA','PSFAAA','VVVVxx' -8497,3864,1,1,7,17,97,497,497,3497,8497,194,195,'VOAAAA','QSFAAA','AAAAxx' -2914,3865,0,2,4,14,14,914,914,2914,2914,28,29,'CIAAAA','RSFAAA','HHHHxx' -8586,3866,0,2,6,6,86,586,586,3586,8586,172,173,'GSAAAA','SSFAAA','OOOOxx' -6973,3867,1,1,3,13,73,973,973,1973,6973,146,147,'FIAAAA','TSFAAA','VVVVxx' -1322,3868,0,2,2,2,22,322,1322,1322,1322,44,45,'WYAAAA','USFAAA','AAAAxx' -5242,3869,0,2,2,2,42,242,1242,242,5242,84,85,'QTAAAA','VSFAAA','HHHHxx' -5581,3870,1,1,1,1,81,581,1581,581,5581,162,163,'RGAAAA','WSFAAA','OOOOxx' -1365,3871,1,1,5,5,65,365,1365,1365,1365,130,131,'NAAAAA','XSFAAA','VVVVxx' -2818,3872,0,2,8,18,18,818,818,2818,2818,36,37,'KEAAAA','YSFAAA','AAAAxx' -3758,3873,0,2,8,18,58,758,1758,3758,3758,116,117,'OOAAAA','ZSFAAA','HHHHxx' -2665,3874,1,1,5,5,65,665,665,2665,2665,130,131,'NYAAAA','ATFAAA','OOOOxx' -9823,3875,1,3,3,3,23,823,1823,4823,9823,46,47,'VNAAAA','BTFAAA','VVVVxx' -7057,3876,1,1,7,17,57,57,1057,2057,7057,114,115,'LLAAAA','CTFAAA','AAAAxx' -543,3877,1,3,3,3,43,543,543,543,543,86,87,'XUAAAA','DTFAAA','HHHHxx' -4008,3878,0,0,8,8,8,8,8,4008,4008,16,17,'EYAAAA','ETFAAA','OOOOxx' -4397,3879,1,1,7,17,97,397,397,4397,4397,194,195,'DNAAAA','FTFAAA','VVVVxx' -8533,3880,1,1,3,13,33,533,533,3533,8533,66,67,'FQAAAA','GTFAAA','AAAAxx' -9728,3881,0,0,8,8,28,728,1728,4728,9728,56,57,'EKAAAA','HTFAAA','HHHHxx' -5198,3882,0,2,8,18,98,198,1198,198,5198,196,197,'YRAAAA','ITFAAA','OOOOxx' -5036,3883,0,0,6,16,36,36,1036,36,5036,72,73,'SLAAAA','JTFAAA','VVVVxx' -4394,3884,0,2,4,14,94,394,394,4394,4394,188,189,'ANAAAA','KTFAAA','AAAAxx' -9633,3885,1,1,3,13,33,633,1633,4633,9633,66,67,'NGAAAA','LTFAAA','HHHHxx' -3339,3886,1,3,9,19,39,339,1339,3339,3339,78,79,'LYAAAA','MTFAAA','OOOOxx' -9529,3887,1,1,9,9,29,529,1529,4529,9529,58,59,'NCAAAA','NTFAAA','VVVVxx' -4780,3888,0,0,0,0,80,780,780,4780,4780,160,161,'WBAAAA','OTFAAA','AAAAxx' -4862,3889,0,2,2,2,62,862,862,4862,4862,124,125,'AFAAAA','PTFAAA','HHHHxx' -8152,3890,0,0,2,12,52,152,152,3152,8152,104,105,'OBAAAA','QTFAAA','OOOOxx' -9330,3891,0,2,0,10,30,330,1330,4330,9330,60,61,'WUAAAA','RTFAAA','VVVVxx' -4362,3892,0,2,2,2,62,362,362,4362,4362,124,125,'ULAAAA','STFAAA','AAAAxx' -4688,3893,0,0,8,8,88,688,688,4688,4688,176,177,'IYAAAA','TTFAAA','HHHHxx' -1903,3894,1,3,3,3,3,903,1903,1903,1903,6,7,'FVAAAA','UTFAAA','OOOOxx' -9027,3895,1,3,7,7,27,27,1027,4027,9027,54,55,'FJAAAA','VTFAAA','VVVVxx' -5385,3896,1,1,5,5,85,385,1385,385,5385,170,171,'DZAAAA','WTFAAA','AAAAxx' -9854,3897,0,2,4,14,54,854,1854,4854,9854,108,109,'APAAAA','XTFAAA','HHHHxx' -9033,3898,1,1,3,13,33,33,1033,4033,9033,66,67,'LJAAAA','YTFAAA','OOOOxx' -3185,3899,1,1,5,5,85,185,1185,3185,3185,170,171,'NSAAAA','ZTFAAA','VVVVxx' -2618,3900,0,2,8,18,18,618,618,2618,2618,36,37,'SWAAAA','AUFAAA','AAAAxx' -371,3901,1,3,1,11,71,371,371,371,371,142,143,'HOAAAA','BUFAAA','HHHHxx' -3697,3902,1,1,7,17,97,697,1697,3697,3697,194,195,'FMAAAA','CUFAAA','OOOOxx' -1682,3903,0,2,2,2,82,682,1682,1682,1682,164,165,'SMAAAA','DUFAAA','VVVVxx' -3333,3904,1,1,3,13,33,333,1333,3333,3333,66,67,'FYAAAA','EUFAAA','AAAAxx' -1722,3905,0,2,2,2,22,722,1722,1722,1722,44,45,'GOAAAA','FUFAAA','HHHHxx' -2009,3906,1,1,9,9,9,9,9,2009,2009,18,19,'HZAAAA','GUFAAA','OOOOxx' -3517,3907,1,1,7,17,17,517,1517,3517,3517,34,35,'HFAAAA','HUFAAA','VVVVxx' -7640,3908,0,0,0,0,40,640,1640,2640,7640,80,81,'WHAAAA','IUFAAA','AAAAxx' -259,3909,1,3,9,19,59,259,259,259,259,118,119,'ZJAAAA','JUFAAA','HHHHxx' -1400,3910,0,0,0,0,0,400,1400,1400,1400,0,1,'WBAAAA','KUFAAA','OOOOxx' -6663,3911,1,3,3,3,63,663,663,1663,6663,126,127,'HWAAAA','LUFAAA','VVVVxx' -1576,3912,0,0,6,16,76,576,1576,1576,1576,152,153,'QIAAAA','MUFAAA','AAAAxx' -8843,3913,1,3,3,3,43,843,843,3843,8843,86,87,'DCAAAA','NUFAAA','HHHHxx' -9474,3914,0,2,4,14,74,474,1474,4474,9474,148,149,'KAAAAA','OUFAAA','OOOOxx' -1597,3915,1,1,7,17,97,597,1597,1597,1597,194,195,'LJAAAA','PUFAAA','VVVVxx' -1143,3916,1,3,3,3,43,143,1143,1143,1143,86,87,'ZRAAAA','QUFAAA','AAAAxx' -4162,3917,0,2,2,2,62,162,162,4162,4162,124,125,'CEAAAA','RUFAAA','HHHHxx' -1301,3918,1,1,1,1,1,301,1301,1301,1301,2,3,'BYAAAA','SUFAAA','OOOOxx' -2935,3919,1,3,5,15,35,935,935,2935,2935,70,71,'XIAAAA','TUFAAA','VVVVxx' -886,3920,0,2,6,6,86,886,886,886,886,172,173,'CIAAAA','UUFAAA','AAAAxx' -1661,3921,1,1,1,1,61,661,1661,1661,1661,122,123,'XLAAAA','VUFAAA','HHHHxx' -1026,3922,0,2,6,6,26,26,1026,1026,1026,52,53,'MNAAAA','WUFAAA','OOOOxx' -7034,3923,0,2,4,14,34,34,1034,2034,7034,68,69,'OKAAAA','XUFAAA','VVVVxx' -2305,3924,1,1,5,5,5,305,305,2305,2305,10,11,'RKAAAA','YUFAAA','AAAAxx' -1725,3925,1,1,5,5,25,725,1725,1725,1725,50,51,'JOAAAA','ZUFAAA','HHHHxx' -909,3926,1,1,9,9,9,909,909,909,909,18,19,'ZIAAAA','AVFAAA','OOOOxx' -9906,3927,0,2,6,6,6,906,1906,4906,9906,12,13,'ARAAAA','BVFAAA','VVVVxx' -3309,3928,1,1,9,9,9,309,1309,3309,3309,18,19,'HXAAAA','CVFAAA','AAAAxx' -515,3929,1,3,5,15,15,515,515,515,515,30,31,'VTAAAA','DVFAAA','HHHHxx' -932,3930,0,0,2,12,32,932,932,932,932,64,65,'WJAAAA','EVFAAA','OOOOxx' -8144,3931,0,0,4,4,44,144,144,3144,8144,88,89,'GBAAAA','FVFAAA','VVVVxx' -5592,3932,0,0,2,12,92,592,1592,592,5592,184,185,'CHAAAA','GVFAAA','AAAAxx' -4003,3933,1,3,3,3,3,3,3,4003,4003,6,7,'ZXAAAA','HVFAAA','HHHHxx' -9566,3934,0,2,6,6,66,566,1566,4566,9566,132,133,'YDAAAA','IVFAAA','OOOOxx' -4556,3935,0,0,6,16,56,556,556,4556,4556,112,113,'GTAAAA','JVFAAA','VVVVxx' -268,3936,0,0,8,8,68,268,268,268,268,136,137,'IKAAAA','KVFAAA','AAAAxx' -8107,3937,1,3,7,7,7,107,107,3107,8107,14,15,'VZAAAA','LVFAAA','HHHHxx' -5816,3938,0,0,6,16,16,816,1816,816,5816,32,33,'SPAAAA','MVFAAA','OOOOxx' -8597,3939,1,1,7,17,97,597,597,3597,8597,194,195,'RSAAAA','NVFAAA','VVVVxx' -9611,3940,1,3,1,11,11,611,1611,4611,9611,22,23,'RFAAAA','OVFAAA','AAAAxx' -8070,3941,0,2,0,10,70,70,70,3070,8070,140,141,'KYAAAA','PVFAAA','HHHHxx' -6040,3942,0,0,0,0,40,40,40,1040,6040,80,81,'IYAAAA','QVFAAA','OOOOxx' -3184,3943,0,0,4,4,84,184,1184,3184,3184,168,169,'MSAAAA','RVFAAA','VVVVxx' -9656,3944,0,0,6,16,56,656,1656,4656,9656,112,113,'KHAAAA','SVFAAA','AAAAxx' -1577,3945,1,1,7,17,77,577,1577,1577,1577,154,155,'RIAAAA','TVFAAA','HHHHxx' -1805,3946,1,1,5,5,5,805,1805,1805,1805,10,11,'LRAAAA','UVFAAA','OOOOxx' -8268,3947,0,0,8,8,68,268,268,3268,8268,136,137,'AGAAAA','VVFAAA','VVVVxx' -3489,3948,1,1,9,9,89,489,1489,3489,3489,178,179,'FEAAAA','WVFAAA','AAAAxx' -4564,3949,0,0,4,4,64,564,564,4564,4564,128,129,'OTAAAA','XVFAAA','HHHHxx' -4006,3950,0,2,6,6,6,6,6,4006,4006,12,13,'CYAAAA','YVFAAA','OOOOxx' -8466,3951,0,2,6,6,66,466,466,3466,8466,132,133,'QNAAAA','ZVFAAA','VVVVxx' -938,3952,0,2,8,18,38,938,938,938,938,76,77,'CKAAAA','AWFAAA','AAAAxx' -5944,3953,0,0,4,4,44,944,1944,944,5944,88,89,'QUAAAA','BWFAAA','HHHHxx' -8363,3954,1,3,3,3,63,363,363,3363,8363,126,127,'RJAAAA','CWFAAA','OOOOxx' -5348,3955,0,0,8,8,48,348,1348,348,5348,96,97,'SXAAAA','DWFAAA','VVVVxx' -71,3956,1,3,1,11,71,71,71,71,71,142,143,'TCAAAA','EWFAAA','AAAAxx' -3620,3957,0,0,0,0,20,620,1620,3620,3620,40,41,'GJAAAA','FWFAAA','HHHHxx' -3230,3958,0,2,0,10,30,230,1230,3230,3230,60,61,'GUAAAA','GWFAAA','OOOOxx' -6132,3959,0,0,2,12,32,132,132,1132,6132,64,65,'WBAAAA','HWFAAA','VVVVxx' -6143,3960,1,3,3,3,43,143,143,1143,6143,86,87,'HCAAAA','IWFAAA','AAAAxx' -8781,3961,1,1,1,1,81,781,781,3781,8781,162,163,'TZAAAA','JWFAAA','HHHHxx' -5522,3962,0,2,2,2,22,522,1522,522,5522,44,45,'KEAAAA','KWFAAA','OOOOxx' -6320,3963,0,0,0,0,20,320,320,1320,6320,40,41,'CJAAAA','LWFAAA','VVVVxx' -3923,3964,1,3,3,3,23,923,1923,3923,3923,46,47,'XUAAAA','MWFAAA','AAAAxx' -2207,3965,1,3,7,7,7,207,207,2207,2207,14,15,'XGAAAA','NWFAAA','HHHHxx' -966,3966,0,2,6,6,66,966,966,966,966,132,133,'ELAAAA','OWFAAA','OOOOxx' -9020,3967,0,0,0,0,20,20,1020,4020,9020,40,41,'YIAAAA','PWFAAA','VVVVxx' -4616,3968,0,0,6,16,16,616,616,4616,4616,32,33,'OVAAAA','QWFAAA','AAAAxx' -8289,3969,1,1,9,9,89,289,289,3289,8289,178,179,'VGAAAA','RWFAAA','HHHHxx' -5796,3970,0,0,6,16,96,796,1796,796,5796,192,193,'YOAAAA','SWFAAA','OOOOxx' -9259,3971,1,3,9,19,59,259,1259,4259,9259,118,119,'DSAAAA','TWFAAA','VVVVxx' -3710,3972,0,2,0,10,10,710,1710,3710,3710,20,21,'SMAAAA','UWFAAA','AAAAxx' -251,3973,1,3,1,11,51,251,251,251,251,102,103,'RJAAAA','VWFAAA','HHHHxx' -7669,3974,1,1,9,9,69,669,1669,2669,7669,138,139,'ZIAAAA','WWFAAA','OOOOxx' -6304,3975,0,0,4,4,4,304,304,1304,6304,8,9,'MIAAAA','XWFAAA','VVVVxx' -6454,3976,0,2,4,14,54,454,454,1454,6454,108,109,'GOAAAA','YWFAAA','AAAAxx' -1489,3977,1,1,9,9,89,489,1489,1489,1489,178,179,'HFAAAA','ZWFAAA','HHHHxx' -715,3978,1,3,5,15,15,715,715,715,715,30,31,'NBAAAA','AXFAAA','OOOOxx' -4319,3979,1,3,9,19,19,319,319,4319,4319,38,39,'DKAAAA','BXFAAA','VVVVxx' -7112,3980,0,0,2,12,12,112,1112,2112,7112,24,25,'ONAAAA','CXFAAA','AAAAxx' -3726,3981,0,2,6,6,26,726,1726,3726,3726,52,53,'INAAAA','DXFAAA','HHHHxx' -7727,3982,1,3,7,7,27,727,1727,2727,7727,54,55,'FLAAAA','EXFAAA','OOOOxx' -8387,3983,1,3,7,7,87,387,387,3387,8387,174,175,'PKAAAA','FXFAAA','VVVVxx' -6555,3984,1,3,5,15,55,555,555,1555,6555,110,111,'DSAAAA','GXFAAA','AAAAxx' -1148,3985,0,0,8,8,48,148,1148,1148,1148,96,97,'ESAAAA','HXFAAA','HHHHxx' -9000,3986,0,0,0,0,0,0,1000,4000,9000,0,1,'EIAAAA','IXFAAA','OOOOxx' -5278,3987,0,2,8,18,78,278,1278,278,5278,156,157,'AVAAAA','JXFAAA','VVVVxx' -2388,3988,0,0,8,8,88,388,388,2388,2388,176,177,'WNAAAA','KXFAAA','AAAAxx' -7984,3989,0,0,4,4,84,984,1984,2984,7984,168,169,'CVAAAA','LXFAAA','HHHHxx' -881,3990,1,1,1,1,81,881,881,881,881,162,163,'XHAAAA','MXFAAA','OOOOxx' -6830,3991,0,2,0,10,30,830,830,1830,6830,60,61,'SCAAAA','NXFAAA','VVVVxx' -7056,3992,0,0,6,16,56,56,1056,2056,7056,112,113,'KLAAAA','OXFAAA','AAAAxx' -7581,3993,1,1,1,1,81,581,1581,2581,7581,162,163,'PFAAAA','PXFAAA','HHHHxx' -5214,3994,0,2,4,14,14,214,1214,214,5214,28,29,'OSAAAA','QXFAAA','OOOOxx' -2505,3995,1,1,5,5,5,505,505,2505,2505,10,11,'JSAAAA','RXFAAA','VVVVxx' -5112,3996,0,0,2,12,12,112,1112,112,5112,24,25,'QOAAAA','SXFAAA','AAAAxx' -9884,3997,0,0,4,4,84,884,1884,4884,9884,168,169,'EQAAAA','TXFAAA','HHHHxx' -8040,3998,0,0,0,0,40,40,40,3040,8040,80,81,'GXAAAA','UXFAAA','OOOOxx' -7033,3999,1,1,3,13,33,33,1033,2033,7033,66,67,'NKAAAA','VXFAAA','VVVVxx' -9343,4000,1,3,3,3,43,343,1343,4343,9343,86,87,'JVAAAA','WXFAAA','AAAAxx' -2931,4001,1,3,1,11,31,931,931,2931,2931,62,63,'TIAAAA','XXFAAA','HHHHxx' -9024,4002,0,0,4,4,24,24,1024,4024,9024,48,49,'CJAAAA','YXFAAA','OOOOxx' -6485,4003,1,1,5,5,85,485,485,1485,6485,170,171,'LPAAAA','ZXFAAA','VVVVxx' -3465,4004,1,1,5,5,65,465,1465,3465,3465,130,131,'HDAAAA','AYFAAA','AAAAxx' -3357,4005,1,1,7,17,57,357,1357,3357,3357,114,115,'DZAAAA','BYFAAA','HHHHxx' -2929,4006,1,1,9,9,29,929,929,2929,2929,58,59,'RIAAAA','CYFAAA','OOOOxx' -3086,4007,0,2,6,6,86,86,1086,3086,3086,172,173,'SOAAAA','DYFAAA','VVVVxx' -8897,4008,1,1,7,17,97,897,897,3897,8897,194,195,'FEAAAA','EYFAAA','AAAAxx' -9688,4009,0,0,8,8,88,688,1688,4688,9688,176,177,'QIAAAA','FYFAAA','HHHHxx' -6522,4010,0,2,2,2,22,522,522,1522,6522,44,45,'WQAAAA','GYFAAA','OOOOxx' -3241,4011,1,1,1,1,41,241,1241,3241,3241,82,83,'RUAAAA','HYFAAA','VVVVxx' -8770,4012,0,2,0,10,70,770,770,3770,8770,140,141,'IZAAAA','IYFAAA','AAAAxx' -2884,4013,0,0,4,4,84,884,884,2884,2884,168,169,'YGAAAA','JYFAAA','HHHHxx' -9579,4014,1,3,9,19,79,579,1579,4579,9579,158,159,'LEAAAA','KYFAAA','OOOOxx' -3125,4015,1,1,5,5,25,125,1125,3125,3125,50,51,'FQAAAA','LYFAAA','VVVVxx' -4604,4016,0,0,4,4,4,604,604,4604,4604,8,9,'CVAAAA','MYFAAA','AAAAxx' -2682,4017,0,2,2,2,82,682,682,2682,2682,164,165,'EZAAAA','NYFAAA','HHHHxx' -254,4018,0,2,4,14,54,254,254,254,254,108,109,'UJAAAA','OYFAAA','OOOOxx' -6569,4019,1,1,9,9,69,569,569,1569,6569,138,139,'RSAAAA','PYFAAA','VVVVxx' -2686,4020,0,2,6,6,86,686,686,2686,2686,172,173,'IZAAAA','QYFAAA','AAAAxx' -2123,4021,1,3,3,3,23,123,123,2123,2123,46,47,'RDAAAA','RYFAAA','HHHHxx' -1745,4022,1,1,5,5,45,745,1745,1745,1745,90,91,'DPAAAA','SYFAAA','OOOOxx' -247,4023,1,3,7,7,47,247,247,247,247,94,95,'NJAAAA','TYFAAA','VVVVxx' -5800,4024,0,0,0,0,0,800,1800,800,5800,0,1,'CPAAAA','UYFAAA','AAAAxx' -1121,4025,1,1,1,1,21,121,1121,1121,1121,42,43,'DRAAAA','VYFAAA','HHHHxx' -8893,4026,1,1,3,13,93,893,893,3893,8893,186,187,'BEAAAA','WYFAAA','OOOOxx' -7819,4027,1,3,9,19,19,819,1819,2819,7819,38,39,'TOAAAA','XYFAAA','VVVVxx' -1339,4028,1,3,9,19,39,339,1339,1339,1339,78,79,'NZAAAA','YYFAAA','AAAAxx' -5680,4029,0,0,0,0,80,680,1680,680,5680,160,161,'MKAAAA','ZYFAAA','HHHHxx' -5093,4030,1,1,3,13,93,93,1093,93,5093,186,187,'XNAAAA','AZFAAA','OOOOxx' -3508,4031,0,0,8,8,8,508,1508,3508,3508,16,17,'YEAAAA','BZFAAA','VVVVxx' -933,4032,1,1,3,13,33,933,933,933,933,66,67,'XJAAAA','CZFAAA','AAAAxx' -1106,4033,0,2,6,6,6,106,1106,1106,1106,12,13,'OQAAAA','DZFAAA','HHHHxx' -4386,4034,0,2,6,6,86,386,386,4386,4386,172,173,'SMAAAA','EZFAAA','OOOOxx' -5895,4035,1,3,5,15,95,895,1895,895,5895,190,191,'TSAAAA','FZFAAA','VVVVxx' -2980,4036,0,0,0,0,80,980,980,2980,2980,160,161,'QKAAAA','GZFAAA','AAAAxx' -4400,4037,0,0,0,0,0,400,400,4400,4400,0,1,'GNAAAA','HZFAAA','HHHHxx' -7433,4038,1,1,3,13,33,433,1433,2433,7433,66,67,'XZAAAA','IZFAAA','OOOOxx' -6110,4039,0,2,0,10,10,110,110,1110,6110,20,21,'ABAAAA','JZFAAA','VVVVxx' -867,4040,1,3,7,7,67,867,867,867,867,134,135,'JHAAAA','KZFAAA','AAAAxx' -5292,4041,0,0,2,12,92,292,1292,292,5292,184,185,'OVAAAA','LZFAAA','HHHHxx' -3926,4042,0,2,6,6,26,926,1926,3926,3926,52,53,'AVAAAA','MZFAAA','OOOOxx' -1107,4043,1,3,7,7,7,107,1107,1107,1107,14,15,'PQAAAA','NZFAAA','VVVVxx' -7355,4044,1,3,5,15,55,355,1355,2355,7355,110,111,'XWAAAA','OZFAAA','AAAAxx' -4689,4045,1,1,9,9,89,689,689,4689,4689,178,179,'JYAAAA','PZFAAA','HHHHxx' -4872,4046,0,0,2,12,72,872,872,4872,4872,144,145,'KFAAAA','QZFAAA','OOOOxx' -7821,4047,1,1,1,1,21,821,1821,2821,7821,42,43,'VOAAAA','RZFAAA','VVVVxx' -7277,4048,1,1,7,17,77,277,1277,2277,7277,154,155,'XTAAAA','SZFAAA','AAAAxx' -3268,4049,0,0,8,8,68,268,1268,3268,3268,136,137,'SVAAAA','TZFAAA','HHHHxx' -8877,4050,1,1,7,17,77,877,877,3877,8877,154,155,'LDAAAA','UZFAAA','OOOOxx' -343,4051,1,3,3,3,43,343,343,343,343,86,87,'FNAAAA','VZFAAA','VVVVxx' -621,4052,1,1,1,1,21,621,621,621,621,42,43,'XXAAAA','WZFAAA','AAAAxx' -5429,4053,1,1,9,9,29,429,1429,429,5429,58,59,'VAAAAA','XZFAAA','HHHHxx' -392,4054,0,0,2,12,92,392,392,392,392,184,185,'CPAAAA','YZFAAA','OOOOxx' -6004,4055,0,0,4,4,4,4,4,1004,6004,8,9,'YWAAAA','ZZFAAA','VVVVxx' -6377,4056,1,1,7,17,77,377,377,1377,6377,154,155,'HLAAAA','AAGAAA','AAAAxx' -3037,4057,1,1,7,17,37,37,1037,3037,3037,74,75,'VMAAAA','BAGAAA','HHHHxx' -3514,4058,0,2,4,14,14,514,1514,3514,3514,28,29,'EFAAAA','CAGAAA','OOOOxx' -8740,4059,0,0,0,0,40,740,740,3740,8740,80,81,'EYAAAA','DAGAAA','VVVVxx' -3877,4060,1,1,7,17,77,877,1877,3877,3877,154,155,'DTAAAA','EAGAAA','AAAAxx' -5731,4061,1,3,1,11,31,731,1731,731,5731,62,63,'LMAAAA','FAGAAA','HHHHxx' -6407,4062,1,3,7,7,7,407,407,1407,6407,14,15,'LMAAAA','GAGAAA','OOOOxx' -2044,4063,0,0,4,4,44,44,44,2044,2044,88,89,'QAAAAA','HAGAAA','VVVVxx' -7362,4064,0,2,2,2,62,362,1362,2362,7362,124,125,'EXAAAA','IAGAAA','AAAAxx' -5458,4065,0,2,8,18,58,458,1458,458,5458,116,117,'YBAAAA','JAGAAA','HHHHxx' -6437,4066,1,1,7,17,37,437,437,1437,6437,74,75,'PNAAAA','KAGAAA','OOOOxx' -1051,4067,1,3,1,11,51,51,1051,1051,1051,102,103,'LOAAAA','LAGAAA','VVVVxx' -1203,4068,1,3,3,3,3,203,1203,1203,1203,6,7,'HUAAAA','MAGAAA','AAAAxx' -2176,4069,0,0,6,16,76,176,176,2176,2176,152,153,'SFAAAA','NAGAAA','HHHHxx' -8997,4070,1,1,7,17,97,997,997,3997,8997,194,195,'BIAAAA','OAGAAA','OOOOxx' -6378,4071,0,2,8,18,78,378,378,1378,6378,156,157,'ILAAAA','PAGAAA','VVVVxx' -6006,4072,0,2,6,6,6,6,6,1006,6006,12,13,'AXAAAA','QAGAAA','AAAAxx' -2308,4073,0,0,8,8,8,308,308,2308,2308,16,17,'UKAAAA','RAGAAA','HHHHxx' -625,4074,1,1,5,5,25,625,625,625,625,50,51,'BYAAAA','SAGAAA','OOOOxx' -7298,4075,0,2,8,18,98,298,1298,2298,7298,196,197,'SUAAAA','TAGAAA','VVVVxx' -5575,4076,1,3,5,15,75,575,1575,575,5575,150,151,'LGAAAA','UAGAAA','AAAAxx' -3565,4077,1,1,5,5,65,565,1565,3565,3565,130,131,'DHAAAA','VAGAAA','HHHHxx' -47,4078,1,3,7,7,47,47,47,47,47,94,95,'VBAAAA','WAGAAA','OOOOxx' -2413,4079,1,1,3,13,13,413,413,2413,2413,26,27,'VOAAAA','XAGAAA','VVVVxx' -2153,4080,1,1,3,13,53,153,153,2153,2153,106,107,'VEAAAA','YAGAAA','AAAAxx' -752,4081,0,0,2,12,52,752,752,752,752,104,105,'YCAAAA','ZAGAAA','HHHHxx' -4095,4082,1,3,5,15,95,95,95,4095,4095,190,191,'NBAAAA','ABGAAA','OOOOxx' -2518,4083,0,2,8,18,18,518,518,2518,2518,36,37,'WSAAAA','BBGAAA','VVVVxx' -3681,4084,1,1,1,1,81,681,1681,3681,3681,162,163,'PLAAAA','CBGAAA','AAAAxx' -4213,4085,1,1,3,13,13,213,213,4213,4213,26,27,'BGAAAA','DBGAAA','HHHHxx' -2615,4086,1,3,5,15,15,615,615,2615,2615,30,31,'PWAAAA','EBGAAA','OOOOxx' -1471,4087,1,3,1,11,71,471,1471,1471,1471,142,143,'PEAAAA','FBGAAA','VVVVxx' -7315,4088,1,3,5,15,15,315,1315,2315,7315,30,31,'JVAAAA','GBGAAA','AAAAxx' -6013,4089,1,1,3,13,13,13,13,1013,6013,26,27,'HXAAAA','HBGAAA','HHHHxx' -3077,4090,1,1,7,17,77,77,1077,3077,3077,154,155,'JOAAAA','IBGAAA','OOOOxx' -2190,4091,0,2,0,10,90,190,190,2190,2190,180,181,'GGAAAA','JBGAAA','VVVVxx' -528,4092,0,0,8,8,28,528,528,528,528,56,57,'IUAAAA','KBGAAA','AAAAxx' -9508,4093,0,0,8,8,8,508,1508,4508,9508,16,17,'SBAAAA','LBGAAA','HHHHxx' -2473,4094,1,1,3,13,73,473,473,2473,2473,146,147,'DRAAAA','MBGAAA','OOOOxx' -167,4095,1,3,7,7,67,167,167,167,167,134,135,'LGAAAA','NBGAAA','VVVVxx' -8448,4096,0,0,8,8,48,448,448,3448,8448,96,97,'YMAAAA','OBGAAA','AAAAxx' -7538,4097,0,2,8,18,38,538,1538,2538,7538,76,77,'YDAAAA','PBGAAA','HHHHxx' -7638,4098,0,2,8,18,38,638,1638,2638,7638,76,77,'UHAAAA','QBGAAA','OOOOxx' -4328,4099,0,0,8,8,28,328,328,4328,4328,56,57,'MKAAAA','RBGAAA','VVVVxx' -3812,4100,0,0,2,12,12,812,1812,3812,3812,24,25,'QQAAAA','SBGAAA','AAAAxx' -2879,4101,1,3,9,19,79,879,879,2879,2879,158,159,'TGAAAA','TBGAAA','HHHHxx' -4741,4102,1,1,1,1,41,741,741,4741,4741,82,83,'JAAAAA','UBGAAA','OOOOxx' -9155,4103,1,3,5,15,55,155,1155,4155,9155,110,111,'DOAAAA','VBGAAA','VVVVxx' -5151,4104,1,3,1,11,51,151,1151,151,5151,102,103,'DQAAAA','WBGAAA','AAAAxx' -5591,4105,1,3,1,11,91,591,1591,591,5591,182,183,'BHAAAA','XBGAAA','HHHHxx' -1034,4106,0,2,4,14,34,34,1034,1034,1034,68,69,'UNAAAA','YBGAAA','OOOOxx' -765,4107,1,1,5,5,65,765,765,765,765,130,131,'LDAAAA','ZBGAAA','VVVVxx' -2664,4108,0,0,4,4,64,664,664,2664,2664,128,129,'MYAAAA','ACGAAA','AAAAxx' -6854,4109,0,2,4,14,54,854,854,1854,6854,108,109,'QDAAAA','BCGAAA','HHHHxx' -8263,4110,1,3,3,3,63,263,263,3263,8263,126,127,'VFAAAA','CCGAAA','OOOOxx' -8658,4111,0,2,8,18,58,658,658,3658,8658,116,117,'AVAAAA','DCGAAA','VVVVxx' -587,4112,1,3,7,7,87,587,587,587,587,174,175,'PWAAAA','ECGAAA','AAAAxx' -4553,4113,1,1,3,13,53,553,553,4553,4553,106,107,'DTAAAA','FCGAAA','HHHHxx' -1368,4114,0,0,8,8,68,368,1368,1368,1368,136,137,'QAAAAA','GCGAAA','OOOOxx' -1718,4115,0,2,8,18,18,718,1718,1718,1718,36,37,'COAAAA','HCGAAA','VVVVxx' -140,4116,0,0,0,0,40,140,140,140,140,80,81,'KFAAAA','ICGAAA','AAAAxx' -8341,4117,1,1,1,1,41,341,341,3341,8341,82,83,'VIAAAA','JCGAAA','HHHHxx' -72,4118,0,0,2,12,72,72,72,72,72,144,145,'UCAAAA','KCGAAA','OOOOxx' -6589,4119,1,1,9,9,89,589,589,1589,6589,178,179,'LTAAAA','LCGAAA','VVVVxx' -2024,4120,0,0,4,4,24,24,24,2024,2024,48,49,'WZAAAA','MCGAAA','AAAAxx' -8024,4121,0,0,4,4,24,24,24,3024,8024,48,49,'QWAAAA','NCGAAA','HHHHxx' -9564,4122,0,0,4,4,64,564,1564,4564,9564,128,129,'WDAAAA','OCGAAA','OOOOxx' -8625,4123,1,1,5,5,25,625,625,3625,8625,50,51,'TTAAAA','PCGAAA','VVVVxx' -2680,4124,0,0,0,0,80,680,680,2680,2680,160,161,'CZAAAA','QCGAAA','AAAAxx' -4323,4125,1,3,3,3,23,323,323,4323,4323,46,47,'HKAAAA','RCGAAA','HHHHxx' -8981,4126,1,1,1,1,81,981,981,3981,8981,162,163,'LHAAAA','SCGAAA','OOOOxx' -8909,4127,1,1,9,9,9,909,909,3909,8909,18,19,'REAAAA','TCGAAA','VVVVxx' -5288,4128,0,0,8,8,88,288,1288,288,5288,176,177,'KVAAAA','UCGAAA','AAAAxx' -2057,4129,1,1,7,17,57,57,57,2057,2057,114,115,'DBAAAA','VCGAAA','HHHHxx' -5931,4130,1,3,1,11,31,931,1931,931,5931,62,63,'DUAAAA','WCGAAA','OOOOxx' -9794,4131,0,2,4,14,94,794,1794,4794,9794,188,189,'SMAAAA','XCGAAA','VVVVxx' -1012,4132,0,0,2,12,12,12,1012,1012,1012,24,25,'YMAAAA','YCGAAA','AAAAxx' -5496,4133,0,0,6,16,96,496,1496,496,5496,192,193,'KDAAAA','ZCGAAA','HHHHxx' -9182,4134,0,2,2,2,82,182,1182,4182,9182,164,165,'EPAAAA','ADGAAA','OOOOxx' -5258,4135,0,2,8,18,58,258,1258,258,5258,116,117,'GUAAAA','BDGAAA','VVVVxx' -3050,4136,0,2,0,10,50,50,1050,3050,3050,100,101,'INAAAA','CDGAAA','AAAAxx' -2083,4137,1,3,3,3,83,83,83,2083,2083,166,167,'DCAAAA','DDGAAA','HHHHxx' -3069,4138,1,1,9,9,69,69,1069,3069,3069,138,139,'BOAAAA','EDGAAA','OOOOxx' -8459,4139,1,3,9,19,59,459,459,3459,8459,118,119,'JNAAAA','FDGAAA','VVVVxx' -169,4140,1,1,9,9,69,169,169,169,169,138,139,'NGAAAA','GDGAAA','AAAAxx' -4379,4141,1,3,9,19,79,379,379,4379,4379,158,159,'LMAAAA','HDGAAA','HHHHxx' -5126,4142,0,2,6,6,26,126,1126,126,5126,52,53,'EPAAAA','IDGAAA','OOOOxx' -1415,4143,1,3,5,15,15,415,1415,1415,1415,30,31,'LCAAAA','JDGAAA','VVVVxx' -1163,4144,1,3,3,3,63,163,1163,1163,1163,126,127,'TSAAAA','KDGAAA','AAAAxx' -3500,4145,0,0,0,0,0,500,1500,3500,3500,0,1,'QEAAAA','LDGAAA','HHHHxx' -7202,4146,0,2,2,2,2,202,1202,2202,7202,4,5,'ARAAAA','MDGAAA','OOOOxx' -747,4147,1,3,7,7,47,747,747,747,747,94,95,'TCAAAA','NDGAAA','VVVVxx' -9264,4148,0,0,4,4,64,264,1264,4264,9264,128,129,'ISAAAA','ODGAAA','AAAAxx' -8548,4149,0,0,8,8,48,548,548,3548,8548,96,97,'UQAAAA','PDGAAA','HHHHxx' -4228,4150,0,0,8,8,28,228,228,4228,4228,56,57,'QGAAAA','QDGAAA','OOOOxx' -7122,4151,0,2,2,2,22,122,1122,2122,7122,44,45,'YNAAAA','RDGAAA','VVVVxx' -3395,4152,1,3,5,15,95,395,1395,3395,3395,190,191,'PAAAAA','SDGAAA','AAAAxx' -5674,4153,0,2,4,14,74,674,1674,674,5674,148,149,'GKAAAA','TDGAAA','HHHHxx' -7293,4154,1,1,3,13,93,293,1293,2293,7293,186,187,'NUAAAA','UDGAAA','OOOOxx' -737,4155,1,1,7,17,37,737,737,737,737,74,75,'JCAAAA','VDGAAA','VVVVxx' -9595,4156,1,3,5,15,95,595,1595,4595,9595,190,191,'BFAAAA','WDGAAA','AAAAxx' -594,4157,0,2,4,14,94,594,594,594,594,188,189,'WWAAAA','XDGAAA','HHHHxx' -5322,4158,0,2,2,2,22,322,1322,322,5322,44,45,'SWAAAA','YDGAAA','OOOOxx' -2933,4159,1,1,3,13,33,933,933,2933,2933,66,67,'VIAAAA','ZDGAAA','VVVVxx' -4955,4160,1,3,5,15,55,955,955,4955,4955,110,111,'PIAAAA','AEGAAA','AAAAxx' -4073,4161,1,1,3,13,73,73,73,4073,4073,146,147,'RAAAAA','BEGAAA','HHHHxx' -7249,4162,1,1,9,9,49,249,1249,2249,7249,98,99,'VSAAAA','CEGAAA','OOOOxx' -192,4163,0,0,2,12,92,192,192,192,192,184,185,'KHAAAA','DEGAAA','VVVVxx' -2617,4164,1,1,7,17,17,617,617,2617,2617,34,35,'RWAAAA','EEGAAA','AAAAxx' -7409,4165,1,1,9,9,9,409,1409,2409,7409,18,19,'ZYAAAA','FEGAAA','HHHHxx' -4903,4166,1,3,3,3,3,903,903,4903,4903,6,7,'PGAAAA','GEGAAA','OOOOxx' -9797,4167,1,1,7,17,97,797,1797,4797,9797,194,195,'VMAAAA','HEGAAA','VVVVxx' -9919,4168,1,3,9,19,19,919,1919,4919,9919,38,39,'NRAAAA','IEGAAA','AAAAxx' -1878,4169,0,2,8,18,78,878,1878,1878,1878,156,157,'GUAAAA','JEGAAA','HHHHxx' -4851,4170,1,3,1,11,51,851,851,4851,4851,102,103,'PEAAAA','KEGAAA','OOOOxx' -5514,4171,0,2,4,14,14,514,1514,514,5514,28,29,'CEAAAA','LEGAAA','VVVVxx' -2582,4172,0,2,2,2,82,582,582,2582,2582,164,165,'IVAAAA','MEGAAA','AAAAxx' -3564,4173,0,0,4,4,64,564,1564,3564,3564,128,129,'CHAAAA','NEGAAA','HHHHxx' -7085,4174,1,1,5,5,85,85,1085,2085,7085,170,171,'NMAAAA','OEGAAA','OOOOxx' -3619,4175,1,3,9,19,19,619,1619,3619,3619,38,39,'FJAAAA','PEGAAA','VVVVxx' -261,4176,1,1,1,1,61,261,261,261,261,122,123,'BKAAAA','QEGAAA','AAAAxx' -7338,4177,0,2,8,18,38,338,1338,2338,7338,76,77,'GWAAAA','REGAAA','HHHHxx' -4251,4178,1,3,1,11,51,251,251,4251,4251,102,103,'NHAAAA','SEGAAA','OOOOxx' -5360,4179,0,0,0,0,60,360,1360,360,5360,120,121,'EYAAAA','TEGAAA','VVVVxx' -5678,4180,0,2,8,18,78,678,1678,678,5678,156,157,'KKAAAA','UEGAAA','AAAAxx' -9162,4181,0,2,2,2,62,162,1162,4162,9162,124,125,'KOAAAA','VEGAAA','HHHHxx' -5920,4182,0,0,0,0,20,920,1920,920,5920,40,41,'STAAAA','WEGAAA','OOOOxx' -7156,4183,0,0,6,16,56,156,1156,2156,7156,112,113,'GPAAAA','XEGAAA','VVVVxx' -4271,4184,1,3,1,11,71,271,271,4271,4271,142,143,'HIAAAA','YEGAAA','AAAAxx' -4698,4185,0,2,8,18,98,698,698,4698,4698,196,197,'SYAAAA','ZEGAAA','HHHHxx' -1572,4186,0,0,2,12,72,572,1572,1572,1572,144,145,'MIAAAA','AFGAAA','OOOOxx' -6974,4187,0,2,4,14,74,974,974,1974,6974,148,149,'GIAAAA','BFGAAA','VVVVxx' -4291,4188,1,3,1,11,91,291,291,4291,4291,182,183,'BJAAAA','CFGAAA','AAAAxx' -4036,4189,0,0,6,16,36,36,36,4036,4036,72,73,'GZAAAA','DFGAAA','HHHHxx' -7473,4190,1,1,3,13,73,473,1473,2473,7473,146,147,'LBAAAA','EFGAAA','OOOOxx' -4786,4191,0,2,6,6,86,786,786,4786,4786,172,173,'CCAAAA','FFGAAA','VVVVxx' -2662,4192,0,2,2,2,62,662,662,2662,2662,124,125,'KYAAAA','GFGAAA','AAAAxx' -916,4193,0,0,6,16,16,916,916,916,916,32,33,'GJAAAA','HFGAAA','HHHHxx' -668,4194,0,0,8,8,68,668,668,668,668,136,137,'SZAAAA','IFGAAA','OOOOxx' -4874,4195,0,2,4,14,74,874,874,4874,4874,148,149,'MFAAAA','JFGAAA','VVVVxx' -3752,4196,0,0,2,12,52,752,1752,3752,3752,104,105,'IOAAAA','KFGAAA','AAAAxx' -4865,4197,1,1,5,5,65,865,865,4865,4865,130,131,'DFAAAA','LFGAAA','HHHHxx' -7052,4198,0,0,2,12,52,52,1052,2052,7052,104,105,'GLAAAA','MFGAAA','OOOOxx' -5712,4199,0,0,2,12,12,712,1712,712,5712,24,25,'SLAAAA','NFGAAA','VVVVxx' -31,4200,1,3,1,11,31,31,31,31,31,62,63,'FBAAAA','OFGAAA','AAAAxx' -4944,4201,0,0,4,4,44,944,944,4944,4944,88,89,'EIAAAA','PFGAAA','HHHHxx' -1435,4202,1,3,5,15,35,435,1435,1435,1435,70,71,'FDAAAA','QFGAAA','OOOOxx' -501,4203,1,1,1,1,1,501,501,501,501,2,3,'HTAAAA','RFGAAA','VVVVxx' -9401,4204,1,1,1,1,1,401,1401,4401,9401,2,3,'PXAAAA','SFGAAA','AAAAxx' -5014,4205,0,2,4,14,14,14,1014,14,5014,28,29,'WKAAAA','TFGAAA','HHHHxx' -9125,4206,1,1,5,5,25,125,1125,4125,9125,50,51,'ZMAAAA','UFGAAA','OOOOxx' -6144,4207,0,0,4,4,44,144,144,1144,6144,88,89,'ICAAAA','VFGAAA','VVVVxx' -1743,4208,1,3,3,3,43,743,1743,1743,1743,86,87,'BPAAAA','WFGAAA','AAAAxx' -4316,4209,0,0,6,16,16,316,316,4316,4316,32,33,'AKAAAA','XFGAAA','HHHHxx' -8212,4210,0,0,2,12,12,212,212,3212,8212,24,25,'WDAAAA','YFGAAA','OOOOxx' -7344,4211,0,0,4,4,44,344,1344,2344,7344,88,89,'MWAAAA','ZFGAAA','VVVVxx' -2051,4212,1,3,1,11,51,51,51,2051,2051,102,103,'XAAAAA','AGGAAA','AAAAxx' -8131,4213,1,3,1,11,31,131,131,3131,8131,62,63,'TAAAAA','BGGAAA','HHHHxx' -7023,4214,1,3,3,3,23,23,1023,2023,7023,46,47,'DKAAAA','CGGAAA','OOOOxx' -9674,4215,0,2,4,14,74,674,1674,4674,9674,148,149,'CIAAAA','DGGAAA','VVVVxx' -4984,4216,0,0,4,4,84,984,984,4984,4984,168,169,'SJAAAA','EGGAAA','AAAAxx' -111,4217,1,3,1,11,11,111,111,111,111,22,23,'HEAAAA','FGGAAA','HHHHxx' -2296,4218,0,0,6,16,96,296,296,2296,2296,192,193,'IKAAAA','GGGAAA','OOOOxx' -5025,4219,1,1,5,5,25,25,1025,25,5025,50,51,'HLAAAA','HGGAAA','VVVVxx' -1756,4220,0,0,6,16,56,756,1756,1756,1756,112,113,'OPAAAA','IGGAAA','AAAAxx' -2885,4221,1,1,5,5,85,885,885,2885,2885,170,171,'ZGAAAA','JGGAAA','HHHHxx' -2541,4222,1,1,1,1,41,541,541,2541,2541,82,83,'TTAAAA','KGGAAA','OOOOxx' -1919,4223,1,3,9,19,19,919,1919,1919,1919,38,39,'VVAAAA','LGGAAA','VVVVxx' -6496,4224,0,0,6,16,96,496,496,1496,6496,192,193,'WPAAAA','MGGAAA','AAAAxx' -6103,4225,1,3,3,3,3,103,103,1103,6103,6,7,'TAAAAA','NGGAAA','HHHHxx' -98,4226,0,2,8,18,98,98,98,98,98,196,197,'UDAAAA','OGGAAA','OOOOxx' -3727,4227,1,3,7,7,27,727,1727,3727,3727,54,55,'JNAAAA','PGGAAA','VVVVxx' -689,4228,1,1,9,9,89,689,689,689,689,178,179,'NAAAAA','QGGAAA','AAAAxx' -7181,4229,1,1,1,1,81,181,1181,2181,7181,162,163,'FQAAAA','RGGAAA','HHHHxx' -8447,4230,1,3,7,7,47,447,447,3447,8447,94,95,'XMAAAA','SGGAAA','OOOOxx' -4569,4231,1,1,9,9,69,569,569,4569,4569,138,139,'TTAAAA','TGGAAA','VVVVxx' -8844,4232,0,0,4,4,44,844,844,3844,8844,88,89,'ECAAAA','UGGAAA','AAAAxx' -2436,4233,0,0,6,16,36,436,436,2436,2436,72,73,'SPAAAA','VGGAAA','HHHHxx' -391,4234,1,3,1,11,91,391,391,391,391,182,183,'BPAAAA','WGGAAA','OOOOxx' -3035,4235,1,3,5,15,35,35,1035,3035,3035,70,71,'TMAAAA','XGGAAA','VVVVxx' -7583,4236,1,3,3,3,83,583,1583,2583,7583,166,167,'RFAAAA','YGGAAA','AAAAxx' -1145,4237,1,1,5,5,45,145,1145,1145,1145,90,91,'BSAAAA','ZGGAAA','HHHHxx' -93,4238,1,1,3,13,93,93,93,93,93,186,187,'PDAAAA','AHGAAA','OOOOxx' -8896,4239,0,0,6,16,96,896,896,3896,8896,192,193,'EEAAAA','BHGAAA','VVVVxx' -6719,4240,1,3,9,19,19,719,719,1719,6719,38,39,'LYAAAA','CHGAAA','AAAAxx' -7728,4241,0,0,8,8,28,728,1728,2728,7728,56,57,'GLAAAA','DHGAAA','HHHHxx' -1349,4242,1,1,9,9,49,349,1349,1349,1349,98,99,'XZAAAA','EHGAAA','OOOOxx' -5349,4243,1,1,9,9,49,349,1349,349,5349,98,99,'TXAAAA','FHGAAA','VVVVxx' -3040,4244,0,0,0,0,40,40,1040,3040,3040,80,81,'YMAAAA','GHGAAA','AAAAxx' -2414,4245,0,2,4,14,14,414,414,2414,2414,28,29,'WOAAAA','HHGAAA','HHHHxx' -5122,4246,0,2,2,2,22,122,1122,122,5122,44,45,'APAAAA','IHGAAA','OOOOxx' -9553,4247,1,1,3,13,53,553,1553,4553,9553,106,107,'LDAAAA','JHGAAA','VVVVxx' -5987,4248,1,3,7,7,87,987,1987,987,5987,174,175,'HWAAAA','KHGAAA','AAAAxx' -5939,4249,1,3,9,19,39,939,1939,939,5939,78,79,'LUAAAA','LHGAAA','HHHHxx' -3525,4250,1,1,5,5,25,525,1525,3525,3525,50,51,'PFAAAA','MHGAAA','OOOOxx' -1371,4251,1,3,1,11,71,371,1371,1371,1371,142,143,'TAAAAA','NHGAAA','VVVVxx' -618,4252,0,2,8,18,18,618,618,618,618,36,37,'UXAAAA','OHGAAA','AAAAxx' -6529,4253,1,1,9,9,29,529,529,1529,6529,58,59,'DRAAAA','PHGAAA','HHHHxx' -4010,4254,0,2,0,10,10,10,10,4010,4010,20,21,'GYAAAA','QHGAAA','OOOOxx' -328,4255,0,0,8,8,28,328,328,328,328,56,57,'QMAAAA','RHGAAA','VVVVxx' -6121,4256,1,1,1,1,21,121,121,1121,6121,42,43,'LBAAAA','SHGAAA','AAAAxx' -3505,4257,1,1,5,5,5,505,1505,3505,3505,10,11,'VEAAAA','THGAAA','HHHHxx' -2033,4258,1,1,3,13,33,33,33,2033,2033,66,67,'FAAAAA','UHGAAA','OOOOxx' -4724,4259,0,0,4,4,24,724,724,4724,4724,48,49,'SZAAAA','VHGAAA','VVVVxx' -8717,4260,1,1,7,17,17,717,717,3717,8717,34,35,'HXAAAA','WHGAAA','AAAAxx' -5639,4261,1,3,9,19,39,639,1639,639,5639,78,79,'XIAAAA','XHGAAA','HHHHxx' -3448,4262,0,0,8,8,48,448,1448,3448,3448,96,97,'QCAAAA','YHGAAA','OOOOxx' -2919,4263,1,3,9,19,19,919,919,2919,2919,38,39,'HIAAAA','ZHGAAA','VVVVxx' -3417,4264,1,1,7,17,17,417,1417,3417,3417,34,35,'LBAAAA','AIGAAA','AAAAxx' -943,4265,1,3,3,3,43,943,943,943,943,86,87,'HKAAAA','BIGAAA','HHHHxx' -775,4266,1,3,5,15,75,775,775,775,775,150,151,'VDAAAA','CIGAAA','OOOOxx' -2333,4267,1,1,3,13,33,333,333,2333,2333,66,67,'TLAAAA','DIGAAA','VVVVxx' -4801,4268,1,1,1,1,1,801,801,4801,4801,2,3,'RCAAAA','EIGAAA','AAAAxx' -7169,4269,1,1,9,9,69,169,1169,2169,7169,138,139,'TPAAAA','FIGAAA','HHHHxx' -2840,4270,0,0,0,0,40,840,840,2840,2840,80,81,'GFAAAA','GIGAAA','OOOOxx' -9034,4271,0,2,4,14,34,34,1034,4034,9034,68,69,'MJAAAA','HIGAAA','VVVVxx' -6154,4272,0,2,4,14,54,154,154,1154,6154,108,109,'SCAAAA','IIGAAA','AAAAxx' -1412,4273,0,0,2,12,12,412,1412,1412,1412,24,25,'ICAAAA','JIGAAA','HHHHxx' -2263,4274,1,3,3,3,63,263,263,2263,2263,126,127,'BJAAAA','KIGAAA','OOOOxx' -7118,4275,0,2,8,18,18,118,1118,2118,7118,36,37,'UNAAAA','LIGAAA','VVVVxx' -1526,4276,0,2,6,6,26,526,1526,1526,1526,52,53,'SGAAAA','MIGAAA','AAAAxx' -491,4277,1,3,1,11,91,491,491,491,491,182,183,'XSAAAA','NIGAAA','HHHHxx' -9732,4278,0,0,2,12,32,732,1732,4732,9732,64,65,'IKAAAA','OIGAAA','OOOOxx' -7067,4279,1,3,7,7,67,67,1067,2067,7067,134,135,'VLAAAA','PIGAAA','VVVVxx' -212,4280,0,0,2,12,12,212,212,212,212,24,25,'EIAAAA','QIGAAA','AAAAxx' -1955,4281,1,3,5,15,55,955,1955,1955,1955,110,111,'FXAAAA','RIGAAA','HHHHxx' -3303,4282,1,3,3,3,3,303,1303,3303,3303,6,7,'BXAAAA','SIGAAA','OOOOxx' -2715,4283,1,3,5,15,15,715,715,2715,2715,30,31,'LAAAAA','TIGAAA','VVVVxx' -8168,4284,0,0,8,8,68,168,168,3168,8168,136,137,'ECAAAA','UIGAAA','AAAAxx' -6799,4285,1,3,9,19,99,799,799,1799,6799,198,199,'NBAAAA','VIGAAA','HHHHxx' -5080,4286,0,0,0,0,80,80,1080,80,5080,160,161,'KNAAAA','WIGAAA','OOOOxx' -4939,4287,1,3,9,19,39,939,939,4939,4939,78,79,'ZHAAAA','XIGAAA','VVVVxx' -6604,4288,0,0,4,4,4,604,604,1604,6604,8,9,'AUAAAA','YIGAAA','AAAAxx' -6531,4289,1,3,1,11,31,531,531,1531,6531,62,63,'FRAAAA','ZIGAAA','HHHHxx' -9948,4290,0,0,8,8,48,948,1948,4948,9948,96,97,'QSAAAA','AJGAAA','OOOOxx' -7923,4291,1,3,3,3,23,923,1923,2923,7923,46,47,'TSAAAA','BJGAAA','VVVVxx' -9905,4292,1,1,5,5,5,905,1905,4905,9905,10,11,'ZQAAAA','CJGAAA','AAAAxx' -340,4293,0,0,0,0,40,340,340,340,340,80,81,'CNAAAA','DJGAAA','HHHHxx' -1721,4294,1,1,1,1,21,721,1721,1721,1721,42,43,'FOAAAA','EJGAAA','OOOOxx' -9047,4295,1,3,7,7,47,47,1047,4047,9047,94,95,'ZJAAAA','FJGAAA','VVVVxx' -4723,4296,1,3,3,3,23,723,723,4723,4723,46,47,'RZAAAA','GJGAAA','AAAAxx' -5748,4297,0,0,8,8,48,748,1748,748,5748,96,97,'CNAAAA','HJGAAA','HHHHxx' -6845,4298,1,1,5,5,45,845,845,1845,6845,90,91,'HDAAAA','IJGAAA','OOOOxx' -1556,4299,0,0,6,16,56,556,1556,1556,1556,112,113,'WHAAAA','JJGAAA','VVVVxx' -9505,4300,1,1,5,5,5,505,1505,4505,9505,10,11,'PBAAAA','KJGAAA','AAAAxx' -3573,4301,1,1,3,13,73,573,1573,3573,3573,146,147,'LHAAAA','LJGAAA','HHHHxx' -3785,4302,1,1,5,5,85,785,1785,3785,3785,170,171,'PPAAAA','MJGAAA','OOOOxx' -2772,4303,0,0,2,12,72,772,772,2772,2772,144,145,'QCAAAA','NJGAAA','VVVVxx' -7282,4304,0,2,2,2,82,282,1282,2282,7282,164,165,'CUAAAA','OJGAAA','AAAAxx' -8106,4305,0,2,6,6,6,106,106,3106,8106,12,13,'UZAAAA','PJGAAA','HHHHxx' -2847,4306,1,3,7,7,47,847,847,2847,2847,94,95,'NFAAAA','QJGAAA','OOOOxx' -9803,4307,1,3,3,3,3,803,1803,4803,9803,6,7,'BNAAAA','RJGAAA','VVVVxx' -7719,4308,1,3,9,19,19,719,1719,2719,7719,38,39,'XKAAAA','SJGAAA','AAAAxx' -4649,4309,1,1,9,9,49,649,649,4649,4649,98,99,'VWAAAA','TJGAAA','HHHHxx' -6196,4310,0,0,6,16,96,196,196,1196,6196,192,193,'IEAAAA','UJGAAA','OOOOxx' -6026,4311,0,2,6,6,26,26,26,1026,6026,52,53,'UXAAAA','VJGAAA','VVVVxx' -1646,4312,0,2,6,6,46,646,1646,1646,1646,92,93,'ILAAAA','WJGAAA','AAAAxx' -6526,4313,0,2,6,6,26,526,526,1526,6526,52,53,'ARAAAA','XJGAAA','HHHHxx' -5110,4314,0,2,0,10,10,110,1110,110,5110,20,21,'OOAAAA','YJGAAA','OOOOxx' -3946,4315,0,2,6,6,46,946,1946,3946,3946,92,93,'UVAAAA','ZJGAAA','VVVVxx' -445,4316,1,1,5,5,45,445,445,445,445,90,91,'DRAAAA','AKGAAA','AAAAxx' -3249,4317,1,1,9,9,49,249,1249,3249,3249,98,99,'ZUAAAA','BKGAAA','HHHHxx' -2501,4318,1,1,1,1,1,501,501,2501,2501,2,3,'FSAAAA','CKGAAA','OOOOxx' -3243,4319,1,3,3,3,43,243,1243,3243,3243,86,87,'TUAAAA','DKGAAA','VVVVxx' -4701,4320,1,1,1,1,1,701,701,4701,4701,2,3,'VYAAAA','EKGAAA','AAAAxx' -472,4321,0,0,2,12,72,472,472,472,472,144,145,'ESAAAA','FKGAAA','HHHHxx' -3356,4322,0,0,6,16,56,356,1356,3356,3356,112,113,'CZAAAA','GKGAAA','OOOOxx' -9967,4323,1,3,7,7,67,967,1967,4967,9967,134,135,'JTAAAA','HKGAAA','VVVVxx' -4292,4324,0,0,2,12,92,292,292,4292,4292,184,185,'CJAAAA','IKGAAA','AAAAxx' -7005,4325,1,1,5,5,5,5,1005,2005,7005,10,11,'LJAAAA','JKGAAA','HHHHxx' -6267,4326,1,3,7,7,67,267,267,1267,6267,134,135,'BHAAAA','KKGAAA','OOOOxx' -6678,4327,0,2,8,18,78,678,678,1678,6678,156,157,'WWAAAA','LKGAAA','VVVVxx' -6083,4328,1,3,3,3,83,83,83,1083,6083,166,167,'ZZAAAA','MKGAAA','AAAAxx' -760,4329,0,0,0,0,60,760,760,760,760,120,121,'GDAAAA','NKGAAA','HHHHxx' -7833,4330,1,1,3,13,33,833,1833,2833,7833,66,67,'HPAAAA','OKGAAA','OOOOxx' -2877,4331,1,1,7,17,77,877,877,2877,2877,154,155,'RGAAAA','PKGAAA','VVVVxx' -8810,4332,0,2,0,10,10,810,810,3810,8810,20,21,'WAAAAA','QKGAAA','AAAAxx' -1560,4333,0,0,0,0,60,560,1560,1560,1560,120,121,'AIAAAA','RKGAAA','HHHHxx' -1367,4334,1,3,7,7,67,367,1367,1367,1367,134,135,'PAAAAA','SKGAAA','OOOOxx' -8756,4335,0,0,6,16,56,756,756,3756,8756,112,113,'UYAAAA','TKGAAA','VVVVxx' -1346,4336,0,2,6,6,46,346,1346,1346,1346,92,93,'UZAAAA','UKGAAA','AAAAxx' -6449,4337,1,1,9,9,49,449,449,1449,6449,98,99,'BOAAAA','VKGAAA','HHHHxx' -6658,4338,0,2,8,18,58,658,658,1658,6658,116,117,'CWAAAA','WKGAAA','OOOOxx' -6745,4339,1,1,5,5,45,745,745,1745,6745,90,91,'LZAAAA','XKGAAA','VVVVxx' -4866,4340,0,2,6,6,66,866,866,4866,4866,132,133,'EFAAAA','YKGAAA','AAAAxx' -14,4341,0,2,4,14,14,14,14,14,14,28,29,'OAAAAA','ZKGAAA','HHHHxx' -4506,4342,0,2,6,6,6,506,506,4506,4506,12,13,'IRAAAA','ALGAAA','OOOOxx' -1923,4343,1,3,3,3,23,923,1923,1923,1923,46,47,'ZVAAAA','BLGAAA','VVVVxx' -8365,4344,1,1,5,5,65,365,365,3365,8365,130,131,'TJAAAA','CLGAAA','AAAAxx' -1279,4345,1,3,9,19,79,279,1279,1279,1279,158,159,'FXAAAA','DLGAAA','HHHHxx' -7666,4346,0,2,6,6,66,666,1666,2666,7666,132,133,'WIAAAA','ELGAAA','OOOOxx' -7404,4347,0,0,4,4,4,404,1404,2404,7404,8,9,'UYAAAA','FLGAAA','VVVVxx' -65,4348,1,1,5,5,65,65,65,65,65,130,131,'NCAAAA','GLGAAA','AAAAxx' -5820,4349,0,0,0,0,20,820,1820,820,5820,40,41,'WPAAAA','HLGAAA','HHHHxx' -459,4350,1,3,9,19,59,459,459,459,459,118,119,'RRAAAA','ILGAAA','OOOOxx' -4787,4351,1,3,7,7,87,787,787,4787,4787,174,175,'DCAAAA','JLGAAA','VVVVxx' -5631,4352,1,3,1,11,31,631,1631,631,5631,62,63,'PIAAAA','KLGAAA','AAAAxx' -9717,4353,1,1,7,17,17,717,1717,4717,9717,34,35,'TJAAAA','LLGAAA','HHHHxx' -2560,4354,0,0,0,0,60,560,560,2560,2560,120,121,'MUAAAA','MLGAAA','OOOOxx' -8295,4355,1,3,5,15,95,295,295,3295,8295,190,191,'BHAAAA','NLGAAA','VVVVxx' -3596,4356,0,0,6,16,96,596,1596,3596,3596,192,193,'IIAAAA','OLGAAA','AAAAxx' -2023,4357,1,3,3,3,23,23,23,2023,2023,46,47,'VZAAAA','PLGAAA','HHHHxx' -5055,4358,1,3,5,15,55,55,1055,55,5055,110,111,'LMAAAA','QLGAAA','OOOOxx' -763,4359,1,3,3,3,63,763,763,763,763,126,127,'JDAAAA','RLGAAA','VVVVxx' -6733,4360,1,1,3,13,33,733,733,1733,6733,66,67,'ZYAAAA','SLGAAA','AAAAxx' -9266,4361,0,2,6,6,66,266,1266,4266,9266,132,133,'KSAAAA','TLGAAA','HHHHxx' -4479,4362,1,3,9,19,79,479,479,4479,4479,158,159,'HQAAAA','ULGAAA','OOOOxx' -1816,4363,0,0,6,16,16,816,1816,1816,1816,32,33,'WRAAAA','VLGAAA','VVVVxx' -899,4364,1,3,9,19,99,899,899,899,899,198,199,'PIAAAA','WLGAAA','AAAAxx' -230,4365,0,2,0,10,30,230,230,230,230,60,61,'WIAAAA','XLGAAA','HHHHxx' -5362,4366,0,2,2,2,62,362,1362,362,5362,124,125,'GYAAAA','YLGAAA','OOOOxx' -1609,4367,1,1,9,9,9,609,1609,1609,1609,18,19,'XJAAAA','ZLGAAA','VVVVxx' -6750,4368,0,2,0,10,50,750,750,1750,6750,100,101,'QZAAAA','AMGAAA','AAAAxx' -9704,4369,0,0,4,4,4,704,1704,4704,9704,8,9,'GJAAAA','BMGAAA','HHHHxx' -3991,4370,1,3,1,11,91,991,1991,3991,3991,182,183,'NXAAAA','CMGAAA','OOOOxx' -3959,4371,1,3,9,19,59,959,1959,3959,3959,118,119,'HWAAAA','DMGAAA','VVVVxx' -9021,4372,1,1,1,1,21,21,1021,4021,9021,42,43,'ZIAAAA','EMGAAA','AAAAxx' -7585,4373,1,1,5,5,85,585,1585,2585,7585,170,171,'TFAAAA','FMGAAA','HHHHxx' -7083,4374,1,3,3,3,83,83,1083,2083,7083,166,167,'LMAAAA','GMGAAA','OOOOxx' -7688,4375,0,0,8,8,88,688,1688,2688,7688,176,177,'SJAAAA','HMGAAA','VVVVxx' -2673,4376,1,1,3,13,73,673,673,2673,2673,146,147,'VYAAAA','IMGAAA','AAAAxx' -3554,4377,0,2,4,14,54,554,1554,3554,3554,108,109,'SGAAAA','JMGAAA','HHHHxx' -7416,4378,0,0,6,16,16,416,1416,2416,7416,32,33,'GZAAAA','KMGAAA','OOOOxx' -5672,4379,0,0,2,12,72,672,1672,672,5672,144,145,'EKAAAA','LMGAAA','VVVVxx' -1355,4380,1,3,5,15,55,355,1355,1355,1355,110,111,'DAAAAA','MMGAAA','AAAAxx' -3149,4381,1,1,9,9,49,149,1149,3149,3149,98,99,'DRAAAA','NMGAAA','HHHHxx' -5811,4382,1,3,1,11,11,811,1811,811,5811,22,23,'NPAAAA','OMGAAA','OOOOxx' -3759,4383,1,3,9,19,59,759,1759,3759,3759,118,119,'POAAAA','PMGAAA','VVVVxx' -5634,4384,0,2,4,14,34,634,1634,634,5634,68,69,'SIAAAA','QMGAAA','AAAAxx' -8617,4385,1,1,7,17,17,617,617,3617,8617,34,35,'LTAAAA','RMGAAA','HHHHxx' -8949,4386,1,1,9,9,49,949,949,3949,8949,98,99,'FGAAAA','SMGAAA','OOOOxx' -3964,4387,0,0,4,4,64,964,1964,3964,3964,128,129,'MWAAAA','TMGAAA','VVVVxx' -3852,4388,0,0,2,12,52,852,1852,3852,3852,104,105,'ESAAAA','UMGAAA','AAAAxx' -1555,4389,1,3,5,15,55,555,1555,1555,1555,110,111,'VHAAAA','VMGAAA','HHHHxx' -6536,4390,0,0,6,16,36,536,536,1536,6536,72,73,'KRAAAA','WMGAAA','OOOOxx' -4779,4391,1,3,9,19,79,779,779,4779,4779,158,159,'VBAAAA','XMGAAA','VVVVxx' -1893,4392,1,1,3,13,93,893,1893,1893,1893,186,187,'VUAAAA','YMGAAA','AAAAxx' -9358,4393,0,2,8,18,58,358,1358,4358,9358,116,117,'YVAAAA','ZMGAAA','HHHHxx' -7438,4394,0,2,8,18,38,438,1438,2438,7438,76,77,'CAAAAA','ANGAAA','OOOOxx' -941,4395,1,1,1,1,41,941,941,941,941,82,83,'FKAAAA','BNGAAA','VVVVxx' -4844,4396,0,0,4,4,44,844,844,4844,4844,88,89,'IEAAAA','CNGAAA','AAAAxx' -4745,4397,1,1,5,5,45,745,745,4745,4745,90,91,'NAAAAA','DNGAAA','HHHHxx' -1017,4398,1,1,7,17,17,17,1017,1017,1017,34,35,'DNAAAA','ENGAAA','OOOOxx' -327,4399,1,3,7,7,27,327,327,327,327,54,55,'PMAAAA','FNGAAA','VVVVxx' -3152,4400,0,0,2,12,52,152,1152,3152,3152,104,105,'GRAAAA','GNGAAA','AAAAxx' -4711,4401,1,3,1,11,11,711,711,4711,4711,22,23,'FZAAAA','HNGAAA','HHHHxx' -141,4402,1,1,1,1,41,141,141,141,141,82,83,'LFAAAA','INGAAA','OOOOxx' -1303,4403,1,3,3,3,3,303,1303,1303,1303,6,7,'DYAAAA','JNGAAA','VVVVxx' -8873,4404,1,1,3,13,73,873,873,3873,8873,146,147,'HDAAAA','KNGAAA','AAAAxx' -8481,4405,1,1,1,1,81,481,481,3481,8481,162,163,'FOAAAA','LNGAAA','HHHHxx' -5445,4406,1,1,5,5,45,445,1445,445,5445,90,91,'LBAAAA','MNGAAA','OOOOxx' -7868,4407,0,0,8,8,68,868,1868,2868,7868,136,137,'QQAAAA','NNGAAA','VVVVxx' -6722,4408,0,2,2,2,22,722,722,1722,6722,44,45,'OYAAAA','ONGAAA','AAAAxx' -6628,4409,0,0,8,8,28,628,628,1628,6628,56,57,'YUAAAA','PNGAAA','HHHHxx' -7738,4410,0,2,8,18,38,738,1738,2738,7738,76,77,'QLAAAA','QNGAAA','OOOOxx' -1018,4411,0,2,8,18,18,18,1018,1018,1018,36,37,'ENAAAA','RNGAAA','VVVVxx' -3296,4412,0,0,6,16,96,296,1296,3296,3296,192,193,'UWAAAA','SNGAAA','AAAAxx' -1946,4413,0,2,6,6,46,946,1946,1946,1946,92,93,'WWAAAA','TNGAAA','HHHHxx' -6603,4414,1,3,3,3,3,603,603,1603,6603,6,7,'ZTAAAA','UNGAAA','OOOOxx' -3562,4415,0,2,2,2,62,562,1562,3562,3562,124,125,'AHAAAA','VNGAAA','VVVVxx' -1147,4416,1,3,7,7,47,147,1147,1147,1147,94,95,'DSAAAA','WNGAAA','AAAAxx' -6031,4417,1,3,1,11,31,31,31,1031,6031,62,63,'ZXAAAA','XNGAAA','HHHHxx' -6484,4418,0,0,4,4,84,484,484,1484,6484,168,169,'KPAAAA','YNGAAA','OOOOxx' -496,4419,0,0,6,16,96,496,496,496,496,192,193,'CTAAAA','ZNGAAA','VVVVxx' -4563,4420,1,3,3,3,63,563,563,4563,4563,126,127,'NTAAAA','AOGAAA','AAAAxx' -1037,4421,1,1,7,17,37,37,1037,1037,1037,74,75,'XNAAAA','BOGAAA','HHHHxx' -9672,4422,0,0,2,12,72,672,1672,4672,9672,144,145,'AIAAAA','COGAAA','OOOOxx' -9053,4423,1,1,3,13,53,53,1053,4053,9053,106,107,'FKAAAA','DOGAAA','VVVVxx' -2523,4424,1,3,3,3,23,523,523,2523,2523,46,47,'BTAAAA','EOGAAA','AAAAxx' -8519,4425,1,3,9,19,19,519,519,3519,8519,38,39,'RPAAAA','FOGAAA','HHHHxx' -8190,4426,0,2,0,10,90,190,190,3190,8190,180,181,'ADAAAA','GOGAAA','OOOOxx' -2068,4427,0,0,8,8,68,68,68,2068,2068,136,137,'OBAAAA','HOGAAA','VVVVxx' -8569,4428,1,1,9,9,69,569,569,3569,8569,138,139,'PRAAAA','IOGAAA','AAAAxx' -6535,4429,1,3,5,15,35,535,535,1535,6535,70,71,'JRAAAA','JOGAAA','HHHHxx' -1810,4430,0,2,0,10,10,810,1810,1810,1810,20,21,'QRAAAA','KOGAAA','OOOOxx' -3099,4431,1,3,9,19,99,99,1099,3099,3099,198,199,'FPAAAA','LOGAAA','VVVVxx' -7466,4432,0,2,6,6,66,466,1466,2466,7466,132,133,'EBAAAA','MOGAAA','AAAAxx' -4017,4433,1,1,7,17,17,17,17,4017,4017,34,35,'NYAAAA','NOGAAA','HHHHxx' -1097,4434,1,1,7,17,97,97,1097,1097,1097,194,195,'FQAAAA','OOGAAA','OOOOxx' -7686,4435,0,2,6,6,86,686,1686,2686,7686,172,173,'QJAAAA','POGAAA','VVVVxx' -6742,4436,0,2,2,2,42,742,742,1742,6742,84,85,'IZAAAA','QOGAAA','AAAAxx' -5966,4437,0,2,6,6,66,966,1966,966,5966,132,133,'MVAAAA','ROGAAA','HHHHxx' -3632,4438,0,0,2,12,32,632,1632,3632,3632,64,65,'SJAAAA','SOGAAA','OOOOxx' -8837,4439,1,1,7,17,37,837,837,3837,8837,74,75,'XBAAAA','TOGAAA','VVVVxx' -1667,4440,1,3,7,7,67,667,1667,1667,1667,134,135,'DMAAAA','UOGAAA','AAAAxx' -8833,4441,1,1,3,13,33,833,833,3833,8833,66,67,'TBAAAA','VOGAAA','HHHHxx' -9805,4442,1,1,5,5,5,805,1805,4805,9805,10,11,'DNAAAA','WOGAAA','OOOOxx' -3650,4443,0,2,0,10,50,650,1650,3650,3650,100,101,'KKAAAA','XOGAAA','VVVVxx' -2237,4444,1,1,7,17,37,237,237,2237,2237,74,75,'BIAAAA','YOGAAA','AAAAxx' -9980,4445,0,0,0,0,80,980,1980,4980,9980,160,161,'WTAAAA','ZOGAAA','HHHHxx' -2861,4446,1,1,1,1,61,861,861,2861,2861,122,123,'BGAAAA','APGAAA','OOOOxx' -1334,4447,0,2,4,14,34,334,1334,1334,1334,68,69,'IZAAAA','BPGAAA','VVVVxx' -842,4448,0,2,2,2,42,842,842,842,842,84,85,'KGAAAA','CPGAAA','AAAAxx' -1116,4449,0,0,6,16,16,116,1116,1116,1116,32,33,'YQAAAA','DPGAAA','HHHHxx' -4055,4450,1,3,5,15,55,55,55,4055,4055,110,111,'ZZAAAA','EPGAAA','OOOOxx' -3842,4451,0,2,2,2,42,842,1842,3842,3842,84,85,'URAAAA','FPGAAA','VVVVxx' -1886,4452,0,2,6,6,86,886,1886,1886,1886,172,173,'OUAAAA','GPGAAA','AAAAxx' -8589,4453,1,1,9,9,89,589,589,3589,8589,178,179,'JSAAAA','HPGAAA','HHHHxx' -5873,4454,1,1,3,13,73,873,1873,873,5873,146,147,'XRAAAA','IPGAAA','OOOOxx' -7711,4455,1,3,1,11,11,711,1711,2711,7711,22,23,'PKAAAA','JPGAAA','VVVVxx' -911,4456,1,3,1,11,11,911,911,911,911,22,23,'BJAAAA','KPGAAA','AAAAxx' -5837,4457,1,1,7,17,37,837,1837,837,5837,74,75,'NQAAAA','LPGAAA','HHHHxx' -897,4458,1,1,7,17,97,897,897,897,897,194,195,'NIAAAA','MPGAAA','OOOOxx' -4299,4459,1,3,9,19,99,299,299,4299,4299,198,199,'JJAAAA','NPGAAA','VVVVxx' -7774,4460,0,2,4,14,74,774,1774,2774,7774,148,149,'ANAAAA','OPGAAA','AAAAxx' -7832,4461,0,0,2,12,32,832,1832,2832,7832,64,65,'GPAAAA','PPGAAA','HHHHxx' -9915,4462,1,3,5,15,15,915,1915,4915,9915,30,31,'JRAAAA','QPGAAA','OOOOxx' -9,4463,1,1,9,9,9,9,9,9,9,18,19,'JAAAAA','RPGAAA','VVVVxx' -9675,4464,1,3,5,15,75,675,1675,4675,9675,150,151,'DIAAAA','SPGAAA','AAAAxx' -7953,4465,1,1,3,13,53,953,1953,2953,7953,106,107,'XTAAAA','TPGAAA','HHHHxx' -8912,4466,0,0,2,12,12,912,912,3912,8912,24,25,'UEAAAA','UPGAAA','OOOOxx' -4188,4467,0,0,8,8,88,188,188,4188,4188,176,177,'CFAAAA','VPGAAA','VVVVxx' -8446,4468,0,2,6,6,46,446,446,3446,8446,92,93,'WMAAAA','WPGAAA','AAAAxx' -1600,4469,0,0,0,0,0,600,1600,1600,1600,0,1,'OJAAAA','XPGAAA','HHHHxx' -43,4470,1,3,3,3,43,43,43,43,43,86,87,'RBAAAA','YPGAAA','OOOOxx' -544,4471,0,0,4,4,44,544,544,544,544,88,89,'YUAAAA','ZPGAAA','VVVVxx' -6977,4472,1,1,7,17,77,977,977,1977,6977,154,155,'JIAAAA','AQGAAA','AAAAxx' -3191,4473,1,3,1,11,91,191,1191,3191,3191,182,183,'TSAAAA','BQGAAA','HHHHxx' -418,4474,0,2,8,18,18,418,418,418,418,36,37,'CQAAAA','CQGAAA','OOOOxx' -3142,4475,0,2,2,2,42,142,1142,3142,3142,84,85,'WQAAAA','DQGAAA','VVVVxx' -5042,4476,0,2,2,2,42,42,1042,42,5042,84,85,'YLAAAA','EQGAAA','AAAAxx' -2194,4477,0,2,4,14,94,194,194,2194,2194,188,189,'KGAAAA','FQGAAA','HHHHxx' -2397,4478,1,1,7,17,97,397,397,2397,2397,194,195,'FOAAAA','GQGAAA','OOOOxx' -4684,4479,0,0,4,4,84,684,684,4684,4684,168,169,'EYAAAA','HQGAAA','VVVVxx' -34,4480,0,2,4,14,34,34,34,34,34,68,69,'IBAAAA','IQGAAA','AAAAxx' -3844,4481,0,0,4,4,44,844,1844,3844,3844,88,89,'WRAAAA','JQGAAA','HHHHxx' -7824,4482,0,0,4,4,24,824,1824,2824,7824,48,49,'YOAAAA','KQGAAA','OOOOxx' -6177,4483,1,1,7,17,77,177,177,1177,6177,154,155,'PDAAAA','LQGAAA','VVVVxx' -9657,4484,1,1,7,17,57,657,1657,4657,9657,114,115,'LHAAAA','MQGAAA','AAAAxx' -4546,4485,0,2,6,6,46,546,546,4546,4546,92,93,'WSAAAA','NQGAAA','HHHHxx' -599,4486,1,3,9,19,99,599,599,599,599,198,199,'BXAAAA','OQGAAA','OOOOxx' -153,4487,1,1,3,13,53,153,153,153,153,106,107,'XFAAAA','PQGAAA','VVVVxx' -6910,4488,0,2,0,10,10,910,910,1910,6910,20,21,'UFAAAA','QQGAAA','AAAAxx' -4408,4489,0,0,8,8,8,408,408,4408,4408,16,17,'ONAAAA','RQGAAA','HHHHxx' -1164,4490,0,0,4,4,64,164,1164,1164,1164,128,129,'USAAAA','SQGAAA','OOOOxx' -6469,4491,1,1,9,9,69,469,469,1469,6469,138,139,'VOAAAA','TQGAAA','VVVVxx' -5996,4492,0,0,6,16,96,996,1996,996,5996,192,193,'QWAAAA','UQGAAA','AAAAxx' -2639,4493,1,3,9,19,39,639,639,2639,2639,78,79,'NXAAAA','VQGAAA','HHHHxx' -2678,4494,0,2,8,18,78,678,678,2678,2678,156,157,'AZAAAA','WQGAAA','OOOOxx' -8392,4495,0,0,2,12,92,392,392,3392,8392,184,185,'UKAAAA','XQGAAA','VVVVxx' -1386,4496,0,2,6,6,86,386,1386,1386,1386,172,173,'IBAAAA','YQGAAA','AAAAxx' -5125,4497,1,1,5,5,25,125,1125,125,5125,50,51,'DPAAAA','ZQGAAA','HHHHxx' -8453,4498,1,1,3,13,53,453,453,3453,8453,106,107,'DNAAAA','ARGAAA','OOOOxx' -2369,4499,1,1,9,9,69,369,369,2369,2369,138,139,'DNAAAA','BRGAAA','VVVVxx' -1608,4500,0,0,8,8,8,608,1608,1608,1608,16,17,'WJAAAA','CRGAAA','AAAAxx' -3781,4501,1,1,1,1,81,781,1781,3781,3781,162,163,'LPAAAA','DRGAAA','HHHHxx' -903,4502,1,3,3,3,3,903,903,903,903,6,7,'TIAAAA','ERGAAA','OOOOxx' -2099,4503,1,3,9,19,99,99,99,2099,2099,198,199,'TCAAAA','FRGAAA','VVVVxx' -538,4504,0,2,8,18,38,538,538,538,538,76,77,'SUAAAA','GRGAAA','AAAAxx' -9177,4505,1,1,7,17,77,177,1177,4177,9177,154,155,'ZOAAAA','HRGAAA','HHHHxx' -420,4506,0,0,0,0,20,420,420,420,420,40,41,'EQAAAA','IRGAAA','OOOOxx' -9080,4507,0,0,0,0,80,80,1080,4080,9080,160,161,'GLAAAA','JRGAAA','VVVVxx' -2630,4508,0,2,0,10,30,630,630,2630,2630,60,61,'EXAAAA','KRGAAA','AAAAxx' -5978,4509,0,2,8,18,78,978,1978,978,5978,156,157,'YVAAAA','LRGAAA','HHHHxx' -9239,4510,1,3,9,19,39,239,1239,4239,9239,78,79,'JRAAAA','MRGAAA','OOOOxx' -4372,4511,0,0,2,12,72,372,372,4372,4372,144,145,'EMAAAA','NRGAAA','VVVVxx' -4357,4512,1,1,7,17,57,357,357,4357,4357,114,115,'PLAAAA','ORGAAA','AAAAxx' -9857,4513,1,1,7,17,57,857,1857,4857,9857,114,115,'DPAAAA','PRGAAA','HHHHxx' -7933,4514,1,1,3,13,33,933,1933,2933,7933,66,67,'DTAAAA','QRGAAA','OOOOxx' -9574,4515,0,2,4,14,74,574,1574,4574,9574,148,149,'GEAAAA','RRGAAA','VVVVxx' -8294,4516,0,2,4,14,94,294,294,3294,8294,188,189,'AHAAAA','SRGAAA','AAAAxx' -627,4517,1,3,7,7,27,627,627,627,627,54,55,'DYAAAA','TRGAAA','HHHHxx' -3229,4518,1,1,9,9,29,229,1229,3229,3229,58,59,'FUAAAA','URGAAA','OOOOxx' -3163,4519,1,3,3,3,63,163,1163,3163,3163,126,127,'RRAAAA','VRGAAA','VVVVxx' -7349,4520,1,1,9,9,49,349,1349,2349,7349,98,99,'RWAAAA','WRGAAA','AAAAxx' -6889,4521,1,1,9,9,89,889,889,1889,6889,178,179,'ZEAAAA','XRGAAA','HHHHxx' -2101,4522,1,1,1,1,1,101,101,2101,2101,2,3,'VCAAAA','YRGAAA','OOOOxx' -6476,4523,0,0,6,16,76,476,476,1476,6476,152,153,'CPAAAA','ZRGAAA','VVVVxx' -6765,4524,1,1,5,5,65,765,765,1765,6765,130,131,'FAAAAA','ASGAAA','AAAAxx' -4204,4525,0,0,4,4,4,204,204,4204,4204,8,9,'SFAAAA','BSGAAA','HHHHxx' -5915,4526,1,3,5,15,15,915,1915,915,5915,30,31,'NTAAAA','CSGAAA','OOOOxx' -2318,4527,0,2,8,18,18,318,318,2318,2318,36,37,'ELAAAA','DSGAAA','VVVVxx' -294,4528,0,2,4,14,94,294,294,294,294,188,189,'ILAAAA','ESGAAA','AAAAxx' -5245,4529,1,1,5,5,45,245,1245,245,5245,90,91,'TTAAAA','FSGAAA','HHHHxx' -4481,4530,1,1,1,1,81,481,481,4481,4481,162,163,'JQAAAA','GSGAAA','OOOOxx' -7754,4531,0,2,4,14,54,754,1754,2754,7754,108,109,'GMAAAA','HSGAAA','VVVVxx' -8494,4532,0,2,4,14,94,494,494,3494,8494,188,189,'SOAAAA','ISGAAA','AAAAxx' -4014,4533,0,2,4,14,14,14,14,4014,4014,28,29,'KYAAAA','JSGAAA','HHHHxx' -2197,4534,1,1,7,17,97,197,197,2197,2197,194,195,'NGAAAA','KSGAAA','OOOOxx' -1297,4535,1,1,7,17,97,297,1297,1297,1297,194,195,'XXAAAA','LSGAAA','VVVVxx' -1066,4536,0,2,6,6,66,66,1066,1066,1066,132,133,'APAAAA','MSGAAA','AAAAxx' -5710,4537,0,2,0,10,10,710,1710,710,5710,20,21,'QLAAAA','NSGAAA','HHHHxx' -4100,4538,0,0,0,0,0,100,100,4100,4100,0,1,'SBAAAA','OSGAAA','OOOOxx' -7356,4539,0,0,6,16,56,356,1356,2356,7356,112,113,'YWAAAA','PSGAAA','VVVVxx' -7658,4540,0,2,8,18,58,658,1658,2658,7658,116,117,'OIAAAA','QSGAAA','AAAAxx' -3666,4541,0,2,6,6,66,666,1666,3666,3666,132,133,'ALAAAA','RSGAAA','HHHHxx' -9713,4542,1,1,3,13,13,713,1713,4713,9713,26,27,'PJAAAA','SSGAAA','OOOOxx' -691,4543,1,3,1,11,91,691,691,691,691,182,183,'PAAAAA','TSGAAA','VVVVxx' -3112,4544,0,0,2,12,12,112,1112,3112,3112,24,25,'SPAAAA','USGAAA','AAAAxx' -6035,4545,1,3,5,15,35,35,35,1035,6035,70,71,'DYAAAA','VSGAAA','HHHHxx' -8353,4546,1,1,3,13,53,353,353,3353,8353,106,107,'HJAAAA','WSGAAA','OOOOxx' -5679,4547,1,3,9,19,79,679,1679,679,5679,158,159,'LKAAAA','XSGAAA','VVVVxx' -2124,4548,0,0,4,4,24,124,124,2124,2124,48,49,'SDAAAA','YSGAAA','AAAAxx' -4714,4549,0,2,4,14,14,714,714,4714,4714,28,29,'IZAAAA','ZSGAAA','HHHHxx' -9048,4550,0,0,8,8,48,48,1048,4048,9048,96,97,'AKAAAA','ATGAAA','OOOOxx' -7692,4551,0,0,2,12,92,692,1692,2692,7692,184,185,'WJAAAA','BTGAAA','VVVVxx' -4542,4552,0,2,2,2,42,542,542,4542,4542,84,85,'SSAAAA','CTGAAA','AAAAxx' -8737,4553,1,1,7,17,37,737,737,3737,8737,74,75,'BYAAAA','DTGAAA','HHHHxx' -4977,4554,1,1,7,17,77,977,977,4977,4977,154,155,'LJAAAA','ETGAAA','OOOOxx' -9349,4555,1,1,9,9,49,349,1349,4349,9349,98,99,'PVAAAA','FTGAAA','VVVVxx' -731,4556,1,3,1,11,31,731,731,731,731,62,63,'DCAAAA','GTGAAA','AAAAxx' -1788,4557,0,0,8,8,88,788,1788,1788,1788,176,177,'UQAAAA','HTGAAA','HHHHxx' -7830,4558,0,2,0,10,30,830,1830,2830,7830,60,61,'EPAAAA','ITGAAA','OOOOxx' -3977,4559,1,1,7,17,77,977,1977,3977,3977,154,155,'ZWAAAA','JTGAAA','VVVVxx' -2421,4560,1,1,1,1,21,421,421,2421,2421,42,43,'DPAAAA','KTGAAA','AAAAxx' -5891,4561,1,3,1,11,91,891,1891,891,5891,182,183,'PSAAAA','LTGAAA','HHHHxx' -1111,4562,1,3,1,11,11,111,1111,1111,1111,22,23,'TQAAAA','MTGAAA','OOOOxx' -9224,4563,0,0,4,4,24,224,1224,4224,9224,48,49,'UQAAAA','NTGAAA','VVVVxx' -9872,4564,0,0,2,12,72,872,1872,4872,9872,144,145,'SPAAAA','OTGAAA','AAAAxx' -2433,4565,1,1,3,13,33,433,433,2433,2433,66,67,'PPAAAA','PTGAAA','HHHHxx' -1491,4566,1,3,1,11,91,491,1491,1491,1491,182,183,'JFAAAA','QTGAAA','OOOOxx' -6653,4567,1,1,3,13,53,653,653,1653,6653,106,107,'XVAAAA','RTGAAA','VVVVxx' -1907,4568,1,3,7,7,7,907,1907,1907,1907,14,15,'JVAAAA','STGAAA','AAAAxx' -889,4569,1,1,9,9,89,889,889,889,889,178,179,'FIAAAA','TTGAAA','HHHHxx' -561,4570,1,1,1,1,61,561,561,561,561,122,123,'PVAAAA','UTGAAA','OOOOxx' -7415,4571,1,3,5,15,15,415,1415,2415,7415,30,31,'FZAAAA','VTGAAA','VVVVxx' -2703,4572,1,3,3,3,3,703,703,2703,2703,6,7,'ZZAAAA','WTGAAA','AAAAxx' -2561,4573,1,1,1,1,61,561,561,2561,2561,122,123,'NUAAAA','XTGAAA','HHHHxx' -1257,4574,1,1,7,17,57,257,1257,1257,1257,114,115,'JWAAAA','YTGAAA','OOOOxx' -2390,4575,0,2,0,10,90,390,390,2390,2390,180,181,'YNAAAA','ZTGAAA','VVVVxx' -3915,4576,1,3,5,15,15,915,1915,3915,3915,30,31,'PUAAAA','AUGAAA','AAAAxx' -8476,4577,0,0,6,16,76,476,476,3476,8476,152,153,'AOAAAA','BUGAAA','HHHHxx' -607,4578,1,3,7,7,7,607,607,607,607,14,15,'JXAAAA','CUGAAA','OOOOxx' -3891,4579,1,3,1,11,91,891,1891,3891,3891,182,183,'RTAAAA','DUGAAA','VVVVxx' -7269,4580,1,1,9,9,69,269,1269,2269,7269,138,139,'PTAAAA','EUGAAA','AAAAxx' -9537,4581,1,1,7,17,37,537,1537,4537,9537,74,75,'VCAAAA','FUGAAA','HHHHxx' -8518,4582,0,2,8,18,18,518,518,3518,8518,36,37,'QPAAAA','GUGAAA','OOOOxx' -5221,4583,1,1,1,1,21,221,1221,221,5221,42,43,'VSAAAA','HUGAAA','VVVVxx' -3274,4584,0,2,4,14,74,274,1274,3274,3274,148,149,'YVAAAA','IUGAAA','AAAAxx' -6677,4585,1,1,7,17,77,677,677,1677,6677,154,155,'VWAAAA','JUGAAA','HHHHxx' -3114,4586,0,2,4,14,14,114,1114,3114,3114,28,29,'UPAAAA','KUGAAA','OOOOxx' -1966,4587,0,2,6,6,66,966,1966,1966,1966,132,133,'QXAAAA','LUGAAA','VVVVxx' -5941,4588,1,1,1,1,41,941,1941,941,5941,82,83,'NUAAAA','MUGAAA','AAAAxx' -9463,4589,1,3,3,3,63,463,1463,4463,9463,126,127,'ZZAAAA','NUGAAA','HHHHxx' -8966,4590,0,2,6,6,66,966,966,3966,8966,132,133,'WGAAAA','OUGAAA','OOOOxx' -4402,4591,0,2,2,2,2,402,402,4402,4402,4,5,'INAAAA','PUGAAA','VVVVxx' -3364,4592,0,0,4,4,64,364,1364,3364,3364,128,129,'KZAAAA','QUGAAA','AAAAxx' -3698,4593,0,2,8,18,98,698,1698,3698,3698,196,197,'GMAAAA','RUGAAA','HHHHxx' -4651,4594,1,3,1,11,51,651,651,4651,4651,102,103,'XWAAAA','SUGAAA','OOOOxx' -2127,4595,1,3,7,7,27,127,127,2127,2127,54,55,'VDAAAA','TUGAAA','VVVVxx' -3614,4596,0,2,4,14,14,614,1614,3614,3614,28,29,'AJAAAA','UUGAAA','AAAAxx' -5430,4597,0,2,0,10,30,430,1430,430,5430,60,61,'WAAAAA','VUGAAA','HHHHxx' -3361,4598,1,1,1,1,61,361,1361,3361,3361,122,123,'HZAAAA','WUGAAA','OOOOxx' -4798,4599,0,2,8,18,98,798,798,4798,4798,196,197,'OCAAAA','XUGAAA','VVVVxx' -8269,4600,1,1,9,9,69,269,269,3269,8269,138,139,'BGAAAA','YUGAAA','AAAAxx' -6458,4601,0,2,8,18,58,458,458,1458,6458,116,117,'KOAAAA','ZUGAAA','HHHHxx' -3358,4602,0,2,8,18,58,358,1358,3358,3358,116,117,'EZAAAA','AVGAAA','OOOOxx' -5898,4603,0,2,8,18,98,898,1898,898,5898,196,197,'WSAAAA','BVGAAA','VVVVxx' -1880,4604,0,0,0,0,80,880,1880,1880,1880,160,161,'IUAAAA','CVGAAA','AAAAxx' -782,4605,0,2,2,2,82,782,782,782,782,164,165,'CEAAAA','DVGAAA','HHHHxx' -3102,4606,0,2,2,2,2,102,1102,3102,3102,4,5,'IPAAAA','EVGAAA','OOOOxx' -6366,4607,0,2,6,6,66,366,366,1366,6366,132,133,'WKAAAA','FVGAAA','VVVVxx' -399,4608,1,3,9,19,99,399,399,399,399,198,199,'JPAAAA','GVGAAA','AAAAxx' -6773,4609,1,1,3,13,73,773,773,1773,6773,146,147,'NAAAAA','HVGAAA','HHHHxx' -7942,4610,0,2,2,2,42,942,1942,2942,7942,84,85,'MTAAAA','IVGAAA','OOOOxx' -6274,4611,0,2,4,14,74,274,274,1274,6274,148,149,'IHAAAA','JVGAAA','VVVVxx' -7447,4612,1,3,7,7,47,447,1447,2447,7447,94,95,'LAAAAA','KVGAAA','AAAAxx' -7648,4613,0,0,8,8,48,648,1648,2648,7648,96,97,'EIAAAA','LVGAAA','HHHHxx' -3997,4614,1,1,7,17,97,997,1997,3997,3997,194,195,'TXAAAA','MVGAAA','OOOOxx' -1759,4615,1,3,9,19,59,759,1759,1759,1759,118,119,'RPAAAA','NVGAAA','VVVVxx' -1785,4616,1,1,5,5,85,785,1785,1785,1785,170,171,'RQAAAA','OVGAAA','AAAAxx' -8930,4617,0,2,0,10,30,930,930,3930,8930,60,61,'MFAAAA','PVGAAA','HHHHxx' -7595,4618,1,3,5,15,95,595,1595,2595,7595,190,191,'DGAAAA','QVGAAA','OOOOxx' -6752,4619,0,0,2,12,52,752,752,1752,6752,104,105,'SZAAAA','RVGAAA','VVVVxx' -5635,4620,1,3,5,15,35,635,1635,635,5635,70,71,'TIAAAA','SVGAAA','AAAAxx' -1579,4621,1,3,9,19,79,579,1579,1579,1579,158,159,'TIAAAA','TVGAAA','HHHHxx' -7743,4622,1,3,3,3,43,743,1743,2743,7743,86,87,'VLAAAA','UVGAAA','OOOOxx' -5856,4623,0,0,6,16,56,856,1856,856,5856,112,113,'GRAAAA','VVGAAA','VVVVxx' -7273,4624,1,1,3,13,73,273,1273,2273,7273,146,147,'TTAAAA','WVGAAA','AAAAxx' -1399,4625,1,3,9,19,99,399,1399,1399,1399,198,199,'VBAAAA','XVGAAA','HHHHxx' -3694,4626,0,2,4,14,94,694,1694,3694,3694,188,189,'CMAAAA','YVGAAA','OOOOxx' -2782,4627,0,2,2,2,82,782,782,2782,2782,164,165,'ADAAAA','ZVGAAA','VVVVxx' -6951,4628,1,3,1,11,51,951,951,1951,6951,102,103,'JHAAAA','AWGAAA','AAAAxx' -6053,4629,1,1,3,13,53,53,53,1053,6053,106,107,'VYAAAA','BWGAAA','HHHHxx' -1753,4630,1,1,3,13,53,753,1753,1753,1753,106,107,'LPAAAA','CWGAAA','OOOOxx' -3985,4631,1,1,5,5,85,985,1985,3985,3985,170,171,'HXAAAA','DWGAAA','VVVVxx' -6159,4632,1,3,9,19,59,159,159,1159,6159,118,119,'XCAAAA','EWGAAA','AAAAxx' -6250,4633,0,2,0,10,50,250,250,1250,6250,100,101,'KGAAAA','FWGAAA','HHHHxx' -6240,4634,0,0,0,0,40,240,240,1240,6240,80,81,'AGAAAA','GWGAAA','OOOOxx' -6571,4635,1,3,1,11,71,571,571,1571,6571,142,143,'TSAAAA','HWGAAA','VVVVxx' -8624,4636,0,0,4,4,24,624,624,3624,8624,48,49,'STAAAA','IWGAAA','AAAAxx' -9718,4637,0,2,8,18,18,718,1718,4718,9718,36,37,'UJAAAA','JWGAAA','HHHHxx' -5529,4638,1,1,9,9,29,529,1529,529,5529,58,59,'REAAAA','KWGAAA','OOOOxx' -7089,4639,1,1,9,9,89,89,1089,2089,7089,178,179,'RMAAAA','LWGAAA','VVVVxx' -5488,4640,0,0,8,8,88,488,1488,488,5488,176,177,'CDAAAA','MWGAAA','AAAAxx' -5444,4641,0,0,4,4,44,444,1444,444,5444,88,89,'KBAAAA','NWGAAA','HHHHxx' -4899,4642,1,3,9,19,99,899,899,4899,4899,198,199,'LGAAAA','OWGAAA','OOOOxx' -7928,4643,0,0,8,8,28,928,1928,2928,7928,56,57,'YSAAAA','PWGAAA','VVVVxx' -4736,4644,0,0,6,16,36,736,736,4736,4736,72,73,'EAAAAA','QWGAAA','AAAAxx' -4317,4645,1,1,7,17,17,317,317,4317,4317,34,35,'BKAAAA','RWGAAA','HHHHxx' -1174,4646,0,2,4,14,74,174,1174,1174,1174,148,149,'ETAAAA','SWGAAA','OOOOxx' -6138,4647,0,2,8,18,38,138,138,1138,6138,76,77,'CCAAAA','TWGAAA','VVVVxx' -3943,4648,1,3,3,3,43,943,1943,3943,3943,86,87,'RVAAAA','UWGAAA','AAAAxx' -1545,4649,1,1,5,5,45,545,1545,1545,1545,90,91,'LHAAAA','VWGAAA','HHHHxx' -6867,4650,1,3,7,7,67,867,867,1867,6867,134,135,'DEAAAA','WWGAAA','OOOOxx' -6832,4651,0,0,2,12,32,832,832,1832,6832,64,65,'UCAAAA','XWGAAA','VVVVxx' -2987,4652,1,3,7,7,87,987,987,2987,2987,174,175,'XKAAAA','YWGAAA','AAAAxx' -5169,4653,1,1,9,9,69,169,1169,169,5169,138,139,'VQAAAA','ZWGAAA','HHHHxx' -8998,4654,0,2,8,18,98,998,998,3998,8998,196,197,'CIAAAA','AXGAAA','OOOOxx' -9347,4655,1,3,7,7,47,347,1347,4347,9347,94,95,'NVAAAA','BXGAAA','VVVVxx' -4800,4656,0,0,0,0,0,800,800,4800,4800,0,1,'QCAAAA','CXGAAA','AAAAxx' -4200,4657,0,0,0,0,0,200,200,4200,4200,0,1,'OFAAAA','DXGAAA','HHHHxx' -4046,4658,0,2,6,6,46,46,46,4046,4046,92,93,'QZAAAA','EXGAAA','OOOOxx' -7142,4659,0,2,2,2,42,142,1142,2142,7142,84,85,'SOAAAA','FXGAAA','VVVVxx' -2733,4660,1,1,3,13,33,733,733,2733,2733,66,67,'DBAAAA','GXGAAA','AAAAxx' -1568,4661,0,0,8,8,68,568,1568,1568,1568,136,137,'IIAAAA','HXGAAA','HHHHxx' -5105,4662,1,1,5,5,5,105,1105,105,5105,10,11,'JOAAAA','IXGAAA','OOOOxx' -9115,4663,1,3,5,15,15,115,1115,4115,9115,30,31,'PMAAAA','JXGAAA','VVVVxx' -6475,4664,1,3,5,15,75,475,475,1475,6475,150,151,'BPAAAA','KXGAAA','AAAAxx' -3796,4665,0,0,6,16,96,796,1796,3796,3796,192,193,'AQAAAA','LXGAAA','HHHHxx' -5410,4666,0,2,0,10,10,410,1410,410,5410,20,21,'CAAAAA','MXGAAA','OOOOxx' -4023,4667,1,3,3,3,23,23,23,4023,4023,46,47,'TYAAAA','NXGAAA','VVVVxx' -8904,4668,0,0,4,4,4,904,904,3904,8904,8,9,'MEAAAA','OXGAAA','AAAAxx' -450,4669,0,2,0,10,50,450,450,450,450,100,101,'IRAAAA','PXGAAA','HHHHxx' -8087,4670,1,3,7,7,87,87,87,3087,8087,174,175,'BZAAAA','QXGAAA','OOOOxx' -6478,4671,0,2,8,18,78,478,478,1478,6478,156,157,'EPAAAA','RXGAAA','VVVVxx' -2696,4672,0,0,6,16,96,696,696,2696,2696,192,193,'SZAAAA','SXGAAA','AAAAxx' -1792,4673,0,0,2,12,92,792,1792,1792,1792,184,185,'YQAAAA','TXGAAA','HHHHxx' -9699,4674,1,3,9,19,99,699,1699,4699,9699,198,199,'BJAAAA','UXGAAA','OOOOxx' -9160,4675,0,0,0,0,60,160,1160,4160,9160,120,121,'IOAAAA','VXGAAA','VVVVxx' -9989,4676,1,1,9,9,89,989,1989,4989,9989,178,179,'FUAAAA','WXGAAA','AAAAxx' -9568,4677,0,0,8,8,68,568,1568,4568,9568,136,137,'AEAAAA','XXGAAA','HHHHxx' -487,4678,1,3,7,7,87,487,487,487,487,174,175,'TSAAAA','YXGAAA','OOOOxx' -7863,4679,1,3,3,3,63,863,1863,2863,7863,126,127,'LQAAAA','ZXGAAA','VVVVxx' -1884,4680,0,0,4,4,84,884,1884,1884,1884,168,169,'MUAAAA','AYGAAA','AAAAxx' -2651,4681,1,3,1,11,51,651,651,2651,2651,102,103,'ZXAAAA','BYGAAA','HHHHxx' -8285,4682,1,1,5,5,85,285,285,3285,8285,170,171,'RGAAAA','CYGAAA','OOOOxx' -3927,4683,1,3,7,7,27,927,1927,3927,3927,54,55,'BVAAAA','DYGAAA','VVVVxx' -4076,4684,0,0,6,16,76,76,76,4076,4076,152,153,'UAAAAA','EYGAAA','AAAAxx' -6149,4685,1,1,9,9,49,149,149,1149,6149,98,99,'NCAAAA','FYGAAA','HHHHxx' -6581,4686,1,1,1,1,81,581,581,1581,6581,162,163,'DTAAAA','GYGAAA','OOOOxx' -8293,4687,1,1,3,13,93,293,293,3293,8293,186,187,'ZGAAAA','HYGAAA','VVVVxx' -7665,4688,1,1,5,5,65,665,1665,2665,7665,130,131,'VIAAAA','IYGAAA','AAAAxx' -4435,4689,1,3,5,15,35,435,435,4435,4435,70,71,'POAAAA','JYGAAA','HHHHxx' -1271,4690,1,3,1,11,71,271,1271,1271,1271,142,143,'XWAAAA','KYGAAA','OOOOxx' -3928,4691,0,0,8,8,28,928,1928,3928,3928,56,57,'CVAAAA','LYGAAA','VVVVxx' -7045,4692,1,1,5,5,45,45,1045,2045,7045,90,91,'ZKAAAA','MYGAAA','AAAAxx' -4943,4693,1,3,3,3,43,943,943,4943,4943,86,87,'DIAAAA','NYGAAA','HHHHxx' -8473,4694,1,1,3,13,73,473,473,3473,8473,146,147,'XNAAAA','OYGAAA','OOOOxx' -1707,4695,1,3,7,7,7,707,1707,1707,1707,14,15,'RNAAAA','PYGAAA','VVVVxx' -7509,4696,1,1,9,9,9,509,1509,2509,7509,18,19,'VCAAAA','QYGAAA','AAAAxx' -1593,4697,1,1,3,13,93,593,1593,1593,1593,186,187,'HJAAAA','RYGAAA','HHHHxx' -9281,4698,1,1,1,1,81,281,1281,4281,9281,162,163,'ZSAAAA','SYGAAA','OOOOxx' -8986,4699,0,2,6,6,86,986,986,3986,8986,172,173,'QHAAAA','TYGAAA','VVVVxx' -3740,4700,0,0,0,0,40,740,1740,3740,3740,80,81,'WNAAAA','UYGAAA','AAAAxx' -9265,4701,1,1,5,5,65,265,1265,4265,9265,130,131,'JSAAAA','VYGAAA','HHHHxx' -1510,4702,0,2,0,10,10,510,1510,1510,1510,20,21,'CGAAAA','WYGAAA','OOOOxx' -3022,4703,0,2,2,2,22,22,1022,3022,3022,44,45,'GMAAAA','XYGAAA','VVVVxx' -9014,4704,0,2,4,14,14,14,1014,4014,9014,28,29,'SIAAAA','YYGAAA','AAAAxx' -6816,4705,0,0,6,16,16,816,816,1816,6816,32,33,'ECAAAA','ZYGAAA','HHHHxx' -5518,4706,0,2,8,18,18,518,1518,518,5518,36,37,'GEAAAA','AZGAAA','OOOOxx' -4451,4707,1,3,1,11,51,451,451,4451,4451,102,103,'FPAAAA','BZGAAA','VVVVxx' -8747,4708,1,3,7,7,47,747,747,3747,8747,94,95,'LYAAAA','CZGAAA','AAAAxx' -4646,4709,0,2,6,6,46,646,646,4646,4646,92,93,'SWAAAA','DZGAAA','HHHHxx' -7296,4710,0,0,6,16,96,296,1296,2296,7296,192,193,'QUAAAA','EZGAAA','OOOOxx' -9644,4711,0,0,4,4,44,644,1644,4644,9644,88,89,'YGAAAA','FZGAAA','VVVVxx' -5977,4712,1,1,7,17,77,977,1977,977,5977,154,155,'XVAAAA','GZGAAA','AAAAxx' -6270,4713,0,2,0,10,70,270,270,1270,6270,140,141,'EHAAAA','HZGAAA','HHHHxx' -5578,4714,0,2,8,18,78,578,1578,578,5578,156,157,'OGAAAA','IZGAAA','OOOOxx' -2465,4715,1,1,5,5,65,465,465,2465,2465,130,131,'VQAAAA','JZGAAA','VVVVxx' -6436,4716,0,0,6,16,36,436,436,1436,6436,72,73,'ONAAAA','KZGAAA','AAAAxx' -8089,4717,1,1,9,9,89,89,89,3089,8089,178,179,'DZAAAA','LZGAAA','HHHHxx' -2409,4718,1,1,9,9,9,409,409,2409,2409,18,19,'ROAAAA','MZGAAA','OOOOxx' -284,4719,0,0,4,4,84,284,284,284,284,168,169,'YKAAAA','NZGAAA','VVVVxx' -5576,4720,0,0,6,16,76,576,1576,576,5576,152,153,'MGAAAA','OZGAAA','AAAAxx' -6534,4721,0,2,4,14,34,534,534,1534,6534,68,69,'IRAAAA','PZGAAA','HHHHxx' -8848,4722,0,0,8,8,48,848,848,3848,8848,96,97,'ICAAAA','QZGAAA','OOOOxx' -4305,4723,1,1,5,5,5,305,305,4305,4305,10,11,'PJAAAA','RZGAAA','VVVVxx' -5574,4724,0,2,4,14,74,574,1574,574,5574,148,149,'KGAAAA','SZGAAA','AAAAxx' -596,4725,0,0,6,16,96,596,596,596,596,192,193,'YWAAAA','TZGAAA','HHHHxx' -1253,4726,1,1,3,13,53,253,1253,1253,1253,106,107,'FWAAAA','UZGAAA','OOOOxx' -521,4727,1,1,1,1,21,521,521,521,521,42,43,'BUAAAA','VZGAAA','VVVVxx' -8739,4728,1,3,9,19,39,739,739,3739,8739,78,79,'DYAAAA','WZGAAA','AAAAxx' -908,4729,0,0,8,8,8,908,908,908,908,16,17,'YIAAAA','XZGAAA','HHHHxx' -6937,4730,1,1,7,17,37,937,937,1937,6937,74,75,'VGAAAA','YZGAAA','OOOOxx' -4515,4731,1,3,5,15,15,515,515,4515,4515,30,31,'RRAAAA','ZZGAAA','VVVVxx' -8630,4732,0,2,0,10,30,630,630,3630,8630,60,61,'YTAAAA','AAHAAA','AAAAxx' -7518,4733,0,2,8,18,18,518,1518,2518,7518,36,37,'EDAAAA','BAHAAA','HHHHxx' -8300,4734,0,0,0,0,0,300,300,3300,8300,0,1,'GHAAAA','CAHAAA','OOOOxx' -8434,4735,0,2,4,14,34,434,434,3434,8434,68,69,'KMAAAA','DAHAAA','VVVVxx' -6000,4736,0,0,0,0,0,0,0,1000,6000,0,1,'UWAAAA','EAHAAA','AAAAxx' -4508,4737,0,0,8,8,8,508,508,4508,4508,16,17,'KRAAAA','FAHAAA','HHHHxx' -7861,4738,1,1,1,1,61,861,1861,2861,7861,122,123,'JQAAAA','GAHAAA','OOOOxx' -5953,4739,1,1,3,13,53,953,1953,953,5953,106,107,'ZUAAAA','HAHAAA','VVVVxx' -5063,4740,1,3,3,3,63,63,1063,63,5063,126,127,'TMAAAA','IAHAAA','AAAAxx' -4501,4741,1,1,1,1,1,501,501,4501,4501,2,3,'DRAAAA','JAHAAA','HHHHxx' -7092,4742,0,0,2,12,92,92,1092,2092,7092,184,185,'UMAAAA','KAHAAA','OOOOxx' -4388,4743,0,0,8,8,88,388,388,4388,4388,176,177,'UMAAAA','LAHAAA','VVVVxx' -1826,4744,0,2,6,6,26,826,1826,1826,1826,52,53,'GSAAAA','MAHAAA','AAAAxx' -568,4745,0,0,8,8,68,568,568,568,568,136,137,'WVAAAA','NAHAAA','HHHHxx' -8184,4746,0,0,4,4,84,184,184,3184,8184,168,169,'UCAAAA','OAHAAA','OOOOxx' -4268,4747,0,0,8,8,68,268,268,4268,4268,136,137,'EIAAAA','PAHAAA','VVVVxx' -5798,4748,0,2,8,18,98,798,1798,798,5798,196,197,'APAAAA','QAHAAA','AAAAxx' -5190,4749,0,2,0,10,90,190,1190,190,5190,180,181,'QRAAAA','RAHAAA','HHHHxx' -1298,4750,0,2,8,18,98,298,1298,1298,1298,196,197,'YXAAAA','SAHAAA','OOOOxx' -4035,4751,1,3,5,15,35,35,35,4035,4035,70,71,'FZAAAA','TAHAAA','VVVVxx' -4504,4752,0,0,4,4,4,504,504,4504,4504,8,9,'GRAAAA','UAHAAA','AAAAxx' -5992,4753,0,0,2,12,92,992,1992,992,5992,184,185,'MWAAAA','VAHAAA','HHHHxx' -770,4754,0,2,0,10,70,770,770,770,770,140,141,'QDAAAA','WAHAAA','OOOOxx' -7502,4755,0,2,2,2,2,502,1502,2502,7502,4,5,'OCAAAA','XAHAAA','VVVVxx' -824,4756,0,0,4,4,24,824,824,824,824,48,49,'SFAAAA','YAHAAA','AAAAxx' -7716,4757,0,0,6,16,16,716,1716,2716,7716,32,33,'UKAAAA','ZAHAAA','HHHHxx' -5749,4758,1,1,9,9,49,749,1749,749,5749,98,99,'DNAAAA','ABHAAA','OOOOxx' -9814,4759,0,2,4,14,14,814,1814,4814,9814,28,29,'MNAAAA','BBHAAA','VVVVxx' -350,4760,0,2,0,10,50,350,350,350,350,100,101,'MNAAAA','CBHAAA','AAAAxx' -1390,4761,0,2,0,10,90,390,1390,1390,1390,180,181,'MBAAAA','DBHAAA','HHHHxx' -6994,4762,0,2,4,14,94,994,994,1994,6994,188,189,'AJAAAA','EBHAAA','OOOOxx' -3629,4763,1,1,9,9,29,629,1629,3629,3629,58,59,'PJAAAA','FBHAAA','VVVVxx' -9937,4764,1,1,7,17,37,937,1937,4937,9937,74,75,'FSAAAA','GBHAAA','AAAAxx' -5285,4765,1,1,5,5,85,285,1285,285,5285,170,171,'HVAAAA','HBHAAA','HHHHxx' -3157,4766,1,1,7,17,57,157,1157,3157,3157,114,115,'LRAAAA','IBHAAA','OOOOxx' -9549,4767,1,1,9,9,49,549,1549,4549,9549,98,99,'HDAAAA','JBHAAA','VVVVxx' -4118,4768,0,2,8,18,18,118,118,4118,4118,36,37,'KCAAAA','KBHAAA','AAAAxx' -756,4769,0,0,6,16,56,756,756,756,756,112,113,'CDAAAA','LBHAAA','HHHHxx' -5964,4770,0,0,4,4,64,964,1964,964,5964,128,129,'KVAAAA','MBHAAA','OOOOxx' -7701,4771,1,1,1,1,1,701,1701,2701,7701,2,3,'FKAAAA','NBHAAA','VVVVxx' -1242,4772,0,2,2,2,42,242,1242,1242,1242,84,85,'UVAAAA','OBHAAA','AAAAxx' -7890,4773,0,2,0,10,90,890,1890,2890,7890,180,181,'MRAAAA','PBHAAA','HHHHxx' -1991,4774,1,3,1,11,91,991,1991,1991,1991,182,183,'PYAAAA','QBHAAA','OOOOxx' -110,4775,0,2,0,10,10,110,110,110,110,20,21,'GEAAAA','RBHAAA','VVVVxx' -9334,4776,0,2,4,14,34,334,1334,4334,9334,68,69,'AVAAAA','SBHAAA','AAAAxx' -6231,4777,1,3,1,11,31,231,231,1231,6231,62,63,'RFAAAA','TBHAAA','HHHHxx' -9871,4778,1,3,1,11,71,871,1871,4871,9871,142,143,'RPAAAA','UBHAAA','OOOOxx' -9471,4779,1,3,1,11,71,471,1471,4471,9471,142,143,'HAAAAA','VBHAAA','VVVVxx' -2697,4780,1,1,7,17,97,697,697,2697,2697,194,195,'TZAAAA','WBHAAA','AAAAxx' -4761,4781,1,1,1,1,61,761,761,4761,4761,122,123,'DBAAAA','XBHAAA','HHHHxx' -8493,4782,1,1,3,13,93,493,493,3493,8493,186,187,'ROAAAA','YBHAAA','OOOOxx' -1045,4783,1,1,5,5,45,45,1045,1045,1045,90,91,'FOAAAA','ZBHAAA','VVVVxx' -3403,4784,1,3,3,3,3,403,1403,3403,3403,6,7,'XAAAAA','ACHAAA','AAAAxx' -9412,4785,0,0,2,12,12,412,1412,4412,9412,24,25,'AYAAAA','BCHAAA','HHHHxx' -7652,4786,0,0,2,12,52,652,1652,2652,7652,104,105,'IIAAAA','CCHAAA','OOOOxx' -5866,4787,0,2,6,6,66,866,1866,866,5866,132,133,'QRAAAA','DCHAAA','VVVVxx' -6942,4788,0,2,2,2,42,942,942,1942,6942,84,85,'AHAAAA','ECHAAA','AAAAxx' -9353,4789,1,1,3,13,53,353,1353,4353,9353,106,107,'TVAAAA','FCHAAA','HHHHxx' -2600,4790,0,0,0,0,0,600,600,2600,2600,0,1,'AWAAAA','GCHAAA','OOOOxx' -6971,4791,1,3,1,11,71,971,971,1971,6971,142,143,'DIAAAA','HCHAAA','VVVVxx' -5391,4792,1,3,1,11,91,391,1391,391,5391,182,183,'JZAAAA','ICHAAA','AAAAxx' -7654,4793,0,2,4,14,54,654,1654,2654,7654,108,109,'KIAAAA','JCHAAA','HHHHxx' -1797,4794,1,1,7,17,97,797,1797,1797,1797,194,195,'DRAAAA','KCHAAA','OOOOxx' -4530,4795,0,2,0,10,30,530,530,4530,4530,60,61,'GSAAAA','LCHAAA','VVVVxx' -3130,4796,0,2,0,10,30,130,1130,3130,3130,60,61,'KQAAAA','MCHAAA','AAAAxx' -9442,4797,0,2,2,2,42,442,1442,4442,9442,84,85,'EZAAAA','NCHAAA','HHHHxx' -6659,4798,1,3,9,19,59,659,659,1659,6659,118,119,'DWAAAA','OCHAAA','OOOOxx' -9714,4799,0,2,4,14,14,714,1714,4714,9714,28,29,'QJAAAA','PCHAAA','VVVVxx' -3660,4800,0,0,0,0,60,660,1660,3660,3660,120,121,'UKAAAA','QCHAAA','AAAAxx' -1906,4801,0,2,6,6,6,906,1906,1906,1906,12,13,'IVAAAA','RCHAAA','HHHHxx' -7927,4802,1,3,7,7,27,927,1927,2927,7927,54,55,'XSAAAA','SCHAAA','OOOOxx' -1767,4803,1,3,7,7,67,767,1767,1767,1767,134,135,'ZPAAAA','TCHAAA','VVVVxx' -5523,4804,1,3,3,3,23,523,1523,523,5523,46,47,'LEAAAA','UCHAAA','AAAAxx' -9289,4805,1,1,9,9,89,289,1289,4289,9289,178,179,'HTAAAA','VCHAAA','HHHHxx' -2717,4806,1,1,7,17,17,717,717,2717,2717,34,35,'NAAAAA','WCHAAA','OOOOxx' -4099,4807,1,3,9,19,99,99,99,4099,4099,198,199,'RBAAAA','XCHAAA','VVVVxx' -4387,4808,1,3,7,7,87,387,387,4387,4387,174,175,'TMAAAA','YCHAAA','AAAAxx' -8864,4809,0,0,4,4,64,864,864,3864,8864,128,129,'YCAAAA','ZCHAAA','HHHHxx' -1774,4810,0,2,4,14,74,774,1774,1774,1774,148,149,'GQAAAA','ADHAAA','OOOOxx' -6292,4811,0,0,2,12,92,292,292,1292,6292,184,185,'AIAAAA','BDHAAA','VVVVxx' -847,4812,1,3,7,7,47,847,847,847,847,94,95,'PGAAAA','CDHAAA','AAAAxx' -5954,4813,0,2,4,14,54,954,1954,954,5954,108,109,'AVAAAA','DDHAAA','HHHHxx' -8032,4814,0,0,2,12,32,32,32,3032,8032,64,65,'YWAAAA','EDHAAA','OOOOxx' -3295,4815,1,3,5,15,95,295,1295,3295,3295,190,191,'TWAAAA','FDHAAA','VVVVxx' -8984,4816,0,0,4,4,84,984,984,3984,8984,168,169,'OHAAAA','GDHAAA','AAAAxx' -7809,4817,1,1,9,9,9,809,1809,2809,7809,18,19,'JOAAAA','HDHAAA','HHHHxx' -1670,4818,0,2,0,10,70,670,1670,1670,1670,140,141,'GMAAAA','IDHAAA','OOOOxx' -7733,4819,1,1,3,13,33,733,1733,2733,7733,66,67,'LLAAAA','JDHAAA','VVVVxx' -6187,4820,1,3,7,7,87,187,187,1187,6187,174,175,'ZDAAAA','KDHAAA','AAAAxx' -9326,4821,0,2,6,6,26,326,1326,4326,9326,52,53,'SUAAAA','LDHAAA','HHHHxx' -2493,4822,1,1,3,13,93,493,493,2493,2493,186,187,'XRAAAA','MDHAAA','OOOOxx' -9512,4823,0,0,2,12,12,512,1512,4512,9512,24,25,'WBAAAA','NDHAAA','VVVVxx' -4342,4824,0,2,2,2,42,342,342,4342,4342,84,85,'ALAAAA','ODHAAA','AAAAxx' -5350,4825,0,2,0,10,50,350,1350,350,5350,100,101,'UXAAAA','PDHAAA','HHHHxx' -6009,4826,1,1,9,9,9,9,9,1009,6009,18,19,'DXAAAA','QDHAAA','OOOOxx' -1208,4827,0,0,8,8,8,208,1208,1208,1208,16,17,'MUAAAA','RDHAAA','VVVVxx' -7014,4828,0,2,4,14,14,14,1014,2014,7014,28,29,'UJAAAA','SDHAAA','AAAAxx' -2967,4829,1,3,7,7,67,967,967,2967,2967,134,135,'DKAAAA','TDHAAA','HHHHxx' -5831,4830,1,3,1,11,31,831,1831,831,5831,62,63,'HQAAAA','UDHAAA','OOOOxx' -3097,4831,1,1,7,17,97,97,1097,3097,3097,194,195,'DPAAAA','VDHAAA','VVVVxx' -1528,4832,0,0,8,8,28,528,1528,1528,1528,56,57,'UGAAAA','WDHAAA','AAAAxx' -6429,4833,1,1,9,9,29,429,429,1429,6429,58,59,'HNAAAA','XDHAAA','HHHHxx' -7320,4834,0,0,0,0,20,320,1320,2320,7320,40,41,'OVAAAA','YDHAAA','OOOOxx' -844,4835,0,0,4,4,44,844,844,844,844,88,89,'MGAAAA','ZDHAAA','VVVVxx' -7054,4836,0,2,4,14,54,54,1054,2054,7054,108,109,'ILAAAA','AEHAAA','AAAAxx' -1643,4837,1,3,3,3,43,643,1643,1643,1643,86,87,'FLAAAA','BEHAAA','HHHHxx' -7626,4838,0,2,6,6,26,626,1626,2626,7626,52,53,'IHAAAA','CEHAAA','OOOOxx' -8728,4839,0,0,8,8,28,728,728,3728,8728,56,57,'SXAAAA','DEHAAA','VVVVxx' -8277,4840,1,1,7,17,77,277,277,3277,8277,154,155,'JGAAAA','EEHAAA','AAAAxx' -189,4841,1,1,9,9,89,189,189,189,189,178,179,'HHAAAA','FEHAAA','HHHHxx' -3717,4842,1,1,7,17,17,717,1717,3717,3717,34,35,'ZMAAAA','GEHAAA','OOOOxx' -1020,4843,0,0,0,0,20,20,1020,1020,1020,40,41,'GNAAAA','HEHAAA','VVVVxx' -9234,4844,0,2,4,14,34,234,1234,4234,9234,68,69,'ERAAAA','IEHAAA','AAAAxx' -9541,4845,1,1,1,1,41,541,1541,4541,9541,82,83,'ZCAAAA','JEHAAA','HHHHxx' -380,4846,0,0,0,0,80,380,380,380,380,160,161,'QOAAAA','KEHAAA','OOOOxx' -397,4847,1,1,7,17,97,397,397,397,397,194,195,'HPAAAA','LEHAAA','VVVVxx' -835,4848,1,3,5,15,35,835,835,835,835,70,71,'DGAAAA','MEHAAA','AAAAxx' -347,4849,1,3,7,7,47,347,347,347,347,94,95,'JNAAAA','NEHAAA','HHHHxx' -2490,4850,0,2,0,10,90,490,490,2490,2490,180,181,'URAAAA','OEHAAA','OOOOxx' -605,4851,1,1,5,5,5,605,605,605,605,10,11,'HXAAAA','PEHAAA','VVVVxx' -7960,4852,0,0,0,0,60,960,1960,2960,7960,120,121,'EUAAAA','QEHAAA','AAAAxx' -9681,4853,1,1,1,1,81,681,1681,4681,9681,162,163,'JIAAAA','REHAAA','HHHHxx' -5753,4854,1,1,3,13,53,753,1753,753,5753,106,107,'HNAAAA','SEHAAA','OOOOxx' -1676,4855,0,0,6,16,76,676,1676,1676,1676,152,153,'MMAAAA','TEHAAA','VVVVxx' -5533,4856,1,1,3,13,33,533,1533,533,5533,66,67,'VEAAAA','UEHAAA','AAAAxx' -8958,4857,0,2,8,18,58,958,958,3958,8958,116,117,'OGAAAA','VEHAAA','HHHHxx' -664,4858,0,0,4,4,64,664,664,664,664,128,129,'OZAAAA','WEHAAA','OOOOxx' -3005,4859,1,1,5,5,5,5,1005,3005,3005,10,11,'PLAAAA','XEHAAA','VVVVxx' -8576,4860,0,0,6,16,76,576,576,3576,8576,152,153,'WRAAAA','YEHAAA','AAAAxx' -7304,4861,0,0,4,4,4,304,1304,2304,7304,8,9,'YUAAAA','ZEHAAA','HHHHxx' -3375,4862,1,3,5,15,75,375,1375,3375,3375,150,151,'VZAAAA','AFHAAA','OOOOxx' -6336,4863,0,0,6,16,36,336,336,1336,6336,72,73,'SJAAAA','BFHAAA','VVVVxx' -1392,4864,0,0,2,12,92,392,1392,1392,1392,184,185,'OBAAAA','CFHAAA','AAAAxx' -2925,4865,1,1,5,5,25,925,925,2925,2925,50,51,'NIAAAA','DFHAAA','HHHHxx' -1217,4866,1,1,7,17,17,217,1217,1217,1217,34,35,'VUAAAA','EFHAAA','OOOOxx' -3714,4867,0,2,4,14,14,714,1714,3714,3714,28,29,'WMAAAA','FFHAAA','VVVVxx' -2120,4868,0,0,0,0,20,120,120,2120,2120,40,41,'ODAAAA','GFHAAA','AAAAxx' -2845,4869,1,1,5,5,45,845,845,2845,2845,90,91,'LFAAAA','HFHAAA','HHHHxx' -3865,4870,1,1,5,5,65,865,1865,3865,3865,130,131,'RSAAAA','IFHAAA','OOOOxx' -124,4871,0,0,4,4,24,124,124,124,124,48,49,'UEAAAA','JFHAAA','VVVVxx' -865,4872,1,1,5,5,65,865,865,865,865,130,131,'HHAAAA','KFHAAA','AAAAxx' -9361,4873,1,1,1,1,61,361,1361,4361,9361,122,123,'BWAAAA','LFHAAA','HHHHxx' -6338,4874,0,2,8,18,38,338,338,1338,6338,76,77,'UJAAAA','MFHAAA','OOOOxx' -7330,4875,0,2,0,10,30,330,1330,2330,7330,60,61,'YVAAAA','NFHAAA','VVVVxx' -513,4876,1,1,3,13,13,513,513,513,513,26,27,'TTAAAA','OFHAAA','AAAAxx' -5001,4877,1,1,1,1,1,1,1001,1,5001,2,3,'JKAAAA','PFHAAA','HHHHxx' -549,4878,1,1,9,9,49,549,549,549,549,98,99,'DVAAAA','QFHAAA','OOOOxx' -1808,4879,0,0,8,8,8,808,1808,1808,1808,16,17,'ORAAAA','RFHAAA','VVVVxx' -7168,4880,0,0,8,8,68,168,1168,2168,7168,136,137,'SPAAAA','SFHAAA','AAAAxx' -9878,4881,0,2,8,18,78,878,1878,4878,9878,156,157,'YPAAAA','TFHAAA','HHHHxx' -233,4882,1,1,3,13,33,233,233,233,233,66,67,'ZIAAAA','UFHAAA','OOOOxx' -4262,4883,0,2,2,2,62,262,262,4262,4262,124,125,'YHAAAA','VFHAAA','VVVVxx' -7998,4884,0,2,8,18,98,998,1998,2998,7998,196,197,'QVAAAA','WFHAAA','AAAAxx' -2419,4885,1,3,9,19,19,419,419,2419,2419,38,39,'BPAAAA','XFHAAA','HHHHxx' -9960,4886,0,0,0,0,60,960,1960,4960,9960,120,121,'CTAAAA','YFHAAA','OOOOxx' -3523,4887,1,3,3,3,23,523,1523,3523,3523,46,47,'NFAAAA','ZFHAAA','VVVVxx' -5440,4888,0,0,0,0,40,440,1440,440,5440,80,81,'GBAAAA','AGHAAA','AAAAxx' -3030,4889,0,2,0,10,30,30,1030,3030,3030,60,61,'OMAAAA','BGHAAA','HHHHxx' -2745,4890,1,1,5,5,45,745,745,2745,2745,90,91,'PBAAAA','CGHAAA','OOOOxx' -7175,4891,1,3,5,15,75,175,1175,2175,7175,150,151,'ZPAAAA','DGHAAA','VVVVxx' -640,4892,0,0,0,0,40,640,640,640,640,80,81,'QYAAAA','EGHAAA','AAAAxx' -1798,4893,0,2,8,18,98,798,1798,1798,1798,196,197,'ERAAAA','FGHAAA','HHHHxx' -7499,4894,1,3,9,19,99,499,1499,2499,7499,198,199,'LCAAAA','GGHAAA','OOOOxx' -1924,4895,0,0,4,4,24,924,1924,1924,1924,48,49,'AWAAAA','HGHAAA','VVVVxx' -1327,4896,1,3,7,7,27,327,1327,1327,1327,54,55,'BZAAAA','IGHAAA','AAAAxx' -73,4897,1,1,3,13,73,73,73,73,73,146,147,'VCAAAA','JGHAAA','HHHHxx' -9558,4898,0,2,8,18,58,558,1558,4558,9558,116,117,'QDAAAA','KGHAAA','OOOOxx' -818,4899,0,2,8,18,18,818,818,818,818,36,37,'MFAAAA','LGHAAA','VVVVxx' -9916,4900,0,0,6,16,16,916,1916,4916,9916,32,33,'KRAAAA','MGHAAA','AAAAxx' -2978,4901,0,2,8,18,78,978,978,2978,2978,156,157,'OKAAAA','NGHAAA','HHHHxx' -8469,4902,1,1,9,9,69,469,469,3469,8469,138,139,'TNAAAA','OGHAAA','OOOOxx' -9845,4903,1,1,5,5,45,845,1845,4845,9845,90,91,'ROAAAA','PGHAAA','VVVVxx' -2326,4904,0,2,6,6,26,326,326,2326,2326,52,53,'MLAAAA','QGHAAA','AAAAxx' -4032,4905,0,0,2,12,32,32,32,4032,4032,64,65,'CZAAAA','RGHAAA','HHHHxx' -5604,4906,0,0,4,4,4,604,1604,604,5604,8,9,'OHAAAA','SGHAAA','OOOOxx' -9610,4907,0,2,0,10,10,610,1610,4610,9610,20,21,'QFAAAA','TGHAAA','VVVVxx' -5101,4908,1,1,1,1,1,101,1101,101,5101,2,3,'FOAAAA','UGHAAA','AAAAxx' -7246,4909,0,2,6,6,46,246,1246,2246,7246,92,93,'SSAAAA','VGHAAA','HHHHxx' -1292,4910,0,0,2,12,92,292,1292,1292,1292,184,185,'SXAAAA','WGHAAA','OOOOxx' -6235,4911,1,3,5,15,35,235,235,1235,6235,70,71,'VFAAAA','XGHAAA','VVVVxx' -1733,4912,1,1,3,13,33,733,1733,1733,1733,66,67,'ROAAAA','YGHAAA','AAAAxx' -4647,4913,1,3,7,7,47,647,647,4647,4647,94,95,'TWAAAA','ZGHAAA','HHHHxx' -258,4914,0,2,8,18,58,258,258,258,258,116,117,'YJAAAA','AHHAAA','OOOOxx' -8438,4915,0,2,8,18,38,438,438,3438,8438,76,77,'OMAAAA','BHHAAA','VVVVxx' -7869,4916,1,1,9,9,69,869,1869,2869,7869,138,139,'RQAAAA','CHHAAA','AAAAxx' -9691,4917,1,3,1,11,91,691,1691,4691,9691,182,183,'TIAAAA','DHHAAA','HHHHxx' -5422,4918,0,2,2,2,22,422,1422,422,5422,44,45,'OAAAAA','EHHAAA','OOOOxx' -9630,4919,0,2,0,10,30,630,1630,4630,9630,60,61,'KGAAAA','FHHAAA','VVVVxx' -4439,4920,1,3,9,19,39,439,439,4439,4439,78,79,'TOAAAA','GHHAAA','AAAAxx' -3140,4921,0,0,0,0,40,140,1140,3140,3140,80,81,'UQAAAA','HHHAAA','HHHHxx' -9111,4922,1,3,1,11,11,111,1111,4111,9111,22,23,'LMAAAA','IHHAAA','OOOOxx' -4606,4923,0,2,6,6,6,606,606,4606,4606,12,13,'EVAAAA','JHHAAA','VVVVxx' -8620,4924,0,0,0,0,20,620,620,3620,8620,40,41,'OTAAAA','KHHAAA','AAAAxx' -7849,4925,1,1,9,9,49,849,1849,2849,7849,98,99,'XPAAAA','LHHAAA','HHHHxx' -346,4926,0,2,6,6,46,346,346,346,346,92,93,'INAAAA','MHHAAA','OOOOxx' -9528,4927,0,0,8,8,28,528,1528,4528,9528,56,57,'MCAAAA','NHHAAA','VVVVxx' -1811,4928,1,3,1,11,11,811,1811,1811,1811,22,23,'RRAAAA','OHHAAA','AAAAxx' -6068,4929,0,0,8,8,68,68,68,1068,6068,136,137,'KZAAAA','PHHAAA','HHHHxx' -6260,4930,0,0,0,0,60,260,260,1260,6260,120,121,'UGAAAA','QHHAAA','OOOOxx' -5909,4931,1,1,9,9,9,909,1909,909,5909,18,19,'HTAAAA','RHHAAA','VVVVxx' -4518,4932,0,2,8,18,18,518,518,4518,4518,36,37,'URAAAA','SHHAAA','AAAAxx' -7530,4933,0,2,0,10,30,530,1530,2530,7530,60,61,'QDAAAA','THHAAA','HHHHxx' -3900,4934,0,0,0,0,0,900,1900,3900,3900,0,1,'AUAAAA','UHHAAA','OOOOxx' -3969,4935,1,1,9,9,69,969,1969,3969,3969,138,139,'RWAAAA','VHHAAA','VVVVxx' -8690,4936,0,2,0,10,90,690,690,3690,8690,180,181,'GWAAAA','WHHAAA','AAAAxx' -5532,4937,0,0,2,12,32,532,1532,532,5532,64,65,'UEAAAA','XHHAAA','HHHHxx' -5989,4938,1,1,9,9,89,989,1989,989,5989,178,179,'JWAAAA','YHHAAA','OOOOxx' -1870,4939,0,2,0,10,70,870,1870,1870,1870,140,141,'YTAAAA','ZHHAAA','VVVVxx' -1113,4940,1,1,3,13,13,113,1113,1113,1113,26,27,'VQAAAA','AIHAAA','AAAAxx' -5155,4941,1,3,5,15,55,155,1155,155,5155,110,111,'HQAAAA','BIHAAA','HHHHxx' -7460,4942,0,0,0,0,60,460,1460,2460,7460,120,121,'YAAAAA','CIHAAA','OOOOxx' -6217,4943,1,1,7,17,17,217,217,1217,6217,34,35,'DFAAAA','DIHAAA','VVVVxx' -8333,4944,1,1,3,13,33,333,333,3333,8333,66,67,'NIAAAA','EIHAAA','AAAAxx' -6341,4945,1,1,1,1,41,341,341,1341,6341,82,83,'XJAAAA','FIHAAA','HHHHxx' -6230,4946,0,2,0,10,30,230,230,1230,6230,60,61,'QFAAAA','GIHAAA','OOOOxx' -6902,4947,0,2,2,2,2,902,902,1902,6902,4,5,'MFAAAA','HIHAAA','VVVVxx' -670,4948,0,2,0,10,70,670,670,670,670,140,141,'UZAAAA','IIHAAA','AAAAxx' -805,4949,1,1,5,5,5,805,805,805,805,10,11,'ZEAAAA','JIHAAA','HHHHxx' -1340,4950,0,0,0,0,40,340,1340,1340,1340,80,81,'OZAAAA','KIHAAA','OOOOxx' -8649,4951,1,1,9,9,49,649,649,3649,8649,98,99,'RUAAAA','LIHAAA','VVVVxx' -3887,4952,1,3,7,7,87,887,1887,3887,3887,174,175,'NTAAAA','MIHAAA','AAAAxx' -5400,4953,0,0,0,0,0,400,1400,400,5400,0,1,'SZAAAA','NIHAAA','HHHHxx' -4354,4954,0,2,4,14,54,354,354,4354,4354,108,109,'MLAAAA','OIHAAA','OOOOxx' -950,4955,0,2,0,10,50,950,950,950,950,100,101,'OKAAAA','PIHAAA','VVVVxx' -1544,4956,0,0,4,4,44,544,1544,1544,1544,88,89,'KHAAAA','QIHAAA','AAAAxx' -3898,4957,0,2,8,18,98,898,1898,3898,3898,196,197,'YTAAAA','RIHAAA','HHHHxx' -8038,4958,0,2,8,18,38,38,38,3038,8038,76,77,'EXAAAA','SIHAAA','OOOOxx' -1095,4959,1,3,5,15,95,95,1095,1095,1095,190,191,'DQAAAA','TIHAAA','VVVVxx' -1748,4960,0,0,8,8,48,748,1748,1748,1748,96,97,'GPAAAA','UIHAAA','AAAAxx' -9154,4961,0,2,4,14,54,154,1154,4154,9154,108,109,'COAAAA','VIHAAA','HHHHxx' -2182,4962,0,2,2,2,82,182,182,2182,2182,164,165,'YFAAAA','WIHAAA','OOOOxx' -6797,4963,1,1,7,17,97,797,797,1797,6797,194,195,'LBAAAA','XIHAAA','VVVVxx' -9149,4964,1,1,9,9,49,149,1149,4149,9149,98,99,'XNAAAA','YIHAAA','AAAAxx' -7351,4965,1,3,1,11,51,351,1351,2351,7351,102,103,'TWAAAA','ZIHAAA','HHHHxx' -2820,4966,0,0,0,0,20,820,820,2820,2820,40,41,'MEAAAA','AJHAAA','OOOOxx' -9696,4967,0,0,6,16,96,696,1696,4696,9696,192,193,'YIAAAA','BJHAAA','VVVVxx' -253,4968,1,1,3,13,53,253,253,253,253,106,107,'TJAAAA','CJHAAA','AAAAxx' -3600,4969,0,0,0,0,0,600,1600,3600,3600,0,1,'MIAAAA','DJHAAA','HHHHxx' -3892,4970,0,0,2,12,92,892,1892,3892,3892,184,185,'STAAAA','EJHAAA','OOOOxx' -231,4971,1,3,1,11,31,231,231,231,231,62,63,'XIAAAA','FJHAAA','VVVVxx' -8331,4972,1,3,1,11,31,331,331,3331,8331,62,63,'LIAAAA','GJHAAA','AAAAxx' -403,4973,1,3,3,3,3,403,403,403,403,6,7,'NPAAAA','HJHAAA','HHHHxx' -8642,4974,0,2,2,2,42,642,642,3642,8642,84,85,'KUAAAA','IJHAAA','OOOOxx' -3118,4975,0,2,8,18,18,118,1118,3118,3118,36,37,'YPAAAA','JJHAAA','VVVVxx' -3835,4976,1,3,5,15,35,835,1835,3835,3835,70,71,'NRAAAA','KJHAAA','AAAAxx' -1117,4977,1,1,7,17,17,117,1117,1117,1117,34,35,'ZQAAAA','LJHAAA','HHHHxx' -7024,4978,0,0,4,4,24,24,1024,2024,7024,48,49,'EKAAAA','MJHAAA','OOOOxx' -2636,4979,0,0,6,16,36,636,636,2636,2636,72,73,'KXAAAA','NJHAAA','VVVVxx' -3778,4980,0,2,8,18,78,778,1778,3778,3778,156,157,'IPAAAA','OJHAAA','AAAAxx' -2003,4981,1,3,3,3,3,3,3,2003,2003,6,7,'BZAAAA','PJHAAA','HHHHxx' -5717,4982,1,1,7,17,17,717,1717,717,5717,34,35,'XLAAAA','QJHAAA','OOOOxx' -4869,4983,1,1,9,9,69,869,869,4869,4869,138,139,'HFAAAA','RJHAAA','VVVVxx' -8921,4984,1,1,1,1,21,921,921,3921,8921,42,43,'DFAAAA','SJHAAA','AAAAxx' -888,4985,0,0,8,8,88,888,888,888,888,176,177,'EIAAAA','TJHAAA','HHHHxx' -7599,4986,1,3,9,19,99,599,1599,2599,7599,198,199,'HGAAAA','UJHAAA','OOOOxx' -8621,4987,1,1,1,1,21,621,621,3621,8621,42,43,'PTAAAA','VJHAAA','VVVVxx' -811,4988,1,3,1,11,11,811,811,811,811,22,23,'FFAAAA','WJHAAA','AAAAxx' -9147,4989,1,3,7,7,47,147,1147,4147,9147,94,95,'VNAAAA','XJHAAA','HHHHxx' -1413,4990,1,1,3,13,13,413,1413,1413,1413,26,27,'JCAAAA','YJHAAA','OOOOxx' -5232,4991,0,0,2,12,32,232,1232,232,5232,64,65,'GTAAAA','ZJHAAA','VVVVxx' -5912,4992,0,0,2,12,12,912,1912,912,5912,24,25,'KTAAAA','AKHAAA','AAAAxx' -3418,4993,0,2,8,18,18,418,1418,3418,3418,36,37,'MBAAAA','BKHAAA','HHHHxx' -3912,4994,0,0,2,12,12,912,1912,3912,3912,24,25,'MUAAAA','CKHAAA','OOOOxx' -9576,4995,0,0,6,16,76,576,1576,4576,9576,152,153,'IEAAAA','DKHAAA','VVVVxx' -4225,4996,1,1,5,5,25,225,225,4225,4225,50,51,'NGAAAA','EKHAAA','AAAAxx' -8222,4997,0,2,2,2,22,222,222,3222,8222,44,45,'GEAAAA','FKHAAA','HHHHxx' -7013,4998,1,1,3,13,13,13,1013,2013,7013,26,27,'TJAAAA','GKHAAA','OOOOxx' -7037,4999,1,1,7,17,37,37,1037,2037,7037,74,75,'RKAAAA','HKHAAA','VVVVxx' -1205,5000,1,1,5,5,5,205,1205,1205,1205,10,11,'JUAAAA','IKHAAA','AAAAxx' -8114,5001,0,2,4,14,14,114,114,3114,8114,28,29,'CAAAAA','JKHAAA','HHHHxx' -6585,5002,1,1,5,5,85,585,585,1585,6585,170,171,'HTAAAA','KKHAAA','OOOOxx' -155,5003,1,3,5,15,55,155,155,155,155,110,111,'ZFAAAA','LKHAAA','VVVVxx' -2841,5004,1,1,1,1,41,841,841,2841,2841,82,83,'HFAAAA','MKHAAA','AAAAxx' -1996,5005,0,0,6,16,96,996,1996,1996,1996,192,193,'UYAAAA','NKHAAA','HHHHxx' -4948,5006,0,0,8,8,48,948,948,4948,4948,96,97,'IIAAAA','OKHAAA','OOOOxx' -3304,5007,0,0,4,4,4,304,1304,3304,3304,8,9,'CXAAAA','PKHAAA','VVVVxx' -5684,5008,0,0,4,4,84,684,1684,684,5684,168,169,'QKAAAA','QKHAAA','AAAAxx' -6962,5009,0,2,2,2,62,962,962,1962,6962,124,125,'UHAAAA','RKHAAA','HHHHxx' -8691,5010,1,3,1,11,91,691,691,3691,8691,182,183,'HWAAAA','SKHAAA','OOOOxx' -8501,5011,1,1,1,1,1,501,501,3501,8501,2,3,'ZOAAAA','TKHAAA','VVVVxx' -4783,5012,1,3,3,3,83,783,783,4783,4783,166,167,'ZBAAAA','UKHAAA','AAAAxx' -3762,5013,0,2,2,2,62,762,1762,3762,3762,124,125,'SOAAAA','VKHAAA','HHHHxx' -4534,5014,0,2,4,14,34,534,534,4534,4534,68,69,'KSAAAA','WKHAAA','OOOOxx' -4999,5015,1,3,9,19,99,999,999,4999,4999,198,199,'HKAAAA','XKHAAA','VVVVxx' -4618,5016,0,2,8,18,18,618,618,4618,4618,36,37,'QVAAAA','YKHAAA','AAAAxx' -4220,5017,0,0,0,0,20,220,220,4220,4220,40,41,'IGAAAA','ZKHAAA','HHHHxx' -3384,5018,0,0,4,4,84,384,1384,3384,3384,168,169,'EAAAAA','ALHAAA','OOOOxx' -3036,5019,0,0,6,16,36,36,1036,3036,3036,72,73,'UMAAAA','BLHAAA','VVVVxx' -545,5020,1,1,5,5,45,545,545,545,545,90,91,'ZUAAAA','CLHAAA','AAAAxx' -9946,5021,0,2,6,6,46,946,1946,4946,9946,92,93,'OSAAAA','DLHAAA','HHHHxx' -1985,5022,1,1,5,5,85,985,1985,1985,1985,170,171,'JYAAAA','ELHAAA','OOOOxx' -2310,5023,0,2,0,10,10,310,310,2310,2310,20,21,'WKAAAA','FLHAAA','VVVVxx' -6563,5024,1,3,3,3,63,563,563,1563,6563,126,127,'LSAAAA','GLHAAA','AAAAxx' -4886,5025,0,2,6,6,86,886,886,4886,4886,172,173,'YFAAAA','HLHAAA','HHHHxx' -9359,5026,1,3,9,19,59,359,1359,4359,9359,118,119,'ZVAAAA','ILHAAA','OOOOxx' -400,5027,0,0,0,0,0,400,400,400,400,0,1,'KPAAAA','JLHAAA','VVVVxx' -9742,5028,0,2,2,2,42,742,1742,4742,9742,84,85,'SKAAAA','KLHAAA','AAAAxx' -6736,5029,0,0,6,16,36,736,736,1736,6736,72,73,'CZAAAA','LLHAAA','HHHHxx' -8166,5030,0,2,6,6,66,166,166,3166,8166,132,133,'CCAAAA','MLHAAA','OOOOxx' -861,5031,1,1,1,1,61,861,861,861,861,122,123,'DHAAAA','NLHAAA','VVVVxx' -7492,5032,0,0,2,12,92,492,1492,2492,7492,184,185,'ECAAAA','OLHAAA','AAAAxx' -1155,5033,1,3,5,15,55,155,1155,1155,1155,110,111,'LSAAAA','PLHAAA','HHHHxx' -9769,5034,1,1,9,9,69,769,1769,4769,9769,138,139,'TLAAAA','QLHAAA','OOOOxx' -6843,5035,1,3,3,3,43,843,843,1843,6843,86,87,'FDAAAA','RLHAAA','VVVVxx' -5625,5036,1,1,5,5,25,625,1625,625,5625,50,51,'JIAAAA','SLHAAA','AAAAxx' -1910,5037,0,2,0,10,10,910,1910,1910,1910,20,21,'MVAAAA','TLHAAA','HHHHxx' -9796,5038,0,0,6,16,96,796,1796,4796,9796,192,193,'UMAAAA','ULHAAA','OOOOxx' -6950,5039,0,2,0,10,50,950,950,1950,6950,100,101,'IHAAAA','VLHAAA','VVVVxx' -3084,5040,0,0,4,4,84,84,1084,3084,3084,168,169,'QOAAAA','WLHAAA','AAAAxx' -2959,5041,1,3,9,19,59,959,959,2959,2959,118,119,'VJAAAA','XLHAAA','HHHHxx' -2093,5042,1,1,3,13,93,93,93,2093,2093,186,187,'NCAAAA','YLHAAA','OOOOxx' -2738,5043,0,2,8,18,38,738,738,2738,2738,76,77,'IBAAAA','ZLHAAA','VVVVxx' -6406,5044,0,2,6,6,6,406,406,1406,6406,12,13,'KMAAAA','AMHAAA','AAAAxx' -9082,5045,0,2,2,2,82,82,1082,4082,9082,164,165,'ILAAAA','BMHAAA','HHHHxx' -8568,5046,0,0,8,8,68,568,568,3568,8568,136,137,'ORAAAA','CMHAAA','OOOOxx' -3566,5047,0,2,6,6,66,566,1566,3566,3566,132,133,'EHAAAA','DMHAAA','VVVVxx' -3016,5048,0,0,6,16,16,16,1016,3016,3016,32,33,'AMAAAA','EMHAAA','AAAAxx' -1207,5049,1,3,7,7,7,207,1207,1207,1207,14,15,'LUAAAA','FMHAAA','HHHHxx' -4045,5050,1,1,5,5,45,45,45,4045,4045,90,91,'PZAAAA','GMHAAA','OOOOxx' -4173,5051,1,1,3,13,73,173,173,4173,4173,146,147,'NEAAAA','HMHAAA','VVVVxx' -3939,5052,1,3,9,19,39,939,1939,3939,3939,78,79,'NVAAAA','IMHAAA','AAAAxx' -9683,5053,1,3,3,3,83,683,1683,4683,9683,166,167,'LIAAAA','JMHAAA','HHHHxx' -1684,5054,0,0,4,4,84,684,1684,1684,1684,168,169,'UMAAAA','KMHAAA','OOOOxx' -9271,5055,1,3,1,11,71,271,1271,4271,9271,142,143,'PSAAAA','LMHAAA','VVVVxx' -9317,5056,1,1,7,17,17,317,1317,4317,9317,34,35,'JUAAAA','MMHAAA','AAAAxx' -5793,5057,1,1,3,13,93,793,1793,793,5793,186,187,'VOAAAA','NMHAAA','HHHHxx' -352,5058,0,0,2,12,52,352,352,352,352,104,105,'ONAAAA','OMHAAA','OOOOxx' -7328,5059,0,0,8,8,28,328,1328,2328,7328,56,57,'WVAAAA','PMHAAA','VVVVxx' -4582,5060,0,2,2,2,82,582,582,4582,4582,164,165,'GUAAAA','QMHAAA','AAAAxx' -7413,5061,1,1,3,13,13,413,1413,2413,7413,26,27,'DZAAAA','RMHAAA','HHHHxx' -6772,5062,0,0,2,12,72,772,772,1772,6772,144,145,'MAAAAA','SMHAAA','OOOOxx' -4973,5063,1,1,3,13,73,973,973,4973,4973,146,147,'HJAAAA','TMHAAA','VVVVxx' -7480,5064,0,0,0,0,80,480,1480,2480,7480,160,161,'SBAAAA','UMHAAA','AAAAxx' -5555,5065,1,3,5,15,55,555,1555,555,5555,110,111,'RFAAAA','VMHAAA','HHHHxx' -4227,5066,1,3,7,7,27,227,227,4227,4227,54,55,'PGAAAA','WMHAAA','OOOOxx' -4153,5067,1,1,3,13,53,153,153,4153,4153,106,107,'TDAAAA','XMHAAA','VVVVxx' -4601,5068,1,1,1,1,1,601,601,4601,4601,2,3,'ZUAAAA','YMHAAA','AAAAxx' -3782,5069,0,2,2,2,82,782,1782,3782,3782,164,165,'MPAAAA','ZMHAAA','HHHHxx' -3872,5070,0,0,2,12,72,872,1872,3872,3872,144,145,'YSAAAA','ANHAAA','OOOOxx' -893,5071,1,1,3,13,93,893,893,893,893,186,187,'JIAAAA','BNHAAA','VVVVxx' -2430,5072,0,2,0,10,30,430,430,2430,2430,60,61,'MPAAAA','CNHAAA','AAAAxx' -2591,5073,1,3,1,11,91,591,591,2591,2591,182,183,'RVAAAA','DNHAAA','HHHHxx' -264,5074,0,0,4,4,64,264,264,264,264,128,129,'EKAAAA','ENHAAA','OOOOxx' -6238,5075,0,2,8,18,38,238,238,1238,6238,76,77,'YFAAAA','FNHAAA','VVVVxx' -633,5076,1,1,3,13,33,633,633,633,633,66,67,'JYAAAA','GNHAAA','AAAAxx' -1029,5077,1,1,9,9,29,29,1029,1029,1029,58,59,'PNAAAA','HNHAAA','HHHHxx' -5934,5078,0,2,4,14,34,934,1934,934,5934,68,69,'GUAAAA','INHAAA','OOOOxx' -8694,5079,0,2,4,14,94,694,694,3694,8694,188,189,'KWAAAA','JNHAAA','VVVVxx' -7401,5080,1,1,1,1,1,401,1401,2401,7401,2,3,'RYAAAA','KNHAAA','AAAAxx' -1165,5081,1,1,5,5,65,165,1165,1165,1165,130,131,'VSAAAA','LNHAAA','HHHHxx' -9438,5082,0,2,8,18,38,438,1438,4438,9438,76,77,'AZAAAA','MNHAAA','OOOOxx' -4790,5083,0,2,0,10,90,790,790,4790,4790,180,181,'GCAAAA','NNHAAA','VVVVxx' -4531,5084,1,3,1,11,31,531,531,4531,4531,62,63,'HSAAAA','ONHAAA','AAAAxx' -6099,5085,1,3,9,19,99,99,99,1099,6099,198,199,'PAAAAA','PNHAAA','HHHHxx' -8236,5086,0,0,6,16,36,236,236,3236,8236,72,73,'UEAAAA','QNHAAA','OOOOxx' -8551,5087,1,3,1,11,51,551,551,3551,8551,102,103,'XQAAAA','RNHAAA','VVVVxx' -3128,5088,0,0,8,8,28,128,1128,3128,3128,56,57,'IQAAAA','SNHAAA','AAAAxx' -3504,5089,0,0,4,4,4,504,1504,3504,3504,8,9,'UEAAAA','TNHAAA','HHHHxx' -9071,5090,1,3,1,11,71,71,1071,4071,9071,142,143,'XKAAAA','UNHAAA','OOOOxx' -5930,5091,0,2,0,10,30,930,1930,930,5930,60,61,'CUAAAA','VNHAAA','VVVVxx' -6825,5092,1,1,5,5,25,825,825,1825,6825,50,51,'NCAAAA','WNHAAA','AAAAxx' -2218,5093,0,2,8,18,18,218,218,2218,2218,36,37,'IHAAAA','XNHAAA','HHHHxx' -3604,5094,0,0,4,4,4,604,1604,3604,3604,8,9,'QIAAAA','YNHAAA','OOOOxx' -5761,5095,1,1,1,1,61,761,1761,761,5761,122,123,'PNAAAA','ZNHAAA','VVVVxx' -5414,5096,0,2,4,14,14,414,1414,414,5414,28,29,'GAAAAA','AOHAAA','AAAAxx' -5892,5097,0,0,2,12,92,892,1892,892,5892,184,185,'QSAAAA','BOHAAA','HHHHxx' -4080,5098,0,0,0,0,80,80,80,4080,4080,160,161,'YAAAAA','COHAAA','OOOOxx' -8018,5099,0,2,8,18,18,18,18,3018,8018,36,37,'KWAAAA','DOHAAA','VVVVxx' -1757,5100,1,1,7,17,57,757,1757,1757,1757,114,115,'PPAAAA','EOHAAA','AAAAxx' -5854,5101,0,2,4,14,54,854,1854,854,5854,108,109,'ERAAAA','FOHAAA','HHHHxx' -1335,5102,1,3,5,15,35,335,1335,1335,1335,70,71,'JZAAAA','GOHAAA','OOOOxx' -3811,5103,1,3,1,11,11,811,1811,3811,3811,22,23,'PQAAAA','HOHAAA','VVVVxx' -9917,5104,1,1,7,17,17,917,1917,4917,9917,34,35,'LRAAAA','IOHAAA','AAAAxx' -5947,5105,1,3,7,7,47,947,1947,947,5947,94,95,'TUAAAA','JOHAAA','HHHHxx' -7263,5106,1,3,3,3,63,263,1263,2263,7263,126,127,'JTAAAA','KOHAAA','OOOOxx' -1730,5107,0,2,0,10,30,730,1730,1730,1730,60,61,'OOAAAA','LOHAAA','VVVVxx' -5747,5108,1,3,7,7,47,747,1747,747,5747,94,95,'BNAAAA','MOHAAA','AAAAxx' -3876,5109,0,0,6,16,76,876,1876,3876,3876,152,153,'CTAAAA','NOHAAA','HHHHxx' -2762,5110,0,2,2,2,62,762,762,2762,2762,124,125,'GCAAAA','OOHAAA','OOOOxx' -7613,5111,1,1,3,13,13,613,1613,2613,7613,26,27,'VGAAAA','POHAAA','VVVVxx' -152,5112,0,0,2,12,52,152,152,152,152,104,105,'WFAAAA','QOHAAA','AAAAxx' -3941,5113,1,1,1,1,41,941,1941,3941,3941,82,83,'PVAAAA','ROHAAA','HHHHxx' -5614,5114,0,2,4,14,14,614,1614,614,5614,28,29,'YHAAAA','SOHAAA','OOOOxx' -9279,5115,1,3,9,19,79,279,1279,4279,9279,158,159,'XSAAAA','TOHAAA','VVVVxx' -3048,5116,0,0,8,8,48,48,1048,3048,3048,96,97,'GNAAAA','UOHAAA','AAAAxx' -6152,5117,0,0,2,12,52,152,152,1152,6152,104,105,'QCAAAA','VOHAAA','HHHHxx' -5481,5118,1,1,1,1,81,481,1481,481,5481,162,163,'VCAAAA','WOHAAA','OOOOxx' -4675,5119,1,3,5,15,75,675,675,4675,4675,150,151,'VXAAAA','XOHAAA','VVVVxx' -3334,5120,0,2,4,14,34,334,1334,3334,3334,68,69,'GYAAAA','YOHAAA','AAAAxx' -4691,5121,1,3,1,11,91,691,691,4691,4691,182,183,'LYAAAA','ZOHAAA','HHHHxx' -803,5122,1,3,3,3,3,803,803,803,803,6,7,'XEAAAA','APHAAA','OOOOxx' -5409,5123,1,1,9,9,9,409,1409,409,5409,18,19,'BAAAAA','BPHAAA','VVVVxx' -1054,5124,0,2,4,14,54,54,1054,1054,1054,108,109,'OOAAAA','CPHAAA','AAAAxx' -103,5125,1,3,3,3,3,103,103,103,103,6,7,'ZDAAAA','DPHAAA','HHHHxx' -8565,5126,1,1,5,5,65,565,565,3565,8565,130,131,'LRAAAA','EPHAAA','OOOOxx' -4666,5127,0,2,6,6,66,666,666,4666,4666,132,133,'MXAAAA','FPHAAA','VVVVxx' -6634,5128,0,2,4,14,34,634,634,1634,6634,68,69,'EVAAAA','GPHAAA','AAAAxx' -5538,5129,0,2,8,18,38,538,1538,538,5538,76,77,'AFAAAA','HPHAAA','HHHHxx' -3789,5130,1,1,9,9,89,789,1789,3789,3789,178,179,'TPAAAA','IPHAAA','OOOOxx' -4641,5131,1,1,1,1,41,641,641,4641,4641,82,83,'NWAAAA','JPHAAA','VVVVxx' -2458,5132,0,2,8,18,58,458,458,2458,2458,116,117,'OQAAAA','KPHAAA','AAAAxx' -5667,5133,1,3,7,7,67,667,1667,667,5667,134,135,'ZJAAAA','LPHAAA','HHHHxx' -6524,5134,0,0,4,4,24,524,524,1524,6524,48,49,'YQAAAA','MPHAAA','OOOOxx' -9179,5135,1,3,9,19,79,179,1179,4179,9179,158,159,'BPAAAA','NPHAAA','VVVVxx' -6358,5136,0,2,8,18,58,358,358,1358,6358,116,117,'OKAAAA','OPHAAA','AAAAxx' -6668,5137,0,0,8,8,68,668,668,1668,6668,136,137,'MWAAAA','PPHAAA','HHHHxx' -6414,5138,0,2,4,14,14,414,414,1414,6414,28,29,'SMAAAA','QPHAAA','OOOOxx' -2813,5139,1,1,3,13,13,813,813,2813,2813,26,27,'FEAAAA','RPHAAA','VVVVxx' -8927,5140,1,3,7,7,27,927,927,3927,8927,54,55,'JFAAAA','SPHAAA','AAAAxx' -8695,5141,1,3,5,15,95,695,695,3695,8695,190,191,'LWAAAA','TPHAAA','HHHHxx' -363,5142,1,3,3,3,63,363,363,363,363,126,127,'ZNAAAA','UPHAAA','OOOOxx' -9966,5143,0,2,6,6,66,966,1966,4966,9966,132,133,'ITAAAA','VPHAAA','VVVVxx' -1323,5144,1,3,3,3,23,323,1323,1323,1323,46,47,'XYAAAA','WPHAAA','AAAAxx' -8211,5145,1,3,1,11,11,211,211,3211,8211,22,23,'VDAAAA','XPHAAA','HHHHxx' -4375,5146,1,3,5,15,75,375,375,4375,4375,150,151,'HMAAAA','YPHAAA','OOOOxx' -3257,5147,1,1,7,17,57,257,1257,3257,3257,114,115,'HVAAAA','ZPHAAA','VVVVxx' -6239,5148,1,3,9,19,39,239,239,1239,6239,78,79,'ZFAAAA','AQHAAA','AAAAxx' -3602,5149,0,2,2,2,2,602,1602,3602,3602,4,5,'OIAAAA','BQHAAA','HHHHxx' -9830,5150,0,2,0,10,30,830,1830,4830,9830,60,61,'COAAAA','CQHAAA','OOOOxx' -7826,5151,0,2,6,6,26,826,1826,2826,7826,52,53,'APAAAA','DQHAAA','VVVVxx' -2108,5152,0,0,8,8,8,108,108,2108,2108,16,17,'CDAAAA','EQHAAA','AAAAxx' -7245,5153,1,1,5,5,45,245,1245,2245,7245,90,91,'RSAAAA','FQHAAA','HHHHxx' -8330,5154,0,2,0,10,30,330,330,3330,8330,60,61,'KIAAAA','GQHAAA','OOOOxx' -7441,5155,1,1,1,1,41,441,1441,2441,7441,82,83,'FAAAAA','HQHAAA','VVVVxx' -9848,5156,0,0,8,8,48,848,1848,4848,9848,96,97,'UOAAAA','IQHAAA','AAAAxx' -1226,5157,0,2,6,6,26,226,1226,1226,1226,52,53,'EVAAAA','JQHAAA','HHHHxx' -414,5158,0,2,4,14,14,414,414,414,414,28,29,'YPAAAA','KQHAAA','OOOOxx' -1273,5159,1,1,3,13,73,273,1273,1273,1273,146,147,'ZWAAAA','LQHAAA','VVVVxx' -9866,5160,0,2,6,6,66,866,1866,4866,9866,132,133,'MPAAAA','MQHAAA','AAAAxx' -4633,5161,1,1,3,13,33,633,633,4633,4633,66,67,'FWAAAA','NQHAAA','HHHHxx' -8727,5162,1,3,7,7,27,727,727,3727,8727,54,55,'RXAAAA','OQHAAA','OOOOxx' -5308,5163,0,0,8,8,8,308,1308,308,5308,16,17,'EWAAAA','PQHAAA','VVVVxx' -1395,5164,1,3,5,15,95,395,1395,1395,1395,190,191,'RBAAAA','QQHAAA','AAAAxx' -1825,5165,1,1,5,5,25,825,1825,1825,1825,50,51,'FSAAAA','RQHAAA','HHHHxx' -7606,5166,0,2,6,6,6,606,1606,2606,7606,12,13,'OGAAAA','SQHAAA','OOOOxx' -9390,5167,0,2,0,10,90,390,1390,4390,9390,180,181,'EXAAAA','TQHAAA','VVVVxx' -2376,5168,0,0,6,16,76,376,376,2376,2376,152,153,'KNAAAA','UQHAAA','AAAAxx' -2377,5169,1,1,7,17,77,377,377,2377,2377,154,155,'LNAAAA','VQHAAA','HHHHxx' -5346,5170,0,2,6,6,46,346,1346,346,5346,92,93,'QXAAAA','WQHAAA','OOOOxx' -4140,5171,0,0,0,0,40,140,140,4140,4140,80,81,'GDAAAA','XQHAAA','VVVVxx' -6032,5172,0,0,2,12,32,32,32,1032,6032,64,65,'AYAAAA','YQHAAA','AAAAxx' -9453,5173,1,1,3,13,53,453,1453,4453,9453,106,107,'PZAAAA','ZQHAAA','HHHHxx' -9297,5174,1,1,7,17,97,297,1297,4297,9297,194,195,'PTAAAA','ARHAAA','OOOOxx' -6455,5175,1,3,5,15,55,455,455,1455,6455,110,111,'HOAAAA','BRHAAA','VVVVxx' -4458,5176,0,2,8,18,58,458,458,4458,4458,116,117,'MPAAAA','CRHAAA','AAAAxx' -9516,5177,0,0,6,16,16,516,1516,4516,9516,32,33,'ACAAAA','DRHAAA','HHHHxx' -6211,5178,1,3,1,11,11,211,211,1211,6211,22,23,'XEAAAA','ERHAAA','OOOOxx' -526,5179,0,2,6,6,26,526,526,526,526,52,53,'GUAAAA','FRHAAA','VVVVxx' -3570,5180,0,2,0,10,70,570,1570,3570,3570,140,141,'IHAAAA','GRHAAA','AAAAxx' -4885,5181,1,1,5,5,85,885,885,4885,4885,170,171,'XFAAAA','HRHAAA','HHHHxx' -6390,5182,0,2,0,10,90,390,390,1390,6390,180,181,'ULAAAA','IRHAAA','OOOOxx' -1606,5183,0,2,6,6,6,606,1606,1606,1606,12,13,'UJAAAA','JRHAAA','VVVVxx' -7850,5184,0,2,0,10,50,850,1850,2850,7850,100,101,'YPAAAA','KRHAAA','AAAAxx' -3315,5185,1,3,5,15,15,315,1315,3315,3315,30,31,'NXAAAA','LRHAAA','HHHHxx' -8322,5186,0,2,2,2,22,322,322,3322,8322,44,45,'CIAAAA','MRHAAA','OOOOxx' -3703,5187,1,3,3,3,3,703,1703,3703,3703,6,7,'LMAAAA','NRHAAA','VVVVxx' -9489,5188,1,1,9,9,89,489,1489,4489,9489,178,179,'ZAAAAA','ORHAAA','AAAAxx' -6104,5189,0,0,4,4,4,104,104,1104,6104,8,9,'UAAAAA','PRHAAA','HHHHxx' -3067,5190,1,3,7,7,67,67,1067,3067,3067,134,135,'ZNAAAA','QRHAAA','OOOOxx' -2521,5191,1,1,1,1,21,521,521,2521,2521,42,43,'ZSAAAA','RRHAAA','VVVVxx' -2581,5192,1,1,1,1,81,581,581,2581,2581,162,163,'HVAAAA','SRHAAA','AAAAxx' -595,5193,1,3,5,15,95,595,595,595,595,190,191,'XWAAAA','TRHAAA','HHHHxx' -8291,5194,1,3,1,11,91,291,291,3291,8291,182,183,'XGAAAA','URHAAA','OOOOxx' -1727,5195,1,3,7,7,27,727,1727,1727,1727,54,55,'LOAAAA','VRHAAA','VVVVxx' -6847,5196,1,3,7,7,47,847,847,1847,6847,94,95,'JDAAAA','WRHAAA','AAAAxx' -7494,5197,0,2,4,14,94,494,1494,2494,7494,188,189,'GCAAAA','XRHAAA','HHHHxx' -7093,5198,1,1,3,13,93,93,1093,2093,7093,186,187,'VMAAAA','YRHAAA','OOOOxx' -7357,5199,1,1,7,17,57,357,1357,2357,7357,114,115,'ZWAAAA','ZRHAAA','VVVVxx' -620,5200,0,0,0,0,20,620,620,620,620,40,41,'WXAAAA','ASHAAA','AAAAxx' -2460,5201,0,0,0,0,60,460,460,2460,2460,120,121,'QQAAAA','BSHAAA','HHHHxx' -1598,5202,0,2,8,18,98,598,1598,1598,1598,196,197,'MJAAAA','CSHAAA','OOOOxx' -4112,5203,0,0,2,12,12,112,112,4112,4112,24,25,'ECAAAA','DSHAAA','VVVVxx' -2956,5204,0,0,6,16,56,956,956,2956,2956,112,113,'SJAAAA','ESHAAA','AAAAxx' -3193,5205,1,1,3,13,93,193,1193,3193,3193,186,187,'VSAAAA','FSHAAA','HHHHxx' -6356,5206,0,0,6,16,56,356,356,1356,6356,112,113,'MKAAAA','GSHAAA','OOOOxx' -730,5207,0,2,0,10,30,730,730,730,730,60,61,'CCAAAA','HSHAAA','VVVVxx' -8826,5208,0,2,6,6,26,826,826,3826,8826,52,53,'MBAAAA','ISHAAA','AAAAxx' -9036,5209,0,0,6,16,36,36,1036,4036,9036,72,73,'OJAAAA','JSHAAA','HHHHxx' -2085,5210,1,1,5,5,85,85,85,2085,2085,170,171,'FCAAAA','KSHAAA','OOOOxx' -9007,5211,1,3,7,7,7,7,1007,4007,9007,14,15,'LIAAAA','LSHAAA','VVVVxx' -6047,5212,1,3,7,7,47,47,47,1047,6047,94,95,'PYAAAA','MSHAAA','AAAAxx' -3953,5213,1,1,3,13,53,953,1953,3953,3953,106,107,'BWAAAA','NSHAAA','HHHHxx' -1214,5214,0,2,4,14,14,214,1214,1214,1214,28,29,'SUAAAA','OSHAAA','OOOOxx' -4814,5215,0,2,4,14,14,814,814,4814,4814,28,29,'EDAAAA','PSHAAA','VVVVxx' -5738,5216,0,2,8,18,38,738,1738,738,5738,76,77,'SMAAAA','QSHAAA','AAAAxx' -7176,5217,0,0,6,16,76,176,1176,2176,7176,152,153,'AQAAAA','RSHAAA','HHHHxx' -3609,5218,1,1,9,9,9,609,1609,3609,3609,18,19,'VIAAAA','SSHAAA','OOOOxx' -592,5219,0,0,2,12,92,592,592,592,592,184,185,'UWAAAA','TSHAAA','VVVVxx' -9391,5220,1,3,1,11,91,391,1391,4391,9391,182,183,'FXAAAA','USHAAA','AAAAxx' -5345,5221,1,1,5,5,45,345,1345,345,5345,90,91,'PXAAAA','VSHAAA','HHHHxx' -1171,5222,1,3,1,11,71,171,1171,1171,1171,142,143,'BTAAAA','WSHAAA','OOOOxx' -7238,5223,0,2,8,18,38,238,1238,2238,7238,76,77,'KSAAAA','XSHAAA','VVVVxx' -7561,5224,1,1,1,1,61,561,1561,2561,7561,122,123,'VEAAAA','YSHAAA','AAAAxx' -5876,5225,0,0,6,16,76,876,1876,876,5876,152,153,'ASAAAA','ZSHAAA','HHHHxx' -6611,5226,1,3,1,11,11,611,611,1611,6611,22,23,'HUAAAA','ATHAAA','OOOOxx' -7300,5227,0,0,0,0,0,300,1300,2300,7300,0,1,'UUAAAA','BTHAAA','VVVVxx' -1506,5228,0,2,6,6,6,506,1506,1506,1506,12,13,'YFAAAA','CTHAAA','AAAAxx' -1153,5229,1,1,3,13,53,153,1153,1153,1153,106,107,'JSAAAA','DTHAAA','HHHHxx' -3831,5230,1,3,1,11,31,831,1831,3831,3831,62,63,'JRAAAA','ETHAAA','OOOOxx' -9255,5231,1,3,5,15,55,255,1255,4255,9255,110,111,'ZRAAAA','FTHAAA','VVVVxx' -1841,5232,1,1,1,1,41,841,1841,1841,1841,82,83,'VSAAAA','GTHAAA','AAAAxx' -5075,5233,1,3,5,15,75,75,1075,75,5075,150,151,'FNAAAA','HTHAAA','HHHHxx' -101,5234,1,1,1,1,1,101,101,101,101,2,3,'XDAAAA','ITHAAA','OOOOxx' -2627,5235,1,3,7,7,27,627,627,2627,2627,54,55,'BXAAAA','JTHAAA','VVVVxx' -7078,5236,0,2,8,18,78,78,1078,2078,7078,156,157,'GMAAAA','KTHAAA','AAAAxx' -2850,5237,0,2,0,10,50,850,850,2850,2850,100,101,'QFAAAA','LTHAAA','HHHHxx' -8703,5238,1,3,3,3,3,703,703,3703,8703,6,7,'TWAAAA','MTHAAA','OOOOxx' -4101,5239,1,1,1,1,1,101,101,4101,4101,2,3,'TBAAAA','NTHAAA','VVVVxx' -318,5240,0,2,8,18,18,318,318,318,318,36,37,'GMAAAA','OTHAAA','AAAAxx' -6452,5241,0,0,2,12,52,452,452,1452,6452,104,105,'EOAAAA','PTHAAA','HHHHxx' -5558,5242,0,2,8,18,58,558,1558,558,5558,116,117,'UFAAAA','QTHAAA','OOOOxx' -3127,5243,1,3,7,7,27,127,1127,3127,3127,54,55,'HQAAAA','RTHAAA','VVVVxx' -535,5244,1,3,5,15,35,535,535,535,535,70,71,'PUAAAA','STHAAA','AAAAxx' -270,5245,0,2,0,10,70,270,270,270,270,140,141,'KKAAAA','TTHAAA','HHHHxx' -4038,5246,0,2,8,18,38,38,38,4038,4038,76,77,'IZAAAA','UTHAAA','OOOOxx' -3404,5247,0,0,4,4,4,404,1404,3404,3404,8,9,'YAAAAA','VTHAAA','VVVVxx' -2374,5248,0,2,4,14,74,374,374,2374,2374,148,149,'INAAAA','WTHAAA','AAAAxx' -6446,5249,0,2,6,6,46,446,446,1446,6446,92,93,'YNAAAA','XTHAAA','HHHHxx' -7758,5250,0,2,8,18,58,758,1758,2758,7758,116,117,'KMAAAA','YTHAAA','OOOOxx' -356,5251,0,0,6,16,56,356,356,356,356,112,113,'SNAAAA','ZTHAAA','VVVVxx' -9197,5252,1,1,7,17,97,197,1197,4197,9197,194,195,'TPAAAA','AUHAAA','AAAAxx' -9765,5253,1,1,5,5,65,765,1765,4765,9765,130,131,'PLAAAA','BUHAAA','HHHHxx' -4974,5254,0,2,4,14,74,974,974,4974,4974,148,149,'IJAAAA','CUHAAA','OOOOxx' -442,5255,0,2,2,2,42,442,442,442,442,84,85,'ARAAAA','DUHAAA','VVVVxx' -4349,5256,1,1,9,9,49,349,349,4349,4349,98,99,'HLAAAA','EUHAAA','AAAAxx' -6119,5257,1,3,9,19,19,119,119,1119,6119,38,39,'JBAAAA','FUHAAA','HHHHxx' -7574,5258,0,2,4,14,74,574,1574,2574,7574,148,149,'IFAAAA','GUHAAA','OOOOxx' -4445,5259,1,1,5,5,45,445,445,4445,4445,90,91,'ZOAAAA','HUHAAA','VVVVxx' -940,5260,0,0,0,0,40,940,940,940,940,80,81,'EKAAAA','IUHAAA','AAAAxx' -1875,5261,1,3,5,15,75,875,1875,1875,1875,150,151,'DUAAAA','JUHAAA','HHHHxx' -5951,5262,1,3,1,11,51,951,1951,951,5951,102,103,'XUAAAA','KUHAAA','OOOOxx' -9132,5263,0,0,2,12,32,132,1132,4132,9132,64,65,'GNAAAA','LUHAAA','VVVVxx' -6913,5264,1,1,3,13,13,913,913,1913,6913,26,27,'XFAAAA','MUHAAA','AAAAxx' -3308,5265,0,0,8,8,8,308,1308,3308,3308,16,17,'GXAAAA','NUHAAA','HHHHxx' -7553,5266,1,1,3,13,53,553,1553,2553,7553,106,107,'NEAAAA','OUHAAA','OOOOxx' -2138,5267,0,2,8,18,38,138,138,2138,2138,76,77,'GEAAAA','PUHAAA','VVVVxx' -6252,5268,0,0,2,12,52,252,252,1252,6252,104,105,'MGAAAA','QUHAAA','AAAAxx' -2171,5269,1,3,1,11,71,171,171,2171,2171,142,143,'NFAAAA','RUHAAA','HHHHxx' -4159,5270,1,3,9,19,59,159,159,4159,4159,118,119,'ZDAAAA','SUHAAA','OOOOxx' -2401,5271,1,1,1,1,1,401,401,2401,2401,2,3,'JOAAAA','TUHAAA','VVVVxx' -6553,5272,1,1,3,13,53,553,553,1553,6553,106,107,'BSAAAA','UUHAAA','AAAAxx' -5217,5273,1,1,7,17,17,217,1217,217,5217,34,35,'RSAAAA','VUHAAA','HHHHxx' -1405,5274,1,1,5,5,5,405,1405,1405,1405,10,11,'BCAAAA','WUHAAA','OOOOxx' -1494,5275,0,2,4,14,94,494,1494,1494,1494,188,189,'MFAAAA','XUHAAA','VVVVxx' -5553,5276,1,1,3,13,53,553,1553,553,5553,106,107,'PFAAAA','YUHAAA','AAAAxx' -8296,5277,0,0,6,16,96,296,296,3296,8296,192,193,'CHAAAA','ZUHAAA','HHHHxx' -6565,5278,1,1,5,5,65,565,565,1565,6565,130,131,'NSAAAA','AVHAAA','OOOOxx' -817,5279,1,1,7,17,17,817,817,817,817,34,35,'LFAAAA','BVHAAA','VVVVxx' -6947,5280,1,3,7,7,47,947,947,1947,6947,94,95,'FHAAAA','CVHAAA','AAAAxx' -4184,5281,0,0,4,4,84,184,184,4184,4184,168,169,'YEAAAA','DVHAAA','HHHHxx' -6577,5282,1,1,7,17,77,577,577,1577,6577,154,155,'ZSAAAA','EVHAAA','OOOOxx' -6424,5283,0,0,4,4,24,424,424,1424,6424,48,49,'CNAAAA','FVHAAA','VVVVxx' -2482,5284,0,2,2,2,82,482,482,2482,2482,164,165,'MRAAAA','GVHAAA','AAAAxx' -6874,5285,0,2,4,14,74,874,874,1874,6874,148,149,'KEAAAA','HVHAAA','HHHHxx' -7601,5286,1,1,1,1,1,601,1601,2601,7601,2,3,'JGAAAA','IVHAAA','OOOOxx' -4552,5287,0,0,2,12,52,552,552,4552,4552,104,105,'CTAAAA','JVHAAA','VVVVxx' -8406,5288,0,2,6,6,6,406,406,3406,8406,12,13,'ILAAAA','KVHAAA','AAAAxx' -2924,5289,0,0,4,4,24,924,924,2924,2924,48,49,'MIAAAA','LVHAAA','HHHHxx' -8255,5290,1,3,5,15,55,255,255,3255,8255,110,111,'NFAAAA','MVHAAA','OOOOxx' -4920,5291,0,0,0,0,20,920,920,4920,4920,40,41,'GHAAAA','NVHAAA','VVVVxx' -228,5292,0,0,8,8,28,228,228,228,228,56,57,'UIAAAA','OVHAAA','AAAAxx' -9431,5293,1,3,1,11,31,431,1431,4431,9431,62,63,'TYAAAA','PVHAAA','HHHHxx' -4021,5294,1,1,1,1,21,21,21,4021,4021,42,43,'RYAAAA','QVHAAA','OOOOxx' -2966,5295,0,2,6,6,66,966,966,2966,2966,132,133,'CKAAAA','RVHAAA','VVVVxx' -2862,5296,0,2,2,2,62,862,862,2862,2862,124,125,'CGAAAA','SVHAAA','AAAAxx' -4303,5297,1,3,3,3,3,303,303,4303,4303,6,7,'NJAAAA','TVHAAA','HHHHxx' -9643,5298,1,3,3,3,43,643,1643,4643,9643,86,87,'XGAAAA','UVHAAA','OOOOxx' -3008,5299,0,0,8,8,8,8,1008,3008,3008,16,17,'SLAAAA','VVHAAA','VVVVxx' -7476,5300,0,0,6,16,76,476,1476,2476,7476,152,153,'OBAAAA','WVHAAA','AAAAxx' -3686,5301,0,2,6,6,86,686,1686,3686,3686,172,173,'ULAAAA','XVHAAA','HHHHxx' -9051,5302,1,3,1,11,51,51,1051,4051,9051,102,103,'DKAAAA','YVHAAA','OOOOxx' -6592,5303,0,0,2,12,92,592,592,1592,6592,184,185,'OTAAAA','ZVHAAA','VVVVxx' -924,5304,0,0,4,4,24,924,924,924,924,48,49,'OJAAAA','AWHAAA','AAAAxx' -4406,5305,0,2,6,6,6,406,406,4406,4406,12,13,'MNAAAA','BWHAAA','HHHHxx' -5233,5306,1,1,3,13,33,233,1233,233,5233,66,67,'HTAAAA','CWHAAA','OOOOxx' -8881,5307,1,1,1,1,81,881,881,3881,8881,162,163,'PDAAAA','DWHAAA','VVVVxx' -2212,5308,0,0,2,12,12,212,212,2212,2212,24,25,'CHAAAA','EWHAAA','AAAAxx' -5804,5309,0,0,4,4,4,804,1804,804,5804,8,9,'GPAAAA','FWHAAA','HHHHxx' -2990,5310,0,2,0,10,90,990,990,2990,2990,180,181,'ALAAAA','GWHAAA','OOOOxx' -4069,5311,1,1,9,9,69,69,69,4069,4069,138,139,'NAAAAA','HWHAAA','VVVVxx' -5380,5312,0,0,0,0,80,380,1380,380,5380,160,161,'YYAAAA','IWHAAA','AAAAxx' -5016,5313,0,0,6,16,16,16,1016,16,5016,32,33,'YKAAAA','JWHAAA','HHHHxx' -5056,5314,0,0,6,16,56,56,1056,56,5056,112,113,'MMAAAA','KWHAAA','OOOOxx' -3732,5315,0,0,2,12,32,732,1732,3732,3732,64,65,'ONAAAA','LWHAAA','VVVVxx' -5527,5316,1,3,7,7,27,527,1527,527,5527,54,55,'PEAAAA','MWHAAA','AAAAxx' -1151,5317,1,3,1,11,51,151,1151,1151,1151,102,103,'HSAAAA','NWHAAA','HHHHxx' -7900,5318,0,0,0,0,0,900,1900,2900,7900,0,1,'WRAAAA','OWHAAA','OOOOxx' -1660,5319,0,0,0,0,60,660,1660,1660,1660,120,121,'WLAAAA','PWHAAA','VVVVxx' -8064,5320,0,0,4,4,64,64,64,3064,8064,128,129,'EYAAAA','QWHAAA','AAAAxx' -8240,5321,0,0,0,0,40,240,240,3240,8240,80,81,'YEAAAA','RWHAAA','HHHHxx' -413,5322,1,1,3,13,13,413,413,413,413,26,27,'XPAAAA','SWHAAA','OOOOxx' -8311,5323,1,3,1,11,11,311,311,3311,8311,22,23,'RHAAAA','TWHAAA','VVVVxx' -1065,5324,1,1,5,5,65,65,1065,1065,1065,130,131,'ZOAAAA','UWHAAA','AAAAxx' -2741,5325,1,1,1,1,41,741,741,2741,2741,82,83,'LBAAAA','VWHAAA','HHHHxx' -5306,5326,0,2,6,6,6,306,1306,306,5306,12,13,'CWAAAA','WWHAAA','OOOOxx' -5464,5327,0,0,4,4,64,464,1464,464,5464,128,129,'ECAAAA','XWHAAA','VVVVxx' -4237,5328,1,1,7,17,37,237,237,4237,4237,74,75,'ZGAAAA','YWHAAA','AAAAxx' -3822,5329,0,2,2,2,22,822,1822,3822,3822,44,45,'ARAAAA','ZWHAAA','HHHHxx' -2548,5330,0,0,8,8,48,548,548,2548,2548,96,97,'AUAAAA','AXHAAA','OOOOxx' -2688,5331,0,0,8,8,88,688,688,2688,2688,176,177,'KZAAAA','BXHAAA','VVVVxx' -8061,5332,1,1,1,1,61,61,61,3061,8061,122,123,'BYAAAA','CXHAAA','AAAAxx' -9340,5333,0,0,0,0,40,340,1340,4340,9340,80,81,'GVAAAA','DXHAAA','HHHHxx' -4031,5334,1,3,1,11,31,31,31,4031,4031,62,63,'BZAAAA','EXHAAA','OOOOxx' -2635,5335,1,3,5,15,35,635,635,2635,2635,70,71,'JXAAAA','FXHAAA','VVVVxx' -809,5336,1,1,9,9,9,809,809,809,809,18,19,'DFAAAA','GXHAAA','AAAAxx' -3209,5337,1,1,9,9,9,209,1209,3209,3209,18,19,'LTAAAA','HXHAAA','HHHHxx' -3825,5338,1,1,5,5,25,825,1825,3825,3825,50,51,'DRAAAA','IXHAAA','OOOOxx' -1448,5339,0,0,8,8,48,448,1448,1448,1448,96,97,'SDAAAA','JXHAAA','VVVVxx' -9077,5340,1,1,7,17,77,77,1077,4077,9077,154,155,'DLAAAA','KXHAAA','AAAAxx' -3730,5341,0,2,0,10,30,730,1730,3730,3730,60,61,'MNAAAA','LXHAAA','HHHHxx' -9596,5342,0,0,6,16,96,596,1596,4596,9596,192,193,'CFAAAA','MXHAAA','OOOOxx' -3563,5343,1,3,3,3,63,563,1563,3563,3563,126,127,'BHAAAA','NXHAAA','VVVVxx' -4116,5344,0,0,6,16,16,116,116,4116,4116,32,33,'ICAAAA','OXHAAA','AAAAxx' -4825,5345,1,1,5,5,25,825,825,4825,4825,50,51,'PDAAAA','PXHAAA','HHHHxx' -8376,5346,0,0,6,16,76,376,376,3376,8376,152,153,'EKAAAA','QXHAAA','OOOOxx' -3917,5347,1,1,7,17,17,917,1917,3917,3917,34,35,'RUAAAA','RXHAAA','VVVVxx' -4407,5348,1,3,7,7,7,407,407,4407,4407,14,15,'NNAAAA','SXHAAA','AAAAxx' -8202,5349,0,2,2,2,2,202,202,3202,8202,4,5,'MDAAAA','TXHAAA','HHHHxx' -7675,5350,1,3,5,15,75,675,1675,2675,7675,150,151,'FJAAAA','UXHAAA','OOOOxx' -4104,5351,0,0,4,4,4,104,104,4104,4104,8,9,'WBAAAA','VXHAAA','VVVVxx' -9225,5352,1,1,5,5,25,225,1225,4225,9225,50,51,'VQAAAA','WXHAAA','AAAAxx' -2834,5353,0,2,4,14,34,834,834,2834,2834,68,69,'AFAAAA','XXHAAA','HHHHxx' -1227,5354,1,3,7,7,27,227,1227,1227,1227,54,55,'FVAAAA','YXHAAA','OOOOxx' -3383,5355,1,3,3,3,83,383,1383,3383,3383,166,167,'DAAAAA','ZXHAAA','VVVVxx' -67,5356,1,3,7,7,67,67,67,67,67,134,135,'PCAAAA','AYHAAA','AAAAxx' -1751,5357,1,3,1,11,51,751,1751,1751,1751,102,103,'JPAAAA','BYHAAA','HHHHxx' -8054,5358,0,2,4,14,54,54,54,3054,8054,108,109,'UXAAAA','CYHAAA','OOOOxx' -8571,5359,1,3,1,11,71,571,571,3571,8571,142,143,'RRAAAA','DYHAAA','VVVVxx' -2466,5360,0,2,6,6,66,466,466,2466,2466,132,133,'WQAAAA','EYHAAA','AAAAxx' -9405,5361,1,1,5,5,5,405,1405,4405,9405,10,11,'TXAAAA','FYHAAA','HHHHxx' -6883,5362,1,3,3,3,83,883,883,1883,6883,166,167,'TEAAAA','GYHAAA','OOOOxx' -4301,5363,1,1,1,1,1,301,301,4301,4301,2,3,'LJAAAA','HYHAAA','VVVVxx' -3705,5364,1,1,5,5,5,705,1705,3705,3705,10,11,'NMAAAA','IYHAAA','AAAAxx' -5420,5365,0,0,0,0,20,420,1420,420,5420,40,41,'MAAAAA','JYHAAA','HHHHxx' -3692,5366,0,0,2,12,92,692,1692,3692,3692,184,185,'AMAAAA','KYHAAA','OOOOxx' -6851,5367,1,3,1,11,51,851,851,1851,6851,102,103,'NDAAAA','LYHAAA','VVVVxx' -9363,5368,1,3,3,3,63,363,1363,4363,9363,126,127,'DWAAAA','MYHAAA','AAAAxx' -2269,5369,1,1,9,9,69,269,269,2269,2269,138,139,'HJAAAA','NYHAAA','HHHHxx' -4918,5370,0,2,8,18,18,918,918,4918,4918,36,37,'EHAAAA','OYHAAA','OOOOxx' -4297,5371,1,1,7,17,97,297,297,4297,4297,194,195,'HJAAAA','PYHAAA','VVVVxx' -1836,5372,0,0,6,16,36,836,1836,1836,1836,72,73,'QSAAAA','QYHAAA','AAAAxx' -237,5373,1,1,7,17,37,237,237,237,237,74,75,'DJAAAA','RYHAAA','HHHHxx' -6131,5374,1,3,1,11,31,131,131,1131,6131,62,63,'VBAAAA','SYHAAA','OOOOxx' -3174,5375,0,2,4,14,74,174,1174,3174,3174,148,149,'CSAAAA','TYHAAA','VVVVxx' -9987,5376,1,3,7,7,87,987,1987,4987,9987,174,175,'DUAAAA','UYHAAA','AAAAxx' -3630,5377,0,2,0,10,30,630,1630,3630,3630,60,61,'QJAAAA','VYHAAA','HHHHxx' -2899,5378,1,3,9,19,99,899,899,2899,2899,198,199,'NHAAAA','WYHAAA','OOOOxx' -4079,5379,1,3,9,19,79,79,79,4079,4079,158,159,'XAAAAA','XYHAAA','VVVVxx' -5049,5380,1,1,9,9,49,49,1049,49,5049,98,99,'FMAAAA','YYHAAA','AAAAxx' -2963,5381,1,3,3,3,63,963,963,2963,2963,126,127,'ZJAAAA','ZYHAAA','HHHHxx' -3962,5382,0,2,2,2,62,962,1962,3962,3962,124,125,'KWAAAA','AZHAAA','OOOOxx' -7921,5383,1,1,1,1,21,921,1921,2921,7921,42,43,'RSAAAA','BZHAAA','VVVVxx' -3967,5384,1,3,7,7,67,967,1967,3967,3967,134,135,'PWAAAA','CZHAAA','AAAAxx' -2752,5385,0,0,2,12,52,752,752,2752,2752,104,105,'WBAAAA','DZHAAA','HHHHxx' -7944,5386,0,0,4,4,44,944,1944,2944,7944,88,89,'OTAAAA','EZHAAA','OOOOxx' -2205,5387,1,1,5,5,5,205,205,2205,2205,10,11,'VGAAAA','FZHAAA','VVVVxx' -5035,5388,1,3,5,15,35,35,1035,35,5035,70,71,'RLAAAA','GZHAAA','AAAAxx' -1425,5389,1,1,5,5,25,425,1425,1425,1425,50,51,'VCAAAA','HZHAAA','HHHHxx' -832,5390,0,0,2,12,32,832,832,832,832,64,65,'AGAAAA','IZHAAA','OOOOxx' -1447,5391,1,3,7,7,47,447,1447,1447,1447,94,95,'RDAAAA','JZHAAA','VVVVxx' -6108,5392,0,0,8,8,8,108,108,1108,6108,16,17,'YAAAAA','KZHAAA','AAAAxx' -4936,5393,0,0,6,16,36,936,936,4936,4936,72,73,'WHAAAA','LZHAAA','HHHHxx' -7704,5394,0,0,4,4,4,704,1704,2704,7704,8,9,'IKAAAA','MZHAAA','OOOOxx' -142,5395,0,2,2,2,42,142,142,142,142,84,85,'MFAAAA','NZHAAA','VVVVxx' -4272,5396,0,0,2,12,72,272,272,4272,4272,144,145,'IIAAAA','OZHAAA','AAAAxx' -7667,5397,1,3,7,7,67,667,1667,2667,7667,134,135,'XIAAAA','PZHAAA','HHHHxx' -366,5398,0,2,6,6,66,366,366,366,366,132,133,'COAAAA','QZHAAA','OOOOxx' -8866,5399,0,2,6,6,66,866,866,3866,8866,132,133,'ADAAAA','RZHAAA','VVVVxx' -7712,5400,0,0,2,12,12,712,1712,2712,7712,24,25,'QKAAAA','SZHAAA','AAAAxx' -3880,5401,0,0,0,0,80,880,1880,3880,3880,160,161,'GTAAAA','TZHAAA','HHHHxx' -4631,5402,1,3,1,11,31,631,631,4631,4631,62,63,'DWAAAA','UZHAAA','OOOOxx' -2789,5403,1,1,9,9,89,789,789,2789,2789,178,179,'HDAAAA','VZHAAA','VVVVxx' -7720,5404,0,0,0,0,20,720,1720,2720,7720,40,41,'YKAAAA','WZHAAA','AAAAxx' -7618,5405,0,2,8,18,18,618,1618,2618,7618,36,37,'AHAAAA','XZHAAA','HHHHxx' -4990,5406,0,2,0,10,90,990,990,4990,4990,180,181,'YJAAAA','YZHAAA','OOOOxx' -7918,5407,0,2,8,18,18,918,1918,2918,7918,36,37,'OSAAAA','ZZHAAA','VVVVxx' -5067,5408,1,3,7,7,67,67,1067,67,5067,134,135,'XMAAAA','AAIAAA','AAAAxx' -6370,5409,0,2,0,10,70,370,370,1370,6370,140,141,'ALAAAA','BAIAAA','HHHHxx' -2268,5410,0,0,8,8,68,268,268,2268,2268,136,137,'GJAAAA','CAIAAA','OOOOxx' -1949,5411,1,1,9,9,49,949,1949,1949,1949,98,99,'ZWAAAA','DAIAAA','VVVVxx' -5503,5412,1,3,3,3,3,503,1503,503,5503,6,7,'RDAAAA','EAIAAA','AAAAxx' -9951,5413,1,3,1,11,51,951,1951,4951,9951,102,103,'TSAAAA','FAIAAA','HHHHxx' -6823,5414,1,3,3,3,23,823,823,1823,6823,46,47,'LCAAAA','GAIAAA','OOOOxx' -6287,5415,1,3,7,7,87,287,287,1287,6287,174,175,'VHAAAA','HAIAAA','VVVVxx' -6016,5416,0,0,6,16,16,16,16,1016,6016,32,33,'KXAAAA','IAIAAA','AAAAxx' -1977,5417,1,1,7,17,77,977,1977,1977,1977,154,155,'BYAAAA','JAIAAA','HHHHxx' -8579,5418,1,3,9,19,79,579,579,3579,8579,158,159,'ZRAAAA','KAIAAA','OOOOxx' -6204,5419,0,0,4,4,4,204,204,1204,6204,8,9,'QEAAAA','LAIAAA','VVVVxx' -9764,5420,0,0,4,4,64,764,1764,4764,9764,128,129,'OLAAAA','MAIAAA','AAAAxx' -2005,5421,1,1,5,5,5,5,5,2005,2005,10,11,'DZAAAA','NAIAAA','HHHHxx' -1648,5422,0,0,8,8,48,648,1648,1648,1648,96,97,'KLAAAA','OAIAAA','OOOOxx' -2457,5423,1,1,7,17,57,457,457,2457,2457,114,115,'NQAAAA','PAIAAA','VVVVxx' -2698,5424,0,2,8,18,98,698,698,2698,2698,196,197,'UZAAAA','QAIAAA','AAAAxx' -7730,5425,0,2,0,10,30,730,1730,2730,7730,60,61,'ILAAAA','RAIAAA','HHHHxx' -7287,5426,1,3,7,7,87,287,1287,2287,7287,174,175,'HUAAAA','SAIAAA','OOOOxx' -2937,5427,1,1,7,17,37,937,937,2937,2937,74,75,'ZIAAAA','TAIAAA','VVVVxx' -6824,5428,0,0,4,4,24,824,824,1824,6824,48,49,'MCAAAA','UAIAAA','AAAAxx' -9256,5429,0,0,6,16,56,256,1256,4256,9256,112,113,'ASAAAA','VAIAAA','HHHHxx' -4810,5430,0,2,0,10,10,810,810,4810,4810,20,21,'ADAAAA','WAIAAA','OOOOxx' -3869,5431,1,1,9,9,69,869,1869,3869,3869,138,139,'VSAAAA','XAIAAA','VVVVxx' -1993,5432,1,1,3,13,93,993,1993,1993,1993,186,187,'RYAAAA','YAIAAA','AAAAxx' -6048,5433,0,0,8,8,48,48,48,1048,6048,96,97,'QYAAAA','ZAIAAA','HHHHxx' -6922,5434,0,2,2,2,22,922,922,1922,6922,44,45,'GGAAAA','ABIAAA','OOOOxx' -8,5435,0,0,8,8,8,8,8,8,8,16,17,'IAAAAA','BBIAAA','VVVVxx' -6706,5436,0,2,6,6,6,706,706,1706,6706,12,13,'YXAAAA','CBIAAA','AAAAxx' -9159,5437,1,3,9,19,59,159,1159,4159,9159,118,119,'HOAAAA','DBIAAA','HHHHxx' -7020,5438,0,0,0,0,20,20,1020,2020,7020,40,41,'AKAAAA','EBIAAA','OOOOxx' -767,5439,1,3,7,7,67,767,767,767,767,134,135,'NDAAAA','FBIAAA','VVVVxx' -8602,5440,0,2,2,2,2,602,602,3602,8602,4,5,'WSAAAA','GBIAAA','AAAAxx' -4442,5441,0,2,2,2,42,442,442,4442,4442,84,85,'WOAAAA','HBIAAA','HHHHxx' -2040,5442,0,0,0,0,40,40,40,2040,2040,80,81,'MAAAAA','IBIAAA','OOOOxx' -5493,5443,1,1,3,13,93,493,1493,493,5493,186,187,'HDAAAA','JBIAAA','VVVVxx' -275,5444,1,3,5,15,75,275,275,275,275,150,151,'PKAAAA','KBIAAA','AAAAxx' -8876,5445,0,0,6,16,76,876,876,3876,8876,152,153,'KDAAAA','LBIAAA','HHHHxx' -7381,5446,1,1,1,1,81,381,1381,2381,7381,162,163,'XXAAAA','MBIAAA','OOOOxx' -1827,5447,1,3,7,7,27,827,1827,1827,1827,54,55,'HSAAAA','NBIAAA','VVVVxx' -3537,5448,1,1,7,17,37,537,1537,3537,3537,74,75,'BGAAAA','OBIAAA','AAAAxx' -6978,5449,0,2,8,18,78,978,978,1978,6978,156,157,'KIAAAA','PBIAAA','HHHHxx' -6160,5450,0,0,0,0,60,160,160,1160,6160,120,121,'YCAAAA','QBIAAA','OOOOxx' -9219,5451,1,3,9,19,19,219,1219,4219,9219,38,39,'PQAAAA','RBIAAA','VVVVxx' -5034,5452,0,2,4,14,34,34,1034,34,5034,68,69,'QLAAAA','SBIAAA','AAAAxx' -8463,5453,1,3,3,3,63,463,463,3463,8463,126,127,'NNAAAA','TBIAAA','HHHHxx' -2038,5454,0,2,8,18,38,38,38,2038,2038,76,77,'KAAAAA','UBIAAA','OOOOxx' -9562,5455,0,2,2,2,62,562,1562,4562,9562,124,125,'UDAAAA','VBIAAA','VVVVxx' -2687,5456,1,3,7,7,87,687,687,2687,2687,174,175,'JZAAAA','WBIAAA','AAAAxx' -5092,5457,0,0,2,12,92,92,1092,92,5092,184,185,'WNAAAA','XBIAAA','HHHHxx' -539,5458,1,3,9,19,39,539,539,539,539,78,79,'TUAAAA','YBIAAA','OOOOxx' -2139,5459,1,3,9,19,39,139,139,2139,2139,78,79,'HEAAAA','ZBIAAA','VVVVxx' -9221,5460,1,1,1,1,21,221,1221,4221,9221,42,43,'RQAAAA','ACIAAA','AAAAxx' -965,5461,1,1,5,5,65,965,965,965,965,130,131,'DLAAAA','BCIAAA','HHHHxx' -6051,5462,1,3,1,11,51,51,51,1051,6051,102,103,'TYAAAA','CCIAAA','OOOOxx' -5822,5463,0,2,2,2,22,822,1822,822,5822,44,45,'YPAAAA','DCIAAA','VVVVxx' -6397,5464,1,1,7,17,97,397,397,1397,6397,194,195,'BMAAAA','ECIAAA','AAAAxx' -2375,5465,1,3,5,15,75,375,375,2375,2375,150,151,'JNAAAA','FCIAAA','HHHHxx' -9415,5466,1,3,5,15,15,415,1415,4415,9415,30,31,'DYAAAA','GCIAAA','OOOOxx' -6552,5467,0,0,2,12,52,552,552,1552,6552,104,105,'ASAAAA','HCIAAA','VVVVxx' -2248,5468,0,0,8,8,48,248,248,2248,2248,96,97,'MIAAAA','ICIAAA','AAAAxx' -2611,5469,1,3,1,11,11,611,611,2611,2611,22,23,'LWAAAA','JCIAAA','HHHHxx' -9609,5470,1,1,9,9,9,609,1609,4609,9609,18,19,'PFAAAA','KCIAAA','OOOOxx' -2132,5471,0,0,2,12,32,132,132,2132,2132,64,65,'AEAAAA','LCIAAA','VVVVxx' -8452,5472,0,0,2,12,52,452,452,3452,8452,104,105,'CNAAAA','MCIAAA','AAAAxx' -9407,5473,1,3,7,7,7,407,1407,4407,9407,14,15,'VXAAAA','NCIAAA','HHHHxx' -2814,5474,0,2,4,14,14,814,814,2814,2814,28,29,'GEAAAA','OCIAAA','OOOOxx' -1889,5475,1,1,9,9,89,889,1889,1889,1889,178,179,'RUAAAA','PCIAAA','VVVVxx' -7489,5476,1,1,9,9,89,489,1489,2489,7489,178,179,'BCAAAA','QCIAAA','AAAAxx' -2255,5477,1,3,5,15,55,255,255,2255,2255,110,111,'TIAAAA','RCIAAA','HHHHxx' -3380,5478,0,0,0,0,80,380,1380,3380,3380,160,161,'AAAAAA','SCIAAA','OOOOxx' -1167,5479,1,3,7,7,67,167,1167,1167,1167,134,135,'XSAAAA','TCIAAA','VVVVxx' -5369,5480,1,1,9,9,69,369,1369,369,5369,138,139,'NYAAAA','UCIAAA','AAAAxx' -2378,5481,0,2,8,18,78,378,378,2378,2378,156,157,'MNAAAA','VCIAAA','HHHHxx' -8315,5482,1,3,5,15,15,315,315,3315,8315,30,31,'VHAAAA','WCIAAA','OOOOxx' -2934,5483,0,2,4,14,34,934,934,2934,2934,68,69,'WIAAAA','XCIAAA','VVVVxx' -7924,5484,0,0,4,4,24,924,1924,2924,7924,48,49,'USAAAA','YCIAAA','AAAAxx' -2867,5485,1,3,7,7,67,867,867,2867,2867,134,135,'HGAAAA','ZCIAAA','HHHHxx' -9141,5486,1,1,1,1,41,141,1141,4141,9141,82,83,'PNAAAA','ADIAAA','OOOOxx' -3613,5487,1,1,3,13,13,613,1613,3613,3613,26,27,'ZIAAAA','BDIAAA','VVVVxx' -2461,5488,1,1,1,1,61,461,461,2461,2461,122,123,'RQAAAA','CDIAAA','AAAAxx' -4567,5489,1,3,7,7,67,567,567,4567,4567,134,135,'RTAAAA','DDIAAA','HHHHxx' -2906,5490,0,2,6,6,6,906,906,2906,2906,12,13,'UHAAAA','EDIAAA','OOOOxx' -4848,5491,0,0,8,8,48,848,848,4848,4848,96,97,'MEAAAA','FDIAAA','VVVVxx' -6614,5492,0,2,4,14,14,614,614,1614,6614,28,29,'KUAAAA','GDIAAA','AAAAxx' -6200,5493,0,0,0,0,0,200,200,1200,6200,0,1,'MEAAAA','HDIAAA','HHHHxx' -7895,5494,1,3,5,15,95,895,1895,2895,7895,190,191,'RRAAAA','IDIAAA','OOOOxx' -6829,5495,1,1,9,9,29,829,829,1829,6829,58,59,'RCAAAA','JDIAAA','VVVVxx' -4087,5496,1,3,7,7,87,87,87,4087,4087,174,175,'FBAAAA','KDIAAA','AAAAxx' -8787,5497,1,3,7,7,87,787,787,3787,8787,174,175,'ZZAAAA','LDIAAA','HHHHxx' -3322,5498,0,2,2,2,22,322,1322,3322,3322,44,45,'UXAAAA','MDIAAA','OOOOxx' -9091,5499,1,3,1,11,91,91,1091,4091,9091,182,183,'RLAAAA','NDIAAA','VVVVxx' -5268,5500,0,0,8,8,68,268,1268,268,5268,136,137,'QUAAAA','ODIAAA','AAAAxx' -2719,5501,1,3,9,19,19,719,719,2719,2719,38,39,'PAAAAA','PDIAAA','HHHHxx' -30,5502,0,2,0,10,30,30,30,30,30,60,61,'EBAAAA','QDIAAA','OOOOxx' -1975,5503,1,3,5,15,75,975,1975,1975,1975,150,151,'ZXAAAA','RDIAAA','VVVVxx' -2641,5504,1,1,1,1,41,641,641,2641,2641,82,83,'PXAAAA','SDIAAA','AAAAxx' -8616,5505,0,0,6,16,16,616,616,3616,8616,32,33,'KTAAAA','TDIAAA','HHHHxx' -5980,5506,0,0,0,0,80,980,1980,980,5980,160,161,'AWAAAA','UDIAAA','OOOOxx' -5170,5507,0,2,0,10,70,170,1170,170,5170,140,141,'WQAAAA','VDIAAA','VVVVxx' -1960,5508,0,0,0,0,60,960,1960,1960,1960,120,121,'KXAAAA','WDIAAA','AAAAxx' -8141,5509,1,1,1,1,41,141,141,3141,8141,82,83,'DBAAAA','XDIAAA','HHHHxx' -6692,5510,0,0,2,12,92,692,692,1692,6692,184,185,'KXAAAA','YDIAAA','OOOOxx' -7621,5511,1,1,1,1,21,621,1621,2621,7621,42,43,'DHAAAA','ZDIAAA','VVVVxx' -3890,5512,0,2,0,10,90,890,1890,3890,3890,180,181,'QTAAAA','AEIAAA','AAAAxx' -4300,5513,0,0,0,0,0,300,300,4300,4300,0,1,'KJAAAA','BEIAAA','HHHHxx' -736,5514,0,0,6,16,36,736,736,736,736,72,73,'ICAAAA','CEIAAA','OOOOxx' -6626,5515,0,2,6,6,26,626,626,1626,6626,52,53,'WUAAAA','DEIAAA','VVVVxx' -1800,5516,0,0,0,0,0,800,1800,1800,1800,0,1,'GRAAAA','EEIAAA','AAAAxx' -3430,5517,0,2,0,10,30,430,1430,3430,3430,60,61,'YBAAAA','FEIAAA','HHHHxx' -9519,5518,1,3,9,19,19,519,1519,4519,9519,38,39,'DCAAAA','GEIAAA','OOOOxx' -5111,5519,1,3,1,11,11,111,1111,111,5111,22,23,'POAAAA','HEIAAA','VVVVxx' -6915,5520,1,3,5,15,15,915,915,1915,6915,30,31,'ZFAAAA','IEIAAA','AAAAxx' -9246,5521,0,2,6,6,46,246,1246,4246,9246,92,93,'QRAAAA','JEIAAA','HHHHxx' -5141,5522,1,1,1,1,41,141,1141,141,5141,82,83,'TPAAAA','KEIAAA','OOOOxx' -5922,5523,0,2,2,2,22,922,1922,922,5922,44,45,'UTAAAA','LEIAAA','VVVVxx' -3087,5524,1,3,7,7,87,87,1087,3087,3087,174,175,'TOAAAA','MEIAAA','AAAAxx' -1859,5525,1,3,9,19,59,859,1859,1859,1859,118,119,'NTAAAA','NEIAAA','HHHHxx' -8482,5526,0,2,2,2,82,482,482,3482,8482,164,165,'GOAAAA','OEIAAA','OOOOxx' -8414,5527,0,2,4,14,14,414,414,3414,8414,28,29,'QLAAAA','PEIAAA','VVVVxx' -6662,5528,0,2,2,2,62,662,662,1662,6662,124,125,'GWAAAA','QEIAAA','AAAAxx' -8614,5529,0,2,4,14,14,614,614,3614,8614,28,29,'ITAAAA','REIAAA','HHHHxx' -42,5530,0,2,2,2,42,42,42,42,42,84,85,'QBAAAA','SEIAAA','OOOOxx' -7582,5531,0,2,2,2,82,582,1582,2582,7582,164,165,'QFAAAA','TEIAAA','VVVVxx' -8183,5532,1,3,3,3,83,183,183,3183,8183,166,167,'TCAAAA','UEIAAA','AAAAxx' -1299,5533,1,3,9,19,99,299,1299,1299,1299,198,199,'ZXAAAA','VEIAAA','HHHHxx' -7004,5534,0,0,4,4,4,4,1004,2004,7004,8,9,'KJAAAA','WEIAAA','OOOOxx' -3298,5535,0,2,8,18,98,298,1298,3298,3298,196,197,'WWAAAA','XEIAAA','VVVVxx' -7884,5536,0,0,4,4,84,884,1884,2884,7884,168,169,'GRAAAA','YEIAAA','AAAAxx' -4191,5537,1,3,1,11,91,191,191,4191,4191,182,183,'FFAAAA','ZEIAAA','HHHHxx' -7346,5538,0,2,6,6,46,346,1346,2346,7346,92,93,'OWAAAA','AFIAAA','OOOOxx' -7989,5539,1,1,9,9,89,989,1989,2989,7989,178,179,'HVAAAA','BFIAAA','VVVVxx' -5719,5540,1,3,9,19,19,719,1719,719,5719,38,39,'ZLAAAA','CFIAAA','AAAAxx' -800,5541,0,0,0,0,0,800,800,800,800,0,1,'UEAAAA','DFIAAA','HHHHxx' -6509,5542,1,1,9,9,9,509,509,1509,6509,18,19,'JQAAAA','EFIAAA','OOOOxx' -4672,5543,0,0,2,12,72,672,672,4672,4672,144,145,'SXAAAA','FFIAAA','VVVVxx' -4434,5544,0,2,4,14,34,434,434,4434,4434,68,69,'OOAAAA','GFIAAA','AAAAxx' -8309,5545,1,1,9,9,9,309,309,3309,8309,18,19,'PHAAAA','HFIAAA','HHHHxx' -5134,5546,0,2,4,14,34,134,1134,134,5134,68,69,'MPAAAA','IFIAAA','OOOOxx' -5153,5547,1,1,3,13,53,153,1153,153,5153,106,107,'FQAAAA','JFIAAA','VVVVxx' -1522,5548,0,2,2,2,22,522,1522,1522,1522,44,45,'OGAAAA','KFIAAA','AAAAxx' -8629,5549,1,1,9,9,29,629,629,3629,8629,58,59,'XTAAAA','LFIAAA','HHHHxx' -4549,5550,1,1,9,9,49,549,549,4549,4549,98,99,'ZSAAAA','MFIAAA','OOOOxx' -9506,5551,0,2,6,6,6,506,1506,4506,9506,12,13,'QBAAAA','NFIAAA','VVVVxx' -6542,5552,0,2,2,2,42,542,542,1542,6542,84,85,'QRAAAA','OFIAAA','AAAAxx' -2579,5553,1,3,9,19,79,579,579,2579,2579,158,159,'FVAAAA','PFIAAA','HHHHxx' -4664,5554,0,0,4,4,64,664,664,4664,4664,128,129,'KXAAAA','QFIAAA','OOOOxx' -696,5555,0,0,6,16,96,696,696,696,696,192,193,'UAAAAA','RFIAAA','VVVVxx' -7950,5556,0,2,0,10,50,950,1950,2950,7950,100,101,'UTAAAA','SFIAAA','AAAAxx' -5,5557,1,1,5,5,5,5,5,5,5,10,11,'FAAAAA','TFIAAA','HHHHxx' -7806,5558,0,2,6,6,6,806,1806,2806,7806,12,13,'GOAAAA','UFIAAA','OOOOxx' -2770,5559,0,2,0,10,70,770,770,2770,2770,140,141,'OCAAAA','VFIAAA','VVVVxx' -1344,5560,0,0,4,4,44,344,1344,1344,1344,88,89,'SZAAAA','WFIAAA','AAAAxx' -511,5561,1,3,1,11,11,511,511,511,511,22,23,'RTAAAA','XFIAAA','HHHHxx' -9070,5562,0,2,0,10,70,70,1070,4070,9070,140,141,'WKAAAA','YFIAAA','OOOOxx' -2961,5563,1,1,1,1,61,961,961,2961,2961,122,123,'XJAAAA','ZFIAAA','VVVVxx' -8031,5564,1,3,1,11,31,31,31,3031,8031,62,63,'XWAAAA','AGIAAA','AAAAxx' -326,5565,0,2,6,6,26,326,326,326,326,52,53,'OMAAAA','BGIAAA','HHHHxx' -183,5566,1,3,3,3,83,183,183,183,183,166,167,'BHAAAA','CGIAAA','OOOOxx' -5917,5567,1,1,7,17,17,917,1917,917,5917,34,35,'PTAAAA','DGIAAA','VVVVxx' -8256,5568,0,0,6,16,56,256,256,3256,8256,112,113,'OFAAAA','EGIAAA','AAAAxx' -7889,5569,1,1,9,9,89,889,1889,2889,7889,178,179,'LRAAAA','FGIAAA','HHHHxx' -9029,5570,1,1,9,9,29,29,1029,4029,9029,58,59,'HJAAAA','GGIAAA','OOOOxx' -1316,5571,0,0,6,16,16,316,1316,1316,1316,32,33,'QYAAAA','HGIAAA','VVVVxx' -7442,5572,0,2,2,2,42,442,1442,2442,7442,84,85,'GAAAAA','IGIAAA','AAAAxx' -2810,5573,0,2,0,10,10,810,810,2810,2810,20,21,'CEAAAA','JGIAAA','HHHHxx' -20,5574,0,0,0,0,20,20,20,20,20,40,41,'UAAAAA','KGIAAA','OOOOxx' -2306,5575,0,2,6,6,6,306,306,2306,2306,12,13,'SKAAAA','LGIAAA','VVVVxx' -4694,5576,0,2,4,14,94,694,694,4694,4694,188,189,'OYAAAA','MGIAAA','AAAAxx' -9710,5577,0,2,0,10,10,710,1710,4710,9710,20,21,'MJAAAA','NGIAAA','HHHHxx' -1791,5578,1,3,1,11,91,791,1791,1791,1791,182,183,'XQAAAA','OGIAAA','OOOOxx' -6730,5579,0,2,0,10,30,730,730,1730,6730,60,61,'WYAAAA','PGIAAA','VVVVxx' -359,5580,1,3,9,19,59,359,359,359,359,118,119,'VNAAAA','QGIAAA','AAAAxx' -8097,5581,1,1,7,17,97,97,97,3097,8097,194,195,'LZAAAA','RGIAAA','HHHHxx' -6147,5582,1,3,7,7,47,147,147,1147,6147,94,95,'LCAAAA','SGIAAA','OOOOxx' -643,5583,1,3,3,3,43,643,643,643,643,86,87,'TYAAAA','TGIAAA','VVVVxx' -698,5584,0,2,8,18,98,698,698,698,698,196,197,'WAAAAA','UGIAAA','AAAAxx' -3881,5585,1,1,1,1,81,881,1881,3881,3881,162,163,'HTAAAA','VGIAAA','HHHHxx' -7600,5586,0,0,0,0,0,600,1600,2600,7600,0,1,'IGAAAA','WGIAAA','OOOOxx' -1583,5587,1,3,3,3,83,583,1583,1583,1583,166,167,'XIAAAA','XGIAAA','VVVVxx' -9612,5588,0,0,2,12,12,612,1612,4612,9612,24,25,'SFAAAA','YGIAAA','AAAAxx' -1032,5589,0,0,2,12,32,32,1032,1032,1032,64,65,'SNAAAA','ZGIAAA','HHHHxx' -4834,5590,0,2,4,14,34,834,834,4834,4834,68,69,'YDAAAA','AHIAAA','OOOOxx' -5076,5591,0,0,6,16,76,76,1076,76,5076,152,153,'GNAAAA','BHIAAA','VVVVxx' -3070,5592,0,2,0,10,70,70,1070,3070,3070,140,141,'COAAAA','CHIAAA','AAAAxx' -1421,5593,1,1,1,1,21,421,1421,1421,1421,42,43,'RCAAAA','DHIAAA','HHHHxx' -8970,5594,0,2,0,10,70,970,970,3970,8970,140,141,'AHAAAA','EHIAAA','OOOOxx' -6271,5595,1,3,1,11,71,271,271,1271,6271,142,143,'FHAAAA','FHIAAA','VVVVxx' -8547,5596,1,3,7,7,47,547,547,3547,8547,94,95,'TQAAAA','GHIAAA','AAAAxx' -1259,5597,1,3,9,19,59,259,1259,1259,1259,118,119,'LWAAAA','HHIAAA','HHHHxx' -8328,5598,0,0,8,8,28,328,328,3328,8328,56,57,'IIAAAA','IHIAAA','OOOOxx' -1503,5599,1,3,3,3,3,503,1503,1503,1503,6,7,'VFAAAA','JHIAAA','VVVVxx' -2253,5600,1,1,3,13,53,253,253,2253,2253,106,107,'RIAAAA','KHIAAA','AAAAxx' -7449,5601,1,1,9,9,49,449,1449,2449,7449,98,99,'NAAAAA','LHIAAA','HHHHxx' -3579,5602,1,3,9,19,79,579,1579,3579,3579,158,159,'RHAAAA','MHIAAA','OOOOxx' -1585,5603,1,1,5,5,85,585,1585,1585,1585,170,171,'ZIAAAA','NHIAAA','VVVVxx' -5543,5604,1,3,3,3,43,543,1543,543,5543,86,87,'FFAAAA','OHIAAA','AAAAxx' -8627,5605,1,3,7,7,27,627,627,3627,8627,54,55,'VTAAAA','PHIAAA','HHHHxx' -8618,5606,0,2,8,18,18,618,618,3618,8618,36,37,'MTAAAA','QHIAAA','OOOOxx' -1911,5607,1,3,1,11,11,911,1911,1911,1911,22,23,'NVAAAA','RHIAAA','VVVVxx' -2758,5608,0,2,8,18,58,758,758,2758,2758,116,117,'CCAAAA','SHIAAA','AAAAxx' -5744,5609,0,0,4,4,44,744,1744,744,5744,88,89,'YMAAAA','THIAAA','HHHHxx' -4976,5610,0,0,6,16,76,976,976,4976,4976,152,153,'KJAAAA','UHIAAA','OOOOxx' -6380,5611,0,0,0,0,80,380,380,1380,6380,160,161,'KLAAAA','VHIAAA','VVVVxx' -1937,5612,1,1,7,17,37,937,1937,1937,1937,74,75,'NWAAAA','WHIAAA','AAAAxx' -9903,5613,1,3,3,3,3,903,1903,4903,9903,6,7,'XQAAAA','XHIAAA','HHHHxx' -4409,5614,1,1,9,9,9,409,409,4409,4409,18,19,'PNAAAA','YHIAAA','OOOOxx' -4133,5615,1,1,3,13,33,133,133,4133,4133,66,67,'ZCAAAA','ZHIAAA','VVVVxx' -5263,5616,1,3,3,3,63,263,1263,263,5263,126,127,'LUAAAA','AIIAAA','AAAAxx' -7888,5617,0,0,8,8,88,888,1888,2888,7888,176,177,'KRAAAA','BIIAAA','HHHHxx' -6060,5618,0,0,0,0,60,60,60,1060,6060,120,121,'CZAAAA','CIIAAA','OOOOxx' -2522,5619,0,2,2,2,22,522,522,2522,2522,44,45,'ATAAAA','DIIAAA','VVVVxx' -5550,5620,0,2,0,10,50,550,1550,550,5550,100,101,'MFAAAA','EIIAAA','AAAAxx' -9396,5621,0,0,6,16,96,396,1396,4396,9396,192,193,'KXAAAA','FIIAAA','HHHHxx' -176,5622,0,0,6,16,76,176,176,176,176,152,153,'UGAAAA','GIIAAA','OOOOxx' -5148,5623,0,0,8,8,48,148,1148,148,5148,96,97,'AQAAAA','HIIAAA','VVVVxx' -6691,5624,1,3,1,11,91,691,691,1691,6691,182,183,'JXAAAA','IIIAAA','AAAAxx' -4652,5625,0,0,2,12,52,652,652,4652,4652,104,105,'YWAAAA','JIIAAA','HHHHxx' -5096,5626,0,0,6,16,96,96,1096,96,5096,192,193,'AOAAAA','KIIAAA','OOOOxx' -2408,5627,0,0,8,8,8,408,408,2408,2408,16,17,'QOAAAA','LIIAAA','VVVVxx' -7322,5628,0,2,2,2,22,322,1322,2322,7322,44,45,'QVAAAA','MIIAAA','AAAAxx' -6782,5629,0,2,2,2,82,782,782,1782,6782,164,165,'WAAAAA','NIIAAA','HHHHxx' -4642,5630,0,2,2,2,42,642,642,4642,4642,84,85,'OWAAAA','OIIAAA','OOOOxx' -5427,5631,1,3,7,7,27,427,1427,427,5427,54,55,'TAAAAA','PIIAAA','VVVVxx' -4461,5632,1,1,1,1,61,461,461,4461,4461,122,123,'PPAAAA','QIIAAA','AAAAxx' -8416,5633,0,0,6,16,16,416,416,3416,8416,32,33,'SLAAAA','RIIAAA','HHHHxx' -2593,5634,1,1,3,13,93,593,593,2593,2593,186,187,'TVAAAA','SIIAAA','OOOOxx' -6202,5635,0,2,2,2,2,202,202,1202,6202,4,5,'OEAAAA','TIIAAA','VVVVxx' -3826,5636,0,2,6,6,26,826,1826,3826,3826,52,53,'ERAAAA','UIIAAA','AAAAxx' -4417,5637,1,1,7,17,17,417,417,4417,4417,34,35,'XNAAAA','VIIAAA','HHHHxx' -7871,5638,1,3,1,11,71,871,1871,2871,7871,142,143,'TQAAAA','WIIAAA','OOOOxx' -5622,5639,0,2,2,2,22,622,1622,622,5622,44,45,'GIAAAA','XIIAAA','VVVVxx' -3010,5640,0,2,0,10,10,10,1010,3010,3010,20,21,'ULAAAA','YIIAAA','AAAAxx' -3407,5641,1,3,7,7,7,407,1407,3407,3407,14,15,'BBAAAA','ZIIAAA','HHHHxx' -1274,5642,0,2,4,14,74,274,1274,1274,1274,148,149,'AXAAAA','AJIAAA','OOOOxx' -2828,5643,0,0,8,8,28,828,828,2828,2828,56,57,'UEAAAA','BJIAAA','VVVVxx' -3427,5644,1,3,7,7,27,427,1427,3427,3427,54,55,'VBAAAA','CJIAAA','AAAAxx' -612,5645,0,0,2,12,12,612,612,612,612,24,25,'OXAAAA','DJIAAA','HHHHxx' -8729,5646,1,1,9,9,29,729,729,3729,8729,58,59,'TXAAAA','EJIAAA','OOOOxx' -1239,5647,1,3,9,19,39,239,1239,1239,1239,78,79,'RVAAAA','FJIAAA','VVVVxx' -8990,5648,0,2,0,10,90,990,990,3990,8990,180,181,'UHAAAA','GJIAAA','AAAAxx' -5609,5649,1,1,9,9,9,609,1609,609,5609,18,19,'THAAAA','HJIAAA','HHHHxx' -4441,5650,1,1,1,1,41,441,441,4441,4441,82,83,'VOAAAA','IJIAAA','OOOOxx' -9078,5651,0,2,8,18,78,78,1078,4078,9078,156,157,'ELAAAA','JJIAAA','VVVVxx' -6699,5652,1,3,9,19,99,699,699,1699,6699,198,199,'RXAAAA','KJIAAA','AAAAxx' -8390,5653,0,2,0,10,90,390,390,3390,8390,180,181,'SKAAAA','LJIAAA','HHHHxx' -5455,5654,1,3,5,15,55,455,1455,455,5455,110,111,'VBAAAA','MJIAAA','OOOOxx' -7537,5655,1,1,7,17,37,537,1537,2537,7537,74,75,'XDAAAA','NJIAAA','VVVVxx' -4669,5656,1,1,9,9,69,669,669,4669,4669,138,139,'PXAAAA','OJIAAA','AAAAxx' -5534,5657,0,2,4,14,34,534,1534,534,5534,68,69,'WEAAAA','PJIAAA','HHHHxx' -1920,5658,0,0,0,0,20,920,1920,1920,1920,40,41,'WVAAAA','QJIAAA','OOOOxx' -9465,5659,1,1,5,5,65,465,1465,4465,9465,130,131,'BAAAAA','RJIAAA','VVVVxx' -4897,5660,1,1,7,17,97,897,897,4897,4897,194,195,'JGAAAA','SJIAAA','AAAAxx' -1990,5661,0,2,0,10,90,990,1990,1990,1990,180,181,'OYAAAA','TJIAAA','HHHHxx' -7148,5662,0,0,8,8,48,148,1148,2148,7148,96,97,'YOAAAA','UJIAAA','OOOOxx' -533,5663,1,1,3,13,33,533,533,533,533,66,67,'NUAAAA','VJIAAA','VVVVxx' -4339,5664,1,3,9,19,39,339,339,4339,4339,78,79,'XKAAAA','WJIAAA','AAAAxx' -6450,5665,0,2,0,10,50,450,450,1450,6450,100,101,'COAAAA','XJIAAA','HHHHxx' -9627,5666,1,3,7,7,27,627,1627,4627,9627,54,55,'HGAAAA','YJIAAA','OOOOxx' -5539,5667,1,3,9,19,39,539,1539,539,5539,78,79,'BFAAAA','ZJIAAA','VVVVxx' -6758,5668,0,2,8,18,58,758,758,1758,6758,116,117,'YZAAAA','AKIAAA','AAAAxx' -3435,5669,1,3,5,15,35,435,1435,3435,3435,70,71,'DCAAAA','BKIAAA','HHHHxx' -4350,5670,0,2,0,10,50,350,350,4350,4350,100,101,'ILAAAA','CKIAAA','OOOOxx' -9088,5671,0,0,8,8,88,88,1088,4088,9088,176,177,'OLAAAA','DKIAAA','VVVVxx' -6368,5672,0,0,8,8,68,368,368,1368,6368,136,137,'YKAAAA','EKIAAA','AAAAxx' -6337,5673,1,1,7,17,37,337,337,1337,6337,74,75,'TJAAAA','FKIAAA','HHHHxx' -4361,5674,1,1,1,1,61,361,361,4361,4361,122,123,'TLAAAA','GKIAAA','OOOOxx' -1719,5675,1,3,9,19,19,719,1719,1719,1719,38,39,'DOAAAA','HKIAAA','VVVVxx' -3109,5676,1,1,9,9,9,109,1109,3109,3109,18,19,'PPAAAA','IKIAAA','AAAAxx' -7135,5677,1,3,5,15,35,135,1135,2135,7135,70,71,'LOAAAA','JKIAAA','HHHHxx' -1964,5678,0,0,4,4,64,964,1964,1964,1964,128,129,'OXAAAA','KKIAAA','OOOOxx' -3,5679,1,3,3,3,3,3,3,3,3,6,7,'DAAAAA','LKIAAA','VVVVxx' -1868,5680,0,0,8,8,68,868,1868,1868,1868,136,137,'WTAAAA','MKIAAA','AAAAxx' -5182,5681,0,2,2,2,82,182,1182,182,5182,164,165,'IRAAAA','NKIAAA','HHHHxx' -7567,5682,1,3,7,7,67,567,1567,2567,7567,134,135,'BFAAAA','OKIAAA','OOOOxx' -3676,5683,0,0,6,16,76,676,1676,3676,3676,152,153,'KLAAAA','PKIAAA','VVVVxx' -9382,5684,0,2,2,2,82,382,1382,4382,9382,164,165,'WWAAAA','QKIAAA','AAAAxx' -8645,5685,1,1,5,5,45,645,645,3645,8645,90,91,'NUAAAA','RKIAAA','HHHHxx' -2018,5686,0,2,8,18,18,18,18,2018,2018,36,37,'QZAAAA','SKIAAA','OOOOxx' -217,5687,1,1,7,17,17,217,217,217,217,34,35,'JIAAAA','TKIAAA','VVVVxx' -6793,5688,1,1,3,13,93,793,793,1793,6793,186,187,'HBAAAA','UKIAAA','AAAAxx' -7280,5689,0,0,0,0,80,280,1280,2280,7280,160,161,'AUAAAA','VKIAAA','HHHHxx' -2168,5690,0,0,8,8,68,168,168,2168,2168,136,137,'KFAAAA','WKIAAA','OOOOxx' -5259,5691,1,3,9,19,59,259,1259,259,5259,118,119,'HUAAAA','XKIAAA','VVVVxx' -6019,5692,1,3,9,19,19,19,19,1019,6019,38,39,'NXAAAA','YKIAAA','AAAAxx' -877,5693,1,1,7,17,77,877,877,877,877,154,155,'THAAAA','ZKIAAA','HHHHxx' -4961,5694,1,1,1,1,61,961,961,4961,4961,122,123,'VIAAAA','ALIAAA','OOOOxx' -1873,5695,1,1,3,13,73,873,1873,1873,1873,146,147,'BUAAAA','BLIAAA','VVVVxx' -13,5696,1,1,3,13,13,13,13,13,13,26,27,'NAAAAA','CLIAAA','AAAAxx' -1537,5697,1,1,7,17,37,537,1537,1537,1537,74,75,'DHAAAA','DLIAAA','HHHHxx' -3129,5698,1,1,9,9,29,129,1129,3129,3129,58,59,'JQAAAA','ELIAAA','OOOOxx' -6473,5699,1,1,3,13,73,473,473,1473,6473,146,147,'ZOAAAA','FLIAAA','VVVVxx' -7865,5700,1,1,5,5,65,865,1865,2865,7865,130,131,'NQAAAA','GLIAAA','AAAAxx' -7822,5701,0,2,2,2,22,822,1822,2822,7822,44,45,'WOAAAA','HLIAAA','HHHHxx' -239,5702,1,3,9,19,39,239,239,239,239,78,79,'FJAAAA','ILIAAA','OOOOxx' -2062,5703,0,2,2,2,62,62,62,2062,2062,124,125,'IBAAAA','JLIAAA','VVVVxx' -762,5704,0,2,2,2,62,762,762,762,762,124,125,'IDAAAA','KLIAAA','AAAAxx' -3764,5705,0,0,4,4,64,764,1764,3764,3764,128,129,'UOAAAA','LLIAAA','HHHHxx' -465,5706,1,1,5,5,65,465,465,465,465,130,131,'XRAAAA','MLIAAA','OOOOxx' -2587,5707,1,3,7,7,87,587,587,2587,2587,174,175,'NVAAAA','NLIAAA','VVVVxx' -8402,5708,0,2,2,2,2,402,402,3402,8402,4,5,'ELAAAA','OLIAAA','AAAAxx' -1055,5709,1,3,5,15,55,55,1055,1055,1055,110,111,'POAAAA','PLIAAA','HHHHxx' -3072,5710,0,0,2,12,72,72,1072,3072,3072,144,145,'EOAAAA','QLIAAA','OOOOxx' -7359,5711,1,3,9,19,59,359,1359,2359,7359,118,119,'BXAAAA','RLIAAA','VVVVxx' -6558,5712,0,2,8,18,58,558,558,1558,6558,116,117,'GSAAAA','SLIAAA','AAAAxx' -48,5713,0,0,8,8,48,48,48,48,48,96,97,'WBAAAA','TLIAAA','HHHHxx' -5382,5714,0,2,2,2,82,382,1382,382,5382,164,165,'AZAAAA','ULIAAA','OOOOxx' -947,5715,1,3,7,7,47,947,947,947,947,94,95,'LKAAAA','VLIAAA','VVVVxx' -2644,5716,0,0,4,4,44,644,644,2644,2644,88,89,'SXAAAA','WLIAAA','AAAAxx' -7516,5717,0,0,6,16,16,516,1516,2516,7516,32,33,'CDAAAA','XLIAAA','HHHHxx' -2362,5718,0,2,2,2,62,362,362,2362,2362,124,125,'WMAAAA','YLIAAA','OOOOxx' -839,5719,1,3,9,19,39,839,839,839,839,78,79,'HGAAAA','ZLIAAA','VVVVxx' -2216,5720,0,0,6,16,16,216,216,2216,2216,32,33,'GHAAAA','AMIAAA','AAAAxx' -7673,5721,1,1,3,13,73,673,1673,2673,7673,146,147,'DJAAAA','BMIAAA','HHHHxx' -8173,5722,1,1,3,13,73,173,173,3173,8173,146,147,'JCAAAA','CMIAAA','OOOOxx' -1630,5723,0,2,0,10,30,630,1630,1630,1630,60,61,'SKAAAA','DMIAAA','VVVVxx' -9057,5724,1,1,7,17,57,57,1057,4057,9057,114,115,'JKAAAA','EMIAAA','AAAAxx' -4392,5725,0,0,2,12,92,392,392,4392,4392,184,185,'YMAAAA','FMIAAA','HHHHxx' -3695,5726,1,3,5,15,95,695,1695,3695,3695,190,191,'DMAAAA','GMIAAA','OOOOxx' -5751,5727,1,3,1,11,51,751,1751,751,5751,102,103,'FNAAAA','HMIAAA','VVVVxx' -5745,5728,1,1,5,5,45,745,1745,745,5745,90,91,'ZMAAAA','IMIAAA','AAAAxx' -7945,5729,1,1,5,5,45,945,1945,2945,7945,90,91,'PTAAAA','JMIAAA','HHHHxx' -5174,5730,0,2,4,14,74,174,1174,174,5174,148,149,'ARAAAA','KMIAAA','OOOOxx' -3829,5731,1,1,9,9,29,829,1829,3829,3829,58,59,'HRAAAA','LMIAAA','VVVVxx' -3317,5732,1,1,7,17,17,317,1317,3317,3317,34,35,'PXAAAA','MMIAAA','AAAAxx' -4253,5733,1,1,3,13,53,253,253,4253,4253,106,107,'PHAAAA','NMIAAA','HHHHxx' -1291,5734,1,3,1,11,91,291,1291,1291,1291,182,183,'RXAAAA','OMIAAA','OOOOxx' -3266,5735,0,2,6,6,66,266,1266,3266,3266,132,133,'QVAAAA','PMIAAA','VVVVxx' -2939,5736,1,3,9,19,39,939,939,2939,2939,78,79,'BJAAAA','QMIAAA','AAAAxx' -2755,5737,1,3,5,15,55,755,755,2755,2755,110,111,'ZBAAAA','RMIAAA','HHHHxx' -6844,5738,0,0,4,4,44,844,844,1844,6844,88,89,'GDAAAA','SMIAAA','OOOOxx' -8594,5739,0,2,4,14,94,594,594,3594,8594,188,189,'OSAAAA','TMIAAA','VVVVxx' -704,5740,0,0,4,4,4,704,704,704,704,8,9,'CBAAAA','UMIAAA','AAAAxx' -1681,5741,1,1,1,1,81,681,1681,1681,1681,162,163,'RMAAAA','VMIAAA','HHHHxx' -364,5742,0,0,4,4,64,364,364,364,364,128,129,'AOAAAA','WMIAAA','OOOOxx' -2928,5743,0,0,8,8,28,928,928,2928,2928,56,57,'QIAAAA','XMIAAA','VVVVxx' -117,5744,1,1,7,17,17,117,117,117,117,34,35,'NEAAAA','YMIAAA','AAAAxx' -96,5745,0,0,6,16,96,96,96,96,96,192,193,'SDAAAA','ZMIAAA','HHHHxx' -7796,5746,0,0,6,16,96,796,1796,2796,7796,192,193,'WNAAAA','ANIAAA','OOOOxx' -3101,5747,1,1,1,1,1,101,1101,3101,3101,2,3,'HPAAAA','BNIAAA','VVVVxx' -3397,5748,1,1,7,17,97,397,1397,3397,3397,194,195,'RAAAAA','CNIAAA','AAAAxx' -1605,5749,1,1,5,5,5,605,1605,1605,1605,10,11,'TJAAAA','DNIAAA','HHHHxx' -4881,5750,1,1,1,1,81,881,881,4881,4881,162,163,'TFAAAA','ENIAAA','OOOOxx' -4521,5751,1,1,1,1,21,521,521,4521,4521,42,43,'XRAAAA','FNIAAA','VVVVxx' -6430,5752,0,2,0,10,30,430,430,1430,6430,60,61,'INAAAA','GNIAAA','AAAAxx' -282,5753,0,2,2,2,82,282,282,282,282,164,165,'WKAAAA','HNIAAA','HHHHxx' -9645,5754,1,1,5,5,45,645,1645,4645,9645,90,91,'ZGAAAA','INIAAA','OOOOxx' -8946,5755,0,2,6,6,46,946,946,3946,8946,92,93,'CGAAAA','JNIAAA','VVVVxx' -5064,5756,0,0,4,4,64,64,1064,64,5064,128,129,'UMAAAA','KNIAAA','AAAAxx' -7470,5757,0,2,0,10,70,470,1470,2470,7470,140,141,'IBAAAA','LNIAAA','HHHHxx' -5886,5758,0,2,6,6,86,886,1886,886,5886,172,173,'KSAAAA','MNIAAA','OOOOxx' -6280,5759,0,0,0,0,80,280,280,1280,6280,160,161,'OHAAAA','NNIAAA','VVVVxx' -5247,5760,1,3,7,7,47,247,1247,247,5247,94,95,'VTAAAA','ONIAAA','AAAAxx' -412,5761,0,0,2,12,12,412,412,412,412,24,25,'WPAAAA','PNIAAA','HHHHxx' -5342,5762,0,2,2,2,42,342,1342,342,5342,84,85,'MXAAAA','QNIAAA','OOOOxx' -2271,5763,1,3,1,11,71,271,271,2271,2271,142,143,'JJAAAA','RNIAAA','VVVVxx' -849,5764,1,1,9,9,49,849,849,849,849,98,99,'RGAAAA','SNIAAA','AAAAxx' -1885,5765,1,1,5,5,85,885,1885,1885,1885,170,171,'NUAAAA','TNIAAA','HHHHxx' -5620,5766,0,0,0,0,20,620,1620,620,5620,40,41,'EIAAAA','UNIAAA','OOOOxx' -7079,5767,1,3,9,19,79,79,1079,2079,7079,158,159,'HMAAAA','VNIAAA','VVVVxx' -5819,5768,1,3,9,19,19,819,1819,819,5819,38,39,'VPAAAA','WNIAAA','AAAAxx' -7497,5769,1,1,7,17,97,497,1497,2497,7497,194,195,'JCAAAA','XNIAAA','HHHHxx' -5993,5770,1,1,3,13,93,993,1993,993,5993,186,187,'NWAAAA','YNIAAA','OOOOxx' -3739,5771,1,3,9,19,39,739,1739,3739,3739,78,79,'VNAAAA','ZNIAAA','VVVVxx' -6296,5772,0,0,6,16,96,296,296,1296,6296,192,193,'EIAAAA','AOIAAA','AAAAxx' -2716,5773,0,0,6,16,16,716,716,2716,2716,32,33,'MAAAAA','BOIAAA','HHHHxx' -1130,5774,0,2,0,10,30,130,1130,1130,1130,60,61,'MRAAAA','COIAAA','OOOOxx' -5593,5775,1,1,3,13,93,593,1593,593,5593,186,187,'DHAAAA','DOIAAA','VVVVxx' -6972,5776,0,0,2,12,72,972,972,1972,6972,144,145,'EIAAAA','EOIAAA','AAAAxx' -8360,5777,0,0,0,0,60,360,360,3360,8360,120,121,'OJAAAA','FOIAAA','HHHHxx' -6448,5778,0,0,8,8,48,448,448,1448,6448,96,97,'AOAAAA','GOIAAA','OOOOxx' -3689,5779,1,1,9,9,89,689,1689,3689,3689,178,179,'XLAAAA','HOIAAA','VVVVxx' -7951,5780,1,3,1,11,51,951,1951,2951,7951,102,103,'VTAAAA','IOIAAA','AAAAxx' -2974,5781,0,2,4,14,74,974,974,2974,2974,148,149,'KKAAAA','JOIAAA','HHHHxx' -6600,5782,0,0,0,0,0,600,600,1600,6600,0,1,'WTAAAA','KOIAAA','OOOOxx' -4662,5783,0,2,2,2,62,662,662,4662,4662,124,125,'IXAAAA','LOIAAA','VVVVxx' -4765,5784,1,1,5,5,65,765,765,4765,4765,130,131,'HBAAAA','MOIAAA','AAAAxx' -355,5785,1,3,5,15,55,355,355,355,355,110,111,'RNAAAA','NOIAAA','HHHHxx' -6228,5786,0,0,8,8,28,228,228,1228,6228,56,57,'OFAAAA','OOIAAA','OOOOxx' -964,5787,0,0,4,4,64,964,964,964,964,128,129,'CLAAAA','POIAAA','VVVVxx' -3082,5788,0,2,2,2,82,82,1082,3082,3082,164,165,'OOAAAA','QOIAAA','AAAAxx' -7028,5789,0,0,8,8,28,28,1028,2028,7028,56,57,'IKAAAA','ROIAAA','HHHHxx' -4505,5790,1,1,5,5,5,505,505,4505,4505,10,11,'HRAAAA','SOIAAA','OOOOxx' -8961,5791,1,1,1,1,61,961,961,3961,8961,122,123,'RGAAAA','TOIAAA','VVVVxx' -9571,5792,1,3,1,11,71,571,1571,4571,9571,142,143,'DEAAAA','UOIAAA','AAAAxx' -9394,5793,0,2,4,14,94,394,1394,4394,9394,188,189,'IXAAAA','VOIAAA','HHHHxx' -4245,5794,1,1,5,5,45,245,245,4245,4245,90,91,'HHAAAA','WOIAAA','OOOOxx' -7560,5795,0,0,0,0,60,560,1560,2560,7560,120,121,'UEAAAA','XOIAAA','VVVVxx' -2907,5796,1,3,7,7,7,907,907,2907,2907,14,15,'VHAAAA','YOIAAA','AAAAxx' -7817,5797,1,1,7,17,17,817,1817,2817,7817,34,35,'ROAAAA','ZOIAAA','HHHHxx' -5408,5798,0,0,8,8,8,408,1408,408,5408,16,17,'AAAAAA','APIAAA','OOOOxx' -8092,5799,0,0,2,12,92,92,92,3092,8092,184,185,'GZAAAA','BPIAAA','VVVVxx' -1309,5800,1,1,9,9,9,309,1309,1309,1309,18,19,'JYAAAA','CPIAAA','AAAAxx' -6673,5801,1,1,3,13,73,673,673,1673,6673,146,147,'RWAAAA','DPIAAA','HHHHxx' -1245,5802,1,1,5,5,45,245,1245,1245,1245,90,91,'XVAAAA','EPIAAA','OOOOxx' -6790,5803,0,2,0,10,90,790,790,1790,6790,180,181,'EBAAAA','FPIAAA','VVVVxx' -8380,5804,0,0,0,0,80,380,380,3380,8380,160,161,'IKAAAA','GPIAAA','AAAAxx' -5786,5805,0,2,6,6,86,786,1786,786,5786,172,173,'OOAAAA','HPIAAA','HHHHxx' -9590,5806,0,2,0,10,90,590,1590,4590,9590,180,181,'WEAAAA','IPIAAA','OOOOxx' -5763,5807,1,3,3,3,63,763,1763,763,5763,126,127,'RNAAAA','JPIAAA','VVVVxx' -1345,5808,1,1,5,5,45,345,1345,1345,1345,90,91,'TZAAAA','KPIAAA','AAAAxx' -3480,5809,0,0,0,0,80,480,1480,3480,3480,160,161,'WDAAAA','LPIAAA','HHHHxx' -7864,5810,0,0,4,4,64,864,1864,2864,7864,128,129,'MQAAAA','MPIAAA','OOOOxx' -4853,5811,1,1,3,13,53,853,853,4853,4853,106,107,'REAAAA','NPIAAA','VVVVxx' -1445,5812,1,1,5,5,45,445,1445,1445,1445,90,91,'PDAAAA','OPIAAA','AAAAxx' -170,5813,0,2,0,10,70,170,170,170,170,140,141,'OGAAAA','PPIAAA','HHHHxx' -7348,5814,0,0,8,8,48,348,1348,2348,7348,96,97,'QWAAAA','QPIAAA','OOOOxx' -3920,5815,0,0,0,0,20,920,1920,3920,3920,40,41,'UUAAAA','RPIAAA','VVVVxx' -3307,5816,1,3,7,7,7,307,1307,3307,3307,14,15,'FXAAAA','SPIAAA','AAAAxx' -4584,5817,0,0,4,4,84,584,584,4584,4584,168,169,'IUAAAA','TPIAAA','HHHHxx' -3344,5818,0,0,4,4,44,344,1344,3344,3344,88,89,'QYAAAA','UPIAAA','OOOOxx' -4360,5819,0,0,0,0,60,360,360,4360,4360,120,121,'SLAAAA','VPIAAA','VVVVxx' -8757,5820,1,1,7,17,57,757,757,3757,8757,114,115,'VYAAAA','WPIAAA','AAAAxx' -4315,5821,1,3,5,15,15,315,315,4315,4315,30,31,'ZJAAAA','XPIAAA','HHHHxx' -5243,5822,1,3,3,3,43,243,1243,243,5243,86,87,'RTAAAA','YPIAAA','OOOOxx' -8550,5823,0,2,0,10,50,550,550,3550,8550,100,101,'WQAAAA','ZPIAAA','VVVVxx' -159,5824,1,3,9,19,59,159,159,159,159,118,119,'DGAAAA','AQIAAA','AAAAxx' -4710,5825,0,2,0,10,10,710,710,4710,4710,20,21,'EZAAAA','BQIAAA','HHHHxx' -7179,5826,1,3,9,19,79,179,1179,2179,7179,158,159,'DQAAAA','CQIAAA','OOOOxx' -2509,5827,1,1,9,9,9,509,509,2509,2509,18,19,'NSAAAA','DQIAAA','VVVVxx' -6981,5828,1,1,1,1,81,981,981,1981,6981,162,163,'NIAAAA','EQIAAA','AAAAxx' -5060,5829,0,0,0,0,60,60,1060,60,5060,120,121,'QMAAAA','FQIAAA','HHHHxx' -5601,5830,1,1,1,1,1,601,1601,601,5601,2,3,'LHAAAA','GQIAAA','OOOOxx' -703,5831,1,3,3,3,3,703,703,703,703,6,7,'BBAAAA','HQIAAA','VVVVxx' -8719,5832,1,3,9,19,19,719,719,3719,8719,38,39,'JXAAAA','IQIAAA','AAAAxx' -1570,5833,0,2,0,10,70,570,1570,1570,1570,140,141,'KIAAAA','JQIAAA','HHHHxx' -1036,5834,0,0,6,16,36,36,1036,1036,1036,72,73,'WNAAAA','KQIAAA','OOOOxx' -6703,5835,1,3,3,3,3,703,703,1703,6703,6,7,'VXAAAA','LQIAAA','VVVVxx' -252,5836,0,0,2,12,52,252,252,252,252,104,105,'SJAAAA','MQIAAA','AAAAxx' -631,5837,1,3,1,11,31,631,631,631,631,62,63,'HYAAAA','NQIAAA','HHHHxx' -5098,5838,0,2,8,18,98,98,1098,98,5098,196,197,'COAAAA','OQIAAA','OOOOxx' -8346,5839,0,2,6,6,46,346,346,3346,8346,92,93,'AJAAAA','PQIAAA','VVVVxx' -4910,5840,0,2,0,10,10,910,910,4910,4910,20,21,'WGAAAA','QQIAAA','AAAAxx' -559,5841,1,3,9,19,59,559,559,559,559,118,119,'NVAAAA','RQIAAA','HHHHxx' -1477,5842,1,1,7,17,77,477,1477,1477,1477,154,155,'VEAAAA','SQIAAA','OOOOxx' -5115,5843,1,3,5,15,15,115,1115,115,5115,30,31,'TOAAAA','TQIAAA','VVVVxx' -8784,5844,0,0,4,4,84,784,784,3784,8784,168,169,'WZAAAA','UQIAAA','AAAAxx' -4422,5845,0,2,2,2,22,422,422,4422,4422,44,45,'COAAAA','VQIAAA','HHHHxx' -2702,5846,0,2,2,2,2,702,702,2702,2702,4,5,'YZAAAA','WQIAAA','OOOOxx' -9599,5847,1,3,9,19,99,599,1599,4599,9599,198,199,'FFAAAA','XQIAAA','VVVVxx' -2463,5848,1,3,3,3,63,463,463,2463,2463,126,127,'TQAAAA','YQIAAA','AAAAxx' -498,5849,0,2,8,18,98,498,498,498,498,196,197,'ETAAAA','ZQIAAA','HHHHxx' -494,5850,0,2,4,14,94,494,494,494,494,188,189,'ATAAAA','ARIAAA','OOOOxx' -8632,5851,0,0,2,12,32,632,632,3632,8632,64,65,'AUAAAA','BRIAAA','VVVVxx' -3449,5852,1,1,9,9,49,449,1449,3449,3449,98,99,'RCAAAA','CRIAAA','AAAAxx' -5888,5853,0,0,8,8,88,888,1888,888,5888,176,177,'MSAAAA','DRIAAA','HHHHxx' -2211,5854,1,3,1,11,11,211,211,2211,2211,22,23,'BHAAAA','ERIAAA','OOOOxx' -2835,5855,1,3,5,15,35,835,835,2835,2835,70,71,'BFAAAA','FRIAAA','VVVVxx' -4196,5856,0,0,6,16,96,196,196,4196,4196,192,193,'KFAAAA','GRIAAA','AAAAxx' -2177,5857,1,1,7,17,77,177,177,2177,2177,154,155,'TFAAAA','HRIAAA','HHHHxx' -1959,5858,1,3,9,19,59,959,1959,1959,1959,118,119,'JXAAAA','IRIAAA','OOOOxx' -5172,5859,0,0,2,12,72,172,1172,172,5172,144,145,'YQAAAA','JRIAAA','VVVVxx' -7898,5860,0,2,8,18,98,898,1898,2898,7898,196,197,'URAAAA','KRIAAA','AAAAxx' -5729,5861,1,1,9,9,29,729,1729,729,5729,58,59,'JMAAAA','LRIAAA','HHHHxx' -469,5862,1,1,9,9,69,469,469,469,469,138,139,'BSAAAA','MRIAAA','OOOOxx' -4456,5863,0,0,6,16,56,456,456,4456,4456,112,113,'KPAAAA','NRIAAA','VVVVxx' -3578,5864,0,2,8,18,78,578,1578,3578,3578,156,157,'QHAAAA','ORIAAA','AAAAxx' -8623,5865,1,3,3,3,23,623,623,3623,8623,46,47,'RTAAAA','PRIAAA','HHHHxx' -6749,5866,1,1,9,9,49,749,749,1749,6749,98,99,'PZAAAA','QRIAAA','OOOOxx' -6735,5867,1,3,5,15,35,735,735,1735,6735,70,71,'BZAAAA','RRIAAA','VVVVxx' -5197,5868,1,1,7,17,97,197,1197,197,5197,194,195,'XRAAAA','SRIAAA','AAAAxx' -2067,5869,1,3,7,7,67,67,67,2067,2067,134,135,'NBAAAA','TRIAAA','HHHHxx' -5600,5870,0,0,0,0,0,600,1600,600,5600,0,1,'KHAAAA','URIAAA','OOOOxx' -7741,5871,1,1,1,1,41,741,1741,2741,7741,82,83,'TLAAAA','VRIAAA','VVVVxx' -9925,5872,1,1,5,5,25,925,1925,4925,9925,50,51,'TRAAAA','WRIAAA','AAAAxx' -9685,5873,1,1,5,5,85,685,1685,4685,9685,170,171,'NIAAAA','XRIAAA','HHHHxx' -7622,5874,0,2,2,2,22,622,1622,2622,7622,44,45,'EHAAAA','YRIAAA','OOOOxx' -6859,5875,1,3,9,19,59,859,859,1859,6859,118,119,'VDAAAA','ZRIAAA','VVVVxx' -3094,5876,0,2,4,14,94,94,1094,3094,3094,188,189,'APAAAA','ASIAAA','AAAAxx' -2628,5877,0,0,8,8,28,628,628,2628,2628,56,57,'CXAAAA','BSIAAA','HHHHxx' -40,5878,0,0,0,0,40,40,40,40,40,80,81,'OBAAAA','CSIAAA','OOOOxx' -1644,5879,0,0,4,4,44,644,1644,1644,1644,88,89,'GLAAAA','DSIAAA','VVVVxx' -588,5880,0,0,8,8,88,588,588,588,588,176,177,'QWAAAA','ESIAAA','AAAAxx' -7522,5881,0,2,2,2,22,522,1522,2522,7522,44,45,'IDAAAA','FSIAAA','HHHHxx' -162,5882,0,2,2,2,62,162,162,162,162,124,125,'GGAAAA','GSIAAA','OOOOxx' -3610,5883,0,2,0,10,10,610,1610,3610,3610,20,21,'WIAAAA','HSIAAA','VVVVxx' -3561,5884,1,1,1,1,61,561,1561,3561,3561,122,123,'ZGAAAA','ISIAAA','AAAAxx' -8185,5885,1,1,5,5,85,185,185,3185,8185,170,171,'VCAAAA','JSIAAA','HHHHxx' -7237,5886,1,1,7,17,37,237,1237,2237,7237,74,75,'JSAAAA','KSIAAA','OOOOxx' -4592,5887,0,0,2,12,92,592,592,4592,4592,184,185,'QUAAAA','LSIAAA','VVVVxx' -7082,5888,0,2,2,2,82,82,1082,2082,7082,164,165,'KMAAAA','MSIAAA','AAAAxx' -4719,5889,1,3,9,19,19,719,719,4719,4719,38,39,'NZAAAA','NSIAAA','HHHHxx' -3879,5890,1,3,9,19,79,879,1879,3879,3879,158,159,'FTAAAA','OSIAAA','OOOOxx' -1662,5891,0,2,2,2,62,662,1662,1662,1662,124,125,'YLAAAA','PSIAAA','VVVVxx' -3995,5892,1,3,5,15,95,995,1995,3995,3995,190,191,'RXAAAA','QSIAAA','AAAAxx' -5828,5893,0,0,8,8,28,828,1828,828,5828,56,57,'EQAAAA','RSIAAA','HHHHxx' -4197,5894,1,1,7,17,97,197,197,4197,4197,194,195,'LFAAAA','SSIAAA','OOOOxx' -5146,5895,0,2,6,6,46,146,1146,146,5146,92,93,'YPAAAA','TSIAAA','VVVVxx' -753,5896,1,1,3,13,53,753,753,753,753,106,107,'ZCAAAA','USIAAA','AAAAxx' -7064,5897,0,0,4,4,64,64,1064,2064,7064,128,129,'SLAAAA','VSIAAA','HHHHxx' -1312,5898,0,0,2,12,12,312,1312,1312,1312,24,25,'MYAAAA','WSIAAA','OOOOxx' -5573,5899,1,1,3,13,73,573,1573,573,5573,146,147,'JGAAAA','XSIAAA','VVVVxx' -7634,5900,0,2,4,14,34,634,1634,2634,7634,68,69,'QHAAAA','YSIAAA','AAAAxx' -2459,5901,1,3,9,19,59,459,459,2459,2459,118,119,'PQAAAA','ZSIAAA','HHHHxx' -8636,5902,0,0,6,16,36,636,636,3636,8636,72,73,'EUAAAA','ATIAAA','OOOOxx' -5318,5903,0,2,8,18,18,318,1318,318,5318,36,37,'OWAAAA','BTIAAA','VVVVxx' -1064,5904,0,0,4,4,64,64,1064,1064,1064,128,129,'YOAAAA','CTIAAA','AAAAxx' -9779,5905,1,3,9,19,79,779,1779,4779,9779,158,159,'DMAAAA','DTIAAA','HHHHxx' -6512,5906,0,0,2,12,12,512,512,1512,6512,24,25,'MQAAAA','ETIAAA','OOOOxx' -3572,5907,0,0,2,12,72,572,1572,3572,3572,144,145,'KHAAAA','FTIAAA','VVVVxx' -816,5908,0,0,6,16,16,816,816,816,816,32,33,'KFAAAA','GTIAAA','AAAAxx' -3978,5909,0,2,8,18,78,978,1978,3978,3978,156,157,'AXAAAA','HTIAAA','HHHHxx' -5390,5910,0,2,0,10,90,390,1390,390,5390,180,181,'IZAAAA','ITIAAA','OOOOxx' -4685,5911,1,1,5,5,85,685,685,4685,4685,170,171,'FYAAAA','JTIAAA','VVVVxx' -3003,5912,1,3,3,3,3,3,1003,3003,3003,6,7,'NLAAAA','KTIAAA','AAAAxx' -2638,5913,0,2,8,18,38,638,638,2638,2638,76,77,'MXAAAA','LTIAAA','HHHHxx' -9716,5914,0,0,6,16,16,716,1716,4716,9716,32,33,'SJAAAA','MTIAAA','OOOOxx' -9598,5915,0,2,8,18,98,598,1598,4598,9598,196,197,'EFAAAA','NTIAAA','VVVVxx' -9501,5916,1,1,1,1,1,501,1501,4501,9501,2,3,'LBAAAA','OTIAAA','AAAAxx' -1704,5917,0,0,4,4,4,704,1704,1704,1704,8,9,'ONAAAA','PTIAAA','HHHHxx' -8609,5918,1,1,9,9,9,609,609,3609,8609,18,19,'DTAAAA','QTIAAA','OOOOxx' -5211,5919,1,3,1,11,11,211,1211,211,5211,22,23,'LSAAAA','RTIAAA','VVVVxx' -3605,5920,1,1,5,5,5,605,1605,3605,3605,10,11,'RIAAAA','STIAAA','AAAAxx' -8730,5921,0,2,0,10,30,730,730,3730,8730,60,61,'UXAAAA','TTIAAA','HHHHxx' -4208,5922,0,0,8,8,8,208,208,4208,4208,16,17,'WFAAAA','UTIAAA','OOOOxx' -7784,5923,0,0,4,4,84,784,1784,2784,7784,168,169,'KNAAAA','VTIAAA','VVVVxx' -7501,5924,1,1,1,1,1,501,1501,2501,7501,2,3,'NCAAAA','WTIAAA','AAAAxx' -7862,5925,0,2,2,2,62,862,1862,2862,7862,124,125,'KQAAAA','XTIAAA','HHHHxx' -8922,5926,0,2,2,2,22,922,922,3922,8922,44,45,'EFAAAA','YTIAAA','OOOOxx' -3857,5927,1,1,7,17,57,857,1857,3857,3857,114,115,'JSAAAA','ZTIAAA','VVVVxx' -6393,5928,1,1,3,13,93,393,393,1393,6393,186,187,'XLAAAA','AUIAAA','AAAAxx' -506,5929,0,2,6,6,6,506,506,506,506,12,13,'MTAAAA','BUIAAA','HHHHxx' -4232,5930,0,0,2,12,32,232,232,4232,4232,64,65,'UGAAAA','CUIAAA','OOOOxx' -8991,5931,1,3,1,11,91,991,991,3991,8991,182,183,'VHAAAA','DUIAAA','VVVVxx' -8578,5932,0,2,8,18,78,578,578,3578,8578,156,157,'YRAAAA','EUIAAA','AAAAxx' -3235,5933,1,3,5,15,35,235,1235,3235,3235,70,71,'LUAAAA','FUIAAA','HHHHxx' -963,5934,1,3,3,3,63,963,963,963,963,126,127,'BLAAAA','GUIAAA','OOOOxx' -113,5935,1,1,3,13,13,113,113,113,113,26,27,'JEAAAA','HUIAAA','VVVVxx' -8234,5936,0,2,4,14,34,234,234,3234,8234,68,69,'SEAAAA','IUIAAA','AAAAxx' -2613,5937,1,1,3,13,13,613,613,2613,2613,26,27,'NWAAAA','JUIAAA','HHHHxx' -5540,5938,0,0,0,0,40,540,1540,540,5540,80,81,'CFAAAA','KUIAAA','OOOOxx' -9727,5939,1,3,7,7,27,727,1727,4727,9727,54,55,'DKAAAA','LUIAAA','VVVVxx' -2229,5940,1,1,9,9,29,229,229,2229,2229,58,59,'THAAAA','MUIAAA','AAAAxx' -6242,5941,0,2,2,2,42,242,242,1242,6242,84,85,'CGAAAA','NUIAAA','HHHHxx' -2502,5942,0,2,2,2,2,502,502,2502,2502,4,5,'GSAAAA','OUIAAA','OOOOxx' -6212,5943,0,0,2,12,12,212,212,1212,6212,24,25,'YEAAAA','PUIAAA','VVVVxx' -3495,5944,1,3,5,15,95,495,1495,3495,3495,190,191,'LEAAAA','QUIAAA','AAAAxx' -2364,5945,0,0,4,4,64,364,364,2364,2364,128,129,'YMAAAA','RUIAAA','HHHHxx' -6777,5946,1,1,7,17,77,777,777,1777,6777,154,155,'RAAAAA','SUIAAA','OOOOxx' -9811,5947,1,3,1,11,11,811,1811,4811,9811,22,23,'JNAAAA','TUIAAA','VVVVxx' -1450,5948,0,2,0,10,50,450,1450,1450,1450,100,101,'UDAAAA','UUIAAA','AAAAxx' -5008,5949,0,0,8,8,8,8,1008,8,5008,16,17,'QKAAAA','VUIAAA','HHHHxx' -1318,5950,0,2,8,18,18,318,1318,1318,1318,36,37,'SYAAAA','WUIAAA','OOOOxx' -3373,5951,1,1,3,13,73,373,1373,3373,3373,146,147,'TZAAAA','XUIAAA','VVVVxx' -398,5952,0,2,8,18,98,398,398,398,398,196,197,'IPAAAA','YUIAAA','AAAAxx' -3804,5953,0,0,4,4,4,804,1804,3804,3804,8,9,'IQAAAA','ZUIAAA','HHHHxx' -9148,5954,0,0,8,8,48,148,1148,4148,9148,96,97,'WNAAAA','AVIAAA','OOOOxx' -4382,5955,0,2,2,2,82,382,382,4382,4382,164,165,'OMAAAA','BVIAAA','VVVVxx' -4026,5956,0,2,6,6,26,26,26,4026,4026,52,53,'WYAAAA','CVIAAA','AAAAxx' -7804,5957,0,0,4,4,4,804,1804,2804,7804,8,9,'EOAAAA','DVIAAA','HHHHxx' -6839,5958,1,3,9,19,39,839,839,1839,6839,78,79,'BDAAAA','EVIAAA','OOOOxx' -3756,5959,0,0,6,16,56,756,1756,3756,3756,112,113,'MOAAAA','FVIAAA','VVVVxx' -6734,5960,0,2,4,14,34,734,734,1734,6734,68,69,'AZAAAA','GVIAAA','AAAAxx' -2228,5961,0,0,8,8,28,228,228,2228,2228,56,57,'SHAAAA','HVIAAA','HHHHxx' -3273,5962,1,1,3,13,73,273,1273,3273,3273,146,147,'XVAAAA','IVIAAA','OOOOxx' -3708,5963,0,0,8,8,8,708,1708,3708,3708,16,17,'QMAAAA','JVIAAA','VVVVxx' -4320,5964,0,0,0,0,20,320,320,4320,4320,40,41,'EKAAAA','KVIAAA','AAAAxx' -74,5965,0,2,4,14,74,74,74,74,74,148,149,'WCAAAA','LVIAAA','HHHHxx' -2520,5966,0,0,0,0,20,520,520,2520,2520,40,41,'YSAAAA','MVIAAA','OOOOxx' -9619,5967,1,3,9,19,19,619,1619,4619,9619,38,39,'ZFAAAA','NVIAAA','VVVVxx' -1801,5968,1,1,1,1,1,801,1801,1801,1801,2,3,'HRAAAA','OVIAAA','AAAAxx' -6399,5969,1,3,9,19,99,399,399,1399,6399,198,199,'DMAAAA','PVIAAA','HHHHxx' -8313,5970,1,1,3,13,13,313,313,3313,8313,26,27,'THAAAA','QVIAAA','OOOOxx' -7003,5971,1,3,3,3,3,3,1003,2003,7003,6,7,'JJAAAA','RVIAAA','VVVVxx' -329,5972,1,1,9,9,29,329,329,329,329,58,59,'RMAAAA','SVIAAA','AAAAxx' -9090,5973,0,2,0,10,90,90,1090,4090,9090,180,181,'QLAAAA','TVIAAA','HHHHxx' -2299,5974,1,3,9,19,99,299,299,2299,2299,198,199,'LKAAAA','UVIAAA','OOOOxx' -3925,5975,1,1,5,5,25,925,1925,3925,3925,50,51,'ZUAAAA','VVIAAA','VVVVxx' -8145,5976,1,1,5,5,45,145,145,3145,8145,90,91,'HBAAAA','WVIAAA','AAAAxx' -8561,5977,1,1,1,1,61,561,561,3561,8561,122,123,'HRAAAA','XVIAAA','HHHHxx' -2797,5978,1,1,7,17,97,797,797,2797,2797,194,195,'PDAAAA','YVIAAA','OOOOxx' -1451,5979,1,3,1,11,51,451,1451,1451,1451,102,103,'VDAAAA','ZVIAAA','VVVVxx' -7977,5980,1,1,7,17,77,977,1977,2977,7977,154,155,'VUAAAA','AWIAAA','AAAAxx' -112,5981,0,0,2,12,12,112,112,112,112,24,25,'IEAAAA','BWIAAA','HHHHxx' -5265,5982,1,1,5,5,65,265,1265,265,5265,130,131,'NUAAAA','CWIAAA','OOOOxx' -3819,5983,1,3,9,19,19,819,1819,3819,3819,38,39,'XQAAAA','DWIAAA','VVVVxx' -3648,5984,0,0,8,8,48,648,1648,3648,3648,96,97,'IKAAAA','EWIAAA','AAAAxx' -6306,5985,0,2,6,6,6,306,306,1306,6306,12,13,'OIAAAA','FWIAAA','HHHHxx' -2385,5986,1,1,5,5,85,385,385,2385,2385,170,171,'TNAAAA','GWIAAA','OOOOxx' -9084,5987,0,0,4,4,84,84,1084,4084,9084,168,169,'KLAAAA','HWIAAA','VVVVxx' -4499,5988,1,3,9,19,99,499,499,4499,4499,198,199,'BRAAAA','IWIAAA','AAAAxx' -1154,5989,0,2,4,14,54,154,1154,1154,1154,108,109,'KSAAAA','JWIAAA','HHHHxx' -6800,5990,0,0,0,0,0,800,800,1800,6800,0,1,'OBAAAA','KWIAAA','OOOOxx' -8049,5991,1,1,9,9,49,49,49,3049,8049,98,99,'PXAAAA','LWIAAA','VVVVxx' -3733,5992,1,1,3,13,33,733,1733,3733,3733,66,67,'PNAAAA','MWIAAA','AAAAxx' -8496,5993,0,0,6,16,96,496,496,3496,8496,192,193,'UOAAAA','NWIAAA','HHHHxx' -9952,5994,0,0,2,12,52,952,1952,4952,9952,104,105,'USAAAA','OWIAAA','OOOOxx' -9792,5995,0,0,2,12,92,792,1792,4792,9792,184,185,'QMAAAA','PWIAAA','VVVVxx' -5081,5996,1,1,1,1,81,81,1081,81,5081,162,163,'LNAAAA','QWIAAA','AAAAxx' -7908,5997,0,0,8,8,8,908,1908,2908,7908,16,17,'ESAAAA','RWIAAA','HHHHxx' -5398,5998,0,2,8,18,98,398,1398,398,5398,196,197,'QZAAAA','SWIAAA','OOOOxx' -8423,5999,1,3,3,3,23,423,423,3423,8423,46,47,'ZLAAAA','TWIAAA','VVVVxx' -3362,6000,0,2,2,2,62,362,1362,3362,3362,124,125,'IZAAAA','UWIAAA','AAAAxx' -7767,6001,1,3,7,7,67,767,1767,2767,7767,134,135,'TMAAAA','VWIAAA','HHHHxx' -7063,6002,1,3,3,3,63,63,1063,2063,7063,126,127,'RLAAAA','WWIAAA','OOOOxx' -8350,6003,0,2,0,10,50,350,350,3350,8350,100,101,'EJAAAA','XWIAAA','VVVVxx' -6779,6004,1,3,9,19,79,779,779,1779,6779,158,159,'TAAAAA','YWIAAA','AAAAxx' -5742,6005,0,2,2,2,42,742,1742,742,5742,84,85,'WMAAAA','ZWIAAA','HHHHxx' -9045,6006,1,1,5,5,45,45,1045,4045,9045,90,91,'XJAAAA','AXIAAA','OOOOxx' -8792,6007,0,0,2,12,92,792,792,3792,8792,184,185,'EAAAAA','BXIAAA','VVVVxx' -8160,6008,0,0,0,0,60,160,160,3160,8160,120,121,'WBAAAA','CXIAAA','AAAAxx' -3061,6009,1,1,1,1,61,61,1061,3061,3061,122,123,'TNAAAA','DXIAAA','HHHHxx' -4721,6010,1,1,1,1,21,721,721,4721,4721,42,43,'PZAAAA','EXIAAA','OOOOxx' -9817,6011,1,1,7,17,17,817,1817,4817,9817,34,35,'PNAAAA','FXIAAA','VVVVxx' -9257,6012,1,1,7,17,57,257,1257,4257,9257,114,115,'BSAAAA','GXIAAA','AAAAxx' -7779,6013,1,3,9,19,79,779,1779,2779,7779,158,159,'FNAAAA','HXIAAA','HHHHxx' -2663,6014,1,3,3,3,63,663,663,2663,2663,126,127,'LYAAAA','IXIAAA','OOOOxx' -3885,6015,1,1,5,5,85,885,1885,3885,3885,170,171,'LTAAAA','JXIAAA','VVVVxx' -9469,6016,1,1,9,9,69,469,1469,4469,9469,138,139,'FAAAAA','KXIAAA','AAAAxx' -6766,6017,0,2,6,6,66,766,766,1766,6766,132,133,'GAAAAA','LXIAAA','HHHHxx' -7173,6018,1,1,3,13,73,173,1173,2173,7173,146,147,'XPAAAA','MXIAAA','OOOOxx' -4709,6019,1,1,9,9,9,709,709,4709,4709,18,19,'DZAAAA','NXIAAA','VVVVxx' -4210,6020,0,2,0,10,10,210,210,4210,4210,20,21,'YFAAAA','OXIAAA','AAAAxx' -3715,6021,1,3,5,15,15,715,1715,3715,3715,30,31,'XMAAAA','PXIAAA','HHHHxx' -5089,6022,1,1,9,9,89,89,1089,89,5089,178,179,'TNAAAA','QXIAAA','OOOOxx' -1639,6023,1,3,9,19,39,639,1639,1639,1639,78,79,'BLAAAA','RXIAAA','VVVVxx' -5757,6024,1,1,7,17,57,757,1757,757,5757,114,115,'LNAAAA','SXIAAA','AAAAxx' -3545,6025,1,1,5,5,45,545,1545,3545,3545,90,91,'JGAAAA','TXIAAA','HHHHxx' -709,6026,1,1,9,9,9,709,709,709,709,18,19,'HBAAAA','UXIAAA','OOOOxx' -6519,6027,1,3,9,19,19,519,519,1519,6519,38,39,'TQAAAA','VXIAAA','VVVVxx' -4341,6028,1,1,1,1,41,341,341,4341,4341,82,83,'ZKAAAA','WXIAAA','AAAAxx' -2381,6029,1,1,1,1,81,381,381,2381,2381,162,163,'PNAAAA','XXIAAA','HHHHxx' -7215,6030,1,3,5,15,15,215,1215,2215,7215,30,31,'NRAAAA','YXIAAA','OOOOxx' -9323,6031,1,3,3,3,23,323,1323,4323,9323,46,47,'PUAAAA','ZXIAAA','VVVVxx' -3593,6032,1,1,3,13,93,593,1593,3593,3593,186,187,'FIAAAA','AYIAAA','AAAAxx' -3123,6033,1,3,3,3,23,123,1123,3123,3123,46,47,'DQAAAA','BYIAAA','HHHHxx' -8673,6034,1,1,3,13,73,673,673,3673,8673,146,147,'PVAAAA','CYIAAA','OOOOxx' -5094,6035,0,2,4,14,94,94,1094,94,5094,188,189,'YNAAAA','DYIAAA','VVVVxx' -6477,6036,1,1,7,17,77,477,477,1477,6477,154,155,'DPAAAA','EYIAAA','AAAAxx' -9734,6037,0,2,4,14,34,734,1734,4734,9734,68,69,'KKAAAA','FYIAAA','HHHHxx' -2998,6038,0,2,8,18,98,998,998,2998,2998,196,197,'ILAAAA','GYIAAA','OOOOxx' -7807,6039,1,3,7,7,7,807,1807,2807,7807,14,15,'HOAAAA','HYIAAA','VVVVxx' -5739,6040,1,3,9,19,39,739,1739,739,5739,78,79,'TMAAAA','IYIAAA','AAAAxx' -138,6041,0,2,8,18,38,138,138,138,138,76,77,'IFAAAA','JYIAAA','HHHHxx' -2403,6042,1,3,3,3,3,403,403,2403,2403,6,7,'LOAAAA','KYIAAA','OOOOxx' -2484,6043,0,0,4,4,84,484,484,2484,2484,168,169,'ORAAAA','LYIAAA','VVVVxx' -2805,6044,1,1,5,5,5,805,805,2805,2805,10,11,'XDAAAA','MYIAAA','AAAAxx' -5189,6045,1,1,9,9,89,189,1189,189,5189,178,179,'PRAAAA','NYIAAA','HHHHxx' -8336,6046,0,0,6,16,36,336,336,3336,8336,72,73,'QIAAAA','OYIAAA','OOOOxx' -5241,6047,1,1,1,1,41,241,1241,241,5241,82,83,'PTAAAA','PYIAAA','VVVVxx' -2612,6048,0,0,2,12,12,612,612,2612,2612,24,25,'MWAAAA','QYIAAA','AAAAxx' -2571,6049,1,3,1,11,71,571,571,2571,2571,142,143,'XUAAAA','RYIAAA','HHHHxx' -926,6050,0,2,6,6,26,926,926,926,926,52,53,'QJAAAA','SYIAAA','OOOOxx' -337,6051,1,1,7,17,37,337,337,337,337,74,75,'ZMAAAA','TYIAAA','VVVVxx' -2821,6052,1,1,1,1,21,821,821,2821,2821,42,43,'NEAAAA','UYIAAA','AAAAxx' -2658,6053,0,2,8,18,58,658,658,2658,2658,116,117,'GYAAAA','VYIAAA','HHHHxx' -9054,6054,0,2,4,14,54,54,1054,4054,9054,108,109,'GKAAAA','WYIAAA','OOOOxx' -5492,6055,0,0,2,12,92,492,1492,492,5492,184,185,'GDAAAA','XYIAAA','VVVVxx' -7313,6056,1,1,3,13,13,313,1313,2313,7313,26,27,'HVAAAA','YYIAAA','AAAAxx' -75,6057,1,3,5,15,75,75,75,75,75,150,151,'XCAAAA','ZYIAAA','HHHHxx' -5489,6058,1,1,9,9,89,489,1489,489,5489,178,179,'DDAAAA','AZIAAA','OOOOxx' -8413,6059,1,1,3,13,13,413,413,3413,8413,26,27,'PLAAAA','BZIAAA','VVVVxx' -3693,6060,1,1,3,13,93,693,1693,3693,3693,186,187,'BMAAAA','CZIAAA','AAAAxx' -9820,6061,0,0,0,0,20,820,1820,4820,9820,40,41,'SNAAAA','DZIAAA','HHHHxx' -8157,6062,1,1,7,17,57,157,157,3157,8157,114,115,'TBAAAA','EZIAAA','OOOOxx' -4161,6063,1,1,1,1,61,161,161,4161,4161,122,123,'BEAAAA','FZIAAA','VVVVxx' -8339,6064,1,3,9,19,39,339,339,3339,8339,78,79,'TIAAAA','GZIAAA','AAAAxx' -4141,6065,1,1,1,1,41,141,141,4141,4141,82,83,'HDAAAA','HZIAAA','HHHHxx' -9001,6066,1,1,1,1,1,1,1001,4001,9001,2,3,'FIAAAA','IZIAAA','OOOOxx' -8247,6067,1,3,7,7,47,247,247,3247,8247,94,95,'FFAAAA','JZIAAA','VVVVxx' -1182,6068,0,2,2,2,82,182,1182,1182,1182,164,165,'MTAAAA','KZIAAA','AAAAxx' -9876,6069,0,0,6,16,76,876,1876,4876,9876,152,153,'WPAAAA','LZIAAA','HHHHxx' -4302,6070,0,2,2,2,2,302,302,4302,4302,4,5,'MJAAAA','MZIAAA','OOOOxx' -6674,6071,0,2,4,14,74,674,674,1674,6674,148,149,'SWAAAA','NZIAAA','VVVVxx' -4214,6072,0,2,4,14,14,214,214,4214,4214,28,29,'CGAAAA','OZIAAA','AAAAxx' -5584,6073,0,0,4,4,84,584,1584,584,5584,168,169,'UGAAAA','PZIAAA','HHHHxx' -265,6074,1,1,5,5,65,265,265,265,265,130,131,'FKAAAA','QZIAAA','OOOOxx' -9207,6075,1,3,7,7,7,207,1207,4207,9207,14,15,'DQAAAA','RZIAAA','VVVVxx' -9434,6076,0,2,4,14,34,434,1434,4434,9434,68,69,'WYAAAA','SZIAAA','AAAAxx' -2921,6077,1,1,1,1,21,921,921,2921,2921,42,43,'JIAAAA','TZIAAA','HHHHxx' -9355,6078,1,3,5,15,55,355,1355,4355,9355,110,111,'VVAAAA','UZIAAA','OOOOxx' -8538,6079,0,2,8,18,38,538,538,3538,8538,76,77,'KQAAAA','VZIAAA','VVVVxx' -4559,6080,1,3,9,19,59,559,559,4559,4559,118,119,'JTAAAA','WZIAAA','AAAAxx' -9175,6081,1,3,5,15,75,175,1175,4175,9175,150,151,'XOAAAA','XZIAAA','HHHHxx' -4489,6082,1,1,9,9,89,489,489,4489,4489,178,179,'RQAAAA','YZIAAA','OOOOxx' -1485,6083,1,1,5,5,85,485,1485,1485,1485,170,171,'DFAAAA','ZZIAAA','VVVVxx' -8853,6084,1,1,3,13,53,853,853,3853,8853,106,107,'NCAAAA','AAJAAA','AAAAxx' -9143,6085,1,3,3,3,43,143,1143,4143,9143,86,87,'RNAAAA','BAJAAA','HHHHxx' -9551,6086,1,3,1,11,51,551,1551,4551,9551,102,103,'JDAAAA','CAJAAA','OOOOxx' -49,6087,1,1,9,9,49,49,49,49,49,98,99,'XBAAAA','DAJAAA','VVVVxx' -8351,6088,1,3,1,11,51,351,351,3351,8351,102,103,'FJAAAA','EAJAAA','AAAAxx' -9748,6089,0,0,8,8,48,748,1748,4748,9748,96,97,'YKAAAA','FAJAAA','HHHHxx' -4536,6090,0,0,6,16,36,536,536,4536,4536,72,73,'MSAAAA','GAJAAA','OOOOxx' -930,6091,0,2,0,10,30,930,930,930,930,60,61,'UJAAAA','HAJAAA','VVVVxx' -2206,6092,0,2,6,6,6,206,206,2206,2206,12,13,'WGAAAA','IAJAAA','AAAAxx' -8004,6093,0,0,4,4,4,4,4,3004,8004,8,9,'WVAAAA','JAJAAA','HHHHxx' -219,6094,1,3,9,19,19,219,219,219,219,38,39,'LIAAAA','KAJAAA','OOOOxx' -2724,6095,0,0,4,4,24,724,724,2724,2724,48,49,'UAAAAA','LAJAAA','VVVVxx' -4868,6096,0,0,8,8,68,868,868,4868,4868,136,137,'GFAAAA','MAJAAA','AAAAxx' -5952,6097,0,0,2,12,52,952,1952,952,5952,104,105,'YUAAAA','NAJAAA','HHHHxx' -2094,6098,0,2,4,14,94,94,94,2094,2094,188,189,'OCAAAA','OAJAAA','OOOOxx' -5707,6099,1,3,7,7,7,707,1707,707,5707,14,15,'NLAAAA','PAJAAA','VVVVxx' -5200,6100,0,0,0,0,0,200,1200,200,5200,0,1,'ASAAAA','QAJAAA','AAAAxx' -967,6101,1,3,7,7,67,967,967,967,967,134,135,'FLAAAA','RAJAAA','HHHHxx' -1982,6102,0,2,2,2,82,982,1982,1982,1982,164,165,'GYAAAA','SAJAAA','OOOOxx' -3410,6103,0,2,0,10,10,410,1410,3410,3410,20,21,'EBAAAA','TAJAAA','VVVVxx' -174,6104,0,2,4,14,74,174,174,174,174,148,149,'SGAAAA','UAJAAA','AAAAxx' -9217,6105,1,1,7,17,17,217,1217,4217,9217,34,35,'NQAAAA','VAJAAA','HHHHxx' -9103,6106,1,3,3,3,3,103,1103,4103,9103,6,7,'DMAAAA','WAJAAA','OOOOxx' -868,6107,0,0,8,8,68,868,868,868,868,136,137,'KHAAAA','XAJAAA','VVVVxx' -8261,6108,1,1,1,1,61,261,261,3261,8261,122,123,'TFAAAA','YAJAAA','AAAAxx' -2720,6109,0,0,0,0,20,720,720,2720,2720,40,41,'QAAAAA','ZAJAAA','HHHHxx' -2999,6110,1,3,9,19,99,999,999,2999,2999,198,199,'JLAAAA','ABJAAA','OOOOxx' -769,6111,1,1,9,9,69,769,769,769,769,138,139,'PDAAAA','BBJAAA','VVVVxx' -4533,6112,1,1,3,13,33,533,533,4533,4533,66,67,'JSAAAA','CBJAAA','AAAAxx' -2030,6113,0,2,0,10,30,30,30,2030,2030,60,61,'CAAAAA','DBJAAA','HHHHxx' -5824,6114,0,0,4,4,24,824,1824,824,5824,48,49,'AQAAAA','EBJAAA','OOOOxx' -2328,6115,0,0,8,8,28,328,328,2328,2328,56,57,'OLAAAA','FBJAAA','VVVVxx' -9970,6116,0,2,0,10,70,970,1970,4970,9970,140,141,'MTAAAA','GBJAAA','AAAAxx' -3192,6117,0,0,2,12,92,192,1192,3192,3192,184,185,'USAAAA','HBJAAA','HHHHxx' -3387,6118,1,3,7,7,87,387,1387,3387,3387,174,175,'HAAAAA','IBJAAA','OOOOxx' -1936,6119,0,0,6,16,36,936,1936,1936,1936,72,73,'MWAAAA','JBJAAA','VVVVxx' -6934,6120,0,2,4,14,34,934,934,1934,6934,68,69,'SGAAAA','KBJAAA','AAAAxx' -5615,6121,1,3,5,15,15,615,1615,615,5615,30,31,'ZHAAAA','LBJAAA','HHHHxx' -2241,6122,1,1,1,1,41,241,241,2241,2241,82,83,'FIAAAA','MBJAAA','OOOOxx' -1842,6123,0,2,2,2,42,842,1842,1842,1842,84,85,'WSAAAA','NBJAAA','VVVVxx' -8044,6124,0,0,4,4,44,44,44,3044,8044,88,89,'KXAAAA','OBJAAA','AAAAxx' -8902,6125,0,2,2,2,2,902,902,3902,8902,4,5,'KEAAAA','PBJAAA','HHHHxx' -4519,6126,1,3,9,19,19,519,519,4519,4519,38,39,'VRAAAA','QBJAAA','OOOOxx' -492,6127,0,0,2,12,92,492,492,492,492,184,185,'YSAAAA','RBJAAA','VVVVxx' -2694,6128,0,2,4,14,94,694,694,2694,2694,188,189,'QZAAAA','SBJAAA','AAAAxx' -5861,6129,1,1,1,1,61,861,1861,861,5861,122,123,'LRAAAA','TBJAAA','HHHHxx' -2104,6130,0,0,4,4,4,104,104,2104,2104,8,9,'YCAAAA','UBJAAA','OOOOxx' -5376,6131,0,0,6,16,76,376,1376,376,5376,152,153,'UYAAAA','VBJAAA','VVVVxx' -3147,6132,1,3,7,7,47,147,1147,3147,3147,94,95,'BRAAAA','WBJAAA','AAAAxx' -9880,6133,0,0,0,0,80,880,1880,4880,9880,160,161,'AQAAAA','XBJAAA','HHHHxx' -6171,6134,1,3,1,11,71,171,171,1171,6171,142,143,'JDAAAA','YBJAAA','OOOOxx' -1850,6135,0,2,0,10,50,850,1850,1850,1850,100,101,'ETAAAA','ZBJAAA','VVVVxx' -1775,6136,1,3,5,15,75,775,1775,1775,1775,150,151,'HQAAAA','ACJAAA','AAAAxx' -9261,6137,1,1,1,1,61,261,1261,4261,9261,122,123,'FSAAAA','BCJAAA','HHHHxx' -9648,6138,0,0,8,8,48,648,1648,4648,9648,96,97,'CHAAAA','CCJAAA','OOOOxx' -7846,6139,0,2,6,6,46,846,1846,2846,7846,92,93,'UPAAAA','DCJAAA','VVVVxx' -1446,6140,0,2,6,6,46,446,1446,1446,1446,92,93,'QDAAAA','ECJAAA','AAAAxx' -3139,6141,1,3,9,19,39,139,1139,3139,3139,78,79,'TQAAAA','FCJAAA','HHHHxx' -6142,6142,0,2,2,2,42,142,142,1142,6142,84,85,'GCAAAA','GCJAAA','OOOOxx' -5812,6143,0,0,2,12,12,812,1812,812,5812,24,25,'OPAAAA','HCJAAA','VVVVxx' -6728,6144,0,0,8,8,28,728,728,1728,6728,56,57,'UYAAAA','ICJAAA','AAAAxx' -4428,6145,0,0,8,8,28,428,428,4428,4428,56,57,'IOAAAA','JCJAAA','HHHHxx' -502,6146,0,2,2,2,2,502,502,502,502,4,5,'ITAAAA','KCJAAA','OOOOxx' -2363,6147,1,3,3,3,63,363,363,2363,2363,126,127,'XMAAAA','LCJAAA','VVVVxx' -3808,6148,0,0,8,8,8,808,1808,3808,3808,16,17,'MQAAAA','MCJAAA','AAAAxx' -1010,6149,0,2,0,10,10,10,1010,1010,1010,20,21,'WMAAAA','NCJAAA','HHHHxx' -9565,6150,1,1,5,5,65,565,1565,4565,9565,130,131,'XDAAAA','OCJAAA','OOOOxx' -1587,6151,1,3,7,7,87,587,1587,1587,1587,174,175,'BJAAAA','PCJAAA','VVVVxx' -1474,6152,0,2,4,14,74,474,1474,1474,1474,148,149,'SEAAAA','QCJAAA','AAAAxx' -6215,6153,1,3,5,15,15,215,215,1215,6215,30,31,'BFAAAA','RCJAAA','HHHHxx' -2395,6154,1,3,5,15,95,395,395,2395,2395,190,191,'DOAAAA','SCJAAA','OOOOxx' -8753,6155,1,1,3,13,53,753,753,3753,8753,106,107,'RYAAAA','TCJAAA','VVVVxx' -2446,6156,0,2,6,6,46,446,446,2446,2446,92,93,'CQAAAA','UCJAAA','AAAAxx' -60,6157,0,0,0,0,60,60,60,60,60,120,121,'ICAAAA','VCJAAA','HHHHxx' -982,6158,0,2,2,2,82,982,982,982,982,164,165,'ULAAAA','WCJAAA','OOOOxx' -6489,6159,1,1,9,9,89,489,489,1489,6489,178,179,'PPAAAA','XCJAAA','VVVVxx' -5334,6160,0,2,4,14,34,334,1334,334,5334,68,69,'EXAAAA','YCJAAA','AAAAxx' -8540,6161,0,0,0,0,40,540,540,3540,8540,80,81,'MQAAAA','ZCJAAA','HHHHxx' -490,6162,0,2,0,10,90,490,490,490,490,180,181,'WSAAAA','ADJAAA','OOOOxx' -6763,6163,1,3,3,3,63,763,763,1763,6763,126,127,'DAAAAA','BDJAAA','VVVVxx' -8273,6164,1,1,3,13,73,273,273,3273,8273,146,147,'FGAAAA','CDJAAA','AAAAxx' -8327,6165,1,3,7,7,27,327,327,3327,8327,54,55,'HIAAAA','DDJAAA','HHHHxx' -8541,6166,1,1,1,1,41,541,541,3541,8541,82,83,'NQAAAA','EDJAAA','OOOOxx' -3459,6167,1,3,9,19,59,459,1459,3459,3459,118,119,'BDAAAA','FDJAAA','VVVVxx' -5557,6168,1,1,7,17,57,557,1557,557,5557,114,115,'TFAAAA','GDJAAA','AAAAxx' -158,6169,0,2,8,18,58,158,158,158,158,116,117,'CGAAAA','HDJAAA','HHHHxx' -1741,6170,1,1,1,1,41,741,1741,1741,1741,82,83,'ZOAAAA','IDJAAA','OOOOxx' -8385,6171,1,1,5,5,85,385,385,3385,8385,170,171,'NKAAAA','JDJAAA','VVVVxx' -617,6172,1,1,7,17,17,617,617,617,617,34,35,'TXAAAA','KDJAAA','AAAAxx' -3560,6173,0,0,0,0,60,560,1560,3560,3560,120,121,'YGAAAA','LDJAAA','HHHHxx' -5216,6174,0,0,6,16,16,216,1216,216,5216,32,33,'QSAAAA','MDJAAA','OOOOxx' -8443,6175,1,3,3,3,43,443,443,3443,8443,86,87,'TMAAAA','NDJAAA','VVVVxx' -2700,6176,0,0,0,0,0,700,700,2700,2700,0,1,'WZAAAA','ODJAAA','AAAAxx' -3661,6177,1,1,1,1,61,661,1661,3661,3661,122,123,'VKAAAA','PDJAAA','HHHHxx' -4875,6178,1,3,5,15,75,875,875,4875,4875,150,151,'NFAAAA','QDJAAA','OOOOxx' -6721,6179,1,1,1,1,21,721,721,1721,6721,42,43,'NYAAAA','RDJAAA','VVVVxx' -3659,6180,1,3,9,19,59,659,1659,3659,3659,118,119,'TKAAAA','SDJAAA','AAAAxx' -8944,6181,0,0,4,4,44,944,944,3944,8944,88,89,'AGAAAA','TDJAAA','HHHHxx' -9133,6182,1,1,3,13,33,133,1133,4133,9133,66,67,'HNAAAA','UDJAAA','OOOOxx' -9882,6183,0,2,2,2,82,882,1882,4882,9882,164,165,'CQAAAA','VDJAAA','VVVVxx' -2102,6184,0,2,2,2,2,102,102,2102,2102,4,5,'WCAAAA','WDJAAA','AAAAxx' -9445,6185,1,1,5,5,45,445,1445,4445,9445,90,91,'HZAAAA','XDJAAA','HHHHxx' -5559,6186,1,3,9,19,59,559,1559,559,5559,118,119,'VFAAAA','YDJAAA','OOOOxx' -6096,6187,0,0,6,16,96,96,96,1096,6096,192,193,'MAAAAA','ZDJAAA','VVVVxx' -9336,6188,0,0,6,16,36,336,1336,4336,9336,72,73,'CVAAAA','AEJAAA','AAAAxx' -2162,6189,0,2,2,2,62,162,162,2162,2162,124,125,'EFAAAA','BEJAAA','HHHHxx' -7459,6190,1,3,9,19,59,459,1459,2459,7459,118,119,'XAAAAA','CEJAAA','OOOOxx' -3248,6191,0,0,8,8,48,248,1248,3248,3248,96,97,'YUAAAA','DEJAAA','VVVVxx' -9539,6192,1,3,9,19,39,539,1539,4539,9539,78,79,'XCAAAA','EEJAAA','AAAAxx' -4449,6193,1,1,9,9,49,449,449,4449,4449,98,99,'DPAAAA','FEJAAA','HHHHxx' -2809,6194,1,1,9,9,9,809,809,2809,2809,18,19,'BEAAAA','GEJAAA','OOOOxx' -7058,6195,0,2,8,18,58,58,1058,2058,7058,116,117,'MLAAAA','HEJAAA','VVVVxx' -3512,6196,0,0,2,12,12,512,1512,3512,3512,24,25,'CFAAAA','IEJAAA','AAAAxx' -2802,6197,0,2,2,2,2,802,802,2802,2802,4,5,'UDAAAA','JEJAAA','HHHHxx' -6289,6198,1,1,9,9,89,289,289,1289,6289,178,179,'XHAAAA','KEJAAA','OOOOxx' -1947,6199,1,3,7,7,47,947,1947,1947,1947,94,95,'XWAAAA','LEJAAA','VVVVxx' -9572,6200,0,0,2,12,72,572,1572,4572,9572,144,145,'EEAAAA','MEJAAA','AAAAxx' -2356,6201,0,0,6,16,56,356,356,2356,2356,112,113,'QMAAAA','NEJAAA','HHHHxx' -3039,6202,1,3,9,19,39,39,1039,3039,3039,78,79,'XMAAAA','OEJAAA','OOOOxx' -9452,6203,0,0,2,12,52,452,1452,4452,9452,104,105,'OZAAAA','PEJAAA','VVVVxx' -6328,6204,0,0,8,8,28,328,328,1328,6328,56,57,'KJAAAA','QEJAAA','AAAAxx' -7661,6205,1,1,1,1,61,661,1661,2661,7661,122,123,'RIAAAA','REJAAA','HHHHxx' -2566,6206,0,2,6,6,66,566,566,2566,2566,132,133,'SUAAAA','SEJAAA','OOOOxx' -6095,6207,1,3,5,15,95,95,95,1095,6095,190,191,'LAAAAA','TEJAAA','VVVVxx' -6367,6208,1,3,7,7,67,367,367,1367,6367,134,135,'XKAAAA','UEJAAA','AAAAxx' -3368,6209,0,0,8,8,68,368,1368,3368,3368,136,137,'OZAAAA','VEJAAA','HHHHxx' -5567,6210,1,3,7,7,67,567,1567,567,5567,134,135,'DGAAAA','WEJAAA','OOOOxx' -9834,6211,0,2,4,14,34,834,1834,4834,9834,68,69,'GOAAAA','XEJAAA','VVVVxx' -9695,6212,1,3,5,15,95,695,1695,4695,9695,190,191,'XIAAAA','YEJAAA','AAAAxx' -7291,6213,1,3,1,11,91,291,1291,2291,7291,182,183,'LUAAAA','ZEJAAA','HHHHxx' -4806,6214,0,2,6,6,6,806,806,4806,4806,12,13,'WCAAAA','AFJAAA','OOOOxx' -2000,6215,0,0,0,0,0,0,0,2000,2000,0,1,'YYAAAA','BFJAAA','VVVVxx' -6817,6216,1,1,7,17,17,817,817,1817,6817,34,35,'FCAAAA','CFJAAA','AAAAxx' -8487,6217,1,3,7,7,87,487,487,3487,8487,174,175,'LOAAAA','DFJAAA','HHHHxx' -3245,6218,1,1,5,5,45,245,1245,3245,3245,90,91,'VUAAAA','EFJAAA','OOOOxx' -632,6219,0,0,2,12,32,632,632,632,632,64,65,'IYAAAA','FFJAAA','VVVVxx' -8067,6220,1,3,7,7,67,67,67,3067,8067,134,135,'HYAAAA','GFJAAA','AAAAxx' -7140,6221,0,0,0,0,40,140,1140,2140,7140,80,81,'QOAAAA','HFJAAA','HHHHxx' -6802,6222,0,2,2,2,2,802,802,1802,6802,4,5,'QBAAAA','IFJAAA','OOOOxx' -3980,6223,0,0,0,0,80,980,1980,3980,3980,160,161,'CXAAAA','JFJAAA','VVVVxx' -1321,6224,1,1,1,1,21,321,1321,1321,1321,42,43,'VYAAAA','KFJAAA','AAAAxx' -2273,6225,1,1,3,13,73,273,273,2273,2273,146,147,'LJAAAA','LFJAAA','HHHHxx' -6787,6226,1,3,7,7,87,787,787,1787,6787,174,175,'BBAAAA','MFJAAA','OOOOxx' -9480,6227,0,0,0,0,80,480,1480,4480,9480,160,161,'QAAAAA','NFJAAA','VVVVxx' -9404,6228,0,0,4,4,4,404,1404,4404,9404,8,9,'SXAAAA','OFJAAA','AAAAxx' -3914,6229,0,2,4,14,14,914,1914,3914,3914,28,29,'OUAAAA','PFJAAA','HHHHxx' -5507,6230,1,3,7,7,7,507,1507,507,5507,14,15,'VDAAAA','QFJAAA','OOOOxx' -1813,6231,1,1,3,13,13,813,1813,1813,1813,26,27,'TRAAAA','RFJAAA','VVVVxx' -1999,6232,1,3,9,19,99,999,1999,1999,1999,198,199,'XYAAAA','SFJAAA','AAAAxx' -3848,6233,0,0,8,8,48,848,1848,3848,3848,96,97,'ASAAAA','TFJAAA','HHHHxx' -9693,6234,1,1,3,13,93,693,1693,4693,9693,186,187,'VIAAAA','UFJAAA','OOOOxx' -1353,6235,1,1,3,13,53,353,1353,1353,1353,106,107,'BAAAAA','VFJAAA','VVVVxx' -7218,6236,0,2,8,18,18,218,1218,2218,7218,36,37,'QRAAAA','WFJAAA','AAAAxx' -8223,6237,1,3,3,3,23,223,223,3223,8223,46,47,'HEAAAA','XFJAAA','HHHHxx' -9982,6238,0,2,2,2,82,982,1982,4982,9982,164,165,'YTAAAA','YFJAAA','OOOOxx' -8799,6239,1,3,9,19,99,799,799,3799,8799,198,199,'LAAAAA','ZFJAAA','VVVVxx' -8929,6240,1,1,9,9,29,929,929,3929,8929,58,59,'LFAAAA','AGJAAA','AAAAxx' -4626,6241,0,2,6,6,26,626,626,4626,4626,52,53,'YVAAAA','BGJAAA','HHHHxx' -7958,6242,0,2,8,18,58,958,1958,2958,7958,116,117,'CUAAAA','CGJAAA','OOOOxx' -3743,6243,1,3,3,3,43,743,1743,3743,3743,86,87,'ZNAAAA','DGJAAA','VVVVxx' -8165,6244,1,1,5,5,65,165,165,3165,8165,130,131,'BCAAAA','EGJAAA','AAAAxx' -7899,6245,1,3,9,19,99,899,1899,2899,7899,198,199,'VRAAAA','FGJAAA','HHHHxx' -8698,6246,0,2,8,18,98,698,698,3698,8698,196,197,'OWAAAA','GGJAAA','OOOOxx' -9270,6247,0,2,0,10,70,270,1270,4270,9270,140,141,'OSAAAA','HGJAAA','VVVVxx' -6348,6248,0,0,8,8,48,348,348,1348,6348,96,97,'EKAAAA','IGJAAA','AAAAxx' -6999,6249,1,3,9,19,99,999,999,1999,6999,198,199,'FJAAAA','JGJAAA','HHHHxx' -8467,6250,1,3,7,7,67,467,467,3467,8467,134,135,'RNAAAA','KGJAAA','OOOOxx' -3907,6251,1,3,7,7,7,907,1907,3907,3907,14,15,'HUAAAA','LGJAAA','VVVVxx' -4738,6252,0,2,8,18,38,738,738,4738,4738,76,77,'GAAAAA','MGJAAA','AAAAxx' -248,6253,0,0,8,8,48,248,248,248,248,96,97,'OJAAAA','NGJAAA','HHHHxx' -8769,6254,1,1,9,9,69,769,769,3769,8769,138,139,'HZAAAA','OGJAAA','OOOOxx' -9922,6255,0,2,2,2,22,922,1922,4922,9922,44,45,'QRAAAA','PGJAAA','VVVVxx' -778,6256,0,2,8,18,78,778,778,778,778,156,157,'YDAAAA','QGJAAA','AAAAxx' -1233,6257,1,1,3,13,33,233,1233,1233,1233,66,67,'LVAAAA','RGJAAA','HHHHxx' -1183,6258,1,3,3,3,83,183,1183,1183,1183,166,167,'NTAAAA','SGJAAA','OOOOxx' -2838,6259,0,2,8,18,38,838,838,2838,2838,76,77,'EFAAAA','TGJAAA','VVVVxx' -3096,6260,0,0,6,16,96,96,1096,3096,3096,192,193,'CPAAAA','UGJAAA','AAAAxx' -8566,6261,0,2,6,6,66,566,566,3566,8566,132,133,'MRAAAA','VGJAAA','HHHHxx' -7635,6262,1,3,5,15,35,635,1635,2635,7635,70,71,'RHAAAA','WGJAAA','OOOOxx' -5428,6263,0,0,8,8,28,428,1428,428,5428,56,57,'UAAAAA','XGJAAA','VVVVxx' -7430,6264,0,2,0,10,30,430,1430,2430,7430,60,61,'UZAAAA','YGJAAA','AAAAxx' -7210,6265,0,2,0,10,10,210,1210,2210,7210,20,21,'IRAAAA','ZGJAAA','HHHHxx' -4485,6266,1,1,5,5,85,485,485,4485,4485,170,171,'NQAAAA','AHJAAA','OOOOxx' -9623,6267,1,3,3,3,23,623,1623,4623,9623,46,47,'DGAAAA','BHJAAA','VVVVxx' -3670,6268,0,2,0,10,70,670,1670,3670,3670,140,141,'ELAAAA','CHJAAA','AAAAxx' -1575,6269,1,3,5,15,75,575,1575,1575,1575,150,151,'PIAAAA','DHJAAA','HHHHxx' -5874,6270,0,2,4,14,74,874,1874,874,5874,148,149,'YRAAAA','EHJAAA','OOOOxx' -673,6271,1,1,3,13,73,673,673,673,673,146,147,'XZAAAA','FHJAAA','VVVVxx' -9712,6272,0,0,2,12,12,712,1712,4712,9712,24,25,'OJAAAA','GHJAAA','AAAAxx' -7729,6273,1,1,9,9,29,729,1729,2729,7729,58,59,'HLAAAA','HHJAAA','HHHHxx' -4318,6274,0,2,8,18,18,318,318,4318,4318,36,37,'CKAAAA','IHJAAA','OOOOxx' -4143,6275,1,3,3,3,43,143,143,4143,4143,86,87,'JDAAAA','JHJAAA','VVVVxx' -4932,6276,0,0,2,12,32,932,932,4932,4932,64,65,'SHAAAA','KHJAAA','AAAAxx' -5835,6277,1,3,5,15,35,835,1835,835,5835,70,71,'LQAAAA','LHJAAA','HHHHxx' -4966,6278,0,2,6,6,66,966,966,4966,4966,132,133,'AJAAAA','MHJAAA','OOOOxx' -6711,6279,1,3,1,11,11,711,711,1711,6711,22,23,'DYAAAA','NHJAAA','VVVVxx' -3990,6280,0,2,0,10,90,990,1990,3990,3990,180,181,'MXAAAA','OHJAAA','AAAAxx' -990,6281,0,2,0,10,90,990,990,990,990,180,181,'CMAAAA','PHJAAA','HHHHxx' -220,6282,0,0,0,0,20,220,220,220,220,40,41,'MIAAAA','QHJAAA','OOOOxx' -5693,6283,1,1,3,13,93,693,1693,693,5693,186,187,'ZKAAAA','RHJAAA','VVVVxx' -3662,6284,0,2,2,2,62,662,1662,3662,3662,124,125,'WKAAAA','SHJAAA','AAAAxx' -7844,6285,0,0,4,4,44,844,1844,2844,7844,88,89,'SPAAAA','THJAAA','HHHHxx' -5515,6286,1,3,5,15,15,515,1515,515,5515,30,31,'DEAAAA','UHJAAA','OOOOxx' -5551,6287,1,3,1,11,51,551,1551,551,5551,102,103,'NFAAAA','VHJAAA','VVVVxx' -2358,6288,0,2,8,18,58,358,358,2358,2358,116,117,'SMAAAA','WHJAAA','AAAAxx' -8977,6289,1,1,7,17,77,977,977,3977,8977,154,155,'HHAAAA','XHJAAA','HHHHxx' -7040,6290,0,0,0,0,40,40,1040,2040,7040,80,81,'UKAAAA','YHJAAA','OOOOxx' -105,6291,1,1,5,5,5,105,105,105,105,10,11,'BEAAAA','ZHJAAA','VVVVxx' -4496,6292,0,0,6,16,96,496,496,4496,4496,192,193,'YQAAAA','AIJAAA','AAAAxx' -2254,6293,0,2,4,14,54,254,254,2254,2254,108,109,'SIAAAA','BIJAAA','HHHHxx' -411,6294,1,3,1,11,11,411,411,411,411,22,23,'VPAAAA','CIJAAA','OOOOxx' -2373,6295,1,1,3,13,73,373,373,2373,2373,146,147,'HNAAAA','DIJAAA','VVVVxx' -3477,6296,1,1,7,17,77,477,1477,3477,3477,154,155,'TDAAAA','EIJAAA','AAAAxx' -8964,6297,0,0,4,4,64,964,964,3964,8964,128,129,'UGAAAA','FIJAAA','HHHHxx' -8471,6298,1,3,1,11,71,471,471,3471,8471,142,143,'VNAAAA','GIJAAA','OOOOxx' -5776,6299,0,0,6,16,76,776,1776,776,5776,152,153,'EOAAAA','HIJAAA','VVVVxx' -9921,6300,1,1,1,1,21,921,1921,4921,9921,42,43,'PRAAAA','IIJAAA','AAAAxx' -7816,6301,0,0,6,16,16,816,1816,2816,7816,32,33,'QOAAAA','JIJAAA','HHHHxx' -2439,6302,1,3,9,19,39,439,439,2439,2439,78,79,'VPAAAA','KIJAAA','OOOOxx' -9298,6303,0,2,8,18,98,298,1298,4298,9298,196,197,'QTAAAA','LIJAAA','VVVVxx' -9424,6304,0,0,4,4,24,424,1424,4424,9424,48,49,'MYAAAA','MIJAAA','AAAAxx' -3252,6305,0,0,2,12,52,252,1252,3252,3252,104,105,'CVAAAA','NIJAAA','HHHHxx' -1401,6306,1,1,1,1,1,401,1401,1401,1401,2,3,'XBAAAA','OIJAAA','OOOOxx' -9632,6307,0,0,2,12,32,632,1632,4632,9632,64,65,'MGAAAA','PIJAAA','VVVVxx' -370,6308,0,2,0,10,70,370,370,370,370,140,141,'GOAAAA','QIJAAA','AAAAxx' -728,6309,0,0,8,8,28,728,728,728,728,56,57,'ACAAAA','RIJAAA','HHHHxx' -2888,6310,0,0,8,8,88,888,888,2888,2888,176,177,'CHAAAA','SIJAAA','OOOOxx' -1441,6311,1,1,1,1,41,441,1441,1441,1441,82,83,'LDAAAA','TIJAAA','VVVVxx' -8308,6312,0,0,8,8,8,308,308,3308,8308,16,17,'OHAAAA','UIJAAA','AAAAxx' -2165,6313,1,1,5,5,65,165,165,2165,2165,130,131,'HFAAAA','VIJAAA','HHHHxx' -6359,6314,1,3,9,19,59,359,359,1359,6359,118,119,'PKAAAA','WIJAAA','OOOOxx' -9637,6315,1,1,7,17,37,637,1637,4637,9637,74,75,'RGAAAA','XIJAAA','VVVVxx' -5208,6316,0,0,8,8,8,208,1208,208,5208,16,17,'ISAAAA','YIJAAA','AAAAxx' -4705,6317,1,1,5,5,5,705,705,4705,4705,10,11,'ZYAAAA','ZIJAAA','HHHHxx' -2341,6318,1,1,1,1,41,341,341,2341,2341,82,83,'BMAAAA','AJJAAA','OOOOxx' -8539,6319,1,3,9,19,39,539,539,3539,8539,78,79,'LQAAAA','BJJAAA','VVVVxx' -7528,6320,0,0,8,8,28,528,1528,2528,7528,56,57,'ODAAAA','CJJAAA','AAAAxx' -7969,6321,1,1,9,9,69,969,1969,2969,7969,138,139,'NUAAAA','DJJAAA','HHHHxx' -6381,6322,1,1,1,1,81,381,381,1381,6381,162,163,'LLAAAA','EJJAAA','OOOOxx' -4906,6323,0,2,6,6,6,906,906,4906,4906,12,13,'SGAAAA','FJJAAA','VVVVxx' -8697,6324,1,1,7,17,97,697,697,3697,8697,194,195,'NWAAAA','GJJAAA','AAAAxx' -6301,6325,1,1,1,1,1,301,301,1301,6301,2,3,'JIAAAA','HJJAAA','HHHHxx' -7554,6326,0,2,4,14,54,554,1554,2554,7554,108,109,'OEAAAA','IJJAAA','OOOOxx' -5107,6327,1,3,7,7,7,107,1107,107,5107,14,15,'LOAAAA','JJJAAA','VVVVxx' -5046,6328,0,2,6,6,46,46,1046,46,5046,92,93,'CMAAAA','KJJAAA','AAAAxx' -4063,6329,1,3,3,3,63,63,63,4063,4063,126,127,'HAAAAA','LJJAAA','HHHHxx' -7580,6330,0,0,0,0,80,580,1580,2580,7580,160,161,'OFAAAA','MJJAAA','OOOOxx' -2245,6331,1,1,5,5,45,245,245,2245,2245,90,91,'JIAAAA','NJJAAA','VVVVxx' -3711,6332,1,3,1,11,11,711,1711,3711,3711,22,23,'TMAAAA','OJJAAA','AAAAxx' -3220,6333,0,0,0,0,20,220,1220,3220,3220,40,41,'WTAAAA','PJJAAA','HHHHxx' -6463,6334,1,3,3,3,63,463,463,1463,6463,126,127,'POAAAA','QJJAAA','OOOOxx' -8196,6335,0,0,6,16,96,196,196,3196,8196,192,193,'GDAAAA','RJJAAA','VVVVxx' -9875,6336,1,3,5,15,75,875,1875,4875,9875,150,151,'VPAAAA','SJJAAA','AAAAxx' -1333,6337,1,1,3,13,33,333,1333,1333,1333,66,67,'HZAAAA','TJJAAA','HHHHxx' -7880,6338,0,0,0,0,80,880,1880,2880,7880,160,161,'CRAAAA','UJJAAA','OOOOxx' -2322,6339,0,2,2,2,22,322,322,2322,2322,44,45,'ILAAAA','VJJAAA','VVVVxx' -2163,6340,1,3,3,3,63,163,163,2163,2163,126,127,'FFAAAA','WJJAAA','AAAAxx' -421,6341,1,1,1,1,21,421,421,421,421,42,43,'FQAAAA','XJJAAA','HHHHxx' -2042,6342,0,2,2,2,42,42,42,2042,2042,84,85,'OAAAAA','YJJAAA','OOOOxx' -1424,6343,0,0,4,4,24,424,1424,1424,1424,48,49,'UCAAAA','ZJJAAA','VVVVxx' -7870,6344,0,2,0,10,70,870,1870,2870,7870,140,141,'SQAAAA','AKJAAA','AAAAxx' -2653,6345,1,1,3,13,53,653,653,2653,2653,106,107,'BYAAAA','BKJAAA','HHHHxx' -4216,6346,0,0,6,16,16,216,216,4216,4216,32,33,'EGAAAA','CKJAAA','OOOOxx' -1515,6347,1,3,5,15,15,515,1515,1515,1515,30,31,'HGAAAA','DKJAAA','VVVVxx' -7860,6348,0,0,0,0,60,860,1860,2860,7860,120,121,'IQAAAA','EKJAAA','AAAAxx' -2984,6349,0,0,4,4,84,984,984,2984,2984,168,169,'UKAAAA','FKJAAA','HHHHxx' -6269,6350,1,1,9,9,69,269,269,1269,6269,138,139,'DHAAAA','GKJAAA','OOOOxx' -2609,6351,1,1,9,9,9,609,609,2609,2609,18,19,'JWAAAA','HKJAAA','VVVVxx' -3671,6352,1,3,1,11,71,671,1671,3671,3671,142,143,'FLAAAA','IKJAAA','AAAAxx' -4544,6353,0,0,4,4,44,544,544,4544,4544,88,89,'USAAAA','JKJAAA','HHHHxx' -4668,6354,0,0,8,8,68,668,668,4668,4668,136,137,'OXAAAA','KKJAAA','OOOOxx' -2565,6355,1,1,5,5,65,565,565,2565,2565,130,131,'RUAAAA','LKJAAA','VVVVxx' -3126,6356,0,2,6,6,26,126,1126,3126,3126,52,53,'GQAAAA','MKJAAA','AAAAxx' -7573,6357,1,1,3,13,73,573,1573,2573,7573,146,147,'HFAAAA','NKJAAA','HHHHxx' -1476,6358,0,0,6,16,76,476,1476,1476,1476,152,153,'UEAAAA','OKJAAA','OOOOxx' -2146,6359,0,2,6,6,46,146,146,2146,2146,92,93,'OEAAAA','PKJAAA','VVVVxx' -9990,6360,0,2,0,10,90,990,1990,4990,9990,180,181,'GUAAAA','QKJAAA','AAAAxx' -2530,6361,0,2,0,10,30,530,530,2530,2530,60,61,'ITAAAA','RKJAAA','HHHHxx' -9288,6362,0,0,8,8,88,288,1288,4288,9288,176,177,'GTAAAA','SKJAAA','OOOOxx' -9755,6363,1,3,5,15,55,755,1755,4755,9755,110,111,'FLAAAA','TKJAAA','VVVVxx' -5305,6364,1,1,5,5,5,305,1305,305,5305,10,11,'BWAAAA','UKJAAA','AAAAxx' -2495,6365,1,3,5,15,95,495,495,2495,2495,190,191,'ZRAAAA','VKJAAA','HHHHxx' -5443,6366,1,3,3,3,43,443,1443,443,5443,86,87,'JBAAAA','WKJAAA','OOOOxx' -1930,6367,0,2,0,10,30,930,1930,1930,1930,60,61,'GWAAAA','XKJAAA','VVVVxx' -9134,6368,0,2,4,14,34,134,1134,4134,9134,68,69,'INAAAA','YKJAAA','AAAAxx' -2844,6369,0,0,4,4,44,844,844,2844,2844,88,89,'KFAAAA','ZKJAAA','HHHHxx' -896,6370,0,0,6,16,96,896,896,896,896,192,193,'MIAAAA','ALJAAA','OOOOxx' -1330,6371,0,2,0,10,30,330,1330,1330,1330,60,61,'EZAAAA','BLJAAA','VVVVxx' -8980,6372,0,0,0,0,80,980,980,3980,8980,160,161,'KHAAAA','CLJAAA','AAAAxx' -5940,6373,0,0,0,0,40,940,1940,940,5940,80,81,'MUAAAA','DLJAAA','HHHHxx' -6494,6374,0,2,4,14,94,494,494,1494,6494,188,189,'UPAAAA','ELJAAA','OOOOxx' -165,6375,1,1,5,5,65,165,165,165,165,130,131,'JGAAAA','FLJAAA','VVVVxx' -2510,6376,0,2,0,10,10,510,510,2510,2510,20,21,'OSAAAA','GLJAAA','AAAAxx' -9950,6377,0,2,0,10,50,950,1950,4950,9950,100,101,'SSAAAA','HLJAAA','HHHHxx' -3854,6378,0,2,4,14,54,854,1854,3854,3854,108,109,'GSAAAA','ILJAAA','OOOOxx' -7493,6379,1,1,3,13,93,493,1493,2493,7493,186,187,'FCAAAA','JLJAAA','VVVVxx' -4124,6380,0,0,4,4,24,124,124,4124,4124,48,49,'QCAAAA','KLJAAA','AAAAxx' -8563,6381,1,3,3,3,63,563,563,3563,8563,126,127,'JRAAAA','LLJAAA','HHHHxx' -8735,6382,1,3,5,15,35,735,735,3735,8735,70,71,'ZXAAAA','MLJAAA','OOOOxx' -9046,6383,0,2,6,6,46,46,1046,4046,9046,92,93,'YJAAAA','NLJAAA','VVVVxx' -1754,6384,0,2,4,14,54,754,1754,1754,1754,108,109,'MPAAAA','OLJAAA','AAAAxx' -6954,6385,0,2,4,14,54,954,954,1954,6954,108,109,'MHAAAA','PLJAAA','HHHHxx' -4953,6386,1,1,3,13,53,953,953,4953,4953,106,107,'NIAAAA','QLJAAA','OOOOxx' -8142,6387,0,2,2,2,42,142,142,3142,8142,84,85,'EBAAAA','RLJAAA','VVVVxx' -9661,6388,1,1,1,1,61,661,1661,4661,9661,122,123,'PHAAAA','SLJAAA','AAAAxx' -6415,6389,1,3,5,15,15,415,415,1415,6415,30,31,'TMAAAA','TLJAAA','HHHHxx' -5782,6390,0,2,2,2,82,782,1782,782,5782,164,165,'KOAAAA','ULJAAA','OOOOxx' -7721,6391,1,1,1,1,21,721,1721,2721,7721,42,43,'ZKAAAA','VLJAAA','VVVVxx' -580,6392,0,0,0,0,80,580,580,580,580,160,161,'IWAAAA','WLJAAA','AAAAxx' -3784,6393,0,0,4,4,84,784,1784,3784,3784,168,169,'OPAAAA','XLJAAA','HHHHxx' -9810,6394,0,2,0,10,10,810,1810,4810,9810,20,21,'INAAAA','YLJAAA','OOOOxx' -8488,6395,0,0,8,8,88,488,488,3488,8488,176,177,'MOAAAA','ZLJAAA','VVVVxx' -6214,6396,0,2,4,14,14,214,214,1214,6214,28,29,'AFAAAA','AMJAAA','AAAAxx' -9433,6397,1,1,3,13,33,433,1433,4433,9433,66,67,'VYAAAA','BMJAAA','HHHHxx' -9959,6398,1,3,9,19,59,959,1959,4959,9959,118,119,'BTAAAA','CMJAAA','OOOOxx' -554,6399,0,2,4,14,54,554,554,554,554,108,109,'IVAAAA','DMJAAA','VVVVxx' -6646,6400,0,2,6,6,46,646,646,1646,6646,92,93,'QVAAAA','EMJAAA','AAAAxx' -1138,6401,0,2,8,18,38,138,1138,1138,1138,76,77,'URAAAA','FMJAAA','HHHHxx' -9331,6402,1,3,1,11,31,331,1331,4331,9331,62,63,'XUAAAA','GMJAAA','OOOOxx' -7331,6403,1,3,1,11,31,331,1331,2331,7331,62,63,'ZVAAAA','HMJAAA','VVVVxx' -3482,6404,0,2,2,2,82,482,1482,3482,3482,164,165,'YDAAAA','IMJAAA','AAAAxx' -3795,6405,1,3,5,15,95,795,1795,3795,3795,190,191,'ZPAAAA','JMJAAA','HHHHxx' -2441,6406,1,1,1,1,41,441,441,2441,2441,82,83,'XPAAAA','KMJAAA','OOOOxx' -5229,6407,1,1,9,9,29,229,1229,229,5229,58,59,'DTAAAA','LMJAAA','VVVVxx' -7012,6408,0,0,2,12,12,12,1012,2012,7012,24,25,'SJAAAA','MMJAAA','AAAAxx' -7036,6409,0,0,6,16,36,36,1036,2036,7036,72,73,'QKAAAA','NMJAAA','HHHHxx' -8243,6410,1,3,3,3,43,243,243,3243,8243,86,87,'BFAAAA','OMJAAA','OOOOxx' -9320,6411,0,0,0,0,20,320,1320,4320,9320,40,41,'MUAAAA','PMJAAA','VVVVxx' -4693,6412,1,1,3,13,93,693,693,4693,4693,186,187,'NYAAAA','QMJAAA','AAAAxx' -6741,6413,1,1,1,1,41,741,741,1741,6741,82,83,'HZAAAA','RMJAAA','HHHHxx' -2997,6414,1,1,7,17,97,997,997,2997,2997,194,195,'HLAAAA','SMJAAA','OOOOxx' -4838,6415,0,2,8,18,38,838,838,4838,4838,76,77,'CEAAAA','TMJAAA','VVVVxx' -6945,6416,1,1,5,5,45,945,945,1945,6945,90,91,'DHAAAA','UMJAAA','AAAAxx' -8253,6417,1,1,3,13,53,253,253,3253,8253,106,107,'LFAAAA','VMJAAA','HHHHxx' -8989,6418,1,1,9,9,89,989,989,3989,8989,178,179,'THAAAA','WMJAAA','OOOOxx' -2640,6419,0,0,0,0,40,640,640,2640,2640,80,81,'OXAAAA','XMJAAA','VVVVxx' -5647,6420,1,3,7,7,47,647,1647,647,5647,94,95,'FJAAAA','YMJAAA','AAAAxx' -7186,6421,0,2,6,6,86,186,1186,2186,7186,172,173,'KQAAAA','ZMJAAA','HHHHxx' -3278,6422,0,2,8,18,78,278,1278,3278,3278,156,157,'CWAAAA','ANJAAA','OOOOxx' -8546,6423,0,2,6,6,46,546,546,3546,8546,92,93,'SQAAAA','BNJAAA','VVVVxx' -8297,6424,1,1,7,17,97,297,297,3297,8297,194,195,'DHAAAA','CNJAAA','AAAAxx' -9534,6425,0,2,4,14,34,534,1534,4534,9534,68,69,'SCAAAA','DNJAAA','HHHHxx' -9618,6426,0,2,8,18,18,618,1618,4618,9618,36,37,'YFAAAA','ENJAAA','OOOOxx' -8839,6427,1,3,9,19,39,839,839,3839,8839,78,79,'ZBAAAA','FNJAAA','VVVVxx' -7605,6428,1,1,5,5,5,605,1605,2605,7605,10,11,'NGAAAA','GNJAAA','AAAAxx' -6421,6429,1,1,1,1,21,421,421,1421,6421,42,43,'ZMAAAA','HNJAAA','HHHHxx' -3582,6430,0,2,2,2,82,582,1582,3582,3582,164,165,'UHAAAA','INJAAA','OOOOxx' -485,6431,1,1,5,5,85,485,485,485,485,170,171,'RSAAAA','JNJAAA','VVVVxx' -1925,6432,1,1,5,5,25,925,1925,1925,1925,50,51,'BWAAAA','KNJAAA','AAAAxx' -4296,6433,0,0,6,16,96,296,296,4296,4296,192,193,'GJAAAA','LNJAAA','HHHHxx' -8874,6434,0,2,4,14,74,874,874,3874,8874,148,149,'IDAAAA','MNJAAA','OOOOxx' -1443,6435,1,3,3,3,43,443,1443,1443,1443,86,87,'NDAAAA','NNJAAA','VVVVxx' -4239,6436,1,3,9,19,39,239,239,4239,4239,78,79,'BHAAAA','ONJAAA','AAAAxx' -9760,6437,0,0,0,0,60,760,1760,4760,9760,120,121,'KLAAAA','PNJAAA','HHHHxx' -136,6438,0,0,6,16,36,136,136,136,136,72,73,'GFAAAA','QNJAAA','OOOOxx' -6472,6439,0,0,2,12,72,472,472,1472,6472,144,145,'YOAAAA','RNJAAA','VVVVxx' -4896,6440,0,0,6,16,96,896,896,4896,4896,192,193,'IGAAAA','SNJAAA','AAAAxx' -9028,6441,0,0,8,8,28,28,1028,4028,9028,56,57,'GJAAAA','TNJAAA','HHHHxx' -8354,6442,0,2,4,14,54,354,354,3354,8354,108,109,'IJAAAA','UNJAAA','OOOOxx' -8648,6443,0,0,8,8,48,648,648,3648,8648,96,97,'QUAAAA','VNJAAA','VVVVxx' -918,6444,0,2,8,18,18,918,918,918,918,36,37,'IJAAAA','WNJAAA','AAAAxx' -6606,6445,0,2,6,6,6,606,606,1606,6606,12,13,'CUAAAA','XNJAAA','HHHHxx' -2462,6446,0,2,2,2,62,462,462,2462,2462,124,125,'SQAAAA','YNJAAA','OOOOxx' -7536,6447,0,0,6,16,36,536,1536,2536,7536,72,73,'WDAAAA','ZNJAAA','VVVVxx' -1700,6448,0,0,0,0,0,700,1700,1700,1700,0,1,'KNAAAA','AOJAAA','AAAAxx' -6740,6449,0,0,0,0,40,740,740,1740,6740,80,81,'GZAAAA','BOJAAA','HHHHxx' -28,6450,0,0,8,8,28,28,28,28,28,56,57,'CBAAAA','COJAAA','OOOOxx' -6044,6451,0,0,4,4,44,44,44,1044,6044,88,89,'MYAAAA','DOJAAA','VVVVxx' -5053,6452,1,1,3,13,53,53,1053,53,5053,106,107,'JMAAAA','EOJAAA','AAAAxx' -4832,6453,0,0,2,12,32,832,832,4832,4832,64,65,'WDAAAA','FOJAAA','HHHHxx' -9145,6454,1,1,5,5,45,145,1145,4145,9145,90,91,'TNAAAA','GOJAAA','OOOOxx' -5482,6455,0,2,2,2,82,482,1482,482,5482,164,165,'WCAAAA','HOJAAA','VVVVxx' -7644,6456,0,0,4,4,44,644,1644,2644,7644,88,89,'AIAAAA','IOJAAA','AAAAxx' -2128,6457,0,0,8,8,28,128,128,2128,2128,56,57,'WDAAAA','JOJAAA','HHHHxx' -6583,6458,1,3,3,3,83,583,583,1583,6583,166,167,'FTAAAA','KOJAAA','OOOOxx' -4224,6459,0,0,4,4,24,224,224,4224,4224,48,49,'MGAAAA','LOJAAA','VVVVxx' -5253,6460,1,1,3,13,53,253,1253,253,5253,106,107,'BUAAAA','MOJAAA','AAAAxx' -8219,6461,1,3,9,19,19,219,219,3219,8219,38,39,'DEAAAA','NOJAAA','HHHHxx' -8113,6462,1,1,3,13,13,113,113,3113,8113,26,27,'BAAAAA','OOJAAA','OOOOxx' -3616,6463,0,0,6,16,16,616,1616,3616,3616,32,33,'CJAAAA','POJAAA','VVVVxx' -1361,6464,1,1,1,1,61,361,1361,1361,1361,122,123,'JAAAAA','QOJAAA','AAAAxx' -949,6465,1,1,9,9,49,949,949,949,949,98,99,'NKAAAA','ROJAAA','HHHHxx' -8582,6466,0,2,2,2,82,582,582,3582,8582,164,165,'CSAAAA','SOJAAA','OOOOxx' -5104,6467,0,0,4,4,4,104,1104,104,5104,8,9,'IOAAAA','TOJAAA','VVVVxx' -6146,6468,0,2,6,6,46,146,146,1146,6146,92,93,'KCAAAA','UOJAAA','AAAAxx' -7681,6469,1,1,1,1,81,681,1681,2681,7681,162,163,'LJAAAA','VOJAAA','HHHHxx' -1904,6470,0,0,4,4,4,904,1904,1904,1904,8,9,'GVAAAA','WOJAAA','OOOOxx' -1989,6471,1,1,9,9,89,989,1989,1989,1989,178,179,'NYAAAA','XOJAAA','VVVVxx' -4179,6472,1,3,9,19,79,179,179,4179,4179,158,159,'TEAAAA','YOJAAA','AAAAxx' -1739,6473,1,3,9,19,39,739,1739,1739,1739,78,79,'XOAAAA','ZOJAAA','HHHHxx' -2447,6474,1,3,7,7,47,447,447,2447,2447,94,95,'DQAAAA','APJAAA','OOOOxx' -3029,6475,1,1,9,9,29,29,1029,3029,3029,58,59,'NMAAAA','BPJAAA','VVVVxx' -9783,6476,1,3,3,3,83,783,1783,4783,9783,166,167,'HMAAAA','CPJAAA','AAAAxx' -8381,6477,1,1,1,1,81,381,381,3381,8381,162,163,'JKAAAA','DPJAAA','HHHHxx' -8755,6478,1,3,5,15,55,755,755,3755,8755,110,111,'TYAAAA','EPJAAA','OOOOxx' -8384,6479,0,0,4,4,84,384,384,3384,8384,168,169,'MKAAAA','FPJAAA','VVVVxx' -7655,6480,1,3,5,15,55,655,1655,2655,7655,110,111,'LIAAAA','GPJAAA','AAAAxx' -4766,6481,0,2,6,6,66,766,766,4766,4766,132,133,'IBAAAA','HPJAAA','HHHHxx' -3324,6482,0,0,4,4,24,324,1324,3324,3324,48,49,'WXAAAA','IPJAAA','OOOOxx' -5022,6483,0,2,2,2,22,22,1022,22,5022,44,45,'ELAAAA','JPJAAA','VVVVxx' -2856,6484,0,0,6,16,56,856,856,2856,2856,112,113,'WFAAAA','KPJAAA','AAAAxx' -6503,6485,1,3,3,3,3,503,503,1503,6503,6,7,'DQAAAA','LPJAAA','HHHHxx' -6872,6486,0,0,2,12,72,872,872,1872,6872,144,145,'IEAAAA','MPJAAA','OOOOxx' -1663,6487,1,3,3,3,63,663,1663,1663,1663,126,127,'ZLAAAA','NPJAAA','VVVVxx' -6964,6488,0,0,4,4,64,964,964,1964,6964,128,129,'WHAAAA','OPJAAA','AAAAxx' -4622,6489,0,2,2,2,22,622,622,4622,4622,44,45,'UVAAAA','PPJAAA','HHHHxx' -6089,6490,1,1,9,9,89,89,89,1089,6089,178,179,'FAAAAA','QPJAAA','OOOOxx' -8567,6491,1,3,7,7,67,567,567,3567,8567,134,135,'NRAAAA','RPJAAA','VVVVxx' -597,6492,1,1,7,17,97,597,597,597,597,194,195,'ZWAAAA','SPJAAA','AAAAxx' -4222,6493,0,2,2,2,22,222,222,4222,4222,44,45,'KGAAAA','TPJAAA','HHHHxx' -9322,6494,0,2,2,2,22,322,1322,4322,9322,44,45,'OUAAAA','UPJAAA','OOOOxx' -624,6495,0,0,4,4,24,624,624,624,624,48,49,'AYAAAA','VPJAAA','VVVVxx' -4329,6496,1,1,9,9,29,329,329,4329,4329,58,59,'NKAAAA','WPJAAA','AAAAxx' -6781,6497,1,1,1,1,81,781,781,1781,6781,162,163,'VAAAAA','XPJAAA','HHHHxx' -1673,6498,1,1,3,13,73,673,1673,1673,1673,146,147,'JMAAAA','YPJAAA','OOOOxx' -6633,6499,1,1,3,13,33,633,633,1633,6633,66,67,'DVAAAA','ZPJAAA','VVVVxx' -2569,6500,1,1,9,9,69,569,569,2569,2569,138,139,'VUAAAA','AQJAAA','AAAAxx' -4995,6501,1,3,5,15,95,995,995,4995,4995,190,191,'DKAAAA','BQJAAA','HHHHxx' -2749,6502,1,1,9,9,49,749,749,2749,2749,98,99,'TBAAAA','CQJAAA','OOOOxx' -9044,6503,0,0,4,4,44,44,1044,4044,9044,88,89,'WJAAAA','DQJAAA','VVVVxx' -5823,6504,1,3,3,3,23,823,1823,823,5823,46,47,'ZPAAAA','EQJAAA','AAAAxx' -9366,6505,0,2,6,6,66,366,1366,4366,9366,132,133,'GWAAAA','FQJAAA','HHHHxx' -1169,6506,1,1,9,9,69,169,1169,1169,1169,138,139,'ZSAAAA','GQJAAA','OOOOxx' -1300,6507,0,0,0,0,0,300,1300,1300,1300,0,1,'AYAAAA','HQJAAA','VVVVxx' -9973,6508,1,1,3,13,73,973,1973,4973,9973,146,147,'PTAAAA','IQJAAA','AAAAxx' -2092,6509,0,0,2,12,92,92,92,2092,2092,184,185,'MCAAAA','JQJAAA','HHHHxx' -9776,6510,0,0,6,16,76,776,1776,4776,9776,152,153,'AMAAAA','KQJAAA','OOOOxx' -7612,6511,0,0,2,12,12,612,1612,2612,7612,24,25,'UGAAAA','LQJAAA','VVVVxx' -7190,6512,0,2,0,10,90,190,1190,2190,7190,180,181,'OQAAAA','MQJAAA','AAAAxx' -5147,6513,1,3,7,7,47,147,1147,147,5147,94,95,'ZPAAAA','NQJAAA','HHHHxx' -3722,6514,0,2,2,2,22,722,1722,3722,3722,44,45,'ENAAAA','OQJAAA','OOOOxx' -5858,6515,0,2,8,18,58,858,1858,858,5858,116,117,'IRAAAA','PQJAAA','VVVVxx' -3204,6516,0,0,4,4,4,204,1204,3204,3204,8,9,'GTAAAA','QQJAAA','AAAAxx' -8994,6517,0,2,4,14,94,994,994,3994,8994,188,189,'YHAAAA','RQJAAA','HHHHxx' -7478,6518,0,2,8,18,78,478,1478,2478,7478,156,157,'QBAAAA','SQJAAA','OOOOxx' -9624,6519,0,0,4,4,24,624,1624,4624,9624,48,49,'EGAAAA','TQJAAA','VVVVxx' -6639,6520,1,3,9,19,39,639,639,1639,6639,78,79,'JVAAAA','UQJAAA','AAAAxx' -369,6521,1,1,9,9,69,369,369,369,369,138,139,'FOAAAA','VQJAAA','HHHHxx' -7766,6522,0,2,6,6,66,766,1766,2766,7766,132,133,'SMAAAA','WQJAAA','OOOOxx' -4094,6523,0,2,4,14,94,94,94,4094,4094,188,189,'MBAAAA','XQJAAA','VVVVxx' -9556,6524,0,0,6,16,56,556,1556,4556,9556,112,113,'ODAAAA','YQJAAA','AAAAxx' -4887,6525,1,3,7,7,87,887,887,4887,4887,174,175,'ZFAAAA','ZQJAAA','HHHHxx' -2321,6526,1,1,1,1,21,321,321,2321,2321,42,43,'HLAAAA','ARJAAA','OOOOxx' -9201,6527,1,1,1,1,1,201,1201,4201,9201,2,3,'XPAAAA','BRJAAA','VVVVxx' -1627,6528,1,3,7,7,27,627,1627,1627,1627,54,55,'PKAAAA','CRJAAA','AAAAxx' -150,6529,0,2,0,10,50,150,150,150,150,100,101,'UFAAAA','DRJAAA','HHHHxx' -8010,6530,0,2,0,10,10,10,10,3010,8010,20,21,'CWAAAA','ERJAAA','OOOOxx' -8026,6531,0,2,6,6,26,26,26,3026,8026,52,53,'SWAAAA','FRJAAA','VVVVxx' -5495,6532,1,3,5,15,95,495,1495,495,5495,190,191,'JDAAAA','GRJAAA','AAAAxx' -6213,6533,1,1,3,13,13,213,213,1213,6213,26,27,'ZEAAAA','HRJAAA','HHHHxx' -6464,6534,0,0,4,4,64,464,464,1464,6464,128,129,'QOAAAA','IRJAAA','OOOOxx' -1158,6535,0,2,8,18,58,158,1158,1158,1158,116,117,'OSAAAA','JRJAAA','VVVVxx' -8669,6536,1,1,9,9,69,669,669,3669,8669,138,139,'LVAAAA','KRJAAA','AAAAxx' -3225,6537,1,1,5,5,25,225,1225,3225,3225,50,51,'BUAAAA','LRJAAA','HHHHxx' -1294,6538,0,2,4,14,94,294,1294,1294,1294,188,189,'UXAAAA','MRJAAA','OOOOxx' -2166,6539,0,2,6,6,66,166,166,2166,2166,132,133,'IFAAAA','NRJAAA','VVVVxx' -9328,6540,0,0,8,8,28,328,1328,4328,9328,56,57,'UUAAAA','ORJAAA','AAAAxx' -8431,6541,1,3,1,11,31,431,431,3431,8431,62,63,'HMAAAA','PRJAAA','HHHHxx' -7100,6542,0,0,0,0,0,100,1100,2100,7100,0,1,'CNAAAA','QRJAAA','OOOOxx' -8126,6543,0,2,6,6,26,126,126,3126,8126,52,53,'OAAAAA','RRJAAA','VVVVxx' -2185,6544,1,1,5,5,85,185,185,2185,2185,170,171,'BGAAAA','SRJAAA','AAAAxx' -5697,6545,1,1,7,17,97,697,1697,697,5697,194,195,'DLAAAA','TRJAAA','HHHHxx' -5531,6546,1,3,1,11,31,531,1531,531,5531,62,63,'TEAAAA','URJAAA','OOOOxx' -3020,6547,0,0,0,0,20,20,1020,3020,3020,40,41,'EMAAAA','VRJAAA','VVVVxx' -3076,6548,0,0,6,16,76,76,1076,3076,3076,152,153,'IOAAAA','WRJAAA','AAAAxx' -9228,6549,0,0,8,8,28,228,1228,4228,9228,56,57,'YQAAAA','XRJAAA','HHHHxx' -1734,6550,0,2,4,14,34,734,1734,1734,1734,68,69,'SOAAAA','YRJAAA','OOOOxx' -7616,6551,0,0,6,16,16,616,1616,2616,7616,32,33,'YGAAAA','ZRJAAA','VVVVxx' -9059,6552,1,3,9,19,59,59,1059,4059,9059,118,119,'LKAAAA','ASJAAA','AAAAxx' -323,6553,1,3,3,3,23,323,323,323,323,46,47,'LMAAAA','BSJAAA','HHHHxx' -1283,6554,1,3,3,3,83,283,1283,1283,1283,166,167,'JXAAAA','CSJAAA','OOOOxx' -9535,6555,1,3,5,15,35,535,1535,4535,9535,70,71,'TCAAAA','DSJAAA','VVVVxx' -2580,6556,0,0,0,0,80,580,580,2580,2580,160,161,'GVAAAA','ESJAAA','AAAAxx' -7633,6557,1,1,3,13,33,633,1633,2633,7633,66,67,'PHAAAA','FSJAAA','HHHHxx' -9497,6558,1,1,7,17,97,497,1497,4497,9497,194,195,'HBAAAA','GSJAAA','OOOOxx' -9842,6559,0,2,2,2,42,842,1842,4842,9842,84,85,'OOAAAA','HSJAAA','VVVVxx' -3426,6560,0,2,6,6,26,426,1426,3426,3426,52,53,'UBAAAA','ISJAAA','AAAAxx' -7650,6561,0,2,0,10,50,650,1650,2650,7650,100,101,'GIAAAA','JSJAAA','HHHHxx' -9935,6562,1,3,5,15,35,935,1935,4935,9935,70,71,'DSAAAA','KSJAAA','OOOOxx' -9354,6563,0,2,4,14,54,354,1354,4354,9354,108,109,'UVAAAA','LSJAAA','VVVVxx' -5569,6564,1,1,9,9,69,569,1569,569,5569,138,139,'FGAAAA','MSJAAA','AAAAxx' -5765,6565,1,1,5,5,65,765,1765,765,5765,130,131,'TNAAAA','NSJAAA','HHHHxx' -7283,6566,1,3,3,3,83,283,1283,2283,7283,166,167,'DUAAAA','OSJAAA','OOOOxx' -1068,6567,0,0,8,8,68,68,1068,1068,1068,136,137,'CPAAAA','PSJAAA','VVVVxx' -1641,6568,1,1,1,1,41,641,1641,1641,1641,82,83,'DLAAAA','QSJAAA','AAAAxx' -1688,6569,0,0,8,8,88,688,1688,1688,1688,176,177,'YMAAAA','RSJAAA','HHHHxx' -1133,6570,1,1,3,13,33,133,1133,1133,1133,66,67,'PRAAAA','SSJAAA','OOOOxx' -4493,6571,1,1,3,13,93,493,493,4493,4493,186,187,'VQAAAA','TSJAAA','VVVVxx' -3354,6572,0,2,4,14,54,354,1354,3354,3354,108,109,'AZAAAA','USJAAA','AAAAxx' -4029,6573,1,1,9,9,29,29,29,4029,4029,58,59,'ZYAAAA','VSJAAA','HHHHxx' -6704,6574,0,0,4,4,4,704,704,1704,6704,8,9,'WXAAAA','WSJAAA','OOOOxx' -3221,6575,1,1,1,1,21,221,1221,3221,3221,42,43,'XTAAAA','XSJAAA','VVVVxx' -9432,6576,0,0,2,12,32,432,1432,4432,9432,64,65,'UYAAAA','YSJAAA','AAAAxx' -6990,6577,0,2,0,10,90,990,990,1990,6990,180,181,'WIAAAA','ZSJAAA','HHHHxx' -1760,6578,0,0,0,0,60,760,1760,1760,1760,120,121,'SPAAAA','ATJAAA','OOOOxx' -4754,6579,0,2,4,14,54,754,754,4754,4754,108,109,'WAAAAA','BTJAAA','VVVVxx' -7724,6580,0,0,4,4,24,724,1724,2724,7724,48,49,'CLAAAA','CTJAAA','AAAAxx' -9487,6581,1,3,7,7,87,487,1487,4487,9487,174,175,'XAAAAA','DTJAAA','HHHHxx' -166,6582,0,2,6,6,66,166,166,166,166,132,133,'KGAAAA','ETJAAA','OOOOxx' -5479,6583,1,3,9,19,79,479,1479,479,5479,158,159,'TCAAAA','FTJAAA','VVVVxx' -8744,6584,0,0,4,4,44,744,744,3744,8744,88,89,'IYAAAA','GTJAAA','AAAAxx' -5746,6585,0,2,6,6,46,746,1746,746,5746,92,93,'ANAAAA','HTJAAA','HHHHxx' -907,6586,1,3,7,7,7,907,907,907,907,14,15,'XIAAAA','ITJAAA','OOOOxx' -3968,6587,0,0,8,8,68,968,1968,3968,3968,136,137,'QWAAAA','JTJAAA','VVVVxx' -5721,6588,1,1,1,1,21,721,1721,721,5721,42,43,'BMAAAA','KTJAAA','AAAAxx' -6738,6589,0,2,8,18,38,738,738,1738,6738,76,77,'EZAAAA','LTJAAA','HHHHxx' -4097,6590,1,1,7,17,97,97,97,4097,4097,194,195,'PBAAAA','MTJAAA','OOOOxx' -8456,6591,0,0,6,16,56,456,456,3456,8456,112,113,'GNAAAA','NTJAAA','VVVVxx' -1269,6592,1,1,9,9,69,269,1269,1269,1269,138,139,'VWAAAA','OTJAAA','AAAAxx' -7997,6593,1,1,7,17,97,997,1997,2997,7997,194,195,'PVAAAA','PTJAAA','HHHHxx' -9457,6594,1,1,7,17,57,457,1457,4457,9457,114,115,'TZAAAA','QTJAAA','OOOOxx' -1159,6595,1,3,9,19,59,159,1159,1159,1159,118,119,'PSAAAA','RTJAAA','VVVVxx' -1631,6596,1,3,1,11,31,631,1631,1631,1631,62,63,'TKAAAA','STJAAA','AAAAxx' -2019,6597,1,3,9,19,19,19,19,2019,2019,38,39,'RZAAAA','TTJAAA','HHHHxx' -3186,6598,0,2,6,6,86,186,1186,3186,3186,172,173,'OSAAAA','UTJAAA','OOOOxx' -5587,6599,1,3,7,7,87,587,1587,587,5587,174,175,'XGAAAA','VTJAAA','VVVVxx' -9172,6600,0,0,2,12,72,172,1172,4172,9172,144,145,'UOAAAA','WTJAAA','AAAAxx' -5589,6601,1,1,9,9,89,589,1589,589,5589,178,179,'ZGAAAA','XTJAAA','HHHHxx' -5103,6602,1,3,3,3,3,103,1103,103,5103,6,7,'HOAAAA','YTJAAA','OOOOxx' -3177,6603,1,1,7,17,77,177,1177,3177,3177,154,155,'FSAAAA','ZTJAAA','VVVVxx' -8887,6604,1,3,7,7,87,887,887,3887,8887,174,175,'VDAAAA','AUJAAA','AAAAxx' -12,6605,0,0,2,12,12,12,12,12,12,24,25,'MAAAAA','BUJAAA','HHHHxx' -8575,6606,1,3,5,15,75,575,575,3575,8575,150,151,'VRAAAA','CUJAAA','OOOOxx' -4335,6607,1,3,5,15,35,335,335,4335,4335,70,71,'TKAAAA','DUJAAA','VVVVxx' -4581,6608,1,1,1,1,81,581,581,4581,4581,162,163,'FUAAAA','EUJAAA','AAAAxx' -4444,6609,0,0,4,4,44,444,444,4444,4444,88,89,'YOAAAA','FUJAAA','HHHHxx' -7978,6610,0,2,8,18,78,978,1978,2978,7978,156,157,'WUAAAA','GUJAAA','OOOOxx' -3081,6611,1,1,1,1,81,81,1081,3081,3081,162,163,'NOAAAA','HUJAAA','VVVVxx' -4059,6612,1,3,9,19,59,59,59,4059,4059,118,119,'DAAAAA','IUJAAA','AAAAxx' -5711,6613,1,3,1,11,11,711,1711,711,5711,22,23,'RLAAAA','JUJAAA','HHHHxx' -7069,6614,1,1,9,9,69,69,1069,2069,7069,138,139,'XLAAAA','KUJAAA','OOOOxx' -6150,6615,0,2,0,10,50,150,150,1150,6150,100,101,'OCAAAA','LUJAAA','VVVVxx' -9550,6616,0,2,0,10,50,550,1550,4550,9550,100,101,'IDAAAA','MUJAAA','AAAAxx' -7087,6617,1,3,7,7,87,87,1087,2087,7087,174,175,'PMAAAA','NUJAAA','HHHHxx' -9557,6618,1,1,7,17,57,557,1557,4557,9557,114,115,'PDAAAA','OUJAAA','OOOOxx' -7856,6619,0,0,6,16,56,856,1856,2856,7856,112,113,'EQAAAA','PUJAAA','VVVVxx' -1115,6620,1,3,5,15,15,115,1115,1115,1115,30,31,'XQAAAA','QUJAAA','AAAAxx' -1086,6621,0,2,6,6,86,86,1086,1086,1086,172,173,'UPAAAA','RUJAAA','HHHHxx' -5048,6622,0,0,8,8,48,48,1048,48,5048,96,97,'EMAAAA','SUJAAA','OOOOxx' -5168,6623,0,0,8,8,68,168,1168,168,5168,136,137,'UQAAAA','TUJAAA','VVVVxx' -6029,6624,1,1,9,9,29,29,29,1029,6029,58,59,'XXAAAA','UUJAAA','AAAAxx' -546,6625,0,2,6,6,46,546,546,546,546,92,93,'AVAAAA','VUJAAA','HHHHxx' -2908,6626,0,0,8,8,8,908,908,2908,2908,16,17,'WHAAAA','WUJAAA','OOOOxx' -779,6627,1,3,9,19,79,779,779,779,779,158,159,'ZDAAAA','XUJAAA','VVVVxx' -4202,6628,0,2,2,2,2,202,202,4202,4202,4,5,'QFAAAA','YUJAAA','AAAAxx' -9984,6629,0,0,4,4,84,984,1984,4984,9984,168,169,'AUAAAA','ZUJAAA','HHHHxx' -4730,6630,0,2,0,10,30,730,730,4730,4730,60,61,'YZAAAA','AVJAAA','OOOOxx' -6517,6631,1,1,7,17,17,517,517,1517,6517,34,35,'RQAAAA','BVJAAA','VVVVxx' -8410,6632,0,2,0,10,10,410,410,3410,8410,20,21,'MLAAAA','CVJAAA','AAAAxx' -4793,6633,1,1,3,13,93,793,793,4793,4793,186,187,'JCAAAA','DVJAAA','HHHHxx' -3431,6634,1,3,1,11,31,431,1431,3431,3431,62,63,'ZBAAAA','EVJAAA','OOOOxx' -2481,6635,1,1,1,1,81,481,481,2481,2481,162,163,'LRAAAA','FVJAAA','VVVVxx' -3905,6636,1,1,5,5,5,905,1905,3905,3905,10,11,'FUAAAA','GVJAAA','AAAAxx' -8807,6637,1,3,7,7,7,807,807,3807,8807,14,15,'TAAAAA','HVJAAA','HHHHxx' -2660,6638,0,0,0,0,60,660,660,2660,2660,120,121,'IYAAAA','IVJAAA','OOOOxx' -4985,6639,1,1,5,5,85,985,985,4985,4985,170,171,'TJAAAA','JVJAAA','VVVVxx' -3080,6640,0,0,0,0,80,80,1080,3080,3080,160,161,'MOAAAA','KVJAAA','AAAAxx' -1090,6641,0,2,0,10,90,90,1090,1090,1090,180,181,'YPAAAA','LVJAAA','HHHHxx' -6917,6642,1,1,7,17,17,917,917,1917,6917,34,35,'BGAAAA','MVJAAA','OOOOxx' -5177,6643,1,1,7,17,77,177,1177,177,5177,154,155,'DRAAAA','NVJAAA','VVVVxx' -2729,6644,1,1,9,9,29,729,729,2729,2729,58,59,'ZAAAAA','OVJAAA','AAAAxx' -9706,6645,0,2,6,6,6,706,1706,4706,9706,12,13,'IJAAAA','PVJAAA','HHHHxx' -9929,6646,1,1,9,9,29,929,1929,4929,9929,58,59,'XRAAAA','QVJAAA','OOOOxx' -1547,6647,1,3,7,7,47,547,1547,1547,1547,94,95,'NHAAAA','RVJAAA','VVVVxx' -2798,6648,0,2,8,18,98,798,798,2798,2798,196,197,'QDAAAA','SVJAAA','AAAAxx' -4420,6649,0,0,0,0,20,420,420,4420,4420,40,41,'AOAAAA','TVJAAA','HHHHxx' -6771,6650,1,3,1,11,71,771,771,1771,6771,142,143,'LAAAAA','UVJAAA','OOOOxx' -2004,6651,0,0,4,4,4,4,4,2004,2004,8,9,'CZAAAA','VVJAAA','VVVVxx' -8686,6652,0,2,6,6,86,686,686,3686,8686,172,173,'CWAAAA','WVJAAA','AAAAxx' -3663,6653,1,3,3,3,63,663,1663,3663,3663,126,127,'XKAAAA','XVJAAA','HHHHxx' -806,6654,0,2,6,6,6,806,806,806,806,12,13,'AFAAAA','YVJAAA','OOOOxx' -4309,6655,1,1,9,9,9,309,309,4309,4309,18,19,'TJAAAA','ZVJAAA','VVVVxx' -7443,6656,1,3,3,3,43,443,1443,2443,7443,86,87,'HAAAAA','AWJAAA','AAAAxx' -5779,6657,1,3,9,19,79,779,1779,779,5779,158,159,'HOAAAA','BWJAAA','HHHHxx' -8821,6658,1,1,1,1,21,821,821,3821,8821,42,43,'HBAAAA','CWJAAA','OOOOxx' -4198,6659,0,2,8,18,98,198,198,4198,4198,196,197,'MFAAAA','DWJAAA','VVVVxx' -8115,6660,1,3,5,15,15,115,115,3115,8115,30,31,'DAAAAA','EWJAAA','AAAAxx' -9554,6661,0,2,4,14,54,554,1554,4554,9554,108,109,'MDAAAA','FWJAAA','HHHHxx' -8956,6662,0,0,6,16,56,956,956,3956,8956,112,113,'MGAAAA','GWJAAA','OOOOxx' -4733,6663,1,1,3,13,33,733,733,4733,4733,66,67,'BAAAAA','HWJAAA','VVVVxx' -5417,6664,1,1,7,17,17,417,1417,417,5417,34,35,'JAAAAA','IWJAAA','AAAAxx' -4792,6665,0,0,2,12,92,792,792,4792,4792,184,185,'ICAAAA','JWJAAA','HHHHxx' -462,6666,0,2,2,2,62,462,462,462,462,124,125,'URAAAA','KWJAAA','OOOOxx' -3687,6667,1,3,7,7,87,687,1687,3687,3687,174,175,'VLAAAA','LWJAAA','VVVVxx' -2013,6668,1,1,3,13,13,13,13,2013,2013,26,27,'LZAAAA','MWJAAA','AAAAxx' -5386,6669,0,2,6,6,86,386,1386,386,5386,172,173,'EZAAAA','NWJAAA','HHHHxx' -2816,6670,0,0,6,16,16,816,816,2816,2816,32,33,'IEAAAA','OWJAAA','OOOOxx' -7827,6671,1,3,7,7,27,827,1827,2827,7827,54,55,'BPAAAA','PWJAAA','VVVVxx' -5077,6672,1,1,7,17,77,77,1077,77,5077,154,155,'HNAAAA','QWJAAA','AAAAxx' -6039,6673,1,3,9,19,39,39,39,1039,6039,78,79,'HYAAAA','RWJAAA','HHHHxx' -215,6674,1,3,5,15,15,215,215,215,215,30,31,'HIAAAA','SWJAAA','OOOOxx' -855,6675,1,3,5,15,55,855,855,855,855,110,111,'XGAAAA','TWJAAA','VVVVxx' -9692,6676,0,0,2,12,92,692,1692,4692,9692,184,185,'UIAAAA','UWJAAA','AAAAxx' -8391,6677,1,3,1,11,91,391,391,3391,8391,182,183,'TKAAAA','VWJAAA','HHHHxx' -8424,6678,0,0,4,4,24,424,424,3424,8424,48,49,'AMAAAA','WWJAAA','OOOOxx' -6331,6679,1,3,1,11,31,331,331,1331,6331,62,63,'NJAAAA','XWJAAA','VVVVxx' -6561,6680,1,1,1,1,61,561,561,1561,6561,122,123,'JSAAAA','YWJAAA','AAAAxx' -8955,6681,1,3,5,15,55,955,955,3955,8955,110,111,'LGAAAA','ZWJAAA','HHHHxx' -1764,6682,0,0,4,4,64,764,1764,1764,1764,128,129,'WPAAAA','AXJAAA','OOOOxx' -6623,6683,1,3,3,3,23,623,623,1623,6623,46,47,'TUAAAA','BXJAAA','VVVVxx' -2900,6684,0,0,0,0,0,900,900,2900,2900,0,1,'OHAAAA','CXJAAA','AAAAxx' -7048,6685,0,0,8,8,48,48,1048,2048,7048,96,97,'CLAAAA','DXJAAA','HHHHxx' -3843,6686,1,3,3,3,43,843,1843,3843,3843,86,87,'VRAAAA','EXJAAA','OOOOxx' -4855,6687,1,3,5,15,55,855,855,4855,4855,110,111,'TEAAAA','FXJAAA','VVVVxx' -7383,6688,1,3,3,3,83,383,1383,2383,7383,166,167,'ZXAAAA','GXJAAA','AAAAxx' -7765,6689,1,1,5,5,65,765,1765,2765,7765,130,131,'RMAAAA','HXJAAA','HHHHxx' -1125,6690,1,1,5,5,25,125,1125,1125,1125,50,51,'HRAAAA','IXJAAA','OOOOxx' -755,6691,1,3,5,15,55,755,755,755,755,110,111,'BDAAAA','JXJAAA','VVVVxx' -2995,6692,1,3,5,15,95,995,995,2995,2995,190,191,'FLAAAA','KXJAAA','AAAAxx' -8907,6693,1,3,7,7,7,907,907,3907,8907,14,15,'PEAAAA','LXJAAA','HHHHxx' -9357,6694,1,1,7,17,57,357,1357,4357,9357,114,115,'XVAAAA','MXJAAA','OOOOxx' -4469,6695,1,1,9,9,69,469,469,4469,4469,138,139,'XPAAAA','NXJAAA','VVVVxx' -2147,6696,1,3,7,7,47,147,147,2147,2147,94,95,'PEAAAA','OXJAAA','AAAAxx' -2952,6697,0,0,2,12,52,952,952,2952,2952,104,105,'OJAAAA','PXJAAA','HHHHxx' -1324,6698,0,0,4,4,24,324,1324,1324,1324,48,49,'YYAAAA','QXJAAA','OOOOxx' -1173,6699,1,1,3,13,73,173,1173,1173,1173,146,147,'DTAAAA','RXJAAA','VVVVxx' -3169,6700,1,1,9,9,69,169,1169,3169,3169,138,139,'XRAAAA','SXJAAA','AAAAxx' -5149,6701,1,1,9,9,49,149,1149,149,5149,98,99,'BQAAAA','TXJAAA','HHHHxx' -9660,6702,0,0,0,0,60,660,1660,4660,9660,120,121,'OHAAAA','UXJAAA','OOOOxx' -3446,6703,0,2,6,6,46,446,1446,3446,3446,92,93,'OCAAAA','VXJAAA','VVVVxx' -6988,6704,0,0,8,8,88,988,988,1988,6988,176,177,'UIAAAA','WXJAAA','AAAAxx' -5829,6705,1,1,9,9,29,829,1829,829,5829,58,59,'FQAAAA','XXJAAA','HHHHxx' -7166,6706,0,2,6,6,66,166,1166,2166,7166,132,133,'QPAAAA','YXJAAA','OOOOxx' -3940,6707,0,0,0,0,40,940,1940,3940,3940,80,81,'OVAAAA','ZXJAAA','VVVVxx' -2645,6708,1,1,5,5,45,645,645,2645,2645,90,91,'TXAAAA','AYJAAA','AAAAxx' -478,6709,0,2,8,18,78,478,478,478,478,156,157,'KSAAAA','BYJAAA','HHHHxx' -1156,6710,0,0,6,16,56,156,1156,1156,1156,112,113,'MSAAAA','CYJAAA','OOOOxx' -2731,6711,1,3,1,11,31,731,731,2731,2731,62,63,'BBAAAA','DYJAAA','VVVVxx' -5637,6712,1,1,7,17,37,637,1637,637,5637,74,75,'VIAAAA','EYJAAA','AAAAxx' -7517,6713,1,1,7,17,17,517,1517,2517,7517,34,35,'DDAAAA','FYJAAA','HHHHxx' -5331,6714,1,3,1,11,31,331,1331,331,5331,62,63,'BXAAAA','GYJAAA','OOOOxx' -9640,6715,0,0,0,0,40,640,1640,4640,9640,80,81,'UGAAAA','HYJAAA','VVVVxx' -4108,6716,0,0,8,8,8,108,108,4108,4108,16,17,'ACAAAA','IYJAAA','AAAAxx' -1087,6717,1,3,7,7,87,87,1087,1087,1087,174,175,'VPAAAA','JYJAAA','HHHHxx' -8017,6718,1,1,7,17,17,17,17,3017,8017,34,35,'JWAAAA','KYJAAA','OOOOxx' -8795,6719,1,3,5,15,95,795,795,3795,8795,190,191,'HAAAAA','LYJAAA','VVVVxx' -7060,6720,0,0,0,0,60,60,1060,2060,7060,120,121,'OLAAAA','MYJAAA','AAAAxx' -9450,6721,0,2,0,10,50,450,1450,4450,9450,100,101,'MZAAAA','NYJAAA','HHHHxx' -390,6722,0,2,0,10,90,390,390,390,390,180,181,'APAAAA','OYJAAA','OOOOxx' -66,6723,0,2,6,6,66,66,66,66,66,132,133,'OCAAAA','PYJAAA','VVVVxx' -8789,6724,1,1,9,9,89,789,789,3789,8789,178,179,'BAAAAA','QYJAAA','AAAAxx' -9260,6725,0,0,0,0,60,260,1260,4260,9260,120,121,'ESAAAA','RYJAAA','HHHHxx' -6679,6726,1,3,9,19,79,679,679,1679,6679,158,159,'XWAAAA','SYJAAA','OOOOxx' -9052,6727,0,0,2,12,52,52,1052,4052,9052,104,105,'EKAAAA','TYJAAA','VVVVxx' -9561,6728,1,1,1,1,61,561,1561,4561,9561,122,123,'TDAAAA','UYJAAA','AAAAxx' -9725,6729,1,1,5,5,25,725,1725,4725,9725,50,51,'BKAAAA','VYJAAA','HHHHxx' -6298,6730,0,2,8,18,98,298,298,1298,6298,196,197,'GIAAAA','WYJAAA','OOOOxx' -8654,6731,0,2,4,14,54,654,654,3654,8654,108,109,'WUAAAA','XYJAAA','VVVVxx' -8725,6732,1,1,5,5,25,725,725,3725,8725,50,51,'PXAAAA','YYJAAA','AAAAxx' -9377,6733,1,1,7,17,77,377,1377,4377,9377,154,155,'RWAAAA','ZYJAAA','HHHHxx' -3807,6734,1,3,7,7,7,807,1807,3807,3807,14,15,'LQAAAA','AZJAAA','OOOOxx' -8048,6735,0,0,8,8,48,48,48,3048,8048,96,97,'OXAAAA','BZJAAA','VVVVxx' -764,6736,0,0,4,4,64,764,764,764,764,128,129,'KDAAAA','CZJAAA','AAAAxx' -9702,6737,0,2,2,2,2,702,1702,4702,9702,4,5,'EJAAAA','DZJAAA','HHHHxx' -8060,6738,0,0,0,0,60,60,60,3060,8060,120,121,'AYAAAA','EZJAAA','OOOOxx' -6371,6739,1,3,1,11,71,371,371,1371,6371,142,143,'BLAAAA','FZJAAA','VVVVxx' -5237,6740,1,1,7,17,37,237,1237,237,5237,74,75,'LTAAAA','GZJAAA','AAAAxx' -743,6741,1,3,3,3,43,743,743,743,743,86,87,'PCAAAA','HZJAAA','HHHHxx' -7395,6742,1,3,5,15,95,395,1395,2395,7395,190,191,'LYAAAA','IZJAAA','OOOOxx' -3365,6743,1,1,5,5,65,365,1365,3365,3365,130,131,'LZAAAA','JZJAAA','VVVVxx' -6667,6744,1,3,7,7,67,667,667,1667,6667,134,135,'LWAAAA','KZJAAA','AAAAxx' -3445,6745,1,1,5,5,45,445,1445,3445,3445,90,91,'NCAAAA','LZJAAA','HHHHxx' -4019,6746,1,3,9,19,19,19,19,4019,4019,38,39,'PYAAAA','MZJAAA','OOOOxx' -7035,6747,1,3,5,15,35,35,1035,2035,7035,70,71,'PKAAAA','NZJAAA','VVVVxx' -5274,6748,0,2,4,14,74,274,1274,274,5274,148,149,'WUAAAA','OZJAAA','AAAAxx' -519,6749,1,3,9,19,19,519,519,519,519,38,39,'ZTAAAA','PZJAAA','HHHHxx' -2801,6750,1,1,1,1,1,801,801,2801,2801,2,3,'TDAAAA','QZJAAA','OOOOxx' -3320,6751,0,0,0,0,20,320,1320,3320,3320,40,41,'SXAAAA','RZJAAA','VVVVxx' -3153,6752,1,1,3,13,53,153,1153,3153,3153,106,107,'HRAAAA','SZJAAA','AAAAxx' -7680,6753,0,0,0,0,80,680,1680,2680,7680,160,161,'KJAAAA','TZJAAA','HHHHxx' -8942,6754,0,2,2,2,42,942,942,3942,8942,84,85,'YFAAAA','UZJAAA','OOOOxx' -3195,6755,1,3,5,15,95,195,1195,3195,3195,190,191,'XSAAAA','VZJAAA','VVVVxx' -2287,6756,1,3,7,7,87,287,287,2287,2287,174,175,'ZJAAAA','WZJAAA','AAAAxx' -8325,6757,1,1,5,5,25,325,325,3325,8325,50,51,'FIAAAA','XZJAAA','HHHHxx' -2603,6758,1,3,3,3,3,603,603,2603,2603,6,7,'DWAAAA','YZJAAA','OOOOxx' -5871,6759,1,3,1,11,71,871,1871,871,5871,142,143,'VRAAAA','ZZJAAA','VVVVxx' -1773,6760,1,1,3,13,73,773,1773,1773,1773,146,147,'FQAAAA','AAKAAA','AAAAxx' -3323,6761,1,3,3,3,23,323,1323,3323,3323,46,47,'VXAAAA','BAKAAA','HHHHxx' -2053,6762,1,1,3,13,53,53,53,2053,2053,106,107,'ZAAAAA','CAKAAA','OOOOxx' -4062,6763,0,2,2,2,62,62,62,4062,4062,124,125,'GAAAAA','DAKAAA','VVVVxx' -4611,6764,1,3,1,11,11,611,611,4611,4611,22,23,'JVAAAA','EAKAAA','AAAAxx' -3451,6765,1,3,1,11,51,451,1451,3451,3451,102,103,'TCAAAA','FAKAAA','HHHHxx' -1819,6766,1,3,9,19,19,819,1819,1819,1819,38,39,'ZRAAAA','GAKAAA','OOOOxx' -9806,6767,0,2,6,6,6,806,1806,4806,9806,12,13,'ENAAAA','HAKAAA','VVVVxx' -6619,6768,1,3,9,19,19,619,619,1619,6619,38,39,'PUAAAA','IAKAAA','AAAAxx' -1031,6769,1,3,1,11,31,31,1031,1031,1031,62,63,'RNAAAA','JAKAAA','HHHHxx' -1865,6770,1,1,5,5,65,865,1865,1865,1865,130,131,'TTAAAA','KAKAAA','OOOOxx' -6282,6771,0,2,2,2,82,282,282,1282,6282,164,165,'QHAAAA','LAKAAA','VVVVxx' -1178,6772,0,2,8,18,78,178,1178,1178,1178,156,157,'ITAAAA','MAKAAA','AAAAxx' -8007,6773,1,3,7,7,7,7,7,3007,8007,14,15,'ZVAAAA','NAKAAA','HHHHxx' -9126,6774,0,2,6,6,26,126,1126,4126,9126,52,53,'ANAAAA','OAKAAA','OOOOxx' -9113,6775,1,1,3,13,13,113,1113,4113,9113,26,27,'NMAAAA','PAKAAA','VVVVxx' -537,6776,1,1,7,17,37,537,537,537,537,74,75,'RUAAAA','QAKAAA','AAAAxx' -6208,6777,0,0,8,8,8,208,208,1208,6208,16,17,'UEAAAA','RAKAAA','HHHHxx' -1626,6778,0,2,6,6,26,626,1626,1626,1626,52,53,'OKAAAA','SAKAAA','OOOOxx' -7188,6779,0,0,8,8,88,188,1188,2188,7188,176,177,'MQAAAA','TAKAAA','VVVVxx' -9216,6780,0,0,6,16,16,216,1216,4216,9216,32,33,'MQAAAA','UAKAAA','AAAAxx' -6134,6781,0,2,4,14,34,134,134,1134,6134,68,69,'YBAAAA','VAKAAA','HHHHxx' -2074,6782,0,2,4,14,74,74,74,2074,2074,148,149,'UBAAAA','WAKAAA','OOOOxx' -6369,6783,1,1,9,9,69,369,369,1369,6369,138,139,'ZKAAAA','XAKAAA','VVVVxx' -9306,6784,0,2,6,6,6,306,1306,4306,9306,12,13,'YTAAAA','YAKAAA','AAAAxx' -3155,6785,1,3,5,15,55,155,1155,3155,3155,110,111,'JRAAAA','ZAKAAA','HHHHxx' -3611,6786,1,3,1,11,11,611,1611,3611,3611,22,23,'XIAAAA','ABKAAA','OOOOxx' -6530,6787,0,2,0,10,30,530,530,1530,6530,60,61,'ERAAAA','BBKAAA','VVVVxx' -6979,6788,1,3,9,19,79,979,979,1979,6979,158,159,'LIAAAA','CBKAAA','AAAAxx' -9129,6789,1,1,9,9,29,129,1129,4129,9129,58,59,'DNAAAA','DBKAAA','HHHHxx' -8013,6790,1,1,3,13,13,13,13,3013,8013,26,27,'FWAAAA','EBKAAA','OOOOxx' -6926,6791,0,2,6,6,26,926,926,1926,6926,52,53,'KGAAAA','FBKAAA','VVVVxx' -1877,6792,1,1,7,17,77,877,1877,1877,1877,154,155,'FUAAAA','GBKAAA','AAAAxx' -1882,6793,0,2,2,2,82,882,1882,1882,1882,164,165,'KUAAAA','HBKAAA','HHHHxx' -6720,6794,0,0,0,0,20,720,720,1720,6720,40,41,'MYAAAA','IBKAAA','OOOOxx' -690,6795,0,2,0,10,90,690,690,690,690,180,181,'OAAAAA','JBKAAA','VVVVxx' -143,6796,1,3,3,3,43,143,143,143,143,86,87,'NFAAAA','KBKAAA','AAAAxx' -7241,6797,1,1,1,1,41,241,1241,2241,7241,82,83,'NSAAAA','LBKAAA','HHHHxx' -6461,6798,1,1,1,1,61,461,461,1461,6461,122,123,'NOAAAA','MBKAAA','OOOOxx' -2258,6799,0,2,8,18,58,258,258,2258,2258,116,117,'WIAAAA','NBKAAA','VVVVxx' -2280,6800,0,0,0,0,80,280,280,2280,2280,160,161,'SJAAAA','OBKAAA','AAAAxx' -7556,6801,0,0,6,16,56,556,1556,2556,7556,112,113,'QEAAAA','PBKAAA','HHHHxx' -1038,6802,0,2,8,18,38,38,1038,1038,1038,76,77,'YNAAAA','QBKAAA','OOOOxx' -2634,6803,0,2,4,14,34,634,634,2634,2634,68,69,'IXAAAA','RBKAAA','VVVVxx' -7847,6804,1,3,7,7,47,847,1847,2847,7847,94,95,'VPAAAA','SBKAAA','AAAAxx' -4415,6805,1,3,5,15,15,415,415,4415,4415,30,31,'VNAAAA','TBKAAA','HHHHxx' -1933,6806,1,1,3,13,33,933,1933,1933,1933,66,67,'JWAAAA','UBKAAA','OOOOxx' -8034,6807,0,2,4,14,34,34,34,3034,8034,68,69,'AXAAAA','VBKAAA','VVVVxx' -9233,6808,1,1,3,13,33,233,1233,4233,9233,66,67,'DRAAAA','WBKAAA','AAAAxx' -6572,6809,0,0,2,12,72,572,572,1572,6572,144,145,'USAAAA','XBKAAA','HHHHxx' -1586,6810,0,2,6,6,86,586,1586,1586,1586,172,173,'AJAAAA','YBKAAA','OOOOxx' -8512,6811,0,0,2,12,12,512,512,3512,8512,24,25,'KPAAAA','ZBKAAA','VVVVxx' -7421,6812,1,1,1,1,21,421,1421,2421,7421,42,43,'LZAAAA','ACKAAA','AAAAxx' -503,6813,1,3,3,3,3,503,503,503,503,6,7,'JTAAAA','BCKAAA','HHHHxx' -5332,6814,0,0,2,12,32,332,1332,332,5332,64,65,'CXAAAA','CCKAAA','OOOOxx' -2602,6815,0,2,2,2,2,602,602,2602,2602,4,5,'CWAAAA','DCKAAA','VVVVxx' -2902,6816,0,2,2,2,2,902,902,2902,2902,4,5,'QHAAAA','ECKAAA','AAAAxx' -2979,6817,1,3,9,19,79,979,979,2979,2979,158,159,'PKAAAA','FCKAAA','HHHHxx' -1431,6818,1,3,1,11,31,431,1431,1431,1431,62,63,'BDAAAA','GCKAAA','OOOOxx' -8639,6819,1,3,9,19,39,639,639,3639,8639,78,79,'HUAAAA','HCKAAA','VVVVxx' -4218,6820,0,2,8,18,18,218,218,4218,4218,36,37,'GGAAAA','ICKAAA','AAAAxx' -7453,6821,1,1,3,13,53,453,1453,2453,7453,106,107,'RAAAAA','JCKAAA','HHHHxx' -5448,6822,0,0,8,8,48,448,1448,448,5448,96,97,'OBAAAA','KCKAAA','OOOOxx' -6768,6823,0,0,8,8,68,768,768,1768,6768,136,137,'IAAAAA','LCKAAA','VVVVxx' -3104,6824,0,0,4,4,4,104,1104,3104,3104,8,9,'KPAAAA','MCKAAA','AAAAxx' -2297,6825,1,1,7,17,97,297,297,2297,2297,194,195,'JKAAAA','NCKAAA','HHHHxx' -7994,6826,0,2,4,14,94,994,1994,2994,7994,188,189,'MVAAAA','OCKAAA','OOOOxx' -550,6827,0,2,0,10,50,550,550,550,550,100,101,'EVAAAA','PCKAAA','VVVVxx' -4777,6828,1,1,7,17,77,777,777,4777,4777,154,155,'TBAAAA','QCKAAA','AAAAxx' -5962,6829,0,2,2,2,62,962,1962,962,5962,124,125,'IVAAAA','RCKAAA','HHHHxx' -1763,6830,1,3,3,3,63,763,1763,1763,1763,126,127,'VPAAAA','SCKAAA','OOOOxx' -3654,6831,0,2,4,14,54,654,1654,3654,3654,108,109,'OKAAAA','TCKAAA','VVVVxx' -4106,6832,0,2,6,6,6,106,106,4106,4106,12,13,'YBAAAA','UCKAAA','AAAAxx' -5156,6833,0,0,6,16,56,156,1156,156,5156,112,113,'IQAAAA','VCKAAA','HHHHxx' -422,6834,0,2,2,2,22,422,422,422,422,44,45,'GQAAAA','WCKAAA','OOOOxx' -5011,6835,1,3,1,11,11,11,1011,11,5011,22,23,'TKAAAA','XCKAAA','VVVVxx' -218,6836,0,2,8,18,18,218,218,218,218,36,37,'KIAAAA','YCKAAA','AAAAxx' -9762,6837,0,2,2,2,62,762,1762,4762,9762,124,125,'MLAAAA','ZCKAAA','HHHHxx' -6074,6838,0,2,4,14,74,74,74,1074,6074,148,149,'QZAAAA','ADKAAA','OOOOxx' -4060,6839,0,0,0,0,60,60,60,4060,4060,120,121,'EAAAAA','BDKAAA','VVVVxx' -8680,6840,0,0,0,0,80,680,680,3680,8680,160,161,'WVAAAA','CDKAAA','AAAAxx' -5863,6841,1,3,3,3,63,863,1863,863,5863,126,127,'NRAAAA','DDKAAA','HHHHxx' -8042,6842,0,2,2,2,42,42,42,3042,8042,84,85,'IXAAAA','EDKAAA','OOOOxx' -2964,6843,0,0,4,4,64,964,964,2964,2964,128,129,'AKAAAA','FDKAAA','VVVVxx' -6931,6844,1,3,1,11,31,931,931,1931,6931,62,63,'PGAAAA','GDKAAA','AAAAxx' -6715,6845,1,3,5,15,15,715,715,1715,6715,30,31,'HYAAAA','HDKAAA','HHHHxx' -5859,6846,1,3,9,19,59,859,1859,859,5859,118,119,'JRAAAA','IDKAAA','OOOOxx' -6173,6847,1,1,3,13,73,173,173,1173,6173,146,147,'LDAAAA','JDKAAA','VVVVxx' -7788,6848,0,0,8,8,88,788,1788,2788,7788,176,177,'ONAAAA','KDKAAA','AAAAxx' -9370,6849,0,2,0,10,70,370,1370,4370,9370,140,141,'KWAAAA','LDKAAA','HHHHxx' -3038,6850,0,2,8,18,38,38,1038,3038,3038,76,77,'WMAAAA','MDKAAA','OOOOxx' -6483,6851,1,3,3,3,83,483,483,1483,6483,166,167,'JPAAAA','NDKAAA','VVVVxx' -7534,6852,0,2,4,14,34,534,1534,2534,7534,68,69,'UDAAAA','ODKAAA','AAAAxx' -5769,6853,1,1,9,9,69,769,1769,769,5769,138,139,'XNAAAA','PDKAAA','HHHHxx' -9152,6854,0,0,2,12,52,152,1152,4152,9152,104,105,'AOAAAA','QDKAAA','OOOOxx' -6251,6855,1,3,1,11,51,251,251,1251,6251,102,103,'LGAAAA','RDKAAA','VVVVxx' -9209,6856,1,1,9,9,9,209,1209,4209,9209,18,19,'FQAAAA','SDKAAA','AAAAxx' -5365,6857,1,1,5,5,65,365,1365,365,5365,130,131,'JYAAAA','TDKAAA','HHHHxx' -509,6858,1,1,9,9,9,509,509,509,509,18,19,'PTAAAA','UDKAAA','OOOOxx' -3132,6859,0,0,2,12,32,132,1132,3132,3132,64,65,'MQAAAA','VDKAAA','VVVVxx' -5373,6860,1,1,3,13,73,373,1373,373,5373,146,147,'RYAAAA','WDKAAA','AAAAxx' -4247,6861,1,3,7,7,47,247,247,4247,4247,94,95,'JHAAAA','XDKAAA','HHHHxx' -3491,6862,1,3,1,11,91,491,1491,3491,3491,182,183,'HEAAAA','YDKAAA','OOOOxx' -495,6863,1,3,5,15,95,495,495,495,495,190,191,'BTAAAA','ZDKAAA','VVVVxx' -1594,6864,0,2,4,14,94,594,1594,1594,1594,188,189,'IJAAAA','AEKAAA','AAAAxx' -2243,6865,1,3,3,3,43,243,243,2243,2243,86,87,'HIAAAA','BEKAAA','HHHHxx' -7780,6866,0,0,0,0,80,780,1780,2780,7780,160,161,'GNAAAA','CEKAAA','OOOOxx' -5632,6867,0,0,2,12,32,632,1632,632,5632,64,65,'QIAAAA','DEKAAA','VVVVxx' -2679,6868,1,3,9,19,79,679,679,2679,2679,158,159,'BZAAAA','EEKAAA','AAAAxx' -1354,6869,0,2,4,14,54,354,1354,1354,1354,108,109,'CAAAAA','FEKAAA','HHHHxx' -180,6870,0,0,0,0,80,180,180,180,180,160,161,'YGAAAA','GEKAAA','OOOOxx' -7017,6871,1,1,7,17,17,17,1017,2017,7017,34,35,'XJAAAA','HEKAAA','VVVVxx' -1867,6872,1,3,7,7,67,867,1867,1867,1867,134,135,'VTAAAA','IEKAAA','AAAAxx' -2213,6873,1,1,3,13,13,213,213,2213,2213,26,27,'DHAAAA','JEKAAA','HHHHxx' -8773,6874,1,1,3,13,73,773,773,3773,8773,146,147,'LZAAAA','KEKAAA','OOOOxx' -1784,6875,0,0,4,4,84,784,1784,1784,1784,168,169,'QQAAAA','LEKAAA','VVVVxx' -5961,6876,1,1,1,1,61,961,1961,961,5961,122,123,'HVAAAA','MEKAAA','AAAAxx' -8801,6877,1,1,1,1,1,801,801,3801,8801,2,3,'NAAAAA','NEKAAA','HHHHxx' -4860,6878,0,0,0,0,60,860,860,4860,4860,120,121,'YEAAAA','OEKAAA','OOOOxx' -2214,6879,0,2,4,14,14,214,214,2214,2214,28,29,'EHAAAA','PEKAAA','VVVVxx' -1735,6880,1,3,5,15,35,735,1735,1735,1735,70,71,'TOAAAA','QEKAAA','AAAAxx' -578,6881,0,2,8,18,78,578,578,578,578,156,157,'GWAAAA','REKAAA','HHHHxx' -7853,6882,1,1,3,13,53,853,1853,2853,7853,106,107,'BQAAAA','SEKAAA','OOOOxx' -2215,6883,1,3,5,15,15,215,215,2215,2215,30,31,'FHAAAA','TEKAAA','VVVVxx' -4704,6884,0,0,4,4,4,704,704,4704,4704,8,9,'YYAAAA','UEKAAA','AAAAxx' -9379,6885,1,3,9,19,79,379,1379,4379,9379,158,159,'TWAAAA','VEKAAA','HHHHxx' -9745,6886,1,1,5,5,45,745,1745,4745,9745,90,91,'VKAAAA','WEKAAA','OOOOxx' -5636,6887,0,0,6,16,36,636,1636,636,5636,72,73,'UIAAAA','XEKAAA','VVVVxx' -4548,6888,0,0,8,8,48,548,548,4548,4548,96,97,'YSAAAA','YEKAAA','AAAAxx' -6537,6889,1,1,7,17,37,537,537,1537,6537,74,75,'LRAAAA','ZEKAAA','HHHHxx' -7748,6890,0,0,8,8,48,748,1748,2748,7748,96,97,'AMAAAA','AFKAAA','OOOOxx' -687,6891,1,3,7,7,87,687,687,687,687,174,175,'LAAAAA','BFKAAA','VVVVxx' -1243,6892,1,3,3,3,43,243,1243,1243,1243,86,87,'VVAAAA','CFKAAA','AAAAxx' -852,6893,0,0,2,12,52,852,852,852,852,104,105,'UGAAAA','DFKAAA','HHHHxx' -785,6894,1,1,5,5,85,785,785,785,785,170,171,'FEAAAA','EFKAAA','OOOOxx' -2002,6895,0,2,2,2,2,2,2,2002,2002,4,5,'AZAAAA','FFKAAA','VVVVxx' -2748,6896,0,0,8,8,48,748,748,2748,2748,96,97,'SBAAAA','GFKAAA','AAAAxx' -6075,6897,1,3,5,15,75,75,75,1075,6075,150,151,'RZAAAA','HFKAAA','HHHHxx' -7029,6898,1,1,9,9,29,29,1029,2029,7029,58,59,'JKAAAA','IFKAAA','OOOOxx' -7474,6899,0,2,4,14,74,474,1474,2474,7474,148,149,'MBAAAA','JFKAAA','VVVVxx' -7755,6900,1,3,5,15,55,755,1755,2755,7755,110,111,'HMAAAA','KFKAAA','AAAAxx' -1456,6901,0,0,6,16,56,456,1456,1456,1456,112,113,'AEAAAA','LFKAAA','HHHHxx' -2808,6902,0,0,8,8,8,808,808,2808,2808,16,17,'AEAAAA','MFKAAA','OOOOxx' -4089,6903,1,1,9,9,89,89,89,4089,4089,178,179,'HBAAAA','NFKAAA','VVVVxx' -4718,6904,0,2,8,18,18,718,718,4718,4718,36,37,'MZAAAA','OFKAAA','AAAAxx' -910,6905,0,2,0,10,10,910,910,910,910,20,21,'AJAAAA','PFKAAA','HHHHxx' -2868,6906,0,0,8,8,68,868,868,2868,2868,136,137,'IGAAAA','QFKAAA','OOOOxx' -2103,6907,1,3,3,3,3,103,103,2103,2103,6,7,'XCAAAA','RFKAAA','VVVVxx' -2407,6908,1,3,7,7,7,407,407,2407,2407,14,15,'POAAAA','SFKAAA','AAAAxx' -4353,6909,1,1,3,13,53,353,353,4353,4353,106,107,'LLAAAA','TFKAAA','HHHHxx' -7988,6910,0,0,8,8,88,988,1988,2988,7988,176,177,'GVAAAA','UFKAAA','OOOOxx' -2750,6911,0,2,0,10,50,750,750,2750,2750,100,101,'UBAAAA','VFKAAA','VVVVxx' -2006,6912,0,2,6,6,6,6,6,2006,2006,12,13,'EZAAAA','WFKAAA','AAAAxx' -4617,6913,1,1,7,17,17,617,617,4617,4617,34,35,'PVAAAA','XFKAAA','HHHHxx' -1251,6914,1,3,1,11,51,251,1251,1251,1251,102,103,'DWAAAA','YFKAAA','OOOOxx' -4590,6915,0,2,0,10,90,590,590,4590,4590,180,181,'OUAAAA','ZFKAAA','VVVVxx' -1144,6916,0,0,4,4,44,144,1144,1144,1144,88,89,'ASAAAA','AGKAAA','AAAAxx' -7131,6917,1,3,1,11,31,131,1131,2131,7131,62,63,'HOAAAA','BGKAAA','HHHHxx' -95,6918,1,3,5,15,95,95,95,95,95,190,191,'RDAAAA','CGKAAA','OOOOxx' -4827,6919,1,3,7,7,27,827,827,4827,4827,54,55,'RDAAAA','DGKAAA','VVVVxx' -4307,6920,1,3,7,7,7,307,307,4307,4307,14,15,'RJAAAA','EGKAAA','AAAAxx' -1505,6921,1,1,5,5,5,505,1505,1505,1505,10,11,'XFAAAA','FGKAAA','HHHHxx' -8191,6922,1,3,1,11,91,191,191,3191,8191,182,183,'BDAAAA','GGKAAA','OOOOxx' -5037,6923,1,1,7,17,37,37,1037,37,5037,74,75,'TLAAAA','HGKAAA','VVVVxx' -7363,6924,1,3,3,3,63,363,1363,2363,7363,126,127,'FXAAAA','IGKAAA','AAAAxx' -8427,6925,1,3,7,7,27,427,427,3427,8427,54,55,'DMAAAA','JGKAAA','HHHHxx' -5231,6926,1,3,1,11,31,231,1231,231,5231,62,63,'FTAAAA','KGKAAA','OOOOxx' -2943,6927,1,3,3,3,43,943,943,2943,2943,86,87,'FJAAAA','LGKAAA','VVVVxx' -4624,6928,0,0,4,4,24,624,624,4624,4624,48,49,'WVAAAA','MGKAAA','AAAAxx' -2020,6929,0,0,0,0,20,20,20,2020,2020,40,41,'SZAAAA','NGKAAA','HHHHxx' -6155,6930,1,3,5,15,55,155,155,1155,6155,110,111,'TCAAAA','OGKAAA','OOOOxx' -4381,6931,1,1,1,1,81,381,381,4381,4381,162,163,'NMAAAA','PGKAAA','VVVVxx' -1057,6932,1,1,7,17,57,57,1057,1057,1057,114,115,'ROAAAA','QGKAAA','AAAAxx' -9010,6933,0,2,0,10,10,10,1010,4010,9010,20,21,'OIAAAA','RGKAAA','HHHHxx' -4947,6934,1,3,7,7,47,947,947,4947,4947,94,95,'HIAAAA','SGKAAA','OOOOxx' -335,6935,1,3,5,15,35,335,335,335,335,70,71,'XMAAAA','TGKAAA','VVVVxx' -6890,6936,0,2,0,10,90,890,890,1890,6890,180,181,'AFAAAA','UGKAAA','AAAAxx' -5070,6937,0,2,0,10,70,70,1070,70,5070,140,141,'ANAAAA','VGKAAA','HHHHxx' -5270,6938,0,2,0,10,70,270,1270,270,5270,140,141,'SUAAAA','WGKAAA','OOOOxx' -8657,6939,1,1,7,17,57,657,657,3657,8657,114,115,'ZUAAAA','XGKAAA','VVVVxx' -7625,6940,1,1,5,5,25,625,1625,2625,7625,50,51,'HHAAAA','YGKAAA','AAAAxx' -5759,6941,1,3,9,19,59,759,1759,759,5759,118,119,'NNAAAA','ZGKAAA','HHHHxx' -9483,6942,1,3,3,3,83,483,1483,4483,9483,166,167,'TAAAAA','AHKAAA','OOOOxx' -8304,6943,0,0,4,4,4,304,304,3304,8304,8,9,'KHAAAA','BHKAAA','VVVVxx' -296,6944,0,0,6,16,96,296,296,296,296,192,193,'KLAAAA','CHKAAA','AAAAxx' -1176,6945,0,0,6,16,76,176,1176,1176,1176,152,153,'GTAAAA','DHKAAA','HHHHxx' -2069,6946,1,1,9,9,69,69,69,2069,2069,138,139,'PBAAAA','EHKAAA','OOOOxx' -1531,6947,1,3,1,11,31,531,1531,1531,1531,62,63,'XGAAAA','FHKAAA','VVVVxx' -5329,6948,1,1,9,9,29,329,1329,329,5329,58,59,'ZWAAAA','GHKAAA','AAAAxx' -3702,6949,0,2,2,2,2,702,1702,3702,3702,4,5,'KMAAAA','HHKAAA','HHHHxx' -6520,6950,0,0,0,0,20,520,520,1520,6520,40,41,'UQAAAA','IHKAAA','OOOOxx' -7310,6951,0,2,0,10,10,310,1310,2310,7310,20,21,'EVAAAA','JHKAAA','VVVVxx' -1175,6952,1,3,5,15,75,175,1175,1175,1175,150,151,'FTAAAA','KHKAAA','AAAAxx' -9107,6953,1,3,7,7,7,107,1107,4107,9107,14,15,'HMAAAA','LHKAAA','HHHHxx' -2737,6954,1,1,7,17,37,737,737,2737,2737,74,75,'HBAAAA','MHKAAA','OOOOxx' -3437,6955,1,1,7,17,37,437,1437,3437,3437,74,75,'FCAAAA','NHKAAA','VVVVxx' -281,6956,1,1,1,1,81,281,281,281,281,162,163,'VKAAAA','OHKAAA','AAAAxx' -6676,6957,0,0,6,16,76,676,676,1676,6676,152,153,'UWAAAA','PHKAAA','HHHHxx' -145,6958,1,1,5,5,45,145,145,145,145,90,91,'PFAAAA','QHKAAA','OOOOxx' -3172,6959,0,0,2,12,72,172,1172,3172,3172,144,145,'ASAAAA','RHKAAA','VVVVxx' -4049,6960,1,1,9,9,49,49,49,4049,4049,98,99,'TZAAAA','SHKAAA','AAAAxx' -6042,6961,0,2,2,2,42,42,42,1042,6042,84,85,'KYAAAA','THKAAA','HHHHxx' -9122,6962,0,2,2,2,22,122,1122,4122,9122,44,45,'WMAAAA','UHKAAA','OOOOxx' -7244,6963,0,0,4,4,44,244,1244,2244,7244,88,89,'QSAAAA','VHKAAA','VVVVxx' -5361,6964,1,1,1,1,61,361,1361,361,5361,122,123,'FYAAAA','WHKAAA','AAAAxx' -8647,6965,1,3,7,7,47,647,647,3647,8647,94,95,'PUAAAA','XHKAAA','HHHHxx' -7956,6966,0,0,6,16,56,956,1956,2956,7956,112,113,'AUAAAA','YHKAAA','OOOOxx' -7812,6967,0,0,2,12,12,812,1812,2812,7812,24,25,'MOAAAA','ZHKAAA','VVVVxx' -570,6968,0,2,0,10,70,570,570,570,570,140,141,'YVAAAA','AIKAAA','AAAAxx' -4115,6969,1,3,5,15,15,115,115,4115,4115,30,31,'HCAAAA','BIKAAA','HHHHxx' -1856,6970,0,0,6,16,56,856,1856,1856,1856,112,113,'KTAAAA','CIKAAA','OOOOxx' -9582,6971,0,2,2,2,82,582,1582,4582,9582,164,165,'OEAAAA','DIKAAA','VVVVxx' -2025,6972,1,1,5,5,25,25,25,2025,2025,50,51,'XZAAAA','EIKAAA','AAAAxx' -986,6973,0,2,6,6,86,986,986,986,986,172,173,'YLAAAA','FIKAAA','HHHHxx' -8358,6974,0,2,8,18,58,358,358,3358,8358,116,117,'MJAAAA','GIKAAA','OOOOxx' -510,6975,0,2,0,10,10,510,510,510,510,20,21,'QTAAAA','HIKAAA','VVVVxx' -6101,6976,1,1,1,1,1,101,101,1101,6101,2,3,'RAAAAA','IIKAAA','AAAAxx' -4167,6977,1,3,7,7,67,167,167,4167,4167,134,135,'HEAAAA','JIKAAA','HHHHxx' -6139,6978,1,3,9,19,39,139,139,1139,6139,78,79,'DCAAAA','KIKAAA','OOOOxx' -6912,6979,0,0,2,12,12,912,912,1912,6912,24,25,'WFAAAA','LIKAAA','VVVVxx' -339,6980,1,3,9,19,39,339,339,339,339,78,79,'BNAAAA','MIKAAA','AAAAxx' -8759,6981,1,3,9,19,59,759,759,3759,8759,118,119,'XYAAAA','NIKAAA','HHHHxx' -246,6982,0,2,6,6,46,246,246,246,246,92,93,'MJAAAA','OIKAAA','OOOOxx' -2831,6983,1,3,1,11,31,831,831,2831,2831,62,63,'XEAAAA','PIKAAA','VVVVxx' -2327,6984,1,3,7,7,27,327,327,2327,2327,54,55,'NLAAAA','QIKAAA','AAAAxx' -7001,6985,1,1,1,1,1,1,1001,2001,7001,2,3,'HJAAAA','RIKAAA','HHHHxx' -4398,6986,0,2,8,18,98,398,398,4398,4398,196,197,'ENAAAA','SIKAAA','OOOOxx' -1495,6987,1,3,5,15,95,495,1495,1495,1495,190,191,'NFAAAA','TIKAAA','VVVVxx' -8522,6988,0,2,2,2,22,522,522,3522,8522,44,45,'UPAAAA','UIKAAA','AAAAxx' -7090,6989,0,2,0,10,90,90,1090,2090,7090,180,181,'SMAAAA','VIKAAA','HHHHxx' -8457,6990,1,1,7,17,57,457,457,3457,8457,114,115,'HNAAAA','WIKAAA','OOOOxx' -4238,6991,0,2,8,18,38,238,238,4238,4238,76,77,'AHAAAA','XIKAAA','VVVVxx' -6791,6992,1,3,1,11,91,791,791,1791,6791,182,183,'FBAAAA','YIKAAA','AAAAxx' -1342,6993,0,2,2,2,42,342,1342,1342,1342,84,85,'QZAAAA','ZIKAAA','HHHHxx' -4580,6994,0,0,0,0,80,580,580,4580,4580,160,161,'EUAAAA','AJKAAA','OOOOxx' -1475,6995,1,3,5,15,75,475,1475,1475,1475,150,151,'TEAAAA','BJKAAA','VVVVxx' -9184,6996,0,0,4,4,84,184,1184,4184,9184,168,169,'GPAAAA','CJKAAA','AAAAxx' -1189,6997,1,1,9,9,89,189,1189,1189,1189,178,179,'TTAAAA','DJKAAA','HHHHxx' -638,6998,0,2,8,18,38,638,638,638,638,76,77,'OYAAAA','EJKAAA','OOOOxx' -5867,6999,1,3,7,7,67,867,1867,867,5867,134,135,'RRAAAA','FJKAAA','VVVVxx' -9911,7000,1,3,1,11,11,911,1911,4911,9911,22,23,'FRAAAA','GJKAAA','AAAAxx' -8147,7001,1,3,7,7,47,147,147,3147,8147,94,95,'JBAAAA','HJKAAA','HHHHxx' -4492,7002,0,0,2,12,92,492,492,4492,4492,184,185,'UQAAAA','IJKAAA','OOOOxx' -385,7003,1,1,5,5,85,385,385,385,385,170,171,'VOAAAA','JJKAAA','VVVVxx' -5235,7004,1,3,5,15,35,235,1235,235,5235,70,71,'JTAAAA','KJKAAA','AAAAxx' -4812,7005,0,0,2,12,12,812,812,4812,4812,24,25,'CDAAAA','LJKAAA','HHHHxx' -9807,7006,1,3,7,7,7,807,1807,4807,9807,14,15,'FNAAAA','MJKAAA','OOOOxx' -9588,7007,0,0,8,8,88,588,1588,4588,9588,176,177,'UEAAAA','NJKAAA','VVVVxx' -9832,7008,0,0,2,12,32,832,1832,4832,9832,64,65,'EOAAAA','OJKAAA','AAAAxx' -3757,7009,1,1,7,17,57,757,1757,3757,3757,114,115,'NOAAAA','PJKAAA','HHHHxx' -9703,7010,1,3,3,3,3,703,1703,4703,9703,6,7,'FJAAAA','QJKAAA','OOOOxx' -1022,7011,0,2,2,2,22,22,1022,1022,1022,44,45,'INAAAA','RJKAAA','VVVVxx' -5165,7012,1,1,5,5,65,165,1165,165,5165,130,131,'RQAAAA','SJKAAA','AAAAxx' -7129,7013,1,1,9,9,29,129,1129,2129,7129,58,59,'FOAAAA','TJKAAA','HHHHxx' -4164,7014,0,0,4,4,64,164,164,4164,4164,128,129,'EEAAAA','UJKAAA','OOOOxx' -7239,7015,1,3,9,19,39,239,1239,2239,7239,78,79,'LSAAAA','VJKAAA','VVVVxx' -523,7016,1,3,3,3,23,523,523,523,523,46,47,'DUAAAA','WJKAAA','AAAAxx' -4670,7017,0,2,0,10,70,670,670,4670,4670,140,141,'QXAAAA','XJKAAA','HHHHxx' -8503,7018,1,3,3,3,3,503,503,3503,8503,6,7,'BPAAAA','YJKAAA','OOOOxx' -714,7019,0,2,4,14,14,714,714,714,714,28,29,'MBAAAA','ZJKAAA','VVVVxx' -1350,7020,0,2,0,10,50,350,1350,1350,1350,100,101,'YZAAAA','AKKAAA','AAAAxx' -8318,7021,0,2,8,18,18,318,318,3318,8318,36,37,'YHAAAA','BKKAAA','HHHHxx' -1834,7022,0,2,4,14,34,834,1834,1834,1834,68,69,'OSAAAA','CKKAAA','OOOOxx' -4306,7023,0,2,6,6,6,306,306,4306,4306,12,13,'QJAAAA','DKKAAA','VVVVxx' -8543,7024,1,3,3,3,43,543,543,3543,8543,86,87,'PQAAAA','EKKAAA','AAAAxx' -9397,7025,1,1,7,17,97,397,1397,4397,9397,194,195,'LXAAAA','FKKAAA','HHHHxx' -3145,7026,1,1,5,5,45,145,1145,3145,3145,90,91,'ZQAAAA','GKKAAA','OOOOxx' -3942,7027,0,2,2,2,42,942,1942,3942,3942,84,85,'QVAAAA','HKKAAA','VVVVxx' -8583,7028,1,3,3,3,83,583,583,3583,8583,166,167,'DSAAAA','IKKAAA','AAAAxx' -8073,7029,1,1,3,13,73,73,73,3073,8073,146,147,'NYAAAA','JKKAAA','HHHHxx' -4940,7030,0,0,0,0,40,940,940,4940,4940,80,81,'AIAAAA','KKKAAA','OOOOxx' -9573,7031,1,1,3,13,73,573,1573,4573,9573,146,147,'FEAAAA','LKKAAA','VVVVxx' -5325,7032,1,1,5,5,25,325,1325,325,5325,50,51,'VWAAAA','MKKAAA','AAAAxx' -1833,7033,1,1,3,13,33,833,1833,1833,1833,66,67,'NSAAAA','NKKAAA','HHHHxx' -1337,7034,1,1,7,17,37,337,1337,1337,1337,74,75,'LZAAAA','OKKAAA','OOOOxx' -9749,7035,1,1,9,9,49,749,1749,4749,9749,98,99,'ZKAAAA','PKKAAA','VVVVxx' -7505,7036,1,1,5,5,5,505,1505,2505,7505,10,11,'RCAAAA','QKKAAA','AAAAxx' -9731,7037,1,3,1,11,31,731,1731,4731,9731,62,63,'HKAAAA','RKKAAA','HHHHxx' -4098,7038,0,2,8,18,98,98,98,4098,4098,196,197,'QBAAAA','SKKAAA','OOOOxx' -1418,7039,0,2,8,18,18,418,1418,1418,1418,36,37,'OCAAAA','TKKAAA','VVVVxx' -63,7040,1,3,3,3,63,63,63,63,63,126,127,'LCAAAA','UKKAAA','AAAAxx' -9889,7041,1,1,9,9,89,889,1889,4889,9889,178,179,'JQAAAA','VKKAAA','HHHHxx' -2871,7042,1,3,1,11,71,871,871,2871,2871,142,143,'LGAAAA','WKKAAA','OOOOxx' -1003,7043,1,3,3,3,3,3,1003,1003,1003,6,7,'PMAAAA','XKKAAA','VVVVxx' -8796,7044,0,0,6,16,96,796,796,3796,8796,192,193,'IAAAAA','YKKAAA','AAAAxx' -22,7045,0,2,2,2,22,22,22,22,22,44,45,'WAAAAA','ZKKAAA','HHHHxx' -8244,7046,0,0,4,4,44,244,244,3244,8244,88,89,'CFAAAA','ALKAAA','OOOOxx' -2282,7047,0,2,2,2,82,282,282,2282,2282,164,165,'UJAAAA','BLKAAA','VVVVxx' -3487,7048,1,3,7,7,87,487,1487,3487,3487,174,175,'DEAAAA','CLKAAA','AAAAxx' -8633,7049,1,1,3,13,33,633,633,3633,8633,66,67,'BUAAAA','DLKAAA','HHHHxx' -6418,7050,0,2,8,18,18,418,418,1418,6418,36,37,'WMAAAA','ELKAAA','OOOOxx' -4682,7051,0,2,2,2,82,682,682,4682,4682,164,165,'CYAAAA','FLKAAA','VVVVxx' -4103,7052,1,3,3,3,3,103,103,4103,4103,6,7,'VBAAAA','GLKAAA','AAAAxx' -6256,7053,0,0,6,16,56,256,256,1256,6256,112,113,'QGAAAA','HLKAAA','HHHHxx' -4040,7054,0,0,0,0,40,40,40,4040,4040,80,81,'KZAAAA','ILKAAA','OOOOxx' -9342,7055,0,2,2,2,42,342,1342,4342,9342,84,85,'IVAAAA','JLKAAA','VVVVxx' -9969,7056,1,1,9,9,69,969,1969,4969,9969,138,139,'LTAAAA','KLKAAA','AAAAxx' -223,7057,1,3,3,3,23,223,223,223,223,46,47,'PIAAAA','LLKAAA','HHHHxx' -4593,7058,1,1,3,13,93,593,593,4593,4593,186,187,'RUAAAA','MLKAAA','OOOOxx' -44,7059,0,0,4,4,44,44,44,44,44,88,89,'SBAAAA','NLKAAA','VVVVxx' -3513,7060,1,1,3,13,13,513,1513,3513,3513,26,27,'DFAAAA','OLKAAA','AAAAxx' -5771,7061,1,3,1,11,71,771,1771,771,5771,142,143,'ZNAAAA','PLKAAA','HHHHxx' -5083,7062,1,3,3,3,83,83,1083,83,5083,166,167,'NNAAAA','QLKAAA','OOOOxx' -3839,7063,1,3,9,19,39,839,1839,3839,3839,78,79,'RRAAAA','RLKAAA','VVVVxx' -2986,7064,0,2,6,6,86,986,986,2986,2986,172,173,'WKAAAA','SLKAAA','AAAAxx' -2200,7065,0,0,0,0,0,200,200,2200,2200,0,1,'QGAAAA','TLKAAA','HHHHxx' -197,7066,1,1,7,17,97,197,197,197,197,194,195,'PHAAAA','ULKAAA','OOOOxx' -7455,7067,1,3,5,15,55,455,1455,2455,7455,110,111,'TAAAAA','VLKAAA','VVVVxx' -1379,7068,1,3,9,19,79,379,1379,1379,1379,158,159,'BBAAAA','WLKAAA','AAAAxx' -4356,7069,0,0,6,16,56,356,356,4356,4356,112,113,'OLAAAA','XLKAAA','HHHHxx' -6888,7070,0,0,8,8,88,888,888,1888,6888,176,177,'YEAAAA','YLKAAA','OOOOxx' -9139,7071,1,3,9,19,39,139,1139,4139,9139,78,79,'NNAAAA','ZLKAAA','VVVVxx' -7682,7072,0,2,2,2,82,682,1682,2682,7682,164,165,'MJAAAA','AMKAAA','AAAAxx' -4873,7073,1,1,3,13,73,873,873,4873,4873,146,147,'LFAAAA','BMKAAA','HHHHxx' -783,7074,1,3,3,3,83,783,783,783,783,166,167,'DEAAAA','CMKAAA','OOOOxx' -6071,7075,1,3,1,11,71,71,71,1071,6071,142,143,'NZAAAA','DMKAAA','VVVVxx' -5160,7076,0,0,0,0,60,160,1160,160,5160,120,121,'MQAAAA','EMKAAA','AAAAxx' -2291,7077,1,3,1,11,91,291,291,2291,2291,182,183,'DKAAAA','FMKAAA','HHHHxx' -187,7078,1,3,7,7,87,187,187,187,187,174,175,'FHAAAA','GMKAAA','OOOOxx' -7786,7079,0,2,6,6,86,786,1786,2786,7786,172,173,'MNAAAA','HMKAAA','VVVVxx' -3432,7080,0,0,2,12,32,432,1432,3432,3432,64,65,'ACAAAA','IMKAAA','AAAAxx' -5450,7081,0,2,0,10,50,450,1450,450,5450,100,101,'QBAAAA','JMKAAA','HHHHxx' -2699,7082,1,3,9,19,99,699,699,2699,2699,198,199,'VZAAAA','KMKAAA','OOOOxx' -692,7083,0,0,2,12,92,692,692,692,692,184,185,'QAAAAA','LMKAAA','VVVVxx' -6081,7084,1,1,1,1,81,81,81,1081,6081,162,163,'XZAAAA','MMKAAA','AAAAxx' -4829,7085,1,1,9,9,29,829,829,4829,4829,58,59,'TDAAAA','NMKAAA','HHHHxx' -238,7086,0,2,8,18,38,238,238,238,238,76,77,'EJAAAA','OMKAAA','OOOOxx' -9100,7087,0,0,0,0,0,100,1100,4100,9100,0,1,'AMAAAA','PMKAAA','VVVVxx' -1968,7088,0,0,8,8,68,968,1968,1968,1968,136,137,'SXAAAA','QMKAAA','AAAAxx' -1872,7089,0,0,2,12,72,872,1872,1872,1872,144,145,'AUAAAA','RMKAAA','HHHHxx' -7051,7090,1,3,1,11,51,51,1051,2051,7051,102,103,'FLAAAA','SMKAAA','OOOOxx' -2743,7091,1,3,3,3,43,743,743,2743,2743,86,87,'NBAAAA','TMKAAA','VVVVxx' -1237,7092,1,1,7,17,37,237,1237,1237,1237,74,75,'PVAAAA','UMKAAA','AAAAxx' -3052,7093,0,0,2,12,52,52,1052,3052,3052,104,105,'KNAAAA','VMKAAA','HHHHxx' -8021,7094,1,1,1,1,21,21,21,3021,8021,42,43,'NWAAAA','WMKAAA','OOOOxx' -657,7095,1,1,7,17,57,657,657,657,657,114,115,'HZAAAA','XMKAAA','VVVVxx' -2236,7096,0,0,6,16,36,236,236,2236,2236,72,73,'AIAAAA','YMKAAA','AAAAxx' -7011,7097,1,3,1,11,11,11,1011,2011,7011,22,23,'RJAAAA','ZMKAAA','HHHHxx' -4067,7098,1,3,7,7,67,67,67,4067,4067,134,135,'LAAAAA','ANKAAA','OOOOxx' -9449,7099,1,1,9,9,49,449,1449,4449,9449,98,99,'LZAAAA','BNKAAA','VVVVxx' -7428,7100,0,0,8,8,28,428,1428,2428,7428,56,57,'SZAAAA','CNKAAA','AAAAxx' -1272,7101,0,0,2,12,72,272,1272,1272,1272,144,145,'YWAAAA','DNKAAA','HHHHxx' -6897,7102,1,1,7,17,97,897,897,1897,6897,194,195,'HFAAAA','ENKAAA','OOOOxx' -5839,7103,1,3,9,19,39,839,1839,839,5839,78,79,'PQAAAA','FNKAAA','VVVVxx' -6835,7104,1,3,5,15,35,835,835,1835,6835,70,71,'XCAAAA','GNKAAA','AAAAxx' -1887,7105,1,3,7,7,87,887,1887,1887,1887,174,175,'PUAAAA','HNKAAA','HHHHxx' -1551,7106,1,3,1,11,51,551,1551,1551,1551,102,103,'RHAAAA','INKAAA','OOOOxx' -4667,7107,1,3,7,7,67,667,667,4667,4667,134,135,'NXAAAA','JNKAAA','VVVVxx' -9603,7108,1,3,3,3,3,603,1603,4603,9603,6,7,'JFAAAA','KNKAAA','AAAAxx' -4332,7109,0,0,2,12,32,332,332,4332,4332,64,65,'QKAAAA','LNKAAA','HHHHxx' -5681,7110,1,1,1,1,81,681,1681,681,5681,162,163,'NKAAAA','MNKAAA','OOOOxx' -8062,7111,0,2,2,2,62,62,62,3062,8062,124,125,'CYAAAA','NNKAAA','VVVVxx' -2302,7112,0,2,2,2,2,302,302,2302,2302,4,5,'OKAAAA','ONKAAA','AAAAxx' -2825,7113,1,1,5,5,25,825,825,2825,2825,50,51,'REAAAA','PNKAAA','HHHHxx' -4527,7114,1,3,7,7,27,527,527,4527,4527,54,55,'DSAAAA','QNKAAA','OOOOxx' -4230,7115,0,2,0,10,30,230,230,4230,4230,60,61,'SGAAAA','RNKAAA','VVVVxx' -3053,7116,1,1,3,13,53,53,1053,3053,3053,106,107,'LNAAAA','SNKAAA','AAAAxx' -983,7117,1,3,3,3,83,983,983,983,983,166,167,'VLAAAA','TNKAAA','HHHHxx' -9458,7118,0,2,8,18,58,458,1458,4458,9458,116,117,'UZAAAA','UNKAAA','OOOOxx' -4128,7119,0,0,8,8,28,128,128,4128,4128,56,57,'UCAAAA','VNKAAA','VVVVxx' -425,7120,1,1,5,5,25,425,425,425,425,50,51,'JQAAAA','WNKAAA','AAAAxx' -3911,7121,1,3,1,11,11,911,1911,3911,3911,22,23,'LUAAAA','XNKAAA','HHHHxx' -6607,7122,1,3,7,7,7,607,607,1607,6607,14,15,'DUAAAA','YNKAAA','OOOOxx' -5431,7123,1,3,1,11,31,431,1431,431,5431,62,63,'XAAAAA','ZNKAAA','VVVVxx' -6330,7124,0,2,0,10,30,330,330,1330,6330,60,61,'MJAAAA','AOKAAA','AAAAxx' -3592,7125,0,0,2,12,92,592,1592,3592,3592,184,185,'EIAAAA','BOKAAA','HHHHxx' -154,7126,0,2,4,14,54,154,154,154,154,108,109,'YFAAAA','COKAAA','OOOOxx' -9879,7127,1,3,9,19,79,879,1879,4879,9879,158,159,'ZPAAAA','DOKAAA','VVVVxx' -3202,7128,0,2,2,2,2,202,1202,3202,3202,4,5,'ETAAAA','EOKAAA','AAAAxx' -3056,7129,0,0,6,16,56,56,1056,3056,3056,112,113,'ONAAAA','FOKAAA','HHHHxx' -9890,7130,0,2,0,10,90,890,1890,4890,9890,180,181,'KQAAAA','GOKAAA','OOOOxx' -5840,7131,0,0,0,0,40,840,1840,840,5840,80,81,'QQAAAA','HOKAAA','VVVVxx' -9804,7132,0,0,4,4,4,804,1804,4804,9804,8,9,'CNAAAA','IOKAAA','AAAAxx' -681,7133,1,1,1,1,81,681,681,681,681,162,163,'FAAAAA','JOKAAA','HHHHxx' -3443,7134,1,3,3,3,43,443,1443,3443,3443,86,87,'LCAAAA','KOKAAA','OOOOxx' -8088,7135,0,0,8,8,88,88,88,3088,8088,176,177,'CZAAAA','LOKAAA','VVVVxx' -9447,7136,1,3,7,7,47,447,1447,4447,9447,94,95,'JZAAAA','MOKAAA','AAAAxx' -1490,7137,0,2,0,10,90,490,1490,1490,1490,180,181,'IFAAAA','NOKAAA','HHHHxx' -3684,7138,0,0,4,4,84,684,1684,3684,3684,168,169,'SLAAAA','OOKAAA','OOOOxx' -3113,7139,1,1,3,13,13,113,1113,3113,3113,26,27,'TPAAAA','POKAAA','VVVVxx' -9004,7140,0,0,4,4,4,4,1004,4004,9004,8,9,'IIAAAA','QOKAAA','AAAAxx' -7147,7141,1,3,7,7,47,147,1147,2147,7147,94,95,'XOAAAA','ROKAAA','HHHHxx' -7571,7142,1,3,1,11,71,571,1571,2571,7571,142,143,'FFAAAA','SOKAAA','OOOOxx' -5545,7143,1,1,5,5,45,545,1545,545,5545,90,91,'HFAAAA','TOKAAA','VVVVxx' -4558,7144,0,2,8,18,58,558,558,4558,4558,116,117,'ITAAAA','UOKAAA','AAAAxx' -6206,7145,0,2,6,6,6,206,206,1206,6206,12,13,'SEAAAA','VOKAAA','HHHHxx' -5695,7146,1,3,5,15,95,695,1695,695,5695,190,191,'BLAAAA','WOKAAA','OOOOxx' -9600,7147,0,0,0,0,0,600,1600,4600,9600,0,1,'GFAAAA','XOKAAA','VVVVxx' -5432,7148,0,0,2,12,32,432,1432,432,5432,64,65,'YAAAAA','YOKAAA','AAAAxx' -9299,7149,1,3,9,19,99,299,1299,4299,9299,198,199,'RTAAAA','ZOKAAA','HHHHxx' -2386,7150,0,2,6,6,86,386,386,2386,2386,172,173,'UNAAAA','APKAAA','OOOOxx' -2046,7151,0,2,6,6,46,46,46,2046,2046,92,93,'SAAAAA','BPKAAA','VVVVxx' -3293,7152,1,1,3,13,93,293,1293,3293,3293,186,187,'RWAAAA','CPKAAA','AAAAxx' -3046,7153,0,2,6,6,46,46,1046,3046,3046,92,93,'ENAAAA','DPKAAA','HHHHxx' -214,7154,0,2,4,14,14,214,214,214,214,28,29,'GIAAAA','EPKAAA','OOOOxx' -7893,7155,1,1,3,13,93,893,1893,2893,7893,186,187,'PRAAAA','FPKAAA','VVVVxx' -891,7156,1,3,1,11,91,891,891,891,891,182,183,'HIAAAA','GPKAAA','AAAAxx' -6499,7157,1,3,9,19,99,499,499,1499,6499,198,199,'ZPAAAA','HPKAAA','HHHHxx' -5003,7158,1,3,3,3,3,3,1003,3,5003,6,7,'LKAAAA','IPKAAA','OOOOxx' -6487,7159,1,3,7,7,87,487,487,1487,6487,174,175,'NPAAAA','JPKAAA','VVVVxx' -9403,7160,1,3,3,3,3,403,1403,4403,9403,6,7,'RXAAAA','KPKAAA','AAAAxx' -945,7161,1,1,5,5,45,945,945,945,945,90,91,'JKAAAA','LPKAAA','HHHHxx' -6713,7162,1,1,3,13,13,713,713,1713,6713,26,27,'FYAAAA','MPKAAA','OOOOxx' -9928,7163,0,0,8,8,28,928,1928,4928,9928,56,57,'WRAAAA','NPKAAA','VVVVxx' -8585,7164,1,1,5,5,85,585,585,3585,8585,170,171,'FSAAAA','OPKAAA','AAAAxx' -4004,7165,0,0,4,4,4,4,4,4004,4004,8,9,'AYAAAA','PPKAAA','HHHHxx' -2528,7166,0,0,8,8,28,528,528,2528,2528,56,57,'GTAAAA','QPKAAA','OOOOxx' -3350,7167,0,2,0,10,50,350,1350,3350,3350,100,101,'WYAAAA','RPKAAA','VVVVxx' -2160,7168,0,0,0,0,60,160,160,2160,2160,120,121,'CFAAAA','SPKAAA','AAAAxx' -1521,7169,1,1,1,1,21,521,1521,1521,1521,42,43,'NGAAAA','TPKAAA','HHHHxx' -5660,7170,0,0,0,0,60,660,1660,660,5660,120,121,'SJAAAA','UPKAAA','OOOOxx' -5755,7171,1,3,5,15,55,755,1755,755,5755,110,111,'JNAAAA','VPKAAA','VVVVxx' -7614,7172,0,2,4,14,14,614,1614,2614,7614,28,29,'WGAAAA','WPKAAA','AAAAxx' -3121,7173,1,1,1,1,21,121,1121,3121,3121,42,43,'BQAAAA','XPKAAA','HHHHxx' -2735,7174,1,3,5,15,35,735,735,2735,2735,70,71,'FBAAAA','YPKAAA','OOOOxx' -7506,7175,0,2,6,6,6,506,1506,2506,7506,12,13,'SCAAAA','ZPKAAA','VVVVxx' -2693,7176,1,1,3,13,93,693,693,2693,2693,186,187,'PZAAAA','AQKAAA','AAAAxx' -2892,7177,0,0,2,12,92,892,892,2892,2892,184,185,'GHAAAA','BQKAAA','HHHHxx' -3310,7178,0,2,0,10,10,310,1310,3310,3310,20,21,'IXAAAA','CQKAAA','OOOOxx' -3484,7179,0,0,4,4,84,484,1484,3484,3484,168,169,'AEAAAA','DQKAAA','VVVVxx' -9733,7180,1,1,3,13,33,733,1733,4733,9733,66,67,'JKAAAA','EQKAAA','AAAAxx' -29,7181,1,1,9,9,29,29,29,29,29,58,59,'DBAAAA','FQKAAA','HHHHxx' -9013,7182,1,1,3,13,13,13,1013,4013,9013,26,27,'RIAAAA','GQKAAA','OOOOxx' -3847,7183,1,3,7,7,47,847,1847,3847,3847,94,95,'ZRAAAA','HQKAAA','VVVVxx' -6724,7184,0,0,4,4,24,724,724,1724,6724,48,49,'QYAAAA','IQKAAA','AAAAxx' -2559,7185,1,3,9,19,59,559,559,2559,2559,118,119,'LUAAAA','JQKAAA','HHHHxx' -5326,7186,0,2,6,6,26,326,1326,326,5326,52,53,'WWAAAA','KQKAAA','OOOOxx' -4802,7187,0,2,2,2,2,802,802,4802,4802,4,5,'SCAAAA','LQKAAA','VVVVxx' -131,7188,1,3,1,11,31,131,131,131,131,62,63,'BFAAAA','MQKAAA','AAAAxx' -1634,7189,0,2,4,14,34,634,1634,1634,1634,68,69,'WKAAAA','NQKAAA','HHHHxx' -919,7190,1,3,9,19,19,919,919,919,919,38,39,'JJAAAA','OQKAAA','OOOOxx' -9575,7191,1,3,5,15,75,575,1575,4575,9575,150,151,'HEAAAA','PQKAAA','VVVVxx' -1256,7192,0,0,6,16,56,256,1256,1256,1256,112,113,'IWAAAA','QQKAAA','AAAAxx' -9428,7193,0,0,8,8,28,428,1428,4428,9428,56,57,'QYAAAA','RQKAAA','HHHHxx' -5121,7194,1,1,1,1,21,121,1121,121,5121,42,43,'ZOAAAA','SQKAAA','OOOOxx' -6584,7195,0,0,4,4,84,584,584,1584,6584,168,169,'GTAAAA','TQKAAA','VVVVxx' -7193,7196,1,1,3,13,93,193,1193,2193,7193,186,187,'RQAAAA','UQKAAA','AAAAxx' -4047,7197,1,3,7,7,47,47,47,4047,4047,94,95,'RZAAAA','VQKAAA','HHHHxx' -104,7198,0,0,4,4,4,104,104,104,104,8,9,'AEAAAA','WQKAAA','OOOOxx' -1527,7199,1,3,7,7,27,527,1527,1527,1527,54,55,'TGAAAA','XQKAAA','VVVVxx' -3460,7200,0,0,0,0,60,460,1460,3460,3460,120,121,'CDAAAA','YQKAAA','AAAAxx' -8526,7201,0,2,6,6,26,526,526,3526,8526,52,53,'YPAAAA','ZQKAAA','HHHHxx' -8959,7202,1,3,9,19,59,959,959,3959,8959,118,119,'PGAAAA','ARKAAA','OOOOxx' -3633,7203,1,1,3,13,33,633,1633,3633,3633,66,67,'TJAAAA','BRKAAA','VVVVxx' -1799,7204,1,3,9,19,99,799,1799,1799,1799,198,199,'FRAAAA','CRKAAA','AAAAxx' -461,7205,1,1,1,1,61,461,461,461,461,122,123,'TRAAAA','DRKAAA','HHHHxx' -718,7206,0,2,8,18,18,718,718,718,718,36,37,'QBAAAA','ERKAAA','OOOOxx' -3219,7207,1,3,9,19,19,219,1219,3219,3219,38,39,'VTAAAA','FRKAAA','VVVVxx' -3494,7208,0,2,4,14,94,494,1494,3494,3494,188,189,'KEAAAA','GRKAAA','AAAAxx' -9402,7209,0,2,2,2,2,402,1402,4402,9402,4,5,'QXAAAA','HRKAAA','HHHHxx' -7983,7210,1,3,3,3,83,983,1983,2983,7983,166,167,'BVAAAA','IRKAAA','OOOOxx' -7919,7211,1,3,9,19,19,919,1919,2919,7919,38,39,'PSAAAA','JRKAAA','VVVVxx' -8036,7212,0,0,6,16,36,36,36,3036,8036,72,73,'CXAAAA','KRKAAA','AAAAxx' -5164,7213,0,0,4,4,64,164,1164,164,5164,128,129,'QQAAAA','LRKAAA','HHHHxx' -4160,7214,0,0,0,0,60,160,160,4160,4160,120,121,'AEAAAA','MRKAAA','OOOOxx' -5370,7215,0,2,0,10,70,370,1370,370,5370,140,141,'OYAAAA','NRKAAA','VVVVxx' -5347,7216,1,3,7,7,47,347,1347,347,5347,94,95,'RXAAAA','ORKAAA','AAAAxx' -7109,7217,1,1,9,9,9,109,1109,2109,7109,18,19,'LNAAAA','PRKAAA','HHHHxx' -4826,7218,0,2,6,6,26,826,826,4826,4826,52,53,'QDAAAA','QRKAAA','OOOOxx' -1338,7219,0,2,8,18,38,338,1338,1338,1338,76,77,'MZAAAA','RRKAAA','VVVVxx' -2711,7220,1,3,1,11,11,711,711,2711,2711,22,23,'HAAAAA','SRKAAA','AAAAxx' -6299,7221,1,3,9,19,99,299,299,1299,6299,198,199,'HIAAAA','TRKAAA','HHHHxx' -1616,7222,0,0,6,16,16,616,1616,1616,1616,32,33,'EKAAAA','URKAAA','OOOOxx' -7519,7223,1,3,9,19,19,519,1519,2519,7519,38,39,'FDAAAA','VRKAAA','VVVVxx' -1262,7224,0,2,2,2,62,262,1262,1262,1262,124,125,'OWAAAA','WRKAAA','AAAAxx' -7228,7225,0,0,8,8,28,228,1228,2228,7228,56,57,'ASAAAA','XRKAAA','HHHHxx' -7892,7226,0,0,2,12,92,892,1892,2892,7892,184,185,'ORAAAA','YRKAAA','OOOOxx' -7929,7227,1,1,9,9,29,929,1929,2929,7929,58,59,'ZSAAAA','ZRKAAA','VVVVxx' -7705,7228,1,1,5,5,5,705,1705,2705,7705,10,11,'JKAAAA','ASKAAA','AAAAxx' -3111,7229,1,3,1,11,11,111,1111,3111,3111,22,23,'RPAAAA','BSKAAA','HHHHxx' -3066,7230,0,2,6,6,66,66,1066,3066,3066,132,133,'YNAAAA','CSKAAA','OOOOxx' -9559,7231,1,3,9,19,59,559,1559,4559,9559,118,119,'RDAAAA','DSKAAA','VVVVxx' -3787,7232,1,3,7,7,87,787,1787,3787,3787,174,175,'RPAAAA','ESKAAA','AAAAxx' -8710,7233,0,2,0,10,10,710,710,3710,8710,20,21,'AXAAAA','FSKAAA','HHHHxx' -4870,7234,0,2,0,10,70,870,870,4870,4870,140,141,'IFAAAA','GSKAAA','OOOOxx' -1883,7235,1,3,3,3,83,883,1883,1883,1883,166,167,'LUAAAA','HSKAAA','VVVVxx' -9689,7236,1,1,9,9,89,689,1689,4689,9689,178,179,'RIAAAA','ISKAAA','AAAAxx' -9491,7237,1,3,1,11,91,491,1491,4491,9491,182,183,'BBAAAA','JSKAAA','HHHHxx' -2035,7238,1,3,5,15,35,35,35,2035,2035,70,71,'HAAAAA','KSKAAA','OOOOxx' -655,7239,1,3,5,15,55,655,655,655,655,110,111,'FZAAAA','LSKAAA','VVVVxx' -6305,7240,1,1,5,5,5,305,305,1305,6305,10,11,'NIAAAA','MSKAAA','AAAAxx' -9423,7241,1,3,3,3,23,423,1423,4423,9423,46,47,'LYAAAA','NSKAAA','HHHHxx' -283,7242,1,3,3,3,83,283,283,283,283,166,167,'XKAAAA','OSKAAA','OOOOxx' -2607,7243,1,3,7,7,7,607,607,2607,2607,14,15,'HWAAAA','PSKAAA','VVVVxx' -7740,7244,0,0,0,0,40,740,1740,2740,7740,80,81,'SLAAAA','QSKAAA','AAAAxx' -6956,7245,0,0,6,16,56,956,956,1956,6956,112,113,'OHAAAA','RSKAAA','HHHHxx' -884,7246,0,0,4,4,84,884,884,884,884,168,169,'AIAAAA','SSKAAA','OOOOxx' -5730,7247,0,2,0,10,30,730,1730,730,5730,60,61,'KMAAAA','TSKAAA','VVVVxx' -3438,7248,0,2,8,18,38,438,1438,3438,3438,76,77,'GCAAAA','USKAAA','AAAAxx' -3250,7249,0,2,0,10,50,250,1250,3250,3250,100,101,'AVAAAA','VSKAAA','HHHHxx' -5470,7250,0,2,0,10,70,470,1470,470,5470,140,141,'KCAAAA','WSKAAA','OOOOxx' -2037,7251,1,1,7,17,37,37,37,2037,2037,74,75,'JAAAAA','XSKAAA','VVVVxx' -6593,7252,1,1,3,13,93,593,593,1593,6593,186,187,'PTAAAA','YSKAAA','AAAAxx' -3893,7253,1,1,3,13,93,893,1893,3893,3893,186,187,'TTAAAA','ZSKAAA','HHHHxx' -3200,7254,0,0,0,0,0,200,1200,3200,3200,0,1,'CTAAAA','ATKAAA','OOOOxx' -7125,7255,1,1,5,5,25,125,1125,2125,7125,50,51,'BOAAAA','BTKAAA','VVVVxx' -2295,7256,1,3,5,15,95,295,295,2295,2295,190,191,'HKAAAA','CTKAAA','AAAAxx' -2056,7257,0,0,6,16,56,56,56,2056,2056,112,113,'CBAAAA','DTKAAA','HHHHxx' -2962,7258,0,2,2,2,62,962,962,2962,2962,124,125,'YJAAAA','ETKAAA','OOOOxx' -993,7259,1,1,3,13,93,993,993,993,993,186,187,'FMAAAA','FTKAAA','VVVVxx' -9127,7260,1,3,7,7,27,127,1127,4127,9127,54,55,'BNAAAA','GTKAAA','AAAAxx' -2075,7261,1,3,5,15,75,75,75,2075,2075,150,151,'VBAAAA','HTKAAA','HHHHxx' -9338,7262,0,2,8,18,38,338,1338,4338,9338,76,77,'EVAAAA','ITKAAA','OOOOxx' -8100,7263,0,0,0,0,0,100,100,3100,8100,0,1,'OZAAAA','JTKAAA','VVVVxx' -5047,7264,1,3,7,7,47,47,1047,47,5047,94,95,'DMAAAA','KTKAAA','AAAAxx' -7032,7265,0,0,2,12,32,32,1032,2032,7032,64,65,'MKAAAA','LTKAAA','HHHHxx' -6374,7266,0,2,4,14,74,374,374,1374,6374,148,149,'ELAAAA','MTKAAA','OOOOxx' -4137,7267,1,1,7,17,37,137,137,4137,4137,74,75,'DDAAAA','NTKAAA','VVVVxx' -7132,7268,0,0,2,12,32,132,1132,2132,7132,64,65,'IOAAAA','OTKAAA','AAAAxx' -3064,7269,0,0,4,4,64,64,1064,3064,3064,128,129,'WNAAAA','PTKAAA','HHHHxx' -3621,7270,1,1,1,1,21,621,1621,3621,3621,42,43,'HJAAAA','QTKAAA','OOOOxx' -6199,7271,1,3,9,19,99,199,199,1199,6199,198,199,'LEAAAA','RTKAAA','VVVVxx' -4926,7272,0,2,6,6,26,926,926,4926,4926,52,53,'MHAAAA','STKAAA','AAAAxx' -8035,7273,1,3,5,15,35,35,35,3035,8035,70,71,'BXAAAA','TTKAAA','HHHHxx' -2195,7274,1,3,5,15,95,195,195,2195,2195,190,191,'LGAAAA','UTKAAA','OOOOxx' -5366,7275,0,2,6,6,66,366,1366,366,5366,132,133,'KYAAAA','VTKAAA','VVVVxx' -3478,7276,0,2,8,18,78,478,1478,3478,3478,156,157,'UDAAAA','WTKAAA','AAAAxx' -1926,7277,0,2,6,6,26,926,1926,1926,1926,52,53,'CWAAAA','XTKAAA','HHHHxx' -7265,7278,1,1,5,5,65,265,1265,2265,7265,130,131,'LTAAAA','YTKAAA','OOOOxx' -7668,7279,0,0,8,8,68,668,1668,2668,7668,136,137,'YIAAAA','ZTKAAA','VVVVxx' -3335,7280,1,3,5,15,35,335,1335,3335,3335,70,71,'HYAAAA','AUKAAA','AAAAxx' -7660,7281,0,0,0,0,60,660,1660,2660,7660,120,121,'QIAAAA','BUKAAA','HHHHxx' -9604,7282,0,0,4,4,4,604,1604,4604,9604,8,9,'KFAAAA','CUKAAA','OOOOxx' -7301,7283,1,1,1,1,1,301,1301,2301,7301,2,3,'VUAAAA','DUKAAA','VVVVxx' -4475,7284,1,3,5,15,75,475,475,4475,4475,150,151,'DQAAAA','EUKAAA','AAAAxx' -9954,7285,0,2,4,14,54,954,1954,4954,9954,108,109,'WSAAAA','FUKAAA','HHHHxx' -5723,7286,1,3,3,3,23,723,1723,723,5723,46,47,'DMAAAA','GUKAAA','OOOOxx' -2669,7287,1,1,9,9,69,669,669,2669,2669,138,139,'RYAAAA','HUKAAA','VVVVxx' -1685,7288,1,1,5,5,85,685,1685,1685,1685,170,171,'VMAAAA','IUKAAA','AAAAxx' -2233,7289,1,1,3,13,33,233,233,2233,2233,66,67,'XHAAAA','JUKAAA','HHHHxx' -8111,7290,1,3,1,11,11,111,111,3111,8111,22,23,'ZZAAAA','KUKAAA','OOOOxx' -7685,7291,1,1,5,5,85,685,1685,2685,7685,170,171,'PJAAAA','LUKAAA','VVVVxx' -3773,7292,1,1,3,13,73,773,1773,3773,3773,146,147,'DPAAAA','MUKAAA','AAAAxx' -7172,7293,0,0,2,12,72,172,1172,2172,7172,144,145,'WPAAAA','NUKAAA','HHHHxx' -1740,7294,0,0,0,0,40,740,1740,1740,1740,80,81,'YOAAAA','OUKAAA','OOOOxx' -5416,7295,0,0,6,16,16,416,1416,416,5416,32,33,'IAAAAA','PUKAAA','VVVVxx' -1823,7296,1,3,3,3,23,823,1823,1823,1823,46,47,'DSAAAA','QUKAAA','AAAAxx' -1668,7297,0,0,8,8,68,668,1668,1668,1668,136,137,'EMAAAA','RUKAAA','HHHHxx' -1795,7298,1,3,5,15,95,795,1795,1795,1795,190,191,'BRAAAA','SUKAAA','OOOOxx' -8599,7299,1,3,9,19,99,599,599,3599,8599,198,199,'TSAAAA','TUKAAA','VVVVxx' -5542,7300,0,2,2,2,42,542,1542,542,5542,84,85,'EFAAAA','UUKAAA','AAAAxx' -5658,7301,0,2,8,18,58,658,1658,658,5658,116,117,'QJAAAA','VUKAAA','HHHHxx' -9824,7302,0,0,4,4,24,824,1824,4824,9824,48,49,'WNAAAA','WUKAAA','OOOOxx' -19,7303,1,3,9,19,19,19,19,19,19,38,39,'TAAAAA','XUKAAA','VVVVxx' -9344,7304,0,0,4,4,44,344,1344,4344,9344,88,89,'KVAAAA','YUKAAA','AAAAxx' -5900,7305,0,0,0,0,0,900,1900,900,5900,0,1,'YSAAAA','ZUKAAA','HHHHxx' -7818,7306,0,2,8,18,18,818,1818,2818,7818,36,37,'SOAAAA','AVKAAA','OOOOxx' -8377,7307,1,1,7,17,77,377,377,3377,8377,154,155,'FKAAAA','BVKAAA','VVVVxx' -6886,7308,0,2,6,6,86,886,886,1886,6886,172,173,'WEAAAA','CVKAAA','AAAAxx' -3201,7309,1,1,1,1,1,201,1201,3201,3201,2,3,'DTAAAA','DVKAAA','HHHHxx' -87,7310,1,3,7,7,87,87,87,87,87,174,175,'JDAAAA','EVKAAA','OOOOxx' -1089,7311,1,1,9,9,89,89,1089,1089,1089,178,179,'XPAAAA','FVKAAA','VVVVxx' -3948,7312,0,0,8,8,48,948,1948,3948,3948,96,97,'WVAAAA','GVKAAA','AAAAxx' -6383,7313,1,3,3,3,83,383,383,1383,6383,166,167,'NLAAAA','HVKAAA','HHHHxx' -837,7314,1,1,7,17,37,837,837,837,837,74,75,'FGAAAA','IVKAAA','OOOOxx' -6285,7315,1,1,5,5,85,285,285,1285,6285,170,171,'THAAAA','JVKAAA','VVVVxx' -78,7316,0,2,8,18,78,78,78,78,78,156,157,'ADAAAA','KVKAAA','AAAAxx' -4389,7317,1,1,9,9,89,389,389,4389,4389,178,179,'VMAAAA','LVKAAA','HHHHxx' -4795,7318,1,3,5,15,95,795,795,4795,4795,190,191,'LCAAAA','MVKAAA','OOOOxx' -9369,7319,1,1,9,9,69,369,1369,4369,9369,138,139,'JWAAAA','NVKAAA','VVVVxx' -69,7320,1,1,9,9,69,69,69,69,69,138,139,'RCAAAA','OVKAAA','AAAAxx' -7689,7321,1,1,9,9,89,689,1689,2689,7689,178,179,'TJAAAA','PVKAAA','HHHHxx' -5642,7322,0,2,2,2,42,642,1642,642,5642,84,85,'AJAAAA','QVKAAA','OOOOxx' -2348,7323,0,0,8,8,48,348,348,2348,2348,96,97,'IMAAAA','RVKAAA','VVVVxx' -9308,7324,0,0,8,8,8,308,1308,4308,9308,16,17,'AUAAAA','SVKAAA','AAAAxx' -9093,7325,1,1,3,13,93,93,1093,4093,9093,186,187,'TLAAAA','TVKAAA','HHHHxx' -1199,7326,1,3,9,19,99,199,1199,1199,1199,198,199,'DUAAAA','UVKAAA','OOOOxx' -307,7327,1,3,7,7,7,307,307,307,307,14,15,'VLAAAA','VVKAAA','VVVVxx' -3814,7328,0,2,4,14,14,814,1814,3814,3814,28,29,'SQAAAA','WVKAAA','AAAAxx' -8817,7329,1,1,7,17,17,817,817,3817,8817,34,35,'DBAAAA','XVKAAA','HHHHxx' -2329,7330,1,1,9,9,29,329,329,2329,2329,58,59,'PLAAAA','YVKAAA','OOOOxx' -2932,7331,0,0,2,12,32,932,932,2932,2932,64,65,'UIAAAA','ZVKAAA','VVVVxx' -1986,7332,0,2,6,6,86,986,1986,1986,1986,172,173,'KYAAAA','AWKAAA','AAAAxx' -5279,7333,1,3,9,19,79,279,1279,279,5279,158,159,'BVAAAA','BWKAAA','HHHHxx' -5357,7334,1,1,7,17,57,357,1357,357,5357,114,115,'BYAAAA','CWKAAA','OOOOxx' -6778,7335,0,2,8,18,78,778,778,1778,6778,156,157,'SAAAAA','DWKAAA','VVVVxx' -2773,7336,1,1,3,13,73,773,773,2773,2773,146,147,'RCAAAA','EWKAAA','AAAAxx' -244,7337,0,0,4,4,44,244,244,244,244,88,89,'KJAAAA','FWKAAA','HHHHxx' -6900,7338,0,0,0,0,0,900,900,1900,6900,0,1,'KFAAAA','GWKAAA','OOOOxx' -4739,7339,1,3,9,19,39,739,739,4739,4739,78,79,'HAAAAA','HWKAAA','VVVVxx' -3217,7340,1,1,7,17,17,217,1217,3217,3217,34,35,'TTAAAA','IWKAAA','AAAAxx' -7563,7341,1,3,3,3,63,563,1563,2563,7563,126,127,'XEAAAA','JWKAAA','HHHHxx' -1807,7342,1,3,7,7,7,807,1807,1807,1807,14,15,'NRAAAA','KWKAAA','OOOOxx' -4199,7343,1,3,9,19,99,199,199,4199,4199,198,199,'NFAAAA','LWKAAA','VVVVxx' -1077,7344,1,1,7,17,77,77,1077,1077,1077,154,155,'LPAAAA','MWKAAA','AAAAxx' -8348,7345,0,0,8,8,48,348,348,3348,8348,96,97,'CJAAAA','NWKAAA','HHHHxx' -841,7346,1,1,1,1,41,841,841,841,841,82,83,'JGAAAA','OWKAAA','OOOOxx' -8154,7347,0,2,4,14,54,154,154,3154,8154,108,109,'QBAAAA','PWKAAA','VVVVxx' -5261,7348,1,1,1,1,61,261,1261,261,5261,122,123,'JUAAAA','QWKAAA','AAAAxx' -1950,7349,0,2,0,10,50,950,1950,1950,1950,100,101,'AXAAAA','RWKAAA','HHHHxx' -8472,7350,0,0,2,12,72,472,472,3472,8472,144,145,'WNAAAA','SWKAAA','OOOOxx' -8745,7351,1,1,5,5,45,745,745,3745,8745,90,91,'JYAAAA','TWKAAA','VVVVxx' -8715,7352,1,3,5,15,15,715,715,3715,8715,30,31,'FXAAAA','UWKAAA','AAAAxx' -9708,7353,0,0,8,8,8,708,1708,4708,9708,16,17,'KJAAAA','VWKAAA','HHHHxx' -5860,7354,0,0,0,0,60,860,1860,860,5860,120,121,'KRAAAA','WWKAAA','OOOOxx' -9142,7355,0,2,2,2,42,142,1142,4142,9142,84,85,'QNAAAA','XWKAAA','VVVVxx' -6582,7356,0,2,2,2,82,582,582,1582,6582,164,165,'ETAAAA','YWKAAA','AAAAxx' -1255,7357,1,3,5,15,55,255,1255,1255,1255,110,111,'HWAAAA','ZWKAAA','HHHHxx' -6459,7358,1,3,9,19,59,459,459,1459,6459,118,119,'LOAAAA','AXKAAA','OOOOxx' -6327,7359,1,3,7,7,27,327,327,1327,6327,54,55,'JJAAAA','BXKAAA','VVVVxx' -4692,7360,0,0,2,12,92,692,692,4692,4692,184,185,'MYAAAA','CXKAAA','AAAAxx' -3772,7361,0,0,2,12,72,772,1772,3772,3772,144,145,'CPAAAA','DXKAAA','HHHHxx' -4203,7362,1,3,3,3,3,203,203,4203,4203,6,7,'RFAAAA','EXKAAA','OOOOxx' -2946,7363,0,2,6,6,46,946,946,2946,2946,92,93,'IJAAAA','FXKAAA','VVVVxx' -3524,7364,0,0,4,4,24,524,1524,3524,3524,48,49,'OFAAAA','GXKAAA','AAAAxx' -8409,7365,1,1,9,9,9,409,409,3409,8409,18,19,'LLAAAA','HXKAAA','HHHHxx' -1824,7366,0,0,4,4,24,824,1824,1824,1824,48,49,'ESAAAA','IXKAAA','OOOOxx' -4637,7367,1,1,7,17,37,637,637,4637,4637,74,75,'JWAAAA','JXKAAA','VVVVxx' -589,7368,1,1,9,9,89,589,589,589,589,178,179,'RWAAAA','KXKAAA','AAAAxx' -484,7369,0,0,4,4,84,484,484,484,484,168,169,'QSAAAA','LXKAAA','HHHHxx' -8963,7370,1,3,3,3,63,963,963,3963,8963,126,127,'TGAAAA','MXKAAA','OOOOxx' -5502,7371,0,2,2,2,2,502,1502,502,5502,4,5,'QDAAAA','NXKAAA','VVVVxx' -6982,7372,0,2,2,2,82,982,982,1982,6982,164,165,'OIAAAA','OXKAAA','AAAAxx' -8029,7373,1,1,9,9,29,29,29,3029,8029,58,59,'VWAAAA','PXKAAA','HHHHxx' -4395,7374,1,3,5,15,95,395,395,4395,4395,190,191,'BNAAAA','QXKAAA','OOOOxx' -2595,7375,1,3,5,15,95,595,595,2595,2595,190,191,'VVAAAA','RXKAAA','VVVVxx' -2133,7376,1,1,3,13,33,133,133,2133,2133,66,67,'BEAAAA','SXKAAA','AAAAxx' -1414,7377,0,2,4,14,14,414,1414,1414,1414,28,29,'KCAAAA','TXKAAA','HHHHxx' -8201,7378,1,1,1,1,1,201,201,3201,8201,2,3,'LDAAAA','UXKAAA','OOOOxx' -4706,7379,0,2,6,6,6,706,706,4706,4706,12,13,'AZAAAA','VXKAAA','VVVVxx' -5310,7380,0,2,0,10,10,310,1310,310,5310,20,21,'GWAAAA','WXKAAA','AAAAxx' -7333,7381,1,1,3,13,33,333,1333,2333,7333,66,67,'BWAAAA','XXKAAA','HHHHxx' -9420,7382,0,0,0,0,20,420,1420,4420,9420,40,41,'IYAAAA','YXKAAA','OOOOxx' -1383,7383,1,3,3,3,83,383,1383,1383,1383,166,167,'FBAAAA','ZXKAAA','VVVVxx' -6225,7384,1,1,5,5,25,225,225,1225,6225,50,51,'LFAAAA','AYKAAA','AAAAxx' -2064,7385,0,0,4,4,64,64,64,2064,2064,128,129,'KBAAAA','BYKAAA','HHHHxx' -6700,7386,0,0,0,0,0,700,700,1700,6700,0,1,'SXAAAA','CYKAAA','OOOOxx' -1352,7387,0,0,2,12,52,352,1352,1352,1352,104,105,'AAAAAA','DYKAAA','VVVVxx' -4249,7388,1,1,9,9,49,249,249,4249,4249,98,99,'LHAAAA','EYKAAA','AAAAxx' -9429,7389,1,1,9,9,29,429,1429,4429,9429,58,59,'RYAAAA','FYKAAA','HHHHxx' -8090,7390,0,2,0,10,90,90,90,3090,8090,180,181,'EZAAAA','GYKAAA','OOOOxx' -5378,7391,0,2,8,18,78,378,1378,378,5378,156,157,'WYAAAA','HYKAAA','VVVVxx' -9085,7392,1,1,5,5,85,85,1085,4085,9085,170,171,'LLAAAA','IYKAAA','AAAAxx' -7468,7393,0,0,8,8,68,468,1468,2468,7468,136,137,'GBAAAA','JYKAAA','HHHHxx' -9955,7394,1,3,5,15,55,955,1955,4955,9955,110,111,'XSAAAA','KYKAAA','OOOOxx' -8692,7395,0,0,2,12,92,692,692,3692,8692,184,185,'IWAAAA','LYKAAA','VVVVxx' -1463,7396,1,3,3,3,63,463,1463,1463,1463,126,127,'HEAAAA','MYKAAA','AAAAxx' -3577,7397,1,1,7,17,77,577,1577,3577,3577,154,155,'PHAAAA','NYKAAA','HHHHxx' -5654,7398,0,2,4,14,54,654,1654,654,5654,108,109,'MJAAAA','OYKAAA','OOOOxx' -7955,7399,1,3,5,15,55,955,1955,2955,7955,110,111,'ZTAAAA','PYKAAA','VVVVxx' -4843,7400,1,3,3,3,43,843,843,4843,4843,86,87,'HEAAAA','QYKAAA','AAAAxx' -1776,7401,0,0,6,16,76,776,1776,1776,1776,152,153,'IQAAAA','RYKAAA','HHHHxx' -2223,7402,1,3,3,3,23,223,223,2223,2223,46,47,'NHAAAA','SYKAAA','OOOOxx' -8442,7403,0,2,2,2,42,442,442,3442,8442,84,85,'SMAAAA','TYKAAA','VVVVxx' -9738,7404,0,2,8,18,38,738,1738,4738,9738,76,77,'OKAAAA','UYKAAA','AAAAxx' -4867,7405,1,3,7,7,67,867,867,4867,4867,134,135,'FFAAAA','VYKAAA','HHHHxx' -2983,7406,1,3,3,3,83,983,983,2983,2983,166,167,'TKAAAA','WYKAAA','OOOOxx' -3300,7407,0,0,0,0,0,300,1300,3300,3300,0,1,'YWAAAA','XYKAAA','VVVVxx' -3815,7408,1,3,5,15,15,815,1815,3815,3815,30,31,'TQAAAA','YYKAAA','AAAAxx' -1779,7409,1,3,9,19,79,779,1779,1779,1779,158,159,'LQAAAA','ZYKAAA','HHHHxx' -1123,7410,1,3,3,3,23,123,1123,1123,1123,46,47,'FRAAAA','AZKAAA','OOOOxx' -4824,7411,0,0,4,4,24,824,824,4824,4824,48,49,'ODAAAA','BZKAAA','VVVVxx' -5407,7412,1,3,7,7,7,407,1407,407,5407,14,15,'ZZAAAA','CZKAAA','AAAAxx' -5123,7413,1,3,3,3,23,123,1123,123,5123,46,47,'BPAAAA','DZKAAA','HHHHxx' -2515,7414,1,3,5,15,15,515,515,2515,2515,30,31,'TSAAAA','EZKAAA','OOOOxx' -4781,7415,1,1,1,1,81,781,781,4781,4781,162,163,'XBAAAA','FZKAAA','VVVVxx' -7831,7416,1,3,1,11,31,831,1831,2831,7831,62,63,'FPAAAA','GZKAAA','AAAAxx' -6946,7417,0,2,6,6,46,946,946,1946,6946,92,93,'EHAAAA','HZKAAA','HHHHxx' -1215,7418,1,3,5,15,15,215,1215,1215,1215,30,31,'TUAAAA','IZKAAA','OOOOxx' -7783,7419,1,3,3,3,83,783,1783,2783,7783,166,167,'JNAAAA','JZKAAA','VVVVxx' -4532,7420,0,0,2,12,32,532,532,4532,4532,64,65,'ISAAAA','KZKAAA','AAAAxx' -9068,7421,0,0,8,8,68,68,1068,4068,9068,136,137,'UKAAAA','LZKAAA','HHHHxx' -7030,7422,0,2,0,10,30,30,1030,2030,7030,60,61,'KKAAAA','MZKAAA','OOOOxx' -436,7423,0,0,6,16,36,436,436,436,436,72,73,'UQAAAA','NZKAAA','VVVVxx' -6549,7424,1,1,9,9,49,549,549,1549,6549,98,99,'XRAAAA','OZKAAA','AAAAxx' -3348,7425,0,0,8,8,48,348,1348,3348,3348,96,97,'UYAAAA','PZKAAA','HHHHxx' -6229,7426,1,1,9,9,29,229,229,1229,6229,58,59,'PFAAAA','QZKAAA','OOOOxx' -3933,7427,1,1,3,13,33,933,1933,3933,3933,66,67,'HVAAAA','RZKAAA','VVVVxx' -1876,7428,0,0,6,16,76,876,1876,1876,1876,152,153,'EUAAAA','SZKAAA','AAAAxx' -8920,7429,0,0,0,0,20,920,920,3920,8920,40,41,'CFAAAA','TZKAAA','HHHHxx' -7926,7430,0,2,6,6,26,926,1926,2926,7926,52,53,'WSAAAA','UZKAAA','OOOOxx' -8805,7431,1,1,5,5,5,805,805,3805,8805,10,11,'RAAAAA','VZKAAA','VVVVxx' -6729,7432,1,1,9,9,29,729,729,1729,6729,58,59,'VYAAAA','WZKAAA','AAAAxx' -7397,7433,1,1,7,17,97,397,1397,2397,7397,194,195,'NYAAAA','XZKAAA','HHHHxx' -9303,7434,1,3,3,3,3,303,1303,4303,9303,6,7,'VTAAAA','YZKAAA','OOOOxx' -4255,7435,1,3,5,15,55,255,255,4255,4255,110,111,'RHAAAA','ZZKAAA','VVVVxx' -7229,7436,1,1,9,9,29,229,1229,2229,7229,58,59,'BSAAAA','AALAAA','AAAAxx' -854,7437,0,2,4,14,54,854,854,854,854,108,109,'WGAAAA','BALAAA','HHHHxx' -6723,7438,1,3,3,3,23,723,723,1723,6723,46,47,'PYAAAA','CALAAA','OOOOxx' -9597,7439,1,1,7,17,97,597,1597,4597,9597,194,195,'DFAAAA','DALAAA','VVVVxx' -6532,7440,0,0,2,12,32,532,532,1532,6532,64,65,'GRAAAA','EALAAA','AAAAxx' -2910,7441,0,2,0,10,10,910,910,2910,2910,20,21,'YHAAAA','FALAAA','HHHHxx' -6717,7442,1,1,7,17,17,717,717,1717,6717,34,35,'JYAAAA','GALAAA','OOOOxx' -1790,7443,0,2,0,10,90,790,1790,1790,1790,180,181,'WQAAAA','HALAAA','VVVVxx' -3761,7444,1,1,1,1,61,761,1761,3761,3761,122,123,'ROAAAA','IALAAA','AAAAxx' -1565,7445,1,1,5,5,65,565,1565,1565,1565,130,131,'FIAAAA','JALAAA','HHHHxx' -6205,7446,1,1,5,5,5,205,205,1205,6205,10,11,'REAAAA','KALAAA','OOOOxx' -2726,7447,0,2,6,6,26,726,726,2726,2726,52,53,'WAAAAA','LALAAA','VVVVxx' -799,7448,1,3,9,19,99,799,799,799,799,198,199,'TEAAAA','MALAAA','AAAAxx' -3540,7449,0,0,0,0,40,540,1540,3540,3540,80,81,'EGAAAA','NALAAA','HHHHxx' -5878,7450,0,2,8,18,78,878,1878,878,5878,156,157,'CSAAAA','OALAAA','OOOOxx' -2542,7451,0,2,2,2,42,542,542,2542,2542,84,85,'UTAAAA','PALAAA','VVVVxx' -4888,7452,0,0,8,8,88,888,888,4888,4888,176,177,'AGAAAA','QALAAA','AAAAxx' -5290,7453,0,2,0,10,90,290,1290,290,5290,180,181,'MVAAAA','RALAAA','HHHHxx' -7995,7454,1,3,5,15,95,995,1995,2995,7995,190,191,'NVAAAA','SALAAA','OOOOxx' -3519,7455,1,3,9,19,19,519,1519,3519,3519,38,39,'JFAAAA','TALAAA','VVVVxx' -3571,7456,1,3,1,11,71,571,1571,3571,3571,142,143,'JHAAAA','UALAAA','AAAAxx' -7854,7457,0,2,4,14,54,854,1854,2854,7854,108,109,'CQAAAA','VALAAA','HHHHxx' -5184,7458,0,0,4,4,84,184,1184,184,5184,168,169,'KRAAAA','WALAAA','OOOOxx' -3498,7459,0,2,8,18,98,498,1498,3498,3498,196,197,'OEAAAA','XALAAA','VVVVxx' -1264,7460,0,0,4,4,64,264,1264,1264,1264,128,129,'QWAAAA','YALAAA','AAAAxx' -3159,7461,1,3,9,19,59,159,1159,3159,3159,118,119,'NRAAAA','ZALAAA','HHHHxx' -5480,7462,0,0,0,0,80,480,1480,480,5480,160,161,'UCAAAA','ABLAAA','OOOOxx' -1706,7463,0,2,6,6,6,706,1706,1706,1706,12,13,'QNAAAA','BBLAAA','VVVVxx' -4540,7464,0,0,0,0,40,540,540,4540,4540,80,81,'QSAAAA','CBLAAA','AAAAxx' -2799,7465,1,3,9,19,99,799,799,2799,2799,198,199,'RDAAAA','DBLAAA','HHHHxx' -7389,7466,1,1,9,9,89,389,1389,2389,7389,178,179,'FYAAAA','EBLAAA','OOOOxx' -5565,7467,1,1,5,5,65,565,1565,565,5565,130,131,'BGAAAA','FBLAAA','VVVVxx' -3896,7468,0,0,6,16,96,896,1896,3896,3896,192,193,'WTAAAA','GBLAAA','AAAAxx' -2100,7469,0,0,0,0,0,100,100,2100,2100,0,1,'UCAAAA','HBLAAA','HHHHxx' -3507,7470,1,3,7,7,7,507,1507,3507,3507,14,15,'XEAAAA','IBLAAA','OOOOxx' -7971,7471,1,3,1,11,71,971,1971,2971,7971,142,143,'PUAAAA','JBLAAA','VVVVxx' -2312,7472,0,0,2,12,12,312,312,2312,2312,24,25,'YKAAAA','KBLAAA','AAAAxx' -2494,7473,0,2,4,14,94,494,494,2494,2494,188,189,'YRAAAA','LBLAAA','HHHHxx' -2474,7474,0,2,4,14,74,474,474,2474,2474,148,149,'ERAAAA','MBLAAA','OOOOxx' -3136,7475,0,0,6,16,36,136,1136,3136,3136,72,73,'QQAAAA','NBLAAA','VVVVxx' -7242,7476,0,2,2,2,42,242,1242,2242,7242,84,85,'OSAAAA','OBLAAA','AAAAxx' -9430,7477,0,2,0,10,30,430,1430,4430,9430,60,61,'SYAAAA','PBLAAA','HHHHxx' -1052,7478,0,0,2,12,52,52,1052,1052,1052,104,105,'MOAAAA','QBLAAA','OOOOxx' -4172,7479,0,0,2,12,72,172,172,4172,4172,144,145,'MEAAAA','RBLAAA','VVVVxx' -970,7480,0,2,0,10,70,970,970,970,970,140,141,'ILAAAA','SBLAAA','AAAAxx' -882,7481,0,2,2,2,82,882,882,882,882,164,165,'YHAAAA','TBLAAA','HHHHxx' -9799,7482,1,3,9,19,99,799,1799,4799,9799,198,199,'XMAAAA','UBLAAA','OOOOxx' -5850,7483,0,2,0,10,50,850,1850,850,5850,100,101,'ARAAAA','VBLAAA','VVVVxx' -9473,7484,1,1,3,13,73,473,1473,4473,9473,146,147,'JAAAAA','WBLAAA','AAAAxx' -8635,7485,1,3,5,15,35,635,635,3635,8635,70,71,'DUAAAA','XBLAAA','HHHHxx' -2349,7486,1,1,9,9,49,349,349,2349,2349,98,99,'JMAAAA','YBLAAA','OOOOxx' -2270,7487,0,2,0,10,70,270,270,2270,2270,140,141,'IJAAAA','ZBLAAA','VVVVxx' -7887,7488,1,3,7,7,87,887,1887,2887,7887,174,175,'JRAAAA','ACLAAA','AAAAxx' -3091,7489,1,3,1,11,91,91,1091,3091,3091,182,183,'XOAAAA','BCLAAA','HHHHxx' -3728,7490,0,0,8,8,28,728,1728,3728,3728,56,57,'KNAAAA','CCLAAA','OOOOxx' -3658,7491,0,2,8,18,58,658,1658,3658,3658,116,117,'SKAAAA','DCLAAA','VVVVxx' -5975,7492,1,3,5,15,75,975,1975,975,5975,150,151,'VVAAAA','ECLAAA','AAAAxx' -332,7493,0,0,2,12,32,332,332,332,332,64,65,'UMAAAA','FCLAAA','HHHHxx' -7990,7494,0,2,0,10,90,990,1990,2990,7990,180,181,'IVAAAA','GCLAAA','OOOOxx' -8688,7495,0,0,8,8,88,688,688,3688,8688,176,177,'EWAAAA','HCLAAA','VVVVxx' -9601,7496,1,1,1,1,1,601,1601,4601,9601,2,3,'HFAAAA','ICLAAA','AAAAxx' -8401,7497,1,1,1,1,1,401,401,3401,8401,2,3,'DLAAAA','JCLAAA','HHHHxx' -8093,7498,1,1,3,13,93,93,93,3093,8093,186,187,'HZAAAA','KCLAAA','OOOOxx' -4278,7499,0,2,8,18,78,278,278,4278,4278,156,157,'OIAAAA','LCLAAA','VVVVxx' -5467,7500,1,3,7,7,67,467,1467,467,5467,134,135,'HCAAAA','MCLAAA','AAAAxx' -3137,7501,1,1,7,17,37,137,1137,3137,3137,74,75,'RQAAAA','NCLAAA','HHHHxx' -204,7502,0,0,4,4,4,204,204,204,204,8,9,'WHAAAA','OCLAAA','OOOOxx' -8224,7503,0,0,4,4,24,224,224,3224,8224,48,49,'IEAAAA','PCLAAA','VVVVxx' -2944,7504,0,0,4,4,44,944,944,2944,2944,88,89,'GJAAAA','QCLAAA','AAAAxx' -7593,7505,1,1,3,13,93,593,1593,2593,7593,186,187,'BGAAAA','RCLAAA','HHHHxx' -814,7506,0,2,4,14,14,814,814,814,814,28,29,'IFAAAA','SCLAAA','OOOOxx' -8047,7507,1,3,7,7,47,47,47,3047,8047,94,95,'NXAAAA','TCLAAA','VVVVxx' -7802,7508,0,2,2,2,2,802,1802,2802,7802,4,5,'COAAAA','UCLAAA','AAAAxx' -901,7509,1,1,1,1,1,901,901,901,901,2,3,'RIAAAA','VCLAAA','HHHHxx' -6168,7510,0,0,8,8,68,168,168,1168,6168,136,137,'GDAAAA','WCLAAA','OOOOxx' -2950,7511,0,2,0,10,50,950,950,2950,2950,100,101,'MJAAAA','XCLAAA','VVVVxx' -5393,7512,1,1,3,13,93,393,1393,393,5393,186,187,'LZAAAA','YCLAAA','AAAAxx' -3585,7513,1,1,5,5,85,585,1585,3585,3585,170,171,'XHAAAA','ZCLAAA','HHHHxx' -9392,7514,0,0,2,12,92,392,1392,4392,9392,184,185,'GXAAAA','ADLAAA','OOOOxx' -8314,7515,0,2,4,14,14,314,314,3314,8314,28,29,'UHAAAA','BDLAAA','VVVVxx' -9972,7516,0,0,2,12,72,972,1972,4972,9972,144,145,'OTAAAA','CDLAAA','AAAAxx' -9130,7517,0,2,0,10,30,130,1130,4130,9130,60,61,'ENAAAA','DDLAAA','HHHHxx' -975,7518,1,3,5,15,75,975,975,975,975,150,151,'NLAAAA','EDLAAA','OOOOxx' -5720,7519,0,0,0,0,20,720,1720,720,5720,40,41,'AMAAAA','FDLAAA','VVVVxx' -3769,7520,1,1,9,9,69,769,1769,3769,3769,138,139,'ZOAAAA','GDLAAA','AAAAxx' -5303,7521,1,3,3,3,3,303,1303,303,5303,6,7,'ZVAAAA','HDLAAA','HHHHxx' -6564,7522,0,0,4,4,64,564,564,1564,6564,128,129,'MSAAAA','IDLAAA','OOOOxx' -7855,7523,1,3,5,15,55,855,1855,2855,7855,110,111,'DQAAAA','JDLAAA','VVVVxx' -8153,7524,1,1,3,13,53,153,153,3153,8153,106,107,'PBAAAA','KDLAAA','AAAAxx' -2292,7525,0,0,2,12,92,292,292,2292,2292,184,185,'EKAAAA','LDLAAA','HHHHxx' -3156,7526,0,0,6,16,56,156,1156,3156,3156,112,113,'KRAAAA','MDLAAA','OOOOxx' -6580,7527,0,0,0,0,80,580,580,1580,6580,160,161,'CTAAAA','NDLAAA','VVVVxx' -5324,7528,0,0,4,4,24,324,1324,324,5324,48,49,'UWAAAA','ODLAAA','AAAAxx' -8871,7529,1,3,1,11,71,871,871,3871,8871,142,143,'FDAAAA','PDLAAA','HHHHxx' -2543,7530,1,3,3,3,43,543,543,2543,2543,86,87,'VTAAAA','QDLAAA','OOOOxx' -7857,7531,1,1,7,17,57,857,1857,2857,7857,114,115,'FQAAAA','RDLAAA','VVVVxx' -4084,7532,0,0,4,4,84,84,84,4084,4084,168,169,'CBAAAA','SDLAAA','AAAAxx' -9887,7533,1,3,7,7,87,887,1887,4887,9887,174,175,'HQAAAA','TDLAAA','HHHHxx' -6940,7534,0,0,0,0,40,940,940,1940,6940,80,81,'YGAAAA','UDLAAA','OOOOxx' -3415,7535,1,3,5,15,15,415,1415,3415,3415,30,31,'JBAAAA','VDLAAA','VVVVxx' -5012,7536,0,0,2,12,12,12,1012,12,5012,24,25,'UKAAAA','WDLAAA','AAAAxx' -3187,7537,1,3,7,7,87,187,1187,3187,3187,174,175,'PSAAAA','XDLAAA','HHHHxx' -8556,7538,0,0,6,16,56,556,556,3556,8556,112,113,'CRAAAA','YDLAAA','OOOOxx' -7966,7539,0,2,6,6,66,966,1966,2966,7966,132,133,'KUAAAA','ZDLAAA','VVVVxx' -7481,7540,1,1,1,1,81,481,1481,2481,7481,162,163,'TBAAAA','AELAAA','AAAAxx' -8524,7541,0,0,4,4,24,524,524,3524,8524,48,49,'WPAAAA','BELAAA','HHHHxx' -3021,7542,1,1,1,1,21,21,1021,3021,3021,42,43,'FMAAAA','CELAAA','OOOOxx' -6045,7543,1,1,5,5,45,45,45,1045,6045,90,91,'NYAAAA','DELAAA','VVVVxx' -8022,7544,0,2,2,2,22,22,22,3022,8022,44,45,'OWAAAA','EELAAA','AAAAxx' -3626,7545,0,2,6,6,26,626,1626,3626,3626,52,53,'MJAAAA','FELAAA','HHHHxx' -1030,7546,0,2,0,10,30,30,1030,1030,1030,60,61,'QNAAAA','GELAAA','OOOOxx' -8903,7547,1,3,3,3,3,903,903,3903,8903,6,7,'LEAAAA','HELAAA','VVVVxx' -7488,7548,0,0,8,8,88,488,1488,2488,7488,176,177,'ACAAAA','IELAAA','AAAAxx' -9293,7549,1,1,3,13,93,293,1293,4293,9293,186,187,'LTAAAA','JELAAA','HHHHxx' -4586,7550,0,2,6,6,86,586,586,4586,4586,172,173,'KUAAAA','KELAAA','OOOOxx' -9282,7551,0,2,2,2,82,282,1282,4282,9282,164,165,'ATAAAA','LELAAA','VVVVxx' -1948,7552,0,0,8,8,48,948,1948,1948,1948,96,97,'YWAAAA','MELAAA','AAAAxx' -2534,7553,0,2,4,14,34,534,534,2534,2534,68,69,'MTAAAA','NELAAA','HHHHxx' -1150,7554,0,2,0,10,50,150,1150,1150,1150,100,101,'GSAAAA','OELAAA','OOOOxx' -4931,7555,1,3,1,11,31,931,931,4931,4931,62,63,'RHAAAA','PELAAA','VVVVxx' -2866,7556,0,2,6,6,66,866,866,2866,2866,132,133,'GGAAAA','QELAAA','AAAAxx' -6172,7557,0,0,2,12,72,172,172,1172,6172,144,145,'KDAAAA','RELAAA','HHHHxx' -4819,7558,1,3,9,19,19,819,819,4819,4819,38,39,'JDAAAA','SELAAA','OOOOxx' -569,7559,1,1,9,9,69,569,569,569,569,138,139,'XVAAAA','TELAAA','VVVVxx' -1146,7560,0,2,6,6,46,146,1146,1146,1146,92,93,'CSAAAA','UELAAA','AAAAxx' -3062,7561,0,2,2,2,62,62,1062,3062,3062,124,125,'UNAAAA','VELAAA','HHHHxx' -7690,7562,0,2,0,10,90,690,1690,2690,7690,180,181,'UJAAAA','WELAAA','OOOOxx' -8611,7563,1,3,1,11,11,611,611,3611,8611,22,23,'FTAAAA','XELAAA','VVVVxx' -1142,7564,0,2,2,2,42,142,1142,1142,1142,84,85,'YRAAAA','YELAAA','AAAAxx' -1193,7565,1,1,3,13,93,193,1193,1193,1193,186,187,'XTAAAA','ZELAAA','HHHHxx' -2507,7566,1,3,7,7,7,507,507,2507,2507,14,15,'LSAAAA','AFLAAA','OOOOxx' -1043,7567,1,3,3,3,43,43,1043,1043,1043,86,87,'DOAAAA','BFLAAA','VVVVxx' -7472,7568,0,0,2,12,72,472,1472,2472,7472,144,145,'KBAAAA','CFLAAA','AAAAxx' -1817,7569,1,1,7,17,17,817,1817,1817,1817,34,35,'XRAAAA','DFLAAA','HHHHxx' -3868,7570,0,0,8,8,68,868,1868,3868,3868,136,137,'USAAAA','EFLAAA','OOOOxx' -9031,7571,1,3,1,11,31,31,1031,4031,9031,62,63,'JJAAAA','FFLAAA','VVVVxx' -7254,7572,0,2,4,14,54,254,1254,2254,7254,108,109,'ATAAAA','GFLAAA','AAAAxx' -5030,7573,0,2,0,10,30,30,1030,30,5030,60,61,'MLAAAA','HFLAAA','HHHHxx' -6594,7574,0,2,4,14,94,594,594,1594,6594,188,189,'QTAAAA','IFLAAA','OOOOxx' -6862,7575,0,2,2,2,62,862,862,1862,6862,124,125,'YDAAAA','JFLAAA','VVVVxx' -1994,7576,0,2,4,14,94,994,1994,1994,1994,188,189,'SYAAAA','KFLAAA','AAAAxx' -9017,7577,1,1,7,17,17,17,1017,4017,9017,34,35,'VIAAAA','LFLAAA','HHHHxx' -5716,7578,0,0,6,16,16,716,1716,716,5716,32,33,'WLAAAA','MFLAAA','OOOOxx' -1900,7579,0,0,0,0,0,900,1900,1900,1900,0,1,'CVAAAA','NFLAAA','VVVVxx' -120,7580,0,0,0,0,20,120,120,120,120,40,41,'QEAAAA','OFLAAA','AAAAxx' -9003,7581,1,3,3,3,3,3,1003,4003,9003,6,7,'HIAAAA','PFLAAA','HHHHxx' -4178,7582,0,2,8,18,78,178,178,4178,4178,156,157,'SEAAAA','QFLAAA','OOOOxx' -8777,7583,1,1,7,17,77,777,777,3777,8777,154,155,'PZAAAA','RFLAAA','VVVVxx' -3653,7584,1,1,3,13,53,653,1653,3653,3653,106,107,'NKAAAA','SFLAAA','AAAAxx' -1137,7585,1,1,7,17,37,137,1137,1137,1137,74,75,'TRAAAA','TFLAAA','HHHHxx' -6362,7586,0,2,2,2,62,362,362,1362,6362,124,125,'SKAAAA','UFLAAA','OOOOxx' -8537,7587,1,1,7,17,37,537,537,3537,8537,74,75,'JQAAAA','VFLAAA','VVVVxx' -1590,7588,0,2,0,10,90,590,1590,1590,1590,180,181,'EJAAAA','WFLAAA','AAAAxx' -374,7589,0,2,4,14,74,374,374,374,374,148,149,'KOAAAA','XFLAAA','HHHHxx' -2597,7590,1,1,7,17,97,597,597,2597,2597,194,195,'XVAAAA','YFLAAA','OOOOxx' -8071,7591,1,3,1,11,71,71,71,3071,8071,142,143,'LYAAAA','ZFLAAA','VVVVxx' -9009,7592,1,1,9,9,9,9,1009,4009,9009,18,19,'NIAAAA','AGLAAA','AAAAxx' -1978,7593,0,2,8,18,78,978,1978,1978,1978,156,157,'CYAAAA','BGLAAA','HHHHxx' -1541,7594,1,1,1,1,41,541,1541,1541,1541,82,83,'HHAAAA','CGLAAA','OOOOxx' -4998,7595,0,2,8,18,98,998,998,4998,4998,196,197,'GKAAAA','DGLAAA','VVVVxx' -1649,7596,1,1,9,9,49,649,1649,1649,1649,98,99,'LLAAAA','EGLAAA','AAAAxx' -5426,7597,0,2,6,6,26,426,1426,426,5426,52,53,'SAAAAA','FGLAAA','HHHHxx' -1492,7598,0,0,2,12,92,492,1492,1492,1492,184,185,'KFAAAA','GGLAAA','OOOOxx' -9622,7599,0,2,2,2,22,622,1622,4622,9622,44,45,'CGAAAA','HGLAAA','VVVVxx' -701,7600,1,1,1,1,1,701,701,701,701,2,3,'ZAAAAA','IGLAAA','AAAAxx' -2781,7601,1,1,1,1,81,781,781,2781,2781,162,163,'ZCAAAA','JGLAAA','HHHHxx' -3982,7602,0,2,2,2,82,982,1982,3982,3982,164,165,'EXAAAA','KGLAAA','OOOOxx' -7259,7603,1,3,9,19,59,259,1259,2259,7259,118,119,'FTAAAA','LGLAAA','VVVVxx' -9868,7604,0,0,8,8,68,868,1868,4868,9868,136,137,'OPAAAA','MGLAAA','AAAAxx' -564,7605,0,0,4,4,64,564,564,564,564,128,129,'SVAAAA','NGLAAA','HHHHxx' -6315,7606,1,3,5,15,15,315,315,1315,6315,30,31,'XIAAAA','OGLAAA','OOOOxx' -9092,7607,0,0,2,12,92,92,1092,4092,9092,184,185,'SLAAAA','PGLAAA','VVVVxx' -8237,7608,1,1,7,17,37,237,237,3237,8237,74,75,'VEAAAA','QGLAAA','AAAAxx' -1513,7609,1,1,3,13,13,513,1513,1513,1513,26,27,'FGAAAA','RGLAAA','HHHHxx' -1922,7610,0,2,2,2,22,922,1922,1922,1922,44,45,'YVAAAA','SGLAAA','OOOOxx' -5396,7611,0,0,6,16,96,396,1396,396,5396,192,193,'OZAAAA','TGLAAA','VVVVxx' -2485,7612,1,1,5,5,85,485,485,2485,2485,170,171,'PRAAAA','UGLAAA','AAAAxx' -5774,7613,0,2,4,14,74,774,1774,774,5774,148,149,'COAAAA','VGLAAA','HHHHxx' -3983,7614,1,3,3,3,83,983,1983,3983,3983,166,167,'FXAAAA','WGLAAA','OOOOxx' -221,7615,1,1,1,1,21,221,221,221,221,42,43,'NIAAAA','XGLAAA','VVVVxx' -8662,7616,0,2,2,2,62,662,662,3662,8662,124,125,'EVAAAA','YGLAAA','AAAAxx' -2456,7617,0,0,6,16,56,456,456,2456,2456,112,113,'MQAAAA','ZGLAAA','HHHHxx' -9736,7618,0,0,6,16,36,736,1736,4736,9736,72,73,'MKAAAA','AHLAAA','OOOOxx' -8936,7619,0,0,6,16,36,936,936,3936,8936,72,73,'SFAAAA','BHLAAA','VVVVxx' -5395,7620,1,3,5,15,95,395,1395,395,5395,190,191,'NZAAAA','CHLAAA','AAAAxx' -9523,7621,1,3,3,3,23,523,1523,4523,9523,46,47,'HCAAAA','DHLAAA','HHHHxx' -6980,7622,0,0,0,0,80,980,980,1980,6980,160,161,'MIAAAA','EHLAAA','OOOOxx' -2091,7623,1,3,1,11,91,91,91,2091,2091,182,183,'LCAAAA','FHLAAA','VVVVxx' -6807,7624,1,3,7,7,7,807,807,1807,6807,14,15,'VBAAAA','GHLAAA','AAAAxx' -8818,7625,0,2,8,18,18,818,818,3818,8818,36,37,'EBAAAA','HHLAAA','HHHHxx' -5298,7626,0,2,8,18,98,298,1298,298,5298,196,197,'UVAAAA','IHLAAA','OOOOxx' -1726,7627,0,2,6,6,26,726,1726,1726,1726,52,53,'KOAAAA','JHLAAA','VVVVxx' -3878,7628,0,2,8,18,78,878,1878,3878,3878,156,157,'ETAAAA','KHLAAA','AAAAxx' -8700,7629,0,0,0,0,0,700,700,3700,8700,0,1,'QWAAAA','LHLAAA','HHHHxx' -5201,7630,1,1,1,1,1,201,1201,201,5201,2,3,'BSAAAA','MHLAAA','OOOOxx' -3936,7631,0,0,6,16,36,936,1936,3936,3936,72,73,'KVAAAA','NHLAAA','VVVVxx' -776,7632,0,0,6,16,76,776,776,776,776,152,153,'WDAAAA','OHLAAA','AAAAxx' -5302,7633,0,2,2,2,2,302,1302,302,5302,4,5,'YVAAAA','PHLAAA','HHHHxx' -3595,7634,1,3,5,15,95,595,1595,3595,3595,190,191,'HIAAAA','QHLAAA','OOOOxx' -9061,7635,1,1,1,1,61,61,1061,4061,9061,122,123,'NKAAAA','RHLAAA','VVVVxx' -6261,7636,1,1,1,1,61,261,261,1261,6261,122,123,'VGAAAA','SHLAAA','AAAAxx' -8878,7637,0,2,8,18,78,878,878,3878,8878,156,157,'MDAAAA','THLAAA','HHHHxx' -3312,7638,0,0,2,12,12,312,1312,3312,3312,24,25,'KXAAAA','UHLAAA','OOOOxx' -9422,7639,0,2,2,2,22,422,1422,4422,9422,44,45,'KYAAAA','VHLAAA','VVVVxx' -7321,7640,1,1,1,1,21,321,1321,2321,7321,42,43,'PVAAAA','WHLAAA','AAAAxx' -3813,7641,1,1,3,13,13,813,1813,3813,3813,26,27,'RQAAAA','XHLAAA','HHHHxx' -5848,7642,0,0,8,8,48,848,1848,848,5848,96,97,'YQAAAA','YHLAAA','OOOOxx' -3535,7643,1,3,5,15,35,535,1535,3535,3535,70,71,'ZFAAAA','ZHLAAA','VVVVxx' -1040,7644,0,0,0,0,40,40,1040,1040,1040,80,81,'AOAAAA','AILAAA','AAAAxx' -8572,7645,0,0,2,12,72,572,572,3572,8572,144,145,'SRAAAA','BILAAA','HHHHxx' -5435,7646,1,3,5,15,35,435,1435,435,5435,70,71,'BBAAAA','CILAAA','OOOOxx' -8199,7647,1,3,9,19,99,199,199,3199,8199,198,199,'JDAAAA','DILAAA','VVVVxx' -8775,7648,1,3,5,15,75,775,775,3775,8775,150,151,'NZAAAA','EILAAA','AAAAxx' -7722,7649,0,2,2,2,22,722,1722,2722,7722,44,45,'ALAAAA','FILAAA','HHHHxx' -3549,7650,1,1,9,9,49,549,1549,3549,3549,98,99,'NGAAAA','GILAAA','OOOOxx' -2578,7651,0,2,8,18,78,578,578,2578,2578,156,157,'EVAAAA','HILAAA','VVVVxx' -1695,7652,1,3,5,15,95,695,1695,1695,1695,190,191,'FNAAAA','IILAAA','AAAAxx' -1902,7653,0,2,2,2,2,902,1902,1902,1902,4,5,'EVAAAA','JILAAA','HHHHxx' -6058,7654,0,2,8,18,58,58,58,1058,6058,116,117,'AZAAAA','KILAAA','OOOOxx' -6591,7655,1,3,1,11,91,591,591,1591,6591,182,183,'NTAAAA','LILAAA','VVVVxx' -7962,7656,0,2,2,2,62,962,1962,2962,7962,124,125,'GUAAAA','MILAAA','AAAAxx' -5612,7657,0,0,2,12,12,612,1612,612,5612,24,25,'WHAAAA','NILAAA','HHHHxx' -3341,7658,1,1,1,1,41,341,1341,3341,3341,82,83,'NYAAAA','OILAAA','OOOOxx' -5460,7659,0,0,0,0,60,460,1460,460,5460,120,121,'ACAAAA','PILAAA','VVVVxx' -2368,7660,0,0,8,8,68,368,368,2368,2368,136,137,'CNAAAA','QILAAA','AAAAxx' -8646,7661,0,2,6,6,46,646,646,3646,8646,92,93,'OUAAAA','RILAAA','HHHHxx' -4987,7662,1,3,7,7,87,987,987,4987,4987,174,175,'VJAAAA','SILAAA','OOOOxx' -9018,7663,0,2,8,18,18,18,1018,4018,9018,36,37,'WIAAAA','TILAAA','VVVVxx' -8685,7664,1,1,5,5,85,685,685,3685,8685,170,171,'BWAAAA','UILAAA','AAAAxx' -694,7665,0,2,4,14,94,694,694,694,694,188,189,'SAAAAA','VILAAA','HHHHxx' -2012,7666,0,0,2,12,12,12,12,2012,2012,24,25,'KZAAAA','WILAAA','OOOOxx' -2417,7667,1,1,7,17,17,417,417,2417,2417,34,35,'ZOAAAA','XILAAA','VVVVxx' -4022,7668,0,2,2,2,22,22,22,4022,4022,44,45,'SYAAAA','YILAAA','AAAAxx' -5935,7669,1,3,5,15,35,935,1935,935,5935,70,71,'HUAAAA','ZILAAA','HHHHxx' -1656,7670,0,0,6,16,56,656,1656,1656,1656,112,113,'SLAAAA','AJLAAA','OOOOxx' -6195,7671,1,3,5,15,95,195,195,1195,6195,190,191,'HEAAAA','BJLAAA','VVVVxx' -3057,7672,1,1,7,17,57,57,1057,3057,3057,114,115,'PNAAAA','CJLAAA','AAAAxx' -2852,7673,0,0,2,12,52,852,852,2852,2852,104,105,'SFAAAA','DJLAAA','HHHHxx' -4634,7674,0,2,4,14,34,634,634,4634,4634,68,69,'GWAAAA','EJLAAA','OOOOxx' -1689,7675,1,1,9,9,89,689,1689,1689,1689,178,179,'ZMAAAA','FJLAAA','VVVVxx' -4102,7676,0,2,2,2,2,102,102,4102,4102,4,5,'UBAAAA','GJLAAA','AAAAxx' -3287,7677,1,3,7,7,87,287,1287,3287,3287,174,175,'LWAAAA','HJLAAA','HHHHxx' -5246,7678,0,2,6,6,46,246,1246,246,5246,92,93,'UTAAAA','IJLAAA','OOOOxx' -7450,7679,0,2,0,10,50,450,1450,2450,7450,100,101,'OAAAAA','JJLAAA','VVVVxx' -6548,7680,0,0,8,8,48,548,548,1548,6548,96,97,'WRAAAA','KJLAAA','AAAAxx' -379,7681,1,3,9,19,79,379,379,379,379,158,159,'POAAAA','LJLAAA','HHHHxx' -7435,7682,1,3,5,15,35,435,1435,2435,7435,70,71,'ZZAAAA','MJLAAA','OOOOxx' -2041,7683,1,1,1,1,41,41,41,2041,2041,82,83,'NAAAAA','NJLAAA','VVVVxx' -8462,7684,0,2,2,2,62,462,462,3462,8462,124,125,'MNAAAA','OJLAAA','AAAAxx' -9076,7685,0,0,6,16,76,76,1076,4076,9076,152,153,'CLAAAA','PJLAAA','HHHHxx' -761,7686,1,1,1,1,61,761,761,761,761,122,123,'HDAAAA','QJLAAA','OOOOxx' -795,7687,1,3,5,15,95,795,795,795,795,190,191,'PEAAAA','RJLAAA','VVVVxx' -1671,7688,1,3,1,11,71,671,1671,1671,1671,142,143,'HMAAAA','SJLAAA','AAAAxx' -695,7689,1,3,5,15,95,695,695,695,695,190,191,'TAAAAA','TJLAAA','HHHHxx' -4981,7690,1,1,1,1,81,981,981,4981,4981,162,163,'PJAAAA','UJLAAA','OOOOxx' -1211,7691,1,3,1,11,11,211,1211,1211,1211,22,23,'PUAAAA','VJLAAA','VVVVxx' -5914,7692,0,2,4,14,14,914,1914,914,5914,28,29,'MTAAAA','WJLAAA','AAAAxx' -9356,7693,0,0,6,16,56,356,1356,4356,9356,112,113,'WVAAAA','XJLAAA','HHHHxx' -1500,7694,0,0,0,0,0,500,1500,1500,1500,0,1,'SFAAAA','YJLAAA','OOOOxx' -3353,7695,1,1,3,13,53,353,1353,3353,3353,106,107,'ZYAAAA','ZJLAAA','VVVVxx' -1060,7696,0,0,0,0,60,60,1060,1060,1060,120,121,'UOAAAA','AKLAAA','AAAAxx' -7910,7697,0,2,0,10,10,910,1910,2910,7910,20,21,'GSAAAA','BKLAAA','HHHHxx' -1329,7698,1,1,9,9,29,329,1329,1329,1329,58,59,'DZAAAA','CKLAAA','OOOOxx' -6011,7699,1,3,1,11,11,11,11,1011,6011,22,23,'FXAAAA','DKLAAA','VVVVxx' -7146,7700,0,2,6,6,46,146,1146,2146,7146,92,93,'WOAAAA','EKLAAA','AAAAxx' -4602,7701,0,2,2,2,2,602,602,4602,4602,4,5,'AVAAAA','FKLAAA','HHHHxx' -6751,7702,1,3,1,11,51,751,751,1751,6751,102,103,'RZAAAA','GKLAAA','OOOOxx' -2666,7703,0,2,6,6,66,666,666,2666,2666,132,133,'OYAAAA','HKLAAA','VVVVxx' -2785,7704,1,1,5,5,85,785,785,2785,2785,170,171,'DDAAAA','IKLAAA','AAAAxx' -5851,7705,1,3,1,11,51,851,1851,851,5851,102,103,'BRAAAA','JKLAAA','HHHHxx' -2435,7706,1,3,5,15,35,435,435,2435,2435,70,71,'RPAAAA','KKLAAA','OOOOxx' -7429,7707,1,1,9,9,29,429,1429,2429,7429,58,59,'TZAAAA','LKLAAA','VVVVxx' -4241,7708,1,1,1,1,41,241,241,4241,4241,82,83,'DHAAAA','MKLAAA','AAAAxx' -5691,7709,1,3,1,11,91,691,1691,691,5691,182,183,'XKAAAA','NKLAAA','HHHHxx' -7731,7710,1,3,1,11,31,731,1731,2731,7731,62,63,'JLAAAA','OKLAAA','OOOOxx' -249,7711,1,1,9,9,49,249,249,249,249,98,99,'PJAAAA','PKLAAA','VVVVxx' -1731,7712,1,3,1,11,31,731,1731,1731,1731,62,63,'POAAAA','QKLAAA','AAAAxx' -8716,7713,0,0,6,16,16,716,716,3716,8716,32,33,'GXAAAA','RKLAAA','HHHHxx' -2670,7714,0,2,0,10,70,670,670,2670,2670,140,141,'SYAAAA','SKLAAA','OOOOxx' -4654,7715,0,2,4,14,54,654,654,4654,4654,108,109,'AXAAAA','TKLAAA','VVVVxx' -1027,7716,1,3,7,7,27,27,1027,1027,1027,54,55,'NNAAAA','UKLAAA','AAAAxx' -1099,7717,1,3,9,19,99,99,1099,1099,1099,198,199,'HQAAAA','VKLAAA','HHHHxx' -3617,7718,1,1,7,17,17,617,1617,3617,3617,34,35,'DJAAAA','WKLAAA','OOOOxx' -4330,7719,0,2,0,10,30,330,330,4330,4330,60,61,'OKAAAA','XKLAAA','VVVVxx' -9750,7720,0,2,0,10,50,750,1750,4750,9750,100,101,'ALAAAA','YKLAAA','AAAAxx' -467,7721,1,3,7,7,67,467,467,467,467,134,135,'ZRAAAA','ZKLAAA','HHHHxx' -8525,7722,1,1,5,5,25,525,525,3525,8525,50,51,'XPAAAA','ALLAAA','OOOOxx' -5990,7723,0,2,0,10,90,990,1990,990,5990,180,181,'KWAAAA','BLLAAA','VVVVxx' -4839,7724,1,3,9,19,39,839,839,4839,4839,78,79,'DEAAAA','CLLAAA','AAAAxx' -9914,7725,0,2,4,14,14,914,1914,4914,9914,28,29,'IRAAAA','DLLAAA','HHHHxx' -7047,7726,1,3,7,7,47,47,1047,2047,7047,94,95,'BLAAAA','ELLAAA','OOOOxx' -874,7727,0,2,4,14,74,874,874,874,874,148,149,'QHAAAA','FLLAAA','VVVVxx' -6061,7728,1,1,1,1,61,61,61,1061,6061,122,123,'DZAAAA','GLLAAA','AAAAxx' -5491,7729,1,3,1,11,91,491,1491,491,5491,182,183,'FDAAAA','HLLAAA','HHHHxx' -4344,7730,0,0,4,4,44,344,344,4344,4344,88,89,'CLAAAA','ILLAAA','OOOOxx' -1281,7731,1,1,1,1,81,281,1281,1281,1281,162,163,'HXAAAA','JLLAAA','VVVVxx' -3597,7732,1,1,7,17,97,597,1597,3597,3597,194,195,'JIAAAA','KLLAAA','AAAAxx' -4992,7733,0,0,2,12,92,992,992,4992,4992,184,185,'AKAAAA','LLLAAA','HHHHxx' -3849,7734,1,1,9,9,49,849,1849,3849,3849,98,99,'BSAAAA','MLLAAA','OOOOxx' -2655,7735,1,3,5,15,55,655,655,2655,2655,110,111,'DYAAAA','NLLAAA','VVVVxx' -147,7736,1,3,7,7,47,147,147,147,147,94,95,'RFAAAA','OLLAAA','AAAAxx' -9110,7737,0,2,0,10,10,110,1110,4110,9110,20,21,'KMAAAA','PLLAAA','HHHHxx' -1637,7738,1,1,7,17,37,637,1637,1637,1637,74,75,'ZKAAAA','QLLAAA','OOOOxx' -9826,7739,0,2,6,6,26,826,1826,4826,9826,52,53,'YNAAAA','RLLAAA','VVVVxx' -5957,7740,1,1,7,17,57,957,1957,957,5957,114,115,'DVAAAA','SLLAAA','AAAAxx' -6932,7741,0,0,2,12,32,932,932,1932,6932,64,65,'QGAAAA','TLLAAA','HHHHxx' -9684,7742,0,0,4,4,84,684,1684,4684,9684,168,169,'MIAAAA','ULLAAA','OOOOxx' -4653,7743,1,1,3,13,53,653,653,4653,4653,106,107,'ZWAAAA','VLLAAA','VVVVxx' -8065,7744,1,1,5,5,65,65,65,3065,8065,130,131,'FYAAAA','WLLAAA','AAAAxx' -1202,7745,0,2,2,2,2,202,1202,1202,1202,4,5,'GUAAAA','XLLAAA','HHHHxx' -9214,7746,0,2,4,14,14,214,1214,4214,9214,28,29,'KQAAAA','YLLAAA','OOOOxx' -196,7747,0,0,6,16,96,196,196,196,196,192,193,'OHAAAA','ZLLAAA','VVVVxx' -4486,7748,0,2,6,6,86,486,486,4486,4486,172,173,'OQAAAA','AMLAAA','AAAAxx' -2585,7749,1,1,5,5,85,585,585,2585,2585,170,171,'LVAAAA','BMLAAA','HHHHxx' -2464,7750,0,0,4,4,64,464,464,2464,2464,128,129,'UQAAAA','CMLAAA','OOOOxx' -3467,7751,1,3,7,7,67,467,1467,3467,3467,134,135,'JDAAAA','DMLAAA','VVVVxx' -9295,7752,1,3,5,15,95,295,1295,4295,9295,190,191,'NTAAAA','EMLAAA','AAAAxx' -517,7753,1,1,7,17,17,517,517,517,517,34,35,'XTAAAA','FMLAAA','HHHHxx' -6870,7754,0,2,0,10,70,870,870,1870,6870,140,141,'GEAAAA','GMLAAA','OOOOxx' -5732,7755,0,0,2,12,32,732,1732,732,5732,64,65,'MMAAAA','HMLAAA','VVVVxx' -9376,7756,0,0,6,16,76,376,1376,4376,9376,152,153,'QWAAAA','IMLAAA','AAAAxx' -838,7757,0,2,8,18,38,838,838,838,838,76,77,'GGAAAA','JMLAAA','HHHHxx' -9254,7758,0,2,4,14,54,254,1254,4254,9254,108,109,'YRAAAA','KMLAAA','OOOOxx' -8879,7759,1,3,9,19,79,879,879,3879,8879,158,159,'NDAAAA','LMLAAA','VVVVxx' -6281,7760,1,1,1,1,81,281,281,1281,6281,162,163,'PHAAAA','MMLAAA','AAAAxx' -8216,7761,0,0,6,16,16,216,216,3216,8216,32,33,'AEAAAA','NMLAAA','HHHHxx' -9213,7762,1,1,3,13,13,213,1213,4213,9213,26,27,'JQAAAA','OMLAAA','OOOOxx' -7234,7763,0,2,4,14,34,234,1234,2234,7234,68,69,'GSAAAA','PMLAAA','VVVVxx' -5692,7764,0,0,2,12,92,692,1692,692,5692,184,185,'YKAAAA','QMLAAA','AAAAxx' -693,7765,1,1,3,13,93,693,693,693,693,186,187,'RAAAAA','RMLAAA','HHHHxx' -9050,7766,0,2,0,10,50,50,1050,4050,9050,100,101,'CKAAAA','SMLAAA','OOOOxx' -3623,7767,1,3,3,3,23,623,1623,3623,3623,46,47,'JJAAAA','TMLAAA','VVVVxx' -2130,7768,0,2,0,10,30,130,130,2130,2130,60,61,'YDAAAA','UMLAAA','AAAAxx' -2514,7769,0,2,4,14,14,514,514,2514,2514,28,29,'SSAAAA','VMLAAA','HHHHxx' -1812,7770,0,0,2,12,12,812,1812,1812,1812,24,25,'SRAAAA','WMLAAA','OOOOxx' -9037,7771,1,1,7,17,37,37,1037,4037,9037,74,75,'PJAAAA','XMLAAA','VVVVxx' -5054,7772,0,2,4,14,54,54,1054,54,5054,108,109,'KMAAAA','YMLAAA','AAAAxx' -7801,7773,1,1,1,1,1,801,1801,2801,7801,2,3,'BOAAAA','ZMLAAA','HHHHxx' -7939,7774,1,3,9,19,39,939,1939,2939,7939,78,79,'JTAAAA','ANLAAA','OOOOxx' -7374,7775,0,2,4,14,74,374,1374,2374,7374,148,149,'QXAAAA','BNLAAA','VVVVxx' -1058,7776,0,2,8,18,58,58,1058,1058,1058,116,117,'SOAAAA','CNLAAA','AAAAxx' -1972,7777,0,0,2,12,72,972,1972,1972,1972,144,145,'WXAAAA','DNLAAA','HHHHxx' -3741,7778,1,1,1,1,41,741,1741,3741,3741,82,83,'XNAAAA','ENLAAA','OOOOxx' -2227,7779,1,3,7,7,27,227,227,2227,2227,54,55,'RHAAAA','FNLAAA','VVVVxx' -304,7780,0,0,4,4,4,304,304,304,304,8,9,'SLAAAA','GNLAAA','AAAAxx' -4914,7781,0,2,4,14,14,914,914,4914,4914,28,29,'AHAAAA','HNLAAA','HHHHxx' -2428,7782,0,0,8,8,28,428,428,2428,2428,56,57,'KPAAAA','INLAAA','OOOOxx' -6660,7783,0,0,0,0,60,660,660,1660,6660,120,121,'EWAAAA','JNLAAA','VVVVxx' -2676,7784,0,0,6,16,76,676,676,2676,2676,152,153,'YYAAAA','KNLAAA','AAAAxx' -2454,7785,0,2,4,14,54,454,454,2454,2454,108,109,'KQAAAA','LNLAAA','HHHHxx' -3798,7786,0,2,8,18,98,798,1798,3798,3798,196,197,'CQAAAA','MNLAAA','OOOOxx' -1341,7787,1,1,1,1,41,341,1341,1341,1341,82,83,'PZAAAA','NNLAAA','VVVVxx' -1611,7788,1,3,1,11,11,611,1611,1611,1611,22,23,'ZJAAAA','ONLAAA','AAAAxx' -2681,7789,1,1,1,1,81,681,681,2681,2681,162,163,'DZAAAA','PNLAAA','HHHHxx' -7292,7790,0,0,2,12,92,292,1292,2292,7292,184,185,'MUAAAA','QNLAAA','OOOOxx' -7775,7791,1,3,5,15,75,775,1775,2775,7775,150,151,'BNAAAA','RNLAAA','VVVVxx' -794,7792,0,2,4,14,94,794,794,794,794,188,189,'OEAAAA','SNLAAA','AAAAxx' -8709,7793,1,1,9,9,9,709,709,3709,8709,18,19,'ZWAAAA','TNLAAA','HHHHxx' -1901,7794,1,1,1,1,1,901,1901,1901,1901,2,3,'DVAAAA','UNLAAA','OOOOxx' -3089,7795,1,1,9,9,89,89,1089,3089,3089,178,179,'VOAAAA','VNLAAA','VVVVxx' -7797,7796,1,1,7,17,97,797,1797,2797,7797,194,195,'XNAAAA','WNLAAA','AAAAxx' -6070,7797,0,2,0,10,70,70,70,1070,6070,140,141,'MZAAAA','XNLAAA','HHHHxx' -2191,7798,1,3,1,11,91,191,191,2191,2191,182,183,'HGAAAA','YNLAAA','OOOOxx' -3497,7799,1,1,7,17,97,497,1497,3497,3497,194,195,'NEAAAA','ZNLAAA','VVVVxx' -8302,7800,0,2,2,2,2,302,302,3302,8302,4,5,'IHAAAA','AOLAAA','AAAAxx' -4365,7801,1,1,5,5,65,365,365,4365,4365,130,131,'XLAAAA','BOLAAA','HHHHxx' -3588,7802,0,0,8,8,88,588,1588,3588,3588,176,177,'AIAAAA','COLAAA','OOOOxx' -8292,7803,0,0,2,12,92,292,292,3292,8292,184,185,'YGAAAA','DOLAAA','VVVVxx' -4696,7804,0,0,6,16,96,696,696,4696,4696,192,193,'QYAAAA','EOLAAA','AAAAxx' -5641,7805,1,1,1,1,41,641,1641,641,5641,82,83,'ZIAAAA','FOLAAA','HHHHxx' -9386,7806,0,2,6,6,86,386,1386,4386,9386,172,173,'AXAAAA','GOLAAA','OOOOxx' -507,7807,1,3,7,7,7,507,507,507,507,14,15,'NTAAAA','HOLAAA','VVVVxx' -7201,7808,1,1,1,1,1,201,1201,2201,7201,2,3,'ZQAAAA','IOLAAA','AAAAxx' -7785,7809,1,1,5,5,85,785,1785,2785,7785,170,171,'LNAAAA','JOLAAA','HHHHxx' -463,7810,1,3,3,3,63,463,463,463,463,126,127,'VRAAAA','KOLAAA','OOOOxx' -6656,7811,0,0,6,16,56,656,656,1656,6656,112,113,'AWAAAA','LOLAAA','VVVVxx' -807,7812,1,3,7,7,7,807,807,807,807,14,15,'BFAAAA','MOLAAA','AAAAxx' -7278,7813,0,2,8,18,78,278,1278,2278,7278,156,157,'YTAAAA','NOLAAA','HHHHxx' -6237,7814,1,1,7,17,37,237,237,1237,6237,74,75,'XFAAAA','OOLAAA','OOOOxx' -7671,7815,1,3,1,11,71,671,1671,2671,7671,142,143,'BJAAAA','POLAAA','VVVVxx' -2235,7816,1,3,5,15,35,235,235,2235,2235,70,71,'ZHAAAA','QOLAAA','AAAAxx' -4042,7817,0,2,2,2,42,42,42,4042,4042,84,85,'MZAAAA','ROLAAA','HHHHxx' -5273,7818,1,1,3,13,73,273,1273,273,5273,146,147,'VUAAAA','SOLAAA','OOOOxx' -7557,7819,1,1,7,17,57,557,1557,2557,7557,114,115,'REAAAA','TOLAAA','VVVVxx' -4007,7820,1,3,7,7,7,7,7,4007,4007,14,15,'DYAAAA','UOLAAA','AAAAxx' -1428,7821,0,0,8,8,28,428,1428,1428,1428,56,57,'YCAAAA','VOLAAA','HHHHxx' -9739,7822,1,3,9,19,39,739,1739,4739,9739,78,79,'PKAAAA','WOLAAA','OOOOxx' -7836,7823,0,0,6,16,36,836,1836,2836,7836,72,73,'KPAAAA','XOLAAA','VVVVxx' -1777,7824,1,1,7,17,77,777,1777,1777,1777,154,155,'JQAAAA','YOLAAA','AAAAxx' -5192,7825,0,0,2,12,92,192,1192,192,5192,184,185,'SRAAAA','ZOLAAA','HHHHxx' -7236,7826,0,0,6,16,36,236,1236,2236,7236,72,73,'ISAAAA','APLAAA','OOOOxx' -1623,7827,1,3,3,3,23,623,1623,1623,1623,46,47,'LKAAAA','BPLAAA','VVVVxx' -8288,7828,0,0,8,8,88,288,288,3288,8288,176,177,'UGAAAA','CPLAAA','AAAAxx' -2827,7829,1,3,7,7,27,827,827,2827,2827,54,55,'TEAAAA','DPLAAA','HHHHxx' -458,7830,0,2,8,18,58,458,458,458,458,116,117,'QRAAAA','EPLAAA','OOOOxx' -1818,7831,0,2,8,18,18,818,1818,1818,1818,36,37,'YRAAAA','FPLAAA','VVVVxx' -6837,7832,1,1,7,17,37,837,837,1837,6837,74,75,'ZCAAAA','GPLAAA','AAAAxx' -7825,7833,1,1,5,5,25,825,1825,2825,7825,50,51,'ZOAAAA','HPLAAA','HHHHxx' -9146,7834,0,2,6,6,46,146,1146,4146,9146,92,93,'UNAAAA','IPLAAA','OOOOxx' -8451,7835,1,3,1,11,51,451,451,3451,8451,102,103,'BNAAAA','JPLAAA','VVVVxx' -6438,7836,0,2,8,18,38,438,438,1438,6438,76,77,'QNAAAA','KPLAAA','AAAAxx' -4020,7837,0,0,0,0,20,20,20,4020,4020,40,41,'QYAAAA','LPLAAA','HHHHxx' -4068,7838,0,0,8,8,68,68,68,4068,4068,136,137,'MAAAAA','MPLAAA','OOOOxx' -2411,7839,1,3,1,11,11,411,411,2411,2411,22,23,'TOAAAA','NPLAAA','VVVVxx' -6222,7840,0,2,2,2,22,222,222,1222,6222,44,45,'IFAAAA','OPLAAA','AAAAxx' -3164,7841,0,0,4,4,64,164,1164,3164,3164,128,129,'SRAAAA','PPLAAA','HHHHxx' -311,7842,1,3,1,11,11,311,311,311,311,22,23,'ZLAAAA','QPLAAA','OOOOxx' -5683,7843,1,3,3,3,83,683,1683,683,5683,166,167,'PKAAAA','RPLAAA','VVVVxx' -3993,7844,1,1,3,13,93,993,1993,3993,3993,186,187,'PXAAAA','SPLAAA','AAAAxx' -9897,7845,1,1,7,17,97,897,1897,4897,9897,194,195,'RQAAAA','TPLAAA','HHHHxx' -6609,7846,1,1,9,9,9,609,609,1609,6609,18,19,'FUAAAA','UPLAAA','OOOOxx' -1362,7847,0,2,2,2,62,362,1362,1362,1362,124,125,'KAAAAA','VPLAAA','VVVVxx' -3918,7848,0,2,8,18,18,918,1918,3918,3918,36,37,'SUAAAA','WPLAAA','AAAAxx' -7376,7849,0,0,6,16,76,376,1376,2376,7376,152,153,'SXAAAA','XPLAAA','HHHHxx' -6996,7850,0,0,6,16,96,996,996,1996,6996,192,193,'CJAAAA','YPLAAA','OOOOxx' -9567,7851,1,3,7,7,67,567,1567,4567,9567,134,135,'ZDAAAA','ZPLAAA','VVVVxx' -7525,7852,1,1,5,5,25,525,1525,2525,7525,50,51,'LDAAAA','AQLAAA','AAAAxx' -9069,7853,1,1,9,9,69,69,1069,4069,9069,138,139,'VKAAAA','BQLAAA','HHHHxx' -9999,7854,1,3,9,19,99,999,1999,4999,9999,198,199,'PUAAAA','CQLAAA','OOOOxx' -9237,7855,1,1,7,17,37,237,1237,4237,9237,74,75,'HRAAAA','DQLAAA','VVVVxx' -8441,7856,1,1,1,1,41,441,441,3441,8441,82,83,'RMAAAA','EQLAAA','AAAAxx' -6769,7857,1,1,9,9,69,769,769,1769,6769,138,139,'JAAAAA','FQLAAA','HHHHxx' -6073,7858,1,1,3,13,73,73,73,1073,6073,146,147,'PZAAAA','GQLAAA','OOOOxx' -1091,7859,1,3,1,11,91,91,1091,1091,1091,182,183,'ZPAAAA','HQLAAA','VVVVxx' -9886,7860,0,2,6,6,86,886,1886,4886,9886,172,173,'GQAAAA','IQLAAA','AAAAxx' -3971,7861,1,3,1,11,71,971,1971,3971,3971,142,143,'TWAAAA','JQLAAA','HHHHxx' -4621,7862,1,1,1,1,21,621,621,4621,4621,42,43,'TVAAAA','KQLAAA','OOOOxx' -3120,7863,0,0,0,0,20,120,1120,3120,3120,40,41,'AQAAAA','LQLAAA','VVVVxx' -9773,7864,1,1,3,13,73,773,1773,4773,9773,146,147,'XLAAAA','MQLAAA','AAAAxx' -8712,7865,0,0,2,12,12,712,712,3712,8712,24,25,'CXAAAA','NQLAAA','HHHHxx' -801,7866,1,1,1,1,1,801,801,801,801,2,3,'VEAAAA','OQLAAA','OOOOxx' -9478,7867,0,2,8,18,78,478,1478,4478,9478,156,157,'OAAAAA','PQLAAA','VVVVxx' -3466,7868,0,2,6,6,66,466,1466,3466,3466,132,133,'IDAAAA','QQLAAA','AAAAxx' -6326,7869,0,2,6,6,26,326,326,1326,6326,52,53,'IJAAAA','RQLAAA','HHHHxx' -1723,7870,1,3,3,3,23,723,1723,1723,1723,46,47,'HOAAAA','SQLAAA','OOOOxx' -4978,7871,0,2,8,18,78,978,978,4978,4978,156,157,'MJAAAA','TQLAAA','VVVVxx' -2311,7872,1,3,1,11,11,311,311,2311,2311,22,23,'XKAAAA','UQLAAA','AAAAxx' -9532,7873,0,0,2,12,32,532,1532,4532,9532,64,65,'QCAAAA','VQLAAA','HHHHxx' -3680,7874,0,0,0,0,80,680,1680,3680,3680,160,161,'OLAAAA','WQLAAA','OOOOxx' -1244,7875,0,0,4,4,44,244,1244,1244,1244,88,89,'WVAAAA','XQLAAA','VVVVxx' -3821,7876,1,1,1,1,21,821,1821,3821,3821,42,43,'ZQAAAA','YQLAAA','AAAAxx' -9586,7877,0,2,6,6,86,586,1586,4586,9586,172,173,'SEAAAA','ZQLAAA','HHHHxx' -3894,7878,0,2,4,14,94,894,1894,3894,3894,188,189,'UTAAAA','ARLAAA','OOOOxx' -6169,7879,1,1,9,9,69,169,169,1169,6169,138,139,'HDAAAA','BRLAAA','VVVVxx' -5919,7880,1,3,9,19,19,919,1919,919,5919,38,39,'RTAAAA','CRLAAA','AAAAxx' -4187,7881,1,3,7,7,87,187,187,4187,4187,174,175,'BFAAAA','DRLAAA','HHHHxx' -5477,7882,1,1,7,17,77,477,1477,477,5477,154,155,'RCAAAA','ERLAAA','OOOOxx' -2806,7883,0,2,6,6,6,806,806,2806,2806,12,13,'YDAAAA','FRLAAA','VVVVxx' -8158,7884,0,2,8,18,58,158,158,3158,8158,116,117,'UBAAAA','GRLAAA','AAAAxx' -7130,7885,0,2,0,10,30,130,1130,2130,7130,60,61,'GOAAAA','HRLAAA','HHHHxx' -7133,7886,1,1,3,13,33,133,1133,2133,7133,66,67,'JOAAAA','IRLAAA','OOOOxx' -6033,7887,1,1,3,13,33,33,33,1033,6033,66,67,'BYAAAA','JRLAAA','VVVVxx' -2415,7888,1,3,5,15,15,415,415,2415,2415,30,31,'XOAAAA','KRLAAA','AAAAxx' -8091,7889,1,3,1,11,91,91,91,3091,8091,182,183,'FZAAAA','LRLAAA','HHHHxx' -8347,7890,1,3,7,7,47,347,347,3347,8347,94,95,'BJAAAA','MRLAAA','OOOOxx' -7879,7891,1,3,9,19,79,879,1879,2879,7879,158,159,'BRAAAA','NRLAAA','VVVVxx' -9360,7892,0,0,0,0,60,360,1360,4360,9360,120,121,'AWAAAA','ORLAAA','AAAAxx' -3369,7893,1,1,9,9,69,369,1369,3369,3369,138,139,'PZAAAA','PRLAAA','HHHHxx' -8536,7894,0,0,6,16,36,536,536,3536,8536,72,73,'IQAAAA','QRLAAA','OOOOxx' -8628,7895,0,0,8,8,28,628,628,3628,8628,56,57,'WTAAAA','RRLAAA','VVVVxx' -1580,7896,0,0,0,0,80,580,1580,1580,1580,160,161,'UIAAAA','SRLAAA','AAAAxx' -705,7897,1,1,5,5,5,705,705,705,705,10,11,'DBAAAA','TRLAAA','HHHHxx' -4650,7898,0,2,0,10,50,650,650,4650,4650,100,101,'WWAAAA','URLAAA','OOOOxx' -9165,7899,1,1,5,5,65,165,1165,4165,9165,130,131,'NOAAAA','VRLAAA','VVVVxx' -4820,7900,0,0,0,0,20,820,820,4820,4820,40,41,'KDAAAA','WRLAAA','AAAAxx' -3538,7901,0,2,8,18,38,538,1538,3538,3538,76,77,'CGAAAA','XRLAAA','HHHHxx' -9947,7902,1,3,7,7,47,947,1947,4947,9947,94,95,'PSAAAA','YRLAAA','OOOOxx' -4954,7903,0,2,4,14,54,954,954,4954,4954,108,109,'OIAAAA','ZRLAAA','VVVVxx' -1104,7904,0,0,4,4,4,104,1104,1104,1104,8,9,'MQAAAA','ASLAAA','AAAAxx' -8455,7905,1,3,5,15,55,455,455,3455,8455,110,111,'FNAAAA','BSLAAA','HHHHxx' -8307,7906,1,3,7,7,7,307,307,3307,8307,14,15,'NHAAAA','CSLAAA','OOOOxx' -9203,7907,1,3,3,3,3,203,1203,4203,9203,6,7,'ZPAAAA','DSLAAA','VVVVxx' -7565,7908,1,1,5,5,65,565,1565,2565,7565,130,131,'ZEAAAA','ESLAAA','AAAAxx' -7745,7909,1,1,5,5,45,745,1745,2745,7745,90,91,'XLAAAA','FSLAAA','HHHHxx' -1787,7910,1,3,7,7,87,787,1787,1787,1787,174,175,'TQAAAA','GSLAAA','OOOOxx' -4861,7911,1,1,1,1,61,861,861,4861,4861,122,123,'ZEAAAA','HSLAAA','VVVVxx' -5183,7912,1,3,3,3,83,183,1183,183,5183,166,167,'JRAAAA','ISLAAA','AAAAxx' -529,7913,1,1,9,9,29,529,529,529,529,58,59,'JUAAAA','JSLAAA','HHHHxx' -2470,7914,0,2,0,10,70,470,470,2470,2470,140,141,'ARAAAA','KSLAAA','OOOOxx' -1267,7915,1,3,7,7,67,267,1267,1267,1267,134,135,'TWAAAA','LSLAAA','VVVVxx' -2059,7916,1,3,9,19,59,59,59,2059,2059,118,119,'FBAAAA','MSLAAA','AAAAxx' -1862,7917,0,2,2,2,62,862,1862,1862,1862,124,125,'QTAAAA','NSLAAA','HHHHxx' -7382,7918,0,2,2,2,82,382,1382,2382,7382,164,165,'YXAAAA','OSLAAA','OOOOxx' -4796,7919,0,0,6,16,96,796,796,4796,4796,192,193,'MCAAAA','PSLAAA','VVVVxx' -2331,7920,1,3,1,11,31,331,331,2331,2331,62,63,'RLAAAA','QSLAAA','AAAAxx' -8870,7921,0,2,0,10,70,870,870,3870,8870,140,141,'EDAAAA','RSLAAA','HHHHxx' -9581,7922,1,1,1,1,81,581,1581,4581,9581,162,163,'NEAAAA','SSLAAA','OOOOxx' -9063,7923,1,3,3,3,63,63,1063,4063,9063,126,127,'PKAAAA','TSLAAA','VVVVxx' -2192,7924,0,0,2,12,92,192,192,2192,2192,184,185,'IGAAAA','USLAAA','AAAAxx' -6466,7925,0,2,6,6,66,466,466,1466,6466,132,133,'SOAAAA','VSLAAA','HHHHxx' -7096,7926,0,0,6,16,96,96,1096,2096,7096,192,193,'YMAAAA','WSLAAA','OOOOxx' -6257,7927,1,1,7,17,57,257,257,1257,6257,114,115,'RGAAAA','XSLAAA','VVVVxx' -7009,7928,1,1,9,9,9,9,1009,2009,7009,18,19,'PJAAAA','YSLAAA','AAAAxx' -8136,7929,0,0,6,16,36,136,136,3136,8136,72,73,'YAAAAA','ZSLAAA','HHHHxx' -1854,7930,0,2,4,14,54,854,1854,1854,1854,108,109,'ITAAAA','ATLAAA','OOOOxx' -3644,7931,0,0,4,4,44,644,1644,3644,3644,88,89,'EKAAAA','BTLAAA','VVVVxx' -4437,7932,1,1,7,17,37,437,437,4437,4437,74,75,'ROAAAA','CTLAAA','AAAAxx' -7209,7933,1,1,9,9,9,209,1209,2209,7209,18,19,'HRAAAA','DTLAAA','HHHHxx' -1516,7934,0,0,6,16,16,516,1516,1516,1516,32,33,'IGAAAA','ETLAAA','OOOOxx' -822,7935,0,2,2,2,22,822,822,822,822,44,45,'QFAAAA','FTLAAA','VVVVxx' -1778,7936,0,2,8,18,78,778,1778,1778,1778,156,157,'KQAAAA','GTLAAA','AAAAxx' -8161,7937,1,1,1,1,61,161,161,3161,8161,122,123,'XBAAAA','HTLAAA','HHHHxx' -6030,7938,0,2,0,10,30,30,30,1030,6030,60,61,'YXAAAA','ITLAAA','OOOOxx' -3515,7939,1,3,5,15,15,515,1515,3515,3515,30,31,'FFAAAA','JTLAAA','VVVVxx' -1702,7940,0,2,2,2,2,702,1702,1702,1702,4,5,'MNAAAA','KTLAAA','AAAAxx' -2671,7941,1,3,1,11,71,671,671,2671,2671,142,143,'TYAAAA','LTLAAA','HHHHxx' -7623,7942,1,3,3,3,23,623,1623,2623,7623,46,47,'FHAAAA','MTLAAA','OOOOxx' -9828,7943,0,0,8,8,28,828,1828,4828,9828,56,57,'AOAAAA','NTLAAA','VVVVxx' -1888,7944,0,0,8,8,88,888,1888,1888,1888,176,177,'QUAAAA','OTLAAA','AAAAxx' -4520,7945,0,0,0,0,20,520,520,4520,4520,40,41,'WRAAAA','PTLAAA','HHHHxx' -3461,7946,1,1,1,1,61,461,1461,3461,3461,122,123,'DDAAAA','QTLAAA','OOOOxx' -1488,7947,0,0,8,8,88,488,1488,1488,1488,176,177,'GFAAAA','RTLAAA','VVVVxx' -7753,7948,1,1,3,13,53,753,1753,2753,7753,106,107,'FMAAAA','STLAAA','AAAAxx' -5525,7949,1,1,5,5,25,525,1525,525,5525,50,51,'NEAAAA','TTLAAA','HHHHxx' -5220,7950,0,0,0,0,20,220,1220,220,5220,40,41,'USAAAA','UTLAAA','OOOOxx' -305,7951,1,1,5,5,5,305,305,305,305,10,11,'TLAAAA','VTLAAA','VVVVxx' -7883,7952,1,3,3,3,83,883,1883,2883,7883,166,167,'FRAAAA','WTLAAA','AAAAxx' -1222,7953,0,2,2,2,22,222,1222,1222,1222,44,45,'AVAAAA','XTLAAA','HHHHxx' -8552,7954,0,0,2,12,52,552,552,3552,8552,104,105,'YQAAAA','YTLAAA','OOOOxx' -6097,7955,1,1,7,17,97,97,97,1097,6097,194,195,'NAAAAA','ZTLAAA','VVVVxx' -2298,7956,0,2,8,18,98,298,298,2298,2298,196,197,'KKAAAA','AULAAA','AAAAxx' -956,7957,0,0,6,16,56,956,956,956,956,112,113,'UKAAAA','BULAAA','HHHHxx' -9351,7958,1,3,1,11,51,351,1351,4351,9351,102,103,'RVAAAA','CULAAA','OOOOxx' -6669,7959,1,1,9,9,69,669,669,1669,6669,138,139,'NWAAAA','DULAAA','VVVVxx' -9383,7960,1,3,3,3,83,383,1383,4383,9383,166,167,'XWAAAA','EULAAA','AAAAxx' -1607,7961,1,3,7,7,7,607,1607,1607,1607,14,15,'VJAAAA','FULAAA','HHHHxx' -812,7962,0,0,2,12,12,812,812,812,812,24,25,'GFAAAA','GULAAA','OOOOxx' -2109,7963,1,1,9,9,9,109,109,2109,2109,18,19,'DDAAAA','HULAAA','VVVVxx' -207,7964,1,3,7,7,7,207,207,207,207,14,15,'ZHAAAA','IULAAA','AAAAxx' -7124,7965,0,0,4,4,24,124,1124,2124,7124,48,49,'AOAAAA','JULAAA','HHHHxx' -9333,7966,1,1,3,13,33,333,1333,4333,9333,66,67,'ZUAAAA','KULAAA','OOOOxx' -3262,7967,0,2,2,2,62,262,1262,3262,3262,124,125,'MVAAAA','LULAAA','VVVVxx' -1070,7968,0,2,0,10,70,70,1070,1070,1070,140,141,'EPAAAA','MULAAA','AAAAxx' -7579,7969,1,3,9,19,79,579,1579,2579,7579,158,159,'NFAAAA','NULAAA','HHHHxx' -9283,7970,1,3,3,3,83,283,1283,4283,9283,166,167,'BTAAAA','OULAAA','OOOOxx' -4917,7971,1,1,7,17,17,917,917,4917,4917,34,35,'DHAAAA','PULAAA','VVVVxx' -1328,7972,0,0,8,8,28,328,1328,1328,1328,56,57,'CZAAAA','QULAAA','AAAAxx' -3042,7973,0,2,2,2,42,42,1042,3042,3042,84,85,'ANAAAA','RULAAA','HHHHxx' -8352,7974,0,0,2,12,52,352,352,3352,8352,104,105,'GJAAAA','SULAAA','OOOOxx' -2710,7975,0,2,0,10,10,710,710,2710,2710,20,21,'GAAAAA','TULAAA','VVVVxx' -3330,7976,0,2,0,10,30,330,1330,3330,3330,60,61,'CYAAAA','UULAAA','AAAAxx' -2822,7977,0,2,2,2,22,822,822,2822,2822,44,45,'OEAAAA','VULAAA','HHHHxx' -5627,7978,1,3,7,7,27,627,1627,627,5627,54,55,'LIAAAA','WULAAA','OOOOxx' -7848,7979,0,0,8,8,48,848,1848,2848,7848,96,97,'WPAAAA','XULAAA','VVVVxx' -7384,7980,0,0,4,4,84,384,1384,2384,7384,168,169,'AYAAAA','YULAAA','AAAAxx' -727,7981,1,3,7,7,27,727,727,727,727,54,55,'ZBAAAA','ZULAAA','HHHHxx' -9926,7982,0,2,6,6,26,926,1926,4926,9926,52,53,'URAAAA','AVLAAA','OOOOxx' -2647,7983,1,3,7,7,47,647,647,2647,2647,94,95,'VXAAAA','BVLAAA','VVVVxx' -6416,7984,0,0,6,16,16,416,416,1416,6416,32,33,'UMAAAA','CVLAAA','AAAAxx' -8751,7985,1,3,1,11,51,751,751,3751,8751,102,103,'PYAAAA','DVLAAA','HHHHxx' -6515,7986,1,3,5,15,15,515,515,1515,6515,30,31,'PQAAAA','EVLAAA','OOOOxx' -2472,7987,0,0,2,12,72,472,472,2472,2472,144,145,'CRAAAA','FVLAAA','VVVVxx' -7205,7988,1,1,5,5,5,205,1205,2205,7205,10,11,'DRAAAA','GVLAAA','AAAAxx' -9654,7989,0,2,4,14,54,654,1654,4654,9654,108,109,'IHAAAA','HVLAAA','HHHHxx' -5646,7990,0,2,6,6,46,646,1646,646,5646,92,93,'EJAAAA','IVLAAA','OOOOxx' -4217,7991,1,1,7,17,17,217,217,4217,4217,34,35,'FGAAAA','JVLAAA','VVVVxx' -4484,7992,0,0,4,4,84,484,484,4484,4484,168,169,'MQAAAA','KVLAAA','AAAAxx' -6654,7993,0,2,4,14,54,654,654,1654,6654,108,109,'YVAAAA','LVLAAA','HHHHxx' -4876,7994,0,0,6,16,76,876,876,4876,4876,152,153,'OFAAAA','MVLAAA','OOOOxx' -9690,7995,0,2,0,10,90,690,1690,4690,9690,180,181,'SIAAAA','NVLAAA','VVVVxx' -2453,7996,1,1,3,13,53,453,453,2453,2453,106,107,'JQAAAA','OVLAAA','AAAAxx' -829,7997,1,1,9,9,29,829,829,829,829,58,59,'XFAAAA','PVLAAA','HHHHxx' -2547,7998,1,3,7,7,47,547,547,2547,2547,94,95,'ZTAAAA','QVLAAA','OOOOxx' -9726,7999,0,2,6,6,26,726,1726,4726,9726,52,53,'CKAAAA','RVLAAA','VVVVxx' -9267,8000,1,3,7,7,67,267,1267,4267,9267,134,135,'LSAAAA','SVLAAA','AAAAxx' -7448,8001,0,0,8,8,48,448,1448,2448,7448,96,97,'MAAAAA','TVLAAA','HHHHxx' -610,8002,0,2,0,10,10,610,610,610,610,20,21,'MXAAAA','UVLAAA','OOOOxx' -2791,8003,1,3,1,11,91,791,791,2791,2791,182,183,'JDAAAA','VVLAAA','VVVVxx' -3651,8004,1,3,1,11,51,651,1651,3651,3651,102,103,'LKAAAA','WVLAAA','AAAAxx' -5206,8005,0,2,6,6,6,206,1206,206,5206,12,13,'GSAAAA','XVLAAA','HHHHxx' -8774,8006,0,2,4,14,74,774,774,3774,8774,148,149,'MZAAAA','YVLAAA','OOOOxx' -4753,8007,1,1,3,13,53,753,753,4753,4753,106,107,'VAAAAA','ZVLAAA','VVVVxx' -4755,8008,1,3,5,15,55,755,755,4755,4755,110,111,'XAAAAA','AWLAAA','AAAAxx' -686,8009,0,2,6,6,86,686,686,686,686,172,173,'KAAAAA','BWLAAA','HHHHxx' -8281,8010,1,1,1,1,81,281,281,3281,8281,162,163,'NGAAAA','CWLAAA','OOOOxx' -2058,8011,0,2,8,18,58,58,58,2058,2058,116,117,'EBAAAA','DWLAAA','VVVVxx' -8900,8012,0,0,0,0,0,900,900,3900,8900,0,1,'IEAAAA','EWLAAA','AAAAxx' -8588,8013,0,0,8,8,88,588,588,3588,8588,176,177,'ISAAAA','FWLAAA','HHHHxx' -2904,8014,0,0,4,4,4,904,904,2904,2904,8,9,'SHAAAA','GWLAAA','OOOOxx' -8917,8015,1,1,7,17,17,917,917,3917,8917,34,35,'ZEAAAA','HWLAAA','VVVVxx' -9026,8016,0,2,6,6,26,26,1026,4026,9026,52,53,'EJAAAA','IWLAAA','AAAAxx' -2416,8017,0,0,6,16,16,416,416,2416,2416,32,33,'YOAAAA','JWLAAA','HHHHxx' -1053,8018,1,1,3,13,53,53,1053,1053,1053,106,107,'NOAAAA','KWLAAA','OOOOxx' -7141,8019,1,1,1,1,41,141,1141,2141,7141,82,83,'ROAAAA','LWLAAA','VVVVxx' -9771,8020,1,3,1,11,71,771,1771,4771,9771,142,143,'VLAAAA','MWLAAA','AAAAxx' -2774,8021,0,2,4,14,74,774,774,2774,2774,148,149,'SCAAAA','NWLAAA','HHHHxx' -3213,8022,1,1,3,13,13,213,1213,3213,3213,26,27,'PTAAAA','OWLAAA','OOOOxx' -5694,8023,0,2,4,14,94,694,1694,694,5694,188,189,'ALAAAA','PWLAAA','VVVVxx' -6631,8024,1,3,1,11,31,631,631,1631,6631,62,63,'BVAAAA','QWLAAA','AAAAxx' -6638,8025,0,2,8,18,38,638,638,1638,6638,76,77,'IVAAAA','RWLAAA','HHHHxx' -7407,8026,1,3,7,7,7,407,1407,2407,7407,14,15,'XYAAAA','SWLAAA','OOOOxx' -8972,8027,0,0,2,12,72,972,972,3972,8972,144,145,'CHAAAA','TWLAAA','VVVVxx' -2202,8028,0,2,2,2,2,202,202,2202,2202,4,5,'SGAAAA','UWLAAA','AAAAxx' -6135,8029,1,3,5,15,35,135,135,1135,6135,70,71,'ZBAAAA','VWLAAA','HHHHxx' -5043,8030,1,3,3,3,43,43,1043,43,5043,86,87,'ZLAAAA','WWLAAA','OOOOxx' -5163,8031,1,3,3,3,63,163,1163,163,5163,126,127,'PQAAAA','XWLAAA','VVVVxx' -1191,8032,1,3,1,11,91,191,1191,1191,1191,182,183,'VTAAAA','YWLAAA','AAAAxx' -6576,8033,0,0,6,16,76,576,576,1576,6576,152,153,'YSAAAA','ZWLAAA','HHHHxx' -3455,8034,1,3,5,15,55,455,1455,3455,3455,110,111,'XCAAAA','AXLAAA','OOOOxx' -3688,8035,0,0,8,8,88,688,1688,3688,3688,176,177,'WLAAAA','BXLAAA','VVVVxx' -4982,8036,0,2,2,2,82,982,982,4982,4982,164,165,'QJAAAA','CXLAAA','AAAAxx' -4180,8037,0,0,0,0,80,180,180,4180,4180,160,161,'UEAAAA','DXLAAA','HHHHxx' -4708,8038,0,0,8,8,8,708,708,4708,4708,16,17,'CZAAAA','EXLAAA','OOOOxx' -1241,8039,1,1,1,1,41,241,1241,1241,1241,82,83,'TVAAAA','FXLAAA','VVVVxx' -4921,8040,1,1,1,1,21,921,921,4921,4921,42,43,'HHAAAA','GXLAAA','AAAAxx' -3197,8041,1,1,7,17,97,197,1197,3197,3197,194,195,'ZSAAAA','HXLAAA','HHHHxx' -8225,8042,1,1,5,5,25,225,225,3225,8225,50,51,'JEAAAA','IXLAAA','OOOOxx' -5913,8043,1,1,3,13,13,913,1913,913,5913,26,27,'LTAAAA','JXLAAA','VVVVxx' -6387,8044,1,3,7,7,87,387,387,1387,6387,174,175,'RLAAAA','KXLAAA','AAAAxx' -2706,8045,0,2,6,6,6,706,706,2706,2706,12,13,'CAAAAA','LXLAAA','HHHHxx' -1461,8046,1,1,1,1,61,461,1461,1461,1461,122,123,'FEAAAA','MXLAAA','OOOOxx' -7646,8047,0,2,6,6,46,646,1646,2646,7646,92,93,'CIAAAA','NXLAAA','VVVVxx' -8066,8048,0,2,6,6,66,66,66,3066,8066,132,133,'GYAAAA','OXLAAA','AAAAxx' -4171,8049,1,3,1,11,71,171,171,4171,4171,142,143,'LEAAAA','PXLAAA','HHHHxx' -8008,8050,0,0,8,8,8,8,8,3008,8008,16,17,'AWAAAA','QXLAAA','OOOOxx' -2088,8051,0,0,8,8,88,88,88,2088,2088,176,177,'ICAAAA','RXLAAA','VVVVxx' -7907,8052,1,3,7,7,7,907,1907,2907,7907,14,15,'DSAAAA','SXLAAA','AAAAxx' -2429,8053,1,1,9,9,29,429,429,2429,2429,58,59,'LPAAAA','TXLAAA','HHHHxx' -9629,8054,1,1,9,9,29,629,1629,4629,9629,58,59,'JGAAAA','UXLAAA','OOOOxx' -1470,8055,0,2,0,10,70,470,1470,1470,1470,140,141,'OEAAAA','VXLAAA','VVVVxx' -4346,8056,0,2,6,6,46,346,346,4346,4346,92,93,'ELAAAA','WXLAAA','AAAAxx' -7219,8057,1,3,9,19,19,219,1219,2219,7219,38,39,'RRAAAA','XXLAAA','HHHHxx' -1185,8058,1,1,5,5,85,185,1185,1185,1185,170,171,'PTAAAA','YXLAAA','OOOOxx' -8776,8059,0,0,6,16,76,776,776,3776,8776,152,153,'OZAAAA','ZXLAAA','VVVVxx' -684,8060,0,0,4,4,84,684,684,684,684,168,169,'IAAAAA','AYLAAA','AAAAxx' -2343,8061,1,3,3,3,43,343,343,2343,2343,86,87,'DMAAAA','BYLAAA','HHHHxx' -4470,8062,0,2,0,10,70,470,470,4470,4470,140,141,'YPAAAA','CYLAAA','OOOOxx' -5116,8063,0,0,6,16,16,116,1116,116,5116,32,33,'UOAAAA','DYLAAA','VVVVxx' -1746,8064,0,2,6,6,46,746,1746,1746,1746,92,93,'EPAAAA','EYLAAA','AAAAxx' -3216,8065,0,0,6,16,16,216,1216,3216,3216,32,33,'STAAAA','FYLAAA','HHHHxx' -4594,8066,0,2,4,14,94,594,594,4594,4594,188,189,'SUAAAA','GYLAAA','OOOOxx' -3013,8067,1,1,3,13,13,13,1013,3013,3013,26,27,'XLAAAA','HYLAAA','VVVVxx' -2307,8068,1,3,7,7,7,307,307,2307,2307,14,15,'TKAAAA','IYLAAA','AAAAxx' -7663,8069,1,3,3,3,63,663,1663,2663,7663,126,127,'TIAAAA','JYLAAA','HHHHxx' -8504,8070,0,0,4,4,4,504,504,3504,8504,8,9,'CPAAAA','KYLAAA','OOOOxx' -3683,8071,1,3,3,3,83,683,1683,3683,3683,166,167,'RLAAAA','LYLAAA','VVVVxx' -144,8072,0,0,4,4,44,144,144,144,144,88,89,'OFAAAA','MYLAAA','AAAAxx' -203,8073,1,3,3,3,3,203,203,203,203,6,7,'VHAAAA','NYLAAA','HHHHxx' -5255,8074,1,3,5,15,55,255,1255,255,5255,110,111,'DUAAAA','OYLAAA','OOOOxx' -4150,8075,0,2,0,10,50,150,150,4150,4150,100,101,'QDAAAA','PYLAAA','VVVVxx' -5701,8076,1,1,1,1,1,701,1701,701,5701,2,3,'HLAAAA','QYLAAA','AAAAxx' -7400,8077,0,0,0,0,0,400,1400,2400,7400,0,1,'QYAAAA','RYLAAA','HHHHxx' -8203,8078,1,3,3,3,3,203,203,3203,8203,6,7,'NDAAAA','SYLAAA','OOOOxx' -637,8079,1,1,7,17,37,637,637,637,637,74,75,'NYAAAA','TYLAAA','VVVVxx' -2898,8080,0,2,8,18,98,898,898,2898,2898,196,197,'MHAAAA','UYLAAA','AAAAxx' -1110,8081,0,2,0,10,10,110,1110,1110,1110,20,21,'SQAAAA','VYLAAA','HHHHxx' -6255,8082,1,3,5,15,55,255,255,1255,6255,110,111,'PGAAAA','WYLAAA','OOOOxx' -1071,8083,1,3,1,11,71,71,1071,1071,1071,142,143,'FPAAAA','XYLAAA','VVVVxx' -541,8084,1,1,1,1,41,541,541,541,541,82,83,'VUAAAA','YYLAAA','AAAAxx' -8077,8085,1,1,7,17,77,77,77,3077,8077,154,155,'RYAAAA','ZYLAAA','HHHHxx' -6809,8086,1,1,9,9,9,809,809,1809,6809,18,19,'XBAAAA','AZLAAA','OOOOxx' -4749,8087,1,1,9,9,49,749,749,4749,4749,98,99,'RAAAAA','BZLAAA','VVVVxx' -2886,8088,0,2,6,6,86,886,886,2886,2886,172,173,'AHAAAA','CZLAAA','AAAAxx' -5510,8089,0,2,0,10,10,510,1510,510,5510,20,21,'YDAAAA','DZLAAA','HHHHxx' -713,8090,1,1,3,13,13,713,713,713,713,26,27,'LBAAAA','EZLAAA','OOOOxx' -8388,8091,0,0,8,8,88,388,388,3388,8388,176,177,'QKAAAA','FZLAAA','VVVVxx' -9524,8092,0,0,4,4,24,524,1524,4524,9524,48,49,'ICAAAA','GZLAAA','AAAAxx' -9949,8093,1,1,9,9,49,949,1949,4949,9949,98,99,'RSAAAA','HZLAAA','HHHHxx' -885,8094,1,1,5,5,85,885,885,885,885,170,171,'BIAAAA','IZLAAA','OOOOxx' -8699,8095,1,3,9,19,99,699,699,3699,8699,198,199,'PWAAAA','JZLAAA','VVVVxx' -2232,8096,0,0,2,12,32,232,232,2232,2232,64,65,'WHAAAA','KZLAAA','AAAAxx' -5142,8097,0,2,2,2,42,142,1142,142,5142,84,85,'UPAAAA','LZLAAA','HHHHxx' -8891,8098,1,3,1,11,91,891,891,3891,8891,182,183,'ZDAAAA','MZLAAA','OOOOxx' -1881,8099,1,1,1,1,81,881,1881,1881,1881,162,163,'JUAAAA','NZLAAA','VVVVxx' -3751,8100,1,3,1,11,51,751,1751,3751,3751,102,103,'HOAAAA','OZLAAA','AAAAxx' -1896,8101,0,0,6,16,96,896,1896,1896,1896,192,193,'YUAAAA','PZLAAA','HHHHxx' -8258,8102,0,2,8,18,58,258,258,3258,8258,116,117,'QFAAAA','QZLAAA','OOOOxx' -3820,8103,0,0,0,0,20,820,1820,3820,3820,40,41,'YQAAAA','RZLAAA','VVVVxx' -6617,8104,1,1,7,17,17,617,617,1617,6617,34,35,'NUAAAA','SZLAAA','AAAAxx' -5100,8105,0,0,0,0,0,100,1100,100,5100,0,1,'EOAAAA','TZLAAA','HHHHxx' -4277,8106,1,1,7,17,77,277,277,4277,4277,154,155,'NIAAAA','UZLAAA','OOOOxx' -2498,8107,0,2,8,18,98,498,498,2498,2498,196,197,'CSAAAA','VZLAAA','VVVVxx' -4343,8108,1,3,3,3,43,343,343,4343,4343,86,87,'BLAAAA','WZLAAA','AAAAxx' -8319,8109,1,3,9,19,19,319,319,3319,8319,38,39,'ZHAAAA','XZLAAA','HHHHxx' -4803,8110,1,3,3,3,3,803,803,4803,4803,6,7,'TCAAAA','YZLAAA','OOOOxx' -3100,8111,0,0,0,0,0,100,1100,3100,3100,0,1,'GPAAAA','ZZLAAA','VVVVxx' -428,8112,0,0,8,8,28,428,428,428,428,56,57,'MQAAAA','AAMAAA','AAAAxx' -2811,8113,1,3,1,11,11,811,811,2811,2811,22,23,'DEAAAA','BAMAAA','HHHHxx' -2989,8114,1,1,9,9,89,989,989,2989,2989,178,179,'ZKAAAA','CAMAAA','OOOOxx' -1100,8115,0,0,0,0,0,100,1100,1100,1100,0,1,'IQAAAA','DAMAAA','VVVVxx' -6586,8116,0,2,6,6,86,586,586,1586,6586,172,173,'ITAAAA','EAMAAA','AAAAxx' -3124,8117,0,0,4,4,24,124,1124,3124,3124,48,49,'EQAAAA','FAMAAA','HHHHxx' -1635,8118,1,3,5,15,35,635,1635,1635,1635,70,71,'XKAAAA','GAMAAA','OOOOxx' -3888,8119,0,0,8,8,88,888,1888,3888,3888,176,177,'OTAAAA','HAMAAA','VVVVxx' -8369,8120,1,1,9,9,69,369,369,3369,8369,138,139,'XJAAAA','IAMAAA','AAAAxx' -3148,8121,0,0,8,8,48,148,1148,3148,3148,96,97,'CRAAAA','JAMAAA','HHHHxx' -2842,8122,0,2,2,2,42,842,842,2842,2842,84,85,'IFAAAA','KAMAAA','OOOOxx' -4965,8123,1,1,5,5,65,965,965,4965,4965,130,131,'ZIAAAA','LAMAAA','VVVVxx' -3742,8124,0,2,2,2,42,742,1742,3742,3742,84,85,'YNAAAA','MAMAAA','AAAAxx' -5196,8125,0,0,6,16,96,196,1196,196,5196,192,193,'WRAAAA','NAMAAA','HHHHxx' -9105,8126,1,1,5,5,5,105,1105,4105,9105,10,11,'FMAAAA','OAMAAA','OOOOxx' -6806,8127,0,2,6,6,6,806,806,1806,6806,12,13,'UBAAAA','PAMAAA','VVVVxx' -5849,8128,1,1,9,9,49,849,1849,849,5849,98,99,'ZQAAAA','QAMAAA','AAAAxx' -6504,8129,0,0,4,4,4,504,504,1504,6504,8,9,'EQAAAA','RAMAAA','HHHHxx' -9841,8130,1,1,1,1,41,841,1841,4841,9841,82,83,'NOAAAA','SAMAAA','OOOOxx' -457,8131,1,1,7,17,57,457,457,457,457,114,115,'PRAAAA','TAMAAA','VVVVxx' -8856,8132,0,0,6,16,56,856,856,3856,8856,112,113,'QCAAAA','UAMAAA','AAAAxx' -8043,8133,1,3,3,3,43,43,43,3043,8043,86,87,'JXAAAA','VAMAAA','HHHHxx' -5933,8134,1,1,3,13,33,933,1933,933,5933,66,67,'FUAAAA','WAMAAA','OOOOxx' -5725,8135,1,1,5,5,25,725,1725,725,5725,50,51,'FMAAAA','XAMAAA','VVVVxx' -8607,8136,1,3,7,7,7,607,607,3607,8607,14,15,'BTAAAA','YAMAAA','AAAAxx' -9280,8137,0,0,0,0,80,280,1280,4280,9280,160,161,'YSAAAA','ZAMAAA','HHHHxx' -6017,8138,1,1,7,17,17,17,17,1017,6017,34,35,'LXAAAA','ABMAAA','OOOOxx' -4946,8139,0,2,6,6,46,946,946,4946,4946,92,93,'GIAAAA','BBMAAA','VVVVxx' -7373,8140,1,1,3,13,73,373,1373,2373,7373,146,147,'PXAAAA','CBMAAA','AAAAxx' -8096,8141,0,0,6,16,96,96,96,3096,8096,192,193,'KZAAAA','DBMAAA','HHHHxx' -3178,8142,0,2,8,18,78,178,1178,3178,3178,156,157,'GSAAAA','EBMAAA','OOOOxx' -1849,8143,1,1,9,9,49,849,1849,1849,1849,98,99,'DTAAAA','FBMAAA','VVVVxx' -8813,8144,1,1,3,13,13,813,813,3813,8813,26,27,'ZAAAAA','GBMAAA','AAAAxx' -460,8145,0,0,0,0,60,460,460,460,460,120,121,'SRAAAA','HBMAAA','HHHHxx' -7756,8146,0,0,6,16,56,756,1756,2756,7756,112,113,'IMAAAA','IBMAAA','OOOOxx' -4425,8147,1,1,5,5,25,425,425,4425,4425,50,51,'FOAAAA','JBMAAA','VVVVxx' -1602,8148,0,2,2,2,2,602,1602,1602,1602,4,5,'QJAAAA','KBMAAA','AAAAxx' -5981,8149,1,1,1,1,81,981,1981,981,5981,162,163,'BWAAAA','LBMAAA','HHHHxx' -8139,8150,1,3,9,19,39,139,139,3139,8139,78,79,'BBAAAA','MBMAAA','OOOOxx' -754,8151,0,2,4,14,54,754,754,754,754,108,109,'ADAAAA','NBMAAA','VVVVxx' -26,8152,0,2,6,6,26,26,26,26,26,52,53,'ABAAAA','OBMAAA','AAAAxx' -106,8153,0,2,6,6,6,106,106,106,106,12,13,'CEAAAA','PBMAAA','HHHHxx' -7465,8154,1,1,5,5,65,465,1465,2465,7465,130,131,'DBAAAA','QBMAAA','OOOOxx' -1048,8155,0,0,8,8,48,48,1048,1048,1048,96,97,'IOAAAA','RBMAAA','VVVVxx' -2303,8156,1,3,3,3,3,303,303,2303,2303,6,7,'PKAAAA','SBMAAA','AAAAxx' -5794,8157,0,2,4,14,94,794,1794,794,5794,188,189,'WOAAAA','TBMAAA','HHHHxx' -3321,8158,1,1,1,1,21,321,1321,3321,3321,42,43,'TXAAAA','UBMAAA','OOOOxx' -6122,8159,0,2,2,2,22,122,122,1122,6122,44,45,'MBAAAA','VBMAAA','VVVVxx' -6474,8160,0,2,4,14,74,474,474,1474,6474,148,149,'APAAAA','WBMAAA','AAAAxx' -827,8161,1,3,7,7,27,827,827,827,827,54,55,'VFAAAA','XBMAAA','HHHHxx' -6616,8162,0,0,6,16,16,616,616,1616,6616,32,33,'MUAAAA','YBMAAA','OOOOxx' -2131,8163,1,3,1,11,31,131,131,2131,2131,62,63,'ZDAAAA','ZBMAAA','VVVVxx' -5483,8164,1,3,3,3,83,483,1483,483,5483,166,167,'XCAAAA','ACMAAA','AAAAxx' -606,8165,0,2,6,6,6,606,606,606,606,12,13,'IXAAAA','BCMAAA','HHHHxx' -922,8166,0,2,2,2,22,922,922,922,922,44,45,'MJAAAA','CCMAAA','OOOOxx' -8475,8167,1,3,5,15,75,475,475,3475,8475,150,151,'ZNAAAA','DCMAAA','VVVVxx' -7645,8168,1,1,5,5,45,645,1645,2645,7645,90,91,'BIAAAA','ECMAAA','AAAAxx' -5097,8169,1,1,7,17,97,97,1097,97,5097,194,195,'BOAAAA','FCMAAA','HHHHxx' -5377,8170,1,1,7,17,77,377,1377,377,5377,154,155,'VYAAAA','GCMAAA','OOOOxx' -6116,8171,0,0,6,16,16,116,116,1116,6116,32,33,'GBAAAA','HCMAAA','VVVVxx' -8674,8172,0,2,4,14,74,674,674,3674,8674,148,149,'QVAAAA','ICMAAA','AAAAxx' -8063,8173,1,3,3,3,63,63,63,3063,8063,126,127,'DYAAAA','JCMAAA','HHHHxx' -5271,8174,1,3,1,11,71,271,1271,271,5271,142,143,'TUAAAA','KCMAAA','OOOOxx' -1619,8175,1,3,9,19,19,619,1619,1619,1619,38,39,'HKAAAA','LCMAAA','VVVVxx' -6419,8176,1,3,9,19,19,419,419,1419,6419,38,39,'XMAAAA','MCMAAA','AAAAxx' -7651,8177,1,3,1,11,51,651,1651,2651,7651,102,103,'HIAAAA','NCMAAA','HHHHxx' -2897,8178,1,1,7,17,97,897,897,2897,2897,194,195,'LHAAAA','OCMAAA','OOOOxx' -8148,8179,0,0,8,8,48,148,148,3148,8148,96,97,'KBAAAA','PCMAAA','VVVVxx' -7461,8180,1,1,1,1,61,461,1461,2461,7461,122,123,'ZAAAAA','QCMAAA','AAAAxx' -9186,8181,0,2,6,6,86,186,1186,4186,9186,172,173,'IPAAAA','RCMAAA','HHHHxx' -7127,8182,1,3,7,7,27,127,1127,2127,7127,54,55,'DOAAAA','SCMAAA','OOOOxx' -8233,8183,1,1,3,13,33,233,233,3233,8233,66,67,'REAAAA','TCMAAA','VVVVxx' -9651,8184,1,3,1,11,51,651,1651,4651,9651,102,103,'FHAAAA','UCMAAA','AAAAxx' -6746,8185,0,2,6,6,46,746,746,1746,6746,92,93,'MZAAAA','VCMAAA','HHHHxx' -7835,8186,1,3,5,15,35,835,1835,2835,7835,70,71,'JPAAAA','WCMAAA','OOOOxx' -8815,8187,1,3,5,15,15,815,815,3815,8815,30,31,'BBAAAA','XCMAAA','VVVVxx' -6398,8188,0,2,8,18,98,398,398,1398,6398,196,197,'CMAAAA','YCMAAA','AAAAxx' -5344,8189,0,0,4,4,44,344,1344,344,5344,88,89,'OXAAAA','ZCMAAA','HHHHxx' -8209,8190,1,1,9,9,9,209,209,3209,8209,18,19,'TDAAAA','ADMAAA','OOOOxx' -8444,8191,0,0,4,4,44,444,444,3444,8444,88,89,'UMAAAA','BDMAAA','VVVVxx' -5669,8192,1,1,9,9,69,669,1669,669,5669,138,139,'BKAAAA','CDMAAA','AAAAxx' -2455,8193,1,3,5,15,55,455,455,2455,2455,110,111,'LQAAAA','DDMAAA','HHHHxx' -6767,8194,1,3,7,7,67,767,767,1767,6767,134,135,'HAAAAA','EDMAAA','OOOOxx' -135,8195,1,3,5,15,35,135,135,135,135,70,71,'FFAAAA','FDMAAA','VVVVxx' -3503,8196,1,3,3,3,3,503,1503,3503,3503,6,7,'TEAAAA','GDMAAA','AAAAxx' -6102,8197,0,2,2,2,2,102,102,1102,6102,4,5,'SAAAAA','HDMAAA','HHHHxx' -7136,8198,0,0,6,16,36,136,1136,2136,7136,72,73,'MOAAAA','IDMAAA','OOOOxx' -4933,8199,1,1,3,13,33,933,933,4933,4933,66,67,'THAAAA','JDMAAA','VVVVxx' -8804,8200,0,0,4,4,4,804,804,3804,8804,8,9,'QAAAAA','KDMAAA','AAAAxx' -3760,8201,0,0,0,0,60,760,1760,3760,3760,120,121,'QOAAAA','LDMAAA','HHHHxx' -8603,8202,1,3,3,3,3,603,603,3603,8603,6,7,'XSAAAA','MDMAAA','OOOOxx' -7411,8203,1,3,1,11,11,411,1411,2411,7411,22,23,'BZAAAA','NDMAAA','VVVVxx' -834,8204,0,2,4,14,34,834,834,834,834,68,69,'CGAAAA','ODMAAA','AAAAxx' -7385,8205,1,1,5,5,85,385,1385,2385,7385,170,171,'BYAAAA','PDMAAA','HHHHxx' -3696,8206,0,0,6,16,96,696,1696,3696,3696,192,193,'EMAAAA','QDMAAA','OOOOxx' -8720,8207,0,0,0,0,20,720,720,3720,8720,40,41,'KXAAAA','RDMAAA','VVVVxx' -4539,8208,1,3,9,19,39,539,539,4539,4539,78,79,'PSAAAA','SDMAAA','AAAAxx' -9837,8209,1,1,7,17,37,837,1837,4837,9837,74,75,'JOAAAA','TDMAAA','HHHHxx' -8595,8210,1,3,5,15,95,595,595,3595,8595,190,191,'PSAAAA','UDMAAA','OOOOxx' -3673,8211,1,1,3,13,73,673,1673,3673,3673,146,147,'HLAAAA','VDMAAA','VVVVxx' -475,8212,1,3,5,15,75,475,475,475,475,150,151,'HSAAAA','WDMAAA','AAAAxx' -2256,8213,0,0,6,16,56,256,256,2256,2256,112,113,'UIAAAA','XDMAAA','HHHHxx' -6349,8214,1,1,9,9,49,349,349,1349,6349,98,99,'FKAAAA','YDMAAA','OOOOxx' -9968,8215,0,0,8,8,68,968,1968,4968,9968,136,137,'KTAAAA','ZDMAAA','VVVVxx' -7261,8216,1,1,1,1,61,261,1261,2261,7261,122,123,'HTAAAA','AEMAAA','AAAAxx' -5799,8217,1,3,9,19,99,799,1799,799,5799,198,199,'BPAAAA','BEMAAA','HHHHxx' -8159,8218,1,3,9,19,59,159,159,3159,8159,118,119,'VBAAAA','CEMAAA','OOOOxx' -92,8219,0,0,2,12,92,92,92,92,92,184,185,'ODAAAA','DEMAAA','VVVVxx' -5927,8220,1,3,7,7,27,927,1927,927,5927,54,55,'ZTAAAA','EEMAAA','AAAAxx' -7925,8221,1,1,5,5,25,925,1925,2925,7925,50,51,'VSAAAA','FEMAAA','HHHHxx' -5836,8222,0,0,6,16,36,836,1836,836,5836,72,73,'MQAAAA','GEMAAA','OOOOxx' -7935,8223,1,3,5,15,35,935,1935,2935,7935,70,71,'FTAAAA','HEMAAA','VVVVxx' -5505,8224,1,1,5,5,5,505,1505,505,5505,10,11,'TDAAAA','IEMAAA','AAAAxx' -5882,8225,0,2,2,2,82,882,1882,882,5882,164,165,'GSAAAA','JEMAAA','HHHHxx' -4411,8226,1,3,1,11,11,411,411,4411,4411,22,23,'RNAAAA','KEMAAA','OOOOxx' -64,8227,0,0,4,4,64,64,64,64,64,128,129,'MCAAAA','LEMAAA','VVVVxx' -2851,8228,1,3,1,11,51,851,851,2851,2851,102,103,'RFAAAA','MEMAAA','AAAAxx' -1665,8229,1,1,5,5,65,665,1665,1665,1665,130,131,'BMAAAA','NEMAAA','HHHHxx' -2895,8230,1,3,5,15,95,895,895,2895,2895,190,191,'JHAAAA','OEMAAA','OOOOxx' -2210,8231,0,2,0,10,10,210,210,2210,2210,20,21,'AHAAAA','PEMAAA','VVVVxx' -9873,8232,1,1,3,13,73,873,1873,4873,9873,146,147,'TPAAAA','QEMAAA','AAAAxx' -5402,8233,0,2,2,2,2,402,1402,402,5402,4,5,'UZAAAA','REMAAA','HHHHxx' -285,8234,1,1,5,5,85,285,285,285,285,170,171,'ZKAAAA','SEMAAA','OOOOxx' -8545,8235,1,1,5,5,45,545,545,3545,8545,90,91,'RQAAAA','TEMAAA','VVVVxx' -5328,8236,0,0,8,8,28,328,1328,328,5328,56,57,'YWAAAA','UEMAAA','AAAAxx' -733,8237,1,1,3,13,33,733,733,733,733,66,67,'FCAAAA','VEMAAA','HHHHxx' -7726,8238,0,2,6,6,26,726,1726,2726,7726,52,53,'ELAAAA','WEMAAA','OOOOxx' -5418,8239,0,2,8,18,18,418,1418,418,5418,36,37,'KAAAAA','XEMAAA','VVVVxx' -7761,8240,1,1,1,1,61,761,1761,2761,7761,122,123,'NMAAAA','YEMAAA','AAAAxx' -9263,8241,1,3,3,3,63,263,1263,4263,9263,126,127,'HSAAAA','ZEMAAA','HHHHxx' -5579,8242,1,3,9,19,79,579,1579,579,5579,158,159,'PGAAAA','AFMAAA','OOOOxx' -5434,8243,0,2,4,14,34,434,1434,434,5434,68,69,'ABAAAA','BFMAAA','VVVVxx' -5230,8244,0,2,0,10,30,230,1230,230,5230,60,61,'ETAAAA','CFMAAA','AAAAxx' -9981,8245,1,1,1,1,81,981,1981,4981,9981,162,163,'XTAAAA','DFMAAA','HHHHxx' -5830,8246,0,2,0,10,30,830,1830,830,5830,60,61,'GQAAAA','EFMAAA','OOOOxx' -128,8247,0,0,8,8,28,128,128,128,128,56,57,'YEAAAA','FFMAAA','VVVVxx' -2734,8248,0,2,4,14,34,734,734,2734,2734,68,69,'EBAAAA','GFMAAA','AAAAxx' -4537,8249,1,1,7,17,37,537,537,4537,4537,74,75,'NSAAAA','HFMAAA','HHHHxx' -3899,8250,1,3,9,19,99,899,1899,3899,3899,198,199,'ZTAAAA','IFMAAA','OOOOxx' -1000,8251,0,0,0,0,0,0,1000,1000,1000,0,1,'MMAAAA','JFMAAA','VVVVxx' -9896,8252,0,0,6,16,96,896,1896,4896,9896,192,193,'QQAAAA','KFMAAA','AAAAxx' -3640,8253,0,0,0,0,40,640,1640,3640,3640,80,81,'AKAAAA','LFMAAA','HHHHxx' -2568,8254,0,0,8,8,68,568,568,2568,2568,136,137,'UUAAAA','MFMAAA','OOOOxx' -2026,8255,0,2,6,6,26,26,26,2026,2026,52,53,'YZAAAA','NFMAAA','VVVVxx' -3955,8256,1,3,5,15,55,955,1955,3955,3955,110,111,'DWAAAA','OFMAAA','AAAAxx' -7152,8257,0,0,2,12,52,152,1152,2152,7152,104,105,'CPAAAA','PFMAAA','HHHHxx' -2402,8258,0,2,2,2,2,402,402,2402,2402,4,5,'KOAAAA','QFMAAA','OOOOxx' -9522,8259,0,2,2,2,22,522,1522,4522,9522,44,45,'GCAAAA','RFMAAA','VVVVxx' -4011,8260,1,3,1,11,11,11,11,4011,4011,22,23,'HYAAAA','SFMAAA','AAAAxx' -3297,8261,1,1,7,17,97,297,1297,3297,3297,194,195,'VWAAAA','TFMAAA','HHHHxx' -4915,8262,1,3,5,15,15,915,915,4915,4915,30,31,'BHAAAA','UFMAAA','OOOOxx' -5397,8263,1,1,7,17,97,397,1397,397,5397,194,195,'PZAAAA','VFMAAA','VVVVxx' -5454,8264,0,2,4,14,54,454,1454,454,5454,108,109,'UBAAAA','WFMAAA','AAAAxx' -4568,8265,0,0,8,8,68,568,568,4568,4568,136,137,'STAAAA','XFMAAA','HHHHxx' -5875,8266,1,3,5,15,75,875,1875,875,5875,150,151,'ZRAAAA','YFMAAA','OOOOxx' -3642,8267,0,2,2,2,42,642,1642,3642,3642,84,85,'CKAAAA','ZFMAAA','VVVVxx' -8506,8268,0,2,6,6,6,506,506,3506,8506,12,13,'EPAAAA','AGMAAA','AAAAxx' -9621,8269,1,1,1,1,21,621,1621,4621,9621,42,43,'BGAAAA','BGMAAA','HHHHxx' -7739,8270,1,3,9,19,39,739,1739,2739,7739,78,79,'RLAAAA','CGMAAA','OOOOxx' -3987,8271,1,3,7,7,87,987,1987,3987,3987,174,175,'JXAAAA','DGMAAA','VVVVxx' -2090,8272,0,2,0,10,90,90,90,2090,2090,180,181,'KCAAAA','EGMAAA','AAAAxx' -3838,8273,0,2,8,18,38,838,1838,3838,3838,76,77,'QRAAAA','FGMAAA','HHHHxx' -17,8274,1,1,7,17,17,17,17,17,17,34,35,'RAAAAA','GGMAAA','OOOOxx' -3406,8275,0,2,6,6,6,406,1406,3406,3406,12,13,'ABAAAA','HGMAAA','VVVVxx' -8312,8276,0,0,2,12,12,312,312,3312,8312,24,25,'SHAAAA','IGMAAA','AAAAxx' -4034,8277,0,2,4,14,34,34,34,4034,4034,68,69,'EZAAAA','JGMAAA','HHHHxx' -1535,8278,1,3,5,15,35,535,1535,1535,1535,70,71,'BHAAAA','KGMAAA','OOOOxx' -7198,8279,0,2,8,18,98,198,1198,2198,7198,196,197,'WQAAAA','LGMAAA','VVVVxx' -8885,8280,1,1,5,5,85,885,885,3885,8885,170,171,'TDAAAA','MGMAAA','AAAAxx' -4081,8281,1,1,1,1,81,81,81,4081,4081,162,163,'ZAAAAA','NGMAAA','HHHHxx' -980,8282,0,0,0,0,80,980,980,980,980,160,161,'SLAAAA','OGMAAA','OOOOxx' -551,8283,1,3,1,11,51,551,551,551,551,102,103,'FVAAAA','PGMAAA','VVVVxx' -7746,8284,0,2,6,6,46,746,1746,2746,7746,92,93,'YLAAAA','QGMAAA','AAAAxx' -4756,8285,0,0,6,16,56,756,756,4756,4756,112,113,'YAAAAA','RGMAAA','HHHHxx' -3655,8286,1,3,5,15,55,655,1655,3655,3655,110,111,'PKAAAA','SGMAAA','OOOOxx' -7075,8287,1,3,5,15,75,75,1075,2075,7075,150,151,'DMAAAA','TGMAAA','VVVVxx' -3950,8288,0,2,0,10,50,950,1950,3950,3950,100,101,'YVAAAA','UGMAAA','AAAAxx' -2314,8289,0,2,4,14,14,314,314,2314,2314,28,29,'ALAAAA','VGMAAA','HHHHxx' -8432,8290,0,0,2,12,32,432,432,3432,8432,64,65,'IMAAAA','WGMAAA','OOOOxx' -62,8291,0,2,2,2,62,62,62,62,62,124,125,'KCAAAA','XGMAAA','VVVVxx' -6920,8292,0,0,0,0,20,920,920,1920,6920,40,41,'EGAAAA','YGMAAA','AAAAxx' -4077,8293,1,1,7,17,77,77,77,4077,4077,154,155,'VAAAAA','ZGMAAA','HHHHxx' -9118,8294,0,2,8,18,18,118,1118,4118,9118,36,37,'SMAAAA','AHMAAA','OOOOxx' -5375,8295,1,3,5,15,75,375,1375,375,5375,150,151,'TYAAAA','BHMAAA','VVVVxx' -178,8296,0,2,8,18,78,178,178,178,178,156,157,'WGAAAA','CHMAAA','AAAAxx' -1079,8297,1,3,9,19,79,79,1079,1079,1079,158,159,'NPAAAA','DHMAAA','HHHHxx' -4279,8298,1,3,9,19,79,279,279,4279,4279,158,159,'PIAAAA','EHMAAA','OOOOxx' -8436,8299,0,0,6,16,36,436,436,3436,8436,72,73,'MMAAAA','FHMAAA','VVVVxx' -1931,8300,1,3,1,11,31,931,1931,1931,1931,62,63,'HWAAAA','GHMAAA','AAAAxx' -2096,8301,0,0,6,16,96,96,96,2096,2096,192,193,'QCAAAA','HHMAAA','HHHHxx' -1638,8302,0,2,8,18,38,638,1638,1638,1638,76,77,'ALAAAA','IHMAAA','OOOOxx' -2788,8303,0,0,8,8,88,788,788,2788,2788,176,177,'GDAAAA','JHMAAA','VVVVxx' -4751,8304,1,3,1,11,51,751,751,4751,4751,102,103,'TAAAAA','KHMAAA','AAAAxx' -8824,8305,0,0,4,4,24,824,824,3824,8824,48,49,'KBAAAA','LHMAAA','HHHHxx' -3098,8306,0,2,8,18,98,98,1098,3098,3098,196,197,'EPAAAA','MHMAAA','OOOOxx' -4497,8307,1,1,7,17,97,497,497,4497,4497,194,195,'ZQAAAA','NHMAAA','VVVVxx' -5223,8308,1,3,3,3,23,223,1223,223,5223,46,47,'XSAAAA','OHMAAA','AAAAxx' -9212,8309,0,0,2,12,12,212,1212,4212,9212,24,25,'IQAAAA','PHMAAA','HHHHxx' -4265,8310,1,1,5,5,65,265,265,4265,4265,130,131,'BIAAAA','QHMAAA','OOOOxx' -6898,8311,0,2,8,18,98,898,898,1898,6898,196,197,'IFAAAA','RHMAAA','VVVVxx' -8808,8312,0,0,8,8,8,808,808,3808,8808,16,17,'UAAAAA','SHMAAA','AAAAxx' -5629,8313,1,1,9,9,29,629,1629,629,5629,58,59,'NIAAAA','THMAAA','HHHHxx' -3779,8314,1,3,9,19,79,779,1779,3779,3779,158,159,'JPAAAA','UHMAAA','OOOOxx' -4972,8315,0,0,2,12,72,972,972,4972,4972,144,145,'GJAAAA','VHMAAA','VVVVxx' -4511,8316,1,3,1,11,11,511,511,4511,4511,22,23,'NRAAAA','WHMAAA','AAAAxx' -6761,8317,1,1,1,1,61,761,761,1761,6761,122,123,'BAAAAA','XHMAAA','HHHHxx' -2335,8318,1,3,5,15,35,335,335,2335,2335,70,71,'VLAAAA','YHMAAA','OOOOxx' -732,8319,0,0,2,12,32,732,732,732,732,64,65,'ECAAAA','ZHMAAA','VVVVxx' -4757,8320,1,1,7,17,57,757,757,4757,4757,114,115,'ZAAAAA','AIMAAA','AAAAxx' -6624,8321,0,0,4,4,24,624,624,1624,6624,48,49,'UUAAAA','BIMAAA','HHHHxx' -5869,8322,1,1,9,9,69,869,1869,869,5869,138,139,'TRAAAA','CIMAAA','OOOOxx' -5842,8323,0,2,2,2,42,842,1842,842,5842,84,85,'SQAAAA','DIMAAA','VVVVxx' -5735,8324,1,3,5,15,35,735,1735,735,5735,70,71,'PMAAAA','EIMAAA','AAAAxx' -8276,8325,0,0,6,16,76,276,276,3276,8276,152,153,'IGAAAA','FIMAAA','HHHHxx' -7227,8326,1,3,7,7,27,227,1227,2227,7227,54,55,'ZRAAAA','GIMAAA','OOOOxx' -4923,8327,1,3,3,3,23,923,923,4923,4923,46,47,'JHAAAA','HIMAAA','VVVVxx' -9135,8328,1,3,5,15,35,135,1135,4135,9135,70,71,'JNAAAA','IIMAAA','AAAAxx' -5813,8329,1,1,3,13,13,813,1813,813,5813,26,27,'PPAAAA','JIMAAA','HHHHxx' -9697,8330,1,1,7,17,97,697,1697,4697,9697,194,195,'ZIAAAA','KIMAAA','OOOOxx' -3222,8331,0,2,2,2,22,222,1222,3222,3222,44,45,'YTAAAA','LIMAAA','VVVVxx' -2394,8332,0,2,4,14,94,394,394,2394,2394,188,189,'COAAAA','MIMAAA','AAAAxx' -5784,8333,0,0,4,4,84,784,1784,784,5784,168,169,'MOAAAA','NIMAAA','HHHHxx' -3652,8334,0,0,2,12,52,652,1652,3652,3652,104,105,'MKAAAA','OIMAAA','OOOOxx' -8175,8335,1,3,5,15,75,175,175,3175,8175,150,151,'LCAAAA','PIMAAA','VVVVxx' -7568,8336,0,0,8,8,68,568,1568,2568,7568,136,137,'CFAAAA','QIMAAA','AAAAxx' -6645,8337,1,1,5,5,45,645,645,1645,6645,90,91,'PVAAAA','RIMAAA','HHHHxx' -8176,8338,0,0,6,16,76,176,176,3176,8176,152,153,'MCAAAA','SIMAAA','OOOOxx' -530,8339,0,2,0,10,30,530,530,530,530,60,61,'KUAAAA','TIMAAA','VVVVxx' -5439,8340,1,3,9,19,39,439,1439,439,5439,78,79,'FBAAAA','UIMAAA','AAAAxx' -61,8341,1,1,1,1,61,61,61,61,61,122,123,'JCAAAA','VIMAAA','HHHHxx' -3951,8342,1,3,1,11,51,951,1951,3951,3951,102,103,'ZVAAAA','WIMAAA','OOOOxx' -5283,8343,1,3,3,3,83,283,1283,283,5283,166,167,'FVAAAA','XIMAAA','VVVVxx' -7226,8344,0,2,6,6,26,226,1226,2226,7226,52,53,'YRAAAA','YIMAAA','AAAAxx' -1954,8345,0,2,4,14,54,954,1954,1954,1954,108,109,'EXAAAA','ZIMAAA','HHHHxx' -334,8346,0,2,4,14,34,334,334,334,334,68,69,'WMAAAA','AJMAAA','OOOOxx' -3921,8347,1,1,1,1,21,921,1921,3921,3921,42,43,'VUAAAA','BJMAAA','VVVVxx' -6276,8348,0,0,6,16,76,276,276,1276,6276,152,153,'KHAAAA','CJMAAA','AAAAxx' -3378,8349,0,2,8,18,78,378,1378,3378,3378,156,157,'YZAAAA','DJMAAA','HHHHxx' -5236,8350,0,0,6,16,36,236,1236,236,5236,72,73,'KTAAAA','EJMAAA','OOOOxx' -7781,8351,1,1,1,1,81,781,1781,2781,7781,162,163,'HNAAAA','FJMAAA','VVVVxx' -8601,8352,1,1,1,1,1,601,601,3601,8601,2,3,'VSAAAA','GJMAAA','AAAAxx' -1473,8353,1,1,3,13,73,473,1473,1473,1473,146,147,'REAAAA','HJMAAA','HHHHxx' -3246,8354,0,2,6,6,46,246,1246,3246,3246,92,93,'WUAAAA','IJMAAA','OOOOxx' -3601,8355,1,1,1,1,1,601,1601,3601,3601,2,3,'NIAAAA','JJMAAA','VVVVxx' -6861,8356,1,1,1,1,61,861,861,1861,6861,122,123,'XDAAAA','KJMAAA','AAAAxx' -9032,8357,0,0,2,12,32,32,1032,4032,9032,64,65,'KJAAAA','LJMAAA','HHHHxx' -216,8358,0,0,6,16,16,216,216,216,216,32,33,'IIAAAA','MJMAAA','OOOOxx' -3824,8359,0,0,4,4,24,824,1824,3824,3824,48,49,'CRAAAA','NJMAAA','VVVVxx' -8486,8360,0,2,6,6,86,486,486,3486,8486,172,173,'KOAAAA','OJMAAA','AAAAxx' -276,8361,0,0,6,16,76,276,276,276,276,152,153,'QKAAAA','PJMAAA','HHHHxx' -1838,8362,0,2,8,18,38,838,1838,1838,1838,76,77,'SSAAAA','QJMAAA','OOOOxx' -6175,8363,1,3,5,15,75,175,175,1175,6175,150,151,'NDAAAA','RJMAAA','VVVVxx' -3719,8364,1,3,9,19,19,719,1719,3719,3719,38,39,'BNAAAA','SJMAAA','AAAAxx' -6958,8365,0,2,8,18,58,958,958,1958,6958,116,117,'QHAAAA','TJMAAA','HHHHxx' -6822,8366,0,2,2,2,22,822,822,1822,6822,44,45,'KCAAAA','UJMAAA','OOOOxx' -3318,8367,0,2,8,18,18,318,1318,3318,3318,36,37,'QXAAAA','VJMAAA','VVVVxx' -7222,8368,0,2,2,2,22,222,1222,2222,7222,44,45,'URAAAA','WJMAAA','AAAAxx' -85,8369,1,1,5,5,85,85,85,85,85,170,171,'HDAAAA','XJMAAA','HHHHxx' -5158,8370,0,2,8,18,58,158,1158,158,5158,116,117,'KQAAAA','YJMAAA','OOOOxx' -6360,8371,0,0,0,0,60,360,360,1360,6360,120,121,'QKAAAA','ZJMAAA','VVVVxx' -2599,8372,1,3,9,19,99,599,599,2599,2599,198,199,'ZVAAAA','AKMAAA','AAAAxx' -4002,8373,0,2,2,2,2,2,2,4002,4002,4,5,'YXAAAA','BKMAAA','HHHHxx' -6597,8374,1,1,7,17,97,597,597,1597,6597,194,195,'TTAAAA','CKMAAA','OOOOxx' -5762,8375,0,2,2,2,62,762,1762,762,5762,124,125,'QNAAAA','DKMAAA','VVVVxx' -8383,8376,1,3,3,3,83,383,383,3383,8383,166,167,'LKAAAA','EKMAAA','AAAAxx' -4686,8377,0,2,6,6,86,686,686,4686,4686,172,173,'GYAAAA','FKMAAA','HHHHxx' -5972,8378,0,0,2,12,72,972,1972,972,5972,144,145,'SVAAAA','GKMAAA','OOOOxx' -1432,8379,0,0,2,12,32,432,1432,1432,1432,64,65,'CDAAAA','HKMAAA','VVVVxx' -1601,8380,1,1,1,1,1,601,1601,1601,1601,2,3,'PJAAAA','IKMAAA','AAAAxx' -3012,8381,0,0,2,12,12,12,1012,3012,3012,24,25,'WLAAAA','JKMAAA','HHHHxx' -9345,8382,1,1,5,5,45,345,1345,4345,9345,90,91,'LVAAAA','KKMAAA','OOOOxx' -8869,8383,1,1,9,9,69,869,869,3869,8869,138,139,'DDAAAA','LKMAAA','VVVVxx' -6612,8384,0,0,2,12,12,612,612,1612,6612,24,25,'IUAAAA','MKMAAA','AAAAxx' -262,8385,0,2,2,2,62,262,262,262,262,124,125,'CKAAAA','NKMAAA','HHHHxx' -300,8386,0,0,0,0,0,300,300,300,300,0,1,'OLAAAA','OKMAAA','OOOOxx' -3045,8387,1,1,5,5,45,45,1045,3045,3045,90,91,'DNAAAA','PKMAAA','VVVVxx' -7252,8388,0,0,2,12,52,252,1252,2252,7252,104,105,'YSAAAA','QKMAAA','AAAAxx' -9099,8389,1,3,9,19,99,99,1099,4099,9099,198,199,'ZLAAAA','RKMAAA','HHHHxx' -9006,8390,0,2,6,6,6,6,1006,4006,9006,12,13,'KIAAAA','SKMAAA','OOOOxx' -3078,8391,0,2,8,18,78,78,1078,3078,3078,156,157,'KOAAAA','TKMAAA','VVVVxx' -5159,8392,1,3,9,19,59,159,1159,159,5159,118,119,'LQAAAA','UKMAAA','AAAAxx' -9329,8393,1,1,9,9,29,329,1329,4329,9329,58,59,'VUAAAA','VKMAAA','HHHHxx' -1393,8394,1,1,3,13,93,393,1393,1393,1393,186,187,'PBAAAA','WKMAAA','OOOOxx' -5894,8395,0,2,4,14,94,894,1894,894,5894,188,189,'SSAAAA','XKMAAA','VVVVxx' -11,8396,1,3,1,11,11,11,11,11,11,22,23,'LAAAAA','YKMAAA','AAAAxx' -5606,8397,0,2,6,6,6,606,1606,606,5606,12,13,'QHAAAA','ZKMAAA','HHHHxx' -5541,8398,1,1,1,1,41,541,1541,541,5541,82,83,'DFAAAA','ALMAAA','OOOOxx' -2689,8399,1,1,9,9,89,689,689,2689,2689,178,179,'LZAAAA','BLMAAA','VVVVxx' -1023,8400,1,3,3,3,23,23,1023,1023,1023,46,47,'JNAAAA','CLMAAA','AAAAxx' -8134,8401,0,2,4,14,34,134,134,3134,8134,68,69,'WAAAAA','DLMAAA','HHHHxx' -5923,8402,1,3,3,3,23,923,1923,923,5923,46,47,'VTAAAA','ELMAAA','OOOOxx' -6056,8403,0,0,6,16,56,56,56,1056,6056,112,113,'YYAAAA','FLMAAA','VVVVxx' -653,8404,1,1,3,13,53,653,653,653,653,106,107,'DZAAAA','GLMAAA','AAAAxx' -367,8405,1,3,7,7,67,367,367,367,367,134,135,'DOAAAA','HLMAAA','HHHHxx' -1828,8406,0,0,8,8,28,828,1828,1828,1828,56,57,'ISAAAA','ILMAAA','OOOOxx' -6506,8407,0,2,6,6,6,506,506,1506,6506,12,13,'GQAAAA','JLMAAA','VVVVxx' -5772,8408,0,0,2,12,72,772,1772,772,5772,144,145,'AOAAAA','KLMAAA','AAAAxx' -8052,8409,0,0,2,12,52,52,52,3052,8052,104,105,'SXAAAA','LLMAAA','HHHHxx' -2633,8410,1,1,3,13,33,633,633,2633,2633,66,67,'HXAAAA','MLMAAA','OOOOxx' -4878,8411,0,2,8,18,78,878,878,4878,4878,156,157,'QFAAAA','NLMAAA','VVVVxx' -5621,8412,1,1,1,1,21,621,1621,621,5621,42,43,'FIAAAA','OLMAAA','AAAAxx' -41,8413,1,1,1,1,41,41,41,41,41,82,83,'PBAAAA','PLMAAA','HHHHxx' -4613,8414,1,1,3,13,13,613,613,4613,4613,26,27,'LVAAAA','QLMAAA','OOOOxx' -9389,8415,1,1,9,9,89,389,1389,4389,9389,178,179,'DXAAAA','RLMAAA','VVVVxx' -9414,8416,0,2,4,14,14,414,1414,4414,9414,28,29,'CYAAAA','SLMAAA','AAAAxx' -3583,8417,1,3,3,3,83,583,1583,3583,3583,166,167,'VHAAAA','TLMAAA','HHHHxx' -3454,8418,0,2,4,14,54,454,1454,3454,3454,108,109,'WCAAAA','ULMAAA','OOOOxx' -719,8419,1,3,9,19,19,719,719,719,719,38,39,'RBAAAA','VLMAAA','VVVVxx' -6188,8420,0,0,8,8,88,188,188,1188,6188,176,177,'AEAAAA','WLMAAA','AAAAxx' -2288,8421,0,0,8,8,88,288,288,2288,2288,176,177,'AKAAAA','XLMAAA','HHHHxx' -1287,8422,1,3,7,7,87,287,1287,1287,1287,174,175,'NXAAAA','YLMAAA','OOOOxx' -1397,8423,1,1,7,17,97,397,1397,1397,1397,194,195,'TBAAAA','ZLMAAA','VVVVxx' -7763,8424,1,3,3,3,63,763,1763,2763,7763,126,127,'PMAAAA','AMMAAA','AAAAxx' -5194,8425,0,2,4,14,94,194,1194,194,5194,188,189,'URAAAA','BMMAAA','HHHHxx' -3167,8426,1,3,7,7,67,167,1167,3167,3167,134,135,'VRAAAA','CMMAAA','OOOOxx' -9218,8427,0,2,8,18,18,218,1218,4218,9218,36,37,'OQAAAA','DMMAAA','VVVVxx' -2065,8428,1,1,5,5,65,65,65,2065,2065,130,131,'LBAAAA','EMMAAA','AAAAxx' -9669,8429,1,1,9,9,69,669,1669,4669,9669,138,139,'XHAAAA','FMMAAA','HHHHxx' -146,8430,0,2,6,6,46,146,146,146,146,92,93,'QFAAAA','GMMAAA','OOOOxx' -6141,8431,1,1,1,1,41,141,141,1141,6141,82,83,'FCAAAA','HMMAAA','VVVVxx' -2843,8432,1,3,3,3,43,843,843,2843,2843,86,87,'JFAAAA','IMMAAA','AAAAxx' -7934,8433,0,2,4,14,34,934,1934,2934,7934,68,69,'ETAAAA','JMMAAA','HHHHxx' -2536,8434,0,0,6,16,36,536,536,2536,2536,72,73,'OTAAAA','KMMAAA','OOOOxx' -7088,8435,0,0,8,8,88,88,1088,2088,7088,176,177,'QMAAAA','LMMAAA','VVVVxx' -2519,8436,1,3,9,19,19,519,519,2519,2519,38,39,'XSAAAA','MMMAAA','AAAAxx' -6650,8437,0,2,0,10,50,650,650,1650,6650,100,101,'UVAAAA','NMMAAA','HHHHxx' -3007,8438,1,3,7,7,7,7,1007,3007,3007,14,15,'RLAAAA','OMMAAA','OOOOxx' -4507,8439,1,3,7,7,7,507,507,4507,4507,14,15,'JRAAAA','PMMAAA','VVVVxx' -4892,8440,0,0,2,12,92,892,892,4892,4892,184,185,'EGAAAA','QMMAAA','AAAAxx' -7159,8441,1,3,9,19,59,159,1159,2159,7159,118,119,'JPAAAA','RMMAAA','HHHHxx' -3171,8442,1,3,1,11,71,171,1171,3171,3171,142,143,'ZRAAAA','SMMAAA','OOOOxx' -1080,8443,0,0,0,0,80,80,1080,1080,1080,160,161,'OPAAAA','TMMAAA','VVVVxx' -7248,8444,0,0,8,8,48,248,1248,2248,7248,96,97,'USAAAA','UMMAAA','AAAAxx' -7230,8445,0,2,0,10,30,230,1230,2230,7230,60,61,'CSAAAA','VMMAAA','HHHHxx' -3823,8446,1,3,3,3,23,823,1823,3823,3823,46,47,'BRAAAA','WMMAAA','OOOOxx' -5517,8447,1,1,7,17,17,517,1517,517,5517,34,35,'FEAAAA','XMMAAA','VVVVxx' -1482,8448,0,2,2,2,82,482,1482,1482,1482,164,165,'AFAAAA','YMMAAA','AAAAxx' -9953,8449,1,1,3,13,53,953,1953,4953,9953,106,107,'VSAAAA','ZMMAAA','HHHHxx' -2754,8450,0,2,4,14,54,754,754,2754,2754,108,109,'YBAAAA','ANMAAA','OOOOxx' -3875,8451,1,3,5,15,75,875,1875,3875,3875,150,151,'BTAAAA','BNMAAA','VVVVxx' -9800,8452,0,0,0,0,0,800,1800,4800,9800,0,1,'YMAAAA','CNMAAA','AAAAxx' -8819,8453,1,3,9,19,19,819,819,3819,8819,38,39,'FBAAAA','DNMAAA','HHHHxx' -8267,8454,1,3,7,7,67,267,267,3267,8267,134,135,'ZFAAAA','ENMAAA','OOOOxx' -520,8455,0,0,0,0,20,520,520,520,520,40,41,'AUAAAA','FNMAAA','VVVVxx' -5770,8456,0,2,0,10,70,770,1770,770,5770,140,141,'YNAAAA','GNMAAA','AAAAxx' -2114,8457,0,2,4,14,14,114,114,2114,2114,28,29,'IDAAAA','HNMAAA','HHHHxx' -5045,8458,1,1,5,5,45,45,1045,45,5045,90,91,'BMAAAA','INMAAA','OOOOxx' -1094,8459,0,2,4,14,94,94,1094,1094,1094,188,189,'CQAAAA','JNMAAA','VVVVxx' -8786,8460,0,2,6,6,86,786,786,3786,8786,172,173,'YZAAAA','KNMAAA','AAAAxx' -353,8461,1,1,3,13,53,353,353,353,353,106,107,'PNAAAA','LNMAAA','HHHHxx' -290,8462,0,2,0,10,90,290,290,290,290,180,181,'ELAAAA','MNMAAA','OOOOxx' -3376,8463,0,0,6,16,76,376,1376,3376,3376,152,153,'WZAAAA','NNMAAA','VVVVxx' -9305,8464,1,1,5,5,5,305,1305,4305,9305,10,11,'XTAAAA','ONMAAA','AAAAxx' -186,8465,0,2,6,6,86,186,186,186,186,172,173,'EHAAAA','PNMAAA','HHHHxx' -4817,8466,1,1,7,17,17,817,817,4817,4817,34,35,'HDAAAA','QNMAAA','OOOOxx' -4638,8467,0,2,8,18,38,638,638,4638,4638,76,77,'KWAAAA','RNMAAA','VVVVxx' -3558,8468,0,2,8,18,58,558,1558,3558,3558,116,117,'WGAAAA','SNMAAA','AAAAxx' -9285,8469,1,1,5,5,85,285,1285,4285,9285,170,171,'DTAAAA','TNMAAA','HHHHxx' -848,8470,0,0,8,8,48,848,848,848,848,96,97,'QGAAAA','UNMAAA','OOOOxx' -8923,8471,1,3,3,3,23,923,923,3923,8923,46,47,'FFAAAA','VNMAAA','VVVVxx' -6826,8472,0,2,6,6,26,826,826,1826,6826,52,53,'OCAAAA','WNMAAA','AAAAxx' -5187,8473,1,3,7,7,87,187,1187,187,5187,174,175,'NRAAAA','XNMAAA','HHHHxx' -2398,8474,0,2,8,18,98,398,398,2398,2398,196,197,'GOAAAA','YNMAAA','OOOOxx' -7653,8475,1,1,3,13,53,653,1653,2653,7653,106,107,'JIAAAA','ZNMAAA','VVVVxx' -8835,8476,1,3,5,15,35,835,835,3835,8835,70,71,'VBAAAA','AOMAAA','AAAAxx' -5736,8477,0,0,6,16,36,736,1736,736,5736,72,73,'QMAAAA','BOMAAA','HHHHxx' -1238,8478,0,2,8,18,38,238,1238,1238,1238,76,77,'QVAAAA','COMAAA','OOOOxx' -6021,8479,1,1,1,1,21,21,21,1021,6021,42,43,'PXAAAA','DOMAAA','VVVVxx' -6815,8480,1,3,5,15,15,815,815,1815,6815,30,31,'DCAAAA','EOMAAA','AAAAxx' -2549,8481,1,1,9,9,49,549,549,2549,2549,98,99,'BUAAAA','FOMAAA','HHHHxx' -5657,8482,1,1,7,17,57,657,1657,657,5657,114,115,'PJAAAA','GOMAAA','OOOOxx' -6855,8483,1,3,5,15,55,855,855,1855,6855,110,111,'RDAAAA','HOMAAA','VVVVxx' -1225,8484,1,1,5,5,25,225,1225,1225,1225,50,51,'DVAAAA','IOMAAA','AAAAxx' -7452,8485,0,0,2,12,52,452,1452,2452,7452,104,105,'QAAAAA','JOMAAA','HHHHxx' -2479,8486,1,3,9,19,79,479,479,2479,2479,158,159,'JRAAAA','KOMAAA','OOOOxx' -7974,8487,0,2,4,14,74,974,1974,2974,7974,148,149,'SUAAAA','LOMAAA','VVVVxx' -1212,8488,0,0,2,12,12,212,1212,1212,1212,24,25,'QUAAAA','MOMAAA','AAAAxx' -8883,8489,1,3,3,3,83,883,883,3883,8883,166,167,'RDAAAA','NOMAAA','HHHHxx' -8150,8490,0,2,0,10,50,150,150,3150,8150,100,101,'MBAAAA','OOMAAA','OOOOxx' -3392,8491,0,0,2,12,92,392,1392,3392,3392,184,185,'MAAAAA','POMAAA','VVVVxx' -6774,8492,0,2,4,14,74,774,774,1774,6774,148,149,'OAAAAA','QOMAAA','AAAAxx' -904,8493,0,0,4,4,4,904,904,904,904,8,9,'UIAAAA','ROMAAA','HHHHxx' -5068,8494,0,0,8,8,68,68,1068,68,5068,136,137,'YMAAAA','SOMAAA','OOOOxx' -9339,8495,1,3,9,19,39,339,1339,4339,9339,78,79,'FVAAAA','TOMAAA','VVVVxx' -1062,8496,0,2,2,2,62,62,1062,1062,1062,124,125,'WOAAAA','UOMAAA','AAAAxx' -3841,8497,1,1,1,1,41,841,1841,3841,3841,82,83,'TRAAAA','VOMAAA','HHHHxx' -8924,8498,0,0,4,4,24,924,924,3924,8924,48,49,'GFAAAA','WOMAAA','OOOOxx' -9795,8499,1,3,5,15,95,795,1795,4795,9795,190,191,'TMAAAA','XOMAAA','VVVVxx' -3981,8500,1,1,1,1,81,981,1981,3981,3981,162,163,'DXAAAA','YOMAAA','AAAAxx' -4290,8501,0,2,0,10,90,290,290,4290,4290,180,181,'AJAAAA','ZOMAAA','HHHHxx' -1067,8502,1,3,7,7,67,67,1067,1067,1067,134,135,'BPAAAA','APMAAA','OOOOxx' -8679,8503,1,3,9,19,79,679,679,3679,8679,158,159,'VVAAAA','BPMAAA','VVVVxx' -2894,8504,0,2,4,14,94,894,894,2894,2894,188,189,'IHAAAA','CPMAAA','AAAAxx' -9248,8505,0,0,8,8,48,248,1248,4248,9248,96,97,'SRAAAA','DPMAAA','HHHHxx' -1072,8506,0,0,2,12,72,72,1072,1072,1072,144,145,'GPAAAA','EPMAAA','OOOOxx' -3510,8507,0,2,0,10,10,510,1510,3510,3510,20,21,'AFAAAA','FPMAAA','VVVVxx' -6871,8508,1,3,1,11,71,871,871,1871,6871,142,143,'HEAAAA','GPMAAA','AAAAxx' -8701,8509,1,1,1,1,1,701,701,3701,8701,2,3,'RWAAAA','HPMAAA','HHHHxx' -8170,8510,0,2,0,10,70,170,170,3170,8170,140,141,'GCAAAA','IPMAAA','OOOOxx' -2730,8511,0,2,0,10,30,730,730,2730,2730,60,61,'ABAAAA','JPMAAA','VVVVxx' -2668,8512,0,0,8,8,68,668,668,2668,2668,136,137,'QYAAAA','KPMAAA','AAAAxx' -8723,8513,1,3,3,3,23,723,723,3723,8723,46,47,'NXAAAA','LPMAAA','HHHHxx' -3439,8514,1,3,9,19,39,439,1439,3439,3439,78,79,'HCAAAA','MPMAAA','OOOOxx' -6219,8515,1,3,9,19,19,219,219,1219,6219,38,39,'FFAAAA','NPMAAA','VVVVxx' -4264,8516,0,0,4,4,64,264,264,4264,4264,128,129,'AIAAAA','OPMAAA','AAAAxx' -3929,8517,1,1,9,9,29,929,1929,3929,3929,58,59,'DVAAAA','PPMAAA','HHHHxx' -7,8518,1,3,7,7,7,7,7,7,7,14,15,'HAAAAA','QPMAAA','OOOOxx' -3737,8519,1,1,7,17,37,737,1737,3737,3737,74,75,'TNAAAA','RPMAAA','VVVVxx' -358,8520,0,2,8,18,58,358,358,358,358,116,117,'UNAAAA','SPMAAA','AAAAxx' -5128,8521,0,0,8,8,28,128,1128,128,5128,56,57,'GPAAAA','TPMAAA','HHHHxx' -7353,8522,1,1,3,13,53,353,1353,2353,7353,106,107,'VWAAAA','UPMAAA','OOOOxx' -8758,8523,0,2,8,18,58,758,758,3758,8758,116,117,'WYAAAA','VPMAAA','VVVVxx' -7284,8524,0,0,4,4,84,284,1284,2284,7284,168,169,'EUAAAA','WPMAAA','AAAAxx' -4037,8525,1,1,7,17,37,37,37,4037,4037,74,75,'HZAAAA','XPMAAA','HHHHxx' -435,8526,1,3,5,15,35,435,435,435,435,70,71,'TQAAAA','YPMAAA','OOOOxx' -3580,8527,0,0,0,0,80,580,1580,3580,3580,160,161,'SHAAAA','ZPMAAA','VVVVxx' -4554,8528,0,2,4,14,54,554,554,4554,4554,108,109,'ETAAAA','AQMAAA','AAAAxx' -4337,8529,1,1,7,17,37,337,337,4337,4337,74,75,'VKAAAA','BQMAAA','HHHHxx' -512,8530,0,0,2,12,12,512,512,512,512,24,25,'STAAAA','CQMAAA','OOOOxx' -2032,8531,0,0,2,12,32,32,32,2032,2032,64,65,'EAAAAA','DQMAAA','VVVVxx' -1755,8532,1,3,5,15,55,755,1755,1755,1755,110,111,'NPAAAA','EQMAAA','AAAAxx' -9923,8533,1,3,3,3,23,923,1923,4923,9923,46,47,'RRAAAA','FQMAAA','HHHHxx' -3747,8534,1,3,7,7,47,747,1747,3747,3747,94,95,'DOAAAA','GQMAAA','OOOOxx' -27,8535,1,3,7,7,27,27,27,27,27,54,55,'BBAAAA','HQMAAA','VVVVxx' -3075,8536,1,3,5,15,75,75,1075,3075,3075,150,151,'HOAAAA','IQMAAA','AAAAxx' -6259,8537,1,3,9,19,59,259,259,1259,6259,118,119,'TGAAAA','JQMAAA','HHHHxx' -2940,8538,0,0,0,0,40,940,940,2940,2940,80,81,'CJAAAA','KQMAAA','OOOOxx' -5724,8539,0,0,4,4,24,724,1724,724,5724,48,49,'EMAAAA','LQMAAA','VVVVxx' -5638,8540,0,2,8,18,38,638,1638,638,5638,76,77,'WIAAAA','MQMAAA','AAAAxx' -479,8541,1,3,9,19,79,479,479,479,479,158,159,'LSAAAA','NQMAAA','HHHHxx' -4125,8542,1,1,5,5,25,125,125,4125,4125,50,51,'RCAAAA','OQMAAA','OOOOxx' -1525,8543,1,1,5,5,25,525,1525,1525,1525,50,51,'RGAAAA','PQMAAA','VVVVxx' -7529,8544,1,1,9,9,29,529,1529,2529,7529,58,59,'PDAAAA','QQMAAA','AAAAxx' -931,8545,1,3,1,11,31,931,931,931,931,62,63,'VJAAAA','RQMAAA','HHHHxx' -5175,8546,1,3,5,15,75,175,1175,175,5175,150,151,'BRAAAA','SQMAAA','OOOOxx' -6798,8547,0,2,8,18,98,798,798,1798,6798,196,197,'MBAAAA','TQMAAA','VVVVxx' -2111,8548,1,3,1,11,11,111,111,2111,2111,22,23,'FDAAAA','UQMAAA','AAAAxx' -6145,8549,1,1,5,5,45,145,145,1145,6145,90,91,'JCAAAA','VQMAAA','HHHHxx' -4712,8550,0,0,2,12,12,712,712,4712,4712,24,25,'GZAAAA','WQMAAA','OOOOxx' -3110,8551,0,2,0,10,10,110,1110,3110,3110,20,21,'QPAAAA','XQMAAA','VVVVxx' -97,8552,1,1,7,17,97,97,97,97,97,194,195,'TDAAAA','YQMAAA','AAAAxx' -758,8553,0,2,8,18,58,758,758,758,758,116,117,'EDAAAA','ZQMAAA','HHHHxx' -1895,8554,1,3,5,15,95,895,1895,1895,1895,190,191,'XUAAAA','ARMAAA','OOOOxx' -5289,8555,1,1,9,9,89,289,1289,289,5289,178,179,'LVAAAA','BRMAAA','VVVVxx' -5026,8556,0,2,6,6,26,26,1026,26,5026,52,53,'ILAAAA','CRMAAA','AAAAxx' -4725,8557,1,1,5,5,25,725,725,4725,4725,50,51,'TZAAAA','DRMAAA','HHHHxx' -1679,8558,1,3,9,19,79,679,1679,1679,1679,158,159,'PMAAAA','ERMAAA','OOOOxx' -4433,8559,1,1,3,13,33,433,433,4433,4433,66,67,'NOAAAA','FRMAAA','VVVVxx' -5340,8560,0,0,0,0,40,340,1340,340,5340,80,81,'KXAAAA','GRMAAA','AAAAxx' -6340,8561,0,0,0,0,40,340,340,1340,6340,80,81,'WJAAAA','HRMAAA','HHHHxx' -3261,8562,1,1,1,1,61,261,1261,3261,3261,122,123,'LVAAAA','IRMAAA','OOOOxx' -8108,8563,0,0,8,8,8,108,108,3108,8108,16,17,'WZAAAA','JRMAAA','VVVVxx' -8785,8564,1,1,5,5,85,785,785,3785,8785,170,171,'XZAAAA','KRMAAA','AAAAxx' -7391,8565,1,3,1,11,91,391,1391,2391,7391,182,183,'HYAAAA','LRMAAA','HHHHxx' -1496,8566,0,0,6,16,96,496,1496,1496,1496,192,193,'OFAAAA','MRMAAA','OOOOxx' -1484,8567,0,0,4,4,84,484,1484,1484,1484,168,169,'CFAAAA','NRMAAA','VVVVxx' -5884,8568,0,0,4,4,84,884,1884,884,5884,168,169,'ISAAAA','ORMAAA','AAAAxx' -342,8569,0,2,2,2,42,342,342,342,342,84,85,'ENAAAA','PRMAAA','HHHHxx' -7659,8570,1,3,9,19,59,659,1659,2659,7659,118,119,'PIAAAA','QRMAAA','OOOOxx' -6635,8571,1,3,5,15,35,635,635,1635,6635,70,71,'FVAAAA','RRMAAA','VVVVxx' -8507,8572,1,3,7,7,7,507,507,3507,8507,14,15,'FPAAAA','SRMAAA','AAAAxx' -2583,8573,1,3,3,3,83,583,583,2583,2583,166,167,'JVAAAA','TRMAAA','HHHHxx' -6533,8574,1,1,3,13,33,533,533,1533,6533,66,67,'HRAAAA','URMAAA','OOOOxx' -5879,8575,1,3,9,19,79,879,1879,879,5879,158,159,'DSAAAA','VRMAAA','VVVVxx' -5511,8576,1,3,1,11,11,511,1511,511,5511,22,23,'ZDAAAA','WRMAAA','AAAAxx' -3682,8577,0,2,2,2,82,682,1682,3682,3682,164,165,'QLAAAA','XRMAAA','HHHHxx' -7182,8578,0,2,2,2,82,182,1182,2182,7182,164,165,'GQAAAA','YRMAAA','OOOOxx' -1409,8579,1,1,9,9,9,409,1409,1409,1409,18,19,'FCAAAA','ZRMAAA','VVVVxx' -3363,8580,1,3,3,3,63,363,1363,3363,3363,126,127,'JZAAAA','ASMAAA','AAAAxx' -729,8581,1,1,9,9,29,729,729,729,729,58,59,'BCAAAA','BSMAAA','HHHHxx' -5857,8582,1,1,7,17,57,857,1857,857,5857,114,115,'HRAAAA','CSMAAA','OOOOxx' -235,8583,1,3,5,15,35,235,235,235,235,70,71,'BJAAAA','DSMAAA','VVVVxx' -193,8584,1,1,3,13,93,193,193,193,193,186,187,'LHAAAA','ESMAAA','AAAAxx' -5586,8585,0,2,6,6,86,586,1586,586,5586,172,173,'WGAAAA','FSMAAA','HHHHxx' -6203,8586,1,3,3,3,3,203,203,1203,6203,6,7,'PEAAAA','GSMAAA','OOOOxx' -6795,8587,1,3,5,15,95,795,795,1795,6795,190,191,'JBAAAA','HSMAAA','VVVVxx' -3211,8588,1,3,1,11,11,211,1211,3211,3211,22,23,'NTAAAA','ISMAAA','AAAAxx' -9763,8589,1,3,3,3,63,763,1763,4763,9763,126,127,'NLAAAA','JSMAAA','HHHHxx' -9043,8590,1,3,3,3,43,43,1043,4043,9043,86,87,'VJAAAA','KSMAAA','OOOOxx' -2854,8591,0,2,4,14,54,854,854,2854,2854,108,109,'UFAAAA','LSMAAA','VVVVxx' -565,8592,1,1,5,5,65,565,565,565,565,130,131,'TVAAAA','MSMAAA','AAAAxx' -9284,8593,0,0,4,4,84,284,1284,4284,9284,168,169,'CTAAAA','NSMAAA','HHHHxx' -7886,8594,0,2,6,6,86,886,1886,2886,7886,172,173,'IRAAAA','OSMAAA','OOOOxx' -122,8595,0,2,2,2,22,122,122,122,122,44,45,'SEAAAA','PSMAAA','VVVVxx' -4934,8596,0,2,4,14,34,934,934,4934,4934,68,69,'UHAAAA','QSMAAA','AAAAxx' -1766,8597,0,2,6,6,66,766,1766,1766,1766,132,133,'YPAAAA','RSMAAA','HHHHxx' -2554,8598,0,2,4,14,54,554,554,2554,2554,108,109,'GUAAAA','SSMAAA','OOOOxx' -488,8599,0,0,8,8,88,488,488,488,488,176,177,'USAAAA','TSMAAA','VVVVxx' -825,8600,1,1,5,5,25,825,825,825,825,50,51,'TFAAAA','USMAAA','AAAAxx' -678,8601,0,2,8,18,78,678,678,678,678,156,157,'CAAAAA','VSMAAA','HHHHxx' -4543,8602,1,3,3,3,43,543,543,4543,4543,86,87,'TSAAAA','WSMAAA','OOOOxx' -1699,8603,1,3,9,19,99,699,1699,1699,1699,198,199,'JNAAAA','XSMAAA','VVVVxx' -3771,8604,1,3,1,11,71,771,1771,3771,3771,142,143,'BPAAAA','YSMAAA','AAAAxx' -1234,8605,0,2,4,14,34,234,1234,1234,1234,68,69,'MVAAAA','ZSMAAA','HHHHxx' -4152,8606,0,0,2,12,52,152,152,4152,4152,104,105,'SDAAAA','ATMAAA','OOOOxx' -1632,8607,0,0,2,12,32,632,1632,1632,1632,64,65,'UKAAAA','BTMAAA','VVVVxx' -4988,8608,0,0,8,8,88,988,988,4988,4988,176,177,'WJAAAA','CTMAAA','AAAAxx' -1980,8609,0,0,0,0,80,980,1980,1980,1980,160,161,'EYAAAA','DTMAAA','HHHHxx' -7479,8610,1,3,9,19,79,479,1479,2479,7479,158,159,'RBAAAA','ETMAAA','OOOOxx' -2586,8611,0,2,6,6,86,586,586,2586,2586,172,173,'MVAAAA','FTMAAA','VVVVxx' -5433,8612,1,1,3,13,33,433,1433,433,5433,66,67,'ZAAAAA','GTMAAA','AAAAxx' -2261,8613,1,1,1,1,61,261,261,2261,2261,122,123,'ZIAAAA','HTMAAA','HHHHxx' -1180,8614,0,0,0,0,80,180,1180,1180,1180,160,161,'KTAAAA','ITMAAA','OOOOxx' -3938,8615,0,2,8,18,38,938,1938,3938,3938,76,77,'MVAAAA','JTMAAA','VVVVxx' -6714,8616,0,2,4,14,14,714,714,1714,6714,28,29,'GYAAAA','KTMAAA','AAAAxx' -2890,8617,0,2,0,10,90,890,890,2890,2890,180,181,'EHAAAA','LTMAAA','HHHHxx' -7379,8618,1,3,9,19,79,379,1379,2379,7379,158,159,'VXAAAA','MTMAAA','OOOOxx' -5896,8619,0,0,6,16,96,896,1896,896,5896,192,193,'USAAAA','NTMAAA','VVVVxx' -5949,8620,1,1,9,9,49,949,1949,949,5949,98,99,'VUAAAA','OTMAAA','AAAAxx' -3194,8621,0,2,4,14,94,194,1194,3194,3194,188,189,'WSAAAA','PTMAAA','HHHHxx' -9325,8622,1,1,5,5,25,325,1325,4325,9325,50,51,'RUAAAA','QTMAAA','OOOOxx' -9531,8623,1,3,1,11,31,531,1531,4531,9531,62,63,'PCAAAA','RTMAAA','VVVVxx' -711,8624,1,3,1,11,11,711,711,711,711,22,23,'JBAAAA','STMAAA','AAAAxx' -2450,8625,0,2,0,10,50,450,450,2450,2450,100,101,'GQAAAA','TTMAAA','HHHHxx' -1929,8626,1,1,9,9,29,929,1929,1929,1929,58,59,'FWAAAA','UTMAAA','OOOOxx' -6165,8627,1,1,5,5,65,165,165,1165,6165,130,131,'DDAAAA','VTMAAA','VVVVxx' -4050,8628,0,2,0,10,50,50,50,4050,4050,100,101,'UZAAAA','WTMAAA','AAAAxx' -9011,8629,1,3,1,11,11,11,1011,4011,9011,22,23,'PIAAAA','XTMAAA','HHHHxx' -7916,8630,0,0,6,16,16,916,1916,2916,7916,32,33,'MSAAAA','YTMAAA','OOOOxx' -9136,8631,0,0,6,16,36,136,1136,4136,9136,72,73,'KNAAAA','ZTMAAA','VVVVxx' -8782,8632,0,2,2,2,82,782,782,3782,8782,164,165,'UZAAAA','AUMAAA','AAAAxx' -8491,8633,1,3,1,11,91,491,491,3491,8491,182,183,'POAAAA','BUMAAA','HHHHxx' -5114,8634,0,2,4,14,14,114,1114,114,5114,28,29,'SOAAAA','CUMAAA','OOOOxx' -5815,8635,1,3,5,15,15,815,1815,815,5815,30,31,'RPAAAA','DUMAAA','VVVVxx' -5628,8636,0,0,8,8,28,628,1628,628,5628,56,57,'MIAAAA','EUMAAA','AAAAxx' -810,8637,0,2,0,10,10,810,810,810,810,20,21,'EFAAAA','FUMAAA','HHHHxx' -6178,8638,0,2,8,18,78,178,178,1178,6178,156,157,'QDAAAA','GUMAAA','OOOOxx' -2619,8639,1,3,9,19,19,619,619,2619,2619,38,39,'TWAAAA','HUMAAA','VVVVxx' -3340,8640,0,0,0,0,40,340,1340,3340,3340,80,81,'MYAAAA','IUMAAA','AAAAxx' -2491,8641,1,3,1,11,91,491,491,2491,2491,182,183,'VRAAAA','JUMAAA','HHHHxx' -3574,8642,0,2,4,14,74,574,1574,3574,3574,148,149,'MHAAAA','KUMAAA','OOOOxx' -6754,8643,0,2,4,14,54,754,754,1754,6754,108,109,'UZAAAA','LUMAAA','VVVVxx' -1566,8644,0,2,6,6,66,566,1566,1566,1566,132,133,'GIAAAA','MUMAAA','AAAAxx' -9174,8645,0,2,4,14,74,174,1174,4174,9174,148,149,'WOAAAA','NUMAAA','HHHHxx' -1520,8646,0,0,0,0,20,520,1520,1520,1520,40,41,'MGAAAA','OUMAAA','OOOOxx' -2691,8647,1,3,1,11,91,691,691,2691,2691,182,183,'NZAAAA','PUMAAA','VVVVxx' -6961,8648,1,1,1,1,61,961,961,1961,6961,122,123,'THAAAA','QUMAAA','AAAAxx' -5722,8649,0,2,2,2,22,722,1722,722,5722,44,45,'CMAAAA','RUMAAA','HHHHxx' -9707,8650,1,3,7,7,7,707,1707,4707,9707,14,15,'JJAAAA','SUMAAA','OOOOxx' -2891,8651,1,3,1,11,91,891,891,2891,2891,182,183,'FHAAAA','TUMAAA','VVVVxx' -341,8652,1,1,1,1,41,341,341,341,341,82,83,'DNAAAA','UUMAAA','AAAAxx' -4690,8653,0,2,0,10,90,690,690,4690,4690,180,181,'KYAAAA','VUMAAA','HHHHxx' -7841,8654,1,1,1,1,41,841,1841,2841,7841,82,83,'PPAAAA','WUMAAA','OOOOxx' -6615,8655,1,3,5,15,15,615,615,1615,6615,30,31,'LUAAAA','XUMAAA','VVVVxx' -9169,8656,1,1,9,9,69,169,1169,4169,9169,138,139,'ROAAAA','YUMAAA','AAAAxx' -6689,8657,1,1,9,9,89,689,689,1689,6689,178,179,'HXAAAA','ZUMAAA','HHHHxx' -8721,8658,1,1,1,1,21,721,721,3721,8721,42,43,'LXAAAA','AVMAAA','OOOOxx' -7508,8659,0,0,8,8,8,508,1508,2508,7508,16,17,'UCAAAA','BVMAAA','VVVVxx' -8631,8660,1,3,1,11,31,631,631,3631,8631,62,63,'ZTAAAA','CVMAAA','AAAAxx' -480,8661,0,0,0,0,80,480,480,480,480,160,161,'MSAAAA','DVMAAA','HHHHxx' -7094,8662,0,2,4,14,94,94,1094,2094,7094,188,189,'WMAAAA','EVMAAA','OOOOxx' -319,8663,1,3,9,19,19,319,319,319,319,38,39,'HMAAAA','FVMAAA','VVVVxx' -9421,8664,1,1,1,1,21,421,1421,4421,9421,42,43,'JYAAAA','GVMAAA','AAAAxx' -4352,8665,0,0,2,12,52,352,352,4352,4352,104,105,'KLAAAA','HVMAAA','HHHHxx' -5019,8666,1,3,9,19,19,19,1019,19,5019,38,39,'BLAAAA','IVMAAA','OOOOxx' -3956,8667,0,0,6,16,56,956,1956,3956,3956,112,113,'EWAAAA','JVMAAA','VVVVxx' -114,8668,0,2,4,14,14,114,114,114,114,28,29,'KEAAAA','KVMAAA','AAAAxx' -1196,8669,0,0,6,16,96,196,1196,1196,1196,192,193,'AUAAAA','LVMAAA','HHHHxx' -1407,8670,1,3,7,7,7,407,1407,1407,1407,14,15,'DCAAAA','MVMAAA','OOOOxx' -7432,8671,0,0,2,12,32,432,1432,2432,7432,64,65,'WZAAAA','NVMAAA','VVVVxx' -3141,8672,1,1,1,1,41,141,1141,3141,3141,82,83,'VQAAAA','OVMAAA','AAAAxx' -2073,8673,1,1,3,13,73,73,73,2073,2073,146,147,'TBAAAA','PVMAAA','HHHHxx' -3400,8674,0,0,0,0,0,400,1400,3400,3400,0,1,'UAAAAA','QVMAAA','OOOOxx' -505,8675,1,1,5,5,5,505,505,505,505,10,11,'LTAAAA','RVMAAA','VVVVxx' -1263,8676,1,3,3,3,63,263,1263,1263,1263,126,127,'PWAAAA','SVMAAA','AAAAxx' -190,8677,0,2,0,10,90,190,190,190,190,180,181,'IHAAAA','TVMAAA','HHHHxx' -6686,8678,0,2,6,6,86,686,686,1686,6686,172,173,'EXAAAA','UVMAAA','OOOOxx' -9821,8679,1,1,1,1,21,821,1821,4821,9821,42,43,'TNAAAA','VVMAAA','VVVVxx' -1119,8680,1,3,9,19,19,119,1119,1119,1119,38,39,'BRAAAA','WVMAAA','AAAAxx' -2955,8681,1,3,5,15,55,955,955,2955,2955,110,111,'RJAAAA','XVMAAA','HHHHxx' -224,8682,0,0,4,4,24,224,224,224,224,48,49,'QIAAAA','YVMAAA','OOOOxx' -7562,8683,0,2,2,2,62,562,1562,2562,7562,124,125,'WEAAAA','ZVMAAA','VVVVxx' -8845,8684,1,1,5,5,45,845,845,3845,8845,90,91,'FCAAAA','AWMAAA','AAAAxx' -5405,8685,1,1,5,5,5,405,1405,405,5405,10,11,'XZAAAA','BWMAAA','HHHHxx' -9192,8686,0,0,2,12,92,192,1192,4192,9192,184,185,'OPAAAA','CWMAAA','OOOOxx' -4927,8687,1,3,7,7,27,927,927,4927,4927,54,55,'NHAAAA','DWMAAA','VVVVxx' -997,8688,1,1,7,17,97,997,997,997,997,194,195,'JMAAAA','EWMAAA','AAAAxx' -989,8689,1,1,9,9,89,989,989,989,989,178,179,'BMAAAA','FWMAAA','HHHHxx' -7258,8690,0,2,8,18,58,258,1258,2258,7258,116,117,'ETAAAA','GWMAAA','OOOOxx' -6899,8691,1,3,9,19,99,899,899,1899,6899,198,199,'JFAAAA','HWMAAA','VVVVxx' -1770,8692,0,2,0,10,70,770,1770,1770,1770,140,141,'CQAAAA','IWMAAA','AAAAxx' -4423,8693,1,3,3,3,23,423,423,4423,4423,46,47,'DOAAAA','JWMAAA','HHHHxx' -5671,8694,1,3,1,11,71,671,1671,671,5671,142,143,'DKAAAA','KWMAAA','OOOOxx' -8393,8695,1,1,3,13,93,393,393,3393,8393,186,187,'VKAAAA','LWMAAA','VVVVxx' -4355,8696,1,3,5,15,55,355,355,4355,4355,110,111,'NLAAAA','MWMAAA','AAAAxx' -3919,8697,1,3,9,19,19,919,1919,3919,3919,38,39,'TUAAAA','NWMAAA','HHHHxx' -338,8698,0,2,8,18,38,338,338,338,338,76,77,'ANAAAA','OWMAAA','OOOOxx' -5790,8699,0,2,0,10,90,790,1790,790,5790,180,181,'SOAAAA','PWMAAA','VVVVxx' -1452,8700,0,0,2,12,52,452,1452,1452,1452,104,105,'WDAAAA','QWMAAA','AAAAxx' -939,8701,1,3,9,19,39,939,939,939,939,78,79,'DKAAAA','RWMAAA','HHHHxx' -8913,8702,1,1,3,13,13,913,913,3913,8913,26,27,'VEAAAA','SWMAAA','OOOOxx' -7157,8703,1,1,7,17,57,157,1157,2157,7157,114,115,'HPAAAA','TWMAAA','VVVVxx' -7240,8704,0,0,0,0,40,240,1240,2240,7240,80,81,'MSAAAA','UWMAAA','AAAAxx' -3492,8705,0,0,2,12,92,492,1492,3492,3492,184,185,'IEAAAA','VWMAAA','HHHHxx' -3464,8706,0,0,4,4,64,464,1464,3464,3464,128,129,'GDAAAA','WWMAAA','OOOOxx' -388,8707,0,0,8,8,88,388,388,388,388,176,177,'YOAAAA','XWMAAA','VVVVxx' -4135,8708,1,3,5,15,35,135,135,4135,4135,70,71,'BDAAAA','YWMAAA','AAAAxx' -1194,8709,0,2,4,14,94,194,1194,1194,1194,188,189,'YTAAAA','ZWMAAA','HHHHxx' -5476,8710,0,0,6,16,76,476,1476,476,5476,152,153,'QCAAAA','AXMAAA','OOOOxx' -9844,8711,0,0,4,4,44,844,1844,4844,9844,88,89,'QOAAAA','BXMAAA','VVVVxx' -9364,8712,0,0,4,4,64,364,1364,4364,9364,128,129,'EWAAAA','CXMAAA','AAAAxx' -5238,8713,0,2,8,18,38,238,1238,238,5238,76,77,'MTAAAA','DXMAAA','HHHHxx' -3712,8714,0,0,2,12,12,712,1712,3712,3712,24,25,'UMAAAA','EXMAAA','OOOOxx' -6189,8715,1,1,9,9,89,189,189,1189,6189,178,179,'BEAAAA','FXMAAA','VVVVxx' -5257,8716,1,1,7,17,57,257,1257,257,5257,114,115,'FUAAAA','GXMAAA','AAAAxx' -81,8717,1,1,1,1,81,81,81,81,81,162,163,'DDAAAA','HXMAAA','HHHHxx' -3289,8718,1,1,9,9,89,289,1289,3289,3289,178,179,'NWAAAA','IXMAAA','OOOOxx' -1177,8719,1,1,7,17,77,177,1177,1177,1177,154,155,'HTAAAA','JXMAAA','VVVVxx' -5038,8720,0,2,8,18,38,38,1038,38,5038,76,77,'ULAAAA','KXMAAA','AAAAxx' -325,8721,1,1,5,5,25,325,325,325,325,50,51,'NMAAAA','LXMAAA','HHHHxx' -7221,8722,1,1,1,1,21,221,1221,2221,7221,42,43,'TRAAAA','MXMAAA','OOOOxx' -7123,8723,1,3,3,3,23,123,1123,2123,7123,46,47,'ZNAAAA','NXMAAA','VVVVxx' -6364,8724,0,0,4,4,64,364,364,1364,6364,128,129,'UKAAAA','OXMAAA','AAAAxx' -4468,8725,0,0,8,8,68,468,468,4468,4468,136,137,'WPAAAA','PXMAAA','HHHHxx' -9185,8726,1,1,5,5,85,185,1185,4185,9185,170,171,'HPAAAA','QXMAAA','OOOOxx' -4158,8727,0,2,8,18,58,158,158,4158,4158,116,117,'YDAAAA','RXMAAA','VVVVxx' -9439,8728,1,3,9,19,39,439,1439,4439,9439,78,79,'BZAAAA','SXMAAA','AAAAxx' -7759,8729,1,3,9,19,59,759,1759,2759,7759,118,119,'LMAAAA','TXMAAA','HHHHxx' -3325,8730,1,1,5,5,25,325,1325,3325,3325,50,51,'XXAAAA','UXMAAA','OOOOxx' -7991,8731,1,3,1,11,91,991,1991,2991,7991,182,183,'JVAAAA','VXMAAA','VVVVxx' -1650,8732,0,2,0,10,50,650,1650,1650,1650,100,101,'MLAAAA','WXMAAA','AAAAxx' -8395,8733,1,3,5,15,95,395,395,3395,8395,190,191,'XKAAAA','XXMAAA','HHHHxx' -286,8734,0,2,6,6,86,286,286,286,286,172,173,'ALAAAA','YXMAAA','OOOOxx' -1507,8735,1,3,7,7,7,507,1507,1507,1507,14,15,'ZFAAAA','ZXMAAA','VVVVxx' -4122,8736,0,2,2,2,22,122,122,4122,4122,44,45,'OCAAAA','AYMAAA','AAAAxx' -2625,8737,1,1,5,5,25,625,625,2625,2625,50,51,'ZWAAAA','BYMAAA','HHHHxx' -1140,8738,0,0,0,0,40,140,1140,1140,1140,80,81,'WRAAAA','CYMAAA','OOOOxx' -5262,8739,0,2,2,2,62,262,1262,262,5262,124,125,'KUAAAA','DYMAAA','VVVVxx' -4919,8740,1,3,9,19,19,919,919,4919,4919,38,39,'FHAAAA','EYMAAA','AAAAxx' -7266,8741,0,2,6,6,66,266,1266,2266,7266,132,133,'MTAAAA','FYMAAA','HHHHxx' -630,8742,0,2,0,10,30,630,630,630,630,60,61,'GYAAAA','GYMAAA','OOOOxx' -2129,8743,1,1,9,9,29,129,129,2129,2129,58,59,'XDAAAA','HYMAAA','VVVVxx' -9552,8744,0,0,2,12,52,552,1552,4552,9552,104,105,'KDAAAA','IYMAAA','AAAAxx' -3018,8745,0,2,8,18,18,18,1018,3018,3018,36,37,'CMAAAA','JYMAAA','HHHHxx' -7145,8746,1,1,5,5,45,145,1145,2145,7145,90,91,'VOAAAA','KYMAAA','OOOOxx' -1633,8747,1,1,3,13,33,633,1633,1633,1633,66,67,'VKAAAA','LYMAAA','VVVVxx' -7957,8748,1,1,7,17,57,957,1957,2957,7957,114,115,'BUAAAA','MYMAAA','AAAAxx' -774,8749,0,2,4,14,74,774,774,774,774,148,149,'UDAAAA','NYMAAA','HHHHxx' -9371,8750,1,3,1,11,71,371,1371,4371,9371,142,143,'LWAAAA','OYMAAA','OOOOxx' -6007,8751,1,3,7,7,7,7,7,1007,6007,14,15,'BXAAAA','PYMAAA','VVVVxx' -5277,8752,1,1,7,17,77,277,1277,277,5277,154,155,'ZUAAAA','QYMAAA','AAAAxx' -9426,8753,0,2,6,6,26,426,1426,4426,9426,52,53,'OYAAAA','RYMAAA','HHHHxx' -9190,8754,0,2,0,10,90,190,1190,4190,9190,180,181,'MPAAAA','SYMAAA','OOOOxx' -8996,8755,0,0,6,16,96,996,996,3996,8996,192,193,'AIAAAA','TYMAAA','VVVVxx' -3409,8756,1,1,9,9,9,409,1409,3409,3409,18,19,'DBAAAA','UYMAAA','AAAAxx' -7212,8757,0,0,2,12,12,212,1212,2212,7212,24,25,'KRAAAA','VYMAAA','HHHHxx' -416,8758,0,0,6,16,16,416,416,416,416,32,33,'AQAAAA','WYMAAA','OOOOxx' -7211,8759,1,3,1,11,11,211,1211,2211,7211,22,23,'JRAAAA','XYMAAA','VVVVxx' -7454,8760,0,2,4,14,54,454,1454,2454,7454,108,109,'SAAAAA','YYMAAA','AAAAxx' -8417,8761,1,1,7,17,17,417,417,3417,8417,34,35,'TLAAAA','ZYMAAA','HHHHxx' -5562,8762,0,2,2,2,62,562,1562,562,5562,124,125,'YFAAAA','AZMAAA','OOOOxx' -4996,8763,0,0,6,16,96,996,996,4996,4996,192,193,'EKAAAA','BZMAAA','VVVVxx' -5718,8764,0,2,8,18,18,718,1718,718,5718,36,37,'YLAAAA','CZMAAA','AAAAxx' -7838,8765,0,2,8,18,38,838,1838,2838,7838,76,77,'MPAAAA','DZMAAA','HHHHxx' -7715,8766,1,3,5,15,15,715,1715,2715,7715,30,31,'TKAAAA','EZMAAA','OOOOxx' -2780,8767,0,0,0,0,80,780,780,2780,2780,160,161,'YCAAAA','FZMAAA','VVVVxx' -1013,8768,1,1,3,13,13,13,1013,1013,1013,26,27,'ZMAAAA','GZMAAA','AAAAxx' -8465,8769,1,1,5,5,65,465,465,3465,8465,130,131,'PNAAAA','HZMAAA','HHHHxx' -7976,8770,0,0,6,16,76,976,1976,2976,7976,152,153,'UUAAAA','IZMAAA','OOOOxx' -7150,8771,0,2,0,10,50,150,1150,2150,7150,100,101,'APAAAA','JZMAAA','VVVVxx' -6471,8772,1,3,1,11,71,471,471,1471,6471,142,143,'XOAAAA','KZMAAA','AAAAxx' -1927,8773,1,3,7,7,27,927,1927,1927,1927,54,55,'DWAAAA','LZMAAA','HHHHxx' -227,8774,1,3,7,7,27,227,227,227,227,54,55,'TIAAAA','MZMAAA','OOOOxx' -6462,8775,0,2,2,2,62,462,462,1462,6462,124,125,'OOAAAA','NZMAAA','VVVVxx' -5227,8776,1,3,7,7,27,227,1227,227,5227,54,55,'BTAAAA','OZMAAA','AAAAxx' -1074,8777,0,2,4,14,74,74,1074,1074,1074,148,149,'IPAAAA','PZMAAA','HHHHxx' -9448,8778,0,0,8,8,48,448,1448,4448,9448,96,97,'KZAAAA','QZMAAA','OOOOxx' -4459,8779,1,3,9,19,59,459,459,4459,4459,118,119,'NPAAAA','RZMAAA','VVVVxx' -2478,8780,0,2,8,18,78,478,478,2478,2478,156,157,'IRAAAA','SZMAAA','AAAAxx' -5005,8781,1,1,5,5,5,5,1005,5,5005,10,11,'NKAAAA','TZMAAA','HHHHxx' -2418,8782,0,2,8,18,18,418,418,2418,2418,36,37,'APAAAA','UZMAAA','OOOOxx' -6991,8783,1,3,1,11,91,991,991,1991,6991,182,183,'XIAAAA','VZMAAA','VVVVxx' -4729,8784,1,1,9,9,29,729,729,4729,4729,58,59,'XZAAAA','WZMAAA','AAAAxx' -3548,8785,0,0,8,8,48,548,1548,3548,3548,96,97,'MGAAAA','XZMAAA','HHHHxx' -9616,8786,0,0,6,16,16,616,1616,4616,9616,32,33,'WFAAAA','YZMAAA','OOOOxx' -2901,8787,1,1,1,1,1,901,901,2901,2901,2,3,'PHAAAA','ZZMAAA','VVVVxx' -10,8788,0,2,0,10,10,10,10,10,10,20,21,'KAAAAA','AANAAA','AAAAxx' -2637,8789,1,1,7,17,37,637,637,2637,2637,74,75,'LXAAAA','BANAAA','HHHHxx' -6747,8790,1,3,7,7,47,747,747,1747,6747,94,95,'NZAAAA','CANAAA','OOOOxx' -797,8791,1,1,7,17,97,797,797,797,797,194,195,'REAAAA','DANAAA','VVVVxx' -7609,8792,1,1,9,9,9,609,1609,2609,7609,18,19,'RGAAAA','EANAAA','AAAAxx' -8290,8793,0,2,0,10,90,290,290,3290,8290,180,181,'WGAAAA','FANAAA','HHHHxx' -8765,8794,1,1,5,5,65,765,765,3765,8765,130,131,'DZAAAA','GANAAA','OOOOxx' -8053,8795,1,1,3,13,53,53,53,3053,8053,106,107,'TXAAAA','HANAAA','VVVVxx' -5602,8796,0,2,2,2,2,602,1602,602,5602,4,5,'MHAAAA','IANAAA','AAAAxx' -3672,8797,0,0,2,12,72,672,1672,3672,3672,144,145,'GLAAAA','JANAAA','HHHHxx' -7513,8798,1,1,3,13,13,513,1513,2513,7513,26,27,'ZCAAAA','KANAAA','OOOOxx' -3462,8799,0,2,2,2,62,462,1462,3462,3462,124,125,'EDAAAA','LANAAA','VVVVxx' -4457,8800,1,1,7,17,57,457,457,4457,4457,114,115,'LPAAAA','MANAAA','AAAAxx' -6547,8801,1,3,7,7,47,547,547,1547,6547,94,95,'VRAAAA','NANAAA','HHHHxx' -7417,8802,1,1,7,17,17,417,1417,2417,7417,34,35,'HZAAAA','OANAAA','OOOOxx' -8641,8803,1,1,1,1,41,641,641,3641,8641,82,83,'JUAAAA','PANAAA','VVVVxx' -149,8804,1,1,9,9,49,149,149,149,149,98,99,'TFAAAA','QANAAA','AAAAxx' -5041,8805,1,1,1,1,41,41,1041,41,5041,82,83,'XLAAAA','RANAAA','HHHHxx' -9232,8806,0,0,2,12,32,232,1232,4232,9232,64,65,'CRAAAA','SANAAA','OOOOxx' -3603,8807,1,3,3,3,3,603,1603,3603,3603,6,7,'PIAAAA','TANAAA','VVVVxx' -2792,8808,0,0,2,12,92,792,792,2792,2792,184,185,'KDAAAA','UANAAA','AAAAxx' -6620,8809,0,0,0,0,20,620,620,1620,6620,40,41,'QUAAAA','VANAAA','HHHHxx' -4000,8810,0,0,0,0,0,0,0,4000,4000,0,1,'WXAAAA','WANAAA','OOOOxx' -659,8811,1,3,9,19,59,659,659,659,659,118,119,'JZAAAA','XANAAA','VVVVxx' -8174,8812,0,2,4,14,74,174,174,3174,8174,148,149,'KCAAAA','YANAAA','AAAAxx' -4599,8813,1,3,9,19,99,599,599,4599,4599,198,199,'XUAAAA','ZANAAA','HHHHxx' -7851,8814,1,3,1,11,51,851,1851,2851,7851,102,103,'ZPAAAA','ABNAAA','OOOOxx' -6284,8815,0,0,4,4,84,284,284,1284,6284,168,169,'SHAAAA','BBNAAA','VVVVxx' -7116,8816,0,0,6,16,16,116,1116,2116,7116,32,33,'SNAAAA','CBNAAA','AAAAxx' -5595,8817,1,3,5,15,95,595,1595,595,5595,190,191,'FHAAAA','DBNAAA','HHHHxx' -2903,8818,1,3,3,3,3,903,903,2903,2903,6,7,'RHAAAA','EBNAAA','OOOOxx' -5948,8819,0,0,8,8,48,948,1948,948,5948,96,97,'UUAAAA','FBNAAA','VVVVxx' -225,8820,1,1,5,5,25,225,225,225,225,50,51,'RIAAAA','GBNAAA','AAAAxx' -524,8821,0,0,4,4,24,524,524,524,524,48,49,'EUAAAA','HBNAAA','HHHHxx' -7639,8822,1,3,9,19,39,639,1639,2639,7639,78,79,'VHAAAA','IBNAAA','OOOOxx' -7297,8823,1,1,7,17,97,297,1297,2297,7297,194,195,'RUAAAA','JBNAAA','VVVVxx' -2606,8824,0,2,6,6,6,606,606,2606,2606,12,13,'GWAAAA','KBNAAA','AAAAxx' -4771,8825,1,3,1,11,71,771,771,4771,4771,142,143,'NBAAAA','LBNAAA','HHHHxx' -8162,8826,0,2,2,2,62,162,162,3162,8162,124,125,'YBAAAA','MBNAAA','OOOOxx' -8999,8827,1,3,9,19,99,999,999,3999,8999,198,199,'DIAAAA','NBNAAA','VVVVxx' -2309,8828,1,1,9,9,9,309,309,2309,2309,18,19,'VKAAAA','OBNAAA','AAAAxx' -3594,8829,0,2,4,14,94,594,1594,3594,3594,188,189,'GIAAAA','PBNAAA','HHHHxx' -6092,8830,0,0,2,12,92,92,92,1092,6092,184,185,'IAAAAA','QBNAAA','OOOOxx' -7467,8831,1,3,7,7,67,467,1467,2467,7467,134,135,'FBAAAA','RBNAAA','VVVVxx' -6986,8832,0,2,6,6,86,986,986,1986,6986,172,173,'SIAAAA','SBNAAA','AAAAxx' -9898,8833,0,2,8,18,98,898,1898,4898,9898,196,197,'SQAAAA','TBNAAA','HHHHxx' -9578,8834,0,2,8,18,78,578,1578,4578,9578,156,157,'KEAAAA','UBNAAA','OOOOxx' -156,8835,0,0,6,16,56,156,156,156,156,112,113,'AGAAAA','VBNAAA','VVVVxx' -5810,8836,0,2,0,10,10,810,1810,810,5810,20,21,'MPAAAA','WBNAAA','AAAAxx' -790,8837,0,2,0,10,90,790,790,790,790,180,181,'KEAAAA','XBNAAA','HHHHxx' -6840,8838,0,0,0,0,40,840,840,1840,6840,80,81,'CDAAAA','YBNAAA','OOOOxx' -6725,8839,1,1,5,5,25,725,725,1725,6725,50,51,'RYAAAA','ZBNAAA','VVVVxx' -5528,8840,0,0,8,8,28,528,1528,528,5528,56,57,'QEAAAA','ACNAAA','AAAAxx' -4120,8841,0,0,0,0,20,120,120,4120,4120,40,41,'MCAAAA','BCNAAA','HHHHxx' -6694,8842,0,2,4,14,94,694,694,1694,6694,188,189,'MXAAAA','CCNAAA','OOOOxx' -3552,8843,0,0,2,12,52,552,1552,3552,3552,104,105,'QGAAAA','DCNAAA','VVVVxx' -1478,8844,0,2,8,18,78,478,1478,1478,1478,156,157,'WEAAAA','ECNAAA','AAAAxx' -8084,8845,0,0,4,4,84,84,84,3084,8084,168,169,'YYAAAA','FCNAAA','HHHHxx' -7578,8846,0,2,8,18,78,578,1578,2578,7578,156,157,'MFAAAA','GCNAAA','OOOOxx' -6314,8847,0,2,4,14,14,314,314,1314,6314,28,29,'WIAAAA','HCNAAA','VVVVxx' -6123,8848,1,3,3,3,23,123,123,1123,6123,46,47,'NBAAAA','ICNAAA','AAAAxx' -9443,8849,1,3,3,3,43,443,1443,4443,9443,86,87,'FZAAAA','JCNAAA','HHHHxx' -9628,8850,0,0,8,8,28,628,1628,4628,9628,56,57,'IGAAAA','KCNAAA','OOOOxx' -8508,8851,0,0,8,8,8,508,508,3508,8508,16,17,'GPAAAA','LCNAAA','VVVVxx' -5552,8852,0,0,2,12,52,552,1552,552,5552,104,105,'OFAAAA','MCNAAA','AAAAxx' -5327,8853,1,3,7,7,27,327,1327,327,5327,54,55,'XWAAAA','NCNAAA','HHHHxx' -7771,8854,1,3,1,11,71,771,1771,2771,7771,142,143,'XMAAAA','OCNAAA','OOOOxx' -8932,8855,0,0,2,12,32,932,932,3932,8932,64,65,'OFAAAA','PCNAAA','VVVVxx' -3526,8856,0,2,6,6,26,526,1526,3526,3526,52,53,'QFAAAA','QCNAAA','AAAAxx' -4340,8857,0,0,0,0,40,340,340,4340,4340,80,81,'YKAAAA','RCNAAA','HHHHxx' -9419,8858,1,3,9,19,19,419,1419,4419,9419,38,39,'HYAAAA','SCNAAA','OOOOxx' -8421,8859,1,1,1,1,21,421,421,3421,8421,42,43,'XLAAAA','TCNAAA','VVVVxx' -7431,8860,1,3,1,11,31,431,1431,2431,7431,62,63,'VZAAAA','UCNAAA','AAAAxx' -172,8861,0,0,2,12,72,172,172,172,172,144,145,'QGAAAA','VCNAAA','HHHHxx' -3279,8862,1,3,9,19,79,279,1279,3279,3279,158,159,'DWAAAA','WCNAAA','OOOOxx' -1508,8863,0,0,8,8,8,508,1508,1508,1508,16,17,'AGAAAA','XCNAAA','VVVVxx' -7091,8864,1,3,1,11,91,91,1091,2091,7091,182,183,'TMAAAA','YCNAAA','AAAAxx' -1419,8865,1,3,9,19,19,419,1419,1419,1419,38,39,'PCAAAA','ZCNAAA','HHHHxx' -3032,8866,0,0,2,12,32,32,1032,3032,3032,64,65,'QMAAAA','ADNAAA','OOOOxx' -8683,8867,1,3,3,3,83,683,683,3683,8683,166,167,'ZVAAAA','BDNAAA','VVVVxx' -4763,8868,1,3,3,3,63,763,763,4763,4763,126,127,'FBAAAA','CDNAAA','AAAAxx' -4424,8869,0,0,4,4,24,424,424,4424,4424,48,49,'EOAAAA','DDNAAA','HHHHxx' -8640,8870,0,0,0,0,40,640,640,3640,8640,80,81,'IUAAAA','EDNAAA','OOOOxx' -7187,8871,1,3,7,7,87,187,1187,2187,7187,174,175,'LQAAAA','FDNAAA','VVVVxx' -6247,8872,1,3,7,7,47,247,247,1247,6247,94,95,'HGAAAA','GDNAAA','AAAAxx' -7340,8873,0,0,0,0,40,340,1340,2340,7340,80,81,'IWAAAA','HDNAAA','HHHHxx' -182,8874,0,2,2,2,82,182,182,182,182,164,165,'AHAAAA','IDNAAA','OOOOxx' -2948,8875,0,0,8,8,48,948,948,2948,2948,96,97,'KJAAAA','JDNAAA','VVVVxx' -9462,8876,0,2,2,2,62,462,1462,4462,9462,124,125,'YZAAAA','KDNAAA','AAAAxx' -5997,8877,1,1,7,17,97,997,1997,997,5997,194,195,'RWAAAA','LDNAAA','HHHHxx' -5608,8878,0,0,8,8,8,608,1608,608,5608,16,17,'SHAAAA','MDNAAA','OOOOxx' -1472,8879,0,0,2,12,72,472,1472,1472,1472,144,145,'QEAAAA','NDNAAA','VVVVxx' -277,8880,1,1,7,17,77,277,277,277,277,154,155,'RKAAAA','ODNAAA','AAAAxx' -4807,8881,1,3,7,7,7,807,807,4807,4807,14,15,'XCAAAA','PDNAAA','HHHHxx' -4969,8882,1,1,9,9,69,969,969,4969,4969,138,139,'DJAAAA','QDNAAA','OOOOxx' -5611,8883,1,3,1,11,11,611,1611,611,5611,22,23,'VHAAAA','RDNAAA','VVVVxx' -372,8884,0,0,2,12,72,372,372,372,372,144,145,'IOAAAA','SDNAAA','AAAAxx' -6666,8885,0,2,6,6,66,666,666,1666,6666,132,133,'KWAAAA','TDNAAA','HHHHxx' -476,8886,0,0,6,16,76,476,476,476,476,152,153,'ISAAAA','UDNAAA','OOOOxx' -5225,8887,1,1,5,5,25,225,1225,225,5225,50,51,'ZSAAAA','VDNAAA','VVVVxx' -5143,8888,1,3,3,3,43,143,1143,143,5143,86,87,'VPAAAA','WDNAAA','AAAAxx' -1853,8889,1,1,3,13,53,853,1853,1853,1853,106,107,'HTAAAA','XDNAAA','HHHHxx' -675,8890,1,3,5,15,75,675,675,675,675,150,151,'ZZAAAA','YDNAAA','OOOOxx' -5643,8891,1,3,3,3,43,643,1643,643,5643,86,87,'BJAAAA','ZDNAAA','VVVVxx' -5317,8892,1,1,7,17,17,317,1317,317,5317,34,35,'NWAAAA','AENAAA','AAAAxx' -8102,8893,0,2,2,2,2,102,102,3102,8102,4,5,'QZAAAA','BENAAA','HHHHxx' -978,8894,0,2,8,18,78,978,978,978,978,156,157,'QLAAAA','CENAAA','OOOOxx' -4620,8895,0,0,0,0,20,620,620,4620,4620,40,41,'SVAAAA','DENAAA','VVVVxx' -151,8896,1,3,1,11,51,151,151,151,151,102,103,'VFAAAA','EENAAA','AAAAxx' -972,8897,0,0,2,12,72,972,972,972,972,144,145,'KLAAAA','FENAAA','HHHHxx' -6820,8898,0,0,0,0,20,820,820,1820,6820,40,41,'ICAAAA','GENAAA','OOOOxx' -7387,8899,1,3,7,7,87,387,1387,2387,7387,174,175,'DYAAAA','HENAAA','VVVVxx' -9634,8900,0,2,4,14,34,634,1634,4634,9634,68,69,'OGAAAA','IENAAA','AAAAxx' -6308,8901,0,0,8,8,8,308,308,1308,6308,16,17,'QIAAAA','JENAAA','HHHHxx' -8323,8902,1,3,3,3,23,323,323,3323,8323,46,47,'DIAAAA','KENAAA','OOOOxx' -6672,8903,0,0,2,12,72,672,672,1672,6672,144,145,'QWAAAA','LENAAA','VVVVxx' -8283,8904,1,3,3,3,83,283,283,3283,8283,166,167,'PGAAAA','MENAAA','AAAAxx' -7996,8905,0,0,6,16,96,996,1996,2996,7996,192,193,'OVAAAA','NENAAA','HHHHxx' -6488,8906,0,0,8,8,88,488,488,1488,6488,176,177,'OPAAAA','OENAAA','OOOOxx' -2365,8907,1,1,5,5,65,365,365,2365,2365,130,131,'ZMAAAA','PENAAA','VVVVxx' -9746,8908,0,2,6,6,46,746,1746,4746,9746,92,93,'WKAAAA','QENAAA','AAAAxx' -8605,8909,1,1,5,5,5,605,605,3605,8605,10,11,'ZSAAAA','RENAAA','HHHHxx' -3342,8910,0,2,2,2,42,342,1342,3342,3342,84,85,'OYAAAA','SENAAA','OOOOxx' -8429,8911,1,1,9,9,29,429,429,3429,8429,58,59,'FMAAAA','TENAAA','VVVVxx' -1162,8912,0,2,2,2,62,162,1162,1162,1162,124,125,'SSAAAA','UENAAA','AAAAxx' -531,8913,1,3,1,11,31,531,531,531,531,62,63,'LUAAAA','VENAAA','HHHHxx' -8408,8914,0,0,8,8,8,408,408,3408,8408,16,17,'KLAAAA','WENAAA','OOOOxx' -8862,8915,0,2,2,2,62,862,862,3862,8862,124,125,'WCAAAA','XENAAA','VVVVxx' -5843,8916,1,3,3,3,43,843,1843,843,5843,86,87,'TQAAAA','YENAAA','AAAAxx' -8704,8917,0,0,4,4,4,704,704,3704,8704,8,9,'UWAAAA','ZENAAA','HHHHxx' -7070,8918,0,2,0,10,70,70,1070,2070,7070,140,141,'YLAAAA','AFNAAA','OOOOxx' -9119,8919,1,3,9,19,19,119,1119,4119,9119,38,39,'TMAAAA','BFNAAA','VVVVxx' -8344,8920,0,0,4,4,44,344,344,3344,8344,88,89,'YIAAAA','CFNAAA','AAAAxx' -8979,8921,1,3,9,19,79,979,979,3979,8979,158,159,'JHAAAA','DFNAAA','HHHHxx' -2971,8922,1,3,1,11,71,971,971,2971,2971,142,143,'HKAAAA','EFNAAA','OOOOxx' -7700,8923,0,0,0,0,0,700,1700,2700,7700,0,1,'EKAAAA','FFNAAA','VVVVxx' -8280,8924,0,0,0,0,80,280,280,3280,8280,160,161,'MGAAAA','GFNAAA','AAAAxx' -9096,8925,0,0,6,16,96,96,1096,4096,9096,192,193,'WLAAAA','HFNAAA','HHHHxx' -99,8926,1,3,9,19,99,99,99,99,99,198,199,'VDAAAA','IFNAAA','OOOOxx' -6696,8927,0,0,6,16,96,696,696,1696,6696,192,193,'OXAAAA','JFNAAA','VVVVxx' -9490,8928,0,2,0,10,90,490,1490,4490,9490,180,181,'ABAAAA','KFNAAA','AAAAxx' -9073,8929,1,1,3,13,73,73,1073,4073,9073,146,147,'ZKAAAA','LFNAAA','HHHHxx' -1861,8930,1,1,1,1,61,861,1861,1861,1861,122,123,'PTAAAA','MFNAAA','OOOOxx' -4413,8931,1,1,3,13,13,413,413,4413,4413,26,27,'TNAAAA','NFNAAA','VVVVxx' -6002,8932,0,2,2,2,2,2,2,1002,6002,4,5,'WWAAAA','OFNAAA','AAAAxx' -439,8933,1,3,9,19,39,439,439,439,439,78,79,'XQAAAA','PFNAAA','HHHHxx' -5449,8934,1,1,9,9,49,449,1449,449,5449,98,99,'PBAAAA','QFNAAA','OOOOxx' -9737,8935,1,1,7,17,37,737,1737,4737,9737,74,75,'NKAAAA','RFNAAA','VVVVxx' -1898,8936,0,2,8,18,98,898,1898,1898,1898,196,197,'AVAAAA','SFNAAA','AAAAxx' -4189,8937,1,1,9,9,89,189,189,4189,4189,178,179,'DFAAAA','TFNAAA','HHHHxx' -1408,8938,0,0,8,8,8,408,1408,1408,1408,16,17,'ECAAAA','UFNAAA','OOOOxx' -394,8939,0,2,4,14,94,394,394,394,394,188,189,'EPAAAA','VFNAAA','VVVVxx' -1935,8940,1,3,5,15,35,935,1935,1935,1935,70,71,'LWAAAA','WFNAAA','AAAAxx' -3965,8941,1,1,5,5,65,965,1965,3965,3965,130,131,'NWAAAA','XFNAAA','HHHHxx' -6821,8942,1,1,1,1,21,821,821,1821,6821,42,43,'JCAAAA','YFNAAA','OOOOxx' -349,8943,1,1,9,9,49,349,349,349,349,98,99,'LNAAAA','ZFNAAA','VVVVxx' -8428,8944,0,0,8,8,28,428,428,3428,8428,56,57,'EMAAAA','AGNAAA','AAAAxx' -8200,8945,0,0,0,0,0,200,200,3200,8200,0,1,'KDAAAA','BGNAAA','HHHHxx' -1737,8946,1,1,7,17,37,737,1737,1737,1737,74,75,'VOAAAA','CGNAAA','OOOOxx' -6516,8947,0,0,6,16,16,516,516,1516,6516,32,33,'QQAAAA','DGNAAA','VVVVxx' -5441,8948,1,1,1,1,41,441,1441,441,5441,82,83,'HBAAAA','EGNAAA','AAAAxx' -5999,8949,1,3,9,19,99,999,1999,999,5999,198,199,'TWAAAA','FGNAAA','HHHHxx' -1539,8950,1,3,9,19,39,539,1539,1539,1539,78,79,'FHAAAA','GGNAAA','OOOOxx' -9067,8951,1,3,7,7,67,67,1067,4067,9067,134,135,'TKAAAA','HGNAAA','VVVVxx' -4061,8952,1,1,1,1,61,61,61,4061,4061,122,123,'FAAAAA','IGNAAA','AAAAxx' -1642,8953,0,2,2,2,42,642,1642,1642,1642,84,85,'ELAAAA','JGNAAA','HHHHxx' -4657,8954,1,1,7,17,57,657,657,4657,4657,114,115,'DXAAAA','KGNAAA','OOOOxx' -9934,8955,0,2,4,14,34,934,1934,4934,9934,68,69,'CSAAAA','LGNAAA','VVVVxx' -6385,8956,1,1,5,5,85,385,385,1385,6385,170,171,'PLAAAA','MGNAAA','AAAAxx' -6775,8957,1,3,5,15,75,775,775,1775,6775,150,151,'PAAAAA','NGNAAA','HHHHxx' -3873,8958,1,1,3,13,73,873,1873,3873,3873,146,147,'ZSAAAA','OGNAAA','OOOOxx' -3862,8959,0,2,2,2,62,862,1862,3862,3862,124,125,'OSAAAA','PGNAAA','VVVVxx' -1224,8960,0,0,4,4,24,224,1224,1224,1224,48,49,'CVAAAA','QGNAAA','AAAAxx' -4483,8961,1,3,3,3,83,483,483,4483,4483,166,167,'LQAAAA','RGNAAA','HHHHxx' -3685,8962,1,1,5,5,85,685,1685,3685,3685,170,171,'TLAAAA','SGNAAA','OOOOxx' -6082,8963,0,2,2,2,82,82,82,1082,6082,164,165,'YZAAAA','TGNAAA','VVVVxx' -7798,8964,0,2,8,18,98,798,1798,2798,7798,196,197,'YNAAAA','UGNAAA','AAAAxx' -9039,8965,1,3,9,19,39,39,1039,4039,9039,78,79,'RJAAAA','VGNAAA','HHHHxx' -985,8966,1,1,5,5,85,985,985,985,985,170,171,'XLAAAA','WGNAAA','OOOOxx' -5389,8967,1,1,9,9,89,389,1389,389,5389,178,179,'HZAAAA','XGNAAA','VVVVxx' -1716,8968,0,0,6,16,16,716,1716,1716,1716,32,33,'AOAAAA','YGNAAA','AAAAxx' -4209,8969,1,1,9,9,9,209,209,4209,4209,18,19,'XFAAAA','ZGNAAA','HHHHxx' -746,8970,0,2,6,6,46,746,746,746,746,92,93,'SCAAAA','AHNAAA','OOOOxx' -6295,8971,1,3,5,15,95,295,295,1295,6295,190,191,'DIAAAA','BHNAAA','VVVVxx' -9754,8972,0,2,4,14,54,754,1754,4754,9754,108,109,'ELAAAA','CHNAAA','AAAAxx' -2336,8973,0,0,6,16,36,336,336,2336,2336,72,73,'WLAAAA','DHNAAA','HHHHxx' -3701,8974,1,1,1,1,1,701,1701,3701,3701,2,3,'JMAAAA','EHNAAA','OOOOxx' -3551,8975,1,3,1,11,51,551,1551,3551,3551,102,103,'PGAAAA','FHNAAA','VVVVxx' -8516,8976,0,0,6,16,16,516,516,3516,8516,32,33,'OPAAAA','GHNAAA','AAAAxx' -9290,8977,0,2,0,10,90,290,1290,4290,9290,180,181,'ITAAAA','HHNAAA','HHHHxx' -5686,8978,0,2,6,6,86,686,1686,686,5686,172,173,'SKAAAA','IHNAAA','OOOOxx' -2893,8979,1,1,3,13,93,893,893,2893,2893,186,187,'HHAAAA','JHNAAA','VVVVxx' -6279,8980,1,3,9,19,79,279,279,1279,6279,158,159,'NHAAAA','KHNAAA','AAAAxx' -2278,8981,0,2,8,18,78,278,278,2278,2278,156,157,'QJAAAA','LHNAAA','HHHHxx' -1618,8982,0,2,8,18,18,618,1618,1618,1618,36,37,'GKAAAA','MHNAAA','OOOOxx' -3450,8983,0,2,0,10,50,450,1450,3450,3450,100,101,'SCAAAA','NHNAAA','VVVVxx' -8857,8984,1,1,7,17,57,857,857,3857,8857,114,115,'RCAAAA','OHNAAA','AAAAxx' -1005,8985,1,1,5,5,5,5,1005,1005,1005,10,11,'RMAAAA','PHNAAA','HHHHxx' -4727,8986,1,3,7,7,27,727,727,4727,4727,54,55,'VZAAAA','QHNAAA','OOOOxx' -7617,8987,1,1,7,17,17,617,1617,2617,7617,34,35,'ZGAAAA','RHNAAA','VVVVxx' -2021,8988,1,1,1,1,21,21,21,2021,2021,42,43,'TZAAAA','SHNAAA','AAAAxx' -9124,8989,0,0,4,4,24,124,1124,4124,9124,48,49,'YMAAAA','THNAAA','HHHHxx' -3175,8990,1,3,5,15,75,175,1175,3175,3175,150,151,'DSAAAA','UHNAAA','OOOOxx' -2949,8991,1,1,9,9,49,949,949,2949,2949,98,99,'LJAAAA','VHNAAA','VVVVxx' -2424,8992,0,0,4,4,24,424,424,2424,2424,48,49,'GPAAAA','WHNAAA','AAAAxx' -4791,8993,1,3,1,11,91,791,791,4791,4791,182,183,'HCAAAA','XHNAAA','HHHHxx' -7500,8994,0,0,0,0,0,500,1500,2500,7500,0,1,'MCAAAA','YHNAAA','OOOOxx' -4893,8995,1,1,3,13,93,893,893,4893,4893,186,187,'FGAAAA','ZHNAAA','VVVVxx' -121,8996,1,1,1,1,21,121,121,121,121,42,43,'REAAAA','AINAAA','AAAAxx' -1965,8997,1,1,5,5,65,965,1965,1965,1965,130,131,'PXAAAA','BINAAA','HHHHxx' -2972,8998,0,0,2,12,72,972,972,2972,2972,144,145,'IKAAAA','CINAAA','OOOOxx' -662,8999,0,2,2,2,62,662,662,662,662,124,125,'MZAAAA','DINAAA','VVVVxx' -7074,9000,0,2,4,14,74,74,1074,2074,7074,148,149,'CMAAAA','EINAAA','AAAAxx' -981,9001,1,1,1,1,81,981,981,981,981,162,163,'TLAAAA','FINAAA','HHHHxx' -3520,9002,0,0,0,0,20,520,1520,3520,3520,40,41,'KFAAAA','GINAAA','OOOOxx' -6540,9003,0,0,0,0,40,540,540,1540,6540,80,81,'ORAAAA','HINAAA','VVVVxx' -6648,9004,0,0,8,8,48,648,648,1648,6648,96,97,'SVAAAA','IINAAA','AAAAxx' -7076,9005,0,0,6,16,76,76,1076,2076,7076,152,153,'EMAAAA','JINAAA','HHHHxx' -6919,9006,1,3,9,19,19,919,919,1919,6919,38,39,'DGAAAA','KINAAA','OOOOxx' -1108,9007,0,0,8,8,8,108,1108,1108,1108,16,17,'QQAAAA','LINAAA','VVVVxx' -317,9008,1,1,7,17,17,317,317,317,317,34,35,'FMAAAA','MINAAA','AAAAxx' -3483,9009,1,3,3,3,83,483,1483,3483,3483,166,167,'ZDAAAA','NINAAA','HHHHxx' -6764,9010,0,0,4,4,64,764,764,1764,6764,128,129,'EAAAAA','OINAAA','OOOOxx' -1235,9011,1,3,5,15,35,235,1235,1235,1235,70,71,'NVAAAA','PINAAA','VVVVxx' -7121,9012,1,1,1,1,21,121,1121,2121,7121,42,43,'XNAAAA','QINAAA','AAAAxx' -426,9013,0,2,6,6,26,426,426,426,426,52,53,'KQAAAA','RINAAA','HHHHxx' -6880,9014,0,0,0,0,80,880,880,1880,6880,160,161,'QEAAAA','SINAAA','OOOOxx' -5401,9015,1,1,1,1,1,401,1401,401,5401,2,3,'TZAAAA','TINAAA','VVVVxx' -7323,9016,1,3,3,3,23,323,1323,2323,7323,46,47,'RVAAAA','UINAAA','AAAAxx' -9751,9017,1,3,1,11,51,751,1751,4751,9751,102,103,'BLAAAA','VINAAA','HHHHxx' -3436,9018,0,0,6,16,36,436,1436,3436,3436,72,73,'ECAAAA','WINAAA','OOOOxx' -7319,9019,1,3,9,19,19,319,1319,2319,7319,38,39,'NVAAAA','XINAAA','VVVVxx' -7882,9020,0,2,2,2,82,882,1882,2882,7882,164,165,'ERAAAA','YINAAA','AAAAxx' -8260,9021,0,0,0,0,60,260,260,3260,8260,120,121,'SFAAAA','ZINAAA','HHHHxx' -9758,9022,0,2,8,18,58,758,1758,4758,9758,116,117,'ILAAAA','AJNAAA','OOOOxx' -4205,9023,1,1,5,5,5,205,205,4205,4205,10,11,'TFAAAA','BJNAAA','VVVVxx' -8884,9024,0,0,4,4,84,884,884,3884,8884,168,169,'SDAAAA','CJNAAA','AAAAxx' -1112,9025,0,0,2,12,12,112,1112,1112,1112,24,25,'UQAAAA','DJNAAA','HHHHxx' -2186,9026,0,2,6,6,86,186,186,2186,2186,172,173,'CGAAAA','EJNAAA','OOOOxx' -8666,9027,0,2,6,6,66,666,666,3666,8666,132,133,'IVAAAA','FJNAAA','VVVVxx' -4325,9028,1,1,5,5,25,325,325,4325,4325,50,51,'JKAAAA','GJNAAA','AAAAxx' -4912,9029,0,0,2,12,12,912,912,4912,4912,24,25,'YGAAAA','HJNAAA','HHHHxx' -6497,9030,1,1,7,17,97,497,497,1497,6497,194,195,'XPAAAA','IJNAAA','OOOOxx' -9072,9031,0,0,2,12,72,72,1072,4072,9072,144,145,'YKAAAA','JJNAAA','VVVVxx' -8899,9032,1,3,9,19,99,899,899,3899,8899,198,199,'HEAAAA','KJNAAA','AAAAxx' -5619,9033,1,3,9,19,19,619,1619,619,5619,38,39,'DIAAAA','LJNAAA','HHHHxx' -4110,9034,0,2,0,10,10,110,110,4110,4110,20,21,'CCAAAA','MJNAAA','OOOOxx' -7025,9035,1,1,5,5,25,25,1025,2025,7025,50,51,'FKAAAA','NJNAAA','VVVVxx' -5605,9036,1,1,5,5,5,605,1605,605,5605,10,11,'PHAAAA','OJNAAA','AAAAxx' -2572,9037,0,0,2,12,72,572,572,2572,2572,144,145,'YUAAAA','PJNAAA','HHHHxx' -3895,9038,1,3,5,15,95,895,1895,3895,3895,190,191,'VTAAAA','QJNAAA','OOOOxx' -9138,9039,0,2,8,18,38,138,1138,4138,9138,76,77,'MNAAAA','RJNAAA','VVVVxx' -4713,9040,1,1,3,13,13,713,713,4713,4713,26,27,'HZAAAA','SJNAAA','AAAAxx' -6079,9041,1,3,9,19,79,79,79,1079,6079,158,159,'VZAAAA','TJNAAA','HHHHxx' -8898,9042,0,2,8,18,98,898,898,3898,8898,196,197,'GEAAAA','UJNAAA','OOOOxx' -2650,9043,0,2,0,10,50,650,650,2650,2650,100,101,'YXAAAA','VJNAAA','VVVVxx' -5316,9044,0,0,6,16,16,316,1316,316,5316,32,33,'MWAAAA','WJNAAA','AAAAxx' -5133,9045,1,1,3,13,33,133,1133,133,5133,66,67,'LPAAAA','XJNAAA','HHHHxx' -2184,9046,0,0,4,4,84,184,184,2184,2184,168,169,'AGAAAA','YJNAAA','OOOOxx' -2728,9047,0,0,8,8,28,728,728,2728,2728,56,57,'YAAAAA','ZJNAAA','VVVVxx' -6737,9048,1,1,7,17,37,737,737,1737,6737,74,75,'DZAAAA','AKNAAA','AAAAxx' -1128,9049,0,0,8,8,28,128,1128,1128,1128,56,57,'KRAAAA','BKNAAA','HHHHxx' -9662,9050,0,2,2,2,62,662,1662,4662,9662,124,125,'QHAAAA','CKNAAA','OOOOxx' -9384,9051,0,0,4,4,84,384,1384,4384,9384,168,169,'YWAAAA','DKNAAA','VVVVxx' -4576,9052,0,0,6,16,76,576,576,4576,4576,152,153,'AUAAAA','EKNAAA','AAAAxx' -9613,9053,1,1,3,13,13,613,1613,4613,9613,26,27,'TFAAAA','FKNAAA','HHHHxx' -4001,9054,1,1,1,1,1,1,1,4001,4001,2,3,'XXAAAA','GKNAAA','OOOOxx' -3628,9055,0,0,8,8,28,628,1628,3628,3628,56,57,'OJAAAA','HKNAAA','VVVVxx' -6968,9056,0,0,8,8,68,968,968,1968,6968,136,137,'AIAAAA','IKNAAA','AAAAxx' -6491,9057,1,3,1,11,91,491,491,1491,6491,182,183,'RPAAAA','JKNAAA','HHHHxx' -1265,9058,1,1,5,5,65,265,1265,1265,1265,130,131,'RWAAAA','KKNAAA','OOOOxx' -6128,9059,0,0,8,8,28,128,128,1128,6128,56,57,'SBAAAA','LKNAAA','VVVVxx' -4274,9060,0,2,4,14,74,274,274,4274,4274,148,149,'KIAAAA','MKNAAA','AAAAxx' -3598,9061,0,2,8,18,98,598,1598,3598,3598,196,197,'KIAAAA','NKNAAA','HHHHxx' -7961,9062,1,1,1,1,61,961,1961,2961,7961,122,123,'FUAAAA','OKNAAA','OOOOxx' -2643,9063,1,3,3,3,43,643,643,2643,2643,86,87,'RXAAAA','PKNAAA','VVVVxx' -4547,9064,1,3,7,7,47,547,547,4547,4547,94,95,'XSAAAA','QKNAAA','AAAAxx' -3568,9065,0,0,8,8,68,568,1568,3568,3568,136,137,'GHAAAA','RKNAAA','HHHHxx' -8954,9066,0,2,4,14,54,954,954,3954,8954,108,109,'KGAAAA','SKNAAA','OOOOxx' -8802,9067,0,2,2,2,2,802,802,3802,8802,4,5,'OAAAAA','TKNAAA','VVVVxx' -7829,9068,1,1,9,9,29,829,1829,2829,7829,58,59,'DPAAAA','UKNAAA','AAAAxx' -1008,9069,0,0,8,8,8,8,1008,1008,1008,16,17,'UMAAAA','VKNAAA','HHHHxx' -3627,9070,1,3,7,7,27,627,1627,3627,3627,54,55,'NJAAAA','WKNAAA','OOOOxx' -3999,9071,1,3,9,19,99,999,1999,3999,3999,198,199,'VXAAAA','XKNAAA','VVVVxx' -7697,9072,1,1,7,17,97,697,1697,2697,7697,194,195,'BKAAAA','YKNAAA','AAAAxx' -9380,9073,0,0,0,0,80,380,1380,4380,9380,160,161,'UWAAAA','ZKNAAA','HHHHxx' -2707,9074,1,3,7,7,7,707,707,2707,2707,14,15,'DAAAAA','ALNAAA','OOOOxx' -4430,9075,0,2,0,10,30,430,430,4430,4430,60,61,'KOAAAA','BLNAAA','VVVVxx' -6440,9076,0,0,0,0,40,440,440,1440,6440,80,81,'SNAAAA','CLNAAA','AAAAxx' -9958,9077,0,2,8,18,58,958,1958,4958,9958,116,117,'ATAAAA','DLNAAA','HHHHxx' -7592,9078,0,0,2,12,92,592,1592,2592,7592,184,185,'AGAAAA','ELNAAA','OOOOxx' -7852,9079,0,0,2,12,52,852,1852,2852,7852,104,105,'AQAAAA','FLNAAA','VVVVxx' -9253,9080,1,1,3,13,53,253,1253,4253,9253,106,107,'XRAAAA','GLNAAA','AAAAxx' -5910,9081,0,2,0,10,10,910,1910,910,5910,20,21,'ITAAAA','HLNAAA','HHHHxx' -7487,9082,1,3,7,7,87,487,1487,2487,7487,174,175,'ZBAAAA','ILNAAA','OOOOxx' -6324,9083,0,0,4,4,24,324,324,1324,6324,48,49,'GJAAAA','JLNAAA','VVVVxx' -5792,9084,0,0,2,12,92,792,1792,792,5792,184,185,'UOAAAA','KLNAAA','AAAAxx' -7390,9085,0,2,0,10,90,390,1390,2390,7390,180,181,'GYAAAA','LLNAAA','HHHHxx' -8534,9086,0,2,4,14,34,534,534,3534,8534,68,69,'GQAAAA','MLNAAA','OOOOxx' -2690,9087,0,2,0,10,90,690,690,2690,2690,180,181,'MZAAAA','NLNAAA','VVVVxx' -3992,9088,0,0,2,12,92,992,1992,3992,3992,184,185,'OXAAAA','OLNAAA','AAAAxx' -6928,9089,0,0,8,8,28,928,928,1928,6928,56,57,'MGAAAA','PLNAAA','HHHHxx' -7815,9090,1,3,5,15,15,815,1815,2815,7815,30,31,'POAAAA','QLNAAA','OOOOxx' -9477,9091,1,1,7,17,77,477,1477,4477,9477,154,155,'NAAAAA','RLNAAA','VVVVxx' -497,9092,1,1,7,17,97,497,497,497,497,194,195,'DTAAAA','SLNAAA','AAAAxx' -7532,9093,0,0,2,12,32,532,1532,2532,7532,64,65,'SDAAAA','TLNAAA','HHHHxx' -9838,9094,0,2,8,18,38,838,1838,4838,9838,76,77,'KOAAAA','ULNAAA','OOOOxx' -1557,9095,1,1,7,17,57,557,1557,1557,1557,114,115,'XHAAAA','VLNAAA','VVVVxx' -2467,9096,1,3,7,7,67,467,467,2467,2467,134,135,'XQAAAA','WLNAAA','AAAAxx' -2367,9097,1,3,7,7,67,367,367,2367,2367,134,135,'BNAAAA','XLNAAA','HHHHxx' -5677,9098,1,1,7,17,77,677,1677,677,5677,154,155,'JKAAAA','YLNAAA','OOOOxx' -6193,9099,1,1,3,13,93,193,193,1193,6193,186,187,'FEAAAA','ZLNAAA','VVVVxx' -7126,9100,0,2,6,6,26,126,1126,2126,7126,52,53,'COAAAA','AMNAAA','AAAAxx' -5264,9101,0,0,4,4,64,264,1264,264,5264,128,129,'MUAAAA','BMNAAA','HHHHxx' -850,9102,0,2,0,10,50,850,850,850,850,100,101,'SGAAAA','CMNAAA','OOOOxx' -4854,9103,0,2,4,14,54,854,854,4854,4854,108,109,'SEAAAA','DMNAAA','VVVVxx' -4414,9104,0,2,4,14,14,414,414,4414,4414,28,29,'UNAAAA','EMNAAA','AAAAxx' -8971,9105,1,3,1,11,71,971,971,3971,8971,142,143,'BHAAAA','FMNAAA','HHHHxx' -9240,9106,0,0,0,0,40,240,1240,4240,9240,80,81,'KRAAAA','GMNAAA','OOOOxx' -7341,9107,1,1,1,1,41,341,1341,2341,7341,82,83,'JWAAAA','HMNAAA','VVVVxx' -3151,9108,1,3,1,11,51,151,1151,3151,3151,102,103,'FRAAAA','IMNAAA','AAAAxx' -1742,9109,0,2,2,2,42,742,1742,1742,1742,84,85,'APAAAA','JMNAAA','HHHHxx' -1347,9110,1,3,7,7,47,347,1347,1347,1347,94,95,'VZAAAA','KMNAAA','OOOOxx' -9418,9111,0,2,8,18,18,418,1418,4418,9418,36,37,'GYAAAA','LMNAAA','VVVVxx' -5452,9112,0,0,2,12,52,452,1452,452,5452,104,105,'SBAAAA','MMNAAA','AAAAxx' -8637,9113,1,1,7,17,37,637,637,3637,8637,74,75,'FUAAAA','NMNAAA','HHHHxx' -8287,9114,1,3,7,7,87,287,287,3287,8287,174,175,'TGAAAA','OMNAAA','OOOOxx' -9865,9115,1,1,5,5,65,865,1865,4865,9865,130,131,'LPAAAA','PMNAAA','VVVVxx' -1664,9116,0,0,4,4,64,664,1664,1664,1664,128,129,'AMAAAA','QMNAAA','AAAAxx' -9933,9117,1,1,3,13,33,933,1933,4933,9933,66,67,'BSAAAA','RMNAAA','HHHHxx' -3416,9118,0,0,6,16,16,416,1416,3416,3416,32,33,'KBAAAA','SMNAAA','OOOOxx' -7981,9119,1,1,1,1,81,981,1981,2981,7981,162,163,'ZUAAAA','TMNAAA','VVVVxx' -1981,9120,1,1,1,1,81,981,1981,1981,1981,162,163,'FYAAAA','UMNAAA','AAAAxx' -441,9121,1,1,1,1,41,441,441,441,441,82,83,'ZQAAAA','VMNAAA','HHHHxx' -1380,9122,0,0,0,0,80,380,1380,1380,1380,160,161,'CBAAAA','WMNAAA','OOOOxx' -7325,9123,1,1,5,5,25,325,1325,2325,7325,50,51,'TVAAAA','XMNAAA','VVVVxx' -5682,9124,0,2,2,2,82,682,1682,682,5682,164,165,'OKAAAA','YMNAAA','AAAAxx' -1024,9125,0,0,4,4,24,24,1024,1024,1024,48,49,'KNAAAA','ZMNAAA','HHHHxx' -1096,9126,0,0,6,16,96,96,1096,1096,1096,192,193,'EQAAAA','ANNAAA','OOOOxx' -4717,9127,1,1,7,17,17,717,717,4717,4717,34,35,'LZAAAA','BNNAAA','VVVVxx' -7948,9128,0,0,8,8,48,948,1948,2948,7948,96,97,'STAAAA','CNNAAA','AAAAxx' -4074,9129,0,2,4,14,74,74,74,4074,4074,148,149,'SAAAAA','DNNAAA','HHHHxx' -211,9130,1,3,1,11,11,211,211,211,211,22,23,'DIAAAA','ENNAAA','OOOOxx' -8993,9131,1,1,3,13,93,993,993,3993,8993,186,187,'XHAAAA','FNNAAA','VVVVxx' -4509,9132,1,1,9,9,9,509,509,4509,4509,18,19,'LRAAAA','GNNAAA','AAAAxx' -823,9133,1,3,3,3,23,823,823,823,823,46,47,'RFAAAA','HNNAAA','HHHHxx' -4747,9134,1,3,7,7,47,747,747,4747,4747,94,95,'PAAAAA','INNAAA','OOOOxx' -6955,9135,1,3,5,15,55,955,955,1955,6955,110,111,'NHAAAA','JNNAAA','VVVVxx' -7922,9136,0,2,2,2,22,922,1922,2922,7922,44,45,'SSAAAA','KNNAAA','AAAAxx' -6936,9137,0,0,6,16,36,936,936,1936,6936,72,73,'UGAAAA','LNNAAA','HHHHxx' -1546,9138,0,2,6,6,46,546,1546,1546,1546,92,93,'MHAAAA','MNNAAA','OOOOxx' -9836,9139,0,0,6,16,36,836,1836,4836,9836,72,73,'IOAAAA','NNNAAA','VVVVxx' -5626,9140,0,2,6,6,26,626,1626,626,5626,52,53,'KIAAAA','ONNAAA','AAAAxx' -4879,9141,1,3,9,19,79,879,879,4879,4879,158,159,'RFAAAA','PNNAAA','HHHHxx' -8590,9142,0,2,0,10,90,590,590,3590,8590,180,181,'KSAAAA','QNNAAA','OOOOxx' -8842,9143,0,2,2,2,42,842,842,3842,8842,84,85,'CCAAAA','RNNAAA','VVVVxx' -6505,9144,1,1,5,5,5,505,505,1505,6505,10,11,'FQAAAA','SNNAAA','AAAAxx' -2803,9145,1,3,3,3,3,803,803,2803,2803,6,7,'VDAAAA','TNNAAA','HHHHxx' -9258,9146,0,2,8,18,58,258,1258,4258,9258,116,117,'CSAAAA','UNNAAA','OOOOxx' -741,9147,1,1,1,1,41,741,741,741,741,82,83,'NCAAAA','VNNAAA','VVVVxx' -1457,9148,1,1,7,17,57,457,1457,1457,1457,114,115,'BEAAAA','WNNAAA','AAAAxx' -5777,9149,1,1,7,17,77,777,1777,777,5777,154,155,'FOAAAA','XNNAAA','HHHHxx' -2883,9150,1,3,3,3,83,883,883,2883,2883,166,167,'XGAAAA','YNNAAA','OOOOxx' -6610,9151,0,2,0,10,10,610,610,1610,6610,20,21,'GUAAAA','ZNNAAA','VVVVxx' -4331,9152,1,3,1,11,31,331,331,4331,4331,62,63,'PKAAAA','AONAAA','AAAAxx' -2712,9153,0,0,2,12,12,712,712,2712,2712,24,25,'IAAAAA','BONAAA','HHHHxx' -9268,9154,0,0,8,8,68,268,1268,4268,9268,136,137,'MSAAAA','CONAAA','OOOOxx' -410,9155,0,2,0,10,10,410,410,410,410,20,21,'UPAAAA','DONAAA','VVVVxx' -9411,9156,1,3,1,11,11,411,1411,4411,9411,22,23,'ZXAAAA','EONAAA','AAAAxx' -4683,9157,1,3,3,3,83,683,683,4683,4683,166,167,'DYAAAA','FONAAA','HHHHxx' -7072,9158,0,0,2,12,72,72,1072,2072,7072,144,145,'AMAAAA','GONAAA','OOOOxx' -5050,9159,0,2,0,10,50,50,1050,50,5050,100,101,'GMAAAA','HONAAA','VVVVxx' -5932,9160,0,0,2,12,32,932,1932,932,5932,64,65,'EUAAAA','IONAAA','AAAAxx' -2756,9161,0,0,6,16,56,756,756,2756,2756,112,113,'ACAAAA','JONAAA','HHHHxx' -9813,9162,1,1,3,13,13,813,1813,4813,9813,26,27,'LNAAAA','KONAAA','OOOOxx' -7388,9163,0,0,8,8,88,388,1388,2388,7388,176,177,'EYAAAA','LONAAA','VVVVxx' -2596,9164,0,0,6,16,96,596,596,2596,2596,192,193,'WVAAAA','MONAAA','AAAAxx' -5102,9165,0,2,2,2,2,102,1102,102,5102,4,5,'GOAAAA','NONAAA','HHHHxx' -208,9166,0,0,8,8,8,208,208,208,208,16,17,'AIAAAA','OONAAA','OOOOxx' -86,9167,0,2,6,6,86,86,86,86,86,172,173,'IDAAAA','PONAAA','VVVVxx' -8127,9168,1,3,7,7,27,127,127,3127,8127,54,55,'PAAAAA','QONAAA','AAAAxx' -5154,9169,0,2,4,14,54,154,1154,154,5154,108,109,'GQAAAA','RONAAA','HHHHxx' -4491,9170,1,3,1,11,91,491,491,4491,4491,182,183,'TQAAAA','SONAAA','OOOOxx' -7423,9171,1,3,3,3,23,423,1423,2423,7423,46,47,'NZAAAA','TONAAA','VVVVxx' -6441,9172,1,1,1,1,41,441,441,1441,6441,82,83,'TNAAAA','UONAAA','AAAAxx' -2920,9173,0,0,0,0,20,920,920,2920,2920,40,41,'IIAAAA','VONAAA','HHHHxx' -6386,9174,0,2,6,6,86,386,386,1386,6386,172,173,'QLAAAA','WONAAA','OOOOxx' -9744,9175,0,0,4,4,44,744,1744,4744,9744,88,89,'UKAAAA','XONAAA','VVVVxx' -2667,9176,1,3,7,7,67,667,667,2667,2667,134,135,'PYAAAA','YONAAA','AAAAxx' -5754,9177,0,2,4,14,54,754,1754,754,5754,108,109,'INAAAA','ZONAAA','HHHHxx' -4645,9178,1,1,5,5,45,645,645,4645,4645,90,91,'RWAAAA','APNAAA','OOOOxx' -4327,9179,1,3,7,7,27,327,327,4327,4327,54,55,'LKAAAA','BPNAAA','VVVVxx' -843,9180,1,3,3,3,43,843,843,843,843,86,87,'LGAAAA','CPNAAA','AAAAxx' -4085,9181,1,1,5,5,85,85,85,4085,4085,170,171,'DBAAAA','DPNAAA','HHHHxx' -2849,9182,1,1,9,9,49,849,849,2849,2849,98,99,'PFAAAA','EPNAAA','OOOOxx' -5734,9183,0,2,4,14,34,734,1734,734,5734,68,69,'OMAAAA','FPNAAA','VVVVxx' -5307,9184,1,3,7,7,7,307,1307,307,5307,14,15,'DWAAAA','GPNAAA','AAAAxx' -8433,9185,1,1,3,13,33,433,433,3433,8433,66,67,'JMAAAA','HPNAAA','HHHHxx' -3031,9186,1,3,1,11,31,31,1031,3031,3031,62,63,'PMAAAA','IPNAAA','OOOOxx' -5714,9187,0,2,4,14,14,714,1714,714,5714,28,29,'ULAAAA','JPNAAA','VVVVxx' -5969,9188,1,1,9,9,69,969,1969,969,5969,138,139,'PVAAAA','KPNAAA','AAAAxx' -2532,9189,0,0,2,12,32,532,532,2532,2532,64,65,'KTAAAA','LPNAAA','HHHHxx' -5219,9190,1,3,9,19,19,219,1219,219,5219,38,39,'TSAAAA','MPNAAA','OOOOxx' -7343,9191,1,3,3,3,43,343,1343,2343,7343,86,87,'LWAAAA','NPNAAA','VVVVxx' -9089,9192,1,1,9,9,89,89,1089,4089,9089,178,179,'PLAAAA','OPNAAA','AAAAxx' -9337,9193,1,1,7,17,37,337,1337,4337,9337,74,75,'DVAAAA','PPNAAA','HHHHxx' -5131,9194,1,3,1,11,31,131,1131,131,5131,62,63,'JPAAAA','QPNAAA','OOOOxx' -6253,9195,1,1,3,13,53,253,253,1253,6253,106,107,'NGAAAA','RPNAAA','VVVVxx' -5140,9196,0,0,0,0,40,140,1140,140,5140,80,81,'SPAAAA','SPNAAA','AAAAxx' -2953,9197,1,1,3,13,53,953,953,2953,2953,106,107,'PJAAAA','TPNAAA','HHHHxx' -4293,9198,1,1,3,13,93,293,293,4293,4293,186,187,'DJAAAA','UPNAAA','OOOOxx' -9974,9199,0,2,4,14,74,974,1974,4974,9974,148,149,'QTAAAA','VPNAAA','VVVVxx' -5061,9200,1,1,1,1,61,61,1061,61,5061,122,123,'RMAAAA','WPNAAA','AAAAxx' -8570,9201,0,2,0,10,70,570,570,3570,8570,140,141,'QRAAAA','XPNAAA','HHHHxx' -9504,9202,0,0,4,4,4,504,1504,4504,9504,8,9,'OBAAAA','YPNAAA','OOOOxx' -604,9203,0,0,4,4,4,604,604,604,604,8,9,'GXAAAA','ZPNAAA','VVVVxx' -4991,9204,1,3,1,11,91,991,991,4991,4991,182,183,'ZJAAAA','AQNAAA','AAAAxx' -880,9205,0,0,0,0,80,880,880,880,880,160,161,'WHAAAA','BQNAAA','HHHHxx' -3861,9206,1,1,1,1,61,861,1861,3861,3861,122,123,'NSAAAA','CQNAAA','OOOOxx' -8262,9207,0,2,2,2,62,262,262,3262,8262,124,125,'UFAAAA','DQNAAA','VVVVxx' -5689,9208,1,1,9,9,89,689,1689,689,5689,178,179,'VKAAAA','EQNAAA','AAAAxx' -1793,9209,1,1,3,13,93,793,1793,1793,1793,186,187,'ZQAAAA','FQNAAA','HHHHxx' -2661,9210,1,1,1,1,61,661,661,2661,2661,122,123,'JYAAAA','GQNAAA','OOOOxx' -7954,9211,0,2,4,14,54,954,1954,2954,7954,108,109,'YTAAAA','HQNAAA','VVVVxx' -1874,9212,0,2,4,14,74,874,1874,1874,1874,148,149,'CUAAAA','IQNAAA','AAAAxx' -2982,9213,0,2,2,2,82,982,982,2982,2982,164,165,'SKAAAA','JQNAAA','HHHHxx' -331,9214,1,3,1,11,31,331,331,331,331,62,63,'TMAAAA','KQNAAA','OOOOxx' -5021,9215,1,1,1,1,21,21,1021,21,5021,42,43,'DLAAAA','LQNAAA','VVVVxx' -9894,9216,0,2,4,14,94,894,1894,4894,9894,188,189,'OQAAAA','MQNAAA','AAAAxx' -7709,9217,1,1,9,9,9,709,1709,2709,7709,18,19,'NKAAAA','NQNAAA','HHHHxx' -4980,9218,0,0,0,0,80,980,980,4980,4980,160,161,'OJAAAA','OQNAAA','OOOOxx' -8249,9219,1,1,9,9,49,249,249,3249,8249,98,99,'HFAAAA','PQNAAA','VVVVxx' -7120,9220,0,0,0,0,20,120,1120,2120,7120,40,41,'WNAAAA','QQNAAA','AAAAxx' -7464,9221,0,0,4,4,64,464,1464,2464,7464,128,129,'CBAAAA','RQNAAA','HHHHxx' -8086,9222,0,2,6,6,86,86,86,3086,8086,172,173,'AZAAAA','SQNAAA','OOOOxx' -3509,9223,1,1,9,9,9,509,1509,3509,3509,18,19,'ZEAAAA','TQNAAA','VVVVxx' -3902,9224,0,2,2,2,2,902,1902,3902,3902,4,5,'CUAAAA','UQNAAA','AAAAxx' -9907,9225,1,3,7,7,7,907,1907,4907,9907,14,15,'BRAAAA','VQNAAA','HHHHxx' -6278,9226,0,2,8,18,78,278,278,1278,6278,156,157,'MHAAAA','WQNAAA','OOOOxx' -9316,9227,0,0,6,16,16,316,1316,4316,9316,32,33,'IUAAAA','XQNAAA','VVVVxx' -2824,9228,0,0,4,4,24,824,824,2824,2824,48,49,'QEAAAA','YQNAAA','AAAAxx' -1558,9229,0,2,8,18,58,558,1558,1558,1558,116,117,'YHAAAA','ZQNAAA','HHHHxx' -5436,9230,0,0,6,16,36,436,1436,436,5436,72,73,'CBAAAA','ARNAAA','OOOOxx' -1161,9231,1,1,1,1,61,161,1161,1161,1161,122,123,'RSAAAA','BRNAAA','VVVVxx' -7569,9232,1,1,9,9,69,569,1569,2569,7569,138,139,'DFAAAA','CRNAAA','AAAAxx' -9614,9233,0,2,4,14,14,614,1614,4614,9614,28,29,'UFAAAA','DRNAAA','HHHHxx' -6970,9234,0,2,0,10,70,970,970,1970,6970,140,141,'CIAAAA','ERNAAA','OOOOxx' -2422,9235,0,2,2,2,22,422,422,2422,2422,44,45,'EPAAAA','FRNAAA','VVVVxx' -8860,9236,0,0,0,0,60,860,860,3860,8860,120,121,'UCAAAA','GRNAAA','AAAAxx' -9912,9237,0,0,2,12,12,912,1912,4912,9912,24,25,'GRAAAA','HRNAAA','HHHHxx' -1109,9238,1,1,9,9,9,109,1109,1109,1109,18,19,'RQAAAA','IRNAAA','OOOOxx' -3286,9239,0,2,6,6,86,286,1286,3286,3286,172,173,'KWAAAA','JRNAAA','VVVVxx' -2277,9240,1,1,7,17,77,277,277,2277,2277,154,155,'PJAAAA','KRNAAA','AAAAxx' -8656,9241,0,0,6,16,56,656,656,3656,8656,112,113,'YUAAAA','LRNAAA','HHHHxx' -4656,9242,0,0,6,16,56,656,656,4656,4656,112,113,'CXAAAA','MRNAAA','OOOOxx' -6965,9243,1,1,5,5,65,965,965,1965,6965,130,131,'XHAAAA','NRNAAA','VVVVxx' -7591,9244,1,3,1,11,91,591,1591,2591,7591,182,183,'ZFAAAA','ORNAAA','AAAAxx' -4883,9245,1,3,3,3,83,883,883,4883,4883,166,167,'VFAAAA','PRNAAA','HHHHxx' -452,9246,0,0,2,12,52,452,452,452,452,104,105,'KRAAAA','QRNAAA','OOOOxx' -4018,9247,0,2,8,18,18,18,18,4018,4018,36,37,'OYAAAA','RRNAAA','VVVVxx' -4066,9248,0,2,6,6,66,66,66,4066,4066,132,133,'KAAAAA','SRNAAA','AAAAxx' -6480,9249,0,0,0,0,80,480,480,1480,6480,160,161,'GPAAAA','TRNAAA','HHHHxx' -8634,9250,0,2,4,14,34,634,634,3634,8634,68,69,'CUAAAA','URNAAA','OOOOxx' -9387,9251,1,3,7,7,87,387,1387,4387,9387,174,175,'BXAAAA','VRNAAA','VVVVxx' -3476,9252,0,0,6,16,76,476,1476,3476,3476,152,153,'SDAAAA','WRNAAA','AAAAxx' -5995,9253,1,3,5,15,95,995,1995,995,5995,190,191,'PWAAAA','XRNAAA','HHHHxx' -9677,9254,1,1,7,17,77,677,1677,4677,9677,154,155,'FIAAAA','YRNAAA','OOOOxx' -3884,9255,0,0,4,4,84,884,1884,3884,3884,168,169,'KTAAAA','ZRNAAA','VVVVxx' -6500,9256,0,0,0,0,0,500,500,1500,6500,0,1,'AQAAAA','ASNAAA','AAAAxx' -7972,9257,0,0,2,12,72,972,1972,2972,7972,144,145,'QUAAAA','BSNAAA','HHHHxx' -5281,9258,1,1,1,1,81,281,1281,281,5281,162,163,'DVAAAA','CSNAAA','OOOOxx' -1288,9259,0,0,8,8,88,288,1288,1288,1288,176,177,'OXAAAA','DSNAAA','VVVVxx' -4366,9260,0,2,6,6,66,366,366,4366,4366,132,133,'YLAAAA','ESNAAA','AAAAxx' -6557,9261,1,1,7,17,57,557,557,1557,6557,114,115,'FSAAAA','FSNAAA','HHHHxx' -7086,9262,0,2,6,6,86,86,1086,2086,7086,172,173,'OMAAAA','GSNAAA','OOOOxx' -6588,9263,0,0,8,8,88,588,588,1588,6588,176,177,'KTAAAA','HSNAAA','VVVVxx' -9062,9264,0,2,2,2,62,62,1062,4062,9062,124,125,'OKAAAA','ISNAAA','AAAAxx' -9230,9265,0,2,0,10,30,230,1230,4230,9230,60,61,'ARAAAA','JSNAAA','HHHHxx' -7672,9266,0,0,2,12,72,672,1672,2672,7672,144,145,'CJAAAA','KSNAAA','OOOOxx' -5204,9267,0,0,4,4,4,204,1204,204,5204,8,9,'ESAAAA','LSNAAA','VVVVxx' -2836,9268,0,0,6,16,36,836,836,2836,2836,72,73,'CFAAAA','MSNAAA','AAAAxx' -7165,9269,1,1,5,5,65,165,1165,2165,7165,130,131,'PPAAAA','NSNAAA','HHHHxx' -971,9270,1,3,1,11,71,971,971,971,971,142,143,'JLAAAA','OSNAAA','OOOOxx' -3851,9271,1,3,1,11,51,851,1851,3851,3851,102,103,'DSAAAA','PSNAAA','VVVVxx' -8593,9272,1,1,3,13,93,593,593,3593,8593,186,187,'NSAAAA','QSNAAA','AAAAxx' -7742,9273,0,2,2,2,42,742,1742,2742,7742,84,85,'ULAAAA','RSNAAA','HHHHxx' -2887,9274,1,3,7,7,87,887,887,2887,2887,174,175,'BHAAAA','SSNAAA','OOOOxx' -8479,9275,1,3,9,19,79,479,479,3479,8479,158,159,'DOAAAA','TSNAAA','VVVVxx' -9514,9276,0,2,4,14,14,514,1514,4514,9514,28,29,'YBAAAA','USNAAA','AAAAxx' -273,9277,1,1,3,13,73,273,273,273,273,146,147,'NKAAAA','VSNAAA','HHHHxx' -2938,9278,0,2,8,18,38,938,938,2938,2938,76,77,'AJAAAA','WSNAAA','OOOOxx' -9793,9279,1,1,3,13,93,793,1793,4793,9793,186,187,'RMAAAA','XSNAAA','VVVVxx' -8050,9280,0,2,0,10,50,50,50,3050,8050,100,101,'QXAAAA','YSNAAA','AAAAxx' -6702,9281,0,2,2,2,2,702,702,1702,6702,4,5,'UXAAAA','ZSNAAA','HHHHxx' -7290,9282,0,2,0,10,90,290,1290,2290,7290,180,181,'KUAAAA','ATNAAA','OOOOxx' -1837,9283,1,1,7,17,37,837,1837,1837,1837,74,75,'RSAAAA','BTNAAA','VVVVxx' -3206,9284,0,2,6,6,6,206,1206,3206,3206,12,13,'ITAAAA','CTNAAA','AAAAxx' -4925,9285,1,1,5,5,25,925,925,4925,4925,50,51,'LHAAAA','DTNAAA','HHHHxx' -5066,9286,0,2,6,6,66,66,1066,66,5066,132,133,'WMAAAA','ETNAAA','OOOOxx' -3401,9287,1,1,1,1,1,401,1401,3401,3401,2,3,'VAAAAA','FTNAAA','VVVVxx' -3474,9288,0,2,4,14,74,474,1474,3474,3474,148,149,'QDAAAA','GTNAAA','AAAAxx' -57,9289,1,1,7,17,57,57,57,57,57,114,115,'FCAAAA','HTNAAA','HHHHxx' -2082,9290,0,2,2,2,82,82,82,2082,2082,164,165,'CCAAAA','ITNAAA','OOOOxx' -100,9291,0,0,0,0,0,100,100,100,100,0,1,'WDAAAA','JTNAAA','VVVVxx' -9665,9292,1,1,5,5,65,665,1665,4665,9665,130,131,'THAAAA','KTNAAA','AAAAxx' -8284,9293,0,0,4,4,84,284,284,3284,8284,168,169,'QGAAAA','LTNAAA','HHHHxx' -958,9294,0,2,8,18,58,958,958,958,958,116,117,'WKAAAA','MTNAAA','OOOOxx' -5282,9295,0,2,2,2,82,282,1282,282,5282,164,165,'EVAAAA','NTNAAA','VVVVxx' -4257,9296,1,1,7,17,57,257,257,4257,4257,114,115,'THAAAA','OTNAAA','AAAAxx' -3160,9297,0,0,0,0,60,160,1160,3160,3160,120,121,'ORAAAA','PTNAAA','HHHHxx' -8449,9298,1,1,9,9,49,449,449,3449,8449,98,99,'ZMAAAA','QTNAAA','OOOOxx' -500,9299,0,0,0,0,0,500,500,500,500,0,1,'GTAAAA','RTNAAA','VVVVxx' -6432,9300,0,0,2,12,32,432,432,1432,6432,64,65,'KNAAAA','STNAAA','AAAAxx' -6220,9301,0,0,0,0,20,220,220,1220,6220,40,41,'GFAAAA','TTNAAA','HHHHxx' -7233,9302,1,1,3,13,33,233,1233,2233,7233,66,67,'FSAAAA','UTNAAA','OOOOxx' -2723,9303,1,3,3,3,23,723,723,2723,2723,46,47,'TAAAAA','VTNAAA','VVVVxx' -1899,9304,1,3,9,19,99,899,1899,1899,1899,198,199,'BVAAAA','WTNAAA','AAAAxx' -7158,9305,0,2,8,18,58,158,1158,2158,7158,116,117,'IPAAAA','XTNAAA','HHHHxx' -202,9306,0,2,2,2,2,202,202,202,202,4,5,'UHAAAA','YTNAAA','OOOOxx' -2286,9307,0,2,6,6,86,286,286,2286,2286,172,173,'YJAAAA','ZTNAAA','VVVVxx' -5356,9308,0,0,6,16,56,356,1356,356,5356,112,113,'AYAAAA','AUNAAA','AAAAxx' -3809,9309,1,1,9,9,9,809,1809,3809,3809,18,19,'NQAAAA','BUNAAA','HHHHxx' -3979,9310,1,3,9,19,79,979,1979,3979,3979,158,159,'BXAAAA','CUNAAA','OOOOxx' -8359,9311,1,3,9,19,59,359,359,3359,8359,118,119,'NJAAAA','DUNAAA','VVVVxx' -3479,9312,1,3,9,19,79,479,1479,3479,3479,158,159,'VDAAAA','EUNAAA','AAAAxx' -4895,9313,1,3,5,15,95,895,895,4895,4895,190,191,'HGAAAA','FUNAAA','HHHHxx' -6059,9314,1,3,9,19,59,59,59,1059,6059,118,119,'BZAAAA','GUNAAA','OOOOxx' -9560,9315,0,0,0,0,60,560,1560,4560,9560,120,121,'SDAAAA','HUNAAA','VVVVxx' -6756,9316,0,0,6,16,56,756,756,1756,6756,112,113,'WZAAAA','IUNAAA','AAAAxx' -7504,9317,0,0,4,4,4,504,1504,2504,7504,8,9,'QCAAAA','JUNAAA','HHHHxx' -6762,9318,0,2,2,2,62,762,762,1762,6762,124,125,'CAAAAA','KUNAAA','OOOOxx' -5304,9319,0,0,4,4,4,304,1304,304,5304,8,9,'AWAAAA','LUNAAA','VVVVxx' -9533,9320,1,1,3,13,33,533,1533,4533,9533,66,67,'RCAAAA','MUNAAA','AAAAxx' -6649,9321,1,1,9,9,49,649,649,1649,6649,98,99,'TVAAAA','NUNAAA','HHHHxx' -38,9322,0,2,8,18,38,38,38,38,38,76,77,'MBAAAA','OUNAAA','OOOOxx' -5713,9323,1,1,3,13,13,713,1713,713,5713,26,27,'TLAAAA','PUNAAA','VVVVxx' -3000,9324,0,0,0,0,0,0,1000,3000,3000,0,1,'KLAAAA','QUNAAA','AAAAxx' -3738,9325,0,2,8,18,38,738,1738,3738,3738,76,77,'UNAAAA','RUNAAA','HHHHxx' -3327,9326,1,3,7,7,27,327,1327,3327,3327,54,55,'ZXAAAA','SUNAAA','OOOOxx' -3922,9327,0,2,2,2,22,922,1922,3922,3922,44,45,'WUAAAA','TUNAAA','VVVVxx' -9245,9328,1,1,5,5,45,245,1245,4245,9245,90,91,'PRAAAA','UUNAAA','AAAAxx' -2172,9329,0,0,2,12,72,172,172,2172,2172,144,145,'OFAAAA','VUNAAA','HHHHxx' -7128,9330,0,0,8,8,28,128,1128,2128,7128,56,57,'EOAAAA','WUNAAA','OOOOxx' -1195,9331,1,3,5,15,95,195,1195,1195,1195,190,191,'ZTAAAA','XUNAAA','VVVVxx' -8445,9332,1,1,5,5,45,445,445,3445,8445,90,91,'VMAAAA','YUNAAA','AAAAxx' -8638,9333,0,2,8,18,38,638,638,3638,8638,76,77,'GUAAAA','ZUNAAA','HHHHxx' -1249,9334,1,1,9,9,49,249,1249,1249,1249,98,99,'BWAAAA','AVNAAA','OOOOxx' -8659,9335,1,3,9,19,59,659,659,3659,8659,118,119,'BVAAAA','BVNAAA','VVVVxx' -3556,9336,0,0,6,16,56,556,1556,3556,3556,112,113,'UGAAAA','CVNAAA','AAAAxx' -3347,9337,1,3,7,7,47,347,1347,3347,3347,94,95,'TYAAAA','DVNAAA','HHHHxx' -3260,9338,0,0,0,0,60,260,1260,3260,3260,120,121,'KVAAAA','EVNAAA','OOOOxx' -5139,9339,1,3,9,19,39,139,1139,139,5139,78,79,'RPAAAA','FVNAAA','VVVVxx' -9991,9340,1,3,1,11,91,991,1991,4991,9991,182,183,'HUAAAA','GVNAAA','AAAAxx' -5499,9341,1,3,9,19,99,499,1499,499,5499,198,199,'NDAAAA','HVNAAA','HHHHxx' -8082,9342,0,2,2,2,82,82,82,3082,8082,164,165,'WYAAAA','IVNAAA','OOOOxx' -1640,9343,0,0,0,0,40,640,1640,1640,1640,80,81,'CLAAAA','JVNAAA','VVVVxx' -8726,9344,0,2,6,6,26,726,726,3726,8726,52,53,'QXAAAA','KVNAAA','AAAAxx' -2339,9345,1,3,9,19,39,339,339,2339,2339,78,79,'ZLAAAA','LVNAAA','HHHHxx' -2601,9346,1,1,1,1,1,601,601,2601,2601,2,3,'BWAAAA','MVNAAA','OOOOxx' -9940,9347,0,0,0,0,40,940,1940,4940,9940,80,81,'ISAAAA','NVNAAA','VVVVxx' -4185,9348,1,1,5,5,85,185,185,4185,4185,170,171,'ZEAAAA','OVNAAA','AAAAxx' -9546,9349,0,2,6,6,46,546,1546,4546,9546,92,93,'EDAAAA','PVNAAA','HHHHxx' -5218,9350,0,2,8,18,18,218,1218,218,5218,36,37,'SSAAAA','QVNAAA','OOOOxx' -4374,9351,0,2,4,14,74,374,374,4374,4374,148,149,'GMAAAA','RVNAAA','VVVVxx' -288,9352,0,0,8,8,88,288,288,288,288,176,177,'CLAAAA','SVNAAA','AAAAxx' -7445,9353,1,1,5,5,45,445,1445,2445,7445,90,91,'JAAAAA','TVNAAA','HHHHxx' -1710,9354,0,2,0,10,10,710,1710,1710,1710,20,21,'UNAAAA','UVNAAA','OOOOxx' -6409,9355,1,1,9,9,9,409,409,1409,6409,18,19,'NMAAAA','VVNAAA','VVVVxx' -7982,9356,0,2,2,2,82,982,1982,2982,7982,164,165,'AVAAAA','WVNAAA','AAAAxx' -4950,9357,0,2,0,10,50,950,950,4950,4950,100,101,'KIAAAA','XVNAAA','HHHHxx' -9242,9358,0,2,2,2,42,242,1242,4242,9242,84,85,'MRAAAA','YVNAAA','OOOOxx' -3272,9359,0,0,2,12,72,272,1272,3272,3272,144,145,'WVAAAA','ZVNAAA','VVVVxx' -739,9360,1,3,9,19,39,739,739,739,739,78,79,'LCAAAA','AWNAAA','AAAAxx' -5526,9361,0,2,6,6,26,526,1526,526,5526,52,53,'OEAAAA','BWNAAA','HHHHxx' -8189,9362,1,1,9,9,89,189,189,3189,8189,178,179,'ZCAAAA','CWNAAA','OOOOxx' -9106,9363,0,2,6,6,6,106,1106,4106,9106,12,13,'GMAAAA','DWNAAA','VVVVxx' -9775,9364,1,3,5,15,75,775,1775,4775,9775,150,151,'ZLAAAA','EWNAAA','AAAAxx' -4643,9365,1,3,3,3,43,643,643,4643,4643,86,87,'PWAAAA','FWNAAA','HHHHxx' -8396,9366,0,0,6,16,96,396,396,3396,8396,192,193,'YKAAAA','GWNAAA','OOOOxx' -3255,9367,1,3,5,15,55,255,1255,3255,3255,110,111,'FVAAAA','HWNAAA','VVVVxx' -301,9368,1,1,1,1,1,301,301,301,301,2,3,'PLAAAA','IWNAAA','AAAAxx' -6014,9369,0,2,4,14,14,14,14,1014,6014,28,29,'IXAAAA','JWNAAA','HHHHxx' -6046,9370,0,2,6,6,46,46,46,1046,6046,92,93,'OYAAAA','KWNAAA','OOOOxx' -984,9371,0,0,4,4,84,984,984,984,984,168,169,'WLAAAA','LWNAAA','VVVVxx' -2420,9372,0,0,0,0,20,420,420,2420,2420,40,41,'CPAAAA','MWNAAA','AAAAxx' -2922,9373,0,2,2,2,22,922,922,2922,2922,44,45,'KIAAAA','NWNAAA','HHHHxx' -2317,9374,1,1,7,17,17,317,317,2317,2317,34,35,'DLAAAA','OWNAAA','OOOOxx' -7332,9375,0,0,2,12,32,332,1332,2332,7332,64,65,'AWAAAA','PWNAAA','VVVVxx' -6451,9376,1,3,1,11,51,451,451,1451,6451,102,103,'DOAAAA','QWNAAA','AAAAxx' -2589,9377,1,1,9,9,89,589,589,2589,2589,178,179,'PVAAAA','RWNAAA','HHHHxx' -4333,9378,1,1,3,13,33,333,333,4333,4333,66,67,'RKAAAA','SWNAAA','OOOOxx' -8650,9379,0,2,0,10,50,650,650,3650,8650,100,101,'SUAAAA','TWNAAA','VVVVxx' -6856,9380,0,0,6,16,56,856,856,1856,6856,112,113,'SDAAAA','UWNAAA','AAAAxx' -4194,9381,0,2,4,14,94,194,194,4194,4194,188,189,'IFAAAA','VWNAAA','HHHHxx' -6246,9382,0,2,6,6,46,246,246,1246,6246,92,93,'GGAAAA','WWNAAA','OOOOxx' -4371,9383,1,3,1,11,71,371,371,4371,4371,142,143,'DMAAAA','XWNAAA','VVVVxx' -1388,9384,0,0,8,8,88,388,1388,1388,1388,176,177,'KBAAAA','YWNAAA','AAAAxx' -1056,9385,0,0,6,16,56,56,1056,1056,1056,112,113,'QOAAAA','ZWNAAA','HHHHxx' -6041,9386,1,1,1,1,41,41,41,1041,6041,82,83,'JYAAAA','AXNAAA','OOOOxx' -6153,9387,1,1,3,13,53,153,153,1153,6153,106,107,'RCAAAA','BXNAAA','VVVVxx' -8450,9388,0,2,0,10,50,450,450,3450,8450,100,101,'ANAAAA','CXNAAA','AAAAxx' -3469,9389,1,1,9,9,69,469,1469,3469,3469,138,139,'LDAAAA','DXNAAA','HHHHxx' -5226,9390,0,2,6,6,26,226,1226,226,5226,52,53,'ATAAAA','EXNAAA','OOOOxx' -8112,9391,0,0,2,12,12,112,112,3112,8112,24,25,'AAAAAA','FXNAAA','VVVVxx' -647,9392,1,3,7,7,47,647,647,647,647,94,95,'XYAAAA','GXNAAA','AAAAxx' -2567,9393,1,3,7,7,67,567,567,2567,2567,134,135,'TUAAAA','HXNAAA','HHHHxx' -9064,9394,0,0,4,4,64,64,1064,4064,9064,128,129,'QKAAAA','IXNAAA','OOOOxx' -5161,9395,1,1,1,1,61,161,1161,161,5161,122,123,'NQAAAA','JXNAAA','VVVVxx' -5260,9396,0,0,0,0,60,260,1260,260,5260,120,121,'IUAAAA','KXNAAA','AAAAxx' -8988,9397,0,0,8,8,88,988,988,3988,8988,176,177,'SHAAAA','LXNAAA','HHHHxx' -9678,9398,0,2,8,18,78,678,1678,4678,9678,156,157,'GIAAAA','MXNAAA','OOOOxx' -6853,9399,1,1,3,13,53,853,853,1853,6853,106,107,'PDAAAA','NXNAAA','VVVVxx' -5294,9400,0,2,4,14,94,294,1294,294,5294,188,189,'QVAAAA','OXNAAA','AAAAxx' -9864,9401,0,0,4,4,64,864,1864,4864,9864,128,129,'KPAAAA','PXNAAA','HHHHxx' -8702,9402,0,2,2,2,2,702,702,3702,8702,4,5,'SWAAAA','QXNAAA','OOOOxx' -1132,9403,0,0,2,12,32,132,1132,1132,1132,64,65,'ORAAAA','RXNAAA','VVVVxx' -1524,9404,0,0,4,4,24,524,1524,1524,1524,48,49,'QGAAAA','SXNAAA','AAAAxx' -4560,9405,0,0,0,0,60,560,560,4560,4560,120,121,'KTAAAA','TXNAAA','HHHHxx' -2137,9406,1,1,7,17,37,137,137,2137,2137,74,75,'FEAAAA','UXNAAA','OOOOxx' -3283,9407,1,3,3,3,83,283,1283,3283,3283,166,167,'HWAAAA','VXNAAA','VVVVxx' -3377,9408,1,1,7,17,77,377,1377,3377,3377,154,155,'XZAAAA','WXNAAA','AAAAxx' -2267,9409,1,3,7,7,67,267,267,2267,2267,134,135,'FJAAAA','XXNAAA','HHHHxx' -8987,9410,1,3,7,7,87,987,987,3987,8987,174,175,'RHAAAA','YXNAAA','OOOOxx' -6709,9411,1,1,9,9,9,709,709,1709,6709,18,19,'BYAAAA','ZXNAAA','VVVVxx' -8059,9412,1,3,9,19,59,59,59,3059,8059,118,119,'ZXAAAA','AYNAAA','AAAAxx' -3402,9413,0,2,2,2,2,402,1402,3402,3402,4,5,'WAAAAA','BYNAAA','HHHHxx' -6443,9414,1,3,3,3,43,443,443,1443,6443,86,87,'VNAAAA','CYNAAA','OOOOxx' -8858,9415,0,2,8,18,58,858,858,3858,8858,116,117,'SCAAAA','DYNAAA','VVVVxx' -3974,9416,0,2,4,14,74,974,1974,3974,3974,148,149,'WWAAAA','EYNAAA','AAAAxx' -3521,9417,1,1,1,1,21,521,1521,3521,3521,42,43,'LFAAAA','FYNAAA','HHHHxx' -9509,9418,1,1,9,9,9,509,1509,4509,9509,18,19,'TBAAAA','GYNAAA','OOOOxx' -5442,9419,0,2,2,2,42,442,1442,442,5442,84,85,'IBAAAA','HYNAAA','VVVVxx' -8968,9420,0,0,8,8,68,968,968,3968,8968,136,137,'YGAAAA','IYNAAA','AAAAxx' -333,9421,1,1,3,13,33,333,333,333,333,66,67,'VMAAAA','JYNAAA','HHHHxx' -952,9422,0,0,2,12,52,952,952,952,952,104,105,'QKAAAA','KYNAAA','OOOOxx' -7482,9423,0,2,2,2,82,482,1482,2482,7482,164,165,'UBAAAA','LYNAAA','VVVVxx' -1486,9424,0,2,6,6,86,486,1486,1486,1486,172,173,'EFAAAA','MYNAAA','AAAAxx' -1815,9425,1,3,5,15,15,815,1815,1815,1815,30,31,'VRAAAA','NYNAAA','HHHHxx' -7937,9426,1,1,7,17,37,937,1937,2937,7937,74,75,'HTAAAA','OYNAAA','OOOOxx' -1436,9427,0,0,6,16,36,436,1436,1436,1436,72,73,'GDAAAA','PYNAAA','VVVVxx' -3470,9428,0,2,0,10,70,470,1470,3470,3470,140,141,'MDAAAA','QYNAAA','AAAAxx' -8195,9429,1,3,5,15,95,195,195,3195,8195,190,191,'FDAAAA','RYNAAA','HHHHxx' -6906,9430,0,2,6,6,6,906,906,1906,6906,12,13,'QFAAAA','SYNAAA','OOOOxx' -2539,9431,1,3,9,19,39,539,539,2539,2539,78,79,'RTAAAA','TYNAAA','VVVVxx' -5988,9432,0,0,8,8,88,988,1988,988,5988,176,177,'IWAAAA','UYNAAA','AAAAxx' -8908,9433,0,0,8,8,8,908,908,3908,8908,16,17,'QEAAAA','VYNAAA','HHHHxx' -2319,9434,1,3,9,19,19,319,319,2319,2319,38,39,'FLAAAA','WYNAAA','OOOOxx' -3263,9435,1,3,3,3,63,263,1263,3263,3263,126,127,'NVAAAA','XYNAAA','VVVVxx' -4039,9436,1,3,9,19,39,39,39,4039,4039,78,79,'JZAAAA','YYNAAA','AAAAxx' -6373,9437,1,1,3,13,73,373,373,1373,6373,146,147,'DLAAAA','ZYNAAA','HHHHxx' -1168,9438,0,0,8,8,68,168,1168,1168,1168,136,137,'YSAAAA','AZNAAA','OOOOxx' -8338,9439,0,2,8,18,38,338,338,3338,8338,76,77,'SIAAAA','BZNAAA','VVVVxx' -1172,9440,0,0,2,12,72,172,1172,1172,1172,144,145,'CTAAAA','CZNAAA','AAAAxx' -200,9441,0,0,0,0,0,200,200,200,200,0,1,'SHAAAA','DZNAAA','HHHHxx' -6355,9442,1,3,5,15,55,355,355,1355,6355,110,111,'LKAAAA','EZNAAA','OOOOxx' -7768,9443,0,0,8,8,68,768,1768,2768,7768,136,137,'UMAAAA','FZNAAA','VVVVxx' -25,9444,1,1,5,5,25,25,25,25,25,50,51,'ZAAAAA','GZNAAA','AAAAxx' -7144,9445,0,0,4,4,44,144,1144,2144,7144,88,89,'UOAAAA','HZNAAA','HHHHxx' -8671,9446,1,3,1,11,71,671,671,3671,8671,142,143,'NVAAAA','IZNAAA','OOOOxx' -9163,9447,1,3,3,3,63,163,1163,4163,9163,126,127,'LOAAAA','JZNAAA','VVVVxx' -8889,9448,1,1,9,9,89,889,889,3889,8889,178,179,'XDAAAA','KZNAAA','AAAAxx' -5950,9449,0,2,0,10,50,950,1950,950,5950,100,101,'WUAAAA','LZNAAA','HHHHxx' -6163,9450,1,3,3,3,63,163,163,1163,6163,126,127,'BDAAAA','MZNAAA','OOOOxx' -8119,9451,1,3,9,19,19,119,119,3119,8119,38,39,'HAAAAA','NZNAAA','VVVVxx' -1416,9452,0,0,6,16,16,416,1416,1416,1416,32,33,'MCAAAA','OZNAAA','AAAAxx' -4132,9453,0,0,2,12,32,132,132,4132,4132,64,65,'YCAAAA','PZNAAA','HHHHxx' -2294,9454,0,2,4,14,94,294,294,2294,2294,188,189,'GKAAAA','QZNAAA','OOOOxx' -9094,9455,0,2,4,14,94,94,1094,4094,9094,188,189,'ULAAAA','RZNAAA','VVVVxx' -4168,9456,0,0,8,8,68,168,168,4168,4168,136,137,'IEAAAA','SZNAAA','AAAAxx' -9108,9457,0,0,8,8,8,108,1108,4108,9108,16,17,'IMAAAA','TZNAAA','HHHHxx' -5706,9458,0,2,6,6,6,706,1706,706,5706,12,13,'MLAAAA','UZNAAA','OOOOxx' -2231,9459,1,3,1,11,31,231,231,2231,2231,62,63,'VHAAAA','VZNAAA','VVVVxx' -2173,9460,1,1,3,13,73,173,173,2173,2173,146,147,'PFAAAA','WZNAAA','AAAAxx' -90,9461,0,2,0,10,90,90,90,90,90,180,181,'MDAAAA','XZNAAA','HHHHxx' -9996,9462,0,0,6,16,96,996,1996,4996,9996,192,193,'MUAAAA','YZNAAA','OOOOxx' -330,9463,0,2,0,10,30,330,330,330,330,60,61,'SMAAAA','ZZNAAA','VVVVxx' -2052,9464,0,0,2,12,52,52,52,2052,2052,104,105,'YAAAAA','AAOAAA','AAAAxx' -1093,9465,1,1,3,13,93,93,1093,1093,1093,186,187,'BQAAAA','BAOAAA','HHHHxx' -5817,9466,1,1,7,17,17,817,1817,817,5817,34,35,'TPAAAA','CAOAAA','OOOOxx' -1559,9467,1,3,9,19,59,559,1559,1559,1559,118,119,'ZHAAAA','DAOAAA','VVVVxx' -8405,9468,1,1,5,5,5,405,405,3405,8405,10,11,'HLAAAA','EAOAAA','AAAAxx' -9962,9469,0,2,2,2,62,962,1962,4962,9962,124,125,'ETAAAA','FAOAAA','HHHHxx' -9461,9470,1,1,1,1,61,461,1461,4461,9461,122,123,'XZAAAA','GAOAAA','OOOOxx' -3028,9471,0,0,8,8,28,28,1028,3028,3028,56,57,'MMAAAA','HAOAAA','VVVVxx' -6814,9472,0,2,4,14,14,814,814,1814,6814,28,29,'CCAAAA','IAOAAA','AAAAxx' -9587,9473,1,3,7,7,87,587,1587,4587,9587,174,175,'TEAAAA','JAOAAA','HHHHxx' -6863,9474,1,3,3,3,63,863,863,1863,6863,126,127,'ZDAAAA','KAOAAA','OOOOxx' -4963,9475,1,3,3,3,63,963,963,4963,4963,126,127,'XIAAAA','LAOAAA','VVVVxx' -7811,9476,1,3,1,11,11,811,1811,2811,7811,22,23,'LOAAAA','MAOAAA','AAAAxx' -7608,9477,0,0,8,8,8,608,1608,2608,7608,16,17,'QGAAAA','NAOAAA','HHHHxx' -5321,9478,1,1,1,1,21,321,1321,321,5321,42,43,'RWAAAA','OAOAAA','OOOOxx' -9971,9479,1,3,1,11,71,971,1971,4971,9971,142,143,'NTAAAA','PAOAAA','VVVVxx' -6161,9480,1,1,1,1,61,161,161,1161,6161,122,123,'ZCAAAA','QAOAAA','AAAAxx' -2181,9481,1,1,1,1,81,181,181,2181,2181,162,163,'XFAAAA','RAOAAA','HHHHxx' -3828,9482,0,0,8,8,28,828,1828,3828,3828,56,57,'GRAAAA','SAOAAA','OOOOxx' -348,9483,0,0,8,8,48,348,348,348,348,96,97,'KNAAAA','TAOAAA','VVVVxx' -5459,9484,1,3,9,19,59,459,1459,459,5459,118,119,'ZBAAAA','UAOAAA','AAAAxx' -9406,9485,0,2,6,6,6,406,1406,4406,9406,12,13,'UXAAAA','VAOAAA','HHHHxx' -9852,9486,0,0,2,12,52,852,1852,4852,9852,104,105,'YOAAAA','WAOAAA','OOOOxx' -3095,9487,1,3,5,15,95,95,1095,3095,3095,190,191,'BPAAAA','XAOAAA','VVVVxx' -5597,9488,1,1,7,17,97,597,1597,597,5597,194,195,'HHAAAA','YAOAAA','AAAAxx' -8841,9489,1,1,1,1,41,841,841,3841,8841,82,83,'BCAAAA','ZAOAAA','HHHHxx' -3536,9490,0,0,6,16,36,536,1536,3536,3536,72,73,'AGAAAA','ABOAAA','OOOOxx' -4009,9491,1,1,9,9,9,9,9,4009,4009,18,19,'FYAAAA','BBOAAA','VVVVxx' -7366,9492,0,2,6,6,66,366,1366,2366,7366,132,133,'IXAAAA','CBOAAA','AAAAxx' -7327,9493,1,3,7,7,27,327,1327,2327,7327,54,55,'VVAAAA','DBOAAA','HHHHxx' -1613,9494,1,1,3,13,13,613,1613,1613,1613,26,27,'BKAAAA','EBOAAA','OOOOxx' -8619,9495,1,3,9,19,19,619,619,3619,8619,38,39,'NTAAAA','FBOAAA','VVVVxx' -4880,9496,0,0,0,0,80,880,880,4880,4880,160,161,'SFAAAA','GBOAAA','AAAAxx' -1552,9497,0,0,2,12,52,552,1552,1552,1552,104,105,'SHAAAA','HBOAAA','HHHHxx' -7636,9498,0,0,6,16,36,636,1636,2636,7636,72,73,'SHAAAA','IBOAAA','OOOOxx' -8397,9499,1,1,7,17,97,397,397,3397,8397,194,195,'ZKAAAA','JBOAAA','VVVVxx' -6224,9500,0,0,4,4,24,224,224,1224,6224,48,49,'KFAAAA','KBOAAA','AAAAxx' -9102,9501,0,2,2,2,2,102,1102,4102,9102,4,5,'CMAAAA','LBOAAA','HHHHxx' -7906,9502,0,2,6,6,6,906,1906,2906,7906,12,13,'CSAAAA','MBOAAA','OOOOxx' -9467,9503,1,3,7,7,67,467,1467,4467,9467,134,135,'DAAAAA','NBOAAA','VVVVxx' -828,9504,0,0,8,8,28,828,828,828,828,56,57,'WFAAAA','OBOAAA','AAAAxx' -9585,9505,1,1,5,5,85,585,1585,4585,9585,170,171,'REAAAA','PBOAAA','HHHHxx' -925,9506,1,1,5,5,25,925,925,925,925,50,51,'PJAAAA','QBOAAA','OOOOxx' -7375,9507,1,3,5,15,75,375,1375,2375,7375,150,151,'RXAAAA','RBOAAA','VVVVxx' -4027,9508,1,3,7,7,27,27,27,4027,4027,54,55,'XYAAAA','SBOAAA','AAAAxx' -766,9509,0,2,6,6,66,766,766,766,766,132,133,'MDAAAA','TBOAAA','HHHHxx' -5633,9510,1,1,3,13,33,633,1633,633,5633,66,67,'RIAAAA','UBOAAA','OOOOxx' -5648,9511,0,0,8,8,48,648,1648,648,5648,96,97,'GJAAAA','VBOAAA','VVVVxx' -148,9512,0,0,8,8,48,148,148,148,148,96,97,'SFAAAA','WBOAAA','AAAAxx' -2072,9513,0,0,2,12,72,72,72,2072,2072,144,145,'SBAAAA','XBOAAA','HHHHxx' -431,9514,1,3,1,11,31,431,431,431,431,62,63,'PQAAAA','YBOAAA','OOOOxx' -1711,9515,1,3,1,11,11,711,1711,1711,1711,22,23,'VNAAAA','ZBOAAA','VVVVxx' -9378,9516,0,2,8,18,78,378,1378,4378,9378,156,157,'SWAAAA','ACOAAA','AAAAxx' -6776,9517,0,0,6,16,76,776,776,1776,6776,152,153,'QAAAAA','BCOAAA','HHHHxx' -6842,9518,0,2,2,2,42,842,842,1842,6842,84,85,'EDAAAA','CCOAAA','OOOOxx' -2656,9519,0,0,6,16,56,656,656,2656,2656,112,113,'EYAAAA','DCOAAA','VVVVxx' -3116,9520,0,0,6,16,16,116,1116,3116,3116,32,33,'WPAAAA','ECOAAA','AAAAxx' -7904,9521,0,0,4,4,4,904,1904,2904,7904,8,9,'ASAAAA','FCOAAA','HHHHxx' -3529,9522,1,1,9,9,29,529,1529,3529,3529,58,59,'TFAAAA','GCOAAA','OOOOxx' -3240,9523,0,0,0,0,40,240,1240,3240,3240,80,81,'QUAAAA','HCOAAA','VVVVxx' -5801,9524,1,1,1,1,1,801,1801,801,5801,2,3,'DPAAAA','ICOAAA','AAAAxx' -4090,9525,0,2,0,10,90,90,90,4090,4090,180,181,'IBAAAA','JCOAAA','HHHHxx' -7687,9526,1,3,7,7,87,687,1687,2687,7687,174,175,'RJAAAA','KCOAAA','OOOOxx' -9711,9527,1,3,1,11,11,711,1711,4711,9711,22,23,'NJAAAA','LCOAAA','VVVVxx' -4760,9528,0,0,0,0,60,760,760,4760,4760,120,121,'CBAAAA','MCOAAA','AAAAxx' -5524,9529,0,0,4,4,24,524,1524,524,5524,48,49,'MEAAAA','NCOAAA','HHHHxx' -2251,9530,1,3,1,11,51,251,251,2251,2251,102,103,'PIAAAA','OCOAAA','OOOOxx' -1511,9531,1,3,1,11,11,511,1511,1511,1511,22,23,'DGAAAA','PCOAAA','VVVVxx' -5991,9532,1,3,1,11,91,991,1991,991,5991,182,183,'LWAAAA','QCOAAA','AAAAxx' -7808,9533,0,0,8,8,8,808,1808,2808,7808,16,17,'IOAAAA','RCOAAA','HHHHxx' -8708,9534,0,0,8,8,8,708,708,3708,8708,16,17,'YWAAAA','SCOAAA','OOOOxx' -8939,9535,1,3,9,19,39,939,939,3939,8939,78,79,'VFAAAA','TCOAAA','VVVVxx' -4295,9536,1,3,5,15,95,295,295,4295,4295,190,191,'FJAAAA','UCOAAA','AAAAxx' -5905,9537,1,1,5,5,5,905,1905,905,5905,10,11,'DTAAAA','VCOAAA','HHHHxx' -2649,9538,1,1,9,9,49,649,649,2649,2649,98,99,'XXAAAA','WCOAAA','OOOOxx' -2347,9539,1,3,7,7,47,347,347,2347,2347,94,95,'HMAAAA','XCOAAA','VVVVxx' -6339,9540,1,3,9,19,39,339,339,1339,6339,78,79,'VJAAAA','YCOAAA','AAAAxx' -292,9541,0,0,2,12,92,292,292,292,292,184,185,'GLAAAA','ZCOAAA','HHHHxx' -9314,9542,0,2,4,14,14,314,1314,4314,9314,28,29,'GUAAAA','ADOAAA','OOOOxx' -6893,9543,1,1,3,13,93,893,893,1893,6893,186,187,'DFAAAA','BDOAAA','VVVVxx' -3970,9544,0,2,0,10,70,970,1970,3970,3970,140,141,'SWAAAA','CDOAAA','AAAAxx' -1652,9545,0,0,2,12,52,652,1652,1652,1652,104,105,'OLAAAA','DDOAAA','HHHHxx' -4326,9546,0,2,6,6,26,326,326,4326,4326,52,53,'KKAAAA','EDOAAA','OOOOxx' -7881,9547,1,1,1,1,81,881,1881,2881,7881,162,163,'DRAAAA','FDOAAA','VVVVxx' -5291,9548,1,3,1,11,91,291,1291,291,5291,182,183,'NVAAAA','GDOAAA','AAAAxx' -957,9549,1,1,7,17,57,957,957,957,957,114,115,'VKAAAA','HDOAAA','HHHHxx' -2313,9550,1,1,3,13,13,313,313,2313,2313,26,27,'ZKAAAA','IDOAAA','OOOOxx' -5463,9551,1,3,3,3,63,463,1463,463,5463,126,127,'DCAAAA','JDOAAA','VVVVxx' -1268,9552,0,0,8,8,68,268,1268,1268,1268,136,137,'UWAAAA','KDOAAA','AAAAxx' -5028,9553,0,0,8,8,28,28,1028,28,5028,56,57,'KLAAAA','LDOAAA','HHHHxx' -656,9554,0,0,6,16,56,656,656,656,656,112,113,'GZAAAA','MDOAAA','OOOOxx' -9274,9555,0,2,4,14,74,274,1274,4274,9274,148,149,'SSAAAA','NDOAAA','VVVVxx' -8217,9556,1,1,7,17,17,217,217,3217,8217,34,35,'BEAAAA','ODOAAA','AAAAxx' -2175,9557,1,3,5,15,75,175,175,2175,2175,150,151,'RFAAAA','PDOAAA','HHHHxx' -6028,9558,0,0,8,8,28,28,28,1028,6028,56,57,'WXAAAA','QDOAAA','OOOOxx' -7584,9559,0,0,4,4,84,584,1584,2584,7584,168,169,'SFAAAA','RDOAAA','VVVVxx' -4114,9560,0,2,4,14,14,114,114,4114,4114,28,29,'GCAAAA','SDOAAA','AAAAxx' -8894,9561,0,2,4,14,94,894,894,3894,8894,188,189,'CEAAAA','TDOAAA','HHHHxx' -781,9562,1,1,1,1,81,781,781,781,781,162,163,'BEAAAA','UDOAAA','OOOOxx' -133,9563,1,1,3,13,33,133,133,133,133,66,67,'DFAAAA','VDOAAA','VVVVxx' -7572,9564,0,0,2,12,72,572,1572,2572,7572,144,145,'GFAAAA','WDOAAA','AAAAxx' -8514,9565,0,2,4,14,14,514,514,3514,8514,28,29,'MPAAAA','XDOAAA','HHHHxx' -3352,9566,0,0,2,12,52,352,1352,3352,3352,104,105,'YYAAAA','YDOAAA','OOOOxx' -8098,9567,0,2,8,18,98,98,98,3098,8098,196,197,'MZAAAA','ZDOAAA','VVVVxx' -9116,9568,0,0,6,16,16,116,1116,4116,9116,32,33,'QMAAAA','AEOAAA','AAAAxx' -9444,9569,0,0,4,4,44,444,1444,4444,9444,88,89,'GZAAAA','BEOAAA','HHHHxx' -2590,9570,0,2,0,10,90,590,590,2590,2590,180,181,'QVAAAA','CEOAAA','OOOOxx' -7302,9571,0,2,2,2,2,302,1302,2302,7302,4,5,'WUAAAA','DEOAAA','VVVVxx' -7444,9572,0,0,4,4,44,444,1444,2444,7444,88,89,'IAAAAA','EEOAAA','AAAAxx' -8748,9573,0,0,8,8,48,748,748,3748,8748,96,97,'MYAAAA','FEOAAA','HHHHxx' -7615,9574,1,3,5,15,15,615,1615,2615,7615,30,31,'XGAAAA','GEOAAA','OOOOxx' -6090,9575,0,2,0,10,90,90,90,1090,6090,180,181,'GAAAAA','HEOAAA','VVVVxx' -1529,9576,1,1,9,9,29,529,1529,1529,1529,58,59,'VGAAAA','IEOAAA','AAAAxx' -9398,9577,0,2,8,18,98,398,1398,4398,9398,196,197,'MXAAAA','JEOAAA','HHHHxx' -6114,9578,0,2,4,14,14,114,114,1114,6114,28,29,'EBAAAA','KEOAAA','OOOOxx' -2736,9579,0,0,6,16,36,736,736,2736,2736,72,73,'GBAAAA','LEOAAA','VVVVxx' -468,9580,0,0,8,8,68,468,468,468,468,136,137,'ASAAAA','MEOAAA','AAAAxx' -1487,9581,1,3,7,7,87,487,1487,1487,1487,174,175,'FFAAAA','NEOAAA','HHHHxx' -4784,9582,0,0,4,4,84,784,784,4784,4784,168,169,'ACAAAA','OEOAAA','OOOOxx' -6731,9583,1,3,1,11,31,731,731,1731,6731,62,63,'XYAAAA','PEOAAA','VVVVxx' -3328,9584,0,0,8,8,28,328,1328,3328,3328,56,57,'AYAAAA','QEOAAA','AAAAxx' -6891,9585,1,3,1,11,91,891,891,1891,6891,182,183,'BFAAAA','REOAAA','HHHHxx' -8039,9586,1,3,9,19,39,39,39,3039,8039,78,79,'FXAAAA','SEOAAA','OOOOxx' -4064,9587,0,0,4,4,64,64,64,4064,4064,128,129,'IAAAAA','TEOAAA','VVVVxx' -542,9588,0,2,2,2,42,542,542,542,542,84,85,'WUAAAA','UEOAAA','AAAAxx' -1039,9589,1,3,9,19,39,39,1039,1039,1039,78,79,'ZNAAAA','VEOAAA','HHHHxx' -5603,9590,1,3,3,3,3,603,1603,603,5603,6,7,'NHAAAA','WEOAAA','OOOOxx' -6641,9591,1,1,1,1,41,641,641,1641,6641,82,83,'LVAAAA','XEOAAA','VVVVxx' -6307,9592,1,3,7,7,7,307,307,1307,6307,14,15,'PIAAAA','YEOAAA','AAAAxx' -5354,9593,0,2,4,14,54,354,1354,354,5354,108,109,'YXAAAA','ZEOAAA','HHHHxx' -7878,9594,0,2,8,18,78,878,1878,2878,7878,156,157,'ARAAAA','AFOAAA','OOOOxx' -6391,9595,1,3,1,11,91,391,391,1391,6391,182,183,'VLAAAA','BFOAAA','VVVVxx' -4575,9596,1,3,5,15,75,575,575,4575,4575,150,151,'ZTAAAA','CFOAAA','AAAAxx' -6644,9597,0,0,4,4,44,644,644,1644,6644,88,89,'OVAAAA','DFOAAA','HHHHxx' -5207,9598,1,3,7,7,7,207,1207,207,5207,14,15,'HSAAAA','EFOAAA','OOOOxx' -1736,9599,0,0,6,16,36,736,1736,1736,1736,72,73,'UOAAAA','FFOAAA','VVVVxx' -3547,9600,1,3,7,7,47,547,1547,3547,3547,94,95,'LGAAAA','GFOAAA','AAAAxx' -6647,9601,1,3,7,7,47,647,647,1647,6647,94,95,'RVAAAA','HFOAAA','HHHHxx' -4107,9602,1,3,7,7,7,107,107,4107,4107,14,15,'ZBAAAA','IFOAAA','OOOOxx' -8125,9603,1,1,5,5,25,125,125,3125,8125,50,51,'NAAAAA','JFOAAA','VVVVxx' -9223,9604,1,3,3,3,23,223,1223,4223,9223,46,47,'TQAAAA','KFOAAA','AAAAxx' -6903,9605,1,3,3,3,3,903,903,1903,6903,6,7,'NFAAAA','LFOAAA','HHHHxx' -3639,9606,1,3,9,19,39,639,1639,3639,3639,78,79,'ZJAAAA','MFOAAA','OOOOxx' -9606,9607,0,2,6,6,6,606,1606,4606,9606,12,13,'MFAAAA','NFOAAA','VVVVxx' -3232,9608,0,0,2,12,32,232,1232,3232,3232,64,65,'IUAAAA','OFOAAA','AAAAxx' -2063,9609,1,3,3,3,63,63,63,2063,2063,126,127,'JBAAAA','PFOAAA','HHHHxx' -3731,9610,1,3,1,11,31,731,1731,3731,3731,62,63,'NNAAAA','QFOAAA','OOOOxx' -2558,9611,0,2,8,18,58,558,558,2558,2558,116,117,'KUAAAA','RFOAAA','VVVVxx' -2357,9612,1,1,7,17,57,357,357,2357,2357,114,115,'RMAAAA','SFOAAA','AAAAxx' -6008,9613,0,0,8,8,8,8,8,1008,6008,16,17,'CXAAAA','TFOAAA','HHHHxx' -8246,9614,0,2,6,6,46,246,246,3246,8246,92,93,'EFAAAA','UFOAAA','OOOOxx' -8220,9615,0,0,0,0,20,220,220,3220,8220,40,41,'EEAAAA','VFOAAA','VVVVxx' -1075,9616,1,3,5,15,75,75,1075,1075,1075,150,151,'JPAAAA','WFOAAA','AAAAxx' -2410,9617,0,2,0,10,10,410,410,2410,2410,20,21,'SOAAAA','XFOAAA','HHHHxx' -3253,9618,1,1,3,13,53,253,1253,3253,3253,106,107,'DVAAAA','YFOAAA','OOOOxx' -4370,9619,0,2,0,10,70,370,370,4370,4370,140,141,'CMAAAA','ZFOAAA','VVVVxx' -8426,9620,0,2,6,6,26,426,426,3426,8426,52,53,'CMAAAA','AGOAAA','AAAAxx' -2262,9621,0,2,2,2,62,262,262,2262,2262,124,125,'AJAAAA','BGOAAA','HHHHxx' -4149,9622,1,1,9,9,49,149,149,4149,4149,98,99,'PDAAAA','CGOAAA','OOOOxx' -2732,9623,0,0,2,12,32,732,732,2732,2732,64,65,'CBAAAA','DGOAAA','VVVVxx' -8606,9624,0,2,6,6,6,606,606,3606,8606,12,13,'ATAAAA','EGOAAA','AAAAxx' -6311,9625,1,3,1,11,11,311,311,1311,6311,22,23,'TIAAAA','FGOAAA','HHHHxx' -7223,9626,1,3,3,3,23,223,1223,2223,7223,46,47,'VRAAAA','GGOAAA','OOOOxx' -3054,9627,0,2,4,14,54,54,1054,3054,3054,108,109,'MNAAAA','HGOAAA','VVVVxx' -3952,9628,0,0,2,12,52,952,1952,3952,3952,104,105,'AWAAAA','IGOAAA','AAAAxx' -8252,9629,0,0,2,12,52,252,252,3252,8252,104,105,'KFAAAA','JGOAAA','HHHHxx' -6020,9630,0,0,0,0,20,20,20,1020,6020,40,41,'OXAAAA','KGOAAA','OOOOxx' -3846,9631,0,2,6,6,46,846,1846,3846,3846,92,93,'YRAAAA','LGOAAA','VVVVxx' -3755,9632,1,3,5,15,55,755,1755,3755,3755,110,111,'LOAAAA','MGOAAA','AAAAxx' -3765,9633,1,1,5,5,65,765,1765,3765,3765,130,131,'VOAAAA','NGOAAA','HHHHxx' -3434,9634,0,2,4,14,34,434,1434,3434,3434,68,69,'CCAAAA','OGOAAA','OOOOxx' -1381,9635,1,1,1,1,81,381,1381,1381,1381,162,163,'DBAAAA','PGOAAA','VVVVxx' -287,9636,1,3,7,7,87,287,287,287,287,174,175,'BLAAAA','QGOAAA','AAAAxx' -4476,9637,0,0,6,16,76,476,476,4476,4476,152,153,'EQAAAA','RGOAAA','HHHHxx' -2916,9638,0,0,6,16,16,916,916,2916,2916,32,33,'EIAAAA','SGOAAA','OOOOxx' -4517,9639,1,1,7,17,17,517,517,4517,4517,34,35,'TRAAAA','TGOAAA','VVVVxx' -4561,9640,1,1,1,1,61,561,561,4561,4561,122,123,'LTAAAA','UGOAAA','AAAAxx' -5106,9641,0,2,6,6,6,106,1106,106,5106,12,13,'KOAAAA','VGOAAA','HHHHxx' -2077,9642,1,1,7,17,77,77,77,2077,2077,154,155,'XBAAAA','WGOAAA','OOOOxx' -5269,9643,1,1,9,9,69,269,1269,269,5269,138,139,'RUAAAA','XGOAAA','VVVVxx' -5688,9644,0,0,8,8,88,688,1688,688,5688,176,177,'UKAAAA','YGOAAA','AAAAxx' -8831,9645,1,3,1,11,31,831,831,3831,8831,62,63,'RBAAAA','ZGOAAA','HHHHxx' -3867,9646,1,3,7,7,67,867,1867,3867,3867,134,135,'TSAAAA','AHOAAA','OOOOxx' -6062,9647,0,2,2,2,62,62,62,1062,6062,124,125,'EZAAAA','BHOAAA','VVVVxx' -8460,9648,0,0,0,0,60,460,460,3460,8460,120,121,'KNAAAA','CHOAAA','AAAAxx' -3138,9649,0,2,8,18,38,138,1138,3138,3138,76,77,'SQAAAA','DHOAAA','HHHHxx' -3173,9650,1,1,3,13,73,173,1173,3173,3173,146,147,'BSAAAA','EHOAAA','OOOOxx' -7018,9651,0,2,8,18,18,18,1018,2018,7018,36,37,'YJAAAA','FHOAAA','VVVVxx' -4836,9652,0,0,6,16,36,836,836,4836,4836,72,73,'AEAAAA','GHOAAA','AAAAxx' -1007,9653,1,3,7,7,7,7,1007,1007,1007,14,15,'TMAAAA','HHOAAA','HHHHxx' -658,9654,0,2,8,18,58,658,658,658,658,116,117,'IZAAAA','IHOAAA','OOOOxx' -5205,9655,1,1,5,5,5,205,1205,205,5205,10,11,'FSAAAA','JHOAAA','VVVVxx' -5805,9656,1,1,5,5,5,805,1805,805,5805,10,11,'HPAAAA','KHOAAA','AAAAxx' -5959,9657,1,3,9,19,59,959,1959,959,5959,118,119,'FVAAAA','LHOAAA','HHHHxx' -2863,9658,1,3,3,3,63,863,863,2863,2863,126,127,'DGAAAA','MHOAAA','OOOOxx' -7272,9659,0,0,2,12,72,272,1272,2272,7272,144,145,'STAAAA','NHOAAA','VVVVxx' -8437,9660,1,1,7,17,37,437,437,3437,8437,74,75,'NMAAAA','OHOAAA','AAAAxx' -4900,9661,0,0,0,0,0,900,900,4900,4900,0,1,'MGAAAA','PHOAAA','HHHHxx' -890,9662,0,2,0,10,90,890,890,890,890,180,181,'GIAAAA','QHOAAA','OOOOxx' -3530,9663,0,2,0,10,30,530,1530,3530,3530,60,61,'UFAAAA','RHOAAA','VVVVxx' -6209,9664,1,1,9,9,9,209,209,1209,6209,18,19,'VEAAAA','SHOAAA','AAAAxx' -4595,9665,1,3,5,15,95,595,595,4595,4595,190,191,'TUAAAA','THOAAA','HHHHxx' -5982,9666,0,2,2,2,82,982,1982,982,5982,164,165,'CWAAAA','UHOAAA','OOOOxx' -1101,9667,1,1,1,1,1,101,1101,1101,1101,2,3,'JQAAAA','VHOAAA','VVVVxx' -9555,9668,1,3,5,15,55,555,1555,4555,9555,110,111,'NDAAAA','WHOAAA','AAAAxx' -1918,9669,0,2,8,18,18,918,1918,1918,1918,36,37,'UVAAAA','XHOAAA','HHHHxx' -3527,9670,1,3,7,7,27,527,1527,3527,3527,54,55,'RFAAAA','YHOAAA','OOOOxx' -7309,9671,1,1,9,9,9,309,1309,2309,7309,18,19,'DVAAAA','ZHOAAA','VVVVxx' -8213,9672,1,1,3,13,13,213,213,3213,8213,26,27,'XDAAAA','AIOAAA','AAAAxx' -306,9673,0,2,6,6,6,306,306,306,306,12,13,'ULAAAA','BIOAAA','HHHHxx' -845,9674,1,1,5,5,45,845,845,845,845,90,91,'NGAAAA','CIOAAA','OOOOxx' -16,9675,0,0,6,16,16,16,16,16,16,32,33,'QAAAAA','DIOAAA','VVVVxx' -437,9676,1,1,7,17,37,437,437,437,437,74,75,'VQAAAA','EIOAAA','AAAAxx' -9518,9677,0,2,8,18,18,518,1518,4518,9518,36,37,'CCAAAA','FIOAAA','HHHHxx' -2142,9678,0,2,2,2,42,142,142,2142,2142,84,85,'KEAAAA','GIOAAA','OOOOxx' -8121,9679,1,1,1,1,21,121,121,3121,8121,42,43,'JAAAAA','HIOAAA','VVVVxx' -7354,9680,0,2,4,14,54,354,1354,2354,7354,108,109,'WWAAAA','IIOAAA','AAAAxx' -1720,9681,0,0,0,0,20,720,1720,1720,1720,40,41,'EOAAAA','JIOAAA','HHHHxx' -6078,9682,0,2,8,18,78,78,78,1078,6078,156,157,'UZAAAA','KIOAAA','OOOOxx' -5929,9683,1,1,9,9,29,929,1929,929,5929,58,59,'BUAAAA','LIOAAA','VVVVxx' -3856,9684,0,0,6,16,56,856,1856,3856,3856,112,113,'ISAAAA','MIOAAA','AAAAxx' -3424,9685,0,0,4,4,24,424,1424,3424,3424,48,49,'SBAAAA','NIOAAA','HHHHxx' -1712,9686,0,0,2,12,12,712,1712,1712,1712,24,25,'WNAAAA','OIOAAA','OOOOxx' -2340,9687,0,0,0,0,40,340,340,2340,2340,80,81,'AMAAAA','PIOAAA','VVVVxx' -5570,9688,0,2,0,10,70,570,1570,570,5570,140,141,'GGAAAA','QIOAAA','AAAAxx' -8734,9689,0,2,4,14,34,734,734,3734,8734,68,69,'YXAAAA','RIOAAA','HHHHxx' -6077,9690,1,1,7,17,77,77,77,1077,6077,154,155,'TZAAAA','SIOAAA','OOOOxx' -2960,9691,0,0,0,0,60,960,960,2960,2960,120,121,'WJAAAA','TIOAAA','VVVVxx' -5062,9692,0,2,2,2,62,62,1062,62,5062,124,125,'SMAAAA','UIOAAA','AAAAxx' -1532,9693,0,0,2,12,32,532,1532,1532,1532,64,65,'YGAAAA','VIOAAA','HHHHxx' -8298,9694,0,2,8,18,98,298,298,3298,8298,196,197,'EHAAAA','WIOAAA','OOOOxx' -2496,9695,0,0,6,16,96,496,496,2496,2496,192,193,'ASAAAA','XIOAAA','VVVVxx' -8412,9696,0,0,2,12,12,412,412,3412,8412,24,25,'OLAAAA','YIOAAA','AAAAxx' -724,9697,0,0,4,4,24,724,724,724,724,48,49,'WBAAAA','ZIOAAA','HHHHxx' -1019,9698,1,3,9,19,19,19,1019,1019,1019,38,39,'FNAAAA','AJOAAA','OOOOxx' -6265,9699,1,1,5,5,65,265,265,1265,6265,130,131,'ZGAAAA','BJOAAA','VVVVxx' -740,9700,0,0,0,0,40,740,740,740,740,80,81,'MCAAAA','CJOAAA','AAAAxx' -8495,9701,1,3,5,15,95,495,495,3495,8495,190,191,'TOAAAA','DJOAAA','HHHHxx' -6983,9702,1,3,3,3,83,983,983,1983,6983,166,167,'PIAAAA','EJOAAA','OOOOxx' -991,9703,1,3,1,11,91,991,991,991,991,182,183,'DMAAAA','FJOAAA','VVVVxx' -3189,9704,1,1,9,9,89,189,1189,3189,3189,178,179,'RSAAAA','GJOAAA','AAAAxx' -4487,9705,1,3,7,7,87,487,487,4487,4487,174,175,'PQAAAA','HJOAAA','HHHHxx' -5554,9706,0,2,4,14,54,554,1554,554,5554,108,109,'QFAAAA','IJOAAA','OOOOxx' -1258,9707,0,2,8,18,58,258,1258,1258,1258,116,117,'KWAAAA','JJOAAA','VVVVxx' -5359,9708,1,3,9,19,59,359,1359,359,5359,118,119,'DYAAAA','KJOAAA','AAAAxx' -2709,9709,1,1,9,9,9,709,709,2709,2709,18,19,'FAAAAA','LJOAAA','HHHHxx' -361,9710,1,1,1,1,61,361,361,361,361,122,123,'XNAAAA','MJOAAA','OOOOxx' -4028,9711,0,0,8,8,28,28,28,4028,4028,56,57,'YYAAAA','NJOAAA','VVVVxx' -3735,9712,1,3,5,15,35,735,1735,3735,3735,70,71,'RNAAAA','OJOAAA','AAAAxx' -4427,9713,1,3,7,7,27,427,427,4427,4427,54,55,'HOAAAA','PJOAAA','HHHHxx' -7540,9714,0,0,0,0,40,540,1540,2540,7540,80,81,'AEAAAA','QJOAAA','OOOOxx' -3569,9715,1,1,9,9,69,569,1569,3569,3569,138,139,'HHAAAA','RJOAAA','VVVVxx' -1916,9716,0,0,6,16,16,916,1916,1916,1916,32,33,'SVAAAA','SJOAAA','AAAAxx' -7596,9717,0,0,6,16,96,596,1596,2596,7596,192,193,'EGAAAA','TJOAAA','HHHHxx' -9721,9718,1,1,1,1,21,721,1721,4721,9721,42,43,'XJAAAA','UJOAAA','OOOOxx' -4429,9719,1,1,9,9,29,429,429,4429,4429,58,59,'JOAAAA','VJOAAA','VVVVxx' -3471,9720,1,3,1,11,71,471,1471,3471,3471,142,143,'NDAAAA','WJOAAA','AAAAxx' -1157,9721,1,1,7,17,57,157,1157,1157,1157,114,115,'NSAAAA','XJOAAA','HHHHxx' -5700,9722,0,0,0,0,0,700,1700,700,5700,0,1,'GLAAAA','YJOAAA','OOOOxx' -4431,9723,1,3,1,11,31,431,431,4431,4431,62,63,'LOAAAA','ZJOAAA','VVVVxx' -9409,9724,1,1,9,9,9,409,1409,4409,9409,18,19,'XXAAAA','AKOAAA','AAAAxx' -8752,9725,0,0,2,12,52,752,752,3752,8752,104,105,'QYAAAA','BKOAAA','HHHHxx' -9484,9726,0,0,4,4,84,484,1484,4484,9484,168,169,'UAAAAA','CKOAAA','OOOOxx' -1266,9727,0,2,6,6,66,266,1266,1266,1266,132,133,'SWAAAA','DKOAAA','VVVVxx' -9097,9728,1,1,7,17,97,97,1097,4097,9097,194,195,'XLAAAA','EKOAAA','AAAAxx' -3068,9729,0,0,8,8,68,68,1068,3068,3068,136,137,'AOAAAA','FKOAAA','HHHHxx' -5490,9730,0,2,0,10,90,490,1490,490,5490,180,181,'EDAAAA','GKOAAA','OOOOxx' -1375,9731,1,3,5,15,75,375,1375,1375,1375,150,151,'XAAAAA','HKOAAA','VVVVxx' -2487,9732,1,3,7,7,87,487,487,2487,2487,174,175,'RRAAAA','IKOAAA','AAAAxx' -1705,9733,1,1,5,5,5,705,1705,1705,1705,10,11,'PNAAAA','JKOAAA','HHHHxx' -1571,9734,1,3,1,11,71,571,1571,1571,1571,142,143,'LIAAAA','KKOAAA','OOOOxx' -4005,9735,1,1,5,5,5,5,5,4005,4005,10,11,'BYAAAA','LKOAAA','VVVVxx' -5497,9736,1,1,7,17,97,497,1497,497,5497,194,195,'LDAAAA','MKOAAA','AAAAxx' -2144,9737,0,0,4,4,44,144,144,2144,2144,88,89,'MEAAAA','NKOAAA','HHHHxx' -4052,9738,0,0,2,12,52,52,52,4052,4052,104,105,'WZAAAA','OKOAAA','OOOOxx' -4942,9739,0,2,2,2,42,942,942,4942,4942,84,85,'CIAAAA','PKOAAA','VVVVxx' -5504,9740,0,0,4,4,4,504,1504,504,5504,8,9,'SDAAAA','QKOAAA','AAAAxx' -2913,9741,1,1,3,13,13,913,913,2913,2913,26,27,'BIAAAA','RKOAAA','HHHHxx' -5617,9742,1,1,7,17,17,617,1617,617,5617,34,35,'BIAAAA','SKOAAA','OOOOxx' -8179,9743,1,3,9,19,79,179,179,3179,8179,158,159,'PCAAAA','TKOAAA','VVVVxx' -9437,9744,1,1,7,17,37,437,1437,4437,9437,74,75,'ZYAAAA','UKOAAA','AAAAxx' -1821,9745,1,1,1,1,21,821,1821,1821,1821,42,43,'BSAAAA','VKOAAA','HHHHxx' -5737,9746,1,1,7,17,37,737,1737,737,5737,74,75,'RMAAAA','WKOAAA','OOOOxx' -4207,9747,1,3,7,7,7,207,207,4207,4207,14,15,'VFAAAA','XKOAAA','VVVVxx' -4815,9748,1,3,5,15,15,815,815,4815,4815,30,31,'FDAAAA','YKOAAA','AAAAxx' -8707,9749,1,3,7,7,7,707,707,3707,8707,14,15,'XWAAAA','ZKOAAA','HHHHxx' -5970,9750,0,2,0,10,70,970,1970,970,5970,140,141,'QVAAAA','ALOAAA','OOOOxx' -5501,9751,1,1,1,1,1,501,1501,501,5501,2,3,'PDAAAA','BLOAAA','VVVVxx' -4013,9752,1,1,3,13,13,13,13,4013,4013,26,27,'JYAAAA','CLOAAA','AAAAxx' -9235,9753,1,3,5,15,35,235,1235,4235,9235,70,71,'FRAAAA','DLOAAA','HHHHxx' -2503,9754,1,3,3,3,3,503,503,2503,2503,6,7,'HSAAAA','ELOAAA','OOOOxx' -9181,9755,1,1,1,1,81,181,1181,4181,9181,162,163,'DPAAAA','FLOAAA','VVVVxx' -2289,9756,1,1,9,9,89,289,289,2289,2289,178,179,'BKAAAA','GLOAAA','AAAAxx' -4256,9757,0,0,6,16,56,256,256,4256,4256,112,113,'SHAAAA','HLOAAA','HHHHxx' -191,9758,1,3,1,11,91,191,191,191,191,182,183,'JHAAAA','ILOAAA','OOOOxx' -9655,9759,1,3,5,15,55,655,1655,4655,9655,110,111,'JHAAAA','JLOAAA','VVVVxx' -8615,9760,1,3,5,15,15,615,615,3615,8615,30,31,'JTAAAA','KLOAAA','AAAAxx' -3011,9761,1,3,1,11,11,11,1011,3011,3011,22,23,'VLAAAA','LLOAAA','HHHHxx' -6376,9762,0,0,6,16,76,376,376,1376,6376,152,153,'GLAAAA','MLOAAA','OOOOxx' -68,9763,0,0,8,8,68,68,68,68,68,136,137,'QCAAAA','NLOAAA','VVVVxx' -4720,9764,0,0,0,0,20,720,720,4720,4720,40,41,'OZAAAA','OLOAAA','AAAAxx' -6848,9765,0,0,8,8,48,848,848,1848,6848,96,97,'KDAAAA','PLOAAA','HHHHxx' -456,9766,0,0,6,16,56,456,456,456,456,112,113,'ORAAAA','QLOAAA','OOOOxx' -5887,9767,1,3,7,7,87,887,1887,887,5887,174,175,'LSAAAA','RLOAAA','VVVVxx' -9249,9768,1,1,9,9,49,249,1249,4249,9249,98,99,'TRAAAA','SLOAAA','AAAAxx' -4041,9769,1,1,1,1,41,41,41,4041,4041,82,83,'LZAAAA','TLOAAA','HHHHxx' -2304,9770,0,0,4,4,4,304,304,2304,2304,8,9,'QKAAAA','ULOAAA','OOOOxx' -8763,9771,1,3,3,3,63,763,763,3763,8763,126,127,'BZAAAA','VLOAAA','VVVVxx' -2115,9772,1,3,5,15,15,115,115,2115,2115,30,31,'JDAAAA','WLOAAA','AAAAxx' -8014,9773,0,2,4,14,14,14,14,3014,8014,28,29,'GWAAAA','XLOAAA','HHHHxx' -9895,9774,1,3,5,15,95,895,1895,4895,9895,190,191,'PQAAAA','YLOAAA','OOOOxx' -671,9775,1,3,1,11,71,671,671,671,671,142,143,'VZAAAA','ZLOAAA','VVVVxx' -3774,9776,0,2,4,14,74,774,1774,3774,3774,148,149,'EPAAAA','AMOAAA','AAAAxx' -134,9777,0,2,4,14,34,134,134,134,134,68,69,'EFAAAA','BMOAAA','HHHHxx' -534,9778,0,2,4,14,34,534,534,534,534,68,69,'OUAAAA','CMOAAA','OOOOxx' -7308,9779,0,0,8,8,8,308,1308,2308,7308,16,17,'CVAAAA','DMOAAA','VVVVxx' -5244,9780,0,0,4,4,44,244,1244,244,5244,88,89,'STAAAA','EMOAAA','AAAAxx' -1512,9781,0,0,2,12,12,512,1512,1512,1512,24,25,'EGAAAA','FMOAAA','HHHHxx' -8960,9782,0,0,0,0,60,960,960,3960,8960,120,121,'QGAAAA','GMOAAA','OOOOxx' -6602,9783,0,2,2,2,2,602,602,1602,6602,4,5,'YTAAAA','HMOAAA','VVVVxx' -593,9784,1,1,3,13,93,593,593,593,593,186,187,'VWAAAA','IMOAAA','AAAAxx' -2353,9785,1,1,3,13,53,353,353,2353,2353,106,107,'NMAAAA','JMOAAA','HHHHxx' -4139,9786,1,3,9,19,39,139,139,4139,4139,78,79,'FDAAAA','KMOAAA','OOOOxx' -3063,9787,1,3,3,3,63,63,1063,3063,3063,126,127,'VNAAAA','LMOAAA','VVVVxx' -652,9788,0,0,2,12,52,652,652,652,652,104,105,'CZAAAA','MMOAAA','AAAAxx' -7405,9789,1,1,5,5,5,405,1405,2405,7405,10,11,'VYAAAA','NMOAAA','HHHHxx' -3034,9790,0,2,4,14,34,34,1034,3034,3034,68,69,'SMAAAA','OMOAAA','OOOOxx' -4614,9791,0,2,4,14,14,614,614,4614,4614,28,29,'MVAAAA','PMOAAA','VVVVxx' -2351,9792,1,3,1,11,51,351,351,2351,2351,102,103,'LMAAAA','QMOAAA','AAAAxx' -8208,9793,0,0,8,8,8,208,208,3208,8208,16,17,'SDAAAA','RMOAAA','HHHHxx' -5475,9794,1,3,5,15,75,475,1475,475,5475,150,151,'PCAAAA','SMOAAA','OOOOxx' -6875,9795,1,3,5,15,75,875,875,1875,6875,150,151,'LEAAAA','TMOAAA','VVVVxx' -563,9796,1,3,3,3,63,563,563,563,563,126,127,'RVAAAA','UMOAAA','AAAAxx' -3346,9797,0,2,6,6,46,346,1346,3346,3346,92,93,'SYAAAA','VMOAAA','HHHHxx' -291,9798,1,3,1,11,91,291,291,291,291,182,183,'FLAAAA','WMOAAA','OOOOxx' -6345,9799,1,1,5,5,45,345,345,1345,6345,90,91,'BKAAAA','XMOAAA','VVVVxx' -8099,9800,1,3,9,19,99,99,99,3099,8099,198,199,'NZAAAA','YMOAAA','AAAAxx' -2078,9801,0,2,8,18,78,78,78,2078,2078,156,157,'YBAAAA','ZMOAAA','HHHHxx' -8238,9802,0,2,8,18,38,238,238,3238,8238,76,77,'WEAAAA','ANOAAA','OOOOxx' -4482,9803,0,2,2,2,82,482,482,4482,4482,164,165,'KQAAAA','BNOAAA','VVVVxx' -716,9804,0,0,6,16,16,716,716,716,716,32,33,'OBAAAA','CNOAAA','AAAAxx' -7288,9805,0,0,8,8,88,288,1288,2288,7288,176,177,'IUAAAA','DNOAAA','HHHHxx' -5906,9806,0,2,6,6,6,906,1906,906,5906,12,13,'ETAAAA','ENOAAA','OOOOxx' -5618,9807,0,2,8,18,18,618,1618,618,5618,36,37,'CIAAAA','FNOAAA','VVVVxx' -1141,9808,1,1,1,1,41,141,1141,1141,1141,82,83,'XRAAAA','GNOAAA','AAAAxx' -8231,9809,1,3,1,11,31,231,231,3231,8231,62,63,'PEAAAA','HNOAAA','HHHHxx' -3713,9810,1,1,3,13,13,713,1713,3713,3713,26,27,'VMAAAA','INOAAA','OOOOxx' -9158,9811,0,2,8,18,58,158,1158,4158,9158,116,117,'GOAAAA','JNOAAA','VVVVxx' -4051,9812,1,3,1,11,51,51,51,4051,4051,102,103,'VZAAAA','KNOAAA','AAAAxx' -1973,9813,1,1,3,13,73,973,1973,1973,1973,146,147,'XXAAAA','LNOAAA','HHHHxx' -6710,9814,0,2,0,10,10,710,710,1710,6710,20,21,'CYAAAA','MNOAAA','OOOOxx' -1021,9815,1,1,1,1,21,21,1021,1021,1021,42,43,'HNAAAA','NNOAAA','VVVVxx' -2196,9816,0,0,6,16,96,196,196,2196,2196,192,193,'MGAAAA','ONOAAA','AAAAxx' -8335,9817,1,3,5,15,35,335,335,3335,8335,70,71,'PIAAAA','PNOAAA','HHHHxx' -2272,9818,0,0,2,12,72,272,272,2272,2272,144,145,'KJAAAA','QNOAAA','OOOOxx' -3818,9819,0,2,8,18,18,818,1818,3818,3818,36,37,'WQAAAA','RNOAAA','VVVVxx' -679,9820,1,3,9,19,79,679,679,679,679,158,159,'DAAAAA','SNOAAA','AAAAxx' -7512,9821,0,0,2,12,12,512,1512,2512,7512,24,25,'YCAAAA','TNOAAA','HHHHxx' -493,9822,1,1,3,13,93,493,493,493,493,186,187,'ZSAAAA','UNOAAA','OOOOxx' -5663,9823,1,3,3,3,63,663,1663,663,5663,126,127,'VJAAAA','VNOAAA','VVVVxx' -4655,9824,1,3,5,15,55,655,655,4655,4655,110,111,'BXAAAA','WNOAAA','AAAAxx' -3996,9825,0,0,6,16,96,996,1996,3996,3996,192,193,'SXAAAA','XNOAAA','HHHHxx' -8797,9826,1,1,7,17,97,797,797,3797,8797,194,195,'JAAAAA','YNOAAA','OOOOxx' -2991,9827,1,3,1,11,91,991,991,2991,2991,182,183,'BLAAAA','ZNOAAA','VVVVxx' -7038,9828,0,2,8,18,38,38,1038,2038,7038,76,77,'SKAAAA','AOOAAA','AAAAxx' -4174,9829,0,2,4,14,74,174,174,4174,4174,148,149,'OEAAAA','BOOAAA','HHHHxx' -6908,9830,0,0,8,8,8,908,908,1908,6908,16,17,'SFAAAA','COOAAA','OOOOxx' -8477,9831,1,1,7,17,77,477,477,3477,8477,154,155,'BOAAAA','DOOAAA','VVVVxx' -3576,9832,0,0,6,16,76,576,1576,3576,3576,152,153,'OHAAAA','EOOAAA','AAAAxx' -2685,9833,1,1,5,5,85,685,685,2685,2685,170,171,'HZAAAA','FOOAAA','HHHHxx' -9161,9834,1,1,1,1,61,161,1161,4161,9161,122,123,'JOAAAA','GOOAAA','OOOOxx' -2951,9835,1,3,1,11,51,951,951,2951,2951,102,103,'NJAAAA','HOOAAA','VVVVxx' -8362,9836,0,2,2,2,62,362,362,3362,8362,124,125,'QJAAAA','IOOAAA','AAAAxx' -2379,9837,1,3,9,19,79,379,379,2379,2379,158,159,'NNAAAA','JOOAAA','HHHHxx' -1277,9838,1,1,7,17,77,277,1277,1277,1277,154,155,'DXAAAA','KOOAAA','OOOOxx' -1728,9839,0,0,8,8,28,728,1728,1728,1728,56,57,'MOAAAA','LOOAAA','VVVVxx' -9816,9840,0,0,6,16,16,816,1816,4816,9816,32,33,'ONAAAA','MOOAAA','AAAAxx' -6288,9841,0,0,8,8,88,288,288,1288,6288,176,177,'WHAAAA','NOOAAA','HHHHxx' -8985,9842,1,1,5,5,85,985,985,3985,8985,170,171,'PHAAAA','OOOAAA','OOOOxx' -771,9843,1,3,1,11,71,771,771,771,771,142,143,'RDAAAA','POOAAA','VVVVxx' -464,9844,0,0,4,4,64,464,464,464,464,128,129,'WRAAAA','QOOAAA','AAAAxx' -9625,9845,1,1,5,5,25,625,1625,4625,9625,50,51,'FGAAAA','ROOAAA','HHHHxx' -9608,9846,0,0,8,8,8,608,1608,4608,9608,16,17,'OFAAAA','SOOAAA','OOOOxx' -9170,9847,0,2,0,10,70,170,1170,4170,9170,140,141,'SOAAAA','TOOAAA','VVVVxx' -9658,9848,0,2,8,18,58,658,1658,4658,9658,116,117,'MHAAAA','UOOAAA','AAAAxx' -7515,9849,1,3,5,15,15,515,1515,2515,7515,30,31,'BDAAAA','VOOAAA','HHHHxx' -9400,9850,0,0,0,0,0,400,1400,4400,9400,0,1,'OXAAAA','WOOAAA','OOOOxx' -2045,9851,1,1,5,5,45,45,45,2045,2045,90,91,'RAAAAA','XOOAAA','VVVVxx' -324,9852,0,0,4,4,24,324,324,324,324,48,49,'MMAAAA','YOOAAA','AAAAxx' -4252,9853,0,0,2,12,52,252,252,4252,4252,104,105,'OHAAAA','ZOOAAA','HHHHxx' -8329,9854,1,1,9,9,29,329,329,3329,8329,58,59,'JIAAAA','APOAAA','OOOOxx' -4472,9855,0,0,2,12,72,472,472,4472,4472,144,145,'AQAAAA','BPOAAA','VVVVxx' -1047,9856,1,3,7,7,47,47,1047,1047,1047,94,95,'HOAAAA','CPOAAA','AAAAxx' -9341,9857,1,1,1,1,41,341,1341,4341,9341,82,83,'HVAAAA','DPOAAA','HHHHxx' -7000,9858,0,0,0,0,0,0,1000,2000,7000,0,1,'GJAAAA','EPOAAA','OOOOxx' -1429,9859,1,1,9,9,29,429,1429,1429,1429,58,59,'ZCAAAA','FPOAAA','VVVVxx' -2701,9860,1,1,1,1,1,701,701,2701,2701,2,3,'XZAAAA','GPOAAA','AAAAxx' -6630,9861,0,2,0,10,30,630,630,1630,6630,60,61,'AVAAAA','HPOAAA','HHHHxx' -3669,9862,1,1,9,9,69,669,1669,3669,3669,138,139,'DLAAAA','IPOAAA','OOOOxx' -8613,9863,1,1,3,13,13,613,613,3613,8613,26,27,'HTAAAA','JPOAAA','VVVVxx' -7080,9864,0,0,0,0,80,80,1080,2080,7080,160,161,'IMAAAA','KPOAAA','AAAAxx' -8788,9865,0,0,8,8,88,788,788,3788,8788,176,177,'AAAAAA','LPOAAA','HHHHxx' -6291,9866,1,3,1,11,91,291,291,1291,6291,182,183,'ZHAAAA','MPOAAA','OOOOxx' -7885,9867,1,1,5,5,85,885,1885,2885,7885,170,171,'HRAAAA','NPOAAA','VVVVxx' -7160,9868,0,0,0,0,60,160,1160,2160,7160,120,121,'KPAAAA','OPOAAA','AAAAxx' -6140,9869,0,0,0,0,40,140,140,1140,6140,80,81,'ECAAAA','PPOAAA','HHHHxx' -9881,9870,1,1,1,1,81,881,1881,4881,9881,162,163,'BQAAAA','QPOAAA','OOOOxx' -9140,9871,0,0,0,0,40,140,1140,4140,9140,80,81,'ONAAAA','RPOAAA','VVVVxx' -644,9872,0,0,4,4,44,644,644,644,644,88,89,'UYAAAA','SPOAAA','AAAAxx' -3667,9873,1,3,7,7,67,667,1667,3667,3667,134,135,'BLAAAA','TPOAAA','HHHHxx' -2675,9874,1,3,5,15,75,675,675,2675,2675,150,151,'XYAAAA','UPOAAA','OOOOxx' -9492,9875,0,0,2,12,92,492,1492,4492,9492,184,185,'CBAAAA','VPOAAA','VVVVxx' -5004,9876,0,0,4,4,4,4,1004,4,5004,8,9,'MKAAAA','WPOAAA','AAAAxx' -9456,9877,0,0,6,16,56,456,1456,4456,9456,112,113,'SZAAAA','XPOAAA','HHHHxx' -8197,9878,1,1,7,17,97,197,197,3197,8197,194,195,'HDAAAA','YPOAAA','OOOOxx' -2837,9879,1,1,7,17,37,837,837,2837,2837,74,75,'DFAAAA','ZPOAAA','VVVVxx' -127,9880,1,3,7,7,27,127,127,127,127,54,55,'XEAAAA','AQOAAA','AAAAxx' -9772,9881,0,0,2,12,72,772,1772,4772,9772,144,145,'WLAAAA','BQOAAA','HHHHxx' -5743,9882,1,3,3,3,43,743,1743,743,5743,86,87,'XMAAAA','CQOAAA','OOOOxx' -2007,9883,1,3,7,7,7,7,7,2007,2007,14,15,'FZAAAA','DQOAAA','VVVVxx' -7586,9884,0,2,6,6,86,586,1586,2586,7586,172,173,'UFAAAA','EQOAAA','AAAAxx' -45,9885,1,1,5,5,45,45,45,45,45,90,91,'TBAAAA','FQOAAA','HHHHxx' -6482,9886,0,2,2,2,82,482,482,1482,6482,164,165,'IPAAAA','GQOAAA','OOOOxx' -4565,9887,1,1,5,5,65,565,565,4565,4565,130,131,'PTAAAA','HQOAAA','VVVVxx' -6975,9888,1,3,5,15,75,975,975,1975,6975,150,151,'HIAAAA','IQOAAA','AAAAxx' -7260,9889,0,0,0,0,60,260,1260,2260,7260,120,121,'GTAAAA','JQOAAA','HHHHxx' -2830,9890,0,2,0,10,30,830,830,2830,2830,60,61,'WEAAAA','KQOAAA','OOOOxx' -9365,9891,1,1,5,5,65,365,1365,4365,9365,130,131,'FWAAAA','LQOAAA','VVVVxx' -8207,9892,1,3,7,7,7,207,207,3207,8207,14,15,'RDAAAA','MQOAAA','AAAAxx' -2506,9893,0,2,6,6,6,506,506,2506,2506,12,13,'KSAAAA','NQOAAA','HHHHxx' -8081,9894,1,1,1,1,81,81,81,3081,8081,162,163,'VYAAAA','OQOAAA','OOOOxx' -8678,9895,0,2,8,18,78,678,678,3678,8678,156,157,'UVAAAA','PQOAAA','VVVVxx' -9932,9896,0,0,2,12,32,932,1932,4932,9932,64,65,'ASAAAA','QQOAAA','AAAAxx' -447,9897,1,3,7,7,47,447,447,447,447,94,95,'FRAAAA','RQOAAA','HHHHxx' -9187,9898,1,3,7,7,87,187,1187,4187,9187,174,175,'JPAAAA','SQOAAA','OOOOxx' -89,9899,1,1,9,9,89,89,89,89,89,178,179,'LDAAAA','TQOAAA','VVVVxx' -7027,9900,1,3,7,7,27,27,1027,2027,7027,54,55,'HKAAAA','UQOAAA','AAAAxx' -1536,9901,0,0,6,16,36,536,1536,1536,1536,72,73,'CHAAAA','VQOAAA','HHHHxx' -160,9902,0,0,0,0,60,160,160,160,160,120,121,'EGAAAA','WQOAAA','OOOOxx' -7679,9903,1,3,9,19,79,679,1679,2679,7679,158,159,'JJAAAA','XQOAAA','VVVVxx' -5973,9904,1,1,3,13,73,973,1973,973,5973,146,147,'TVAAAA','YQOAAA','AAAAxx' -4401,9905,1,1,1,1,1,401,401,4401,4401,2,3,'HNAAAA','ZQOAAA','HHHHxx' -395,9906,1,3,5,15,95,395,395,395,395,190,191,'FPAAAA','AROAAA','OOOOxx' -4904,9907,0,0,4,4,4,904,904,4904,4904,8,9,'QGAAAA','BROAAA','VVVVxx' -2759,9908,1,3,9,19,59,759,759,2759,2759,118,119,'DCAAAA','CROAAA','AAAAxx' -8713,9909,1,1,3,13,13,713,713,3713,8713,26,27,'DXAAAA','DROAAA','HHHHxx' -3770,9910,0,2,0,10,70,770,1770,3770,3770,140,141,'APAAAA','EROAAA','OOOOxx' -8272,9911,0,0,2,12,72,272,272,3272,8272,144,145,'EGAAAA','FROAAA','VVVVxx' -5358,9912,0,2,8,18,58,358,1358,358,5358,116,117,'CYAAAA','GROAAA','AAAAxx' -9747,9913,1,3,7,7,47,747,1747,4747,9747,94,95,'XKAAAA','HROAAA','HHHHxx' -1567,9914,1,3,7,7,67,567,1567,1567,1567,134,135,'HIAAAA','IROAAA','OOOOxx' -2136,9915,0,0,6,16,36,136,136,2136,2136,72,73,'EEAAAA','JROAAA','VVVVxx' -314,9916,0,2,4,14,14,314,314,314,314,28,29,'CMAAAA','KROAAA','AAAAxx' -4583,9917,1,3,3,3,83,583,583,4583,4583,166,167,'HUAAAA','LROAAA','HHHHxx' -375,9918,1,3,5,15,75,375,375,375,375,150,151,'LOAAAA','MROAAA','OOOOxx' -5566,9919,0,2,6,6,66,566,1566,566,5566,132,133,'CGAAAA','NROAAA','VVVVxx' -6865,9920,1,1,5,5,65,865,865,1865,6865,130,131,'BEAAAA','OROAAA','AAAAxx' -894,9921,0,2,4,14,94,894,894,894,894,188,189,'KIAAAA','PROAAA','HHHHxx' -5399,9922,1,3,9,19,99,399,1399,399,5399,198,199,'RZAAAA','QROAAA','OOOOxx' -1385,9923,1,1,5,5,85,385,1385,1385,1385,170,171,'HBAAAA','RROAAA','VVVVxx' -2156,9924,0,0,6,16,56,156,156,2156,2156,112,113,'YEAAAA','SROAAA','AAAAxx' -9659,9925,1,3,9,19,59,659,1659,4659,9659,118,119,'NHAAAA','TROAAA','HHHHxx' -477,9926,1,1,7,17,77,477,477,477,477,154,155,'JSAAAA','UROAAA','OOOOxx' -8194,9927,0,2,4,14,94,194,194,3194,8194,188,189,'EDAAAA','VROAAA','VVVVxx' -3937,9928,1,1,7,17,37,937,1937,3937,3937,74,75,'LVAAAA','WROAAA','AAAAxx' -3745,9929,1,1,5,5,45,745,1745,3745,3745,90,91,'BOAAAA','XROAAA','HHHHxx' -4096,9930,0,0,6,16,96,96,96,4096,4096,192,193,'OBAAAA','YROAAA','OOOOxx' -5487,9931,1,3,7,7,87,487,1487,487,5487,174,175,'BDAAAA','ZROAAA','VVVVxx' -2475,9932,1,3,5,15,75,475,475,2475,2475,150,151,'FRAAAA','ASOAAA','AAAAxx' -6105,9933,1,1,5,5,5,105,105,1105,6105,10,11,'VAAAAA','BSOAAA','HHHHxx' -6036,9934,0,0,6,16,36,36,36,1036,6036,72,73,'EYAAAA','CSOAAA','OOOOxx' -1315,9935,1,3,5,15,15,315,1315,1315,1315,30,31,'PYAAAA','DSOAAA','VVVVxx' -4473,9936,1,1,3,13,73,473,473,4473,4473,146,147,'BQAAAA','ESOAAA','AAAAxx' -4016,9937,0,0,6,16,16,16,16,4016,4016,32,33,'MYAAAA','FSOAAA','HHHHxx' -8135,9938,1,3,5,15,35,135,135,3135,8135,70,71,'XAAAAA','GSOAAA','OOOOxx' -8892,9939,0,0,2,12,92,892,892,3892,8892,184,185,'AEAAAA','HSOAAA','VVVVxx' -4850,9940,0,2,0,10,50,850,850,4850,4850,100,101,'OEAAAA','ISOAAA','AAAAxx' -2545,9941,1,1,5,5,45,545,545,2545,2545,90,91,'XTAAAA','JSOAAA','HHHHxx' -3788,9942,0,0,8,8,88,788,1788,3788,3788,176,177,'SPAAAA','KSOAAA','OOOOxx' -1672,9943,0,0,2,12,72,672,1672,1672,1672,144,145,'IMAAAA','LSOAAA','VVVVxx' -3664,9944,0,0,4,4,64,664,1664,3664,3664,128,129,'YKAAAA','MSOAAA','AAAAxx' -3775,9945,1,3,5,15,75,775,1775,3775,3775,150,151,'FPAAAA','NSOAAA','HHHHxx' -3103,9946,1,3,3,3,3,103,1103,3103,3103,6,7,'JPAAAA','OSOAAA','OOOOxx' -9335,9947,1,3,5,15,35,335,1335,4335,9335,70,71,'BVAAAA','PSOAAA','VVVVxx' -9200,9948,0,0,0,0,0,200,1200,4200,9200,0,1,'WPAAAA','QSOAAA','AAAAxx' -8665,9949,1,1,5,5,65,665,665,3665,8665,130,131,'HVAAAA','RSOAAA','HHHHxx' -1356,9950,0,0,6,16,56,356,1356,1356,1356,112,113,'EAAAAA','SSOAAA','OOOOxx' -6118,9951,0,2,8,18,18,118,118,1118,6118,36,37,'IBAAAA','TSOAAA','VVVVxx' -4605,9952,1,1,5,5,5,605,605,4605,4605,10,11,'DVAAAA','USOAAA','AAAAxx' -5651,9953,1,3,1,11,51,651,1651,651,5651,102,103,'JJAAAA','VSOAAA','HHHHxx' -9055,9954,1,3,5,15,55,55,1055,4055,9055,110,111,'HKAAAA','WSOAAA','OOOOxx' -8461,9955,1,1,1,1,61,461,461,3461,8461,122,123,'LNAAAA','XSOAAA','VVVVxx' -6107,9956,1,3,7,7,7,107,107,1107,6107,14,15,'XAAAAA','YSOAAA','AAAAxx' -1967,9957,1,3,7,7,67,967,1967,1967,1967,134,135,'RXAAAA','ZSOAAA','HHHHxx' -8910,9958,0,2,0,10,10,910,910,3910,8910,20,21,'SEAAAA','ATOAAA','OOOOxx' -8257,9959,1,1,7,17,57,257,257,3257,8257,114,115,'PFAAAA','BTOAAA','VVVVxx' -851,9960,1,3,1,11,51,851,851,851,851,102,103,'TGAAAA','CTOAAA','AAAAxx' -7823,9961,1,3,3,3,23,823,1823,2823,7823,46,47,'XOAAAA','DTOAAA','HHHHxx' -3208,9962,0,0,8,8,8,208,1208,3208,3208,16,17,'KTAAAA','ETOAAA','OOOOxx' -856,9963,0,0,6,16,56,856,856,856,856,112,113,'YGAAAA','FTOAAA','VVVVxx' -2654,9964,0,2,4,14,54,654,654,2654,2654,108,109,'CYAAAA','GTOAAA','AAAAxx' -7185,9965,1,1,5,5,85,185,1185,2185,7185,170,171,'JQAAAA','HTOAAA','HHHHxx' -309,9966,1,1,9,9,9,309,309,309,309,18,19,'XLAAAA','ITOAAA','OOOOxx' -9752,9967,0,0,2,12,52,752,1752,4752,9752,104,105,'CLAAAA','JTOAAA','VVVVxx' -6405,9968,1,1,5,5,5,405,405,1405,6405,10,11,'JMAAAA','KTOAAA','AAAAxx' -6113,9969,1,1,3,13,13,113,113,1113,6113,26,27,'DBAAAA','LTOAAA','HHHHxx' -9774,9970,0,2,4,14,74,774,1774,4774,9774,148,149,'YLAAAA','MTOAAA','OOOOxx' -1674,9971,0,2,4,14,74,674,1674,1674,1674,148,149,'KMAAAA','NTOAAA','VVVVxx' -9602,9972,0,2,2,2,2,602,1602,4602,9602,4,5,'IFAAAA','OTOAAA','AAAAxx' -1363,9973,1,3,3,3,63,363,1363,1363,1363,126,127,'LAAAAA','PTOAAA','HHHHxx' -6887,9974,1,3,7,7,87,887,887,1887,6887,174,175,'XEAAAA','QTOAAA','OOOOxx' -6170,9975,0,2,0,10,70,170,170,1170,6170,140,141,'IDAAAA','RTOAAA','VVVVxx' -8888,9976,0,0,8,8,88,888,888,3888,8888,176,177,'WDAAAA','STOAAA','AAAAxx' -2981,9977,1,1,1,1,81,981,981,2981,2981,162,163,'RKAAAA','TTOAAA','HHHHxx' -7369,9978,1,1,9,9,69,369,1369,2369,7369,138,139,'LXAAAA','UTOAAA','OOOOxx' -6227,9979,1,3,7,7,27,227,227,1227,6227,54,55,'NFAAAA','VTOAAA','VVVVxx' -8002,9980,0,2,2,2,2,2,2,3002,8002,4,5,'UVAAAA','WTOAAA','AAAAxx' -4288,9981,0,0,8,8,88,288,288,4288,4288,176,177,'YIAAAA','XTOAAA','HHHHxx' -5136,9982,0,0,6,16,36,136,1136,136,5136,72,73,'OPAAAA','YTOAAA','OOOOxx' -1084,9983,0,0,4,4,84,84,1084,1084,1084,168,169,'SPAAAA','ZTOAAA','VVVVxx' -9117,9984,1,1,7,17,17,117,1117,4117,9117,34,35,'RMAAAA','AUOAAA','AAAAxx' -2406,9985,0,2,6,6,6,406,406,2406,2406,12,13,'OOAAAA','BUOAAA','HHHHxx' -1384,9986,0,0,4,4,84,384,1384,1384,1384,168,169,'GBAAAA','CUOAAA','OOOOxx' -9194,9987,0,2,4,14,94,194,1194,4194,9194,188,189,'QPAAAA','DUOAAA','VVVVxx' -858,9988,0,2,8,18,58,858,858,858,858,116,117,'AHAAAA','EUOAAA','AAAAxx' -8592,9989,0,0,2,12,92,592,592,3592,8592,184,185,'MSAAAA','FUOAAA','HHHHxx' -4773,9990,1,1,3,13,73,773,773,4773,4773,146,147,'PBAAAA','GUOAAA','OOOOxx' -4093,9991,1,1,3,13,93,93,93,4093,4093,186,187,'LBAAAA','HUOAAA','VVVVxx' -6587,9992,1,3,7,7,87,587,587,1587,6587,174,175,'JTAAAA','IUOAAA','AAAAxx' -6093,9993,1,1,3,13,93,93,93,1093,6093,186,187,'JAAAAA','JUOAAA','HHHHxx' -429,9994,1,1,9,9,29,429,429,429,429,58,59,'NQAAAA','KUOAAA','OOOOxx' -5780,9995,0,0,0,0,80,780,1780,780,5780,160,161,'IOAAAA','LUOAAA','VVVVxx' -1783,9996,1,3,3,3,83,783,1783,1783,1783,166,167,'PQAAAA','MUOAAA','AAAAxx' -2992,9997,0,0,2,12,92,992,992,2992,2992,184,185,'CLAAAA','NUOAAA','HHHHxx' -0,9998,0,0,0,0,0,0,0,0,0,0,1,'AAAAAA','OUOAAA','OOOOxx' -2968,9999,0,0,8,8,68,968,968,2968,2968,136,137,'EKAAAA','PUOAAA','VVVVxx' diff --git a/sql-bench/Makefile.am b/sql-bench/Makefile.am deleted file mode 100644 index 12f3d5550b388bf410f9f9fa3915091c761f2cd2..0000000000000000000000000000000000000000 --- a/sql-bench/Makefile.am +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA - -## Process this file with automake to create Makefile.in - -benchdir_root= $(prefix) -benchdir = $(benchdir_root)/sql-bench -bench_SCRIPTS = test-ATIS test-connect test-create test-insert \ - test-big-tables test-select test-wisconsin \ - test-alter-table test-transactions \ - graph-compare-results \ - bench-init.pl compare-results run-all-tests \ - server-cfg crash-me copy-db innotest1 innotest1a \ - innotest1b innotest2 innotest2a innotest2b \ - bench-count-distinct -CLEANFILES = $(bench_SCRIPTS) -EXTRA_SCRIPTS = test-ATIS.sh test-connect.sh test-create.sh \ - test-insert.sh test-big-tables.sh test-select.sh \ - test-alter-table.sh test-wisconsin.sh \ - test-transactions.sh \ - bench-init.pl.sh compare-results.sh server-cfg.sh \ - run-all-tests.sh crash-me.sh copy-db.sh \ - graph-compare-results.sh innotest1.sh innotest1a.sh \ - innotest1b.sh innotest2.sh innotest2a.sh innotest2b.sh \ - bench-count-distinct.sh -EXTRA_DIST = $(EXTRA_SCRIPTS) - -dist-hook: - mkdir -p $(distdir)/Data/ATIS $(distdir)/Data/Wisconsin \ - $(distdir)/limits $(distdir)/Comments - for i in $(srcdir)/Data/ATIS/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Data/ATIS ; done - for i in $(srcdir)/Data/Wisconsin/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Data/Wisconsin ; done - for i in $(srcdir)/limits/*.* ; do $(INSTALL_DATA) $$i $(distdir)/limits; done - for i in $(srcdir)/Comments/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Comments; done - -install-data-local: - $(mkinstalldirs) \ - $(DESTDIR)$(benchdir)/Data \ - $(DESTDIR)$(benchdir)/Data/ATIS \ - $(DESTDIR)$(benchdir)/Data/Wisconsin \ - $(DESTDIR)$(benchdir)/limits \ - $(DESTDIR)$(benchdir)/Comments - $(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(benchdir) - for i in $(srcdir)/Data/ATIS/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Data/ATIS ; done - for i in $(srcdir)/Data/Wisconsin/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Data/Wisconsin ; done - for i in $(srcdir)/limits/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/limits; done - for i in $(srcdir)/Comments/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Comments; done - -uninstall-local: - @RM@ -f -r $(DESTDIR)$(benchdir) - -SUFFIXES = .sh - -.sh: - @RM@ -f $@ $@-t - @SED@ \ - -e 's!@''benchdir''@!$(benchdir)!g' \ - -e 's!@''bindir''@!$(bindir)!g' \ - -e 's!@''scriptdir''@!$(bindir)!g' \ - -e 's!@''prefix''@!$(prefix)!g' \ - -e 's!@''datadir''@!$(datadir)!g' \ - -e 's!@''localstatedir''@!$(localstatedir)!g' \ - -e 's!@''libexecdir''@!$(libexecdir)!g' \ - -e 's!@''PERL''@!@PERL@!' \ - -e 's!@''VERSION''@!@VERSION@!' \ - -e 's!@''MYSQL_SERVER_SUFFIX''@!@MYSQL_SERVER_SUFFIX@!' \ - $< > $@-t - @CHMOD@ +x $@-t - @MV@ $@-t $@ - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/sql-bench/README b/sql-bench/README deleted file mode 100755 index 431659a875688f1c30e5d7e3442c6009260bec7d..0000000000000000000000000000000000000000 --- a/sql-bench/README +++ /dev/null @@ -1,93 +0,0 @@ -The MySQL Benchmarks - -These tests require a MySQL version of at least 3.20.28 or 3.21.10. - -Currently the following servers are supported: -MySQL 3.20 and 3.21, PostgreSQL 6.#, mSQL 2.# and Solid Server 2.2 - -The benchmark directory contains the query files and raw data files used to -populate the MySQL benchmark tables. In order to run the benchmarks, you -should normally execute a command such as the following: - -run-all-tests --server=mysql --cmp=mysql,pg,solid --user=test --password=test --log - -This means that you want to run the benchmarks with MySQL. The -limits should be taken from all of MySQL, PostgreSQL, and Solid. -The login name and password for connecting to the server both are -``test''. The result should be saved as a RUN file in the output -directory. - -When run-all-tests has finished, will have the individual results and the -the total RUN- file in the output directory. - -If you want to look at some old results, use the compare-results script. -For example: - -compare-results --dir=Results --cmp=mysql,pg,solid -compare-results --dir=Results --cmp=mysql,pg,solid --relative - -compare-results --dir=Results --cmp=msql,mysql,pg,solid -compare-results --dir=Results --cmp=msql,mysql,pg,solid --relative - -compare-results --dir=Results --server=mysql --same-server --cmp=mysql,pg,solid - -Some of the files in the benchmark directory are: - -File Description - -Data/ATIS Contains data for 29 related tables used in the ATIS tests. -Data/Wisconsin Contains data for the Wisconsin benchmark. -Results Contains old benchmark results. -Makefile.am Automake Makefile -README This file. -test-ATIS.sh Creation of 29 tables and a lot of selects on them. -test-connect.sh Test how fast a connection to the server is. -test-create.sh Test how fast a table is created. -test-insert.sh Test create and fill of a table. -test-wisconsin.sh A port of the PostgreSQL version of this benchmark. -run-all-tests Use this to run all tests. When all tests are run, - use the --log and --use-old options to get a RUN-file. -compare-results Generates a comparison table from different RUN files. -server-cfg Contains the limits and functions for all supported - SQL servers. If you want to add a new server, this - should be the only file that neads to be changed. - - -Most of the tests should use portable SQL to make it possible to -compare different databases. Sometimes SQL extensions can make things -a lot faster. In this case the test may use the extensions if the --fast -option is used. - -Useful options to all test-scripts (and run-all-tests): - ---host=# Hostname for MySQL server (default: localhost) ---db=# Database to use (default: test) ---fast Allow use of any non-standard SQL extension to - get things done faster. ---lock-tables Use table locking to get more speed. - -From a text at http://www.mgt.ncu.edu.tw/CSIM/Paper/sixth/11.html: - -The Wisconsin Benchmark - -The Wisconsin Benchmark described in [Bitton, DeWitt, and Turbyfill -1983] [Boral and DeWitt 1984] [Bitton and Turbyfill 1985] [Bitton and -Turbyfill 1988], and [DeWitt 1993] is the first effort to -systematically measure and compare the performance of relational -database systems with database machines. The benchmark is a -single-user and single-factor experiment using a synthetic database -and a controlled workload. It measures the query optimization -performance of database systems with 32 query types to exercise the -components of the proposed systems. The query suites include -selection, join, projection, aggregate, and simple update queries. - -The test database consists of four generic relations. The tenk -relation is the key table and most used. Two data types of small -integer numbers and character strings are utilized. Data values are -uniformly distributed. The primary metric is the query elapsed -time. The main criticisms of the benchmark include the nature of -single-user workload, the simplistic database structure, and the -unrealistic query tests. A number of efforts have been made to extend -the benchmark to incorporate the multi-user test. However, they do -not receive the same acceptance as the original Wisconsin benchmark -except an extension work called the AS3AP benchmark. diff --git a/sql-bench/Results-win32/ATIS-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/ATIS-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index 2a20462392c50e9e203369f7800af44667ff19d2..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Access 2000' at 2000-01-03 3:59:36 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.50 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 58 wallclock secs (58.44 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 12 wallclock secs (11.59 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 82 wallclock secs (81.89 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 46 wallclock secs (46.14 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2400): 42 wallclock secs (42.24 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.16 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 241 wallclock secs (241.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/ATIS-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 854f3cb2fd1b8d94a8c964348b534d776c718e06..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'IBM DB2 5' at 1998-11-21 23:09:24 - -ATIS table test - -Creating tables -Time for create_table (28): 47 secs (46.89 usr 0.00 sys = 46.89 cpu) - -Inserting data -Time to insert (9768): 101 secs (101.33 usr 0.00 sys = 101.33 cpu) - -Retrieving data -Time for select_simple_join (500): 26 secs (26.36 usr 0.00 sys = 26.36 cpu) -Time for select_join (200): 225 secs (224.28 usr 0.00 sys = 224.28 cpu) -Time for select_distinct (800): 82 secs (82.50 usr 0.00 sys = 82.50 cpu) -Time for select_group (2100): 32 secs (31.38 usr 0.00 sys = 31.38 cpu) - -Removing tables -Time to drop_table (28): 1 secs ( 1.23 usr 0.00 sys = 1.23 cpu) -Total time: 515 secs (514.66 usr 0.00 sys = 514.66 cpu) diff --git a/sql-bench/Results-win32/ATIS-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index d5fc39659022c024e7e0835968e992dc64314873..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-09-01 2:00:37 - -ATIS table test - -Creating tables -Time for create_table (28): 3 secs ( 2.81 usr 0.00 sys = 2.81 cpu) - -Inserting data -Time to insert (9768): 53 secs (52.98 usr 0.00 sys = 52.98 cpu) - -Retrieving data -Time for select_simple_join (500): 22 secs (21.83 usr 0.00 sys = 21.83 cpu) -Time for select_join (200): 99 secs (98.99 usr 0.00 sys = 98.99 cpu) -Time for select_distinct (800): 97 secs (97.37 usr 0.00 sys = 97.37 cpu) -Time for select_group (2100): 59 secs (58.55 usr 0.00 sys = 58.55 cpu) - -Removing tables -Time to drop_table (28): 0 secs ( 0.78 usr 0.00 sys = 0.78 cpu) -Total time: 333 secs (333.33 usr 0.00 sys = 333.33 cpu) diff --git a/sql-bench/Results-win32/ATIS-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 061447969d9021faeea4ae3a699f38f90ec095b1..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 2:15:22 - -ATIS table test - -Creating tables -Time for create_table (28): 1 secs ( 1.21 usr 0.00 sys = 1.21 cpu) - -Inserting data -Time to insert (9768): 65 secs (64.59 usr 0.00 sys = 64.59 cpu) - -Retrieving data -Time for select_simple_join (500): 8 secs ( 8.30 usr 0.00 sys = 8.30 cpu) -Time for select_join (200): 66 secs (65.25 usr 0.00 sys = 65.25 cpu) -Time for select_distinct (800): 59 secs (59.65 usr 0.00 sys = 59.65 cpu) -Time for select_group (2100): 31 secs (30.33 usr 0.00 sys = 30.33 cpu) - -Removing tables -Time to drop_table (28): 1 secs ( 1.07 usr 0.00 sys = 1.07 cpu) -Total time: 231 secs (230.45 usr 0.00 sys = 230.45 cpu) diff --git a/sql-bench/Results-win32/ATIS-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 8b5cd5d24c9e38ba01abbc0a6bc22310606ce93d..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:53:01 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr + 0.01 sys = 0.01 CPU) - -Inserting data -Time to insert (9768): 8 wallclock secs ( 1.66 usr + 1.41 sys = 3.07 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 1.23 usr + 0.50 sys = 1.73 CPU) -Time for select_join (200): 31 wallclock secs ( 8.80 usr + 4.19 sys = 12.99 CPU) -Time for select_distinct (800): 17 wallclock secs ( 3.22 usr + 1.51 sys = 4.74 CPU) -Time for select_group (2100): 12 wallclock secs ( 1.95 usr + 0.58 sys = 2.53 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr + 0.02 sys = 0.02 CPU) -Total time: 71 wallclock secs (16.88 usr + 8.22 sys = 25.11 CPU) diff --git a/sql-bench/Results-win32/ATIS-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/ATIS-mysql-win98-cmp-access,mysql deleted file mode 100644 index 35e02bc97f06a0b599b1627880d99f7725f06c35..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 12:17:54 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.22 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 15 wallclock secs (15.48 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 9 wallclock secs ( 8.35 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 51 wallclock secs (51.25 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 36 wallclock secs (36.52 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2100): 23 wallclock secs (22.96 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 134 wallclock secs (134.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index d0ab9a21940aa8297db04ae33026572a500b9838..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:41:12 - -ATIS table test - -Creating tables -Time for create_table (28): 1 secs ( 0.17 usr 0.00 sys = 0.17 cpu) - -Inserting data -Time to insert (9768): 15 secs (15.52 usr 0.00 sys = 15.52 cpu) - -Retrieving data -Time for select_simple_join (500): 10 secs ( 9.62 usr 0.00 sys = 9.62 cpu) -Time for select_join (200): 91 secs (90.99 usr 0.00 sys = 90.99 cpu) -Time for select_distinct (800): 35 secs (35.07 usr 0.00 sys = 35.07 cpu) -Time for select_group (2100): 16 secs (15.83 usr 0.00 sys = 15.83 cpu) - -Removing tables -Time to drop_table (28): 0 secs ( 0.07 usr 0.00 sys = 0.07 cpu) -Total time: 168 secs (167.31 usr 0.00 sys = 167.31 cpu) diff --git a/sql-bench/Results-win32/ATIS-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index c33c525126cef202f673b9c1b2670300f404bff9..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-03 22:29:55 - -ATIS table test - -Creating tables -Time for create_table (28): 3 wallclock secs ( 0.11 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 87 wallclock secs (13.15 usr 1.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 28 wallclock secs (13.20 usr 2.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 255 wallclock secs (112.16 usr 20.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 79 wallclock secs (37.62 usr 6.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2100): 30 wallclock secs ( 9.51 usr 2.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 4 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 486 wallclock secs (185.81 usr 33.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/ATIS-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4935821fd48b22423730c17078fc49c958ad9087..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-06 17:43:41 - -ATIS table test - -Creating tables -Time for create_table (28): 2 secs ( 1.80 usr 0.00 sys = 1.80 cpu) - -Inserting data -Time to insert (9768): 45 secs (45.27 usr 0.00 sys = 45.27 cpu) - -Retrieving data -Time for select_simple_join (500): 69 secs (69.48 usr 0.00 sys = 69.48 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -172 queries in 86 loops of 100 loops took 601 seconds -Estimated time for select_join (200): 698 secs (698.11 usr 0.00 sys = 698.11 cpu) -Time for select_distinct (800): 327 secs (327.14 usr 0.00 sys = 327.14 cpu) -Time for select_group (2100): 105 secs (105.28 usr 0.00 sys = 105.28 cpu) - -Removing tables -Time to drop_table (28): 2 secs ( 1.68 usr 0.00 sys = 1.68 cpu) -Estimated total time: 1248 secs (1248.81 usr 0.00 sys = 1248.81 cpu) diff --git a/sql-bench/Results-win32/ATIS-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/ATIS-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 40c0f169f40de5c3032afdf532bf8b7e81fbd656..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/ATIS-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-08-27 2:08:30 - -ATIS table test - -Creating tables -Time for create_table (28): 2 secs ( 1.41 usr 0.00 sys = 1.41 cpu) - -Inserting data -Time to insert (9768): 120 secs (120.34 usr 0.00 sys = 120.34 cpu) - -Retrieving data -Time for select_simple_join (500): 17 secs (16.86 usr 0.00 sys = 16.86 cpu) -Time for select_join (200): 114 secs (114.63 usr 0.00 sys = 114.63 cpu) -Time for select_distinct (800): 64 secs (63.34 usr 0.00 sys = 63.34 cpu) -Time for select_group (2100): 21 secs (21.00 usr 0.00 sys = 21.00 cpu) - -Removing tables -Time to drop_table (28): 0 secs ( 0.31 usr 0.00 sys = 0.31 cpu) -Total time: 338 secs (337.94 usr 0.00 sys = 337.94 cpu) diff --git a/sql-bench/Results-win32/RUN-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/RUN-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index 58dbaa500e382b481a6c50844cf7358732e5337b..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,68 +0,0 @@ -Benchmark DBD suite: 2.5 -Date of test: 2000-01-06 2:01:10 -Running tests on: Windows 98 [Version 4.10.1998] -Arguments: -Comments: -Limits from: access,mysql -Server version: Access 2000 - -alter-table: Total time: 8 wallclock secs ( 8.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -ATIS: Total time: 241 wallclock secs (241.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 457 wallclock secs (457.69 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 5012 wallclock secs (5011.52 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 699 wallclock secs (698.76 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 39293 wallclock secs (39294.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 1710 wallclock secs (1710.98 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 282 wallclock secs (281.60 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line -Tests with didn't return the correct result have a ? at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 1.15 0.00 0.00 247 -alter_table_drop 1 0.71 0.00 0.00 124 -connect 1267 1267.63 0.00 0.00 10000 -connect+select_1_row 1780 1779.92 0.00 0.00 10000 ? -connect+select_simpl 1766 1765.08 0.00 0.00 10000 -count 328 327.46 0.00 0.00 100 -count_on_key 460 460.61 0.00 0.00 50100 -create+drop 187 186.36 0.00 0.00 7000 -create_index 0 0.11 0.00 0.00 8 -create_key+drop 207 207.73 0.00 0.00 7000 -create_many_tables 142 141.43 0.00 0.00 7000 -create_table 2 0.67 0.00 0.00 31 -delete_big 276 275.57 0.00 0.00 13 -delete_big_many_keys 12569 12568.66 0.00 0.00 2 -delete_key 79 79.31 0.00 0.00 500 -drop_index 0 0.06 0.00 0.00 8 -drop_table 109 109.79 0.00 0.00 7028 -insert 2347 2347.51 0.00 0.00 350768 -insert_duplicates 209 208.61 0.00 0.00 300000 -insert_key 10591 10591.45 0.00 0.00 100000 -insert_many_fields 124 124.51 0.00 0.00 2000 -min_max 186 186.25 0.00 0.00 60 -min_max_on_key 1148 1148.04 0.00 0.00 73000 + -order_by 388 388.10 0.00 0.00 10 -order_by_key 396 395.80 0.00 0.00 10 -select_1_row 55 55.04 0.00 0.00 10000 -select_2_rows 56 55.81 0.00 0.00 10000 -select_big 365 364.81 0.00 0.00 10080 -select_diff_key 3 3.63 0.00 0.00 500 -select_distinct 46 46.14 0.00 0.00 800 -select_group 435 436.28 0.00 0.00 9491 -select_join 82 81.89 0.00 0.00 200 -select_key 2064 2064.23 0.00 0.00 200000 + -select_key_prefix 1674 1673.75 0.00 0.00 200000 + -select_many_fields 320 319.89 0.00 0.00 2000 -select_range 603 602.54 0.00 0.00 25420 -select_range_prefix 2091 2092.64 0.00 0.00 25010 + -select_simple 38 38.12 0.00 0.00 10000 -select_simple_join 12 11.59 0.00 0.00 500 -update_big 1550 1550.11 0.00 0.00 500 -update_of_key 887 887.11 0.00 0.00 756 -update_of_key_big 548 548.43 0.00 0.00 501 -update_with_key 2081 2080.30 0.00 0.00 100000 -wisc_benchmark 33 33.17 0.00 0.00 114 -TOTALS 47506 47508.00 0.00 0.00 1540881 ?++++ diff --git a/sql-bench/Results-win32/RUN-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 8d429da7866f1f74b0e0e52758e90d6b09840a13..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,54 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1999-02-02 7:10:24 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: IBM DB2 5 - -alter-table: Failed -ATIS: Total time: 515 secs (514.66 usr 0.00 sys = 514.66 cpu) -big-tables: Total time: 250 secs (249.43 usr 0.00 sys = 249.43 cpu) -connect: Failed -create: Total time: 1106 secs (1106.62 usr 0.00 sys = 1106.62 cpu) -insert: Estimated total time: 17508 secs (17508.04 usr 0.00 sys = 17508.04 cpu) -select: Estimated total time: 1934 secs (1934.67 usr 0.00 sys = 1934.67 cpu) -wisconsin: Total time: 368 secs (367.48 usr 0.00 sys = 367.48 cpu) - -Of 8 tests, 2 tests didn't work -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -count 87 87.24 0.00 87.24 100 -count_key 753 753.46 0.00 753.46 50000 + -count_on_key 58 57.98 0.00 57.98 100 -create+drop 408 408.21 0.00 408.21 1000 -create_key+drop 193 192.75 0.00 192.75 1000 -create_table 439 439.52 0.00 439.52 1031 -delete_big 451 450.96 0.00 450.96 15 -delete_key 16 15.97 0.00 15.97 500 -drop_table 107 107.42 0.00 107.42 1028 -insert 3460 3460.94 0.00 3460.94 350768 -insert_duplicates 353 353.39 0.00 353.39 300000 -insert_key 2484 2484.63 0.00 2484.63 100000 -insert_many_fields 135 135.62 0.00 135.62 20000 -min_max 56 55.56 0.00 55.56 60 -min_max_on_key 1631 1631.00 0.00 1631.00 73000 + -order_by 361 361.08 0.00 361.08 10 -order_by_key 369 368.78 0.00 368.78 10 -select_big 383 382.60 0.00 382.60 80 -select_distinct 82 82.50 0.00 82.50 800 -select_group 184 183.57 0.00 183.57 3191 -select_join 225 224.28 0.00 224.28 200 -select_key 1206 1206.37 0.00 1206.37 200000 + -select_key_prefix 1199 1199.40 0.00 1199.40 200000 + -select_many_fields 113 112.90 0.00 112.90 20000 -select_range 2170 2168.69 0.00 2168.69 25400 ++ -select_range_prefix 2150 2151.84 0.00 2151.84 25000 ++ -select_simple_join 26 26.36 0.00 26.36 500 -update_key 5 5.24 0.00 5.24 500 -update_key_big 542 542.23 0.00 542.23 501 -update_of_key 175 174.76 0.00 174.76 256 -wisc_benchmark 32 32.10 0.00 32.10 114 -TOTALS 19853 19857.35 0.00 19857.35 1375164 ++++++++ diff --git a/sql-bench/Results-win32/RUN-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 7e8f0efd6e18a04ea149bbe3b0e22943a4354193..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1998-10-05 15:25:42 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: Informix 7.30C1 - -alter-table: Total time: 7 secs ( 6.60 usr 0.00 sys = 6.60 cpu) -ATIS: Total time: 333 secs (333.33 usr 0.00 sys = 333.33 cpu) -big-tables: Total time: 285 secs (285.73 usr 0.00 sys = 285.73 cpu) -connect: Total time: 4225 secs (4225.65 usr 0.00 sys = 4225.65 cpu) -create: Total time: 222 secs (221.64 usr 0.00 sys = 221.64 cpu) -insert: Estimated total time: 305853 secs (305711.97 usr 0.00 sys = 305711.97 cpu) -select: Estimated total time: 8393 secs (8391.74 usr 0.00 sys = 8391.74 cpu) -wisconsin: Total time: 219 secs (219.03 usr 0.00 sys = 219.03 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 0 0.39 0.00 0.39 8 -connect 1989 1989.51 0.00 1989.51 10000 -connect+select 2050 2049.47 0.00 2049.47 10000 -count 116 115.85 0.00 115.85 100 -count_key 7825 7824.40 0.00 7824.40 50000 + -count_on_key 931 930.38 0.00 930.38 100 -create+drop 35 35.34 0.00 35.34 1000 -create_index 1 0.44 0.00 0.44 8 -create_key+drop 90 89.37 0.00 89.37 1000 -create_table 59 58.80 0.00 58.80 1031 -delete_big 11257 11256.92 0.00 11256.92 15 -delete_key 738 737.82 0.00 737.82 500 -drop_index 0 0.10 0.00 0.10 8 -drop_table 33 33.47 0.00 33.47 1028 -insert 2692 2693.19 0.00 2693.19 350768 -insert_duplicates 280 280.34 0.00 280.34 300000 -insert_key 8231 8231.23 0.00 8231.23 100000 -insert_many_fields 111 110.94 0.00 110.94 20000 -min_max 344 344.44 0.00 344.44 60 -min_max_on_key 1083 1083.57 0.00 1083.57 73000 + -order_by 518 517.79 0.00 517.79 10 -order_by_key 485 485.49 0.00 485.49 10 -select 112 112.36 0.00 112.36 20000 -select_big 580 579.87 0.00 579.87 10080 -select_distinct 97 97.37 0.00 97.37 800 -select_group 963 962.51 0.00 962.51 3191 -select_join 99 98.99 0.00 98.99 200 -select_key 121126 120992.76 0.00 120992.76 200000 + -select_key_prefix 119960 119942.91 0.00 119942.91 200000 + -select_many_fields 174 174.64 0.00 174.64 20000 -select_range 7307 7309.74 0.00 7309.74 25400 ++ -select_range_prefix 7448 7449.00 0.00 7449.00 25000 ++ -select_simple_join 22 21.83 0.00 21.83 500 -update_key 771 771.67 0.00 771.67 500 -update_key_big 3000 2999.42 0.00 2999.42 501 -update_of_key 2190 2190.23 0.00 2190.23 256 -wisc_benchmark 45 44.91 0.00 44.91 114 -TOTALS 302762 302617.46 0.00 302617.46 1425188 ++++++++ diff --git a/sql-bench/Results-win32/RUN-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b08b487e1f46dbd49920e0df04f77065ef832749..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1998-09-27 10:54:51 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) - -alter-table: Total time: 7 secs ( 7.50 usr 0.00 sys = 7.50 cpu) -ATIS: Total time: 231 secs (230.45 usr 0.00 sys = 230.45 cpu) -big-tables: Total time: 155 secs (154.44 usr 0.00 sys = 154.44 cpu) -connect: Total time: 535 secs (534.85 usr 0.00 sys = 534.85 cpu) -create: Total time: 152 secs (151.76 usr 0.00 sys = 151.76 cpu) -insert: Estimated total time: 15454 secs (15453.34 usr 0.00 sys = 15453.34 cpu) -select: Estimated total time: 1186 secs (1185.72 usr 0.00 sys = 1185.72 cpu) -wisconsin: Total time: 290 secs (290.80 usr 0.00 sys = 290.80 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 0 0.04 0.00 0.04 8 -connect 202 201.91 0.00 201.91 10000 -connect+select 234 234.54 0.00 234.54 10000 -count 49 49.15 0.00 49.15 100 -count_key 763 762.84 0.00 762.84 50000 + -count_on_key 18 17.22 0.00 17.22 100 -create+drop 35 34.23 0.00 34.23 1000 -create_index 1 0.64 0.00 0.64 8 -create_key+drop 36 36.10 0.00 36.10 1000 -create_table 56 57.17 0.00 57.17 1031 -delete_big 877 877.05 0.00 877.05 15 -delete_key 21 21.33 0.00 21.33 500 -drop_index 0 0.07 0.00 0.07 8 -drop_table 7 6.87 0.00 6.87 1028 -insert 4012 4011.32 0.00 4011.32 350768 -insert_duplicates 286 285.70 0.00 285.70 300000 -insert_key 5181 5181.56 0.00 5181.56 100000 -insert_many_fields 76 75.76 0.00 75.76 20000 -min_max 115 115.58 0.00 115.58 60 -min_max_on_key 333 332.78 0.00 332.78 73000 -order_by 250 250.66 0.00 250.66 10 -order_by_key 201 200.90 0.00 200.90 10 -select 65 64.78 0.00 64.78 20000 -select_big 238 237.78 0.00 237.78 10080 -select_distinct 59 59.65 0.00 59.65 800 -select_group 126 126.06 0.00 126.06 3191 -select_join 66 65.25 0.00 65.25 200 -select_key 1634 1634.55 0.00 1634.55 200000 + -select_key_prefix 1698 1696.55 0.00 1696.55 200000 + -select_many_fields 78 78.61 0.00 78.61 20000 -select_range 87 86.24 0.00 86.24 25400 -select_range_prefix 68 69.08 0.00 69.08 25000 -select_simple_join 8 8.30 0.00 8.30 500 -update_key 8 8.00 0.00 8.00 500 -update_key_big 403 402.89 0.00 402.89 501 -update_of_key 674 674.29 0.00 674.29 256 -wisc_benchmark 24 23.97 0.00 23.97 114 -TOTALS 17989 17989.42 0.00 17989.42 1425188 +++ diff --git a/sql-bench/Results-win32/RUN-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 91a519b208c8651dfe904096ad632fe016d32656..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1999-03-08 10:55:47 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: MySQL 3.22.16 gamma - -ATIS: Total time: 71 wallclock secs (16.88 usr + 8.22 sys = 25.11 CPU) -alter-table: Total time: 5 wallclock secs ( 0.19 usr + 0.17 sys = 0.36 CPU) -big-tables: Total time: 74 wallclock secs (23.40 usr + 8.04 sys = 31.45 CPU) -connect: Total time: 155 wallclock secs (45.74 usr + 33.56 sys = 79.29 CPU) -create: Total time: 72 wallclock secs ( 2.05 usr + 0.97 sys = 3.02 CPU) -insert: Total time: 5368 wallclock secs (568.77 usr + 216.27 sys = 785.04 CPU) -select: Estimated total time: 899 wallclock secs (90.43 usr + 24.97 sys = 115.41 CPU) -wisconsin: Total time: 38 wallclock secs ( 7.83 usr + 5.25 sys = 13.08 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.01 0.00 0.01 8 -connect 56 16.91 13.01 29.92 10000 -connect+select 64 18.76 14.96 33.72 10000 -count 54 0.06 0.01 0.07 100 -count_key 665 36.67 9.66 46.33 50000 + -count_on_key 31 0.08 0.04 0.12 100 -create+drop 14 0.40 0.19 0.59 1000 -create_index 2 0.00 0.00 0.00 8 -create_key+drop 18 0.85 0.33 1.18 1000 -create_table 23 0.47 0.19 0.66 1031 -delete_big 678 0.01 0.00 0.01 15 -delete_key 1 0.10 0.08 0.18 500 -drop_index 1 0.00 0.00 0.00 8 -drop_table 3 0.10 0.18 0.28 1028 -insert 381 67.34 48.27 115.61 350768 -insert_duplicates 68 16.34 13.36 29.70 300000 -insert_key 2906 27.77 14.64 42.41 100000 -insert_many_fields 30 7.32 2.84 10.16 20000 -min_max 26 0.06 0.01 0.07 60 -min_max_on_key 220 51.97 14.10 66.07 73000 -order_by 100 40.72 19.97 60.69 10 -order_by_key 73 40.79 20.33 61.12 10 -select 21 3.50 3.78 7.30 20000 -select_big 88 47.93 21.83 69.76 10080 -select_distinct 17 3.22 1.51 4.74 800 -select_group 53 2.23 0.70 2.93 3191 -select_join 31 8.80 4.19 12.99 200 -select_key 367 157.27 40.25 197.51 200000 -select_key_prefix 375 158.15 38.91 197.05 200000 -select_many_fields 44 16.07 5.19 21.28 20000 -select_range 40 13.94 3.73 17.68 25400 -select_range_prefix 34 12.64 3.04 15.68 25000 -select_simple_join 3 1.23 0.50 1.73 500 -update_key 0 0.09 0.05 0.14 500 -update_key_big 26 0.10 0.06 0.16 501 -update_of_key 157 0.04 0.04 0.08 256 -wisc_benchmark 8 3.07 1.29 4.37 114 -TOTALS 6679 755.01 297.24 1052.30 1425188 + diff --git a/sql-bench/Results-win32/RUN-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/RUN-mysql-win98-cmp-access,mysql deleted file mode 100644 index a6858c2b2faebeacc5235d94c8cd71452f7183cf..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,67 +0,0 @@ -Benchmark DBD suite: 2.5 -Date of test: 2000-01-05 11:04:50 -Running tests on: Windows 98 [Version 4.10.1998] -Arguments: -Comments: key_buffer=16M -Limits from: access,mysql -Server version: MySQL 3.23.8 alpha - -alter-table: Total time: 57 wallclock secs (57.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -ATIS: Total time: 134 wallclock secs (134.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 51 wallclock secs (50.91 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 276 wallclock secs (275.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 9601 wallclock secs (9600.98 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 4315 wallclock secs (4316.21 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 1053 wallclock secs (1053.14 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 68 wallclock secs (68.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 31 30.48 0.00 0.00 247 -alter_table_drop 21 21.25 0.00 0.00 124 -connect 55 54.76 0.00 0.00 10000 -connect+select_1_row 75 75.96 0.00 0.00 10000 -connect+select_simpl 71 70.80 0.00 0.00 10000 -count 58 57.94 0.00 0.00 100 -count_on_key 697 697.45 0.00 0.00 50100 + -create+drop 1011 1011.13 0.00 0.00 7000 -create_index 2 2.09 0.00 0.00 8 -create_key+drop 1025 1025.23 0.00 0.00 7000 -create_many_tables 2530 2529.76 0.00 0.00 7000 -create_table 0 0.33 0.00 0.00 31 -delete_big 28 26.81 0.00 0.00 13 -delete_big_many_keys 102 102.60 0.00 0.00 2 -delete_key 1 0.93 0.00 0.00 500 -drop_index 2 1.98 0.00 0.00 8 -drop_table 316 315.72 0.00 0.00 7028 -insert 569 569.79 0.00 0.00 350768 -insert_duplicates 107 106.89 0.00 0.00 300000 -insert_key 367 367.34 0.00 0.00 100000 -insert_many_fields 8 7.91 0.00 0.00 2000 -min_max 34 33.78 0.00 0.00 60 -min_max_on_key 360 360.20 0.00 0.00 73000 -order_by 282 281.88 0.00 0.00 10 -order_by_key 192 192.79 0.00 0.00 10 -select_1_row 18 17.30 0.00 0.00 10000 -select_2_rows 20 20.65 0.00 0.00 10000 -select_big 216 216.01 0.00 0.00 10080 -select_diff_key 264 263.97 0.00 0.00 500 -select_distinct 36 36.52 0.00 0.00 800 -select_group 4781 4780.38 0.00 0.00 9191 -select_join 51 51.25 0.00 0.00 200 -select_key 635 635.54 0.00 0.00 200000 + -select_key_prefix 639 638.34 0.00 0.00 200000 + -select_many_fields 43 42.89 0.00 0.00 2000 -select_range 113 113.04 0.00 0.00 25420 -select_range_prefix 76 76.23 0.00 0.00 25010 -select_simple 13 13.45 0.00 0.00 10000 -select_simple_join 9 8.35 0.00 0.00 500 -update_big 96 96.78 0.00 0.00 500 -update_of_key 54 54.00 0.00 0.00 756 -update_of_key_big 40 39.93 0.00 0.00 501 -update_with_key 485 484.77 0.00 0.00 100000 -wisc_benchmark 18 18.67 0.00 0.00 114 -TOTALS 15551 15553.87 0.00 0.00 1540581 +++ diff --git a/sql-bench/Results-win32/RUN-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4eea16816703adf99441bd6961f4b9a5b7a71d5c..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1999-02-07 11:41:07 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: MySQL 3.22.16 gamma - -alter-table: Total time: 4 secs ( 4.33 usr 0.00 sys = 4.33 cpu) -ATIS: Total time: 168 secs (167.31 usr 0.00 sys = 167.31 cpu) -big-tables: Total time: 100 secs (100.14 usr 0.00 sys = 100.14 cpu) -connect: Total time: 459 secs (458.81 usr 0.00 sys = 458.81 cpu) -create: Total time: 78 secs (78.59 usr 0.00 sys = 78.59 cpu) -insert: Total time: 6744 secs (6743.40 usr 0.00 sys = 6743.40 cpu) -select: Estimated total time: 1003 secs (1003.10 usr 0.00 sys = 1003.10 cpu) -wisconsin: Total time: 74 secs (74.07 usr 0.00 sys = 74.07 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.61 0.00 0.61 8 -connect 189 188.69 0.00 188.69 10000 -connect+select 211 211.59 0.00 211.59 10000 -count 58 58.27 0.00 58.27 100 -count_key 709 709.52 0.00 709.52 50000 + -count_on_key 34 33.86 0.00 33.86 100 -create+drop 15 15.21 0.00 15.21 1000 -create_index 1 0.91 0.00 0.91 8 -create_key+drop 20 20.05 0.00 20.05 1000 -create_table 23 22.06 0.00 22.06 1031 -delete_big 681 680.82 0.00 680.82 15 -delete_key 2 1.83 0.00 1.83 500 -drop_index 1 1.11 0.00 1.11 8 -drop_table 4 3.80 0.00 3.80 1028 -insert 619 619.49 0.00 619.49 350768 -insert_duplicates 144 143.90 0.00 143.90 300000 -insert_key 2908 2907.97 0.00 2907.97 100000 -insert_many_fields 40 40.29 0.00 40.29 20000 -min_max 28 28.04 0.00 28.04 60 -min_max_on_key 268 267.73 0.00 267.73 73000 -order_by 382 381.52 0.00 381.52 10 -order_by_key 355 355.39 0.00 355.39 10 -select 39 38.76 0.00 38.76 20000 -select_big 377 376.50 0.00 376.50 10080 -select_distinct 35 35.07 0.00 35.07 800 -select_group 61 61.91 0.00 61.91 3191 -select_join 91 90.99 0.00 90.99 200 -select_key 464 463.54 0.00 463.54 200000 -select_key_prefix 470 470.56 0.00 470.56 200000 -select_many_fields 60 59.85 0.00 59.85 20000 -select_range 62 61.89 0.00 61.89 25400 -select_range_prefix 51 50.65 0.00 50.65 25000 -select_simple_join 10 9.62 0.00 9.62 500 -update_key 1 0.95 0.00 0.95 500 -update_key_big 26 26.35 0.00 26.35 501 -update_of_key 164 163.52 0.00 163.52 256 -wisc_benchmark 23 23.44 0.00 23.44 114 -TOTALS 8627 8626.26 0.00 8626.26 1425188 + diff --git a/sql-bench/Results-win32/RUN-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index db88db47926ce62891bee106edfc3e3051b3412b..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,59 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-04-03 22:29:52 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: Oracle 8.0.4.0.0 - -ATIS: Total time: 486 wallclock secs (185.81 usr 33.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 8 wallclock secs ( 1.15 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 246 wallclock secs (93.94 usr 13.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 17520 wallclock secs (504.84 usr 806.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 947 wallclock secs (15.04 usr 1.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 114468 wallclock secs (3850.94 usr 602.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 2147 wallclock secs (304.96 usr 63.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 335 wallclock secs (86.43 usr 10.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.00 0.00 0.00 8 -connect 8713 195.47 436.40 0.00 10000 -connect+select 8722 257.48 362.71 0.00 10000 -count 51 0.30 0.04 0.00 100 -count_on_key 869 118.48 25.29 0.00 50100 + -create+drop 288 4.23 0.58 0.00 1000 -create_index 0 0.00 0.00 0.00 8 -create_key+drop 411 4.65 0.38 0.00 1000 -create_table 135 3.45 0.41 0.00 1031 -delete_big 784 0.09 0.18 0.00 15 -delete_key 628 0.70 0.16 0.00 500 -drop_index 1 0.01 0.02 0.00 8 -drop_table 112 1.34 0.17 0.00 1028 -insert 2924 493.77 58.70 0.00 350768 -insert_duplicates 353 195.15 26.95 0.00 300000 -insert_key 1293 151.81 16.58 0.00 100000 -insert_many_fields 150 29.55 3.33 0.00 20000 -min_max 25 0.22 0.03 0.00 60 -min_max_on_key 1181 165.25 35.39 0.00 73000 + -order_by 1098 570.85 95.67 0.00 10 + -order_by_key 1125 580.64 95.55 0.00 10 + -select 47 30.58 2.91 0.00 20000 -select_big 1174 599.95 105.18 0.00 10080 -select_distinct 79 37.62 6.46 0.00 800 -select_group 82 11.18 2.22 0.00 3191 -select_join 255 112.16 20.68 0.00 200 -select_key 86849 639.74 105.64 0.00 200000 + -select_key_prefix 1037 576.33 93.13 0.00 200000 + -select_many_fields 96 64.39 9.96 0.00 20000 -select_range 8072 36.50 5.27 0.00 25400 ++ -select_range_prefix 95 58.76 8.18 0.00 25000 -select_simple_join 28 13.20 2.31 0.00 500 -update_key 220 0.76 0.07 0.00 500 -update_key_big 429 0.83 0.20 0.00 501 -update_of_key 568 0.30 0.06 0.00 256 -wisc_benchmark 82 44.61 5.10 0.00 114 -TOTALS 127977 5000.35 1525.91 0.00 1425188 ++++++++ diff --git a/sql-bench/Results-win32/RUN-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 766942e7db3ef976442cfe234582ef272328ca59..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1998-10-23 9:11:16 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: Solid version ??? - -alter-table: Total time: 7 secs ( 6.71 usr 0.00 sys = 6.71 cpu) -ATIS: Estimated total time: 1248 secs (1248.81 usr 0.00 sys = 1248.81 cpu) -big-tables: Total time: 107 secs (107.11 usr 0.00 sys = 107.11 cpu) -connect: Total time: 871 secs (871.19 usr 0.00 sys = 871.19 cpu) -create: Total time: 161 secs (160.95 usr 0.00 sys = 160.95 cpu) -insert: Estimated total time: 192155 secs (192149.60 usr 0.00 sys = 192149.60 cpu) -select: Estimated total time: 28523 secs (28507.76 usr 0.00 sys = 28507.76 cpu) -wisconsin: Total time: 338 secs (338.33 usr 0.00 sys = 338.33 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 0 0.07 0.00 0.07 8 -connect 385 385.29 0.00 385.29 10000 -connect+select 414 413.81 0.00 413.81 10000 -count 2221 2220.87 0.00 2220.87 100 -count_key 16862 16847.20 0.00 16847.20 50000 + -count_on_key 2139 2139.16 0.00 2139.16 100 -create+drop 41 41.20 0.00 41.20 1000 -create_index 1 1.06 0.00 1.06 8 -create_key+drop 72 72.18 0.00 72.18 1000 -create_table 24 23.35 0.00 23.35 1031 -delete_big 2236 2235.76 0.00 2235.76 15 -delete_key 65 65.34 0.00 65.34 500 -drop_index 1 0.97 0.00 0.97 8 -drop_table 20 19.66 0.00 19.66 1028 -insert 1801 1801.89 0.00 1801.89 350768 -insert_duplicates 172 172.25 0.00 172.25 300000 -insert_key 9758 9757.93 0.00 9757.93 100000 -insert_many_fields 49 48.44 0.00 48.44 20000 -min_max 36388 36350.61 0.00 36350.61 3000 + -min_max_on_key 11504 11503.86 0.00 11503.86 73000 + -order_by 648 647.94 0.00 647.94 10 -order_by_key 653 653.06 0.00 653.06 10 -select 47 47.32 0.00 47.32 20000 -select_big 619 618.61 0.00 618.61 10080 -select_distinct 327 327.14 0.00 327.14 800 -select_group 2608 2608.20 0.00 2608.20 3191 -select_join 698 698.11 0.00 698.11 200 + -select_key 877 877.85 0.00 877.85 200000 + -select_key_prefix 843 842.99 0.00 842.99 200000 + -select_many_fields 56 56.39 0.00 56.39 20000 -select_range 22763 22774.06 0.00 22774.06 25400 ++ -select_range_prefix 22548 22532.98 0.00 22532.98 25000 ++ -select_simple_join 69 69.48 0.00 69.48 500 -update_key 2 2.71 0.00 2.71 500 -update_key_big 994 993.63 0.00 993.63 501 -update_of_key 16656 16655.63 0.00 16655.63 256 -wisc_benchmark 84 83.66 0.00 83.66 114 -TOTALS 154645 154590.66 0.00 154590.66 1428128 ++++++++++ diff --git a/sql-bench/Results-win32/RUN-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/RUN-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4cf61ed860d150775ffe423b91d48ae9c4e4b0b6..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/RUN-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,58 +0,0 @@ -Benchmark DBD suite: 2.0 -Date of test: 1998-10-02 8:13:24 -Running tests on: Windows NT Version 4.0 -Arguments: --force -Comments: -Limits from: db2,informix,ms-sql,mysql,oracle,solid,sybase -Server version: Sybase enterprise 11.5 NT - -ATIS: Total time: 338 secs (337.94 usr 0.00 sys = 337.94 cpu) -alter-table: Total time: 12 secs (12.39 usr 0.00 sys = 12.39 cpu) -big-tables: Total time: 353 secs (352.68 usr 0.00 sys = 352.68 cpu) -connect: Total time: 2725 secs (2724.61 usr 0.00 sys = 2724.61 cpu) -create: Total time: 228 secs (228.22 usr 0.00 sys = 228.22 cpu) -insert: Estimated total time: 69907 secs (69908.40 usr 0.00 sys = 69908.40 cpu) -select: Failed (results-win32/select-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase) -wisconsin: Failed (results-win32/wisconsin-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase) - -Of 8 tests, 2 tests didn't work -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.14 0.00 0.14 8 -connect 1275 1274.97 0.00 1274.97 10000 -connect+select 1330 1329.69 0.00 1329.69 10000 -count 23 22.40 0.00 22.40 100 -count_on_key 14 14.21 0.00 14.21 100 -create+drop 63 63.53 0.00 63.53 1000 -create_index 0 0.41 0.00 0.41 8 -create_key+drop 52 51.41 0.00 51.41 1000 -create_table 82 81.78 0.00 81.78 1028 -delete_big 7917 7916.71 0.00 7916.71 14 -delete_key 43 42.44 0.00 42.44 500 -drop_index 0 0.07 0.00 0.07 8 -drop_table 19 18.94 0.00 18.94 1028 -insert 4802 4801.96 0.00 4801.96 309768 -insert_duplicates 331 331.28 0.00 331.28 300000 -insert_key 7053 7053.03 0.00 7053.03 100000 -insert_many_fields 231 230.56 0.00 230.56 20000 -min_max 17 16.74 0.00 16.74 60 -min_max_on_key 96 96.64 0.00 96.64 3000 -order_by 395 394.89 0.00 394.89 10 -order_by_key 273 272.97 0.00 272.97 10 -select 80 79.97 0.00 79.97 20000 -select_big 315 314.76 0.00 314.76 10010 -select_distinct 64 63.34 0.00 63.34 800 -select_group 91 91.13 0.00 91.13 3191 -select_join 114 114.63 0.00 114.63 200 -select_key 17614 17614.13 0.00 17614.13 200000 + -select_key_prefix 17410 17410.02 0.00 17410.02 200000 + -select_many_fields 122 122.05 0.00 122.05 20000 -select_range 2626 2624.11 0.00 2624.11 25000 ++ -select_range_prefix 2618 2620.08 0.00 2620.08 25000 ++ -select_simple_join 17 16.86 0.00 16.86 500 -update_key 40 39.90 0.00 39.90 500 -update_key_big 347 347.05 0.00 347.05 501 -update_of_key 1023 1022.68 0.00 1022.68 256 -TOTALS 66498 66495.48 0.00 66495.48 1263600 ++++++ diff --git a/sql-bench/Results-win32/alter-table-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/alter-table-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index e3aef89c461235bf44726d1b58a65cb69d8c7664..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'Access 2000' at 2000-01-03 3:59:28 - -Testing of ALTER TABLE -Testing with 255 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 6 wallclock secs ( 5.93 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (247): 1 wallclock secs ( 1.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 0 wallclock secs ( 0.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 0 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (124): 1 wallclock secs ( 0.71 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 8 wallclock secs ( 8.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/alter-table-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 8ed8d259e13843e351a247c65e3d708aeeb4b4cc..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,10 +0,0 @@ -Testing server 'IBM DB2 5' at 1998-11-21 23:08:51 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000)10 secs (10.26 usr 0.00 sys = 10.26 cpu) - -Time for alter_table_add (8): 0 secs ( 0.20 usr 0.00 sys = 0.20 cpu) - -Time for create_index (8): 1 secs ( 0.91 usr 0.00 sys = 0.91 cpu) diff --git a/sql-bench/Results-win32/alter-table-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index cad6c802af67042302954375f35f715893ea3844..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-09-01 2:00:29 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 6 secs ( 5.53 usr 0.00 sys = 5.53 cpu) - -Time for alter_table_add (8): 0 secs ( 0.39 usr 0.00 sys = 0.39 cpu) - -Time for create_index (8): 1 secs ( 0.44 usr 0.00 sys = 0.44 cpu) - -Time for drop_index (8): 0 secs ( 0.10 usr 0.00 sys = 0.10 cpu) - -Total time: 7 secs ( 6.60 usr 0.00 sys = 6.60 cpu) diff --git a/sql-bench/Results-win32/alter-table-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 7c2495ffe54b5bad0d1154d25858679796e72d90..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 2:15:14 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 6 secs ( 6.49 usr 0.00 sys = 6.49 cpu) - -Time for alter_table_add (8): 0 secs ( 0.04 usr 0.00 sys = 0.04 cpu) - -Time for create_index (8): 1 secs ( 0.64 usr 0.00 sys = 0.64 cpu) - -Time for drop_index (8): 0 secs ( 0.07 usr 0.00 sys = 0.07 cpu) - -Total time: 7 secs ( 7.50 usr 0.00 sys = 7.50 cpu) diff --git a/sql-bench/Results-win32/alter-table-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index a3d6284dd67cff841e7e86dc8854e94bd94aeb50..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:54:12 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.18 usr + 0.17 sys = 0.35 CPU) - -Time for alter_table_add (8): 1 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) - -Time for create_index (8): 2 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) - -Time for drop_index (8): 1 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) - -Total time: 5 wallclock secs ( 0.19 usr + 0.17 sys = 0.36 CPU) diff --git a/sql-bench/Results-win32/alter-table-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/alter-table-mysql-win98-cmp-access,mysql deleted file mode 100644 index fcb94e46b8938857c8ab8537eb69f338f7f6fab2..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 20:05:06 - -Testing of ALTER TABLE -Testing with 255 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 1.21 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (247): 31 wallclock secs (30.48 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 2 wallclock secs ( 2.09 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 2 wallclock secs ( 1.98 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (124): 21 wallclock secs (21.25 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 57 wallclock secs (57.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/alter-table-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index f05586245ddaf10a0dcc26d30705b368bcc1a2e9..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:41:08 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 secs ( 1.66 usr 0.00 sys = 1.66 cpu) - -Time for alter_table_add (8): 1 secs ( 0.61 usr 0.00 sys = 0.61 cpu) - -Time for create_index (8): 1 secs ( 0.91 usr 0.00 sys = 0.91 cpu) - -Time for drop_index (8): 1 secs ( 1.11 usr 0.00 sys = 1.11 cpu) - -Total time: 4 secs ( 4.33 usr 0.00 sys = 4.33 cpu) diff --git a/sql-bench/Results-win32/alter-table-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 216c20f0245ada57edb1c44cc322128c0a42a573..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-03 22:38:03 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 6 wallclock secs ( 1.14 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (8): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 1 wallclock secs ( 0.01 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 8 wallclock secs ( 1.15 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/alter-table-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4058a2aa8cf7b03636a1b252a237f79471dd1288..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-06 17:43:33 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 5 secs ( 4.42 usr 0.00 sys = 4.42 cpu) - -Time for alter_table_add (8): 0 secs ( 0.07 usr 0.00 sys = 0.07 cpu) - -Time for create_index (8): 1 secs ( 1.06 usr 0.00 sys = 1.06 cpu) - -Time for drop_index (8): 1 secs ( 0.97 usr 0.00 sys = 0.97 cpu) - -Total time: 7 secs ( 6.71 usr 0.00 sys = 6.71 cpu) diff --git a/sql-bench/Results-win32/alter-table-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/alter-table-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 98d4444190897320cfac049a4d35109a96e19c78..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/alter-table-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-08-27 2:08:17 - -Testing of ALTER TABLE -Testing with 16 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000)11 secs (11.30 usr 0.00 sys = 11.30 cpu) - -Time for alter_table_add (8): 1 secs ( 0.14 usr 0.00 sys = 0.14 cpu) - -Time for create_index (8): 0 secs ( 0.41 usr 0.00 sys = 0.41 cpu) - -Time for drop_index (8): 0 secs ( 0.07 usr 0.00 sys = 0.07 cpu) - -Total time: 12 secs (12.39 usr 0.00 sys = 12.39 cpu) diff --git a/sql-bench/Results-win32/big-tables-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/big-tables-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index a37d1050f434fc61664476e1553c52a9093b72b3..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Access 2000' at 2000-01-03 4:03:38 - -Testing of some unusual tables -All tests are done 1000 times with 255 fields - -Testing table with 255 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 126 wallclock secs (125.72 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 194 wallclock secs (194.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 42 wallclock secs (42.34 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 82 wallclock secs (82.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 457 wallclock secs (457.69 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/big-tables-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 82183d9221d77ee5bbeaf3d33b50e9054e509913..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'IBM DB2 5' at 1998-11-21 23:18:02 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 56 secs (56.08 usr 0.00 sys = 56.08 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 57 secs (56.82 usr 0.00 sys = 56.82 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 67 secs (67.80 usr 0.00 sys = 67.80 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 68 secs (67.82 usr 0.00 sys = 67.82 cpu) - -Total time: 250 secs (249.43 usr 0.00 sys = 249.43 cpu) diff --git a/sql-bench/Results-win32/big-tables-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 5bfdaf2ad6ff00afe6251d5fe9ebaf0a94243793..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-09-01 2:06:11 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 83 secs (83.28 usr 0.00 sys = 83.28 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 91 secs (91.36 usr 0.00 sys = 91.36 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 54 secs (53.26 usr 0.00 sys = 53.26 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 57 secs (57.68 usr 0.00 sys = 57.68 cpu) - -Total time: 285 secs (285.73 usr 0.00 sys = 285.73 cpu) diff --git a/sql-bench/Results-win32/big-tables-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4089de66c75646c6541d5bb0a1eb9590e84c8124..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 2:19:13 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 39 secs (39.20 usr 0.00 sys = 39.20 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 39 secs (39.41 usr 0.00 sys = 39.41 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 39 secs (38.70 usr 0.00 sys = 38.70 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 37 secs (37.06 usr 0.00 sys = 37.06 cpu) - -Total time: 155 secs (154.44 usr 0.00 sys = 154.44 cpu) diff --git a/sql-bench/Results-win32/big-tables-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index ee1bad8c0866cc607e4e4935cbaa02409d814a32..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:54:17 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 17 wallclock secs ( 8.14 usr + 2.49 sys = 10.64 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 27 wallclock secs ( 7.93 usr + 2.70 sys = 10.64 CPU) - -Testing insert VALUES() -Time to insert_many_fields(10000): 13 wallclock secs ( 6.14 usr + 1.46 sys = 7.60 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 17 wallclock secs ( 1.18 usr + 1.38 sys = 2.56 CPU) - -Total time: 74 wallclock secs (23.40 usr + 8.04 sys = 31.45 CPU) diff --git a/sql-bench/Results-win32/big-tables-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/big-tables-mysql-win98-cmp-access,mysql deleted file mode 100644 index 0eac237d1bc1b2670c329d49bd8da46e7fdedc96..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 12:20:10 - -Testing of some unusual tables -All tests are done 1000 times with 255 fields - -Testing table with 255 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 20 wallclock secs (19.77 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 23 wallclock secs (23.12 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 2.86 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 5.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 51 wallclock secs (50.91 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/big-tables-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 140650bba24e173c9e39926119daac4037aef64c..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:44:00 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 25 secs (24.41 usr 0.00 sys = 24.41 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 35 secs (35.44 usr 0.00 sys = 35.44 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 15 secs (15.06 usr 0.00 sys = 15.06 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 25 secs (25.23 usr 0.00 sys = 25.23 cpu) - -Total time: 100 secs (100.14 usr 0.00 sys = 100.14 cpu) diff --git a/sql-bench/Results-win32/big-tables-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index d7c7f5f846fef2746e28f06516ca3136ad7eacfd..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-03 22:38:13 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 48 wallclock secs (31.69 usr 4.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 48 wallclock secs (32.70 usr 5.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(10000): 69 wallclock secs (14.82 usr 1.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 81 wallclock secs (14.73 usr 1.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 246 wallclock secs (93.94 usr 13.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/big-tables-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 3ac6358776a5c522e2b2ca8f3e2bad2903d118d4..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-06 18:02:53 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 30 secs (29.42 usr 0.00 sys = 29.42 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 26 secs (26.97 usr 0.00 sys = 26.97 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 25 secs (24.27 usr 0.00 sys = 24.27 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 24 secs (24.17 usr 0.00 sys = 24.17 cpu) - -Total time: 107 secs (107.11 usr 0.00 sys = 107.11 cpu) diff --git a/sql-bench/Results-win32/big-tables-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/big-tables-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b25986c12fba1da77cc882e9572573f39c57822a..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/big-tables-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-08-27 2:14:09 - -Testing of some unusual tables -All tests are done 10000 times with 16 fields - -Testing table with 16 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 54 secs (54.47 usr 0.00 sys = 54.47 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 68 secs (67.58 usr 0.00 sys = 67.58 cpu) - -Testing insert VALUES() -Time to insert_many_fields(10000): 115 secs (115.28 usr 0.00 sys = 115.28 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 116 secs (115.28 usr 0.00 sys = 115.28 cpu) - -Total time: 353 secs (352.68 usr 0.00 sys = 352.68 cpu) diff --git a/sql-bench/Results-win32/connect-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/connect-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index f79ffcb44ee36f6626f1c0bc39ba99caf817bfb9..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,33 +0,0 @@ -Testing server 'Access 2000' at 2000-01-04 1:49:15 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 1267 wallclock secs (1267.63 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 1766 wallclock secs (1765.08 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 38 wallclock secs (38.12 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -DBI->connect failed: [Microsoft][Drivrutin för ODBC Microsoft Access] Fel på disk eller nätverk. (SQL-S1000)(DBD: db_login/SQLConnect err=-1) at test-connect line 140 -Warning: 1 connections didn't work without a time delay -Time to connect+select_1_row (10000): 1780 wallclock secs (1779.92 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 55 wallclock secs (55.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 56 wallclock secs (55.81 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (255 bytes) -Time to select_big (10000): 50 wallclock secs (49.92 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -[Microsoft][Drivrutin för ODBC Microsoft Access] Databasmotorn kunde inte låsa tabellen 'bench1'. Den används redan av en annan användare eller process. (SQL-S1000)(DBD: st_execute/SQLExecute err=-1) at test-connect line 240. - -# The following row is calculated by hand from the above: - -Total time: 5012 wallclock secs (5011.52 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) \ No newline at end of file diff --git a/sql-bench/Results-win32/connect-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index a6fbfc1695ec9463ca37dd7eec7617dcd770ffad..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,6 +0,0 @@ -Testing server 'IBM DB2 5' at 1999-02-02 7:07:03 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect diff --git a/sql-bench/Results-win32/connect-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 0619aa5eb7dd236b1e0d51b5bcc22f6306dfb939..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-09-01 2:10:58 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 1989 secs (1989.51 usr 0.00 sys = 1989.51 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 2050 secs (2049.47 usr 0.00 sys = 2049.47 cpu) - -Testing select 1 row from table -Time to select (10000): 56 secs (55.99 usr 0.00 sys = 55.99 cpu) - -Testing select 2 rows from table -Time to select (10000): 56 secs (56.37 usr 0.00 sys = 56.37 cpu) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 73 secs (73.49 usr 0.00 sys = 73.49 cpu) - -Total time: 4225 secs (4225.65 usr 0.00 sys = 4225.65 cpu) diff --git a/sql-bench/Results-win32/connect-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index fb72abf899cb6142dcc18e166fea6050f863e37f..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 2:21:49 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 202 secs (201.91 usr 0.00 sys = 201.91 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 234 secs (234.54 usr 0.00 sys = 234.54 cpu) - -Testing select 1 row from table -Time to select (10000): 33 secs (32.33 usr 0.00 sys = 32.33 cpu) - -Testing select 2 rows from table -Time to select (10000): 32 secs (32.45 usr 0.00 sys = 32.45 cpu) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 34 secs (33.44 usr 0.00 sys = 33.44 cpu) - -Total time: 535 secs (534.85 usr 0.00 sys = 534.85 cpu) diff --git a/sql-bench/Results-win32/connect-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 315b8c78a73e5d7ef51fed49681f98f22e31d7e1..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:55:31 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 56 wallclock secs (16.91 usr + 13.01 sys = 29.92 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 64 wallclock secs (18.76 usr + 14.96 sys = 33.72 CPU) - -Testing select 1 row from table -Time to select (10000): 9 wallclock secs ( 1.66 usr + 1.76 sys = 3.43 CPU) - -Testing select 2 rows from table -Time to select (10000): 12 wallclock secs ( 1.84 usr + 2.02 sys = 3.87 CPU) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 14 wallclock secs ( 6.55 usr + 1.80 sys = 8.35 CPU) - -Total time: 155 wallclock secs (45.74 usr + 33.56 sys = 79.29 CPU) diff --git a/sql-bench/Results-win32/connect-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/connect-mysql-win98-cmp-access,mysql deleted file mode 100644 index dd5a7eaac9d595f561c4a3abb9ec63877acd3774..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 21:06:49 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 55 wallclock secs (54.76 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 71 wallclock secs (70.80 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 13 wallclock secs (13.45 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 75 wallclock secs (75.96 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 18 wallclock secs (17.30 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 20 wallclock secs (20.65 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (255 bytes) -Time to select_big (10000): 22 wallclock secs (22.19 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 276 wallclock secs (275.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/connect-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index ff5511fa1a81be00ed7d47fce7038e9604af121d..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:45:41 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 189 secs (188.69 usr 0.00 sys = 188.69 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 211 secs (211.59 usr 0.00 sys = 211.59 cpu) - -Testing select 1 row from table -Time to select (10000): 19 secs (18.79 usr 0.00 sys = 18.79 cpu) - -Testing select 2 rows from table -Time to select (10000): 20 secs (19.97 usr 0.00 sys = 19.97 cpu) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 20 secs (19.71 usr 0.00 sys = 19.71 cpu) - -Total time: 459 secs (458.81 usr 0.00 sys = 458.81 cpu) diff --git a/sql-bench/Results-win32/connect-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 5420cdb39982235349a2bf149cce867154e34d18..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-03 22:42:21 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 8713 wallclock secs (195.47 usr 436.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 8722 wallclock secs (257.48 usr 362.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select (10000): 24 wallclock secs (14.99 usr 1.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select (10000): 23 wallclock secs (15.59 usr 1.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 35 wallclock secs (21.24 usr 4.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 17520 wallclock secs (504.84 usr 806.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/connect-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index d42946a3995cf8ee4824dfe8a39788f564712261..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-06 18:04:41 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 385 secs (385.29 usr 0.00 sys = 385.29 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 414 secs (413.81 usr 0.00 sys = 413.81 cpu) - -Testing select 1 row from table -Time to select (10000): 23 secs (23.32 usr 0.00 sys = 23.32 cpu) - -Testing select 2 rows from table -Time to select (10000): 24 secs (24.00 usr 0.00 sys = 24.00 cpu) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 25 secs (24.64 usr 0.00 sys = 24.64 cpu) - -Total time: 871 secs (871.19 usr 0.00 sys = 871.19 cpu) diff --git a/sql-bench/Results-win32/connect-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/connect-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b90e8036719db00c6106e2f3f6ea7810ade15f9d..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/connect-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-08-27 2:20:02 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 1275 secs (1274.97 usr 0.00 sys = 1274.97 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 1330 secs (1329.69 usr 0.00 sys = 1329.69 cpu) - -Testing select 1 row from table -Time to select (10000): 40 secs (39.77 usr 0.00 sys = 39.77 cpu) - -Testing select 2 rows from table -Time to select (10000): 40 secs (40.20 usr 0.00 sys = 40.20 cpu) - -Testing retrieval of big records (224 bytes) -Time to select_big (10000): 40 secs (39.56 usr 0.00 sys = 39.56 cpu) - -Total time: 2725 secs (2724.61 usr 0.00 sys = 2724.61 cpu) diff --git a/sql-bench/Results-win32/create-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/create-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index 2feabb9ddf3dabdd74fe6218ea8f1edc8d448a71..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'Access 2000' at 2000-01-06 1:49:25 - -Testing the speed of creating and droping tables -All tests are done 7000 times - -Testing create of tables -Time for create_many_tables (7000): 142 wallclock secs (141.43 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (7000): 52 wallclock secs (52.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (7000): 109 wallclock secs (109.63 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (7000): 187 wallclock secs (186.36 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (7000): 207 wallclock secs (207.73 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 699 wallclock secs (698.76 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/create-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 1ae88e6607b1eb4a72d6b70ee25702f8f4fefccd..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'IBM DB2 5' at 1999-02-02 7:10:24 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 389 secs (389.60 usr 0.00 sys = 389.60 cpu) - -Accessing tables -Time to select_group (1000): 7 secs ( 7.37 usr 0.00 sys = 7.37 cpu) - -Testing drop -Time for drop_table (1000): 106 secs (106.19 usr 0.00 sys = 106.19 cpu) - -Testing create+drop -Time for create+drop (1000): 408 secs (408.21 usr 0.00 sys = 408.21 cpu) -Time for create_key+drop (1000): 193 secs (192.75 usr 0.00 sys = 192.75 cpu) -Total time: 1106 secs (1106.62 usr 0.00 sys = 1106.62 cpu) diff --git a/sql-bench/Results-win32/create-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 89ec2fcbfe429947ceb5f53ce16392d057f474b9..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-09-01 3:21:25 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 56 secs (55.74 usr 0.00 sys = 55.74 cpu) - -Accessing tables -Time to select_group (1000): 8 secs ( 8.49 usr 0.00 sys = 8.49 cpu) - -Testing drop -Time for drop_table (1000): 33 secs (32.69 usr 0.00 sys = 32.69 cpu) - -Testing create+drop -Time for create+drop (1000): 35 secs (35.34 usr 0.00 sys = 35.34 cpu) -Time for create_key+drop (1000): 90 secs (89.37 usr 0.00 sys = 89.37 cpu) -Total time: 222 secs (221.64 usr 0.00 sys = 221.64 cpu) diff --git a/sql-bench/Results-win32/create-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index e255cfc05a24e603b6ec84b7f6d1987209af16b4..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 10:22:16 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 55 secs (55.35 usr 0.00 sys = 55.35 cpu) - -Accessing tables -Time to select_group (1000): 20 secs (20.25 usr 0.00 sys = 20.25 cpu) - -Testing drop -Time for drop_table (1000): 6 secs ( 5.80 usr 0.00 sys = 5.80 cpu) - -Testing create+drop -Time for create+drop (1000): 35 secs (34.23 usr 0.00 sys = 34.23 cpu) -Time for create_key+drop (1000): 36 secs (36.10 usr 0.00 sys = 36.10 cpu) -Total time: 152 secs (151.76 usr 0.00 sys = 151.76 cpu) diff --git a/sql-bench/Results-win32/create-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 822a7d6cda7d5df07ed808eb3e9ba1c0cc3b90d6..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:58:06 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 23 wallclock secs ( 0.47 usr + 0.18 sys = 0.65 CPU) - -Accessing tables -Time to select_group (1000): 14 wallclock secs ( 0.22 usr + 0.11 sys = 0.33 CPU) - -Testing drop -Time for drop_table (1000): 3 wallclock secs ( 0.10 usr + 0.16 sys = 0.26 CPU) - -Testing create+drop -Time for create+drop (1000): 14 wallclock secs ( 0.40 usr + 0.19 sys = 0.59 CPU) -Time for create_key+drop (1000): 18 wallclock secs ( 0.85 usr + 0.33 sys = 1.18 CPU) -Total time: 72 wallclock secs ( 2.05 usr + 0.97 sys = 3.02 CPU) diff --git a/sql-bench/Results-win32/create-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/create-mysql-win98-cmp-access,mysql deleted file mode 100644 index 15de75eb663c5aedfca927104c3eeaf5b4ed876c..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-05 4:37:04 - -Testing the speed of creating and droping tables -All tests are done 7000 times - -Testing create of tables -Time for create_many_tables (7000): 2530 wallclock secs (2529.76 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (7000): 4718 wallclock secs (4718.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (7000): 316 wallclock secs (315.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (7000): 1011 wallclock secs (1011.13 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (7000): 1025 wallclock secs (1025.23 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 9601 wallclock secs (9600.98 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/create-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 726d05c2881c84d88ba388b8220272a00255f814..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:53:20 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 22 secs (21.84 usr 0.00 sys = 21.84 cpu) - -Accessing tables -Time to select_group (1000): 17 secs (17.75 usr 0.00 sys = 17.75 cpu) - -Testing drop -Time for drop_table (1000): 4 secs ( 3.73 usr 0.00 sys = 3.73 cpu) - -Testing create+drop -Time for create+drop (1000): 15 secs (15.21 usr 0.00 sys = 15.21 cpu) -Time for create_key+drop (1000): 20 secs (20.05 usr 0.00 sys = 20.05 cpu) -Total time: 78 secs (78.59 usr 0.00 sys = 78.59 cpu) diff --git a/sql-bench/Results-win32/create-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 71177a8d45a6f79d5bb284d630793a7e1dac5aed..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-04 3:34:22 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 132 wallclock secs ( 3.33 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (1000): 7 wallclock secs ( 1.52 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 108 wallclock secs ( 1.31 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 288 wallclock secs ( 4.23 usr 0.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 411 wallclock secs ( 4.65 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 947 wallclock secs (15.04 usr 1.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/create-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 038dd13cf5feabd3309155606dc91f965145e667..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-06 18:19:13 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 22 secs (21.35 usr 0.00 sys = 21.35 cpu) - -Accessing tables -Time to select_group (1000): 8 secs ( 8.23 usr 0.00 sys = 8.23 cpu) - -Testing drop -Time for drop_table (1000): 18 secs (17.98 usr 0.00 sys = 17.98 cpu) - -Testing create+drop -Time for create+drop (1000): 41 secs (41.20 usr 0.00 sys = 41.20 cpu) -Time for create_key+drop (1000): 72 secs (72.18 usr 0.00 sys = 72.18 cpu) -Total time: 161 secs (160.95 usr 0.00 sys = 160.95 cpu) diff --git a/sql-bench/Results-win32/create-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/create-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 242fe1256678809b7473bef10d36e3af2aacf61c..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/create-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-08-27 3:05:28 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 80 secs (80.37 usr 0.00 sys = 80.37 cpu) - -Accessing tables -Time to select_group (1000): 14 secs (14.25 usr 0.00 sys = 14.25 cpu) - -Testing drop -Time for drop_table (1000): 19 secs (18.63 usr 0.00 sys = 18.63 cpu) - -Testing create+drop -Time for create+drop (1000): 63 secs (63.53 usr 0.00 sys = 63.53 cpu) -Time for create_key+drop (1000): 52 secs (51.41 usr 0.00 sys = 51.41 cpu) -Total time: 228 secs (228.22 usr 0.00 sys = 228.22 cpu) diff --git a/sql-bench/Results-win32/insert-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/insert-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index 88b87322eaa2792475b8778e0ed68dae0c9591bd..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,67 +0,0 @@ -Testing server 'Access 2000' at 2000-01-03 15:01:30 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1974 wallclock secs (1973.91 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 209 wallclock secs (208.61 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 311 wallclock secs (310.93 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 396 wallclock secs (395.80 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 388 wallclock secs (388.10 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 3 wallclock secs ( 3.63 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 68 wallclock secs (67.77 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 65 wallclock secs (64.65 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -71768 queries in 35884 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 1674 wallclock secs (1673.75 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -58230 queries in 29115 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 2064 wallclock secs (2064.23 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -5960 queries in 149 loops of 500 loops took 603 seconds -Estimated time for select_range_prefix (20000:12963): 2023 wallclock secs (2024.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 475 wallclock secs (474.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (91): 341 wallclock secs (341.20 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 19 wallclock secs (18.56 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 186 wallclock secs (186.25 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 15 wallclock secs (15.44 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 328 wallclock secs (327.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (500): 14 wallclock secs (14.12 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 548 wallclock secs (548.43 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 2081 wallclock secs (2080.30 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 1550 wallclock secs (1550.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 79 wallclock secs (79.31 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 274 wallclock secs (274.25 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 10 parts -Time for insert_key (100000): 10591 wallclock secs (10591.45 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_key (256): 873 wallclock secs (872.99 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 12569 wallclock secs (12568.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 39293 wallclock secs (39294.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/insert-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4537891dcbf82ac332d2bc50c2e94abba032971e..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,99 +0,0 @@ -Testing server 'IBM DB2 5' at 1999-02-02 0:15:24 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Tue Feb 2 00:15:41 1999 -10000 : Tue Feb 2 00:17:14 1999 -20000 : Tue Feb 2 00:18:48 1999 -30000 : Tue Feb 2 00:20:23 1999 -40000 : Tue Feb 2 00:22:02 1999 -50000 : Tue Feb 2 00:23:40 1999 -60000 : Tue Feb 2 00:25:16 1999 -70000 : Tue Feb 2 00:26:54 1999 -80000 : Tue Feb 2 00:28:31 1999 -90000 : Tue Feb 2 00:30:05 1999 -Inserting 100000 rows in reverse order -0 : Tue Feb 2 00:31:40 1999 -10000 : Tue Feb 2 00:33:22 1999 -20000 : Tue Feb 2 00:34:59 1999 -30000 : Tue Feb 2 00:36:34 1999 -40000 : Tue Feb 2 00:38:18 1999 -50000 : Tue Feb 2 00:39:54 1999 -60000 : Tue Feb 2 00:41:29 1999 -70000 : Tue Feb 2 00:43:13 1999 -80000 : Tue Feb 2 00:44:49 1999 -90000 : Tue Feb 2 00:46:25 1999 -Inserting 100000 rows in random order -0 : Tue Feb 2 00:48:02 1999 -10000 : Tue Feb 2 00:49:44 1999 -20000 : Tue Feb 2 00:51:21 1999 -30000 : Tue Feb 2 00:53:01 1999 -40000 : Tue Feb 2 00:54:42 1999 -50000 : Tue Feb 2 00:56:16 1999 -60000 : Tue Feb 2 00:57:52 1999 -70000 : Tue Feb 2 00:59:38 1999 -80000 : Tue Feb 2 01:01:12 1999 -90000 : Tue Feb 2 01:02:47 1999 -Time for insert (300000): 2932 secs (2932.59 usr 0.00 sys = 2932.59 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 353 secs (353.39 usr 0.00 sys = 353.39 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 379 secs (379.32 usr 0.00 sys = 379.32 cpu) -Time for order_by_key (10:3000000): 369 secs (368.78 usr 0.00 sys = 368.78 cpu) -Time for order_by (10:3000000): 361 secs (361.08 usr 0.00 sys = 361.08 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1940 queries in 1940 loops of 5000 loops took 601 seconds -Estimated time for select_range_prefix (5000:7760): 1548 secs (1548.93 usr 0.00 sys = 1548.93 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1950 queries in 1950 loops of 5000 loops took 602 seconds -Estimated time for select_range (5000:7800): 1543 secs (1542.09 usr 0.00 sys = 1542.09 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -100196 queries in 50098 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 1199 secs (1199.40 usr 0.00 sys = 1199.40 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -99640 queries in 49820 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 1206 secs (1206.37 usr 0.00 sys = 1206.37 cpu) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8320 queries in 208 loops of 500 loops took 602 seconds -Estimated time for select_range_prefix (20000:18096): 602 secs (602.91 usr 0.00 sys = 602.91 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8280 queries in 207 loops of 500 loops took 603 seconds -Estimated time for select_range (20000:18009): 603 secs (602.74 usr 0.00 sys = 602.74 cpu) -Time for select_group (91): 145 secs (144.82 usr 0.00 sys = 144.82 cpu) -Time for min_max_on_key (3000): 576 secs (575.99 usr 0.00 sys = 575.99 cpu) -Time for min_max (60): 56 secs (55.56 usr 0.00 sys = 55.56 cpu) -Time for count_on_key (100): 58 secs (57.98 usr 0.00 sys = 57.98 cpu) -Time for count (100): 87 secs (87.24 usr 0.00 sys = 87.24 cpu) - -Testing update with functions -Time for update_key (500): 5 secs ( 5.24 usr 0.00 sys = 5.24 cpu) -Time for update_key_big (501): 542 secs (542.23 usr 0.00 sys = 542.23 cpu) - -Testing delete -Time for delete_key (500): 16 secs (15.97 usr 0.00 sys = 15.97 cpu) -Time for delete_big (12): 133 secs (133.19 usr 0.00 sys = 133.19 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 2484 secs (2484.63 usr 0.00 sys = 2484.63 cpu) - -Testing update of keys -Time for update_of_key (256): 175 secs (174.76 usr 0.00 sys = 174.76 cpu) - -Deleting everything from table -Time for delete_big (2): 316 secs (315.91 usr 0.00 sys = 315.91 cpu) - -Estimated total time: 17508 secs (17508.04 usr 0.00 sys = 17508.04 cpu) diff --git a/sql-bench/Results-win32/insert-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 9a8e755e9b82aac4f9c6a90069217c96b00cd84e..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,102 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-10-05 15:25:46 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Mon Oct 5 15:25:50 1998 -10000 : Mon Oct 5 15:26:40 1998 -20000 : Mon Oct 5 15:27:31 1998 -30000 : Mon Oct 5 15:28:22 1998 -40000 : Mon Oct 5 15:29:14 1998 -50000 : Mon Oct 5 15:30:04 1998 -60000 : Mon Oct 5 15:30:55 1998 -70000 : Mon Oct 5 15:31:45 1998 -80000 : Mon Oct 5 15:32:36 1998 -90000 : Mon Oct 5 15:33:26 1998 -Inserting 100000 rows in reverse order -0 : Mon Oct 5 15:34:17 1998 -10000 : Mon Oct 5 15:35:08 1998 -20000 : Mon Oct 5 15:36:00 1998 -30000 : Mon Oct 5 15:36:51 1998 -40000 : Mon Oct 5 15:37:43 1998 -50000 : Mon Oct 5 15:38:34 1998 -60000 : Mon Oct 5 15:39:26 1998 -70000 : Mon Oct 5 15:40:18 1998 -80000 : Mon Oct 5 15:41:10 1998 -90000 : Mon Oct 5 15:42:01 1998 -Inserting 100000 rows in random order -0 : Mon Oct 5 15:42:53 1998 -10000 : Mon Oct 5 15:43:45 1998 -20000 : Mon Oct 5 15:44:36 1998 -30000 : Mon Oct 5 15:45:31 1998 -40000 : Mon Oct 5 15:47:13 1998 -50000 : Mon Oct 5 15:49:41 1998 -60000 : Mon Oct 5 15:52:40 1998 -70000 : Mon Oct 5 15:55:47 1998 -80000 : Mon Oct 5 15:59:09 1998 -90000 : Mon Oct 5 16:02:35 1998 -Time for insert (300000): 2417 secs (2417.46 usr 0.00 sys = 2417.46 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 280 secs (280.34 usr 0.00 sys = 280.34 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 495 secs (494.46 usr 0.00 sys = 494.46 cpu) -Time for order_by_key (10:3000000): 485 secs (485.49 usr 0.00 sys = 485.49 cpu) -Time for order_by (10:3000000): 518 secs (517.79 usr 0.00 sys = 517.79 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -440 queries in 440 loops of 5000 loops took 602 seconds -Estimated time for select_range_prefix (5000:1760): 6840 secs (6840.98 usr 0.00 sys = 6840.98 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -460 queries in 460 loops of 5000 loops took 613 seconds -Estimated time for select_range (5000:1840): 6663 secs (6665.89 usr 0.00 sys = 6665.89 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1002 queries in 501 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 119960 secs (119942.91 usr 0.00 sys = 119942.91 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -994 queries in 497 loops of 100000 loops took 602 seconds -Estimated time for select_key (200000): 121126 secs (120992.76 usr 0.00 sys = 120992.76 cpu) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1360 queries in 34 loops of 500 loops took 608 seconds -Estimated time for select_range_prefix (20000:2958): 608 secs (608.02 usr 0.00 sys = 608.02 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1360 queries in 34 loops of 500 loops took 615 seconds -Estimated time for select_range (20000:2958): 615 secs (615.40 usr 0.00 sys = 615.40 cpu) -Time for select_group (91): 896 secs (895.47 usr 0.00 sys = 895.47 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2964 queries in 494 loops of 500 loops took 601 seconds -Estimated time for min_max_on_key (3000): 608 secs (608.68 usr 0.00 sys = 608.68 cpu) -Time for min_max (60): 344 secs (344.44 usr 0.00 sys = 344.44 cpu) -Time for count_on_key (100): 931 secs (930.38 usr 0.00 sys = 930.38 cpu) -Time for count (100): 116 secs (115.85 usr 0.00 sys = 115.85 cpu) - -Testing update with functions -Time for update_key (500): 771 secs (771.67 usr 0.00 sys = 771.67 cpu) -Time for update_key_big (501): 3000 secs (2999.42 usr 0.00 sys = 2999.42 cpu) - -Testing delete -Time for delete_key (500): 738 secs (737.82 usr 0.00 sys = 737.82 cpu) -Time for delete_big (12): 929 secs (928.69 usr 0.00 sys = 928.69 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 8231 secs (8231.23 usr 0.00 sys = 8231.23 cpu) - -Testing update of keys -Time for update_of_key (256): 2190 secs (2190.23 usr 0.00 sys = 2190.23 cpu) - -Deleting everything from table -Time for delete_big (2): 10326 secs (10325.87 usr 0.00 sys = 10325.87 cpu) - -Estimated total time: 305853 secs (305711.97 usr 0.00 sys = 305711.97 cpu) diff --git a/sql-bench/Results-win32/insert-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index c32fb0d0b4c45cbef111a7e40c0d9db8df568162..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,57 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-27 10:54:53 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 3592 secs (3591.82 usr 0.00 sys = 3591.82 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 286 secs (285.70 usr 0.00 sys = 285.70 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 202 secs (202.02 usr 0.00 sys = 202.02 cpu) -Time for order_by_key (10:3000000): 201 secs (200.90 usr 0.00 sys = 200.90 cpu) -Time for order_by (10:3000000): 250 secs (250.66 usr 0.00 sys = 250.66 cpu) -Time for select_range_prefix (5000:20000): 25 secs (25.49 usr 0.00 sys = 25.49 cpu) -Time for select_range (5000:20000): 24 secs (24.02 usr 0.00 sys = 24.02 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -70770 queries in 35385 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 1698 secs (1696.55 usr 0.00 sys = 1696.55 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -73534 queries in 36767 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 1634 secs (1634.55 usr 0.00 sys = 1634.55 cpu) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 43 secs (43.59 usr 0.00 sys = 43.59 cpu) -Time for select_range (20000:43500): 44 secs (43.58 usr 0.00 sys = 43.58 cpu) -Time for select_group (91): 75 secs (75.48 usr 0.00 sys = 75.48 cpu) -Time for min_max_on_key (3000): 25 secs (24.60 usr 0.00 sys = 24.60 cpu) -Time for min_max (60): 115 secs (115.58 usr 0.00 sys = 115.58 cpu) -Time for count_on_key (100): 18 secs (17.22 usr 0.00 sys = 17.22 cpu) -Time for count (100): 49 secs (49.15 usr 0.00 sys = 49.15 cpu) - -Testing update with functions -Time for update_key (500): 8 secs ( 8.00 usr 0.00 sys = 8.00 cpu) -Time for update_key_big (501): 403 secs (402.89 usr 0.00 sys = 402.89 cpu) - -Testing delete -Time for delete_key (500): 21 secs (21.33 usr 0.00 sys = 21.33 cpu) -Time for delete_big (12): 186 secs (186.21 usr 0.00 sys = 186.21 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 5181 secs (5181.56 usr 0.00 sys = 5181.56 cpu) - -Testing update of keys -Time for update_of_key (256): 674 secs (674.29 usr 0.00 sys = 674.29 cpu) - -Deleting everything from table -Time for delete_big (2): 687 secs (686.86 usr 0.00 sys = 686.86 cpu) - -Estimated total time: 15454 secs (15453.34 usr 0.00 sys = 15453.34 cpu) diff --git a/sql-bench/Results-win32/insert-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4782dc717df5c23dfc996cd42c2b350dd1e68f43..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,81 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 19:59:21 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Sat Feb 20 19:59:22 1999 -10000 : Sat Feb 20 19:59:33 1999 -20000 : Sat Feb 20 19:59:43 1999 -30000 : Sat Feb 20 19:59:54 1999 -40000 : Sat Feb 20 20:00:05 1999 -50000 : Sat Feb 20 20:00:15 1999 -60000 : Sat Feb 20 20:00:26 1999 -70000 : Sat Feb 20 20:00:37 1999 -80000 : Sat Feb 20 20:00:48 1999 -90000 : Sat Feb 20 20:01:00 1999 -Inserting 100000 rows in reverse order -0 : Sat Feb 20 20:01:11 1999 -10000 : Sat Feb 20 20:01:22 1999 -20000 : Sat Feb 20 20:01:33 1999 -30000 : Sat Feb 20 20:01:44 1999 -40000 : Sat Feb 20 20:01:55 1999 -50000 : Sat Feb 20 20:02:06 1999 -60000 : Sat Feb 20 20:02:18 1999 -70000 : Sat Feb 20 20:02:29 1999 -80000 : Sat Feb 20 20:02:40 1999 -90000 : Sat Feb 20 20:02:51 1999 -Inserting 100000 rows in random order -0 : Sat Feb 20 20:03:02 1999 -10000 : Sat Feb 20 20:03:13 1999 -20000 : Sat Feb 20 20:03:24 1999 -30000 : Sat Feb 20 20:03:36 1999 -40000 : Sat Feb 20 20:03:47 1999 -50000 : Sat Feb 20 20:03:58 1999 -60000 : Sat Feb 20 20:04:09 1999 -70000 : Sat Feb 20 20:04:20 1999 -80000 : Sat Feb 20 20:04:31 1999 -90000 : Sat Feb 20 20:04:42 1999 -Time for insert (300000): 332 wallclock secs (58.41 usr + 41.64 sys = 100.05 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 68 wallclock secs (16.34 usr + 13.36 sys = 29.70 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 73 wallclock secs (41.15 usr + 19.92 sys = 61.07 CPU) -Time for order_by_key (10:3000000): 73 wallclock secs (40.79 usr + 20.33 sys = 61.12 CPU) -Time for order_by (10:3000000): 100 wallclock secs (40.72 usr + 19.97 sys = 60.69 CPU) -Time for select_range_prefix (5000:20000): 12 wallclock secs ( 4.27 usr + 0.95 sys = 5.22 CPU) -Time for select_range (5000:20000): 13 wallclock secs ( 4.34 usr + 1.00 sys = 5.34 CPU) -Time for select_key_prefix (200000): 375 wallclock secs (158.15 usr + 38.91 sys = 197.05 CPU) -Time for select_key (200000): 367 wallclock secs (157.27 usr + 40.25 sys = 197.51 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 22 wallclock secs ( 8.37 usr + 2.09 sys = 10.46 CPU) -Time for select_range (20000:43500): 22 wallclock secs ( 8.39 usr + 2.31 sys = 10.71 CPU) -Time for select_group (91): 27 wallclock secs ( 0.06 usr + 0.01 sys = 0.07 CPU) -Time for min_max_on_key (3000): 4 wallclock secs ( 2.17 usr + 0.59 sys = 2.76 CPU) -Time for min_max (60): 26 wallclock secs ( 0.06 usr + 0.01 sys = 0.07 CPU) -Time for count_on_key (100): 31 wallclock secs ( 0.08 usr + 0.04 sys = 0.12 CPU) -Time for count (100): 54 wallclock secs ( 0.06 usr + 0.01 sys = 0.07 CPU) - -Testing update with functions -Time for update_key (500): 0 wallclock secs ( 0.09 usr + 0.05 sys = 0.14 CPU) -Time for update_key_big (501): 26 wallclock secs ( 0.10 usr + 0.06 sys = 0.16 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.10 usr + 0.08 sys = 0.18 CPU) -Time for delete_big (12): 14 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 2906 wallclock secs (27.77 usr + 14.64 sys = 42.41 CPU) - -Testing update of keys -Time for update_of_key (256): 157 wallclock secs ( 0.04 usr + 0.04 sys = 0.08 CPU) - -Deleting everything from table -Time for delete_big (2): 663 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) - -Total time: 5368 wallclock secs (568.77 usr + 216.27 sys = 785.04 CPU) diff --git a/sql-bench/Results-win32/insert-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/insert-mysql-win98-cmp-access,mysql deleted file mode 100644 index f45c0f45f36efeb8f8313c71fbae98e44b81ae79..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,64 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 12:26:26 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 486 wallclock secs (486.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 107 wallclock secs (106.89 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 192 wallclock secs (191.85 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 192 wallclock secs (192.79 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 282 wallclock secs (281.88 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 264 wallclock secs (263.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 38 wallclock secs (37.95 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 38 wallclock secs (38.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -188074 queries in 94037 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 639 wallclock secs (638.34 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -189130 queries in 94565 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 635 wallclock secs (635.54 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 38 wallclock secs (38.28 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 38 wallclock secs (38.62 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (91): 40 wallclock secs (39.38 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 8 wallclock secs ( 7.96 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 34 wallclock secs (33.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 54 wallclock secs (54.27 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 58 wallclock secs (57.94 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (500): 1 wallclock secs ( 1.16 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 40 wallclock secs (39.93 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 485 wallclock secs (484.77 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 96 wallclock secs (96.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.93 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 27 wallclock secs (26.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 10 parts -Time for insert_key (100000): 367 wallclock secs (367.34 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_key (256): 53 wallclock secs (52.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 102 wallclock secs (102.60 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 4315 wallclock secs (4316.21 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/insert-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 5149348b5d409e496b011452e20f24183840cbf4..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,81 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 11:54:41 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Sun Feb 7 11:54:43 1999 -10000 : Sun Feb 7 11:55:01 1999 -20000 : Sun Feb 7 11:55:18 1999 -30000 : Sun Feb 7 11:55:36 1999 -40000 : Sun Feb 7 11:55:53 1999 -50000 : Sun Feb 7 11:56:11 1999 -60000 : Sun Feb 7 11:56:28 1999 -70000 : Sun Feb 7 11:56:46 1999 -80000 : Sun Feb 7 11:57:03 1999 -90000 : Sun Feb 7 11:57:21 1999 -Inserting 100000 rows in reverse order -0 : Sun Feb 7 11:57:38 1999 -10000 : Sun Feb 7 11:57:56 1999 -20000 : Sun Feb 7 11:58:14 1999 -30000 : Sun Feb 7 11:58:32 1999 -40000 : Sun Feb 7 11:58:50 1999 -50000 : Sun Feb 7 11:59:08 1999 -60000 : Sun Feb 7 11:59:26 1999 -70000 : Sun Feb 7 11:59:44 1999 -80000 : Sun Feb 7 12:00:03 1999 -90000 : Sun Feb 7 12:00:21 1999 -Inserting 100000 rows in random order -0 : Sun Feb 7 12:00:39 1999 -10000 : Sun Feb 7 12:00:57 1999 -20000 : Sun Feb 7 12:01:15 1999 -30000 : Sun Feb 7 12:01:33 1999 -40000 : Sun Feb 7 12:01:51 1999 -50000 : Sun Feb 7 12:02:09 1999 -60000 : Sun Feb 7 12:02:27 1999 -70000 : Sun Feb 7 12:02:45 1999 -80000 : Sun Feb 7 12:03:03 1999 -90000 : Sun Feb 7 12:03:21 1999 -Time for insert (300000): 536 secs (535.99 usr 0.00 sys = 535.99 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 144 secs (143.90 usr 0.00 sys = 143.90 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 354 secs (353.98 usr 0.00 sys = 353.98 cpu) -Time for order_by_key (10:3000000): 355 secs (355.39 usr 0.00 sys = 355.39 cpu) -Time for order_by (10:3000000): 382 secs (381.52 usr 0.00 sys = 381.52 cpu) -Time for select_range_prefix (5000:20000): 18 secs (17.77 usr 0.00 sys = 17.77 cpu) -Time for select_range (5000:20000): 18 secs (17.89 usr 0.00 sys = 17.89 cpu) -Time for select_key_prefix (200000): 470 secs (470.56 usr 0.00 sys = 470.56 cpu) -Time for select_key (200000): 464 secs (463.54 usr 0.00 sys = 463.54 cpu) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 33 secs (32.88 usr 0.00 sys = 32.88 cpu) -Time for select_range (20000:43500): 32 secs (32.18 usr 0.00 sys = 32.18 cpu) -Time for select_group (91): 28 secs (28.33 usr 0.00 sys = 28.33 cpu) -Time for min_max_on_key (3000): 7 secs ( 6.69 usr 0.00 sys = 6.69 cpu) -Time for min_max (60): 28 secs (28.04 usr 0.00 sys = 28.04 cpu) -Time for count_on_key (100): 34 secs (33.86 usr 0.00 sys = 33.86 cpu) -Time for count (100): 58 secs (58.27 usr 0.00 sys = 58.27 cpu) - -Testing update with functions -Time for update_key (500): 1 secs ( 0.95 usr 0.00 sys = 0.95 cpu) -Time for update_key_big (501): 26 secs (26.35 usr 0.00 sys = 26.35 cpu) - -Testing delete -Time for delete_key (500): 2 secs ( 1.83 usr 0.00 sys = 1.83 cpu) -Time for delete_big (12): 15 secs (15.01 usr 0.00 sys = 15.01 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 2908 secs (2907.97 usr 0.00 sys = 2907.97 cpu) - -Testing update of keys -Time for update_of_key (256): 164 secs (163.52 usr 0.00 sys = 163.52 cpu) - -Deleting everything from table -Time for delete_big (2): 665 secs (665.36 usr 0.00 sys = 665.36 cpu) - -Total time: 6744 secs (6743.40 usr 0.00 sys = 6743.40 cpu) diff --git a/sql-bench/Results-win32/insert-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 03c00927dcc5ef0f9036f55c88bbe07164ddedde..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,69 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-04 3:50:22 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 2511 wallclock secs (425.27 usr 50.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 353 wallclock secs (195.15 usr 26.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 1130 wallclock secs (575.36 usr 100.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -6 queries in 6 loops of 10 loops took 675 seconds -Estimated time for order_by_key (10:1800000): 1125 wallclock secs (580.64 usr 95.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -6 queries in 6 loops of 10 loops took 659 seconds -Estimated time for order_by (10:1800000): 1098 wallclock secs (570.85 usr 95.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5000:20000): 31 wallclock secs (18.04 usr 3.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -410 queries in 410 loops of 5000 loops took 608 seconds -Estimated time for select_range (5000:1640): 7414 wallclock secs (19.17 usr 3.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -115830 queries in 57915 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 1037 wallclock secs (576.33 usr 93.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1384 queries in 692 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 86849 wallclock secs (639.74 usr 105.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 64 wallclock secs (40.72 usr 5.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1400 queries in 35 loops of 500 loops took 605 seconds -Estimated time for select_range (20000:3045): 605 wallclock secs ( 3.09 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (91): 45 wallclock secs ( 0.15 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 15 wallclock secs ( 9.59 usr 1.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 25 wallclock secs ( 0.22 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 37 wallclock secs ( 0.33 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 51 wallclock secs ( 0.30 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with functions -Time for update_key (500): 220 wallclock secs ( 0.76 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_key_big (501): 429 wallclock secs ( 0.83 usr 0.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 628 wallclock secs ( 0.70 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 399 wallclock secs ( 0.09 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 1293 wallclock secs (151.81 usr 16.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_key (256): 568 wallclock secs ( 0.30 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big (2): 378 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 114468 wallclock secs (3850.94 usr 602.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/insert-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 191e9b1193494ab64e5aae2672cf071777e80df3..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,102 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-23 9:11:17 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Fri Oct 23 09:11:20 1998 -10000 : Fri Oct 23 09:12:05 1998 -20000 : Fri Oct 23 09:12:51 1998 -30000 : Fri Oct 23 09:13:38 1998 -40000 : Fri Oct 23 09:14:25 1998 -50000 : Fri Oct 23 09:15:13 1998 -60000 : Fri Oct 23 09:16:01 1998 -70000 : Fri Oct 23 09:16:49 1998 -80000 : Fri Oct 23 09:17:37 1998 -90000 : Fri Oct 23 09:18:25 1998 -Inserting 100000 rows in reverse order -0 : Fri Oct 23 09:19:14 1998 -10000 : Fri Oct 23 09:20:02 1998 -20000 : Fri Oct 23 09:20:49 1998 -30000 : Fri Oct 23 09:21:36 1998 -40000 : Fri Oct 23 09:22:23 1998 -50000 : Fri Oct 23 09:23:11 1998 -60000 : Fri Oct 23 09:24:00 1998 -70000 : Fri Oct 23 09:24:48 1998 -80000 : Fri Oct 23 09:25:37 1998 -90000 : Fri Oct 23 09:26:25 1998 -Inserting 100000 rows in random order -0 : Fri Oct 23 09:27:13 1998 -10000 : Fri Oct 23 09:28:01 1998 -20000 : Fri Oct 23 09:28:50 1998 -30000 : Fri Oct 23 09:29:39 1998 -40000 : Fri Oct 23 09:30:30 1998 -50000 : Fri Oct 23 09:31:21 1998 -60000 : Fri Oct 23 09:32:13 1998 -70000 : Fri Oct 23 09:33:06 1998 -80000 : Fri Oct 23 09:34:00 1998 -90000 : Fri Oct 23 09:34:55 1998 -Time for insert (300000): 1468 secs (1468.33 usr 0.00 sys = 1468.33 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 172 secs (172.25 usr 0.00 sys = 172.25 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 589 secs (588.93 usr 0.00 sys = 588.93 cpu) -Time for order_by_key (10:3000000): 653 secs (653.06 usr 0.00 sys = 653.06 cpu) -Time for order_by (10:3000000): 648 secs (647.94 usr 0.00 sys = 647.94 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -140 queries in 140 loops of 5000 loops took 614 seconds -Estimated time for select_range_prefix (5000:560): 21928 secs (21912.93 usr 0.00 sys = 21912.93 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -140 queries in 140 loops of 5000 loops took 617 seconds -Estimated time for select_range (5000:560): 22035 secs (22045.64 usr 0.00 sys = 22045.64 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -142458 queries in 71229 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 843 secs (842.99 usr 0.00 sys = 842.99 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -136926 queries in 68463 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 877 secs (877.85 usr 0.00 sys = 877.85 cpu) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -360 queries in 9 loops of 500 loops took 620 seconds -Estimated time for select_range_prefix (20000:783): 620 secs (620.05 usr 0.00 sys = 620.05 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -360 queries in 9 loops of 500 loops took 622 seconds -Estimated time for select_range (20000:783): 622 secs (622.63 usr 0.00 sys = 622.63 cpu) -Time for select_group (91): 2495 secs (2494.69 usr 0.00 sys = 2494.69 cpu) -Time for min_max_on_key (3000): 13 secs (13.34 usr 0.00 sys = 13.34 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -54 queries in 9 loops of 500 loops took 655 seconds -Estimated time for min_max (3000): 36388 secs (36350.61 usr 0.00 sys = 36350.61 cpu) -Time for count_on_key (100): 2139 secs (2139.16 usr 0.00 sys = 2139.16 cpu) -Time for count (100): 2221 secs (2220.87 usr 0.00 sys = 2220.87 cpu) - -Testing update with functions -Time for update_key (500): 2 secs ( 2.71 usr 0.00 sys = 2.71 cpu) -Time for update_key_big (501): 994 secs (993.63 usr 0.00 sys = 993.63 cpu) - -Testing delete -Time for delete_key (500): 65 secs (65.34 usr 0.00 sys = 65.34 cpu) -Time for delete_big (12): 492 secs (491.75 usr 0.00 sys = 491.75 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 9758 secs (9757.93 usr 0.00 sys = 9757.93 cpu) - -Testing update of keys -Time for update_of_key (256): 16656 secs (16655.63 usr 0.00 sys = 16655.63 cpu) - -Deleting everything from table -Time for delete_big (2): 1736 secs (1735.77 usr 0.00 sys = 1735.77 cpu) - -Estimated total time: 192155 secs (192149.60 usr 0.00 sys = 192149.60 cpu) diff --git a/sql-bench/Results-win32/insert-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/insert-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b5cd78f3c4a919d0e3c2126432743ff6c240c857..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/insert-sybase_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,99 +0,0 @@ -Testing server 'Sybase enterprise 11.5 NT' at 1998-10-02 8:13:25 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -0 : Fri Oct 2 08:13:31 1998 -10000 : Fri Oct 2 08:15:49 1998 -20000 : Fri Oct 2 08:18:01 1998 -30000 : Fri Oct 2 08:20:14 1998 -40000 : Fri Oct 2 08:22:27 1998 -50000 : Fri Oct 2 08:24:48 1998 -60000 : Fri Oct 2 08:27:19 1998 -70000 : Fri Oct 2 08:30:03 1998 -80000 : Fri Oct 2 08:32:09 1998 -90000 : Fri Oct 2 08:34:12 1998 -Inserting 100000 rows in reverse order -0 : Fri Oct 2 08:36:14 1998 -10000 : Fri Oct 2 08:38:17 1998 -20000 : Fri Oct 2 08:40:22 1998 -30000 : Fri Oct 2 08:42:31 1998 -40000 : Fri Oct 2 08:44:39 1998 -50000 : Fri Oct 2 08:46:43 1998 -60000 : Fri Oct 2 08:48:50 1998 -70000 : Fri Oct 2 08:51:04 1998 -80000 : Fri Oct 2 08:53:26 1998 -90000 : Fri Oct 2 08:56:23 1998 -Inserting 100000 rows in random order -0 : Fri Oct 2 08:58:39 1998 -10000 : Fri Oct 2 09:01:03 1998 -20000 : Fri Oct 2 09:04:49 1998 -30000 : Fri Oct 2 09:08:33 1998 -40000 : Fri Oct 2 09:12:29 1998 -50000 : Fri Oct 2 09:15:12 1998 -60000 : Fri Oct 2 09:18:09 1998 -70000 : Fri Oct 2 09:21:29 1998 -80000 : Fri Oct 2 09:24:42 1998 -90000 : Fri Oct 2 09:28:39 1998 -Time for insert (300000): 4682 secs (4681.62 usr 0.00 sys = 4681.62 cpu) - -Testing insert of duplicates -Time for insert_duplicates (300000): 331 secs (331.28 usr 0.00 sys = 331.28 cpu) - -Retrieving data from the table -Time for select_big (10:3000000): 275 secs (275.20 usr 0.00 sys = 275.20 cpu) -Time for order_by_key (10:3000000): 273 secs (272.97 usr 0.00 sys = 272.97 cpu) -Time for order_by (10:3000000): 395 secs (394.89 usr 0.00 sys = 394.89 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1490 queries in 1490 loops of 5000 loops took 601 seconds -Estimated time for select_range_prefix (5000:5960): 2016 secs (2017.70 usr 0.00 sys = 2017.70 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1490 queries in 1490 loops of 5000 loops took 603 seconds -Estimated time for select_range (5000:5960): 2023 secs (2021.03 usr 0.00 sys = 2021.03 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -6904 queries in 3452 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 17410 secs (17410.02 usr 0.00 sys = 17410.02 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -6824 queries in 3412 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 17614 secs (17614.13 usr 0.00 sys = 17614.13 cpu) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2920 queries in 73 loops of 500 loops took 602 seconds -Estimated time for select_range_prefix (20000:6351): 602 secs (602.38 usr 0.00 sys = 602.38 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2920 queries in 73 loops of 500 loops took 603 seconds -Estimated time for select_range (20000:6351): 603 secs (603.08 usr 0.00 sys = 603.08 cpu) -Time for select_group (91): 56 secs (55.88 usr 0.00 sys = 55.88 cpu) -Time for min_max_on_key (3000): 96 secs (96.64 usr 0.00 sys = 96.64 cpu) -Time for min_max (60): 17 secs (16.74 usr 0.00 sys = 16.74 cpu) -Time for count_on_key (100): 14 secs (14.21 usr 0.00 sys = 14.21 cpu) -Time for count (100): 23 secs (22.40 usr 0.00 sys = 22.40 cpu) - -Testing update with functions -Time for update_key (500): 40 secs (39.90 usr 0.00 sys = 39.90 cpu) -Time for update_key_big (501): 347 secs (347.05 usr 0.00 sys = 347.05 cpu) - -Testing delete -Time for delete_key (500): 43 secs (42.44 usr 0.00 sys = 42.44 cpu) -Time for delete_big (12): 181 secs (181.45 usr 0.00 sys = 181.45 cpu) - -Insert into table with 16 keys and with a primary key with 15 parts -Time for insert_key (100000): 7053 secs (7053.03 usr 0.00 sys = 7053.03 cpu) - -Testing update of keys -Time for update_of_key (256): 1023 secs (1022.68 usr 0.00 sys = 1022.68 cpu) - -Deleting everything from table -Time for delete_big (2): 7736 secs (7735.26 usr 0.00 sys = 7735.26 cpu) - -Estimated total time: 69907 secs (69908.40 usr 0.00 sys = 69908.40 cpu) diff --git a/sql-bench/Results-win32/select-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/select-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index b51c2999152ed4681ff39b023483987d44c78139..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Access 2000' at 2000-01-04 0:50:34 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 45.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 69 wallclock secs (68.33 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 4 wallclock secs ( 3.96 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:248587): 63 wallclock secs (63.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -37233 queries in 5319 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 1129 wallclock secs (1129.48 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 445 wallclock secs (445.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 1710 wallclock secs (1710.98 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/select-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 7408c75b6a67be4e8484adc97359cdb0c55a0c26..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'IBM DB2 5' at 1999-02-02 3:47:34 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 97 secs (97.40 usr 0.00 sys = 97.40 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 4 secs ( 3.28 usr 0.00 sys = 3.28 cpu) -Time for select_range (400:61130): 24 secs (23.86 usr 0.00 sys = 23.86 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -39872 queries in 5696 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 1055 secs (1055.01 usr 0.00 sys = 1055.01 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -39885 queries in 7977 loops of 10000 loops took 601 seconds -Estimated time for count_key (50000): 753 secs (753.46 usr 0.00 sys = 753.46 cpu) - -Estimated total time: 1934 secs (1934.67 usr 0.00 sys = 1934.67 cpu) diff --git a/sql-bench/Results-win32/select-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index f3c45dd625897eeabff888a8b0a204872a46b9fa..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-10-06 1:41:01 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 51 secs (51.92 usr 0.00 sys = 51.92 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 12 secs (11.92 usr 0.00 sys = 11.92 cpu) -Time for select_range (400:61130): 29 secs (28.45 usr 0.00 sys = 28.45 cpu) -Time for min_max_on_key (70000): 475 secs (474.89 usr 0.00 sys = 474.89 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -3840 queries in 768 loops of 10000 loops took 601 seconds -Estimated time for count_key (50000): 7825 secs (7824.40 usr 0.00 sys = 7824.40 cpu) - -Estimated total time: 8393 secs (8391.74 usr 0.00 sys = 8391.74 cpu) diff --git a/sql-bench/Results-win32/select-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 4475ad4572c9b7cb5635f1252891312ed53b1b8c..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 14:22:16 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 93 secs (93.21 usr 0.00 sys = 93.21 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 2 secs ( 2.32 usr 0.00 sys = 2.32 cpu) -Time for select_range (400:61130): 19 secs (18.64 usr 0.00 sys = 18.64 cpu) -Time for min_max_on_key (70000): 308 secs (308.18 usr 0.00 sys = 308.18 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -39370 queries in 7874 loops of 10000 loops took 601 seconds -Estimated time for count_key (50000): 763 secs (762.84 usr 0.00 sys = 762.84 cpu) - -Estimated total time: 1186 secs (1185.72 usr 0.00 sys = 1185.72 cpu) diff --git a/sql-bench/Results-win32/select-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index e41c1620a2c8c5a303e989fd3eb47fe1272b7976..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 21:28:50 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 12 wallclock secs ( 2.52 usr + 1.26 sys = 3.79 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.23 usr + 0.11 sys = 0.34 CPU) -Time for select_range (400:61130): 5 wallclock secs ( 1.21 usr + 0.42 sys = 1.63 CPU) -Time for min_max_on_key (70000): 216 wallclock secs (49.80 usr + 13.51 sys = 63.31 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -45135 queries in 9027 loops of 10000 loops took 601 seconds -Estimated time for count_key (50000): 665 wallclock secs (36.67 usr + 9.66 sys = 46.33 CPU) - -Estimated total time: 899 wallclock secs (90.43 usr + 24.97 sys = 115.41 CPU) diff --git a/sql-bench/Results-win32/select-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/select-mysql-win98-cmp-access,mysql deleted file mode 100644 index 3607cb4d07e29dd39ed39983ed0c2d78eb970a90..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 13:37:12 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 40 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 19 wallclock secs (19.39 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 2 wallclock secs ( 1.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:214316): 37 wallclock secs (36.36 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 352 wallclock secs (352.24 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -46695 queries in 9339 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 643 wallclock secs (643.18 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 1053 wallclock secs (1053.14 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/select-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 64e97b349134af30f5e83b2cceec749b909d87ed..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 13:47:07 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 18 secs (17.89 usr 0.00 sys = 17.89 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 3 secs ( 2.81 usr 0.00 sys = 2.81 cpu) -Time for select_range (400:61130): 12 secs (11.82 usr 0.00 sys = 11.82 cpu) -Time for min_max_on_key (70000): 261 secs (261.04 usr 0.00 sys = 261.04 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -42345 queries in 8469 loops of 10000 loops took 601 seconds -Estimated time for count_key (50000): 709 secs (709.52 usr 0.00 sys = 709.52 cpu) - -Estimated total time: 1003 secs (1003.10 usr 0.00 sys = 1003.10 cpu) diff --git a/sql-bench/Results-win32/select-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index fd7f03a54a6371da25aae8899a4c8dd00a33c682..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-04 7:11:38 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 81 wallclock secs (13.55 usr 1.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 9 wallclock secs ( 3.35 usr 0.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (400:61130): 53 wallclock secs (14.24 usr 1.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -36078 queries in 5154 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 1166 wallclock secs (155.66 usr 33.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -36075 queries in 7215 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 832 wallclock secs (118.15 usr 25.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 2147 wallclock secs (304.96 usr 63.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/select-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/select-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 2a83ce0e6addbd1fb532ba9574587039d6517637..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/select-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-08 16:21:29 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 8.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 55 secs (55.66 usr 0.00 sys = 55.66 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 5 secs ( 5.04 usr 0.00 sys = 5.04 cpu) -Time for select_range (400:61800): 106 secs (105.79 usr 0.00 sys = 105.79 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -3661 queries in 523 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 11491 secs (11490.52 usr 0.00 sys = 11490.52 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1785 queries in 357 loops of 10000 loops took 602 seconds -Estimated time for count_key (50000): 16862 secs (16847.20 usr 0.00 sys = 16847.20 cpu) - -Estimated total time: 28523 secs (28507.76 usr 0.00 sys = 28507.76 cpu) diff --git a/sql-bench/Results-win32/wisconsin-access_odbc-win98-cmp-access,mysql b/sql-bench/Results-win32/wisconsin-access_odbc-win98-cmp-access,mysql deleted file mode 100644 index bc3161800aa268f4ca5c95b0f4703c97e84235ff..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-access_odbc-win98-cmp-access,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Access 2000' at 2000-01-04 1:10:19 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 246 wallclock secs (246.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 2 wallclock secs ( 1.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 33 wallclock secs (33.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 282 wallclock secs (281.60 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/wisconsin-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 12e5cc4596607123bb42ae0250cbc494b4ea2920..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-db2_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'IBM DB2 5' at 1999-02-02 4:09:47 - -Wisconsin benchmark test - -Time for create_table (3): 3 secs ( 3.03 usr 0.00 sys = 3.03 cpu) - -Inserting data -Time to insert (31000): 330 secs (329.62 usr 0.00 sys = 329.62 cpu) -Time to delete_big (1): 2 secs ( 1.86 usr 0.00 sys = 1.86 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 32 secs (32.10 usr 0.00 sys = 32.10 cpu) - -Total time: 368 secs (367.48 usr 0.00 sys = 367.48 cpu) diff --git a/sql-bench/Results-win32/wisconsin-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b05d8a1472ef9cf5724de8c8138b625337aa6db2..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-informix_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Informix 7.30C1 ' at 1998-10-06 2:00:31 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.25 usr 0.00 sys = 0.25 cpu) - -Inserting data -Time to insert (31000): 171 secs (170.83 usr 0.00 sys = 170.83 cpu) -Time to delete_big (1): 2 secs ( 2.36 usr 0.00 sys = 2.36 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 45 secs (44.91 usr 0.00 sys = 44.91 cpu) - -Total time: 219 secs (219.03 usr 0.00 sys = 219.03 cpu) diff --git a/sql-bench/Results-win32/wisconsin-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 79a4c1991240fc1763592d4fc4686d16edd11169..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-ms-sql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Microsoft SQL Server 7.00 - 7.00.517 (Intel X86) ' at 1998-09-07 14:39:20 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.61 usr 0.00 sys = 0.61 cpu) - -Inserting data -Time to insert (31000): 262 secs (261.70 usr 0.00 sys = 261.70 cpu) -Time to delete_big (1): 4 secs ( 3.98 usr 0.00 sys = 3.98 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 24 secs (23.97 usr 0.00 sys = 23.97 cpu) - -Total time: 290 secs (290.80 usr 0.00 sys = 290.80 cpu) diff --git a/sql-bench/Results-win32/wisconsin-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 194401cb8f75d28686d0d1792f3a223d1f7d9a90..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-mysql-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-20 21:42:45 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) - -Inserting data -Time to insert (31000): 29 wallclock secs ( 4.75 usr + 3.96 sys = 8.70 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 8 wallclock secs ( 3.07 usr + 1.29 sys = 4.37 CPU) - -Total time: 38 wallclock secs ( 7.83 usr + 5.25 sys = 13.08 CPU) diff --git a/sql-bench/Results-win32/wisconsin-mysql-win98-cmp-access,mysql b/sql-bench/Results-win32/wisconsin-mysql-win98-cmp-access,mysql deleted file mode 100644 index 0acaf169c1ae25f974e774d381592d9313fc9aa3..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-mysql-win98-cmp-access,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-04 13:54:03 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 49 wallclock secs (48.88 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 18 wallclock secs (18.67 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 68 wallclock secs (68.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/wisconsin-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index b064bc0d04bd157cd43c4f5ec3fceebdd1449284..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.16 gamma' at 1999-02-07 14:02:02 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.05 usr 0.00 sys = 0.05 cpu) - -Inserting data -Time to insert (31000): 50 secs (50.09 usr 0.00 sys = 50.09 cpu) -Time to delete_big (1): 1 secs ( 0.45 usr 0.00 sys = 0.45 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 23 secs (23.44 usr 0.00 sys = 23.44 cpu) - -Total time: 74 secs (74.07 usr 0.00 sys = 74.07 cpu) diff --git a/sql-bench/Results-win32/wisconsin-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 252c484443aace37a9ecf0ba27cc956b63e75bb9..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-oracle_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Oracle 8.0.4.0.0' at 1999-04-04 7:34:35 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 245 wallclock secs (41.80 usr 5.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 82 wallclock secs (44.61 usr 5.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 335 wallclock secs (86.43 usr 10.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results-win32/wisconsin-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase b/sql-bench/Results-win32/wisconsin-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase deleted file mode 100644 index 8b953a2933d48dbfde3f4977ba30fc44f2dfe396..0000000000000000000000000000000000000000 --- a/sql-bench/Results-win32/wisconsin-solid_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Solid version ???' at 1998-10-08 16:44:23 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.20 usr 0.00 sys = 0.20 cpu) - -Inserting data -Time to insert (31000): 233 secs (232.63 usr 0.00 sys = 232.63 cpu) -Time to delete_big (1): 8 secs ( 8.24 usr 0.00 sys = 8.24 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 84 secs (83.66 usr 0.00 sys = 83.66 cpu) - -Total time: 338 secs (338.33 usr 0.00 sys = 338.33 cpu) diff --git a/sql-bench/Results/ATIS-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/ATIS-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index a3c2bf9eb79a35e447e29dea4ef3b8f3cb229db9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-18 23:58:32 - -ATIS table test - -Creating tables -Time for create_table (28): 2 secs ( 0.05 usr 0.03 sys = 0.08 cpu) - -Inserting data -Time to insert (9768): 172 secs ( 6.70 usr 3.12 sys = 9.82 cpu) - -Retrieving data -Time for select_simple_join (500): 14 secs ( 2.35 usr 4.08 sys = 6.43 cpu) -Time for select_join (200): 74 secs (22.10 usr 21.09 sys = 43.19 cpu) -Time for select_distinct (800): 95 secs ( 6.59 usr 14.43 sys = 21.02 cpu) -Time for select_group (2300): 86 secs ( 3.97 usr 7.49 sys = 11.46 cpu) - -Removing tables -Time to drop_table (28): 2 secs ( 0.00 usr 0.01 sys = 0.01 cpu) -Total time: 445 secs (41.77 usr 50.26 sys = 92.03 cpu) diff --git a/sql-bench/Results/ATIS-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql b/sql-bench/Results/ATIS-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql deleted file mode 100644 index 4481b411247193813c6e231ea70f6600879e2408..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-20 19:07:58 - -ATIS table test - -Creating tables -Time for create_table (28): 3 secs ( 0.01 usr 0.01 sys = 0.02 cpu) - -Inserting data -Time to insert (9768): 164 secs ( 1.53 usr 1.54 sys = 3.07 cpu) - -Retrieving data -Time for select_simple_join (500): 31 secs ( 5.45 usr 9.53 sys = 14.98 cpu) -Time for select_join (200): 254 secs (52.81 usr 82.97 sys = 135.78 cpu) -Time for select_distinct (800): 146 secs (11.45 usr 37.01 sys = 48.46 cpu) -Time for select_group (2300): 109 secs ( 7.42 usr 14.55 sys = 21.97 cpu) - -Removing tables -Time to drop_table (28): 3 secs ( 0.02 usr 0.01 sys = 0.03 cpu) -Total time: 710 secs (78.70 usr 145.64 sys = 224.34 cpu) diff --git a/sql-bench/Results/ATIS-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/ATIS-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 3d819682d263a2a2619c0aa2d68f51817a13a726..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,27 +0,0 @@ -Testing server '2.1' at 2000-11-23 16:03:39 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.03 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 33 wallclock secs ( 3.61 usr 2.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Warning: Query 'select flight.flight_code,aircraft.aircraft_type from flight,aircraft where flight.aircraft_code=aircraft.aircraft_code' returned 100 rows when it should have returned 579 rows -Time for select_simple_join (500): 28 wallclock secs ( 0.35 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Warning: Query 'select airline.airline_name,aircraft.aircraft_type from aircraft,airline,flight where flight.aircraft_code=aircraft.aircraft_code and flight.airline_code=airline.airline_code' returned 100 rows when it should have returned 579 rows -Warning: Query 'select fare.fare_code from restrict_carrier,airline,fare where restrict_carrier.airline_code=airline.airline_code and fare.restrict_code=restrict_carrier.restrict_code' returned 100 rows when it should have returned 5692 rows -Time for select_join (200): 97 wallclock secs ( 0.25 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -520 queries in 65 loops of 100 loops took 609 seconds -Estimated time for select_distinct (800): 936 wallclock secs ( 1.20 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Warning: Query 'select flight_number,range_miles,fare_class FROM aircraft,flight,flight_class WHERE flight.flight_code=flight_class.flight_code AND flight.aircraft_code=aircraft.aircraft_code AND range_miles<>0 AND (stops=1 OR stops=2) GROUP BY flight_number,range_miles,fare_class' returned 100 rows when it should have returned 150 rows -Warning: Query 'select from_airport,to_airport,range_miles,time_elapsed FROM aircraft,flight WHERE aircraft.aircraft_code=flight.aircraft_code AND to_airport NOT LIKE from_airport AND range_miles<>0 AND time_elapsed<>0 GROUP BY from_airport,to_airport,range_miles,time_elapsed' returned 100 rows when it should have returned 409 rows -Time for select_group (2200): 359 wallclock secs ( 1.35 usr 0.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 7 wallclock secs ( 0.01 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Estimated total time: 1461 wallclock secs ( 6.81 usr 4.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/ATIS-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 5090863cb93d236c8749c42f526b9848b44f2a94..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-22 8:39:03 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 4 wallclock secs ( 1.16 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 5 wallclock secs ( 1.88 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 219 wallclock secs (14.80 usr 3.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (700): 22 wallclock secs ( 5.65 usr 1.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 250 wallclock secs (23.58 usr 5.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/ATIS-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 66b000d8a57d3e93cbfa7c1e93c33119969b3a51..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:10:30 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 9 wallclock secs ( 1.54 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 8 wallclock secs ( 2.34 usr 1.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 66 wallclock secs (17.47 usr 12.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 52 wallclock secs ( 6.58 usr 3.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2700): 55 wallclock secs ( 5.33 usr 1.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 190 wallclock secs (33.29 usr 19.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/ATIS-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 71b73b390bbf2a8e9f96321c73f93f7224a42d04..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:54:10 - -ATIS table test - -Creating tables -Time for create_table (28): 0 secs ( 0.00 usr 0.01 sys = 0.01 cpu) - -Inserting data -Time to insert (9768): 5 secs ( 0.43 usr 1.05 sys = 1.48 cpu) - -Retrieving data -Time for select_simple_join (500): 3 secs ( 0.50 usr 1.29 sys = 1.79 cpu) -Time for select_join (200): 34 secs ( 3.85 usr 12.82 sys = 16.67 cpu) -Time for select_distinct (800): 20 secs ( 0.92 usr 3.98 sys = 4.90 cpu) -Time for select_group (2300): 13 secs ( 0.82 usr 2.54 sys = 3.36 cpu) - -Removing tables -Time to drop_table (28): 0 secs ( 0.01 usr 0.00 sys = 0.01 cpu) -Total time: 75 secs ( 6.54 usr 21.70 sys = 28.24 cpu) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/ATIS-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 555f277d5038e83ba308377973d0f0370419fe6a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 22:58:13 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 4 wallclock secs ( 0.94 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 2 wallclock secs ( 0.91 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 22 wallclock secs ( 4.87 usr 2.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 14 wallclock secs ( 2.23 usr 0.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2000): 7 wallclock secs ( 1.43 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 49 wallclock secs (10.38 usr 4.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 26cf40eddaefec5cc9f11a7281c85ecad7ba3df0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:48:19 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 4 wallclock secs ( 1.36 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 1.30 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 23 wallclock secs ( 9.83 usr 1.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (700): 15 wallclock secs ( 3.62 usr 0.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 45 wallclock secs (16.16 usr 2.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index 4f87bebff3d6f4819710ed3e1f6d68dd5b95643b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:26:22 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 3 wallclock secs ( 0.51 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 2 wallclock secs ( 0.58 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (100): 2 wallclock secs ( 0.48 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix_join (100): 10 wallclock secs ( 3.45 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 11 wallclock secs ( 1.54 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 11 wallclock secs ( 1.48 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 39 wallclock secs ( 8.05 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/ATIS-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 9766a825848b4e4ee2e762e1a2f48d0948061f05..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:10:25 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 4 wallclock secs ( 0.82 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 2 wallclock secs ( 0.96 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 27 wallclock secs ( 5.95 usr 3.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 17 wallclock secs ( 2.78 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2300): 10 wallclock secs ( 2.04 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 60 wallclock secs (12.57 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index 16375ba075bd6f8e7879c81a3520b66c554b3988..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:03:13 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 4 wallclock secs ( 0.59 usr 0.35 sys + 0.00 cusr 0.00 csys = 0.94 CPU) - -Retrieving data -Time for select_simple_join (500): 2 wallclock secs ( 0.58 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.86 CPU) -Time for select_join (100): 4 wallclock secs ( 0.50 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.73 CPU) -Time for select_key_prefix_join (100): 13 wallclock secs ( 4.11 usr 2.03 sys + 0.00 cusr 0.00 csys = 6.14 CPU) -Time for select_distinct (800): 15 wallclock secs ( 1.57 usr 0.72 sys + 0.00 cusr 0.00 csys = 2.29 CPU) -Time for select_group (2800): 20 wallclock secs ( 1.51 usr 0.44 sys + 0.00 cusr 0.00 csys = 1.95 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 58 wallclock secs ( 8.87 usr 4.05 sys + 0.00 cusr 0.00 csys = 12.92 CPU) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/ATIS-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 2b0610da26ff971761e2f2daa05c5aaddf0e26fe..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:34:53 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 2 wallclock secs ( 0.44 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.65 CPU) - -Retrieving data -Time for select_simple_join (500): 2 wallclock secs ( 0.60 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.79 CPU) -Time for select_join (100): 1 wallclock secs ( 0.46 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.60 CPU) -Time for select_key_prefix_join (100): 10 wallclock secs ( 3.98 usr 1.52 sys + 0.00 cusr 0.00 csys = 5.50 CPU) -Time for select_distinct (800): 9 wallclock secs ( 1.59 usr 0.55 sys + 0.00 cusr 0.00 csys = 2.14 CPU) -Time for select_group (2800): 9 wallclock secs ( 1.34 usr 0.28 sys + 0.00 cusr 0.00 csys = 1.62 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 33 wallclock secs ( 8.41 usr 2.89 sys + 0.00 cusr 0.00 csys = 11.30 CPU) diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/ATIS-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index e0192d49a3daefa81f18afb8dde4c4d822951660..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:35:44 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 3 wallclock secs ( 0.52 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 1 wallclock secs ( 0.60 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (100): 2 wallclock secs ( 0.44 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix_join (100): 10 wallclock secs ( 3.58 usr 2.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 10 wallclock secs ( 1.60 usr 0.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 11 wallclock secs ( 1.44 usr 0.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 37 wallclock secs ( 8.20 usr 4.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-NT_4.0 b/sql-bench/Results/ATIS-mysql-NT_4.0 deleted file mode 100644 index 413a5e512bf875b6088c6ef7d554d698941e39c3..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-NT_4.0 +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 13:49:16 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 6 wallclock secs ( 0.81 usr 1.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 1.52 usr 0.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (100): 4 wallclock secs ( 1.41 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix_join (100): 18 wallclock secs (12.05 usr 4.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 17 wallclock secs ( 4.72 usr 1.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 21 wallclock secs ( 3.06 usr 1.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 69 wallclock secs (23.58 usr 10.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/ATIS-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index cdb07a4af155b5611cca9181c98361612a11fd6d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:11:24 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 11 wallclock secs ( 1.51 usr 1.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 8 wallclock secs ( 2.20 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 90 wallclock secs (17.84 usr 8.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 53 wallclock secs ( 6.14 usr 2.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2700): 45 wallclock secs ( 4.87 usr 1.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 207 wallclock secs (32.58 usr 14.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4m b/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4m deleted file mode 100644 index f64ec0c218c265e3e06e3b3dcc075e3ce8086c88..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 0:10:20 - -ATIS table test - -Creating tables -Time for create_table (28): 3 wallclock secs ( 0.03 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 30 wallclock secs ( 5.85 usr 4.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 21 wallclock secs ( 7.16 usr 3.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 137 wallclock secs (56.58 usr 27.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 127 wallclock secs (20.08 usr 8.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 140 wallclock secs (14.60 usr 5.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 1 wallclock secs ( 0.03 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 459 wallclock secs (104.37 usr 50.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4u b/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4u deleted file mode 100644 index c1aefa8eb83b689f42c998b99d4a66f72d91ca8c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 20:51:25 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 5 wallclock secs ( 0.67 usr 0.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 4 wallclock secs ( 1.19 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 26 wallclock secs ( 9.53 usr 7.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 27 wallclock secs ( 3.30 usr 2.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2700): 24 wallclock secs ( 2.16 usr 1.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 89 wallclock secs (16.85 usr 13.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql-SunOS_5.8_sun4u b/sql-bench/Results/ATIS-mysql-SunOS_5.8_sun4u deleted file mode 100644 index 38cb68a236bfbd3a6ef77d6e14059c247c64c8e5..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 1:07:36 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Inserting data -Time to insert (9768): 5 wallclock secs ( 0.75 usr 0.90 sys + 0.00 cusr 0.00 csys = 1.65 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 1.28 usr 0.98 sys + 0.00 cusr 0.00 csys = 2.26 CPU) -Time for select_join (200): 28 wallclock secs ( 9.99 usr 9.46 sys + 0.00 cusr 0.00 csys = 19.45 CPU) -Time for select_distinct (800): 27 wallclock secs ( 3.33 usr 3.09 sys + 0.00 cusr 0.00 csys = 6.42 CPU) -Time for select_group (2800): 25 wallclock secs ( 2.43 usr 1.64 sys + 0.00 cusr 0.00 csys = 4.07 CPU) - -Removing tables -Time to drop_table (28): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 90 wallclock secs (17.80 usr 16.07 sys + 0.00 cusr 0.00 csys = 33.87 CPU) diff --git a/sql-bench/Results/ATIS-mysql-win98 b/sql-bench/Results/ATIS-mysql-win98 deleted file mode 100644 index 1febfa34bcbd516bd4d8b57e88e2eda50c83a965..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql-win98 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 2:22:09 - -ATIS table test - -Creating tables -Time for create_table (28): 7 wallclock secs ( 6.93 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 12 wallclock secs (11.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 7 wallclock secs ( 7.47 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 51 wallclock secs (50.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 33 wallclock secs (33.34 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 33 wallclock secs (33.61 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 1 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 144 wallclock secs (143.53 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/ATIS-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 5c37e09f701ee945fc693e9b51d124aa4ed7d831..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:07:48 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 1.40 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 22 wallclock secs ( 9.94 usr 1.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (700): 15 wallclock secs ( 3.57 usr 0.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 41 wallclock secs (14.97 usr 2.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-mysql_odbc-win98 b/sql-bench/Results/ATIS-mysql_odbc-win98 deleted file mode 100644 index c154befe7e30e417547e4f4e90b02807ac1d3ae1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-mysql_odbc-win98 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 16:23:37 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.88 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 31 wallclock secs (30.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 13 wallclock secs (13.35 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (200): 142 wallclock secs (141.54 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 58 wallclock secs (57.84 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2700): 50 wallclock secs (50.26 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 295 wallclock secs (294.90 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/ATIS-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/ATIS-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 829dff6a0f440ff5ca75a3a1a1b0292160e09719..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 0:33:02 - -ATIS table test - -Creating tables -Time for create_table (28): 5 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 33 wallclock secs ( 7.31 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 23 wallclock secs ( 8.65 usr 2.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 204 wallclock secs (71.18 usr 19.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 63 wallclock secs (24.27 usr 6.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2300): 42 wallclock secs (12.18 usr 2.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 3 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 373 wallclock secs (123.71 usr 30.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/ATIS-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 7bf02092fecfae9540a49c457c6a0440ad72c594..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 8:05:46 - -ATIS table test - -Creating tables -Time for create_table (28): 4 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 22 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 46 wallclock secs ( 7.61 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 23 wallclock secs ( 0.07 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 20 wallclock secs ( 8.26 usr 1.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 188 wallclock secs (71.78 usr 18.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 56 wallclock secs (24.55 usr 5.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2300): 29 wallclock secs (12.06 usr 2.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 3 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 3 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 396 wallclock secs (124.50 usr 29.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/ATIS-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 67d12518f574bafcef4951a69dd8f8e6082cdce1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 18:59:52 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 23 wallclock secs ( 5.25 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 6 wallclock secs ( 1.02 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -96 queries in 48 loops of 100 loops took 606 seconds -Estimated time for select_join (200): 1262 wallclock secs ( 5.94 usr 0.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 139 wallclock secs ( 2.82 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2000): 89 wallclock secs ( 1.53 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Estimated total time: 1520 wallclock secs (16.64 usr 1.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/ATIS-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 748dd16a42e04f4af3fc8c8259c40dd6c5f2cc96..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:14:34 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) - -Inserting data -Time to insert (9768): 8 wallclock secs ( 2.78 usr 0.51 sys + 0.00 cusr 0.00 csys = 3.29 CPU) - -Retrieving data -Time for select_simple_join (500): 3 wallclock secs ( 0.73 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.83 CPU) -Time for select_join (100): 4 wallclock secs ( 0.67 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.76 CPU) -Time for select_key_prefix_join (100): 12 wallclock secs ( 4.43 usr 0.15 sys + 0.00 cusr 0.00 csys = 4.58 CPU) -Time for select_distinct (800): 22 wallclock secs ( 2.10 usr 0.26 sys + 0.00 cusr 0.00 csys = 2.36 CPU) -Time for select_group (2600): 55 wallclock secs ( 1.75 usr 0.06 sys + 0.00 cusr 0.00 csys = 1.81 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) -Total time: 104 wallclock secs (12.54 usr 1.17 sys + 0.00 cusr 0.00 csys = 13.71 CPU) diff --git a/sql-bench/Results/ATIS-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/ATIS-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 6e7d5530da4f369efdc986adea28da4a0f33a95c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,23 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:20:16 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 29 wallclock secs ( 5.56 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 44 wallclock secs ( 1.11 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 60 wallclock secs ( 6.07 usr 0.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 70 wallclock secs ( 3.23 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2000): 95 wallclock secs ( 1.88 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 300 wallclock secs (17.90 usr 1.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/ATIS-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/ATIS-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 628ddd427849c4ab88fd374e6ffe829d3f3dbf4d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,26 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 17:53:03 - -ATIS table test - -Creating tables -Time for create_table (28): 1 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (9768): 8 wallclock secs ( 2.90 usr 0.28 sys + 0.00 cusr 0.00 csys = 3.18 CPU) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data -Time for select_simple_join (500): 4 wallclock secs ( 0.71 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.89 CPU) -Time for select_join (100): 4 wallclock secs ( 0.59 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.69 CPU) -Time for select_key_prefix_join (100): 12 wallclock secs ( 4.47 usr 0.12 sys + 0.00 cusr 0.00 csys = 4.59 CPU) -Time for select_distinct (800): 23 wallclock secs ( 1.91 usr 0.34 sys + 0.00 cusr 0.00 csys = 2.25 CPU) -Time for select_group (2600): 51 wallclock secs ( 1.48 usr 0.12 sys + 0.00 cusr 0.00 csys = 1.60 CPU) - -Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 105 wallclock secs (12.13 usr 1.14 sys + 0.00 cusr 0.00 csys = 13.27 CPU) diff --git a/sql-bench/Results/ATIS-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/ATIS-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 8ba087218d1b1535e524468d7274bf03d7b272fb..0000000000000000000000000000000000000000 --- a/sql-bench/Results/ATIS-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 12:47:44 - -ATIS table test - -Creating tables -Time for create_table (28): 0 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (9768): 27 wallclock secs ( 8.34 usr 0.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data -Time for select_simple_join (500): 37 wallclock secs ( 3.65 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_join (200): 408 wallclock secs (28.07 usr 1.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_distinct (800): 169 wallclock secs (11.26 usr 0.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (2000): 59 wallclock secs ( 3.54 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Removing tables -Time to drop_table (28): 1 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 701 wallclock secs (54.93 usr 3.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/RUN-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/RUN-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 4dc95282073e64651bf66116565d12188b697d44..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1998-09-24 15:16:40 -Running tests on: Linux 2.0.35 i686 -Arguments: --small-tables -Comments: -Limits from: adabas,mysql -Server version: Adabas 10.01.00 - -ATIS: Total time: 445 secs (41.77 usr 50.26 sys = 92.03 cpu) -alter-table: Total time: 40 secs ( 0.76 usr 0.47 sys = 1.23 cpu) -big-tables: Total time: 89 secs ( 8.81 usr 10.98 sys = 19.79 cpu) -connect: Total time: 570 secs (65.81 usr 250.86 sys = 316.67 cpu) -create: Total time: 348 secs ( 2.35 usr 7.46 sys = 9.81 cpu) -insert: Estimated total time: 11695 secs ( 249.00 463.00 713.00) -select: Estimated total time: 3338 secs (87.31 usr 141.31 sys = 228.62 cpu) -wisconsin: Total time: 654 secs (34.14 usr 21.26 sys = 55.40 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 11 0.07 0.10 0.17 246 -alter_table_drop 8 0.01 0.08 0.09 123 -connect 164 29.40 100.88 130.28 10000 -connect+select 295 22.17 121.92 144.09 10000 -count 107 0.11 0.12 0.23 100 -count_on_key 760 28.47 56.52 84.99 50100 + -create+drop 126 0.25 2.57 2.82 1000 -create_index 1 0.00 0.00 0.00 8 -create_key+drop 97 0.27 2.86 3.13 1000 -create_table 48 1.48 0.63 2.11 1031 -delete_big 17 0.02 0.01 0.03 15 -delete_key 48 0.39 0.35 0.74 500 -drop_index 1 0.00 0.00 0.00 8 -drop_table 78 0.12 0.64 0.76 1028 -insert 1669 55.14 18.59 73.73 80768 -insert_duplicates 9 3.57 3.81 7.38 30000 -insert_key 241 8.58 2.07 10.65 10000 -insert_many_fields 54 0.73 1.52 2.25 2000 -min_max 40 0.09 0.09 0.18 60 -min_max_on_key 2421 46.26 76.81 123.06 73000 + -order_by 54 12.73 11.78 24.51 10 -order_by_key 48 13.45 11.16 24.61 10 -select 63 7.83 16.02 23.85 20000 -select_big 89 21.11 23.12 44.23 10080 -select_distinct 95 6.59 14.43 21.02 800 -select_group 180 4.37 8.47 12.84 3401 -select_join 74 22.10 21.09 43.19 200 -select_key 1646 16.74 27.42 44.15 20000 + -select_key_prefix 79 11.74 21.54 33.28 20000 -select_many_fields 35 8.08 9.45 17.53 2000 -select_range 5123 16.41 26.30 42.71 25410 ++ -select_range_prefix 1782 14.73 26.43 41.15 25000 + -select_simple_join 14 2.35 4.08 6.43 500 -update_key 51 0.32 0.40 0.72 500 -update_key_big 77 0.29 0.33 0.62 480 -update_of_key 17 0.10 0.16 0.26 256 -wisc_benchmark 64 15.03 14.19 29.22 114 -TOTALS 15686 371.10 625.94 997.01 399748 ++++++ diff --git a/sql-bench/Results/RUN-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/RUN-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index edd7aabce63e9c6f5421bad87b8effc1213fc51c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,41 +0,0 @@ -Benchmark DBD suite: 2.9 -Date of test: 2000-11-24 15:36:25 -Running tests on: Linux 2.2.14-my-SMP i686 -Arguments: --tcpip -Comments: -Limits from: frontbase,mysql -Server version: 2.1 - -ATIS: Estimated total time: 1461 wallclock secs ( 6.81 usr 4.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 1033 wallclock secs ( 1.13 usr 0.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 49 wallclock secs ( 2.66 usr 1.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 16 wallclock secs ( 3.38 usr 3.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Failed (output/create-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql) -insert: Failed (output/insert-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql) -select: Failed (output/select-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql) -wisconsin: Failed (output/wisconsin-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql) - -Of 8 tests, 4 tests didn't work -Tests with estimated time have a + at end of line -Tests with didn't return the correct result have a ? at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1018.00 0.71 0.41 0.00 992 -connect 4.00 0.87 0.74 0.00 1000 -connect+select_1_row 7.00 1.37 1.41 0.00 1000 -create_index 5.00 0.00 0.01 0.00 8 -create_table 1.00 0.03 0.02 0.00 28 -drop_index 0.00 0.00 0.01 0.00 8 -drop_table 7.00 0.01 0.02 0.00 28 -insert 33.00 3.61 2.85 0.00 9768 -insert_many_fields 37.00 0.69 0.74 0.00 2000 -select_1_row 2.00 0.37 0.28 0.00 1000 -select_2_rows 1.00 0.41 0.35 0.00 1000 -select_column+column 2.00 0.35 0.31 0.00 1000 -select_distinct 936.00 1.20 0.31 0.00 800 + -select_group 359.00 1.35 0.82 0.00 2200 ? -select_join 97.00 0.25 0.08 0.00 200 ? -select_many_fields 11.00 1.97 0.34 0.00 1000 -select_simple_join 28.00 0.35 0.17 0.00 500 ? -TOTALS 2548.00 13.54 8.87 0.00 22532 +??? diff --git a/sql-bench/Results/RUN-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/RUN-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index b561d1295daa18256593f12e5a7bf3330315e6b2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,55 +0,0 @@ -Benchmark DBD suite: 2.4 -Date of test: 1999-09-23 8:59:17 -Running tests on: Linux 2.2.10 i686 -Arguments: --force -Comments: -Limits from: msql,mysql -Server version: mSQL server version 2.0.10 - -ATIS: Total time: 250 wallclock secs (23.58 usr 5.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 145 wallclock secs (62.58 usr 8.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 85 wallclock secs (47.36 usr 7.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 14 wallclock secs ( 2.44 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 131515 wallclock secs (800.98 usr 112.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 76 wallclock secs ( 5.15 usr 0.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 23 wallclock secs ( 8.84 usr 1.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -connect 19 14.02 1.84 0.00 10000 -connect+select_1_row 24 15.66 2.66 0.00 10000 -create+drop 2 0.78 0.05 0.00 1000 -create_key+drop 2 0.72 0.05 0.00 1000 -create_table 9 0.63 0.10 0.00 1031 -delete_big 11 0.01 0.00 0.00 13 -delete_big_many_keys 676 0.00 0.00 0.00 2 -delete_key 1 0.05 0.00 0.00 500 -drop_table 1 0.11 0.02 0.00 1028 -insert 126 44.02 6.90 0.00 350768 -insert_duplicates 20 7.44 1.70 0.00 300000 -insert_key 40 12.67 2.51 0.00 100000 -insert_many_fields 37 7.94 0.38 0.00 20000 -order_by 137 62.94 14.03 0.00 10 -order_by_key 138 62.91 14.50 0.00 10 -select 0 0.23 0.06 0.00 1000 -select_1_row 4 1.60 0.51 0.00 10000 -select_2_rows 4 1.72 0.47 0.00 10000 -select_big 142 77.86 16.66 0.00 10080 -select_diff_key 143 0.52 0.04 0.00 500 -select_distinct 22 5.65 1.10 0.00 700 -select_join 219 14.80 3.71 0.00 200 -select_key 244 177.74 12.56 0.00 200000 -select_key_prefix 39617 190.51 18.46 0.00 200000 + -select_many_fields 108 54.63 7.69 0.00 20000 -select_range 15708 21.13 1.86 0.00 25400 ++ -select_range_prefix 15762 16.87 2.30 0.00 25000 ++ -select_simple_join 5 1.88 0.33 0.00 500 -update_big 73 0.00 0.00 0.00 500 -update_of_key 854 104.25 15.53 0.00 600255 -update_with_key 57942 46.67 8.71 0.00 100000 -wisc_benchmark 9 4.81 0.92 0.00 74 -TOTALS 132099 950.77 135.65 0.00 1999571 +++++ diff --git a/sql-bench/Results/RUN-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/RUN-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index ddbe2c4313b6d1dd24ba85c9c06a4fcf6309c06f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,71 +0,0 @@ -Benchmark DBD suite: 2.4 -Date of test: 1999-09-27 15:10:29 -Running tests on: HP-UX B.10.20 9000/778 -Arguments: --die-on-errors -Comments: -Limits from: -Server version: MySQL 3.23.4 alpha - -ATIS: Total time: 190 wallclock secs (33.29 usr 19.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 1664 wallclock secs ( 0.84 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 200 wallclock secs (30.97 usr 48.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 238 wallclock secs (94.79 usr 32.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 29 wallclock secs ( 2.79 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 16527 wallclock secs (874.45 usr 374.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 3166 wallclock secs (151.82 usr 39.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 62 wallclock secs (10.85 usr 5.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 925 0.47 0.10 0.00 992 -alter_table_drop 708 0.21 0.05 0.00 496 -connect 35 18.98 4.56 0.00 10000 -connect+select_1_row 49 21.11 6.36 0.00 10000 -connect+select_simpl 44 20.27 5.93 0.00 10000 -count 321 0.11 0.01 0.00 100 -count_on_key 1745 50.62 8.11 0.00 50100 + -create+drop 7 0.63 0.14 0.00 1000 -create_index 15 0.00 0.00 0.00 8 -create_key+drop 9 1.34 0.15 0.00 1000 -create_table 10 0.54 0.09 0.00 1031 -delete_big 47 0.00 0.00 0.00 13 -delete_big_many_keys 302 0.00 0.00 0.00 2 -delete_key 1 0.10 0.04 0.00 500 -drop_index 15 0.01 0.00 0.00 8 -drop_table 1 0.11 0.06 0.00 1028 -insert 385 51.74 23.59 0.00 350768 -insert_duplicates 50 10.92 5.91 0.00 300000 -insert_key 419 35.34 7.55 0.00 100000 -insert_many_fields 46 1.25 0.28 0.00 2000 -min_max 111 0.07 0.01 0.00 60 -min_max_on_key 644 67.10 11.51 0.00 73000 + -multiple_value_inser 22 3.75 0.02 0.00 100000 -order_by 359 81.85 62.84 0.00 10 -order_by_key 265 81.83 80.00 0.00 10 -outer_join 414 0.01 0.00 0.00 10 -outer_join_found 396 0.01 0.01 0.00 10 -outer_join_not_found 605 0.04 0.00 0.00 500 + -outer_join_on_key 165 0.02 0.00 0.00 10 -select_1_row 9 1.48 1.45 0.00 10000 -select_2_rows 10 1.61 1.63 0.00 10000 -select_big 357 112.70 94.48 0.00 10080 -select_diff_key 20 0.01 0.00 0.00 10 + -select_distinct 52 6.58 3.30 0.00 800 -select_group 251 5.65 1.75 0.00 3811 -select_join 66 17.47 12.46 0.00 200 -select_key 668 218.05 41.63 0.00 200000 + -select_key_prefix 669 217.48 41.21 0.00 200000 + -select_many_fields 153 29.70 48.64 0.00 2000 -select_range 1011 55.72 23.90 0.00 25420 + -select_range_prefix 91 21.34 4.68 0.00 25010 -select_simple 6 1.14 1.14 0.00 10000 -select_simple_join 8 2.34 1.03 0.00 500 -update_big 148 0.00 0.00 0.00 500 -update_of_key 170 0.15 0.06 0.00 756 -update_of_key_big 85 0.09 0.04 0.00 501 -update_with_key 681 52.02 22.51 0.00 100000 -wisc_benchmark 24 6.96 2.92 0.00 114 -TOTALS 12594 1198.92 520.15 0.00 1612358 +++++++ diff --git a/sql-bench/Results/RUN-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/RUN-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index c2c9b9ba5ee1eb1b2c86c388bac96a90c20fd1c0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suit: 2.0 -Date of test: 1998-10-20 6:54:10 -Running tests on: Linux 2.0.35 i686 -Arguments: --small-tables -Comments: pentiumpro 400mz x2, 256M, SCSI, pgcc compiled, key_cache=1M -Limits from: adabas,mysql -Server version: MySQL 3.22.9 beta - -ATIS: Total time: 75 secs ( 6.54 usr 21.70 sys = 28.24 cpu) -alter-table: Total time: 39 secs ( 0.08 usr 0.33 sys = 0.41 cpu) -big-tables: Total time: 17 secs ( 3.29 usr 6.92 sys = 10.21 cpu) -connect: Total time: 134 secs (17.63 usr 95.64 sys = 113.27 cpu) -create: Total time: 19 secs ( 0.75 usr 1.48 sys = 2.23 cpu) -insert: Total time: 229 secs (30.40 usr 67.93 sys = 98.33 cpu) -select: Estimated total time: 1075 secs (23.53 usr 69.27 sys = 92.80 cpu) -wisconsin: Total time: 30 secs ( 3.27 usr 5.49 sys = 8.76 cpu) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 21 0.03 0.08 0.11 246 -alter_table_drop 15 0.02 0.11 0.13 123 -connect 53 6.27 42.43 48.70 10000 -connect+select 59 8.21 42.61 50.82 10000 -count 7 0.01 0.06 0.07 100 -count_on_key 816 10.62 28.10 38.72 50100 + -create+drop 3 0.24 0.33 0.57 1000 -create_index 2 0.00 0.00 0.00 8 -create_key+drop 3 0.11 0.69 0.80 1000 -create_table 7 0.32 0.13 0.45 1031 -delete_big 11 0.02 0.01 0.03 15 -delete_key 0 0.00 0.04 0.04 500 -drop_index 1 0.00 0.00 0.00 8 -drop_table 0 0.07 0.12 0.19 1028 -insert 46 4.94 7.46 12.40 80768 -insert_duplicates 4 0.00 1.39 1.39 30000 -insert_key 15 0.72 1.30 2.02 10000 -insert_many_fields 4 0.43 0.25 0.68 2000 -min_max 4 0.00 0.08 0.08 60 -min_max_on_key 233 11.76 38.73 50.49 73000 -order_by 10 2.24 6.64 8.88 10 -order_by_key 6 1.44 4.75 6.19 10 -select 12 0.79 5.75 6.54 20000 -select_big 18 4.43 9.37 13.80 10080 -select_distinct 20 0.92 3.98 4.90 800 -select_group 24 0.85 2.84 3.69 3401 -select_join 34 3.85 12.82 16.67 200 -select_key 25 5.64 11.36 17.00 20000 -select_key_prefix 27 6.22 11.03 17.25 20000 -select_many_fields 13 2.84 6.67 9.51 2000 -select_range 60 5.59 13.95 19.54 25420 -select_range_prefix 40 4.40 11.13 15.53 25010 -select_simple_join 3 0.50 1.29 1.79 500 -update_key 1 0.05 0.07 0.12 500 -update_key_big 4 0.03 0.04 0.07 480 -update_of_key 7 0.02 0.04 0.06 256 -wisc_benchmark 9 1.84 2.92 4.76 114 -TOTALS 1617 85.42 268.57 353.99 399768 + diff --git a/sql-bench/Results/RUN-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/RUN-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index fed62d5cefb316c0d3ebdc83905124cb4264f1d0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,58 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-07 22:58:12 -Running tests on: Linux 2.0.36 i686 -Arguments: --force -Comments: -Limits from: mysql,pg,solid -Server version: MySQL 3.22.18 - -ATIS: Total time: 49 wallclock secs (10.38 usr 4.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 23 wallclock secs ( 0.14 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 15 wallclock secs ( 4.57 usr 2.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 53 wallclock secs (25.85 usr 5.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 15 wallclock secs ( 1.48 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Total time: 1389 wallclock secs (376.47 usr 81.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Total time: 630 wallclock secs (42.58 usr 5.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 20 wallclock secs ( 4.61 usr 1.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 21 0.08 0.01 0.00 293 -connect 15 8.66 1.63 0.00 10000 -connect+select 19 9.61 2.34 0.00 10000 -count 59 0.08 0.01 0.00 100 -count_on_key 640 25.56 3.32 0.00 50100 -create+drop 3 0.39 0.08 0.00 1000 -create_index 1 0.00 0.00 0.00 7 -create_key+drop 2 0.55 0.02 0.00 1000 -create_table 6 0.31 0.05 0.00 1031 -delete_big 67 0.01 0.00 0.00 15 -delete_key 10 0.11 0.02 0.00 500 -drop_index 1 0.00 0.00 0.00 7 -drop_table 0 0.12 0.05 0.00 1028 -insert 162 41.63 9.65 0.00 350768 -insert_duplicates 18 5.06 2.17 0.00 300000 -insert_key 165 12.53 3.21 0.00 100000 -insert_many_fields 4 0.55 0.10 0.00 2000 -min_max 27 0.02 0.00 0.00 60 -min_max_on_key 32 15.90 1.97 0.00 73000 -order_by 73 23.18 12.42 0.00 10 -order_by_key 50 23.37 12.37 0.00 10 -select 8 1.75 0.95 0.00 20000 -select_big 61 29.19 12.82 0.00 10080 -select_distinct 14 2.23 0.74 0.00 800 -select_group 41 1.57 0.25 0.00 3101 -select_join 22 4.87 2.75 0.00 200 -select_key 230 115.25 13.94 0.00 200000 -select_key_prefix 242 115.60 13.94 0.00 200000 -select_many_fields 11 4.02 2.48 0.00 2000 -select_range 29 10.70 1.56 0.00 25420 -select_range_prefix 35 10.03 1.41 0.00 25010 -select_simple_join 2 0.91 0.24 0.00 500 -update_key 4 0.07 0.02 0.00 500 -update_key_big 27 0.06 0.01 0.00 501 -update_of_key 83 0.02 0.00 0.00 256 -wisc_benchmark 6 1.99 0.67 0.00 114 -TOTALS 2190 465.98 101.20 0.00 1389411 diff --git a/sql-bench/Results/RUN-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/RUN-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index eb86300dcbe4c1dbf8fbf9c3c008d03271bf631b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,55 +0,0 @@ -Benchmark DBD suite: 2.4 -Date of test: 1999-09-24 9:48:18 -Running tests on: Linux 2.2.10 i686 -Arguments: --force -Comments: -Limits from: msql,mysql -Server version: MySQL 3.23.3 alpha - -ATIS: Total time: 45 wallclock secs (16.16 usr 2.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 63 wallclock secs (32.36 usr 5.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 83 wallclock secs (43.74 usr 9.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 14 wallclock secs ( 1.89 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 3485 wallclock secs (788.07 usr 99.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 18 wallclock secs ( 5.78 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 20 wallclock secs ( 6.95 usr 1.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -connect 23 13.79 3.43 0.00 10000 -connect+select_1_row 27 14.93 4.05 0.00 10000 -create+drop 3 0.46 0.03 0.00 1000 -create_key+drop 3 0.54 0.02 0.00 1000 -create_table 4 0.47 0.05 0.00 1031 -delete_big 20 0.00 0.00 0.00 13 -delete_big_many_keys 35 0.00 0.00 0.00 2 -delete_key 1 0.16 0.01 0.00 500 -drop_table 2 0.16 0.03 0.00 1028 -insert 171 53.22 8.79 0.00 350768 -insert_duplicates 18 6.67 2.24 0.00 300000 -insert_key 80 15.22 2.82 0.00 100000 -insert_many_fields 19 7.17 0.61 0.00 20000 -order_by 90 46.72 8.08 0.00 10 -order_by_key 69 47.13 7.95 0.00 10 -select 2 0.27 0.03 0.00 1000 -select_1_row 3 1.07 0.37 0.00 10000 -select_2_rows 4 1.16 0.50 0.00 10000 -select_big 95 59.90 9.19 0.00 10080 -select_diff_key 305 0.59 0.01 0.00 500 -select_distinct 15 3.62 0.44 0.00 700 -select_join 23 9.83 1.84 0.00 200 -select_key 402 154.50 10.45 0.00 200000 -select_key_prefix 404 172.53 12.29 0.00 200000 -select_many_fields 44 25.18 5.15 0.00 20000 -select_range 50 18.23 1.91 0.00 25400 -select_range_prefix 41 14.77 1.16 0.00 25000 -select_simple_join 3 1.30 0.25 0.00 500 -update_big 50 0.00 0.01 0.00 500 -update_of_key 1336 160.83 25.83 0.00 600256 + -update_with_key 381 62.03 12.20 0.00 100000 -wisc_benchmark 4 2.40 0.42 0.00 74 -TOTALS 3727 894.85 120.16 0.00 1999572 + diff --git a/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index fe7dd396f301c22ba00c227f3c85561f9ea46046..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,104 +0,0 @@ -Benchmark DBD suite: 2.13 -Date of test: 2002-09-08 10:26:21 -Running tests on: Linux 2.2.16-SMP alpha -Arguments: -Comments: Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; cxx 6.3 + ccc 6.2.9 -Limits from: -Server version: MySQL 3.23.39 - -ATIS: Total time: 39 wallclock secs ( 8.05 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 345 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 38 wallclock secs ( 7.19 usr 9.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 76 wallclock secs (34.04 usr 17.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 225 wallclock secs (10.03 usr 4.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Total time: 2279 wallclock secs (634.62 usr 299.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1360 wallclock secs (65.68 usr 27.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 18 wallclock secs ( 3.78 usr 3.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 187.00 0.18 0.06 0.00 992 -alter_table_drop 150.00 0.05 0.05 0.00 496 -connect 14.00 8.11 2.28 0.00 10000 -connect+select_1_row 17.00 8.45 3.08 0.00 10000 -connect+select_simple 16.00 8.44 2.99 0.00 10000 -count 50.00 0.04 0.01 0.00 100 -count_distinct 51.00 0.44 0.11 0.00 1000 -count_distinct_2 49.00 0.41 0.14 0.00 1000 -count_distinct_big 137.00 6.09 6.97 0.00 120 -count_distinct_group 75.00 0.97 0.60 0.00 1000 -count_distinct_group_on_key 47.00 0.45 0.14 0.00 1000 -count_distinct_group_on_key_parts 75.00 0.98 0.61 0.00 1000 -count_distinct_key_prefix 41.00 0.42 0.13 0.00 1000 -count_group_on_key_parts 38.00 0.89 0.59 0.00 1000 -count_on_key 386.00 17.16 4.60 0.00 50100 -create+drop 12.00 2.44 1.26 0.00 10000 -create_MANY_tables 183.00 1.96 0.78 0.00 10000 -create_index 4.00 0.00 0.00 0.00 8 -create_key+drop 17.00 4.03 1.40 0.00 10000 -create_table 0.00 0.00 0.01 0.00 31 -delete_all 11.00 0.00 0.00 0.00 12 -delete_all_many_keys 52.00 0.02 0.01 0.00 1 -delete_big 1.00 0.00 0.00 0.00 1 -delete_big_many_keys 52.00 0.01 0.01 0.00 128 -delete_key 4.00 0.59 0.58 0.00 10000 -drop_index 4.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.01 0.00 28 -drop_table_when_MANY_tables 6.00 0.61 0.57 0.00 10000 -insert 131.00 23.35 22.54 0.00 350768 -insert_duplicates 39.00 6.17 6.65 0.00 100000 -insert_key 95.00 8.00 5.91 0.00 100000 -insert_many_fields 14.00 0.34 0.13 0.00 2000 -insert_select_1_key 5.00 0.00 0.00 0.00 1 -insert_select_2_keys 7.00 0.00 0.00 0.00 1 -min_max 22.00 0.02 0.01 0.00 60 -min_max_on_key 164.00 27.09 7.47 0.00 85000 -multiple_value_insert 8.00 1.89 0.06 0.00 100000 -order_by_big 47.00 17.25 20.19 0.00 10 -order_by_big_key 32.00 18.66 13.81 0.00 10 -order_by_big_key2 31.00 17.10 13.60 0.00 10 -order_by_big_key_desc 33.00 18.68 13.83 0.00 10 -order_by_big_key_diff 45.00 17.28 20.09 0.00 10 -order_by_big_key_prefix 30.00 16.96 13.61 0.00 10 -order_by_key2_diff 5.00 1.58 1.19 0.00 500 -order_by_key_prefix 2.00 0.94 0.59 0.00 500 -order_by_range 5.00 0.92 0.60 0.00 500 -outer_join 63.00 0.01 0.00 0.00 10 -outer_join_found 57.00 0.00 0.00 0.00 10 -outer_join_not_found 38.00 0.00 0.00 0.00 500 -outer_join_on_key 41.00 0.01 0.00 0.00 10 -select_1_row 3.00 0.28 0.85 0.00 10000 -select_2_rows 3.00 0.37 0.91 0.00 10000 -select_big 31.00 17.13 13.64 0.00 80 -select_big_str 19.00 7.79 6.10 0.00 10000 -select_column+column 3.00 0.31 0.71 0.00 10000 -select_diff_key 151.00 0.24 0.05 0.00 500 -select_distinct 11.00 1.54 0.97 0.00 800 -select_group 53.00 1.53 0.65 0.00 2911 -select_group_when_MANY_tables 7.00 0.99 0.95 0.00 10000 -select_join 2.00 0.48 0.33 0.00 100 -select_key 136.00 72.34 21.48 0.00 200000 -select_key2 140.00 71.17 20.98 0.00 200000 -select_key2_return_key 134.00 69.60 18.79 0.00 200000 -select_key2_return_prim 138.00 70.28 19.14 0.00 200000 -select_key_prefix 141.00 71.11 21.99 0.00 200000 -select_key_prefix_join 10.00 3.45 2.53 0.00 100 -select_key_return_key 132.00 70.93 19.96 0.00 200000 -select_many_fields 24.00 6.84 9.41 0.00 2000 -select_query_cache 82.00 3.53 0.98 0.00 10000 -select_query_cache2 84.00 3.50 1.01 0.00 10000 -select_range 230.00 7.50 5.11 0.00 410 -select_range_key2 19.00 6.21 2.20 0.00 25010 -select_range_prefix 19.00 6.24 2.16 0.00 25010 -select_simple 1.00 0.29 0.81 0.00 10000 -select_simple_join 2.00 0.58 0.37 0.00 500 -update_big 28.00 0.00 0.00 0.00 10 -update_of_key 24.00 2.35 2.65 0.00 50000 -update_of_key_big 21.00 0.05 0.03 0.00 501 -update_of_primary_key_many_keys 22.00 0.02 0.01 0.00 256 -update_with_key 129.00 20.61 19.68 0.00 300000 -update_with_key_prefix 37.00 5.70 5.82 0.00 100000 -wisc_benchmark 3.00 1.61 0.89 0.00 114 -TOTALS 4432.00 763.56 368.43 0.00 2667247 diff --git a/sql-bench/Results/RUN-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/RUN-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 0a6bb635a0e6536e3a3fca023e1f0b5af4fc8b4c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-02-27 21:10:25 -Running tests on: Linux 2.2.1 i686 -Arguments: --small-tables -Comments: pentiumpro 400mz x2, 256M, SCSI, gcc 2.9 compiled, key_buffer=16M -Limits from: adabas,mysql -Server version: MySQL 3.22.18 - -ATIS: Total time: 60 wallclock secs (12.57 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 52 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 14 wallclock secs ( 4.45 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 82 wallclock secs (37.13 usr 26.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 8 wallclock secs ( 1.54 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Total time: 190 wallclock secs (58.47 usr 13.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 870 wallclock secs (63.67 usr 9.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 20 wallclock secs ( 4.66 usr 1.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 28 0.08 0.01 0.00 246 -alter_table_drop 20 0.06 0.00 0.00 123 -connect 31 15.46 11.47 0.00 10000 -connect+select 35 15.54 13.17 0.00 10000 -count 6 0.07 0.00 0.00 100 -count_on_key 666 26.25 3.49 0.00 50100 + -create+drop 1 0.34 0.08 0.00 1000 -create_index 1 0.00 0.00 0.00 8 -create_key+drop 2 0.66 0.04 0.00 1000 -create_table 3 0.27 0.04 0.00 1031 -delete_big 9 0.00 0.01 0.00 15 -delete_key 0 0.05 0.01 0.00 500 -drop_index 3 0.00 0.00 0.00 8 -drop_table 1 0.11 0.01 0.00 1028 -insert 34 7.31 2.56 0.00 80768 -insert_duplicates 2 0.66 0.33 0.00 30000 -insert_key 12 1.48 0.37 0.00 10000 -insert_many_fields 4 0.48 0.08 0.00 2000 -min_max 3 0.03 0.00 0.00 60 -min_max_on_key 198 35.49 4.72 0.00 73000 -order_by 6 2.90 2.06 0.00 10 -order_by_key 5 2.85 1.53 0.00 10 -select 7 1.75 1.39 0.00 20000 -select_big 16 7.44 2.22 0.00 10080 -select_distinct 17 2.78 0.90 0.00 800 -select_group 15 2.30 0.51 0.00 3401 -select_join 27 5.95 3.49 0.00 200 -select_key 21 10.95 1.39 0.00 20000 -select_key_prefix 23 11.28 1.58 0.00 20000 -select_many_fields 10 3.96 2.45 0.00 2000 -select_range 36 12.14 2.53 0.00 25420 -select_range_prefix 35 10.36 1.69 0.00 25010 -select_simple_join 2 0.96 0.24 0.00 500 -update_key 1 0.04 0.02 0.00 500 -update_key_big 3 0.08 0.00 0.00 480 -update_of_key 6 0.03 0.01 0.00 256 -wisc_benchmark 7 2.45 0.96 0.00 114 -TOTALS 1296 182.56 59.36 0.00 399768 + diff --git a/sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index e404880ba457b6ce9c208341c98556d12edad0fc..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,103 +0,0 @@ -Benchmark DBD suite: 2.12 -Date of test: 2001-04-13 3:48:03 -Running tests on: Linux 2.4.0-64GB-SMP i686 -Arguments: -Comments: Intel Xeon, 2x550 Mhz, 512M, key_buffer=16M -Limits from: -Server version: MySQL 3.23.37 - -ATIS: Total time: 58 wallclock secs ( 8.87 usr 4.05 sys + 0.00 cusr 0.00 csys = 12.92 CPU) -alter-table: Total time: 471 wallclock secs ( 0.16 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.27 CPU) -big-tables: Total time: 33 wallclock secs ( 9.47 usr 7.95 sys + 0.00 cusr 0.00 csys = 17.42 CPU) -connect: Total time: 90 wallclock secs (35.94 usr 18.84 sys + 0.00 cusr 0.00 csys = 54.78 CPU) -create: Total time: 154 wallclock secs ( 9.67 usr 5.83 sys + 0.00 cusr 0.00 csys = 15.50 CPU) -insert: Total time: 2773 wallclock secs (682.10 usr 184.31 sys + 0.00 cusr 0.00 csys = 866.41 CPU) -select: Total time: 1999 wallclock secs (72.84 usr 16.51 sys + 0.00 cusr 0.00 csys = 89.35 CPU) -wisconsin: Total time: 19 wallclock secs ( 3.95 usr 1.81 sys + 0.00 cusr 0.00 csys = 5.76 CPU) - -All 8 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 261.00 0.09 0.06 0.15 992 -alter_table_drop 199.00 0.02 0.03 0.05 496 -connect 17.00 7.03 3.40 10.43 10000 -connect+select_1_row 16.00 7.76 4.01 11.77 10000 -connect+select_simple 15.00 6.96 3.91 10.87 10000 -count 45.00 0.02 0.01 0.03 100 -count_distinct 65.00 0.34 0.05 0.39 1000 -count_distinct_2 65.00 0.36 0.12 0.48 1000 -count_distinct_big 162.00 7.60 3.30 10.90 120 -count_distinct_group 190.00 1.21 0.35 1.56 1000 -count_distinct_group_on_key 64.00 0.44 0.07 0.51 1000 -count_distinct_group_on_key_parts 191.00 1.32 0.34 1.66 1000 -count_distinct_key_prefix 56.00 0.40 0.05 0.45 1000 -count_group_on_key_parts 60.00 1.17 0.36 1.53 1000 -count_on_key 595.00 17.92 2.91 20.83 50100 -create+drop 33.00 2.64 0.72 3.36 10000 -create_MANY_tables 43.00 2.34 2.21 4.55 10000 -create_index 5.00 0.00 0.00 0.00 8 -create_key+drop 39.00 3.05 0.72 3.77 10000 -create_table 1.00 0.00 0.00 0.00 31 -delete_all 18.00 0.00 0.00 0.00 12 -delete_all_many_keys 77.00 0.01 0.00 0.01 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 77.00 0.01 0.00 0.01 128 -delete_key 4.00 0.63 0.36 0.99 10000 -drop_index 5.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 19.00 0.87 0.84 1.71 10000 -insert 144.00 23.75 13.55 37.30 350768 -insert_duplicates 31.00 5.12 4.16 9.28 100000 -insert_key 138.00 10.42 6.05 16.47 100000 -insert_many_fields 10.00 0.45 0.18 0.63 2000 -insert_select_1_key 7.00 0.00 0.00 0.00 1 -insert_select_2_keys 10.00 0.00 0.00 0.00 1 -min_max 33.00 0.02 0.01 0.03 60 -min_max_on_key 237.00 28.39 4.10 32.49 85000 -multiple_value_insert 10.00 1.86 0.05 1.91 100000 -order_by_big 77.00 21.83 9.99 31.82 10 -order_by_big_key 35.00 23.27 10.06 33.33 10 -order_by_big_key2 32.00 21.65 10.20 31.85 10 -order_by_big_key_desc 37.00 23.23 10.33 33.56 10 -order_by_big_key_diff 73.00 21.66 10.13 31.79 10 -order_by_big_key_prefix 33.00 21.44 10.24 31.68 10 -order_by_key2_diff 9.00 1.45 0.89 2.34 500 -order_by_key_prefix 5.00 1.17 0.47 1.64 500 -order_by_range 8.00 1.39 0.40 1.79 500 -outer_join 112.00 0.00 0.00 0.00 10 -outer_join_found 110.00 0.00 0.00 0.00 10 -outer_join_not_found 60.00 0.00 0.01 0.01 500 -outer_join_on_key 58.00 0.01 0.00 0.01 10 -select_1_row 2.00 0.51 0.65 1.16 10000 -select_2_rows 4.00 0.38 0.40 0.78 10000 -select_big 64.00 34.10 15.48 49.58 10080 -select_column+column 3.00 0.60 0.52 1.12 10000 -select_diff_key 202.00 0.26 0.06 0.32 500 -select_distinct 15.00 1.57 0.72 2.29 800 -select_group 80.00 1.55 0.45 2.00 2911 -select_group_when_MANY_tables 20.00 0.77 1.34 2.11 10000 -select_join 4.00 0.50 0.23 0.73 100 -select_key 131.00 69.07 11.59 80.66 200000 -select_key2 140.00 87.29 11.66 98.95 200000 -select_key2_return_key 133.00 65.03 10.13 75.16 200000 -select_key2_return_prim 133.00 75.39 11.05 86.44 200000 -select_key_prefix 141.00 80.77 13.11 93.88 200000 -select_key_prefix_join 13.00 4.11 2.03 6.14 100 -select_key_return_key 125.00 62.45 10.60 73.05 200000 -select_many_fields 22.00 9.01 7.77 16.78 2000 -select_query_cache 131.00 3.58 0.61 4.19 10000 -select_query_cache2 131.00 3.78 0.68 4.46 10000 -select_range 206.00 8.92 3.47 12.39 410 -select_range_key2 21.00 5.77 1.51 7.28 25010 -select_range_prefix 23.00 6.49 1.10 7.59 25010 -select_simple 2.00 0.53 0.54 1.07 10000 -select_simple_join 2.00 0.58 0.28 0.86 500 -update_big 65.00 0.00 0.00 0.00 10 -update_of_key 25.00 2.74 1.81 4.55 50000 -update_of_key_big 36.00 0.01 0.07 0.08 501 -update_of_primary_key_many_keys 43.00 0.05 0.02 0.07 256 -update_with_key 119.00 19.18 12.34 31.52 300000 -update_with_key_prefix 36.00 6.37 3.90 10.27 100000 -wisc_benchmark 5.00 2.23 0.61 2.84 114 -TOTALS 5668.00 822.89 239.37 1062.26 2667247 diff --git a/sql-bench/Results/RUN-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/RUN-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 6885ceddcf16d3e6ba3f6f09d4ef55ff074353b1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,109 +0,0 @@ -Benchmark DBD suite: 2.14 -Date of test: 2002-05-20 17:48:45 -Running tests on: Linux 2.4.16-64GB-SMP i686 -Arguments: -Comments: Intel Xeon 2M cache, 4x700 Mhz, 2G, key_buffer=16M, gcc 3.1 -Limits from: -Server version: MySQL 4.0.2 alpha -Optimization: None -Hardware: - -alter-table: Total time: 241 wallclock secs ( 0.17 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.24 CPU) -ATIS: Total time: 33 wallclock secs ( 8.41 usr 2.89 sys + 0.00 cusr 0.00 csys = 11.30 CPU) -big-tables: Total time: 27 wallclock secs ( 9.38 usr 5.17 sys + 0.00 cusr 0.00 csys = 14.55 CPU) -connect: Total time: 156 wallclock secs (71.06 usr 31.02 sys + 0.00 cusr 0.00 csys = 102.08 CPU) -create: Total time: 90 wallclock secs ( 5.77 usr 1.91 sys + 0.00 cusr 0.00 csys = 7.68 CPU) -insert: Total time: 1730 wallclock secs (523.67 usr 128.19 sys + 0.00 cusr 0.00 csys = 651.86 CPU) -select: Total time: 1106 wallclock secs (52.54 usr 11.75 sys + 0.00 cusr 0.00 csys = 64.29 CPU) -transactions: Test skipped because the database doesn't support transactions -wisconsin: Total time: 12 wallclock secs ( 3.07 usr 1.20 sys + 0.00 cusr 0.00 csys = 4.27 CPU) - -All 9 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 134.00 0.12 0.03 0.15 992 -alter_table_drop 102.00 0.04 0.02 0.06 496 -connect 7.00 4.50 1.62 6.12 10000 -connect+select_1_row 10.00 5.09 2.31 7.40 10000 -connect+select_simple 9.00 5.19 2.02 7.21 10000 -count 33.00 0.04 0.00 0.04 100 -count_distinct 34.00 0.24 0.05 0.29 1000 -count_distinct_2 38.00 0.25 0.07 0.32 1000 -count_distinct_big 50.00 7.15 2.75 9.90 120 -count_distinct_group 47.00 1.00 0.27 1.27 1000 -count_distinct_group_on_key 43.00 0.26 0.05 0.31 1000 -count_distinct_group_on_key_parts 47.00 0.98 0.29 1.27 1000 -count_distinct_key_prefix 28.00 0.29 0.03 0.32 1000 -count_group_on_key_parts 43.00 0.96 0.31 1.27 1000 -count_on_key 416.00 11.73 1.70 13.43 50100 -create+drop 17.00 1.49 0.50 1.99 10000 -create_MANY_tables 25.00 1.12 0.28 1.40 10000 -create_index 3.00 0.00 0.00 0.00 8 -create_key+drop 23.00 1.84 0.62 2.46 10000 -create_table 0.00 0.00 0.00 0.00 31 -delete_all_many_keys 51.00 0.02 0.00 0.02 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 51.00 0.02 0.00 0.02 128 -delete_key 2.00 0.39 0.26 0.65 10000 -delete_range 11.00 0.01 0.00 0.01 12 -drop_index 2.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 11.00 0.34 0.17 0.51 10000 -insert 78.00 14.11 7.05 21.16 350768 -insert_duplicates 16.00 2.42 2.15 4.57 100000 -insert_key 86.00 7.22 2.27 9.49 100000 -insert_many_fields 7.00 0.19 0.07 0.26 2000 -insert_select_1_key 5.00 0.00 0.00 0.00 1 -insert_select_2_keys 6.00 0.00 0.00 0.00 1 -min_max 23.00 0.02 0.00 0.02 60 -min_max_on_key 159.00 19.21 2.78 21.99 85000 -multiple_value_insert 5.00 1.29 0.00 1.29 100000 -order_by_big 40.00 21.73 8.15 29.88 10 -order_by_big_key 33.00 23.12 7.93 31.05 10 -order_by_big_key2 31.00 21.98 7.84 29.82 10 -order_by_big_key_desc 32.00 23.13 8.16 31.29 10 -order_by_big_key_diff 39.00 22.07 7.71 29.78 10 -order_by_big_key_prefix 31.00 21.76 8.21 29.97 10 -order_by_key2_diff 4.00 2.00 0.58 2.58 500 -order_by_key_prefix 3.00 0.98 0.34 1.32 500 -order_by_range 3.00 0.81 0.41 1.22 500 -outer_join 48.00 0.01 0.00 0.01 10 -outer_join_found 46.00 0.01 0.00 0.01 10 -outer_join_not_found 31.00 0.00 0.00 0.00 500 -outer_join_on_key 40.00 0.00 0.00 0.00 10 -select_1_row 22.00 9.63 4.42 14.05 100000 -select_1_row_cache 19.00 6.75 3.55 10.30 100000 -select_2_rows 24.00 9.99 4.11 14.10 100000 -select_big 31.00 21.97 8.10 30.07 80 -select_big_str 13.00 5.10 3.32 8.42 10000 -select_cache 88.00 2.21 0.38 2.59 10000 -select_cache2 89.00 2.49 0.39 2.88 10000 -select_column+column 23.00 8.62 3.65 12.27 100000 -select_diff_key 138.00 0.12 0.02 0.14 500 -select_distinct 9.00 1.59 0.55 2.14 800 -select_group 51.00 1.40 0.29 1.69 2911 -select_group_when_MANY_tables 14.00 0.98 0.34 1.32 10000 -select_join 1.00 0.46 0.14 0.60 100 -select_key 82.00 51.17 8.13 59.30 200000 -select_key2 86.00 50.00 7.89 57.89 200000 -select_key2_return_key 81.00 48.57 6.51 55.08 200000 -select_key2_return_prim 83.00 49.27 7.43 56.70 200000 -select_key_prefix 87.00 51.79 8.42 60.21 200000 -select_key_prefix_join 10.00 3.98 1.52 5.50 100 -select_key_return_key 79.00 48.93 7.01 55.94 200000 -select_many_fields 19.00 9.18 5.10 14.28 2000 -select_range 103.00 8.73 2.95 11.68 410 -select_range_key2 12.00 4.65 0.92 5.57 25010 -select_range_prefix 13.00 5.01 0.99 6.00 25010 -select_simple 15.00 8.15 2.84 10.99 100000 -select_simple_cache 14.00 8.03 3.18 11.21 100000 -select_simple_join 2.00 0.60 0.19 0.79 500 -update_big 44.00 0.00 0.00 0.00 10 -update_of_key 14.00 1.80 0.94 2.74 50000 -update_of_key_big 20.00 0.01 0.01 0.02 501 -update_of_primary_key_many_keys 25.00 0.01 0.00 0.01 256 -update_with_key 60.00 9.66 6.21 15.87 300000 -update_with_key_prefix 21.00 6.04 1.98 8.02 100000 -wisc_benchmark 4.00 2.17 0.52 2.69 114 -TOTALS 3399.00 664.19 179.00 843.19 3227247 diff --git a/sql-bench/Results/RUN-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/RUN-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index ba144b8d226c4eaddc21b7d021b94a35b0935750..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,109 +0,0 @@ -Benchmark DBD suite: 2.14 -Date of test: 2002-10-23 12:35:44 -Running tests on: Linux 2.4.4-SMP alpha -Arguments: -Comments: Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M, query_cache=16M; cxx 6.3 + ccc 6.2.9 -Limits from: -Server version: MySQL 4.0.5 beta -Optimization: None -Hardware: - -ATIS: Total time: 37 wallclock secs ( 8.20 usr 4.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 277 wallclock secs ( 0.33 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 39 wallclock secs ( 8.71 usr 8.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 209 wallclock secs (62.48 usr 49.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 288 wallclock secs (10.88 usr 3.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Total time: 2381 wallclock secs (693.26 usr 241.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1298 wallclock secs (66.92 usr 20.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -transactions: Test skipped because the database doesn't support transactions -wisconsin: Total time: 17 wallclock secs ( 3.66 usr 2.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 9 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 154.00 0.18 0.06 0.00 992 -alter_table_drop 116.00 0.07 0.03 0.00 496 -connect 14.00 8.17 2.02 0.00 10000 -connect+select_1_row 17.00 8.80 2.79 0.00 10000 -connect+select_simple 16.00 8.86 2.57 0.00 10000 -count 50.00 0.04 0.00 0.00 100 -count_distinct 32.00 0.44 0.07 0.00 1000 -count_distinct_2 32.00 0.44 0.08 0.00 1000 -count_distinct_big 54.00 7.37 4.25 0.00 120 -count_distinct_group 50.00 1.14 0.52 0.00 1000 -count_distinct_group_on_key 38.00 0.48 0.12 0.00 1000 -count_distinct_group_on_key_parts 50.00 1.15 0.47 0.00 1000 -count_distinct_key_prefix 28.00 0.44 0.09 0.00 1000 -count_group_on_key_parts 37.00 1.02 0.48 0.00 1000 -count_on_key 453.00 16.74 3.59 0.00 50100 -create+drop 15.00 2.92 0.95 0.00 10000 -create_MANY_tables 238.00 1.84 0.51 0.00 10000 -create_index 4.00 0.00 0.00 0.00 8 -create_key+drop 19.00 4.55 0.94 0.00 10000 -create_table 0.00 0.00 0.00 0.00 31 -delete_all_many_keys 47.00 0.02 0.01 0.00 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 47.00 0.02 0.01 0.00 128 -delete_key 4.00 0.88 0.55 0.00 10000 -delete_range 9.00 0.00 0.00 0.00 12 -drop_index 3.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 10.00 0.67 0.44 0.00 10000 -insert 134.00 28.43 15.57 0.00 350768 -insert_duplicates 30.00 4.71 5.50 0.00 100000 -insert_key 98.00 13.49 3.80 0.00 100000 -insert_many_fields 14.00 0.32 0.11 0.00 2000 -insert_select_1_key 6.00 0.00 0.00 0.00 1 -insert_select_2_keys 8.00 0.00 0.00 0.00 1 -min_max 23.00 0.02 0.00 0.00 60 -min_max_on_key 188.00 27.44 5.93 0.00 85000 -multiple_value_insert 7.00 1.88 0.05 0.00 100000 -order_by_big 40.00 17.31 12.40 0.00 10 -order_by_big_key 31.00 18.84 12.61 0.00 10 -order_by_big_key2 30.00 17.35 12.38 0.00 10 -order_by_big_key_desc 32.00 19.23 12.70 0.00 10 -order_by_big_key_diff 36.00 17.33 12.44 0.00 10 -order_by_big_key_prefix 30.00 17.36 12.49 0.00 10 -order_by_key2_diff 5.00 1.67 1.04 0.00 500 -order_by_key_prefix 2.00 0.92 0.56 0.00 500 -order_by_range 5.00 0.97 0.55 0.00 500 -outer_join 67.00 0.00 0.00 0.00 10 -outer_join_found 63.00 0.01 0.00 0.00 10 -outer_join_not_found 40.00 0.01 0.00 0.00 500 -outer_join_on_key 40.00 0.01 0.00 0.00 10 -select_1_row 27.00 5.70 6.78 0.00 100000 -select_1_row_cache 22.00 3.16 5.87 0.00 100000 -select_2_rows 30.00 5.96 7.15 0.00 100000 -select_big 31.00 18.08 12.50 0.00 80 -select_big_str 20.00 8.04 6.08 0.00 10000 -select_cache 89.00 3.03 0.74 0.00 10000 -select_cache2 91.00 3.53 0.76 0.00 10000 -select_column+column 30.00 5.07 5.64 0.00 100000 -select_diff_key 163.00 0.27 0.04 0.00 500 -select_distinct 10.00 1.60 0.81 0.00 800 -select_group 106.00 1.49 0.53 0.00 2911 -select_group_when_MANY_tables 6.00 0.90 0.65 0.00 10000 -select_join 2.00 0.44 0.27 0.00 100 -select_key 142.00 77.87 17.06 0.00 200000 -select_key2 142.00 74.50 19.30 0.00 200000 -select_key2_return_key 133.00 73.16 13.81 0.00 200000 -select_key2_return_prim 132.00 70.56 13.25 0.00 200000 -select_key_prefix 141.00 73.88 18.25 0.00 200000 -select_key_prefix_join 10.00 3.58 2.30 0.00 100 -select_key_return_key 146.00 82.66 16.24 0.00 200000 -select_many_fields 25.00 8.38 8.45 0.00 2000 -select_range 242.00 8.57 4.60 0.00 410 -select_range_key2 19.00 6.12 1.72 0.00 25010 -select_range_prefix 18.00 6.28 1.70 0.00 25010 -select_simple 18.00 5.08 5.46 0.00 100000 -select_simple_cache 15.00 3.64 5.58 0.00 100000 -select_simple_join 1.00 0.60 0.29 0.00 500 -update_big 22.00 0.00 0.00 0.00 10 -update_of_key 25.00 4.24 1.90 0.00 50000 -update_of_key_big 18.00 0.04 0.03 0.00 501 -update_of_primary_key_many_keys 20.00 0.03 0.01 0.00 256 -update_with_key 116.00 21.90 14.15 0.00 300000 -update_with_key_prefix 36.00 11.11 4.60 0.00 100000 -wisc_benchmark 4.00 1.66 0.73 0.00 114 -TOTALS 4518.00 844.67 325.93 0.00 3227247 diff --git a/sql-bench/Results/RUN-mysql-NT_4.0 b/sql-bench/Results/RUN-mysql-NT_4.0 deleted file mode 100644 index 70d6fb2dc0f1b36c287e8d7224af0798f5abf4f4..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-NT_4.0 +++ /dev/null @@ -1,103 +0,0 @@ -Benchmark DBD suite: 2.12 -Date of test: 2001-04-19 13:10:13 -Running tests on: Windows NT Version 4.0 -Arguments: -Comments: 2x Pentium III XEON 450MHZ, 512M -Limits from: -Server version: MySQL 3.23.37 - -alter-table: Total time: 2342 wallclock secs ( 0.91 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -ATIS: Total time: 69 wallclock secs (23.58 usr 10.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 79 wallclock secs (17.44 usr 18.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 179 wallclock secs (58.89 usr 48.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 897 wallclock secs (15.94 usr 10.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Total time: 6659 wallclock secs (1143.94 usr 544.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1556 wallclock secs (127.53 usr 47.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 28 wallclock secs ( 7.95 usr 5.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1246.00 0.52 0.22 0.00 992 -alter_table_drop 1043.00 0.27 0.06 0.00 496 -connect 33.00 12.13 9.89 0.00 10000 -connect+select_1_row 39.00 12.91 11.73 0.00 10000 -connect+select_simple 37.00 12.36 12.34 0.00 10000 -count 36.00 0.03 0.02 0.00 100 -count_distinct 48.00 0.56 0.20 0.00 1000 -count_distinct_2 52.00 0.45 0.27 0.00 1000 -count_distinct_big 205.00 22.49 8.11 0.00 120 -count_distinct_group 145.00 2.67 1.19 0.00 1000 -count_distinct_group_on_key 48.00 0.58 0.17 0.00 1000 -count_distinct_group_on_key_parts 145.00 3.02 0.94 0.00 1000 -count_distinct_key_prefix 39.00 0.52 0.17 0.00 1000 -count_group_on_key_parts 40.00 2.73 0.83 0.00 1000 -count_on_key 405.00 22.87 8.23 0.00 50100 -create+drop 134.00 3.78 2.89 0.00 10000 -create_MANY_tables 231.00 3.27 1.58 0.00 10000 -create_index 26.00 0.00 0.00 0.00 8 -create_key+drop 167.00 5.98 2.77 0.00 10000 -create_table 0.00 0.02 0.02 0.00 31 -delete_all 19.00 0.00 0.00 0.00 12 -delete_all_many_keys 1431.00 0.00 0.03 0.00 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 1431.00 0.00 0.03 0.00 128 -delete_key 7.00 1.14 1.42 0.00 10000 -drop_index 27.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 169.00 1.41 1.42 0.00 10000 -insert 235.00 33.44 47.68 0.00 350768 -insert_duplicates 59.00 9.02 12.91 0.00 100000 -insert_key 1440.00 13.86 11.92 0.00 100000 -insert_many_fields 22.00 0.64 0.45 0.00 2000 -insert_select_1_key 8.00 0.00 0.00 0.00 1 -insert_select_2_keys 12.00 0.00 0.00 0.00 1 -min_max 19.00 0.00 0.02 0.00 60 -min_max_on_key 196.00 37.78 15.60 0.00 85000 -multiple_value_insert 9.00 2.53 0.19 0.00 100000 -order_by_big 101.00 61.84 25.81 0.00 10 -order_by_big_key 93.00 66.86 26.16 0.00 10 -order_by_big_key2 88.00 62.99 24.97 0.00 10 -order_by_big_key_desc 94.00 67.34 25.92 0.00 10 -order_by_big_key_diff 98.00 62.45 25.16 0.00 10 -order_by_big_key_prefix 88.00 62.72 25.19 0.00 10 -order_by_key2_diff 11.00 5.53 2.19 0.00 500 -order_by_key_prefix 6.00 2.94 1.08 0.00 500 -order_by_range 9.00 2.92 1.23 0.00 500 -outer_join 120.00 0.00 0.00 0.00 10 -outer_join_found 106.00 0.00 0.00 0.00 10 -outer_join_not_found 56.00 0.03 0.00 0.00 500 -outer_join_on_key 41.00 0.00 0.00 0.00 10 -select_1_row 5.00 1.23 1.69 0.00 10000 -select_2_rows 6.00 1.00 2.20 0.00 10000 -select_big 139.00 80.53 32.12 0.00 10080 -select_column+column 5.00 1.08 1.75 0.00 10000 -select_diff_key 127.00 0.67 0.05 0.00 500 -select_distinct 17.00 4.72 1.78 0.00 800 -select_group 59.00 3.11 1.34 0.00 2911 -select_group_when_MANY_tables 196.00 1.48 1.77 0.00 10000 -select_join 4.00 1.41 0.53 0.00 100 -select_key 196.00 103.61 37.28 0.00 200000 -select_key2 205.00 93.56 39.66 0.00 200000 -select_key2_return_key 198.00 90.06 35.53 0.00 200000 -select_key2_return_prim 203.00 91.61 35.25 0.00 200000 -select_key_prefix 201.00 93.56 39.13 0.00 200000 -select_key_prefix_join 18.00 12.05 4.75 0.00 100 -select_key_return_key 195.00 89.05 37.13 0.00 200000 -select_many_fields 54.00 16.80 18.40 0.00 2000 -select_query_cache 90.00 5.81 1.91 0.00 10000 -select_query_cache2 91.00 5.55 1.86 0.00 10000 -select_range 186.00 27.06 9.17 0.00 410 -select_range_key2 30.00 10.39 3.47 0.00 25010 -select_range_prefix 28.00 10.19 4.06 0.00 25010 -select_simple 4.00 0.80 1.48 0.00 10000 -select_simple_join 3.00 1.52 0.66 0.00 500 -update_big 66.00 0.00 0.00 0.00 10 -update_of_key 56.00 4.66 6.17 0.00 50000 -update_of_key_big 32.00 0.05 0.11 0.00 501 -update_of_primary_key_many_keys 447.00 0.03 0.00 0.00 256 -update_with_key 190.00 27.05 40.97 0.00 300000 -update_with_key_prefix 58.00 9.02 13.19 0.00 100000 -wisc_benchmark 9.00 5.77 1.45 0.00 114 -TOTALS 13232.00 1396.03 685.87 0.00 2667247 diff --git a/sql-bench/Results/RUN-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/RUN-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index 03154c0bc1d24758bc658b86c49dffbef2c1fd6e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,62 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-02 8:21:57 -Running tests on: SunOS 5.5.1 sun4u -Arguments: -Comments: UltraSPARC, 2 CPU 200 MHz, 1G mem, key_buffer=8M -Limits from: -Server version: MySQL 3.22.19 - -ATIS: Total time: 207 wallclock secs (32.58 usr 14.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 1333 wallclock secs ( 0.81 usr 0.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 130 wallclock secs (29.10 usr 30.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 322 wallclock secs (94.60 usr 95.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 75 wallclock secs ( 2.76 usr 1.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Total time: 3635 wallclock secs (781.69 usr 305.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 3136 wallclock secs (134.58 usr 42.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 59 wallclock secs (10.08 usr 6.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 775 0.47 0.12 0.00 992 -alter_table_drop 534 0.22 0.13 0.00 496 -connect 79 23.14 25.86 0.00 10000 -connect+select 87 25.51 28.78 0.00 10000 -count 131 0.14 0.01 0.00 100 -count_on_key 2201 43.27 11.20 0.00 50100 + -create+drop 22 0.78 0.32 0.00 1000 -create_index 11 0.00 0.00 0.00 8 -create_key+drop 20 1.12 0.26 0.00 1000 -create_table 22 0.56 0.17 0.00 1031 -delete_big 328 0.00 0.00 0.00 15 -delete_key 1 0.09 0.05 0.00 500 -drop_index 12 0.01 0.00 0.00 8 -drop_table 10 0.12 0.12 0.00 1028 -insert 435 56.40 42.52 0.00 350768 -insert_duplicates 59 14.62 11.60 0.00 300000 -insert_key 432 32.22 14.09 0.00 100000 -insert_many_fields 40 1.01 0.29 0.00 2000 -min_max 86 0.12 0.00 0.00 60 -min_max_on_key 411 58.42 16.34 0.00 73000 -multiple_value_inser 24 3.72 0.06 0.00 100000 -order_by 215 84.17 40.10 0.00 10 -order_by_key 137 83.69 41.88 0.00 10 -select 18 3.55 3.71 0.00 20000 -select_big 178 101.72 48.96 0.00 10080 -select_distinct 53 6.14 2.71 0.00 800 -select_group 303 5.27 2.02 0.00 3811 -select_join 90 17.84 8.44 0.00 200 -select_key 468 197.61 52.82 0.00 200000 -select_key_prefix 468 190.39 54.04 0.00 200000 -select_many_fields 89 28.07 30.03 0.00 2000 -select_range 719 52.11 20.66 0.00 25420 -select_range_prefix 87 19.41 5.90 0.00 25010 -select_simple 93 25.87 29.33 0.00 20000 -select_simple_join 8 2.20 0.97 0.00 500 -update_key 1 0.07 0.04 0.00 500 -update_key_big 82 0.12 0.05 0.00 501 -update_of_key 149 0.09 0.03 0.00 256 -wisc_benchmark 16 5.71 2.51 0.00 114 -TOTALS 8894 1085.97 496.12 0.00 1511318 + diff --git a/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4m b/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4m deleted file mode 100644 index 9e24e76276543850ed70077aa93ee34450518ce7..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,94 +0,0 @@ -Benchmark DBD suite: 2.10 -Date of test: 2000-12-17 17:44:49 -Running tests on: TI,TMS390Z55 (mid 8 impl 0x0 ver 0x1 clock 40MHz) -Arguments: -O key_buffer=!6M -Comments: gcc 2.95, 196M memory -Limits from: -Server version: MySQL 3.23.29 gamma - -ATIS: Total time: 459 wallclock secs (104.37 usr 50.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 2599 wallclock secs ( 2.67 usr 1.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 260 wallclock secs (55.55 usr 91.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 971 wallclock secs (313.99 usr 256.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 4844 wallclock secs (79.86 usr 40.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 19996 wallclock secs (4017.95 usr 2552.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 9945 wallclock secs (579.92 usr 312.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 163 wallclock secs (34.49 usr 22.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1482.00 1.50 0.71 0.00 992 -alter_table_drop 1066.00 0.71 0.32 0.00 496 -connect 175.00 69.09 50.36 0.00 10000 -connect+select_1_row 203.00 72.78 60.73 0.00 10000 -connect+select_simple 193.00 72.11 59.87 0.00 10000 -count 191.00 0.34 0.15 0.00 100 -count_distinct 808.00 6.35 2.11 0.00 2000 + -count_distinct_big 1174.00 93.21 74.14 0.00 120 + -count_distinct_group 1391.00 12.41 7.94 0.00 1000 + -count_distinct_group_on_key 373.00 3.78 1.54 0.00 1000 -count_distinct_group_on_key_parts 1394.00 12.62 7.80 0.00 1000 + -count_group_on_key_parts 303.00 12.11 7.43 0.00 1000 -count_on_key 2970.00 132.99 51.78 0.00 50100 + -create+drop 995.00 21.72 10.16 0.00 10000 -create_MANY_tables 2078.00 15.85 6.26 0.00 10000 -create_index 24.00 0.00 0.00 0.00 8 -create_key+drop 995.00 29.17 10.77 0.00 10000 -create_table 3.00 0.03 0.03 0.00 31 -delete_all 129.00 0.01 0.01 0.00 12 -delete_all_many_keys 1460.00 0.13 0.15 0.00 1 -delete_big 3.00 0.00 0.01 0.00 1 -delete_big_many_keys 1460.00 0.13 0.15 0.00 128 -delete_key 39.00 5.98 5.60 0.00 10000 -drop_index 24.00 0.00 0.01 0.00 8 -drop_table 1.00 0.03 0.02 0.00 28 -drop_table_when_MANY_tables 599.00 6.29 5.66 0.00 10000 -insert 1271.00 220.44 192.82 0.00 350768 -insert_duplicates 299.00 57.52 54.81 0.00 100000 -insert_key 1988.00 94.64 58.58 0.00 100000 -insert_many_fields 66.00 3.48 1.07 0.00 2000 -insert_select_1_key 44.00 0.00 0.00 0.00 1 -insert_select_2_keys 53.00 0.00 0.00 0.00 1 -min_max 144.00 0.16 0.05 0.00 60 -min_max_on_key 1384.00 221.90 88.70 0.00 85000 + -multiple_value_insert 55.00 8.95 0.40 0.00 100000 -order_by_big 677.00 251.22 227.57 0.00 10 + -order_by_big_key 448.00 251.08 195.23 0.00 10 -order_by_big_key2 445.00 248.50 195.16 0.00 10 -order_by_big_key_desc 453.00 253.91 197.69 0.00 10 -order_by_big_key_diff 648.00 250.20 227.39 0.00 10 -order_by_key 39.00 12.41 8.09 0.00 500 -order_by_key2_diff 76.00 22.75 15.86 0.00 500 -order_by_range 58.00 12.03 8.80 0.00 500 -outer_join 757.00 0.05 0.02 0.00 10 -outer_join_found 724.00 0.00 0.06 0.00 10 -outer_join_not_found 423.00 0.04 0.01 0.00 500 -outer_join_on_key 359.00 0.04 0.00 0.00 10 -select_1_row 25.00 4.18 7.73 0.00 10000 -select_2_rows 30.00 3.36 8.73 0.00 10000 -select_big 758.00 341.83 252.58 0.00 10080 -select_column+column 30.00 4.21 7.61 0.00 10000 -select_diff_key 1048.00 2.16 0.57 0.00 500 + -select_distinct 127.00 20.08 8.51 0.00 800 -select_group 416.00 15.07 6.09 0.00 2911 -select_group_when_MANY_tables 177.00 6.82 7.37 0.00 10000 -select_join 137.00 56.58 27.51 0.00 200 -select_key 1186.00 585.97 241.24 0.00 200000 + -select_key2 1248.00 578.67 246.27 0.00 200000 + -select_key_prefix 1258.00 576.44 251.41 0.00 200000 + -select_many_fields 193.00 52.02 90.54 0.00 2000 -select_range 1318.00 116.36 78.78 0.00 410 + -select_range_key2 177.00 55.95 26.70 0.00 25010 -select_range_prefix 181.00 55.31 26.09 0.00 25010 -select_simple 19.00 4.00 6.52 0.00 10000 -select_simple_join 21.00 7.16 3.20 0.00 500 -update_big 384.00 0.01 0.00 0.00 10 -update_of_key 275.00 33.49 28.89 0.00 50000 -update_of_key_big 209.00 0.30 0.33 0.00 501 -update_of_primary_key_many_keys 349.00 0.22 0.17 0.00 256 -update_with_key 1136.00 171.26 157.65 0.00 300000 -wisc_benchmark 42.00 17.93 7.18 0.00 114 -TOTALS 40688.00 5188.04 3327.69 0.00 1946237 ++++++++++++ diff --git a/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4u b/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4u deleted file mode 100644 index e39e16a8c0055c76cea63bb6c1f75ada7d8f4be7..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,72 +0,0 @@ -Benchmark DBD suite: 2.5 -Date of test: 2000-01-18 9:22:49 -Running tests on: SunOS 5.7 sun4u -Arguments: -Comments: UltraSPARC-II 2/CPU 400 MHz, 2G mem, key_buffer=16M -Limits from: -Server version: MySQL 3.23.8 alpha - -ATIS: Total time: 89 wallclock secs (16.85 usr 13.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 1397 wallclock secs ( 0.41 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 73 wallclock secs (15.87 usr 24.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 141 wallclock secs (46.24 usr 45.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 3631 wallclock secs (10.19 usr 5.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 8580 wallclock secs (396.21 usr 267.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1094 wallclock secs (67.65 usr 35.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 30 wallclock secs ( 4.87 usr 5.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 821 0.23 0.09 0.00 992 -alter_table_drop 555 0.10 0.04 0.00 496 -connect 30 10.70 10.77 0.00 10000 -connect+select_1_row 35 11.86 11.88 0.00 10000 -connect+select_simpl 33 11.76 11.97 0.00 10000 -count 53 0.05 0.01 0.00 100 -count_on_key 585 20.36 8.74 0.00 50100 -create+drop 934 2.88 1.85 0.00 10000 -create_index 11 0.00 0.00 0.00 8 -create_key+drop 1008 3.17 1.20 0.00 10000 -create_many_tables 1130 2.65 0.89 0.00 10000 -create_table 1 0.00 0.00 0.00 31 -delete_big 25 0.00 0.00 0.00 13 -delete_big_many_keys 251 0.00 0.00 0.00 2 -delete_key 1 0.04 0.00 0.00 500 -drop_index 10 0.00 0.00 0.00 8 -drop_table 520 0.60 0.72 0.00 10028 -insert 261 24.45 30.83 0.00 350768 -insert_duplicates 33 6.55 8.84 0.00 300000 -insert_key 1333 14.75 8.04 0.00 100000 -insert_many_fields 18 0.62 0.18 0.00 2000 -min_max 36 0.06 0.01 0.00 60 -min_max_on_key 228 30.61 12.97 0.00 73000 -multiple_value_inser 13 1.72 0.03 0.00 100000 -order_by 111 45.15 37.26 0.00 10 -order_by_key 84 45.63 36.98 0.00 10 -outer_join 132 0.00 0.00 0.00 10 -outer_join_found 132 0.01 0.00 0.00 10 -outer_join_not_found 603 0.07 0.00 0.00 500 + -outer_join_on_key 86 0.00 0.00 0.00 10 -select_1_row 5 0.94 1.70 0.00 10000 -select_2_rows 6 0.96 1.77 0.00 10000 -select_big 114 55.66 42.41 0.00 10080 -select_diff_key 311 0.28 0.11 0.00 500 -select_distinct 27 3.30 2.56 0.00 800 -select_group 132 3.14 2.90 0.00 12811 -select_join 26 9.53 7.43 0.00 200 -select_key 210 84.78 37.42 0.00 200000 -select_key_prefix 213 92.33 41.44 0.00 200000 -select_many_fields 55 15.24 24.77 0.00 2000 -select_range 366 25.66 17.72 0.00 25420 -select_range_prefix 36 9.23 4.79 0.00 25010 -select_simple 4 0.82 1.35 0.00 10000 -select_simple_join 4 1.19 0.90 0.00 500 -update_big 69 0.01 0.00 0.00 500 -update_of_key 165 0.09 0.05 0.00 756 -update_of_key_big 44 0.03 0.05 0.00 501 -update_with_key 200 17.53 24.56 0.00 100000 -wisc_benchmark 9 2.97 2.12 0.00 114 -TOTALS 11069 557.71 397.35 0.00 1657848 + diff --git a/sql-bench/Results/RUN-mysql-SunOS_5.8_sun4u b/sql-bench/Results/RUN-mysql-SunOS_5.8_sun4u deleted file mode 100644 index c4fd3235477f6852b1b0ed599618998c7f72caa2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,94 +0,0 @@ -Benchmark DBD suite: 2.10 -Date of test: 2000-12-17 16:55:55 -Running tests on: SunOS 2.8, UltraSPARC-II, sun4u 4xcpu 400 MHz -Arguments: -O key_buffer=16M -Comments: gcc 2.95.2, 2G memory -Limits from: -Server version: MySQL 3.23.29a gamma - -ATIS: Total time: 90 wallclock secs (17.80 usr 16.07 sys + 0.00 cusr 0.00 csys = 33.87 CPU) -alter-table: Total time: 886 wallclock secs ( 0.22 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.46 CPU) -big-tables: Total time: 84 wallclock secs (19.18 usr 32.22 sys + 0.00 cusr 0.00 csys = 51.40 CPU) -connect: Total time: 140 wallclock secs (44.23 usr 46.40 sys + 0.00 cusr 0.00 csys = 90.63 CPU) -create: Total time: 2556 wallclock secs (10.32 usr 7.37 sys + 0.00 cusr 0.00 csys = 17.69 CPU) -insert: Total time: 4255 wallclock secs (674.38 usr 525.05 sys + 0.00 cusr 0.00 csys = 1199.43 CPU) -select: Estimated total time: 2200 wallclock secs (91.87 usr 62.18 sys + 0.00 cusr 0.00 csys = 154.06 CPU) -wisconsin: Total time: 31 wallclock secs ( 5.79 usr 5.32 sys + 0.00 cusr 0.00 csys = 11.11 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 516.00 0.09 0.10 0.19 992 -alter_table_drop 354.00 0.06 0.06 0.12 496 -connect 28.00 9.94 10.15 20.09 10000 -connect+select_1_row 33.00 10.86 12.26 23.12 10000 -connect+select_simple 31.00 10.69 11.68 22.37 10000 -count 54.00 0.02 0.04 0.06 100 -count_distinct 217.00 0.98 0.30 1.28 2000 -count_distinct_big 214.00 16.68 15.02 31.70 120 -count_distinct_group 229.00 1.96 1.95 3.91 1000 -count_distinct_group_on_key 101.00 0.58 0.35 0.93 1000 -count_distinct_group_on_key_parts 228.00 2.00 1.90 3.90 1000 -count_group_on_key_parts 85.00 1.82 1.89 3.71 1000 -count_on_key 738.00 20.51 9.12 29.64 50100 + -create+drop 717.00 2.66 2.04 4.70 10000 -create_MANY_tables 779.00 2.21 0.85 3.06 10000 -create_index 8.00 0.00 0.00 0.00 8 -create_key+drop 720.00 3.82 1.94 5.76 10000 -create_table 1.00 0.01 0.00 0.01 31 -delete_all 29.00 0.00 0.00 0.00 12 -delete_all_many_keys 299.00 0.03 0.00 0.03 1 -delete_big 1.00 0.00 0.00 0.00 1 -delete_big_many_keys 299.00 0.03 0.00 0.03 128 -delete_key 6.00 0.77 0.91 1.68 10000 -drop_index 7.00 0.00 0.00 0.00 8 -drop_table 1.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 329.00 0.69 0.94 1.63 10000 -insert 217.00 25.55 32.85 58.40 350768 -insert_duplicates 48.00 7.31 9.16 16.47 100000 -insert_key 614.00 17.07 10.23 27.30 100000 -insert_many_fields 19.00 0.49 0.22 0.71 2000 -insert_select_1_key 13.00 0.00 0.00 0.00 1 -insert_select_2_keys 15.00 0.00 0.00 0.00 1 -min_max 43.00 0.02 0.00 0.02 60 -min_max_on_key 306.00 34.63 16.70 51.33 85000 -multiple_value_insert 13.00 1.84 0.03 1.87 100000 -order_by_big 110.00 47.64 46.77 94.41 10 -order_by_big_key 94.00 46.86 47.25 94.11 10 -order_by_big_key2 94.00 47.53 46.27 93.80 10 -order_by_big_key_desc 94.00 46.97 46.76 93.73 10 -order_by_big_key_diff 107.00 47.62 46.94 94.56 10 -order_by_key 7.00 2.10 2.12 4.22 500 -order_by_key2_diff 14.00 3.72 4.32 8.04 500 -order_by_range 10.00 2.19 1.94 4.13 500 -outer_join 143.00 0.00 0.01 0.01 10 -outer_join_found 143.00 0.00 0.00 0.00 10 -outer_join_not_found 94.00 0.02 0.01 0.03 500 -outer_join_on_key 102.00 0.01 0.00 0.01 10 -select_1_row 5.00 1.01 1.90 2.91 10000 -select_2_rows 6.00 0.82 2.24 3.06 10000 -select_big 123.00 56.54 51.93 108.47 10080 -select_column+column 6.00 0.86 1.85 2.71 10000 -select_diff_key 345.00 0.35 0.08 0.43 500 -select_distinct 27.00 3.33 3.09 6.42 800 -select_group 104.00 2.46 1.68 4.14 2911 -select_group_when_MANY_tables 11.00 0.93 1.60 2.53 10000 -select_join 28.00 9.99 9.46 19.45 200 -select_key 209.00 94.26 47.75 142.01 200000 -select_key2 217.00 94.64 47.74 142.38 200000 -select_key_prefix 222.00 95.29 45.47 140.76 200000 -select_many_fields 65.00 18.69 32.00 50.69 2000 -select_range 326.00 17.61 17.05 34.66 410 -select_range_key2 34.00 10.65 5.32 15.97 25010 -select_range_prefix 36.00 10.05 5.36 15.41 25010 -select_simple 4.00 0.84 1.47 2.31 10000 -select_simple_join 3.00 1.28 0.98 2.26 500 -update_big 69.00 0.00 0.00 0.00 10 -update_of_key 38.00 3.56 4.58 8.14 50000 -update_of_key_big 45.00 0.02 0.02 0.04 501 -update_of_primary_key_many_keys 106.00 0.01 0.03 0.04 256 -update_with_key 177.00 18.82 27.57 46.39 300000 -wisc_benchmark 9.00 3.67 2.50 6.17 114 -TOTALS 10539.00 863.66 694.75 1558.42 1946237 + diff --git a/sql-bench/Results/RUN-mysql-win98 b/sql-bench/Results/RUN-mysql-win98 deleted file mode 100644 index 18ff522a9292d633eb7e252b2845a622691f3f1e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql-win98 +++ /dev/null @@ -1,74 +0,0 @@ -Benchmark DBD suite: 2.7 -Date of test: 2000-03-15 1:51:13 -Running tests on: Windows 98 [Version 4.10.1998] -Arguments: -Comments: AMD K6, 400mz, 128M, 16M key_cache -Limits from: -Server version: MySQL 3.23.13a alpha - -alter-table: Total time: 1855 wallclock secs (1854.89 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -ATIS: Total time: 144 wallclock secs (143.53 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 151 wallclock secs (150.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 369 wallclock secs (368.94 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 5141 wallclock secs (5140.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 8358 wallclock secs (8356.07 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1294 wallclock secs (1293.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 63 wallclock secs (62.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1046 1046.38 0.00 0.00 992 -alter_table_drop 773 772.97 0.00 0.00 496 -connect 52 51.85 0.00 0.00 10000 -connect+select_1_row 72 71.95 0.00 0.00 10000 -connect+select_simple 67 66.90 0.00 0.00 10000 -count 55 54.87 0.00 0.00 100 -count_on_key 640 639.71 0.00 0.00 50100 -create+drop 1433 1433.28 0.00 0.00 10000 -create_MANY_tables 1510 1510.83 0.00 0.00 5000 -create_index 17 16.70 0.00 0.00 8 -create_key+drop 1457 1456.57 0.00 0.00 10000 -create_table 8 7.92 0.00 0.00 31 -delete_big 23 22.25 0.00 0.00 13 -delete_big_many_keys 112 112.11 0.00 0.00 2 -delete_key 0 0.82 0.00 0.00 500 -drop_index 17 16.64 0.00 0.00 8 -drop_table 1 0.06 0.00 0.00 28 -drop_table_when_MANY_tables 160 159.83 0.00 0.00 5000 -insert 510 508.11 0.00 0.00 350768 -insert_duplicates 91 91.06 0.00 0.00 300000 -insert_key 364 363.72 0.00 0.00 100000 -insert_many_fields 25 24.71 0.00 0.00 2000 -min_max 33 32.90 0.00 0.00 60 -min_max_on_key 339 339.56 0.00 0.00 73000 -multiple_value_insert 11 11.64 0.00 0.00 100000 -order_by 249 248.87 0.00 0.00 10 -order_by_key 175 174.66 0.00 0.00 10 -outer_join 146 145.66 0.00 0.00 10 -outer_join_found 144 144.40 0.00 0.00 10 -outer_join_not_found 606 605.55 0.00 0.00 500 + -outer_join_on_key 63 63.33 0.00 0.00 10 -select_1_row 16 15.99 0.00 0.00 10000 -select_2_rows 19 18.89 0.00 0.00 10000 -select_big 304 306.16 0.00 0.00 10080 -select_diff_key 241 240.63 0.00 0.00 500 -select_distinct 33 33.34 0.00 0.00 800 -select_group 91 91.83 0.00 0.00 2911 -select_group_when_MANY_tables 581 580.46 0.00 0.00 5000 -select_join 51 50.15 0.00 0.00 200 -select_key 540 540.35 0.00 0.00 200000 -select_key_prefix 542 542.23 0.00 0.00 200000 -select_many_fields 124 124.24 0.00 0.00 2000 -select_range 423 423.21 0.00 0.00 25420 -select_range_prefix 66 66.62 0.00 0.00 25010 -select_simple 12 12.20 0.00 0.00 10000 -select_simple_join 7 7.47 0.00 0.00 500 -update_big 84 83.33 0.00 0.00 500 -update_of_key 59 59.21 0.00 0.00 756 -update_of_key_big 38 38.07 0.00 0.00 501 -update_with_key 432 432.20 0.00 0.00 100000 -wisc_benchmark 17 17.08 0.00 0.00 114 -TOTALS 13879 13879.47 0.00 0.00 1642948 + diff --git a/sql-bench/Results/RUN-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/RUN-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 7df4c17f69d916c1a4906a9d3bc3e25e38130465..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,55 +0,0 @@ -Benchmark DBD suite: 2.4 -Date of test: 1999-09-24 9:07:48 -Running tests on: Linux 2.2.10 i686 -Arguments: --force --fast -Comments: -Limits from: msql,mysql -Server version: MySQL 3.23.3 alpha - -ATIS: Total time: 41 wallclock secs (14.97 usr 2.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 63 wallclock secs (32.15 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 77 wallclock secs (42.05 usr 9.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 9 wallclock secs ( 1.85 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 2211 wallclock secs (751.12 usr 86.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 17 wallclock secs ( 5.57 usr 0.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 7 wallclock secs ( 2.43 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -connect 20 14.35 1.53 0.00 10000 -connect+select_1_row 24 15.08 2.21 0.00 10000 -create+drop 2 0.55 0.04 0.00 1000 -create_key+drop 2 0.62 0.06 0.00 1000 -create_table 4 0.40 0.03 0.00 1031 -delete_big 19 0.00 0.00 0.00 13 -delete_big_many_keys 8 0.00 0.00 0.00 2 -delete_key 0 0.06 0.01 0.00 500 -drop_table 0 0.02 0.00 0.00 1028 -insert 119 43.27 6.98 0.00 350768 -insert_duplicates 15 5.68 1.77 0.00 300000 -insert_key 68 13.88 2.39 0.00 100000 -insert_many_fields 19 7.12 0.65 0.00 20000 -order_by 86 47.40 7.63 0.00 10 -order_by_key 69 47.67 7.32 0.00 10 -select 1 0.26 0.05 0.00 1000 -select_1_row 4 1.14 0.33 0.00 10000 -select_2_rows 4 1.24 0.37 0.00 10000 -select_big 95 58.19 12.13 0.00 10080 -select_diff_key 305 0.62 0.03 0.00 500 -select_distinct 15 3.57 0.55 0.00 700 -select_join 22 9.94 1.56 0.00 200 -select_key 262 162.27 10.69 0.00 200000 -select_key_prefix 265 165.34 9.78 0.00 200000 -select_many_fields 44 25.02 4.94 0.00 20000 -select_range 41 17.25 1.56 0.00 25400 -select_range_prefix 30 14.63 1.11 0.00 25000 -select_simple_join 3 1.40 0.15 0.00 500 -update_big 34 0.00 0.00 0.00 500 -update_of_key 694 152.73 23.25 0.00 600256 + -update_with_key 147 37.92 7.66 0.00 100000 -wisc_benchmark 4 2.43 0.29 0.00 74 -TOTALS 2425 850.05 105.07 0.00 1999572 + diff --git a/sql-bench/Results/RUN-mysql_odbc-win98 b/sql-bench/Results/RUN-mysql_odbc-win98 deleted file mode 100644 index 9c714aaa57cafdc6d4ba138a0fb7b97249718c78..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-mysql_odbc-win98 +++ /dev/null @@ -1,62 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-02 15:47:10 -Running tests on: Windows 98 [Version 4.10.1998] -Arguments: --odbc -Comments: -Limits from: -Server version: MySQL 3.22.19a - -alter-table: Total time: 2185 wallclock secs (2185.65 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -ATIS: Total time: 295 wallclock secs (294.90 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 249 wallclock secs (248.70 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 1628 wallclock secs (1627.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 146 wallclock secs (145.72 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Estimated total time: 6093 wallclock secs (6093.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Estimated total time: 3235 wallclock secs (3234.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 135 wallclock secs (134.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1174 1174.09 0.00 0.00 992 -alter_table_drop 964 964.00 0.00 0.00 496 -connect 337 336.42 0.00 0.00 10000 -connect+select 511 511.30 0.00 0.00 10000 -count 93 92.82 0.00 0.00 100 -count_on_key 2175 2174.21 0.00 0.00 50100 + -create+drop 27 26.86 0.00 0.00 1000 -create_index 22 22.19 0.00 0.00 8 -create_key+drop 30 30.16 0.00 0.00 1000 -create_table 52 50.48 0.00 0.00 1031 -delete_big 212 211.34 0.00 0.00 15 -delete_key 2 1.82 0.00 0.00 500 -drop_index 22 22.08 0.00 0.00 8 -drop_table 9 9.11 0.00 0.00 1028 -insert 1199 1198.90 0.00 0.00 350768 -insert_duplicates 280 280.34 0.00 0.00 300000 -insert_key 648 648.40 0.00 0.00 100000 -insert_many_fields 37 36.25 0.00 0.00 2000 -min_max 51 51.52 0.00 0.00 60 -min_max_on_key 508 507.63 0.00 0.00 73000 -multiple_value_inser 40 40.32 0.00 0.00 100000 -order_by 491 490.87 0.00 0.00 10 -order_by_key 370 369.81 0.00 0.00 10 -select 82 82.23 0.00 0.00 20000 -select_big 595 594.45 0.00 0.00 10080 -select_distinct 58 57.84 0.00 0.00 800 -select_group 270 270.62 0.00 0.00 3811 -select_join 142 141.54 0.00 0.00 200 -select_key 914 914.74 0.00 0.00 200000 + -select_key_prefix 929 928.96 0.00 0.00 200000 + -select_many_fields 210 210.14 0.00 0.00 2000 -select_range 702 703.22 0.00 0.00 25420 -select_range_prefix 115 115.23 0.00 0.00 25010 -select_simple 476 475.82 0.00 0.00 20000 -select_simple_join 13 13.35 0.00 0.00 500 -update_key 2 1.81 0.00 0.00 500 -update_key_big 59 59.81 0.00 0.00 501 -update_of_key 110 109.57 0.00 0.00 256 -wisc_benchmark 29 28.83 0.00 0.00 114 -TOTALS 13960 13959.08 0.00 0.00 1511318 +++ diff --git a/sql-bench/Results/RUN-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/RUN-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index f01d1675f535a3688cc477cf6b52b97f6ff27520..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,56 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-25 0:33:00 -Running tests on: Linux 2.0.36 i686 -Arguments: --force -Comments: -Limits from: mysql,oracle -Server version: Oracle 8.0.5.0.0 - -ATIS: Total time: 373 wallclock secs (123.71 usr 30.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 12 wallclock secs ( 0.87 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 47 wallclock secs (13.47 usr 8.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Failed (output/connect-oracle-Linux_2.0.36_i686-cmp-mysql,oracle) -create: Total time: 548 wallclock secs ( 9.48 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Estimated total time: 123077 wallclock secs (1962.20 usr 413.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 2769 wallclock secs (257.98 usr 54.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 179 wallclock secs (52.39 usr 7.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Of 8 tests, 1 tests didn't work -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 8 0.20 0.03 0.00 246 -count 50 0.08 0.03 0.00 100 -count_on_key 831 53.95 11.21 0.00 50100 + -create+drop 202 2.66 0.31 0.00 1000 -create_index 0 0.02 0.00 0.00 8 -create_key+drop 175 3.33 0.25 0.00 1000 -create_table 91 2.05 0.18 0.00 1031 -delete_big 1040 0.04 0.05 0.00 15 -delete_key 265 0.34 0.04 0.00 500 -drop_index 1 0.01 0.00 0.00 8 -drop_table 80 0.66 0.08 0.00 1028 -insert 1193 265.59 32.51 0.00 350768 -insert_duplicates 2000 0.00 0.00 0.00 300000 -insert_key 647 78.18 9.80 0.00 100000 -insert_many_fields 6 2.06 0.16 0.00 2000 -min_max 25 0.04 0.01 0.00 60 -min_max_on_key 1216 81.52 17.31 0.00 73000 + -order_by 813 362.89 88.91 0.00 10 + -order_by_key 846 362.64 93.30 0.00 10 + -select_big 851 368.42 91.53 0.00 80 -select_distinct 63 24.27 6.17 0.00 800 -select_group 100 13.12 2.59 0.00 3391 -select_join 204 71.18 19.08 0.00 200 -select_key 91337 252.28 48.63 0.00 200000 + -select_key_prefix 641 235.18 40.05 0.00 200000 + -select_many_fields 40 11.38 8.59 0.00 2000 -select_range 15505 134.75 29.30 0.00 25410 +++ -select_range_prefix 83 36.62 6.48 0.00 25010 -select_simple_join 23 8.65 2.06 0.00 500 -update_key 221 0.26 0.08 0.00 500 -update_key_big 299 0.40 0.07 0.00 501 -update_of_key 445 0.19 0.00 0.00 256 -wisc_benchmark 70 30.55 4.78 0.00 114 -TOTALS 119371 2403.51 513.59 0.00 1339646 +++++++++ diff --git a/sql-bench/Results/RUN-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/RUN-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 572ddd0e3b029d820c4dc3d332651ec4992d7ad4..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,57 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-23 8:05:45 -Running tests on: Linux 2.0.36 i686 -Arguments: --force --fast -Comments: -Limits from: mysql,oracle -Server version: Oracle 8.0.5.0.0 - -ATIS: Total time: 396 wallclock secs (124.50 usr 29.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 13 wallclock secs ( 1.14 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 49 wallclock secs (12.68 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 49 wallclock secs (12.68 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 611 wallclock secs (11.43 usr 1.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Estimated total time: 124637 wallclock secs (1926.54 usr 389.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 2285 wallclock secs (259.15 usr 54.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 190 wallclock secs (53.06 usr 7.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 8 0.31 0.02 0.00 246 -book-keeping 362 1.79 0.26 0.00 34 -count 50 0.10 0.04 0.00 100 -count_on_key 813 56.44 12.01 0.00 50100 + -create+drop 198 2.72 0.37 0.00 1000 -create_index 0 0.01 0.00 0.00 8 -create_key+drop 174 3.64 0.28 0.00 1000 -create_table 108 1.93 0.18 0.00 1031 -delete_big 1475 0.06 0.06 0.00 15 -delete_key 262 0.31 0.03 0.00 500 -drop_index 1 0.00 0.00 0.00 8 -drop_table 88 0.71 0.04 0.00 1028 -insert 1357 259.88 32.29 0.00 350768 -insert_duplicates 2001 0.00 0.00 0.00 300000 -insert_key 677 78.14 9.36 0.00 100000 -insert_many_fields 7 2.04 0.14 0.00 2000 -min_max 25 0.09 0.02 0.00 60 -min_max_on_key 890 78.61 16.96 0.00 73000 + -order_by 807 349.92 85.42 0.00 10 + -order_by_key 856 370.12 85.01 0.00 10 + -select_big 861 368.26 96.12 0.00 80 -select_distinct 56 24.55 5.45 0.00 800 -select_group 94 13.03 2.94 0.00 3391 -select_join 188 71.78 18.08 0.00 200 -select_key 91615 228.66 33.54 0.00 200000 + -select_key_prefix 753 235.02 39.45 0.00 200000 + -select_many_fields 40 10.55 0.64 0.00 2000 -select_range 15390 137.88 27.54 0.00 25410 ++ -select_range_prefix 84 35.44 6.75 0.00 25010 -select_simple_join 20 8.26 1.90 0.00 500 -update_key 223 0.31 0.02 0.00 500 -update_key_big 302 0.45 0.10 0.00 501 -update_of_key 601 0.18 0.00 0.00 256 -wisc_benchmark 63 30.34 4.90 0.00 114 -TOTALS 120449 2371.53 479.92 0.00 1339680 ++++++++ diff --git a/sql-bench/Results/RUN-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/RUN-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 9b9404b981c78501a3d467bed023e74ccd4ea7f6..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,59 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-09 18:59:51 -Running tests on: Linux 2.0.36 i686 -Arguments: --force -Comments: -Limits from: mysql,pg,solid -Server version: PostgreSQL 6.4 - -ATIS: Estimated total time: 1520 wallclock secs (16.64 usr 1.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 4 wallclock secs ( 0.80 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 470 wallclock secs ( 7.63 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 349 wallclock secs (42.65 usr 10.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 168 wallclock secs ( 6.14 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Estimated total time: 133319 wallclock secs (625.54 usr 64.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 2069 wallclock secs (51.44 usr 5.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 452 wallclock secs (22.00 usr 2.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.15 0.00 0.00 293 -connect 84 9.71 2.81 0.00 10000 -connect+select 210 17.17 5.07 0.00 10000 -count 156 0.04 0.01 0.00 100 -count_on_key 1685 27.36 3.43 0.00 50100 + -create+drop 46 1.86 0.23 0.00 1000 -create_index 1 0.00 0.00 0.00 7 -create_key+drop 33 1.56 0.14 0.00 1000 -create_table 68 1.54 0.11 0.00 1031 -delete_big 76 0.01 0.00 0.00 15 -delete_key 634 0.32 0.09 0.00 500 -drop_index 0 0.00 0.00 0.00 7 -drop_table 17 0.62 0.03 0.00 1028 -insert 1213 198.22 22.62 0.00 350768 -insert_duplicates 164 46.42 5.41 0.00 300000 -insert_key 944 57.30 6.79 0.00 100000 -insert_many_fields 123 1.37 0.14 0.00 2000 -min_max 49 0.04 0.00 0.00 60 -min_max_on_key 2153 18.34 1.75 0.00 73000 + -order_by 269 26.89 1.27 0.00 10 -order_by_key 265 26.66 1.20 0.00 10 -select 35 10.00 1.13 0.00 20000 -select_big 136 32.59 2.75 0.00 10080 -select_distinct 139 2.82 0.22 0.00 800 -select_group 5688 2.22 0.22 0.00 3101 -select_join 1262 5.94 0.52 0.00 200 + -select_key 634 122.95 13.45 0.00 200000 + -select_key_prefix 639 123.46 13.29 0.00 200000 + -select_many_fields 347 6.25 0.46 0.00 2000 -select_range 34472 3.80 0.07 0.00 25410 ++ -select_range_prefix 34462 6.24 0.56 0.00 25000 ++ -select_simple_join 6 1.02 0.10 0.00 500 -update_key 443 0.23 0.03 0.00 500 -update_key_big 978 0.34 0.06 0.00 501 -update_of_key 3569 0.14 0.03 0.00 256 -wisc_benchmark 310 5.05 0.37 0.00 114 -TOTALS 91311 758.63 84.36 0.00 1389391 +++++++++ diff --git a/sql-bench/Results/RUN-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/RUN-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 4025af26afd368a6c9fc38daed153f825f480bab..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,103 +0,0 @@ -Benchmark DBD suite: 2.13 -Date of test: 2001-06-12 18:11:16 -Running tests on: Linux 2.4.2-64GB-SMP i686 -Arguments: -Comments: Intel Xeon, 2x550 Mhz, 512M, pg started with -o -F -Limits from: mysql,pg -Server version: PostgreSQL version 7.1.2 - -ATIS: Total time: 104 wallclock secs (12.54 usr 1.17 sys + 0.00 cusr 0.00 csys = 13.71 CPU) -alter-table: Total time: 50 wallclock secs ( 0.58 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.66 CPU) -big-tables: Total time: 1355 wallclock secs ( 8.68 usr 0.69 sys + 0.00 cusr 0.00 csys = 9.37 CPU) -connect: Total time: 547 wallclock secs (50.45 usr 14.25 sys + 0.00 cusr 0.00 csys = 64.70 CPU) -create: Total time: 9195 wallclock secs (31.22 usr 11.10 sys + 0.00 cusr 0.00 csys = 42.32 CPU) -insert: Estimated total time: 288864 wallclock secs (887.56 usr 201.43 sys + 0.00 cusr 0.00 csys = 1088.99 CPU) -select: Estimated total time: 13160 wallclock secs (70.90 usr 7.35 sys + 0.00 cusr 0.00 csys = 78.25 CPU) -wisconsin: Total time: 55 wallclock secs (12.69 usr 2.29 sys + 0.00 cusr 0.00 csys = 14.98 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 48.00 0.31 0.04 0.35 992 -connect 141.00 7.82 1.62 9.44 10000 -connect+select_1_row 192.00 10.79 2.47 13.26 10000 -connect+select_simple 154.00 10.43 2.60 13.03 10000 -count 131.00 0.06 0.00 0.06 100 -count_distinct 131.00 0.29 0.02 0.31 1000 -count_distinct_2 213.00 0.43 0.06 0.49 1000 -count_distinct_big 268.00 8.51 0.17 8.68 120 -count_distinct_group 384.00 1.12 0.07 1.19 1000 -count_distinct_group_on_key 485.00 0.38 0.03 0.41 1000 -count_distinct_group_on_key_parts 381.00 1.23 0.05 1.28 1000 -count_distinct_key_prefix 188.00 0.33 0.05 0.38 1000 -count_group_on_key_parts 332.00 1.20 0.04 1.24 1000 -count_on_key 1809.00 15.49 2.15 17.65 50100 + -create+drop 2924.00 11.10 2.41 13.51 10000 -create_MANY_tables 194.00 6.27 5.72 11.99 5000 -create_index 1.00 0.00 0.00 0.00 8 -create_key+drop 5464.00 11.00 2.30 13.30 10000 -create_table 1.00 0.05 0.00 0.05 31 -delete_all 3191.00 0.01 0.00 0.01 12 -delete_all_many_keys 118.00 0.05 0.04 0.09 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 118.00 0.05 0.04 0.09 128 -delete_key 136.00 3.08 0.59 3.67 10000 -drop_index 0.00 0.00 0.00 0.00 8 -drop_table 0.00 0.02 0.00 0.02 28 -drop_table_when_MANY_tables 599.00 1.39 0.38 1.77 5000 -insert 353.00 103.74 26.20 129.94 350768 -insert_duplicates 120.00 29.00 13.77 42.77 100000 -insert_key 907.00 45.53 60.49 106.02 100000 -insert_many_fields 529.00 1.04 0.19 1.23 2000 -insert_select_1_key 111.00 0.00 0.00 0.00 1 -insert_select_2_keys 180.00 0.00 0.00 0.00 1 -min_max 59.00 0.03 0.00 0.03 60 -min_max_on_key 9941.00 25.90 4.02 29.92 85000 ++ -order_by_big 146.00 22.57 0.64 23.21 10 -order_by_big_key 145.00 26.12 1.23 27.35 10 -order_by_big_key2 133.00 22.62 0.93 23.55 10 -order_by_big_key_desc 145.00 25.80 1.41 27.21 10 -order_by_big_key_diff 139.00 22.46 0.67 23.13 10 -order_by_big_key_prefix 132.00 22.46 0.83 23.29 10 -order_by_key2_diff 7.00 2.09 0.04 2.13 500 -order_by_key_prefix 4.00 1.12 0.06 1.18 500 -order_by_range 4.00 1.11 0.04 1.15 500 -outer_join 4093.00 0.00 0.00 0.00 10 -outer_join_found 4086.00 0.00 0.00 0.00 10 -outer_join_not_found 203500.00 0.00 0.00 0.00 500 + -outer_join_on_key 3961.00 0.00 0.00 0.00 10 -select_1_row 6.00 2.56 0.45 3.01 10000 -select_2_rows 6.00 2.68 0.45 3.13 10000 -select_big 62.00 22.48 3.33 25.81 80 -select_big_str 35.00 10.82 5.73 16.55 10000 -select_column+column 8.00 2.73 0.39 3.12 10000 -select_diff_key 0.00 0.16 0.02 0.18 500 -select_distinct 22.00 2.10 0.26 2.36 800 -select_group 327.00 1.78 0.06 1.84 2711 -select_group_when_MANY_tables 14.00 1.46 0.28 1.74 5000 -select_join 4.00 0.67 0.09 0.76 100 -select_key 245.00 69.03 8.64 77.67 200000 -select_key2 209.00 67.94 8.08 76.02 200000 -select_key2_return_key 201.00 63.19 8.05 71.24 200000 -select_key2_return_prim 204.00 64.84 7.89 72.73 200000 -select_key_prefix 210.00 67.51 8.60 76.11 200000 -select_key_prefix_join 12.00 4.43 0.15 4.58 100 -select_key_return_key 240.00 67.26 8.61 75.87 200000 -select_many_fields 825.00 7.63 0.50 8.13 2000 -select_query_cache 2623.00 3.22 0.37 3.59 10000 -select_query_cache2 2622.00 2.73 0.47 3.20 10000 -select_range 491.00 11.40 0.50 11.90 410 -select_range_key2 21975.00 5.82 0.10 5.92 25010 ++ -select_range_prefix 21993.00 6.20 0.48 6.68 25010 ++ -select_simple 5.00 2.59 0.54 3.13 10000 -select_simple_join 3.00 0.73 0.10 0.83 500 -update_big 6612.00 0.00 0.00 0.00 10 -update_of_key 119.00 16.20 10.81 27.01 50000 -update_of_key_big 333.00 0.21 0.21 0.42 501 -update_of_primary_key_many_keys 6813.00 0.13 0.02 0.15 256 -update_with_key 567.00 90.20 25.08 115.28 300000 -update_with_key_prefix 244.00 29.03 5.64 34.67 100000 -wisc_benchmark 16.00 3.54 1.02 4.56 114 -TOTALS 313344.00 1074.27 238.29 1312.57 2551551 ++++++++ diff --git a/sql-bench/Results/RUN-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/RUN-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 0fea94d667447bcf4b6425e88560f4769a821d74..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,60 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-11 7:20:15 -Running tests on: Linux 2.0.36 i686 -Arguments: --force --fast -Comments: -Limits from: mysql,pg,solid -Server version: PostgreSQL 6.4 - -ATIS: Total time: 300 wallclock secs (17.90 usr 1.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 4 wallclock secs ( 0.79 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 430 wallclock secs ( 7.48 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 379 wallclock secs (43.62 usr 7.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 388 wallclock secs ( 5.92 usr 0.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Estimated total time: 62302 wallclock secs (630.39 usr 65.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 2120 wallclock secs (52.41 usr 5.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 166 wallclock secs (22.23 usr 2.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 1 0.19 0.03 0.00 293 -book-keeping 4184 0.03 0.00 0.00 37 -connect 90 9.98 1.52 0.00 10000 -connect+select 218 15.97 3.53 0.00 10000 -count 153 0.10 0.03 0.00 100 -count_on_key 1773 28.66 3.21 0.00 50100 + -create+drop 36 2.08 0.26 0.00 1000 -create_index 0 0.00 0.00 0.00 7 -create_key+drop 16 1.32 0.09 0.00 1000 -create_table 68 1.44 0.14 0.00 1031 -delete_big 59 0.01 0.00 0.00 15 -delete_key 11 0.20 0.15 0.00 500 -drop_index 1 0.00 0.01 0.00 7 -drop_table 16 0.58 0.12 0.00 1028 -insert 1093 198.15 21.77 0.00 350768 -insert_duplicates 169 48.44 5.24 0.00 300000 -insert_key 956 57.05 7.08 0.00 100000 -insert_many_fields 120 1.46 0.12 0.00 2000 -min_max 48 0.03 0.00 0.00 60 -min_max_on_key 2085 18.44 2.02 0.00 73000 + -order_by 209 26.70 1.83 0.00 10 -order_by_key 208 26.76 1.38 0.00 10 -select 44 10.36 1.24 0.00 20000 -select_big 108 33.96 2.77 0.00 10080 -select_distinct 70 3.23 0.22 0.00 800 -select_group 7804 2.48 0.36 0.00 3101 -select_join 60 6.07 0.42 0.00 200 -select_key 547 123.81 13.35 0.00 200000 -select_key_prefix 550 123.88 13.39 0.00 200000 -select_many_fields 308 6.02 0.52 0.00 2000 -select_range 733 5.47 0.69 0.00 25420 + -select_range_prefix 720 4.95 0.56 0.00 25010 + -select_simple_join 44 1.11 0.12 0.00 500 -update_key 11 0.33 0.03 0.00 500 -update_key_big 343 0.34 0.05 0.00 501 -update_of_key 2292 0.21 0.03 0.00 256 -wisc_benchmark 29 5.00 0.27 0.00 114 -TOTALS 25177 764.81 82.55 0.00 1389448 ++++ diff --git a/sql-bench/Results/RUN-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/RUN-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 8326a1864c356f380222aa615f99bb4b35f675bc..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,104 +0,0 @@ -Benchmark DBD suite: 2.13 -Date of test: 2001-06-12 18:14:29 -Running tests on: Linux 2.4.2-64GB-SMP i686 -Arguments: --fast -Comments: Intel Xeon, 2x550 Mhz, 512M, pg started with -o -F -Limits from: mysql,pg -Server version: PostgreSQL version 7.1.2 - -ATIS: Total time: 105 wallclock secs (12.13 usr 1.14 sys + 0.00 cusr 0.00 csys = 13.27 CPU) -alter-table: Total time: 51 wallclock secs ( 0.63 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.69 CPU) -big-tables: Total time: 1356 wallclock secs ( 8.41 usr 0.76 sys + 0.00 cusr 0.00 csys = 9.17 CPU) -connect: Total time: 550 wallclock secs (52.92 usr 14.30 sys + 0.00 cusr 0.00 csys = 67.22 CPU) -create: Total time: 9195 wallclock secs (31.22 usr 11.10 sys + 0.00 cusr 0.00 csys = 42.32 CPU) -insert: Estimated total time: 21187 wallclock secs (884.26 usr 225.15 sys + 0.00 cusr 0.00 csys = 1109.40 CPU) -select: Estimated total time: 12852 wallclock secs (74.09 usr 9.62 sys + 0.00 cusr 0.00 csys = 83.71 CPU) -wisconsin: Total time: 64 wallclock secs (13.06 usr 3.32 sys + 0.00 cusr 0.00 csys = 16.38 CPU) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 48.00 0.32 0.03 0.35 992 -book-keeping 3262.00 0.03 0.00 0.03 25 -connect 140.00 7.94 1.85 9.79 10000 -connect+select_1_row 190.00 10.78 2.23 13.01 10000 -connect+select_simple 155.00 10.57 2.71 13.28 10000 -count 132.00 0.04 0.00 0.04 100 -count_distinct 131.00 0.34 0.05 0.39 1000 -count_distinct_2 213.00 0.38 0.03 0.41 1000 -count_distinct_big 269.00 8.53 0.27 8.80 120 -count_distinct_group 385.00 1.14 0.09 1.23 1000 -count_distinct_group_on_key 209.00 0.35 0.09 0.44 1000 -count_distinct_group_on_key_parts 382.00 1.16 0.06 1.22 1000 -count_distinct_key_prefix 188.00 0.38 0.02 0.40 1000 -count_group_on_key_parts 332.00 1.14 0.03 1.17 1000 -count_on_key 1774.00 14.24 1.80 16.04 50100 + -create+drop 2924.00 11.10 2.41 13.51 10000 -create_MANY_tables 194.00 6.27 5.72 11.99 5000 -create_index 0.00 0.00 0.00 0.00 8 -create_key+drop 5464.00 11.00 2.30 13.30 10000 -create_table 1.00 0.03 0.00 0.03 31 -delete_all 11.00 0.01 0.01 0.02 12 -delete_all_many_keys 3.00 0.05 0.00 0.05 1 -delete_big 2.00 0.01 0.00 0.01 1 -delete_big_many_keys 3.00 0.05 0.00 0.05 128 -delete_key 11.00 3.02 0.37 3.39 10000 -drop_index 1.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 599.00 1.39 0.38 1.77 5000 -insert 359.00 104.39 28.15 132.54 350768 -insert_duplicates 111.00 28.41 9.26 37.67 100000 -insert_key 895.00 45.94 68.46 114.40 100000 -insert_many_fields 525.00 1.01 0.18 1.19 2000 -insert_select_1_key 45.00 0.00 0.00 0.00 1 -insert_select_2_keys 77.00 0.01 0.00 0.01 1 -min_max 58.00 0.01 0.00 0.01 60 -min_max_on_key 9948.00 29.82 5.49 35.30 85000 ++ -order_by_big 147.00 22.48 0.61 23.09 10 -order_by_big_key 150.00 25.91 1.24 27.15 10 -order_by_big_key2 137.00 22.59 0.71 23.30 10 -order_by_big_key_desc 147.00 25.81 1.23 27.04 10 -order_by_big_key_diff 143.00 22.68 0.55 23.23 10 -order_by_big_key_prefix 133.00 22.64 0.62 23.26 10 -order_by_key2_diff 7.00 2.07 0.04 2.11 500 -order_by_key_prefix 3.00 1.48 0.03 1.51 500 -order_by_range 4.00 1.04 0.04 1.08 500 -outer_join 253.00 0.00 0.00 0.00 10 -outer_join_found 243.00 0.00 0.00 0.00 10 -outer_join_not_found 242.00 0.00 0.01 0.01 500 -outer_join_on_key 238.00 0.00 0.00 0.00 10 -select_1_row 6.00 2.65 0.43 3.08 10000 -select_2_rows 7.00 2.81 0.40 3.21 10000 -select_big 56.00 22.70 2.29 24.99 80 -select_big_str 37.00 12.51 5.97 18.48 10000 -select_column+column 8.00 2.90 0.33 3.23 10000 -select_diff_key 1.00 0.21 0.00 0.21 500 -select_distinct 23.00 1.91 0.34 2.25 800 -select_group 318.00 1.54 0.12 1.66 2711 -select_group_when_MANY_tables 14.00 1.46 0.28 1.74 5000 -select_join 4.00 0.59 0.10 0.69 100 -select_key 213.00 67.07 8.38 75.45 200000 -select_key2 192.00 67.06 8.24 75.30 200000 -select_key2_return_key 183.00 63.93 8.32 72.25 200000 -select_key2_return_prim 188.00 64.56 8.71 73.27 200000 -select_key_prefix 192.00 67.39 7.56 74.95 200000 -select_key_prefix_join 12.00 4.47 0.12 4.59 100 -select_key_return_key 208.00 65.98 8.96 74.94 200000 -select_many_fields 823.00 7.36 0.55 7.91 2000 -select_query_cache 2643.00 3.20 0.43 3.63 10000 -select_query_cache2 2642.00 3.26 0.43 3.69 10000 -select_range 481.00 11.87 1.04 12.91 410 -select_range_key2 47.00 6.56 0.67 7.23 25010 -select_range_prefix 48.00 6.63 0.65 7.28 25010 -select_simple 5.00 2.74 0.38 3.12 10000 -select_simple_join 4.00 0.71 0.18 0.89 500 -update_big 3883.00 0.01 0.00 0.01 10 -update_of_key 90.00 14.87 5.98 20.85 50000 -update_of_key_big 647.00 0.12 0.06 0.18 501 -update_of_primary_key_many_keys 835.00 0.10 0.09 0.19 256 -update_with_key 470.00 87.85 41.80 129.65 300000 -update_with_key_prefix 170.00 31.13 15.28 46.41 100000 -wisc_benchmark 18.00 3.58 0.20 3.78 114 -TOTALS 45356.00 1076.29 265.36 1341.64 2551576 +++ diff --git a/sql-bench/Results/RUN-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/RUN-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 335c1c9276e2a5bed71655d4f95024b7298cc558..0000000000000000000000000000000000000000 --- a/sql-bench/Results/RUN-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,59 +0,0 @@ -Benchmark DBD suite: 2.0b -Date of test: 1999-03-06 12:47:43 -Running tests on: Linux 2.0.36 i686 -Arguments: --force -Comments: -Limits from: mysql,pg,solid -Server version: SOLID Server - v.02.30.0026 (Linux ix86) - -ATIS: Total time: 701 wallclock secs (54.93 usr 3.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -alter-table: Total time: 8 wallclock secs ( 1.04 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -big-tables: Total time: 20 wallclock secs ( 8.71 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -connect: Total time: 236 wallclock secs (149.92 usr 23.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -create: Total time: 59 wallclock secs ( 7.00 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -insert: Estimated total time: 457496 wallclock secs (1277.60 usr 88.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -select: Estimated total time: 9245 wallclock secs (91.67 usr 7.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -wisconsin: Total time: 226 wallclock secs (37.18 usr 2.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -All 8 test executed successfully -Tests with estimated time have a + at end of line - -Totals per operation: -Operation seconds usr sys cpu tests -alter_table_add 3 0.19 0.02 0.00 293 -connect 84 58.46 10.25 0.00 10000 -connect+select 105 66.76 11.09 0.00 10000 -count 1213 0.10 0.00 0.00 100 -count_on_key 10121 48.79 4.19 0.00 50100 + -create+drop 18 2.08 0.19 0.00 1000 -create_index 0 0.01 0.00 0.00 7 -create_key+drop 20 2.03 0.15 0.00 1000 -create_table 9 1.36 0.06 0.00 1031 -delete_big 417 0.00 0.00 0.00 15 -delete_key 29 0.43 0.06 0.00 500 -drop_index 1 0.00 0.00 0.00 7 -drop_table 9 0.70 0.09 0.00 1028 -insert 1267 303.56 25.66 0.00 350768 -insert_duplicates 91 59.65 3.36 0.00 300000 -insert_key 1153 85.87 7.46 0.00 100000 -insert_many_fields 9 1.63 0.12 0.00 2000 -min_max 406 0.03 0.00 0.00 60 -min_max_on_key 114 33.07 2.41 0.00 73000 -order_by 367 116.72 6.11 0.00 10 -order_by_key 375 120.22 7.12 0.00 10 -select 27 14.11 0.75 0.00 20000 -select_big 335 131.33 7.72 0.00 10080 -select_distinct 169 11.26 0.54 0.00 800 -select_group 1269 4.50 0.30 0.00 3101 -select_join 408 28.07 1.80 0.00 200 -select_key 573 251.14 17.44 0.00 200000 -select_key_prefix 545 216.93 15.32 0.00 200000 -select_many_fields 10 7.06 0.16 0.00 2000 -select_range 200311 10.49 1.78 0.00 25410 ++ -select_range_prefix 201289 10.39 0.03 0.00 25000 ++ -select_simple_join 37 3.65 0.22 0.00 500 -update_key 2 0.42 0.05 0.00 500 -update_key_big 818 0.30 0.02 0.00 501 -update_of_key 3015 0.28 0.02 0.00 256 -wisc_benchmark 55 10.89 0.42 0.00 114 -TOTALS 424674 1602.48 124.91 0.00 1389391 +++++ diff --git a/sql-bench/Results/alter-table-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/alter-table-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 96fa7b183dce728e8aaaae41baa5dbb7a70f4e98..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-18 21:09:05 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000)19 secs ( 0.68 usr 0.28 sys = 0.96 cpu) - -Time for alter_table_add (246): 11 secs ( 0.07 usr 0.10 sys = 0.17 cpu) - -Time for create_index (8): 1 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Time for drop_index (8): 1 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Time for alter_table_drop (123): 8 secs ( 0.01 usr 0.08 sys = 0.09 cpu) - -Total time: 40 secs ( 0.76 usr 0.47 sys = 1.23 cpu) diff --git a/sql-bench/Results/alter-table-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql b/sql-bench/Results/alter-table-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql deleted file mode 100644 index 727bcb6c148736050fc5562af03d187ec25bb210..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-AdabasD-Linux_2.0.35_i686-cmp-adabasd,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-20 19:19:50 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000)18 secs ( 0.26 usr 0.08 sys = 0.34 cpu) - -Time for alter_table_add (246): 10 secs ( 0.02 usr 0.02 sys = 0.04 cpu) - -Time for create_index (8): 1 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Time for drop_index (8): 1 secs ( 0.00 usr 0.01 sys = 0.01 cpu) - -Time for alter_table_drop (123): 10 secs ( 0.00 usr 0.07 sys = 0.07 cpu) - -Total time: 40 secs ( 0.29 usr 0.18 sys = 0.47 cpu) diff --git a/sql-bench/Results/alter-table-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/alter-table-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 0213c1a4d011691272dfed4b14ff15c1a38de07f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server '2.1' at 2000-11-23 16:22:34 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 4 wallclock secs ( 0.42 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 1018 wallclock secs ( 0.71 usr 0.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 5 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1033 wallclock secs ( 1.13 usr 0.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/alter-table-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 47ae8e2c56e8388e47036599ce7c3e518ac35bbf..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,6 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-22 8:43:14 - -Some of the servers given with --cmp or --server doesn't support ALTER TABLE -Test aborted - -Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/alter-table-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index eed78d5d4723d1e2a7282dd5cef77c340a38a82b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:13:41 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.15 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 925 wallclock secs ( 0.47 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 15 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 15 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 708 wallclock secs ( 0.21 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1664 wallclock secs ( 0.84 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/alter-table-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 6a428bcb20b34f4e524d1cf9170432316b13037c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:55:25 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 secs ( 0.03 usr 0.14 sys = 0.17 cpu) - -Time for alter_table_add (246): 21 secs ( 0.03 usr 0.08 sys = 0.11 cpu) - -Time for create_index (8): 2 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Time for drop_index (8): 1 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Time for alter_table_drop (123): 15 secs ( 0.02 usr 0.11 sys = 0.13 cpu) - -Total time: 39 secs ( 0.08 usr 0.33 sys = 0.41 cpu) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/alter-table-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index e226cbd41c550a852cae3c946ba84017fc91a8d1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 22:59:02 - -Testing of ALTER TABLE -Testing with 300 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.06 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (293): 21 wallclock secs ( 0.08 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (7): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (7): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 23 wallclock secs ( 0.14 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 62dabc44bbfe7a3bfc16c1e36cc75c51235c1f66..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,6 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:49:04 - -Some of the servers given with --cmp or --server doesn't support ALTER TABLE -Test aborted - -Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index 40d0c158606831a48039ee78fe590530c57ce1ca..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:27:01 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.05 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 187 wallclock secs ( 0.18 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 150 wallclock secs ( 0.05 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 345 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/alter-table-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 1be3d062236a97e4099f3a4772c8d19b7f33baed..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:11:26 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.09 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (246): 28 wallclock secs ( 0.08 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (8): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (8): 3 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_drop (123): 20 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 52 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index efc216dac99779e9d136434d2091be30330552ea..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:04:11 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.07 CPU) - -Time for alter_table_add (992): 261 wallclock secs ( 0.09 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.15 CPU) - -Time for create_index (8): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 199 wallclock secs ( 0.02 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.05 CPU) - -Total time: 471 wallclock secs ( 0.16 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.27 CPU) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/alter-table-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index f0deae1c1c49e1ef47a53c834bd04932029c0284..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:30:52 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.01 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.03 CPU) - -Time for alter_table_add (992): 134 wallclock secs ( 0.12 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.15 CPU) - -Time for create_index (8): 3 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 102 wallclock secs ( 0.04 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.06 CPU) - -Total time: 241 wallclock secs ( 0.17 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.24 CPU) diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/alter-table-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 1d58effc1a5cd51525fcec485fe21d27042e39fe..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:36:21 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.06 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 154 wallclock secs ( 0.18 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 3 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 116 wallclock secs ( 0.07 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 277 wallclock secs ( 0.33 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-NT_4.0 b/sql-bench/Results/alter-table-mysql-NT_4.0 deleted file mode 100644 index 98863586928e18e54e3425d3bc5469681077b5a9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-NT_4.0 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 13:10:14 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.13 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 1246 wallclock secs ( 0.52 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 26 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 27 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 1043 wallclock secs ( 0.27 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2342 wallclock secs ( 0.91 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/alter-table-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index 7a0e094818675d27bb910547461f376d09196869..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:14:52 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.09 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 775 wallclock secs ( 0.47 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 12 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 534 wallclock secs ( 0.22 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1333 wallclock secs ( 0.81 usr 0.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4m b/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4m deleted file mode 100644 index cfd5e7ab2d40f9b852cef8b54cf364894919356d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 0:18:01 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 3 wallclock secs ( 0.42 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 1482 wallclock secs ( 1.50 usr 0.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 24 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 24 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 1066 wallclock secs ( 0.71 usr 0.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2599 wallclock secs ( 2.67 usr 1.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4u b/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4u deleted file mode 100644 index f43ab028645f0be2eb27a66b11c82912a6ac089d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 20:52:54 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.08 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 821 wallclock secs ( 0.23 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 10 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 555 wallclock secs ( 0.10 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1397 wallclock secs ( 0.41 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql-SunOS_5.8_sun4u b/sql-bench/Results/alter-table-mysql-SunOS_5.8_sun4u deleted file mode 100644 index e0581ad372ae825dfdd983a409c54ab7cf660b8a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 1:09:06 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.07 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.15 CPU) - -Time for alter_table_add (992): 516 wallclock secs ( 0.09 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.19 CPU) - -Time for create_index (8): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 354 wallclock secs ( 0.06 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.12 CPU) - -Total time: 886 wallclock secs ( 0.22 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.46 CPU) diff --git a/sql-bench/Results/alter-table-mysql-win98 b/sql-bench/Results/alter-table-mysql-win98 deleted file mode 100644 index 922aa8906a925dc8232a543441bc2a46ca47cb91..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql-win98 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 1:51:14 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 1.09 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 1046 wallclock secs (1046.38 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 17 wallclock secs (16.70 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 17 wallclock secs (16.64 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 773 wallclock secs (772.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1855 wallclock secs (1854.89 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/alter-table-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index ee1506b7cc1457b80f67999589ac27f48cc77d18..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,6 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:08:30 - -Some of the servers given with --cmp or --server doesn't support ALTER TABLE -Test aborted - -Total time: 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-mysql_odbc-win98 b/sql-bench/Results/alter-table-mysql_odbc-win98 deleted file mode 100644 index 9da9bcfc060f38224857d5336020847b4cf168c4..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-mysql_odbc-win98 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 15:47:11 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 3 wallclock secs ( 3.18 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_add (992): 1174 wallclock secs (1174.09 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for create_index (8): 22 wallclock secs (22.19 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 22 wallclock secs (22.08 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for alter_table_drop (496): 964 wallclock secs (964.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2185 wallclock secs (2185.65 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/alter-table-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/alter-table-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 39ecbd970058522600cdfd27519abac094bba875..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 0:39:16 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 3 wallclock secs ( 0.64 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (246): 8 wallclock secs ( 0.20 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (8): 0 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (8): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 12 wallclock secs ( 0.87 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/alter-table-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 1ba6134b44f92a7a8445b6ac21158a2e9db0776c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 8:12:23 - -Testing of ALTER TABLE -Testing with 254 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 4 wallclock secs ( 0.81 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (246): 8 wallclock secs ( 0.31 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (8): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (8): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 13 wallclock secs ( 1.14 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/alter-table-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 5d8a624b7a6d59d45179223dc6549715e4dab380..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 19:14:16 - -Testing of ALTER TABLE -Testing with 300 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 2 wallclock secs ( 0.65 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (293): 1 wallclock secs ( 0.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (7): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (7): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 4 wallclock secs ( 0.80 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/alter-table-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 06c5236dca02f54a93f5ef136f91b1742cb64975..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:16:18 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.27 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.31 CPU) - -Time for alter_table_add (992): 48 wallclock secs ( 0.31 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.35 CPU) - -Time for create_index (8): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 50 wallclock secs ( 0.58 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.66 CPU) diff --git a/sql-bench/Results/alter-table-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/alter-table-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index baa92dc453270dc96344626e1237db694fc852a2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:25:18 - -Testing of ALTER TABLE -Testing with 300 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 2 wallclock secs ( 0.60 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (293): 1 wallclock secs ( 0.19 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (7): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (7): 1 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 4 wallclock secs ( 0.79 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/alter-table-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/alter-table-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index bb492b6b9899a53d13cff6d74b75c36fa08d79b1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 17:54:48 - -Testing of ALTER TABLE -Testing with 1000 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 1 wallclock secs ( 0.30 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.33 CPU) - -Time for alter_table_add (992): 48 wallclock secs ( 0.32 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.35 CPU) - -Time for create_index (8): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop_index (8): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 51 wallclock secs ( 0.63 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.69 CPU) diff --git a/sql-bench/Results/alter-table-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/alter-table-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index c23922e273cc6f8a2f0abfd4aba266ac67719c6c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/alter-table-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 12:59:26 - -Testing of ALTER TABLE -Testing with 300 columns and 1000 rows in 20 steps -Insert data into the table -Time for insert (1000) 4 wallclock secs ( 0.83 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for alter_table_add (293): 3 wallclock secs ( 0.19 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_index (7): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for drop_index (7): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 8 wallclock secs ( 1.04 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/big-tables-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 5f92b17ef310610e27bd4086dbb64ab1e26ac5b1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-18 21:09:46 - -Testing of some unusual tables -All tests are done 1000 times with 254 fields - -Testing table with 254 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 15 secs ( 4.52 usr 4.36 sys = 8.88 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 20 secs ( 3.56 usr 5.09 sys = 8.65 cpu) - -Testing insert VALUES() -Time to insert_many_fields(1000): 26 secs ( 0.43 usr 0.65 sys = 1.08 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 28 secs ( 0.30 usr 0.87 sys = 1.17 cpu) - -Total time: 89 secs ( 8.81 usr 10.98 sys = 19.79 cpu) diff --git a/sql-bench/Results/big-tables-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/big-tables-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 02e00ce61a56e4dd950285a55403fa718ddec0f6..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server '2.1' at 2000-11-23 17:15:31 - -Testing of some unusual tables -All tests are done 1000 times with 150 fields - -Testing table with 150 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 11 wallclock secs ( 1.97 usr 0.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 14 wallclock secs ( 0.35 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 23 wallclock secs ( 0.34 usr 0.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 49 wallclock secs ( 2.66 usr 1.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/big-tables-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 8201e856d391d24f5aebf938d26ebe3ce7907bdc..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-22 8:43:14 - -Testing of some unusual tables -All tests are done 10000 times with 75 fields - -Testing table with 75 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 52 wallclock secs (26.83 usr 3.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 56 wallclock secs (27.80 usr 3.86 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(10000): 20 wallclock secs ( 7.24 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 17 wallclock secs ( 0.70 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 145 wallclock secs (62.58 usr 8.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/big-tables-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 6dd80f33e7e9e4c3ea8d3fb3986088af210ea7c7..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:41:25 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 69 wallclock secs (14.62 usr 24.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 84 wallclock secs (15.08 usr 23.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 14 wallclock secs ( 1.04 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 32 wallclock secs ( 0.21 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 200 wallclock secs (30.97 usr 48.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/big-tables-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index fbb59a077cf7530ea5ec063c855c453326a28e30..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:56:05 - -Testing of some unusual tables -All tests are done 1000 times with 254 fields - -Testing table with 254 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 6 secs ( 1.21 usr 3.68 sys = 4.89 cpu) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 7 secs ( 1.63 usr 2.99 sys = 4.62 cpu) - -Testing insert VALUES() -Time to insert_many_fields(1000): 2 secs ( 0.37 usr 0.17 sys = 0.54 cpu) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 2 secs ( 0.06 usr 0.08 sys = 0.14 cpu) - -Total time: 17 secs ( 3.29 usr 6.92 sys = 10.21 cpu) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/big-tables-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index f8ec1afe3e916379d3af67ef8af39b164d07d9d6..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 22:59:26 - -Testing of some unusual tables -All tests are done 1000 times with 300 fields - -Testing table with 300 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 4 wallclock secs ( 2.10 usr 1.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 7 wallclock secs ( 1.92 usr 1.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 1 wallclock secs ( 0.47 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 0.08 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 15 wallclock secs ( 4.57 usr 2.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 8964702327492f06f037ea478d44911fb50d8e20..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:49:05 - -Testing of some unusual tables -All tests are done 10000 times with 75 fields - -Testing table with 75 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 20 wallclock secs (11.98 usr 2.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 24 wallclock secs (13.20 usr 2.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(10000): 11 wallclock secs ( 6.53 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 8 wallclock secs ( 0.64 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 63 wallclock secs (32.36 usr 5.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index c9775e7ef887c2b3bbaf1febf4a02d347d544d8e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:32:47 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 10 wallclock secs ( 3.45 usr 4.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 14 wallclock secs ( 3.39 usr 4.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 0.31 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 9 wallclock secs ( 0.03 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 38 wallclock secs ( 7.19 usr 9.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/big-tables-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index d5e04b416e284136bbc70940eb7786c10e11c287..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:12:19 - -Testing of some unusual tables -All tests are done 1000 times with 254 fields - -Testing table with 254 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 5 wallclock secs ( 1.97 usr 1.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 5 wallclock secs ( 1.99 usr 1.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 2 wallclock secs ( 0.39 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 2 wallclock secs ( 0.09 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 14 wallclock secs ( 4.45 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index fe639de672b6ec25fcaad736a617e486cd077910..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:12:02 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 9 wallclock secs ( 4.67 usr 4.30 sys + 0.00 cusr 0.00 csys = 8.97 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 13 wallclock secs ( 4.34 usr 3.47 sys + 0.00 cusr 0.00 csys = 7.81 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 0.42 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.49 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 7 wallclock secs ( 0.03 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.14 CPU) - -Total time: 33 wallclock secs ( 9.47 usr 7.95 sys + 0.00 cusr 0.00 csys = 17.42 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/big-tables-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index afc03860f18e63d0f7421614cddad8f5b1f5fb57..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:35:26 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 8 wallclock secs ( 4.72 usr 2.37 sys + 0.00 cusr 0.00 csys = 7.09 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 11 wallclock secs ( 4.46 usr 2.73 sys + 0.00 cusr 0.00 csys = 7.19 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 2 wallclock secs ( 0.15 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.20 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 0.04 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.06 CPU) - -Total time: 27 wallclock secs ( 9.38 usr 5.17 sys + 0.00 cusr 0.00 csys = 14.55 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/big-tables-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 97f66029696915c6aa93d04a0c42eba943c23a5c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:40:58 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 11 wallclock secs ( 4.59 usr 4.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 14 wallclock secs ( 3.79 usr 4.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 0.29 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 9 wallclock secs ( 0.03 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 39 wallclock secs ( 8.71 usr 8.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-NT_4.0 b/sql-bench/Results/big-tables-mysql-NT_4.0 deleted file mode 100644 index 7f3510f396c607aae9f5f77ca48cd17f77bb885c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-NT_4.0 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 13:50:25 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 19 wallclock secs ( 8.02 usr 9.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 35 wallclock secs ( 8.78 usr 8.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 0.48 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 19 wallclock secs ( 0.16 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 79 wallclock secs (17.44 usr 18.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/big-tables-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index ee26135c77e3949090a849820fc3a1d0303b4637..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:37:07 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 37 wallclock secs (13.80 usr 14.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 52 wallclock secs (14.27 usr 15.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 13 wallclock secs ( 0.90 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 27 wallclock secs ( 0.11 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 130 wallclock secs (29.10 usr 30.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4m b/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4m deleted file mode 100644 index 44a5e0efb6b41f52c0c541e6831b3b22d3a2b6dc..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 1:01:22 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 83 wallclock secs (25.25 usr 45.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 110 wallclock secs (26.77 usr 45.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 21 wallclock secs ( 2.97 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 45 wallclock secs ( 0.51 usr 0.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 260 wallclock secs (55.55 usr 91.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4u b/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4u deleted file mode 100644 index 7a53b2f8eab146f09c71a4d06610e6fef558d2ce..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 21:16:12 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 24 wallclock secs ( 7.27 usr 12.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 31 wallclock secs ( 7.97 usr 12.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 6 wallclock secs ( 0.47 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 12 wallclock secs ( 0.15 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 73 wallclock secs (15.87 usr 24.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-SunOS_5.8_sun4u b/sql-bench/Results/big-tables-mysql-SunOS_5.8_sun4u deleted file mode 100644 index a9f7a061cc9d9873c11bb3dcab46c2a635f7c959..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 1:23:52 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 29 wallclock secs ( 9.21 usr 16.18 sys + 0.00 cusr 0.00 csys = 25.39 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 36 wallclock secs ( 9.48 usr 15.82 sys + 0.00 cusr 0.00 csys = 25.30 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 6 wallclock secs ( 0.45 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.56 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 13 wallclock secs ( 0.04 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.15 CPU) - -Total time: 84 wallclock secs (19.18 usr 32.22 sys + 0.00 cusr 0.00 csys = 51.40 CPU) diff --git a/sql-bench/Results/big-tables-mysql-win98 b/sql-bench/Results/big-tables-mysql-win98 deleted file mode 100644 index dc57828441f15a0915e0c75b600f7160080301ab..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql-win98 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 2:24:33 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 55 wallclock secs (55.36 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 69 wallclock secs (68.88 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 6 wallclock secs ( 6.20 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 19 wallclock secs (18.51 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 151 wallclock secs (150.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/big-tables-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 46aae6ac429b8899538a4fa8954f32255208fbc9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:08:30 - -Testing of some unusual tables -All tests are done 10000 times with 75 fields - -Testing table with 75 fields -Testing select * from table with 1 record -Time to select_many_fields(10000): 21 wallclock secs (11.87 usr 2.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(10000): 23 wallclock secs (13.15 usr 2.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(10000): 11 wallclock secs ( 6.45 usr 0.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(10000): 8 wallclock secs ( 0.67 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 63 wallclock secs (32.15 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql_odbc-win98 b/sql-bench/Results/big-tables-mysql_odbc-win98 deleted file mode 100644 index 87ac9b1c570ba81fdfa6822bd827f841deae97ed..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-mysql_odbc-win98 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 16:28:33 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 99 wallclock secs (98.59 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 111 wallclock secs (111.55 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 9 wallclock secs ( 8.85 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 28 wallclock secs (27.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 249 wallclock secs (248.70 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/big-tables-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index c92c28fdeffea2bd739c27fefa5afdcac7869702..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 0:39:28 - -Testing of some unusual tables -All tests are done 1000 times with 254 fields - -Testing table with 254 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 20 wallclock secs ( 1.39 usr 8.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 20 wallclock secs ( 9.99 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 0.91 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 1.15 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 47 wallclock secs (13.47 usr 8.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/big-tables-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index ecd01e24826c670fa65177cf2b200e8cbe4fe441..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 8:12:38 - -Testing of some unusual tables -All tests are done 1000 times with 254 fields - -Testing table with 254 fields -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select * from table with 1 record -Time to select_many_fields(1000): 20 wallclock secs ( 0.57 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 20 wallclock secs ( 9.98 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 3 wallclock secs ( 0.85 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 4 wallclock secs ( 1.19 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 49 wallclock secs (12.68 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/big-tables-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 4f83b61778c69eda68900ae4c2b68eca9da8d43d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 19:14:20 - -Testing of some unusual tables -All tests are done 1000 times with 300 fields - -Testing table with 300 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 170 wallclock secs ( 3.13 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 177 wallclock secs ( 3.12 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 53 wallclock secs ( 0.61 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 70 wallclock secs ( 0.76 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 470 wallclock secs ( 7.63 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/big-tables-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 4ae51da87c6799d4546ccaf9b9b077ee5e53b1cc..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:17:10 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 354 wallclock secs ( 3.70 usr 0.19 sys + 0.00 cusr 0.00 csys = 3.89 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 471 wallclock secs ( 3.93 usr 0.31 sys + 0.00 cusr 0.00 csys = 4.24 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 230 wallclock secs ( 0.34 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.46 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 299 wallclock secs ( 0.70 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.77 CPU) - -Total time: 1355 wallclock secs ( 8.68 usr 0.69 sys + 0.00 cusr 0.00 csys = 9.37 CPU) diff --git a/sql-bench/Results/big-tables-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/big-tables-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 70038af27f1653b24fa7449646510067c21e060c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:25:22 - -Testing of some unusual tables -All tests are done 1000 times with 300 fields - -Testing table with 300 fields -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select * from table with 1 record -Time to select_many_fields(1000): 150 wallclock secs ( 2.78 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 158 wallclock secs ( 3.24 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 51 wallclock secs ( 0.60 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 69 wallclock secs ( 0.86 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 430 wallclock secs ( 7.48 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/big-tables-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/big-tables-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 1758aac5e3832765197acd5c2501bb2bb4a62da8..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 17:55:39 - -Testing of some unusual tables -All tests are done 1000 times with 1000 fields - -Testing table with 1000 fields -Time for book-keeping (1): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing select * from table with 1 record -Time to select_many_fields(1000): 353 wallclock secs ( 3.56 usr 0.31 sys + 0.00 cusr 0.00 csys = 3.87 CPU) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 470 wallclock secs ( 3.80 usr 0.24 sys + 0.00 cusr 0.00 csys = 4.04 CPU) - -Testing insert VALUES() -Time to insert_many_fields(1000): 229 wallclock secs ( 0.38 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.45 CPU) - -Time for book-keeping (1): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 296 wallclock secs ( 0.63 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.74 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1356 wallclock secs ( 8.41 usr 0.76 sys + 0.00 cusr 0.00 csys = 9.17 CPU) diff --git a/sql-bench/Results/big-tables-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/big-tables-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 22fe0b710c483ea6c27fc213f6faafd5dc527af5..0000000000000000000000000000000000000000 --- a/sql-bench/Results/big-tables-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 12:59:34 - -Testing of some unusual tables -All tests are done 1000 times with 300 fields - -Testing table with 300 fields -Testing select * from table with 1 record -Time to select_many_fields(1000): 5 wallclock secs ( 3.41 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 5 wallclock secs ( 3.65 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert VALUES() -Time to insert_many_fields(1000): 4 wallclock secs ( 0.72 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 0.91 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 20 wallclock secs ( 8.71 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/connect-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/connect-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index a4558059cb65bc156a063ac06005c608e52ff624..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-18 21:11:15 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 164 secs (29.40 usr 100.88 sys = 130.28 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 295 secs (22.17 usr 121.92 sys = 144.09 cpu) - -Testing select 1 row from table -Time to select (10000): 32 secs ( 3.68 usr 7.99 sys = 11.67 cpu) - -Testing select 2 rows from table -Time to select (10000): 31 secs ( 4.15 usr 8.03 sys = 12.18 cpu) - -Testing retrieval of big records (2000 bytes) -Time to select_big (10000): 44 secs ( 6.41 usr 11.98 sys = 18.39 cpu) - -Total time: 570 secs (65.81 usr 250.86 sys = 316.67 cpu) diff --git a/sql-bench/Results/connect-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/connect-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 23d263a7076605f1dd4944f377194d7ddca82f78..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server '2.1' at 2000-11-23 19:22:47 - -Testing the speed of connecting to the server and sending of data -All tests are done 1000 times - -Testing connection/disconnect -Time to connect (1000): 4 wallclock secs ( 0.87 usr 0.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (1000): 7 wallclock secs ( 1.37 usr 1.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (1000): 2 wallclock secs ( 0.37 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (1000): 1 wallclock secs ( 0.41 usr 0.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test select with aritmetic (+) -Time for select_column+column (1000): 2 wallclock secs ( 0.35 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 16 wallclock secs ( 3.38 usr 3.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/connect-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index ecd8af20ab1c3a329d8b8525d188aa8da4873724..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-22 8:45:40 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 19 wallclock secs (14.02 usr 1.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 24 wallclock secs (15.66 usr 2.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 4 wallclock secs ( 1.60 usr 0.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 4 wallclock secs ( 1.72 usr 0.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (32000 bytes) -Time to select_big (10000): 34 wallclock secs (14.34 usr 1.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 85 wallclock secs (47.36 usr 7.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/connect-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 0071b0e12ccbb943100cc29b30b460f6e3e36c3e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:44:45 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 35 wallclock secs (18.98 usr 4.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 44 wallclock secs (20.27 usr 5.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 6 wallclock secs ( 1.14 usr 1.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 49 wallclock secs (21.11 usr 6.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 9 wallclock secs ( 1.48 usr 1.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 10 wallclock secs ( 1.61 usr 1.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 85 wallclock secs (30.19 usr 11.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 238 wallclock secs (94.79 usr 32.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/connect-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index adc608709080828ac8018752da9aec4e02e5479c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:56:24 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 53 secs ( 6.27 usr 42.43 sys = 48.70 cpu) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 59 secs ( 8.21 usr 42.61 sys = 50.82 cpu) - -Testing select 1 row from table -Time to select (10000): 5 secs ( 0.44 usr 2.67 sys = 3.11 cpu) - -Testing select 2 rows from table -Time to select (10000): 7 secs ( 0.35 usr 3.08 sys = 3.43 cpu) - -Testing retrieval of big records (2000 bytes) -Time to select_big (10000): 10 secs ( 2.35 usr 4.83 sys = 7.18 cpu) - -Total time: 134 secs (17.63 usr 95.64 sys = 113.27 cpu) diff --git a/sql-bench/Results/connect-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/connect-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 545df086c0c14ec3ee8cb7e2c227a77a0984f2c5..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 22:59:43 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 15 wallclock secs ( 8.66 usr 1.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 19 wallclock secs ( 9.61 usr 2.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 1 row from table -Time to select (10000): 3 wallclock secs ( 0.74 usr 0.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 2 rows from table -Time to select (10000): 5 wallclock secs ( 1.01 usr 0.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing retrieval of big records (7000 bytes) -Time to select_big (10000): 11 wallclock secs ( 5.81 usr 0.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 53 wallclock secs (25.85 usr 5.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/connect-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/connect-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 82f6128e7d75d6de58c627d3548b6295385143ac..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:50:08 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 23 wallclock secs (13.79 usr 3.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 27 wallclock secs (14.93 usr 4.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 3 wallclock secs ( 1.07 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 4 wallclock secs ( 1.16 usr 0.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (32000 bytes) -Time to select_big (10000): 26 wallclock secs (12.76 usr 1.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 83 wallclock secs (43.74 usr 9.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index c5ab74dce1bb535fc2f806736b5059d3366069d1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:33:26 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 14 wallclock secs ( 8.11 usr 2.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 16 wallclock secs ( 8.44 usr 2.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 1 wallclock secs ( 0.29 usr 0.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 17 wallclock secs ( 8.45 usr 3.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 3 wallclock secs ( 0.28 usr 0.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 3 wallclock secs ( 0.37 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 3 wallclock secs ( 0.31 usr 0.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big_str (10000): 19 wallclock secs ( 7.79 usr 6.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 76 wallclock secs (34.04 usr 17.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/connect-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 24ab14ca097e96aa6290788511189ab62ed20139..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:12:34 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 31 wallclock secs (15.46 usr 11.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 35 wallclock secs (15.54 usr 13.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 1 row from table -Time to select (10000): 3 wallclock secs ( 0.83 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 2 rows from table -Time to select (10000): 4 wallclock secs ( 0.92 usr 0.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing retrieval of big records (2000 bytes) -Time to select_big (10000): 9 wallclock secs ( 4.37 usr 0.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 82 wallclock secs (37.13 usr 26.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index 6155ebad21dddc46e6aa4986db43ef28a8beeec1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:12:35 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 17 wallclock secs ( 7.03 usr 3.40 sys + 0.00 cusr 0.00 csys = 10.43 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 15 wallclock secs ( 6.96 usr 3.91 sys + 0.00 cusr 0.00 csys = 10.87 CPU) - -Test simple select -Time for select_simple (10000): 2 wallclock secs ( 0.53 usr 0.54 sys + 0.00 cusr 0.00 csys = 1.07 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 16 wallclock secs ( 7.76 usr 4.01 sys + 0.00 cusr 0.00 csys = 11.77 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 2 wallclock secs ( 0.51 usr 0.65 sys + 0.00 cusr 0.00 csys = 1.16 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 4 wallclock secs ( 0.38 usr 0.40 sys + 0.00 cusr 0.00 csys = 0.78 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 3 wallclock secs ( 0.60 usr 0.52 sys + 0.00 cusr 0.00 csys = 1.12 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 31 wallclock secs (12.16 usr 5.41 sys + 0.00 cusr 0.00 csys = 17.57 CPU) - -Total time: 90 wallclock secs (35.94 usr 18.84 sys + 0.00 cusr 0.00 csys = 54.78 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/connect-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index d2a4f2eb3b67b5d4fbfad76641499e352283ab26..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,35 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:35:53 - -Testing the speed of connecting to the server and sending of data -Connect tests are done 10000 times and other tests 100000 times - -Testing connection/disconnect -Time to connect (10000): 7 wallclock secs ( 4.50 usr 1.62 sys + 0.00 cusr 0.00 csys = 6.12 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 9 wallclock secs ( 5.19 usr 2.02 sys + 0.00 cusr 0.00 csys = 7.21 CPU) - -Test simple select -Time for select_simple (100000): 15 wallclock secs ( 8.15 usr 2.84 sys + 0.00 cusr 0.00 csys = 10.99 CPU) - -Test simple select -Time for select_simple_cache (100000): 14 wallclock secs ( 8.03 usr 3.18 sys + 0.00 cusr 0.00 csys = 11.21 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 10 wallclock secs ( 5.09 usr 2.31 sys + 0.00 cusr 0.00 csys = 7.40 CPU) - -Testing select 1 row from table -Time to select_1_row (100000): 22 wallclock secs ( 9.63 usr 4.42 sys + 0.00 cusr 0.00 csys = 14.05 CPU) - -Time to select_1_row_cache (100000): 19 wallclock secs ( 6.75 usr 3.55 sys + 0.00 cusr 0.00 csys = 10.30 CPU) - -Testing select 2 rows from table -Time to select_2_rows (100000): 24 wallclock secs ( 9.99 usr 4.11 sys + 0.00 cusr 0.00 csys = 14.10 CPU) - -Test select with aritmetic (+) -Time for select_column+column (100000): 23 wallclock secs ( 8.62 usr 3.65 sys + 0.00 cusr 0.00 csys = 12.27 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big_str (10000): 13 wallclock secs ( 5.10 usr 3.32 sys + 0.00 cusr 0.00 csys = 8.42 CPU) - -Total time: 156 wallclock secs (71.06 usr 31.02 sys + 0.00 cusr 0.00 csys = 102.08 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/connect-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index a787d311a540fa7885a909c301204a7b98f56247..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,35 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:41:37 - -Testing the speed of connecting to the server and sending of data -Connect tests are done 10000 times and other tests 100000 times - -Testing connection/disconnect -Time to connect (10000): 14 wallclock secs ( 8.17 usr 2.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 16 wallclock secs ( 8.86 usr 2.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (100000): 18 wallclock secs ( 5.08 usr 5.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple_cache (100000): 15 wallclock secs ( 3.64 usr 5.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 17 wallclock secs ( 8.80 usr 2.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (100000): 27 wallclock secs ( 5.70 usr 6.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time to select_1_row_cache (100000): 22 wallclock secs ( 3.16 usr 5.87 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (100000): 30 wallclock secs ( 5.96 usr 7.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test select with aritmetic (+) -Time for select_column+column (100000): 30 wallclock secs ( 5.07 usr 5.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big_str (10000): 20 wallclock secs ( 8.04 usr 6.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 209 wallclock secs (62.48 usr 49.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-NT_4.0 b/sql-bench/Results/connect-mysql-NT_4.0 deleted file mode 100644 index 3c3bfa1e112f2866acb77465e8bbcd638f12ad20..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-NT_4.0 +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 13:51:45 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 33 wallclock secs (12.13 usr 9.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 37 wallclock secs (12.36 usr 12.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 4 wallclock secs ( 0.80 usr 1.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 39 wallclock secs (12.91 usr 11.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 5 wallclock secs ( 1.23 usr 1.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 6 wallclock secs ( 1.00 usr 2.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 5 wallclock secs ( 1.08 usr 1.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 50 wallclock secs (17.36 usr 6.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 179 wallclock secs (58.89 usr 48.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/connect-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index d8696b7c5dbc9457fd76a1a9502e8d1c3758201f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:39:17 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 79 wallclock secs (23.14 usr 25.86 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for select_simple (10000): 87 wallclock secs (24.54 usr 27.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 6 wallclock secs ( 1.33 usr 1.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 87 wallclock secs (25.51 usr 28.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select (10000): 9 wallclock secs ( 1.92 usr 1.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select (10000): 9 wallclock secs ( 1.63 usr 1.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 45 wallclock secs (16.52 usr 7.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 322 wallclock secs (94.60 usr 95.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-SunOS_5.7_sun4m b/sql-bench/Results/connect-mysql-SunOS_5.7_sun4m deleted file mode 100644 index b68f0bcdd2627dfc4aad64d1cee055cf34d57c63..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 1:05:44 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 175 wallclock secs (69.09 usr 50.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 193 wallclock secs (72.11 usr 59.87 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 19 wallclock secs ( 4.00 usr 6.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 203 wallclock secs (72.78 usr 60.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 25 wallclock secs ( 4.18 usr 7.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 30 wallclock secs ( 3.36 usr 8.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 30 wallclock secs ( 4.21 usr 7.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 296 wallclock secs (84.19 usr 54.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 971 wallclock secs (313.99 usr 256.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-SunOS_5.7_sun4u b/sql-bench/Results/connect-mysql-SunOS_5.7_sun4u deleted file mode 100644 index fd415d9fa8cb6de33a0141edcf99998ff796ef33..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 21:17:26 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 30 wallclock secs (10.70 usr 10.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 33 wallclock secs (11.76 usr 11.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 4 wallclock secs ( 0.82 usr 1.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 35 wallclock secs (11.86 usr 11.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 5 wallclock secs ( 0.94 usr 1.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 6 wallclock secs ( 0.96 usr 1.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 28 wallclock secs ( 9.19 usr 5.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 141 wallclock secs (46.24 usr 45.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-SunOS_5.8_sun4u b/sql-bench/Results/connect-mysql-SunOS_5.8_sun4u deleted file mode 100644 index ddb03d013bfab2f003ac74eef93d6c13f2d23e3c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 1:25:16 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 28 wallclock secs ( 9.94 usr 10.15 sys + 0.00 cusr 0.00 csys = 20.09 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 31 wallclock secs (10.69 usr 11.68 sys + 0.00 cusr 0.00 csys = 22.37 CPU) - -Test simple select -Time for select_simple (10000): 4 wallclock secs ( 0.84 usr 1.47 sys + 0.00 cusr 0.00 csys = 2.31 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 33 wallclock secs (10.86 usr 12.26 sys + 0.00 cusr 0.00 csys = 23.12 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 5 wallclock secs ( 1.01 usr 1.90 sys + 0.00 cusr 0.00 csys = 2.91 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 6 wallclock secs ( 0.82 usr 2.24 sys + 0.00 cusr 0.00 csys = 3.06 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 6 wallclock secs ( 0.86 usr 1.85 sys + 0.00 cusr 0.00 csys = 2.71 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 27 wallclock secs ( 9.18 usr 4.85 sys + 0.00 cusr 0.00 csys = 14.03 CPU) - -Total time: 140 wallclock secs (44.23 usr 46.40 sys + 0.00 cusr 0.00 csys = 90.63 CPU) diff --git a/sql-bench/Results/connect-mysql-win98 b/sql-bench/Results/connect-mysql-win98 deleted file mode 100644 index cf0c35ddc8e026156c18209e3610fe7a7ee43d68..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql-win98 +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 2:27:04 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 52 wallclock secs (51.85 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 67 wallclock secs (66.90 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 12 wallclock secs (12.20 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 72 wallclock secs (71.95 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 16 wallclock secs (15.99 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 19 wallclock secs (18.89 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 130 wallclock secs (130.56 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 369 wallclock secs (368.94 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/connect-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 3bd592e58558e528066386649c78cdd213389576..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:09:34 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 20 wallclock secs (14.35 usr 1.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 24 wallclock secs (15.08 usr 2.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 4 wallclock secs ( 1.14 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 4 wallclock secs ( 1.24 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (32000 bytes) -Time to select_big (10000): 25 wallclock secs (10.23 usr 4.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 77 wallclock secs (42.05 usr 9.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql_odbc-win98 b/sql-bench/Results/connect-mysql_odbc-win98 deleted file mode 100644 index 9ec5a2e9f76f325c9867c6b5986176cc72a0f075..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-mysql_odbc-win98 +++ /dev/null @@ -1,27 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 16:32:42 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 337 wallclock secs (336.42 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test connect/simple select/disconnect -Time for select_simple (10000): 442 wallclock secs (442.59 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test simple select -Time for select_simple (10000): 34 wallclock secs (33.23 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 511 wallclock secs (511.30 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 1 row from table -Time to select (10000): 39 wallclock secs (38.67 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing select 2 rows from table -Time to select (10000): 43 wallclock secs (43.56 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 222 wallclock secs (221.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1628 wallclock secs (1627.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/connect-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 5da8ad03c13d0e1182f88aab90adc677c351ffb0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,9 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-15 7:47:56 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 597 wallclock secs (123.36 usr 77.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect diff --git a/sql-bench/Results/connect-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/connect-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index add26af208051f5b4cc03aa86849cd4dfe833173..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 19:22:10 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 84 wallclock secs ( 9.71 usr 2.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 210 wallclock secs (17.17 usr 5.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 1 row from table -Time to select (10000): 17 wallclock secs ( 4.91 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 2 rows from table -Time to select (10000): 18 wallclock secs ( 5.09 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing retrieval of big records (7000 bytes) -Time to select_big (10000): 20 wallclock secs ( 5.76 usr 1.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 349 wallclock secs (42.65 usr 10.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/connect-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/connect-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 2cdf15596f5dd16c985ebdf5f9313ed9b42ffa90..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:39:45 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 141 wallclock secs ( 7.82 usr 1.62 sys + 0.00 cusr 0.00 csys = 9.44 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 154 wallclock secs (10.43 usr 2.60 sys + 0.00 cusr 0.00 csys = 13.03 CPU) - -Test simple select -Time for select_simple (10000): 5 wallclock secs ( 2.59 usr 0.54 sys + 0.00 cusr 0.00 csys = 3.13 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 192 wallclock secs (10.79 usr 2.47 sys + 0.00 cusr 0.00 csys = 13.26 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 6 wallclock secs ( 2.56 usr 0.45 sys + 0.00 cusr 0.00 csys = 3.01 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 6 wallclock secs ( 2.68 usr 0.45 sys + 0.00 cusr 0.00 csys = 3.13 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 8 wallclock secs ( 2.73 usr 0.39 sys + 0.00 cusr 0.00 csys = 3.12 CPU) - -Testing retrieval of big records (65000 bytes) -Time to select_big_str (10000): 35 wallclock secs (10.82 usr 5.73 sys + 0.00 cusr 0.00 csys = 16.55 CPU) - -Total time: 547 wallclock secs (50.45 usr 14.25 sys + 0.00 cusr 0.00 csys = 64.70 CPU) diff --git a/sql-bench/Results/connect-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/connect-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index add64ed612f2370a052b315338165ce152e08ba7..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,29 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:32:32 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 90 wallclock secs ( 9.98 usr 1.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 218 wallclock secs (15.97 usr 3.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 1 row from table -Time to select (10000): 22 wallclock secs ( 5.14 usr 0.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 2 rows from table -Time to select (10000): 22 wallclock secs ( 5.22 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing retrieval of big records (7000 bytes) -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time to select_big (10000): 25 wallclock secs ( 7.28 usr 1.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 379 wallclock secs (43.62 usr 7.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/connect-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/connect-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 00ea04c49a31d992fc5cd6680a3ae6bcb75c9437..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,38 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 18:18:15 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 140 wallclock secs ( 7.94 usr 1.85 sys + 0.00 cusr 0.00 csys = 9.79 CPU) - -Test connect/simple select/disconnect -Time for connect+select_simple (10000): 155 wallclock secs (10.57 usr 2.71 sys + 0.00 cusr 0.00 csys = 13.28 CPU) - -Test simple select -Time for select_simple (10000): 5 wallclock secs ( 2.74 usr 0.38 sys + 0.00 cusr 0.00 csys = 3.12 CPU) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 190 wallclock secs (10.78 usr 2.23 sys + 0.00 cusr 0.00 csys = 13.01 CPU) - -Testing select 1 row from table -Time to select_1_row (10000): 6 wallclock secs ( 2.65 usr 0.43 sys + 0.00 cusr 0.00 csys = 3.08 CPU) - -Testing select 2 rows from table -Time to select_2_rows (10000): 7 wallclock secs ( 2.81 usr 0.40 sys + 0.00 cusr 0.00 csys = 3.21 CPU) - -Test select with aritmetic (+) -Time for select_column+column (10000): 8 wallclock secs ( 2.90 usr 0.33 sys + 0.00 cusr 0.00 csys = 3.23 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing retrieval of big records (65000 bytes) -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time to select_big_str (10000): 37 wallclock secs (12.51 usr 5.97 sys + 0.00 cusr 0.00 csys = 18.48 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Total time: 550 wallclock secs (52.92 usr 14.30 sys + 0.00 cusr 0.00 csys = 67.22 CPU) diff --git a/sql-bench/Results/connect-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/connect-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 69e74431c09609c13c323399bbb7325c111755ae..0000000000000000000000000000000000000000 --- a/sql-bench/Results/connect-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,21 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 12:59:54 - -Testing the speed of connecting to the server and sending of data -All tests are done 10000 times - -Testing connection/disconnect -Time to connect (10000): 84 wallclock secs (58.46 usr 10.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing connect/select 1 row from table/disconnect -Time to connect+select (10000): 105 wallclock secs (66.76 usr 11.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 1 row from table -Time to select (10000): 13 wallclock secs ( 7.03 usr 0.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing select 2 rows from table -Time to select (10000): 14 wallclock secs ( 7.08 usr 0.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing retrieval of big records (7000 bytes) -Time to select_big (10000): 20 wallclock secs (10.57 usr 1.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 236 wallclock secs (149.92 usr 23.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/create-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 71908966bd0d19f8d1c4b2e1d313a2a39279537f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-18 21:20:47 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 46 secs ( 1.43 usr 0.59 sys = 2.02 cpu) - -Accessing tables -Time to select_group (1000): 3 secs ( 0.28 usr 0.81 sys = 1.09 cpu) - -Testing drop -Time for drop_table (1000): 76 secs ( 0.12 usr 0.63 sys = 0.75 cpu) - -Testing create+drop -Time for create+drop (1000): 126 secs ( 0.25 usr 2.57 sys = 2.82 cpu) -Time for create_key+drop (1000): 97 secs ( 0.27 usr 2.86 sys = 3.13 cpu) -Total time: 348 secs ( 2.35 usr 7.46 sys = 9.81 cpu) diff --git a/sql-bench/Results/create-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/create-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index bd988d7fad932383bef4d99e82ede1d576468685..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,16 +0,0 @@ -Testing server '2.1' at 2000-11-23 21:30:54 - -Testing the speed of creating and droping tables -Testing with 1000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (1000): 27 wallclock secs ( 0.63 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (1000): 5 wallclock secs ( 0.29 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (1000): 799 wallclock secs ( 0.81 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 2122 wallclock secs (12.59 usr 6.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/create-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 72be2853563d5dfc9353c1bbf9d182ea1c1c3b88..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-22 8:47:06 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 9 wallclock secs ( 0.61 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select (1000): 0 wallclock secs ( 0.23 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 1 wallclock secs ( 0.10 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 2 wallclock secs ( 0.78 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 2 wallclock secs ( 0.72 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 14 wallclock secs ( 2.44 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/create-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 1347014c3d40d287d51eef908d4a182d3e0292a8..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:48:44 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 10 wallclock secs ( 0.53 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (1000): 2 wallclock secs ( 0.18 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 1 wallclock secs ( 0.11 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 7 wallclock secs ( 0.63 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 9 wallclock secs ( 1.34 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 29 wallclock secs ( 2.79 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/create-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 7887f908f8d15182d9cd3a6bd79eedff8f32d8e3..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:58:38 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 7 secs ( 0.32 usr 0.12 sys = 0.44 cpu) - -Accessing tables -Time to select_group (1000): 6 secs ( 0.02 usr 0.22 sys = 0.24 cpu) - -Testing drop -Time for drop_table (1000): 0 secs ( 0.06 usr 0.12 sys = 0.18 cpu) - -Testing create+drop -Time for create+drop (1000): 3 secs ( 0.24 usr 0.33 sys = 0.57 cpu) -Time for create_key+drop (1000): 3 secs ( 0.11 usr 0.69 sys = 0.80 cpu) -Total time: 19 secs ( 0.75 usr 1.48 sys = 2.23 cpu) diff --git a/sql-bench/Results/create-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/create-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 2a129309e9e146ab8548b28e67e513adc8c479fd..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 23:00:37 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 6 wallclock secs ( 0.31 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 4 wallclock secs ( 0.11 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -Time for drop_table (1000): 0 wallclock secs ( 0.12 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 3 wallclock secs ( 0.39 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for create_key+drop (1000): 2 wallclock secs ( 0.55 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 15 wallclock secs ( 1.48 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/create-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 72c2850ca99d9d0c1717054c1b01ff02a0cef3de..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:51:31 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 4 wallclock secs ( 0.46 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select (1000): 2 wallclock secs ( 0.27 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 2 wallclock secs ( 0.15 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 3 wallclock secs ( 0.46 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 3 wallclock secs ( 0.54 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 14 wallclock secs ( 1.89 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index 65f0e0f2f8508f3a6a7fd7cf2b067e4f13b034ee..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:34:42 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 183 wallclock secs ( 1.96 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 7 wallclock secs ( 0.99 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 6 wallclock secs ( 0.61 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 12 wallclock secs ( 2.44 usr 1.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 17 wallclock secs ( 4.03 usr 1.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 225 wallclock secs (10.03 usr 4.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/create-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index d422cb3078fc31a0703cb336714705719d5ae60b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:13:56 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 3 wallclock secs ( 0.26 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 1 wallclock secs ( 0.17 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -Time for drop_table (1000): 1 wallclock secs ( 0.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 1 wallclock secs ( 0.34 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for create_key+drop (1000): 2 wallclock secs ( 0.66 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 8 wallclock secs ( 1.54 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index 624bf203a7e6f50cf879518a5e9357f3a464b772..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:14:05 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 43 wallclock secs ( 2.34 usr 2.21 sys + 0.00 cusr 0.00 csys = 4.55 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 20 wallclock secs ( 0.77 usr 1.34 sys + 0.00 cusr 0.00 csys = 2.11 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 19 wallclock secs ( 0.87 usr 0.84 sys + 0.00 cusr 0.00 csys = 1.71 CPU) - -Testing create+drop -Time for create+drop (10000): 33 wallclock secs ( 2.64 usr 0.72 sys + 0.00 cusr 0.00 csys = 3.36 CPU) -Time for create_key+drop (10000): 39 wallclock secs ( 3.05 usr 0.72 sys + 0.00 cusr 0.00 csys = 3.77 CPU) -Total time: 154 wallclock secs ( 9.67 usr 5.83 sys + 0.00 cusr 0.00 csys = 15.50 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/create-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 864a4adb7e66fe02114381ea9e9929006fbe4a64..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:38:29 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 25 wallclock secs ( 1.12 usr 0.28 sys + 0.00 cusr 0.00 csys = 1.40 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 14 wallclock secs ( 0.98 usr 0.34 sys + 0.00 cusr 0.00 csys = 1.32 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 11 wallclock secs ( 0.34 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.51 CPU) - -Testing create+drop -Time for create+drop (10000): 17 wallclock secs ( 1.49 usr 0.50 sys + 0.00 cusr 0.00 csys = 1.99 CPU) -Time for create_key+drop (10000): 23 wallclock secs ( 1.84 usr 0.62 sys + 0.00 cusr 0.00 csys = 2.46 CPU) -Total time: 90 wallclock secs ( 5.77 usr 1.91 sys + 0.00 cusr 0.00 csys = 7.68 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/create-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index c6b2eaf9f23b300ab8e1a3f8a330c425aedd2cae..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:45:06 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 238 wallclock secs ( 1.84 usr 0.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 6 wallclock secs ( 0.90 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 10 wallclock secs ( 0.67 usr 0.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 15 wallclock secs ( 2.92 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 19 wallclock secs ( 4.55 usr 0.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 288 wallclock secs (10.88 usr 3.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-NT_4.0 b/sql-bench/Results/create-mysql-NT_4.0 deleted file mode 100644 index 2191f28735a1c330c42746f639bb46ce6480da3d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-NT_4.0 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 13:54:45 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 231 wallclock secs ( 3.27 usr 1.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 196 wallclock secs ( 1.48 usr 1.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 169 wallclock secs ( 1.41 usr 1.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 134 wallclock secs ( 3.78 usr 2.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 167 wallclock secs ( 5.98 usr 2.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 897 wallclock secs (15.94 usr 10.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/create-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index b4f5bad6afaf86d49d001de0413b151047872615..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:44:40 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 22 wallclock secs ( 0.56 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (1000): 1 wallclock secs ( 0.18 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 10 wallclock secs ( 0.11 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 22 wallclock secs ( 0.78 usr 0.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 20 wallclock secs ( 1.12 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 75 wallclock secs ( 2.76 usr 1.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-SunOS_5.7_sun4m b/sql-bench/Results/create-mysql-SunOS_5.7_sun4m deleted file mode 100644 index fe038d51de745f5173c64fadea74dc59086db5d0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 1:21:57 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 2078 wallclock secs (15.85 usr 6.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 177 wallclock secs ( 6.82 usr 7.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 599 wallclock secs ( 6.29 usr 5.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 995 wallclock secs (21.72 usr 10.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 995 wallclock secs (29.17 usr 10.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 4844 wallclock secs (79.86 usr 40.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-SunOS_5.7_sun4u b/sql-bench/Results/create-mysql-SunOS_5.7_sun4u deleted file mode 100644 index 6f7eaa07f476d57daab6ee83b57fb068e0ebe3da..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 21:19:48 - -Testing the speed of creating and droping tables -All tests are done 10000 times - -Testing create of tables -Time for create_many_tables (10000): 1130 wallclock secs ( 2.65 usr 0.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (10000): 41 wallclock secs ( 0.88 usr 1.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (10000): 518 wallclock secs ( 0.60 usr 0.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 934 wallclock secs ( 2.88 usr 1.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 1008 wallclock secs ( 3.17 usr 1.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 3631 wallclock secs (10.19 usr 5.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-SunOS_5.8_sun4u b/sql-bench/Results/create-mysql-SunOS_5.8_sun4u deleted file mode 100644 index 338b0e07b00dc9698efd154a75cd5fb5e51e98ef..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 1:27:36 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (10000): 779 wallclock secs ( 2.21 usr 0.85 sys + 0.00 cusr 0.00 csys = 3.06 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 11 wallclock secs ( 0.93 usr 1.60 sys + 0.00 cusr 0.00 csys = 2.53 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (10000): 329 wallclock secs ( 0.69 usr 0.94 sys + 0.00 cusr 0.00 csys = 1.63 CPU) - -Testing create+drop -Time for create+drop (10000): 717 wallclock secs ( 2.66 usr 2.04 sys + 0.00 cusr 0.00 csys = 4.70 CPU) -Time for create_key+drop (10000): 720 wallclock secs ( 3.82 usr 1.94 sys + 0.00 cusr 0.00 csys = 5.76 CPU) -Total time: 2556 wallclock secs (10.32 usr 7.37 sys + 0.00 cusr 0.00 csys = 17.69 CPU) diff --git a/sql-bench/Results/create-mysql-win98 b/sql-bench/Results/create-mysql-win98 deleted file mode 100644 index e0211664f2314e0e6f4b58548e8c0e4070b18596..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql-win98 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 2:33:13 - -Testing the speed of creating and droping tables -Testing with 5000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (5000): 1510 wallclock secs (1510.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (5000): 581 wallclock secs (580.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (5000): 160 wallclock secs (159.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (10000): 1433 wallclock secs (1433.28 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 1457 wallclock secs (1456.57 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 5141 wallclock secs (5140.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/create-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 925b9604b41f9bdb9fda542ce5176785996cf63c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:10:51 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 4 wallclock secs ( 0.39 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select (1000): 1 wallclock secs ( 0.26 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 0 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 2 wallclock secs ( 0.55 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 2 wallclock secs ( 0.62 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 9 wallclock secs ( 1.85 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql_odbc-win98 b/sql-bench/Results/create-mysql_odbc-win98 deleted file mode 100644 index c8e5ca1991a19665e69fbee3dc7ce1a3c13b79d1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-mysql_odbc-win98 +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 16:59:53 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Testing create of tables -Time for create_table (1000): 50 wallclock secs (49.43 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group (1000): 30 wallclock secs (30.27 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -Time for drop_table (1000): 9 wallclock secs ( 9.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create+drop -Time for create+drop (1000): 27 wallclock secs (26.86 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (1000): 30 wallclock secs (30.16 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 146 wallclock secs (145.72 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/create-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 5457b19b297ff8505bc4bd98b0279d569f0c43f2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 0:40:16 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 86 wallclock secs ( 1.99 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 8 wallclock secs ( 0.86 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -Time for drop_table (1000): 77 wallclock secs ( 0.63 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 202 wallclock secs ( 2.66 usr 0.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for create_key+drop (1000): 175 wallclock secs ( 3.33 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 548 wallclock secs ( 9.48 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/create-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index ee840d8f51a5234b4f460e564eadc65b98eb97c6..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 8:13:28 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create of tables -Time for create_table (1000): 103 wallclock secs ( 1.89 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 37 wallclock secs ( 1.55 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 12 wallclock secs ( 0.89 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -Time for drop_table (1000): 85 wallclock secs ( 0.70 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 198 wallclock secs ( 2.72 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_key+drop (1000): 174 wallclock secs ( 3.64 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 611 wallclock secs (11.43 usr 1.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/create-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 6c8a3e9b39eee8f8b4dd38dcf4e8e7342309d263..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,56 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 19:27:59 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 67 wallclock secs ( 1.51 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 5 wallclock secs ( 0.62 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -Time for drop_table (1000): 17 wallclock secs ( 0.59 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 46 wallclock secs ( 1.86 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for create_key+drop (1000): 33 wallclock secs ( 1.56 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 168 wallclock secs ( 6.14 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/create-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index d4ed9d4398002f7cdb555fe08edc8c2b5d53e9a5..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:48:52 - -Testing the speed of creating and droping tables -Testing with 5000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (5000): 194 wallclock secs ( 6.27 usr 5.72 sys + 0.00 cusr 0.00 csys = 11.99 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (5000): 14 wallclock secs ( 1.46 usr 0.28 sys + 0.00 cusr 0.00 csys = 1.74 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (5000): 599 wallclock secs ( 1.39 usr 0.38 sys + 0.00 cusr 0.00 csys = 1.77 CPU) - -Testing create+drop -Time for create+drop (10000): 2924 wallclock secs (11.10 usr 2.41 sys + 0.00 cusr 0.00 csys = 13.51 CPU) -Time for create_key+drop (10000): 5464 wallclock secs (11.00 usr 2.30 sys + 0.00 cusr 0.00 csys = 13.30 CPU) -Total time: 9195 wallclock secs (31.22 usr 11.10 sys + 0.00 cusr 0.00 csys = 42.32 CPU) diff --git a/sql-bench/Results/create-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/create-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 481c68fa0ecb84b6caa6061064e9f65f9385c1d4..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,60 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:38:51 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create of tables -Time for create_table (1000): 67 wallclock secs ( 1.40 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 14 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 5 wallclock secs ( 0.53 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -NOTICE: trying to delete a reldesc that does not exist. -Time for drop_table (1000): 16 wallclock secs ( 0.57 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 28 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 36 wallclock secs ( 2.08 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 75 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for create_key+drop (1000): 16 wallclock secs ( 1.32 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 131 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 388 wallclock secs ( 5.92 usr 0.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-crashed b/sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-crashed deleted file mode 100644 index 806d3edf7a780b0c557fc171b3b38da4093cf1f9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-crashed +++ /dev/null @@ -1,26 +0,0 @@ -Testing server 'PostgreSQL version ???' at 2000-08-17 1:22:04 - -Testing the speed of creating and droping tables -Testing with 10000 tables and 10000 loop count - -NOTICE: Vacuum: table not found -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing create of tables -Time for create_MANY_tables (10000): 453 wallclock secs ( 7.88 usr 1.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -NOTICE: RegisterSharedInvalid: SI buffer overflow -NOTICE: RegisterSharedInvalid: SI buffer overflow -NOTICE: RegisterSharedInvalid: SI buffer overflow -NOTICE: RegisterSharedInvalid: SI buffer overflow -NOTICE: InvalidateSharedInvalid: cache state reset -NOTICE: Vacuum: table not found -Time for book-keeping (1): 1410 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (10000): 181 wallclock secs ( 2.90 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing drop -NOTICE: ShmemAlloc: out of memory -NOTICE: LockAcquire: xid table corrupted -ERROR: LockRelation: LockAcquire failed diff --git a/sql-bench/Results/create-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/create-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index d4ed9d4398002f7cdb555fe08edc8c2b5d53e9a5..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,18 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:48:52 - -Testing the speed of creating and droping tables -Testing with 5000 tables and 10000 loop count - -Testing create of tables -Time for create_MANY_tables (5000): 194 wallclock secs ( 6.27 usr 5.72 sys + 0.00 cusr 0.00 csys = 11.99 CPU) - -Accessing tables -Time to select_group_when_MANY_tables (5000): 14 wallclock secs ( 1.46 usr 0.28 sys + 0.00 cusr 0.00 csys = 1.74 CPU) - -Testing drop -Time for drop_table_when_MANY_tables (5000): 599 wallclock secs ( 1.39 usr 0.38 sys + 0.00 cusr 0.00 csys = 1.77 CPU) - -Testing create+drop -Time for create+drop (10000): 2924 wallclock secs (11.10 usr 2.41 sys + 0.00 cusr 0.00 csys = 13.51 CPU) -Time for create_key+drop (10000): 5464 wallclock secs (11.00 usr 2.30 sys + 0.00 cusr 0.00 csys = 13.30 CPU) -Total time: 9195 wallclock secs (31.22 usr 11.10 sys + 0.00 cusr 0.00 csys = 42.32 CPU) diff --git a/sql-bench/Results/create-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/create-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index f93324a1bafcb3c5976e04ac842def06e88d4404..0000000000000000000000000000000000000000 --- a/sql-bench/Results/create-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,20 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 13:03:51 - -Testing the speed of creating and droping tables -All tests are done 1000 times - -Okay..Let's make sure that our tables don't exist yet. - -Testing create of tables -Time for create_table (1000): 9 wallclock secs ( 1.30 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Accessing tables -Time to select_group (1000): 4 wallclock secs ( 0.90 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing drop -Time for drop_table (1000): 8 wallclock secs ( 0.68 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing create+drop -Time for create+drop (1000): 18 wallclock secs ( 2.08 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for create_key+drop (1000): 20 wallclock secs ( 2.03 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Total time: 59 wallclock secs ( 7.00 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/insert-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index a518b03d70d8de13a9c9d450072bb86bfd9b31c2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,63 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-09-24 12:13:15 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 10000 rows. - -Generating random keys -Creating tables -Inserting 10000 rows in order -Inserting 10000 rows in reverse order -Inserting 10000 rows in random order -Time for insert (30000): 733 secs (22.19 usr 6.46 sys = 28.65 cpu) - -Testing insert of duplicates -Time for insert_duplicates (30000): 9 secs ( 3.57 usr 3.81 sys = 7.38 cpu) - -Retrieving data from the table -Time for select_big (10:300000): 41 secs (14.31 usr 10.02 sys = 24.33 cpu) -Time for order_by_key (10:300000): 48 secs (13.45 usr 11.16 sys = 24.61 cpu) -Time for order_by (10:300000): 54 secs (12.73 usr 11.78 sys = 24.51 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1740 queries in 1740 loops of 5000 loops took 602 seconds -Estimated time for select_range_prefix (5000:14616): 1729 secs ( 7.39 usr 12.30 sys = 19.68 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -690 queries in 690 loops of 5000 loops took 612 seconds -Estimated time for select_range (5000:5796): 4434 secs ( 7.54 usr 13.55 sys = 21.09 cpu) -Time for select_key_prefix (20000): 79 secs (11.74 usr 21.54 sys = 33.28 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -7302 queries in 3651 loops of 10000 loops took 601 seconds -Estimated time for select_key (20000): 1646 secs (16.74 usr 27.42 sys = 44.15 cpu) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 53 secs ( 7.34 usr 14.13 sys = 21.47 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -5280 queries in 132 loops of 500 loops took 603 seconds -Estimated time for select_range (20000:11484): 603 secs ( 2.41 usr 4.34 sys = 6.75 cpu) -Time for select_group (101): 91 secs ( 0.12 usr 0.17 sys = 0.29 cpu) -Time for min_max_on_key (3000): 12 secs ( 1.31 usr 3.39 sys = 4.70 cpu) -Time for min_max (60): 40 secs ( 0.09 usr 0.09 sys = 0.18 cpu) -Time for count_on_key (100): 102 secs ( 0.10 usr 0.12 sys = 0.22 cpu) -Time for count (100): 107 secs ( 0.11 usr 0.12 sys = 0.23 cpu) - -Testing update with functions -Time for update_key (500): 51 secs ( 0.32 usr 0.40 sys = 0.72 cpu) -Time for update_key_big (480): 77 secs ( 0.29 usr 0.33 sys = 0.62 cpu) - -Testing delete -Time for delete_key (500): 48 secs ( 0.39 usr 0.35 sys = 0.74 cpu) -Time for delete_big (12): 8 secs ( 0.02 usr 0.01 sys = 0.03 cpu) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (10000): 241 secs ( 8.58 usr 2.07 sys = 10.65 cpu) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 17 secs ( 0.10 usr 0.16 sys = 0.26 cpu) - -Deleting everything from table -Time for delete_big (2): 4 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Estimated total time: 11695 secs ( 249.00 463.00 713.00) diff --git a/sql-bench/Results/insert-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/insert-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index bee9e6173d51514870d2268c1fd64b2c03b19341..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,59 +0,0 @@ -Testing server '2.1' at 2000-11-23 23:33:36 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1077 wallclock secs (121.99 usr 88.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Warning: Got 100 rows when selecting a whole table of 300000 rows -Contact the database or DBD author! -Time for select_big (10:1000): 0 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:1000): 206 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:1000): 217 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:1000): 200 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:1000): 201 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big (10:1000): 204 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -214 queries in 214 loops of 500 loops took 601 seconds -Estimated time for order_by_range (500:16549): 1404 wallclock secs ( 0.89 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -213 queries in 213 loops of 500 loops took 601 seconds -Estimated time for order_by_key (500:16449): 1410 wallclock secs ( 0.56 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -209 queries in 209 loops of 500 loops took 601 seconds -Estimated time for order_by_key2_diff (500:20900): 1437 wallclock secs ( 1.03 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -201 queries in 201 loops of 500 loops took 602 seconds -Estimated time for select_diff_key (500:402): 1497 wallclock secs ( 0.42 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -20 queries in 20 loops of 5000 loops took 626 seconds -Estimated time for select_range_prefix (5000:252): 156500 wallclock secs ( 5.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -20 queries in 20 loops of 5000 loops took 608 seconds -Estimated time for select_range_key2 (5000:252): 152000 wallclock secs ( 2.50 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -318 queries in 159 loops of 100000 loops took 603 seconds -Estimated time for select_key_prefix (200000): 379245 wallclock secs (132.08 usr 31.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -314 queries in 157 loops of 100000 loops took 602 seconds -Estimated time for select_key (200000): 383439 wallclock secs (159.24 usr 89.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -312 queries in 156 loops of 100000 loops took 604 seconds -Estimated time for select_key2 (200000): 387179 wallclock secs (173.08 usr 57.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges diff --git a/sql-bench/Results/insert-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/insert-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 262e0cf97e25c717496197923f850833e965b0d9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,67 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-23 8:59:18 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 105 wallclock secs (37.17 usr 6.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 20 wallclock secs ( 7.44 usr 1.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 106 wallclock secs (63.07 usr 14.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 138 wallclock secs (62.91 usr 14.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 137 wallclock secs (62.94 usr 14.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 143 wallclock secs ( 0.52 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -290 queries in 290 loops of 5000 loops took 602 seconds -Estimated time for select_range_prefix (5000:3654): 10379 wallclock secs ( 7.41 usr 0.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -300 queries in 300 loops of 5000 loops took 610 seconds -Estimated time for select_range (5000:3780): 10166 wallclock secs ( 7.83 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -3034 queries in 1517 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 39617 wallclock secs (190.51 usr 18.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 244 wallclock secs (177.74 usr 12.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2240 queries in 56 loops of 500 loops took 603 seconds -Estimated time for select_range_prefix (20000:4872): 5383 wallclock secs ( 9.46 usr 1.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2200 queries in 55 loops of 500 loops took 602 seconds -Estimated time for select_range (20000:4785): 5472 wallclock secs (10.27 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys in loops -Time for update_of_key (599999): 220 wallclock secs (104.21 usr 15.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 57942 wallclock secs (46.67 usr 8.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 73 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 10 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 5 keys and with a primary key with 5 parts -Time for insert_key (100000): 40 wallclock secs (12.67 usr 2.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 634 wallclock secs ( 0.04 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 676 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 131515 wallclock secs (800.98 usr 112.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/insert-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 5b0162c18a5bbeeb4784a88b75ef78f83ac90825..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,81 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 15:49:14 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 327 wallclock secs (44.25 usr 20.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 50 wallclock secs (10.92 usr 5.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 268 wallclock secs (81.97 usr 82.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 265 wallclock secs (81.83 usr 80.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 359 wallclock secs (81.85 usr 62.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -291 queries in 291 loops of 10 loops took 602 seconds -Estimated time for select_diff_key (10:582): 20 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 50 wallclock secs ( 9.27 usr 2.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 49 wallclock secs ( 9.30 usr 2.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -179500 queries in 89750 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 669 wallclock secs (217.48 usr 41.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -179928 queries in 89964 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 668 wallclock secs (218.05 usr 41.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 41 wallclock secs (12.07 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 40 wallclock secs (12.06 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 194 wallclock secs ( 0.14 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 6 wallclock secs ( 2.75 usr 0.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 111 wallclock secs ( 0.07 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 156 wallclock secs ( 0.12 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 321 wallclock secs ( 0.11 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (500): 1 wallclock secs ( 0.10 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 85 wallclock secs ( 0.09 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 681 wallclock secs (52.02 usr 22.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 148 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 165 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 414 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 396 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -31 queries in 30 loops of 500 loops took 605 seconds -Estimated time for outer_join_not_found (500:516): 605 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.10 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 46 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 419 wallclock secs (35.34 usr 7.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 169 wallclock secs ( 0.05 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 302 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 22 wallclock secs ( 3.75 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 16527 wallclock secs (874.45 usr 374.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/insert-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index cfb7dbd5d1ed247d75908b9d524e91f62912402e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,51 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 6:58:58 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 10000 rows. - -Generating random keys -Creating tables -Inserting 10000 rows in order -Inserting 10000 rows in reverse order -Inserting 10000 rows in random order -Time for insert (30000): 17 secs ( 2.03 usr 2.84 sys = 4.87 cpu) - -Testing insert of duplicates -Time for insert_duplicates (30000): 4 secs ( 0.00 usr 1.39 sys = 1.39 cpu) - -Retrieving data from the table -Time for select_big (10:300000): 6 secs ( 2.08 usr 4.11 sys = 6.19 cpu) -Time for order_by_key (10:300000): 6 secs ( 1.44 usr 4.75 sys = 6.19 cpu) -Time for order_by (10:300000): 10 secs ( 2.24 usr 6.64 sys = 8.88 cpu) -Time for select_range_prefix (5010:42084): 24 secs ( 1.10 usr 5.05 sys = 6.15 cpu) -Time for select_range (5010:42084): 17 secs ( 1.39 usr 4.77 sys = 6.16 cpu) -Time for select_key_prefix (20000): 27 secs ( 6.22 usr 11.03 sys = 17.25 cpu) -Time for select_key (20000): 25 secs ( 5.64 usr 11.36 sys = 17.00 cpu) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 16 secs ( 3.30 usr 6.08 sys = 9.38 cpu) -Time for select_range (20000:43500): 15 secs ( 3.32 usr 6.80 sys = 10.12 cpu) -Time for select_group (101): 5 secs ( 0.01 usr 0.08 sys = 0.09 cpu) -Time for min_max_on_key (3000): 3 secs ( 0.79 usr 1.31 sys = 2.10 cpu) -Time for min_max (60): 4 secs ( 0.00 usr 0.08 sys = 0.08 cpu) -Time for count_on_key (100): 6 secs ( 0.00 usr 0.06 sys = 0.06 cpu) -Time for count (100): 7 secs ( 0.01 usr 0.06 sys = 0.07 cpu) - -Testing update with functions -Time for update_key (500): 1 secs ( 0.05 usr 0.07 sys = 0.12 cpu) -Time for update_key_big (480): 4 secs ( 0.03 usr 0.04 sys = 0.07 cpu) - -Testing delete -Time for delete_key (500): 0 secs ( 0.00 usr 0.04 sys = 0.04 cpu) -Time for delete_big (12): 2 secs ( 0.01 usr 0.01 sys = 0.02 cpu) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (10000): 15 secs ( 0.72 usr 1.30 sys = 2.02 cpu) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 7 secs ( 0.02 usr 0.04 sys = 0.06 cpu) - -Deleting everything from table -Time for delete_big (2): 8 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Total time: 229 secs (30.40 usr 67.93 sys = 98.33 cpu) diff --git a/sql-bench/Results/insert-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/insert-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index d90a50f23abebf2722ad6bc79fd53fd9803a7ec3..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,51 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 23:00:52 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 140 wallclock secs (36.53 usr 8.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 18 wallclock secs ( 5.06 usr 2.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 49 wallclock secs (23.21 usr 11.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by_key (10:3000000): 50 wallclock secs (23.37 usr 12.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by (10:3000000): 73 wallclock secs (23.18 usr 12.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range_prefix (5010:42084): 22 wallclock secs ( 4.13 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (5010:42084): 14 wallclock secs ( 4.31 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key_prefix (200000): 242 wallclock secs (115.60 usr 13.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key (200000): 230 wallclock secs (115.25 usr 13.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 13 wallclock secs ( 5.90 usr 0.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (20000:43500): 13 wallclock secs ( 5.96 usr 0.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (101): 30 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (3000): 2 wallclock secs ( 0.99 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 27 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 48 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 59 wallclock secs ( 0.08 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 4 wallclock secs ( 0.07 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for update_key_big (501): 27 wallclock secs ( 0.06 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 10 wallclock secs ( 0.11 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for delete_big (12): 25 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 7 keys and with a primary key with 7 parts -Time for insert_key (100000): 165 wallclock secs (12.53 usr 3.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 83 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 41 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 1389 wallclock secs (376.47 usr 81.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/insert-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 689799166077949367666bd65c058ea3c6a1efb3..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,56 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:51:46 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 145 wallclock secs (45.22 usr 7.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 18 wallclock secs ( 6.67 usr 2.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 68 wallclock secs (46.86 usr 8.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 69 wallclock secs (47.13 usr 7.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 90 wallclock secs (46.72 usr 8.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 305 wallclock secs ( 0.59 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5000:63000): 19 wallclock secs ( 5.62 usr 0.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5000:63000): 18 wallclock secs ( 5.57 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 404 wallclock secs (172.53 usr 12.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 402 wallclock secs (154.50 usr 10.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 22 wallclock secs ( 9.15 usr 0.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 21 wallclock secs ( 9.26 usr 0.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys in loops -note: Aborting update loop because of timeout -Note: Query took longer then time-limit: 600 -Estimating end time based on: -548951 queries in 548951 loops of 600000 loops took 1194 seconds -Estimated time for update_of_key (600000): 1305 wallclock secs (160.80 usr 25.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 381 wallclock secs (62.03 usr 12.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 50 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.16 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 20 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 5 keys and with a primary key with 5 parts -Time for insert_key (100000): 80 wallclock secs (15.22 usr 2.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 31 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 35 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 3485 wallclock secs (788.07 usr 99.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index b89fd2db681f08d879ba5f84ad4213671685bb77..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,90 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 10:38:28 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 110 wallclock secs (19.96 usr 19.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 39 wallclock secs ( 6.17 usr 6.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 31 wallclock secs (17.01 usr 13.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:3000000): 32 wallclock secs (18.66 usr 13.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:3000000): 33 wallclock secs (18.68 usr 13.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_prefix (10:3000000): 30 wallclock secs (16.96 usr 13.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:3000000): 31 wallclock secs (17.10 usr 13.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:3000000): 45 wallclock secs (17.28 usr 20.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big (10:3000000): 47 wallclock secs (17.25 usr 20.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_range (500:125750): 5 wallclock secs ( 0.92 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key_prefix (500:125750): 2 wallclock secs ( 0.94 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key2_diff (500:250500): 5 wallclock secs ( 1.58 usr 1.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 151 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 10 wallclock secs ( 2.65 usr 0.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (5010:42084): 11 wallclock secs ( 2.64 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 141 wallclock secs (71.11 usr 21.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 136 wallclock secs (72.34 usr 21.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_return_key (200000): 132 wallclock secs (70.93 usr 19.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2 (200000): 140 wallclock secs (71.17 usr 20.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_key (200000): 134 wallclock secs (69.60 usr 18.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_prim (200000): 138 wallclock secs (70.28 usr 19.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 9 wallclock secs ( 3.59 usr 1.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (20000:43500): 8 wallclock secs ( 3.57 usr 1.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 42 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (15000): 9 wallclock secs ( 4.54 usr 1.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 22 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 37 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 50 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (20): 57 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 24 wallclock secs ( 2.35 usr 2.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 21 wallclock secs ( 0.05 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (300000): 129 wallclock secs (20.61 usr 19.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_with_key_prefix (100000): 37 wallclock secs ( 5.70 usr 5.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (10): 28 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 41 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 63 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 57 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 38 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 4 wallclock secs ( 0.59 usr 0.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_all (12): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 95 wallclock secs ( 8.00 usr 5.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 22 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 52 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 52 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 8 wallclock secs ( 1.89 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2279 wallclock secs (634.62 usr 299.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/insert-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 8129feea25f114007cf309c3429a07d5f623f861..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,51 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:14:05 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 10000 rows. - -Generating random keys -Creating tables -Inserting 10000 rows in order -Inserting 10000 rows in reverse order -Inserting 10000 rows in random order -Time for insert (30000): 12 wallclock secs ( 2.84 usr 0.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (30000): 2 wallclock secs ( 0.66 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:300000): 6 wallclock secs ( 2.83 usr 1.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by_key (10:300000): 5 wallclock secs ( 2.85 usr 1.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by (10:300000): 6 wallclock secs ( 2.90 usr 2.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range_prefix (5010:42084): 21 wallclock secs ( 4.63 usr 0.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (5010:42084): 14 wallclock secs ( 3.89 usr 0.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key_prefix (20000): 23 wallclock secs (11.28 usr 1.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key (20000): 21 wallclock secs (10.95 usr 1.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 14 wallclock secs ( 5.73 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (20000:43500): 13 wallclock secs ( 6.41 usr 0.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (101): 4 wallclock secs ( 0.09 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (3000): 3 wallclock secs ( 1.51 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 3 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 6 wallclock secs ( 0.10 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 6 wallclock secs ( 0.07 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 1 wallclock secs ( 0.04 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for update_key_big (480): 3 wallclock secs ( 0.08 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 0 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for delete_big (12): 2 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (10000): 12 wallclock secs ( 1.48 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 6 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 190 wallclock secs (58.47 usr 13.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index 913a4941ed446d289f85c586116abfa6ae50fad6..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,90 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 1:16:40 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 122 wallclock secs (20.64 usr 11.54 sys + 0.00 cusr 0.00 csys = 32.18 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 31 wallclock secs ( 5.12 usr 4.16 sys + 0.00 cusr 0.00 csys = 9.28 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 32 wallclock secs (21.80 usr 10.01 sys + 0.00 cusr 0.00 csys = 31.81 CPU) -Time for order_by_big_key (10:3000000): 35 wallclock secs (23.27 usr 10.06 sys + 0.00 cusr 0.00 csys = 33.33 CPU) -Time for order_by_big_key_desc (10:3000000): 37 wallclock secs (23.23 usr 10.33 sys + 0.00 cusr 0.00 csys = 33.56 CPU) -Time for order_by_big_key_prefix (10:3000000): 33 wallclock secs (21.44 usr 10.24 sys + 0.00 cusr 0.00 csys = 31.68 CPU) -Time for order_by_big_key2 (10:3000000): 32 wallclock secs (21.65 usr 10.20 sys + 0.00 cusr 0.00 csys = 31.85 CPU) -Time for order_by_big_key_diff (10:3000000): 73 wallclock secs (21.66 usr 10.13 sys + 0.00 cusr 0.00 csys = 31.79 CPU) -Time for order_by_big (10:3000000): 77 wallclock secs (21.83 usr 9.99 sys + 0.00 cusr 0.00 csys = 31.82 CPU) -Time for order_by_range (500:125750): 8 wallclock secs ( 1.39 usr 0.40 sys + 0.00 cusr 0.00 csys = 1.79 CPU) -Time for order_by_key_prefix (500:125750): 5 wallclock secs ( 1.17 usr 0.47 sys + 0.00 cusr 0.00 csys = 1.64 CPU) -Time for order_by_key2_diff (500:250500): 9 wallclock secs ( 1.45 usr 0.89 sys + 0.00 cusr 0.00 csys = 2.34 CPU) -Time for select_diff_key (500:1000): 202 wallclock secs ( 0.26 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.32 CPU) -Time for select_range_prefix (5010:42084): 13 wallclock secs ( 2.65 usr 0.50 sys + 0.00 cusr 0.00 csys = 3.15 CPU) -Time for select_range_key2 (5010:42084): 12 wallclock secs ( 2.37 usr 0.75 sys + 0.00 cusr 0.00 csys = 3.12 CPU) -Time for select_key_prefix (200000): 141 wallclock secs (80.77 usr 13.11 sys + 0.00 cusr 0.00 csys = 93.88 CPU) -Time for select_key (200000): 131 wallclock secs (69.07 usr 11.59 sys + 0.00 cusr 0.00 csys = 80.66 CPU) -Time for select_key_return_key (200000): 125 wallclock secs (62.45 usr 10.60 sys + 0.00 cusr 0.00 csys = 73.05 CPU) -Time for select_key2 (200000): 140 wallclock secs (87.29 usr 11.66 sys + 0.00 cusr 0.00 csys = 98.95 CPU) -Time for select_key2_return_key (200000): 133 wallclock secs (65.03 usr 10.13 sys + 0.00 cusr 0.00 csys = 75.16 CPU) -Time for select_key2_return_prim (200000): 133 wallclock secs (75.39 usr 11.05 sys + 0.00 cusr 0.00 csys = 86.44 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 10 wallclock secs ( 3.84 usr 0.60 sys + 0.00 cusr 0.00 csys = 4.44 CPU) -Time for select_range_key2 (20000:43500): 9 wallclock secs ( 3.40 usr 0.76 sys + 0.00 cusr 0.00 csys = 4.16 CPU) -Time for select_group (111): 60 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.05 CPU) -Time for min_max_on_key (15000): 9 wallclock secs ( 3.51 usr 0.42 sys + 0.00 cusr 0.00 csys = 3.93 CPU) -Time for min_max (60): 33 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.03 CPU) -Time for count_on_key (100): 54 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) -Time for count (100): 45 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.03 CPU) -Time for count_distinct_big (20): 97 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 25 wallclock secs ( 2.74 usr 1.81 sys + 0.00 cusr 0.00 csys = 4.55 CPU) -Time for update_of_key_big (501): 36 wallclock secs ( 0.01 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.08 CPU) - -Testing update with key -Time for update_with_key (300000): 119 wallclock secs (19.18 usr 12.34 sys + 0.00 cusr 0.00 csys = 31.52 CPU) -Time for update_with_key_prefix (100000): 36 wallclock secs ( 6.37 usr 3.90 sys + 0.00 cusr 0.00 csys = 10.27 CPU) - -Testing update of all rows -Time for update_big (10): 65 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 58 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for outer_join (10:10): 112 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 110 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 60 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 10 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing delete -Time for delete_key (10000): 4 wallclock secs ( 0.63 usr 0.36 sys + 0.00 cusr 0.00 csys = 0.99 CPU) -Time for delete_all (12): 18 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 138 wallclock secs (10.42 usr 6.05 sys + 0.00 cusr 0.00 csys = 16.47 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 43 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.07 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 77 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 77 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 10 wallclock secs ( 1.86 usr 0.05 sys + 0.00 cusr 0.00 csys = 1.91 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2773 wallclock secs (682.10 usr 184.31 sys + 0.00 cusr 0.00 csys = 866.41 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/insert-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 719ed9f11b98726b7691790af9851bad782ac1e0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,106 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 15:39:59 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 65 wallclock secs (12.32 usr 5.91 sys + 0.00 cusr 0.00 csys = 18.23 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 16 wallclock secs ( 2.42 usr 2.15 sys + 0.00 cusr 0.00 csys = 4.57 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 31 wallclock secs (21.84 usr 8.07 sys + 0.00 cusr 0.00 csys = 29.91 CPU) -Time for order_by_big_key (10:3000000): 33 wallclock secs (23.12 usr 7.93 sys + 0.00 cusr 0.00 csys = 31.05 CPU) -Time for order_by_big_key_desc (10:3000000): 32 wallclock secs (23.13 usr 8.16 sys + 0.00 cusr 0.00 csys = 31.29 CPU) -Time for order_by_big_key_prefix (10:3000000): 31 wallclock secs (21.76 usr 8.21 sys + 0.00 cusr 0.00 csys = 29.97 CPU) -Time for order_by_big_key2 (10:3000000): 31 wallclock secs (21.98 usr 7.84 sys + 0.00 cusr 0.00 csys = 29.82 CPU) -Time for order_by_big_key_diff (10:3000000): 39 wallclock secs (22.07 usr 7.71 sys + 0.00 cusr 0.00 csys = 29.78 CPU) -Time for order_by_big (10:3000000): 40 wallclock secs (21.73 usr 8.15 sys + 0.00 cusr 0.00 csys = 29.88 CPU) -Time for order_by_range (500:125750): 3 wallclock secs ( 0.81 usr 0.41 sys + 0.00 cusr 0.00 csys = 1.22 CPU) -Time for order_by_key_prefix (500:125750): 3 wallclock secs ( 0.98 usr 0.34 sys + 0.00 cusr 0.00 csys = 1.32 CPU) -Time for order_by_key2_diff (500:250500): 4 wallclock secs ( 2.00 usr 0.58 sys + 0.00 cusr 0.00 csys = 2.58 CPU) -Time for select_diff_key (500:1000): 138 wallclock secs ( 0.12 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.14 CPU) -Time for select_range_prefix (5010:42084): 7 wallclock secs ( 2.28 usr 0.46 sys + 0.00 cusr 0.00 csys = 2.74 CPU) -Time for select_range_key2 (5010:42084): 7 wallclock secs ( 2.16 usr 0.40 sys + 0.00 cusr 0.00 csys = 2.56 CPU) -Time for select_key_prefix (200000): 87 wallclock secs (51.79 usr 8.42 sys + 0.00 cusr 0.00 csys = 60.21 CPU) -Time for select_key (200000): 82 wallclock secs (51.17 usr 8.13 sys + 0.00 cusr 0.00 csys = 59.30 CPU) -Time for select_key_return_key (200000): 79 wallclock secs (48.93 usr 7.01 sys + 0.00 cusr 0.00 csys = 55.94 CPU) -Time for select_key2 (200000): 86 wallclock secs (50.00 usr 7.89 sys + 0.00 cusr 0.00 csys = 57.89 CPU) -Time for select_key2_return_key (200000): 81 wallclock secs (48.57 usr 6.51 sys + 0.00 cusr 0.00 csys = 55.08 CPU) -Time for select_key2_return_prim (200000): 83 wallclock secs (49.27 usr 7.43 sys + 0.00 cusr 0.00 csys = 56.70 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 6 wallclock secs ( 2.73 usr 0.53 sys + 0.00 cusr 0.00 csys = 3.26 CPU) -Time for select_range_key2 (20000:43500): 5 wallclock secs ( 2.49 usr 0.52 sys + 0.00 cusr 0.00 csys = 3.01 CPU) -Time for select_group (111): 42 wallclock secs ( 0.06 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.07 CPU) -Time for min_max_on_key (15000): 6 wallclock secs ( 3.53 usr 0.54 sys + 0.00 cusr 0.00 csys = 4.07 CPU) -Time for min_max (60): 23 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) -Time for count_on_key (100): 38 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.04 CPU) -Time for count (100): 33 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.04 CPU) -Time for count_distinct_big (20): 38 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 14 wallclock secs ( 1.80 usr 0.94 sys + 0.00 cusr 0.00 csys = 2.74 CPU) -Time for update_of_key_big (501): 20 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.02 CPU) - -Testing update with key -Time for update_with_key (300000): 60 wallclock secs ( 9.66 usr 6.21 sys + 0.00 cusr 0.00 csys = 15.87 CPU) -Time for update_with_key_prefix (100000): 21 wallclock secs ( 6.04 usr 1.98 sys + 0.00 cusr 0.00 csys = 8.02 CPU) - -Testing update of all rows -Time for update_big (10): 44 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 40 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 48 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for outer_join_found (10:10): 46 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for outer_join_not_found (500:10): 31 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing SELECT ... WHERE id in (10 values) -Time for select_in (500:5000) 0 wallclock secs ( 0.19 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.22 CPU) - -Time for select_join_in (500:5000) 1 wallclock secs ( 0.18 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.20 CPU) - -Testing SELECT ... WHERE id in (100 values) -Time for select_in (500:50000) 3 wallclock secs ( 0.57 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.68 CPU) - -Time for select_join_in (500:50000) 1 wallclock secs ( 0.51 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.70 CPU) - -Testing SELECT ... WHERE id in (1000 values) -Time for select_in (500:500000) 26 wallclock secs ( 4.25 usr 1.40 sys + 0.00 cusr 0.00 csys = 5.65 CPU) - -Time for select_join_in (500:500000) 14 wallclock secs ( 4.09 usr 1.42 sys + 0.00 cusr 0.00 csys = 5.51 CPU) - - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 6 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 2 wallclock secs ( 0.39 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.65 CPU) -Time for delete_range (12): 11 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 86 wallclock secs ( 7.22 usr 2.27 sys + 0.00 cusr 0.00 csys = 9.49 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 25 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 51 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 51 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 5 wallclock secs ( 1.29 usr 0.00 sys + 0.00 cusr 0.00 csys = 1.29 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1730 wallclock secs (523.67 usr 128.19 sys + 0.00 cusr 0.00 csys = 651.86 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/insert-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 0cdf5cbede85bb0cb594ddd21e035eee8bac9fb0..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,106 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 12:49:54 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 114 wallclock secs (25.11 usr 13.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 30 wallclock secs ( 4.71 usr 5.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 31 wallclock secs (17.94 usr 12.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:3000000): 31 wallclock secs (18.84 usr 12.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:3000000): 32 wallclock secs (19.23 usr 12.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_prefix (10:3000000): 30 wallclock secs (17.36 usr 12.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:3000000): 30 wallclock secs (17.35 usr 12.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:3000000): 36 wallclock secs (17.33 usr 12.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big (10:3000000): 40 wallclock secs (17.31 usr 12.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_range (500:125750): 5 wallclock secs ( 0.97 usr 0.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key_prefix (500:125750): 2 wallclock secs ( 0.92 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key2_diff (500:250500): 5 wallclock secs ( 1.67 usr 1.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 163 wallclock secs ( 0.27 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 10 wallclock secs ( 2.63 usr 0.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (5010:42084): 10 wallclock secs ( 2.64 usr 0.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 141 wallclock secs (73.88 usr 18.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 142 wallclock secs (77.87 usr 17.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_return_key (200000): 146 wallclock secs (82.66 usr 16.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2 (200000): 142 wallclock secs (74.50 usr 19.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_key (200000): 133 wallclock secs (73.16 usr 13.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_prim (200000): 132 wallclock secs (70.56 usr 13.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 8 wallclock secs ( 3.65 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (20000:43500): 9 wallclock secs ( 3.48 usr 0.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 95 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (15000): 10 wallclock secs ( 5.77 usr 1.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 23 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 41 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 50 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (20): 39 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 25 wallclock secs ( 4.24 usr 1.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 18 wallclock secs ( 0.04 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (300000): 116 wallclock secs (21.90 usr 14.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_with_key_prefix (100000): 36 wallclock secs (11.11 usr 4.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (10): 22 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 40 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 67 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 63 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 40 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing SELECT ... WHERE id in (10 values) -Time for select_in (500:5000) 0 wallclock secs ( 0.22 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_join_in (500:5000) 1 wallclock secs ( 0.23 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing SELECT ... WHERE id in (100 values) -Time for select_in (500:50000) 4 wallclock secs ( 0.56 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_join_in (500:50000) 2 wallclock secs ( 0.57 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing SELECT ... WHERE id in (1000 values) -Time for select_in (500:500000) 32 wallclock secs ( 3.96 usr 2.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_join_in (500:500000) 17 wallclock secs ( 4.02 usr 2.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 6 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 4 wallclock secs ( 0.88 usr 0.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_range (12): 9 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 98 wallclock secs (13.49 usr 3.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 20 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 47 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 47 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 7 wallclock secs ( 1.88 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 2381 wallclock secs (693.26 usr 241.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-NT_4.0 b/sql-bench/Results/insert-mysql-NT_4.0 deleted file mode 100644 index dddbf6d4c193192a6a40677b4571a13629b23b5b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-NT_4.0 +++ /dev/null @@ -1,90 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 14:09:43 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 203 wallclock secs (29.19 usr 40.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 59 wallclock secs ( 9.02 usr 12.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 88 wallclock secs (62.84 usr 25.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:3000000): 93 wallclock secs (66.86 usr 26.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:3000000): 94 wallclock secs (67.34 usr 25.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_prefix (10:3000000): 88 wallclock secs (62.72 usr 25.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:3000000): 88 wallclock secs (62.99 usr 24.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:3000000): 98 wallclock secs (62.45 usr 25.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big (10:3000000): 101 wallclock secs (61.84 usr 25.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_range (500:125750): 9 wallclock secs ( 2.92 usr 1.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key_prefix (500:125750): 6 wallclock secs ( 2.94 usr 1.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key2_diff (500:250500): 11 wallclock secs ( 5.53 usr 2.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 127 wallclock secs ( 0.67 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 15 wallclock secs ( 4.69 usr 1.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (5010:42084): 16 wallclock secs ( 4.70 usr 1.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 201 wallclock secs (93.56 usr 39.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 196 wallclock secs (103.61 usr 37.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_return_key (200000): 195 wallclock secs (89.05 usr 37.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2 (200000): 205 wallclock secs (93.56 usr 39.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_key (200000): 198 wallclock secs (90.06 usr 35.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_prim (200000): 203 wallclock secs (91.61 usr 35.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 13 wallclock secs ( 5.50 usr 2.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (20000:43500): 14 wallclock secs ( 5.69 usr 2.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 38 wallclock secs ( 0.05 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (15000): 14 wallclock secs ( 6.08 usr 2.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 19 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 37 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 36 wallclock secs ( 0.03 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (20): 91 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 56 wallclock secs ( 4.66 usr 6.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 32 wallclock secs ( 0.05 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (300000): 190 wallclock secs (27.05 usr 40.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_with_key_prefix (100000): 58 wallclock secs ( 9.02 usr 13.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (10): 66 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 41 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 120 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 106 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 56 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 12 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 7 wallclock secs ( 1.14 usr 1.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_all (12): 19 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 1440 wallclock secs (13.86 usr 11.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 447 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 1431 wallclock secs ( 0.00 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 1431 wallclock secs ( 0.00 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 9 wallclock secs ( 2.53 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 6659 wallclock secs (1143.94 usr 544.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/insert-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index b1a11de8ff89e29e5445f1e9ca0a054ddc15145d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,56 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 3:45:56 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 371 wallclock secs (48.34 usr 36.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 59 wallclock secs (14.62 usr 11.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 129 wallclock secs (84.68 usr 41.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 137 wallclock secs (83.69 usr 41.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 215 wallclock secs (84.17 usr 40.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 54 wallclock secs ( 8.51 usr 2.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 39 wallclock secs ( 8.39 usr 2.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 468 wallclock secs (190.39 usr 54.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 468 wallclock secs (197.61 usr 52.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 33 wallclock secs (10.90 usr 3.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 30 wallclock secs (10.83 usr 3.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 257 wallclock secs ( 0.22 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 6 wallclock secs ( 2.61 usr 0.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 86 wallclock secs ( 0.12 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 136 wallclock secs ( 0.11 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 131 wallclock secs ( 0.14 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with functions -Time for update_key (500): 1 wallclock secs ( 0.07 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_key_big (501): 82 wallclock secs ( 0.12 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.09 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 58 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 432 wallclock secs (32.22 usr 14.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_key (256): 149 wallclock secs ( 0.09 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big (2): 268 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 24 wallclock secs ( 3.72 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 3635 wallclock secs (781.69 usr 305.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-SunOS_5.7_sun4m b/sql-bench/Results/insert-mysql-SunOS_5.7_sun4m deleted file mode 100644 index 874d1fc2a7e761940076209f4433ec21d9a30b69..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,103 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 2:42:45 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1082 wallclock secs (190.09 usr 166.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 299 wallclock secs (57.52 usr 54.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 455 wallclock secs (255.90 usr 196.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:3000000): 448 wallclock secs (251.08 usr 195.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:3000000): 453 wallclock secs (253.91 usr 197.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:3000000): 445 wallclock secs (248.50 usr 195.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:3000000): 648 wallclock secs (250.20 usr 227.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -9 queries in 9 loops of 10 loops took 610 seconds -Estimated time for order_by_big (10:2700000): 677 wallclock secs (251.22 usr 227.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_range (500:125750): 58 wallclock secs (12.03 usr 8.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (500:125750): 39 wallclock secs (12.41 usr 8.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key2_diff (500:250500): 76 wallclock secs (22.75 usr 15.86 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -287 queries in 287 loops of 500 loops took 602 seconds -Estimated time for select_diff_key (500:574): 1048 wallclock secs ( 2.16 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 99 wallclock secs (23.80 usr 11.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (5010:42084): 95 wallclock secs (23.87 usr 11.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -95524 queries in 47762 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 1258 wallclock secs (576.44 usr 251.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -101292 queries in 50646 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 1186 wallclock secs (585.97 usr 241.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -96300 queries in 48150 loops of 100000 loops took 601 seconds -Estimated time for select_key2 (200000): 1248 wallclock secs (578.67 usr 246.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 82 wallclock secs (31.51 usr 14.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (20000:43500): 82 wallclock secs (32.08 usr 15.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 276 wallclock secs ( 0.47 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (15000): 82 wallclock secs (41.17 usr 14.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 144 wallclock secs ( 0.16 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 297 wallclock secs ( 0.34 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 191 wallclock secs ( 0.34 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -16 queries in 8 loops of 10 loops took 673 seconds -Estimated time for count_distinct_big (20): 841 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 275 wallclock secs (33.49 usr 28.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 209 wallclock secs ( 0.30 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (300000): 1136 wallclock secs (171.26 usr 157.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (10): 384 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 359 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 757 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 724 wallclock secs ( 0.00 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 423 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 44 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 53 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 39 wallclock secs ( 5.98 usr 5.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_all (12): 129 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 1988 wallclock secs (94.64 usr 58.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 349 wallclock secs ( 0.22 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 1460 wallclock secs ( 0.13 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 1460 wallclock secs ( 0.13 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 55 wallclock secs ( 8.95 usr 0.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 19996 wallclock secs (4017.95 usr 2552.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-SunOS_5.7_sun4u b/sql-bench/Results/insert-mysql-SunOS_5.7_sun4u deleted file mode 100644 index 8bec0426b047ffbc089c306efb6e04692415f9ed..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,72 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 22:20:19 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 229 wallclock secs (20.94 usr 26.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 33 wallclock secs ( 6.55 usr 8.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 84 wallclock secs (46.20 usr 36.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 84 wallclock secs (45.63 usr 36.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 111 wallclock secs (45.15 usr 37.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 311 wallclock secs ( 0.28 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 22 wallclock secs ( 3.89 usr 2.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 21 wallclock secs ( 3.91 usr 1.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 213 wallclock secs (92.33 usr 41.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 210 wallclock secs (84.78 usr 37.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 14 wallclock secs ( 5.34 usr 2.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 15 wallclock secs ( 5.01 usr 2.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 67 wallclock secs ( 0.10 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 3 wallclock secs ( 1.22 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 36 wallclock secs ( 0.06 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 54 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 53 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (500): 2 wallclock secs ( 0.07 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 44 wallclock secs ( 0.03 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 200 wallclock secs (17.53 usr 24.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 69 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 86 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 132 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 132 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -67 queries in 66 loops of 500 loops took 603 seconds -Estimated time for outer_join_not_found (500:507): 603 wallclock secs ( 0.07 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 1 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 25 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 1333 wallclock secs (14.75 usr 8.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_key (256): 163 wallclock secs ( 0.02 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 251 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 13 wallclock secs ( 1.72 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 8580 wallclock secs (396.21 usr 267.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-SunOS_5.8_sun4u b/sql-bench/Results/insert-mysql-SunOS_5.8_sun4u deleted file mode 100644 index 5ec5ce4db0d3d9b04c9a2016daf5065242be799e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,85 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 2:10:12 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 185 wallclock secs (21.65 usr 28.32 sys + 0.00 cusr 0.00 csys = 49.97 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 48 wallclock secs ( 7.31 usr 9.16 sys + 0.00 cusr 0.00 csys = 16.47 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 94 wallclock secs (47.10 usr 46.81 sys + 0.00 cusr 0.00 csys = 93.91 CPU) -Time for order_by_big_key (10:3000000): 94 wallclock secs (46.86 usr 47.25 sys + 0.00 cusr 0.00 csys = 94.11 CPU) -Time for order_by_big_key_desc (10:3000000): 94 wallclock secs (46.97 usr 46.76 sys + 0.00 cusr 0.00 csys = 93.73 CPU) -Time for order_by_big_key2 (10:3000000): 94 wallclock secs (47.53 usr 46.27 sys + 0.00 cusr 0.00 csys = 93.80 CPU) -Time for order_by_big_key_diff (10:3000000): 107 wallclock secs (47.62 usr 46.94 sys + 0.00 cusr 0.00 csys = 94.56 CPU) -Time for order_by_big (10:3000000): 110 wallclock secs (47.64 usr 46.77 sys + 0.00 cusr 0.00 csys = 94.41 CPU) -Time for order_by_range (500:125750): 10 wallclock secs ( 2.19 usr 1.94 sys + 0.00 cusr 0.00 csys = 4.13 CPU) -Time for order_by_key (500:125750): 7 wallclock secs ( 2.10 usr 2.12 sys + 0.00 cusr 0.00 csys = 4.22 CPU) -Time for order_by_key2_diff (500:250500): 14 wallclock secs ( 3.72 usr 4.32 sys + 0.00 cusr 0.00 csys = 8.04 CPU) -Time for select_diff_key (500:1000): 345 wallclock secs ( 0.35 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.43 CPU) -Time for select_range_prefix (5010:42084): 21 wallclock secs ( 4.49 usr 2.42 sys + 0.00 cusr 0.00 csys = 6.91 CPU) -Time for select_range_key2 (5010:42084): 20 wallclock secs ( 5.09 usr 2.75 sys + 0.00 cusr 0.00 csys = 7.84 CPU) -Time for select_key_prefix (200000): 222 wallclock secs (95.29 usr 45.47 sys + 0.00 cusr 0.00 csys = 140.76 CPU) -Time for select_key (200000): 209 wallclock secs (94.26 usr 47.75 sys + 0.00 cusr 0.00 csys = 142.01 CPU) -Time for select_key2 (200000): 217 wallclock secs (94.64 usr 47.74 sys + 0.00 cusr 0.00 csys = 142.38 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 15 wallclock secs ( 5.56 usr 2.94 sys + 0.00 cusr 0.00 csys = 8.50 CPU) -Time for select_range_key2 (20000:43500): 14 wallclock secs ( 5.56 usr 2.57 sys + 0.00 cusr 0.00 csys = 8.13 CPU) -Time for select_group (111): 79 wallclock secs ( 0.03 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.07 CPU) -Time for min_max_on_key (15000): 14 wallclock secs ( 6.13 usr 3.14 sys + 0.00 cusr 0.00 csys = 9.27 CPU) -Time for min_max (60): 43 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) -Time for count_on_key (100): 72 wallclock secs ( 0.04 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.08 CPU) -Time for count (100): 54 wallclock secs ( 0.02 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.06 CPU) -Time for count_distinct_big (20): 166 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.02 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 38 wallclock secs ( 3.56 usr 4.58 sys + 0.00 cusr 0.00 csys = 8.14 CPU) -Time for update_of_key_big (501): 45 wallclock secs ( 0.02 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.04 CPU) - -Testing update with key -Time for update_with_key (300000): 177 wallclock secs (18.82 usr 27.57 sys + 0.00 cusr 0.00 csys = 46.39 CPU) - -Testing update of all rows -Time for update_big (10): 69 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 102 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for outer_join (10:10): 143 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for outer_join_found (10:10): 143 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 94 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.03 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 13 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 15 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 6 wallclock secs ( 0.77 usr 0.91 sys + 0.00 cusr 0.00 csys = 1.68 CPU) -Time for delete_all (12): 29 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 614 wallclock secs (17.07 usr 10.23 sys + 0.00 cusr 0.00 csys = 27.30 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 106 wallclock secs ( 0.01 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.04 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 299 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 299 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 13 wallclock secs ( 1.84 usr 0.03 sys + 0.00 cusr 0.00 csys = 1.87 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 4255 wallclock secs (674.38 usr 525.05 sys + 0.00 cusr 0.00 csys = 1199.43 CPU) diff --git a/sql-bench/Results/insert-mysql-win98 b/sql-bench/Results/insert-mysql-win98 deleted file mode 100644 index bcb8f6c55a6f6f7d691ea13f23917179f41682ac..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql-win98 +++ /dev/null @@ -1,72 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 3:59:00 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 438 wallclock secs (437.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 91 wallclock secs (91.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 173 wallclock secs (173.79 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 175 wallclock secs (174.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 249 wallclock secs (248.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 241 wallclock secs (240.63 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 33 wallclock secs (33.50 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 34 wallclock secs (33.67 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 542 wallclock secs (542.23 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 540 wallclock secs (540.35 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 33 wallclock secs (33.12 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 33 wallclock secs (33.45 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 58 wallclock secs (58.22 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 7 wallclock secs ( 6.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 33 wallclock secs (32.90 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 52 wallclock secs (52.23 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 55 wallclock secs (54.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys with functions -Time for update_of_key (500): 1 wallclock secs ( 0.99 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 38 wallclock secs (38.07 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 432 wallclock secs (432.20 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 84 wallclock secs (83.33 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 63 wallclock secs (63.33 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 146 wallclock secs (145.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 144 wallclock secs (144.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -75 queries in 74 loops of 500 loops took 606 seconds -Estimated time for outer_join_not_found (500:506): 606 wallclock secs (605.55 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 0 wallclock secs ( 0.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 22 wallclock secs (21.59 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 364 wallclock secs (363.72 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 58 wallclock secs (58.22 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 112 wallclock secs (112.11 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 11 wallclock secs (11.64 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 8358 wallclock secs (8356.07 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/insert-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index c20aee3d5c549829b7fd70e1d48c7be94e89794b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,55 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:11:01 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 111 wallclock secs (41.50 usr 6.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 15 wallclock secs ( 5.68 usr 1.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 69 wallclock secs (47.62 usr 7.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 69 wallclock secs (47.67 usr 7.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 86 wallclock secs (47.40 usr 7.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 305 wallclock secs ( 0.62 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5000:63000): 15 wallclock secs ( 5.62 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5000:63000): 15 wallclock secs ( 5.43 usr 0.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 265 wallclock secs (165.34 usr 9.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 262 wallclock secs (162.27 usr 10.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 15 wallclock secs ( 9.01 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 15 wallclock secs ( 8.36 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys in loops -Note: Query took longer then time-limit: 600 -Estimating end time based on: -599999 queries in 599999 loops of 600000 loops took 665 seconds -Estimated time for update_of_key (600000): 665 wallclock secs (152.71 usr 23.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (100000): 147 wallclock secs (37.92 usr 7.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of all rows -Time for update_big (500): 34 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 0 wallclock secs ( 0.06 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 18 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 5 keys and with a primary key with 5 parts -Time for insert_key (100000): 68 wallclock secs (13.88 usr 2.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 29 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big_many_keys (2): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 2211 wallclock secs (751.12 usr 86.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql_odbc-win98 b/sql-bench/Results/insert-mysql_odbc-win98 deleted file mode 100644 index 4895afdf284d8c5ed7c699d914d8fb86eb97e9cf..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-mysql_odbc-win98 +++ /dev/null @@ -1,62 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 17:02:20 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1029 wallclock secs (1028.97 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (300000): 280 wallclock secs (280.34 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 369 wallclock secs (368.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key (10:3000000): 370 wallclock secs (369.81 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by (10:3000000): 491 wallclock secs (490.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 59 wallclock secs (59.10 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (5010:42084): 54 wallclock secs (54.49 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -129260 queries in 64630 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 929 wallclock secs (928.96 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -131414 queries in 65707 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 914 wallclock secs (914.74 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 56 wallclock secs (56.13 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (20000:43500): 56 wallclock secs (56.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 190 wallclock secs (190.09 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (3000): 12 wallclock secs (12.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 51 wallclock secs (51.52 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 67 wallclock secs (66.63 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 93 wallclock secs (92.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with functions -Time for update_key (500): 2 wallclock secs ( 1.81 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_key_big (501): 59 wallclock secs (59.81 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (500): 2 wallclock secs ( 1.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_big (12): 42 wallclock secs (41.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 648 wallclock secs (648.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 110 wallclock secs (109.57 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting everything from table -Time for delete_big (2): 169 wallclock secs (168.73 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 40 wallclock secs (40.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 6093 wallclock secs (6093.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/insert-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 8dae6ad1b419936ac2ec7b57a0f2c8b16253028c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,69 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 0:49:44 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1017 wallclock secs (228.54 usr 28.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 2000 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 844 wallclock secs (366.38 usr 91.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8 queries in 8 loops of 10 loops took 677 seconds -Estimated time for order_by_key (10:2400000): 846 wallclock secs (362.64 usr 93.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8 queries in 8 loops of 10 loops took 651 seconds -Estimated time for order_by (10:2400000): 813 wallclock secs (362.89 usr 88.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range_prefix (5010:42084): 46 wallclock secs (18.80 usr 3.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -225 queries in 225 loops of 5000 loops took 638 seconds -Estimated time for select_range (5000:1890): 14177 wallclock secs (17.56 usr 3.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -187460 queries in 93730 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 641 wallclock secs (235.18 usr 40.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1316 queries in 658 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 91337 wallclock secs (252.28 usr 48.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 37 wallclock secs (17.82 usr 2.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1480 queries in 37 loops of 500 loops took 608 seconds -Estimated time for select_range (20000:3219): 608 wallclock secs ( 1.26 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (91): 50 wallclock secs ( 0.08 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (3000): 9 wallclock secs ( 3.29 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 25 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 31 wallclock secs ( 0.08 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 50 wallclock secs ( 0.08 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 221 wallclock secs ( 0.26 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for update_key_big (501): 299 wallclock secs ( 0.40 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 265 wallclock secs ( 0.34 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for delete_big (12): 495 wallclock secs ( 0.04 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 647 wallclock secs (78.18 usr 9.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 445 wallclock secs ( 0.19 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 544 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 123077 wallclock secs (1962.20 usr 413.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/insert-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index e0db6d488755cb6c16e0a8da77ce8f1d6ec73a97..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,101 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 8:24:00 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1154 wallclock secs (221.85 usr 27.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 14 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 2001 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 855 wallclock secs (366.27 usr 95.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8 queries in 8 loops of 10 loops took 685 seconds -Estimated time for order_by_key (10:2400000): 856 wallclock secs (370.12 usr 85.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 12 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Note: Query took longer then time-limit: 600 -Estimating end time based on: -8 queries in 8 loops of 10 loops took 646 seconds -Estimated time for order_by (10:2400000): 807 wallclock secs (349.92 usr 85.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for select_range_prefix (5010:42084): 47 wallclock secs (18.29 usr 3.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -225 queries in 225 loops of 5000 loops took 639 seconds -Estimated time for select_range (5000:1890): 14200 wallclock secs (18.89 usr 2.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -159614 queries in 79807 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 753 wallclock secs (235.02 usr 39.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1312 queries in 656 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 91615 wallclock secs (228.66 usr 33.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 12 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 37 wallclock secs (17.15 usr 3.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1480 queries in 37 loops of 500 loops took 615 seconds -Estimated time for select_range (20000:3219): 615 wallclock secs ( 1.24 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for select_group (91): 53 wallclock secs ( 0.08 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (3000): 9 wallclock secs ( 3.39 usr 0.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 25 wallclock secs ( 0.09 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 35 wallclock secs ( 0.11 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 50 wallclock secs ( 0.10 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 223 wallclock secs ( 0.31 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 11 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for update_key_big (501): 302 wallclock secs ( 0.45 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 29 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 262 wallclock secs ( 0.31 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for delete_big (12): 500 wallclock secs ( 0.03 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for insert_key (100000): 677 wallclock secs (78.14 usr 9.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 24 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 601 wallclock secs ( 0.18 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 111 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 969 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 124637 wallclock secs (1926.54 usr 389.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/insert-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 6f7027c3151aae9301f42e3cd5a2c358682bee8c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,72 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-09 19:30:50 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 1011 wallclock secs (169.92 usr 19.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 164 wallclock secs (46.42 usr 5.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 113 wallclock secs (26.65 usr 1.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by_key (10:3000000): 265 wallclock secs (26.66 usr 1.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by (10:3000000): 269 wallclock secs (26.89 usr 1.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -90 queries in 90 loops of 5000 loops took 609 seconds -Estimated time for select_range_prefix (5000:756): 33833 wallclock secs ( 6.11 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -90 queries in 90 loops of 5000 loops took 609 seconds -Estimated time for select_range (5000:756): 33833 wallclock secs ( 2.78 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -187952 queries in 93976 loops of 100000 loops took 601 seconds -Estimated time for select_key_prefix (200000): 639 wallclock secs (123.46 usr 13.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -189328 queries in 94664 loops of 100000 loops took 601 seconds -Estimated time for select_key (200000): 634 wallclock secs (122.95 usr 13.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -520 queries in 13 loops of 500 loops took 629 seconds -Estimated time for select_range_prefix (20000:1131): 629 wallclock secs ( 0.13 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -520 queries in 13 loops of 500 loops took 626 seconds -Estimated time for select_range (20000:1131): 626 wallclock secs ( 0.23 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (101): 5594 wallclock secs ( 0.07 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1080 queries in 180 loops of 500 loops took 603 seconds -Estimated time for min_max_on_key (3000): 1675 wallclock secs ( 1.28 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 49 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 148 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 156 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 443 wallclock secs ( 0.23 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for update_key_big (501): 978 wallclock secs ( 0.34 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 634 wallclock secs ( 0.32 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for delete_big (12): 43 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 7 keys and with a primary key with 7 parts -Time for insert_key (100000): 944 wallclock secs (57.30 usr 6.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 3569 wallclock secs ( 0.14 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 33 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 133319 wallclock secs (625.54 usr 64.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/insert-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 5cbb52e1ddcbfb16bce29d1f5c2b85552a9cebe8..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,103 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 4:22:08 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 304 wallclock secs (88.91 usr 24.12 sys + 0.00 cusr 0.00 csys = 113.03 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 120 wallclock secs (29.00 usr 13.77 sys + 0.00 cusr 0.00 csys = 42.77 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 61 wallclock secs (22.36 usr 3.32 sys + 0.00 cusr 0.00 csys = 25.68 CPU) -Time for order_by_big_key (10:3000000): 145 wallclock secs (26.12 usr 1.23 sys + 0.00 cusr 0.00 csys = 27.35 CPU) -Time for order_by_big_key_desc (10:3000000): 145 wallclock secs (25.80 usr 1.41 sys + 0.00 cusr 0.00 csys = 27.21 CPU) -Time for order_by_big_key_prefix (10:3000000): 132 wallclock secs (22.46 usr 0.83 sys + 0.00 cusr 0.00 csys = 23.29 CPU) -Time for order_by_big_key2 (10:3000000): 133 wallclock secs (22.62 usr 0.93 sys + 0.00 cusr 0.00 csys = 23.55 CPU) -Time for order_by_big_key_diff (10:3000000): 139 wallclock secs (22.46 usr 0.67 sys + 0.00 cusr 0.00 csys = 23.13 CPU) -Time for order_by_big (10:3000000): 146 wallclock secs (22.57 usr 0.64 sys + 0.00 cusr 0.00 csys = 23.21 CPU) -Time for order_by_range (500:125750): 4 wallclock secs ( 1.11 usr 0.04 sys + 0.00 cusr 0.00 csys = 1.15 CPU) -Time for order_by_key_prefix (500:125750): 4 wallclock secs ( 1.12 usr 0.06 sys + 0.00 cusr 0.00 csys = 1.18 CPU) -Time for order_by_key2_diff (500:250500): 7 wallclock secs ( 2.09 usr 0.04 sys + 0.00 cusr 0.00 csys = 2.13 CPU) -Time for select_diff_key (500:1000): 0 wallclock secs ( 0.16 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.18 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -195 queries in 195 loops of 5010 loops took 627 seconds -Estimated time for select_range_prefix (5010:1638): 16109 wallclock secs ( 2.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 2.83 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -195 queries in 195 loops of 5010 loops took 626 seconds -Estimated time for select_range_key2 (5010:1638): 16083 wallclock secs ( 1.80 usr 0.00 sys + 0.00 cusr 0.00 csys = 1.80 CPU) -Time for select_key_prefix (200000): 210 wallclock secs (67.51 usr 8.60 sys + 0.00 cusr 0.00 csys = 76.11 CPU) -Time for select_key (200000): 245 wallclock secs (69.03 usr 8.64 sys + 0.00 cusr 0.00 csys = 77.67 CPU) -Time for select_key_return_key (200000): 240 wallclock secs (67.26 usr 8.61 sys + 0.00 cusr 0.00 csys = 75.87 CPU) -Time for select_key2 (200000): 209 wallclock secs (67.94 usr 8.08 sys + 0.00 cusr 0.00 csys = 76.02 CPU) -Time for select_key2_return_key (200000): 201 wallclock secs (63.19 usr 8.05 sys + 0.00 cusr 0.00 csys = 71.24 CPU) -Time for select_key2_return_prim (200000): 204 wallclock secs (64.84 usr 7.89 sys + 0.00 cusr 0.00 csys = 72.73 CPU) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2080 queries in 52 loops of 500 loops took 612 seconds -Estimated time for select_range_prefix (20000:4524): 5884 wallclock secs ( 3.37 usr 0.48 sys + 0.00 cusr 0.00 csys = 3.85 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2040 queries in 51 loops of 500 loops took 601 seconds -Estimated time for select_range_key2 (20000:4437): 5892 wallclock secs ( 4.02 usr 0.10 sys + 0.00 cusr 0.00 csys = 4.12 CPU) -Time for select_group (111): 272 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1410 queries in 235 loops of 2500 loops took 602 seconds -Estimated time for min_max_on_key (15000): 6404 wallclock secs ( 4.36 usr 0.96 sys + 0.00 cusr 0.00 csys = 5.32 CPU) -Time for min_max (60): 59 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.03 CPU) -Time for count_on_key (100): 114 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for count (100): 131 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.06 CPU) -Time for count_distinct_big (20): 203 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 119 wallclock secs (16.20 usr 10.81 sys + 0.00 cusr 0.00 csys = 27.01 CPU) -Time for update_of_key_big (501): 333 wallclock secs ( 0.21 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.42 CPU) - -Testing update with key -Time for update_with_key (300000): 567 wallclock secs (90.20 usr 25.08 sys + 0.00 cusr 0.00 csys = 115.28 CPU) -Time for update_with_key_prefix (100000): 244 wallclock secs (29.03 usr 5.64 sys + 0.00 cusr 0.00 csys = 34.67 CPU) - -Testing update of all rows -Time for update_big (10): 6612 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 3961 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 4093 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 4086 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -2 queries in 2 loops of 500 loops took 814 seconds -Estimated time for outer_join_not_found (500:500): 203500 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 111 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 180 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for drop table(2): 18 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing delete -Time for delete_key (10000): 136 wallclock secs ( 3.08 usr 0.59 sys + 0.00 cusr 0.00 csys = 3.67 CPU) -Time for delete_all (12): 3191 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 907 wallclock secs (45.53 usr 60.49 sys + 0.00 cusr 0.00 csys = 106.02 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 6813 wallclock secs ( 0.13 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.15 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 118 wallclock secs ( 0.05 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.09 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 118 wallclock secs ( 0.05 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.09 CPU) - -Estimated total time: 288864 wallclock secs (887.56 usr 201.43 sys + 0.00 cusr 0.00 csys = 1088.99 CPU) diff --git a/sql-bench/Results/insert-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/insert-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 3d572e06ae2fdd118060a3f9d617b2821a2c4974..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,92 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 7:45:22 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 901 wallclock secs (169.33 usr 18.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 47 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 169 wallclock secs (48.44 usr 5.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 15 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 82 wallclock secs (26.48 usr 1.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by_key (10:3000000): 208 wallclock secs (26.76 usr 1.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 33 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for order_by (10:3000000): 209 wallclock secs (26.70 usr 1.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 32 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for select_range_prefix (5010:42084): 88 wallclock secs ( 4.67 usr 0.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (5010:42084): 89 wallclock secs ( 4.78 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key_prefix (200000): 550 wallclock secs (123.88 usr 13.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key (200000): 547 wallclock secs (123.81 usr 13.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 2 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -600 queries in 15 loops of 500 loops took 632 seconds -Estimated time for select_range_prefix (20000:1305): 632 wallclock secs ( 0.28 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Note: Query took longer then time-limit: 600 -Estimating end time based on: -600 queries in 15 loops of 500 loops took 633 seconds -Estimated time for select_range (20000:1305): 633 wallclock secs ( 0.19 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for select_group (101): 7704 wallclock secs ( 0.07 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1110 queries in 185 loops of 500 loops took 601 seconds -Estimated time for min_max_on_key (3000): 1624 wallclock secs ( 1.35 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 48 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 161 wallclock secs ( 0.10 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 153 wallclock secs ( 0.10 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 11 wallclock secs ( 0.33 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 28 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for update_key_big (501): 343 wallclock secs ( 0.34 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1818 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 11 wallclock secs ( 0.20 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 89 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for delete_big (12): 39 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 7 keys and with a primary key with 7 parts -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for insert_key (100000): 956 wallclock secs (57.05 usr 7.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 17 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 2292 wallclock secs ( 0.21 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1829 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 19 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 62302 wallclock secs (630.39 usr 65.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/insert-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/insert-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 7cf90e5b34be09b1e625cd0cfd74ed63e8c31017..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,104 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 18:27:26 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 296 wallclock secs (89.01 usr 24.43 sys + 0.00 cusr 0.00 csys = 113.44 CPU) - -Time for book-keeping (1): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing insert of duplicates -Time for insert_duplicates (100000): 111 wallclock secs (28.41 usr 9.26 sys + 0.00 cusr 0.00 csys = 37.67 CPU) - -Retrieving data from the table -Time for select_big (10:3000000): 55 wallclock secs (22.58 usr 2.28 sys + 0.00 cusr 0.00 csys = 24.86 CPU) -Time for order_by_big_key (10:3000000): 150 wallclock secs (25.91 usr 1.24 sys + 0.00 cusr 0.00 csys = 27.15 CPU) -Time for order_by_big_key_desc (10:3000000): 147 wallclock secs (25.81 usr 1.23 sys + 0.00 cusr 0.00 csys = 27.04 CPU) -Time for order_by_big_key_prefix (10:3000000): 133 wallclock secs (22.64 usr 0.62 sys + 0.00 cusr 0.00 csys = 23.26 CPU) -Time for order_by_big_key2 (10:3000000): 137 wallclock secs (22.59 usr 0.71 sys + 0.00 cusr 0.00 csys = 23.30 CPU) -Time for order_by_big_key_diff (10:3000000): 143 wallclock secs (22.68 usr 0.55 sys + 0.00 cusr 0.00 csys = 23.23 CPU) -Time for order_by_big (10:3000000): 147 wallclock secs (22.48 usr 0.61 sys + 0.00 cusr 0.00 csys = 23.09 CPU) -Time for order_by_range (500:125750): 4 wallclock secs ( 1.04 usr 0.04 sys + 0.00 cusr 0.00 csys = 1.08 CPU) -Time for order_by_key_prefix (500:125750): 3 wallclock secs ( 1.48 usr 0.03 sys + 0.00 cusr 0.00 csys = 1.51 CPU) -Time for order_by_key2_diff (500:250500): 7 wallclock secs ( 2.07 usr 0.04 sys + 0.00 cusr 0.00 csys = 2.11 CPU) -Time for select_diff_key (500:1000): 1 wallclock secs ( 0.21 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.21 CPU) -Time for select_range_prefix (5010:42084): 34 wallclock secs ( 2.90 usr 0.27 sys + 0.00 cusr 0.00 csys = 3.17 CPU) -Time for select_range_key2 (5010:42084): 33 wallclock secs ( 2.72 usr 0.30 sys + 0.00 cusr 0.00 csys = 3.02 CPU) -Time for select_key_prefix (200000): 192 wallclock secs (67.39 usr 7.56 sys + 0.00 cusr 0.00 csys = 74.95 CPU) -Time for select_key (200000): 213 wallclock secs (67.07 usr 8.38 sys + 0.00 cusr 0.00 csys = 75.45 CPU) -Time for select_key_return_key (200000): 208 wallclock secs (65.98 usr 8.96 sys + 0.00 cusr 0.00 csys = 74.94 CPU) -Time for select_key2 (200000): 192 wallclock secs (67.06 usr 8.24 sys + 0.00 cusr 0.00 csys = 75.30 CPU) -Time for select_key2_return_key (200000): 183 wallclock secs (63.93 usr 8.32 sys + 0.00 cusr 0.00 csys = 72.25 CPU) -Time for select_key2_return_prim (200000): 188 wallclock secs (64.56 usr 8.71 sys + 0.00 cusr 0.00 csys = 73.27 CPU) - -Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 14 wallclock secs ( 3.73 usr 0.38 sys + 0.00 cusr 0.00 csys = 4.11 CPU) -Time for select_range_key2 (20000:43500): 14 wallclock secs ( 3.84 usr 0.37 sys + 0.00 cusr 0.00 csys = 4.21 CPU) -Time for select_group (111): 267 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.06 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1398 queries in 233 loops of 2500 loops took 601 seconds -Estimated time for min_max_on_key (15000): 6448 wallclock secs ( 4.83 usr 0.54 sys + 0.00 cusr 0.00 csys = 5.36 CPU) -Time for min_max (60): 58 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for count_on_key (100): 115 wallclock secs ( 0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) -Time for count (100): 132 wallclock secs ( 0.04 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.04 CPU) -Time for count_distinct_big (20): 204 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing update of keys with functions -Time for update_of_key (50000): 90 wallclock secs (14.87 usr 5.98 sys + 0.00 cusr 0.00 csys = 20.85 CPU) -Time for book-keeping (1): 58 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for update_of_key_big (501): 647 wallclock secs ( 0.12 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.18 CPU) - -Time for book-keeping (1): 236 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update with key -Time for update_with_key (300000): 470 wallclock secs (87.85 usr 41.80 sys + 0.00 cusr 0.00 csys = 129.65 CPU) -Time for update_with_key_prefix (100000): 170 wallclock secs (31.13 usr 15.28 sys + 0.00 cusr 0.00 csys = 46.41 CPU) - -Testing update of all rows -Time for update_big (10): 3883 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing left outer join -Time for outer_join_on_key (10:10): 238 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 253 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 243 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 242 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 45 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 77 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) -Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for book-keeping (1): 1626 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - - -Testing delete -Time for delete_key (10000): 11 wallclock secs ( 3.02 usr 0.37 sys + 0.00 cusr 0.00 csys = 3.39 CPU) -Time for delete_all (12): 11 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.02 CPU) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 895 wallclock secs (45.94 usr 68.46 sys + 0.00 cusr 0.00 csys = 114.40 CPU) - -Time for book-keeping (1): 16 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 835 wallclock secs ( 0.10 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.19 CPU) - -Time for book-keeping (1): 1298 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Deleting rows from the table -Time for delete_big_many_keys (128): 3 wallclock secs ( 0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) - -Deleting everything from table -Time for delete_all_many_keys (1): 3 wallclock secs ( 0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 21187 wallclock secs (884.26 usr 225.15 sys + 0.00 cusr 0.00 csys = 1109.40 CPU) diff --git a/sql-bench/Results/insert-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/insert-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index edc7ac56e7faa9c218576113701dd654d2859f65..0000000000000000000000000000000000000000 --- a/sql-bench/Results/insert-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,63 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 13:04:51 - -Testing the speed of inserting data into 1 table and do some selects on it. -The tests are done with a table that has 100000 rows. - -Generating random keys -Creating tables -Inserting 100000 rows in order -Inserting 100000 rows in reverse order -Inserting 100000 rows in random order -Time for insert (300000): 947 wallclock secs (259.72 usr 21.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing insert of duplicates -Time for insert_duplicates (300000): 91 wallclock secs (59.65 usr 3.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Retrieving data from the table -Time for select_big (10:3000000): 312 wallclock secs (119.98 usr 6.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by_key (10:3000000): 375 wallclock secs (120.22 usr 7.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for order_by (10:3000000): 367 wallclock secs (116.72 usr 6.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -15 queries in 15 loops of 5000 loops took 602 seconds -Estimated time for select_range_prefix (5000:126): 200666 wallclock secs (10.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -30 queries in 30 loops of 5000 loops took 1198 seconds -Estimated time for select_range (5000:252): 199666 wallclock secs ( 8.33 usr 1.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key_prefix (200000): 545 wallclock secs (216.93 usr 15.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_key (200000): 573 wallclock secs (251.14 usr 17.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Test of compares with simple ranges -Note: Query took longer then time-limit: 600 -Estimating end time based on: -560 queries in 14 loops of 500 loops took 623 seconds -Estimated time for select_range_prefix (20000:1218): 623 wallclock secs ( 0.39 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -560 queries in 14 loops of 500 loops took 622 seconds -Estimated time for select_range (20000:1218): 622 wallclock secs ( 0.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_group (101): 1206 wallclock secs ( 0.06 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (3000): 6 wallclock secs ( 1.91 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max (60): 406 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (100): 1151 wallclock secs ( 0.13 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count (100): 1213 wallclock secs ( 0.10 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update with functions -Time for update_key (500): 2 wallclock secs ( 0.42 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for update_key_big (501): 818 wallclock secs ( 0.30 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing delete -Time for delete_key (500): 29 wallclock secs ( 0.43 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for delete_big (12): 250 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Insert into table with 7 keys and with a primary key with 7 parts -Time for insert_key (100000): 1153 wallclock secs (85.87 usr 7.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing update of keys -Time for update_of_primary_key_many_keys (256): 3015 wallclock secs ( 0.28 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Deleting everything from table -Time for delete_big (2): 163 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 457496 wallclock secs (1277.60 usr 88.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/select-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index caded6105d7d86ff03582bc8e4476d500090fe06..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-19 5:18:19 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 22 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 179 secs ( 7.14 usr 1.96 sys = 9.10 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 4 secs ( 0.39 usr 1.12 sys = 1.51 cpu) -Time for select_range (410:127625): 86 secs ( 6.46 usr 8.41 sys = 14.87 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -17458 queries in 2494 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 2409 secs (44.95 usr 73.42 sys = 118.36 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -45645 queries in 9129 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 658 secs (28.37 usr 56.40 sys = 84.77 cpu) - -Estimated total time: 3338 secs (87.31 usr 141.31 sys = 228.62 cpu) diff --git a/sql-bench/Results/select-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/select-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 34f8895e787cf6daa8dcadfe59a166066fd9db78..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,11 +0,0 @@ -Testing server '2.1' at 2000-11-24 12:38:06 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 150 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 36 wallclock secs ( 3.58 usr 2.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 11 wallclock secs ( 0.22 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/select-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 856ad7dce507f5e9f1913a59517d2b0112ef2266..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,13 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-24 2:37:52 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 34 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 4 wallclock secs ( 1.66 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 2 wallclock secs ( 0.45 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (400:81810): 70 wallclock secs ( 3.03 usr 0.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 76 wallclock secs ( 5.15 usr 0.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/select-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index a93cce3a548d520e2521610e1932763344c8a916..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 17:54:14 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 12 wallclock secs ( 2.07 usr 0.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 4 wallclock secs ( 0.54 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -287 queries in 7 loops of 10 loops took 646 seconds -Estimated time for select_range (410:721903): 922 wallclock secs (34.36 usr 19.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -65898 queries in 9414 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 638 wallclock secs (64.35 usr 11.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -18910 queries in 3782 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 1589 wallclock secs (50.50 usr 8.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 3166 wallclock secs (151.82 usr 39.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/select-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index f9792f8a3160be116121e5e2a1b77d6266ec3618..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 7:02:48 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 22 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 5 secs ( 1.06 usr 1.00 sys = 2.06 cpu) - -Testing big selects on the table -Time for select_big (70:17207): 2 secs ( 0.00 usr 0.43 sys = 0.43 cpu) -Time for select_range (410:127625): 28 secs ( 0.88 usr 2.38 sys = 3.26 cpu) -Time for min_max_on_key (70000): 230 secs (10.97 usr 37.42 sys = 48.39 cpu) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -37070 queries in 7414 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 810 secs (10.62 usr 28.04 sys = 38.66 cpu) - -Estimated total time: 1075 secs (23.53 usr 69.27 sys = 92.80 cpu) diff --git a/sql-bench/Results/select-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/select-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index b74c0af713e9f179e19aac77799d0ba28c602837..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 23:24:05 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 1.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 5 wallclock secs ( 1.55 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.17 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:24731): 2 wallclock secs ( 0.43 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (70000): 30 wallclock secs (14.91 usr 1.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for count_on_key (50000): 592 wallclock secs (25.52 usr 3.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 630 wallclock secs (42.58 usr 5.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/select-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index ab21b9bb6096797b6c83c0fb6925e5d9825f4385..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,13 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 10:48:02 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 34 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 6 wallclock secs ( 2.10 usr 0.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.28 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (400:182200): 11 wallclock secs ( 3.40 usr 0.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 18 wallclock secs ( 5.78 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index 224278db66f738aa70de50373dc6d8839a85347c..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 11:16:28 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 4 wallclock secs ( 0.71 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test if the database has a query cache -Time for select_query_cache (10000): 82 wallclock secs ( 3.53 usr 0.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_query_cache2 (10000): 84 wallclock secs ( 3.50 usr 1.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 0 wallclock secs ( 0.12 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 230 wallclock secs ( 7.50 usr 5.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 155 wallclock secs (22.55 usr 6.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 349 wallclock secs (17.12 usr 4.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for count_group_on_key_parts (1000:100000): 38 wallclock secs ( 0.89 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 41 wallclock secs ( 0.42 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct (1000:1000): 51 wallclock secs ( 0.44 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_2 (1000:1000): 49 wallclock secs ( 0.41 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key (1000:6000): 47 wallclock secs ( 0.45 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 75 wallclock secs ( 0.98 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group (1000:100000): 75 wallclock secs ( 0.97 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (100:1000000): 80 wallclock secs ( 6.08 usr 6.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 1360 wallclock secs (65.68 usr 27.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/select-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 90aba31a72b6670593482feb77f646545f364418..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:17:16 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 22 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 5 wallclock secs ( 1.45 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.24 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:127625): 9 wallclock secs ( 1.84 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (70000): 195 wallclock secs (33.98 usr 4.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -45510 queries in 9102 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 660 wallclock secs (26.15 usr 3.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 870 wallclock secs (63.67 usr 9.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index fc5f38a15020bb22cbc0f5cdee3ad20c1d4c2c3a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 2:02:54 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 5 wallclock secs ( 0.80 usr 0.46 sys + 0.00 cusr 0.00 csys = 1.26 CPU) - -Test if the database has a query cache -Time for select_query_cache (10000): 131 wallclock secs ( 3.58 usr 0.61 sys + 0.00 cusr 0.00 csys = 4.19 CPU) - -Time for select_query_cache2 (10000): 131 wallclock secs ( 3.78 usr 0.68 sys + 0.00 cusr 0.00 csys = 4.46 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.14 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.20 CPU) -Time for select_range (410:1057904): 206 wallclock secs ( 8.92 usr 3.47 sys + 0.00 cusr 0.00 csys = 12.39 CPU) -Time for min_max_on_key (70000): 228 wallclock secs (24.88 usr 3.68 sys + 0.00 cusr 0.00 csys = 28.56 CPU) -Time for count_on_key (50000): 541 wallclock secs (17.89 usr 2.91 sys + 0.00 cusr 0.00 csys = 20.80 CPU) - -Time for count_group_on_key_parts (1000:100000): 60 wallclock secs ( 1.17 usr 0.36 sys + 0.00 cusr 0.00 csys = 1.53 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 56 wallclock secs ( 0.40 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.45 CPU) -Time for count_distinct (1000:1000): 65 wallclock secs ( 0.34 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.39 CPU) -Time for count_distinct_2 (1000:1000): 65 wallclock secs ( 0.36 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.48 CPU) -Time for count_distinct_group_on_key (1000:6000): 64 wallclock secs ( 0.44 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.51 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 191 wallclock secs ( 1.32 usr 0.34 sys + 0.00 cusr 0.00 csys = 1.66 CPU) -Time for count_distinct_group (1000:100000): 190 wallclock secs ( 1.21 usr 0.35 sys + 0.00 cusr 0.00 csys = 1.56 CPU) -Time for count_distinct_big (100:1000000): 65 wallclock secs ( 7.60 usr 3.30 sys + 0.00 cusr 0.00 csys = 10.90 CPU) -Total time: 1999 wallclock secs (72.84 usr 16.51 sys + 0.00 cusr 0.00 csys = 89.35 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/select-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index d6943e5711a9aec7f661fa1029fdcc3623f93b7f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 16:08:50 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 3 wallclock secs ( 0.46 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.71 CPU) - -Test if the database has a query cache -Time for select_cache (10000): 88 wallclock secs ( 2.21 usr 0.38 sys + 0.00 cusr 0.00 csys = 2.59 CPU) - -Time for select_cache2 (10000): 89 wallclock secs ( 2.49 usr 0.39 sys + 0.00 cusr 0.00 csys = 2.88 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 0 wallclock secs ( 0.13 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.16 CPU) -Time for select_range (410:1057904): 103 wallclock secs ( 8.73 usr 2.95 sys + 0.00 cusr 0.00 csys = 11.68 CPU) -Time for min_max_on_key (70000): 153 wallclock secs (15.68 usr 2.24 sys + 0.00 cusr 0.00 csys = 17.92 CPU) -Time for count_on_key (50000): 378 wallclock secs (11.70 usr 1.69 sys + 0.00 cusr 0.00 csys = 13.39 CPU) - -Time for count_group_on_key_parts (1000:100000): 43 wallclock secs ( 0.96 usr 0.31 sys + 0.00 cusr 0.00 csys = 1.27 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 28 wallclock secs ( 0.29 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.32 CPU) -Time for count_distinct (1000:1000): 34 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.29 CPU) -Time for count_distinct_2 (1000:1000): 38 wallclock secs ( 0.25 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.32 CPU) -Time for count_distinct_group_on_key (1000:6000): 43 wallclock secs ( 0.26 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.31 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 47 wallclock secs ( 0.98 usr 0.29 sys + 0.00 cusr 0.00 csys = 1.27 CPU) -Time for count_distinct_group (1000:100000): 47 wallclock secs ( 1.00 usr 0.27 sys + 0.00 cusr 0.00 csys = 1.27 CPU) -Time for count_distinct_big (100:1000000): 12 wallclock secs ( 7.14 usr 2.75 sys + 0.00 cusr 0.00 csys = 9.89 CPU) -Total time: 1106 wallclock secs (52.54 usr 11.75 sys + 0.00 cusr 0.00 csys = 64.29 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/select-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 939f130f92e52107cacf55c010e61885a34aa077..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 13:29:36 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 4 wallclock secs ( 0.81 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test if the database has a query cache -Time for select_cache (10000): 89 wallclock secs ( 3.03 usr 0.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_cache2 (10000): 91 wallclock secs ( 3.53 usr 0.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 0 wallclock secs ( 0.14 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 242 wallclock secs ( 8.57 usr 4.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 178 wallclock secs (21.67 usr 4.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 412 wallclock secs (16.70 usr 3.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for count_group_on_key_parts (1000:100000): 37 wallclock secs ( 1.02 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 28 wallclock secs ( 0.44 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct (1000:1000): 32 wallclock secs ( 0.44 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_2 (1000:1000): 32 wallclock secs ( 0.44 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key (1000:6000): 38 wallclock secs ( 0.48 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 50 wallclock secs ( 1.15 usr 0.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group (1000:100000): 50 wallclock secs ( 1.14 usr 0.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (100:1000000): 15 wallclock secs ( 7.36 usr 4.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 1298 wallclock secs (66.92 usr 20.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-NT_4.0 b/sql-bench/Results/select-mysql-NT_4.0 deleted file mode 100644 index d560ccddb99e36b580f8c084acb1bbd0d6e36250..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-NT_4.0 +++ /dev/null @@ -1,30 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 16:00:44 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 7 wallclock secs ( 1.27 usr 1.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test if the database has a query cache -Time for select_query_cache (10000): 90 wallclock secs ( 5.81 usr 1.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for select_query_cache2 (10000): 91 wallclock secs ( 5.55 usr 1.86 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.33 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 186 wallclock secs (27.06 usr 9.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 182 wallclock secs (31.70 usr 12.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 368 wallclock secs (22.81 usr 8.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for count_group_on_key_parts (1000:100000): 40 wallclock secs ( 2.73 usr 0.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 39 wallclock secs ( 0.52 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct (1000:1000): 48 wallclock secs ( 0.56 usr 0.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_2 (1000:1000): 52 wallclock secs ( 0.45 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key (1000:6000): 48 wallclock secs ( 0.58 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 145 wallclock secs ( 3.02 usr 0.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group (1000:100000): 145 wallclock secs ( 2.67 usr 1.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (100:1000000): 114 wallclock secs (22.47 usr 8.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 1556 wallclock secs (127.53 usr 47.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/select-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index fcda0257f5f343cbb043a7baa452caaec420faae..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 4:46:36 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 12 wallclock secs ( 2.19 usr 1.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 4 wallclock secs ( 0.52 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 650 wallclock secs (32.89 usr 14.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 405 wallclock secs (55.81 usr 15.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -14550 queries in 2910 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 2065 wallclock secs (43.16 usr 11.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 3136 wallclock secs (134.58 usr 42.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-SunOS_5.7_sun4m b/sql-bench/Results/select-mysql-SunOS_5.7_sun4m deleted file mode 100644 index 23f841caeb96938032b577d1526c65a64e68014a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,41 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 7:33:18 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 41 wallclock secs ( 7.98 usr 5.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 7 wallclock secs ( 1.74 usr 1.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -205 queries in 5 loops of 10 loops took 659 seconds -Estimated time for select_range (410:537457): 1318 wallclock secs (116.36 usr 78.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -32291 queries in 4613 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 1302 wallclock secs (180.73 usr 74.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -11240 queries in 2248 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 2673 wallclock secs (132.65 usr 51.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for count_group_on_key_parts (1000:100000): 303 wallclock secs (12.11 usr 7.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Testing count(distinct) on the table -Note: Query took longer then time-limit: 600 -Estimating end time based on: -1486 queries in 743 loops of 1000 loops took 601 seconds -Estimated time for count_distinct (2000:1486): 808 wallclock secs ( 6.35 usr 2.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key (1000:6000): 373 wallclock secs ( 3.78 usr 1.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -431 queries in 431 loops of 1000 loops took 601 seconds -Estimated time for count_distinct_group_on_key_parts (1000:43100): 1394 wallclock secs (12.62 usr 7.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -432 queries in 432 loops of 1000 loops took 601 seconds -Estimated time for count_distinct_group (1000:43200): 1391 wallclock secs (12.41 usr 7.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (100:1000000): 333 wallclock secs (93.16 usr 74.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Estimated total time: 9945 wallclock secs (579.92 usr 312.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-SunOS_5.7_sun4u b/sql-bench/Results/select-mysql-SunOS_5.7_sun4u deleted file mode 100644 index 6b69a9c531ad46e7b7f56aa2867232b6997aa398..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 23:37:17 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 6 wallclock secs ( 0.94 usr 0.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 2 wallclock secs ( 0.27 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 330 wallclock secs (16.74 usr 13.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 225 wallclock secs (29.39 usr 12.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 531 wallclock secs (20.31 usr 8.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1094 wallclock secs (67.65 usr 35.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-SunOS_5.8_sun4u b/sql-bench/Results/select-mysql-SunOS_5.8_sun4u deleted file mode 100644 index 30d77fdfdd9071a83888e543d302d69f902ab668..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,26 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 3:21:10 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 6 wallclock secs ( 1.03 usr 0.81 sys + 0.00 cusr 0.00 csys = 1.84 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 2 wallclock secs ( 0.26 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.53 CPU) -Time for select_range (410:1057904): 326 wallclock secs (17.61 usr 17.05 sys + 0.00 cusr 0.00 csys = 34.66 CPU) -Time for min_max_on_key (70000): 292 wallclock secs (28.50 usr 13.56 sys + 0.00 cusr 0.00 csys = 42.06 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -45085 queries in 9017 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 666 wallclock secs (20.47 usr 9.08 sys + 0.00 cusr 0.00 csys = 29.56 CPU) - -Time for count_group_on_key_parts (1000:100000): 85 wallclock secs ( 1.82 usr 1.89 sys + 0.00 cusr 0.00 csys = 3.71 CPU) -Testing count(distinct) on the table -Time for count_distinct (2000:2000): 217 wallclock secs ( 0.98 usr 0.30 sys + 0.00 cusr 0.00 csys = 1.28 CPU) -Time for count_distinct_group_on_key (1000:6000): 101 wallclock secs ( 0.58 usr 0.35 sys + 0.00 cusr 0.00 csys = 0.93 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 228 wallclock secs ( 2.00 usr 1.90 sys + 0.00 cusr 0.00 csys = 3.90 CPU) -Time for count_distinct_group (1000:100000): 229 wallclock secs ( 1.96 usr 1.95 sys + 0.00 cusr 0.00 csys = 3.91 CPU) -Time for count_distinct_big (100:1000000): 48 wallclock secs (16.66 usr 15.02 sys + 0.00 cusr 0.00 csys = 31.68 CPU) -Estimated total time: 2200 wallclock secs (91.87 usr 62.18 sys + 0.00 cusr 0.00 csys = 154.06 CPU) diff --git a/sql-bench/Results/select-mysql-win98 b/sql-bench/Results/select-mysql-win98 deleted file mode 100644 index c028aaf966152c432a36a615be936e664f4f3116..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql-win98 +++ /dev/null @@ -1,16 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 5:20:12 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 16 wallclock secs (15.32 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 1.81 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 356 wallclock secs (356.09 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 332 wallclock secs (332.69 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 588 wallclock secs (587.48 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 1294 wallclock secs (1293.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/select-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 324e1003d74b290c3f9a797918583f12e7bc4b63..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,13 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:47:54 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 34 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 5 wallclock secs ( 1.76 usr 0.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.34 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (400:182200): 11 wallclock secs ( 3.46 usr 0.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 17 wallclock secs ( 5.57 usr 0.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql_odbc-win98 b/sql-bench/Results/select-mysql_odbc-win98 deleted file mode 100644 index bee30632f5bbf036e53caa136b3afd9861966f89..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-mysql_odbc-win98 +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 18:33:15 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 35 wallclock secs (34.87 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 4 wallclock secs ( 4.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 592 wallclock secs (592.70 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 496 wallclock secs (495.60 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -14250 queries in 2850 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 2108 wallclock secs (2107.58 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Estimated total time: 3235 wallclock secs (3234.82 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/select-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 2f558da5b5aec5497e602e14286355d21526a5fe..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 3:50:08 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 254 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 35 wallclock secs ( 7.91 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 7 wallclock secs ( 2.04 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -369 queries in 9 loops of 10 loops took 648 seconds -Estimated time for select_range (410:714201): 720 wallclock secs (115.93 usr 25.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -34853 queries in 4979 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 1207 wallclock secs (78.23 usr 16.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -37555 queries in 7511 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 800 wallclock secs (53.87 usr 11.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 2769 wallclock secs (257.98 usr 54.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/select-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 8a99ed02d26f1d0d8b01526b3042bbf5b062f41a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,28 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 11:42:05 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 254 ranges. - -Creating table -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting 10000 rows -Time to insert (10000): 41 wallclock secs ( 7.78 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 6 wallclock secs ( 1.99 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:785994): 575 wallclock secs (117.75 usr 24.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -47740 queries in 6820 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 881 wallclock secs (75.22 usr 16.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -38585 queries in 7717 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 778 wallclock secs (56.33 usr 12.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 2285 wallclock secs (259.15 usr 54.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/select-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index fc36c849b922d5d8342ac7a82a458a4780c1d311..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-10 0:42:54 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 1.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 37 wallclock secs ( 6.11 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 3 wallclock secs ( 0.18 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:24731): 13 wallclock secs ( 0.79 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (70000): 478 wallclock secs (17.06 usr 1.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -19545 queries in 3909 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 1537 wallclock secs (27.30 usr 3.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 2069 wallclock secs (51.44 usr 5.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/select-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index c53058af7bfdda083df15fff509d6861fb5691c8..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,36 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 15:10:04 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 9 wallclock secs ( 2.91 usr 0.30 sys + 0.00 cusr 0.00 csys = 3.21 CPU) - -Test if the database has a query cache -Time for select_query_cache (10000): 2623 wallclock secs ( 3.22 usr 0.37 sys + 0.00 cusr 0.00 csys = 3.59 CPU) - -Time for select_query_cache2 (10000): 2622 wallclock secs ( 2.73 usr 0.47 sys + 0.00 cusr 0.00 csys = 3.20 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.12 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.13 CPU) -Time for select_range (410:1057904): 491 wallclock secs (11.40 usr 0.50 sys + 0.00 cusr 0.00 csys = 11.90 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -11893 queries in 1699 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 3537 wallclock secs (21.54 usr 3.06 sys + 0.00 cusr 0.00 csys = 24.60 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -17720 queries in 3544 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 1695 wallclock secs (15.49 usr 2.14 sys + 0.00 cusr 0.00 csys = 17.64 CPU) - -Time for count_group_on_key_parts (1000:100000): 332 wallclock secs ( 1.20 usr 0.04 sys + 0.00 cusr 0.00 csys = 1.24 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 188 wallclock secs ( 0.33 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.38 CPU) -Time for count_distinct (1000:1000): 131 wallclock secs ( 0.29 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.31 CPU) -Time for count_distinct_2 (1000:1000): 213 wallclock secs ( 0.43 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.49 CPU) -Time for count_distinct_group_on_key (1000:6000): 485 wallclock secs ( 0.38 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.41 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 381 wallclock secs ( 1.23 usr 0.05 sys + 0.00 cusr 0.00 csys = 1.28 CPU) -Time for count_distinct_group (1000:100000): 384 wallclock secs ( 1.12 usr 0.07 sys + 0.00 cusr 0.00 csys = 1.19 CPU) -Time for count_distinct_big (100:1000000): 65 wallclock secs ( 8.50 usr 0.17 sys + 0.00 cusr 0.00 csys = 8.67 CPU) -Estimated total time: 13160 wallclock secs (70.90 usr 7.35 sys + 0.00 cusr 0.00 csys = 78.25 CPU) diff --git a/sql-bench/Results/select-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/select-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 6d8f5384c77e3cdcaf63def93ae97659a1a131bd..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,25 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 13:25:07 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 1.5 ranges. - -Creating table -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting 10000 rows -Time to insert (10000): 33 wallclock secs ( 6.05 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.20 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:24731): 11 wallclock secs ( 0.50 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (70000): 461 wallclock secs (17.09 usr 1.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -18630 queries in 3726 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 1612 wallclock secs (28.56 usr 3.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 2120 wallclock secs (52.41 usr 5.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/select-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/select-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 4f624d8011236de027abb54cb3ed0a94291dc100..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,42 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-11 22:43:08 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 500 ranges. - -Creating table -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting 10000 rows -Time to insert (10000): 16 wallclock secs ( 3.01 usr 0.33 sys + 0.00 cusr 0.00 csys = 3.34 CPU) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Test if the database has a query cache -Time for select_query_cache (10000): 2643 wallclock secs ( 3.20 usr 0.43 sys + 0.00 cusr 0.00 csys = 3.63 CPU) - -Time for select_query_cache2 (10000): 2642 wallclock secs ( 3.26 usr 0.43 sys + 0.00 cusr 0.00 csys = 3.69 CPU) - -Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.12 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.13 CPU) -Time for select_range (410:1057904): 481 wallclock secs (11.87 usr 1.04 sys + 0.00 cusr 0.00 csys = 12.91 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -12019 queries in 1717 loops of 10000 loops took 601 seconds -Estimated time for min_max_on_key (70000): 3500 wallclock secs (24.99 usr 4.95 sys + 0.00 cusr 0.00 csys = 29.94 CPU) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -18105 queries in 3621 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 1659 wallclock secs (14.19 usr 1.80 sys + 0.00 cusr 0.00 csys = 15.99 CPU) - -Time for count_group_on_key_parts (1000:100000): 332 wallclock secs ( 1.14 usr 0.03 sys + 0.00 cusr 0.00 csys = 1.17 CPU) -Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 188 wallclock secs ( 0.38 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.40 CPU) -Time for count_distinct (1000:1000): 131 wallclock secs ( 0.34 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.39 CPU) -Time for count_distinct_2 (1000:1000): 213 wallclock secs ( 0.38 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.41 CPU) -Time for count_distinct_group_on_key (1000:6000): 209 wallclock secs ( 0.35 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.44 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 382 wallclock secs ( 1.16 usr 0.06 sys + 0.00 cusr 0.00 csys = 1.22 CPU) -Time for count_distinct_group (1000:100000): 385 wallclock secs ( 1.14 usr 0.09 sys + 0.00 cusr 0.00 csys = 1.23 CPU) -Time for count_distinct_big (100:1000000): 65 wallclock secs ( 8.53 usr 0.26 sys + 0.00 cusr 0.00 csys = 8.79 CPU) -Time for book-keeping (1): 2 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Estimated total time: 12852 wallclock secs (74.09 usr 9.62 sys + 0.00 cusr 0.00 csys = 83.71 CPU) diff --git a/sql-bench/Results/select-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/select-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 386216650e8fd703c4e075decafa59d8bba19442..0000000000000000000000000000000000000000 --- a/sql-bench/Results/select-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,19 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 17:27:17 - -Testing the speed of selecting on keys that consist of many parts -The test-table has 10000 rows and the test is done with 1.5 ranges. - -Creating table -Inserting 10000 rows -Time to insert (10000): 139 wallclock secs ( 9.23 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Testing big selects on the table -Time for select_big (70:17207): 3 wallclock secs ( 0.78 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for select_range (410:24731): 23 wallclock secs ( 1.84 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for min_max_on_key (70000): 108 wallclock secs (31.16 usr 2.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Note: Query took longer then time-limit: 600 -Estimating end time based on: -3350 queries in 670 loops of 10000 loops took 601 seconds -Estimated time for count_on_key (50000): 8970 wallclock secs (48.66 usr 4.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Estimated total time: 9245 wallclock secs (91.67 usr 7.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/transactions-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/transactions-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 821d74a7c01aa373b3bdf0ff00dc49cd43863607..0000000000000000000000000000000000000000 --- a/sql-bench/Results/transactions-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,3 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 16:27:17 - -Test skipped because the database doesn't support transactions diff --git a/sql-bench/Results/transactions-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/transactions-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 47f81534c1e7f06673de448de93fdae01d35751a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/transactions-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,3 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 13:51:14 - -Test skipped because the database doesn't support transactions diff --git a/sql-bench/Results/wisconsin-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/wisconsin-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index 1d391c9143d02a67f416e0f4613d0f0d69390589..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-Adabas-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Adabas 10.01.00' at 1998-08-19 5:42:51 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.00 usr 0.01 sys = 0.01 cpu) - -Inserting data -Time to insert (31000): 585 secs (19.11 usr 7.05 sys = 26.16 cpu) -Time to delete_big (1): 5 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 64 secs (15.03 usr 14.19 sys = 29.22 cpu) - -Total time: 654 secs (34.14 usr 21.26 sys = 55.40 cpu) diff --git a/sql-bench/Results/wisconsin-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql b/sql-bench/Results/wisconsin-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql deleted file mode 100644 index 06f8a2a2251e8cfb62d6a62b562a7ebcc4050ab4..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-frontbase-Linux_2.2.14_my_SMP_i686-cmp-frontbase,mysql +++ /dev/null @@ -1,11 +0,0 @@ -Testing server '2.1' at 2000-11-24 13:53:57 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 140 wallclock secs (13.88 usr 9.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark diff --git a/sql-bench/Results/wisconsin-msql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/wisconsin-msql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 8ec3e482f15c9bce025b6d752fbc0e88f40600a1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-msql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'mSQL server version 2.0.10' at 1999-09-24 2:39:09 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 13 wallclock secs ( 4.03 usr 0.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (74): 9 wallclock secs ( 4.81 usr 0.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 23 wallclock secs ( 8.84 usr 1.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-HP_UX_B.10.20_9000_778 b/sql-bench/Results/wisconsin-mysql-HP_UX_B.10.20_9000_778 deleted file mode 100644 index 0f7507959ed5684878cc3ab65e36355f731cf10b..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-HP_UX_B.10.20_9000_778 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.4 alpha' at 1999-09-27 18:25:18 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 37 wallclock secs ( 3.88 usr 2.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 24 wallclock secs ( 6.96 usr 2.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 62 wallclock secs (10.85 usr 5.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.0.35_i686-cmp-adabas,mysql b/sql-bench/Results/wisconsin-mysql-Linux_2.0.35_i686-cmp-adabas,mysql deleted file mode 100644 index d6ea3b9b7e68c7b3250af08e01b8e013e73851b2..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.0.35_i686-cmp-adabas,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.9 beta' at 1998-10-20 7:17:14 - -Wisconsin benchmark test - -Time for create_table (3): 0 secs ( 0.00 usr 0.00 sys = 0.00 cpu) - -Inserting data -Time to insert (31000): 19 secs ( 1.42 usr 2.57 sys = 3.99 cpu) -Time to delete_big (1): 1 secs ( 0.01 usr 0.00 sys = 0.01 cpu) - -Running actual benchmark -Time for wisc_benchmark (114): 9 secs ( 1.84 usr 2.92 sys = 4.76 cpu) - -Total time: 30 secs ( 3.27 usr 5.49 sys = 8.76 cpu) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/wisconsin-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 77b0d64569b57be421ffe1aeec73023b32501b45..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-03-07 23:34:36 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 13 wallclock secs ( 2.61 usr 0.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 6 wallclock secs ( 1.99 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 20 wallclock secs ( 4.61 usr 1.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index 67537400723848e06f9d2fef12d410847d8dcb09..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 10:48:20 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 16 wallclock secs ( 4.54 usr 0.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (74): 4 wallclock secs ( 2.40 usr 0.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 20 wallclock secs ( 6.95 usr 1.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha deleted file mode 100644 index 04133bca37b80a93d43fbb77b3eb1a3c1522511f..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.39' at 2002-09-08 11:39:09 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 14 wallclock secs ( 2.17 usr 2.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 3 wallclock secs ( 1.61 usr 0.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 18 wallclock secs ( 3.78 usr 3.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.2.1_i686-cmp-adabas,mysql b/sql-bench/Results/wisconsin-mysql-Linux_2.2.1_i686-cmp-adabas,mysql deleted file mode 100644 index 0bbf83b94f334ecd2cce4135ae43bc9297860b5d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.2.1_i686-cmp-adabas,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.18' at 1999-02-27 21:30:47 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 13 wallclock secs ( 2.20 usr 0.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 7 wallclock secs ( 2.45 usr 0.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 20 wallclock secs ( 4.66 usr 1.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686 b/sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686 deleted file mode 100644 index 3a9f1a0ed5b84ab13778aab5309b6c6016409c03..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-13 2:36:13 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 13 wallclock secs ( 1.72 usr 1.20 sys + 0.00 cusr 0.00 csys = 2.92 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 5 wallclock secs ( 2.23 usr 0.61 sys + 0.00 cusr 0.00 csys = 2.84 CPU) - -Total time: 19 wallclock secs ( 3.95 usr 1.81 sys + 0.00 cusr 0.00 csys = 5.76 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.4.16_64GB_SMP_i686 b/sql-bench/Results/wisconsin-mysql-Linux_2.4.16_64GB_SMP_i686 deleted file mode 100644 index 8b054de0a3d836cf92fd771229c97aa50e83c480..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.4.16_64GB_SMP_i686 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 4.0.2 alpha' at 2002-05-20 16:27:17 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 8 wallclock secs ( 0.89 usr 0.68 sys + 0.00 cusr 0.00 csys = 1.57 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running the actual benchmark -Time for wisc_benchmark (114): 4 wallclock secs ( 2.17 usr 0.52 sys + 0.00 cusr 0.00 csys = 2.69 CPU) - -Total time: 12 wallclock secs ( 3.07 usr 1.20 sys + 0.00 cusr 0.00 csys = 4.27 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.4.4_SMP_alpha b/sql-bench/Results/wisconsin-mysql-Linux_2.4.4_SMP_alpha deleted file mode 100644 index 445246a27c753400f9781a5f4cd39d460f670d09..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.4.4_SMP_alpha +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 4.0.5 beta' at 2002-10-23 13:51:14 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 13 wallclock secs ( 1.99 usr 1.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running the actual benchmark -Time for wisc_benchmark (114): 4 wallclock secs ( 1.66 usr 0.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 17 wallclock secs ( 3.66 usr 2.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-NT_4.0 b/sql-bench/Results/wisconsin-mysql-NT_4.0 deleted file mode 100644 index 0ef69aa927225569b7cfe9b0ecc11adb28c8f515..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-NT_4.0 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.37' at 2001-04-19 16:26:40 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 19 wallclock secs ( 2.17 usr 4.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 9 wallclock secs ( 5.77 usr 1.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 28 wallclock secs ( 7.95 usr 5.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-SunOS_5.5.1_sun4u b/sql-bench/Results/wisconsin-mysql-SunOS_5.5.1_sun4u deleted file mode 100644 index 2dc3ffa7cebddad63a7a9c9cf02ab127dad2a680..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-SunOS_5.5.1_sun4u +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.19' at 1999-03-02 5:14:28 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 41 wallclock secs ( 4.36 usr 3.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 16 wallclock secs ( 5.71 usr 2.51 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 59 wallclock secs (10.08 usr 6.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4m b/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4m deleted file mode 100644 index faaa39f73a88820860edc5cb4f7cdb35fc87c615..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4m +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.29 gamma' at 2000-12-17 8:52:01 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 118 wallclock secs (16.52 usr 15.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 3 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 42 wallclock secs (17.93 usr 7.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 163 wallclock secs (34.49 usr 22.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4u b/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4u deleted file mode 100644 index 3dedbb0f4ce4150bad8fd0d2d38144dd7d69de7e..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4u +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.8 alpha' at 2000-01-17 23:55:32 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 21 wallclock secs ( 1.90 usr 2.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 9 wallclock secs ( 2.97 usr 2.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 30 wallclock secs ( 4.87 usr 5.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-SunOS_5.8_sun4u b/sql-bench/Results/wisconsin-mysql-SunOS_5.8_sun4u deleted file mode 100644 index 131afda601b4255dfa351c87fc45fe7df0f30a1a..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-SunOS_5.8_sun4u +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.29a gamma' at 2000-12-17 3:56:45 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 21 wallclock secs ( 2.12 usr 2.82 sys + 0.00 cusr 0.00 csys = 4.94 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 9 wallclock secs ( 3.67 usr 2.50 sys + 0.00 cusr 0.00 csys = 6.17 CPU) - -Total time: 31 wallclock secs ( 5.79 usr 5.32 sys + 0.00 cusr 0.00 csys = 11.11 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-win98 b/sql-bench/Results/wisconsin-mysql-win98 deleted file mode 100644 index 71bb6b4f3dede6a58d701f49ec5ae909e229eb53..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql-win98 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.13a alpha' at 2000-03-15 5:41:46 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.99 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 44 wallclock secs (43.67 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.66 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 17 wallclock secs (17.08 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 63 wallclock secs (62.40 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql b/sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql deleted file mode 100644 index d9f356f165b0562fe5d6961ec0dfcec8418d51ad..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-msql,mysql +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.23.3 alpha' at 1999-09-24 9:48:11 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (74): 4 wallclock secs ( 2.43 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 7 wallclock secs ( 2.43 usr 0.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql_odbc-win98 b/sql-bench/Results/wisconsin-mysql_odbc-win98 deleted file mode 100644 index 4da9b366a06f4638679f4e5b2d74d215e1e88bd1..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-mysql_odbc-win98 +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'MySQL 3.22.19a' at 1999-03-02 19:02:03 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.17 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 104 wallclock secs (104.19 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 1 wallclock secs ( 1.15 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 29 wallclock secs (28.83 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 135 wallclock secs (134.46 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-oracle-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/wisconsin-oracle-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index 8fb12cfaa6747ae2eaa12cb2a2b097accc150e3d..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-oracle-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-25 4:21:44 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 108 wallclock secs (21.83 usr 2.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 70 wallclock secs (30.55 usr 4.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 179 wallclock secs (52.39 usr 7.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle b/sql-bench/Results/wisconsin-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle deleted file mode 100644 index ea85252c6bc8668f3410084d6d2cc096e0706e22..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-oracle_fast-Linux_2.0.36_i686-cmp-mysql,oracle +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'Oracle 8.0.5.0.0' at 1999-03-23 12:12:34 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 116 wallclock secs (22.64 usr 2.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 4 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time to delete_big (1): 6 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 3 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 63 wallclock secs (30.34 usr 4.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 190 wallclock secs (53.06 usr 7.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/wisconsin-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index aabea5b54e145785dc5750fe1693f23305637f19..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-pg-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-10 1:01:47 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 142 wallclock secs (16.94 usr 1.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 310 wallclock secs ( 5.05 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 452 wallclock secs (22.00 usr 2.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/wisconsin-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index 9e5dceb2b7613f5107d014eca03db45448ff7d61..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-pg-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 17:42:14 - -Wisconsin benchmark test - -Time for create_table (3): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 32 wallclock secs ( 9.14 usr 1.27 sys + 0.00 cusr 0.00 csys = 10.41 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 16 wallclock secs ( 3.54 usr 1.02 sys + 0.00 cusr 0.00 csys = 4.56 CPU) - -Total time: 55 wallclock secs (12.69 usr 2.29 sys + 0.00 cusr 0.00 csys = 14.98 CPU) diff --git a/sql-bench/Results/wisconsin-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/wisconsin-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 76ec51fb2e7931cb746e3f9551593f1a270d51cf..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-pg_fast-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'PostgreSQL 6.4' at 1999-03-11 13:43:36 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 130 wallclock secs (17.21 usr 1.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time to delete_big (1): 1 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 29 wallclock secs ( 5.00 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 166 wallclock secs (22.23 usr 2.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/Results/wisconsin-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg b/sql-bench/Results/wisconsin-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg deleted file mode 100644 index a58c22fc6f293d676dddbbf4a37ba9e6446a6b98..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-pg_fast-Linux_2.4.2_64GB_SMP_i686-cmp-mysql,pg +++ /dev/null @@ -1,22 +0,0 @@ -Testing server 'PostgreSQL version 7.1.2' at 2001-06-12 1:11:23 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Inserting data -Time to insert (31000): 39 wallclock secs ( 9.47 usr 3.11 sys + 0.00 cusr 0.00 csys = 12.58 CPU) -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Time to delete_big (1): 2 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.01 CPU) - -Time for book-keeping (1): 2 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Running actual benchmark -Time for wisc_benchmark (114): 18 wallclock secs ( 3.58 usr 0.20 sys + 0.00 cusr 0.00 csys = 3.78 CPU) - -Time for book-keeping (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) - -Total time: 64 wallclock secs (13.06 usr 3.32 sys + 0.00 cusr 0.00 csys = 16.38 CPU) diff --git a/sql-bench/Results/wisconsin-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid b/sql-bench/Results/wisconsin-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid deleted file mode 100644 index 06d4cdc9d364e4eed1318d0f29f3160c19d33db9..0000000000000000000000000000000000000000 --- a/sql-bench/Results/wisconsin-solid-Linux_2.0.36_i686-cmp-mysql,pg,solid +++ /dev/null @@ -1,14 +0,0 @@ -Testing server 'SOLID Server - v.02.30.0026 (Linux ix86)' at 1999-03-06 17:41:55 - -Wisconsin benchmark test - -Time for create_table (3): 0 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Inserting data -Time to insert (31000): 154 wallclock secs (26.27 usr 2.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) -Time to delete_big (1): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Running actual benchmark -Time for wisc_benchmark (114): 55 wallclock secs (10.89 usr 0.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) - -Total time: 226 wallclock secs (37.18 usr 2.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU secs) diff --git a/sql-bench/TODO b/sql-bench/TODO deleted file mode 100644 index 8a103e8919980a83a23cc64b7a17f152d846baae..0000000000000000000000000000000000000000 --- a/sql-bench/TODO +++ /dev/null @@ -1,21 +0,0 @@ -When comparing with ms-sql: - -Check how to get MySQL faster mysql ms-sql - -count_distinct (2000) | 89.00| 39.00| -count_distinct_big (120) | 324.00| 121.00| -count_distinct_group (1000) | 158.00| 107.00| -count_distinct_group_on_key (1000) | 49.00| 17.00| -count_distinct_group_on_key_parts (1| 157.00| 108.00| -order_by_big (10) | 197.00| 89.00| -order_by_big_key (10) | 170.00| 82.00| -order_by_big_key2 (10) | 163.00| 73.00| -order_by_big_key_desc (10) | 172.00| 84.00| -order_by_big_key_diff (10) | 193.00| 89.00| -order_by_big_key_prefix (10) | 165.00| 72.00| - - -Why is the following slow on NT: - NT Linux -update_of_primary_key_many_keys (256| 560.00| 65.00| - diff --git a/sql-bench/as3ap.sh b/sql-bench/as3ap.sh deleted file mode 100644 index f6827c004d76cf5eec1c0fb7e1f5ba74770858c1..0000000000000000000000000000000000000000 --- a/sql-bench/as3ap.sh +++ /dev/null @@ -1,637 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# AS3AP single-user benchmark. -# - -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$opt_loop_count=1; - -#Create tables - -$dbh = $server->connect(); - -#Create Table -$sth = $dbh->do("drop table uniques"); -$sth = $dbh->do("drop table updates"); -$sth = $dbh->do("drop table hundred"); -$sth = $dbh->do("drop table tenpct"); -$sth = $dbh->do("drop table tiny"); - -#Temporary table -$sth = $dbh->do("drop table saveupdates"); - -@fields=("col_key int not null", - "col_int int not null", - "col_signed int not null", - "col_float float not null", - "col_double float not null", - "col_decim numeric(18,2) not null", - "col_date char(20) not null", - "col_code char(10) not null", - "col_name char(20) not null", - "col_address varchar(80) not null"); - -do_many($dbh,$server->create("uniques",\@fields,[])); -do_many($dbh,$server->create("updates",\@fields,[])); -do_many($dbh,$server->create("hundred",\@fields,[])); -do_many($dbh,$server->create("tenpct",\@fields,[])); -do_many($dbh,$server->create("tiny",["col_key int not null"],[])); - -print "Start AS3AP benchmark\n\n"; - -$start_time=new Benchmark; - -print "Load DATA\n"; -#Load DATA - -@table_names=("uniques","updates","hundred","tenpct","tiny"); - -$loop_time=new Benchmark; - -if ($opt_fast && $server->{'limits'}->{'load_data_infile'}) -{ - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - my $file = "$pwd/Data/AS3AP/${table_name}\.new"; - print "$table_name - $file\n" if ($opt_debug); - $row_count += $server->insert_file($table_name,$file,$dbh); - } -} -else -{ - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - print "$table_name - $file\n" if ($opt_debug); - my $insert_start = "insert into $table_name values ("; - open(DATA, "$pwd/Data/AS3AP/${table_name}\.new") || die "Can't open text file: $pwd/Data/AS3AP/${table_name}\.new\n"; - while(<DATA>) - { - chomp; - next unless ( $_ =~ /\w/ ); # skip blank lines - $command = $insert_start."$_".")"; - $command =~ $server->fix_to_insert($command); - print "$command\n" if ($opt_debug); - $sth = $dbh->do($command) or die "Got error: $DBI::errstr when executing '$command'\n"; - $row_count++; - } - close(DATA); - } -} - -$end_time=new Benchmark; -print "Time for Load Data - " . "($row_count): " . -timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - -print "Create Index\n"; - -test_command("create_idx_uniques_key_bt", - "time for create_idx_uniques_key_bt", - "create unique index uniques_key_bt on uniques (col_key)",$dbh,$opt_loop_count); - -test_command("create_idx_updates_key_bt", - "time for create_idx_updates_key_bt", - "create unique index updates_key_bt on updates (col_key)",$dbh,$opt_loop_count); - -test_command("create_idx_hundred_key_bt", - "time for create_idx_hundred_key_bt", - "create unique index hundred_key_bt on hundred (col_key)", - $dbh,$opt_loop_count); - -test_command("create_idx_tenpct_key_bt", - "time for create_idx_tenpct_key_bt", - "create unique index tenpct_key_bt on tenpct (col_key)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_key_code_bt", - "time for create_idx_tenpct_key_code_bt", - "create index tenpct_key_code_bt on tenpct (col_key,col_code)", - $dbh,$opt_loop_count); - -test_command("create_idx_tiny_key_bt", - "time for create_idx_tiny_key_bt", - "create index tiny_key_bt on tiny (col_key)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_int_bt", - "time for create_idx_tenpct_int_bt", - "create index tenpct_int_bt on tenpct (col_int)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_signed_bt", - "time for create_idx_tenpct_signed_bt", - "create index tenpct_signed_bt on tenpct (col_signed)",$dbh,$opt_loop_count); - -test_command("create_idx_uniques_code_h", - "time for create_idx_uniques_code_h", - "create index uniques_code_h on uniques (col_code)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_double_bt", - "time for create_idx_tenpct_double_bt", - "create index tenpct_double_bt on tenpct (col_double)",$dbh,$opt_loop_count); - - -test_command("create_idx_updates_decim_bt", - "time for create_idx_updates_decim_bt", - "create index updates_decim_bt on updates (col_decim)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_float_bt", - "time for create_idx_tenpct_float_bt", - "create index tenpct_float_bt on tenpct (col_float)",$dbh,$opt_loop_count); - -test_command("create_idx_updates_int_bt", - "time for create_idx_updates_int_bt", - "create index updates_int_bt on updates (col_int)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_decim_bt", - "time for create_idx_tenpct_decim_bt", - "create index tenpct_decim_bt on tenpct (col_decim)",$dbh,$opt_loop_count); - -test_command("create_idx_hundred_code_h", - "time for create_idx_hundred_code_h", - "create index hundred_code_h on hundred (col_code)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_name_h", - "time for create_idx_tenpct_name_h", - "create index tenpct_name_h on tenpct (col_name)",$dbh,$opt_loop_count); - -test_command("create_idx_updates_code_h", - "time for create_idx_updates_code_h", - "create index updates_code_h on updates (col_code)",$dbh,$opt_loop_count); - -test_command("create_idx_tenpct_code_h", - "time for create_idx_tenpct_code_h", - "create index tenpct_code_h on tenpct (col_code)",$dbh,$opt_loop_count); - -test_command("create_idx_updates_double_bt", - "time for create_idx_updates_double_bt", - "create index updates_double_bt on updates (col_double)",$dbh,$opt_loop_count); - -test_command("create_idx_hundred_foreign", - "time for create_idx_hundred_foreign", - "alter table hundred add constraint fk_hundred_updates foreign key (col_signed) - references updates (col_key)",$dbh,$opt_loop_count); - -test_query("sel_1_cl", - "Time to sel_1_cl", - "select col_key, col_int, col_signed, col_code, col_double, col_name - from updates where col_key = 1000",$dbh,$opt_loop_count); - -test_query("join_3_cl", - "Time to join_3_cl", - "select uniques.col_signed, uniques.col_date, - hundred.col_signed, hundred.col_date, - tenpct.col_signed, tenpct.col_date - from uniques, hundred, tenpct - where uniques.col_key = hundred.col_key - and uniques.col_key = tenpct.col_key - and uniques.col_key = 1000",$dbh,$opt_loop_count); - -test_query("sel_100_ncl", - "Time to sel_100_ncl", - "select col_key, col_int, col_signed, col_code,col_double, col_name - from updates where col_int <= 100",$dbh,$opt_loop_count); - -test_query("table_scan", - "Time to table_scan", - "select * from uniques where col_int = 1",$dbh,$opt_loop_count); - -test_query("agg_func", - "Time for agg_func", - "select min(col_key) from hundred group by col_name",$dbh,$opt_loop_count); - -test_query("agg_scal", - "Time for agg_scal", - "select min(col_key) from uniques",$dbh,$opt_loop_count); - -test_query("sel_100_cl", - "Time for sel_100_cl", - "select col_key, col_int, col_signed, col_code, - col_double, col_name - from updates where col_key <= 100",$dbh,$opt_loop_count); - -test_query("join_3_ncl", - "Time for join_3_ncl", - "select uniques.col_signed, uniques.col_date, - hundred.col_signed, hundred.col_date, - tenpct.col_signed, tenpct.col_date - from uniques, hundred, tenpct - where uniques.col_code = hundred.col_code - and uniques.col_code = tenpct.col_code - and uniques.col_code = 'BENCHMARKS'",$dbh,$opt_loop_count); - -test_query("sel_10pct_ncl", - "Time for sel_10pct_ncl", - "select col_key, col_int, col_signed, col_code, - col_double, col_name - from tenpct - where col_name = 'THE+ASAP+BENCHMARKS+'",$dbh,$opt_loop_count); - -if ($limits->{'subqueries'}){ - test_query("agg_simple_report", - "Time for agg_simple_report", - "select avg(updates.col_decim) - from updates - where updates.col_key in - (select updates.col_key - from updates, hundred - where hundred.col_key = updates.col_key - and updates.col_decim > 980000000)",$dbh,$opt_loop_count); -}else{ - print "agg_simple_report - Failed\n\n"; -} - -test_query("agg_info_retrieval", - "Time for agg_info_retrieval", - "select count(col_key) - from tenpct - where col_name = 'THE+ASAP+BENCHMARKS' - and col_int <= 100000000 - and col_signed between 1 and 99999999 - and not (col_float between -450000000 and 450000000) - and col_double > 600000000 - and col_decim < -600000000",$dbh,$opt_loop_count); - -if ($limits->{'views'}){ - test_query("agg_create_view", - "Time for agg_create_view", - "create view - reportview(col_key,col_signed,col_date,col_decim, - col_name,col_code,col_int) as - select updates.col_key, updates.col_signed, - updates.col_date, updates.col_decim, - hundred.col_name, hundred.col_code, - hundred.col_int - from updates, hundred - where updates.col_key = hundred.col_key",$dbh,$opt_loop_count); - - test_query("agg_subtotal_report", - "Time for agg_subtotal_report", - "select avg(col_signed), min(col_signed), max(col_signed), - max(col_date), min(col_date), - count(distinct col_name), count(col_name), - col_code, col_int - from reportview - where col_decim >980000000 - group by col_code, col_int",$dbh,$opt_loop_count); - - - test_query("agg_total_report", - "Time for agg_total_report", - "select avg(col_signed), min(col_signed), max(col_signed), - max(col_date), min(col_date), - count(distinct col_name), count(col_name), - count(col_code), count(col_int) - from reportview - where col_decim >980000000",$dbh,$opt_loop_count); -}else{ - print "agg_create_view - Failed\n\n"; - print "agg_subtotal_report - Failed\n\n"; - print "agg_total_report - Failed\n\n"; -} - -#fix from here -test_query("join_2_cl", - "Time for join_2_cl", - "select uniques.col_signed, uniques.col_name, - hundred.col_signed, hundred.col_name - from uniques, hundred - where uniques.col_key = hundred.col_key - and uniques.col_key =1000" - ,$dbh,$opt_loop_count); - -test_query("join_2", - "Time for join_2", - "select uniques.col_signed, uniques.col_name, - hundred.col_signed, hundred.col_name - from uniques, hundred - where uniques.col_address = hundred.col_address - and uniques.col_address = 'SILICON VALLEY'" - ,$dbh,$opt_loop_count); - -test_query("sel_variable_select_low", - "Time for sel_variable_select_low", - "select col_key, col_int, col_signed, col_code, - col_double, col_name - from tenpct - where col_signed < -500000000" - ,$dbh,$opt_loop_count); - -test_query("sel_variable_select_high", - "Time for sel_variable_select_high", - "select col_key, col_int, col_signed, col_code, - col_double, col_name - from tenpct - where col_signed < -250000000" - ,$dbh,$opt_loop_count); - -test_query("join_4_cl", - "Time for join_4_cl", - "select uniques.col_date, hundred.col_date, - tenpct.col_date, updates.col_date - from uniques, hundred, tenpct, updates - where uniques.col_key = hundred.col_key - and uniques.col_key = tenpct.col_key - and uniques.col_key = updates.col_key - and uniques.col_key = 1000" - ,$dbh,$opt_loop_count); - -test_query("proj_100", - "Time for proj_100", - "select distinct col_address, col_signed from hundred" - ,$dbh,$opt_loop_count); - -test_query("join_4_ncl", - "Time for join_4_ncl", - "select uniques.col_date, hundred.col_date, - tenpct.col_date, updates.col_date - from uniques, hundred, tenpct, updates - where uniques.col_code = hundred.col_code - and uniques.col_code = tenpct.col_code - and uniques.col_code = updates.col_code - and uniques.col_code = 'BENCHMARKS'" - ,$dbh,$opt_loop_count); - -test_query("proj_10pct", - "Time for proj_10pct", - "select distinct col_signed from tenpct" - ,$dbh,$opt_loop_count); - -test_query("sel_1_ncl", - "Time for sel_1_ncl", - "select col_key, col_int, col_signed, col_code, - col_double, col_name - from updates where col_code = 'BENCHMARKS'" - ,$dbh,$opt_loop_count); - -test_query("join_2_ncl", - "Time for join_2_ncl", - "select uniques.col_signed, uniques.col_name, - hundred.col_signed, hundred.col_name - from uniques, hundred - where uniques.col_code = hundred.col_code - and uniques.col_code = 'BENCHMARKS'" - ,$dbh,$opt_loop_count); - -if ($limits->{'foreign_key'}){ - do_many($dbh,$server->create("integrity_temp",\@fields,[])); - - test_query("integrity_test_1", - "Time for integrity_test", - "insert into integrity_temp select * - from hundred where col_int=0",$dbh,$opt_loop_count); - - test_query("integrity_test_2", - "Time for integrity_test", - "update hundred set col_signed = '-500000000' - where col_int = 0",$dbh,$opt_loop_count); - - test_query("integrity_test_3", - "Time for integrity_test", - "update hundred set col_signed = '-500000000' - where col_int = 0",$dbh,$opt_loop_count); - - -}else{ - print "integrity_test - Failed\n\n"; -} - -push @drop_seq_command,$server->drop_index("updates","updates_int_bt"); -push @drop_seq_command,$server->drop_index("updates","updates_double_bt"); -push @drop_seq_command,$server->drop_index("updates","updates_decim_bt"); -push @drop_seq_command,$server->drop_index("updates","updates_code_h"); - -test_many_command("Drop updates keys", - "Time for drop_updates_keys", - \@drop_seq_command,$dbh,$opt_loop_count); - -do_many($dbh,$server->create("saveupdates",\@fields,[])); - -test_command("bulk_save", - "Time for bulk_save", - "insert into saveupdates select * - from updates where col_key between 5000 and 5999" - ,$dbh,$opt_loop_count); - -test_command("bulk_modify", - "Time for bulk_modify", - "update updates - set col_key = col_key - 100000 - where col_key between 5000 and 5999" - ,$dbh,$opt_loop_count); - -safe_command("upd_append_duplicate", - "Time for upd_append_duplicate", - "insert into updates - values (6000, 0, 60000, 39997.90, - 50005.00, 50005.00, - '11/10/1985', 'CONTROLLER', - 'ALICE IN WONDERLAND', - 'UNIVERSITY OF ILLINOIS AT CHICAGO')" - ,$dbh,$opt_loop_count); - -test_command("upd_remove_duplicate", - "Time for upd_remove_duplicate", - "delete from updates where col_key = 6000 and col_int = 0" - ,$dbh,$opt_loop_count); - -test_command("upd_app_t_mid", - "Time for upd_app_t_mid", - "insert into updates - values (5005, 5005, 50005, 50005.00, 50005.00, - 50005.00, '1/1/1988', 'CONTROLLER', - 'ALICE IN WONDERLAND', - 'UNIVERSITY OF ILLINOIS AT CHICAGO')" - ,$dbh,$opt_loop_count); - -test_command("upd_mod_t_mid", - "Time for upd_mod_t_mid", - "update updates set col_key = '-5000' - where col_key = 5005" - ,$dbh,$opt_loop_count); - -test_command("upd_del_t_mid", - "Time for upd_del_t_mid", - "delete from updates - where (col_key='5005') or (col_key='-5000')" - ,$dbh,$opt_loop_count); - -test_command("upd_app_t_end", - "Time for upd_app_t_end", - "delete from updates - where (col_key='5005') or (col_key='-5000')" - ,$dbh,$opt_loop_count); - -test_command("upd_mod_t_end", - "Time for upd_mod_t_end", - "update updates - set col_key = -1000 - where col_key = 1000000001" - ,$dbh,$opt_loop_count); - -test_command("upd_del_t_end", - "Time for upd_del_t_end", - "delete from updates where col_key = -1000" - ,$dbh,$opt_loop_count); - -test_command("create_idx_updates_code_h", - "time for create_idx_updates_code_h", - "create index updates_code_h on updates (col_code)", - $dbh,$opt_loop_count); - -test_command("upd_app_t_mid", - "Time for upd_app_t_mid", - "insert into updates - values (5005, 5005, 50005, 50005.00, 50005.00, - 50005.00, '1/1/1988', 'CONTROLLER', - 'ALICE IN WONDERLAND', - 'UNIVERSITY OF ILLINOIS AT CHICAGO')" - ,$dbh,$opt_loop_count); - -test_command("upd_mod_t_cod", - "Time for upd_mod_t_cod", - "update updates - set col_code = 'SQL+GROUPS' - where col_key = 5005" - ,$dbh,$opt_loop_count); - -test_command("upd_del_t_mid", - "Time for upd_del_t_mid", - "delete from updates - where (col_key='5005') or (col_key='-5000')" - ,$dbh,$opt_loop_count); - -test_command("create_idx_updates_int_bt", - "time for create_idx_updates_int_bt", - "create index updates_int_bt on updates (col_int)", - $dbh,$opt_loop_count); - -test_command("upd_app_t_mid", - "Time for upd_app_t_mid", - "insert into updates - values (5005, 5005, 50005, 50005.00, 50005.00, - 50005.00, '1/1/1988', 'CONTROLLER', - 'ALICE IN WONDERLAND', - 'UNIVERSITY OF ILLINOIS AT CHICAGO')" - ,$dbh,$opt_loop_count); - -test_command("upd_mod_t_int", - "Time for upd_mod_t_int", - "update updates set col_int = 50015 where col_key = 5005" - ,$dbh,$opt_loop_count); - -test_command("upd_del_t_mid", - "Time for upd_del_t_mid", - "delete from updates - where (col_key='5005') or (col_key='-5000')" - ,$dbh,$opt_loop_count); - -test_command("bulk_append", - "Time for bulk_append", - "insert into updates select * from saveupdates" - ,$dbh,$opt_loop_count); - -test_command("bulk_delete", - "Time for bulk_delete", - "delete from updates where col_key < 0" - ,$dbh,$opt_loop_count); - -################################ END ################################### -#### -#### End of the test...Finally print time used to execute the -#### whole test. - -$dbh->disconnect; - -end_benchmark($start_time); - -############################ HELP FUNCTIONS ############################## - -sub test_query -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); - - print $test_text . "\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $count ; $i++) - { - defined(fetch_all_rows($dbh,$query)) or warn $DBI::errstr; - } - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -sub test_command -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); - - print $test_text . "\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $count ; $i++) - { - $dbh->do($query) or die $DBI::errstr; - } - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -sub safe_command -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); - - print $test_text . "\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $count ; $i++) - { - safe_do_many($dbh,$query); - } - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -sub test_many_command -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); - - $loop_time=new Benchmark; - for ($i=0 ; $i < $count ; $i++) - { - safe_do_many($dbh, @$query); - } - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - diff --git a/sql-bench/bench-count-distinct.sh b/sql-bench/bench-count-distinct.sh deleted file mode 100644 index 8ebc910df59beb40500fdc5818a6c4bbcfcedd4d..0000000000000000000000000000000000000000 --- a/sql-bench/bench-count-distinct.sh +++ /dev/null @@ -1,259 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of selecting on keys that consist of many parts -# -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Getopt::Long; -use Benchmark; - -$opt_loop_count=10000; -$opt_medium_loop_count=200; -$opt_small_loop_count=10; -$opt_regions=6; -$opt_groups=100; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$columns=min($limits->{'max_columns'},500,($limits->{'query_size'}-50)/24, - $limits->{'max_conditions'}/2-3); - -if ($opt_small_test) -{ - $opt_loop_count/=10; - $opt_medium_loop_count/=10; - $opt_small_loop_count/=10; - $opt_groups/=10; -} - -print "Testing the speed of selecting on keys that consist of many parts\n"; -print "The test-table has $opt_loop_count rows and the test is done with $columns ranges.\n\n"; - -#### -#### Connect and start timeing -#### - -$dbh = $server->connect(); -$start_time=new Benchmark; - -#### -#### Create needed tables -#### - -goto select_test if ($opt_skip_create); - -print "Creating table\n"; -$dbh->do("drop table bench1" . $server->{'drop_attr'}); - -do_many($dbh,$server->create("bench1", - ["region char(1) NOT NULL", - "idn integer(6) NOT NULL", - "rev_idn integer(6) NOT NULL", - "grp integer(6) NOT NULL"], - ["primary key (region,idn)", - "unique (region,rev_idn)", - "unique (region,grp,idn)"])); -if ($opt_lock_tables) -{ - do_query($dbh,"LOCK TABLES bench1 WRITE"); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -#### -#### Insert $opt_loop_count records with -#### region: "A" -> "E" -#### idn: 0 -> count -#### rev_idn: count -> 0, -#### grp: distributed values 0 - > count/100 -#### - -print "Inserting $opt_loop_count rows\n"; - -$loop_time=new Benchmark; -$query="insert into bench1 values ("; -$half_done=$opt_loop_count/2; -for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--) -{ - $grp=$id*3 % $opt_groups; - $region=chr(65+$id%$opt_regions); - do_query($dbh,"$query'$region',$id,$rev_id,$grp)"); - if ($id == $half_done) - { # Test with different insert - $query="insert into bench1 (region,idn,rev_idn,grp) values ("; - } -} - -$end_time=new Benchmark; -print "Time to insert ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_lock_tables) -{ - do_query($dbh,"UNLOCK TABLES"); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh,"bench1"); -} - -if ($opt_lock_tables) -{ - do_query($dbh,"LOCK TABLES bench1 WRITE"); -} - -#### -#### Do some selects on the table -#### - -select_test: - - - -if ($limits->{'group_distinct_functions'}) -{ - print "Testing count(distinct) on the table\n"; - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct region) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_key_prefix ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct grp) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct grp),count(distinct rev_idn) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_2 ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select region,count(distinct idn) from bench1 group by region"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group_on_key ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select grp,count(distinct idn) from bench1 group by grp"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group_on_key_parts ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select grp,count(distinct rev_idn) from bench1 group by grp"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - $test_count=$opt_medium_loop_count/10; - for ($i=0 ; $i < $test_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select idn,count(distinct region) from bench1 group by idn"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $test_count)); - } - print_time($estimated); - print " for count_distinct_big ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -#### -#### End of benchmark -#### - -if ($opt_lock_tables) -{ - do_query($dbh,"UNLOCK TABLES"); -} -if (!$opt_skip_delete) -{ - do_query($dbh,"drop table bench1" . $server->{'drop_attr'}); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -$dbh->disconnect; # close connection - -end_benchmark($start_time); diff --git a/sql-bench/bench-init.pl.sh b/sql-bench/bench-init.pl.sh deleted file mode 100644 index 31282d06abfd265a4f93c9fa93819dc2f4d91f11..0000000000000000000000000000000000000000 --- a/sql-bench/bench-init.pl.sh +++ /dev/null @@ -1,598 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -########################################################## -# this is the base file every test is using .... -# this is made for not changing every file if we want to -# add an option or just want to change something in -# code what is the same in every file ... -########################################################## - -# -# The exported values are: - -# $opt_... Various options -# $date Current date in ISO format -# $server Object for current server -# $limits Hash reference to limits for benchmark - -$benchmark_version="2.15"; -use Getopt::Long; -use POSIX; - -require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; - -$|=1; # Output data immediately - -$opt_skip_test=$opt_skip_create=$opt_skip_delete=$opt_verbose=$opt_fast_insert=$opt_lock_tables=$opt_debug=$opt_skip_delete=$opt_fast=$opt_force=$opt_log=$opt_use_old_results=$opt_help=$opt_odbc=$opt_small_test=$opt_small_tables=$opt_samll_key_tables=$opt_stage=$opt_old_headers=$opt_die_on_errors=$opt_tcpip=$opt_random=0; -$opt_cmp=$opt_user=$opt_password=$opt_connect_options=""; -$opt_server="mysql"; $opt_dir="output"; -$opt_host="localhost";$opt_database="test"; -$opt_machine=""; $opt_suffix=""; -$opt_create_options=undef; -$opt_optimization="None"; -$opt_hw=""; -$opt_threads=5; - -if (!defined($opt_time_limit)) -{ - $opt_time_limit=10*60; # Don't wait more than 10 min for some tests -} - -$log_prog_args=join(" ", skip_arguments(\@ARGV,"comments","cmp","server", - "user", "host", "database", "password", - "use-old-results","skip-test", - "optimization","hw", - "machine", "dir", "suffix", "log")); -GetOptions("skip-test=s","comments=s","cmp=s","server=s","user=s","host=s","database=s","password=s","loop-count=i","row-count=i","skip-create","skip-delete","verbose","fast-insert","lock-tables","debug","fast","force","field-count=i","regions=i","groups=i","time-limit=i","log","use-old-results","machine=s","dir=s","suffix=s","help","odbc","small-test","small-tables","small-key-tables","stage=i","threads=i","random","old-headers","die-on-errors","create-options=s","hires","tcpip","silent","optimization=s","hw=s","socket=s","connect-options=s") || usage(); - -usage() if ($opt_help); -$server=get_server($opt_server,$opt_host,$opt_database,$opt_odbc, - machine_part(), $opt_socket, $opt_connect_options); -$limits=merge_limits($server,$opt_cmp); -$date=date(); -@estimated=(0.0,0.0,0.0); # For estimated time support - -if ($opt_hires) -{ - eval "use Time::HiRes;"; -} - -{ - my $tmp= $opt_server; - $tmp =~ s/_odbc$//; - if (length($opt_cmp) && index($opt_cmp,$tmp) < 0) - { - $opt_cmp.=",$tmp"; - } -} -$opt_cmp=lc(join(",",sort(split(',',$opt_cmp)))); - -# -# set opt_lock_tables if one uses --fast and drivers supports it -# - -if (($opt_lock_tables || $opt_fast) && $server->{'limits'}->{'lock_tables'}) -{ - $opt_lock_tables=1; -} -else -{ - $opt_lock_tables=0; -} -if ($opt_fast) -{ - $opt_fast_insert=1; - $opt_suffix="_fast" if (!length($opt_suffix)); -} - -if ($opt_odbc) -{ - $opt_suffix="_odbc" if (!length($opt_suffix)); -} - -if (!$opt_silent) -{ - print "Testing server '" . $server->version() . "' at $date\n\n"; -} - -if ($opt_debug) -{ - print "\nCurrent limits: \n"; - foreach $key (sort keys %$limits) - { - print $key . " " x (30-length($key)) . $limits->{$key} . "\n"; - } - print "\n"; -} - -# -# Some help functions -# - -sub skip_arguments -{ - my($argv,@skip_args)=@_; - my($skip,$arg,$name,@res); - - foreach $arg (@$argv) - { - if ($arg =~ /^\-+([^=]*)/) - { - $name=$1; - foreach $skip (@skip_args) - { - if (index($skip,$name) == 0) - { - $name=""; # Don't use this parameters - last; - } - } - push (@res,$arg) if (length($name)); - } - } - return @res; -} - - -sub merge_limits -{ - my ($server,$cmp)= @_; - my ($name,$tmp_server,$limits,$res_limits,$limit,$tmp_limits); - - $res_limits=$server->{'limits'}; - if ($cmp) - { - foreach $name (split(",",$cmp)) - { - $tmp_server= (get_server($name,$opt_host, $opt_database, - $opt_odbc,machine_part()) - || die "Unknown SQL server: $name\n"); - $limits=$tmp_server->{'limits'}; - %new_limits=(); - foreach $limit (keys(%$limits)) - { - if (defined($res_limits->{$limit}) && defined($limits->{$limit})) - { - $new_limits{$limit}=min($res_limits->{$limit},$limits->{$limit}); - } - } - %tmp_limits=%new_limits; - $res_limits=\%tmp_limits; - } - } - return $res_limits; -} - -sub date -{ - my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time()); - sprintf("%04d-%02d-%02d %2d:%02d:%02d", - 1900+$year,$mon+1,$mday,$hour,$min,$sec); -} - -sub min -{ - my($min)=$_[0]; - my($i); - for ($i=1 ; $i <= $#_; $i++) - { - $min=$_[$i] if ($min > $_[$i]); - } - return $min; -} - -sub max -{ - my($max)=$_[0]; - my($i); - for ($i=1 ; $i <= $#_; $i++) - { - $max=$_[$i] if ($max < $_[$i]); - } - return $max; -} - - -# -# Execute many statements in a row -# - -sub do_many -{ - my ($dbh,@statements)=@_; - my ($statement,$sth); - - foreach $statement (@statements) - { - if (!($sth=$dbh->do($statement))) - { - die "Can't execute command '$statement'\nError: $DBI::errstr\n"; - } - } -} - -sub safe_do_many -{ - my ($dbh,@statements)=@_; - my ($statement,$sth); - - foreach $statement (@statements) - { - if (!($sth=$dbh->do($statement))) - { - print STDERR "Can't execute command '$statement'\nError: $DBI::errstr\n"; - return 1; - } - } - return 0; -} - - - -# -# Do a query and fetch all rows from a statement and return the number of rows -# - -sub fetch_all_rows -{ - my ($dbh,$query,$must_get_result)=@_; - my ($count,$sth); - $count=0; - - print "$query: " if ($opt_debug); - if (!($sth= $dbh->prepare($query))) - { - print "\n" if ($opt_debug); - die "Error occured with prepare($query)\n -> $DBI::errstr\n"; - return undef; - } - if (!$sth->execute) - { - print "\n" if ($opt_debug); - if (defined($server->{'error_on_execute_means_zero_rows'}) && - !$server->abort_if_fatal_error()) - { - if (defined($must_get_result) && $must_get_result) - { - die "Error: Query $query didn't return any rows\n"; - } - $sth->finish; - print "0\n" if ($opt_debug); - return 0; - } - die "Error occured with execute($query)\n -> $DBI::errstr\n"; - $sth->finish; - return undef; - } - while ($sth->fetchrow_arrayref) - { - $count++; - } - print "$count\n" if ($opt_debug); - if (defined($must_get_result) && $must_get_result && !$count) - { - die "Error: Query $query didn't return any rows\n"; - } - $sth->finish; - undef($sth); - return $count; -} - -sub do_query -{ - my($dbh,$query)=@_; - print "$query\n" if ($opt_debug); - $dbh->do($query) or - die "\nError executing '$query':\n$DBI::errstr\n"; -} - -# -# Run a query X times -# - -sub time_fetch_all_rows -{ - my($test_text,$result_text,$query,$dbh,$test_count)=@_; - my($i,$loop_time,$end_time,$count,$rows,$estimated); - - print $test_text . "\n" if (defined($test_text)); - $count=$rows=0; - $loop_time=new Benchmark; - for ($i=1 ; $i <= $test_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,$query) or die $DBI::errstr; - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i, - $test_count)); - } - $end_time=new Benchmark; - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for $result_text ($count:$rows) " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -# -# Handle estimated time of the server is too slow -# Returns 0 if one should continue as normal -# - -sub predict_query_time -{ - my ($loop_time,$end_time,$count_ref,$loop,$loop_count)= @_; - my ($k,$tmp); - - if (($end_time->[0] - $loop_time->[0]) > $opt_time_limit) - { - # We can't wait until the SUN dies. Try to predict the end time - if ($loop != $loop_count) - { - $tmp=($end_time->[0] - $loop_time->[0]); - print "Note: Query took longer then time-limit: $opt_time_limit\nEstimating end time based on:\n"; - print "$$count_ref queries in $loop loops of $loop_count loops took $tmp seconds\n"; - for ($k=0; $k < 3; $k++) - { - $tmp=$loop_time->[$k]+($end_time->[$k]-$loop_time->[$k])/$loop* - $loop_count; - $estimated[$k]+=($tmp-$end_time->[$k]); - $end_time->[$k]=$tmp; - } - $$count_ref= int($$count_ref/$loop*$loop_count); - return 1; - } - } - return 0; -} - -# -# standard end of benchmark -# - -sub end_benchmark -{ - my ($start_time)=@_; - - $end_time=new Benchmark; - if ($estimated[0]) - { - print "Estimated total time: "; - $end_time->[0]+=$estimated[0]; - $end_time->[1]+=$estimated[1]; - $end_time->[2]+=$estimated[2]; - } - else - { - print "Total time: " - } - print timestr(timediff($end_time, $start_time),"all") . "\n"; - exit 0; -} - -sub print_time -{ - my ($estimated)=@_; - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } -} - -# -# Create a filename part for the machine that can be used for log file. -# - -sub machine_part -{ - my ($name,$orig); - return $opt_machine if (length($opt_machine)); # Specified by user -# Specified by user - $orig=$name=machine(); - $name="win9$1" if ($orig =~ /win.*9(\d)/i); - $name="NT_$1" if ($orig =~ /Windows NT.*(\d+\.\d+)/i); - $name="win2k" if ($orig =~ /Windows 2000/i); - $name =~ s/\s+/_/g; # Make the filenames easier to parse - $name =~ s/-/_/g; - $name =~ s/\//_/g; - return $name; -} - -sub machine -{ - my @name = POSIX::uname(); - my $name= $name[0] . " " . $name[2] . " " . $name[4]; - return $name; -} - -# -# Usage -# - -sub usage -{ - print <<EOF; -The MySQL benchmarks Ver $benchmark_version - -All benchmarks takes the following options: - ---comments - Add a comment to the benchmark output. Comments should contain - extra information that 'uname -a' doesn\'t give and if the database was - stared with some specific, non default, options. - ---cmp=server[,server...] - Run the test with limits from the given servers. If you run all servers - with the same --cmp, you will get a test that is comparable between - the different sql servers. - ---create-options=# - Extra argument to all create statements. If you for example want to - create all MySQL tables as BDB tables use: - --create-options=ENGINE=BDB - ---database (Default $opt_database) - In which database the test tables are created. - ---debug - This is a test specific option that is only used when debugging a test. - Print out debugging information. - ---dir (Default $opt_dir) - Option to 'run-all-tests' to where the test results should be stored. - ---fast - Allow the database to use non standard ANSI SQL commands to make the - test go faster. - ---fast-insert - Use "insert into table_name values(...)" instead of - "insert into table_name (....) values(...)" - If the database supports it, some tests uses multiple value lists. - ---field-count - This is a test specific option that is only used when debugging a test. - This usually means how many fields there should be in the test table. - ---force - This is a test specific option that is only used when debugging a test. - Continue the test even if there is some error. - Delete tables before creating new ones. - ---groups (Default $opt_groups) - This is a test specific option that is only used when debugging a test. - This usually means how many different groups there should be in the test. - ---lock-tables - Allow the database to use table locking to get more speed. - ---log - Option to 'run-all-tests' to save the result to the '--dir' directory. - ---loop-count (Default $opt_loop_count) - This is a test specific option that is only used when debugging a test. - This usually means how many times times each test loop is executed. - ---help - Shows this help - ---host='host name' (Default $opt_host) - Host name where the database server is located. - ---machine="machine or os_name" - The machine/os name that is added to the benchmark output filename. - The default is the OS name + version. - ---odbc - Use the ODBC DBI driver to connect to the database. - ---password='password' - Password for the current user. - ---socket='socket' - If the database supports connecting through a Unix socket, - then use this socket to connect - ---regions - This is a test specific option that is only used when debugging a test. - This usually means how AND levels should be tested. - ---old-headers - Get the old benchmark headers from the old RUN- file. - ---server='server name' (Default $opt_server) - Run the test on the given SQL server. - Known servers names are: Access, Adabas, AdabasD, Empress, Oracle, - Informix, DB2, mSQL, MS-SQL, MySQL, Pg, Solid and Sybase - ---silent - Don't print info about the server when starting test. - ---skip-delete - This is a test specific option that is only used when debugging a test. - This will keep the test tables after the test is run. - ---skip-test=test1[,test2,...] - For run-all-programs; Don\'t execute the named tests. - ---small-test - This runs some tests with smaller limits to get a faster test. - Can be used if you just want to verify that the database works, but - don't have time to run a full test. - ---small-tables - This runs some tests that generate big tables with fewer rows. - This can be used with databases that can\'t handle that many rows - because of pre-sized partitions. - ---suffix (Default $opt_suffix) - The suffix that is added to the database name in the benchmark output - filename. This can be used to run the benchmark multiple times with - different server options without overwritten old files. - When using --fast the suffix is automaticly set to '_fast'. - ---random - Inform test suite that we are generate random inital values for sequence of - test executions. It should be used for imitation of real conditions. - ---threads=# (Default 5) - Number of threads for multi-user benchmarks. - ---tcpip - Inform test suite that we are using TCP/IP to connect to the server. In - this case we can\t do many new connections in a row as we in this case may - fill the TCP/IP stack - ---time-limit (Default $opt_time_limit) - How long a test loop is allowed to take, in seconds, before the end result - is 'estimated'. - ---use-old-results - Option to 'run-all-tests' to use the old results from the '--dir' directory - instead of running the tests. - ---user='user_name' - User name to log into the SQL server. - ---verbose - This is a test specific option that is only used when debugging a test. - Print more information about what is going on. - ---optimization='some comments' - Add coments about optimization of DBMS, which was done before the test. - ---hw='some comments' - Add coments about hardware used for this test. - ---connect-options='some connect options' - Add options, which uses at DBI connect. - For example --connect-options=mysql_read_default_file=/etc/my.cnf. - -EOF - exit(0); -} - - - -#### -#### The end of the base file ... -#### -1; diff --git a/sql-bench/compare-results.sh b/sql-bench/compare-results.sh deleted file mode 100644 index e95bd23e6a3c17ae6dd12f01d4fb4f32661d542b..0000000000000000000000000000000000000000 --- a/sql-bench/compare-results.sh +++ /dev/null @@ -1,619 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# a little program to generate a table of results -# just read all the RUN-*.log files and format them nicely -# Made by Luuk de Boer -# Patched by Monty - -use Getopt::Long; - -$opt_server="mysql"; -$opt_dir="output"; -$opt_machine=$opt_cmp=""; -$opt_relative=$opt_same_server=$opt_help=$opt_Information=$opt_skip_count=$opt_no_bars=$opt_verbose=0; - -GetOptions("Information","help","server=s","cmp=s","machine=s","relative","same-server","dir=s","skip-count","no-bars","html","verbose") || usage(); - -usage() if ($opt_help || $opt_Information); - -$opt_cmp=lc(join(",",sort(split(',',$opt_cmp)))); - -if ($opt_same_server) -{ - $files="$opt_dir/RUN-$opt_server*$opt_machine"; -} -else -{ - $files="$opt_dir/RUN-*$opt_machine"; -} -$files.= "-cmp-$opt_cmp" if (length($opt_cmp)); - -# -# Go trough all RUN files and gather statistics. -# - -if ($#ARGV == -1) -{ - @ARGV=glob($files); - $automatic_files=1; -} - -foreach (@ARGV) -{ - next if (!$opt_cmp && /-cmp-/ && $automatic_files || defined($found{$_})); - $prog=$filename = $_; - $found{$_}=1; # Remove dupplicates - /RUN-(.*)$/; - $tot{$prog}{'version'}=$1; - push(@key_order,$prog); - $next = 0; - open(TMP, "<$filename") || die "Can't open $filename: $!\n"; - while (<TMP>) - { - chomp; - if ($next == 0) { - if (/Server version:\s+(\S+.*)/i) - { - $tot{$prog}{'server'} = $1; - } - elsif (/Arguments:\s+(.+)/i) - { - $arguments= $1; - # Remove some standard, not informative arguments - $arguments =~ s/--force|--log|--use-old\S*|--server=\S+|--cmp=\S+|--user=\S+|--pass=\S+|--machine=\S+|--dir=\S+//g; - if (($tmp=index($arguments,"--comment")) >= 0) - { - if (($end=index($arguments,$tmp+2,"--")) >= 0) - { - substr($arguments,$tmp,($end-$tmp))=""; - } - else - { - $arguments=substr($arguments,0,$tmp); - } - } - $arguments =~ s/\s+/ /g; - $tot{$prog}{'arguments'}=$arguments; - } - elsif (/Comments:\s+(.+)/i) { - $tot{$prog}{'comments'} = $1; - } elsif (/^(\S+):.*(estimated\s|)total\stime:\s+([\d.]+)\s+(wallclock\s|)secs/i) - { - $tmp = $1; $tmp =~ s/://; - $tot{$prog}{$tmp} = [ $3, (length($2) ? "+" : "")]; - $op1{$tmp} = $tmp; - } elsif (/Totals per operation:/i) { - $next = 1; - next; - } - } - elsif ($next == 1) - { - if (/^(\S+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s*([+|?])*/) - { - $tot1{$prog}{$1} = [$2,$6,$7]; - $op{$1} = $1; - } - } - } -} - -if (!%op) -{ - print "Didn't find any files matching: '$files'\n"; - print "Use the --cmp=server,server option to compare benchmarks\n"; - exit 1; -} - - -# everything is loaded ... -# now we have to create a fancy output :-) - -# I prefer to redirect scripts instead to force it to file ; Monty -# -# open(RES, ">$resultfile") || die "Can't write to $resultfile: $!\n"; -# select(RES) -# - -if ($opt_html) { - html_output(); -} else { - ascii_output(); -} -exit 0; - -# -# some output + format functions; -# - -sub ascii_output { - print <<EOF; -This is the result file of the different benchmark tests. - -The number in () after each tests shows how many SQL commands the particular -test did. As one test may have many different parameters this gives only -a rough picture of what was done. Check the source for more information :) - -Keep in mind that one can\'t compare benchmarks run with different --cmp -options. The --cmp options sets the all limits according to the worst -limit for all server in the benchmark. - -Numbers marked with '+' are estimated according to previous runs because -the query took longer than a given time-limit to finish. The estimation -shouldn\'t be far from the real result thought. - -Numbers marked with '?' contains results that gave wrong result. This can only -be used as an indication of how long it took for the server to produce a wrong -result :) - -Numbers marked with '*' are tests that was run a different number times -than the test in the first column. The reason for this is normally that the -marked test was run with different options that affects the number of tests -or that the test was from another version of the MySQL benchmarks. - -Hope this will give you some idea how each db is performing at what thing .... -Hope you like it .... Luuk & Monty (1997) - -EOF - - if ($opt_relative) - { - print "Column 1 is in seconds. All other columns are presented relative\n"; - print "to this. 1.00 is the same, bigger numbers indicates slower\n\n"; - } - - if ($opt_verbose) - { - print "The test values is printed in the format 'time:number of tests'\n"; - } - - if (length($opt_cmp)) - { - print "The test was run with limits from: $opt_cmp\n\n"; - } - print "The result logs which where found and the options:\n"; - $bar= $opt_no_bars ? " " : "|"; - - # Move $opt_server first in array if not filename on command line - if ($automatic_files) - { - @key_order=sort {$a cmp $b} keys %tot; - for ($i=0; $i <= $#key_order; $i++) - { - if ($tot{$key_order[$i]}{'version'} =~ /^$opt_server-/) - { - unshift(@key_order,$key_order[$i]); - splice(@key_order,$i+1,1); - last; - } - } - } - # Print header - - $column_count=0; - foreach $key (@key_order) - { - $tmp=$tmp=$tot{$key}{'version'}; - $tmp =~ s/-cmp-$opt_cmp// if (length($opt_cmp)); - $column_count++; - printf "%2d %-40.40s: %s %s\n", $column_count, $tmp, - $tot{$key}{'server'}, $tot{$key}{'arguments'}; - print " $tot{$key}{'comments'}\n" - if ($tot{$key}{'comments'} =~ /\w+/); - } - - print "\n"; - - $namewidth=($opt_skip_count && !$opt_verbose) ? 29 : 36; - $colwidth= $opt_relative ? 10 : 7; - $count_width=7; - $colwidth+=$count_width if ($opt_verbose); - - print_sep("="); - printf "%-$namewidth.${namewidth}s${bar}", "Operation"; - $count = 1; - foreach $key (@key_order) - { - printf "%${colwidth}d${bar}", $count; - $count++; - } - printf "\n%-$namewidth.${namewidth}s${bar}", ""; - foreach $key (@key_order) - { - $ver=$tot{$key}{'version'}; - $ver =~ s/-[a-zA-Z0-9_\.]+-cmp-$opt-cmp$//; - printf "%${colwidth}.${colwidth}s${bar}", $ver; - } - print "\n"; - print_sep("-"); - print_string($opt_relative ? "Relative results per test (First column is in seconds):" : "Results per test in seconds:"); - print_sep("-"); - - foreach $key (sort {$a cmp $b} keys %op1) - { - printf "%-$namewidth.${namewidth}s${bar}", $key; - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot{$server}{$key}->[0],undef(),$tot{$server}{$key}->[1]); - $first=$tot{$server}{$key}->[0] if (!defined($first)); - } - print "\n"; - } - - print_sep("-"); - print_string("The results per operation:"); - print_sep("-"); - - foreach $key (sort {$a cmp $b} keys %op) - { - next if ($key =~ /TOTALS/i); - $tmp=$key; - $count=$tot1{$key_order[0]}{$key}->[1]; - $tmp.= " (" . $count . ")" if (!$skip_count); - printf "%-$namewidth.${namewidth}s${bar}", $tmp; - $first=undef(); - foreach $server (@key_order) - { - $tmp= $count != $tot1{$server}{$key}->[1] ? "*" : ""; - print_value($first,$tot1{$server}{$key}->[0],$tot1{$server}{$key}->[1], - $tot1{$server}{$key}->[2] . $tmp); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); - } - print "\n"; - } - - print_sep("-"); - $key="TOTALS"; - printf "%-$namewidth.${namewidth}s${bar}", $key; - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot1{$server}{$key}->[0],undef(), - $tot1{$server}{$key}->[2]); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); - } - print "\n"; - print_sep("="); -} - - -sub html_output -{ - my $template="template.html"; - my $title="MySQL | | Information | Benchmarks | Compare with $opt_cmp"; - my $image="info.gif"; - $bar=""; - - open(TEMPLATE, $template) || die; - while (<TEMPLATE>) - { - if (/<center>/) - { - print $_; - print "<!---- This is AUTOMATICALLY Generated. Do not edit here! ---->\n"; - } - elsif (/TITLE:SUBTITLE/) - { - s|TITLE:SUBTITLE|$title|; - print $_; - } - elsif (/TITLE:COMPARE/) - { - s|TITLE:COMPARE|$opt_cmp|; - print $_; - } - elsif (/ subchapter name /) - { - # Nothing here for now - print $_; - } - elsif (/ text of chapter /) - { - print $_; - print_html_body(); - } - else - { - print $_; - } - } - close(TEMPLATE); -} - - -sub print_html_body -{ - my ($title,$count,$key); - print <<EOF; -<center> -<font size=+4><b>MySQL Benchmark Results</b></font><br> -<font size=+1><b>Compare with $opt_cmp</b></font><p><p> -</center> -This is the result file of the different benchmark tests. -<p> - -The number in () after each tests shows how many SQL commands the particular -test did. As one test may have many different parameters this gives only -a rough picture of what was done. Check the source for more information. -<p> -Keep in mind that one can\'t compare benchmarks run with different --cmp -options. The --cmp options sets the all limits according to the worst -limit for all server in the benchmark. -<p> -Numbers marked with '+' are estimated according to previous runs because -the query took longer than a given time-limit to finish. The estimation -shouldn\'t be far from the real result thought. -<p> -Numbers marked with '?' contains results that gave wrong result. This can only -be used as an indication of how long it took for the server to produce a wrong -result :) -<p> -Hope this will give you some idea how each db is performing at what thing .... -<br> -Hope you like it .... Luuk & Monty (1997) -<p><p> -EOF - - if ($opt_relative) - { - print "Column 1 is in seconds. All other columns are presented relative<br>\n"; - print "to this. 1.00 is the same, bigger numbers indicates slower<p>\n\n"; - } - - if (length($opt_cmp)) - { - print "The test was run with limits from: $opt_cmp\n\n"; - } - print "The result logs which where found and the options:<br>\n"; - - # Move $opt_server first in array - if ($automatic_files) - { - @key_order=sort {$a cmp $b} keys %tot; - for ($i=0; $i <= $#key_order; $i++) - { - if ($tot{$key_order[$i]}{'version'} =~ /^$opt_server-/) - { - unshift(@key_order,$key_order[$i]); - splice(@key_order,$i+1,1); - last; - } - } - } - # Print header - print "<p><center><table border=1 width=100%>\n"; - $column_count=0; - foreach $key (@key_order) - { - $tmp=$tot{$key}{'version'}; - $tmp =~ s/-cmp-$opt_cmp// if (length($opt_cmp)); - $column_count++; -# printf "<tr><td>%2d<td>%-36.36s<td>%s %s</tr>\n", $column_count, $tmp, - printf "<tr><td>%2d</td><td>%s</td><td>%s %s</td></tr>\n", - $column_count, $tmp, $tot{$key}{'server'}, $tot{$key}{'arguments'}; - print "<tr><td colspan=3>$tot{$key}{'comments'}</td></tr>\n" - if ($tot{$key}{'comments'} =~ /\w+/); - } - - print "</table></center><p><center><table border=1 width=100%>\n"; - - $namewidth=$opt_skip_count ? 22 :29; - $colwidth= $opt_relative ? 10 : 7; - $count_width=7; - - printf "<tr><td><b>%s</b></td>\n", "Operation"; - $count = 1; - foreach $key (@key_order) - { - $ver=$tot{$key}{'version'}; - printf "<td align=center><b>%d", $count; - printf "<br>%${colwidth}.${colwidth}s</b></td>\n", substr($ver,0,index($ver,"-")); - $count++; - } - print "</tr>\n"; - $title = $opt_relative ? "Relative results per test (First column is in seconds):" : "Results per test in seconds:"; - printf "<tr><td colspan=%d><b>%s</b></td></tr>\n", $count, $title; - - foreach $key (sort {$a cmp $b} keys %op1) - { - if (!$opt_html) - { - printf "<tr><td>%-$namewidth.${namewidth}s</td>", $key; - } - else - { - print "<tr><td>$key</td>"; - } - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot{$server}{$key}->[0],undef(), - $tot{$server}{$key}->[1]); - $first=$tot{$server}{$key}->[0] if (!defined($first)); - } - print "</tr>\n"; - } - - $title = "The results per operation:"; - printf "<tr><td colspan=%d><b>%s</b></td></tr>\n", $count, $title; - - foreach $key (sort {$a cmp $b} keys %op) - { - next if ($key =~ /TOTALS/i); - $tmp=$key; - $tmp.= " (" . $tot1{$key_order[0]}{$key}->[1] . ")" if (!$skip_count); - if (!$opt_html) - { - printf "<tr><td>%-$namewidth.${namewidth}s</td>", $tmp; - } - else - { - print "<tr><td>$tmp</td>"; - } - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot1{$server}{$key}->[0], - $tot1{$server}{$key}->[1], - $tot1{$server}{$key}->[2]); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); - } - print "</tr>\n"; - } - - $key="TOTALS"; - printf "<tr><td><b>%-$namewidth.${namewidth}s</b></td>", $key; - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot1{$server}{$key}->[0],undef(), - $tot1{$server}{$key}->[2]); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); - } - print "</tr>\n</table>\n"; -} - - -sub print_sep -{ - my ($sep)=@_; - print $sep x ($namewidth + (($colwidth+1) * $column_count)+1),"\n"; -} - - -sub print_value -{ - my ($first,$value,$count,$flags)=@_; - my ($tmp,$width); - - if (defined($value)) - { - if (!defined($first) || !$opt_relative) - { - $tmp=sprintf("%.2f",$value); - } - else - { - $first=1 if ($first == 0); # Assume that it took one second instead of 0 - $tmp= sprintf("%.2f",$value/$first); - } - if (defined($flags)) - { - $tmp="+".$tmp if ($flags =~ /\+/); - $tmp="?".$tmp if ($flags =~ /\?/); - $tmp="*".$tmp if ($flags =~ /\*/); - } - } - else - { - $tmp=""; - } - $width= ($opt_verbose ? $colwidth - $count_width : $colwidth); - if (!$opt_html) - { - $tmp= " " x ($width-length($tmp)) . $tmp if (length($tmp) < $width); - } - if ($opt_verbose) - { - if ($count) - { - $tmp.= ":" . " " x ($count_width-1-length($count)) . $count; - } - else - { - $tmp.= " " x ($count_width); - } - } - - if (!$opt_html) { - print $tmp . "${bar}"; - } else { - print "<td align=right>$tmp</td>"; - } -} - - -sub print_string -{ - my ($str)=@_; - if (!$opt_html) - { - my ($width); - $width=$namewidth + ($colwidth+1)*$column_count; - $str=substr($str,1,$width) if (length($str) > $width); - print($str," " x ($width - length($str)),"${bar}\n"); - } - else - { - print $str,"\n"; - } -} - - -sub usage -{ - print <<EOF; -$0 Ver 1.2 - -This program parses all RUN files from old 'run-all-tests --log' scripts -and makes a nice comparable table. - -$0 takes currently the following options: - ---help or --Information - Shows this help - ---cmp=server,server,server (Default $opt_cmp) -Compares all runs that are done with the same --cmp options to run-all-tests. -The most normal options are '--cmp=mysql,pg,solid' and '--cmp ""' - ---dir=... (Default $opt_dir) -From which directory one should get the runs. All runs made by -run-all-tests --log is saved in the 'output' directory. -In the 'results' directory you may have some example runs from different -databases. - ---html - Print the table in html format. - ---machine='full-machine-name' (Default $opt_machine) -Use only runs that match this machine. - ---relative -Show all numbers in times of the first server where the time for the -first server is 1.0 - ---same-server -Compare all runs for --server=.... The --machine is not used in this case -This is nice to compare how the same server runs on different machines. - ---server='server name' (Default $opt_server) -Put this server in the first result column. - ---skip-count -Do not write the number of tests after the test-name. - ---verbose -Write the number of tests in each column. This is useful when some column -is marked with '*'. -EOF - - exit(0); -} diff --git a/sql-bench/copy-db.sh b/sql-bench/copy-db.sh deleted file mode 100644 index 3d2f418280cdbacbd900699466b6e87615e4927f..0000000000000000000000000000000000000000 --- a/sql-bench/copy-db.sh +++ /dev/null @@ -1,372 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# start initialition -# - -$VER = "1.0"; - -use Getopt::Long; -use Cwd; -use DBI; - -$max_row_length=500000; # Don't create bigger SQL rows that this -$opt_lock=1; # lock tables - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); - -require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; - -$|=1; - -$opt_from_server= $opt_to_server= "mysql"; -$opt_from_host= $opt_to_host= "localhost"; -$opt_from_db= $opt_to_db= "test"; -$opt_from_user=$opt_from_password=$opt_to_user=$opt_to_password=""; -$opt_help=$opt_verbose=$opt_debug=0; - - -GetOptions("from-server=s","to-server=s","from-host=s","to-host=s","from-db=s", - "to-db=s", "help", "verbose","debug") || usage(); - -usage() if ($opt_help || - ($opt_from_server eq $opt_to_server && - $opt_from_db eq $opt_to_db && - $opt_from_host eq $opt_to_host)); - -#### -#### Usage -#### - - -sub usage -{ - print <<EOF; - -$0 version $VER by Monty - - Copies tables between two database servers. If the destination table doesn\'t - exist it\'s autoamticly created. If the destination table exists, it - should be compatible with the source table. - - Because DBI doesn\'t provide full information about the columns in a table, - some columns may not have optimal types in a create tables. Any created - tables will also not have any keys! - - Usage: $0 [options] tables... - - Options: - --help Show this help and exit - --from-server Source server (Default: $opt_from_server) - --from-host Source hostname (Default: $opt_from_host) - --from-db Source database name (Default: $opt_from_db) - --from-user Source user (Default: $opt_from_password) - --from-password Source password (Default: $opt_from_password) - --to-server Destination server (Default: $opt_to_server) - --to-host Destination hostname (Default: $opt_to_host) - --to-db Destination database name (Default: $opt_to_db) - --to-user Destination user (Default: $opt_to_user) - --to-password Destination password (Default: $opt_to_password) - --verbose Be more verbose - - If you the server names ends with _ODBC, then this program will connect - through ODBC instead of using a native driver. -EOF - exit(0); -} - -#### -#### Connect -#### - -$from_server=get_server($opt_from_server,$opt_from_host,$opt_from_db); -$to_server=get_server($opt_to_server,$opt_to_host,$opt_to_db); - -$opt_user=$opt_from_user; $opt_password=$opt_from_password; -print "- connecting to SQL servers\n" if ($opt_verbose); -$from_dbh=$from_server->connect() || die "Can't connect to source server $opt_from_server on host $opt_from_host using db $opt_from_db"; -$opt_user=$opt_to_user; $opt_password=$opt_to_password; -$to_dbh=$to_server->connect() || die "Can't connect to source server $opt_to_server on host $opt_to_host using db $opt_to_db"; - -#### -#### Copy data -#### - -foreach $table (@ARGV) -{ - - print "- querying $table\n" if ($opt_verbose); - $sth=$from_dbh->prepare("select * from $table") || die "Can't prepare query to get $table; $DBI::errstr"; - $sth->execute || die "Can't execute query to get data from $table; $DBI::errstr"; - - if (!table_exists($to_server,$to_dbh,$table)) - { - print "- creating $table\n" if ($opt_verbose); - $table_def=get_table_definition($from_server,$from_dbh,$sth); - do_many($to_dbh,$to_server->create($table,$table_def,[])); - } - if ($opt_lock && $to_server->{'lock_tables'}) - { - print "- locking $table\n" if ($opt_verbose); - $to_dbh->do("lock tables $table WRITE"); - } - - $columns=$sth->{NUM_OF_FIELDS}; - $columns_to_quote=get_columns_to_quote($sth); - $insert_multi_value=$sth->{'insert_multi_value'}; - $query="insert into $table values"; $result=""; - - print "- copying $table\n" if ($opt_verbose); - while (($row = $sth->fetchrow_arrayref)) - { - $tmp="("; - for ($i=0 ; $i < $columns ; $i++) - { - if ($columns_to_quote->[$i]) - { - $tmp.= $to_dbh->quote($row->[$i]) . ","; - } - else - { - $tmp.= $row->[$i] . ","; - } - } - substr($tmp,-1)=")"; # Remove last ',' - if ($insert_multi_value) - { - $to_dbh->do($query . $tmp) || die "Can't insert row: $DBI::errstr"; - } - elsif (length($result)+length($tmp) >= $max_row_length && $result) - { - $to_dbh->do($query . $result) || die "Can't insert row: $DBI::errstr"; - $result=""; - } - elsif (length($result)) - { - $result.= ",$tmp"; - } - else - { - $result=$tmp; - } - } - if (length($result)) - { - $to_dbh->do($query . $result) || die "Can't insert row: $DBI::errstr"; - } - if ($opt_lock && $to_server->{'lock_tables'}) - { - $to_dbh->do("unlock tables"); - } -} - - -sub get_table_definition -{ - my ($server,$dbh,$sth)=@_; - my ($i,$names,$types,$scale,$precision,$nullable,@res); - - $names=$sth->{NAME}; - $types=$sth->{TYPE}; - $nullable=$sth->{NULLABLE}; - if (0) - { - # The following doesn't yet work - $scale=$sth->{SCALE}; - $precision=$sth->{PRECISION}; - } - else - { - my (@tmp); - @tmp= (undef()) x $sth->{NUM_OF_FIELDS}; - $precision= $scale= \@tmp; - } - for ($i = 0; $i < $sth->{NUM_OF_FIELDS} ; $i++) - { - push(@res,$names->[$i] . " " . - odbc_to_sql($server,$types->[$i],$precision->[$i],$scale->[$i]) . - ($nullable->[$i] ? "" : " NOT NULL")); - } - return \@res; -} - - -sub odbc_to_sql -{ - my ($server,$type,$precision,$scale)=@_; - - if ($type == DBI::SQL_CHAR()) - { - return defined($precision) ? "char($precision)" : "varchar(255)"; - } - - if ($type == DBI::SQL_NUMERIC()) - { - $precision=15 if (!defined($precision)); - $scale=6 if (!defined($scale)); - return "numeric($precision,$scale)"; - } - if ($type == DBI::SQL_DECIMAL()) - { - $precision=15 if (!defined($precision)); - $scale=6 if (!defined($scale)); - return "decimal($precision,$scale)"; - } - if ($type == DBI::SQL_INTEGER()) - { - return "integer" if (!defined($precision)); - return "integer($precision)"; - } - if ($type == DBI::SQL_SMALLINT()) - { - return "smallint" if (!defined($precision)); - return "smallint($precision)"; - } - if ($type == DBI::SQL_FLOAT()) - { - $precision=12 if (!defined($precision)); - $scale=2 if (!defined($scale)); - return "float($precision,$scale)"; - } - if ($type == DBI::SQL_REAL()) - { - $precision=12 if (!defined($precision)); - $scale=2 if (!defined($scale)); - return "float($precision,$scale)"; - } - if ($type == DBI::SQL_DOUBLE()) - { - $precision=22 if (!defined($precision)); - $scale=2 if (!defined($scale)); - return "double($precision,$scale)"; - } - if ($type == DBI::SQL_VARCHAR()) - { - $precision=255 if (!defined($precision)); - return "varchar($precision)"; - } - return "date" if ($type == DBI::SQL_DATE()); - return "time" if ($type == DBI::SQL_TIME()); - return "timestamp" if ($type == DBI::SQL_TIMESTAMP()); - return $server->{'text'} if ($type == DBI::SQL_LONGVARCHAR()); - return $server->{'blob'} if ($type == DBI::SQL_LONGVARBINARY()); - if ($type == DBI::SQL_BIGINT()) - { - return "bigint" if (!defined($precision)); - return "bigint($precision)"; - } - if ($type == DBI::SQL_TINYINT()) - { - return "tinyint" if (!defined($precision)); - return "tinyint($precision)"; - } - die "Can't covert type '$type' to a ODBC type\n"; -} - -# -# return an array with 1 for all coumns that we have to quote -# - -sub get_columns_to_quote($sth) -{ - my ($sth)=@_; - my ($i,@res,$type,$tmp); - - @res=(); - for ($i = 0; $i < $sth->{NUM_OF_FIELDS} ; $i++) - { - $type=$sth->{TYPE}->[$i]; - $tmp=1; # String by default - if ($type == DBI::SQL_NUMERIC() || $type == DBI::SQL_DECIMAL() || - $type == DBI::SQL_INTEGER() || $type == DBI::SQL_SMALLINT() || - $type == DBI::SQL_SMALLINT() || $type == DBI::SQL_FLOAT() || - $type == DBI::SQL_REAL() || $type == DBI::SQL_DOUBLE() || - $type == DBI::SQL_BIGINT() || $type == DBI::SQL_TINYINT()) - { - $tmp=0; - } - push (@res,$tmp); - } - return \@res; -} - -# -# Check if table exists; Return 1 if table exists -# - -sub table_exists -{ - my ($server,$dbh,$table)=@_; - if ($server->{'limits'}->{'group_functions'}) - { - return !safe_query($dbh,"select count(*) from $table"); - } - if ($server->{'limits'}->{'limit'}) - { - return !safe_query($dbh,"select * from $table limit 1"); - } - die "Don't know how to check if table '$table' exists in destination server\n"; -} - - -# -# execute query; return 0 if query is ok -# - -sub safe_query -{ - my ($dbh,$query)=@_; - my ($sth); - - print "query: $query\n" if ($opt_debug); - if (!($sth= $dbh->prepare($query))) - { - print "error: $DBI::errstr\n" if ($opt_debug); - return 1; - } - if (!$sth->execute) - { - print "error: $DBI::errstr\n" if ($opt_debug); - return 1 - } - while ($sth->fetchrow_arrayref) - { - } - $sth->finish; - undef($sth); - return 0; -} - -# -# execute an array of queries -# - -sub do_many -{ - my ($dbh,@statements)=@_; - my ($statement,$sth); - - foreach $statement (@statements) - { - print "query: $statement\n" if ($opt_debug); - if (!($sth=$dbh->do($statement))) - { - die "Can't execute command '$statement'\nError: $DBI::errstr\n"; - } - } -} diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh deleted file mode 100644 index a40ef8fbc7d7e68dc2d8096b85035062cd215098..0000000000000000000000000000000000000000 --- a/sql-bench/crash-me.sh +++ /dev/null @@ -1,5024 +0,0 @@ -#!@PERL@ -# -*- perl -*- -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA - -# Written by Monty for the TCX/Monty Program/Detron benchmark suite. -# Empress and PostgreSQL patches by Luuk de Boer -# Extensions for ANSI SQL and Mimer by Bengt Gunne -# Some additions and corrections by Matthias Urlich -# -# This programs tries to find all limits for a sql server -# It gets the name from what it does to most servers :) -# -# Be sure to use --help before running this! -# -# If you want to add support for another server, add a new package for the -# server in server-cfg. You only have to support the 'new' and 'version' -# functions. new doesn't need to have any limits if one doesn't want to -# use the benchmarks. -# - -# TODO: -# CMT includes types and functions which are synonyms for other types -# and functions, including those in SQL9x. It should label those synonyms -# as such, and clarify ones such as "mediumint" with comments such as -# "3-byte int" or "same as xxx". - -$version="1.61"; - -use Cwd; -use DBI; -use Getopt::Long; -use POSIX; -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; - -$opt_server="mysql"; $opt_host="localhost"; $opt_database="test"; -$opt_dir="limits"; -$opt_user=$opt_password="";$opt_verbose=1; -$opt_debug=$opt_help=$opt_Information=$opt_restart=$opt_force=$opt_quick=0; -$opt_log_all_queries=$opt_fix_limit_file=$opt_batch_mode=$opt_version=0; -$opt_db_start_cmd=""; # the db server start command -$opt_check_server=0; # Check if server is alive before each query -$opt_sleep=10; # time to sleep while starting the db server -$limit_changed=0; # For configure file -$reconnect_count=0; -$opt_suffix=""; -$opt_comment=$opt_config_file=$opt_log_queries_to_file=""; -$limits{'crash_me_safe'}='yes'; -$prompts{'crash_me_safe'}='crash me safe'; -$limits{'operating_system'}= machine(); -$prompts{'operating_system'}='crash-me tested on'; -$retry_limit=3; - -GetOptions("Information","help","server=s","debug","user=s","password=s", -"database=s","restart","force","quick","log-all-queries","comment=s", -"host=s","fix-limit-file","dir=s","db-start-cmd=s","sleep=s","suffix=s", -"batch-mode","config-file=s","log-queries-to-file=s","check-server", -"version", -"verbose!" => \$opt_verbose) || usage(); -usage() if ($opt_help || $opt_Information); -version() && exit(0) if ($opt_version); - -$opt_suffix = '-'.$opt_suffix if (length($opt_suffix) != 0); -$opt_config_file = "$pwd/$opt_dir/$opt_server$opt_suffix.cfg" - if (length($opt_config_file) == 0); -$log_prefix=' ###'; # prefix for log lines in result file -$safe_query_log=''; -$safe_query_result_log=''; -$log{"crash-me"}=""; - -#!!! - -if ($opt_fix_limit_file) -{ - print "Fixing limit file for $opt_server\n"; - read_config_data(); - $limit_changed=1; - save_all_config_data(); - exit 0; -} - -$server=get_server($opt_server,$opt_host,$opt_database); -$opt_server=$server->{'cmp_name'}; - -$|=1; # For debugging - -print "Running $0 $version on '",($server_version=$server->version()),"'\n\n"; -print "I hope you didn't have anything important running on this server....\n"; -read_config_data(); -if ($limit_changed) # Must have been restarted -{ - save_config_data('crash_me_safe','no',"crash me safe"); -} - -if (!$opt_force && !$opt_batch_mode) -{ - server_info(); -} -else -{ - print "Using --force. I assume you know what you are doing...\n"; -} -print "\n"; - -save_config_data('crash_me_version',$version,"crash me version"); -if ($server_version) -{ - save_config_data('server_version',$server_version,"server version"); -} -if (length($opt_comment)) -{ - save_config_data('user_comment',$opt_comment,"comment"); -} - -$opt_log=0; -if (length($opt_log_queries_to_file)) -{ - open(LOG,">$opt_log_queries_to_file") || - die "Can't open file $opt_log_queries_to_file\n"; - $opt_log=1; -} - -# -# Set up some limits that's regared as unlimited -# We don't want to take up all resources from the server... -# - -$max_connections="+1000"; # Number of simultaneous connections -$max_buffer_size="+16000000"; # size of communication buffer. -$max_string_size="+8000000"; # Enough for this test -$max_name_length="+512"; # Actually 256, but ... -$max_keys="+64"; # Probably too big. -$max_join_tables="+64"; # Probably too big. -$max_columns="+8192"; # Probably too big. -$max_row_length=$max_string_size; -$max_key_length="+8192"; # Big enough -$max_order_by="+64"; # Big enough -$max_expressions="+10000"; -$max_big_expressions="+100"; -$max_stacked_expressions="+2000"; -$query_size=$max_buffer_size; -$longreadlen=16000000; # For retrieval buffer - - -# -# First do some checks that needed for the rest of the benchmark -# -use sigtrap; # Must be removed with perl5.005_2 on Win98 -$SIG{PIPE} = 'IGNORE'; -$problem_counter=0; -$SIG{SEGV} = sub { - $problem_counter +=1; - if ($problem_counter >= 100) { - die("Too many problems, try to restart"); - } else { - warn('SEGFAULT'); - }; -}; -$dbh=safe_connect(); - -# -# Test if the database require RESTRICT/CASCADE after DROP TABLE -# - -# Really remove the crash_me table -$prompt="drop table require cascade/restrict"; -$drop_attr=""; -$dbh->do("drop table crash_me"); -$dbh->do("drop table crash_me cascade"); -if (!safe_query_l('drop_requires_cascade', - ["create table crash_me (a integer not null)", - "drop table crash_me"])) -{ - $dbh->do("drop table crash_me cascade"); - if (safe_query_l('drop_requires_cascade', - ["create table crash_me (a integer not null)", - "drop table crash_me cascade"])) - { - save_config_data('drop_requires_cascade',"yes","$prompt"); - $drop_attr="cascade"; - } - else - { - die "Can't create and drop table 'crash_me'\n"; - } -} -else -{ - save_config_data('drop_requires_cascade',"no","$prompt"); - $drop_attr=""; -} - -# Remove tables from old runs -$dbh->do("drop table crash_me $drop_attr"); -$dbh->do("drop table crash_me2 $drop_attr"); -$dbh->do("drop table crash_me3 $drop_attr"); -$dbh->do("drop table crash_q $drop_attr"); -$dbh->do("drop table crash_q1 $drop_attr"); - -$prompt="Tables without primary key"; -if (!safe_query_l('no_primary_key', - ["create table crash_me (a integer not null,b char(10) not null)", - "insert into crash_me (a,b) values (1,'a')"])) -{ - if (!safe_query_l('no_primary_key', - ["create table crash_me (a integer not null,b char(10) not null". - ", primary key (a))", - "insert into crash_me (a,b) values (1,'a')"])) - { - die "Can't create table 'crash_me' with one record: $DBI::errstr\n"; - } - save_config_data('no_primary_key',"no",$prompt); -} -else -{ - save_config_data('no_primary_key',"yes",$prompt); -} - -# -# Define strings for character NULL and numeric NULL used in expressions -# -$char_null=$server->{'char_null'}; -$numeric_null=$server->{'numeric_null'}; -if ($char_null eq '') -{ - $char_null="NULL"; -} -if ($numeric_null eq '') -{ - $numeric_null="NULL"; -} - -print "$prompt: $limits{'no_primary_key'}\n"; - -report("SELECT without FROM",'select_without_from',"select 1"); -if ($limits{'select_without_from'} ne "yes") -{ - $end_query=" from crash_me"; - $check_connect="select a from crash_me"; -} -else -{ - $end_query=""; - $check_connect="select 1"; -} - -assert($check_connect); -assert("select a from crash_me where b<'b'"); - -report("Select constants",'select_constants',"select 1 $end_query"); -report("Select table_name.*",'table_wildcard', - "select crash_me.* from crash_me"); -report("Allows \' and \" as string markers",'quote_with_"', - 'select a from crash_me where b<"c"'); -check_and_report("Double '' as ' in strings",'double_quotes',[], - "select 'Walker''s' $end_query",[],"Walker's",1); -check_and_report("Multiple line strings","multi_strings",[], - "select a from crash_me where b < 'a'\n'b'",[],"1",0); -check_and_report("\" as identifier quote (ANSI SQL)",'quote_ident_with_"',[], - 'select "A" from crash_me',[],"1",0); -check_and_report("\` as identifier quote",'quote_ident_with_`',[], - 'select `A` from crash_me',[],"1",0); -check_and_report("[] as identifier quote",'quote_ident_with_[',[], - 'select [A] from crash_me',[],"1",0); -report('Double "" in identifiers as "','quote_ident_with_dbl_"', - 'create table crash_me1 ("abc""d" integer)', - 'drop table crash_me1'); - -report("Column alias","column_alias","select a as ab from crash_me"); -report("Table alias","table_alias","select b.a from crash_me as b"); -report("Functions",'functions',"select 1+1 $end_query"); -report("Group functions",'group_functions',"select count(*) from crash_me"); -report("Group functions with distinct",'group_distinct_functions', - "select count(distinct a) from crash_me"); -report("Group functions with several distinct",'group_many_distinct_functions', - "select count(distinct a), count(distinct b) from crash_me"); -report("Group by",'group_by',"select a from crash_me group by a"); -report("Group by position",'group_by_position', - "select a from crash_me group by 1"); -report("Group by alias",'group_by_alias', - "select a as ab from crash_me group by ab"); -report("Group on unused column",'group_on_unused', - "select count(*) from crash_me group by a"); - -report("Order by",'order_by',"select a from crash_me order by a"); -report("Order by position",'order_by_position', - "select a from crash_me order by 1"); -report("Order by function","order_by_function", - "select a from crash_me order by a+1"); -report("Order by on unused column",'order_on_unused', - "select b from crash_me order by a"); -# little bit deprecated -#check_and_report("Order by DESC is remembered",'order_by_remember_desc', -# ["create table crash_q (s int,s1 int)", -# "insert into crash_q values(1,1)", -# "insert into crash_q values(3,1)", -# "insert into crash_q values(2,1)"], -# "select s,s1 from crash_q order by s1 DESC,s", -# ["drop table crash_q $drop_attr"],[3,2,1],7,undef(),3); -report("Compute",'compute', - "select a from crash_me order by a compute sum(a) by a"); -report("INSERT with Value lists",'insert_multi_value', - "create table crash_q (s char(10))", - "insert into crash_q values ('a'),('b')", - "drop table crash_q $drop_attr"); -report("INSERT with set syntax",'insert_with_set', - "create table crash_q (a integer)", - "insert into crash_q SET a=1", - "drop table crash_q $drop_attr"); -report("INSERT with DEFAULT","insert_with_default", - "create table crash_me_q (a int)", - "insert into crash_me_q (a) values (DEFAULT)", - "drop table crash_me_q $drop_attr"); - -report("INSERT with empty value list","insert_with_empty_value_list", - "create table crash_me_q (a int)", - "insert into crash_me_q (a) values ()", - "drop table crash_me_q $drop_attr"); - -report("INSERT DEFAULT VALUES","insert_default_values", - "create table crash_me_q (a int)", - "insert into crash_me_q DEFAULT VALUES", - "drop table crash_me_q $drop_attr"); - -report("allows end ';'","end_colon", "select * from crash_me;"); -try_and_report("LIMIT number of rows","select_limit", - ["with LIMIT", - "select * from crash_me limit 1"], - ["with TOP", - "select TOP 1 * from crash_me"]); -report("SELECT with LIMIT #,#","select_limit2", - "select * from crash_me limit 1,1"); -report("SELECT with LIMIT # OFFSET #", - "select_limit3", "select * from crash_me limit 1 offset 1"); - -# The following alter table commands MUST be kept together! -if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))")) -{ - report("Alter table add column",'alter_add_col', - "alter table crash_q add d integer"); - report_one("Alter table add many columns",'alter_add_multi_col', - [["alter table crash_q add (f integer,g integer)","yes"], - ["alter table crash_q add f integer, add g integer","with add"], - ["alter table crash_q add f integer,g integer","without add"]] ); - report("Alter table change column",'alter_change_col', - "alter table crash_q change a e char(50)"); - - # informix can only change data type with modify - report_one("Alter table modify column",'alter_modify_col', - [["alter table crash_q modify c1 CHAR(20)","yes"], - ["alter table crash_q alter c1 CHAR(20)","with alter"]]); - report("Alter table alter column default",'alter_alter_col', - "alter table crash_q alter b set default 10"); - report_one("Alter table drop column",'alter_drop_col', - [["alter table crash_q drop column b","yes"], - ["alter table crash_q drop column b restrict", - "with restrict/cascade"]]); - report("Alter table rename table",'alter_rename_table', - "alter table crash_q rename to crash_q1"); -} -# Make sure both tables will be dropped, even if rename fails. -$dbh->do("drop table crash_q1 $drop_attr"); -$dbh->do("drop table crash_q $drop_attr"); - -report("rename table","rename_table", - "create table crash_q (a integer, b integer,c1 CHAR(10))", - "rename table crash_q to crash_q1", - "drop table crash_q1 $drop_attr"); -# Make sure both tables will be dropped, even if rename fails. -$dbh->do("drop table crash_q1 $drop_attr"); -$dbh->do("drop table crash_q $drop_attr"); - -report("truncate","truncate_table", - "create table crash_q (a integer, b integer,c1 CHAR(10))", - "truncate table crash_q", - "drop table crash_q $drop_attr"); - -if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))") && - $dbh->do("create table crash_q1 (a integer, b integer,c1 CHAR(10) not null)")) -{ - report("Alter table add constraint",'alter_add_constraint', - "alter table crash_q add constraint c2 check(a > b)"); - report_one("Alter table drop constraint",'alter_drop_constraint', - [["alter table crash_q drop constraint c2","yes"], - ["alter table crash_q drop constraint c2 restrict", - "with restrict/cascade"]]); - report("Alter table add unique",'alter_add_unique', - "alter table crash_q add constraint u1 unique(c1)"); - try_and_report("Alter table drop unique",'alter_drop_unique', - ["with constraint", - "alter table crash_q drop constraint u1"], - ["with constraint and restrict/cascade", - "alter table crash_q drop constraint u1 restrict"], - ["with drop key", - "alter table crash_q drop key u1"]); - try_and_report("Alter table add primary key",'alter_add_primary_key', - ["with constraint", - "alter table crash_q1 add constraint p1 primary key(c1)"], - ["with add primary key", - "alter table crash_q1 add primary key(c1)"]); - report("Alter table add foreign key",'alter_add_foreign_key', - "alter table crash_q add constraint f1 foreign key(c1) references crash_q1(c1)"); - try_and_report("Alter table drop foreign key",'alter_drop_foreign_key', - ["with drop constraint", - "alter table crash_q drop constraint f1"], - ["with drop constraint and restrict/cascade", - "alter table crash_q drop constraint f1 restrict"], - ["with drop foreign key", - "alter table crash_q drop foreign key f1"]); - try_and_report("Alter table drop primary key",'alter_drop_primary_key', - ["drop constraint", - "alter table crash_q1 drop constraint p1 restrict"], - ["drop primary key", - "alter table crash_q1 drop primary key"]); -} -$dbh->do("drop table crash_q $drop_attr"); -$dbh->do("drop table crash_q1 $drop_attr"); - -check_and_report("Case insensitive compare","case_insensitive_strings", - [],"select b from crash_me where b = 'A'",[],'a',1); -check_and_report("Ignore end space in compare","ignore_end_space", - [],"select b from crash_me where b = 'a '",[],'a',1); -check_and_report("Group on column with null values",'group_by_null', - ["create table crash_q (s char(10))", - "insert into crash_q values(null)", - "insert into crash_q values(null)"], - "select count(*),s from crash_q group by s", - ["drop table crash_q $drop_attr"],2,0); - -$prompt="Having"; -if (!defined($limits{'having'})) -{ # Complicated because of postgreSQL - if (!safe_query_result_l("having", - "select a from crash_me group by a having a > 0",1,0)) - { - if (!safe_query_result_l("having", - "select a from crash_me group by a having a < 0", - 1,0)) - { save_config_data("having","error",$prompt); } - else - { save_config_data("having","yes",$prompt); } - } - else - { save_config_data("having","no",$prompt); } -} -print "$prompt: $limits{'having'}\n"; - -if ($limits{'having'} eq 'yes') -{ - report("Having with group function","having_with_group", - "select a from crash_me group by a having count(*) = 1"); -} - -if ($limits{'column_alias'} eq 'yes') -{ - report("Order by alias",'order_by_alias', - "select a as ab from crash_me order by ab"); - if ($limits{'having'} eq 'yes') - { - report("Having on alias","having_with_alias", - "select a as ab from crash_me group by a having ab > 0"); - } -} -report("binary numbers (0b1001)","binary_numbers","select 0b1001 $end_query"); -report("hex numbers (0x41)","hex_numbers","select 0x41 $end_query"); -report("binary strings (b'0110')","binary_strings","select b'0110' $end_query"); -report("hex strings (x'1ace')","hex_strings","select x'1ace' $end_query"); - -report_result("Value of logical operation (1=1)","logical_value", - "select (1=1) $end_query"); - -report_result("Value of TRUE","value_of_true","select TRUE $end_query"); -report_result("Value of FALSE","value_of_false","select FALSE $end_query"); - -$logical_value= $limits{'logical_value'}; - -$false=0; -$result="no"; -if ($res=safe_query_l('has_true_false',"select (1=1)=true $end_query")) { - $false="false"; - $result="yes"; -} -save_config_data('has_true_false',$result,"TRUE and FALSE"); - -# -# Check how many connections the server can handle: -# We can't test unlimited connections, because this may take down the -# server... -# - -$prompt="Simultaneous connections (installation default)"; -print "$prompt: "; -if (defined($limits{'connections'})) -{ - print "$limits{'connections'}\n"; -} -else -{ - @connect=($dbh); - - for ($i=1; $i < $max_connections ; $i++) - { - if (!($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password, - { PrintError => 0}))) - { - print "Last connect error: $DBI::errstr\n" if ($opt_debug); - last; - } - $dbh->{LongReadLen}= $longreadlen; # Set retrieval buffer - print "." if ($opt_debug); - push(@connect,$dbh); - } - print "$i\n"; - save_config_data('connections',$i,$prompt); - foreach $dbh (@connect) - { - print "#" if ($opt_debug); - $dbh->disconnect || warn $dbh->errstr; # close connection - } - - $#connect=-1; # Free connections - - if ($i == 0) - { - print "Can't connect to server: $DBI::errstr.". - " Please start it and try again\n"; - exit 1; - } - $dbh=retry_connect(); -} - - -# -# Check size of communication buffer, strings... -# - -$prompt="query size"; -print "$prompt: "; -if (!defined($limits{'query_size'})) -{ - $query="select "; - $first=64; - $end=$max_buffer_size; - $select= $limits{'select_without_from'} eq 'yes' ? 1 : 'a'; - - assert($query . "$select$end_query"); - - $first=$limits{'restart'}{'low'} if ($limits{'restart'}{'low'}); - - if ($limits{'restart'}{'tohigh'}) - { - $end = $limits{'restart'}{'tohigh'} - 1; - print "\nRestarting this with low limit: $first and high limit: $end\n"; - delete $limits{'restart'}; - $first=$first+int(($end-$first+4)/5); # Prefere lower on errors - } - for ($i=$first ; $i < $end ; $i*=2) - { - last if (!safe_query($query . - (" " x ($i - length($query)-length($end_query) -1)) - . "$select$end_query")); - $first=$i; - save_config_data("restart",$i,"") if ($opt_restart); - } - $end=$i; - - if ($i < $max_buffer_size) - { - while ($first != $end) - { - $i=int(($first+$end+1)/2); - if (safe_query($query . - (" " x ($i - length($query)-length($end_query) -1)) . - "$select$end_query")) - { - $first=$i; - } - else - { - $end=$i-1; - } - } - } - save_config_data('query_size',$end,$prompt); -} -$query_size=$limits{'query_size'}; - -print "$limits{'query_size'}\n"; - -# -# Check for reserved words -# - -check_reserved_words($dbh); - -# -# Test database types -# - -@sql_types=("character(1)","char(1)","char varying(1)", "character varying(1)", - "boolean", - "varchar(1)", - "integer","int","smallint", - "numeric(9,2)","decimal(6,2)","dec(6,2)", - "bit", "bit(2)","bit varying(2)","float","float(8)","real", - "double precision", "date","time","timestamp", - "interval year", "interval year to month", - "interval month", - "interval day", "interval day to hour", "interval day to minute", - "interval day to second", - "interval hour", "interval hour to minute", - "interval hour to second", - "interval minute", "interval minute to second", - "interval second", - "national character varying(20)", - "national character(20)","nchar(1)", - "national char varying(20)","nchar varying(20)", - "national character varying(20)", - "timestamp with time zone"); -@odbc_types=("binary(1)","varbinary(1)","tinyint","bigint", - "datetime"); -@extra_types=("blob","byte","long varbinary","image","text","text(10)", - "mediumtext", - "long varchar(1)", "varchar2(257)", - "mediumint","middleint","int unsigned", - "int1","int2","int3","int4","int8","uint", - "money","smallmoney","float4","float8","smallfloat", - "float(6,2)","double", - "enum('red')","set('red')", "int(5) zerofill", "serial", - "char(10) binary","int not null auto_increment,unique(q)", - "abstime","year","datetime","smalldatetime","timespan","reltime", - # Sybase types - "int not null identity,unique(q)", - # postgres types - "box","bool","circle","polygon","point","line","lseg","path", - "interval", "inet", "cidr", "macaddr", - - # oracle types - "varchar2(16)","nvarchar2(16)","number(9,2)","number(9)", - "number", "long","raw(16)","long raw","rowid","mlslabel","clob", - "nclob","bfile" - ); - -@types=(["sql",\@sql_types], - ["odbc",\@odbc_types], - ["extra",\@extra_types]); - -foreach $types (@types) -{ - print "\nSupported $types->[0] types\n"; - $tmp=@$types->[1]; - foreach $use_type (@$tmp) - { - $type=$use_type; - $type =~ s/\(.*\)/(1 arg)/; - if (index($use_type,",")>= 0) - { - $type =~ s/\(1 arg\)/(2 arg)/; - } - if (($tmp2=index($type,",unique")) >= 0) - { - $type=substr($type,0,$tmp2); - } - $tmp2=$type; - $tmp2 =~ s/ /_/g; - $tmp2 =~ s/_not_null//g; - report("Type $type","type_$types->[0]_$tmp2", - "create table crash_q (q $use_type)", - "drop table crash_q $drop_attr"); - } -} - -# -# Test some type limits -# - - -check_and_report("Remembers end space in char()","remember_end_space", - ["create table crash_q (a char(10))", - "insert into crash_q values('hello ')"], - "select a from crash_q where a = 'hello '", - ["drop table crash_q $drop_attr"], - 'hello ',6); - -check_and_report("Remembers end space in varchar()", - "remember_end_space_varchar", - ["create table crash_q (a varchar(10))", - "insert into crash_q values('hello ')"], - "select a from crash_q where a = 'hello '", - ["drop table crash_q $drop_attr"], - 'hello ',6); - -if (($limits{'type_extra_float(2_arg)'} eq "yes" || - $limits{'type_sql_decimal(2_arg)'} eq "yes") && - (!defined($limits{'storage_of_float'}))) -{ - my $type=$limits{'type_extra_float(2_arg)'} eq "yes" ? "float(4,1)" : - "decimal(4,1)"; - my $result="undefined"; - if (execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.14)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.1,0) && - execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.16)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.1,0)) - { - $result="truncate"; - } - elsif (execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.14)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.1,0) && - execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.16)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.2,0)) - { - $result="round"; - } - elsif (execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.14)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.14,0) && - execute_and_check("storage_of_float",["create table crash_q (q1 $type)", - "insert into crash_q values(1.16)"], - "select q1 from crash_q", - ["drop table crash_q $drop_attr"],1.16,0)) - { - $result="exact"; - } - $prompt="Storage of float values"; - print "$prompt: $result\n"; - save_config_data("storage_of_float", $result, $prompt); -} - -try_and_report("Type for row id", "rowid", - ["rowid", - "create table crash_q (a rowid)", - "drop table crash_q $drop_attr"], - ["auto_increment", - "create table crash_q (a int not null auto_increment". - ", primary key(a))","drop table crash_q $drop_attr"], - ["oid", - "create table crash_q (a oid, primary key(a))", - "drop table crash_q $drop_attr"], - ["serial", - "create table crash_q (a serial, primary key(a))", - "drop table crash_q $drop_attr"]); - -try_and_report("Automatic row id", "automatic_rowid", - ["_rowid", - "create table crash_q (a int not null, primary key(a))", - "insert into crash_q values (1)", - "select _rowid from crash_q", - "drop table crash_q $drop_attr"]); - -# -# Test functions -# - -@sql_functions= - (["+, -, * and /","+","5*3-4/2+1",14,0], - ["ANSI SQL SUBSTRING","substring","substring('abcd' from 2 for 2)","bc",1], - ["BIT_LENGTH","bit_length","bit_length('abc')",24,0], - ["searched CASE","searched_case", - "case when 1 > 2 then 'false' when 2 > 1 then 'true' end", "true",1], - ["simple CASE","simple_case", - "case 2 when 1 then 'false' when 2 then 'true' end", "true",1], - ["CAST","cast","CAST(1 as CHAR)","1",1], - ["CHARACTER_LENGTH","character_length","character_length('abcd')","4",0], - ["CHAR_LENGTH","char_length","char_length(b)","10",0], - ["CHAR_LENGTH(constant)","char_length(constant)", - "char_length('abcd')","4",0], - ["COALESCE","coalesce","coalesce($char_null,'bcd','qwe')","bcd",1], - ["CURRENT_DATE","current_date","current_date",0,2], - ["CURRENT_TIME","current_time","current_time",0,2], - ["CURRENT_TIMESTAMP","current_timestamp","current_timestamp",0,2], - ["EXTRACT","extract_sql", - "extract(minute from timestamp '2000-02-23 18:43:12.987')",43,0], - ["LOCALTIME","localtime","localtime",0,2], - ["LOCALTIMESTAMP","localtimestamp","localtimestamp",0,2], - ["LOWER","lower","LOWER('ABC')","abc",1], - ["NULLIF with strings","nullif_string", - "NULLIF(NULLIF('first','second'),'first')",undef(),4], - ["NULLIF with numbers","nullif_num","NULLIF(NULLIF(1,2),1)",undef(),4], - ["OCTET_LENGTH","octet_length","octet_length('abc')",3,0], - ["POSITION","position","position('ll' in 'hello')",3,0], - ["TRIM","trim","trim(trailing from trim(LEADING FROM ' abc '))","abc",3], - ["UPPER","upper","UPPER('abc')","ABC",1], - ["concatenation with ||","concat_as_||","'abc' || 'def'","abcdef",1], - ); - -@odbc_functions= - (["ASCII", "ascii", "ASCII('A')","65",0], - ["CHAR", "char", "CHAR(65)" ,"A",1], - ["CONCAT(2 arg)","concat", "concat('a','b')","ab",1], - ["DIFFERENCE()","difference","difference('abc','abe')",3,0], - ["INSERT","insert","insert('abcd',2,2,'ef')","aefd",1], - ["LEFT","left","left('abcd',2)","ab",1], - ["LTRIM","ltrim","ltrim(' abcd')","abcd",1], - ["REAL LENGTH","length","length('abcd ')","5",0], - ["ODBC LENGTH","length_without_space","length('abcd ')","4",0], - ["LOCATE(2 arg)","locate_2","locate('bcd','abcd')","2",0], - ["LOCATE(3 arg)","locate_3","locate('bcd','abcd',3)","0",0], - ["LCASE","lcase","lcase('ABC')","abc",1], - ["REPEAT","repeat","repeat('ab',3)","ababab",1], - ["REPLACE","replace","replace('abbaab','ab','ba')","bababa",1], - ["RIGHT","right","right('abcd',2)","cd",1], - ["RTRIM","rtrim","rtrim(' abcd ')"," abcd",1], - ["SPACE","space","space(5)"," ",3], - ["SOUNDEX","soundex","soundex('hello')",0,2], - ["ODBC SUBSTRING","substring","substring('abcd',3,2)","cd",1], - ["UCASE","ucase","ucase('abc')","ABC",1], - - ["ABS","abs","abs(-5)",5,0], - ["ACOS","acos","acos(0)","1.570796",0], - ["ASIN","asin","asin(1)","1.570796",0], - ["ATAN","atan","atan(1)","0.785398",0], - ["ATAN2","atan2","atan2(1,0)","1.570796",0], - ["CEILING","ceiling","ceiling(-4.5)",-4,0], - ["COS","cos","cos(0)","1.00000",0], - ["COT","cot","cot(1)","0.64209262",0], - ["DEGREES","degrees","degrees(6.283185)","360",0], - ["EXP","exp","exp(1.0)","2.718282",0], - ["FLOOR","floor","floor(2.5)","2",0], - ["LOG","log","log(2)","0.693147",0], - ["LOG10","log10","log10(10)","1",0], - ["MOD","mod","mod(11,7)","4",0], - ["PI","pi","pi()","3.141593",0], - ["POWER","power","power(2,4)","16",0], - ["RAND","rand","rand(1)",0,2], # Any value is acceptable - ["RADIANS","radians","radians(360)","6.283185",0], - ["ROUND(2 arg)","round","round(5.63,2)","5.6",0], - ["SIGN","sign","sign(-5)",-1,0], - ["SIN","sin","sin(1)","0.841471",0], - ["SQRT","sqrt","sqrt(4)",2,0], - ["TAN","tan","tan(1)","1.557408",0], - ["TRUNCATE","truncate","truncate(18.18,-1)",10,0], - ["NOW","now","now()",0,2], # Any value is acceptable - ["CURDATE","curdate","curdate()",0,2], - ["CURTIME","curtime","curtime()",0,2], - ["TIMESTAMPADD","timestampadd", - "timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')", - "1997-01-01 00:00:01",1], - ["TIMESTAMPDIFF","timestampdiff", - "timestampdiff(SQL_TSI_SECOND,'1997-01-01 00:00:02',". - " '1997-01-01 00:00:01')","1",0], - ["USER()","user()","user()",0,2], - ["DATABASE","database","database()",0,2], - ["IFNULL","ifnull","ifnull(2,3)",2,0], - ["ODBC syntax LEFT & RIGHT", "fn_left", - "{ fn LEFT( { fn RIGHT('abcd',2) },1) }","c",1], - ); - -@extra_functions= - ( - ["& (bitwise and)",'&',"5 & 3",1,0], - ["| (bitwise or)",'|',"1 | 2",3,0], - ["<< and >> (bitwise shifts)",'binary_shifts',"(1 << 4) >> 2",4,0], - ["<> in SELECT","<>","1<>1","0",0], - ["=","=","(1=1)",1,$logical_value], - ["~* (case insensitive compare)","~*","'hi' ~* 'HI'",1,$logical_value], - ["AND and OR in SELECT","and_or","1=1 AND 2=2",$logical_value,0], - ["AND as '&&'",'&&',"1=1 && 2=2",$logical_value,0], - ["ASCII_CHAR", "ascii_char", "ASCII_CHAR(65)","A",1], - ["ASCII_CODE", "ascii_code", "ASCII_CODE('A')","65",0], - ["ATN2","atn2","atn2(1,0)","1.570796",0], - ["BETWEEN in SELECT","between","5 between 4 and 6",$logical_value,0], - ["BIT_COUNT","bit_count","bit_count(5)",2,0], - ["CEIL","ceil","ceil(-4.5)",-4,0], # oracle - ["CHARINDEX","charindex","charindex('a','crash')",3,0], - ["CHR", "chr", "CHR(65)" ,"A",1], # oracle - ["CONCAT(list)","concat_list", "concat('a','b','c','d')","abcd",1], - ["CONVERT","convert","convert(CHAR,5)","5",1], - ["COSH","cosh","cosh(0)","1",0], # oracle hyperbolic cosine of n. - ["ELT","elt","elt(2,'ONE','TWO','THREE')","TWO",1], - ["ENCRYPT","encrypt","encrypt('hello')",0,2], - ["FIELD","field","field('IBM','NCA','ICL','SUN','IBM','DIGITAL')",4,0], - ["FORMAT","format","format(1234.5555,2)","1,234.56",1], - ["GETDATE","getdate","getdate()",0,2], - ["GREATEST","greatest","greatest('HARRY','HARRIOT','HAROLD')","HARRY",1], - ["IF","if", "if(5,6,7)",6,0], - ["IN on numbers in SELECT","in_num","2 in (3,2,5,9,5,1)",$logical_value,0], - ["IN on strings in SELECT","in_str","'monty' in ('david','monty','allan')", $logical_value,0], - ["INITCAP","initcap","initcap('the soap')","The Soap",1], - # oracle Returns char, with the first letter of each word in uppercase - ["INSTR (Oracle syntax)", "instr_oracle", "INSTR('CORPORATE FLOOR','OR',3,2)" ,"14",0], # oracle instring - ["INSTRB", "instrb", "INSTRB('CORPORATE FLOOR','OR',5,2)" ,"27",0], - # oracle instring in bytes - ["INTERVAL","interval","interval(55,10,20,30,40,50,60,70,80,90,100)",5,0], - ["LAST_INSERT_ID","last_insert_id","last_insert_id()",0,2], - ["LEAST","least","least('HARRY','HARRIOT','HAROLD')","HAROLD",1], - # oracle - ["LENGTHB","lengthb","lengthb('CANDIDE')","14",0], - # oracle length in bytes - ["LIKE ESCAPE in SELECT","like_escape", - "'%' like 'a%' escape 'a'",$logical_value,0], - ["LIKE in SELECT","like","'a' like 'a%'",$logical_value,0], - ["LN","ln","ln(95)","4.55387689",0], - # oracle natural logarithm of n - ["LOCATE as INSTR","instr","instr('hello','ll')",3,0], - ["LOG(m,n)","log(m_n)","log(10,100)","2",0], - # oracle logarithm, base m, of n - ["LOGN","logn","logn(2)","0.693147",0], - # informix - ["LPAD","lpad","lpad('hi',4,'??')",'??hi',3], - ["MOD as %","%","10%7","3",0], - ["NOT BETWEEN in SELECT","not_between","5 not between 4 and 6",0,0], - ["NOT LIKE in SELECT","not_like","'a' not like 'a%'",0,0], - ["NOT as '!' in SELECT","!","! 1",0,0], - ["NOT in SELECT","not","not $false",$logical_value,0], - ["ODBC CONVERT","odbc_convert","convert(5,SQL_CHAR)","5",1], - ["OR as '||'",'||',"1=0 || 1=1",$logical_value,0], - ["PASSWORD","password","password('hello')",0,2], - ["PASTE", "paste", "paste('ABCDEFG',3,2,'1234')","AB1234EFG",1], - ["PATINDEX","patindex","patindex('%a%','crash')",3,0], - ["POW","pow","pow(3,2)",9,0], - ["RANGE","range","range(a)","0.0",0], - # informix range(a) = max(a) - min(a) - ["REGEXP in SELECT","regexp","'a' regexp '^(a|b)*\$'",$logical_value,0], - ["REPLICATE","replicate","replicate('a',5)","aaaaa",1], - ["REVERSE","reverse","reverse('abcd')","dcba",1], - ["ROOT","root","root(4)",2,0], # informix - ["ROUND(1 arg)","round1","round(5.63)","6",0], - ["RPAD","rpad","rpad('hi',4,'??')",'hi??',3], - ["SINH","sinh","sinh(1)","1.17520119",0], # oracle hyperbolic sine of n - ["STR","str","str(123.45,5,1)",123.5,3], - ["STRCMP","strcmp","strcmp('abc','adc')",-1,0], - ["STUFF","stuff","stuff('abc',2,3,'xyz')",'axyz',3], - ["SUBSTRB", "substrb", "SUBSTRB('ABCDEFG',5,4.2)" ,"CD",1], - # oracle substring with bytes - ["SUBSTRING as MID","mid","mid('hello',3,2)","ll",1], - ["SUBSTRING_INDEX","substring_index", - "substring_index('www.tcx.se','.',-2)", "tcx.se",1], - ["SYSDATE","sysdate","sysdate()",0,2], - ["TAIL","tail","tail('ABCDEFG',3)","EFG",0], - ["TANH","tanh","tanh(1)","0.462117157",0], - # oracle hyperbolic tangent of n - ["TRANSLATE","translate","translate('abc','bc','de')",'ade',3], - ["TRIM; Many char extension", - "trim_many_char","trim(':!' FROM ':abc!')","abc",3], - ["TRIM; Substring extension", - "trim_substring","trim('cb' FROM 'abccb')","abc",3], - ["TRUNC","trunc","trunc(18.18,-1)",10,0], # oracle - ["UID","uid","uid",0,2], # oracle uid from user - ["UNIX_TIMESTAMP","unix_timestamp","unix_timestamp()",0,2], - ["USERENV","userenv","userenv",0,2], # oracle user enviroment - ["VERSION","version","version()",0,2], - ["automatic num->string convert","auto_num2string","concat('a',2)","a2",1], - ["automatic string->num convert","auto_string2num","'1'+2",3,0], - ["concatenation with +","concat_as_+","'abc' + 'def'","abcdef",1], - ["SUBSTR (2 arg)",'substr2arg',"substr('abcd',2)",'bcd',1], #sapdb func - ["SUBSTR (3 arg)",'substr3arg',"substr('abcd',2,2)",'bc',1], - ["LFILL (3 arg)",'lfill3arg',"lfill('abcd','.',6)",'..abcd',1], - ["RFILL (3 arg)",'rfill3arg',"rfill('abcd','.',6)",'abcd..',1], - ["RPAD (4 arg)",'rpad4arg',"rpad('abcd',2,'+-',8)",'abcd+-+-',1], - ["LPAD (4 arg)",'rpad4arg',"lpad('abcd',2,'+-',8)",'+-+-abcd',1], - ["TRIM (1 arg)",'trim1arg',"trim(' abcd ')",'abcd',1], - ["TRIM (2 arg)",'trim2arg',"trim('..abcd..','.')",'abcd',1], - ["LTRIM (2 arg)",'ltrim2arg',"ltrim('..abcd..','.')",'abcd..',1], - ["RTRIM (2 arg)",'rtrim2arg',"rtrim('..abcd..','.')",'..abcd',1], - ["EXPAND",'expand2arg',"expand('abcd',6)",'abcd ',0], - ["REPLACE (2 arg) ",'replace2arg',"replace('AbCd','bC')",'Ad',1], - ["MAPCHAR",'mapchar',"mapchar('Aâ')",'Aa',1], - ["ALPHA",'alpha',"alpha('Aâ',2)",'AA',1], - ["ASCII in string cast",'ascii_string',"ascii('a')",'a',1], - ["EBCDIC in string cast",'ebcdic_string',"ebcdic('a')",'a',1], - ["TRUNC (1 arg)",'trunc1arg',"trunc(222.6)",222,0], - ["FIXED",'fixed',"fixed(222.6666,10,2)",'222.67',0], - ["FLOAT",'float',"float(6666.66,4)",6667,0], - ["LENGTH",'length',"length(1)",2,0], - ["INDEX",'index',"index('abcdefg','cd',1,1)",3,0], - ["MICROSECOND",'microsecond', - "MICROSECOND('19630816200212111111')",'111111',0], - ["TIMESTAMP",'timestamp', - "timestamp('19630816','00200212')",'19630816200212000000',0], - ["VALUE",'value',"value(NULL,'WALRUS')",'WALRUS',0], - ["DECODE",'decode',"DECODE('S-103','T72',1,'S-103',2,'Leopard',3)",2,0], - ["NUM",'num',"NUM('2123')",2123,0], - ["CHR (any type to string)",'chr_str',"CHR(67)",'67',0], - ["HEX",'hex',"HEX('A')",41,0], - ); - - -@sql_group_functions= - ( - ["AVG","avg","avg(a)",1,0], - ["COUNT (*)","count_*","count(*)",1,0], - ["COUNT column name","count_column","count(a)",1,0], - ["COUNT(DISTINCT expr)","count_distinct","count(distinct a)",1,0], - ["MAX on numbers","max","max(a)",1,0], - ["MAX on strings","max_str","max(b)","a",1], - ["MIN on numbers","min","min(a)",1,0], - ["MIN on strings","min_str","min(b)","a",1], - ["SUM","sum","sum(a)",1,0], - ["ANY","any","any(a)",$logical_value,0], - ["EVERY","every","every(a)",$logical_value,0], - ["SOME","some","some(a)",$logical_value,0], - ); - -@extra_group_functions= - ( - ["BIT_AND",'bit_and',"bit_and(a)",1,0], - ["BIT_OR", 'bit_or', "bit_or(a)",1,0], - ["COUNT(DISTINCT expr,expr,...)", - "count_distinct_list","count(distinct a,b)",1,0], - ["STD","std","std(a)",0,0], - ["STDDEV","stddev","stddev(a)",0,0], - ["VARIANCE","variance","variance(a)",0,0], - ); - -@where_functions= -( - ["= ALL","eq_all","b =all (select b from crash_me)",1,0], - ["= ANY","eq_any","b =any (select b from crash_me)",1,0], - ["= SOME","eq_some","b =some (select b from crash_me)",1,0], - ["BETWEEN","between","5 between 4 and 6",1,0], - ["EXISTS","exists","exists (select * from crash_me)",1,0], - ["IN on numbers","in_num","2 in (3,2,5,9,5,1)",1,0], - ["LIKE ESCAPE","like_escape","b like '%' escape 'a'",1,0], - ["LIKE","like","b like 'a%'",1,0], - ["MATCH UNIQUE","match_unique", - "1 match unique (select a from crash_me)",1,0], - ["MATCH","match","1 match (select a from crash_me)",1,0], - ["MATCHES","matches","b matches 'a*'",1,0], - ["NOT BETWEEN","not_between","7 not between 4 and 6",1,0], - ["NOT EXISTS","not_exists", - "not exists (select * from crash_me where a = 2)",1,0], - ["NOT LIKE","not_like","b not like 'b%'",1,0], - ["NOT UNIQUE","not_unique", - "not unique (select * from crash_me where a = 2)",1,0], - ["UNIQUE","unique","unique (select * from crash_me)",1,0], - ); - -@types=(["sql",\@sql_functions,0], - ["odbc",\@odbc_functions,0], - ["extra",\@extra_functions,0], - ["where",\@where_functions,0]); - -@group_types=(["sql",\@sql_group_functions,0], - ["extra",\@extra_group_functions,0]); - - -foreach $types (@types) -{ - print "\nSupported $types->[0] functions\n"; - $tmp=@$types->[1]; - foreach $type (@$tmp) - { - if (defined($limits{"func_$types->[0]_$type->[1]"})) - { - next; - } - if ($types->[0] eq "where") - { - check_and_report("Function $type->[0]","func_$types->[0]_$type->[1]", - [],"select a from crash_me where $type->[2]",[], - $type->[3],$type->[4]); - } - elsif ($limits{'functions'} eq 'yes') - { - if (($type->[2] =~ /char_length\(b\)/) && (!$end_query)) - { - my $tmp= $type->[2]; - $tmp .= " from crash_me "; - undef($limits{"func_$types->[0]_$type->[1]"}); - check_and_report("Function $type->[0]", - "func_$types->[0]_$type->[1]", - [],"select $tmp ",[], - $type->[3],$type->[4]); - } - else - { - undef($limits{"func_$types->[0]_$type->[1]"}); - $result = check_and_report("Function $type->[0]", - "func_$types->[0]_$type->[1]", - [],"select $type->[2] $end_query",[], - $type->[3],$type->[4]); - if (!$result) - { - # check without type specifyer - if ($type->[2] =~ /DATE /) - { - my $tmp= $type->[2]; - $tmp =~ s/DATE //; - undef($limits{"func_$types->[0]_$type->[1]"}); - $result = check_and_report("Function $type->[0]", - "func_$types->[0]_$type->[1]", - [],"select $tmp $end_query",[], - $type->[3],$type->[4]); - } - if (!$result) - { - if ($types->[0] eq "odbc" && ! ($type->[2] =~ /\{fn/)) - { - my $tmp= $type->[2]; - # Check by converting to ODBC format - undef($limits{"func_$types->[0]_$type->[1]"}); - $tmp= "{fn $tmp }"; - $tmp =~ s/('1997-\d\d-\d\d \d\d:\d\d:\d\d')/{ts $1}/g; - $tmp =~ s/(DATE '1997-\d\d-\d\d')/{d $1}/g; - $tmp =~ s/(TIME '12:13:14')/{t $1}/g; - $tmp =~ s/DATE //; - $tmp =~ s/TIME //; - check_and_report("Function $type->[0]", - "func_$types->[0]_$type->[1]", - [],"select $tmp $end_query",[], - $type->[3],$type->[4]); - } - } - } - } - } - } -} - -if ($limits{'functions'} eq 'yes') -{ - foreach $types (@group_types) - { - print "\nSupported $types->[0] group functions\n"; - $tmp=@$types->[1]; - foreach $type (@$tmp) - { - check_and_report("Group function $type->[0]", - "group_func_$types->[0]_$type->[1]", - [],"select $type->[2],a from crash_me group by a",[], - $type->[3],$type->[4]); - } - } - print "\n"; - report("mixing of integer and float in expression","float_int_expr", - "select 1+1.0 $end_query"); - if ($limits{'func_odbc_exp'} eq 'yes') - { - report("No need to cast from integer to float", - "dont_require_cast_to_float", "select exp(1) $end_query"); - } - check_and_report("Is 1+NULL = NULL","null_num_expr", - [],"select 1+$numeric_null $end_query",[],undef(),4); - $tmp=sql_concat("'a'",$char_null); - if (defined($tmp)) - { - check_and_report("Is $tmp = NULL", "null_concat_expr", [], - "select $tmp $end_query",[], undef(),4); - } - $prompt="Need to cast NULL for arithmetic"; - add_log("Need_cast_for_null", - " Check if numeric_null ($numeric_null) is 'NULL'"); - save_config_data("Need_cast_for_null", - ($numeric_null eq "NULL") ? "no" : "yes", - $prompt); -} -else -{ - print "\n"; -} - - -# Test: NOROUND -{ - my $result = 'undefined'; - my $error; - print "NOROUND: "; - save_incomplete('func_extra_noround','Function NOROUND'); - -# 1) check if noround() function is supported - $error = safe_query_l('func_extra_noround',"select noround(22.6) $end_query"); - if ($error ne 1) # syntax error -- noround is not supported - { - $result = 'no' - } - else # Ok, now check if it really works - { - $error=safe_query_l('func_extra_noround', - ["create table crash_me_nr (a int)", - "insert into crash_me_nr values(noround(10.2))", - "drop table crash_me_nr $drop_attr"]); - if ($error == 1) - { - $result= "syntax only"; - } - else - { - $result= 'yes'; - } - } - print "$result\n"; - save_config_data('func_extra_noround',$result,"Function NOROUND"); -} - -check_parenthesis("func_sql_","CURRENT_USER"); -check_parenthesis("func_sql_","SESSION_USER"); -check_parenthesis("func_sql_","SYSTEM_USER"); -check_parenthesis("func_sql_","USER"); - - -if ($limits{'type_sql_date'} eq 'yes') -{ # - # Checking the format of date in result. - - safe_query("drop table crash_me_d $drop_attr"); - assert("create table crash_me_d (a date)"); - # find the example of date - my $dateexample; - if ($limits{'func_extra_sysdate'} eq 'yes') { - $dateexample=' sysdate() '; - } - elsif ($limits{'func_sql_current_date'} eq 'yes') { - $dateexample='CURRENT_DATE'; - } - elsif ($limits{'func_odbc_curdate'} eq 'yes') { - $dateexample='curdate()'; - } - elsif ($limits{'func_extra_getdate'} eq 'yes') { - $dateexample='getdate()'; - } - elsif ($limits{'func_odbc_now'} eq 'yes') { - $dateexample='now()'; - } else { - #try to guess - $dateexample="DATE '1963-08-16'"; - } ; - - my $key = 'date_format_inresult'; - my $prompt = "Date format in result"; - if (! safe_query_l('date_format_inresult', - "insert into crash_me_d values($dateexample) ")) - { - die "Cannot insert date ($dateexample):".$last_error; - }; - my $sth= $dbh->prepare("select a from crash_me_d"); - add_log('date_format_inresult',"< select a from crash_me_d"); - $sth->execute; - $_= $sth->fetchrow_array; - add_log('date_format_inresult',"> $_"); - safe_query_l($key,"delete from crash_me_d"); - if (/\d{4}-\d{2}-\d{2}/){ save_config_data($key,"iso",$prompt);} - elsif (/\d{2}-\d{2}-\d{2}/){ save_config_data($key,"short iso",$prompt);} - elsif (/\d{2}\.\d{2}\.\d{4}/){ save_config_data($key,"euro",$prompt);} - elsif (/\d{2}\.\d{2}\.\d{2}/){ save_config_data($key,"short euro",$prompt);} - elsif (/\d{2}\/\d{2}\/\d{4}/){ save_config_data($key,"usa",$prompt);} - elsif (/\d{2}\/\d{2}\/\d{2}/){ save_config_data($key,"short usa",$prompt);} - elsif (/\d*/){ save_config_data($key,"YYYYMMDD",$prompt);} - else { save_config_data($key,"unknown",$prompt);}; - $sth->finish; - - check_and_report("Supports YYYY-MM-DD (ISO) format","date_format_ISO", - [ "insert into crash_me_d(a) values ('1963-08-16')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - - check_and_report("Supports DATE 'YYYY-MM-DD' (ISO) format", - "date_format_ISO_with_date", - [ "insert into crash_me_d(a) values (DATE '1963-08-16')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - - check_and_report("Supports DD.MM.YYYY (EUR) format","date_format_EUR", - [ "insert into crash_me_d(a) values ('16.08.1963')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - check_and_report("Supports DATE 'DD.MM.YYYY' (EUR) format", - "date_format_EUR_with_date", - [ "insert into crash_me_d(a) values (DATE '16.08.1963')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - - check_and_report("Supports YYYYMMDD format", - "date_format_YYYYMMDD", - [ "insert into crash_me_d(a) values ('19630816')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - check_and_report("Supports DATE 'YYYYMMDD' format", - "date_format_YYYYMMDD_with_date", - [ "insert into crash_me_d(a) values (DATE '19630816')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - - check_and_report("Supports MM/DD/YYYY format", - "date_format_USA", - [ "insert into crash_me_d(a) values ('08/16/1963')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - check_and_report("Supports DATE 'MM/DD/YYYY' format", - "date_format_USA_with_date", - [ "insert into crash_me_d(a) values (DATE '08/16/1963')"], - "select a from crash_me_d", - ["delete from crash_me_d"], - make_date_r(1963,8,16),1); - - - - - check_and_report("Supports 0000-00-00 dates","date_zero", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values (".make_date(0,0,0).")"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - make_date_r(0,0,0),1); - - check_and_report("Supports 0001-01-01 dates","date_one", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values (".make_date(1,1,1).")"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - make_date_r(1,1,1),1); - - check_and_report("Supports 9999-12-31 dates","date_last", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values (".make_date(9999,12,31).")"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - make_date_r(9999,12,31),1); - - check_and_report("Supports 'infinity dates","date_infinity", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values ('infinity')"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - "infinity",1); - - if (!defined($limits{'date_with_YY'})) - { - check_and_report("Supports YY-MM-DD dates","date_with_YY", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values ('98-03-03')"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - make_date_r(1998,3,3),5); - if ($limits{'date_with_YY'} eq "yes") - { - undef($limits{'date_with_YY'}); - check_and_report("Supports YY-MM-DD 2000 compilant dates", - "date_with_YY", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values ('10-03-03')"], - "select a from crash_me2", - ["drop table crash_me2 $drop_attr"], - make_date_r(2010,3,3),5); - } - } - -# Test: WEEK() - { - my $result="no"; - my $error; - print "WEEK:"; - save_incomplete('func_odbc_week','WEEK'); - $error = safe_query_result_l('func_odbc_week', - "select week(".make_date(1997,2,1).") $end_query",5,0); - # actually this query must return 4 or 5 in the $last_result, - # $error can be 1 (not supported at all) , -1 ( probably USA weeks) - # and 0 - EURO weeks - if ($error == -1) { - if ($last_result == 4) { - $result = 'USA'; - } else { - $result='error'; - add_log('func_odbc_week', - " must return 4 or 5, but $last_result"); - } - } elsif ($error == 0) { - $result = 'EURO'; - } - print " $result\n"; - save_config_data('func_odbc_week',$result,"WEEK"); - } - - my $insert_query ='insert into crash_me_d values('. - make_date(1997,2,1).')'; - safe_query($insert_query); - - foreach $fn ( ( - ["DAYNAME","dayname","dayname(a)","",2], - ["MONTH","month","month(a)","",2], - ["MONTHNAME","monthname","monthname(a)","",2], - ["DAYOFMONTH","dayofmonth","dayofmonth(a)",1,0], - ["DAYOFWEEK","dayofweek","dayofweek(a)",7,0], - ["DAYOFYEAR","dayofyear","dayofyear(a)",32,0], - ["QUARTER","quarter","quarter(a)",1,0], - ["YEAR","year","year(a)",1997,0])) - { - $prompt='Function '.$fn->[0]; - $key='func_odbc_'.$fn->[1]; - add_log($key,"< ".$insert_query); - check_and_report($prompt,$key, - [],"select ".$fn->[2]." from crash_me_d",[], - $fn->[3],$fn->[4] - ); - - }; - safe_query(['delete from crash_me_d', - 'insert into crash_me_d values('.make_date(1963,8,16).')']); - foreach $fn (( - ["DATEADD","dateadd","dateadd(day,3,make_date(1997,11,30))",0,2], - ["MDY","mdy","mdy(7,1,1998)","make_date_r(1998,07,01)",0], # informix - ["DATEDIFF","datediff", - "datediff(month,'Oct 21 1997','Nov 30 1997')",0,2], - ["DATENAME","datename","datename(month,'Nov 30 1997')",0,2], - ["DATEPART","datepart","datepart(month,'July 20 1997')",0,2], - ["DATE_FORMAT","date_format", - "date_format('1997-01-02 03:04:05','M W D Y y m d h i s w')", 0,2], - ["FROM_DAYS","from_days", - "from_days(729024)","make_date_r(1996,1,1)",1], - ["FROM_UNIXTIME","from_unixtime","from_unixtime(0)",0,2], - ["MONTHS_BETWEEN","months_between", - "months_between(make_date(1997,2,2),make_date(1997,1,1))", - "1.03225806",0], # oracle number of months between 2 dates - ["PERIOD_ADD","period_add","period_add(9602,-12)",199502,0], - ["PERIOD_DIFF","period_diff","period_diff(199505,199404)",13,0], - ["WEEKDAY","weekday","weekday(make_date(1997,11,29))",5,0], - ["ADDDATE",'adddate', - "ADDDATE(make_date(2002,12,01),3)",'make_date_r(2002,12,04)',0], - ["SUBDATE",'subdate', - "SUBDATE(make_date(2002,12,04),3)",'make_date_r(2002,12,01)',0], - ["DATEDIFF (2 arg)",'datediff2arg', - "DATEDIFF(make_date(2002,12,04),make_date(2002,12,01))",'3',0], - ["WEEKOFYEAR",'weekofyear', - "WEEKOFYEAR(make_date(1963,08,16))",'33',0], -# table crash_me_d must contain record with 1963-08-16 (for CHAR) - ["CHAR (conversation date)",'char_date', - "CHAR(a,EUR)",'16.08.1963',0], - ["MAKEDATE",'makedate',"MAKEDATE(1963,228)" - ,'make_date_r(1963,08,16)',0], - ["TO_DAYS","to_days", - "to_days(make_date(1996,01,01))",729024,0], - ["ADD_MONTHS","add_months", - "add_months(make_date(1997,01,01),1)","make_date_r(1997,02,01)",0], - # oracle the date plus n months - ["LAST_DAY","last_day", - "last_day(make_date(1997,04,01))","make_date_r(1997,04,30)",0], - # oracle last day of month of date - ["DATE",'date',"date(make_date(1963,8,16))", - 'make_date_r(1963,8,16)',0], - ["DAY",'day',"DAY(make_date(2002,12,01))",1,0])) - { - $prompt='Function '.$fn->[0]; - $key='func_extra_'.$fn->[1]; - my $qry="select ".$fn->[2]." from crash_me_d"; - while( $qry =~ /^(.*)make_date\((\d+),(\d+),(\d+)\)(.*)$/) - { - my $dt= &make_date($2,$3,$4); - $qry=$1.$dt.$5; - }; - my $result=$fn->[3]; - while( $result =~ /^(.*)make_date_r\((\d+),(\d+),(\d+)\)(.*)$/) - { - my $dt= &make_date_r($2,$3,$4); - $result=$1.$dt.$5; - }; - check_and_report($prompt,$key, - [],$qry,[], - $result,$fn->[4] - ); - - } - - safe_query("drop table crash_me_d $drop_attr"); - -} - -if ($limits{'type_sql_time'} eq 'yes') -{ # - # Checking the format of date in result. - - safe_query("drop table crash_me_t $drop_attr"); - assert("create table crash_me_t (a time)"); - # find the example of time - my $timeexample; - if ($limits{'func_sql_current_time'} eq 'yes') { - $timeexample='CURRENT_TIME'; - } - elsif ($limits{'func_odbc_curtime'} eq 'yes') { - $timeexample='curtime()'; - } - elsif ($limits{'func_sql_localtime'} eq 'yes') { - $timeexample='localtime'; - } - elsif ($limits{'func_odbc_now'} eq 'yes') { - $timeexample='now()'; - } else { - #try to guess - $timeexample="'02:55:12'"; - } ; - - my $key = 'time_format_inresult'; - my $prompt = "Time format in result"; - if (! safe_query_l('time_format_inresult', - "insert into crash_me_t values($timeexample) ")) - { - die "Cannot insert time ($timeexample):".$last_error; - }; - my $sth= $dbh->prepare("select a from crash_me_t"); - add_log('time_format_inresult',"< select a from crash_me_t"); - $sth->execute; - $_= $sth->fetchrow_array; - add_log('time_format_inresult',"> $_"); - safe_query_l($key,"delete from crash_me_t"); - if (/\d{2}:\d{2}:\d{2}/){ save_config_data($key,"iso",$prompt);} - elsif (/\d{2}\.\d{2}\.\d{2}/){ save_config_data($key,"euro",$prompt);} - elsif (/\d{2}:\d{2}\s+(AM|PM)/i){ save_config_data($key,"usa",$prompt);} - elsif (/\d{8}$/){ save_config_data($key,"HHHHMMSS",$prompt);} - elsif (/\d{4}$/){ save_config_data($key,"HHMMSS",$prompt);} - else { save_config_data($key,"unknown",$prompt);}; - $sth->finish; - - check_and_report("Supports HH:MM:SS (ISO) time format","time_format_ISO", - [ "insert into crash_me_t(a) values ('20:08:16')"], - "select a from crash_me_t", - ["delete from crash_me_t"], - make_time_r(20,8,16),1); - - check_and_report("Supports HH.MM.SS (EUR) time format","time_format_EUR", - [ "insert into crash_me_t(a) values ('20.08.16')"], - "select a from crash_me_t", - ["delete from crash_me_t"], - make_time_r(20,8,16),1); - - check_and_report("Supports HHHHmmSS time format", - "time_format_HHHHMMSS", - [ "insert into crash_me_t(a) values ('00200816')"], - "select a from crash_me_t", - ["delete from crash_me_t"], - make_time_r(20,8,16),1); - - check_and_report("Supports HHmmSS time format", - "time_format_HHHHMMSS", - [ "insert into crash_me_t(a) values ('200816')"], - "select a from crash_me_t", - ["delete from crash_me_t"], - make_time_r(20,8,16),1); - - check_and_report("Supports HH:MM:SS (AM|PM) time format", - "time_format_USA", - [ "insert into crash_me_t(a) values ('08:08:16 PM')"], - "select a from crash_me_t", - ["delete from crash_me_t"], - make_time_r(20,8,16),1); - - my $insert_query ='insert into crash_me_t values('. - make_time(20,8,16).')'; - safe_query($insert_query); - - foreach $fn ( ( - ["HOUR","hour","hour('".make_time(12,13,14)."')",12,0], - ["ANSI HOUR","hour_time","hour(TIME '".make_time(12,13,14)."')",12,0], - ["MINUTE","minute","minute('".make_time(12,13,14)."')",13,0], - ["SECOND","second","second('".make_time(12,13,14)."')",14,0] - - )) - { - $prompt='Function '.$fn->[0]; - $key='func_odbc_'.$fn->[1]; - add_log($key,"< ".$insert_query); - check_and_report($prompt,$key, - [],"select ".$fn->[2]." $end_query",[], - $fn->[3],$fn->[4] - ); - - }; -# safe_query(['delete from crash_me_t', -# 'insert into crash_me_t values('.make_time(20,8,16).')']); - foreach $fn (( - ["TIME_TO_SEC","time_to_sec","time_to_sec('". - make_time(1,23,21)."')","5001",0], - ["SEC_TO_TIME","sec_to_time","sec_to_time(5001)", - make_time_r(01,23,21),1], - ["ADDTIME",'addtime',"ADDTIME('".make_time(20,2,12). - "','".make_time(0,0,3)."')",make_time_r(20,2,15),0], - ["SUBTIME",'subtime',"SUBTIME('".make_time(20,2,15) - ."','".make_time(0,0,3)."')",make_time_r(20,2,12),0], - ["TIMEDIFF",'timediff',"TIMEDIFF('".make_time(20,2,15)."','". - make_time(20,2,12)."')",make_time_r(0,0,3),0], - ["MAKETIME",'maketime',"MAKETIME(20,02,12)",make_time_r(20,2,12),0], - ["TIME",'time',"time('".make_time(20,2,12)."')",make_time_r(20,2,12),0] - )) - { - $prompt='Function '.$fn->[0]; - $key='func_extra_'.$fn->[1]; - my $qry="select ".$fn->[2]." $end_query"; - my $result=$fn->[3]; - check_and_report($prompt,$key, - [],$qry,[], - $result,$fn->[4] - ); - - } - - safe_query("drop table crash_me_t $drop_attr"); - -} - - -# NOT id BETWEEN a and b -if ($limits{'func_where_not_between'} eq 'yes') -{ - my $result = 'error'; - my $err; - my $key='not_id_between'; - my $prompt='NOT ID BETWEEN interprets as ID NOT BETWEEN'; - print "$prompt:"; - save_incomplete($key,$prompt); - safe_query_l($key,["create table crash_me_b (i int)", - "insert into crash_me_b values(2)", - "insert into crash_me_b values(5)"]); - $err =safe_query_result_l($key, - "select i from crash_me_b where not i between 1 and 3", - 5,0); - if ($err eq 1) { - if (not defined($last_result)) { - $result='no'; - }; - }; - if ( $err eq 0) { - $result = 'yes'; - }; - safe_query_l($key,["drop table crash_me_b"]); - save_config_data($key,$result,$prompt); - print "$result\n"; -}; - - - - -report("LIKE on numbers","like_with_number", - "create table crash_q (a int,b int)", - "insert into crash_q values(10,10)", - "select * from crash_q where a like '10'", - "drop table crash_q $drop_attr"); - -report("column LIKE column","like_with_column", - "create table crash_q (a char(10),b char(10))", - "insert into crash_q values('abc','abc')", - "select * from crash_q where a like b", - "drop table crash_q $drop_attr"); - -report("update of column= -column","NEG", - "create table crash_q (a integer)", - "insert into crash_q values(10)", - "update crash_q set a=-a", - "drop table crash_q $drop_attr"); - -if ($limits{'func_odbc_left'} eq 'yes' || - $limits{'func_odbc_substring'} eq 'yes') -{ - my $type= ($limits{'func_odbc_left'} eq 'yes' ? - "left(a,4)" : "substring(a for 4)"); - - check_and_report("String functions on date columns","date_as_string", - ["create table crash_me2 (a date not null)", - "insert into crash_me2 values ('1998-03-03')"], - "select $type from crash_me2", - ["drop table crash_me2 $drop_attr"], - "1998",1); -} - - -$tmp=sql_concat("b","b"); -if (defined($tmp)) -{ - check_and_report("char are space filled","char_is_space_filled", - [],"select $tmp from crash_me where b = 'a '",[], - 'a a ',6); -} - -if (!defined($limits{'multi_table_update'})) -{ - if (check_and_report("Update with many tables","multi_table_update", - ["create table crash_q (a integer,b char(10))", - "insert into crash_q values(1,'c')", - "update crash_q left join crash_me on crash_q.a=crash_me.a set crash_q.b=crash_me.b"], - "select b from crash_q", - ["drop table crash_q $drop_attr"], - "a",1,undef(),2)) - { - check_and_report("Update with many tables","multi_table_update", - ["create table crash_q (a integer,b char(10))", - "insert into crash_q values(1,'c')", - "update crash_q,crash_me set crash_q.b=crash_me.b ". - "where crash_q.a=crash_me.a"], - "select b from crash_q", - ["drop table crash_q $drop_attr"], - "a",1, - 1); - } -} - -report("DELETE FROM table1,table2...","multi_table_delete", - "create table crash_q (a integer,b char(10))", - "insert into crash_q values(1,'c')", - "delete crash_q.* from crash_q,crash_me where crash_q.a=crash_me.a", - "drop table crash_q $drop_attr"); - -check_and_report("Update with sub select","select_table_update", - ["create table crash_q (a integer,b char(10))", - "insert into crash_q values(1,'c')", - "update crash_q set b= ". - "(select b from crash_me where crash_q.a = crash_me.a)"], - "select b from crash_q", - ["drop table crash_q $drop_attr"], - "a",1); - -check_and_report("Calculate 1--1","minus_neg",[], - "select a--1 from crash_me",[],0,2); - -report("ANSI SQL simple joins","simple_joins", - "select crash_me.a from crash_me, crash_me t0"); - -# -# Check max string size, and expression limits -# -$found=undef; -foreach $type (('mediumtext','text','text()','blob','long')) -{ - if ($limits{"type_extra_$type"} eq 'yes') - { - $found=$type; - last; - } -} -if (defined($found)) -{ - $found =~ s/\(\)/\(%d\)/; - find_limit("max text or blob size","max_text_size", - new query_many(["create table crash_q (q $found)", - "insert into crash_q values ('%s')"], - "select * from crash_q","%s", - ["drop table crash_q $drop_attr"], - min($max_string_size,$limits{'query_size'}-30))); - -} - -# It doesn't make lots of sense to check for string lengths much bigger than -# what can be stored... - -find_limit(($prompt="constant string size in where"),"where_string_size", - new query_repeat([],"select a from crash_me where b >='", - "","","1","","'")); -if ($limits{'where_string_size'} == 10) -{ - save_config_data('where_string_size','nonstandard',$prompt); -} - -if ($limits{'select_constants'} eq 'yes') -{ - find_limit("constant string size in SELECT","select_string_size", - new query_repeat([],"select '","","","a","","'$end_query")); -} - -goto no_functions if ($limits{'functions'} ne "yes"); - -if ($limits{'func_odbc_repeat'} eq 'yes') -{ - find_limit("return string size from function","repeat_string_size", - new query_many([], - "select repeat('a',%d) $end_query","%s", - [], - $max_string_size,0)); -} - -$tmp=find_limit("simple expressions","max_expressions", - new query_repeat([],"select 1","","","+1","",$end_query, - undef(),$max_expressions)); - -if ($tmp > 10) -{ - $tmp= "(1" . ( '+1' x ($tmp-10) ) . ")"; - find_limit("big expressions", "max_big_expressions", - new query_repeat([],"select 0","","","+$tmp","",$end_query, - undef(),$max_big_expressions)); -} - -find_limit("stacked expressions", "max_stack_expression", - new query_repeat([],"select 1","","","+(1",")",$end_query, - undef(),$max_stacked_expressions)); - -no_functions: - -if (!defined($limits{'max_conditions'})) -{ - find_limit("OR and AND in WHERE","max_conditions", - new query_repeat([], - "select a from crash_me where a=1 and b='a'","", - "", " or a=%d and b='%d'","","","", - [],($query_size-42)/29,undef,2)); - $limits{'max_conditions'}*=2; -} -# The 42 is the length of the constant part. -# The 29 is the length of the variable part, plus two seven-digit numbers. - -find_limit("tables in join", "join_tables", - new query_repeat([], - "select crash_me.a",",t%d.a","from crash_me", - ",crash_me t%d","","",[],$max_join_tables,undef, - 1)); - -# Different CREATE TABLE options - -report("primary key in create table",'primary_key_in_create', - "create table crash_q (q integer not null,primary key (q))", - "drop table crash_q $drop_attr"); - -report("unique in create table",'unique_in_create', - "create table crash_q (q integer not null,unique (q))", - "drop table crash_q $drop_attr"); - -if ($limits{'unique_in_create'} eq 'yes') -{ - report("unique null in create",'unique_null_in_create', - "create table crash_q (q integer,unique (q))", - "insert into crash_q (q) values (NULL)", - "insert into crash_q (q) values (NULL)", - "insert into crash_q (q) values (1)", - "drop table crash_q $drop_attr"); -} - -report("default value for column",'create_default', - "create table crash_q (q integer default 10 not null)", - "drop table crash_q $drop_attr"); - -report("default value function for column",'create_default_func', - "create table crash_q (q integer not null,q1 integer default (1+1))", - "drop table crash_q $drop_attr"); - -report("temporary tables",'temporary_table', - "create temporary table crash_q (q integer not null)", - "drop table crash_q $drop_attr"); - -report_one("create table from select",'create_table_select', - [["create table crash_q SELECT * from crash_me","yes"], - ["create table crash_q AS SELECT * from crash_me","with AS"]]); -$dbh->do("drop table crash_q $drop_attr"); - -report("index in create table",'index_in_create', - "create table crash_q (q integer not null,index (q))", - "drop table crash_q $drop_attr"); - -# The following must be executed as we need the value of end_drop_keyword -# later -if (!(defined($limits{'create_index'}) && defined($limits{'drop_index'}))) -{ - if ($res=safe_query_l('create_index',"create index crash_q on crash_me (a)")) - { - $res="yes"; - $drop_res="yes"; - $end_drop_keyword=""; - if (!safe_query_l('drop_index',"drop index crash_q")) - { - # Can't drop the standard way; Check if mSQL - if (safe_query_l('drop_index',"drop index crash_q from crash_me")) - { - $drop_res="with 'FROM'"; # Drop is not ANSI SQL - $end_drop_keyword="drop index %i from %t"; - } - # else check if Access or MySQL - elsif (safe_query_l('drop_index',"drop index crash_q on crash_me")) - { - $drop_res="with 'ON'"; # Drop is not ANSI SQL - $end_drop_keyword="drop index %i on %t"; - } - # else check if MS-SQL - elsif (safe_query_l('drop_index',"drop index crash_me.crash_q")) - { - $drop_res="with 'table.index'"; # Drop is not ANSI SQL - $end_drop_keyword="drop index %t.%i"; - } - } - else - { - # Old MySQL 3.21 supports only the create index syntax - # This means that the second create doesn't give an error. - $res=safe_query_l('create_index',["create index crash_q on crash_me (a)", - "create index crash_q on crash_me (a)", - "drop index crash_q"]); - $res= $res ? 'ignored' : 'yes'; - } - } - else - { - $drop_res=$res='no'; - } - save_config_data('create_index',$res,"create index"); - save_config_data('drop_index',$drop_res,"drop index"); - - print "create index: $limits{'create_index'}\n"; - print "drop index: $limits{'drop_index'}\n"; -} - -# check if we can have 'NULL' as a key -check_and_report("null in index","null_in_index", - [create_table("crash_q",["a char(10)"],["(a)"]), - "insert into crash_q values (NULL)"], - "select * from crash_q", - ["drop table crash_q $drop_attr"], - undef(),4); - -if ($limits{'unique_in_create'} eq 'yes') -{ - report("null in unique index",'null_in_unique', - create_table("crash_q",["q integer"],["unique(q)"]), - "insert into crash_q (q) values(NULL)", - "insert into crash_q (q) values(NULL)", - "drop table crash_q $drop_attr"); - report("null combination in unique index",'nulls_in_unique', - create_table("crash_q",["q integer,q1 integer"],["unique(q,q1)"]), - "insert into crash_q (q,q1) values(1,NULL)", - "insert into crash_q (q,q1) values(1,NULL)", - "drop table crash_q $drop_attr"); -} - -if ($limits{'null_in_unique'} eq 'yes') -{ - report("null in unique index",'multi_null_in_unique', - create_table("crash_q",["q integer, x integer"],["unique(q)"]), - "insert into crash_q(x) values(1)", - "insert into crash_q(x) values(2)", - "drop table crash_q $drop_attr"); -} - -if ($limits{'create_index'} ne 'no') -{ - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_q/; - $end_drop =~ s/%t/crash_me/; - report("index on column part (extension)","index_parts",, - "create index crash_q on crash_me (b(5))", - $end_drop); - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_me/; - $end_drop =~ s/%t/crash_me/; - report("different namespace for index", - "index_namespace", - "create index crash_me on crash_me (b)", - $end_drop); -} - -if (!report("case independent table names","table_name_case", - "create table crash_q (q integer)", - "drop table CRASH_Q $drop_attr")) -{ - safe_query("drop table crash_q $drop_attr"); -} - -if (!report("case independent field names","field_name_case", - "create table crash_q (q integer)", - "insert into crash_q(Q) values (1)", - "drop table crash_q $drop_attr")) -{ - safe_query("drop table crash_q $drop_attr"); -} - -if (!report("drop table if exists","drop_if_exists", - "create table crash_q (q integer)", - "drop table if exists crash_q $drop_attr")) -{ - safe_query("drop table crash_q $drop_attr"); -} - -report("create table if not exists","create_if_not_exists", - "create table crash_q (q integer)", - "create table if not exists crash_q (q integer)"); -safe_query("drop table crash_q $drop_attr"); - -# -# test of different join types -# - -assert("create table crash_me2 (a integer not null,b char(10) not null,". - " c1 integer)"); -assert("insert into crash_me2 (a,b,c1) values (1,'b',1)"); -assert("create table crash_me3 (a integer not null,b char(10) not null)"); -assert("insert into crash_me3 (a,b) values (1,'b')"); - -report("inner join","inner_join", - "select crash_me.a from crash_me inner join crash_me2 ON ". - "crash_me.a=crash_me2.a"); -report("left outer join","left_outer_join", - "select crash_me.a from crash_me left join crash_me2 ON ". - "crash_me.a=crash_me2.a"); -report("natural left outer join","natural_left_outer_join", - "select c1 from crash_me natural left join crash_me2"); -report("left outer join using","left_outer_join_using", - "select c1 from crash_me left join crash_me2 using (a)"); -report("left outer join odbc style","odbc_left_outer_join", - "select crash_me.a from { oj crash_me left outer join crash_me2 ON". - " crash_me.a=crash_me2.a }"); -report("right outer join","right_outer_join", - "select crash_me.a from crash_me right join crash_me2 ON ". - "crash_me.a=crash_me2.a"); -report("full outer join","full_outer_join", - "select crash_me.a from crash_me full join crash_me2 ON "." - crash_me.a=crash_me2.a"); -report("cross join (same as from a,b)","cross_join", - "select crash_me.a from crash_me cross join crash_me3"); -report("natural join","natural_join", - "select * from crash_me natural join crash_me3"); -report("union","union", - "select * from crash_me union select a,b from crash_me3"); -report("union all","union_all", - "select * from crash_me union all select a,b from crash_me3"); -report("intersect","intersect", - "select * from crash_me intersect select * from crash_me3"); -report("intersect all","intersect_all", - "select * from crash_me intersect all select * from crash_me3"); -report("except","except", - "select * from crash_me except select * from crash_me3"); -report("except all","except_all", - "select * from crash_me except all select * from crash_me3"); -report("except","except", - "select * from crash_me except select * from crash_me3"); -report("except all","except_all", - "select * from crash_me except all select * from crash_me3"); -report("minus","minus", - "select * from crash_me minus select * from crash_me3"); # oracle ... - -report("natural join (incompatible lists)","natural_join_incompat", - "select c1 from crash_me natural join crash_me2"); -report("union (incompatible lists)","union_incompat", - "select * from crash_me union select a,b from crash_me2"); -report("union all (incompatible lists)","union_all_incompat", - "select * from crash_me union all select a,b from crash_me2"); -report("intersect (incompatible lists)","intersect_incompat", - "select * from crash_me intersect select * from crash_me2"); -report("intersect all (incompatible lists)","intersect_all_incompat", - "select * from crash_me intersect all select * from crash_me2"); -report("except (incompatible lists)","except_incompat", - "select * from crash_me except select * from crash_me2"); -report("except all (incompatible lists)","except_all_incompat", - "select * from crash_me except all select * from crash_me2"); -report("except (incompatible lists)","except_incompat", - "select * from crash_me except select * from crash_me2"); -report("except all (incompatible lists)","except_all_incompat", - "select * from crash_me except all select * from crash_me2"); -report("minus (incompatible lists)","minus_incompat", - "select * from crash_me minus select * from crash_me2"); # oracle ... - -assert("drop table crash_me2 $drop_attr"); -assert("drop table crash_me3 $drop_attr"); - -# somethings to be added here .... -# FOR UNION - INTERSECT - EXCEPT -> CORRESPONDING [ BY ] -# after subqueries: -# >ALL | ANY | SOME - EXISTS - UNIQUE - -if (report("subqueries","subqueries", - "select a from crash_me where crash_me.a in ". - "(select max(a) from crash_me)")) -{ - $tmp=new query_repeat([],"select a from crash_me","","", - " where a in (select a from crash_me",")", - "",[],$max_join_tables); - find_limit("recursive subqueries", "recursive_subqueries",$tmp); -} - -report("insert INTO ... SELECT ...","insert_select", - "create table crash_q (a int)", - "insert into crash_q (a) SELECT crash_me.a from crash_me", - "drop table crash_q $drop_attr"); - -if (!defined($limits{"transactions"})) -{ - my ($limit,$type); - $limit="transactions"; - $limit_r="rollback_metadata"; - print "$limit: "; - foreach $type (('', 'type=bdb', 'type=innodb', 'type=gemini')) - { - undef($limits{$limit}); - if (!report_trans($limit, - [create_table("crash_q",["a integer not null"],[], - $type), - "insert into crash_q values (1)"], - "select * from crash_q", - "drop table crash_q $drop_attr" - )) - { - report_rollback($limit_r, - [create_table("crash_q",["a integer not null"],[], - $type)], - "insert into crash_q values (1)", - "drop table crash_q $drop_attr" ); - last; - }; - } - print "$limits{$limit}\n"; - print "$limit_r: $limits{$limit_r}\n"; -} - -report("atomic updates","atomic_updates", - create_table("crash_q",["a integer not null"],["primary key (a)"]), - "insert into crash_q values (2)", - "insert into crash_q values (3)", - "insert into crash_q values (1)", - "update crash_q set a=a+1", - "drop table crash_q $drop_attr"); - -if ($limits{'atomic_updates'} eq 'yes') -{ - report_fail("atomic_updates_with_rollback","atomic_updates_with_rollback", - create_table("crash_q",["a integer not null"], - ["primary key (a)"]), - "insert into crash_q values (2)", - "insert into crash_q values (3)", - "insert into crash_q values (1)", - "update crash_q set a=a+1 where a < 3", - "drop table crash_q $drop_attr"); -} - -# To add with the views: -# DROP VIEW - CREAT VIEW *** [ WITH [ CASCADE | LOCAL ] CHECK OPTION ] -report("views","views", - "create view crash_q as select a from crash_me", - "drop view crash_q $drop_attr"); - -# Test: foreign key -{ - my $result = 'undefined'; - my $error; - print "foreign keys: "; - save_incomplete('foreign_key','foreign keys'); - -# 1) check if foreign keys are supported - safe_query_l('foreign_key', - create_table("crash_me_qf", - ["a integer not null"], - ["primary key (a)"])); - $error= safe_query_l('foreign_key', - create_table("crash_me_qf2", - ["a integer not null", - "foreign key (a) references crash_me_qf (a)"], - [])); - - if ($error == 1) # OK -- syntax is supported - { - $result = 'error'; - # now check if foreign key really works - safe_query_l('foreign_key', "insert into crash_me_qf values (1)"); - if (safe_query_l('foreign_key', "insert into crash_me_qf2 values (2)") eq 1) - { - $result = 'syntax only'; - } - else - { - $result = 'yes'; - } - } - else - { - $result = "no"; - } - safe_query_l('foreign_key', "drop table crash_me_qf2 $drop_attr"); - safe_query_l('foreign_key', "drop table crash_me_qf $drop_attr"); - print "$result\n"; - save_config_data('foreign_key',$result,"foreign keys"); -} - -if ($limits{'foreign_key'} eq 'yes') -{ - report("allows to update of foreign key values",'foreign_update', - "create table crash_me1 (a int not null primary key)", - "create table crash_me2 (a int not null," . - " foreign key (a) references crash_me1 (a))", - "insert into crash_me1 values (1)", - "insert into crash_me2 values (1)", - "update crash_me1 set a = 2", ## <- must fail - "drop table crash_me2 $drop_attr", - "drop table crash_me1 $drop_attr" - ); -} - -report("Create SCHEMA","create_schema", - "create schema crash_schema create table crash_q (a int) ". - "create table crash_q2(b int)", - "drop schema crash_schema cascade"); - -if ($limits{'foreign_key'} eq 'yes') -{ - if ($limits{'create_schema'} eq 'yes') - { - report("Circular foreign keys","foreign_key_circular", - "create schema crash_schema create table crash_q ". - "(a int primary key, b int, foreign key (b) references ". - "crash_q2(a)) create table crash_q2(a int, b int, ". - "primary key(a), foreign key (b) references crash_q(a))", - "drop schema crash_schema cascade"); - } -} - -if ($limits{'func_sql_character_length'} eq 'yes') -{ - my $result = 'error'; - my ($resultset); - my $key = 'length_of_varchar_field'; - my $prompt='CHARACTER_LENGTH(varchar_field)'; - print $prompt," = "; - if (!defined($limits{$key})) { - save_incomplete($key,$prompt); - safe_query_l($key,[ - "CREATE TABLE crash_me1 (S1 VARCHAR(100))", - "INSERT INTO crash_me1 VALUES ('X')" - ]); - my $recset = get_recordset($key, - "SELECT CHARACTER_LENGTH(S1) FROM crash_me1"); - print_recordset($key,$recset); - if (defined($recset)){ - if ( $recset->[0][0] eq 1 ) { - $result = 'actual length'; - } elsif( $recset->[0][0] eq 100 ) { - $result = 'defined length'; - }; - } else { - add_log($key,$DBI::errstr); - } - safe_query_l($key, "drop table crash_me1 $drop_attr"); - save_config_data($key,$result,$prompt); - } else { - $result = $limits{$key}; - }; - print "$result\n"; -} - - -check_constraint("Column constraints","constraint_check", - "create table crash_q (a int check (a>0))", - "insert into crash_q values(0)", - "drop table crash_q $drop_attr"); - - -check_constraint("Table constraints","constraint_check_table", - "create table crash_q (a int ,b int, check (a>b))", - "insert into crash_q values(0,0)", - "drop table crash_q $drop_attr"); - -check_constraint("Named constraints","constraint_check_named", - "create table crash_q (a int ,b int, constraint abc check (a>b))", - "insert into crash_q values(0,0)", - "drop table crash_q $drop_attr"); - - -report("NULL constraint (SyBase style)","constraint_null", - "create table crash_q (a int null)", - "drop table crash_q $drop_attr"); - -report("Triggers (ANSI SQL)","psm_trigger", - "create table crash_q (a int ,b int)", - "create trigger crash_trigger after insert on crash_q referencing ". - "new table as new_a when (localtime > time '18:00:00') ". - "begin atomic end", - "insert into crash_q values(1,2)", - "drop trigger crash_trigger", - "drop table crash_q $drop_attr"); - -report("PSM procedures (ANSI SQL)","psm_procedures", - "create table crash_q (a int,b int)", - "create procedure crash_proc(in a1 int, in b1 int) language ". - "sql modifies sql data begin declare c1 int; set c1 = a1 + b1;". - " insert into crash_q(a,b) values (a1,c1); end", - "call crash_proc(1,10)", - "drop procedure crash_proc", - "drop table crash_q $drop_attr"); - -report("PSM modules (ANSI SQL)","psm_modules", - "create table crash_q (a int,b int)", - "create module crash_m declare procedure ". - "crash_proc(in a1 int, in b1 int) language sql modifies sql ". - "data begin declare c1 int; set c1 = a1 + b1; ". - "insert into crash_q(a,b) values (a1,c1); end; ". - "declare procedure crash_proc2(INOUT a int, in b int) ". - "contains sql set a = b + 10; end module", - "call crash_proc(1,10)", - "drop module crash_m cascade", - "drop table crash_q cascade $drop_attr"); - -report("PSM functions (ANSI SQL)","psm_functions", - "create table crash_q (a int)", - "create function crash_func(in a1 int, in b1 int) returns int". - " language sql deterministic contains sql ". - " begin return a1 * b1; end", - "insert into crash_q values(crash_func(2,4))", - "select a,crash_func(a,2) from crash_q", - "drop function crash_func cascade", - "drop table crash_q $drop_attr"); - -report("Domains (ANSI SQL)","domains", - "create domain crash_d as varchar(10) default 'Empty' ". - "check (value <> 'abcd')", - "create table crash_q(a crash_d, b int)", - "insert into crash_q(a,b) values('xyz',10)", - "insert into crash_q(b) values(10)", - "drop table crash_q $drop_attr", - "drop domain crash_d"); - - -if (!defined($limits{'lock_tables'})) -{ - report("lock table","lock_tables", - "lock table crash_me READ", - "unlock tables"); - if ($limits{'lock_tables'} eq 'no') - { - delete $limits{'lock_tables'}; - report("lock table","lock_tables", - "lock table crash_me IN SHARE MODE"); - } -} - -if (!report("many tables to drop table","multi_drop", - "create table crash_q (a int)", - "create table crash_q2 (a int)", - "drop table crash_q,crash_q2 $drop_attr")) -{ - $dbh->do("drop table crash_q $drop_attr"); - $dbh->do("drop table crash_q2 $drop_attr"); -} - -if (!report("drop table with cascade/restrict","drop_restrict", - "create table crash_q (a int)", - "drop table crash_q restrict")) -{ - $dbh->do("drop table crash_q $drop_attr"); -} - - -report("-- as comment (ANSI)","comment_--", - "select * from crash_me -- Testing of comments"); -report("// as comment","comment_//", - "select * from crash_me // Testing of comments"); -report("# as comment","comment_#", - "select * from crash_me # Testing of comments"); -report("/* */ as comment","comment_/**/", - "select * from crash_me /* Testing of comments */"); - -# -# Check things that fails one some servers -# - -# Empress can't insert empty strings in a char() field -report("insert empty string","insert_empty_string", - create_table("crash_q",["a char(10) not null,b char(10)"],[]), - "insert into crash_q values ('','')", - "drop table crash_q $drop_attr"); - -report("Having with alias","having_with_alias", - create_table("crash_q",["a integer"],[]), - "insert into crash_q values (10)", - "select sum(a) as b from crash_q group by a having b > 0", - "drop table crash_q $drop_attr"); - -# -# test name limits -# - -find_limit("table name length","max_table_name", - new query_many(["create table crash_q%s (q integer)", - "insert into crash_q%s values(1)"], - "select * from crash_q%s",1, - ["drop table crash_q%s $drop_attr"], - $max_name_length,7,1)); - -find_limit("column name length","max_column_name", - new query_many(["create table crash_q (q%s integer)", - "insert into crash_q (q%s) values(1)"], - "select q%s from crash_q",1, - ["drop table crash_q $drop_attr"], - $max_name_length,1)); - -if ($limits{'column_alias'} eq 'yes') -{ - find_limit("select alias name length","max_select_alias_name", - new query_many(undef, - "select b as %s from crash_me",undef, - undef, $max_name_length)); -} - -find_limit("table alias name length","max_table_alias_name", - new query_many(undef, - "select %s.b from crash_me %s", - undef, - undef, $max_name_length)); - -$end_drop_keyword = "drop index %i" if (!$end_drop_keyword); -$end_drop=$end_drop_keyword; -$end_drop =~ s/%i/crash_q%s/; -$end_drop =~ s/%t/crash_me/; - -if ($limits{'create_index'} ne 'no') -{ - find_limit("index name length","max_index_name", - new query_many(["create index crash_q%s on crash_me (a)"], - undef,undef, - [$end_drop], - $max_name_length,7)); -} - -find_limit("max char() size","max_char_size", - new query_many(["create table crash_q (q char(%d))", - "insert into crash_q values ('%s')"], - "select * from crash_q","%s", - ["drop table crash_q $drop_attr"], - min($max_string_size,$limits{'query_size'}))); - -if ($limits{'type_sql_varchar(1_arg)'} eq 'yes') -{ - find_limit("max varchar() size","max_varchar_size", - new query_many(["create table crash_q (q varchar(%d))", - "insert into crash_q values ('%s')"], - "select * from crash_q","%s", - ["drop table crash_q $drop_attr"], - min($max_string_size,$limits{'query_size'}))); -} - -$found=undef; -foreach $type (('mediumtext','text','text()','blob','long')) -{ - if ($limits{"type_extra_$type"} eq 'yes') - { - $found=$type; - last; - } -} -if (defined($found)) -{ - $found =~ s/\(\)/\(%d\)/; - find_limit("max text or blob size","max_text_size", - new query_many(["create table crash_q (q $found)", - "insert into crash_q values ('%s')"], - "select * from crash_q","%s", - ["drop table crash_q $drop_attr"], - min($max_string_size,$limits{'query_size'}-30))); - -} - -$tmp=new query_repeat([],"create table crash_q (a integer","","", - ",a%d integer","",")",["drop table crash_q $drop_attr"], - $max_columns); -$tmp->{'offset'}=1; -find_limit("Columns in table","max_columns",$tmp); - -# Make a field definition to be used when testing keys - -$key_definitions="q0 integer not null"; -$key_fields="q0"; -for ($i=1; $i < min($limits{'max_columns'},$max_keys) ; $i++) -{ - $key_definitions.=",q$i integer not null"; - $key_fields.=",q$i"; -} -$key_values="1," x $i; -chop($key_values); - -if ($limits{'unique_in_create'} eq 'yes') -{ - find_limit("unique indexes","max_unique_index", - new query_table("create table crash_q (q integer", - ",q%d integer not null,unique (q%d)",")", - ["insert into crash_q (q,%f) values (1,%v)"], - "select q from crash_q",1, - "drop table crash_q $drop_attr", - $max_keys,0)); - - find_limit("index parts","max_index_parts", - new query_table("create table crash_q ". - "($key_definitions,unique (q0", - ",q%d","))", - ["insert into crash_q ($key_fields) values ($key_values)"], - "select q0 from crash_q",1, - "drop table crash_q $drop_attr", - $max_keys,1)); - - find_limit("max index part length","max_index_part_length", - new query_many(["create table crash_q (q char(%d) not null,". - "unique(q))", - "insert into crash_q (q) values ('%s')"], - "select q from crash_q","%s", - ["drop table crash_q $drop_attr"], - $limits{'max_char_size'},0)); - - if ($limits{'type_sql_varchar(1_arg)'} eq 'yes') - { - find_limit("index varchar part length","max_index_varchar_part_length", - new query_many(["create table crash_q (q varchar(%d) not null,". - "unique(q))", - "insert into crash_q (q) values ('%s')"], - "select q from crash_q","%s", - ["drop table crash_q $drop_attr"], - $limits{'max_varchar_size'},0)); - } -} - - -if ($limits{'create_index'} ne 'no') -{ - if ($limits{'create_index'} eq 'ignored' || - $limits{'unique_in_create'} eq 'yes') - { # This should be true - add_log('max_index', - " max_unique_index=$limits{'max_unique_index'} ,". - "so max_index must be same"); - save_config_data('max_index',$limits{'max_unique_index'},"max index"); - print "indexes: $limits{'max_index'}\n"; - } - else - { - if (!defined($limits{'max_index'})) - { - safe_query_l('max_index',"create table crash_q ($key_definitions)"); - for ($i=1; $i <= min($limits{'max_columns'},$max_keys) ; $i++) - { - last if (!safe_query_l('max_index', - "create index crash_q$i on crash_q (q$i)")); - } - save_config_data('max_index',$i == $max_keys ? $max_keys : $i, - "max index"); - while ( --$i > 0) - { - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_q$i/; - $end_drop =~ s/%t/crash_q/; - assert($end_drop); - } - assert("drop table crash_q $drop_attr"); - } - print "indexs: $limits{'max_index'}\n"; - if (!defined($limits{'max_unique_index'})) - { - safe_query_l('max_unique_index', - "create table crash_q ($key_definitions)"); - for ($i=0; $i < min($limits{'max_columns'},$max_keys) ; $i++) - { - last if (!safe_query_l('max_unique_index', - "create unique index crash_q$i on crash_q (q$i)")); - } - save_config_data('max_unique_index',$i == $max_keys ? $max_keys : $i, - "max unique index"); - while ( --$i >= 0) - { - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_q$i/; - $end_drop =~ s/%t/crash_q/; - assert($end_drop); - } - assert("drop table crash_q $drop_attr"); - } - print "unique indexes: $limits{'max_unique_index'}\n"; - if (!defined($limits{'max_index_parts'})) - { - safe_query_l('max_index_parts', - "create table crash_q ($key_definitions)"); - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_q1%d/; - $end_drop =~ s/%t/crash_q/; - find_limit("index parts","max_index_parts", - new query_table("create index crash_q1%d on crash_q (q0", - ",q%d",")", - [], - undef,undef, - $end_drop, - $max_keys,1)); - assert("drop table crash_q $drop_attr"); - } - else - { - print "index parts: $limits{'max_index_parts'}\n"; - } - $end_drop=$end_drop_keyword; - $end_drop =~ s/%i/crash_q2%d/; - $end_drop =~ s/%t/crash_me/; - - find_limit("index part length","max_index_part_length", - new query_many(["create table crash_q (q char(%d))", - "create index crash_q2%d on crash_q (q)", - "insert into crash_q values('%s')"], - "select q from crash_q", - "%s", - [ $end_drop, - "drop table crash_q $drop_attr"], - min($limits{'max_char_size'},"+8192"))); - } -} - -find_limit("index length","max_index_length", - new query_index_length("create table crash_q ", - "drop table crash_q $drop_attr", - $max_key_length)); - -find_limit("max table row length (without blobs)","max_row_length", - new query_row_length("crash_q ", - "not null", - "drop table crash_q $drop_attr", - min($max_row_length, - $limits{'max_columns'}* - min($limits{'max_char_size'},255)))); - -find_limit("table row length with nulls (without blobs)", - "max_row_length_with_null", - new query_row_length("crash_q ", - "", - "drop table crash_q $drop_attr", - $limits{'max_row_length'}*2)); - -find_limit("number of columns in order by","columns_in_order_by", - new query_many(["create table crash_q (%F)", - "insert into crash_q values(%v)", - "insert into crash_q values(%v)"], - "select * from crash_q order by %f", - undef(), - ["drop table crash_q $drop_attr"], - $max_order_by)); - -find_limit("number of columns in group by","columns_in_group_by", - new query_many(["create table crash_q (%F)", - "insert into crash_q values(%v)", - "insert into crash_q values(%v)"], - "select %f from crash_q group by %f", - undef(), - ["drop table crash_q $drop_attr"], - $max_order_by)); - - - -# Safe arithmetic test - -$prompt="safe decimal arithmetic"; -$key="safe_decimal_arithmetic"; -if (!defined($limits{$key})) -{ - print "$prompt="; - save_incomplete($key,$prompt); - if (!safe_query_l($key,$server->create("crash_me_a", - ["a decimal(10,2)","b decimal(10,2)"]))) - { - print DBI->errstr(); - die "Can't create table 'crash_me_a' $DBI::errstr\n"; - }; - - if (!safe_query_l($key, - ["insert into crash_me_a (a,b) values (11.4,18.9)"])) - { - die "Can't insert into table 'crash_me_a' a record: $DBI::errstr\n"; - }; - - $arithmetic_safe = 'no'; - $arithmetic_safe = 'yes' - if ( (safe_query_result_l($key, - 'select count(*) from crash_me_a where a+b=30.3',1,0) == 0) - and (safe_query_result_l($key, - 'select count(*) from crash_me_a where a+b-30.3 = 0',1,0) == 0) - and (safe_query_result_l($key, - 'select count(*) from crash_me_a where a+b-30.3 < 0',0,0) == 0) - and (safe_query_result_l($key, - 'select count(*) from crash_me_a where a+b-30.3 > 0',0,0) == 0)); - save_config_data($key,$arithmetic_safe,$prompt); - print "$arithmetic_safe\n"; - assert("drop table crash_me_a $drop_attr"); -} - else -{ - print "$prompt=$limits{$key} (cached)\n"; -} - -# Check where is null values in sorted recordset -if (!safe_query($server->create("crash_me_n",["i integer","r integer"]))) - { - print DBI->errstr(); - die "Can't create table 'crash_me_n' $DBI::errstr\n"; - }; - -safe_query_l("position_of_null",["insert into crash_me_n (i) values(1)", -"insert into crash_me_n values(2,2)", -"insert into crash_me_n values(3,3)", -"insert into crash_me_n values(4,4)", -"insert into crash_me_n (i) values(5)"]); - -$key = "position_of_null"; -$prompt ="Where is null values in sorted recordset"; -if (!defined($limits{$key})) -{ - save_incomplete($key,$prompt); - print "$prompt="; - $sth=$dbh->prepare("select r from crash_me_n order by r "); - $sth->execute; - add_log($key,"< select r from crash_me_n order by r "); - $limit= detect_null_position($key,$sth); - $sth->finish; - print "$limit\n"; - save_config_data($key,$limit,$prompt); -} else { - print "$prompt=$limits{$key} (cache)\n"; -} - -$key = "position_of_null_desc"; -$prompt ="Where is null values in sorted recordset (DESC)"; -if (!defined($limits{$key})) -{ - save_incomplete($key,$prompt); - print "$prompt="; - $sth=$dbh->prepare("select r from crash_me_n order by r desc"); - $sth->execute; - add_log($key,"< select r from crash_me_n order by r desc"); - $limit= detect_null_position($key,$sth); - $sth->finish; - print "$limit\n"; - save_config_data($key,$limit,$prompt); -} else { - print "$prompt=$limits{$key} (cache)\n"; -} - - -assert("drop table crash_me_n $drop_attr"); - - - -$key = 'sorted_group_by'; -$prompt = 'Group by always sorted'; -if (!defined($limits{$key})) -{ - save_incomplete($key,$prompt); - print "$prompt="; - safe_query_l($key,[ - "create table crash_me_t1 (a int not null, b int not null)", - "insert into crash_me_t1 values (1,1)", - "insert into crash_me_t1 values (1,2)", - "insert into crash_me_t1 values (3,1)", - "insert into crash_me_t1 values (3,2)", - "insert into crash_me_t1 values (2,2)", - "insert into crash_me_t1 values (2,1)", - "create table crash_me_t2 (a int not null, b int not null)", - "create index crash_me_t2_ind on crash_me_t2 (a)", - "insert into crash_me_t2 values (1,3)", - "insert into crash_me_t2 values (3,1)", - "insert into crash_me_t2 values (2,2)", - "insert into crash_me_t2 values (1,1)"]); - - my $bigqry = "select crash_me_t1.a,crash_me_t2.b from ". - "crash_me_t1,crash_me_t2 where crash_me_t1.a=crash_me_t2.a ". - "group by crash_me_t1.a,crash_me_t2.b"; - - my $limit='no'; - my $rs = get_recordset($key,$bigqry); - print_recordset($key,$rs); - if ( defined ($rs)) { - if (compare_recordset($key,$rs,[[1,1],[1,3],[2,2],[3,1]]) eq 0) - { - $limit='yes' - } - } else { - add_log($key,"error: ".$DBI::errstr); - } - - print "$limit\n"; - safe_query_l($key,["drop table crash_me_t1", - "drop table crash_me_t2"]); - save_config_data($key,$limit,$prompt); - -} else { - print "$prompt=$limits{$key} (cashed)\n"; -} - - -# -# End of test -# - -$dbh->do("drop table crash_me $drop_attr"); # Remove temporary table - -print "crash-me safe: $limits{'crash_me_safe'}\n"; -print "reconnected $reconnect_count times\n"; - -$dbh->disconnect || warn $dbh->errstr; -save_all_config_data(); -exit 0; - -# End of test -# - -$dbh->do("drop table crash_me $drop_attr"); # Remove temporary table - -print "crash-me safe: $limits{'crash_me_safe'}\n"; -print "reconnected $reconnect_count times\n"; - -$dbh->disconnect || warn $dbh->errstr; -save_all_config_data(); -exit 0; - -# Check where is nulls in the sorted result (for) -# it expects exactly 5 rows in the result - -sub detect_null_position -{ - my $key = shift; - my $sth = shift; - my ($z,$r1,$r2,$r3,$r4,$r5); - $r1 = $sth->fetchrow_array; add_log($key,"> $r1"); - $r2 = $sth->fetchrow_array; add_log($key,"> $r2"); - $r3 = $sth->fetchrow_array; add_log($key,"> $r3"); - $r4 = $sth->fetchrow_array; add_log($key,"> $r4"); - $r5 = $sth->fetchrow_array; add_log($key,"> $r5"); - return "first" if ( !defined($r1) && !defined($r2) && defined($r3)); - return "last" if ( !defined($r5) && !defined($r4) && defined($r3)); - return "random"; -} - -sub check_parenthesis { - my $prefix=shift; - my $fn=shift; - my $result='no'; - my $param_name=$prefix.lc($fn); - my $r; - - save_incomplete($param_name,$fn); - $r = safe_query("select $fn $end_query"); - add_log($param_name,$safe_query_log); - if ($r == 1) - { - $result="yes"; - } - else{ - $r = safe_query("select $fn() $end_query"); - add_log($param_name,$safe_query_log); - if ( $r == 1) - { - $result="with_parenthesis"; - } - } - - save_config_data($param_name,$result,$fn); -} - -sub check_constraint { - my $prompt = shift; - my $key = shift; - my $create = shift; - my $check = shift; - my $drop = shift; - save_incomplete($key,$prompt); - print "$prompt="; - my $res = 'no'; - my $t; - $t=safe_query($create); - add_log($key,$safe_query_log); - if ( $t == 1) - { - $res='yes'; - $t= safe_query($check); - add_log($key,$safe_query_log); - if ($t == 1) - { - $res='syntax only'; - } - } - safe_query($drop); - add_log($key,$safe_query_log); - - save_config_data($key,$res,$prompt); - print "$res\n"; -} - -sub make_time_r { - my $hour=shift; - my $minute=shift; - my $second=shift; - $_ = $limits{'time_format_inresult'}; - return sprintf "%02d:%02d:%02d", ($hour%24),$minute,$second if (/^iso$/); - return sprintf "%02d.%02d.%02d", ($hour%24),$minute,$second if (/^euro/); - return sprintf "%02d:%02d %s", - ($hour >= 13? ($hour-12) : $hour),$minute,($hour >=13 ? 'PM':'AM') - if (/^usa/); - return sprintf "%02d%02d%02d", ($hour%24),$minute,$second if (/^HHMMSS/); - return sprintf "%04d%02d%02d", ($hour%24),$minute,$second if (/^HHHHMMSS/); - return "UNKNOWN FORMAT"; -} - -sub make_time { - my $hour=shift; - my $minute=shift; - my $second=shift; - return sprintf "%02d:%02d:%02d", ($hour%24),$minute,$second - if ($limits{'time_format_ISO'} eq "yes"); - return sprintf "%02d.%02d.%02d", ($hour%24),$minute,$second - if ($limits{'time_format_EUR'} eq "yes"); - return sprintf "%02d:%02d %s", - ($hour >= 13? ($hour-12) : $hour),$minute,($hour >=13 ? 'PM':'AM') - if ($limits{'time_format_USA'} eq "yes"); - return sprintf "%02d%02d%02d", ($hour%24),$minute,$second - if ($limits{'time_format_HHMMSS'} eq "yes"); - return sprintf "%04d%02d%02d", ($hour%24),$minute,$second - if ($limits{'time_format_HHHHMMSS'} eq "yes"); - return "UNKNOWN FORMAT"; -} - -sub make_date_r { - my $year=shift; - my $month=shift; - my $day=shift; - $_ = $limits{'date_format_inresult'}; - return sprintf "%02d-%02d-%02d", ($year%100),$month,$day if (/^short iso$/); - return sprintf "%04d-%02d-%02d", $year,$month,$day if (/^iso/); - return sprintf "%02d.%02d.%02d", $day,$month,($year%100) if (/^short euro/); - return sprintf "%02d.%02d.%04d", $day,$month,$year if (/^euro/); - return sprintf "%02d/%02d/%02d", $month,$day,($year%100) if (/^short usa/); - return sprintf "%02d/%02d/%04d", $month,$day,$year if (/^usa/); - return sprintf "%04d%02d%02d", $year,$month,$day if (/^YYYYMMDD/); - return "UNKNOWN FORMAT"; -} - - -sub make_date { - my $year=shift; - my $month=shift; - my $day=shift; - return sprintf "'%04d-%02d-%02d'", $year,$month,$day - if ($limits{'date_format_ISO'} eq yes); - return sprintf "DATE '%04d-%02d-%02d'", $year,$month,$day - if ($limits{'date_format_ISO_with_date'} eq yes); - return sprintf "'%02d.%02d.%04d'", $day,$month,$year - if ($limits{'date_format_EUR'} eq 'yes'); - return sprintf "DATE '%02d.%02d.%04d'", $day,$month,$year - if ($limits{'date_format_EUR_with_date'} eq 'yes'); - return sprintf "'%02d/%02d/%04d'", $month,$day,$year - if ($limits{'date_format_USA'} eq 'yes'); - return sprintf "DATE '%02d/%02d/%04d'", $month,$day,$year - if ($limits{'date_format_USA_with_date'} eq 'yes'); - return sprintf "'%04d%02d%02d'", $year,$month,$day - if ($limits{'date_format_YYYYMMDD'} eq 'yes'); - return sprintf "DATE '%04d%02d%02d'", $year,$month,$day - if ($limits{'date_format_YYYYMMDD_with_date'} eq 'yes'); - return "UNKNOWN FORMAT"; -} - - -sub print_recordset{ - my ($key,$recset) = @_; - my $rec; - foreach $rec (@$recset) - { - add_log($key, " > ".join(',', map(repr($_), @$rec))); - } -} - -# -# read result recordset from sql server. -# returns arrayref to (arrayref to) values -# or undef (in case of sql errors) -# -sub get_recordset{ - my ($key,$query) = @_; - add_log($key, "< $query"); - return $dbh->selectall_arrayref($query); -} - -# function for comparing recordset (that was returned by get_recordset) -# and arrayref of (arrayref of) values. -# -# returns : zero if recordset equal that array, 1 if it doesn't equal -# -# parameters: -# $key - current operation (for logging) -# $recset - recordset -# $mustbe - array of values that we expect -# -# example: $a=get_recordset('some_parameter','select a,b from c'); -# if (compare_recordset('some_parameter',$a,[[1,1],[1,2],[1,3]]) neq 0) -# { -# print "unexpected result\n"; -# } ; -# -sub compare_recordset { - my ($key,$recset,$mustbe) = @_; - my $rec,$recno,$fld,$fldno,$fcount; - add_log($key,"\n Check recordset:"); - $recno=0; - foreach $rec (@$recset) - { - add_log($key," " . join(',', map(repr($_),@$rec)) . " expected: " . - join(',', map(repr($_), @{$mustbe->[$recno]} ) )); - $fcount = @$rec; - $fcount--; - foreach $fldno (0 .. $fcount ) - { - if ($mustbe->[$recno][$fldno] ne $rec->[$fldno]) - { - add_log($key," Recordset doesn't correspond with template"); - return 1; - }; - } - $recno++; - } - add_log($key," Recordset corresponds with template"); - return 0; -} - -# -# converts inner perl value to printable representation -# for example: undef maps to 'NULL', -# string -> 'string' -# int -> int -# -sub repr { - my $s = shift; - return "'$s'"if ($s =~ /\D/); - return 'NULL'if ( not defined($s)); - return $s; -} - - -sub version -{ - print "$0 Ver $version\n"; -} - - -sub usage -{ - version(); - print <<EOF; - -This program tries to find all limits and capabilities for a SQL -server. As it will use the server in some 'unexpected' ways, one -shouldn\'t have anything important running on it at the same time this -program runs! There is a slight chance that something unexpected may -happen.... - -As all used queries are legal according to some SQL standard. any -reasonable SQL server should be able to run this test without any -problems. - -All questions is cached in $opt_dir/'server_name'[-suffix].cfg that -future runs will use limits found in previous runs. Remove this file -if you want to find the current limits for your version of the -database server. - -This program uses some table names while testing things. If you have any -tables with the name of 'crash_me' or 'crash_qxxxx' where 'x' is a number, -they will be deleted by this test! - -$0 takes the following options: - ---help or --Information - Shows this help - ---batch-mode - Don\'t ask any questions, quit on errors. - ---config-file='filename' - Read limit results from specific file - ---comment='some comment' - Add this comment to the crash-me limit file - ---check-server - Do a new connection to the server every time crash-me checks if the server - is alive. This can help in cases where the server starts returning wrong - data because of an earlier select. - ---database='database' (Default $opt_database) - Create test tables in this database. - ---dir='limits' - Save crash-me output in this directory - ---debug - Lots of printing to help debugging if something goes wrong. - ---fix-limit-file - Reformat the crash-me limit file. crash-me is not run! - ---force - Start test at once, without a warning screen and without questions. - This is a option for the very brave. - Use this in your cron scripts to test your database every night. - ---log-all-queries - Prints all queries that are executed. Mostly used for debugging crash-me. - ---log-queries-to-file='filename' - Log full queries to file. - ---host='hostname' (Default $opt_host) - Run tests on this host. - ---password='password' - Password for the current user. - ---restart - Save states during each limit tests. This will make it possible to continue - by restarting with the same options if there is some bug in the DBI or - DBD driver that caused $0 to die! - ---server='server name' (Default $opt_server) - Run the test on the given server. - Known servers names are: Access, Adabas, AdabasD, Empress, Oracle, - Informix, DB2, Mimer, mSQL, MS-SQL, MySQL, Pg, Solid or Sybase. - For others $0 can\'t report the server version. - ---suffix='suffix' (Default '') - Add suffix to the output filename. For instance if you run crash-me like - "crash-me --suffix="myisam", - then output filename will look "mysql-myisam.cfg". - ---user='user_name' - User name to log into the SQL server. - ---db-start-cmd='command to restart server' - Automaticly restarts server with this command if the database server dies. - ---sleep='time in seconds' (Default $opt_sleep) - Wait this long before restarting server. - ---verbose ---noverbose - Log into the result file queries performed for determination parameter value - -EOF - exit(0); -} - - -sub server_info -{ - my ($ok,$tmp); - $ok=0; - print "\nNOTE: You should be familiar with '$0 --help' before continuing!\n\n"; - if (lc($opt_server) eq "mysql") - { - $ok=1; - print <<EOF; -This test should not crash MySQL if it was distributed together with the -running MySQL version. -If this is the case you can probably continue without having to worry about -destroying something. -EOF - } - elsif (lc($opt_server) eq "msql") - { - print <<EOF; -This test will take down mSQL repeatedly while finding limits. -To make this test easier, start mSQL in another terminal with something like: - -while (true); do /usr/local/mSQL/bin/msql2d ; done - -You should be sure that no one is doing anything important with mSQL and that -you have privileges to restart it! -It may take awhile to determinate the number of joinable tables, so prepare to -wait! -EOF - } - elsif (lc($opt_server) eq "solid") - { - print <<EOF; -This test will take down Solid server repeatedly while finding limits. -You should be sure that no one is doing anything important with Solid -and that you have privileges to restart it! - -If you are running Solid without logging and/or backup YOU WILL LOSE! -Solid does not write data from the cache often enough. So if you continue -you may lose tables and data that you entered hours ago! - -Solid will also take a lot of memory running this test. You will nead -at least 234M free! - -When doing the connect test Solid server or the perl api will hang when -freeing connections. Kill this program and restart it to continue with the -test. You don\'t have to use --restart for this case. -EOF - if (!$opt_restart) - { - print "\nWhen DBI/Solid dies you should run this program repeatedly\n"; - print "with --restart until all tests have completed\n"; - } - } - elsif (lc($opt_server) eq "pg") - { - print <<EOF; -This test will crash postgreSQL when calculating the number of joinable tables! -You should be sure that no one is doing anything important with postgreSQL -and that you have privileges to restart it! -EOF - } - else - { - print <<EOF; -This test may crash $opt_server repeatedly while finding limits! -You should be sure that no one is doing anything important with $opt_server -and that you have privileges to restart it! -EOF - } - print <<EOF; - -Some of the tests you are about to execute may require a lot of -memory. Your tests WILL adversely affect system performance. It\'s -not uncommon that either this crash-me test program, or the actual -database back-end, will DIE with an out-of-memory error. So might -any other program on your system if it requests more memory at the -wrong time. - -Note also that while crash-me tries to find limits for the database server -it will make a lot of queries that can\'t be categorized as \'normal\'. It\'s -not unlikely that crash-me finds some limit bug in your server so if you -run this test you have to be prepared that your server may die during it! - -We, the creators of this utility, are not responsible in any way if your -database server unexpectedly crashes while this program tries to find the -limitations of your server. By accepting the following question with \'yes\', -you agree to the above! - -You have been warned! - -EOF - - # - # No default reply here so no one can blame us for starting the test - # automaticly. - # - for (;;) - { - print "Start test (yes/no) ? "; - $tmp=<STDIN>; chomp($tmp); $tmp=lc($tmp); - last if ($tmp =~ /^yes$/i); - exit 1 if ($tmp =~ /^n/i); - print "\n"; - } -} - -sub machine -{ - my @name = POSIX::uname(); - my $name= $name[0] . " " . $name[2] . " " . $name[4]; - return $name; -} - - -# -# Help functions that we need -# - -sub safe_connect -{ - my ($object)=@_; - my ($dbh,$tmp); - - for (;;) - { - if (($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password, - { PrintError => 0, AutoCommit => 1}))) - { - $dbh->{LongReadLen}= 16000000; # Set max retrieval buffer - return $dbh; - } - print "Error: $DBI::errstr; $server->{'data_source'} ". - " - '$opt_user' - '$opt_password'\n"; - print "I got the above error when connecting to $opt_server\n"; - if (defined($object) && defined($object->{'limit'})) - { - print "This check was done with limit: $object->{'limit'}.". - "\nNext check will be done with a smaller limit!\n"; - $object=undef(); - } - save_config_data('crash_me_safe','no',"crash me safe"); - if ($opt_db_start_cmd) - { - print "Restarting the db server with:\n'$opt_db_start_cmd'\n"; - system("$opt_db_start_cmd"); - print "Waiting $opt_sleep seconds so the server can initialize\n"; - sleep $opt_sleep; - } - else - { - exit(1) if ($opt_batch_mode); - print "Can you check/restart it so I can continue testing?\n"; - for (;;) - { - print "Continue test (yes/no) ? [yes] "; - $tmp=<STDIN>; chomp($tmp); $tmp=lc($tmp); - $tmp = "yes" if ($tmp eq ""); - last if (index("yes",$tmp) >= 0); - exit 1 if (index("no",$tmp) >= 0); - print "\n"; - } - } - } -} - -# -# Test connecting a couple of times before giving an error -# This is needed to get the server time to free old connections -# after the connect test -# - -sub retry_connect -{ - my ($dbh, $i); - for ($i=0 ; $i < 10 ; $i++) - { - if (($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password, - { PrintError => 0, AutoCommit => 1}))) - { - $dbh->{LongReadLen}= 16000000; # Set max retrieval buffer - return $dbh; - } - sleep(1); - } - return safe_connect(); -} - -# -# Check if the server is up and running. If not, ask the user to restart it -# - -sub check_connect -{ - my ($object)=@_; - my ($sth); - print "Checking connection\n" if ($opt_log_all_queries); - # The following line will not work properly with interbase - if ($opt_check_server && defined($check_connect) && $dbh->{AutoCommit} != 0) - { - - $dbh->disconnect; - $dbh=safe_connect($object); - return; - } - return if (defined($check_connect) && defined($dbh->do($check_connect))); - $dbh->disconnect || warn $dbh->errstr; - print "\nreconnecting\n" if ($opt_debug); - $reconnect_count++; - undef($dbh); - $dbh=safe_connect($object); -} - -# -# print query if debugging -# -sub repr_query { - my $query=shift; - if (length($query) > 130) - { - $query=substr($query,0,120) . "...(" . (length($query)-120) . ")"; - } - return $query; -} - -sub print_query -{ - my ($query)=@_; - $last_error=$DBI::errstr; - if ($opt_debug) - { - if (length($query) > 130) - { - $query=substr($query,0,120) . "...(" . (length($query)-120) . ")"; - } - printf "\nGot error from query: '%s'\n%s\n",$query,$DBI::errstr; - } -} - -# -# Do one or many queries. Return 1 if all was ok -# Note that all rows are executed -# (to ensure that we execute drop table commands) -# - -sub safe_query_l { - my $key = shift; - my $q = shift; - my $r = safe_query($q); - add_log($key,$safe_query_log); - return $r; -} - -sub safe_query -{ - my($queries)=@_; - my($query,$ok,$retry_ok,$retry,@tmp,$sth); - $safe_query_log=""; - $ok=1; - if (ref($queries) ne "ARRAY") - { - push(@tmp,$queries); - $queries= \@tmp; - } - foreach $query (@$queries) - { - printf "query1: %-80.80s ...(%d - %d)\n",$query, - length($query),$retry_limit if ($opt_log_all_queries); - print LOG "$query;\n" if ($opt_log); - $safe_query_log .= "< $query\n"; - if (length($query) > $query_size) - { - $ok=0; - $safe_query_log .= "Query is too long\n"; - next; - } - - $retry_ok=0; - for ($retry=0; $retry < $retry_limit ; $retry++) - { - if (! ($sth=$dbh->prepare($query))) - { - print_query($query); - $safe_query_log .= "> couldn't prepare:". $dbh->errstr. "\n"; - $retry=100 if (!$server->abort_if_fatal_error()); - # Force a reconnect because of Access drop table bug! - if ($retry == $retry_limit-2) - { - print "Forcing disconnect to retry query\n" if ($opt_debug); - $dbh->disconnect || warn $dbh->errstr; - } - check_connect(); # Check that server is still up - } - else - { - if (!$sth->execute()) - { - print_query($query); - $safe_query_log .= "> execute error:". $dbh->errstr. "\n"; - $retry=100 if (!$server->abort_if_fatal_error()); - # Force a reconnect because of Access drop table bug! - if ($retry == $retry_limit-2) - { - print "Forcing disconnect to retry query\n" if ($opt_debug); - $dbh->disconnect || warn $dbh->errstr; - } - check_connect(); # Check that server is still up - } - else - { - $retry = $retry_limit; - $retry_ok = 1; - $safe_query_log .= "> OK\n"; - } - $sth->finish; - } - } - $ok=0 if (!$retry_ok); - if ($query =~ /create/i && $server->reconnect_on_errors()) - { - print "Forcing disconnect to retry query\n" if ($opt_debug); - $dbh->disconnect || warn $dbh->errstr; - $dbh=safe_connect(); - } - } - return $ok; -} - -sub check_reserved_words -{ - my ($dbh)= @_; - - my $answer, $prompt, $config, $keyword_type; - - my @keywords_ext = ( "ansi-92/99", "ansi92", "ansi99", "extra"); - - my %reserved_words = ( - 'ABSOLUTE' => 0, 'ACTION' => 0, 'ADD' => 0, - 'AFTER' => 0, 'ALIAS' => 0, 'ALL' => 0, - 'ALLOCATE' => 0, 'ALTER' => 0, 'AND' => 0, - 'ANY' => 0, 'ARE' => 0, 'AS' => 0, - 'ASC' => 0, 'ASSERTION' => 0, 'AT' => 0, - 'AUTHORIZATION' => 0, 'BEFORE' => 0, 'BEGIN' => 0, - 'BIT' => 0, 'BOOLEAN' => 0, 'BOTH' => 0, - 'BREADTH' => 0, 'BY' => 0, 'CALL' => 0, - 'CASCADE' => 0, 'CASCADED' => 0, 'CASE' => 0, - 'CAST' => 0, 'CATALOG' => 0, 'CHAR' => 0, - 'CHARACTER' => 0, 'CHECK' => 0, 'CLOSE' => 0, - 'COLLATE' => 0, 'COLLATION' => 0, 'COLUMN' => 0, - 'COMMIT' => 0, 'COMPLETION' => 0, 'CONNECT' => 0, - 'CONNECTION' => 0, 'CONSTRAINT' => 0, 'CONSTRAINTS' => 0, - 'CONTINUE' => 0, 'CORRESPONDING' => 0, 'CREATE' => 0, - 'CROSS' => 0, 'CURRENT' => 0, 'CURRENT_DATE' => 0, - 'CURRENT_TIME' => 0,'CURRENT_TIMESTAMP' => 0, 'CURRENT_USER' => 0, - 'CURSOR' => 0, 'CYCLE' => 0, 'DATA' => 0, - 'DATE' => 0, 'DAY' => 0, 'DEALLOCATE' => 0, - 'DEC' => 0, 'DECIMAL' => 0, 'DECLARE' => 0, - 'DEFAULT' => 0, 'DEFERRABLE' => 0, 'DEFERRED' => 0, - 'DELETE' => 0, 'DEPTH' => 0, 'DESC' => 0, - 'DESCRIBE' => 0, 'DESCRIPTOR' => 0, 'DIAGNOSTICS' => 0, - 'DICTIONARY' => 0, 'DISCONNECT' => 0, 'DISTINCT' => 0, - 'DOMAIN' => 0, 'DOUBLE' => 0, 'DROP' => 0, - 'EACH' => 0, 'ELSE' => 0, 'ELSEIF' => 0, - 'END' => 0, 'END-EXEC' => 0, 'EQUALS' => 0, - 'ESCAPE' => 0, 'EXCEPT' => 0, 'EXCEPTION' => 0, - 'EXEC' => 0, 'EXECUTE' => 0, 'EXTERNAL' => 0, - 'FALSE' => 0, 'FETCH' => 0, 'FIRST' => 0, - 'FLOAT' => 0, 'FOR' => 0, 'FOREIGN' => 0, - 'FOUND' => 0, 'FROM' => 0, 'FULL' => 0, - 'GENERAL' => 0, 'GET' => 0, 'GLOBAL' => 0, - 'GO' => 0, 'GOTO' => 0, 'GRANT' => 0, - 'GROUP' => 0, 'HAVING' => 0, 'HOUR' => 0, - 'IDENTITY' => 0, 'IF' => 0, 'IGNORE' => 0, - 'IMMEDIATE' => 0, 'IN' => 0, 'INDICATOR' => 0, - 'INITIALLY' => 0, 'INNER' => 0, 'INPUT' => 0, - 'INSERT' => 0, 'INT' => 0, 'INTEGER' => 0, - 'INTERSECT' => 0, 'INTERVAL' => 0, 'INTO' => 0, - 'IS' => 0, 'ISOLATION' => 0, 'JOIN' => 0, - 'KEY' => 0, 'LANGUAGE' => 0, 'LAST' => 0, - 'LEADING' => 0, 'LEAVE' => 0, 'LEFT' => 0, - 'LESS' => 0, 'LEVEL' => 0, 'LIKE' => 0, - 'LIMIT' => 0, 'LOCAL' => 0, 'LOOP' => 0, - 'MATCH' => 0, 'MINUTE' => 0, 'MODIFY' => 0, - 'MODULE' => 0, 'MONTH' => 0, 'NAMES' => 0, - 'NATIONAL' => 0, 'NATURAL' => 0, 'NCHAR' => 0, - 'NEW' => 0, 'NEXT' => 0, 'NO' => 0, - 'NONE' => 0, 'NOT' => 0, 'NULL' => 0, - 'NUMERIC' => 0, 'OBJECT' => 0, 'OF' => 0, - 'OFF' => 0, 'OLD' => 0, 'ON' => 0, - 'ONLY' => 0, 'OPEN' => 0, 'OPERATION' => 0, - 'OPTION' => 0, 'OR' => 0, 'ORDER' => 0, - 'OUTER' => 0, 'OUTPUT' => 0, 'PAD' => 0, - 'PARAMETERS' => 0, 'PARTIAL' => 0, 'PRECISION' => 0, - 'PREORDER' => 0, 'PREPARE' => 0, 'PRESERVE' => 0, - 'PRIMARY' => 0, 'PRIOR' => 0, 'PRIVILEGES' => 0, - 'PROCEDURE' => 0, 'PUBLIC' => 0, 'READ' => 0, - 'REAL' => 0, 'RECURSIVE' => 0, 'REF' => 0, - 'REFERENCES' => 0, 'REFERENCING' => 0, 'RELATIVE' => 0, - 'RESIGNAL' => 0, 'RESTRICT' => 0, 'RETURN' => 0, - 'RETURNS' => 0, 'REVOKE' => 0, 'RIGHT' => 0, - 'ROLE' => 0, 'ROLLBACK' => 0, 'ROUTINE' => 0, - 'ROW' => 0, 'ROWS' => 0, 'SAVEPOINT' => 0, - 'SCHEMA' => 0, 'SCROLL' => 0, 'SEARCH' => 0, - 'SECOND' => 0, 'SECTION' => 0, 'SELECT' => 0, - 'SEQUENCE' => 0, 'SESSION' => 0, 'SESSION_USER' => 0, - 'SET' => 0, 'SIGNAL' => 0, 'SIZE' => 0, - 'SMALLINT' => 0, 'SOME' => 0, 'SPACE' => 0, - 'SQL' => 0, 'SQLEXCEPTION' => 0, 'SQLSTATE' => 0, - 'SQLWARNING' => 0, 'STRUCTURE' => 0, 'SYSTEM_USER' => 0, - 'TABLE' => 0, 'TEMPORARY' => 0, 'THEN' => 0, - 'TIME' => 0, 'TIMESTAMP' => 0, 'TIMEZONE_HOUR' => 0, - 'TIMEZONE_MINUTE' => 0, 'TO' => 0, 'TRAILING' => 0, - 'TRANSACTION' => 0, 'TRANSLATION' => 0, 'TRIGGER' => 0, - 'TRUE' => 0, 'UNDER' => 0, 'UNION' => 0, - 'UNIQUE' => 0, 'UNKNOWN' => 0, 'UPDATE' => 0, - 'USAGE' => 0, 'USER' => 0, 'USING' => 0, - 'VALUE' => 0, 'VALUES' => 0, 'VARCHAR' => 0, - 'VARIABLE' => 0, 'VARYING' => 0, 'VIEW' => 0, - 'WHEN' => 0, 'WHENEVER' => 0, 'WHERE' => 0, - 'WHILE' => 0, 'WITH' => 0, 'WITHOUT' => 0, - 'WORK' => 0, 'WRITE' => 0, 'YEAR' => 0, - 'ZONE' => 0, - - 'ASYNC' => 1, 'AVG' => 1, 'BETWEEN' => 1, - 'BIT_LENGTH' => 1,'CHARACTER_LENGTH' => 1, 'CHAR_LENGTH' => 1, - 'COALESCE' => 1, 'CONVERT' => 1, 'COUNT' => 1, - 'EXISTS' => 1, 'EXTRACT' => 1, 'INSENSITIVE' => 1, - 'LOWER' => 1, 'MAX' => 1, 'MIN' => 1, - 'NULLIF' => 1, 'OCTET_LENGTH' => 1, 'OID' => 1, - 'OPERATORS' => 1, 'OTHERS' => 1, 'OVERLAPS' => 1, - 'PENDANT' => 1, 'POSITION' => 1, 'PRIVATE' => 1, - 'PROTECTED' => 1, 'REPLACE' => 1, 'SENSITIVE' => 1, - 'SIMILAR' => 1, 'SQLCODE' => 1, 'SQLERROR' => 1, - 'SUBSTRING' => 1, 'SUM' => 1, 'TEST' => 1, - 'THERE' => 1, 'TRANSLATE' => 1, 'TRIM' => 1, - 'TYPE' => 1, 'UPPER' => 1, 'VIRTUAL' => 1, - 'VISIBLE' => 1, 'WAIT' => 1, - - 'ADMIN' => 2, 'AGGREGATE' => 2, 'ARRAY' => 2, - 'BINARY' => 2, 'BLOB' => 2, 'CLASS' => 2, - 'CLOB' => 2, 'CONDITION' => 2, 'CONSTRUCTOR' => 2, - 'CONTAINS' => 2, 'CUBE' => 2, 'CURRENT_PATH' => 2, - 'CURRENT_ROLE' => 2, 'DATALINK' => 2, 'DEREF' => 2, - 'DESTROY' => 2, 'DESTRUCTOR' => 2, 'DETERMINISTIC' => 2, - 'DO' => 2, 'DYNAMIC' => 2, 'EVERY' => 2, - 'EXIT' => 2, 'EXPAND' => 2, 'EXPANDING' => 2, - 'FREE' => 2, 'FUNCTION' => 2, 'GROUPING' => 2, - 'HANDLER' => 2, 'HAST' => 2, 'HOST' => 2, - 'INITIALIZE' => 2, 'INOUT' => 2, 'ITERATE' => 2, - 'LARGE' => 2, 'LATERAL' => 2, 'LOCALTIME' => 2, - 'LOCALTIMESTAMP' => 2, 'LOCATOR' => 2, 'MEETS' => 2, - 'MODIFIES' => 2, 'NCLOB' => 2, 'NORMALIZE' => 2, - 'ORDINALITY' => 2, 'OUT' => 2, 'PARAMETER' => 2, - 'PATH' => 2, 'PERIOD' => 2, 'POSTFIX' => 2, - 'PRECEDES' => 2, 'PREFIX' => 2, 'READS' => 2, - 'REDO' => 2, 'REPEAT' => 2, 'RESULT' => 2, - 'ROLLUP' => 2, 'SETS' => 2, 'SPECIFIC' => 2, - 'SPECIFICTYPE' => 2, 'START' => 2, 'STATE' => 2, - 'STATIC' => 2, 'SUCCEEDS' => 2, 'TERMINATE' => 2, - 'THAN' => 2, 'TREAT' => 2, 'UNDO' => 2, - 'UNTIL' => 2, - - 'ACCESS' => 3, 'ANALYZE' => 3, 'AUDIT' => 3, - 'AUTO_INCREMENT' => 3, 'BACKUP' => 3, 'BDB' => 3, - 'BERKELEYDB' => 3, 'BIGINT' => 3, 'BREAK' => 3, - 'BROWSE' => 3, 'BTREE' => 3, 'BULK' => 3, - 'CHANGE' => 3, 'CHECKPOINT' => 3, 'CLUSTER' => 3, - 'CLUSTERED' => 3, 'COLUMNS' => 3, 'COMMENT' => 3, - 'COMPRESS' => 3, 'COMPUTE' => 3, 'CONTAINSTABLE' => 3, - 'DATABASE' => 3, 'DATABASES' => 3, 'DAY_HOUR' => 3, - 'DAY_MINUTE' => 3, 'DAY_SECOND' => 3, 'DBCC' => 3, - 'DELAYED' => 3, 'DENY' => 3, 'DISK' => 3, - 'DISTINCTROW' => 3, 'DISTRIBUTED' => 3, 'DUMMY' => 3, - 'DUMP' => 3, 'ENCLOSED' => 3, 'ERRLVL' => 3, - 'ERRORS' => 3, 'ESCAPED' => 3, 'EXCLUSIVE' => 3, - 'EXPLAIN' => 3, 'FIELDS' => 3, 'FILE' => 3, - 'FILLFACTOR' => 3, 'FREETEXT' => 3, 'FREETEXTTABLE' => 3, - 'FULLTEXT' => 3, 'GEOMETRY' => 3, 'HASH' => 3, - 'HIGH_PRIORITY' => 3, 'HOLDLOCK' => 3, 'HOUR_MINUTE' => 3, - 'HOUR_SECOND' => 3, 'IDENTIFIED' => 3, 'IDENTITYCOL' => 3, - 'IDENTITY_INSERT' => 3, 'INCREMENT' => 3, 'INDEX' => 3, - 'INFILE' => 3, 'INITIAL' => 3, 'INNODB' => 3, - 'KEYS' => 3, 'KILL' => 3, 'LINENO' => 3, - 'LINES' => 3, 'LOAD' => 3, 'LOCK' => 3, - 'LONG' => 3, 'LONGBLOB' => 3, 'LONGTEXT' => 3, - 'LOW_PRIORITY' => 3, 'MASTER_SERVER_ID' => 3, 'MAXEXTENTS' => 3, - 'MEDIUMBLOB' => 3, 'MEDIUMINT' => 3, 'MEDIUMTEXT' => 3, - 'MIDDLEINT' => 3, 'MINUS' => 3, 'MINUTE_SECOND' => 3, - 'MLSLABEL' => 3, 'MODE' => 3, 'MRG_MYISAM' => 3, - 'NOAUDIT' => 3, 'NOCHECK' => 3, 'NOCOMPRESS' => 3, - 'NONCLUSTERED' => 3, 'NOWAIT' => 3, 'NUMBER' => 3, - 'OFFLINE' => 3, 'OFFSETS' => 3, 'ONLINE' => 3, - 'OPENDATASOURCE' => 3, 'OPENQUERY' => 3, 'OPENROWSET' => 3, - 'OPENXML' => 3, 'OPTIMIZE' => 3, 'OPTIONALLY' => 3, - 'OUTFILE' => 3, 'OVER' => 3, 'PCTFREE' => 3, - 'PERCENT' => 3, 'PLAN' => 3, 'PRINT' => 3, - 'PROC' => 3, 'PURGE' => 3, 'RAISERROR' => 3, - 'RAW' => 3, 'READTEXT' => 3, 'RECONFIGURE' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'REPLICATION' => 3, - 'REQUIRE' => 3, 'RESOURCE' => 3, 'RESTORE' => 3, - 'RLIKE' => 3, 'ROWCOUNT' => 3, 'ROWGUIDCOL' => 3, - 'ROWID' => 3, 'ROWNUM' => 3, 'RTREE' => 3, - 'RULE' => 3, 'SAVE' => 3, 'SETUSER' => 3, - 'SHARE' => 3, 'SHOW' => 3, 'SHUTDOWN' => 3, - 'SONAME' => 3, 'SPATIAL' => 3, 'SQL_BIG_RESULT' => 3, -'SQL_CALC_FOUND_ROWS' => 3,'SQL_SMALL_RESULT' => 3, 'SSL' => 3, - 'STARTING' => 3, 'STATISTICS' => 3, 'STRAIGHT_JOIN' => 3, - 'STRIPED' => 3, 'SUCCESSFUL' => 3, 'SYNONYM' => 3, - 'SYSDATE' => 3, 'TABLES' => 3, 'TERMINATED' => 3, - 'TEXTSIZE' => 3, 'TINYBLOB' => 3, 'TINYINT' => 3, - 'TINYTEXT' => 3, 'TOP' => 3, 'TRAN' => 3, - 'TRUNCATE' => 3, 'TSEQUAL' => 3, 'TYPES' => 3, - 'UID' => 3, 'UNLOCK' => 3, 'UNSIGNED' => 3, - 'UPDATETEXT' => 3, 'USE' => 3, 'USER_RESOURCES' => 3, - 'VALIDATE' => 3, 'VARBINARY' => 3, 'VARCHAR2' => 3, - 'WAITFOR' => 3, 'WARNINGS' => 3, 'WRITETEXT' => 3, - 'XOR' => 3, 'YEAR_MONTH' => 3, 'ZEROFILL' => 3 -); - - - safe_query("drop table crash_me10 $drop_attr"); - - foreach my $keyword (sort {$a cmp $b} keys %reserved_words) - { - $keyword_type= $reserved_words{$keyword}; - - $prompt= "Keyword ".$keyword; - $config= "reserved_word_".$keywords_ext[$keyword_type]."_".lc($keyword); - - report_fail($prompt,$config, - "create table crash_me10 ($keyword int not null)", - "drop table crash_me10 $drop_attr" - ); - } -} - -# -# Do a query on a query package object. -# - -sub limit_query -{ - my($object,$limit)=@_; - my ($query,$result,$retry,$sth); - - $query=$object->query($limit); - $result=safe_query($query); - if (!$result) - { - $object->cleanup(); - return 0; - } - if (defined($query=$object->check_query())) - { - for ($retry=0 ; $retry < $retry_limit ; $retry++) - { - printf "query2: %-80.80s\n",$query if ($opt_log_all_queries); - print LOG "$query;\n" if ($opt_log); - if (($sth= $dbh->prepare($query))) - { - if ($sth->execute) - { - $result= $object->check($sth); - $sth->finish; - $object->cleanup(); - return $result; - } - print_query($query); - $sth->finish; - } - else - { - print_query($query); - } - $retry=100 if (!$server->abort_if_fatal_error()); # No need to continue - if ($retry == $retry_limit-2) - { - print "Forcing discoennect to retry query\n" if ($opt_debug); - $dbh->disconnect || warn $dbh->errstr; - } - check_connect($object); # Check that server is still up - } - $result=0; # Query failed - } - $object->cleanup(); - return $result; # Server couldn't handle the query -} - - -sub report -{ - my ($prompt,$limit,@queries)=@_; - print "$prompt: "; - if (!defined($limits{$limit})) - { - my $queries_result = safe_query(\@queries); - add_log($limit, $safe_query_log); - my $report_result; - if ( $queries_result) { - $report_result= "yes"; - add_log($limit,"As far as all queries returned OK, result is YES"); - } else { - $report_result= "no"; - add_log($limit,"As far as some queries didnt return OK, result is NO"); - } - save_config_data($limit,$report_result,$prompt); - } - print "$limits{$limit}\n"; - return $limits{$limit} ne "no"; -} - -sub report_fail -{ - my ($prompt,$limit,@queries)=@_; - print "$prompt: "; - if (!defined($limits{$limit})) - { - my $queries_result = safe_query(\@queries); - add_log($limit, $safe_query_log); - my $report_result; - if ( $queries_result) { - $report_result= "no"; - add_log($limit,"As far as all queries returned OK, result is NO"); - } else { - $report_result= "yes"; - add_log($limit,"As far as some queries didnt return OK, result is YES"); - } - save_config_data($limit,$report_result,$prompt); - } - print "$limits{$limit}\n"; - return $limits{$limit} ne "no"; -} - - -# Return true if one of the queries is ok - -sub report_one -{ - my ($prompt,$limit,$queries)=@_; - my ($query,$res,$result); - print "$prompt: "; - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - $result="no"; - foreach $query (@$queries) - { - if (safe_query_l($limit,$query->[0])) - { - $result= $query->[1]; - last; - } - } - save_config_data($limit,$result,$prompt); - } - print "$limits{$limit}\n"; - return $limits{$limit} ne "no"; -} - - -# Execute query and save result as limit value. - -sub report_result -{ - my ($prompt,$limit,$query)=@_; - my($error); - print "$prompt: "; - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - $error=safe_query_result($query,"1",2); - add_log($limit,$safe_query_result_log); - save_config_data($limit,$error ? "not supported" :$last_result,$prompt); - } - print "$limits{$limit}\n"; - return $limits{$limit} ne "not supported"; -} - -sub report_trans -{ - my ($limit,$queries,$check,$clear)=@_; - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - eval {undef($dbh->{AutoCommit})}; - if (!$@) - { - if (safe_query(\@$queries)) - { - $dbh->rollback; - $dbh->{AutoCommit} = 1; - if (safe_query_result($check,"","")) { - add_log($limit,$safe_query_result_log); - save_config_data($limit,"yes",$limit); - } - safe_query($clear); - } else { - add_log($limit,$safe_query_log); - save_config_data($limit,"error",$limit); - } - $dbh->{AutoCommit} = 1; - } - else - { - add_log($limit,"Couldnt undef autocommit ?? "); - save_config_data($limit,"no",$limit); - } - safe_query($clear); - } - return $limits{$limit} ne "yes"; -} - -sub report_rollback -{ - my ($limit,$queries,$check,$clear)=@_; - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - eval {undef($dbh->{AutoCommit})}; - if (!$@) - { - if (safe_query(\@$queries)) - { - add_log($limit,$safe_query_log); - - $dbh->rollback; - $dbh->{AutoCommit} = 1; - if (safe_query($check)) { - add_log($limit,$safe_query_log); - save_config_data($limit,"no",$limit); - } else { - add_log($limit,$safe_query_log); - save_config_data($limit,"yes",$limit); - }; - safe_query($clear); - } else { - add_log($limit,$safe_query_log); - save_config_data($limit,"error",$limit); - } - } - else - { - add_log($limit,'Couldnt undef Autocommit??'); - save_config_data($limit,"error",$limit); - } - safe_query($clear); - } - $dbh->{AutoCommit} = 1; - return $limits{$limit} ne "yes"; -} - - -sub check_and_report -{ - my ($prompt,$limit,$pre,$query,$post,$answer,$string_type,$skip_prompt, - $function)=@_; - my ($tmp); - $function=0 if (!defined($function)); - - print "$prompt: " if (!defined($skip_prompt)); - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - $tmp=1-safe_query(\@$pre); - add_log($limit,$safe_query_log); - if (!$tmp) - { - $tmp=safe_query_result($query,$answer,$string_type) ; - add_log($limit,$safe_query_result_log); - }; - safe_query(\@$post); - add_log($limit,$safe_query_log); - delete $limits{$limit}; - if ($function == 3) # Report error as 'no'. - { - $function=0; - $tmp= -$tmp; - } - if ($function == 0 || - $tmp != 0 && $function == 1 || - $tmp == 0 && $function== 2) - { - save_config_data($limit, $tmp == 0 ? "yes" : $tmp == 1 ? "no" : "error", - $prompt); - print "$limits{$limit}\n"; - return $function == 0 ? $limits{$limit} eq "yes" : 0; - } - return 1; # more things to check - } - print "$limits{$limit}\n"; - return 0 if ($function); - return $limits{$limit} eq "yes"; -} - - -sub try_and_report -{ - my ($prompt,$limit,@tests)=@_; - my ($tmp,$test,$type); - - print "$prompt: "; - - if (!defined($limits{$limit})) - { - save_incomplete($limit,$prompt); - $type="no"; # Not supported - foreach $test (@tests) - { - my $tmp_type= shift(@$test); - if (safe_query_l($limit,\@$test)) - { - $type=$tmp_type; - goto outer; - } - } - outer: - save_config_data($limit, $type, $prompt); - } - print "$limits{$limit}\n"; - return $limits{$limit} ne "no"; -} - -# -# Just execute the query and check values; Returns 1 if ok -# - -sub execute_and_check -{ - my ($key,$pre,$query,$post,$answer,$string_type)=@_; - my ($tmp); - - $tmp=safe_query_l($key,\@$pre); - - $tmp=safe_query_result_l($key,$query,$answer,$string_type) == 0 if ($tmp); - safe_query_l($key,\@$post); - return $tmp; -} - - -# returns 0 if ok, 1 if error, -1 if wrong answer -# Sets $last_result to value of query -sub safe_query_result_l{ - my ($key,$query,$answer,$result_type)=@_; - my $r = safe_query_result($query,$answer,$result_type); - add_log($key,$safe_query_result_log); - return $r; -} - -sub safe_query_result -{ -# result type can be -# 8 (must be empty), 2 (Any value), 0 (number) -# 1 (char, endspaces can differ), 3 (exact char), 4 (NULL) -# 5 (char with prefix), 6 (exact, errors are ignored) -# 7 (array of numbers) - my ($query,$answer,$result_type)=@_; - my ($sth,$row,$result,$retry); - undef($last_result); - $safe_query_result_log=""; - - printf "\nquery3: %-80.80s\n",$query if ($opt_log_all_queries); - print LOG "$query;\n" if ($opt_log); - $safe_query_result_log="<".$query."\n"; - - for ($retry=0; $retry < $retry_limit ; $retry++) - { - if (!($sth=$dbh->prepare($query))) - { - print_query($query); - $safe_query_result_log .= "> prepare failed:".$dbh->errstr."\n"; - - if ($server->abort_if_fatal_error()) - { - check_connect(); # Check that server is still up - next; # Retry again - } - check_connect(); # Check that server is still up - return 1; - } - if (!$sth->execute) - { - print_query($query); - $safe_query_result_log .= "> execute failed:".$dbh->errstr."\n"; - if ($server->abort_if_fatal_error()) - { - check_connect(); # Check that server is still up - next; # Retry again - } - check_connect(); # Check that server is still up - return 1; - } - else - { - last; - } - } - if (!($row=$sth->fetchrow_arrayref)) - { - print "\nquery: $query didn't return any result\n" if ($opt_debug); - $safe_query_result_log .= "> didn't return any result:".$dbh->errstr."\n"; - $sth->finish; - return ($result_type == 8) ? 0 : 1; - } - if ($result_type == 8) - { - $sth->finish; - return 1; - } - $result=0; # Ok - $last_result= $row->[0]; # Save for report_result; - $safe_query_result_log .= ">".$last_result."\n"; - # Note: - # if ($result_type == 2) We accept any return value as answer - - if ($result_type == 0) # Compare numbers - { - $row->[0] =~ s/,/./; # Fix if ',' is used instead of '.' - if ($row->[0] != $answer && (abs($row->[0]- $answer)/ - (abs($row->[0]) + abs($answer))) > 0.01) - { - $result=-1; - $safe_query_result_log .= - "We expected '$answer' but got '$last_result' \n"; - } - } - elsif ($result_type == 1) # Compare where end space may differ - { - $row->[0] =~ s/\s+$//; - if ($row->[0] ne $answer) - { - $result=-1; - $safe_query_result_log .= - "We expected '$answer' but got '$last_result' \n"; - } ; - } - elsif ($result_type == 3) # This should be a exact match - { - if ($row->[0] ne $answer) - { - $result= -1; - $safe_query_result_log .= - "We expected '$answer' but got '$last_result' \n"; - }; - } - elsif ($result_type == 4) # If results should be NULL - { - if (defined($row->[0])) - { - $result= -1; - $safe_query_result_log .= - "We expected NULL but got '$last_result' \n"; - }; - } - elsif ($result_type == 5) # Result should have given prefix - { - if (length($row->[0]) < length($answer) && - substr($row->[0],1,length($answer)) ne $answer) - { - $result= -1 ; - $safe_query_result_log .= - "Result must have prefix '$answer', but '$last_result' \n"; - }; - } - elsif ($result_type == 6) # Exact match but ignore errors - { - if ($row->[0] ne $answer) - { $result= 1; - $safe_query_result_log .= - "We expected '$answer' but got '$last_result' \n"; - } ; - } - elsif ($result_type == 7) # Compare against array of numbers - { - if ($row->[0] != $answer->[0]) - { - $safe_query_result_log .= "must be '$answer->[0]' \n"; - $result= -1; - } - else - { - my ($value); - shift @$answer; - while (($row=$sth->fetchrow_arrayref)) - { - $safe_query_result_log .= ">$row\n"; - - $value=shift(@$answer); - if (!defined($value)) - { - print "\nquery: $query returned to many results\n" - if ($opt_debug); - $safe_query_result_log .= "It returned to many results \n"; - $result= 1; - last; - } - if ($row->[0] != $value) - { - $safe_query_result_log .= "Must return $value here \n"; - $result= -1; - last; - } - } - if ($#$answer != -1) - { - print "\nquery: $query returned too few results\n" - if ($opt_debug); - $safe_query_result_log .= "It returned too few results \n"; - $result= 1; - } - } - } - $sth->finish; - print "\nquery: '$query' returned '$row->[0]' instead of '$answer'\n" - if ($opt_debug && $result && $result_type != 7); - return $result; -} - -# -# Find limit using binary search. This is a weighed binary search that -# will prefere lower limits to get the server to crash as -# few times as possible - - -sub find_limit() -{ - my ($prompt,$limit,$query)=@_; - my ($first,$end,$i,$tmp,@tmp_array, $queries); - print "$prompt: "; - if (defined($end=$limits{$limit})) - { - print "$end (cache)\n"; - return $end; - } - save_incomplete($limit,$prompt); - add_log($limit,"We are trying (example with N=5):"); - $queries = $query->query(5); - if (ref($queries) ne "ARRAY") - { - push(@tmp_array,$queries); - $queries= \@tmp_array; - } - foreach $tmp (@$queries) - { add_log($limit,repr_query($tmp)); } - - if (defined($queries = $query->check_query())) - { - if (ref($queries) ne "ARRAY") - { - @tmp_array=(); - push(@tmp_array,$queries); - $queries= \@tmp_array; - } - foreach $tmp (@$queries) - { add_log($limit,repr_query($tmp)); } - } - if (defined($query->{'init'}) && !defined($end=$limits{'restart'}{'tohigh'})) - { - if (!safe_query_l($limit,$query->{'init'})) - { - $query->cleanup(); - return "error"; - } - } - - if (!limit_query($query,1)) # This must work - { - print "\nMaybe fatal error: Can't check '$prompt' for limit=1\n". - "error: $last_error\n"; - return "error"; - } - - $first=0; - $first=$limits{'restart'}{'low'} if ($limits{'restart'}{'low'}); - - if (defined($end=$limits{'restart'}{'tohigh'})) - { - $end--; - print "\nRestarting this with low limit: $first and high limit: $end\n"; - delete $limits{'restart'}; - $i=$first+int(($end-$first+4)/5); # Prefere lower on errors - } - else - { - $end= $query->max_limit(); - $i=int(($end+$first)/2); - } - my $log_str = ""; - unless(limit_query($query,0+$end)) { - while ($first < $end) - { - print "." if ($opt_debug); - save_config_data("restart",$i,"") if ($opt_restart); - if (limit_query($query,$i)) - { - $first=$i; - $log_str .= " $i:OK"; - $i=$first+int(($end-$first+1)/2); # to be a bit faster to go up - } - else - { - $end=$i-1; - $log_str .= " $i:FAIL"; - $i=$first+int(($end-$first+4)/5); # Prefere lower on errors - } - } - } - $end+=$query->{'offset'} if ($end && defined($query->{'offset'})); - if ($end >= $query->{'max_limit'} && - substr($query->{'max_limit'},0,1) eq '+') - { - $end= $query->{'max_limit'}; - } - print "$end\n"; - add_log($limit,$log_str); - save_config_data($limit,$end,$prompt); - delete $limits{'restart'}; - return $end; -} - -# -# Check that the query works! -# - -sub assert -{ - my($query)=@_; - - if (!safe_query($query)) - { - $query=join("; ",@$query) if (ref($query) eq "ARRAY"); - print "\nFatal error:\nquery: '$query'\nerror: $DBI::errstr\n"; - exit 1; - } -} - - -sub read_config_data -{ - my ($key,$limit,$prompt); - if (-e $opt_config_file) - { - open(CONFIG_FILE,"+<$opt_config_file") || - die "Can't open configure file $opt_config_file\n"; - print "Reading old values from cache: $opt_config_file\n"; - } - else - { - open(CONFIG_FILE,"+>>$opt_config_file") || - die "Can't create configure file $opt_config_file: $!\n"; - } - select CONFIG_FILE; - $|=1; - select STDOUT; - while (<CONFIG_FILE>) - { - chomp; - if (/^(\S+)=([^\#]*[^\#\s])\s*(\# .*)*$/) - { - $key=$1; $limit=$2 ; $prompt=$3; - if (!$opt_quick || $limit =~ /\d/ || $key =~ /crash_me/) - { - if ($key !~ /restart/i) - { - $limits{$key}=$limit eq "null"? undef : $limit; - $prompts{$key}=length($prompt) ? substr($prompt,2) : ""; - $last_read=$key; - delete $limits{'restart'}; - } - else - { - $limit_changed=1; - if ($limit > $limits{'restart'}{'tohigh'}) - { - $limits{'restart'}{'low'} = $limits{'restart'}{'tohigh'}; - } - $limits{'restart'}{'tohigh'} = $limit; - } - } - } - elsif (/\s*###(.*)$/) # log line - { - # add log line for previously read key - $log{$last_read} .= "$1\n"; - } - elsif (!/^\s*$/ && !/^\#/) - { - die "Wrong config row: $_\n"; - } - } -} - - -sub save_config_data -{ - my ($key,$limit,$prompt)=@_; - $prompts{$key}=$prompt; - return if (defined($limits{$key}) && $limits{$key} eq $limit); - if (!defined($limit) || $limit eq "") - { -# die "Undefined limit for $key\n"; - $limit = 'null'; - } - print CONFIG_FILE "$key=$limit\t# $prompt\n"; - $limits{$key}=$limit; - $limit_changed=1; -# now write log lines (immediatelly after limits) - my $line; - my $last_line_was_empty=0; - foreach $line (split /\n/, $log{$key}) - { - print CONFIG_FILE " ###$line\n" - unless ( ($last_line_was_empty eq 1) - && ($line =~ /^\s+$/) ); - $last_line_was_empty= ($line =~ /^\s+$/)?1:0; - }; - - if (($opt_restart && $limits{'operating_system'} =~ /windows/i) || - ($limits{'operating_system'} =~ /NT/)) - { - # If perl crashes in windows, everything is lost (Wonder why? :) - close CONFIG_FILE; - open(CONFIG_FILE,"+>>$opt_config_file") || - die "Can't reopen configure file $opt_config_file: $!\n"; - } -} - -sub add_log -{ - my $key = shift; - my $line = shift; - $log{$key} .= $line . "\n" if ($opt_verbose);; -} - -sub save_all_config_data -{ - my ($key,$tmp); - close CONFIG_FILE; - return if (!$limit_changed); - open(CONFIG_FILE,">$opt_config_file") || - die "Can't create configure file $opt_config_file: $!\n"; - select CONFIG_FILE; - $|=1; - select STDOUT; - delete $limits{'restart'}; - - print CONFIG_FILE - "#This file is automaticly generated by crash-me $version\n\n"; - foreach $key (sort keys %limits) - { - $tmp="$key=$limits{$key}"; - print CONFIG_FILE $tmp . ("\t" x (int((32-min(length($tmp),32)+7)/8)+1)) . - "# $prompts{$key}\n"; - my $line; - my $last_line_was_empty=0; - foreach $line (split /\n/, $log{$key}) - { - print CONFIG_FILE " ###$line\n" unless - ( ($last_line_was_empty eq 1) && ($line =~ /^\s*$/)); - $last_line_was_empty= ($line =~ /^\s*$/)?1:0; - }; - } - close CONFIG_FILE; -} - -# -# Save 'incomplete' in the limits file to be able to continue if -# crash-me dies because of a bug in perl/DBI - -sub save_incomplete -{ - my ($limit,$prompt)= @_; - save_config_data($limit,"incompleted",$prompt) if ($opt_restart); -} - - -sub check_repeat -{ - my ($sth,$limit)=@_; - my ($row); - - return 0 if (!($row=$sth->fetchrow_arrayref)); - return (defined($row->[0]) && ('a' x $limit) eq $row->[0]) ? 1 : 0; -} - - -sub min -{ - my($min)=$_[0]; - my($i); - for ($i=1 ; $i <= $#_; $i++) - { - $min=$_[$i] if ($min > $_[$i]); - } - return $min; -} - -sub sql_concat -{ - my ($a,$b)= @_; - return "$a || $b" if ($limits{'func_sql_concat_as_||'} eq 'yes'); - return "concat($a,$b)" if ($limits{'func_odbc_concat'} eq 'yes'); - return "$a + $b" if ($limits{'func_extra_concat_as_+'} eq 'yes'); - return undef; -} - -# -# Returns a list of statements to create a table in a portable manner -# but still utilizing features in the databases. -# - -sub create_table -{ - my($table_name,$fields,$index,$extra) = @_; - my($query,$nr,$parts,@queries,@index); - - $extra="" if (!defined($extra)); - - $query="create table $table_name ("; - $nr=0; - foreach $field (@$fields) - { - $query.= $field . ','; - } - foreach $index (@$index) - { - $index =~ /\(([^\(]*)\)$/i; - $parts=$1; - if ($index =~ /^primary key/) - { - if ($limits{'primary_key_in_create'} eq 'yes') - { - $query.= $index . ','; - } - else - { - push(@queries, - "create unique index ${table_name}_prim on $table_name ($parts)"); - } - } - elsif ($index =~ /^unique/) - { - if ($limits{'unique_in_create'} eq 'yes') - { - $query.= "unique ($parts),"; - } - else - { - $nr++; - push(@queries, - "create unique index ${table_name}_$nr on $table_name ($parts)"); - - } - } - else - { - if ($limits{'index_in_create'} eq 'yes') - { - $query.= "index ($parts),"; - } - else - { - $nr++; - push(@queries, - "create index ${table_name}_$nr on $table_name ($1)"); - } - } - } - chop($query); - $query.= ") $extra"; - unshift(@queries,$query); - return @queries; -} - - -# -# This is used by some query packages to change: -# %d -> limit -# %s -> 'a' x limit -# %v -> "1,1,1,1,1" where there are 'limit' number of ones -# %f -> q1,q2,q3.... -# %F -> q1 integer,q2 integer,q3 integer.... - -sub fix_query -{ - my ($query,$limit)=@_; - my ($repeat,$i); - - return $query if !(defined($query)); - $query =~ s/%d/$limit/g; - if ($query =~ /%s/) - { - $repeat= 'a' x $limit; - $query =~ s/%s/$repeat/g; - } - if ($query =~ /%v/) - { - $repeat= '1,' x $limit; - chop($repeat); - $query =~ s/%v/$repeat/g; - } - if ($query =~ /%f/) - { - $repeat=""; - for ($i=1 ; $i <= $limit ; $i++) - { - $repeat.="q$i,"; - } - chop($repeat); - $query =~ s/%f/$repeat/g; - } - if ($query =~ /%F/) - { - $repeat=""; - for ($i=1 ; $i <= $limit ; $i++) - { - $repeat.="q$i integer,"; - } - chop($repeat); - $query =~ s/%F/$repeat/g; - } - return $query; -} - - -# -# Different query packages -# - -package query_repeat; - -sub new -{ - my ($type,$init,$query,$add1,$add_mid,$add,$add_end,$end_query,$cleanup, - $max_limit, $check, $offset)=@_; - my $self={}; - if (defined($init) && $#$init != -1) - { - $self->{'init'}=$init; - } - $self->{'query'}=$query; - $self->{'add1'}=$add1; - $self->{'add_mid'}=$add_mid; - $self->{'add'}=$add; - $self->{'add_end'}=$add_end; - $self->{'end_query'}=$end_query; - $self->{'cleanup'}=$cleanup; - $self->{'max_limit'}=(defined($max_limit) ? $max_limit : $main::query_size); - $self->{'check'}=$check; - $self->{'offset'}=$offset; - $self->{'printf'}= ($add =~ /%d/); - bless $self; -} - -sub query -{ - my ($self,$limit)=@_; - if (!$self->{'printf'}) - { - return $self->{'query'} . ($self->{'add'} x $limit) . - ($self->{'add_end'} x $limit) . $self->{'end_query'}; - } - my ($tmp,$tmp2,$tmp3,$i); - $tmp=$self->{'query'}; - if ($self->{'add1'}) - { - for ($i=0; $i < $limit ; $i++) - { - $tmp3 = $self->{'add1'}; - $tmp3 =~ s/%d/$i/g; - $tmp .= $tmp3; - } - } - $tmp .= " ".$self->{'add_mid'}; - if ($self->{'add'}) - { - for ($i=0; $i < $limit ; $i++) - { - $tmp2 = $self->{'add'}; - $tmp2 =~ s/%d/$i/g; - $tmp .= $tmp2; - } - } - return ($tmp . - ($self->{'add_end'} x $limit) . $self->{'end_query'}); -} - -sub max_limit -{ - my ($self)=@_; - my $tmp; - $tmp=int(($main::limits{"query_size"}-length($self->{'query'}) - -length($self->{'add_mid'})-length($self->{'end_query'}))/ - (length($self->{'add1'})+ - length($self->{'add'})+length($self->{'add_end'}))); - return main::min($self->{'max_limit'},$tmp); -} - - -sub cleanup -{ - my ($self)=@_; - my($tmp,$statement); - $tmp=$self->{'cleanup'}; - foreach $statement (@$tmp) - { - main::safe_query($statement) if (defined($statement) && length($statement)); - } -} - -sub check -{ - my ($self,$sth)=@_; - my $check=$self->{'check'}; - return &$check($sth,$self->{'limit'}) if (defined($check)); - return 1; -} - -sub check_query -{ - return undef; -} - - -package query_num; - -sub new -{ - my ($type,$query,$end_query,$cleanup,$max_limit,$check)=@_; - my $self={}; - $self->{'query'}=$query; - $self->{'end_query'}=$end_query; - $self->{'cleanup'}=$cleanup; - $self->{'max_limit'}=$max_limit; - $self->{'check'}=$check; - bless $self; -} - -sub query -{ - my ($self,$i)=@_; - $self->{'limit'}=$i; - return "$self->{'query'}$i$self->{'end_query'}"; -} - -sub max_limit -{ - my ($self)=@_; - return $self->{'max_limit'}; -} - -sub cleanup -{ - my ($self)=@_; - my($statement); - foreach $statement ($self->{'$cleanup'}) - { - main::safe_query($statement) if (defined($statement) && length($statement)); - } -} - - -sub check -{ - my ($self,$sth)=@_; - my $check=$self->{'check'}; - return &$check($sth,$self->{'limit'}) if (defined($check)); - return 1; -} - -sub check_query -{ - return undef; -} - -# -# This package is used when testing CREATE TABLE! -# - -package query_table; - -sub new -{ - my ($type,$query, $add, $end_query, $extra_init, $safe_query, $check, - $cleanup, $max_limit, $offset)=@_; - my $self={}; - $self->{'query'}=$query; - $self->{'add'}=$add; - $self->{'end_query'}=$end_query; - $self->{'extra_init'}=$extra_init; - $self->{'safe_query'}=$safe_query; - $self->{'check'}=$check; - $self->{'cleanup'}=$cleanup; - $self->{'max_limit'}=$max_limit; - $self->{'offset'}=$offset; - bless $self; -} - - -sub query -{ - my ($self,$limit)=@_; - $self->{'limit'}=$limit; - $self->cleanup(); # Drop table before create - - my ($tmp,$tmp2,$i,$query,@res); - $tmp =$self->{'query'}; - $tmp =~ s/%d/$limit/g; - for ($i=1; $i <= $limit ; $i++) - { - $tmp2 = $self->{'add'}; - $tmp2 =~ s/%d/$i/g; - $tmp .= $tmp2; - } - push(@res,$tmp . $self->{'end_query'}); - $tmp=$self->{'extra_init'}; - foreach $query (@$tmp) - { - push(@res,main::fix_query($query,$limit)); - } - return \@res; -} - - -sub max_limit -{ - my ($self)=@_; - return $self->{'max_limit'}; -} - - -sub check_query -{ - my ($self)=@_; - return main::fix_query($self->{'safe_query'},$self->{'limit'}); -} - -sub check -{ - my ($self,$sth)=@_; - my $check=$self->{'check'}; - return 0 if (!($row=$sth->fetchrow_arrayref)); - if (defined($check)) - { - return (defined($row->[0]) && - $row->[0] eq main::fix_query($check,$self->{'limit'})) ? 1 : 0; - } - return 1; -} - - -# Remove table before and after create table query - -sub cleanup() -{ - my ($self)=@_; - main::safe_query(main::fix_query($self->{'cleanup'},$self->{'limit'})); -} - -# -# Package to do many queries with %d, and %s substitution -# - -package query_many; - -sub new -{ - my ($type,$query,$safe_query,$check_result,$cleanup,$max_limit,$offset, - $safe_cleanup)=@_; - my $self={}; - $self->{'query'}=$query; - $self->{'safe_query'}=$safe_query; - $self->{'check'}=$check_result; - $self->{'cleanup'}=$cleanup; - $self->{'max_limit'}=$max_limit; - $self->{'offset'}=$offset; - $self->{'safe_cleanup'}=$safe_cleanup; - bless $self; -} - - -sub query -{ - my ($self,$limit)=@_; - my ($queries,$query,@res); - $self->{'limit'}=$limit; - $self->cleanup() if (defined($self->{'safe_cleanup'})); - $queries=$self->{'query'}; - foreach $query (@$queries) - { - push(@res,main::fix_query($query,$limit)); - } - return \@res; -} - -sub check_query -{ - my ($self)=@_; - return main::fix_query($self->{'safe_query'},$self->{'limit'}); -} - -sub cleanup -{ - my ($self)=@_; - my($tmp,$statement); - return if (!defined($self->{'cleanup'})); - $tmp=$self->{'cleanup'}; - foreach $statement (@$tmp) - { - if (defined($statement) && length($statement)) - { - main::safe_query(main::fix_query($statement,$self->{'limit'})); - } - } -} - - -sub check -{ - my ($self,$sth)=@_; - my ($check,$row); - return 0 if (!($row=$sth->fetchrow_arrayref)); - $check=$self->{'check'}; - if (defined($check)) - { - return (defined($row->[0]) && - $row->[0] eq main::fix_query($check,$self->{'limit'})) ? 1 : 0; - } - return 1; -} - -sub max_limit -{ - my ($self)=@_; - return $self->{'max_limit'}; -} - -# -# Used to find max supported row length -# - -package query_row_length; - -sub new -{ - my ($type,$create,$null,$drop,$max_limit)=@_; - my $self={}; - $self->{'table_name'}=$create; - $self->{'null'}=$null; - $self->{'cleanup'}=$drop; - $self->{'max_limit'}=$max_limit; - bless $self; -} - - -sub query -{ - my ($self,$limit)=@_; - my ($res,$values,$size,$length,$i); - $self->{'limit'}=$limit; - - $res=""; - $size=main::min($main::limits{'max_char_size'},255); - $size = 255 if (!$size); # Safety - for ($length=$i=0; $length + $size <= $limit ; $length+=$size, $i++) - { - $res.= "q$i char($size) $self->{'null'},"; - $values.="'" . ('a' x $size) . "',"; - } - if ($length < $limit) - { - $size=$limit-$length; - $res.= "q$i char($size) $self->{'null'},"; - $values.="'" . ('a' x $size) . "',"; - } - chop($res); - chop($values); - return ["create table " . $self->{'table_name'} . " ($res)", - "insert into " . $self->{'table_name'} . " values ($values)"]; -} - -sub max_limit -{ - my ($self)=@_; - return $self->{'max_limit'}; -} - -sub cleanup -{ - my ($self)=@_; - main::safe_query($self->{'cleanup'}); -} - - -sub check -{ - return 1; -} - -sub check_query -{ - return undef; -} - -# -# Used to find max supported index length -# - -package query_index_length; - -sub new -{ - my ($type,$create,$drop,$max_limit)=@_; - my $self={}; - $self->{'create'}=$create; - $self->{'cleanup'}=$drop; - $self->{'max_limit'}=$max_limit; - bless $self; -} - - -sub query -{ - my ($self,$limit)=@_; - my ($res,$size,$length,$i,$parts,$values); - $self->{'limit'}=$limit; - - $res=$parts=$values=""; - $size=main::min($main::limits{'max_index_part_length'}, - $main::limits{'max_char_size'}); - $size=1 if ($size == 0); # Avoid infinite loop errors - for ($length=$i=0; $length + $size <= $limit ; $length+=$size, $i++) - { - $res.= "q$i char($size) not null,"; - $parts.= "q$i,"; - $values.= "'" . ('a' x $size) . "',"; - } - if ($length < $limit) - { - $size=$limit-$length; - $res.= "q$i char($size) not null,"; - $parts.="q$i,"; - $values.= "'" . ('a' x $size) . "',"; - } - chop($parts); - chop($res); - chop($values); - if ($main::limits{'unique_in_create'} eq 'yes') - { - return [$self->{'create'} . "($res,unique ($parts))", - "insert into crash_q values($values)"]; - } - return [$self->{'create'} . "($res)", - "create index crash_q_index on crash_q ($parts)", - "insert into crash_q values($values)"]; -} - -sub max_limit -{ - my ($self)=@_; - return $self->{'max_limit'}; -} - -sub cleanup -{ - my ($self)=@_; - main::safe_query($self->{'cleanup'}); -} - - -sub check -{ - return 1; -} - -sub check_query -{ - return undef; -} - - - -### TODO: -# OID test instead of / in addition to _rowid diff --git a/sql-bench/example.bat b/sql-bench/example.bat deleted file mode 100644 index 5bc1b458008946c9c621ed1144ada1457a1748b5..0000000000000000000000000000000000000000 --- a/sql-bench/example.bat +++ /dev/null @@ -1,7 +0,0 @@ -REM -REM Example use to run test on PC -REM One need only to run 'comapre-results' to view results from old runs - -perl run-all-tests --server mysql --cmp "access,mysql" -perl run-all-tests --server mysql --cmp "access,mysql" --log --use-old-results -perl compare-results --cmp "access,mysql" -rel diff --git a/sql-bench/graph-compare-results.sh b/sql-bench/graph-compare-results.sh deleted file mode 100644 index 317ef583886c284ac1ce0f4fc2fe8f7de464ec4c..0000000000000000000000000000000000000000 --- a/sql-bench/graph-compare-results.sh +++ /dev/null @@ -1,660 +0,0 @@ -#### -#### Hello ... this is a heavily hacked script by Luuk -#### instead of printing the result it makes a nice gif -#### when you want to look at the code ... beware of the -#### ugliest code ever seen .... but it works ... -#### and that's sometimes the only thing you want ... isn't it ... -#### as the original script ... Hope you like it -#### -#### Greetz..... Luuk de Boer 1997. -#### - -## if you want the seconds behind the bar printed or not ... -## or only the one where the bar is too big for the graph ... -## look at line 535 of this program and below ... -## look in sub calculate for allmost all hard/soft settings :-) - -# a little program to generate a table of results -# just read all the RUN-*.log files and format them nicely -# Made by Luuk de Boer -# Patched by Monty - -use Getopt::Long; -use GD; - -$opt_server="mysql"; -$opt_cmp="mysql,pg,solid"; -$opt_cmp="msql,mysql,pg,solid"; -$opt_cmp="empress,mysql,pg,solid"; -$opt_dir="output"; -$opt_machine=""; -$opt_relative=$opt_same_server=$opt_help=$opt_Information=$opt_skip_count=0; - -GetOptions("Information","help","server=s","cmp=s","machine=s","relative","same-server","dir=s","skip-count") || usage(); - -usage() if ($opt_help || $opt_Information); - -if ($opt_same_server) -{ - $files="$opt_dir/RUN-$opt_server-*$opt_machine"; -} -else -{ - $files="$opt_dir/RUN-*$opt_machine"; -} -$files.= "-cmp-$opt_cmp" if (length($opt_cmp)); - -$automatic_files=0; -if ($#ARGV == -1) -{ - @ARGV=glob($files); - $automatic_files=1; -} - - -# -# Go trough all RUN files and gather statistics. -# - -foreach (@ARGV) -{ - $filename = $_; - next if (defined($found{$_})); # remove duplicates - $found{$_}=1; - /RUN-(.*)$/; - $prog = $1; - push(@key_order,$prog); - $next = 0; - open(TMP, "<$filename") || die "Can't open $filename: $!\n"; - while (<TMP>) - { - chomp; - if ($next == 0) { - if (/Server version:\s+(\S+.*)/i) - { - $tot{$prog}{'server'} = $1; - } - elsif (/Arguments:\s+(.+)/i) - { - $tot{$prog}{'arguments'} = $1; - # Remove some standard, not informative arguments - $tot{$prog}{'arguments'} =~ s/--log|--use-old-results|--server=\S+|--cmp=\S+|--user=\S+|--pass=\S+|--machine=\S+//g; - $tot{$prog}{'arguments'} =~ s/\s+/ /g; - } - elsif (/Comments:\s+(.+)/i) { - $tot{$prog}{'comments'} = $1; - } elsif (/^(\S+):\s*(estimated\s|)total\stime:\s+(\d+)\s+secs/i) - { - $tmp = $1; $tmp =~ s/://; - $tot{$prog}{$tmp} = [ $3, (length($2) ? "+" : "")]; - $op1{$tmp} = $tmp; - } elsif (/Totals per operation:/i) { - $next = 1; - next; - } - } - elsif ($next == 1) - { - if (/^(\S+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s*([+|?])*/) - { - $tot1{$prog}{$1} = [$2,$6,$7]; - $op{$1} = $1; -#print "TEST - $_ \n * $prog - $1 - $2 - $6 - $7 ****\n"; -# $prog - filename -# $1 - operation -# $2 - time in secs -# $6 - number of loops -# $7 - nothing / + / ? / * => estimated time ... - # get the highest value .... - $highest = ($2/$6) if (($highest < ($2/$6)) && ($1 !~/TOTALS/i)); - $gifcount++; - $giftotal += ($2/$6); - } - } - } -} - -if (!%op) -{ - print "Didn't find any files matching: '$files'\n"; - print "Use the --cmp=server,server option to compare benchmarks\n"; - exit 1; -} - - -# everything is loaded ... -# now we have to create a fancy output :-) - -# I prefer to redirect scripts instead to force it to file ; Monty -# -# open(RES, ">$resultfile") || die "Can't write to $resultfile: $!\n"; -# select(RES) -# - -#print <<EOF; -#<cut for this moment> -# -#EOF - -if ($opt_relative) -{ -# print "Column 1 is in seconds. All other columns are presented relative\n"; -# print "to this. 1.00 is the same, bigger numbers indicates slower\n\n"; -} - -#print "The result logs which where found and the options:\n"; - -if ($automatic_files) -{ - if ($key_order[$i] =~ /^$opt_server/) - { - if ($key_order[$i] =~ /^$opt_server/) - { - unshift(@key_order,$key_order[$i]); - splice(@key_order,$i+1,1); - } - } -} -# extra for mysql and mysql_pgcc -#$number1 = shift(@key_order); -#$number2 = shift(@key_order); -#unshift(@key_order,$number1); -#unshift(@key_order,$number2); - -# Print header - -$column_count=0; -foreach $key (@key_order) -{ - $column_count++; -# printf "%2d %-40.40s: %s %s\n", $column_count, $key, -# $tot{$key}{'server'}, $tot{$key}{'arguments'}; -# print "Comments: $tot{$key}{'comments'}\n" -# if ($tot{$key}{'comments'} =~ /\w+/); -} - -#print "\n"; - -$namewidth=$opt_skip_count ? 20 :25; -$colwidth= $opt_relative ? 9 : 6; - -print_sep("="); -#printf "%-$namewidth.${namewidth}s|", "Operation"; -$count = 1; -foreach $key (@key_order) -{ -# printf "%${colwidth}d|", $count; - $count++; -} -#print "\n"; -#print_sep("-"); -#print_string("Results per test:"); -#print_sep("-"); - -foreach $key (sort {$a cmp $b} keys %op1) -{ -# printf "%-$namewidth.${namewidth}s|", $key; - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot{$server}{$key}->[0],$tot{$server}{$key}->[1]); - $first=$tot{$server}{$key}->[0] if (!defined($first)); - } -# print "\n"; -} - -print_sep("-"); -print_string("The results per operation:"); -print_sep("-"); -$luukcounter = 1; -foreach $key (sort {$a cmp $b} keys %op) -{ - next if ($key =~ /TOTALS/i); - $tmp=$key; - $tmp.= " (" . $tot1{$key_order[0]}{$key}->[1] . ")" if (!$skip_count); -# printf "%-$namewidth.${namewidth}s|", $tmp; - $first=undef(); - foreach $server (@key_order) - { - print_value($first,$tot1{$server}{$key}->[0],$tot1{$server}{$key}->[2]); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); - } -# print "\n"; - $luukcounter++; -} - -#print_sep("-"); -$key="TOTALS"; -#printf "%-$namewidth.${namewidth}s|", $key; -$first=undef(); -foreach $server (@key_order) -{ -# print_value($first,$tot1{$server}{$key}->[0],$tot1{$server}{$key}->[2]); - $first=$tot1{$server}{$key}->[0] if (!defined($first)); -} -#print "\n"; -#print_sep("="); -&make_gif; - -exit 0; - -# -# some format functions; -# - -sub print_sep -{ - my ($sep)=@_; -# print $sep x ($namewidth + (($colwidth+1) * $column_count)+1),"\n"; -} - - -sub print_value -{ - my ($first,$value,$flags)=@_; - my ($tmp); - - if (defined($value)) - { - if (!defined($first) || !$opt_relative) - { - $tmp=sprintf("%d",$value); - } - else - { - $first=1 if (!$first); # Assume that it took one second instead of 0 - $tmp= sprintf("%.2f",$value/$first); - } - if (defined($flags)) - { - $tmp="+".$tmp if ($flags =~ /\+/); - $tmp="?".$tmp if ($flags =~ /\?/); - } - } - else - { - $tmp=""; - } - $tmp= " " x ($colwidth-length($tmp)) . $tmp if (length($tmp) < $colwidth); -# print $tmp . "|"; -} - - -sub print_string -{ - my ($str)=@_; - my ($width); - $width=$namewidth + ($colwidth+1)*$column_count; - - $str=substr($str,1,$width) if (length($str) > $width); -# print($str," " x ($width - length($str)),"|\n"); -} - -sub usage -{ - exit(0); -} - - - -########################################### -########################################### -########################################### -# making here a gif of the results ... (lets try it :-)) -# luuk .... 1997 -########################################### -## take care that $highest / $giftotal / $gifcount / $luukcounter -## are getting there value above ... so don't forget them while -## copying the code to some other program .... - -sub make_gif { - &gd; # some base things .... - &legend; # make the nice legend - &lines; # yep sometimes you have to print some lines - &gif("gif/benchmark2-".$opt_cmp); # and finally we can print all to a gif file ... -} -##### mmm we are finished now ... - - -# first we have to calculate some limits and some other stuff -sub calculate { -# here is the list which I have to know to make everything ..... -# the small border width ... $sm_border = -# the border default $border = -# the step default ... if it must be calculated then no value $step = -# the highest number $highest = -# the max length of the text of the x borders $max_len_lb= -# the max length of a legend entry $max_len_le= -# number of entries in the legend $num_legen = -# the length of the color blocks for the legend $legend_block= -# the width of the gif ...if it must be calculated - no value $width = -# the height of the gif .. if it must be calculated - no value $height = -# the width of the grey field ' ' ' ' $width_grey= -# the height of the grey field ' ' ' ' $height_grey= -# number of dashed lines $lines= -# if bars must overlap how much they must be overlapped $overlap= -# titlebar title of graph in two colors big $titlebar= -# titlebar1 sub title of graph in small font in black $titlebar1= -# xlabel $xlabel= -# ylabel $ylabel= -# the name of the gif ... $name= -# then the following things must be knows ..... -# xlabel below or on the left side ? -# legend yes/no? -# where must the legend be placed? -# must the xlabel be printed horizontal or vertical? -# must the ylabel be printed horizontal or vertical? -# must the graph be a line or a bar graph? -# is a xlabel several different entries or some sub entries of one? -# so xlabel 1 => test1=10, test2=15, test3=7 etc -# or xlabel 1 => test1a=12, test1b=10, test1c=7 etc -# must the bars overlap (only with the second example I think) -# must the number be printed above or next to the bar? -# when must the number be printed .... only when it extends the graph ...??? -# the space between the bars .... are that the same width of the bars ... -# or is it a separate space ... defined ??? -# must the date printed below or some where else .... - -#calculate all space for text and other things .... - $sm_border = 8; # the grey border around ... - $border = 40; #default ... - $left_border = 2.75 * $border; #default ... - $right_border = $border; #default ... - $up_border = $border; #default ... - $down_border = $border; # default ... - $step = ($height - $up_border - $down_border)/ ($luukcounter + (($#key_order + 1) * $luukcounter)); - # can set $step to get nice graphs ... and change the format ... - $step = 8; # set hard the step value - - $gifavg = ($giftotal/$gifcount); - $highest = 2 * $gifavg; - $highest = 1; # set hard the highest value ... - $xhigh = int($highest + .5 * $highest); - - # here to get the max lenght of the test entries ... - # so we can calculate the with of the left border - foreach $oper (sort keys (%op)) { - $max_len_lb = length($oper) if (length($oper) > $max_len_lb); -# print "oper = $oper - $max_len_lb\n"; - } - $max_len_lb = $max_len_lb * gdSmallFont->width; - $left_border = (3*$sm_border) + $max_len_lb; - $down_border = (4*$sm_border) + (gdSmallFont->width*(length($xhigh)+3)) + (gdSmallFont->height *2); - $right_border = (3*$sm_border) + 3 + (gdSmallFont->width*(length($highest)+5)); - - # calculate the space for the legend ..... - foreach $key (@key_order) { - $tmp = $key; - $tmp =~ s/-cmp-$opt_cmp//i; - $giflegend = sprintf "%-24.24s: %-40.40s",$tmp,$tot{$key}{'server'}; - $max_len_le = length($giflegend) if (length($giflegend) > $max_len_le); - } - $max_len_le = $max_len_le * gdSmallFont->width; - $legend_block = 10; # the length of the block in the legend - $max_high_le = (($#key_order + 1)*(gdSmallFont->height+2)) + (2*$legend_block); - $down_border += $max_high_le; - $up_border = (5 * $sm_border) + gdSmallFont->height + gdLargeFont->height; - - print "Here some things we already know ....\n"; -# print "luukcounter = $luukcounter (number of tests)\n"; -# print "gifcount = $gifcount (number of total entries)\n"; -# print "giftotal = $giftotal (total secs)\n"; -# print "gifavg = $gifavg\n"; -# print "highest = $highest\n"; -# print "xhigh = $xhigh\n"; -# print "step = $step -- $#key_order\n"; -# print "max_len_lb = $max_len_lb\n"; -# printf "Small- width %d - height %s\n",gdSmallFont->width,gdSmallFont->height; -# printf "Tiny- width %d - height %s\n",gdTinyFont->width,gdTinyFont->height; -} - -sub gd { - &calculate; - $width = 600; # the width .... - $height = 500; # the height ... - $width_greyfield = 430; - # when $step is set ... count the height ....???? - $width = $width_greyfield + $left_border + $right_border; - $height = ($step * ($luukcounter + ($luukcounter * ($#key_order + 1)))) + $down_border + $up_border; - $b_width = $width - ($left_border + $right_border); # width within the grey field - $overlap = 0; # how far each colum can fall over each other ...nice :-) - - # make the gif image .... - $im = new GD::Image($width,$height); - - # allocate the colors to use ... - $white = $im->colorAllocate(255,255,255); - $black = $im->colorAllocate(0,0,0); - $paper_white = $im->colorAllocate(220, 220, 220); - $grey1 = $im->colorAllocate(240, 240, 240); - $grey4 = $im->colorAllocate(229, 229, 229); - $grey2 = $im->colorAllocate(102, 102, 102); - $grey3 = $im->colorAllocate(153, 153, 153); - - $red = $im->colorAllocate(205,0,0); # msql - $lred = $im->colorAllocate(255,0,0); - $blue = $im->colorAllocate(0,0,205); # mysql - $lblue = $im->colorAllocate(0,0,255); # mysql_pgcc - $green = $im->colorAllocate(0, 205, 0); # postgres - $lgreen = $im->colorAllocate(0, 255, 0); # pg_fast - $orange = $im->colorAllocate(205,133, 0); # solid - $lorange = $im->colorAllocate(255, 165, 0); # Adabas - $yellow = $im->colorAllocate(205,205,0); # empress - $lyellow = $im->colorAllocate(255,255,0); - $magenta = $im->colorAllocate(255,0,255); # oracle - $lmagenta = $im->colorAllocate(255,200,255); - $cyan = $im->colorAllocate(0,205,205); # sybase - $lcyan = $im->colorAllocate(0,255,255); - $sienna = $im->colorAllocate(139,71,38); # db2 - $lsienna = $im->colorAllocate(160,82,45); - $coral = $im->colorAllocate(205,91,69); # Informix - $lcoral = $im->colorAllocate(255,114,86); - $peach = $im->colorAllocate(205,175,149); - $lpeach = $im->colorAllocate(255,218,185); - - @colors = ($red, $blue, $green, $orange, $yellow, $magenta, $cyan, $sienna, $coral, $peach); - @lcolors = ($lred, $lblue, $lgreen, $lorange, $lyellow, $lmagenta, $lcyan, $lsienna, $lcoral, $lpeach); - - # set a color per server so in every result it has the same color .... - foreach $key (@key_order) { - if ($tot{$key}{'server'} =~ /mysql/i) { - if ($key =~ /mysql_pgcc/i || $key =~ /mysql_odbc/i || $key =~ /mysql_fast/i) { - $tot{$key}{'color'} = $lblue; - } else { - $tot{$key}{'color'} = $blue; - } - } elsif ($tot{$key}{'server'} =~ /msql/i) { - $tot{$key}{'color'} = $lred; - } elsif ($tot{$key}{'server'} =~ /postgres/i) { - if ($key =~ /pg_fast/i) { - $tot{$key}{'color'} = $lgreen; - } else { - $tot{$key}{'color'} = $green; - } - } elsif ($tot{$key}{'server'} =~ /solid/i) { - $tot{$key}{'color'} = $lorange; - } elsif ($tot{$key}{'server'} =~ /empress/i) { - $tot{$key}{'color'} = $lyellow; - } elsif ($tot{$key}{'server'} =~ /oracle/i) { - $tot{$key}{'color'} = $magenta; - } elsif ($tot{$key}{'server'} =~ /sybase/i) { - $tot{$key}{'color'} = $cyan; - } elsif ($tot{$key}{'server'} =~ /db2/i) { - $tot{$key}{'color'} = $sienna; - } elsif ($tot{$key}{'server'} =~ /informix/i) { - $tot{$key}{'color'} = $coral; - } elsif ($tot{$key}{'server'} =~ /microsoft/i) { - $tot{$key}{'color'} = $peach; - } elsif ($tot{$key}{'server'} =~ /access/i) { - $tot{$key}{'color'} = $lpeach; - } elsif ($tot{$key}{'server'} =~ /adabas/i) { - $tot{$key}{'color'} = $lorange; - } - } - - # make the nice little borders - # left bar - $poly0 = new GD::Polygon; - $poly0->addPt(0,0); - $poly0->addPt($sm_border,$sm_border); - $poly0->addPt($sm_border,($height - $sm_border)); - $poly0->addPt(0,$height); - $im->filledPolygon($poly0,$grey1); - $im->polygon($poly0, $grey4); - # upper bar - $poly3 = new GD::Polygon; - $poly3->addPt(0,0); - $poly3->addPt($sm_border,$sm_border); - $poly3->addPt(($width - $sm_border),$sm_border); - $poly3->addPt($width,0); - $im->polygon($poly3, $grey4); - $tmptime = localtime(time); - $im->string(gdSmallFont,($width - $sm_border - (gdSmallFont->width * length($tmptime))),($height - ($sm_border) - gdSmallFont->height), $tmptime, $grey3); - - # right bar - $poly1 = new GD::Polygon; - $poly1->addPt($width,0); - $poly1->addPt(($width - $sm_border),$sm_border); - $poly1->addPt(($width - $sm_border),($height - $sm_border)); - $poly1->addPt($width,$height); - $im->filledPolygon($poly1, $grey3); - $im->stringUp(gdSmallFont,($width - 10),($height - (2 * $sm_border)), "Made by Luuk de Boer - 1997 (c)", $blue); - #below bar - $poly2 = new GD::Polygon; - $poly2->addPt(0,$height); - $poly2->addPt($sm_border,($height - $sm_border)); - $poly2->addPt(($width - $sm_border),($height - $sm_border)); - $poly2->addPt($width,$height); - $im->filledPolygon($poly2, $grey2); - - # do the black line around where in you will print ... (must be done at last - # but is hard to develop with ... but the filled grey must be done first :-) - $im->filledRectangle($left_border,$up_border,($width - ($right_border)),($height-$down_border),$grey4); - - - # print the nice title ... - $titlebar = "MySQL Benchmark results"; # head title ... - $titlebar1 = "Compare $opt_cmp "; # sub title - $header2 = "seconds/test"; # header value - $center = ($width / 2) - ((gdLargeFont->width * length($titlebar)) / 2); - $center1 = ($width / 2) - ((gdSmallFont->width * length($titlebar1)) / 2); - $center2 = ($width_greyfield/2) - ((gdSmallFont->width*length($header2))/2); - $bovenkant = $sm_border * 3; - $bovenkant1 = $bovenkant + gdLargeFont->height + (.5*$sm_border); - $bovenkant2 = $height - $down_border + (1*$sm_border) + (gdSmallFont->width*(length($xhigh)+3)); - $im->string(gdLargeFont,($center),($bovenkant + 1), $titlebar, $grey3); - $im->string(gdLargeFont,($center),($bovenkant), $titlebar, $red); - $im->string(gdSmallFont,($center1),($bovenkant1), $titlebar1, $black); - $im->string(gdSmallFont,($left_border + $center2),($bovenkant2), $header2, $black); - - $xlength = $width - $left_border - $right_border; - $lines = 10; # hard coded number of dashed lines - $xverh = $xlength / $xhigh; -# print " de verhouding ===> $xverh --- $xlength -- $xhigh \n"; - - $xstep = ($xhigh / $lines) * $xverh; - $teller = 0; - # make the nice dashed lines and print the values ... - for ($i = 0; $i <= $lines; $i++) { - $st2 = ($left_border) + ($i * $xstep); - $im->dashedLine($st2,($height-$down_border),$st2,($up_border), $grey3); - if (($i != 0) && ($teller == 2)) { - $st3 = sprintf("%.2f", $i*($xhigh/$lines)); - $im->stringUp(gdTinyFont,($st2 - (gdSmallFont->height/2)),($height - $down_border +(.5*$sm_border) + (gdSmallFont->width*(length($xhigh)+3))), $st3, $black); - $teller = 0; - } - $teller++; - } - $im->rectangle($left_border,$up_border,($width - ($right_border)),($height-$down_border),$black); -} - -sub legend { - # make the legend ... - $legxbegin = $left_border; - - $legybegin = $height - $down_border + (2*$sm_border) + (gdSmallFont->width * (length($xhigh) + 3)) + gdSmallFont->height; - $legxend = $legxbegin + $max_len_le + (4*$legend_block); - $legxend = $legxbegin + $width_greyfield; - $legyend = $legybegin + $max_high_le; - $im->filledRectangle($legxbegin,$legybegin,$legxend,$legyend,$grey4); - $im->rectangle($legxbegin,$legybegin,$legxend,$legyend,$black); - # calculate the space for the legend ..... - $c = 0; $i = 1; - $legybegin += $legend_block; - foreach $key (@key_order) { - $xtmp = $legxbegin + $legend_block; - $ytmp = $legybegin + ($c * (gdSmallFont->height +2)); - $xtmp1 = $xtmp + $legend_block; - $ytmp1 = $ytmp + gdSmallFont->height; - $im->filledRectangle($xtmp,$ytmp,$xtmp1,$ytmp1,$tot{$key}{'color'}); - $im->rectangle($xtmp,$ytmp,$xtmp1,$ytmp1,$black); - $tmp = $key; - $tmp =~ s/-cmp-$opt_cmp//i; - $giflegend = sprintf "%-24.24s: %-40.40s",$tmp,$tot{$key}{'server'}; - $xtmp2 = $xtmp1 + $legend_block; - $im->string(gdSmallFont,$xtmp2,$ytmp,"$giflegend",$black); - $c++; - $i++; -# print "$c $i -> $giflegend\n"; - } - -} - -sub lines { - - $g = 0; - $i = 0; - $ybegin = $up_border + ((($#key_order + 2)/2)*$step); - $xbegin = $left_border; - foreach $key (sort {$a cmp $b} keys %op) { - next if ($key =~ /TOTALS/i); - $c = 0; -# print "key - $key\n"; - foreach $server (@key_order) { - $tot1{$server}{$key}->[1] = 1 if ($tot1{$server}{$key}->[1] == 0); - $entry = $tot1{$server}{$key}->[0]/$tot1{$server}{$key}->[1]; - $ytmp = $ybegin + ($i * $step) ; - $xtmp = $xbegin + ($entry * $xverh) ; - $ytmp1 = $ytmp + $step; -# print "$server -- $entry --x $xtmp -- y $ytmp - $c\n"; - $entry1 = sprintf("%.2f", $entry); - if ($entry < $xhigh) { - $im->filledRectangle($xbegin, $ytmp, $xtmp, $ytmp1, $tot{$server}{'color'}); - $im->rectangle($xbegin, $ytmp, $xtmp, $ytmp1, $black); -# print the seconds behind the bar (look below for another entry) -# this entry is for the bars that are not greater then the max width -# of the grey field ... -# $im->string(gdTinyFont,(($xtmp+3),($ytmp),"$entry1",$black)); -# if you want the seconds in the color of the bar just uncomment it (below) -# $im->string(gdTinyFont,(($xtmp+3),($ytmp),"$entry1",$tot{$server}{'color'})); - } else { - $im->filledRectangle($xbegin, $ytmp, ($xbegin + ($xhigh*$xverh)), $ytmp1, $tot{$server}{'color'}); - $im->rectangle($xbegin, $ytmp, ($xbegin + ($xhigh*$xverh)), $ytmp1, $black); - -# print the seconds behind the bar (look below for another entry) -# here is the seconds printed behind the bar is the bar is too big for -# the graph ... (seconds is greater then xhigh ...) - $im->string(gdTinyFont, ($xbegin + ($xhigh*$xverh)+3),($ytmp),"$entry1",$black); -# if you want the seconds in the color of the bar just uncomment it (below) -# $im->string(gdTinyFont, ($xbegin + ($xhigh*$xverh)+3),($ytmp),"$entry1",$colors[$c]); - } - $c++; - $i++; - } - # see if we can center the text between the bars ... - $ytmp2 = $ytmp1 - (((($c)*$step) + gdSmallFont->height)/2); - $im->string(gdSmallFont,($sm_border*2),$ytmp2,$key, $black); - $i++; - } -} - - -sub gif { - my ($name) = @_; - $name_gif = $name . ".gif"; - print "name --> $name_gif\n"; - open (GIF, "> $name_gif") || die "Can't open $name_gif: $!\n"; - print GIF $im->gif; - close (GIF); -} - diff --git a/sql-bench/innotest1.sh b/sql-bench/innotest1.sh deleted file mode 100644 index 8675de19ae4608bfd9db59fffd1e259e895c7861..0000000000000000000000000000000000000000 --- a/sql-bench/innotest1.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/InnoDB combined database -# (c) 2002 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 100000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest1: MySQL/InnoDB stress test in Perl\n"; -print "-------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest1, innotest1a, and innotest1b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on table innotest1 in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest1 > out1\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 63857) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "kh"; - }}} - - for ($j = 0; $j < (($i * 764877) % 20); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect() -|| die $dbh->errstr; - -$dbh->do("set autocommit = 0"); - -$n = 0; - -for ($i = 0; $i < 1; $i++) { - - print "Dropping table innotest1\n"; - - $dbh->do("drop table innotest1"); - - print "Creating table innotest1\n"; - - $dbh->do( - "create table innotest1 (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), E TIMESTAMP, F TIMESTAMP, G DATETIME, PRIMARY KEY (A, D), INDEX -(B, C), INDEX (C), INDEX (D), INDEX(E), INDEX(G)) TYPE = INNODB") - || die $dbh->errstr; - - for ($j = 2; $j < $opt_loop_count - 10; $j = $j + 2) { - - if ($j % 10 == 0) { - $dbh->do( - "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NULL, NULL)"); - } else { - $dbh->do( - "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NOW(), NOW())"); - } - - $dbh->do("update innotest1 set B = '".$rnd_str[$j + 7]."' where A = ".$random[$j + 5]); - - $dbh->do("update innotest1 SET D = D + 1 where A =".($j / 2 - 500)); - - $dbh->do("update innotest1 set B = '".$rnd_str[$j + 1]."' where A =".($j / 2 - 505)); - - $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]); - - fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7)); - - if (0 == ($j % 10)) { - $dbh->do("commit"); - } - - if (0 == ($j % 97)) { - fetch_all_rows($dbh, "select c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'"); - fetch_all_rows($dbh, "select b, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'"); - fetch_all_rows($dbh, "select b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'"); - fetch_all_rows($dbh, "select b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'"); - fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'"); - fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'"); - fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'"); - fetch_all_rows($dbh, "select d, b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'"); - - $dbh->do("rollback"); - } - - for ($k = 1; $k < 10; $k++) { - - $n += fetch_all_rows($dbh, -"SELECT a, d from innotest1 where a = ".(($k * 1764767) % $j)); - - $n += fetch_all_rows($dbh, -"SELECT * from innotest1 where a = ".(($k * 187567) % $j)); - - } - - if (0 == ($j % 1000)) { - print "round $j, $n rows fetched\n"; - } - - if (0 == ($j % 20000)) { - print "Checking table innotest1...\n"; - $dbh->do("check table innotest1"); - print "Table checked.\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/innotest1a.sh b/sql-bench/innotest1a.sh deleted file mode 100644 index 93f8a2a443b65870d4c63d97743cef6b91ba7232..0000000000000000000000000000000000000000 --- a/sql-bench/innotest1a.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/InnoDB combined database -# (c) 2002 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 200000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest1a: MySQL/InnoDB stress test in Perl\n"; -print "-------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest1, innotest1a, and innotest1b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on table innotest1 in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest1 > out1\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 63857) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "kh"; - }}} - - for ($j = 0; $j < (($i * 764877) % 20); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect() -|| die $dbh->errstr; - - -$dbh->do("set autocommit = 0"); - -for ($i = 0; $i < 1; $i++) { - print "loop $i\n"; - - for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) { - $dbh->do( - "insert into innotest1 (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')"); - $dbh->do("update innotest1 set B = '".$rnd_str[$j + 2]."' where A = ".$random[$j + 5]); - $dbh->do("update innotest1 SET D = D + 1 where A =".(($j - 1) / 2 - 777)); - $dbh->do("update innotest1 set B = '".$rnd_str[$j + 8]."' where A =".(($j - 1) / 2 - 770)); - $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]); - - fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7)); - - if (0 == ($j % 37)) { - $dbh->do("commit"); - } - - if (0 == ($j % 533)) { - $dbh->do("rollback"); - } - - if (0 == ($j % 537)) { - print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'"); - print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'"); - print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'"); - print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'"); - print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'"); - print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'"); - print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'"); - print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'"); - print "\n"; - } - - if (0 == (($j - 1) % 1000)) { - print "round $j\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/innotest1b.sh b/sql-bench/innotest1b.sh deleted file mode 100644 index 48fe96ebe7d2fbc56ef991795b7bb454d18a0716..0000000000000000000000000000000000000000 --- a/sql-bench/innotest1b.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/InnoDB combined database -# (c) 2002 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 200000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest1b: MySQL/InnoDB stress test in Perl\n"; -print "-------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest1, innotest1a, and innotest1b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on table innotest1 in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest1 > out1\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 63857) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "kh"; - }}} - - for ($j = 0; $j < (($i * 764877) % 20); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect() -|| die $dbh->errstr; - -$dbh->do("set autocommit = 0"); - -for ($i = 0; $i < 5; $i++) { - print "loop $i\n"; - - for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) { - - fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7)); - - if (0 == ($j % 37)) { - $dbh->do("commit"); - } - - if (0 == ($j % 533)) { - $dbh->do("rollback"); - } - - if (0 == ($j % 537)) { - print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'"); - print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'"); - print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'"); - print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'"); - print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'"); - print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'"); - print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'"); - print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'"); - print "\n"; - } - - if (0 == (($j - 1) % 1000)) { - print "round $j\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/innotest2.sh b/sql-bench/innotest2.sh deleted file mode 100644 index aea44003903deb3a46f0ae1cfb5b9bf646051c44..0000000000000000000000000000000000000000 --- a/sql-bench/innotest2.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/InnoDB combined database -# (c) 2002 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 100000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest2: MySQL/InnoDB stress test in Perl for FOREIGN keys\n"; -print "------------------------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks with foreign keys with\n"; -print "the ON DELETE ... clause. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest2, innotest2a, and innotest2b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest2 > out2\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 63857) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "khD"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "kHd"; - }}} - - for ($j = 0; $j < (($i * 764877) % 10); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect() -|| die $dbh->errstr; - -$dbh->do("set autocommit = 0"); - -for ($i = 0; $i < 1; $i++) { - print "loop $i\n"; - - print "dropping table innotest2a\n"; - $dbh->do("drop table innotest2a"); - - print "dropping table innotest2b\n"; - $dbh->do("drop table innotest2b"); - - print "dropping table innotest2c\n"; - $dbh->do("drop table innotest2c"); - - print "dropping table innotest2d\n"; - $dbh->do("drop table innotest2d"); - - print "creating table innotest2b\n"; - $dbh->do( - "create table innotest2b (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C)) TYPE = INNODB") - || die $dbh->errstr; - - print "creating table innotest2a\n"; - - $dbh->do( - "create table innotest2a (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2b (A, D) ON DELETE CASCADE) TYPE = INNODB") - || die $dbh->errstr; - - print "creating table innotest2c\n"; - - $dbh->do( - "create table innotest2c (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2a (A, D) ON DELETE CASCADE, FOREIGN KEY (B, C) REFERENCES innotest2a (B, C) ON DELETE CASCADE) TYPE = INNODB") - || die $dbh->errstr; - - print "creating table innotest2d\n"; - - $dbh->do( - "create table innotest2d (A INT AUTO_INCREMENT, D INT, B VARCHAR(200), C VARCHAR(175), UNIQUE KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (C) REFERENCES innotest2c (C) ON DELETE SET NULL, FOREIGN KEY (B, C) REFERENCES innotest2c (B, C) ON DELETE SET NULL) TYPE = INNODB") - || die $dbh->errstr; - print "created\n"; - - for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) { - $dbh->do( - "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do( - "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do( - "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do( - "insert into innotest2d (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do("delete from innotest2b where A = ".$random[$random[$j]]) - || print $dbh->errstr; - - if (0 == ($j % 10)) { - $dbh->do("commit"); - } - - if (0 == ($j % 39)) { - $dbh->do("rollback"); - } - - if (0 == ($j % 1000)) { - print "round $j\n"; - } - if (0 == ($j % 20000)) { - print "Checking tables...\n"; - $dbh->do("check table innotest2a"); - $dbh->do("check table innotest2b"); - $dbh->do("check table innotest2c"); - $dbh->do("check table innotest2d"); - print "Tables checked.\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/innotest2a.sh b/sql-bench/innotest2a.sh deleted file mode 100644 index 3d4bb9933daf77eb1523487c3e5b7d2472193a19..0000000000000000000000000000000000000000 --- a/sql-bench/innotest2a.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/Innobase combined database -# (c) 2000 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 100000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest2a: MySQL/InnoDB stress test in Perl for FOREIGN keys\n"; -print "------------------------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks with foreign keys with\n"; -print "the ON DELETE ... clause. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest2, innotest2a, and innotest2b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest2 > out2\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 63857) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "khD"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "kHd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - }}} - - for ($j = 0; $j < (($i * 764877) % 20); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect() -|| die $dbh->errstr; - -$dbh->do("set autocommit = 0"); - -for ($i = 0; $i < 5; $i++) { - print "loop $i\n"; - - for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 1) { - - $dbh->do("update innotest2a set B = '".$rnd_str[$j + 1]."' where A = ".$random[$j + 5]) - || print $dbh->errstr; - - $dbh->do("delete from innotest2a where A = ".$random[$random[$j]]) - || print $dbh->errstr; - - if (0 == ($j % 10)) { - $dbh->do("commit"); - } - - if (0 == ($j % 39)) { - $dbh->do("rollback"); - } - - if (0 == ($j % 1000)) { - print "round $j\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/innotest2b.sh b/sql-bench/innotest2b.sh deleted file mode 100644 index 272b6dcffd016aece4007660d6a93febd35dae03..0000000000000000000000000000000000000000 --- a/sql-bench/innotest2b.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!@PERL@ -############################################################################ -# Stress test for MySQL/Innobase combined database -# (c) 2000 Innobase Oy & MySQL AB -# -############################################################################ - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count = 100000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -print "Innotest2b: MySQL/InnoDB stress test in Perl for FOREIGN keys\n"; -print "------------------------------------------------------------\n"; -print "This is a randomized stress test for concurrent inserts,\n"; -print "updates, deletes, commits and rollbacks with foreign keys with\n"; -print "the ON DELETE ... clause. The test will generate\n"; -print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n"; -print "\n"; -print "You should run innotest2, innotest2a, and innotest2b concurrently.\n"; -print "The thing to watch is that the server does not crash or does not\n"; -print "print to the .err log anything. Currently, due to a buglet in MySQL,\n"; -print "warnings about MySQL lock reservations can appear in the .err log.\n"; -print "The test will run very long, even several hours. You can kill\n"; -print "the perl processes running this test at any time and do CHECK\n"; -print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n"; -print "\n"; -print "Some of these stress tests will print a lot of SQL errors\n"; -print "to the standard output. That is not to be worried about.\n"; -print "You can direct the output to a file like this:\n"; -print "perl innotest2 > out2\n\n"; - -print "Generating random keys\n"; -$random[$opt_loop_count] = 0; -$rnd_str[$opt_loop_count] = "a"; - -for ($i = 0; $i < $opt_loop_count; $i++) { - - $random[$i] = ($i * 98641) % $opt_loop_count; - - if (0 == ($random[$i] % 3)) { - $rnd_str[$i] = "khD"; - } else { if (1 == ($random[$i] % 3)) { - $rnd_str[$i] = "khd"; - } else { if (2 == ($random[$i] % 3)) { - $rnd_str[$i] = "kHd"; - }}} - - for ($j = 0; $j < (($i * 764877) % 10); $j++) { - $rnd_str[$i] = $rnd_str[$i]."k"; - } -} - -#### -#### Connect -#### - -$dbh = $server->connect(); - -$dbh->do("set autocommit = 0"); - -for ($i = 0; $i < 1; $i++) { - print "loop $i\n"; - - for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) { - $dbh->do( - "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do( - "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do( - "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')") - || print $dbh->errstr; - - $dbh->do("delete from innotest2b where A = ".$random[$random[$j]]) - || print $dbh->errstr; - - $dbh->do("update innotest2b set A = A + 1 where A = ".$random[$j]) - || print $dbh->errstr; - - if (0 == ($j % 10)) { - $dbh->do("commit"); - } - - if (0 == ($j % 39)) { - $dbh->do("rollback"); - } - - if (0 == ($j % 1000)) { - print "round $j\n"; - } - } - - $dbh->do("commit"); -} - -$dbh->disconnect; # close connection diff --git a/sql-bench/limits/Adabas.cfg b/sql-bench/limits/Adabas.cfg deleted file mode 100644 index 99aaa36ab5213f635f098dec01963f5dfe0cba29..0000000000000000000000000000000000000000 --- a/sql-bench/limits/Adabas.cfg +++ /dev/null @@ -1,429 +0,0 @@ -#This file is automaticly generated by crash-me 1.20b - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_add_multi_col=without add # Alter table add many columns -alter_alter_col=no # Alter table alter column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=yes # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=16 # number of columns in group by -columns_in_order_by=16 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment -comment_/**/=no # /* */ as comment -compute=no # Compute -connections=1 # Simultaneous connections -crash_me_safe=no # crash me safe -crash_me_version=1.20b # crash me version -create_default=yes # default value for column -create_index=yes # create index -cross_join=no # cross join (same as from a,b) -date_as_string=yes # String functions on date columns -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=yes # drop index -end_colon=no # allows end ';' -except=yes # except -except_all=yes # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=yes # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=error # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=yes # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=yes # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=yes # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=yes # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=yes # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=yes # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=error # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=yes # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=yes # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=error # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=error # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=error # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=yes # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=no # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # null values in group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=yes # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=yes # INSERT with set syntax -intersect=yes # intersect -intersect_all=yes # intersect all -join_tables=16 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=yes # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=4000 # max char() size -max_column_name=+512 # column name length -max_columns=254 # Columns in table -max_conditions=252 # OR and AND in WHERE -max_expressions=1723 # simple expressions -max_index=+64 # max index -max_index_length=254 # index length -max_index_name=+512 # index name length -max_index_part_length=254 # max index part length -max_index_parts=15 # index parts -max_index_varchar_part_length=254 # index varchar part length -max_row_length=3991 # max table row length (without blobs) -max_row_length_with_null=3991 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=1022 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=+512 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=4000 # max varchar() size -minus=no # minus -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.0.35 i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=8202 # query size -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=223 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -right_outer_join=no # right outer join -round_on_store=yes # Correct rounding when storing float values -select_constants=yes # Select constants -select_string_size=4023 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=no # SELECT without FROM -server_version=Adabas 10.01.00 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=no # case independent table names -table_wildcard=yes # Select table_name.* -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=yes # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=no # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=no # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=yes # views -where_string_size=4023 # constant string size in where diff --git a/sql-bench/limits/Informix.cfg b/sql-bench/limits/Informix.cfg deleted file mode 100644 index 85e79b53f216db4c51cda8d0345b8a3fbd192a55..0000000000000000000000000000000000000000 --- a/sql-bench/limits/Informix.cfg +++ /dev/null @@ -1,420 +0,0 @@ -#This file is automaticly generated by crash-me 1.19a - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=yes # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=yes # /* */ as comment -compute=no # Compute -connections=269 # Simultaneous connections -crash_me_safe=no # crash me safe -crash_me_version=1.19a # crash me version -create_default=no # default value for column -create_index=yes # create index -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=no # Double '' as ' in strings -drop_index=yes # drop index -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=yes # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=yes # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=yes # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=yes # Function POW -func_extra_range=yes # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=yes # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=yes # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=error # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=yes # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Test nulls in group by -group_by_position=yes # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=no # intersect -intersect_all=no # intersect all -join_tables=+64 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=yes # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=256 # max char() size -max_column_name=18 # column name length -max_columns=994 # Columns in table -max_conditions=1204 # OR and AND in WHERE -max_expressions=16372 # simple expressions -max_index=+64 # max index -max_index_length=255 # index length -max_index_name=18 # index name length -max_index_part_length=255 # max index part length -max_index_parts=15 # index parts -max_index_varchar_part_length=254 # index varchar part length -max_row_length=32356 # max table row length (without blobs) -max_row_length_with_null=32356 # table row length with nulls (without blobs) -max_select_alias_name=18 # select alias name length -max_stack_expression=47 # stacked expressions -max_table_alias_name=18 # table alias name length -max_table_name=18 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=255 # max varchar() size -minus=no # minus -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique -null_num_expr=no # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows NT Version 4.0 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=32766 # query size -quote_with_"=yes # Allows ' and " as string markers -recursive_subqueries=10 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -right_outer_join=no # right outer join -select_constants=yes # Select constants -select_string_size=256 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=Informix 7.30C1 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_wildcard=yes # Select table_name.* -transactions=error # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=yes # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=yes # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=yes # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=yes # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=no # Type time -type_sql_timestamp=no # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=32452 # constant string size in where diff --git a/sql-bench/limits/access.cfg b/sql-bench/limits/access.cfg deleted file mode 100644 index 86d43bdee6a31afb1967de661335191d90d1d9fa..0000000000000000000000000000000000000000 --- a/sql-bench/limits/access.cfg +++ /dev/null @@ -1,501 +0,0 @@ -#This file is automaticly generated by crash-me 1.45 - -NEG=no # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=no # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=without add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=no # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=drop constraint # Alter table drop primary key -alter_drop_unique=with constraint # Alter table drop unique -alter_modify_col=with alter # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic rowid -binary_numbers=no # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=yes # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=37 # number of columns in group by -columns_in_order_by=37 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment -comment_/**/=no # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=64 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.45 # crash me version -create_default=no # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_as_string=error # String functions on date columns -date_last=no # Supports 9999-12-31 dates -date_one=no # Supports 0001-01-01 dates -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=with 'ON' # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=error # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=yes # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=error # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=yes # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=error # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=error # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=no # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=no # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=no # Function LOWER -func_sql_nullif=no # Function NULLIF -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=no # Function UPPER -func_sql_user=no # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=no # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=no # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=no # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -has_true_false=yes # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=no # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=32 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=-1 # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=85 # max char() size -max_column_name=59 # column name length -max_columns=255 # Columns in table -max_conditions=97 # OR and AND in WHERE -max_expressions=+10000 # simple expressions -max_index=32 # max index -max_index_length=10 # index length -max_index_name=64 # index name length -max_index_part_length=50 # max index part length -max_index_parts=10 # index parts -max_index_varchar_part_length=50 # index varchar part length -max_row_length=2025 # max table row length (without blobs) -max_row_length_with_null=2025 # table row length with nulls (without blobs) -max_select_alias_name=64 # select alias name length -max_stack_expression=14 # stacked expressions -max_table_alias_name=253 # table alias name length -max_table_name=64 # table name length -max_text_size=17 # max text or blob size -max_unique_index=32 # unique indexes -max_varchar_size=85 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_null_in_unique=yes # null in unique index -multi_strings=no # Multiple line strings -multi_table_delete=yes # DELETE FROM table1,table2... -multi_table_update=yes # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is concat('a',NULL) = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique index -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Microsoft Windows 2000 [Version 5.00.2195] # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=yes # [] as identifier quote -quote_ident_with_`=yes # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=49 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=with TOP # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=516076 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Access 2000 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=error # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=yes # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=yes # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=yes # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_extra_nclob=no # Type nclob -type_extra_number=yes # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=yes # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=no # Type character(1 arg) -type_sql_character_varying(1_arg)=no # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=no # Type dec(2 arg) -type_sql_decimal(2_arg)=no # Type decimal(2 arg) -type_sql_double_precision=no # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=no # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=no # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=no # views -where_string_size=258035 # constant string size in where diff --git a/sql-bench/limits/access_odbc.cfg b/sql-bench/limits/access_odbc.cfg deleted file mode 100644 index cc2e05c01546ba9a6fa18343f3c3881e0f01b0ad..0000000000000000000000000000000000000000 --- a/sql-bench/limits/access_odbc.cfg +++ /dev/null @@ -1,448 +0,0 @@ -#This file is automaticly generated by crash-me 1.37 - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_add_multi_col=without add # Alter table add many columns -alter_alter_col=no # Alter table alter column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -binary_items=yes # binary items (0x41) -case_insensitive_strings=yes # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=11 # number of columns in group by -columns_in_order_by=11 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment -comment_/**/=no # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=64 # Simultaneous connections -constraint_check=no # CHECK constraint -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.37 # crash me version -create_default=no # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_as_string=error # String functions on date columns -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=with 'ON' # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=error # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=yes # Function CHR -func_extra_coalesce=no # Function COALESCE -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=error # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=yes # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=error # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=no # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_lower=no # Function LOWER -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=no # Function UPPER -func_sql_user=no # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=no # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=no # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=no # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=no # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -join_tables=32 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=no # lock table -logical_value=-1 # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=255 # max char() size -max_column_name=59 # column name length -max_columns=255 # Columns in table -max_conditions=97 # OR and AND in WHERE -max_expressions=+10000 # simple expressions -max_index=32 # max index -max_index_length=2026 # index length -max_index_name=64 # index name length -max_index_part_length=255 # max index part length -max_index_parts=10 # index parts -max_index_varchar_part_length=85 # index varchar part length -max_row_length=2025 # max table row length (without blobs) -max_row_length_with_null=2025 # table row length with nulls (without blobs) -max_select_alias_name=64 # select alias name length -max_stack_expression=14 # stacked expressions -max_table_alias_name=253 # table alias name length -max_table_name=64 # table name length -max_text_size=17 # max text or blob size -max_unique_index=32 # unique indexes -max_varchar_size=85 # max varchar() size -minus=no # minus -minus_neg=yes # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=yes # DELETE FROM table1,table2... -multi_table_update=yes # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_in_index=yes # null in index -null_in_unique=yes # null in unique -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows 98 [Version 4.10.1998] # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=yes # [] as identifier quote -quote_ident_with_`=yes # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=49 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # SELECT with LIMIT -select_limit2=no # SELECT with LIMIT #,# -select_string_size=516076 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Access 2000 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=yes # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=yes # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=yes # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_extra_nclob=no # Type nclob -type_extra_number=yes # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=yes # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=no # Type character(1 arg) -type_sql_character_varying(1_arg)=no # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=no # Type dec(2 arg) -type_sql_decimal(2_arg)=no # Type decimal(2 arg) -type_sql_double_precision=no # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=no # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=no # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=no # views -where_string_size=258035 # constant string size in where diff --git a/sql-bench/limits/db2.cfg b/sql-bench/limits/db2.cfg deleted file mode 100644 index 5b2c0e172e79823ec094fac990a5deb133b002fd..0000000000000000000000000000000000000000 --- a/sql-bench/limits/db2.cfg +++ /dev/null @@ -1,522 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=no # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=drop primary key # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -automatic_rowid=no # Automatic row id -binary_numbers=no # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=no # Case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=yes # -- as comment (ANSI) -comment_/**/=no # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=40 # Simultaneous connections (installation default) -constraint_check=yes # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_infinity=no # Supports 'infinity dates -date_last=no # Supports 9999-12-31 dates -date_one=no # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -dont_require_cast_to_float=yes # No need to cast from integer to float -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=yes # except -except_all=yes # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=yes # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=yes # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=yes # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=error # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=yes # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=error # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=yes # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=no # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=yes # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=no # hex numbers (0x41) -hex_strings=yes # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=yes # insert empty string -insert_multi_value=yes # INSERT with Value lists -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=yes # intersect -intersect_all=yes # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=10 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=yes # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=254 # max char() size -max_column_name=30 # column name length -max_columns=500 # Columns in table -max_conditions=2082 # OR and AND in WHERE -max_expressions=9543 # simple expressions -max_index=+64 # max index -max_index_length=1024 # index length -max_index_name=18 # index name length -max_index_part_length=254 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=255 # index varchar part length -max_row_length=4005 # max table row length (without blobs) -max_row_length_with_null=3989 # table row length with nulls (without blobs) -max_select_alias_name=30 # select alias name length -max_stack_expression=1363 # stacked expressions -max_table_alias_name=128 # table alias name length -max_table_name=128 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=4000 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=no # Is 1+NULL = NULL -nulls_in_unique=no # null combination in unique index -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=65535 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=8 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=yes # rename table -repeat_string_size=4000 # return string size from function -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=32672 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=IBM DB2 7.2 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=truncate # Storage of float values -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=yes # constant string size in where -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=no # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=32672 # constant string size in where diff --git a/sql-bench/limits/empress.cfg b/sql-bench/limits/empress.cfg deleted file mode 100644 index 67256adb3bfea5c11c4353350b9e25ff10c9a68b..0000000000000000000000000000000000000000 --- a/sql-bench/limits/empress.cfg +++ /dev/null @@ -1,364 +0,0 @@ -#This file is automaticly generated by crash-me 1.18a - -NEG=yes # update of column= -column -atomic_updates=no # atomic updates -binary_items=no # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -column_alias=no # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=yes # /* */ as comment -compute=no # Compute -connections=10 # Simultaneous connections -crash_me_safe=no # crash me safe -crash_me_version=1.18a # crash me version -create_default=no # default value for column -create_index=yes # create index -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=yes # drop index -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_bit_count=no # Function BIT_COUNT -func_extra_charindex=no # Function CHARINDEX -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_instr=no # Function LOCATE as INSTR -func_extra_interval=no # Function INTERVAL -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=yes # Function POW -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user=no # Function USER -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=no # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=no # Function LOWER -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=no # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=yes # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=no # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having with alias -having_with_group=yes # Having with group function -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=no # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=no # intersect -intersect_all=no # intersect all -join_tables=63 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=7930634 # max char() size -max_column_name=31 # column name length -max_columns=2419 # Columns in table -max_conditions=628 # OR and AND in WHERE -max_expressions=4092 # simple expressions -max_index=+64 # max index -max_index_length=2710 # index length -max_index_name=32 # index name length -max_index_part_length=2710 # index part length -max_index_parts=+64 # index parts -max_row_length=62696 # max table row length (without blobs) -max_row_length_with_null=62702 # table row length with nulls (without blobs) -max_stack_expression=131 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=32 # table name length -max_text_size=4095 # max text or blob size -max_unique_index=+64 # max unique index -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is concat('a',NULL) = NULL -null_in_index=no # null in index -null_num_expr=no # Is 1+NULL = NULL -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.0.33 i586 # crash-me tested on -order_by=yes # Order by -order_by_position=yes # Order by position -primary_key_in_create=no # primary key in create table -query_size=16777216 # query size -quote_with_"=yes # Allows ' and " as string markers -recursive_subqueries=49 # recursive subqueries -remember_end_space=error # Remembers end space in char() -right_outer_join=no # right outer join -select_constants=yes # Select constants -select_string_size=32753 # constant string string size in SELECT -select_table_update=no # Update with sub select -select_without_from=no # SELECT without FROM -server_version=EMPRESS Version 6.10 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=no # Table alias -table_wildcard=no # Select table_name.* -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_datetime=no # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_money=no # Type money -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_reltime=no # Type reltime -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=yes # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=no # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=no # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=yes # Type time -type_sql_timestamp=no # Type timestamp -type_sql_varchar(1_arg)=no # Type varchar(1 arg) -union=no # union -union_all=no # union all -unique_in_create=no # unique in create table -views=yes # views -where_string_size=nonstandard # constant string size in where diff --git a/sql-bench/limits/frontbase.cfg b/sql-bench/limits/frontbase.cfg deleted file mode 100644 index f8aad442131c124c5bd63256dc7223e086fb7d72..0000000000000000000000000000000000000000 --- a/sql-bench/limits/frontbase.cfg +++ /dev/null @@ -1,516 +0,0 @@ -#This file is automaticly generated by crash-me 1.52 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=no # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=yes # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=with restrict/cascade # Alter table drop column -alter_drop_constraint=with restrict/cascade # Alter table drop constraint -alter_drop_foreign_key=with drop constraint and restrict/cascade # Alter table drop foreign key -alter_drop_primary_key=drop constraint # Alter table drop primary key -alter_drop_unique=with constraint and restrict/cascade # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic rowid -binary_numbers=yes # binary numbers (0b1001) -binary_strings=yes # binary strings (b'0110') -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment (ANSI) -comment_/**/=no # /* */ as comment -comment_//=no # // as comment (ANSI) -compute=no # Compute -connections=47 # Simultaneous connections (installation default) -constraint_check=yes # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.52 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=yes # Create SCHEMA -create_table_select=no # create table from select -cross_join=yes # cross join (same as from a,b) -date_infinity=no # Supports 'infinity dates -date_last=yes # Supports 9999-12-31 dates -date_one=yes # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=yes # drop table require cascade/restrict -drop_restrict=yes # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=yes # except -except_all=yes # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_circular=yes # Circular foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=no # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=no # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=no # Function EXP -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=no # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=no # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=yes # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=error # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=yes # Function CURRENT_USER -func_sql_extract_sql=no # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=yes # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=yes # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=no # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=no # Group on unused column -has_true_false=no # TRUE and FALSE -having=no # Having -having_with_alias=no # Having with alias -hex_numbers=yes # hex numbers (0x41) -hex_strings=yes # hex strings (x'1ace') -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=+8000000 # max char() size -max_column_name=128 # column name length -max_columns=+8192 # Columns in table -max_conditions=5427 # OR and AND in WHERE -max_expressions=4075 # simple expressions -max_index=38 # max index -max_index_length=+8192 # index length -max_index_name=128 # index name length -max_index_part_length=+8000000 # max index part length -max_index_parts=20 # index parts -max_index_varchar_part_length=+8000000 # index varchar part length -max_row_length=377681 # max table row length (without blobs) -max_row_length_with_null=0 # table row length with nulls (without blobs) -max_select_alias_name=128 # select alias name length -max_table_alias_name=128 # table alias name length -max_table_name=128 # table name length -max_unique_index=38 # unique indexes -max_varchar_size=+8000000 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=yes # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=yes # Value lists in INSERT -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=no # Is 1+NULL = NULL -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.2.14-my-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=no # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=+64 # recursive subqueries -remember_end_space=yes # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=4199664 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=FrontBase 2.1 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=error # transactions -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=yes # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=yes # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=yes # Type bit(1 arg) -type_sql_bit_varying(1_arg)=yes # Type bit varying(1 arg) -type_sql_boolean=yes # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=yes # Type interval day -type_sql_interval_day_to_hour=yes # Type interval day to hour -type_sql_interval_day_to_minute=yes # Type interval day to minute -type_sql_interval_day_to_second=yes # Type interval day to second -type_sql_interval_hour=yes # Type interval hour -type_sql_interval_hour_to_minute=yes # Type interval hour to minute -type_sql_interval_hour_to_second=yes # Type interval hour to second -type_sql_interval_minute=yes # Type interval minute -type_sql_interval_minute_to_second=yes # Type interval minute to second -type_sql_interval_month=yes # Type interval month -type_sql_interval_second=yes # Type interval second -type_sql_interval_year=yes # Type interval year -type_sql_interval_year_to_month=yes # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=yes # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=7999965 # constant string size in where diff --git a/sql-bench/limits/interbase-dialect1.cfg b/sql-bench/limits/interbase-dialect1.cfg deleted file mode 100644 index 046627be513ba80eb31624f29e1cced5c5b692db..0000000000000000000000000000000000000000 --- a/sql-bench/limits/interbase-dialect1.cfg +++ /dev/null @@ -1,514 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=no # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=with add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic row id -binary_numbers=yes # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=no # Case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_order_by=37 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=1000 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_infinity=no # Supports 'infinity dates -date_last=no # Supports 9999-12-31 dates -date_one=no # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=no # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=no # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=no # Function EXP -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=no # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=no # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=no # Function LOWER -func_sql_nullif_num=no # Function NULLIF with numbers -func_sql_nullif_string=no # Function NULLIF with strings -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=no # insert empty string -insert_multi_value=no # INSERT with Value lists -insert_select=no # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=32767 # max char() size -max_column_name=18 # column name length -max_columns=4759 # Columns in table -max_conditions=2944 # OR and AND in WHERE -max_expressions=+10000 # simple expressions -max_index=+64 # max index -max_index_name=31 # index name length -max_index_parts=16 # index parts -max_index_varchar_part_length=249 # index varchar part length -max_row_length=64744 # max table row length (without blobs) -max_row_length_with_null=64744 # table row length with nulls (without blobs) -max_select_alias_name=132 # select alias name length -max_stack_expression=165 # stacked expressions -max_table_alias_name=255 # table alias name length -max_table_name=31 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=10923 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=no # Is 1+NULL = NULL -nulls_in_unique=no # null combination in unique index -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=65535 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=61 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=32767 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=6.0.1 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=error # constant string size in where -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=no # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=no # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=no # views -where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/interbase-dialect3.cfg b/sql-bench/limits/interbase-dialect3.cfg deleted file mode 100644 index fdc930986888c24a7612e5acf980052d11a67066..0000000000000000000000000000000000000000 --- a/sql-bench/limits/interbase-dialect3.cfg +++ /dev/null @@ -1,514 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=no # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=with add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic row id -binary_numbers=yes # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=no # Case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_order_by=37 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=1000 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_infinity=no # Supports 'infinity dates -date_last=error # Supports 9999-12-31 dates -date_one=error # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=no # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=no # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=no # Function EXP -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=no # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=no # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=no # Function LOWER -func_sql_nullif_num=no # Function NULLIF with numbers -func_sql_nullif_string=no # Function NULLIF with strings -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=no # insert empty string -insert_multi_value=no # INSERT with Value lists -insert_select=no # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=32767 # max char() size -max_columns=4759 # Columns in table -max_conditions=5888 # OR and AND in WHERE -max_expressions=+10000 # simple expressions -max_index=+64 # max index -max_index_name=31 # index name length -max_index_parts=16 # index parts -max_index_varchar_part_length=249 # index varchar part length -max_row_length=64744 # max table row length (without blobs) -max_row_length_with_null=64744 # table row length with nulls (without blobs) -max_select_alias_name=132 # select alias name length -max_stack_expression=165 # stacked expressions -max_table_alias_name=255 # table alias name length -max_table_name=31 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=10923 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=no # Is 1+NULL = NULL -nulls_in_unique=no # null combination in unique index -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=65535 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=61 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=32767 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=6.0.1 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=error # constant string size in where -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_=no # Type -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=no # views -where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/interbase-superserver.cfg b/sql-bench/limits/interbase-superserver.cfg deleted file mode 100644 index 87da0d0633cd5bc1b95abe2ad663be03f7a47032..0000000000000000000000000000000000000000 --- a/sql-bench/limits/interbase-superserver.cfg +++ /dev/null @@ -1,514 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=no # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=with add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic row id -binary_numbers=yes # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=no # Case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_order_by=37 # number of columns in order by -comment_#=no # # as comment -comment_--=no # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=395 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_infinity=no # Supports 'infinity dates -date_last=error # Supports 9999-12-31 dates -date_one=error # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=no # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=no # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=no # Function EXP -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=no # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=no # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=no # Function LOWER -func_sql_nullif_num=no # Function NULLIF with numbers -func_sql_nullif_string=no # Function NULLIF with strings -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=no # insert empty string -insert_multi_value=no # INSERT with Value lists -insert_select=no # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=32745 # max char() size -max_column_name=18 # column name length -max_columns=4759 # Columns in table -max_conditions=441504 # OR and AND in WHERE -max_expressions=5486 # simple expressions -max_index=+64 # max index -max_index_name=31 # index name length -max_index_parts=16 # index parts -max_index_varchar_part_length=218 # index varchar part length -max_row_length=64744 # max table row length (without blobs) -max_row_length_with_null=64744 # table row length with nulls (without blobs) -max_select_alias_name=132 # select alias name length -max_stack_expression=165 # stacked expressions -max_table_alias_name=255 # table alias name length -max_table_name=31 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=32745 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=no # Is 1+NULL = NULL -nulls_in_unique=no # null combination in unique index -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.4.4-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=61 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=32767 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=6.0.1 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=error # constant string size in where -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=no # views -where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/interbase.cfg b/sql-bench/limits/interbase.cfg deleted file mode 100644 index 994799e5ea028b343b9bf8b01247138559ca137f..0000000000000000000000000000000000000000 --- a/sql-bench/limits/interbase.cfg +++ /dev/null @@ -1,472 +0,0 @@ -#This file is automaticly generated by crash-me 1.40 - -NEG=no # update of column= -column -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=no # Alter table add foreign key -alter_add_multi_col=with add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=no # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic rowid -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=no # -- as comment -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=10 # Simultaneous connections -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=no # crash me safe -crash_me_version=1.40 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=ignored # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_last=no # Supports 9999-12-31 dates -date_one=no # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key_syntax=no # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=no # Function ABS -func_odbc_acos=no # Function ACOS -func_odbc_ascii=no # Function ASCII -func_odbc_asin=no # Function ASIN -func_odbc_atan=no # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=no # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=no # Function EXP -func_odbc_floor=no # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=no # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=no # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=no # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=no # Function SIGN -func_odbc_sin=no # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=no # Function ODBC SUBSTRING -func_odbc_tan=no # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=no # Function LOWER -func_sql_nullif=no # Function NULLIF -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=no # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=no # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=+100 # big expressions -max_columns=4743 # Columns in table -max_conditions=441504 # OR and AND in WHERE -max_expressions=+100 # simple expressions -max_index_name=31 # index name length -max_select_alias_name=255 # select alias name length -max_stack_expression=100 # stacked expressions -max_table_alias_name=255 # table alias name length -max_table_name=32 # table name length -minus=no # minus -minus_neg=yes # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is 'a' || NULL = NULL -null_in_index=no # null in index -null_in_unique=no # null in unique -null_num_expr=no # Is 1+NULL = NULL -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.2.14-5.0 i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=no # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=yes # Allows ' and " as string markers -recursive_subqueries=+64 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=32767 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=no # SELECT without FROM -server_version=6.0Beta # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=truncate # Storage of float values -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=error # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=no # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=no # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=no # views -where_string_size=32767 # constant string size in where diff --git a/sql-bench/limits/mimer.cfg b/sql-bench/limits/mimer.cfg deleted file mode 100644 index b3369f9a622da2bbe3153da5f75ea506687d85b3..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mimer.cfg +++ /dev/null @@ -1,491 +0,0 @@ -#This file is automaticly generated by crash-me 1.38 - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=yes # Alter table add many columns -alter_add_primary_key=yes # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=yes # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=yes # Alter table drop foreign key -alter_drop_primary_key=yes # Alter table drop primary key -alter_drop_unique=yes # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -automatic_rowid=no # Automatic rowid -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=no # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=50 # Simultaneous connections -constraint_check=yes # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=no # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.38 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=yes # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_last=yes # Supports 9999-12-31 dates -date_one=yes # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=yes # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_circular=yes # Circular foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=yes # Function ASCII_CHAR -func_extra_ascii_code=yes # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=yes # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=yes # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=yes # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=yes # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=error # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=yes # Function TIMESTAMPADD -func_odbc_timestampdiff=yes # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=yes # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_coalesce=yes # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=yes # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=yes # Function LOCALTIME -func_sql_localtimestamp=yes # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif=yes # Function NULLIF -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=yes # Function SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=yes # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=15000 # max char() size -max_column_name=128 # column name length -max_columns=252 # Columns in table -max_conditions=1020 # OR and AND in WHERE -max_expressions=1019 # simple expressions -max_index=+64 # max index -max_index_length=+8192 # index length -max_index_name=128 # index name length -max_index_part_length=15000 # max index part length -max_index_parts=32 # index parts -max_index_varchar_part_length=15000 # index varchar part length -max_row_length=15925 # max table row length (without blobs) -max_row_length_with_null=15925 # table row length with nulls (without blobs) -max_select_alias_name=128 # select alias name length -max_stack_expression=62 # stacked expressions -max_table_alias_name=128 # table alias name length -max_table_name=128 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=15000 # max varchar() size -minus=no # minus -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=yes # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=yes # natural join -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is 'a' || cast(NULL as char(1)) = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows NT 4.0 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -psm_functions=yes # PSM functions (ANSI SQL) -psm_modules=yes # PSM modules (ANSI SQL) -psm_procedures=yes # PSM procedures (ANSI SQL) -psm_trigger=yes # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=15 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -repeat_string_size=15000 # return string size from function -right_outer_join=yes # right outer join -round_on_store=error # Correct rounding when storing float values -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=no # SELECT with LIMIT -select_limit2=no # SELECT with LIMIT #,# -select_string_size=15000 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=no # SELECT without FROM -server_version=MIMER 8.2.0C # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=yes # Type interval day -type_sql_interval_day_to_hour=yes # Type interval day to hour -type_sql_interval_day_to_minute=yes # Type interval day to minute -type_sql_interval_day_to_second=yes # Type interval day to second -type_sql_interval_hour=yes # Type interval hour -type_sql_interval_hour_to_minute=yes # Type interval hour to minute -type_sql_interval_hour_to_second=yes # Type interval hour to second -type_sql_interval_minute=yes # Type interval minute -type_sql_interval_minute_to_second=yes # Type interval minute to second -type_sql_interval_month=yes # Type interval month -type_sql_interval_second=yes # Type interval second -type_sql_interval_year=yes # Type interval year -type_sql_interval_year_to_month=yes # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=no # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=yes # views -where_string_size=15000 # constant string size in where diff --git a/sql-bench/limits/ms-sql.cfg b/sql-bench/limits/ms-sql.cfg deleted file mode 100644 index aad17231786eb28eaead97314b0eb3bd358063cc..0000000000000000000000000000000000000000 --- a/sql-bench/limits/ms-sql.cfg +++ /dev/null @@ -1,523 +0,0 @@ -#This file is automaticly generated by crash-me 1.54 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=without add # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=with constraint # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -automatic_rowid=no # Automatic row id -binary_numbers=yes # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=yes # Case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=yes # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment (ANSI) -compute=yes # Compute -connections=1000 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.54 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=yes # Create SCHEMA -create_table_select=no # create table from select -cross_join=yes # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_infinity=no # Supports 'infinity dates -date_last=no # Supports 9999-12-31 dates -date_one=no # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -dont_require_cast_to_float=yes # No need to cast from integer to float -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=with 'table.index' # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_circular=no # Circular foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=yes # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=yes # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=yes # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=yes # Function DATEADD -func_extra_datediff=yes # Function DATEDIFF -func_extra_datename=yes # Function DATENAME -func_extra_datepart=yes # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=yes # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=yes # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=yes # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=yes # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=yes # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=yes # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=yes # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=error # Function REAL LENGTH -func_odbc_length_without_space=yes # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=error # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=error # Function TIMESTAMPADD -func_odbc_timestampdiff=error # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=yes # Function COALESCE -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=yes # Function CURRENT_USER -func_sql_extract_sql=no # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=yes # Function SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=yes # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=yes # insert empty string -insert_multi_value=no # INSERT with Value lists -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=8000 # max char() size -max_column_name=128 # column name length -max_columns=1024 # Columns in table -max_conditions=13104 # OR and AND in WHERE -max_expressions=656 # simple expressions -max_index=+64 # max index -max_index_length=900 # index length -max_index_name=128 # index name length -max_index_part_length=900 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=900 # index varchar part length -max_row_length=8036 # max table row length (without blobs) -max_row_length_with_null=8036 # table row length with nulls (without blobs) -max_select_alias_name=128 # select alias name length -max_stack_expression=164 # stacked expressions -max_table_alias_name=128 # table alias name length -max_table_name=128 # table name length -max_text_size=+8000000 # max text or blob size -max_unique_index=+64 # unique indexes -max_varchar_size=8000 # max varchar() size -minus=yes # minus -minus_incompat=yes # minus (incompatible lists) -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=no # Is concat('a',NULL) = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique index -null_num_expr=yes # Is 1+NULL = NULL -nulls_in_unique=no # null combination in unique index -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Microsoft Windows 2000 [Version 5.00.2195] # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=yes # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=40 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -right_outer_join=yes # right outer join -rowid=no # Type for row id -select_constants=yes # Select constants -select_limit=with TOP # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=16777207 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Microsoft SQL Server 2000 - 8.00.194 (Intel X86) # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=no # temporary tables -transactions=yes # transactions -truncate_table=no # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=yes # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=yes # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=yes # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=yes # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=no # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=no # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=8000 # constant string size in where diff --git a/sql-bench/limits/ms-sql65.cfg b/sql-bench/limits/ms-sql65.cfg deleted file mode 100644 index 488ce14d9920adf1a7f44f7104b5b9773dafaba4..0000000000000000000000000000000000000000 --- a/sql-bench/limits/ms-sql65.cfg +++ /dev/null @@ -1,418 +0,0 @@ -#This file is automaticly generated by crash-me 1.19a - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -binary_items=yes # binary items (0x41) -case_insensitive_strings=yes # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=yes # /* */ as comment -compute=yes # Compute -connections=14 # Simultaneous connections -crash_me_safe=no # crash me safe -crash_me_version=1.19a # crash me version -create_default=yes # default value for column -create_index=no # create index -cross_join=yes # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=no # drop index -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=yes # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=yes # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=yes # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=yes # Function DATEADD -func_extra_datediff=yes # Function DATEDIFF -func_extra_datename=yes # Function DATENAME -func_extra_datepart=yes # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=yes # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=yes # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=yes # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=yes # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=yes # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=yes # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=yes # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=error # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=yes # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Test nulls in group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=no # intersect -intersect_all=no # intersect all -join_tables=16 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=4 # big expressions -max_char_size=255 # max char() size -max_column_name=30 # column name length -max_columns=250 # Columns in table -max_conditions=3144 # OR and AND in WHERE -max_expressions=6972 # simple expressions -max_index_length=900 # index length -max_index_part_length=255 # max index part length -max_index_parts=15 # index parts -max_index_varchar_part_length=255 # index varchar part length -max_row_length=1960 # max table row length (without blobs) -max_row_length_with_null=1942 # table row length with nulls (without blobs) -max_select_alias_name=30 # select alias name length -max_stack_expression=97 # stacked expressions -max_table_alias_name=30 # table alias name length -max_table_name=30 # table name length -max_text_size=65505 # max text or blob size -max_unique_index=+64 # unique indexes -max_varchar_size=255 # max varchar() size -minus=yes # minus -minus_neg=no # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=error # Is 'a' + NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows NT Version 4.0 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=16777216 # query size -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=15 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -right_outer_join=yes # right outer join -select_constants=yes # Select constants -select_string_size=65527 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Microsoft SQL server 6.5 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_wildcard=yes # Select table_name.* -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=yes # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=yes # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=yes # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=no # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=no # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=255 # constant string size in where diff --git a/sql-bench/limits/msql.cfg b/sql-bench/limits/msql.cfg deleted file mode 100644 index 382f3e2ae81b43fb9d58f154381edaf1e08e18bc..0000000000000000000000000000000000000000 --- a/sql-bench/limits/msql.cfg +++ /dev/null @@ -1,227 +0,0 @@ -#This file is automaticly generated by crash-me 1.32 - -NEG=no # update of column= -column -alter_add_col=no # Alter table add column -alter_add_multi_col=no # Alter table add many columns -alter_alter_col=no # Alter table alter column -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=no # atomic updates -binary_items=no # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -column_alias=no # Column alias -columns_in_order_by=+64 # number of columns in order by -comment_#=yes # # as comment -comment_--=no # -- as comment -comment_/**/=no # /* */ as comment -compute=no # Compute -connections=200 # Simultaneous connections -crash_me_safe=yes # crash me safe -crash_me_version=1.32 # crash me version -create_default=no # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=no # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=with 'FROM' # drop index -end_colon=no # allows end ';' -except=no # except -except_all=no # except all -foreign_key_syntax=no # foreign key syntax -full_outer_join=no # full outer join -func_where_between=no # Function BETWEEN -func_where_eq_all=no # Function = ALL -func_where_eq_any=no # Function = ANY -func_where_eq_some=no # Function = SOME -func_where_exists=no # Function EXISTS -func_where_in_num=no # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=no # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=no # Function NOT BETWEEN -func_where_not_exists=no # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=no # Functions -group_by=no # Group by -group_by_alias=no # Group by alias -group_by_null=no # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=no # Group functions with distinct -group_functions=no # Group functions -having=no # Having -having_with_alias=no # Having with alias -having_with_group=no # Having with group function -ignore_end_space=no # ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=no # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -join_tables=+64 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_char_size=131038 # max char() size -max_columns=75 # Columns in table -max_conditions=72 # OR and AND in WHERE -max_index=+64 # max index -max_index_length=+8192 # index length -max_index_name=35 # index name length -max_index_part_length=+8192 # index part length -max_index_parts=9 # index parts -max_row_length=19125 # max table row length (without blobs) -max_row_length_with_null=19125 # table row length with nulls (without blobs) -max_table_alias_name=34 # table alias name length -max_table_name=35 # table name length -max_unique_index=+64 # max unique index -minus=no # minus -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_in_index=no # null in index -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.2.10 i686 # crash-me tested on -order_by=yes # Order by -order_by_function=no # Order by function -order_by_position=no # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=no # primary key in create table -query_size=131069 # query size -quote_with_"=no # Allows ' and " as string markers -remember_end_space=yes # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -right_outer_join=no # right outer join -rowid=no # Type for row id -select_constants=no # Select constants -select_limit=yes # SELECT with LIMIT -select_limit2=no # SELECT with LIMIT #,# -select_table_update=no # Update with sub select -select_without_from=no # SELECT without FROM -server_version=mSQL server version 2.0.11 # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=no # subqueries -table_alias=yes # Table alias -table_name_case=no # case independent table names -table_wildcard=no # Select table_name.* -tempoary_table=no # temporary tables -transactions=no # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=yes # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=yes # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=no # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=no # Type dec(2 arg) -type_sql_decimal(2_arg)=no # Type decimal(2 arg) -type_sql_double_precision=no # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_numeric(2_arg)=no # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=no # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=no # Type varchar(1 arg) -union=no # union -union_all=no # union all -unique_in_create=no # unique in create table -views=no # views -where_string_size=131035 # constant string size in where diff --git a/sql-bench/limits/mysql-3.22.cfg b/sql-bench/limits/mysql-3.22.cfg deleted file mode 100644 index 395673ee1e19e858858790e82fbfce70b734e2fb..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mysql-3.22.cfg +++ /dev/null @@ -1,452 +0,0 @@ -#This file is automaticly generated by crash-me 1.36 - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_add_multi_col=yes # Alter table add many columns -alter_alter_col=yes # Alter table alter column -alter_change_col=yes # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=yes # Alter table modify column -alter_rename_table=yes # Alter table rename table -atomic_updates=no # atomic updates -binary_items=yes # binary items (0x41) -case_insensitive_strings=yes # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=yes # # as comment -comment_--=no # -- as comment -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=101 # Simultaneous connections -constraint_check=no # CHECK constraint -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.36 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_table_select=no # create table from select -cross_join=yes # cross join (same as from a,b) -date_as_string=yes # String functions on date columns -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=yes # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_if_exists=yes # drop table if exists -drop_index=with 'ON' # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=no # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=yes # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=yes # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=yes # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) -func_extra_bit_count=yes # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_coalesce=no # Function COALESCE -func_extra_concat_as_+=error # Function concatenation with + -func_extra_concat_list=yes # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=yes # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=yes # Function ELT -func_extra_encrypt=yes # Function ENCRYPT -func_extra_field=yes # Function FIELD -func_extra_format=yes # Function FORMAT -func_extra_from_days=yes # Function FROM_DAYS -func_extra_from_unixtime=yes # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=yes # Function GREATEST -func_extra_if=yes # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=yes # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=yes # Function LAST_INSERT_ID -func_extra_least=yes # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=yes # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=yes # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=yes # Function PERIOD_ADD -func_extra_period_diff=yes # Function PERIOD_DIFF -func_extra_pow=yes # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=yes # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_sec_to_time=yes # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=yes # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=yes # Function SUBSTRING_INDEX -func_extra_sysdate=yes # Function SYSDATE -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=yes # Function TIME_TO_SEC -func_extra_to_days=yes # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=error # Function TRIM; Many char extension -func_extra_trim_substring=yes # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=yes # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=yes # Function VERSION -func_extra_weekday=yes # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=yes # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=no # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_concat_as_||=error # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_lower=yes # Function LOWER -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=no # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=no # Function = ALL -func_where_eq_any=no # Function = ANY -func_where_eq_some=no # Function = SOME -func_where_exists=no # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=no # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # group on column with null values -group_by_position=yes # Group by position -group_distinct_functions=no # Group functions with distinct -group_func_extra_bit_and=yes # Group function BIT_AND -group_func_extra_bit_or=yes # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=yes # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=no # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=yes # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=yes # index in create table -index_namespace=yes # different namespace for index -index_parts=yes # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=yes # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -join_tables=32 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=1 # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=255 # max char() size -max_column_name=64 # column name length -max_columns=2364 # Columns in table -max_conditions=85660 # OR and AND in WHERE -max_expressions=1392 # simple expressions -max_index=16 # max index -max_index_length=256 # index length -max_index_name=64 # index name length -max_index_part_length=255 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=255 # index varchar part length -max_row_length=65534 # max table row length (without blobs) -max_row_length_with_null=65501 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=1392 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=64 # table name length -max_text_size=1048543 # max text or blob size -max_unique_index=16 # unique indexes -max_varchar_size=255 # max varchar() size -minus=no # minus -minus_neg=yes # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_strings=yes # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=yes # Value lists in INSERT -natural_join=no # natural join -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is concat('a',NULL) = NULL -null_in_index=no # null in index -null_in_unique=no # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.2.13-my-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=no # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -query_size=1048574 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=yes # Allows ' and " as string markers -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -repeat_string_size=1048576 # return string size from function -right_outer_join=no # right outer join -round_on_store=yes # Correct rounding when storing float values -rowid=auto_increment # Type for row id -select_constants=yes # Select constants -select_limit=yes # SELECT with LIMIT -select_limit2=yes # SELECT with LIMIT #,# -select_string_size=1048565 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=MySQL 3.22.29 debug # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=no # subqueries -table_alias=yes # Table alias -table_name_case=no # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=no # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=yes # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=yes # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=yes # Type enum(1 arg) -type_extra_float(2_arg)=yes # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=yes # Type int(1 arg) zerofill -type_extra_int1=yes # Type int1 -type_extra_int2=yes # Type int2 -type_extra_int3=yes # Type int3 -type_extra_int4=yes # Type int4 -type_extra_int8=yes # Type int8 -type_extra_int_auto_increment=yes # Type int not null auto_increment -type_extra_int_unsigned=yes # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=yes # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=yes # Type mediumint -type_extra_mediumtext=yes # Type mediumtext -type_extra_middleint=yes # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=yes # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=yes # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=no # Type national char varying(1 arg) -type_sql_national_character(1_arg)=no # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=no # Type national character varying(1 arg) -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=no # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=no # union -union_all=no # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=no # views -where_string_size=1048540 # constant string size in where diff --git a/sql-bench/limits/mysql-3.23.cfg b/sql-bench/limits/mysql-3.23.cfg deleted file mode 100644 index a496bd7bf4c82e9d23aabe2b6b85bfbb345eb55a..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mysql-3.23.cfg +++ /dev/null @@ -1,523 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=yes # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=yes # Alter table alter column default -alter_change_col=yes # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=no # Alter table drop constraint -alter_drop_foreign_key=with drop foreign key # Alter table drop foreign key -alter_drop_primary_key=drop primary key # Alter table drop primary key -alter_drop_unique=with drop key # Alter table drop unique -alter_modify_col=yes # Alter table modify column -alter_rename_table=yes # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=_rowid # Automatic row id -binary_numbers=no # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=yes # Case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=yes # # as comment -comment_--=yes # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment (ANSI) -compute=no # Compute -connections=101 # Simultaneous connections (installation default) -constraint_check=no # Column constraints -constraint_check_table=no # Table constraints -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=yes # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=yes # create table from select -cross_join=yes # cross join (same as from a,b) -date_as_string=yes # String functions on date columns -date_infinity=error # Supports 'infinity dates -date_last=yes # Supports 9999-12-31 dates -date_one=yes # Supports 0001-01-01 dates -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=yes # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -dont_require_cast_to_float=yes # No need to cast from integer to float -double_quotes=yes # Double '' as ' in strings -drop_if_exists=yes # drop table if exists -drop_index=with 'ON' # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=yes # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=no # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=yes # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=yes # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=yes # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) -func_extra_bit_count=yes # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=error # Function concatenation with + -func_extra_concat_list=yes # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=yes # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=yes # Function ELT -func_extra_encrypt=yes # Function ENCRYPT -func_extra_field=yes # Function FIELD -func_extra_format=yes # Function FORMAT -func_extra_from_days=yes # Function FROM_DAYS -func_extra_from_unixtime=yes # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=yes # Function GREATEST -func_extra_if=yes # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=yes # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=yes # Function LAST_INSERT_ID -func_extra_least=yes # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=yes # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=yes # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=yes # Function PERIOD_ADD -func_extra_period_diff=yes # Function PERIOD_DIFF -func_extra_pow=yes # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=yes # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_sec_to_time=yes # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=yes # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=yes # Function SUBSTRING_INDEX -func_extra_sysdate=yes # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=yes # Function TIME_TO_SEC -func_extra_to_days=yes # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=error # Function TRIM; Many char extension -func_extra_trim_substring=yes # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=yes # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=yes # Function VERSION -func_extra_weekday=yes # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=yes # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=no # Function CAST -func_sql_char_length=error # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_coalesce=yes # Function COALESCE -func_sql_concat_as_||=error # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=no # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=no # Function = ALL -func_where_eq_any=no # Function = ANY -func_where_eq_some=no # Function = SOME -func_where_exists=no # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=no # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=yes # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=yes # Group function BIT_AND -group_func_extra_bit_or=yes # Group function BIT_OR -group_func_extra_count_distinct_list=yes # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=yes # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=yes # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=yes # index in create table -index_namespace=yes # different namespace for index -index_parts=yes # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=yes # insert empty string -insert_multi_value=yes # INSERT with Value lists -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=yes # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=63 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=1 # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=255 # max char() size -max_column_name=64 # column name length -max_columns=3398 # Columns in table -max_conditions=85660 # OR and AND in WHERE -max_expressions=1837 # simple expressions -max_index=32 # max index -max_index_length=500 # index length -max_index_name=64 # index name length -max_index_part_length=255 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=255 # index varchar part length -max_row_length=65534 # max table row length (without blobs) -max_row_length_with_null=65502 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=1837 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=64 # table name length -max_text_size=1048543 # max text or blob size -max_unique_index=32 # unique indexes -max_varchar_size=255 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_null_in_unique=yes # null in unique index -multi_strings=yes # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=yes # natural join -natural_join_incompat=yes # natural join (incompatible lists) -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is concat('a',NULL) = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique index -null_num_expr=yes # Is 1+NULL = NULL -nulls_in_unique=yes # null combination in unique index -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.2.13-SMP alpha # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=1048574 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=yes # ` as identifier quote -quote_with_"=yes # Allows ' and " as string markers -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -rename_table=yes # rename table -repeat_string_size=1047552 # return string size from function -right_outer_join=yes # right outer join -rowid=auto_increment # Type for row id -select_constants=yes # Select constants -select_limit=with LIMIT # LIMIT number of rows -select_limit2=yes # SELECT with LIMIT #,# -select_string_size=1048565 # constant string size in SELECT -select_table_update=no # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=MySQL 3.23.39 debug # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=no # subqueries -table_alias=yes # Table alias -table_name_case=no # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=yes # temporary tables -transactions=yes # constant string size in where -truncate_table=yes # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=yes # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=yes # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=yes # Type enum(1 arg) -type_extra_float(2_arg)=yes # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=yes # Type int(1 arg) zerofill -type_extra_int1=yes # Type int1 -type_extra_int2=yes # Type int2 -type_extra_int3=yes # Type int3 -type_extra_int4=yes # Type int4 -type_extra_int8=yes # Type int8 -type_extra_int_auto_increment=yes # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=yes # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=yes # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=yes # Type mediumint -type_extra_mediumtext=yes # Type mediumtext -type_extra_middleint=yes # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=yes # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=yes # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=yes # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=no # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=no # union -union_all=no # union all -union_all_incompat=no # union all (incompatible lists) -union_incompat=no # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment -views=no # views -where_string_size=1048539 # constant string size in where diff --git a/sql-bench/limits/mysql-4.0.cfg b/sql-bench/limits/mysql-4.0.cfg deleted file mode 100644 index 6a23be36fce3699ca11c8277a799e7fd06abc8fe..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mysql-4.0.cfg +++ /dev/null @@ -1,7290 +0,0 @@ -#This file is automaticly generated by crash-me 1.61 - -NEG=yes # update of column= -column - ###< create table crash_q (a integer) - ###> OK - ###< insert into crash_q values(10) - ###> OK - ###< update crash_q set a=-a - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -Need_cast_for_null=no # Need to cast NULL for arithmetic - ### Check if numeric_null (NULL) is 'NULL' - ### Check if numeric_null (NULL) is 'NULL' - ### Check if numeric_null (NULL) is 'NULL' -alter_add_col=yes # Alter table add column - ###< alter table crash_q add d integer - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_add_constraint=yes # Alter table add constraint - ###< alter table crash_q add constraint c2 check(a > b) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_add_foreign_key=no # Alter table add foreign key - ###< alter table crash_q add constraint f1 foreign key(c1) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - ###< references crash_q1(c1) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'references crash_q1(c1)' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -alter_add_multi_col=yes # Alter table add many columns - ###< alter table crash_q add (f integer,g integer) - ###> OK -alter_add_primary_key=with constraint # Alter table add primary key - ###< alter table crash_q1 add constraint p1 primary key(c1) - ###> OK -alter_add_unique=yes # Alter table add unique - ###< alter table crash_q add constraint u1 unique(c1) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_alter_col=yes # Alter table alter column default - ###< alter table crash_q alter b set default 10 - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_change_col=yes # Alter table change column - ###< alter table crash_q change a e char(50) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_drop_col=yes # Alter table drop column - ###< alter table crash_q drop column b - ###> OK -alter_drop_constraint=no # Alter table drop constraint - ###< alter table crash_q drop constraint c2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint c2' at line 1 - ### - ###< alter table crash_q drop constraint c2 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint c2 restrict' at line 1 -alter_drop_foreign_key=with drop foreign key # Alter table drop foreign key - ###< alter table crash_q drop constraint f1 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint f1' at line 1 - ### - ###< alter table crash_q drop constraint f1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint f1 restrict' at line 1 - ### - ###< alter table crash_q drop foreign key f1 - ###> OK -alter_drop_primary_key=drop primary key # Alter table drop primary key - ###< alter table crash_q1 drop constraint p1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint p1 restrict' at line 1 - ### - ###< alter table crash_q1 drop primary key - ###> OK -alter_drop_unique=with drop key # Alter table drop unique - ###< alter table crash_q drop constraint u1 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint u1' at line 1 - ### - ###< alter table crash_q drop constraint u1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint u1 restrict' at line 1 - ### - ###< alter table crash_q drop key u1 - ###> OK -alter_modify_col=yes # Alter table modify column - ###< alter table crash_q modify c1 CHAR(20) - ###> OK -alter_rename_table=yes # Alter table rename table - ###< alter table crash_q rename to crash_q1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -atomic_updates=no # atomic updates - ###< create table crash_q (a integer not null,primary key (a)) - ###> OK - ###< insert into crash_q values (2) - ###> OK - ###< insert into crash_q values (3) - ###> OK - ###< insert into crash_q values (1) - ###> OK - ###< update crash_q set a=a+1 - ###> execute error:Duplicate entry '3' for key 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -automatic_rowid=_rowid # Automatic row id - ###< create table crash_q (a int not null, primary key(a)) - ###> OK - ###< insert into crash_q values (1) - ###> OK - ###< select _rowid from crash_q - ###> OK - ###< drop table crash_q - ###> OK -binary_numbers=no # binary numbers (0b1001) - ###< select 0b1001 - ###> execute error:Unknown column '0b1001' in 'field list' - ### - ###As far as some queries didnt return OK, result is NO -binary_strings=no # binary strings (b'0110') - ###< select b'0110' - ###> execute error:Unknown column 'b' in 'field list' - ### - ###As far as some queries didnt return OK, result is NO -case_insensitive_strings=yes # Case insensitive compare - ### - ###<select b from crash_me where b = 'A' - ###>a -char_is_space_filled=no # char are space filled - ### - ###<select concat(b,b) from crash_me where b = 'a ' - ###>aa - ###We expected 'a a ' but got 'aa' -column_alias=yes # Column alias - ###< select a as ab from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -columns_in_group_by=+64 # number of columns in group by - ###We are trying (example with N=5): - ###create table crash_q (q1 integer,q2 integer,q3 integer,q4 integer,q5 integer) - ###insert into crash_q values(1,1,1,1,1) - ###insert into crash_q values(1,1,1,1,1) - ###select q1,q2,q3,q4,q5 from crash_q group by q1,q2,q3,q4,q5 -columns_in_order_by=+64 # number of columns in order by - ###We are trying (example with N=5): - ###create table crash_q (q1 integer,q2 integer,q3 integer,q4 integer,q5 integer) - ###insert into crash_q values(1,1,1,1,1) - ###insert into crash_q values(1,1,1,1,1) - ###select * from crash_q order by q1,q2,q3,q4,q5 -comment_#=yes # # as comment - ###< select * from crash_me # Testing of comments - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_--=yes # -- as comment (ANSI) - ###< select * from crash_me -- Testing of comments - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_/**/=yes # /* */ as comment - ###< select * from crash_me /* Testing of comments */ - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_//=no # // as comment - ###< select * from crash_me // Testing of comments - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '// Testing of comments' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -compute=no # Compute - ###< select a from crash_me order by a compute sum(a) by a - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'compute sum(a) by a' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -connections=101 # Simultaneous connections (installation default) -constraint_check=syntax only # Column constraints - ###< create table crash_q (a int check (a>0)) - ###> OK - ### - ###< insert into crash_q values(0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int check (a>0)) - ###> OK - ### - ###< insert into crash_q values(0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int check (a>0)) - ###> OK - ### - ###< insert into crash_q values(0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_check_named=syntax only # Named constraints - ###< create table crash_q (a int ,b int, constraint abc check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int ,b int, constraint abc check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int ,b int, constraint abc check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_check_table=syntax only # Table constraints - ###< create table crash_q (a int ,b int, check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int ,b int, check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK - ###< create table crash_q (a int ,b int, check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_null=yes # NULL constraint (SyBase style) - ###< create table crash_q (a int null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -crash_me_safe=yes # crash me safe -crash_me_version=1.61 # crash me version -create_default=yes # default value for column - ###< create table crash_q (q integer default 10 not null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -create_default_func=no # default value function for column - ###< create table crash_q (q integer not null,q1 integer default (1+1)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1+1))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -create_if_not_exists=yes # create table if not exists - ###< create table crash_q (q integer) - ###> OK - ###< create table if not exists crash_q (q integer) - ###> OK - ### - ###As far as all queries returned OK, result is YES -create_index=yes # create index - ###< create index crash_q on crash_me (a) - ###> OK -create_schema=no # Create SCHEMA - ###< create schema crash_schema create table crash_q (a int) create table crash_q2(b int) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'schema crash_schema create table crash_q (a int) create table c - ###< drop schema crash_schema cascade - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'schema crash_schema cascade' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -create_table_select=yes # create table from select - ###< create table crash_q SELECT * from crash_me - ###> OK -cross_join=yes # cross join (same as from a,b) - ###< select crash_me.a from crash_me cross join crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -date_as_string=yes # String functions on date columns - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('1998-03-03') - ###> OK - ### - ###<select left(a,4) from crash_me2 - ###>1998 - ### - ###< drop table crash_me2 - ###> OK -date_format_EUR=error # Supports DD.MM.YYYY (EUR) format - ###< insert into crash_me_d(a) values ('16.08.1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_EUR_with_date=error # Supports DATE 'DD.MM.YYYY' (EUR) format - ###< insert into crash_me_d(a) values (DATE '16.08.1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_ISO=yes # Supports YYYY-MM-DD (ISO) format - ###< insert into crash_me_d(a) values ('1963-08-16') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_ISO_with_date=yes # Supports DATE 'YYYY-MM-DD' (ISO) format - ###< insert into crash_me_d(a) values (DATE '1963-08-16') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_USA=error # Supports MM/DD/YYYY format - ###< insert into crash_me_d(a) values ('08/16/1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_USA_with_date=error # Supports DATE 'MM/DD/YYYY' format - ###< insert into crash_me_d(a) values (DATE '08/16/1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_YYYYMMDD=yes # Supports YYYYMMDD format - ###< insert into crash_me_d(a) values ('19630816') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_YYYYMMDD_with_date=yes # Supports DATE 'YYYYMMDD' format - ###< insert into crash_me_d(a) values (DATE '19630816') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_inresult=iso # Date format in result - ###< insert into crash_me_d values( sysdate() ) - ###> OK - ### - ###< select a from crash_me_d - ###> 2003-12-24 - ###< delete from crash_me_d - ###> OK - ###< insert into crash_me_d values( sysdate() ) - ###> OK - ### - ###< select a from crash_me_d - ###> 2004-05-20 - ###< delete from crash_me_d - ###> OK - ###< insert into crash_me_d values( sysdate() ) - ###> OK - ### - ###< select a from crash_me_d - ###> 2004-05-20 - ###< delete from crash_me_d - ###> OK -date_infinity=error # Supports 'infinity dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('infinity') - ###> OK - ### - ###<select a from crash_me2 - ###>0000-00-00 - ###We expected 'infinity' but got '0000-00-00' - ### - ###< drop table crash_me2 - ###> OK -date_last=yes # Supports 9999-12-31 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('9999-12-31') - ###> OK - ### - ###<select a from crash_me2 - ###>9999-12-31 - ### - ###< drop table crash_me2 - ###> OK -date_one=yes # Supports 0001-01-01 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('0001-01-01') - ###> OK - ### - ###<select a from crash_me2 - ###>0001-01-01 - ### - ###< drop table crash_me2 - ###> OK -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('98-03-03') - ###> OK - ### - ###<select a from crash_me2 - ###>1998-03-03 - ### - ###< drop table crash_me2 - ###> OK - ### - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('10-03-03') - ###> OK - ### - ###<select a from crash_me2 - ###>2010-03-03 - ### - ###< drop table crash_me2 - ###> OK -date_zero=yes # Supports 0000-00-00 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('0000-00-00') - ###> OK - ### - ###<select a from crash_me2 - ###>0000-00-00 - ### - ###< drop table crash_me2 - ###> OK -domains=no # Domains (ANSI SQL) - ###< create domain crash_d as varchar(10) default 'Empty' check (value <> 'abcd') - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'domain crash_d as varchar(10) default 'Empty' check (value <> ' - ###< create table crash_q(a crash_d, b int) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'crash_d, b int)' at line 1 - ###< insert into crash_q(a,b) values('xyz',10) - ###> execute error:Table 'test.crash_q' doesn't exist - ###< insert into crash_q(b) values(10) - ###> execute error:Table 'test.crash_q' doesn't exist - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ###< drop domain crash_d - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'domain crash_d' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -dont_require_cast_to_float=yes # No need to cast from integer to float - ###< select exp(1) - ###> OK - ### - ###As far as all queries returned OK, result is YES -double_quotes=yes # Double '' as ' in strings - ### - ###<select 'Walker''s' - ###>Walker's -drop_if_exists=yes # drop table if exists - ###< create table crash_q (q integer) - ###> OK - ###< drop table if exists crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -drop_index=with 'ON' # drop index - ###< drop index crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - ### - ###< drop index crash_q from crash_me - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'from crash_me' at line 1 - ### - ###< drop index crash_q on crash_me - ###> OK -drop_requires_cascade=no # drop table require cascade/restrict - ###< create table crash_me (a integer not null) - ###> OK - ###< drop table crash_me - ###> OK - ###< create table crash_me (a integer not null) - ###> OK - ###< drop table crash_me - ###> OK - ###< create table crash_me (a integer not null) - ###> OK - ###< drop table crash_me - ###> OK -drop_restrict=yes # drop table with cascade/restrict - ###< create table crash_q (a int) - ###> OK - ###< drop table crash_q restrict - ###> OK - ### - ###As far as all queries returned OK, result is YES -end_colon=yes # allows end ';' - ###< select * from crash_me; - ###> OK - ### - ###As far as all queries returned OK, result is YES -except=no # except - ###< select * from crash_me except select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_all=no # except all - ###< select * from crash_me except all select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_all_incompat=no # except all (incompatible lists) - ###< select * from crash_me except all select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_incompat=no # except (incompatible lists) - ###< select * from crash_me except select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -field_name_case=yes # case independent field names - ###< create table crash_q (q integer) - ###> OK - ###< insert into crash_q(Q) values (1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -float_int_expr=yes # mixing of integer and float in expression - ###< select 1+1.0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -foreign_key=syntax only # foreign keys - ###< create table crash_me_qf (a integer not null,primary key (a)) - ###> OK - ### - ###< create table crash_me_qf2 (a integer not null,foreign key (a) references crash_me_qf (a)) - ###> OK - ### - ###< insert into crash_me_qf values (1) - ###> OK - ### - ###< insert into crash_me_qf2 values (2) - ###> OK - ### - ###< drop table crash_me_qf2 - ###> OK - ### - ###< drop table crash_me_qf - ###> OK - ###< create table crash_me_qf (a integer not null,primary key (a)) - ###> OK - ### - ###< create table crash_me_qf2 (a integer not null,foreign key (a) references crash_me_qf (a)) - ###> OK - ### - ###< insert into crash_me_qf values (1) - ###> OK - ### - ###< insert into crash_me_qf2 values (2) - ###> OK - ### - ###< drop table crash_me_qf2 - ###> OK - ### - ###< drop table crash_me_qf - ###> OK - ###< create table crash_me_qf (a integer not null,primary key (a)) - ###> OK - ### - ###< create table crash_me_qf2 (a integer not null,foreign key (a) references crash_me_qf (a)) - ###> OK - ### - ###< insert into crash_me_qf values (1) - ###> OK - ### - ###< insert into crash_me_qf2 values (2) - ###> OK - ### - ###< drop table crash_me_qf2 - ###> OK - ### - ###< drop table crash_me_qf - ###> OK -full_outer_join=no # full outer join - ###< select crash_me.a from crash_me full join crash_me2 ON - ### crash_me.a=crash_me2.a - ###> execute error:Unknown table 'crash_me' in field list - ### - ###As far as some queries didnt return OK, result is NO -func_extra_!=yes # Function NOT as '!' in SELECT - ### - ###<select ! 1 - ###>0 -func_extra_%=yes # Function MOD as % - ### - ###<select 10%7 - ###>3 -func_extra_&=yes # Function & (bitwise and) - ### - ###<select 5 & 3 - ###>1 -func_extra_&&=yes # Function AND as '&&' - ### - ###<select 1=1 && 2=2 - ###>1 -func_extra_<>=yes # Function <> in SELECT - ### - ###<select 1<>1 - ###>0 -func_extra_==yes # Function = - ### - ###<select (1=1) - ###>1 -func_extra_add_months=no # Function ADD_MONTHS - ### - ###<select add_months('1997-01-01',1) from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('1997-01-01',1) from crash_me_d' at line 1 -func_extra_adddate=yes # Function ADDDATE - ### - ###<select ADDDATE('2002-12-01',3) from crash_me_d - ###>2002-12-04 -func_extra_addtime=yes # Function ADDTIME - ### - ###<select ADDTIME('20:02:12','00:00:03') - ###>20:02:15 -func_extra_alpha=no # Function ALPHA - ### - ###<select alpha('Aâ',2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('Aâ',2)' at line 1 -func_extra_and_or=yes # Function AND and OR in SELECT - ### - ###<select 1=1 AND 2=2 - ###>1 -func_extra_ascii_char=no # Function ASCII_CHAR - ### - ###<select ASCII_CHAR(65) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(65)' at line 1 -func_extra_ascii_code=no # Function ASCII_CODE - ### - ###<select ASCII_CODE('A') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('A')' at line 1 -func_extra_ascii_string=error # Function ASCII in string cast - ### - ###<select ascii('a') - ###>97 - ###We expected 'a' but got '97' -func_extra_atn2=no # Function ATN2 - ### - ###<select atn2(1,0) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1,0)' at line 1 -func_extra_auto_num2string=yes # Function automatic num->string convert - ### - ###<select concat('a',2) - ###>a2 -func_extra_auto_string2num=yes # Function automatic string->num convert - ### - ###<select '1'+2 - ###>3 -func_extra_between=yes # Function BETWEEN in SELECT - ### - ###<select 5 between 4 and 6 - ###>1 -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) - ### - ###<select (1 << 4) >> 2 - ###>4 -func_extra_bit_count=yes # Function BIT_COUNT - ### - ###<select bit_count(5) - ###>2 -func_extra_ceil=yes # Function CEIL - ### - ###<select ceil(-4.5) - ###>-4 -func_extra_char_date=no # Function CHAR (conversation date) - ### - ###<select CHAR(a,EUR) from crash_me_d - ###> execute failed:Unknown column 'EUR' in 'field list' -func_extra_charindex=no # Function CHARINDEX - ### - ###<select charindex('a','crash') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a','crash')' at line 1 -func_extra_chr=no # Function CHR - ### - ###<select CHR(65) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(65)' at line 1 -func_extra_chr_str=no # Function CHR (any type to string) - ### - ###<select CHR(67) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(67)' at line 1 -func_extra_concat_as_+=error # Function concatenation with + - ### - ###<select 'abc' + 'def' - ###>0 - ###We expected 'abcdef' but got '0' -func_extra_concat_list=yes # Function CONCAT(list) - ### - ###<select concat('a','b','c','d') - ###>abcd -func_extra_convert=no # Function CONVERT - ### - ###<select convert(CHAR,5) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '5)' at line 1 -func_extra_cosh=no # Function COSH - ### - ###<select cosh(0) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(0)' at line 1 -func_extra_date=yes # Function DATE - ### - ###<select date('1963-08-16') from crash_me_d - ###>1963-08-16 -func_extra_date_format=yes # Function DATE_FORMAT - ### - ###<select date_format('1997-01-02 03:04:05','M W D Y y m d h i s w') from crash_me_d - ###>M W D Y y m d h i s w -func_extra_dateadd=no # Function DATEADD - ### - ###<select dateadd(day,3,'1997-11-30') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(day,3,'1997-11-30') from crash_me_d' at line 1 -func_extra_datediff=no # Function DATEDIFF - ### - ###<select datediff(month,'Oct 21 1997','Nov 30 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nov 30 1997') from crash_me_d' at line 1 -func_extra_datediff2arg=yes # Function DATEDIFF (2 arg) - ### - ###<select DATEDIFF('2002-12-04','2002-12-01') from crash_me_d - ###>3 -func_extra_datename=no # Function DATENAME - ### - ###<select datename(month,'Nov 30 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(month,'Nov 30 1997') from crash_me_d' at line 1 -func_extra_datepart=no # Function DATEPART - ### - ###<select datepart(month,'July 20 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(month,'July 20 1997') from crash_me_d' at line 1 -func_extra_day=yes # Function DAY - ### - ###<select DAY('2002-12-01') from crash_me_d - ###>1 -func_extra_decode=no # Function DECODE - ### - ###<select DECODE('S-103','T72',1,'S-103',2,'Leopard',3) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1,'S-103',2,'Leopard',3)' at line 1 -func_extra_ebcdic_string=no # Function EBCDIC in string cast - ### - ###<select ebcdic('a') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a')' at line 1 -func_extra_elt=yes # Function ELT - ### - ###<select elt(2,'ONE','TWO','THREE') - ###>TWO -func_extra_encrypt=yes # Function ENCRYPT - ### - ###<select encrypt('hello') - ###>1Wi1s0yzcGqMY -func_extra_expand2arg=no # Function EXPAND - ### - ###<select expand('abcd',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd',6)' at line 1 -func_extra_field=yes # Function FIELD - ### - ###<select field('IBM','NCA','ICL','SUN','IBM','DIGITAL') - ###>4 -func_extra_fixed=no # Function FIXED - ### - ###<select fixed(222.6666,10,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(222.6666,10,2)' at line 1 -func_extra_float=no # Function FLOAT - ### - ###<select float(6666.66,4) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'float(6666.66,4)' at line 1 -func_extra_format=yes # Function FORMAT - ### - ###<select format(1234.5555,2) - ###>1,234.56 -func_extra_from_days=yes # Function FROM_DAYS - ### - ###<select from_days(729024) from crash_me_d - ###>1996-01-01 -func_extra_from_unixtime=yes # Function FROM_UNIXTIME - ### - ###<select from_unixtime(0) from crash_me_d - ###>1970-01-01 02:00:00 -func_extra_getdate=no # Function GETDATE - ### - ###<select getdate() - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '()' at line 1 -func_extra_greatest=yes # Function GREATEST - ### - ###<select greatest('HARRY','HARRIOT','HAROLD') - ###>HARRY -func_extra_hex=yes # Function HEX - ### - ###<select HEX('A') - ###>41 -func_extra_if=yes # Function IF - ### - ###<select if(5,6,7) - ###>6 -func_extra_in_num=yes # Function IN on numbers in SELECT - ### - ###<select 2 in (3,2,5,9,5,1) - ###>1 -func_extra_in_str=yes # Function IN on strings in SELECT - ### - ###<select 'monty' in ('david','monty','allan') - ###>1 -func_extra_index=no # Function INDEX - ### - ###<select index('abcdefg','cd',1,1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'index('abcdefg','cd',1,1)' at line 1 -func_extra_initcap=no # Function INITCAP - ### - ###<select initcap('the soap') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('the soap')' at line 1 -func_extra_instr=yes # Function LOCATE as INSTR - ### - ###<select instr('hello','ll') - ###>3 -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) - ### - ###<select INSTR('CORPORATE FLOOR','OR',3,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '3,2)' at line 1 -func_extra_instrb=no # Function INSTRB - ### - ###<select INSTRB('CORPORATE FLOOR','OR',5,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('CORPORATE FLOOR','OR',5,2)' at line 1 -func_extra_interval=yes # Function INTERVAL - ### - ###<select interval(55,10,20,30,40,50,60,70,80,90,100) - ###>5 -func_extra_last_day=yes # Function LAST_DAY - ### - ###<select last_day('1997-04-01') from crash_me_d - ###>1997-04-30 -func_extra_last_insert_id=yes # Function LAST_INSERT_ID - ### - ###<select last_insert_id() - ###>0 -func_extra_least=yes # Function LEAST - ### - ###<select least('HARRY','HARRIOT','HAROLD') - ###>HAROLD -func_extra_length=error # Function LENGTH - ### - ###<select length(1) - ###>1 - ###We expected '2' but got '1' -func_extra_lengthb=no # Function LENGTHB - ### - ###<select lengthb('CANDIDE') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('CANDIDE')' at line 1 -func_extra_lfill3arg=no # Function LFILL (3 arg) - ### - ###<select lfill('abcd','.',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd','.',6)' at line 1 -func_extra_like=yes # Function LIKE in SELECT - ### - ###<select 'a' like 'a%' - ###>1 -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT - ### - ###<select '%' like 'a%' escape 'a' - ###>1 -func_extra_ln=yes # Function LN - ### - ###<select ln(95) - ###>4.553877 -func_extra_log(m_n)=yes # Function LOG(m,n) - ### - ###<select log(10,100) - ###>2.000000 -func_extra_logn=no # Function LOGN - ### - ###<select logn(2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(2)' at line 1 -func_extra_lpad=yes # Function LPAD - ### - ###<select lpad('hi',4,'??') - ###>??hi -func_extra_ltrim2arg=no # Function LTRIM (2 arg) - ### - ###<select ltrim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_makedate=yes # Function MAKEDATE - ### - ###<select MAKEDATE(1963,228) from crash_me_d - ###>1963-08-16 -func_extra_maketime=yes # Function MAKETIME - ### - ###<select MAKETIME(20,02,12) - ###>20:02:12 -func_extra_mapchar=no # Function MAPCHAR - ### - ###<select mapchar('Aâ') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('Aâ')' at line 1 -func_extra_mdy=no # Function MDY - ### - ###<select mdy(7,1,1998) from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(7,1,1998) from crash_me_d' at line 1 -func_extra_microsecond=error # Function MICROSECOND - ### - ###<select MICROSECOND('19630816200212111111') - ###>11 - ###We expected '111111' but got '11' -func_extra_mid=yes # Function SUBSTRING as MID - ### - ###<select mid('hello',3,2) - ###>ll -func_extra_months_between=no # Function MONTHS_BETWEEN - ### - ###<select months_between('1997-02-02','1997-01-01') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('1997-02-02','1997-01-01') from crash_me_d' at line 1 -func_extra_noround=no # Function NOROUND - ###< select noround(22.6) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(22.6)' at line 1 - ###< select noround(22.6) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(22.6)' at line 1 - ###< select noround(22.6) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(22.6)' at line 1 -func_extra_not=yes # Function NOT in SELECT - ### - ###<select not false - ###>1 -func_extra_not_between=yes # Function NOT BETWEEN in SELECT - ### - ###<select 5 not between 4 and 6 - ###>0 -func_extra_not_like=yes # Function NOT LIKE in SELECT - ### - ###<select 'a' not like 'a%' - ###>0 -func_extra_num=no # Function NUM - ### - ###<select NUM('2123') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('2123')' at line 1 -func_extra_odbc_convert=no # Function ODBC CONVERT - ### - ###<select convert(5,SQL_CHAR) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 -func_extra_password=yes # Function PASSWORD - ### - ###<select password('hello') - ###>*6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119 -func_extra_paste=no # Function PASTE - ### - ###<select paste('ABCDEFG',3,2,'1234') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',3,2,'1234')' at line 1 -func_extra_patindex=no # Function PATINDEX - ### - ###<select patindex('%a%','crash') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('%a%','crash')' at line 1 -func_extra_period_add=yes # Function PERIOD_ADD - ### - ###<select period_add(9602,-12) from crash_me_d - ###>199502 -func_extra_period_diff=yes # Function PERIOD_DIFF - ### - ###<select period_diff(199505,199404) from crash_me_d - ###>13 -func_extra_pow=yes # Function POW - ### - ###<select pow(3,2) - ###>9.000000 -func_extra_range=no # Function RANGE - ### - ###<select range(a) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a)' at line 1 -func_extra_regexp=yes # Function REGEXP in SELECT - ### - ###<select 'a' regexp '^(a|b)*$' - ###>1 -func_extra_replace2arg=no # Function REPLACE (2 arg) - ### - ###<select replace('AbCd','bC') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 -func_extra_replicate=no # Function REPLICATE - ### - ###<select replicate('a',5) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a',5)' at line 1 -func_extra_reverse=yes # Function REVERSE - ### - ###<select reverse('abcd') - ###>dcba -func_extra_rfill3arg=no # Function RFILL (3 arg) - ### - ###<select rfill('abcd','.',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd','.',6)' at line 1 -func_extra_root=no # Function ROOT - ### - ###<select root(4) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(4)' at line 1 -func_extra_round1=yes # Function ROUND(1 arg) - ### - ###<select round(5.63) - ###>6 -func_extra_rpad=yes # Function RPAD - ### - ###<select rpad('hi',4,'??') - ###>hi?? -func_extra_rpad4arg=no # Function RPAD (4 arg) - ### - ###<select rpad('abcd',2,'+-',8) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '8)' at line 1 -func_extra_rtrim2arg=no # Function RTRIM (2 arg) - ### - ###<select rtrim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_sec_to_time=yes # Function SEC_TO_TIME - ### - ###<select sec_to_time(5001) - ###>01:23:21 -func_extra_sinh=no # Function SINH - ### - ###<select sinh(1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1)' at line 1 -func_extra_str=no # Function STR - ### - ###<select str(123.45,5,1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(123.45,5,1)' at line 1 -func_extra_strcmp=yes # Function STRCMP - ### - ###<select strcmp('abc','adc') - ###>-1 -func_extra_stuff=no # Function STUFF - ### - ###<select stuff('abc',2,3,'xyz') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc',2,3,'xyz')' at line 1 -func_extra_subdate=yes # Function SUBDATE - ### - ###<select SUBDATE('2002-12-04',3) from crash_me_d - ###>2002-12-01 -func_extra_substr2arg=yes # Function SUBSTR (2 arg) - ### - ###<select substr('abcd',2) - ###>bcd -func_extra_substr3arg=yes # Function SUBSTR (3 arg) - ### - ###<select substr('abcd',2,2) - ###>bc -func_extra_substrb=no # Function SUBSTRB - ### - ###<select SUBSTRB('ABCDEFG',5,4.2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',5,4.2)' at line 1 -func_extra_substring_index=yes # Function SUBSTRING_INDEX - ### - ###<select substring_index('www.tcx.se','.',-2) - ###>tcx.se -func_extra_subtime=yes # Function SUBTIME - ### - ###<select SUBTIME('20:02:15','00:00:03') - ###>20:02:12 -func_extra_sysdate=yes # Function SYSDATE - ### - ###<select sysdate() - ###>2003-12-24 09:46:11 -func_extra_tail=no # Function TAIL - ### - ###<select tail('ABCDEFG',3) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',3)' at line 1 -func_extra_tanh=no # Function TANH - ### - ###<select tanh(1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1)' at line 1 -func_extra_time=yes # Function TIME - ### - ###<select time('20:02:12') - ###>20:02:12 -func_extra_time_to_sec=yes # Function TIME_TO_SEC - ### - ###<select time_to_sec('01:23:21') - ###>5001 -func_extra_timediff=yes # Function TIMEDIFF - ### - ###<select TIMEDIFF('20:02:15','20:02:12') - ###>00:00:03 -func_extra_timestamp=error # Function TIMESTAMP - ### - ###<select timestamp('19630816','00200212') - ###>1963-08-16 20:02:12 - ###We expected '19630816200212000000' but got '1963-08-16 20:02:12' -func_extra_to_days=yes # Function TO_DAYS - ### - ###<select to_days('1996-01-01') from crash_me_d - ###>729024 -func_extra_translate=no # Function TRANSLATE - ### - ###<select translate('abc','bc','de') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','bc','de')' at line 1 -func_extra_trim1arg=yes # Function TRIM (1 arg) - ### - ###<select trim(' abcd ') - ###>abcd -func_extra_trim2arg=no # Function TRIM (2 arg) - ### - ###<select trim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_trim_many_char=error # Function TRIM; Many char extension - ### - ###<select trim(':!' FROM ':abc!') - ###>:abc! - ###We expected 'abc' but got ':abc!' -func_extra_trim_substring=yes # Function TRIM; Substring extension - ### - ###<select trim('cb' FROM 'abccb') - ###>abc -func_extra_trunc=no # Function TRUNC - ### - ###<select trunc(18.18,-1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(18.18,-1)' at line 1 -func_extra_trunc1arg=no # Function TRUNC (1 arg) - ### - ###<select trunc(222.6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(222.6)' at line 1 -func_extra_uid=no # Function UID - ### - ###<select uid - ###> execute failed:Unknown column 'uid' in 'field list' -func_extra_unix_timestamp=yes # Function UNIX_TIMESTAMP - ### - ###<select unix_timestamp() - ###>1072251971 -func_extra_userenv=no # Function USERENV - ### - ###<select userenv - ###> execute failed:Unknown column 'userenv' in 'field list' -func_extra_value=no # Function VALUE - ### - ###<select value(NULL,'WALRUS') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(NULL,'WALRUS')' at line 1 -func_extra_version=yes # Function VERSION - ### - ###<select version() - ###>5.0.0-alpha-debug-log -func_extra_weekday=yes # Function WEEKDAY - ### - ###<select weekday('1997-11-29') from crash_me_d - ###>5 -func_extra_weekofyear=yes # Function WEEKOFYEAR - ### - ###<select WEEKOFYEAR('1963-08-16') from crash_me_d - ###>33 -func_extra_|=yes # Function | (bitwise or) - ### - ###<select 1 | 2 - ###>3 -func_extra_||=yes # Function OR as '||' - ### - ###<select 1=0 || 1=1 - ###>1 -func_extra_~*=no # Function ~* (case insensitive compare) - ### - ###<select 'hi' ~* 'HI' - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '~* 'HI'' at line 1 -func_odbc_abs=yes # Function ABS - ### - ###<select abs(-5) - ###>5 -func_odbc_acos=yes # Function ACOS - ### - ###<select acos(0) - ###>1.570796 -func_odbc_ascii=yes # Function ASCII - ### - ###<select ASCII('A') - ###>65 -func_odbc_asin=yes # Function ASIN - ### - ###<select asin(1) - ###>1.570796 -func_odbc_atan=yes # Function ATAN - ### - ###<select atan(1) - ###>0.785398 -func_odbc_atan2=yes # Function ATAN2 - ### - ###<select atan2(1,0) - ###>1.570796 -func_odbc_ceiling=yes # Function CEILING - ### - ###<select ceiling(-4.5) - ###>-4 -func_odbc_char=yes # Function CHAR - ### - ###<select CHAR(65) - ###>A -func_odbc_concat=yes # Function CONCAT(2 arg) - ### - ###<select concat('a','b') - ###>ab -func_odbc_cos=yes # Function COS - ### - ###<select cos(0) - ###>1.000000 -func_odbc_cot=yes # Function COT - ### - ###<select cot(1) - ###>0.64209262 -func_odbc_curdate=yes # Function CURDATE - ### - ###<select curdate() - ###>2003-12-24 -func_odbc_curtime=yes # Function CURTIME - ### - ###<select curtime() - ###>09:46:11 -func_odbc_database=yes # Function DATABASE - ### - ###<select database() - ###>test -func_odbc_dayname=yes # Function DAYNAME - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayname(a) from crash_me_d - ###>Saturday - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_dayofmonth=yes # Function DAYOFMONTH - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofmonth(a) from crash_me_d - ###>1 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_dayofweek=yes # Function DAYOFWEEK - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofweek(a) from crash_me_d - ###>7 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_dayofyear=yes # Function DAYOFYEAR - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofyear(a) from crash_me_d - ###>32 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_degrees=yes # Function DEGREES - ### - ###<select degrees(6.283185) - ###>359.99998239991 -func_odbc_difference=no # Function DIFFERENCE() - ### - ###<select difference('abc','abe') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','abe')' at line 1 - ### - ###<select {fn difference('abc','abe') } - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','abe') }' at line 1 -func_odbc_exp=yes # Function EXP - ### - ###<select exp(1.0) - ###>2.718282 -func_odbc_floor=yes # Function FLOOR - ### - ###<select floor(2.5) - ###>2 -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT - ### - ###<select { fn LEFT( { fn RIGHT('abcd',2) },1) } - ###>c -func_odbc_hour=yes # Function HOUR - ###< insert into crash_me_t values(20:08:16) - ### - ###<select hour('12:13:14') - ###>12 - ###< insert into crash_me_t values(20:08:16) - ###< insert into crash_me_t values(20:08:16) -func_odbc_hour_time=yes # Function ANSI HOUR - ###< insert into crash_me_t values(20:08:16) - ### - ###<select hour(TIME '12:13:14') - ###>12 - ###< insert into crash_me_t values(20:08:16) - ###< insert into crash_me_t values(20:08:16) -func_odbc_ifnull=yes # Function IFNULL - ### - ###<select ifnull(2,3) - ###>2 -func_odbc_insert=yes # Function INSERT - ### - ###<select insert('abcd',2,2,'ef') - ###>aefd -func_odbc_lcase=yes # Function LCASE - ### - ###<select lcase('ABC') - ###>abc -func_odbc_left=yes # Function LEFT - ### - ###<select left('abcd',2) - ###>ab -func_odbc_length=yes # Function REAL LENGTH - ### - ###<select length('abcd ') - ###>5 -func_odbc_length_without_space=error # Function ODBC LENGTH - ### - ###<select length('abcd ') - ###>5 - ###We expected '4' but got '5' - ### - ###<select {fn length('abcd ') } - ###>5 - ###We expected '4' but got '5' -func_odbc_locate_2=yes # Function LOCATE(2 arg) - ### - ###<select locate('bcd','abcd') - ###>2 -func_odbc_locate_3=yes # Function LOCATE(3 arg) - ### - ###<select locate('bcd','abcd',3) - ###>0 -func_odbc_log=yes # Function LOG - ### - ###<select log(2) - ###>0.693147 -func_odbc_log10=yes # Function LOG10 - ### - ###<select log10(10) - ###>1.000000 -func_odbc_ltrim=yes # Function LTRIM - ### - ###<select ltrim(' abcd') - ###>abcd -func_odbc_minute=yes # Function MINUTE - ###< insert into crash_me_t values(20:08:16) - ### - ###<select minute('12:13:14') - ###>13 - ###< insert into crash_me_t values(20:08:16) - ###< insert into crash_me_t values(20:08:16) -func_odbc_mod=yes # Function MOD - ### - ###<select mod(11,7) - ###>4 -func_odbc_month=yes # Function MONTH - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select month(a) from crash_me_d - ###>2 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_monthname=yes # Function MONTHNAME - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select monthname(a) from crash_me_d - ###>February - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_now=yes # Function NOW - ### - ###<select now() - ###>2003-12-24 09:46:11 -func_odbc_pi=yes # Function PI - ### - ###<select pi() - ###>3.141593 -func_odbc_power=yes # Function POWER - ### - ###<select power(2,4) - ###>16.000000 -func_odbc_quarter=yes # Function QUARTER - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select quarter(a) from crash_me_d - ###>1 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_odbc_radians=yes # Function RADIANS - ### - ###<select radians(360) - ###>6.2831853071796 -func_odbc_rand=yes # Function RAND - ### - ###<select rand(1) - ###>0.40540353712198 -func_odbc_repeat=yes # Function REPEAT - ### - ###<select repeat('ab',3) - ###>ababab -func_odbc_replace=yes # Function REPLACE - ### - ###<select replace('abbaab','ab','ba') - ###>bababa -func_odbc_right=yes # Function RIGHT - ### - ###<select right('abcd',2) - ###>cd -func_odbc_round=yes # Function ROUND(2 arg) - ### - ###<select round(5.63,2) - ###>5.63 -func_odbc_rtrim=yes # Function RTRIM - ### - ###<select rtrim(' abcd ') - ###> abcd -func_odbc_second=yes # Function SECOND - ###< insert into crash_me_t values(20:08:16) - ### - ###<select second('12:13:14') - ###>14 - ###< insert into crash_me_t values(20:08:16) - ###< insert into crash_me_t values(20:08:16) -func_odbc_sign=yes # Function SIGN - ### - ###<select sign(-5) - ###>-1 -func_odbc_sin=yes # Function SIN - ### - ###<select sin(1) - ###>0.841471 -func_odbc_soundex=yes # Function SOUNDEX - ### - ###<select soundex('hello') - ###>H400 -func_odbc_space=yes # Function SPACE - ### - ###<select space(5) - ###> -func_odbc_sqrt=yes # Function SQRT - ### - ###<select sqrt(4) - ###>2.000000 -func_odbc_substring=yes # Function ODBC SUBSTRING - ### - ###<select substring('abcd',3,2) - ###>cd -func_odbc_tan=yes # Function TAN - ### - ###<select tan(1) - ###>1.557408 -func_odbc_timestampadd=yes # Function TIMESTAMPADD - ### - ###<select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00') - ###>1997-01-01 00:00:01 -func_odbc_timestampdiff=error # Function TIMESTAMPDIFF - ### - ###<select timestampdiff(SQL_TSI_SECOND,'1997-01-01 00:00:02', '1997-01-01 00:00:01') - ###>-1 - ###We expected '1' but got '-1' - ### - ###<select {fn timestampdiff(SQL_TSI_SECOND,{ts '1997-01-01 00:00:02'}, {ts '1997-01-01 00:00:01'}) } - ###>-1 - ###We expected '1' but got '-1' -func_odbc_truncate=yes # Function TRUNCATE - ### - ###<select truncate(18.18,-1) - ###>10 -func_odbc_ucase=yes # Function UCASE - ### - ###<select ucase('abc') - ###>ABC -func_odbc_user()=yes # Function USER() - ### - ###<select user() - ###>monty@localhost -func_odbc_week=USA # WEEK - ###<select week('1997-02-01') - ###>4 - ###We expected '5' but got '4' - ###<select week('1997-02-01') - ###>4 - ###We expected '5' but got '4' - ###<select week('1997-02-01') - ###>4 - ###We expected '5' but got '4' -func_odbc_year=yes # Function YEAR - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select year(a) from crash_me_d - ###>1997 - ###< insert into crash_me_d values('1997-02-01') - ###< insert into crash_me_d values('1997-02-01') -func_sql_+=yes # Function +, -, * and / - ### - ###<select 5*3-4/2+1 - ###>14.00 -func_sql_bit_length=yes # Function BIT_LENGTH - ### - ###<select bit_length('abc') - ###>24 -func_sql_cast=yes # Function CAST - ### - ###<select CAST(1 as CHAR) - ###>1 -func_sql_char_length=error # Function CHAR_LENGTH - ### - ###<select char_length(b) from crash_me - ###>1 - ###We expected '10' but got '1' -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) - ### - ###<select char_length('abcd') - ###>4 -func_sql_character_length=yes # Function CHARACTER_LENGTH - ### - ###<select character_length('abcd') - ###>4 -func_sql_coalesce=yes # Function COALESCE - ### - ###<select coalesce(NULL,'bcd','qwe') - ###>bcd -func_sql_concat_as_||=error # Function concatenation with || - ### - ###<select 'abc' || 'def' - ###>0 - ###We expected 'abcdef' but got '0' -func_sql_current_date=yes # Function CURRENT_DATE - ### - ###<select current_date - ###>2003-12-24 -func_sql_current_time=yes # Function CURRENT_TIME - ### - ###<select current_time - ###>09:46:11 -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP - ### - ###<select current_timestamp - ###>2003-12-24 09:46:11 -func_sql_current_user=with_parenthesis # CURRENT_USER - ###< select CURRENT_USER - ###> execute error:Unknown column 'CURRENT_USER' in 'field list' - ### - ###< select CURRENT_USER() - ###> OK - ###< select CURRENT_USER - ###> OK - ###< select CURRENT_USER - ###> execute error:Unknown column 'CURRENT_USER' in 'field list' - ### - ###< select CURRENT_USER() - ###> OK -func_sql_extract_sql=yes # Function EXTRACT - ### - ###<select extract(minute from timestamp '2000-02-23 18:43:12.987') - ###>43 -func_sql_localtime=yes # Function LOCALTIME - ### - ###<select localtime - ###>2003-12-24 09:46:11 -func_sql_localtimestamp=yes # Function LOCALTIMESTAMP - ### - ###<select localtimestamp - ###>2003-12-24 09:46:11 -func_sql_lower=yes # Function LOWER - ### - ###<select LOWER('ABC') - ###>abc -func_sql_nullif_num=yes # Function NULLIF with numbers - ### - ###<select NULLIF(NULLIF(1,2),1) - ###> -func_sql_nullif_string=yes # Function NULLIF with strings - ### - ###<select NULLIF(NULLIF('first','second'),'first') - ###> -func_sql_octet_length=yes # Function OCTET_LENGTH - ### - ###<select octet_length('abc') - ###>3 -func_sql_position=yes # Function POSITION - ### - ###<select position('ll' in 'hello') - ###>3 -func_sql_searched_case=yes # Function searched CASE - ### - ###<select case when 1 > 2 then 'false' when 2 > 1 then 'true' end - ###>true -func_sql_session_user=with_parenthesis # SESSION_USER - ###< select SESSION_USER - ###> execute error:Unknown column 'SESSION_USER' in 'field list' - ### - ###< select SESSION_USER() - ###> OK - ###< select SESSION_USER - ###> execute error:Unknown column 'SESSION_USER' in 'field list' - ### - ###< select SESSION_USER() - ###> OK - ###< select SESSION_USER - ###> execute error:Unknown column 'SESSION_USER' in 'field list' - ### - ###< select SESSION_USER() - ###> OK -func_sql_simple_case=yes # Function simple CASE - ### - ###<select case 2 when 1 then 'false' when 2 then 'true' end - ###>true -func_sql_substring=yes # Function ANSI SQL SUBSTRING - ### - ###<select substring('abcd' from 2 for 2) - ###>bc -func_sql_system_user=with_parenthesis # SYSTEM_USER - ###< select SYSTEM_USER - ###> execute error:Unknown column 'SYSTEM_USER' in 'field list' - ### - ###< select SYSTEM_USER() - ###> OK - ###< select SYSTEM_USER - ###> execute error:Unknown column 'SYSTEM_USER' in 'field list' - ### - ###< select SYSTEM_USER() - ###> OK - ###< select SYSTEM_USER - ###> execute error:Unknown column 'SYSTEM_USER' in 'field list' - ### - ###< select SYSTEM_USER() - ###> OK -func_sql_trim=yes # Function TRIM - ### - ###<select trim(trailing from trim(LEADING FROM ' abc ')) - ###>abc -func_sql_upper=yes # Function UPPER - ### - ###<select UPPER('abc') - ###>ABC -func_sql_user=with_parenthesis # USER - ###< select USER - ###> execute error:Unknown column 'USER' in 'field list' - ### - ###< select USER() - ###> OK - ###< select USER - ###> execute error:Unknown column 'USER' in 'field list' - ### - ###< select USER() - ###> OK - ###< select USER - ###> execute error:Unknown column 'USER' in 'field list' - ### - ###< select USER() - ###> OK -func_where_between=yes # Function BETWEEN - ### - ###<select a from crash_me where 5 between 4 and 6 - ###>1 -func_where_eq_all=yes # Function = ALL - ### - ###<select a from crash_me where b =all (select b from crash_me) - ###>1 -func_where_eq_any=yes # Function = ANY - ### - ###<select a from crash_me where b =any (select b from crash_me) - ###>1 -func_where_eq_some=yes # Function = SOME - ### - ###<select a from crash_me where b =some (select b from crash_me) - ###>1 -func_where_exists=yes # Function EXISTS - ### - ###<select a from crash_me where exists (select * from crash_me) - ###>1 -func_where_in_num=yes # Function IN on numbers - ### - ###<select a from crash_me where 2 in (3,2,5,9,5,1) - ###>1 -func_where_like=yes # Function LIKE - ### - ###<select a from crash_me where b like 'a%' - ###>1 -func_where_like_escape=yes # Function LIKE ESCAPE - ### - ###<select a from crash_me where b like '%' escape 'a' - ###>1 -func_where_match=no # Function MATCH - ### - ###<select a from crash_me where 1 match (select a from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'match (select a from crash_me)' at line 1 -func_where_match_unique=no # Function MATCH UNIQUE - ### - ###<select a from crash_me where 1 match unique (select a from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'match unique (select a from crash_me)' at line 1 -func_where_matches=no # Function MATCHES - ### - ###<select a from crash_me where b matcjhes 'a*' - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'matcjhes 'a*'' at line 1 -func_where_not_between=yes # Function NOT BETWEEN - ### - ###<select a from crash_me where 7 not between 4 and 6 - ###>1 -func_where_not_exists=yes # Function NOT EXISTS - ### - ###<select a from crash_me where not exists (select * from crash_me where a = 2) - ###>1 -func_where_not_like=yes # Function NOT LIKE - ### - ###<select a from crash_me where b not like 'b%' - ###>1 -func_where_not_unique=no # Function NOT UNIQUE - ### - ###<select a from crash_me where not unique (select * from crash_me where a = 2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'unique (select * from crash_me where a = 2)' at line 1 -func_where_unique=no # Function UNIQUE - ### - ###<select a from crash_me where unique (select * from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'unique (select * from crash_me)' at line 1 -functions=yes # Functions - ###< select 1+1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by=yes # Group by - ###< select a from crash_me group by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by_alias=yes # Group by alias - ###< select a as ab from crash_me group by ab - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by_null=yes # Group on column with null values - ###< create table crash_q (s char(10)) - ###> OK - ###< insert into crash_q values(null) - ###> OK - ###< insert into crash_q values(null) - ###> OK - ### - ###<select count(*),s from crash_q group by s - ###>2 - ### - ###< drop table crash_q - ###> OK -group_by_position=yes # Group by position - ###< select a from crash_me group by 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_distinct_functions=yes # Group functions with distinct - ###< select count(distinct a) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_func_extra_bit_and=yes # Group function BIT_AND - ### - ###<select bit_and(a),a from crash_me group by a - ###>1 -group_func_extra_bit_or=yes # Group function BIT_OR - ### - ###<select bit_or(a),a from crash_me group by a - ###>1 -group_func_extra_count_distinct_list=yes # Group function COUNT(DISTINCT expr,expr,...) - ### - ###<select count(distinct a,b),a from crash_me group by a - ###>1 -group_func_extra_std=yes # Group function STD - ### - ###<select std(a),a from crash_me group by a - ###>0.0000 -group_func_extra_stddev=yes # Group function STDDEV - ### - ###<select stddev(a),a from crash_me group by a - ###>0.0000 -group_func_extra_variance=yes # Group function VARIANCE - ### - ###<select variance(a),a from crash_me group by a - ###>0.0000 -group_func_sql_any=no # Group function ANY - ### - ###<select any(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_avg=yes # Group function AVG - ### - ###<select avg(a),a from crash_me group by a - ###>1.0000 -group_func_sql_count_*=yes # Group function COUNT (*) - ### - ###<select count(*),a from crash_me group by a - ###>1 -group_func_sql_count_column=yes # Group function COUNT column name - ### - ###<select count(a),a from crash_me group by a - ###>1 -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) - ### - ###<select count(distinct a),a from crash_me group by a - ###>1 -group_func_sql_every=no # Group function EVERY - ### - ###<select every(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_max=yes # Group function MAX on numbers - ### - ###<select max(a),a from crash_me group by a - ###>1 -group_func_sql_max_str=yes # Group function MAX on strings - ### - ###<select max(b),a from crash_me group by a - ###>a -group_func_sql_min=yes # Group function MIN on numbers - ### - ###<select min(a),a from crash_me group by a - ###>1 -group_func_sql_min_str=yes # Group function MIN on strings - ### - ###<select min(b),a from crash_me group by a - ###>a -group_func_sql_some=no # Group function SOME - ### - ###<select some(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_sum=yes # Group function SUM - ### - ###<select sum(a),a from crash_me group by a - ###>1 -group_functions=yes # Group functions - ###< select count(*) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_many_distinct_functions=yes # Group functions with several distinct - ###< select count(distinct a), count(distinct b) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_on_unused=yes # Group on unused column - ###< select count(*) from crash_me group by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -has_true_false=yes # TRUE and FALSE - ###< select (1=1)=true - ###> OK -having=yes # Having - ###<select a from crash_me group by a having a > 0 - ###>1 - ### - ###<select a from crash_me group by a having a < 0 - ###> didn't return any result: -having_with_alias=yes # Having on alias - ###< select a as ab from crash_me group by a having ab > 0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -having_with_group=yes # Having with group function - ###< select a from crash_me group by a having count(*) = 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -hex_numbers=yes # hex numbers (0x41) - ###< select 0x41 - ###> OK - ### - ###As far as all queries returned OK, result is YES -hex_strings=yes # hex strings (x'1ace') - ###< select x'1ace' - ###> OK - ### - ###As far as all queries returned OK, result is YES -ignore_end_space=yes # Ignore end space in compare - ### - ###<select b from crash_me where b = 'a ' - ###>a -index_in_create=yes # index in create table - ###< create table crash_q (q integer not null,index (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -index_namespace=yes # different namespace for index - ###< create index crash_me on crash_me (b) - ###> OK - ###< drop index crash_me on crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -index_parts=yes # index on column part (extension) - ###< create index crash_q on crash_me (b(5)) - ###> OK - ###< drop index crash_q on crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -inner_join=yes # inner join - ###< select crash_me.a from crash_me inner join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_default_values=no # INSERT DEFAULT VALUES - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q DEFAULT VALUES - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT VALUES' at line 1 - ###< drop table crash_me_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -insert_empty_string=yes # insert empty string - ###< create table crash_q (a char(10) not null,b char(10)) - ###> OK - ###< insert into crash_q values ('','') - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_multi_value=yes # INSERT with Value lists - ###< create table crash_q (s char(10)) - ###> OK - ###< insert into crash_q values ('a'),('b') - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_select=yes # insert INTO ... SELECT ... - ###< create table crash_q (a int) - ###> OK - ###< insert into crash_q (a) SELECT crash_me.a from crash_me - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_with_default=yes # INSERT with DEFAULT - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q (a) values (DEFAULT) - ###> OK - ###< drop table crash_me_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_with_empty_value_list=no # INSERT with empty value list - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q (a) values () - ###> execute error:Column count doesn't match value count at row 1 - ###< drop table crash_me_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -insert_with_set=yes # INSERT with set syntax - ###< create table crash_q (a integer) - ###> OK - ###< insert into crash_q SET a=1 - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -intersect=no # intersect - ###< select * from crash_me intersect select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_all=no # intersect all - ###< select * from crash_me intersect all select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_all_incompat=no # intersect all (incompatible lists) - ###< select * from crash_me intersect all select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_incompat=no # intersect (incompatible lists) - ###< select * from crash_me intersect select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -join_tables=61 # tables in join - ###We are trying (example with N=5): - ###select crash_me.a,t0.a,t1.a,t2.a,t3.a,t4.a from crash_me,crash_me t0,crash_me t1,crash_me t2,crash_me t3,crash_me t4 - ### 32:OK 48:OK 56:OK 60:OK 62:FAIL 61:FAIL -left_outer_join=yes # left outer join - ###< select crash_me.a from crash_me left join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -left_outer_join_using=yes # left outer join using - ###< select c1 from crash_me left join crash_me2 using (a) - ###> OK - ### - ###As far as all queries returned OK, result is YES -length_of_varchar_field=actual length # CHARACTER_LENGTH(varchar_field) - ###< CREATE TABLE crash_me1 (S1 VARCHAR(100)) - ###> OK - ###< INSERT INTO crash_me1 VALUES ('X') - ###> OK - ### - ###< SELECT CHARACTER_LENGTH(S1) FROM crash_me1 - ### > 1 - ###< drop table crash_me1 - ###> OK -like_with_column=yes # column LIKE column - ###< create table crash_q (a char(10),b char(10)) - ###> OK - ###< insert into crash_q values('abc','abc') - ###> OK - ###< select * from crash_q where a like b - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -like_with_number=yes # LIKE on numbers - ###< create table crash_q (a int,b int) - ###> OK - ###< insert into crash_q values(10,10) - ###> OK - ###< select * from crash_q where a like '10' - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -lock_tables=yes # lock table - ###< lock table crash_me READ - ###> OK - ###< unlock tables - ###> OK - ### - ###As far as all queries returned OK, result is YES -logical_value=1 # Value of logical operation (1=1) - ###<select (1=1) - ###>1 -max_big_expressions=10 # big expressions - ###We are trying (example with N=5): - ###select 0+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+...(14328) - ### 50:FAIL 10:OK 30:FAIL 14:FAIL 11:FAIL -max_char_size=1048543 # max char() size - ###We are trying (example with N=5): - ###create table crash_q (q char(5)) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL -max_column_name=64 # column name length - ###We are trying (example with N=5): - ###create table crash_q (qaaaaa integer) - ###insert into crash_q (qaaaaa) values(1) - ###select qaaaaa from crash_q - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:OK 67:FAIL 64:FAIL -max_columns=2599 # Columns in table - ###We are trying (example with N=5): - ###create table crash_q (a integer ,a0 integer,a1 integer,a2 integer,a3 integer,a4 integer) - ### 4096:FAIL 819:OK 2457:OK 3276:FAIL 2621:FAIL 2490:OK 2555:OK 2588:OK 2604:FAIL 2591:OK 2597:OK 2600:FAIL 2598:OK 2599:FAIL -max_conditions=85660 # OR and AND in WHERE - ###We are trying (example with N=5): - ###select a from crash_me where a=1 and b='a' or a=0 and b='0' or a=1 and b='1' or a=2 and b='2' or a=3 and b='3' or a=4 and b='4' - ### 27592:OK 41389:OK 48287:FAIL 42769:OK 45528:FAIL 43321:FAIL 42880:FAIL 42791:OK 42835:FAIL 42800:OK 42817:OK 42826:OK 42830:OK 42832:FAIL 42831:FAIL -max_expressions=1452 # simple expressions - ###We are trying (example with N=5): - ###select 1+1+1+1+1+1 - ### 5000:FAIL 1000:OK 3000:FAIL 1400:OK 2200:FAIL 1560:FAIL 1432:OK 1496:FAIL 1445:OK 1470:FAIL 1450:OK 1460:FAIL 1452:OK 1456:FAIL 1453:FAIL -max_index=32 # max index - ### max_unique_index=32 ,so max_index must be same - ### max_unique_index=32 ,so max_index must be same - ### max_unique_index=32 ,so max_index must be same -max_index_length=500 # index length - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) not null,unique (q0)) - ###insert into crash_q values('aaaaa') - ### 4096:FAIL 819:FAIL 164:OK 491:OK 655:FAIL 524:FAIL 498:OK 511:FAIL 501:FAIL 499:OK 500:OK -max_index_name=64 # index name length - ###We are trying (example with N=5): - ###create index crash_qaaaaa on crash_me (a) - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL -max_index_part_length=255 # max index part length - ###We are trying (example with N=5): - ###create table crash_q (q char(5) not null,unique(q)) - ###insert into crash_q (q) values ('aaaaa') - ###select q from crash_q - ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK -max_index_parts=16 # index parts - ###We are trying (example with N=5): - ###create table crash_q (q0 integer not null,q1 integer not null,q2 integer not null,q3 integer not null,q4 integer not nul...(1263) - ###insert into crash_q (q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q...(284) - ###select q0 from crash_q - ### 32:FAIL 7:OK 19:FAIL 10:OK 14:OK 16:FAIL 15:OK -max_index_varchar_part_length=255 # index varchar part length - ###We are trying (example with N=5): - ###create table crash_q (q varchar(5) not null,unique(q)) - ###insert into crash_q (q) values ('aaaaa') - ###select q from crash_q - ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK -max_row_length=65534 # max table row length (without blobs) - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) not null) - ###insert into crash_q values ('aaaaa') - ### 331372:FAIL 66275:FAIL 13255:OK 39765:OK 53020:OK 59647:OK 62961:OK 64618:OK 65446:OK 65860:FAIL 65529:OK 65694:FAIL 65562:FAIL 65536:FAIL 65531:OK 65533:OK 65534:OK 65535:FAIL -max_row_length_with_null=65502 # table row length with nulls (without blobs) - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) ) - ###insert into crash_q values ('aaaaa') - ### 65534:FAIL 13107:OK 39320:OK 52427:OK 58980:OK 62257:OK 63895:OK 64714:OK 65124:OK 65329:OK 65431:OK 65482:OK 65508:FAIL 65487:OK 65497:OK 65502:OK 65505:FAIL 65503:FAIL -max_select_alias_name=+512 # select alias name length - ###We are trying (example with N=5): - ###select b as aaaaa from crash_me -max_stack_expression=1452 # stacked expressions - ###We are trying (example with N=5): - ###select 1+(1+(1+(1+(1+(1))))) - ### 1000:OK 1500:FAIL 1100:OK 1300:OK 1400:OK 1450:OK 1475:FAIL 1455:FAIL 1451:OK 1453:FAIL 1452:OK -max_table_alias_name=+512 # table alias name length - ###We are trying (example with N=5): - ###select aaaaa.b from crash_me aaaaa -max_table_name=64 # table name length - ###We are trying (example with N=5): - ###create table crash_qaaaaa (q integer) - ###insert into crash_qaaaaa values(1) - ###select * from crash_qaaaaa - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL -max_text_size=1048543 # max text or blob size - ###We are trying (example with N=5): - ###create table crash_q (q mediumtext) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524272:OK 786408:OK 917476:OK 983010:OK 1015777:OK 1032161:OK 1040353:OK 1044449:OK 1046497:OK 1047521:OK 1048033:OK 1048289:OK 1048417:OK 1048481:OK 1048513:OK 1048529:OK 1048537:OK 1048541:OK 1048543:OK 1048544:FAIL -max_unique_index=32 # unique indexes - ###We are trying (example with N=5): - ###create table crash_q (q integer,q1 integer not null,unique (q1),q2 integer not null,unique (q2),q3 integer not null,uniq...(72) - ###insert into crash_q (q,q1,q2,q3,q4,q5) values (1,1,1,1,1,1) - ###select q from crash_q - ### 32:OK 48:FAIL 35:FAIL 33:FAIL -max_varchar_size=1048543 # max varchar() size - ###We are trying (example with N=5): - ###create table crash_q (q varchar(5)) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL -minus=no # minus - ###< select * from crash_me minus select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -minus_incompat=no # minus (incompatible lists) - ###< select * from crash_me minus select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -minus_neg=yes # Calculate 1--1 - ### - ###<select a--1 from crash_me - ###>2 -multi_drop=yes # many tables to drop table - ###< create table crash_q (a int) - ###> OK - ###< create table crash_q2 (a int) - ###> OK - ###< drop table crash_q,crash_q2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_null_in_unique=yes # null in unique index - ###< create table crash_q (q integer, x integer,unique (q)) - ###> OK - ###< insert into crash_q(x) values(1) - ###> OK - ###< insert into crash_q(x) values(2) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_strings=yes # Multiple line strings - ### - ###<select a from crash_me where b < 'a' - ###'b' - ###>1 -multi_table_delete=yes # DELETE FROM table1,table2... - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< delete crash_q.* from crash_q,crash_me where crash_q.a=crash_me.a - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_table_update=yes # Update with many tables - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< update crash_q left join crash_me on crash_q.a=crash_me.a set crash_q.b=crash_me.b - ###> OK - ### - ###<select b from crash_q - ###>a - ### - ###< drop table crash_q - ###> OK -natural_join=yes # natural join - ###< select * from crash_me natural join crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -natural_join_incompat=yes # natural join (incompatible lists) - ###< select c1 from crash_me natural join crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -natural_left_outer_join=yes # natural left outer join - ###< select c1 from crash_me natural left join crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -no_primary_key=yes # Tables without primary key - ###< create table crash_me (a integer not null,b char(10) not null) - ###> OK - ###< insert into crash_me (a,b) values (1,'a') - ###> OK - ###< create table crash_me (a integer not null,b char(10) not null) - ###> OK - ###< insert into crash_me (a,b) values (1,'a') - ###> OK - ###< create table crash_me (a integer not null,b char(10) not null) - ###> OK - ###< insert into crash_me (a,b) values (1,'a') - ###> OK -not_id_between=no # NOT ID BETWEEN interprets as ID NOT BETWEEN - ###< create table crash_me_b (i int) - ###> OK - ###< insert into crash_me_b values(2) - ###> OK - ###< insert into crash_me_b values(5) - ###> OK - ### - ###<select i from crash_me_b where not i between 1 and 3 - ###> didn't return any result: - ### - ###< drop table crash_me_b - ###> OK - ###< create table crash_me_b (i int) - ###> OK - ###< insert into crash_me_b values(2) - ###> OK - ###< insert into crash_me_b values(5) - ###> OK - ### - ###<select i from crash_me_b where not i between 1 and 3 - ###> didn't return any result: - ### - ###< drop table crash_me_b - ###> OK - ###< create table crash_me_b (i int) - ###> OK - ###< insert into crash_me_b values(2) - ###> OK - ###< insert into crash_me_b values(5) - ###> OK - ### - ###<select i from crash_me_b where not i between 1 and 3 - ###> didn't return any result: - ### - ###< drop table crash_me_b - ###> OK -null_concat_expr=yes # Is concat('a',NULL) = NULL - ### - ###<select concat('a',NULL) - ###> -null_in_index=yes # null in index - ###< create table crash_q (a char(10),index (a)) - ###> OK - ###< insert into crash_q values (NULL) - ###> OK - ### - ###<select * from crash_q - ###> - ### - ###< drop table crash_q - ###> OK -null_in_unique=yes # null in unique index - ###< create table crash_q (q integer,unique (q)) - ###> OK - ###< insert into crash_q (q) values(NULL) - ###> OK - ###< insert into crash_q (q) values(NULL) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -null_num_expr=yes # Is 1+NULL = NULL - ### - ###<select 1+NULL - ###> -nulls_in_unique=yes # null combination in unique index - ###< create table crash_q (q integer,q1 integer,unique (q,q1)) - ###> OK - ###< insert into crash_q (q,q1) values(1,NULL) - ###> OK - ###< insert into crash_q (q,q1) values(1,NULL) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -odbc_left_outer_join=yes # left outer join odbc style - ###< select crash_me.a from { oj crash_me left outer join crash_me2 ON crash_me.a=crash_me2.a } - ###> OK - ### - ###As far as all queries returned OK, result is YES -operating_system=Linux 2.4.20-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by - ###< select a from crash_me order by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_alias=yes # Order by alias - ###< select a as ab from crash_me order by ab - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_function=yes # Order by function - ###< select a from crash_me order by a+1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_position=yes # Order by position - ###< select a from crash_me order by 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_on_unused=yes # Order by on unused column - ###< select b from crash_me order by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -position_of_null=first # Where is null values in sorted recordset - ###< insert into crash_me_n (i) values(1) - ###> OK - ###< insert into crash_me_n values(2,2) - ###> OK - ###< insert into crash_me_n values(3,3) - ###> OK - ###< insert into crash_me_n values(4,4) - ###> OK - ###< insert into crash_me_n (i) values(5) - ###> OK - ### - ###< select r from crash_me_n order by r - ###> - ###> - ###> 2 - ###> 3 - ###> 4 - ###< insert into crash_me_n (i) values(1) - ###> OK - ###< insert into crash_me_n values(2,2) - ###> OK - ###< insert into crash_me_n values(3,3) - ###> OK - ###< insert into crash_me_n values(4,4) - ###> OK - ###< insert into crash_me_n (i) values(5) - ###> OK - ###< insert into crash_me_n (i) values(1) - ###> OK - ###< insert into crash_me_n values(2,2) - ###> OK - ###< insert into crash_me_n values(3,3) - ###> OK - ###< insert into crash_me_n values(4,4) - ###> OK - ###< insert into crash_me_n (i) values(5) - ###> OK -position_of_null_desc=last # Where is null values in sorted recordset (DESC) - ###< select r from crash_me_n order by r desc - ###> 4 - ###> 3 - ###> 2 - ###> - ###> -primary_key_in_create=yes # primary key in create table - ###< create table crash_q (q integer not null,primary key (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -psm_functions=no # PSM functions (ANSI SQL) - ###< create table crash_q (a int) - ###> OK - ###< create function crash_func(in a1 int, in b1 int) returns int language sql deterministic contains sql begin return a1 * b1; end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'in a1 int, in b1 int) returns int language sql deterministic co - ###< insert into crash_q values(crash_func(2,4)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(2,4))' at line 1 - ###< select a,crash_func(a,2) from crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a,2) from crash_q' at line 1 - ###< drop function crash_func cascade - ###> execute error:Failed to DROP FUNCTION crash_func - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_modules=no # PSM modules (ANSI SQL) - ###< create table crash_q (a int,b int) - ###> OK - ###< create module crash_m declare procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end; declare procedure crash_proc2(INOUT a int, in b int) contains sql set a = b + 10; end module - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'module crash_m declare procedure crash_proc(in a1 int, in b1 in - ###< call crash_proc(1,10) - ###> execute error:PROCEDURE crash_proc does not exist - ###< drop module crash_m cascade - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'module crash_m cascade' at line 1 - ###< drop table crash_q cascade - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_procedures=no # PSM procedures (ANSI SQL) - ###< create table crash_q (a int,b int) - ###> OK - ###< create procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'sql data begin declare c1 int; set c1 = a1 + b1; insert into cr - ###< call crash_proc(1,10) - ###> execute error:PROCEDURE crash_proc does not exist - ###< drop procedure crash_proc - ###> execute error:Failed to DROP PROCEDURE crash_proc - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_trigger=no # Triggers (ANSI SQL) - ###< create table crash_q (a int ,b int) - ###> OK - ###< create trigger crash_trigger after insert on crash_q referencing new table as new_a when (localtime > time '18:00:00') begin atomic end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'trigger crash_trigger after insert on crash_q referencing new t - ###< insert into crash_q values(1,2) - ###> OK - ###< drop trigger crash_trigger - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'trigger crash_trigger' at line 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -query_size=1048574 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) - ### - ###<select "A" from crash_me - ###>A - ###We expected '1' but got 'A' -quote_ident_with_[=no # [] as identifier quote - ### - ###<select [A] from crash_me - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '[A] from crash_me' at line 1 -quote_ident_with_`=yes # ` as identifier quote - ### - ###<select `A` from crash_me - ###>1 -quote_ident_with_dbl_"=no # Double "" in identifiers as " - ###< create table crash_me1 ("abc""d" integer) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '"abc""d" integer)' at line 1 - ###< drop table crash_me1 - ###> execute error:Unknown table 'crash_me1' - ### - ###As far as some queries didnt return OK, result is NO -quote_with_"=yes # Allows ' and " as string markers - ###< select a from crash_me where b<"c" - ###> OK - ### - ###As far as all queries returned OK, result is YES -recursive_subqueries=+64 # recursive subqueries - ###We are trying (example with N=5): - ###select a from crash_me where a in (select a from crash_me where a in (select a from crash_me where a in (select a from c...(82) -remember_end_space=no # Remembers end space in char() - ###< create table crash_q (a char(10)) - ###> OK - ###< insert into crash_q values('hello ') - ###> OK - ### - ###<select a from crash_q where a = 'hello ' - ###>hello - ###We expected 'hello ' but got 'hello' - ### - ###< drop table crash_q - ###> OK -remember_end_space_varchar=no # Remembers end space in varchar() - ###< create table crash_q (a varchar(10)) - ###> OK - ###< insert into crash_q values('hello ') - ###> OK - ### - ###<select a from crash_q where a = 'hello ' - ###>hello - ###We expected 'hello ' but got 'hello' - ### - ###< drop table crash_q - ###> OK -rename_table=yes # rename table - ###< create table crash_q (a integer, b integer,c1 CHAR(10)) - ###> OK - ###< rename table crash_q to crash_q1 - ###> OK - ###< drop table crash_q1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -repeat_string_size=1047552 # return string size from function - ###We are trying (example with N=5): - ###select repeat('a',5) - ### 4000000:FAIL 800000:OK 2400000:FAIL 1120000:FAIL 864000:OK 992000:OK 1056000:FAIL 1004800:OK 1030400:OK 1043200:OK 1049600:FAIL 1044480:OK 1047040:OK 1048320:FAIL 1047296:OK 1047808:FAIL 1047399:OK 1047603:FAIL 1047440:OK 1047521:OK 1047562:FAIL 1047529:OK 1047545:OK 1047553:FAIL 1047547:OK 1047550:OK 1047551:OK 1047552:OK -reserved_word_ansi-92/99_absolute=no # Keyword ABSOLUTE - ###< create table crash_me10 (ABSOLUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_action=no # Keyword ACTION - ###< create table crash_me10 (ACTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_add=yes # Keyword ADD - ###< create table crash_me10 (ADD int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ADD int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_after=no # Keyword AFTER - ###< create table crash_me10 (AFTER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_alias=no # Keyword ALIAS - ###< create table crash_me10 (ALIAS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_all=yes # Keyword ALL - ###< create table crash_me10 (ALL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_allocate=no # Keyword ALLOCATE - ###< create table crash_me10 (ALLOCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_alter=yes # Keyword ALTER - ###< create table crash_me10 (ALTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_and=yes # Keyword AND - ###< create table crash_me10 (AND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_any=no # Keyword ANY - ###< create table crash_me10 (ANY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_are=no # Keyword ARE - ###< create table crash_me10 (ARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_as=yes # Keyword AS - ###< create table crash_me10 (AS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_asc=yes # Keyword ASC - ###< create table crash_me10 (ASC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_assertion=no # Keyword ASSERTION - ###< create table crash_me10 (ASSERTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_at=no # Keyword AT - ###< create table crash_me10 (AT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_authorization=no # Keyword AUTHORIZATION - ###< create table crash_me10 (AUTHORIZATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_before=yes # Keyword BEFORE - ###< create table crash_me10 (BEFORE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEFORE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_begin=no # Keyword BEGIN - ###< create table crash_me10 (BEGIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_bit=no # Keyword BIT - ###< create table crash_me10 (BIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_boolean=no # Keyword BOOLEAN - ###< create table crash_me10 (BOOLEAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_both=yes # Keyword BOTH - ###< create table crash_me10 (BOTH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BOTH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_breadth=no # Keyword BREADTH - ###< create table crash_me10 (BREADTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_by=yes # Keyword BY - ###< create table crash_me10 (BY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_call=yes # Keyword CALL - ###< create table crash_me10 (CALL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cascade=yes # Keyword CASCADE - ###< create table crash_me10 (CASCADE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASCADE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cascaded=no # Keyword CASCADED - ###< create table crash_me10 (CASCADED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_case=yes # Keyword CASE - ###< create table crash_me10 (CASE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cast=no # Keyword CAST - ###< create table crash_me10 (CAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_catalog=no # Keyword CATALOG - ###< create table crash_me10 (CATALOG int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_char=yes # Keyword CHAR - ###< create table crash_me10 (CHAR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHAR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_character=yes # Keyword CHARACTER - ###< create table crash_me10 (CHARACTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_check=yes # Keyword CHECK - ###< create table crash_me10 (CHECK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_close=no # Keyword CLOSE - ###< create table crash_me10 (CLOSE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_collate=yes # Keyword COLLATE - ###< create table crash_me10 (COLLATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLLATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_collation=no # Keyword COLLATION - ###< create table crash_me10 (COLLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_column=yes # Keyword COLUMN - ###< create table crash_me10 (COLUMN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_commit=no # Keyword COMMIT - ###< create table crash_me10 (COMMIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_completion=no # Keyword COMPLETION - ###< create table crash_me10 (COMPLETION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_connect=no # Keyword CONNECT - ###< create table crash_me10 (CONNECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_connection=yes # Keyword CONNECTION - ###< create table crash_me10 (CONNECTION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONNECTION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_constraint=yes # Keyword CONSTRAINT - ###< create table crash_me10 (CONSTRAINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_constraints=no # Keyword CONSTRAINTS - ###< create table crash_me10 (CONSTRAINTS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_continue=yes # Keyword CONTINUE - ###< create table crash_me10 (CONTINUE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONTINUE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_corresponding=no # Keyword CORRESPONDING - ###< create table crash_me10 (CORRESPONDING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_create=yes # Keyword CREATE - ###< create table crash_me10 (CREATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cross=yes # Keyword CROSS - ###< create table crash_me10 (CROSS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CROSS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current=no # Keyword CURRENT - ###< create table crash_me10 (CURRENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_current_date=yes # Keyword CURRENT_DATE - ###< create table crash_me10 (CURRENT_DATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_time=yes # Keyword CURRENT_TIME - ###< create table crash_me10 (CURRENT_TIME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_timestamp=yes # Keyword CURRENT_TIMESTAMP - ###< create table crash_me10 (CURRENT_TIMESTAMP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIMESTAMP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_user=no # Keyword CURRENT_USER - ###< create table crash_me10 (CURRENT_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_cursor=yes # Keyword CURSOR - ###< create table crash_me10 (CURSOR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURSOR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cycle=no # Keyword CYCLE - ###< create table crash_me10 (CYCLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_data=no # Keyword DATA - ###< create table crash_me10 (DATA int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_date=no # Keyword DATE - ###< create table crash_me10 (DATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_day=no # Keyword DAY - ###< create table crash_me10 (DAY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_deallocate=no # Keyword DEALLOCATE - ###< create table crash_me10 (DEALLOCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_dec=yes # Keyword DEC - ###< create table crash_me10 (DEC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_decimal=yes # Keyword DECIMAL - ###< create table crash_me10 (DECIMAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECIMAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_declare=yes # Keyword DECLARE - ###< create table crash_me10 (DECLARE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_default=yes # Keyword DEFAULT - ###< create table crash_me10 (DEFAULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_deferrable=no # Keyword DEFERRABLE - ###< create table crash_me10 (DEFERRABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_deferred=no # Keyword DEFERRED - ###< create table crash_me10 (DEFERRED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_delete=yes # Keyword DELETE - ###< create table crash_me10 (DELETE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_depth=no # Keyword DEPTH - ###< create table crash_me10 (DEPTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_desc=yes # Keyword DESC - ###< create table crash_me10 (DESC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_describe=yes # Keyword DESCRIBE - ###< create table crash_me10 (DESCRIBE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESCRIBE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_descriptor=no # Keyword DESCRIPTOR - ###< create table crash_me10 (DESCRIPTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_diagnostics=no # Keyword DIAGNOSTICS - ###< create table crash_me10 (DIAGNOSTICS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_dictionary=no # Keyword DICTIONARY - ###< create table crash_me10 (DICTIONARY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_disconnect=no # Keyword DISCONNECT - ###< create table crash_me10 (DISCONNECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_distinct=yes # Keyword DISTINCT - ###< create table crash_me10 (DISTINCT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_domain=no # Keyword DOMAIN - ###< create table crash_me10 (DOMAIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_double=yes # Keyword DOUBLE - ###< create table crash_me10 (DOUBLE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DOUBLE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_drop=yes # Keyword DROP - ###< create table crash_me10 (DROP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_each=no # Keyword EACH - ###< create table crash_me10 (EACH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_else=yes # Keyword ELSE - ###< create table crash_me10 (ELSE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELSE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_elseif=yes # Keyword ELSEIF - ###< create table crash_me10 (ELSEIF int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELSEIF int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_end=no # Keyword END - ###< create table crash_me10 (END int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_end-exec=yes # Keyword END-EXEC - ###< create table crash_me10 (END-EXEC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '-EXEC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_equals=no # Keyword EQUALS - ###< create table crash_me10 (EQUALS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_escape=no # Keyword ESCAPE - ###< create table crash_me10 (ESCAPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_except=no # Keyword EXCEPT - ###< create table crash_me10 (EXCEPT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_exception=no # Keyword EXCEPTION - ###< create table crash_me10 (EXCEPTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_exec=no # Keyword EXEC - ###< create table crash_me10 (EXEC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_execute=no # Keyword EXECUTE - ###< create table crash_me10 (EXECUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_external=no # Keyword EXTERNAL - ###< create table crash_me10 (EXTERNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_false=yes # Keyword FALSE - ###< create table crash_me10 (FALSE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FALSE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_fetch=yes # Keyword FETCH - ###< create table crash_me10 (FETCH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FETCH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_first=no # Keyword FIRST - ###< create table crash_me10 (FIRST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_float=yes # Keyword FLOAT - ###< create table crash_me10 (FLOAT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FLOAT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_for=yes # Keyword FOR - ###< create table crash_me10 (FOR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_foreign=yes # Keyword FOREIGN - ###< create table crash_me10 (FOREIGN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_found=yes # Keyword FOUND - ###< create table crash_me10 (FOUND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOUND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_from=yes # Keyword FROM - ###< create table crash_me10 (FROM int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_full=no # Keyword FULL - ###< create table crash_me10 (FULL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_general=no # Keyword GENERAL - ###< create table crash_me10 (GENERAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_get=no # Keyword GET - ###< create table crash_me10 (GET int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_global=no # Keyword GLOBAL - ###< create table crash_me10 (GLOBAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_go=no # Keyword GO - ###< create table crash_me10 (GO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_goto=no # Keyword GOTO - ###< create table crash_me10 (GOTO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_grant=yes # Keyword GRANT - ###< create table crash_me10 (GRANT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GRANT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_group=yes # Keyword GROUP - ###< create table crash_me10 (GROUP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_having=yes # Keyword HAVING - ###< create table crash_me10 (HAVING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_hour=no # Keyword HOUR - ###< create table crash_me10 (HOUR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_identity=no # Keyword IDENTITY - ###< create table crash_me10 (IDENTITY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_if=yes # Keyword IF - ###< create table crash_me10 (IF int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_ignore=yes # Keyword IGNORE - ###< create table crash_me10 (IGNORE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_immediate=no # Keyword IMMEDIATE - ###< create table crash_me10 (IMMEDIATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_in=yes # Keyword IN - ###< create table crash_me10 (IN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_indicator=no # Keyword INDICATOR - ###< create table crash_me10 (INDICATOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_initially=no # Keyword INITIALLY - ###< create table crash_me10 (INITIALLY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_inner=yes # Keyword INNER - ###< create table crash_me10 (INNER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_input=no # Keyword INPUT - ###< create table crash_me10 (INPUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_insert=yes # Keyword INSERT - ###< create table crash_me10 (INSERT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_int=yes # Keyword INT - ###< create table crash_me10 (INT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_integer=yes # Keyword INTEGER - ###< create table crash_me10 (INTEGER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTEGER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_intersect=no # Keyword INTERSECT - ###< create table crash_me10 (INTERSECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_interval=yes # Keyword INTERVAL - ###< create table crash_me10 (INTERVAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_into=yes # Keyword INTO - ###< create table crash_me10 (INTO int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_is=yes # Keyword IS - ###< create table crash_me10 (IS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_isolation=no # Keyword ISOLATION - ###< create table crash_me10 (ISOLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_join=yes # Keyword JOIN - ###< create table crash_me10 (JOIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_key=yes # Keyword KEY - ###< create table crash_me10 (KEY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_language=no # Keyword LANGUAGE - ###< create table crash_me10 (LANGUAGE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_last=no # Keyword LAST - ###< create table crash_me10 (LAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_leading=yes # Keyword LEADING - ###< create table crash_me10 (LEADING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEADING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_leave=yes # Keyword LEAVE - ###< create table crash_me10 (LEAVE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEAVE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_left=yes # Keyword LEFT - ###< create table crash_me10 (LEFT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_less=no # Keyword LESS - ###< create table crash_me10 (LESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_level=no # Keyword LEVEL - ###< create table crash_me10 (LEVEL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_like=yes # Keyword LIKE - ###< create table crash_me10 (LIKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_limit=yes # Keyword LIMIT - ###< create table crash_me10 (LIMIT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_local=no # Keyword LOCAL - ###< create table crash_me10 (LOCAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_loop=yes # Keyword LOOP - ###< create table crash_me10 (LOOP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOOP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_match=yes # Keyword MATCH - ###< create table crash_me10 (MATCH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_minute=no # Keyword MINUTE - ###< create table crash_me10 (MINUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_modify=no # Keyword MODIFY - ###< create table crash_me10 (MODIFY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_module=no # Keyword MODULE - ###< create table crash_me10 (MODULE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_month=no # Keyword MONTH - ###< create table crash_me10 (MONTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_names=no # Keyword NAMES - ###< create table crash_me10 (NAMES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_national=no # Keyword NATIONAL - ###< create table crash_me10 (NATIONAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_natural=yes # Keyword NATURAL - ###< create table crash_me10 (NATURAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NATURAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_nchar=no # Keyword NCHAR - ###< create table crash_me10 (NCHAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_new=no # Keyword NEW - ###< create table crash_me10 (NEW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_next=no # Keyword NEXT - ###< create table crash_me10 (NEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_no=no # Keyword NO - ###< create table crash_me10 (NO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_none=no # Keyword NONE - ###< create table crash_me10 (NONE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_not=yes # Keyword NOT - ###< create table crash_me10 (NOT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_null=yes # Keyword NULL - ###< create table crash_me10 (NULL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_numeric=yes # Keyword NUMERIC - ###< create table crash_me10 (NUMERIC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NUMERIC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_object=no # Keyword OBJECT - ###< create table crash_me10 (OBJECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_of=no # Keyword OF - ###< create table crash_me10 (OF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_off=no # Keyword OFF - ###< create table crash_me10 (OFF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_old=no # Keyword OLD - ###< create table crash_me10 (OLD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_on=yes # Keyword ON - ###< create table crash_me10 (ON int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_only=no # Keyword ONLY - ###< create table crash_me10 (ONLY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_open=no # Keyword OPEN - ###< create table crash_me10 (OPEN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_operation=no # Keyword OPERATION - ###< create table crash_me10 (OPERATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_option=yes # Keyword OPTION - ###< create table crash_me10 (OPTION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_or=yes # Keyword OR - ###< create table crash_me10 (OR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_order=yes # Keyword ORDER - ###< create table crash_me10 (ORDER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_outer=yes # Keyword OUTER - ###< create table crash_me10 (OUTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_output=no # Keyword OUTPUT - ###< create table crash_me10 (OUTPUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_pad=no # Keyword PAD - ###< create table crash_me10 (PAD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_parameters=no # Keyword PARAMETERS - ###< create table crash_me10 (PARAMETERS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_partial=no # Keyword PARTIAL - ###< create table crash_me10 (PARTIAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_precision=yes # Keyword PRECISION - ###< create table crash_me10 (PRECISION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRECISION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_preorder=no # Keyword PREORDER - ###< create table crash_me10 (PREORDER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_prepare=no # Keyword PREPARE - ###< create table crash_me10 (PREPARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_preserve=no # Keyword PRESERVE - ###< create table crash_me10 (PRESERVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_primary=yes # Keyword PRIMARY - ###< create table crash_me10 (PRIMARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_prior=no # Keyword PRIOR - ###< create table crash_me10 (PRIOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_privileges=yes # Keyword PRIVILEGES - ###< create table crash_me10 (PRIVILEGES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRIVILEGES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_procedure=yes # Keyword PROCEDURE - ###< create table crash_me10 (PROCEDURE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PROCEDURE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_public=no # Keyword PUBLIC - ###< create table crash_me10 (PUBLIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_read=yes # Keyword READ - ###< create table crash_me10 (READ int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_real=yes # Keyword REAL - ###< create table crash_me10 (REAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_recursive=no # Keyword RECURSIVE - ###< create table crash_me10 (RECURSIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_ref=no # Keyword REF - ###< create table crash_me10 (REF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_references=yes # Keyword REFERENCES - ###< create table crash_me10 (REFERENCES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_referencing=no # Keyword REFERENCING - ###< create table crash_me10 (REFERENCING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_relative=no # Keyword RELATIVE - ###< create table crash_me10 (RELATIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_resignal=no # Keyword RESIGNAL - ###< create table crash_me10 (RESIGNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_restrict=yes # Keyword RESTRICT - ###< create table crash_me10 (RESTRICT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RESTRICT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_return=yes # Keyword RETURN - ###< create table crash_me10 (RETURN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RETURN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_returns=no # Keyword RETURNS - ###< create table crash_me10 (RETURNS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_revoke=yes # Keyword REVOKE - ###< create table crash_me10 (REVOKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REVOKE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_right=yes # Keyword RIGHT - ###< create table crash_me10 (RIGHT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RIGHT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_role=no # Keyword ROLE - ###< create table crash_me10 (ROLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_rollback=no # Keyword ROLLBACK - ###< create table crash_me10 (ROLLBACK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_routine=no # Keyword ROUTINE - ###< create table crash_me10 (ROUTINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_row=no # Keyword ROW - ###< create table crash_me10 (ROW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_rows=no # Keyword ROWS - ###< create table crash_me10 (ROWS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_savepoint=no # Keyword SAVEPOINT - ###< create table crash_me10 (SAVEPOINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_schema=no # Keyword SCHEMA - ###< create table crash_me10 (SCHEMA int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_scroll=no # Keyword SCROLL - ###< create table crash_me10 (SCROLL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_search=no # Keyword SEARCH - ###< create table crash_me10 (SEARCH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_second=no # Keyword SECOND - ###< create table crash_me10 (SECOND int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_section=no # Keyword SECTION - ###< create table crash_me10 (SECTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_select=yes # Keyword SELECT - ###< create table crash_me10 (SELECT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_sequence=no # Keyword SEQUENCE - ###< create table crash_me10 (SEQUENCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_session=no # Keyword SESSION - ###< create table crash_me10 (SESSION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_session_user=no # Keyword SESSION_USER - ###< create table crash_me10 (SESSION_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_set=yes # Keyword SET - ###< create table crash_me10 (SET int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_signal=no # Keyword SIGNAL - ###< create table crash_me10 (SIGNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_size=no # Keyword SIZE - ###< create table crash_me10 (SIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_smallint=yes # Keyword SMALLINT - ###< create table crash_me10 (SMALLINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SMALLINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_some=no # Keyword SOME - ###< create table crash_me10 (SOME int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_space=no # Keyword SPACE - ###< create table crash_me10 (SPACE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_sql=yes # Keyword SQL - ###< create table crash_me10 (SQL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_sqlexception=yes # Keyword SQLEXCEPTION - ###< create table crash_me10 (SQLEXCEPTION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQLEXCEPTION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_sqlstate=yes # Keyword SQLSTATE - ###< create table crash_me10 (SQLSTATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQLSTATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_sqlwarning=yes # Keyword SQLWARNING - ###< create table crash_me10 (SQLWARNING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQLWARNING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_structure=no # Keyword STRUCTURE - ###< create table crash_me10 (STRUCTURE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_system_user=no # Keyword SYSTEM_USER - ###< create table crash_me10 (SYSTEM_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_table=yes # Keyword TABLE - ###< create table crash_me10 (TABLE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_temporary=no # Keyword TEMPORARY - ###< create table crash_me10 (TEMPORARY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_then=yes # Keyword THEN - ###< create table crash_me10 (THEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'THEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_time=no # Keyword TIME - ###< create table crash_me10 (TIME int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timestamp=no # Keyword TIMESTAMP - ###< create table crash_me10 (TIMESTAMP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timezone_hour=no # Keyword TIMEZONE_HOUR - ###< create table crash_me10 (TIMEZONE_HOUR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timezone_minute=no # Keyword TIMEZONE_MINUTE - ###< create table crash_me10 (TIMEZONE_MINUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_to=yes # Keyword TO - ###< create table crash_me10 (TO int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TO int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_trailing=yes # Keyword TRAILING - ###< create table crash_me10 (TRAILING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRAILING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_transaction=no # Keyword TRANSACTION - ###< create table crash_me10 (TRANSACTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_translation=no # Keyword TRANSLATION - ###< create table crash_me10 (TRANSLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_trigger=no # Keyword TRIGGER - ###< create table crash_me10 (TRIGGER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_true=yes # Keyword TRUE - ###< create table crash_me10 (TRUE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRUE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_under=no # Keyword UNDER - ###< create table crash_me10 (UNDER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_union=yes # Keyword UNION - ###< create table crash_me10 (UNION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_unique=yes # Keyword UNIQUE - ###< create table crash_me10 (UNIQUE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_unknown=no # Keyword UNKNOWN - ###< create table crash_me10 (UNKNOWN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_update=yes # Keyword UPDATE - ###< create table crash_me10 (UPDATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_usage=yes # Keyword USAGE - ###< create table crash_me10 (USAGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USAGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_user=no # Keyword USER - ###< create table crash_me10 (USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_using=yes # Keyword USING - ###< create table crash_me10 (USING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_value=no # Keyword VALUE - ###< create table crash_me10 (VALUE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_values=yes # Keyword VALUES - ###< create table crash_me10 (VALUES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_varchar=yes # Keyword VARCHAR - ###< create table crash_me10 (VARCHAR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_variable=no # Keyword VARIABLE - ###< create table crash_me10 (VARIABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_varying=yes # Keyword VARYING - ###< create table crash_me10 (VARYING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARYING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_view=no # Keyword VIEW - ###< create table crash_me10 (VIEW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_when=yes # Keyword WHEN - ###< create table crash_me10 (WHEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_whenever=no # Keyword WHENEVER - ###< create table crash_me10 (WHENEVER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_where=yes # Keyword WHERE - ###< create table crash_me10 (WHERE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_while=yes # Keyword WHILE - ###< create table crash_me10 (WHILE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_with=yes # Keyword WITH - ###< create table crash_me10 (WITH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WITH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_without=no # Keyword WITHOUT - ###< create table crash_me10 (WITHOUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_work=no # Keyword WORK - ###< create table crash_me10 (WORK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_write=yes # Keyword WRITE - ###< create table crash_me10 (WRITE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WRITE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_year=no # Keyword YEAR - ###< create table crash_me10 (YEAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_zone=no # Keyword ZONE - ###< create table crash_me10 (ZONE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_async=no # Keyword ASYNC - ###< create table crash_me10 (ASYNC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_avg=no # Keyword AVG - ###< create table crash_me10 (AVG int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_between=yes # Keyword BETWEEN - ###< create table crash_me10 (BETWEEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_bit_length=no # Keyword BIT_LENGTH - ###< create table crash_me10 (BIT_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_char_length=no # Keyword CHAR_LENGTH - ###< create table crash_me10 (CHAR_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_character_length=no # Keyword CHARACTER_LENGTH - ###< create table crash_me10 (CHARACTER_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_coalesce=no # Keyword COALESCE - ###< create table crash_me10 (COALESCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_convert=no # Keyword CONVERT - ###< create table crash_me10 (CONVERT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_count=no # Keyword COUNT - ###< create table crash_me10 (COUNT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_exists=yes # Keyword EXISTS - ###< create table crash_me10 (EXISTS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_extract=no # Keyword EXTRACT - ###< create table crash_me10 (EXTRACT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_insensitive=yes # Keyword INSENSITIVE - ###< create table crash_me10 (INSENSITIVE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSENSITIVE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_lower=no # Keyword LOWER - ###< create table crash_me10 (LOWER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_max=no # Keyword MAX - ###< create table crash_me10 (MAX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_min=no # Keyword MIN - ###< create table crash_me10 (MIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_nullif=no # Keyword NULLIF - ###< create table crash_me10 (NULLIF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_octet_length=no # Keyword OCTET_LENGTH - ###< create table crash_me10 (OCTET_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_oid=no # Keyword OID - ###< create table crash_me10 (OID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_operators=no # Keyword OPERATORS - ###< create table crash_me10 (OPERATORS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_others=no # Keyword OTHERS - ###< create table crash_me10 (OTHERS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_overlaps=no # Keyword OVERLAPS - ###< create table crash_me10 (OVERLAPS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_pendant=no # Keyword PENDANT - ###< create table crash_me10 (PENDANT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_position=no # Keyword POSITION - ###< create table crash_me10 (POSITION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_private=no # Keyword PRIVATE - ###< create table crash_me10 (PRIVATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_protected=no # Keyword PROTECTED - ###< create table crash_me10 (PROTECTED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_replace=yes # Keyword REPLACE - ###< create table crash_me10 (REPLACE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REPLACE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_sensitive=yes # Keyword SENSITIVE - ###< create table crash_me10 (SENSITIVE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SENSITIVE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_similar=no # Keyword SIMILAR - ###< create table crash_me10 (SIMILAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sqlcode=no # Keyword SQLCODE - ###< create table crash_me10 (SQLCODE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sqlerror=no # Keyword SQLERROR - ###< create table crash_me10 (SQLERROR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_substring=no # Keyword SUBSTRING - ###< create table crash_me10 (SUBSTRING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sum=no # Keyword SUM - ###< create table crash_me10 (SUM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_test=no # Keyword TEST - ###< create table crash_me10 (TEST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_there=no # Keyword THERE - ###< create table crash_me10 (THERE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_translate=no # Keyword TRANSLATE - ###< create table crash_me10 (TRANSLATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_trim=no # Keyword TRIM - ###< create table crash_me10 (TRIM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_type=no # Keyword TYPE - ###< create table crash_me10 (TYPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_upper=no # Keyword UPPER - ###< create table crash_me10 (UPPER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_virtual=no # Keyword VIRTUAL - ###< create table crash_me10 (VIRTUAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_visible=no # Keyword VISIBLE - ###< create table crash_me10 (VISIBLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_wait=no # Keyword WAIT - ###< create table crash_me10 (WAIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_admin=no # Keyword ADMIN - ###< create table crash_me10 (ADMIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_aggregate=no # Keyword AGGREGATE - ###< create table crash_me10 (AGGREGATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_array=no # Keyword ARRAY - ###< create table crash_me10 (ARRAY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_binary=yes # Keyword BINARY - ###< create table crash_me10 (BINARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BINARY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_blob=yes # Keyword BLOB - ###< create table crash_me10 (BLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_class=no # Keyword CLASS - ###< create table crash_me10 (CLASS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_clob=no # Keyword CLOB - ###< create table crash_me10 (CLOB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_condition=yes # Keyword CONDITION - ###< create table crash_me10 (CONDITION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONDITION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_constructor=no # Keyword CONSTRUCTOR - ###< create table crash_me10 (CONSTRUCTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_contains=no # Keyword CONTAINS - ###< create table crash_me10 (CONTAINS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_cube=no # Keyword CUBE - ###< create table crash_me10 (CUBE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_current_path=no # Keyword CURRENT_PATH - ###< create table crash_me10 (CURRENT_PATH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_current_role=no # Keyword CURRENT_ROLE - ###< create table crash_me10 (CURRENT_ROLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_datalink=no # Keyword DATALINK - ###< create table crash_me10 (DATALINK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_deref=no # Keyword DEREF - ###< create table crash_me10 (DEREF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_destroy=no # Keyword DESTROY - ###< create table crash_me10 (DESTROY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_destructor=no # Keyword DESTRUCTOR - ###< create table crash_me10 (DESTRUCTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_deterministic=yes # Keyword DETERMINISTIC - ###< create table crash_me10 (DETERMINISTIC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DETERMINISTIC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_do=no # Keyword DO - ###< create table crash_me10 (DO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_dynamic=no # Keyword DYNAMIC - ###< create table crash_me10 (DYNAMIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_every=no # Keyword EVERY - ###< create table crash_me10 (EVERY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_exit=yes # Keyword EXIT - ###< create table crash_me10 (EXIT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXIT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_expand=no # Keyword EXPAND - ###< create table crash_me10 (EXPAND int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_expanding=no # Keyword EXPANDING - ###< create table crash_me10 (EXPANDING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_free=no # Keyword FREE - ###< create table crash_me10 (FREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_function=no # Keyword FUNCTION - ###< create table crash_me10 (FUNCTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_grouping=no # Keyword GROUPING - ###< create table crash_me10 (GROUPING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_handler=no # Keyword HANDLER - ###< create table crash_me10 (HANDLER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_hast=no # Keyword HAST - ###< create table crash_me10 (HAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_host=no # Keyword HOST - ###< create table crash_me10 (HOST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_initialize=no # Keyword INITIALIZE - ###< create table crash_me10 (INITIALIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_inout=yes # Keyword INOUT - ###< create table crash_me10 (INOUT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INOUT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_iterate=yes # Keyword ITERATE - ###< create table crash_me10 (ITERATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ITERATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_large=no # Keyword LARGE - ###< create table crash_me10 (LARGE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_lateral=no # Keyword LATERAL - ###< create table crash_me10 (LATERAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_localtime=yes # Keyword LOCALTIME - ###< create table crash_me10 (LOCALTIME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCALTIME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_localtimestamp=yes # Keyword LOCALTIMESTAMP - ###< create table crash_me10 (LOCALTIMESTAMP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCALTIMESTAMP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_locator=no # Keyword LOCATOR - ###< create table crash_me10 (LOCATOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_meets=no # Keyword MEETS - ###< create table crash_me10 (MEETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_modifies=no # Keyword MODIFIES - ###< create table crash_me10 (MODIFIES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_nclob=no # Keyword NCLOB - ###< create table crash_me10 (NCLOB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_normalize=no # Keyword NORMALIZE - ###< create table crash_me10 (NORMALIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_ordinality=no # Keyword ORDINALITY - ###< create table crash_me10 (ORDINALITY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_out=yes # Keyword OUT - ###< create table crash_me10 (OUT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_parameter=no # Keyword PARAMETER - ###< create table crash_me10 (PARAMETER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_path=no # Keyword PATH - ###< create table crash_me10 (PATH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_period=no # Keyword PERIOD - ###< create table crash_me10 (PERIOD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_postfix=no # Keyword POSTFIX - ###< create table crash_me10 (POSTFIX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_precedes=no # Keyword PRECEDES - ###< create table crash_me10 (PRECEDES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_prefix=no # Keyword PREFIX - ###< create table crash_me10 (PREFIX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_reads=no # Keyword READS - ###< create table crash_me10 (READS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_redo=no # Keyword REDO - ###< create table crash_me10 (REDO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_repeat=yes # Keyword REPEAT - ###< create table crash_me10 (REPEAT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REPEAT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_result=no # Keyword RESULT - ###< create table crash_me10 (RESULT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_rollup=no # Keyword ROLLUP - ###< create table crash_me10 (ROLLUP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_sets=no # Keyword SETS - ###< create table crash_me10 (SETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_specific=yes # Keyword SPECIFIC - ###< create table crash_me10 (SPECIFIC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SPECIFIC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_specifictype=no # Keyword SPECIFICTYPE - ###< create table crash_me10 (SPECIFICTYPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_start=no # Keyword START - ###< create table crash_me10 (START int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_state=no # Keyword STATE - ###< create table crash_me10 (STATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_static=no # Keyword STATIC - ###< create table crash_me10 (STATIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_succeeds=no # Keyword SUCCEEDS - ###< create table crash_me10 (SUCCEEDS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_terminate=no # Keyword TERMINATE - ###< create table crash_me10 (TERMINATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_than=no # Keyword THAN - ###< create table crash_me10 (THAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_treat=no # Keyword TREAT - ###< create table crash_me10 (TREAT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_undo=yes # Keyword UNDO - ###< create table crash_me10 (UNDO int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNDO int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_until=no # Keyword UNTIL - ###< create table crash_me10 (UNTIL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_access=no # Keyword ACCESS - ###< create table crash_me10 (ACCESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_analyze=yes # Keyword ANALYZE - ###< create table crash_me10 (ANALYZE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ANALYZE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_audit=no # Keyword AUDIT - ###< create table crash_me10 (AUDIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_auto_increment=no # Keyword AUTO_INCREMENT - ###< create table crash_me10 (AUTO_INCREMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_backup=no # Keyword BACKUP - ###< create table crash_me10 (BACKUP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bdb=no # Keyword BDB - ###< create table crash_me10 (BDB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_berkeleydb=no # Keyword BERKELEYDB - ###< create table crash_me10 (BERKELEYDB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bigint=yes # Keyword BIGINT - ###< create table crash_me10 (BIGINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BIGINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_break=no # Keyword BREAK - ###< create table crash_me10 (BREAK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_browse=no # Keyword BROWSE - ###< create table crash_me10 (BROWSE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_btree=no # Keyword BTREE - ###< create table crash_me10 (BTREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bulk=no # Keyword BULK - ###< create table crash_me10 (BULK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_change=yes # Keyword CHANGE - ###< create table crash_me10 (CHANGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHANGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_checkpoint=no # Keyword CHECKPOINT - ###< create table crash_me10 (CHECKPOINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_cluster=no # Keyword CLUSTER - ###< create table crash_me10 (CLUSTER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_clustered=no # Keyword CLUSTERED - ###< create table crash_me10 (CLUSTERED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_columns=yes # Keyword COLUMNS - ###< create table crash_me10 (COLUMNS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMNS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_comment=no # Keyword COMMENT - ###< create table crash_me10 (COMMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_compress=no # Keyword COMPRESS - ###< create table crash_me10 (COMPRESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_compute=no # Keyword COMPUTE - ###< create table crash_me10 (COMPUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_containstable=no # Keyword CONTAINSTABLE - ###< create table crash_me10 (CONTAINSTABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_database=yes # Keyword DATABASE - ###< create table crash_me10 (DATABASE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATABASE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_databases=yes # Keyword DATABASES - ###< create table crash_me10 (DATABASES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATABASES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_hour=yes # Keyword DAY_HOUR - ###< create table crash_me10 (DAY_HOUR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_HOUR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_minute=yes # Keyword DAY_MINUTE - ###< create table crash_me10 (DAY_MINUTE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_MINUTE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_second=yes # Keyword DAY_SECOND - ###< create table crash_me10 (DAY_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_dbcc=no # Keyword DBCC - ###< create table crash_me10 (DBCC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_delayed=yes # Keyword DELAYED - ###< create table crash_me10 (DELAYED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELAYED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_deny=no # Keyword DENY - ###< create table crash_me10 (DENY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_disk=no # Keyword DISK - ###< create table crash_me10 (DISK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_distinctrow=yes # Keyword DISTINCTROW - ###< create table crash_me10 (DISTINCTROW int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCTROW int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_distributed=no # Keyword DISTRIBUTED - ###< create table crash_me10 (DISTRIBUTED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_dummy=no # Keyword DUMMY - ###< create table crash_me10 (DUMMY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_dump=no # Keyword DUMP - ###< create table crash_me10 (DUMP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_enclosed=yes # Keyword ENCLOSED - ###< create table crash_me10 (ENCLOSED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ENCLOSED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_errlvl=no # Keyword ERRLVL - ###< create table crash_me10 (ERRLVL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_errors=no # Keyword ERRORS - ###< create table crash_me10 (ERRORS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_escaped=yes # Keyword ESCAPED - ###< create table crash_me10 (ESCAPED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ESCAPED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_exclusive=no # Keyword EXCLUSIVE - ###< create table crash_me10 (EXCLUSIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_explain=yes # Keyword EXPLAIN - ###< create table crash_me10 (EXPLAIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXPLAIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_fields=yes # Keyword FIELDS - ###< create table crash_me10 (FIELDS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_file=no # Keyword FILE - ###< create table crash_me10 (FILE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_fillfactor=no # Keyword FILLFACTOR - ###< create table crash_me10 (FILLFACTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_freetext=no # Keyword FREETEXT - ###< create table crash_me10 (FREETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_freetexttable=no # Keyword FREETEXTTABLE - ###< create table crash_me10 (FREETEXTTABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_fulltext=yes # Keyword FULLTEXT - ###< create table crash_me10 (FULLTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_geometry=no # Keyword GEOMETRY - ###< create table crash_me10 (GEOMETRY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_hash=no # Keyword HASH - ###< create table crash_me10 (HASH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_high_priority=yes # Keyword HIGH_PRIORITY - ###< create table crash_me10 (HIGH_PRIORITY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HIGH_PRIORITY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_holdlock=no # Keyword HOLDLOCK - ###< create table crash_me10 (HOLDLOCK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_hour_minute=yes # Keyword HOUR_MINUTE - ###< create table crash_me10 (HOUR_MINUTE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HOUR_MINUTE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_hour_second=yes # Keyword HOUR_SECOND - ###< create table crash_me10 (HOUR_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HOUR_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_identified=no # Keyword IDENTIFIED - ###< create table crash_me10 (IDENTIFIED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_identity_insert=no # Keyword IDENTITY_INSERT - ###< create table crash_me10 (IDENTITY_INSERT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_identitycol=no # Keyword IDENTITYCOL - ###< create table crash_me10 (IDENTITYCOL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_increment=no # Keyword INCREMENT - ###< create table crash_me10 (INCREMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_index=yes # Keyword INDEX - ###< create table crash_me10 (INDEX int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_infile=yes # Keyword INFILE - ###< create table crash_me10 (INFILE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INFILE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_initial=no # Keyword INITIAL - ###< create table crash_me10 (INITIAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_innodb=no # Keyword INNODB - ###< create table crash_me10 (INNODB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_keys=yes # Keyword KEYS - ###< create table crash_me10 (KEYS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'KEYS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_kill=yes # Keyword KILL - ###< create table crash_me10 (KILL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'KILL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_lineno=no # Keyword LINENO - ###< create table crash_me10 (LINENO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_lines=yes # Keyword LINES - ###< create table crash_me10 (LINES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LINES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_load=yes # Keyword LOAD - ###< create table crash_me10 (LOAD int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOAD int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_lock=yes # Keyword LOCK - ###< create table crash_me10 (LOCK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCK int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_long=yes # Keyword LONG - ###< create table crash_me10 (LONG int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONG int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_longblob=yes # Keyword LONGBLOB - ###< create table crash_me10 (LONGBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONGBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_longtext=yes # Keyword LONGTEXT - ###< create table crash_me10 (LONGTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONGTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_low_priority=yes # Keyword LOW_PRIORITY - ###< create table crash_me10 (LOW_PRIORITY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOW_PRIORITY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_master_server_id=yes # Keyword MASTER_SERVER_ID - ###< create table crash_me10 (MASTER_SERVER_ID int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MASTER_SERVER_ID int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_maxextents=no # Keyword MAXEXTENTS - ###< create table crash_me10 (MAXEXTENTS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mediumblob=yes # Keyword MEDIUMBLOB - ###< create table crash_me10 (MEDIUMBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mediumint=yes # Keyword MEDIUMINT - ###< create table crash_me10 (MEDIUMINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mediumtext=yes # Keyword MEDIUMTEXT - ###< create table crash_me10 (MEDIUMTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_middleint=yes # Keyword MIDDLEINT - ###< create table crash_me10 (MIDDLEINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MIDDLEINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_minus=no # Keyword MINUS - ###< create table crash_me10 (MINUS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_minute_second=yes # Keyword MINUTE_SECOND - ###< create table crash_me10 (MINUTE_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUTE_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mlslabel=no # Keyword MLSLABEL - ###< create table crash_me10 (MLSLABEL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mode=no # Keyword MODE - ###< create table crash_me10 (MODE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mrg_myisam=no # Keyword MRG_MYISAM - ###< create table crash_me10 (MRG_MYISAM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_noaudit=no # Keyword NOAUDIT - ###< create table crash_me10 (NOAUDIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nocheck=no # Keyword NOCHECK - ###< create table crash_me10 (NOCHECK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nocompress=no # Keyword NOCOMPRESS - ###< create table crash_me10 (NOCOMPRESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nonclustered=no # Keyword NONCLUSTERED - ###< create table crash_me10 (NONCLUSTERED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nowait=no # Keyword NOWAIT - ###< create table crash_me10 (NOWAIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_number=no # Keyword NUMBER - ###< create table crash_me10 (NUMBER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_offline=no # Keyword OFFLINE - ###< create table crash_me10 (OFFLINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_offsets=no # Keyword OFFSETS - ###< create table crash_me10 (OFFSETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_online=no # Keyword ONLINE - ###< create table crash_me10 (ONLINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_opendatasource=no # Keyword OPENDATASOURCE - ###< create table crash_me10 (OPENDATASOURCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openquery=no # Keyword OPENQUERY - ###< create table crash_me10 (OPENQUERY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openrowset=no # Keyword OPENROWSET - ###< create table crash_me10 (OPENROWSET int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openxml=no # Keyword OPENXML - ###< create table crash_me10 (OPENXML int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_optimize=yes # Keyword OPTIMIZE - ###< create table crash_me10 (OPTIMIZE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTIMIZE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_optionally=yes # Keyword OPTIONALLY - ###< create table crash_me10 (OPTIONALLY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTIONALLY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_outfile=yes # Keyword OUTFILE - ###< create table crash_me10 (OUTFILE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTFILE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_over=no # Keyword OVER - ###< create table crash_me10 (OVER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_pctfree=no # Keyword PCTFREE - ###< create table crash_me10 (PCTFREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_percent=no # Keyword PERCENT - ###< create table crash_me10 (PERCENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_plan=no # Keyword PLAN - ###< create table crash_me10 (PLAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_print=no # Keyword PRINT - ###< create table crash_me10 (PRINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_proc=no # Keyword PROC - ###< create table crash_me10 (PROC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_purge=yes # Keyword PURGE - ###< create table crash_me10 (PURGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PURGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_raiserror=no # Keyword RAISERROR - ###< create table crash_me10 (RAISERROR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_raw=no # Keyword RAW - ###< create table crash_me10 (RAW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_readtext=no # Keyword READTEXT - ###< create table crash_me10 (READTEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_reconfigure=no # Keyword RECONFIGURE - ###< create table crash_me10 (RECONFIGURE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_regexp=yes # Keyword REGEXP - ###< create table crash_me10 (REGEXP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REGEXP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_rename=yes # Keyword RENAME - ###< create table crash_me10 (RENAME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RENAME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_replication=no # Keyword REPLICATION - ###< create table crash_me10 (REPLICATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_require=yes # Keyword REQUIRE - ###< create table crash_me10 (REQUIRE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REQUIRE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_resource=no # Keyword RESOURCE - ###< create table crash_me10 (RESOURCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_restore=no # Keyword RESTORE - ###< create table crash_me10 (RESTORE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rlike=yes # Keyword RLIKE - ###< create table crash_me10 (RLIKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RLIKE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_rowcount=no # Keyword ROWCOUNT - ###< create table crash_me10 (ROWCOUNT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rowguidcol=no # Keyword ROWGUIDCOL - ###< create table crash_me10 (ROWGUIDCOL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rowid=no # Keyword ROWID - ###< create table crash_me10 (ROWID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rownum=no # Keyword ROWNUM - ###< create table crash_me10 (ROWNUM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rtree=no # Keyword RTREE - ###< create table crash_me10 (RTREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rule=no # Keyword RULE - ###< create table crash_me10 (RULE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_save=no # Keyword SAVE - ###< create table crash_me10 (SAVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_setuser=no # Keyword SETUSER - ###< create table crash_me10 (SETUSER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_share=no # Keyword SHARE - ###< create table crash_me10 (SHARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_show=yes # Keyword SHOW - ###< create table crash_me10 (SHOW int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SHOW int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_shutdown=no # Keyword SHUTDOWN - ###< create table crash_me10 (SHUTDOWN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_soname=yes # Keyword SONAME - ###< create table crash_me10 (SONAME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SONAME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_spatial=yes # Keyword SPATIAL - ###< create table crash_me10 (SPATIAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_big_result=yes # Keyword SQL_BIG_RESULT - ###< create table crash_me10 (SQL_BIG_RESULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_BIG_RESULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_calc_found_rows=yes # Keyword SQL_CALC_FOUND_ROWS - ###< create table crash_me10 (SQL_CALC_FOUND_ROWS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_CALC_FOUND_ROWS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_small_result=yes # Keyword SQL_SMALL_RESULT - ###< create table crash_me10 (SQL_SMALL_RESULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_SMALL_RESULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_ssl=yes # Keyword SSL - ###< create table crash_me10 (SSL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SSL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_starting=yes # Keyword STARTING - ###< create table crash_me10 (STARTING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'STARTING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_statistics=no # Keyword STATISTICS - ###< create table crash_me10 (STATISTICS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_straight_join=yes # Keyword STRAIGHT_JOIN - ###< create table crash_me10 (STRAIGHT_JOIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'STRAIGHT_JOIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_striped=no # Keyword STRIPED - ###< create table crash_me10 (STRIPED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_successful=no # Keyword SUCCESSFUL - ###< create table crash_me10 (SUCCESSFUL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_synonym=no # Keyword SYNONYM - ###< create table crash_me10 (SYNONYM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_sysdate=no # Keyword SYSDATE - ###< create table crash_me10 (SYSDATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tables=yes # Keyword TABLES - ###< create table crash_me10 (TABLES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_terminated=yes # Keyword TERMINATED - ###< create table crash_me10 (TERMINATED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TERMINATED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_textsize=no # Keyword TEXTSIZE - ###< create table crash_me10 (TEXTSIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tinyblob=yes # Keyword TINYBLOB - ###< create table crash_me10 (TINYBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_tinyint=yes # Keyword TINYINT - ###< create table crash_me10 (TINYINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_tinytext=yes # Keyword TINYTEXT - ###< create table crash_me10 (TINYTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_top=no # Keyword TOP - ###< create table crash_me10 (TOP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tran=no # Keyword TRAN - ###< create table crash_me10 (TRAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_truncate=no # Keyword TRUNCATE - ###< create table crash_me10 (TRUNCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tsequal=no # Keyword TSEQUAL - ###< create table crash_me10 (TSEQUAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_types=no # Keyword TYPES - ###< create table crash_me10 (TYPES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_uid=no # Keyword UID - ###< create table crash_me10 (UID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_unlock=yes # Keyword UNLOCK - ###< create table crash_me10 (UNLOCK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNLOCK int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_unsigned=yes # Keyword UNSIGNED - ###< create table crash_me10 (UNSIGNED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_updatetext=no # Keyword UPDATETEXT - ###< create table crash_me10 (UPDATETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_use=yes # Keyword USE - ###< create table crash_me10 (USE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_user_resources=no # Keyword USER_RESOURCES - ###< create table crash_me10 (USER_RESOURCES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_validate=no # Keyword VALIDATE - ###< create table crash_me10 (VALIDATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_varbinary=yes # Keyword VARBINARY - ###< create table crash_me10 (VARBINARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARBINARY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_varchar2=no # Keyword VARCHAR2 - ###< create table crash_me10 (VARCHAR2 int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_waitfor=no # Keyword WAITFOR - ###< create table crash_me10 (WAITFOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_warnings=no # Keyword WARNINGS - ###< create table crash_me10 (WARNINGS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_writetext=no # Keyword WRITETEXT - ###< create table crash_me10 (WRITETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_xor=yes # Keyword XOR - ###< create table crash_me10 (XOR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'XOR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_year_month=yes # Keyword YEAR_MONTH - ###< create table crash_me10 (YEAR_MONTH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'YEAR_MONTH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_zerofill=yes # Keyword ZEROFILL - ###< create table crash_me10 (ZEROFILL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ZEROFILL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -right_outer_join=yes # right outer join - ###< select crash_me.a from crash_me right join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -rollback_metadata=no # rollback_metadata - ###< create table crash_q (a integer not null) - ###> OK - ### - ###< insert into crash_q values (1) - ###> OK -rowid=auto_increment # Type for row id - ###< create table crash_q (a rowid) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'rowid)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###< create table crash_q (a int not null auto_increment, primary key(a)) - ###> OK - ###< drop table crash_q - ###> OK -safe_decimal_arithmetic=no # safe decimal arithmetic - ###< create table crash_me_a (a decimal(10,2),b decimal(10,2)) - ###> OK - ### - ###< insert into crash_me_a (a,b) values (11.4,18.9) - ###> OK - ### - ###<select count(*) from crash_me_a where a+b=30.3 - ###>0 - ###We expected '1' but got '0' -select_constants=yes # Select constants - ###< select 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_limit=with LIMIT # LIMIT number of rows - ###< select * from crash_me limit 1 - ###> OK -select_limit2=yes # SELECT with LIMIT #,# - ###< select * from crash_me limit 1,1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_limit3=yes # SELECT with LIMIT # OFFSET # - ###< select * from crash_me limit 1 offset 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_string_size=1048565 # constant string size in SELECT - ###We are trying (example with N=5): - ###select 'aaaaa' -select_table_update=yes # Update with sub select - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< update crash_q set b= (select b from crash_me where crash_q.a = crash_me.a) - ###> OK - ### - ###<select b from crash_q - ###>a - ### - ###< drop table crash_q - ###> OK -select_without_from=yes # SELECT without FROM - ###< select 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -server_version=MySQL 5.0.0 alpha debug log/ # server version -simple_joins=yes # ANSI SQL simple joins - ###< select crash_me.a from crash_me, crash_me t0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -sorted_group_by=yes # Group by always sorted - ###< create table crash_me_t1 (a int not null, b int not null) - ###> OK - ###< insert into crash_me_t1 values (1,1) - ###> OK - ###< insert into crash_me_t1 values (1,2) - ###> OK - ###< insert into crash_me_t1 values (3,1) - ###> OK - ###< insert into crash_me_t1 values (3,2) - ###> OK - ###< insert into crash_me_t1 values (2,2) - ###> OK - ###< insert into crash_me_t1 values (2,1) - ###> OK - ###< create table crash_me_t2 (a int not null, b int not null) - ###> OK - ###< create index crash_me_t2_ind on crash_me_t2 (a) - ###> OK - ###< insert into crash_me_t2 values (1,3) - ###> OK - ###< insert into crash_me_t2 values (3,1) - ###> OK - ###< insert into crash_me_t2 values (2,2) - ###> OK - ###< insert into crash_me_t2 values (1,1) - ###> OK - ### - ###< select crash_me_t1.a,crash_me_t2.b from crash_me_t1,crash_me_t2 where crash_me_t1.a=crash_me_t2.a group by crash_me_t1.a,crash_me_t2.b - ### > 1,1 - ### > 1,3 - ### > 2,2 - ### > 3,1 - ### - ### Check recordset: - ### 1,1 expected: 1,1 - ### 1,3 expected: 1,3 - ### 2,2 expected: 2,2 - ### 3,1 expected: 3,1 - ### Recordset corresponds with template - ###< drop table crash_me_t1 - ###> OK - ###< drop table crash_me_t2 - ###> OK -storage_of_float=round # Storage of float values - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.14) - ###> OK - ### - ###<select q1 from crash_q - ###>1.1 - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.16) - ###> OK - ### - ###<select q1 from crash_q - ###>1.2 - ###We expected '1.1' but got '1.2' - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.14) - ###> OK - ### - ###<select q1 from crash_q - ###>1.1 - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.16) - ###> OK - ### - ###<select q1 from crash_q - ###>1.2 - ### - ###< drop table crash_q - ###> OK -subqueries=yes # subqueries - ###< select a from crash_me where crash_me.a in (select max(a) from crash_me) - ###> OK - ### - ###As far as all queries returned OK, result is YES -table_alias=yes # Table alias - ###< select b.a from crash_me as b - ###> OK - ### - ###As far as all queries returned OK, result is YES -table_name_case=no # case independent table names - ###< create table crash_q (q integer) - ###> OK - ###< drop table CRASH_Q - ###> execute error:Unknown table 'CRASH_Q' - ### - ###As far as some queries didnt return OK, result is NO -table_wildcard=yes # Select table_name.* - ###< select crash_me.* from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -temporary_table=yes # temporary tables - ###< create temporary table crash_q (q integer not null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -time_format_EUR=error # Supports HH.MM.SS (EUR) time format - ###< insert into crash_me_t(a) values ('20.08.16') - ###> OK - ### - ###<select a from crash_me_t - ###>00:00:20 - ###We expected '20:08:16' but got '00:00:20' - ### - ###< delete from crash_me_t - ###> OK -time_format_HHHHMMSS=yes # Supports HHHHmmSS time format - ###< insert into crash_me_t(a) values ('00200816') - ###> OK - ### - ###<select a from crash_me_t - ###>20:08:16 - ### - ###< delete from crash_me_t - ###> OK -time_format_ISO=yes # Supports HH:MM:SS (ISO) time format - ###< insert into crash_me_t(a) values ('20:08:16') - ###> OK - ### - ###<select a from crash_me_t - ###>20:08:16 - ### - ###< delete from crash_me_t - ###> OK -time_format_USA=error # Supports HH:MM:SS (AM|PM) time format - ###< insert into crash_me_t(a) values ('08:08:16 PM') - ###> OK - ### - ###<select a from crash_me_t - ###>08:08:16 - ###We expected '20:08:16' but got '08:08:16' - ### - ###< delete from crash_me_t - ###> OK -time_format_inresult=iso # Time format in result - ###< insert into crash_me_t values(CURRENT_TIME) - ###> OK - ### - ###< select a from crash_me_t - ###> 09:46:11 - ###< delete from crash_me_t - ###> OK -transactions=yes # transactions - ###<select * from crash_q - ###>1 - ###We expected '' but got '1' -truncate_table=yes # truncate - ###< create table crash_q (a integer, b integer,c1 CHAR(10)) - ###> OK - ###< truncate table crash_q - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_abstime=no # Type abstime - ###< create table crash_q (q abstime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'abstime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_bfile=no # Type bfile - ###< create table crash_q (q bfile) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'bfile)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_blob=yes # Type blob - ###< create table crash_q (q blob) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_bool=yes # Type bool - ###< create table crash_q (q bool) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_box=no # Type box - ###< create table crash_q (q box) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'box)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_byte=no # Type byte - ###< create table crash_q (q byte) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'byte)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_char(1_arg)_binary=yes # Type char(1 arg) binary - ###< create table crash_q (q char(10) binary) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_cidr=no # Type cidr - ###< create table crash_q (q cidr) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'cidr)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_circle=no # Type circle - ###< create table crash_q (q circle) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'circle)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_clob=no # Type clob - ###< create table crash_q (q clob) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'clob)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_datetime=yes # Type datetime - ###< create table crash_q (q datetime) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_double=yes # Type double - ###< create table crash_q (q double) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_enum(1_arg)=yes # Type enum(1 arg) - ###< create table crash_q (q enum('red')) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float(2_arg)=yes # Type float(2 arg) - ###< create table crash_q (q float(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float4=yes # Type float4 - ###< create table crash_q (q float4) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float8=yes # Type float8 - ###< create table crash_q (q float8) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_image=no # Type image - ###< create table crash_q (q image) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'image)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_inet=no # Type inet - ###< create table crash_q (q inet) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'inet)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_int(1_arg)_zerofill=yes # Type int(1 arg) zerofill - ###< create table crash_q (q int(5) zerofill) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int1=yes # Type int1 - ###< create table crash_q (q int1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int2=yes # Type int2 - ###< create table crash_q (q int2) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int3=yes # Type int3 - ###< create table crash_q (q int3) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int4=yes # Type int4 - ###< create table crash_q (q int4) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int8=yes # Type int8 - ###< create table crash_q (q int8) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int_auto_increment=yes # Type int not null auto_increment - ###< create table crash_q (q int not null auto_increment,unique(q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int_identity=no # Type int not null identity - ###< create table crash_q (q int not null identity,unique(q)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'identity,unique(q))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_int_unsigned=yes # Type int unsigned - ###< create table crash_q (q int unsigned) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_interval=no # Type interval - ###< create table crash_q (q interval) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_line=no # Type line - ###< create table crash_q (q line) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'line)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_long=yes # Type long - ###< create table crash_q (q long) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_long_raw=no # Type long raw - ###< create table crash_q (q long raw) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'raw)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_long_varbinary=yes # Type long varbinary - ###< create table crash_q (q long varbinary) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) - ###< create table crash_q (q long varchar(1)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_lseg=no # Type lseg - ###< create table crash_q (q lseg) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'lseg)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_macaddr=no # Type macaddr - ###< create table crash_q (q macaddr) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'macaddr)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_mediumint=yes # Type mediumint - ###< create table crash_q (q mediumint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_mediumtext=yes # Type mediumtext - ###< create table crash_q (q mediumtext) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_middleint=yes # Type middleint - ###< create table crash_q (q middleint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_mlslabel=no # Type mlslabel - ###< create table crash_q (q mlslabel) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'mlslabel)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_money=no # Type money - ###< create table crash_q (q money) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'money)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_nclob=no # Type nclob - ###< create table crash_q (q nclob) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'nclob)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number=no # Type number - ###< create table crash_q (q number) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number(1_arg)=no # Type number(1 arg) - ###< create table crash_q (q number(9)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number(9))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number(2_arg)=no # Type number(2 arg) - ###< create table crash_q (q number(9,2)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number(9,2))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) - ###< create table crash_q (q nvarchar2(16)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'nvarchar2(16))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_path=no # Type path - ###< create table crash_q (q path) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'path)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_point=yes # Type point - ###< create table crash_q (q point) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_polygon=yes # Type polygon - ###< create table crash_q (q polygon) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_raw(1_arg)=no # Type raw(1 arg) - ###< create table crash_q (q raw(16)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'raw(16))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_reltime=no # Type reltime - ###< create table crash_q (q reltime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'reltime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_rowid=no # Type rowid - ###< create table crash_q (q rowid) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'rowid)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_serial=yes # Type serial - ###< create table crash_q (q serial) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_set(1_arg)=yes # Type set(1 arg) - ###< create table crash_q (q set('red')) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_smalldatetime=no # Type smalldatetime - ###< create table crash_q (q smalldatetime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smalldatetime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_smallfloat=no # Type smallfloat - ###< create table crash_q (q smallfloat) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smallfloat)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_smallmoney=no # Type smallmoney - ###< create table crash_q (q smallmoney) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smallmoney)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_text=yes # Type text - ###< create table crash_q (q text) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_text(1_arg)=yes # Type text(1 arg) - ###< create table crash_q (q text(10)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_timespan=no # Type timespan - ###< create table crash_q (q timespan) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'timespan)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_uint=no # Type uint - ###< create table crash_q (q uint) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'uint)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) - ###< create table crash_q (q varchar2(257)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar2(257))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_year=yes # Type year - ###< create table crash_q (q year) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_bigint=yes # Type bigint - ###< create table crash_q (q bigint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_binary(1_arg)=yes # Type binary(1 arg) - ###< create table crash_q (q binary(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_datetime=yes # Type datetime - ###< create table crash_q (q datetime) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_tinyint=yes # Type tinyint - ###< create table crash_q (q tinyint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) - ###< create table crash_q (q varbinary(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit=yes # Type bit - ###< create table crash_q (q bit) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit(1_arg)=yes # Type bit(1 arg) - ###< create table crash_q (q bit(2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) - ###< create table crash_q (q bit varying(2)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'varying(2))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_boolean=yes # Type boolean - ###< create table crash_q (q boolean) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_char(1_arg)=yes # Type char(1 arg) - ###< create table crash_q (q char(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) - ###< create table crash_q (q char varying(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_character(1_arg)=yes # Type character(1 arg) - ###< create table crash_q (q character(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) - ###< create table crash_q (q character varying(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_date=yes # Type date - ###< create table crash_q (q date) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_dec(2_arg)=yes # Type dec(2 arg) - ###< create table crash_q (q dec(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) - ###< create table crash_q (q decimal(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_double_precision=yes # Type double precision - ###< create table crash_q (q double precision) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_float=yes # Type float - ###< create table crash_q (q float) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_float(1_arg)=yes # Type float(1 arg) - ###< create table crash_q (q float(8)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_int=yes # Type int - ###< create table crash_q (q int) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_integer=yes # Type integer - ###< create table crash_q (q integer) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_interval_day=no # Type interval day - ###< create table crash_q (q interval day) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_hour=no # Type interval day to hour - ###< create table crash_q (q interval day to hour) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to hour)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_minute=no # Type interval day to minute - ###< create table crash_q (q interval day to minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_second=no # Type interval day to second - ###< create table crash_q (q interval day to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour=no # Type interval hour - ###< create table crash_q (q interval hour) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour_to_minute=no # Type interval hour to minute - ###< create table crash_q (q interval hour to minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour to minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour_to_second=no # Type interval hour to second - ###< create table crash_q (q interval hour to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_minute=no # Type interval minute - ###< create table crash_q (q interval minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_minute_to_second=no # Type interval minute to second - ###< create table crash_q (q interval minute to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval minute to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_month=no # Type interval month - ###< create table crash_q (q interval month) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval month)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_second=no # Type interval second - ###< create table crash_q (q interval second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_year=no # Type interval year - ###< create table crash_q (q interval year) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval year)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_year_to_month=no # Type interval year to month - ###< create table crash_q (q interval year to month) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval year to month)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) - ###< create table crash_q (q national char varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_national_character(1_arg)=yes # Type national character(1 arg) - ###< create table crash_q (q national character(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) - ###< create table crash_q (q national character varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) - ###< create table crash_q (q nchar(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) - ###< create table crash_q (q nchar varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) - ###< create table crash_q (q numeric(9,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_real=yes # Type real - ###< create table crash_q (q real) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_smallint=yes # Type smallint - ###< create table crash_q (q smallint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_time=yes # Type time - ###< create table crash_q (q time) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_timestamp=yes # Type timestamp - ###< create table crash_q (q timestamp) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone - ###< create table crash_q (q timestamp with time zone) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'with time zone)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) - ###< create table crash_q (q varchar(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -union=yes # union - ###< select * from crash_me union select a,b from crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_all=yes # union all - ###< select * from crash_me union all select a,b from crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_all_incompat=yes # union all (incompatible lists) - ###< select * from crash_me union all select a,b from crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_incompat=yes # union (incompatible lists) - ###< select * from crash_me union select a,b from crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -unique_in_create=yes # unique in create table - ###< create table crash_q (q integer not null,unique (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -unique_null_in_create=yes # unique null in create - ###< create table crash_q (q integer,unique (q)) - ###> OK - ###< insert into crash_q (q) values (NULL) - ###> OK - ###< insert into crash_q (q) values (NULL) - ###> OK - ###< insert into crash_q (q) values (1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -value_of_false=0 # Value of FALSE - ###<select FALSE - ###>0 -value_of_true=1 # Value of TRUE - ###<select TRUE - ###>1 -views=no # views - ###< create view crash_q as select a from crash_me - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'view crash_q as select a from crash_me' at line 1 - ###< drop view crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'view crash_q' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -where_string_size=1048539 # constant string size in where - ###We are trying (example with N=5): - ###select a from crash_me where b >='11111' diff --git a/sql-bench/limits/mysql-4.1.cfg b/sql-bench/limits/mysql-4.1.cfg deleted file mode 100644 index 64f91f0736306e5a9cc4d2f7b744c8c82e13f777..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mysql-4.1.cfg +++ /dev/null @@ -1,7056 +0,0 @@ -#This file is automaticly generated by crash-me 1.61 - -NEG=yes # update of column= -column - ###< create table crash_q (a integer) - ###> OK - ###< insert into crash_q values(10) - ###> OK - ###< update crash_q set a=-a - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -Need_cast_for_null=no # Need to cast NULL for arithmetic - ### Check if numeric_null (NULL) is 'NULL' -alter_add_col=yes # Alter table add column - ###< alter table crash_q add d integer - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_add_constraint=yes # Alter table add constraint - ###< alter table crash_q add constraint c2 check(a > b) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_add_foreign_key=no # Alter table add foreign key - ###< alter table crash_q add constraint f1 foreign key(c1) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - ###< references crash_q1(c1) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'references crash_q1(c1)' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -alter_add_multi_col=yes # Alter table add many columns - ###< alter table crash_q add (f integer,g integer) - ###> OK -alter_add_primary_key=with constraint # Alter table add primary key - ###< alter table crash_q1 add constraint p1 primary key(c1) - ###> OK -alter_add_unique=yes # Alter table add unique - ###< alter table crash_q add constraint u1 unique(c1) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_alter_col=yes # Alter table alter column default - ###< alter table crash_q alter b set default 10 - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_change_col=yes # Alter table change column - ###< alter table crash_q change a e char(50) - ###> OK - ### - ###As far as all queries returned OK, result is YES -alter_drop_col=yes # Alter table drop column - ###< alter table crash_q drop column b - ###> OK -alter_drop_constraint=no # Alter table drop constraint - ###< alter table crash_q drop constraint c2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint c2' at line 1 - ### - ###< alter table crash_q drop constraint c2 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint c2 restrict' at line 1 -alter_drop_foreign_key=with drop foreign key # Alter table drop foreign key - ###< alter table crash_q drop constraint f1 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint f1' at line 1 - ### - ###< alter table crash_q drop constraint f1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint f1 restrict' at line 1 - ### - ###< alter table crash_q drop foreign key f1 - ###> OK -alter_drop_primary_key=drop primary key # Alter table drop primary key - ###< alter table crash_q1 drop constraint p1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint p1 restrict' at line 1 - ### - ###< alter table crash_q1 drop primary key - ###> OK -alter_drop_unique=with drop key # Alter table drop unique - ###< alter table crash_q drop constraint u1 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint u1' at line 1 - ### - ###< alter table crash_q drop constraint u1 restrict - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint u1 restrict' at line 1 - ### - ###< alter table crash_q drop key u1 - ###> OK -alter_modify_col=yes # Alter table modify column - ###< alter table crash_q modify c1 CHAR(20) - ###> OK -alter_rename_table=yes # Alter table rename table - ###< alter table crash_q rename to crash_q1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -atomic_updates=no # atomic updates - ###< create table crash_q (a integer not null,primary key (a)) - ###> OK - ###< insert into crash_q values (2) - ###> OK - ###< insert into crash_q values (3) - ###> OK - ###< insert into crash_q values (1) - ###> OK - ###< update crash_q set a=a+1 - ###> execute error:Duplicate entry '3' for key 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -automatic_rowid=_rowid # Automatic row id - ###< create table crash_q (a int not null, primary key(a)) - ###> OK - ###< insert into crash_q values (1) - ###> OK - ###< select _rowid from crash_q - ###> OK - ###< drop table crash_q - ###> OK -binary_numbers=no # binary numbers (0b1001) - ###< select 0b1001 - ###> execute error:Unknown column '0b1001' in 'field list' - ### - ###As far as some queries didnt return OK, result is NO -binary_strings=no # binary strings (b'0110') - ###< select b'0110' - ###> execute error:Unknown column 'b' in 'field list' - ### - ###As far as some queries didnt return OK, result is NO -case_insensitive_strings=yes # Case insensitive compare - ### - ###<select b from crash_me where b = 'A' - ###>a -char_is_space_filled=no # char are space filled - ### - ###<select concat(b,b) from crash_me where b = 'a ' - ###>aa - ###We expected 'a a ' but got 'aa' -column_alias=yes # Column alias - ###< select a as ab from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -columns_in_group_by=+64 # number of columns in group by - ###We are trying (example with N=5): - ###create table crash_q (q1 integer,q2 integer,q3 integer,q4 integer,q5 integer) - ###insert into crash_q values(1,1,1,1,1) - ###insert into crash_q values(1,1,1,1,1) - ###select q1,q2,q3,q4,q5 from crash_q group by q1,q2,q3,q4,q5 -columns_in_order_by=+64 # number of columns in order by - ###We are trying (example with N=5): - ###create table crash_q (q1 integer,q2 integer,q3 integer,q4 integer,q5 integer) - ###insert into crash_q values(1,1,1,1,1) - ###insert into crash_q values(1,1,1,1,1) - ###select * from crash_q order by q1,q2,q3,q4,q5 -comment_#=yes # # as comment - ###< select * from crash_me # Testing of comments - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_--=yes # -- as comment (ANSI) - ###< select * from crash_me -- Testing of comments - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_/**/=yes # /* */ as comment - ###< select * from crash_me /* Testing of comments */ - ###> OK - ### - ###As far as all queries returned OK, result is YES -comment_//=no # // as comment - ###< select * from crash_me // Testing of comments - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '// Testing of comments' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -compute=no # Compute - ###< select a from crash_me order by a compute sum(a) by a - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'compute sum(a) by a' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -connections=101 # Simultaneous connections (installation default) -constraint_check=syntax only # Column constraints - ###< create table crash_q (a int check (a>0)) - ###> OK - ### - ###< insert into crash_q values(0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_check_named=syntax only # Named constraints - ###< create table crash_q (a int ,b int, constraint abc check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_check_table=syntax only # Table constraints - ###< create table crash_q (a int ,b int, check (a>b)) - ###> OK - ### - ###< insert into crash_q values(0,0) - ###> OK - ### - ###< drop table crash_q - ###> OK -constraint_null=yes # NULL constraint (SyBase style) - ###< create table crash_q (a int null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -crash_me_safe=yes # crash me safe -crash_me_version=1.61 # crash me version -create_default=yes # default value for column - ###< create table crash_q (q integer default 10 not null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -create_default_func=no # default value function for column - ###< create table crash_q (q integer not null,q1 integer default (1+1)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1+1))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -create_if_not_exists=yes # create table if not exists - ###< create table crash_q (q integer) - ###> OK - ###< create table if not exists crash_q (q integer) - ###> OK - ### - ###As far as all queries returned OK, result is YES -create_index=yes # create index - ###< create index crash_q on crash_me (a) - ###> OK -create_schema=no # Create SCHEMA - ###< create schema crash_schema create table crash_q (a int) create table crash_q2(b int) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'schema crash_schema create table crash_q (a int) create table c - ###< drop schema crash_schema cascade - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'schema crash_schema cascade' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -create_table_select=yes # create table from select - ###< create table crash_q SELECT * from crash_me - ###> OK -cross_join=yes # cross join (same as from a,b) - ###< select crash_me.a from crash_me cross join crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -date_as_string=yes # String functions on date columns - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('1998-03-03') - ###> OK - ### - ###<select left(a,4) from crash_me2 - ###>1998 - ### - ###< drop table crash_me2 - ###> OK -date_format_EUR=error # Supports DD.MM.YYYY (EUR) format - ###< insert into crash_me_d(a) values ('16.08.1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_EUR_with_date=error # Supports DATE 'DD.MM.YYYY' (EUR) format - ###< insert into crash_me_d(a) values (DATE '16.08.1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_ISO=yes # Supports YYYY-MM-DD (ISO) format - ###< insert into crash_me_d(a) values ('1963-08-16') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_ISO_with_date=yes # Supports DATE 'YYYY-MM-DD' (ISO) format - ###< insert into crash_me_d(a) values (DATE '1963-08-16') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_USA=error # Supports MM/DD/YYYY format - ###< insert into crash_me_d(a) values ('08/16/1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_USA_with_date=error # Supports DATE 'MM/DD/YYYY' format - ###< insert into crash_me_d(a) values (DATE '08/16/1963') - ###> OK - ### - ###<select a from crash_me_d - ###>0000-00-00 - ###We expected '1963-08-16' but got '0000-00-00' - ### - ###< delete from crash_me_d - ###> OK -date_format_YYYYMMDD=yes # Supports YYYYMMDD format - ###< insert into crash_me_d(a) values ('19630816') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_YYYYMMDD_with_date=yes # Supports DATE 'YYYYMMDD' format - ###< insert into crash_me_d(a) values (DATE '19630816') - ###> OK - ### - ###<select a from crash_me_d - ###>1963-08-16 - ### - ###< delete from crash_me_d - ###> OK -date_format_inresult=iso # Date format in result - ###< insert into crash_me_d values( sysdate() ) - ###> OK - ### - ###< select a from crash_me_d - ###> 2004-04-06 - ###< delete from crash_me_d - ###> OK -date_infinity=error # Supports 'infinity dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('infinity') - ###> OK - ### - ###<select a from crash_me2 - ###>0000-00-00 - ###We expected 'infinity' but got '0000-00-00' - ### - ###< drop table crash_me2 - ###> OK -date_last=yes # Supports 9999-12-31 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('9999-12-31') - ###> OK - ### - ###<select a from crash_me2 - ###>9999-12-31 - ### - ###< drop table crash_me2 - ###> OK -date_one=yes # Supports 0001-01-01 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('0001-01-01') - ###> OK - ### - ###<select a from crash_me2 - ###>0001-01-01 - ### - ###< drop table crash_me2 - ###> OK -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('98-03-03') - ###> OK - ### - ###<select a from crash_me2 - ###>1998-03-03 - ### - ###< drop table crash_me2 - ###> OK - ### - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('10-03-03') - ###> OK - ### - ###<select a from crash_me2 - ###>2010-03-03 - ### - ###< drop table crash_me2 - ###> OK -date_zero=yes # Supports 0000-00-00 dates - ###< create table crash_me2 (a date not null) - ###> OK - ###< insert into crash_me2 values ('0000-00-00') - ###> OK - ### - ###<select a from crash_me2 - ###>0000-00-00 - ### - ###< drop table crash_me2 - ###> OK -domains=no # Domains (ANSI SQL) - ###< create domain crash_d as varchar(10) default 'Empty' check (value <> 'abcd') - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'domain crash_d as varchar(10) default 'Empty' check (value <> ' - ###< create table crash_q(a crash_d, b int) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'crash_d, b int)' at line 1 - ###< insert into crash_q(a,b) values('xyz',10) - ###> execute error:Table 'test.crash_q' doesn't exist - ###< insert into crash_q(b) values(10) - ###> execute error:Table 'test.crash_q' doesn't exist - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ###< drop domain crash_d - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'domain crash_d' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -dont_require_cast_to_float=yes # No need to cast from integer to float - ###< select exp(1) - ###> OK - ### - ###As far as all queries returned OK, result is YES -double_quotes=yes # Double '' as ' in strings - ### - ###<select 'Walker''s' - ###>Walker's -drop_if_exists=yes # drop table if exists - ###< create table crash_q (q integer) - ###> OK - ###< drop table if exists crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -drop_index=with 'ON' # drop index - ###< drop index crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - ### - ###< drop index crash_q from crash_me - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'from crash_me' at line 1 - ### - ###< drop index crash_q on crash_me - ###> OK -drop_requires_cascade=no # drop table require cascade/restrict - ###< create table crash_me (a integer not null) - ###> OK - ###< drop table crash_me - ###> OK -drop_restrict=yes # drop table with cascade/restrict - ###< create table crash_q (a int) - ###> OK - ###< drop table crash_q restrict - ###> OK - ### - ###As far as all queries returned OK, result is YES -end_colon=yes # allows end ';' - ###< select * from crash_me; - ###> OK - ### - ###As far as all queries returned OK, result is YES -except=no # except - ###< select * from crash_me except select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_all=no # except all - ###< select * from crash_me except all select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_all_incompat=no # except all (incompatible lists) - ###< select * from crash_me except all select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -except_incompat=no # except (incompatible lists) - ###< select * from crash_me except select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -field_name_case=yes # case independent field names - ###< create table crash_q (q integer) - ###> OK - ###< insert into crash_q(Q) values (1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -float_int_expr=yes # mixing of integer and float in expression - ###< select 1+1.0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -foreign_key=syntax only # foreign keys - ###< create table crash_me_qf (a integer not null,primary key (a)) - ###> OK - ### - ###< create table crash_me_qf2 (a integer not null,foreign key (a) references crash_me_qf (a)) - ###> OK - ### - ###< insert into crash_me_qf values (1) - ###> OK - ### - ###< insert into crash_me_qf2 values (2) - ###> OK - ### - ###< drop table crash_me_qf2 - ###> OK - ### - ###< drop table crash_me_qf - ###> OK -full_outer_join=no # full outer join - ###< select crash_me.a from crash_me full join crash_me2 ON - ### crash_me.a=crash_me2.a - ###> execute error:Unknown table 'crash_me' in field list - ### - ###As far as some queries didnt return OK, result is NO -func_extra_!=yes # Function NOT as '!' in SELECT - ### - ###<select ! 1 - ###>0 -func_extra_%=yes # Function MOD as % - ### - ###<select 10%7 - ###>3 -func_extra_&=yes # Function & (bitwise and) - ### - ###<select 5 & 3 - ###>1 -func_extra_&&=yes # Function AND as '&&' - ### - ###<select 1=1 && 2=2 - ###>1 -func_extra_<>=yes # Function <> in SELECT - ### - ###<select 1<>1 - ###>0 -func_extra_==yes # Function = - ### - ###<select (1=1) - ###>1 -func_extra_add_months=no # Function ADD_MONTHS - ### - ###<select add_months('1997-01-01',1) from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('1997-01-01',1) from crash_me_d' at line 1 -func_extra_adddate=yes # Function ADDDATE - ### - ###<select ADDDATE('2002-12-01',3) from crash_me_d - ###>2002-12-04 -func_extra_addtime=yes # Function ADDTIME - ### - ###<select ADDTIME('20:02:12','00:00:03') - ###>20:02:15 -func_extra_alpha=no # Function ALPHA - ### - ###<select alpha('Aâ',2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('Aâ',2)' at line 1 -func_extra_and_or=yes # Function AND and OR in SELECT - ### - ###<select 1=1 AND 2=2 - ###>1 -func_extra_ascii_char=no # Function ASCII_CHAR - ### - ###<select ASCII_CHAR(65) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(65)' at line 1 -func_extra_ascii_code=no # Function ASCII_CODE - ### - ###<select ASCII_CODE('A') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('A')' at line 1 -func_extra_ascii_string=error # Function ASCII in string cast - ### - ###<select ascii('a') - ###>97 - ###We expected 'a' but got '97' -func_extra_atn2=no # Function ATN2 - ### - ###<select atn2(1,0) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1,0)' at line 1 -func_extra_auto_num2string=yes # Function automatic num->string convert - ### - ###<select concat('a',2) - ###>a2 -func_extra_auto_string2num=yes # Function automatic string->num convert - ### - ###<select '1'+2 - ###>3 -func_extra_between=yes # Function BETWEEN in SELECT - ### - ###<select 5 between 4 and 6 - ###>1 -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) - ### - ###<select (1 << 4) >> 2 - ###>4 -func_extra_bit_count=yes # Function BIT_COUNT - ### - ###<select bit_count(5) - ###>2 -func_extra_ceil=yes # Function CEIL - ### - ###<select ceil(-4.5) - ###>-4 -func_extra_char_date=no # Function CHAR (conversation date) - ### - ###<select CHAR(a,EUR) from crash_me_d - ###> execute failed:Unknown column 'EUR' in 'field list' -func_extra_charindex=no # Function CHARINDEX - ### - ###<select charindex('a','crash') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a','crash')' at line 1 -func_extra_chr=no # Function CHR - ### - ###<select CHR(65) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(65)' at line 1 -func_extra_chr_str=no # Function CHR (any type to string) - ### - ###<select CHR(67) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(67)' at line 1 -func_extra_concat_as_+=error # Function concatenation with + - ### - ###<select 'abc' + 'def' - ###>0 - ###We expected 'abcdef' but got '0' -func_extra_concat_list=yes # Function CONCAT(list) - ### - ###<select concat('a','b','c','d') - ###>abcd -func_extra_convert=no # Function CONVERT - ### - ###<select convert(CHAR,5) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '5)' at line 1 -func_extra_cosh=no # Function COSH - ### - ###<select cosh(0) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(0)' at line 1 -func_extra_date=yes # Function DATE - ### - ###<select date('1963-08-16') from crash_me_d - ###>1963-08-16 -func_extra_date_format=yes # Function DATE_FORMAT - ### - ###<select date_format('1997-01-02 03:04:05','M W D Y y m d h i s w') from crash_me_d - ###>M W D Y y m d h i s w -func_extra_dateadd=no # Function DATEADD - ### - ###<select dateadd(day,3,'1997-11-30') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(day,3,'1997-11-30') from crash_me_d' at line 1 -func_extra_datediff=no # Function DATEDIFF - ### - ###<select datediff(month,'Oct 21 1997','Nov 30 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nov 30 1997') from crash_me_d' at line 1 -func_extra_datediff2arg=yes # Function DATEDIFF (2 arg) - ### - ###<select DATEDIFF('2002-12-04','2002-12-01') from crash_me_d - ###>3 -func_extra_datename=no # Function DATENAME - ### - ###<select datename(month,'Nov 30 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(month,'Nov 30 1997') from crash_me_d' at line 1 -func_extra_datepart=no # Function DATEPART - ### - ###<select datepart(month,'July 20 1997') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(month,'July 20 1997') from crash_me_d' at line 1 -func_extra_day=yes # Function DAY - ### - ###<select DAY('2002-12-01') from crash_me_d - ###>1 -func_extra_decode=no # Function DECODE - ### - ###<select DECODE('S-103','T72',1,'S-103',2,'Leopard',3) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1,'S-103',2,'Leopard',3)' at line 1 -func_extra_ebcdic_string=no # Function EBCDIC in string cast - ### - ###<select ebcdic('a') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a')' at line 1 -func_extra_elt=yes # Function ELT - ### - ###<select elt(2,'ONE','TWO','THREE') - ###>TWO -func_extra_encrypt=yes # Function ENCRYPT - ### - ###<select encrypt('hello') - ###>VNeu3dE4DbVJY -func_extra_expand2arg=no # Function EXPAND - ### - ###<select expand('abcd',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd',6)' at line 1 -func_extra_field=yes # Function FIELD - ### - ###<select field('IBM','NCA','ICL','SUN','IBM','DIGITAL') - ###>4 -func_extra_fixed=no # Function FIXED - ### - ###<select fixed(222.6666,10,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(222.6666,10,2)' at line 1 -func_extra_float=no # Function FLOAT - ### - ###<select float(6666.66,4) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'float(6666.66,4)' at line 1 -func_extra_format=yes # Function FORMAT - ### - ###<select format(1234.5555,2) - ###>1,234.56 -func_extra_from_days=yes # Function FROM_DAYS - ### - ###<select from_days(729024) from crash_me_d - ###>1996-01-01 -func_extra_from_unixtime=yes # Function FROM_UNIXTIME - ### - ###<select from_unixtime(0) from crash_me_d - ###>1970-01-01 02:00:00 -func_extra_getdate=no # Function GETDATE - ### - ###<select getdate() - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '()' at line 1 -func_extra_greatest=yes # Function GREATEST - ### - ###<select greatest('HARRY','HARRIOT','HAROLD') - ###>HARRY -func_extra_hex=yes # Function HEX - ### - ###<select HEX('A') - ###>41 -func_extra_if=yes # Function IF - ### - ###<select if(5,6,7) - ###>6 -func_extra_in_num=yes # Function IN on numbers in SELECT - ### - ###<select 2 in (3,2,5,9,5,1) - ###>1 -func_extra_in_str=yes # Function IN on strings in SELECT - ### - ###<select 'monty' in ('david','monty','allan') - ###>1 -func_extra_index=no # Function INDEX - ### - ###<select index('abcdefg','cd',1,1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'index('abcdefg','cd',1,1)' at line 1 -func_extra_initcap=no # Function INITCAP - ### - ###<select initcap('the soap') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('the soap')' at line 1 -func_extra_instr=yes # Function LOCATE as INSTR - ### - ###<select instr('hello','ll') - ###>3 -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) - ### - ###<select INSTR('CORPORATE FLOOR','OR',3,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '3,2)' at line 1 -func_extra_instrb=no # Function INSTRB - ### - ###<select INSTRB('CORPORATE FLOOR','OR',5,2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('CORPORATE FLOOR','OR',5,2)' at line 1 -func_extra_interval=yes # Function INTERVAL - ### - ###<select interval(55,10,20,30,40,50,60,70,80,90,100) - ###>5 -func_extra_last_day=yes # Function LAST_DAY - ### - ###<select last_day('1997-04-01') from crash_me_d - ###>1997-04-30 -func_extra_last_insert_id=yes # Function LAST_INSERT_ID - ### - ###<select last_insert_id() - ###>0 -func_extra_least=yes # Function LEAST - ### - ###<select least('HARRY','HARRIOT','HAROLD') - ###>HAROLD -func_extra_length=error # Function LENGTH - ### - ###<select length(1) - ###>1 - ###We expected '2' but got '1' -func_extra_lengthb=no # Function LENGTHB - ### - ###<select lengthb('CANDIDE') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('CANDIDE')' at line 1 -func_extra_lfill3arg=no # Function LFILL (3 arg) - ### - ###<select lfill('abcd','.',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd','.',6)' at line 1 -func_extra_like=yes # Function LIKE in SELECT - ### - ###<select 'a' like 'a%' - ###>1 -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT - ### - ###<select '%' like 'a%' escape 'a' - ###>1 -func_extra_ln=yes # Function LN - ### - ###<select ln(95) - ###>4.553877 -func_extra_log(m_n)=yes # Function LOG(m,n) - ### - ###<select log(10,100) - ###>2.000000 -func_extra_logn=no # Function LOGN - ### - ###<select logn(2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(2)' at line 1 -func_extra_lpad=yes # Function LPAD - ### - ###<select lpad('hi',4,'??') - ###>??hi -func_extra_ltrim2arg=no # Function LTRIM (2 arg) - ### - ###<select ltrim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_makedate=yes # Function MAKEDATE - ### - ###<select MAKEDATE(1963,228) from crash_me_d - ###>1963-08-16 -func_extra_maketime=yes # Function MAKETIME - ### - ###<select MAKETIME(20,02,12) - ###>20:02:12 -func_extra_mapchar=no # Function MAPCHAR - ### - ###<select mapchar('Aâ') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('Aâ')' at line 1 -func_extra_mdy=no # Function MDY - ### - ###<select mdy(7,1,1998) from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(7,1,1998) from crash_me_d' at line 1 -func_extra_microsecond=yes # Function MICROSECOND - ### - ###<select MICROSECOND('19630816200212111111') - ###>110000 -func_extra_mid=yes # Function SUBSTRING as MID - ### - ###<select mid('hello',3,2) - ###>ll -func_extra_months_between=no # Function MONTHS_BETWEEN - ### - ###<select months_between('1997-02-02','1997-01-01') from crash_me_d - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('1997-02-02','1997-01-01') from crash_me_d' at line 1 -func_extra_noround=no # Function NOROUND - ###< select noround(22.6) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(22.6)' at line 1 -func_extra_not=yes # Function NOT in SELECT - ### - ###<select not false - ###>1 -func_extra_not_between=yes # Function NOT BETWEEN in SELECT - ### - ###<select 5 not between 4 and 6 - ###>0 -func_extra_not_like=yes # Function NOT LIKE in SELECT - ### - ###<select 'a' not like 'a%' - ###>0 -func_extra_num=no # Function NUM - ### - ###<select NUM('2123') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('2123')' at line 1 -func_extra_odbc_convert=no # Function ODBC CONVERT - ### - ###<select convert(5,SQL_CHAR) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_CHAR)' at line 1 -func_extra_password=yes # Function PASSWORD - ### - ###<select password('hello') - ###>*6B4F89A54E2D27ECD7E8DA05B4AB8FD9D1D8B119 -func_extra_paste=no # Function PASTE - ### - ###<select paste('ABCDEFG',3,2,'1234') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',3,2,'1234')' at line 1 -func_extra_patindex=no # Function PATINDEX - ### - ###<select patindex('%a%','crash') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('%a%','crash')' at line 1 -func_extra_period_add=yes # Function PERIOD_ADD - ### - ###<select period_add(9602,-12) from crash_me_d - ###>199502 -func_extra_period_diff=yes # Function PERIOD_DIFF - ### - ###<select period_diff(199505,199404) from crash_me_d - ###>13 -func_extra_pow=yes # Function POW - ### - ###<select pow(3,2) - ###>9.000000 -func_extra_range=no # Function RANGE - ### - ###<select range(a) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a)' at line 1 -func_extra_regexp=yes # Function REGEXP in SELECT - ### - ###<select 'a' regexp '^(a|b)*$' - ###>1 -func_extra_replace2arg=no # Function REPLACE (2 arg) - ### - ###<select replace('AbCd','bC') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 -func_extra_replicate=no # Function REPLICATE - ### - ###<select replicate('a',5) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('a',5)' at line 1 -func_extra_reverse=yes # Function REVERSE - ### - ###<select reverse('abcd') - ###>dcba -func_extra_rfill3arg=no # Function RFILL (3 arg) - ### - ###<select rfill('abcd','.',6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abcd','.',6)' at line 1 -func_extra_root=no # Function ROOT - ### - ###<select root(4) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(4)' at line 1 -func_extra_round1=yes # Function ROUND(1 arg) - ### - ###<select round(5.63) - ###>6 -func_extra_rpad=yes # Function RPAD - ### - ###<select rpad('hi',4,'??') - ###>hi?? -func_extra_rpad4arg=no # Function RPAD (4 arg) - ### - ###<select rpad('abcd',2,'+-',8) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '8)' at line 1 -func_extra_rtrim2arg=no # Function RTRIM (2 arg) - ### - ###<select rtrim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_sec_to_time=yes # Function SEC_TO_TIME - ### - ###<select sec_to_time(5001) - ###>01:23:21 -func_extra_sinh=no # Function SINH - ### - ###<select sinh(1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1)' at line 1 -func_extra_str=no # Function STR - ### - ###<select str(123.45,5,1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(123.45,5,1)' at line 1 -func_extra_strcmp=yes # Function STRCMP - ### - ###<select strcmp('abc','adc') - ###>-1 -func_extra_stuff=no # Function STUFF - ### - ###<select stuff('abc',2,3,'xyz') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc',2,3,'xyz')' at line 1 -func_extra_subdate=yes # Function SUBDATE - ### - ###<select SUBDATE('2002-12-04',3) from crash_me_d - ###>2002-12-01 -func_extra_substr2arg=yes # Function SUBSTR (2 arg) - ### - ###<select substr('abcd',2) - ###>bcd -func_extra_substr3arg=yes # Function SUBSTR (3 arg) - ### - ###<select substr('abcd',2,2) - ###>bc -func_extra_substrb=no # Function SUBSTRB - ### - ###<select SUBSTRB('ABCDEFG',5,4.2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',5,4.2)' at line 1 -func_extra_substring_index=yes # Function SUBSTRING_INDEX - ### - ###<select substring_index('www.tcx.se','.',-2) - ###>tcx.se -func_extra_subtime=yes # Function SUBTIME - ### - ###<select SUBTIME('20:02:15','00:00:03') - ###>20:02:12 -func_extra_sysdate=yes # Function SYSDATE - ### - ###<select sysdate() - ###>2004-04-06 13:49:05 -func_extra_tail=no # Function TAIL - ### - ###<select tail('ABCDEFG',3) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('ABCDEFG',3)' at line 1 -func_extra_tanh=no # Function TANH - ### - ###<select tanh(1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1)' at line 1 -func_extra_time=yes # Function TIME - ### - ###<select time('20:02:12') - ###>20:02:12 -func_extra_time_to_sec=yes # Function TIME_TO_SEC - ### - ###<select time_to_sec('01:23:21') - ###>5001 -func_extra_timediff=yes # Function TIMEDIFF - ### - ###<select TIMEDIFF('20:02:15','20:02:12') - ###>00:00:03 -func_extra_timestamp=error # Function TIMESTAMP - ### - ###<select timestamp('19630816','00200212') - ###>1963-08-16 20:02:12 - ###We expected '19630816200212000000' but got '1963-08-16 20:02:12' -func_extra_to_days=yes # Function TO_DAYS - ### - ###<select to_days('1996-01-01') from crash_me_d - ###>729024 -func_extra_translate=no # Function TRANSLATE - ### - ###<select translate('abc','bc','de') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','bc','de')' at line 1 -func_extra_trim1arg=yes # Function TRIM (1 arg) - ### - ###<select trim(' abcd ') - ###>abcd -func_extra_trim2arg=no # Function TRIM (2 arg) - ### - ###<select trim('..abcd..','.') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''.')' at line 1 -func_extra_trim_many_char=error # Function TRIM; Many char extension - ### - ###<select trim(':!' FROM ':abc!') - ###>:abc! - ###We expected 'abc' but got ':abc!' -func_extra_trim_substring=yes # Function TRIM; Substring extension - ### - ###<select trim('cb' FROM 'abccb') - ###>abc -func_extra_trunc=no # Function TRUNC - ### - ###<select trunc(18.18,-1) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(18.18,-1)' at line 1 -func_extra_trunc1arg=no # Function TRUNC (1 arg) - ### - ###<select trunc(222.6) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(222.6)' at line 1 -func_extra_uid=no # Function UID - ### - ###<select uid - ###> execute failed:Unknown column 'uid' in 'field list' -func_extra_unix_timestamp=yes # Function UNIX_TIMESTAMP - ### - ###<select unix_timestamp() - ###>1081248545 -func_extra_userenv=no # Function USERENV - ### - ###<select userenv - ###> execute failed:Unknown column 'userenv' in 'field list' -func_extra_value=no # Function VALUE - ### - ###<select value(NULL,'WALRUS') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(NULL,'WALRUS')' at line 1 -func_extra_version=yes # Function VERSION - ### - ###<select version() - ###>4.1.2-alpha -func_extra_weekday=yes # Function WEEKDAY - ### - ###<select weekday('1997-11-29') from crash_me_d - ###>5 -func_extra_weekofyear=yes # Function WEEKOFYEAR - ### - ###<select WEEKOFYEAR('1963-08-16') from crash_me_d - ###>33 -func_extra_|=yes # Function | (bitwise or) - ### - ###<select 1 | 2 - ###>3 -func_extra_||=yes # Function OR as '||' - ### - ###<select 1=0 || 1=1 - ###>1 -func_extra_~*=no # Function ~* (case insensitive compare) - ### - ###<select 'hi' ~* 'HI' - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '~* 'HI'' at line 1 -func_odbc_abs=yes # Function ABS - ### - ###<select abs(-5) - ###>5 -func_odbc_acos=yes # Function ACOS - ### - ###<select acos(0) - ###>1.570796 -func_odbc_ascii=yes # Function ASCII - ### - ###<select ASCII('A') - ###>65 -func_odbc_asin=yes # Function ASIN - ### - ###<select asin(1) - ###>1.570796 -func_odbc_atan=yes # Function ATAN - ### - ###<select atan(1) - ###>0.785398 -func_odbc_atan2=yes # Function ATAN2 - ### - ###<select atan2(1,0) - ###>1.570796 -func_odbc_ceiling=yes # Function CEILING - ### - ###<select ceiling(-4.5) - ###>-4 -func_odbc_char=yes # Function CHAR - ### - ###<select CHAR(65) - ###>A -func_odbc_concat=yes # Function CONCAT(2 arg) - ### - ###<select concat('a','b') - ###>ab -func_odbc_cos=yes # Function COS - ### - ###<select cos(0) - ###>1.000000 -func_odbc_cot=yes # Function COT - ### - ###<select cot(1) - ###>0.64209262 -func_odbc_curdate=yes # Function CURDATE - ### - ###<select curdate() - ###>2004-04-06 -func_odbc_curtime=yes # Function CURTIME - ### - ###<select curtime() - ###>13:49:04 -func_odbc_database=yes # Function DATABASE - ### - ###<select database() - ###>test -func_odbc_dayname=yes # Function DAYNAME - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayname(a) from crash_me_d - ###>Saturday -func_odbc_dayofmonth=yes # Function DAYOFMONTH - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofmonth(a) from crash_me_d - ###>1 -func_odbc_dayofweek=yes # Function DAYOFWEEK - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofweek(a) from crash_me_d - ###>7 -func_odbc_dayofyear=yes # Function DAYOFYEAR - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select dayofyear(a) from crash_me_d - ###>32 -func_odbc_degrees=yes # Function DEGREES - ### - ###<select degrees(6.283185) - ###>359.99998239991 -func_odbc_difference=no # Function DIFFERENCE() - ### - ###<select difference('abc','abe') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','abe')' at line 1 - ### - ###<select {fn difference('abc','abe') } - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('abc','abe') }' at line 1 -func_odbc_exp=yes # Function EXP - ### - ###<select exp(1.0) - ###>2.718282 -func_odbc_floor=yes # Function FLOOR - ### - ###<select floor(2.5) - ###>2 -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT - ### - ###<select { fn LEFT( { fn RIGHT('abcd',2) },1) } - ###>c -func_odbc_hour=yes # Function HOUR - ###< insert into crash_me_t values(20:08:16) - ### - ###<select hour('12:13:14') - ###>12 -func_odbc_hour_time=yes # Function ANSI HOUR - ###< insert into crash_me_t values(20:08:16) - ### - ###<select hour(TIME '12:13:14') - ###>12 -func_odbc_ifnull=yes # Function IFNULL - ### - ###<select ifnull(2,3) - ###>2 -func_odbc_insert=yes # Function INSERT - ### - ###<select insert('abcd',2,2,'ef') - ###>aefd -func_odbc_lcase=yes # Function LCASE - ### - ###<select lcase('ABC') - ###>abc -func_odbc_left=yes # Function LEFT - ### - ###<select left('abcd',2) - ###>ab -func_odbc_length=yes # Function REAL LENGTH - ### - ###<select length('abcd ') - ###>5 -func_odbc_length_without_space=error # Function ODBC LENGTH - ### - ###<select length('abcd ') - ###>5 - ###We expected '4' but got '5' - ### - ###<select {fn length('abcd ') } - ###>5 - ###We expected '4' but got '5' -func_odbc_locate_2=yes # Function LOCATE(2 arg) - ### - ###<select locate('bcd','abcd') - ###>2 -func_odbc_locate_3=yes # Function LOCATE(3 arg) - ### - ###<select locate('bcd','abcd',3) - ###>0 -func_odbc_log=yes # Function LOG - ### - ###<select log(2) - ###>0.693147 -func_odbc_log10=yes # Function LOG10 - ### - ###<select log10(10) - ###>1.000000 -func_odbc_ltrim=yes # Function LTRIM - ### - ###<select ltrim(' abcd') - ###>abcd -func_odbc_minute=yes # Function MINUTE - ###< insert into crash_me_t values(20:08:16) - ### - ###<select minute('12:13:14') - ###>13 -func_odbc_mod=yes # Function MOD - ### - ###<select mod(11,7) - ###>4 -func_odbc_month=yes # Function MONTH - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select month(a) from crash_me_d - ###>2 -func_odbc_monthname=yes # Function MONTHNAME - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select monthname(a) from crash_me_d - ###>February -func_odbc_now=yes # Function NOW - ### - ###<select now() - ###>2004-04-06 13:49:04 -func_odbc_pi=yes # Function PI - ### - ###<select pi() - ###>3.141593 -func_odbc_power=yes # Function POWER - ### - ###<select power(2,4) - ###>16.000000 -func_odbc_quarter=yes # Function QUARTER - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select quarter(a) from crash_me_d - ###>1 -func_odbc_radians=yes # Function RADIANS - ### - ###<select radians(360) - ###>6.2831853071796 -func_odbc_rand=yes # Function RAND - ### - ###<select rand(1) - ###>0.40540353712198 -func_odbc_repeat=yes # Function REPEAT - ### - ###<select repeat('ab',3) - ###>ababab -func_odbc_replace=yes # Function REPLACE - ### - ###<select replace('abbaab','ab','ba') - ###>bababa -func_odbc_right=yes # Function RIGHT - ### - ###<select right('abcd',2) - ###>cd -func_odbc_round=yes # Function ROUND(2 arg) - ### - ###<select round(5.63,2) - ###>5.63 -func_odbc_rtrim=yes # Function RTRIM - ### - ###<select rtrim(' abcd ') - ###> abcd -func_odbc_second=yes # Function SECOND - ###< insert into crash_me_t values(20:08:16) - ### - ###<select second('12:13:14') - ###>14 -func_odbc_sign=yes # Function SIGN - ### - ###<select sign(-5) - ###>-1 -func_odbc_sin=yes # Function SIN - ### - ###<select sin(1) - ###>0.841471 -func_odbc_soundex=yes # Function SOUNDEX - ### - ###<select soundex('hello') - ###>H400 -func_odbc_space=yes # Function SPACE - ### - ###<select space(5) - ###> -func_odbc_sqrt=yes # Function SQRT - ### - ###<select sqrt(4) - ###>2.000000 -func_odbc_substring=yes # Function ODBC SUBSTRING - ### - ###<select substring('abcd',3,2) - ###>cd -func_odbc_tan=yes # Function TAN - ### - ###<select tan(1) - ###>1.557408 -func_odbc_timestampadd=no # Function TIMESTAMPADD - ### - ###<select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')' at line 1 - ### - ###<select {fn timestampadd(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) } - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) }' at line 1 -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF - ### - ###<select timestampdiff(SQL_TSI_SECOND,'1997-01-01 00:00:02', '1997-01-01 00:00:01') - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(SQL_TSI_SECOND,'1997-01-01 00:00:02', '1997-01-01 00:00:01')' - ### - ###<select {fn timestampdiff(SQL_TSI_SECOND,{ts '1997-01-01 00:00:02'}, {ts '1997-01-01 00:00:01'}) } - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(SQL_TSI_SECOND,{ts '1997-01-01 00:00:02'}, {ts '1997-01-01 00: -func_odbc_truncate=yes # Function TRUNCATE - ### - ###<select truncate(18.18,-1) - ###>10 -func_odbc_ucase=yes # Function UCASE - ### - ###<select ucase('abc') - ###>ABC -func_odbc_user()=yes # Function USER() - ### - ###<select user() - ###>monty@localhost -func_odbc_week=USA # WEEK - ###<select week('1997-02-01') - ###>4 - ###We expected '5' but got '4' -func_odbc_year=yes # Function YEAR - ###< insert into crash_me_d values('1997-02-01') - ### - ###<select year(a) from crash_me_d - ###>1997 -func_sql_+=yes # Function +, -, * and / - ### - ###<select 5*3-4/2+1 - ###>14.00 -func_sql_bit_length=yes # Function BIT_LENGTH - ### - ###<select bit_length('abc') - ###>24 -func_sql_cast=yes # Function CAST - ### - ###<select CAST(1 as CHAR) - ###>1 -func_sql_char_length=error # Function CHAR_LENGTH - ### - ###<select char_length(b) from crash_me - ###>1 - ###We expected '10' but got '1' -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) - ### - ###<select char_length('abcd') - ###>4 -func_sql_character_length=yes # Function CHARACTER_LENGTH - ### - ###<select character_length('abcd') - ###>4 -func_sql_coalesce=yes # Function COALESCE - ### - ###<select coalesce(NULL,'bcd','qwe') - ###>bcd -func_sql_concat_as_||=error # Function concatenation with || - ### - ###<select 'abc' || 'def' - ###>0 - ###We expected 'abcdef' but got '0' -func_sql_current_date=yes # Function CURRENT_DATE - ### - ###<select current_date - ###>2004-04-06 -func_sql_current_time=yes # Function CURRENT_TIME - ### - ###<select current_time - ###>13:49:04 -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP - ### - ###<select current_timestamp - ###>2004-04-06 13:49:04 -func_sql_current_user=yes # CURRENT_USER - ###< select CURRENT_USER - ###> OK -func_sql_extract_sql=yes # Function EXTRACT - ### - ###<select extract(minute from timestamp '2000-02-23 18:43:12.987') - ###>43 -func_sql_localtime=yes # Function LOCALTIME - ### - ###<select localtime - ###>2004-04-06 13:49:04 -func_sql_localtimestamp=yes # Function LOCALTIMESTAMP - ### - ###<select localtimestamp - ###>2004-04-06 13:49:04 -func_sql_lower=yes # Function LOWER - ### - ###<select LOWER('ABC') - ###>abc -func_sql_nullif_num=yes # Function NULLIF with numbers - ### - ###<select NULLIF(NULLIF(1,2),1) - ###> -func_sql_nullif_string=yes # Function NULLIF with strings - ### - ###<select NULLIF(NULLIF('first','second'),'first') - ###> -func_sql_octet_length=yes # Function OCTET_LENGTH - ### - ###<select octet_length('abc') - ###>3 -func_sql_position=yes # Function POSITION - ### - ###<select position('ll' in 'hello') - ###>3 -func_sql_searched_case=yes # Function searched CASE - ### - ###<select case when 1 > 2 then 'false' when 2 > 1 then 'true' end - ###>true -func_sql_session_user=with_parenthesis # SESSION_USER - ###< select SESSION_USER - ###> execute error:Unknown column 'SESSION_USER' in 'field list' - ### - ###< select SESSION_USER() - ###> OK -func_sql_simple_case=yes # Function simple CASE - ### - ###<select case 2 when 1 then 'false' when 2 then 'true' end - ###>true -func_sql_substring=yes # Function ANSI SQL SUBSTRING - ### - ###<select substring('abcd' from 2 for 2) - ###>bc -func_sql_system_user=with_parenthesis # SYSTEM_USER - ###< select SYSTEM_USER - ###> execute error:Unknown column 'SYSTEM_USER' in 'field list' - ### - ###< select SYSTEM_USER() - ###> OK -func_sql_trim=yes # Function TRIM - ### - ###<select trim(trailing from trim(LEADING FROM ' abc ')) - ###>abc -func_sql_upper=yes # Function UPPER - ### - ###<select UPPER('abc') - ###>ABC -func_sql_user=with_parenthesis # USER - ###< select USER - ###> execute error:Unknown column 'USER' in 'field list' - ### - ###< select USER() - ###> OK -func_where_between=yes # Function BETWEEN - ### - ###<select a from crash_me where 5 between 4 and 6 - ###>1 -func_where_eq_all=yes # Function = ALL - ### - ###<select a from crash_me where b =all (select b from crash_me) - ###>1 -func_where_eq_any=yes # Function = ANY - ### - ###<select a from crash_me where b =any (select b from crash_me) - ###>1 -func_where_eq_some=yes # Function = SOME - ### - ###<select a from crash_me where b =some (select b from crash_me) - ###>1 -func_where_exists=yes # Function EXISTS - ### - ###<select a from crash_me where exists (select * from crash_me) - ###>1 -func_where_in_num=yes # Function IN on numbers - ### - ###<select a from crash_me where 2 in (3,2,5,9,5,1) - ###>1 -func_where_like=yes # Function LIKE - ### - ###<select a from crash_me where b like 'a%' - ###>1 -func_where_like_escape=yes # Function LIKE ESCAPE - ### - ###<select a from crash_me where b like '%' escape 'a' - ###>1 -func_where_match=no # Function MATCH - ### - ###<select a from crash_me where 1 match (select a from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'match (select a from crash_me)' at line 1 -func_where_match_unique=no # Function MATCH UNIQUE - ### - ###<select a from crash_me where 1 match unique (select a from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'match unique (select a from crash_me)' at line 1 -func_where_matches=no # Function MATCHES - ### - ###<select a from crash_me where b matcjhes 'a*' - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'matcjhes 'a*'' at line 1 -func_where_not_between=yes # Function NOT BETWEEN - ### - ###<select a from crash_me where 7 not between 4 and 6 - ###>1 -func_where_not_exists=yes # Function NOT EXISTS - ### - ###<select a from crash_me where not exists (select * from crash_me where a = 2) - ###>1 -func_where_not_like=yes # Function NOT LIKE - ### - ###<select a from crash_me where b not like 'b%' - ###>1 -func_where_not_unique=no # Function NOT UNIQUE - ### - ###<select a from crash_me where not unique (select * from crash_me where a = 2) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'unique (select * from crash_me where a = 2)' at line 1 -func_where_unique=no # Function UNIQUE - ### - ###<select a from crash_me where unique (select * from crash_me) - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'unique (select * from crash_me)' at line 1 -functions=yes # Functions - ###< select 1+1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by=yes # Group by - ###< select a from crash_me group by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by_alias=yes # Group by alias - ###< select a as ab from crash_me group by ab - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_by_null=yes # Group on column with null values - ###< create table crash_q (s char(10)) - ###> OK - ###< insert into crash_q values(null) - ###> OK - ###< insert into crash_q values(null) - ###> OK - ### - ###<select count(*),s from crash_q group by s - ###>2 - ### - ###< drop table crash_q - ###> OK -group_by_position=yes # Group by position - ###< select a from crash_me group by 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_distinct_functions=yes # Group functions with distinct - ###< select count(distinct a) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_func_extra_bit_and=yes # Group function BIT_AND - ### - ###<select bit_and(a),a from crash_me group by a - ###>1 -group_func_extra_bit_or=yes # Group function BIT_OR - ### - ###<select bit_or(a),a from crash_me group by a - ###>1 -group_func_extra_count_distinct_list=yes # Group function COUNT(DISTINCT expr,expr,...) - ### - ###<select count(distinct a,b),a from crash_me group by a - ###>1 -group_func_extra_std=yes # Group function STD - ### - ###<select std(a),a from crash_me group by a - ###>0.0000 -group_func_extra_stddev=yes # Group function STDDEV - ### - ###<select stddev(a),a from crash_me group by a - ###>0.0000 -group_func_extra_variance=yes # Group function VARIANCE - ### - ###<select variance(a),a from crash_me group by a - ###>0.0000 -group_func_sql_any=no # Group function ANY - ### - ###<select any(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_avg=yes # Group function AVG - ### - ###<select avg(a),a from crash_me group by a - ###>1.0000 -group_func_sql_count_*=yes # Group function COUNT (*) - ### - ###<select count(*),a from crash_me group by a - ###>1 -group_func_sql_count_column=yes # Group function COUNT column name - ### - ###<select count(a),a from crash_me group by a - ###>1 -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) - ### - ###<select count(distinct a),a from crash_me group by a - ###>1 -group_func_sql_every=no # Group function EVERY - ### - ###<select every(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_max=yes # Group function MAX on numbers - ### - ###<select max(a),a from crash_me group by a - ###>1 -group_func_sql_max_str=yes # Group function MAX on strings - ### - ###<select max(b),a from crash_me group by a - ###>a -group_func_sql_min=yes # Group function MIN on numbers - ### - ###<select min(a),a from crash_me group by a - ###>1 -group_func_sql_min_str=yes # Group function MIN on strings - ### - ###<select min(b),a from crash_me group by a - ###>a -group_func_sql_some=no # Group function SOME - ### - ###<select some(a),a from crash_me group by a - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a),a from crash_me group by a' at line 1 -group_func_sql_sum=yes # Group function SUM - ### - ###<select sum(a),a from crash_me group by a - ###>1 -group_functions=yes # Group functions - ###< select count(*) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_many_distinct_functions=yes # Group functions with several distinct - ###< select count(distinct a), count(distinct b) from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -group_on_unused=yes # Group on unused column - ###< select count(*) from crash_me group by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -has_true_false=yes # TRUE and FALSE - ###< select (1=1)=true - ###> OK -having=yes # Having - ###<select a from crash_me group by a having a > 0 - ###>1 - ### - ###<select a from crash_me group by a having a < 0 - ###> didn't return any result: -having_with_alias=yes # Having on alias - ###< select a as ab from crash_me group by a having ab > 0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -having_with_group=yes # Having with group function - ###< select a from crash_me group by a having count(*) = 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -hex_numbers=yes # hex numbers (0x41) - ###< select 0x41 - ###> OK - ### - ###As far as all queries returned OK, result is YES -hex_strings=yes # hex strings (x'1ace') - ###< select x'1ace' - ###> OK - ### - ###As far as all queries returned OK, result is YES -ignore_end_space=yes # Ignore end space in compare - ### - ###<select b from crash_me where b = 'a ' - ###>a -index_in_create=yes # index in create table - ###< create table crash_q (q integer not null,index (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -index_namespace=yes # different namespace for index - ###< create index crash_me on crash_me (b) - ###> OK - ###< drop index crash_me on crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -index_parts=yes # index on column part (extension) - ###< create index crash_q on crash_me (b(5)) - ###> OK - ###< drop index crash_q on crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -inner_join=yes # inner join - ###< select crash_me.a from crash_me inner join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_default_values=no # INSERT DEFAULT VALUES - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q DEFAULT VALUES - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT VALUES' at line 1 - ###< drop table crash_me_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -insert_empty_string=yes # insert empty string - ###< create table crash_q (a char(10) not null,b char(10)) - ###> OK - ###< insert into crash_q values ('','') - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_multi_value=yes # INSERT with Value lists - ###< create table crash_q (s char(10)) - ###> OK - ###< insert into crash_q values ('a'),('b') - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_select=yes # insert INTO ... SELECT ... - ###< create table crash_q (a int) - ###> OK - ###< insert into crash_q (a) SELECT crash_me.a from crash_me - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_with_default=yes # INSERT with DEFAULT - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q (a) values (DEFAULT) - ###> OK - ###< drop table crash_me_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -insert_with_empty_value_list=no # INSERT with empty value list - ###< create table crash_me_q (a int) - ###> OK - ###< insert into crash_me_q (a) values () - ###> execute error:Column count doesn't match value count at row 1 - ###< drop table crash_me_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -insert_with_set=yes # INSERT with set syntax - ###< create table crash_q (a integer) - ###> OK - ###< insert into crash_q SET a=1 - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -intersect=no # intersect - ###< select * from crash_me intersect select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_all=no # intersect all - ###< select * from crash_me intersect all select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_all_incompat=no # intersect all (incompatible lists) - ###< select * from crash_me intersect all select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'all select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -intersect_incompat=no # intersect (incompatible lists) - ###< select * from crash_me intersect select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -join_tables=61 # tables in join - ###We are trying (example with N=5): - ###select crash_me.a,t0.a,t1.a,t2.a,t3.a,t4.a from crash_me,crash_me t0,crash_me t1,crash_me t2,crash_me t3,crash_me t4 - ### 32:OK 48:OK 56:OK 60:OK 62:FAIL 61:FAIL -left_outer_join=yes # left outer join - ###< select crash_me.a from crash_me left join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -left_outer_join_using=yes # left outer join using - ###< select c1 from crash_me left join crash_me2 using (a) - ###> OK - ### - ###As far as all queries returned OK, result is YES -length_of_varchar_field=actual length # CHARACTER_LENGTH(varchar_field) - ###< CREATE TABLE crash_me1 (S1 VARCHAR(100)) - ###> OK - ###< INSERT INTO crash_me1 VALUES ('X') - ###> OK - ### - ###< SELECT CHARACTER_LENGTH(S1) FROM crash_me1 - ### > 1 - ###< drop table crash_me1 - ###> OK -like_with_column=yes # column LIKE column - ###< create table crash_q (a char(10),b char(10)) - ###> OK - ###< insert into crash_q values('abc','abc') - ###> OK - ###< select * from crash_q where a like b - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -like_with_number=yes # LIKE on numbers - ###< create table crash_q (a int,b int) - ###> OK - ###< insert into crash_q values(10,10) - ###> OK - ###< select * from crash_q where a like '10' - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -lock_tables=yes # lock table - ###< lock table crash_me READ - ###> OK - ###< unlock tables - ###> OK - ### - ###As far as all queries returned OK, result is YES -logical_value=1 # Value of logical operation (1=1) - ###<select (1=1) - ###>1 -max_big_expressions=10 # big expressions - ###We are trying (example with N=5): - ###select 0+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+...(8168) - ### 50:FAIL 10:OK 30:FAIL 14:FAIL 11:FAIL -max_char_size=1048543 # max char() size - ###We are trying (example with N=5): - ###create table crash_q (q char(5)) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL -max_column_name=64 # column name length - ###We are trying (example with N=5): - ###create table crash_q (qaaaaa integer) - ###insert into crash_q (qaaaaa) values(1) - ###select qaaaaa from crash_q - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:OK 67:FAIL 64:FAIL -max_columns=2599 # Columns in table - ###We are trying (example with N=5): - ###create table crash_q (a integer ,a0 integer,a1 integer,a2 integer,a3 integer,a4 integer) - ### 4096:FAIL 819:OK 2457:OK 3276:FAIL 2621:FAIL 2490:OK 2555:OK 2588:OK 2604:FAIL 2591:OK 2597:OK 2600:FAIL 2598:OK 2599:FAIL -max_conditions=85660 # OR and AND in WHERE - ###We are trying (example with N=5): - ###select a from crash_me where a=1 and b='a' or a=0 and b='0' or a=1 and b='1' or a=2 and b='2' or a=3 and b='3' or a=4 and b='4' - ### 27592:OK 41389:OK 48287:FAIL 42769:OK 45528:FAIL 43321:FAIL 42880:FAIL 42791:OK 42835:FAIL 42800:OK 42817:OK 42826:OK 42830:OK 42832:FAIL 42831:FAIL -max_expressions=836 # simple expressions - ###We are trying (example with N=5): - ###select 1+1+1+1+1+1 - ### 5000:FAIL 1000:FAIL 200:OK 600:OK 800:OK 900:FAIL 820:OK 860:FAIL 828:OK 844:FAIL 831:OK 837:FAIL 832:OK 834:OK 835:OK 836:OK -max_index=32 # max index - ### max_unique_index=32 ,so max_index must be same -max_index_length=1000 # index length - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) not null,unique (q0)) - ###insert into crash_q values('aaaaa') - ### 4096:FAIL 819:OK 2457:FAIL 1147:FAIL 885:OK 1016:FAIL 911:OK 963:OK 989:OK 1002:FAIL 992:OK 997:OK 999:OK 1000:OK 1001:FAIL -max_index_name=64 # index name length - ###We are trying (example with N=5): - ###create index crash_qaaaaa on crash_me (a) - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL -max_index_part_length=255 # max index part length - ###We are trying (example with N=5): - ###create table crash_q (q char(5) not null,unique(q)) - ###insert into crash_q (q) values ('aaaaa') - ###select q from crash_q - ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK -max_index_parts=16 # index parts - ###We are trying (example with N=5): - ###create table crash_q (q0 integer not null,q1 integer not null,q2 integer not null,q3 integer not null,q4 integer not nul...(1263) - ###insert into crash_q (q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q...(284) - ###select q0 from crash_q - ### 32:FAIL 7:OK 19:FAIL 10:OK 14:OK 16:FAIL 15:OK -max_index_varchar_part_length=255 # index varchar part length - ###We are trying (example with N=5): - ###create table crash_q (q varchar(5) not null,unique(q)) - ###insert into crash_q (q) values ('aaaaa') - ###select q from crash_q - ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK -max_row_length=65534 # max table row length (without blobs) - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) not null) - ###insert into crash_q values ('aaaaa') - ### 331372:FAIL 66275:FAIL 13255:OK 39765:OK 53020:OK 59647:OK 62961:OK 64618:OK 65446:OK 65860:FAIL 65529:OK 65694:FAIL 65562:FAIL 65536:FAIL 65531:OK 65533:OK 65534:OK 65535:FAIL -max_row_length_with_null=65502 # table row length with nulls (without blobs) - ###We are trying (example with N=5): - ###create table crash_q (q0 char(5) ) - ###insert into crash_q values ('aaaaa') - ### 65534:FAIL 13107:OK 39320:OK 52427:OK 58980:OK 62257:OK 63895:OK 64714:OK 65124:OK 65329:OK 65431:OK 65482:OK 65508:FAIL 65487:OK 65497:OK 65502:OK 65505:FAIL 65503:FAIL -max_select_alias_name=+512 # select alias name length - ###We are trying (example with N=5): - ###select b as aaaaa from crash_me -max_stack_expression=836 # stacked expressions - ###We are trying (example with N=5): - ###select 1+(1+(1+(1+(1+(1))))) - ### 1000:FAIL 200:OK 600:OK 800:OK 900:FAIL 820:OK 860:FAIL 828:OK 844:FAIL 831:OK 837:FAIL 832:OK 834:OK 835:OK 836:OK -max_table_alias_name=+512 # table alias name length - ###We are trying (example with N=5): - ###select aaaaa.b from crash_me aaaaa -max_table_name=64 # table name length - ###We are trying (example with N=5): - ###create table crash_qaaaaa (q integer) - ###insert into crash_qaaaaa values(1) - ###select * from crash_qaaaaa - ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL -max_text_size=1048543 # max text or blob size - ###We are trying (example with N=5): - ###create table crash_q (q mediumtext) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524272:OK 786408:OK 917476:OK 983010:OK 1015777:OK 1032161:OK 1040353:OK 1044449:OK 1046497:OK 1047521:OK 1048033:OK 1048289:OK 1048417:OK 1048481:OK 1048513:OK 1048529:OK 1048537:OK 1048541:OK 1048543:OK 1048544:FAIL -max_unique_index=32 # unique indexes - ###We are trying (example with N=5): - ###create table crash_q (q integer,q1 integer not null,unique (q1),q2 integer not null,unique (q2),q3 integer not null,uniq...(72) - ###insert into crash_q (q,q1,q2,q3,q4,q5) values (1,1,1,1,1,1) - ###select q from crash_q - ### 32:OK 48:FAIL 35:FAIL 33:FAIL -max_varchar_size=1048543 # max varchar() size - ###We are trying (example with N=5): - ###create table crash_q (q varchar(5)) - ###insert into crash_q values ('aaaaa') - ###select * from crash_q - ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL -minus=no # minus - ###< select * from crash_me minus select * from crash_me3 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me3' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -minus_incompat=no # minus (incompatible lists) - ###< select * from crash_me minus select * from crash_me2 - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from crash_me2' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -minus_neg=yes # Calculate 1--1 - ### - ###<select a--1 from crash_me - ###>2 -multi_drop=yes # many tables to drop table - ###< create table crash_q (a int) - ###> OK - ###< create table crash_q2 (a int) - ###> OK - ###< drop table crash_q,crash_q2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_null_in_unique=yes # null in unique index - ###< create table crash_q (q integer, x integer,unique (q)) - ###> OK - ###< insert into crash_q(x) values(1) - ###> OK - ###< insert into crash_q(x) values(2) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_strings=yes # Multiple line strings - ### - ###<select a from crash_me where b < 'a' - ###'b' - ###>1 -multi_table_delete=yes # DELETE FROM table1,table2... - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< delete crash_q.* from crash_q,crash_me where crash_q.a=crash_me.a - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -multi_table_update=yes # Update with many tables - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< update crash_q left join crash_me on crash_q.a=crash_me.a set crash_q.b=crash_me.b - ###> OK - ### - ###<select b from crash_q - ###>a - ### - ###< drop table crash_q - ###> OK -natural_join=yes # natural join - ###< select * from crash_me natural join crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -natural_join_incompat=yes # natural join (incompatible lists) - ###< select c1 from crash_me natural join crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -natural_left_outer_join=yes # natural left outer join - ###< select c1 from crash_me natural left join crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -no_primary_key=yes # Tables without primary key - ###< create table crash_me (a integer not null,b char(10) not null) - ###> OK - ###< insert into crash_me (a,b) values (1,'a') - ###> OK -not_id_between=no # NOT ID BETWEEN interprets as ID NOT BETWEEN - ###< create table crash_me_b (i int) - ###> OK - ###< insert into crash_me_b values(2) - ###> OK - ###< insert into crash_me_b values(5) - ###> OK - ### - ###<select i from crash_me_b where not i between 1 and 3 - ###> didn't return any result: - ### - ###< drop table crash_me_b - ###> OK -null_concat_expr=yes # Is concat('a',NULL) = NULL - ### - ###<select concat('a',NULL) - ###> -null_in_index=yes # null in index - ###< create table crash_q (a char(10),index (a)) - ###> OK - ###< insert into crash_q values (NULL) - ###> OK - ### - ###<select * from crash_q - ###> - ### - ###< drop table crash_q - ###> OK -null_in_unique=yes # null in unique index - ###< create table crash_q (q integer,unique (q)) - ###> OK - ###< insert into crash_q (q) values(NULL) - ###> OK - ###< insert into crash_q (q) values(NULL) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -null_num_expr=yes # Is 1+NULL = NULL - ### - ###<select 1+NULL - ###> -nulls_in_unique=yes # null combination in unique index - ###< create table crash_q (q integer,q1 integer,unique (q,q1)) - ###> OK - ###< insert into crash_q (q,q1) values(1,NULL) - ###> OK - ###< insert into crash_q (q,q1) values(1,NULL) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -odbc_left_outer_join=yes # left outer join odbc style - ###< select crash_me.a from { oj crash_me left outer join crash_me2 ON crash_me.a=crash_me2.a } - ###> OK - ### - ###As far as all queries returned OK, result is YES -operating_system=Linux 2.4.21-199-smp4G i686 # crash-me tested on -order_by=yes # Order by - ###< select a from crash_me order by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_alias=yes # Order by alias - ###< select a as ab from crash_me order by ab - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_function=yes # Order by function - ###< select a from crash_me order by a+1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_by_position=yes # Order by position - ###< select a from crash_me order by 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -order_on_unused=yes # Order by on unused column - ###< select b from crash_me order by a - ###> OK - ### - ###As far as all queries returned OK, result is YES -position_of_null=first # Where is null values in sorted recordset - ###< insert into crash_me_n (i) values(1) - ###> OK - ###< insert into crash_me_n values(2,2) - ###> OK - ###< insert into crash_me_n values(3,3) - ###> OK - ###< insert into crash_me_n values(4,4) - ###> OK - ###< insert into crash_me_n (i) values(5) - ###> OK - ### - ###< select r from crash_me_n order by r - ###> - ###> - ###> 2 - ###> 3 - ###> 4 -position_of_null_desc=last # Where is null values in sorted recordset (DESC) - ###< select r from crash_me_n order by r desc - ###> 4 - ###> 3 - ###> 2 - ###> - ###> -primary_key_in_create=yes # primary key in create table - ###< create table crash_q (q integer not null,primary key (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -psm_functions=no # PSM functions (ANSI SQL) - ###< create table crash_q (a int) - ###> OK - ###< create function crash_func(in a1 int, in b1 int) returns int language sql deterministic contains sql begin return a1 * b1; end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(in a1 int, in b1 int) returns int language sql deterministic c - ###< insert into crash_q values(crash_func(2,4)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(2,4))' at line 1 - ###< select a,crash_func(a,2) from crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a,2) from crash_q' at line 1 - ###< drop function crash_func cascade - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'cascade' at line 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_modules=no # PSM modules (ANSI SQL) - ###< create table crash_q (a int,b int) - ###> OK - ###< create module crash_m declare procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end; declare procedure crash_proc2(INOUT a int, in b int) contains sql set a = b + 10; end module - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'module crash_m declare procedure crash_proc(in a1 int, in b1 in - ###< call crash_proc(1,10) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'call crash_proc(1,10)' at line 1 - ###< drop module crash_m cascade - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'module crash_m cascade' at line 1 - ###< drop table crash_q cascade - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_procedures=no # PSM procedures (ANSI SQL) - ###< create table crash_q (a int,b int) - ###> OK - ###< create procedure crash_proc(in a1 int, in b1 int) language sql modifies sql data begin declare c1 int; set c1 = a1 + b1; insert into crash_q(a,b) values (a1,c1); end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'procedure crash_proc(in a1 int, in b1 int) language sql modifie - ###< call crash_proc(1,10) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'call crash_proc(1,10)' at line 1 - ###< drop procedure crash_proc - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'procedure crash_proc' at line 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -psm_trigger=no # Triggers (ANSI SQL) - ###< create table crash_q (a int ,b int) - ###> OK - ###< create trigger crash_trigger after insert on crash_q referencing new table as new_a when (localtime > time '18:00:00') begin atomic end - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'trigger crash_trigger after insert on crash_q referencing new t - ###< insert into crash_q values(1,2) - ###> OK - ###< drop trigger crash_trigger - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'trigger crash_trigger' at line 1 - ###< drop table crash_q - ###> OK - ### - ###As far as some queries didnt return OK, result is NO -query_size=1048574 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) - ### - ###<select "A" from crash_me - ###>A - ###We expected '1' but got 'A' -quote_ident_with_[=no # [] as identifier quote - ### - ###<select [A] from crash_me - ###> execute failed:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '[A] from crash_me' at line 1 -quote_ident_with_`=yes # ` as identifier quote - ### - ###<select `A` from crash_me - ###>1 -quote_ident_with_dbl_"=no # Double "" in identifiers as " - ###< create table crash_me1 ("abc""d" integer) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '"abc""d" integer)' at line 1 - ###< drop table crash_me1 - ###> execute error:Unknown table 'crash_me1' - ### - ###As far as some queries didnt return OK, result is NO -quote_with_"=yes # Allows ' and " as string markers - ###< select a from crash_me where b<"c" - ###> OK - ### - ###As far as all queries returned OK, result is YES -recursive_subqueries=+64 # recursive subqueries - ###We are trying (example with N=5): - ###select a from crash_me where a in (select a from crash_me where a in (select a from crash_me where a in (select a from c...(82) -remember_end_space=no # Remembers end space in char() - ###< create table crash_q (a char(10)) - ###> OK - ###< insert into crash_q values('hello ') - ###> OK - ### - ###<select a from crash_q where a = 'hello ' - ###>hello - ###We expected 'hello ' but got 'hello' - ### - ###< drop table crash_q - ###> OK -remember_end_space_varchar=no # Remembers end space in varchar() - ###< create table crash_q (a varchar(10)) - ###> OK - ###< insert into crash_q values('hello ') - ###> OK - ### - ###<select a from crash_q where a = 'hello ' - ###>hello - ###We expected 'hello ' but got 'hello' - ### - ###< drop table crash_q - ###> OK -rename_table=yes # rename table - ###< create table crash_q (a integer, b integer,c1 CHAR(10)) - ###> OK - ###< rename table crash_q to crash_q1 - ###> OK - ###< drop table crash_q1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -repeat_string_size=1048576 # return string size from function - ###We are trying (example with N=5): - ###select repeat('a',5) - ### 4000000:FAIL 800000:OK 2400000:FAIL 1120000:FAIL 864000:OK 992000:OK 1056000:FAIL 1004800:OK 1030400:OK 1043200:OK 1049600:FAIL 1044480:OK 1047040:OK 1048320:OK 1048960:FAIL 1048448:OK 1048704:FAIL 1048499:OK 1048601:FAIL 1048520:OK 1048560:OK 1048580:FAIL 1048564:OK 1048572:OK 1048576:OK 1048578:FAIL 1048577:FAIL -reserved_word_ansi-92/99_absolute=no # Keyword ABSOLUTE - ###< create table crash_me10 (ABSOLUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_action=no # Keyword ACTION - ###< create table crash_me10 (ACTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_add=yes # Keyword ADD - ###< create table crash_me10 (ADD int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ADD int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_after=no # Keyword AFTER - ###< create table crash_me10 (AFTER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_alias=no # Keyword ALIAS - ###< create table crash_me10 (ALIAS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_all=yes # Keyword ALL - ###< create table crash_me10 (ALL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_allocate=no # Keyword ALLOCATE - ###< create table crash_me10 (ALLOCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_alter=yes # Keyword ALTER - ###< create table crash_me10 (ALTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_and=yes # Keyword AND - ###< create table crash_me10 (AND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_any=no # Keyword ANY - ###< create table crash_me10 (ANY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_are=no # Keyword ARE - ###< create table crash_me10 (ARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_as=yes # Keyword AS - ###< create table crash_me10 (AS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_asc=yes # Keyword ASC - ###< create table crash_me10 (ASC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_assertion=no # Keyword ASSERTION - ###< create table crash_me10 (ASSERTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_at=no # Keyword AT - ###< create table crash_me10 (AT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_authorization=no # Keyword AUTHORIZATION - ###< create table crash_me10 (AUTHORIZATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_before=yes # Keyword BEFORE - ###< create table crash_me10 (BEFORE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEFORE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_begin=no # Keyword BEGIN - ###< create table crash_me10 (BEGIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_bit=no # Keyword BIT - ###< create table crash_me10 (BIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_boolean=no # Keyword BOOLEAN - ###< create table crash_me10 (BOOLEAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_both=yes # Keyword BOTH - ###< create table crash_me10 (BOTH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BOTH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_breadth=no # Keyword BREADTH - ###< create table crash_me10 (BREADTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_by=yes # Keyword BY - ###< create table crash_me10 (BY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_call=no # Keyword CALL - ###< create table crash_me10 (CALL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_cascade=yes # Keyword CASCADE - ###< create table crash_me10 (CASCADE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASCADE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cascaded=no # Keyword CASCADED - ###< create table crash_me10 (CASCADED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_case=yes # Keyword CASE - ###< create table crash_me10 (CASE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cast=no # Keyword CAST - ###< create table crash_me10 (CAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_catalog=no # Keyword CATALOG - ###< create table crash_me10 (CATALOG int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_char=yes # Keyword CHAR - ###< create table crash_me10 (CHAR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHAR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_character=yes # Keyword CHARACTER - ###< create table crash_me10 (CHARACTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_check=yes # Keyword CHECK - ###< create table crash_me10 (CHECK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_close=no # Keyword CLOSE - ###< create table crash_me10 (CLOSE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_collate=yes # Keyword COLLATE - ###< create table crash_me10 (COLLATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLLATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_collation=no # Keyword COLLATION - ###< create table crash_me10 (COLLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_column=yes # Keyword COLUMN - ###< create table crash_me10 (COLUMN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_commit=no # Keyword COMMIT - ###< create table crash_me10 (COMMIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_completion=no # Keyword COMPLETION - ###< create table crash_me10 (COMPLETION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_connect=no # Keyword CONNECT - ###< create table crash_me10 (CONNECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_connection=no # Keyword CONNECTION - ###< create table crash_me10 (CONNECTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_constraint=yes # Keyword CONSTRAINT - ###< create table crash_me10 (CONSTRAINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_constraints=no # Keyword CONSTRAINTS - ###< create table crash_me10 (CONSTRAINTS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_continue=no # Keyword CONTINUE - ###< create table crash_me10 (CONTINUE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_corresponding=no # Keyword CORRESPONDING - ###< create table crash_me10 (CORRESPONDING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_create=yes # Keyword CREATE - ###< create table crash_me10 (CREATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_cross=yes # Keyword CROSS - ###< create table crash_me10 (CROSS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CROSS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current=no # Keyword CURRENT - ###< create table crash_me10 (CURRENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_current_date=yes # Keyword CURRENT_DATE - ###< create table crash_me10 (CURRENT_DATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_time=yes # Keyword CURRENT_TIME - ###< create table crash_me10 (CURRENT_TIME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_timestamp=yes # Keyword CURRENT_TIMESTAMP - ###< create table crash_me10 (CURRENT_TIMESTAMP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIMESTAMP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_current_user=no # Keyword CURRENT_USER - ###< create table crash_me10 (CURRENT_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_cursor=no # Keyword CURSOR - ###< create table crash_me10 (CURSOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_cycle=no # Keyword CYCLE - ###< create table crash_me10 (CYCLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_data=no # Keyword DATA - ###< create table crash_me10 (DATA int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_date=no # Keyword DATE - ###< create table crash_me10 (DATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_day=no # Keyword DAY - ###< create table crash_me10 (DAY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_deallocate=no # Keyword DEALLOCATE - ###< create table crash_me10 (DEALLOCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_dec=yes # Keyword DEC - ###< create table crash_me10 (DEC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_decimal=yes # Keyword DECIMAL - ###< create table crash_me10 (DECIMAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECIMAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_declare=no # Keyword DECLARE - ###< create table crash_me10 (DECLARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_default=yes # Keyword DEFAULT - ###< create table crash_me10 (DEFAULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_deferrable=no # Keyword DEFERRABLE - ###< create table crash_me10 (DEFERRABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_deferred=no # Keyword DEFERRED - ###< create table crash_me10 (DEFERRED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_delete=yes # Keyword DELETE - ###< create table crash_me10 (DELETE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_depth=no # Keyword DEPTH - ###< create table crash_me10 (DEPTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_desc=yes # Keyword DESC - ###< create table crash_me10 (DESC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_describe=yes # Keyword DESCRIBE - ###< create table crash_me10 (DESCRIBE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESCRIBE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_descriptor=no # Keyword DESCRIPTOR - ###< create table crash_me10 (DESCRIPTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_diagnostics=no # Keyword DIAGNOSTICS - ###< create table crash_me10 (DIAGNOSTICS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_dictionary=no # Keyword DICTIONARY - ###< create table crash_me10 (DICTIONARY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_disconnect=no # Keyword DISCONNECT - ###< create table crash_me10 (DISCONNECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_distinct=yes # Keyword DISTINCT - ###< create table crash_me10 (DISTINCT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_domain=no # Keyword DOMAIN - ###< create table crash_me10 (DOMAIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_double=yes # Keyword DOUBLE - ###< create table crash_me10 (DOUBLE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DOUBLE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_drop=yes # Keyword DROP - ###< create table crash_me10 (DROP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_each=no # Keyword EACH - ###< create table crash_me10 (EACH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_else=yes # Keyword ELSE - ###< create table crash_me10 (ELSE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELSE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_elseif=no # Keyword ELSEIF - ###< create table crash_me10 (ELSEIF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_end=no # Keyword END - ###< create table crash_me10 (END int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_end-exec=yes # Keyword END-EXEC - ###< create table crash_me10 (END-EXEC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '-EXEC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_equals=no # Keyword EQUALS - ###< create table crash_me10 (EQUALS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_escape=no # Keyword ESCAPE - ###< create table crash_me10 (ESCAPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_except=no # Keyword EXCEPT - ###< create table crash_me10 (EXCEPT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_exception=no # Keyword EXCEPTION - ###< create table crash_me10 (EXCEPTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_exec=no # Keyword EXEC - ###< create table crash_me10 (EXEC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_execute=no # Keyword EXECUTE - ###< create table crash_me10 (EXECUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_external=no # Keyword EXTERNAL - ###< create table crash_me10 (EXTERNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_false=yes # Keyword FALSE - ###< create table crash_me10 (FALSE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FALSE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_fetch=no # Keyword FETCH - ###< create table crash_me10 (FETCH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_first=no # Keyword FIRST - ###< create table crash_me10 (FIRST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_float=yes # Keyword FLOAT - ###< create table crash_me10 (FLOAT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FLOAT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_for=yes # Keyword FOR - ###< create table crash_me10 (FOR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_foreign=yes # Keyword FOREIGN - ###< create table crash_me10 (FOREIGN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_found=no # Keyword FOUND - ###< create table crash_me10 (FOUND int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_from=yes # Keyword FROM - ###< create table crash_me10 (FROM int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_full=no # Keyword FULL - ###< create table crash_me10 (FULL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_general=no # Keyword GENERAL - ###< create table crash_me10 (GENERAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_get=no # Keyword GET - ###< create table crash_me10 (GET int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_global=no # Keyword GLOBAL - ###< create table crash_me10 (GLOBAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_go=no # Keyword GO - ###< create table crash_me10 (GO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_goto=no # Keyword GOTO - ###< create table crash_me10 (GOTO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_grant=yes # Keyword GRANT - ###< create table crash_me10 (GRANT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GRANT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_group=yes # Keyword GROUP - ###< create table crash_me10 (GROUP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_having=yes # Keyword HAVING - ###< create table crash_me10 (HAVING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_hour=no # Keyword HOUR - ###< create table crash_me10 (HOUR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_identity=no # Keyword IDENTITY - ###< create table crash_me10 (IDENTITY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_if=yes # Keyword IF - ###< create table crash_me10 (IF int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_ignore=yes # Keyword IGNORE - ###< create table crash_me10 (IGNORE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_immediate=no # Keyword IMMEDIATE - ###< create table crash_me10 (IMMEDIATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_in=yes # Keyword IN - ###< create table crash_me10 (IN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_indicator=no # Keyword INDICATOR - ###< create table crash_me10 (INDICATOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_initially=no # Keyword INITIALLY - ###< create table crash_me10 (INITIALLY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_inner=yes # Keyword INNER - ###< create table crash_me10 (INNER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_input=no # Keyword INPUT - ###< create table crash_me10 (INPUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_insert=yes # Keyword INSERT - ###< create table crash_me10 (INSERT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_int=yes # Keyword INT - ###< create table crash_me10 (INT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_integer=yes # Keyword INTEGER - ###< create table crash_me10 (INTEGER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTEGER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_intersect=no # Keyword INTERSECT - ###< create table crash_me10 (INTERSECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_interval=yes # Keyword INTERVAL - ###< create table crash_me10 (INTERVAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_into=yes # Keyword INTO - ###< create table crash_me10 (INTO int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_is=yes # Keyword IS - ###< create table crash_me10 (IS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_isolation=no # Keyword ISOLATION - ###< create table crash_me10 (ISOLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_join=yes # Keyword JOIN - ###< create table crash_me10 (JOIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_key=yes # Keyword KEY - ###< create table crash_me10 (KEY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_language=no # Keyword LANGUAGE - ###< create table crash_me10 (LANGUAGE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_last=no # Keyword LAST - ###< create table crash_me10 (LAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_leading=yes # Keyword LEADING - ###< create table crash_me10 (LEADING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEADING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_leave=no # Keyword LEAVE - ###< create table crash_me10 (LEAVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_left=yes # Keyword LEFT - ###< create table crash_me10 (LEFT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_less=no # Keyword LESS - ###< create table crash_me10 (LESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_level=no # Keyword LEVEL - ###< create table crash_me10 (LEVEL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_like=yes # Keyword LIKE - ###< create table crash_me10 (LIKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_limit=yes # Keyword LIMIT - ###< create table crash_me10 (LIMIT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_local=no # Keyword LOCAL - ###< create table crash_me10 (LOCAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_loop=no # Keyword LOOP - ###< create table crash_me10 (LOOP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_match=yes # Keyword MATCH - ###< create table crash_me10 (MATCH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_minute=no # Keyword MINUTE - ###< create table crash_me10 (MINUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_modify=no # Keyword MODIFY - ###< create table crash_me10 (MODIFY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_module=no # Keyword MODULE - ###< create table crash_me10 (MODULE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_month=no # Keyword MONTH - ###< create table crash_me10 (MONTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_names=no # Keyword NAMES - ###< create table crash_me10 (NAMES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_national=no # Keyword NATIONAL - ###< create table crash_me10 (NATIONAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_natural=yes # Keyword NATURAL - ###< create table crash_me10 (NATURAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NATURAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_nchar=no # Keyword NCHAR - ###< create table crash_me10 (NCHAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_new=no # Keyword NEW - ###< create table crash_me10 (NEW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_next=no # Keyword NEXT - ###< create table crash_me10 (NEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_no=no # Keyword NO - ###< create table crash_me10 (NO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_none=no # Keyword NONE - ###< create table crash_me10 (NONE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_not=yes # Keyword NOT - ###< create table crash_me10 (NOT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_null=yes # Keyword NULL - ###< create table crash_me10 (NULL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_numeric=yes # Keyword NUMERIC - ###< create table crash_me10 (NUMERIC int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NUMERIC int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_object=no # Keyword OBJECT - ###< create table crash_me10 (OBJECT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_of=no # Keyword OF - ###< create table crash_me10 (OF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_off=no # Keyword OFF - ###< create table crash_me10 (OFF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_old=no # Keyword OLD - ###< create table crash_me10 (OLD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_on=yes # Keyword ON - ###< create table crash_me10 (ON int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_only=no # Keyword ONLY - ###< create table crash_me10 (ONLY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_open=no # Keyword OPEN - ###< create table crash_me10 (OPEN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_operation=no # Keyword OPERATION - ###< create table crash_me10 (OPERATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_option=yes # Keyword OPTION - ###< create table crash_me10 (OPTION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_or=yes # Keyword OR - ###< create table crash_me10 (OR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_order=yes # Keyword ORDER - ###< create table crash_me10 (ORDER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_outer=yes # Keyword OUTER - ###< create table crash_me10 (OUTER int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_output=no # Keyword OUTPUT - ###< create table crash_me10 (OUTPUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_pad=no # Keyword PAD - ###< create table crash_me10 (PAD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_parameters=no # Keyword PARAMETERS - ###< create table crash_me10 (PARAMETERS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_partial=no # Keyword PARTIAL - ###< create table crash_me10 (PARTIAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_precision=yes # Keyword PRECISION - ###< create table crash_me10 (PRECISION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRECISION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_preorder=no # Keyword PREORDER - ###< create table crash_me10 (PREORDER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_prepare=no # Keyword PREPARE - ###< create table crash_me10 (PREPARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_preserve=no # Keyword PRESERVE - ###< create table crash_me10 (PRESERVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_primary=yes # Keyword PRIMARY - ###< create table crash_me10 (PRIMARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_prior=no # Keyword PRIOR - ###< create table crash_me10 (PRIOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_privileges=yes # Keyword PRIVILEGES - ###< create table crash_me10 (PRIVILEGES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRIVILEGES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_procedure=yes # Keyword PROCEDURE - ###< create table crash_me10 (PROCEDURE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PROCEDURE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_public=no # Keyword PUBLIC - ###< create table crash_me10 (PUBLIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_read=yes # Keyword READ - ###< create table crash_me10 (READ int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_real=yes # Keyword REAL - ###< create table crash_me10 (REAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REAL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_recursive=no # Keyword RECURSIVE - ###< create table crash_me10 (RECURSIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_ref=no # Keyword REF - ###< create table crash_me10 (REF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_references=yes # Keyword REFERENCES - ###< create table crash_me10 (REFERENCES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_referencing=no # Keyword REFERENCING - ###< create table crash_me10 (REFERENCING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_relative=no # Keyword RELATIVE - ###< create table crash_me10 (RELATIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_resignal=no # Keyword RESIGNAL - ###< create table crash_me10 (RESIGNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_restrict=yes # Keyword RESTRICT - ###< create table crash_me10 (RESTRICT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RESTRICT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_return=no # Keyword RETURN - ###< create table crash_me10 (RETURN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_returns=yes # Keyword RETURNS - ###< create table crash_me10 (RETURNS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RETURNS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_revoke=yes # Keyword REVOKE - ###< create table crash_me10 (REVOKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REVOKE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_right=yes # Keyword RIGHT - ###< create table crash_me10 (RIGHT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RIGHT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_role=no # Keyword ROLE - ###< create table crash_me10 (ROLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_rollback=no # Keyword ROLLBACK - ###< create table crash_me10 (ROLLBACK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_routine=no # Keyword ROUTINE - ###< create table crash_me10 (ROUTINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_row=no # Keyword ROW - ###< create table crash_me10 (ROW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_rows=no # Keyword ROWS - ###< create table crash_me10 (ROWS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_savepoint=no # Keyword SAVEPOINT - ###< create table crash_me10 (SAVEPOINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_schema=no # Keyword SCHEMA - ###< create table crash_me10 (SCHEMA int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_scroll=no # Keyword SCROLL - ###< create table crash_me10 (SCROLL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_search=no # Keyword SEARCH - ###< create table crash_me10 (SEARCH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_second=no # Keyword SECOND - ###< create table crash_me10 (SECOND int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_section=no # Keyword SECTION - ###< create table crash_me10 (SECTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_select=yes # Keyword SELECT - ###< create table crash_me10 (SELECT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_sequence=no # Keyword SEQUENCE - ###< create table crash_me10 (SEQUENCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_session=no # Keyword SESSION - ###< create table crash_me10 (SESSION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_session_user=no # Keyword SESSION_USER - ###< create table crash_me10 (SESSION_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_set=yes # Keyword SET - ###< create table crash_me10 (SET int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_signal=no # Keyword SIGNAL - ###< create table crash_me10 (SIGNAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_size=no # Keyword SIZE - ###< create table crash_me10 (SIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_smallint=yes # Keyword SMALLINT - ###< create table crash_me10 (SMALLINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SMALLINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_some=no # Keyword SOME - ###< create table crash_me10 (SOME int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_space=no # Keyword SPACE - ###< create table crash_me10 (SPACE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_sql=no # Keyword SQL - ###< create table crash_me10 (SQL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_sqlexception=no # Keyword SQLEXCEPTION - ###< create table crash_me10 (SQLEXCEPTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_sqlstate=no # Keyword SQLSTATE - ###< create table crash_me10 (SQLSTATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_sqlwarning=no # Keyword SQLWARNING - ###< create table crash_me10 (SQLWARNING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_structure=no # Keyword STRUCTURE - ###< create table crash_me10 (STRUCTURE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_system_user=no # Keyword SYSTEM_USER - ###< create table crash_me10 (SYSTEM_USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_table=yes # Keyword TABLE - ###< create table crash_me10 (TABLE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_temporary=no # Keyword TEMPORARY - ###< create table crash_me10 (TEMPORARY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_then=yes # Keyword THEN - ###< create table crash_me10 (THEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'THEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_time=no # Keyword TIME - ###< create table crash_me10 (TIME int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timestamp=no # Keyword TIMESTAMP - ###< create table crash_me10 (TIMESTAMP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timezone_hour=no # Keyword TIMEZONE_HOUR - ###< create table crash_me10 (TIMEZONE_HOUR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_timezone_minute=no # Keyword TIMEZONE_MINUTE - ###< create table crash_me10 (TIMEZONE_MINUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_to=yes # Keyword TO - ###< create table crash_me10 (TO int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TO int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_trailing=yes # Keyword TRAILING - ###< create table crash_me10 (TRAILING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRAILING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_transaction=no # Keyword TRANSACTION - ###< create table crash_me10 (TRANSACTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_translation=no # Keyword TRANSLATION - ###< create table crash_me10 (TRANSLATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_trigger=no # Keyword TRIGGER - ###< create table crash_me10 (TRIGGER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_true=yes # Keyword TRUE - ###< create table crash_me10 (TRUE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRUE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_under=no # Keyword UNDER - ###< create table crash_me10 (UNDER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_union=yes # Keyword UNION - ###< create table crash_me10 (UNION int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_unique=yes # Keyword UNIQUE - ###< create table crash_me10 (UNIQUE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_unknown=no # Keyword UNKNOWN - ###< create table crash_me10 (UNKNOWN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_update=yes # Keyword UPDATE - ###< create table crash_me10 (UPDATE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_usage=yes # Keyword USAGE - ###< create table crash_me10 (USAGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USAGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_user=no # Keyword USER - ###< create table crash_me10 (USER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_using=yes # Keyword USING - ###< create table crash_me10 (USING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_value=no # Keyword VALUE - ###< create table crash_me10 (VALUE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_values=yes # Keyword VALUES - ###< create table crash_me10 (VALUES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_varchar=yes # Keyword VARCHAR - ###< create table crash_me10 (VARCHAR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_variable=no # Keyword VARIABLE - ###< create table crash_me10 (VARIABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_varying=yes # Keyword VARYING - ###< create table crash_me10 (VARYING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARYING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_view=no # Keyword VIEW - ###< create table crash_me10 (VIEW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_when=yes # Keyword WHEN - ###< create table crash_me10 (WHEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_whenever=no # Keyword WHENEVER - ###< create table crash_me10 (WHENEVER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_where=yes # Keyword WHERE - ###< create table crash_me10 (WHERE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_while=no # Keyword WHILE - ###< create table crash_me10 (WHILE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_with=yes # Keyword WITH - ###< create table crash_me10 (WITH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WITH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_without=no # Keyword WITHOUT - ###< create table crash_me10 (WITHOUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_work=no # Keyword WORK - ###< create table crash_me10 (WORK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_write=yes # Keyword WRITE - ###< create table crash_me10 (WRITE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WRITE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi-92/99_year=no # Keyword YEAR - ###< create table crash_me10 (YEAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi-92/99_zone=no # Keyword ZONE - ###< create table crash_me10 (ZONE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_async=no # Keyword ASYNC - ###< create table crash_me10 (ASYNC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_avg=no # Keyword AVG - ###< create table crash_me10 (AVG int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_between=yes # Keyword BETWEEN - ###< create table crash_me10 (BETWEEN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_bit_length=no # Keyword BIT_LENGTH - ###< create table crash_me10 (BIT_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_char_length=no # Keyword CHAR_LENGTH - ###< create table crash_me10 (CHAR_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_character_length=no # Keyword CHARACTER_LENGTH - ###< create table crash_me10 (CHARACTER_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_coalesce=no # Keyword COALESCE - ###< create table crash_me10 (COALESCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_convert=yes # Keyword CONVERT - ###< create table crash_me10 (CONVERT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONVERT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_count=no # Keyword COUNT - ###< create table crash_me10 (COUNT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_exists=yes # Keyword EXISTS - ###< create table crash_me10 (EXISTS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_extract=no # Keyword EXTRACT - ###< create table crash_me10 (EXTRACT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_insensitive=no # Keyword INSENSITIVE - ###< create table crash_me10 (INSENSITIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_lower=no # Keyword LOWER - ###< create table crash_me10 (LOWER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_max=no # Keyword MAX - ###< create table crash_me10 (MAX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_min=no # Keyword MIN - ###< create table crash_me10 (MIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_nullif=no # Keyword NULLIF - ###< create table crash_me10 (NULLIF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_octet_length=no # Keyword OCTET_LENGTH - ###< create table crash_me10 (OCTET_LENGTH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_oid=no # Keyword OID - ###< create table crash_me10 (OID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_operators=no # Keyword OPERATORS - ###< create table crash_me10 (OPERATORS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_others=no # Keyword OTHERS - ###< create table crash_me10 (OTHERS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_overlaps=no # Keyword OVERLAPS - ###< create table crash_me10 (OVERLAPS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_pendant=no # Keyword PENDANT - ###< create table crash_me10 (PENDANT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_position=no # Keyword POSITION - ###< create table crash_me10 (POSITION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_private=no # Keyword PRIVATE - ###< create table crash_me10 (PRIVATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_protected=no # Keyword PROTECTED - ###< create table crash_me10 (PROTECTED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_replace=yes # Keyword REPLACE - ###< create table crash_me10 (REPLACE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REPLACE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi92_sensitive=no # Keyword SENSITIVE - ###< create table crash_me10 (SENSITIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_similar=no # Keyword SIMILAR - ###< create table crash_me10 (SIMILAR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sqlcode=no # Keyword SQLCODE - ###< create table crash_me10 (SQLCODE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sqlerror=no # Keyword SQLERROR - ###< create table crash_me10 (SQLERROR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_substring=no # Keyword SUBSTRING - ###< create table crash_me10 (SUBSTRING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_sum=no # Keyword SUM - ###< create table crash_me10 (SUM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_test=no # Keyword TEST - ###< create table crash_me10 (TEST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_there=no # Keyword THERE - ###< create table crash_me10 (THERE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_translate=no # Keyword TRANSLATE - ###< create table crash_me10 (TRANSLATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_trim=no # Keyword TRIM - ###< create table crash_me10 (TRIM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_type=no # Keyword TYPE - ###< create table crash_me10 (TYPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_upper=no # Keyword UPPER - ###< create table crash_me10 (UPPER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_virtual=no # Keyword VIRTUAL - ###< create table crash_me10 (VIRTUAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_visible=no # Keyword VISIBLE - ###< create table crash_me10 (VISIBLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi92_wait=no # Keyword WAIT - ###< create table crash_me10 (WAIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_admin=no # Keyword ADMIN - ###< create table crash_me10 (ADMIN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_aggregate=no # Keyword AGGREGATE - ###< create table crash_me10 (AGGREGATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_array=no # Keyword ARRAY - ###< create table crash_me10 (ARRAY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_binary=yes # Keyword BINARY - ###< create table crash_me10 (BINARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BINARY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_blob=yes # Keyword BLOB - ###< create table crash_me10 (BLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_class=no # Keyword CLASS - ###< create table crash_me10 (CLASS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_clob=no # Keyword CLOB - ###< create table crash_me10 (CLOB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_condition=no # Keyword CONDITION - ###< create table crash_me10 (CONDITION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_constructor=no # Keyword CONSTRUCTOR - ###< create table crash_me10 (CONSTRUCTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_contains=no # Keyword CONTAINS - ###< create table crash_me10 (CONTAINS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_cube=no # Keyword CUBE - ###< create table crash_me10 (CUBE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_current_path=no # Keyword CURRENT_PATH - ###< create table crash_me10 (CURRENT_PATH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_current_role=no # Keyword CURRENT_ROLE - ###< create table crash_me10 (CURRENT_ROLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_datalink=no # Keyword DATALINK - ###< create table crash_me10 (DATALINK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_deref=no # Keyword DEREF - ###< create table crash_me10 (DEREF int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_destroy=no # Keyword DESTROY - ###< create table crash_me10 (DESTROY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_destructor=no # Keyword DESTRUCTOR - ###< create table crash_me10 (DESTRUCTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_deterministic=no # Keyword DETERMINISTIC - ###< create table crash_me10 (DETERMINISTIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_do=no # Keyword DO - ###< create table crash_me10 (DO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_dynamic=no # Keyword DYNAMIC - ###< create table crash_me10 (DYNAMIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_every=no # Keyword EVERY - ###< create table crash_me10 (EVERY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_exit=no # Keyword EXIT - ###< create table crash_me10 (EXIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_expand=no # Keyword EXPAND - ###< create table crash_me10 (EXPAND int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_expanding=no # Keyword EXPANDING - ###< create table crash_me10 (EXPANDING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_free=no # Keyword FREE - ###< create table crash_me10 (FREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_function=no # Keyword FUNCTION - ###< create table crash_me10 (FUNCTION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_grouping=no # Keyword GROUPING - ###< create table crash_me10 (GROUPING int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_handler=no # Keyword HANDLER - ###< create table crash_me10 (HANDLER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_hast=no # Keyword HAST - ###< create table crash_me10 (HAST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_host=no # Keyword HOST - ###< create table crash_me10 (HOST int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_initialize=no # Keyword INITIALIZE - ###< create table crash_me10 (INITIALIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_inout=no # Keyword INOUT - ###< create table crash_me10 (INOUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_iterate=no # Keyword ITERATE - ###< create table crash_me10 (ITERATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_large=no # Keyword LARGE - ###< create table crash_me10 (LARGE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_lateral=no # Keyword LATERAL - ###< create table crash_me10 (LATERAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_localtime=yes # Keyword LOCALTIME - ###< create table crash_me10 (LOCALTIME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCALTIME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_localtimestamp=yes # Keyword LOCALTIMESTAMP - ###< create table crash_me10 (LOCALTIMESTAMP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCALTIMESTAMP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_ansi99_locator=no # Keyword LOCATOR - ###< create table crash_me10 (LOCATOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_meets=no # Keyword MEETS - ###< create table crash_me10 (MEETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_modifies=no # Keyword MODIFIES - ###< create table crash_me10 (MODIFIES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_nclob=no # Keyword NCLOB - ###< create table crash_me10 (NCLOB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_normalize=no # Keyword NORMALIZE - ###< create table crash_me10 (NORMALIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_ordinality=no # Keyword ORDINALITY - ###< create table crash_me10 (ORDINALITY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_out=no # Keyword OUT - ###< create table crash_me10 (OUT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_parameter=no # Keyword PARAMETER - ###< create table crash_me10 (PARAMETER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_path=no # Keyword PATH - ###< create table crash_me10 (PATH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_period=no # Keyword PERIOD - ###< create table crash_me10 (PERIOD int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_postfix=no # Keyword POSTFIX - ###< create table crash_me10 (POSTFIX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_precedes=no # Keyword PRECEDES - ###< create table crash_me10 (PRECEDES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_prefix=no # Keyword PREFIX - ###< create table crash_me10 (PREFIX int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_reads=no # Keyword READS - ###< create table crash_me10 (READS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_redo=no # Keyword REDO - ###< create table crash_me10 (REDO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_repeat=no # Keyword REPEAT - ###< create table crash_me10 (REPEAT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_result=no # Keyword RESULT - ###< create table crash_me10 (RESULT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_rollup=no # Keyword ROLLUP - ###< create table crash_me10 (ROLLUP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_sets=no # Keyword SETS - ###< create table crash_me10 (SETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_specific=no # Keyword SPECIFIC - ###< create table crash_me10 (SPECIFIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_specifictype=no # Keyword SPECIFICTYPE - ###< create table crash_me10 (SPECIFICTYPE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_start=no # Keyword START - ###< create table crash_me10 (START int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_state=no # Keyword STATE - ###< create table crash_me10 (STATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_static=no # Keyword STATIC - ###< create table crash_me10 (STATIC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_succeeds=no # Keyword SUCCEEDS - ###< create table crash_me10 (SUCCEEDS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_terminate=no # Keyword TERMINATE - ###< create table crash_me10 (TERMINATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_than=no # Keyword THAN - ###< create table crash_me10 (THAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_treat=no # Keyword TREAT - ###< create table crash_me10 (TREAT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_undo=no # Keyword UNDO - ###< create table crash_me10 (UNDO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_ansi99_until=no # Keyword UNTIL - ###< create table crash_me10 (UNTIL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_access=no # Keyword ACCESS - ###< create table crash_me10 (ACCESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_analyze=yes # Keyword ANALYZE - ###< create table crash_me10 (ANALYZE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ANALYZE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_audit=no # Keyword AUDIT - ###< create table crash_me10 (AUDIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_auto_increment=no # Keyword AUTO_INCREMENT - ###< create table crash_me10 (AUTO_INCREMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_backup=no # Keyword BACKUP - ###< create table crash_me10 (BACKUP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bdb=no # Keyword BDB - ###< create table crash_me10 (BDB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_berkeleydb=no # Keyword BERKELEYDB - ###< create table crash_me10 (BERKELEYDB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bigint=yes # Keyword BIGINT - ###< create table crash_me10 (BIGINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BIGINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_break=no # Keyword BREAK - ###< create table crash_me10 (BREAK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_browse=no # Keyword BROWSE - ###< create table crash_me10 (BROWSE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_btree=no # Keyword BTREE - ###< create table crash_me10 (BTREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_bulk=no # Keyword BULK - ###< create table crash_me10 (BULK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_change=yes # Keyword CHANGE - ###< create table crash_me10 (CHANGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHANGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_checkpoint=no # Keyword CHECKPOINT - ###< create table crash_me10 (CHECKPOINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_cluster=no # Keyword CLUSTER - ###< create table crash_me10 (CLUSTER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_clustered=no # Keyword CLUSTERED - ###< create table crash_me10 (CLUSTERED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_columns=yes # Keyword COLUMNS - ###< create table crash_me10 (COLUMNS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMNS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_comment=no # Keyword COMMENT - ###< create table crash_me10 (COMMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_compress=no # Keyword COMPRESS - ###< create table crash_me10 (COMPRESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_compute=no # Keyword COMPUTE - ###< create table crash_me10 (COMPUTE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_containstable=no # Keyword CONTAINSTABLE - ###< create table crash_me10 (CONTAINSTABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_database=yes # Keyword DATABASE - ###< create table crash_me10 (DATABASE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATABASE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_databases=yes # Keyword DATABASES - ###< create table crash_me10 (DATABASES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATABASES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_hour=yes # Keyword DAY_HOUR - ###< create table crash_me10 (DAY_HOUR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_HOUR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_minute=yes # Keyword DAY_MINUTE - ###< create table crash_me10 (DAY_MINUTE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_MINUTE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_day_second=yes # Keyword DAY_SECOND - ###< create table crash_me10 (DAY_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_dbcc=no # Keyword DBCC - ###< create table crash_me10 (DBCC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_delayed=yes # Keyword DELAYED - ###< create table crash_me10 (DELAYED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELAYED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_deny=no # Keyword DENY - ###< create table crash_me10 (DENY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_disk=no # Keyword DISK - ###< create table crash_me10 (DISK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_distinctrow=yes # Keyword DISTINCTROW - ###< create table crash_me10 (DISTINCTROW int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCTROW int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_distributed=no # Keyword DISTRIBUTED - ###< create table crash_me10 (DISTRIBUTED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_dummy=no # Keyword DUMMY - ###< create table crash_me10 (DUMMY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_dump=no # Keyword DUMP - ###< create table crash_me10 (DUMP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_enclosed=yes # Keyword ENCLOSED - ###< create table crash_me10 (ENCLOSED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ENCLOSED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_errlvl=no # Keyword ERRLVL - ###< create table crash_me10 (ERRLVL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_errors=no # Keyword ERRORS - ###< create table crash_me10 (ERRORS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_escaped=yes # Keyword ESCAPED - ###< create table crash_me10 (ESCAPED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ESCAPED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_exclusive=no # Keyword EXCLUSIVE - ###< create table crash_me10 (EXCLUSIVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_explain=yes # Keyword EXPLAIN - ###< create table crash_me10 (EXPLAIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXPLAIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_fields=yes # Keyword FIELDS - ###< create table crash_me10 (FIELDS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_file=no # Keyword FILE - ###< create table crash_me10 (FILE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_fillfactor=no # Keyword FILLFACTOR - ###< create table crash_me10 (FILLFACTOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_freetext=no # Keyword FREETEXT - ###< create table crash_me10 (FREETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_freetexttable=no # Keyword FREETEXTTABLE - ###< create table crash_me10 (FREETEXTTABLE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_fulltext=yes # Keyword FULLTEXT - ###< create table crash_me10 (FULLTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_geometry=no # Keyword GEOMETRY - ###< create table crash_me10 (GEOMETRY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_hash=no # Keyword HASH - ###< create table crash_me10 (HASH int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_high_priority=yes # Keyword HIGH_PRIORITY - ###< create table crash_me10 (HIGH_PRIORITY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HIGH_PRIORITY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_holdlock=no # Keyword HOLDLOCK - ###< create table crash_me10 (HOLDLOCK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_hour_minute=yes # Keyword HOUR_MINUTE - ###< create table crash_me10 (HOUR_MINUTE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HOUR_MINUTE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_hour_second=yes # Keyword HOUR_SECOND - ###< create table crash_me10 (HOUR_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'HOUR_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_identified=no # Keyword IDENTIFIED - ###< create table crash_me10 (IDENTIFIED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_identity_insert=no # Keyword IDENTITY_INSERT - ###< create table crash_me10 (IDENTITY_INSERT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_identitycol=no # Keyword IDENTITYCOL - ###< create table crash_me10 (IDENTITYCOL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_increment=no # Keyword INCREMENT - ###< create table crash_me10 (INCREMENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_index=yes # Keyword INDEX - ###< create table crash_me10 (INDEX int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_infile=yes # Keyword INFILE - ###< create table crash_me10 (INFILE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INFILE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_initial=no # Keyword INITIAL - ###< create table crash_me10 (INITIAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_innodb=no # Keyword INNODB - ###< create table crash_me10 (INNODB int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_keys=yes # Keyword KEYS - ###< create table crash_me10 (KEYS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'KEYS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_kill=yes # Keyword KILL - ###< create table crash_me10 (KILL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'KILL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_lineno=no # Keyword LINENO - ###< create table crash_me10 (LINENO int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_lines=yes # Keyword LINES - ###< create table crash_me10 (LINES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LINES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_load=yes # Keyword LOAD - ###< create table crash_me10 (LOAD int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOAD int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_lock=yes # Keyword LOCK - ###< create table crash_me10 (LOCK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOCK int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_long=yes # Keyword LONG - ###< create table crash_me10 (LONG int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONG int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_longblob=yes # Keyword LONGBLOB - ###< create table crash_me10 (LONGBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONGBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_longtext=yes # Keyword LONGTEXT - ###< create table crash_me10 (LONGTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LONGTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_low_priority=yes # Keyword LOW_PRIORITY - ###< create table crash_me10 (LOW_PRIORITY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOW_PRIORITY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_master_server_id=no # Keyword MASTER_SERVER_ID - ###< create table crash_me10 (MASTER_SERVER_ID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_maxextents=no # Keyword MAXEXTENTS - ###< create table crash_me10 (MAXEXTENTS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mediumblob=yes # Keyword MEDIUMBLOB - ###< create table crash_me10 (MEDIUMBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mediumint=yes # Keyword MEDIUMINT - ###< create table crash_me10 (MEDIUMINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mediumtext=yes # Keyword MEDIUMTEXT - ###< create table crash_me10 (MEDIUMTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MEDIUMTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_middleint=yes # Keyword MIDDLEINT - ###< create table crash_me10 (MIDDLEINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MIDDLEINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_minus=no # Keyword MINUS - ###< create table crash_me10 (MINUS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_minute_second=yes # Keyword MINUTE_SECOND - ###< create table crash_me10 (MINUTE_SECOND int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUTE_SECOND int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_mlslabel=no # Keyword MLSLABEL - ###< create table crash_me10 (MLSLABEL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mode=no # Keyword MODE - ###< create table crash_me10 (MODE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_mrg_myisam=no # Keyword MRG_MYISAM - ###< create table crash_me10 (MRG_MYISAM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_noaudit=no # Keyword NOAUDIT - ###< create table crash_me10 (NOAUDIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nocheck=no # Keyword NOCHECK - ###< create table crash_me10 (NOCHECK int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nocompress=no # Keyword NOCOMPRESS - ###< create table crash_me10 (NOCOMPRESS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nonclustered=no # Keyword NONCLUSTERED - ###< create table crash_me10 (NONCLUSTERED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_nowait=no # Keyword NOWAIT - ###< create table crash_me10 (NOWAIT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_number=no # Keyword NUMBER - ###< create table crash_me10 (NUMBER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_offline=no # Keyword OFFLINE - ###< create table crash_me10 (OFFLINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_offsets=no # Keyword OFFSETS - ###< create table crash_me10 (OFFSETS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_online=no # Keyword ONLINE - ###< create table crash_me10 (ONLINE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_opendatasource=no # Keyword OPENDATASOURCE - ###< create table crash_me10 (OPENDATASOURCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openquery=no # Keyword OPENQUERY - ###< create table crash_me10 (OPENQUERY int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openrowset=no # Keyword OPENROWSET - ###< create table crash_me10 (OPENROWSET int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_openxml=no # Keyword OPENXML - ###< create table crash_me10 (OPENXML int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_optimize=yes # Keyword OPTIMIZE - ###< create table crash_me10 (OPTIMIZE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTIMIZE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_optionally=yes # Keyword OPTIONALLY - ###< create table crash_me10 (OPTIONALLY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTIONALLY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_outfile=yes # Keyword OUTFILE - ###< create table crash_me10 (OUTFILE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTFILE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_over=no # Keyword OVER - ###< create table crash_me10 (OVER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_pctfree=no # Keyword PCTFREE - ###< create table crash_me10 (PCTFREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_percent=no # Keyword PERCENT - ###< create table crash_me10 (PERCENT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_plan=no # Keyword PLAN - ###< create table crash_me10 (PLAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_print=no # Keyword PRINT - ###< create table crash_me10 (PRINT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_proc=no # Keyword PROC - ###< create table crash_me10 (PROC int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_purge=yes # Keyword PURGE - ###< create table crash_me10 (PURGE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'PURGE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_raiserror=no # Keyword RAISERROR - ###< create table crash_me10 (RAISERROR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_raw=no # Keyword RAW - ###< create table crash_me10 (RAW int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_readtext=no # Keyword READTEXT - ###< create table crash_me10 (READTEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_reconfigure=no # Keyword RECONFIGURE - ###< create table crash_me10 (RECONFIGURE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_regexp=yes # Keyword REGEXP - ###< create table crash_me10 (REGEXP int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REGEXP int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_rename=yes # Keyword RENAME - ###< create table crash_me10 (RENAME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RENAME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_replication=no # Keyword REPLICATION - ###< create table crash_me10 (REPLICATION int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_require=yes # Keyword REQUIRE - ###< create table crash_me10 (REQUIRE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'REQUIRE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_resource=no # Keyword RESOURCE - ###< create table crash_me10 (RESOURCE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_restore=no # Keyword RESTORE - ###< create table crash_me10 (RESTORE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rlike=yes # Keyword RLIKE - ###< create table crash_me10 (RLIKE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'RLIKE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_rowcount=no # Keyword ROWCOUNT - ###< create table crash_me10 (ROWCOUNT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rowguidcol=no # Keyword ROWGUIDCOL - ###< create table crash_me10 (ROWGUIDCOL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rowid=no # Keyword ROWID - ###< create table crash_me10 (ROWID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rownum=no # Keyword ROWNUM - ###< create table crash_me10 (ROWNUM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rtree=no # Keyword RTREE - ###< create table crash_me10 (RTREE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_rule=no # Keyword RULE - ###< create table crash_me10 (RULE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_save=no # Keyword SAVE - ###< create table crash_me10 (SAVE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_setuser=no # Keyword SETUSER - ###< create table crash_me10 (SETUSER int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_share=no # Keyword SHARE - ###< create table crash_me10 (SHARE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_show=yes # Keyword SHOW - ###< create table crash_me10 (SHOW int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SHOW int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_shutdown=no # Keyword SHUTDOWN - ###< create table crash_me10 (SHUTDOWN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_soname=yes # Keyword SONAME - ###< create table crash_me10 (SONAME int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SONAME int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_spatial=yes # Keyword SPATIAL - ###< create table crash_me10 (SPATIAL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_big_result=yes # Keyword SQL_BIG_RESULT - ###< create table crash_me10 (SQL_BIG_RESULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_BIG_RESULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_calc_found_rows=yes # Keyword SQL_CALC_FOUND_ROWS - ###< create table crash_me10 (SQL_CALC_FOUND_ROWS int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_CALC_FOUND_ROWS int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_sql_small_result=yes # Keyword SQL_SMALL_RESULT - ###< create table crash_me10 (SQL_SMALL_RESULT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQL_SMALL_RESULT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_ssl=yes # Keyword SSL - ###< create table crash_me10 (SSL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SSL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_starting=yes # Keyword STARTING - ###< create table crash_me10 (STARTING int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'STARTING int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_statistics=no # Keyword STATISTICS - ###< create table crash_me10 (STATISTICS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_straight_join=yes # Keyword STRAIGHT_JOIN - ###< create table crash_me10 (STRAIGHT_JOIN int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'STRAIGHT_JOIN int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_striped=no # Keyword STRIPED - ###< create table crash_me10 (STRIPED int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_successful=no # Keyword SUCCESSFUL - ###< create table crash_me10 (SUCCESSFUL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_synonym=no # Keyword SYNONYM - ###< create table crash_me10 (SYNONYM int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_sysdate=no # Keyword SYSDATE - ###< create table crash_me10 (SYSDATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tables=yes # Keyword TABLES - ###< create table crash_me10 (TABLES int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLES int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_terminated=yes # Keyword TERMINATED - ###< create table crash_me10 (TERMINATED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TERMINATED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_textsize=no # Keyword TEXTSIZE - ###< create table crash_me10 (TEXTSIZE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tinyblob=yes # Keyword TINYBLOB - ###< create table crash_me10 (TINYBLOB int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYBLOB int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_tinyint=yes # Keyword TINYINT - ###< create table crash_me10 (TINYINT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYINT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_tinytext=yes # Keyword TINYTEXT - ###< create table crash_me10 (TINYTEXT int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'TINYTEXT int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_top=no # Keyword TOP - ###< create table crash_me10 (TOP int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tran=no # Keyword TRAN - ###< create table crash_me10 (TRAN int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_truncate=no # Keyword TRUNCATE - ###< create table crash_me10 (TRUNCATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_tsequal=no # Keyword TSEQUAL - ###< create table crash_me10 (TSEQUAL int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_types=no # Keyword TYPES - ###< create table crash_me10 (TYPES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_uid=no # Keyword UID - ###< create table crash_me10 (UID int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_unlock=yes # Keyword UNLOCK - ###< create table crash_me10 (UNLOCK int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNLOCK int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_unsigned=yes # Keyword UNSIGNED - ###< create table crash_me10 (UNSIGNED int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_updatetext=no # Keyword UPDATETEXT - ###< create table crash_me10 (UPDATETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_use=yes # Keyword USE - ###< create table crash_me10 (USE int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_user_resources=no # Keyword USER_RESOURCES - ###< create table crash_me10 (USER_RESOURCES int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_validate=no # Keyword VALIDATE - ###< create table crash_me10 (VALIDATE int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_varbinary=yes # Keyword VARBINARY - ###< create table crash_me10 (VARBINARY int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARBINARY int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_varchar2=no # Keyword VARCHAR2 - ###< create table crash_me10 (VARCHAR2 int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_waitfor=no # Keyword WAITFOR - ###< create table crash_me10 (WAITFOR int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_warnings=no # Keyword WARNINGS - ###< create table crash_me10 (WARNINGS int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_writetext=no # Keyword WRITETEXT - ###< create table crash_me10 (WRITETEXT int not null) - ###> OK - ###< drop table crash_me10 - ###> OK - ### - ###As far as all queries returned OK, result is NO -reserved_word_extra_xor=yes # Keyword XOR - ###< create table crash_me10 (XOR int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'XOR int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_year_month=yes # Keyword YEAR_MONTH - ###< create table crash_me10 (YEAR_MONTH int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'YEAR_MONTH int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -reserved_word_extra_zerofill=yes # Keyword ZEROFILL - ###< create table crash_me10 (ZEROFILL int not null) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ZEROFILL int not null)' at line 1 - ###< drop table crash_me10 - ###> execute error:Unknown table 'crash_me10' - ### - ###As far as some queries didnt return OK, result is YES -right_outer_join=yes # right outer join - ###< select crash_me.a from crash_me right join crash_me2 ON crash_me.a=crash_me2.a - ###> OK - ### - ###As far as all queries returned OK, result is YES -rollback_metadata=no # rollback_metadata - ###< create table crash_q (a integer not null) - ###> OK - ### - ###< insert into crash_q values (1) - ###> OK -rowid=auto_increment # Type for row id - ###< create table crash_q (a rowid) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'rowid)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###< create table crash_q (a int not null auto_increment, primary key(a)) - ###> OK - ###< drop table crash_q - ###> OK -safe_decimal_arithmetic=no # safe decimal arithmetic - ###< create table crash_me_a (a decimal(10,2),b decimal(10,2)) - ###> OK - ### - ###< insert into crash_me_a (a,b) values (11.4,18.9) - ###> OK - ### - ###<select count(*) from crash_me_a where a+b=30.3 - ###>0 - ###We expected '1' but got '0' -select_constants=yes # Select constants - ###< select 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_limit=with LIMIT # LIMIT number of rows - ###< select * from crash_me limit 1 - ###> OK -select_limit2=yes # SELECT with LIMIT #,# - ###< select * from crash_me limit 1,1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_limit3=yes # SELECT with LIMIT # OFFSET # - ###< select * from crash_me limit 1 offset 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -select_string_size=1048565 # constant string size in SELECT - ###We are trying (example with N=5): - ###select 'aaaaa' -select_table_update=yes # Update with sub select - ###< create table crash_q (a integer,b char(10)) - ###> OK - ###< insert into crash_q values(1,'c') - ###> OK - ###< update crash_q set b= (select b from crash_me where crash_q.a = crash_me.a) - ###> OK - ### - ###<select b from crash_q - ###>a - ### - ###< drop table crash_q - ###> OK -select_without_from=yes # SELECT without FROM - ###< select 1 - ###> OK - ### - ###As far as all queries returned OK, result is YES -server_version=MySQL 4.1.2 alpha # server version -simple_joins=yes # ANSI SQL simple joins - ###< select crash_me.a from crash_me, crash_me t0 - ###> OK - ### - ###As far as all queries returned OK, result is YES -sorted_group_by=yes # Group by always sorted - ###< create table crash_me_t1 (a int not null, b int not null) - ###> OK - ###< insert into crash_me_t1 values (1,1) - ###> OK - ###< insert into crash_me_t1 values (1,2) - ###> OK - ###< insert into crash_me_t1 values (3,1) - ###> OK - ###< insert into crash_me_t1 values (3,2) - ###> OK - ###< insert into crash_me_t1 values (2,2) - ###> OK - ###< insert into crash_me_t1 values (2,1) - ###> OK - ###< create table crash_me_t2 (a int not null, b int not null) - ###> OK - ###< create index crash_me_t2_ind on crash_me_t2 (a) - ###> OK - ###< insert into crash_me_t2 values (1,3) - ###> OK - ###< insert into crash_me_t2 values (3,1) - ###> OK - ###< insert into crash_me_t2 values (2,2) - ###> OK - ###< insert into crash_me_t2 values (1,1) - ###> OK - ### - ###< select crash_me_t1.a,crash_me_t2.b from crash_me_t1,crash_me_t2 where crash_me_t1.a=crash_me_t2.a group by crash_me_t1.a,crash_me_t2.b - ### > 1,1 - ### > 1,3 - ### > 2,2 - ### > 3,1 - ### - ### Check recordset: - ### 1,1 expected: 1,1 - ### 1,3 expected: 1,3 - ### 2,2 expected: 2,2 - ### 3,1 expected: 3,1 - ### Recordset corresponds with template - ###< drop table crash_me_t1 - ###> OK - ###< drop table crash_me_t2 - ###> OK -storage_of_float=round # Storage of float values - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.14) - ###> OK - ### - ###<select q1 from crash_q - ###>1.1 - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.16) - ###> OK - ### - ###<select q1 from crash_q - ###>1.2 - ###We expected '1.1' but got '1.2' - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.14) - ###> OK - ### - ###<select q1 from crash_q - ###>1.1 - ### - ###< drop table crash_q - ###> OK - ### - ###< create table crash_q (q1 float(4,1)) - ###> OK - ###< insert into crash_q values(1.16) - ###> OK - ### - ###<select q1 from crash_q - ###>1.2 - ### - ###< drop table crash_q - ###> OK -subqueries=yes # subqueries - ###< select a from crash_me where crash_me.a in (select max(a) from crash_me) - ###> OK - ### - ###As far as all queries returned OK, result is YES -table_alias=yes # Table alias - ###< select b.a from crash_me as b - ###> OK - ### - ###As far as all queries returned OK, result is YES -table_name_case=no # case independent table names - ###< create table crash_q (q integer) - ###> OK - ###< drop table CRASH_Q - ###> execute error:Unknown table 'CRASH_Q' - ### - ###As far as some queries didnt return OK, result is NO -table_wildcard=yes # Select table_name.* - ###< select crash_me.* from crash_me - ###> OK - ### - ###As far as all queries returned OK, result is YES -temporary_table=yes # temporary tables - ###< create temporary table crash_q (q integer not null) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -time_format_EUR=error # Supports HH.MM.SS (EUR) time format - ###< insert into crash_me_t(a) values ('20.08.16') - ###> OK - ### - ###<select a from crash_me_t - ###>00:00:20 - ###We expected '20:08:16' but got '00:00:20' - ### - ###< delete from crash_me_t - ###> OK -time_format_HHHHMMSS=yes # Supports HHHHmmSS time format - ###< insert into crash_me_t(a) values ('00200816') - ###> OK - ### - ###<select a from crash_me_t - ###>20:08:16 - ### - ###< delete from crash_me_t - ###> OK -time_format_ISO=yes # Supports HH:MM:SS (ISO) time format - ###< insert into crash_me_t(a) values ('20:08:16') - ###> OK - ### - ###<select a from crash_me_t - ###>20:08:16 - ### - ###< delete from crash_me_t - ###> OK -time_format_USA=error # Supports HH:MM:SS (AM|PM) time format - ###< insert into crash_me_t(a) values ('08:08:16 PM') - ###> OK - ### - ###<select a from crash_me_t - ###>08:08:16 - ###We expected '20:08:16' but got '08:08:16' - ### - ###< delete from crash_me_t - ###> OK -time_format_inresult=iso # Time format in result - ###< insert into crash_me_t values(CURRENT_TIME) - ###> OK - ### - ###< select a from crash_me_t - ###> 13:49:05 - ###< delete from crash_me_t - ###> OK -transactions=yes # transactions - ###<select * from crash_q - ###>1 - ###We expected '' but got '1' -truncate_table=yes # truncate - ###< create table crash_q (a integer, b integer,c1 CHAR(10)) - ###> OK - ###< truncate table crash_q - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_abstime=no # Type abstime - ###< create table crash_q (q abstime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'abstime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_bfile=no # Type bfile - ###< create table crash_q (q bfile) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'bfile)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_blob=yes # Type blob - ###< create table crash_q (q blob) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_bool=yes # Type bool - ###< create table crash_q (q bool) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_box=no # Type box - ###< create table crash_q (q box) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'box)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_byte=no # Type byte - ###< create table crash_q (q byte) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'byte)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_char(1_arg)_binary=yes # Type char(1 arg) binary - ###< create table crash_q (q char(10) binary) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_cidr=no # Type cidr - ###< create table crash_q (q cidr) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'cidr)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_circle=no # Type circle - ###< create table crash_q (q circle) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'circle)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_clob=no # Type clob - ###< create table crash_q (q clob) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'clob)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_datetime=yes # Type datetime - ###< create table crash_q (q datetime) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_double=yes # Type double - ###< create table crash_q (q double) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_enum(1_arg)=yes # Type enum(1 arg) - ###< create table crash_q (q enum('red')) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float(2_arg)=yes # Type float(2 arg) - ###< create table crash_q (q float(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float4=yes # Type float4 - ###< create table crash_q (q float4) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_float8=yes # Type float8 - ###< create table crash_q (q float8) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_image=no # Type image - ###< create table crash_q (q image) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'image)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_inet=no # Type inet - ###< create table crash_q (q inet) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'inet)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_int(1_arg)_zerofill=yes # Type int(1 arg) zerofill - ###< create table crash_q (q int(5) zerofill) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int1=yes # Type int1 - ###< create table crash_q (q int1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int2=yes # Type int2 - ###< create table crash_q (q int2) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int3=yes # Type int3 - ###< create table crash_q (q int3) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int4=yes # Type int4 - ###< create table crash_q (q int4) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int8=yes # Type int8 - ###< create table crash_q (q int8) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int_auto_increment=yes # Type int not null auto_increment - ###< create table crash_q (q int not null auto_increment,unique(q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_int_identity=no # Type int not null identity - ###< create table crash_q (q int not null identity,unique(q)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'identity,unique(q))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_int_unsigned=yes # Type int unsigned - ###< create table crash_q (q int unsigned) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_interval=no # Type interval - ###< create table crash_q (q interval) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_line=no # Type line - ###< create table crash_q (q line) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'line)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_long=yes # Type long - ###< create table crash_q (q long) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_long_raw=no # Type long raw - ###< create table crash_q (q long raw) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'raw)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_long_varbinary=yes # Type long varbinary - ###< create table crash_q (q long varbinary) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) - ###< create table crash_q (q long varchar(1)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(1))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_lseg=no # Type lseg - ###< create table crash_q (q lseg) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'lseg)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_macaddr=no # Type macaddr - ###< create table crash_q (q macaddr) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'macaddr)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_mediumint=yes # Type mediumint - ###< create table crash_q (q mediumint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_mediumtext=yes # Type mediumtext - ###< create table crash_q (q mediumtext) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_middleint=yes # Type middleint - ###< create table crash_q (q middleint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_mlslabel=no # Type mlslabel - ###< create table crash_q (q mlslabel) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'mlslabel)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_money=no # Type money - ###< create table crash_q (q money) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'money)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_nclob=no # Type nclob - ###< create table crash_q (q nclob) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'nclob)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number=no # Type number - ###< create table crash_q (q number) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number(1_arg)=no # Type number(1 arg) - ###< create table crash_q (q number(9)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number(9))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_number(2_arg)=no # Type number(2 arg) - ###< create table crash_q (q number(9,2)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'number(9,2))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) - ###< create table crash_q (q nvarchar2(16)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'nvarchar2(16))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_path=no # Type path - ###< create table crash_q (q path) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'path)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_point=yes # Type point - ###< create table crash_q (q point) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_polygon=yes # Type polygon - ###< create table crash_q (q polygon) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_raw(1_arg)=no # Type raw(1 arg) - ###< create table crash_q (q raw(16)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'raw(16))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_reltime=no # Type reltime - ###< create table crash_q (q reltime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'reltime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_rowid=no # Type rowid - ###< create table crash_q (q rowid) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'rowid)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_serial=yes # Type serial - ###< create table crash_q (q serial) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_set(1_arg)=yes # Type set(1 arg) - ###< create table crash_q (q set('red')) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_smalldatetime=no # Type smalldatetime - ###< create table crash_q (q smalldatetime) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smalldatetime)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_smallfloat=no # Type smallfloat - ###< create table crash_q (q smallfloat) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smallfloat)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_smallmoney=no # Type smallmoney - ###< create table crash_q (q smallmoney) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'smallmoney)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_text=yes # Type text - ###< create table crash_q (q text) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_text(1_arg)=yes # Type text(1 arg) - ###< create table crash_q (q text(10)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_extra_timespan=no # Type timespan - ###< create table crash_q (q timespan) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'timespan)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_uint=no # Type uint - ###< create table crash_q (q uint) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'uint)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) - ###< create table crash_q (q varchar2(257)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar2(257))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_extra_year=yes # Type year - ###< create table crash_q (q year) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_bigint=yes # Type bigint - ###< create table crash_q (q bigint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_binary(1_arg)=yes # Type binary(1 arg) - ###< create table crash_q (q binary(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_datetime=yes # Type datetime - ###< create table crash_q (q datetime) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_tinyint=yes # Type tinyint - ###< create table crash_q (q tinyint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) - ###< create table crash_q (q varbinary(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit=yes # Type bit - ###< create table crash_q (q bit) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit(1_arg)=yes # Type bit(1 arg) - ###< create table crash_q (q bit(2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) - ###< create table crash_q (q bit varying(2)) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'varying(2))' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_boolean=yes # Type boolean - ###< create table crash_q (q boolean) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_char(1_arg)=yes # Type char(1 arg) - ###< create table crash_q (q char(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) - ###< create table crash_q (q char varying(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_character(1_arg)=yes # Type character(1 arg) - ###< create table crash_q (q character(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) - ###< create table crash_q (q character varying(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_date=yes # Type date - ###< create table crash_q (q date) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_dec(2_arg)=yes # Type dec(2 arg) - ###< create table crash_q (q dec(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) - ###< create table crash_q (q decimal(6,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_double_precision=yes # Type double precision - ###< create table crash_q (q double precision) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_float=yes # Type float - ###< create table crash_q (q float) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_float(1_arg)=yes # Type float(1 arg) - ###< create table crash_q (q float(8)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_int=yes # Type int - ###< create table crash_q (q int) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_integer=yes # Type integer - ###< create table crash_q (q integer) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_interval_day=no # Type interval day - ###< create table crash_q (q interval day) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_hour=no # Type interval day to hour - ###< create table crash_q (q interval day to hour) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to hour)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_minute=no # Type interval day to minute - ###< create table crash_q (q interval day to minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_day_to_second=no # Type interval day to second - ###< create table crash_q (q interval day to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval day to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour=no # Type interval hour - ###< create table crash_q (q interval hour) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour_to_minute=no # Type interval hour to minute - ###< create table crash_q (q interval hour to minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour to minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_hour_to_second=no # Type interval hour to second - ###< create table crash_q (q interval hour to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval hour to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_minute=no # Type interval minute - ###< create table crash_q (q interval minute) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval minute)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_minute_to_second=no # Type interval minute to second - ###< create table crash_q (q interval minute to second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval minute to second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_month=no # Type interval month - ###< create table crash_q (q interval month) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval month)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_second=no # Type interval second - ###< create table crash_q (q interval second) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval second)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_year=no # Type interval year - ###< create table crash_q (q interval year) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval year)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_interval_year_to_month=no # Type interval year to month - ###< create table crash_q (q interval year to month) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval year to month)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) - ###< create table crash_q (q national char varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_national_character(1_arg)=yes # Type national character(1 arg) - ###< create table crash_q (q national character(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) - ###< create table crash_q (q national character varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) - ###< create table crash_q (q nchar(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) - ###< create table crash_q (q nchar varying(20)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) - ###< create table crash_q (q numeric(9,2)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_real=yes # Type real - ###< create table crash_q (q real) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_smallint=yes # Type smallint - ###< create table crash_q (q smallint) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_time=yes # Type time - ###< create table crash_q (q time) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_timestamp=yes # Type timestamp - ###< create table crash_q (q timestamp) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone - ###< create table crash_q (q timestamp with time zone) - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'with time zone)' at line 1 - ###< drop table crash_q - ###> execute error:Unknown table 'crash_q' - ### - ###As far as some queries didnt return OK, result is NO -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) - ###< create table crash_q (q varchar(1)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -union=yes # union - ###< select * from crash_me union select a,b from crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_all=yes # union all - ###< select * from crash_me union all select a,b from crash_me3 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_all_incompat=yes # union all (incompatible lists) - ###< select * from crash_me union all select a,b from crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -union_incompat=yes # union (incompatible lists) - ###< select * from crash_me union select a,b from crash_me2 - ###> OK - ### - ###As far as all queries returned OK, result is YES -unique_in_create=yes # unique in create table - ###< create table crash_q (q integer not null,unique (q)) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -unique_null_in_create=yes # unique null in create - ###< create table crash_q (q integer,unique (q)) - ###> OK - ###< insert into crash_q (q) values (NULL) - ###> OK - ###< insert into crash_q (q) values (NULL) - ###> OK - ###< insert into crash_q (q) values (1) - ###> OK - ###< drop table crash_q - ###> OK - ### - ###As far as all queries returned OK, result is YES -value_of_false=0 # Value of FALSE - ###<select FALSE - ###>0 -value_of_true=1 # Value of TRUE - ###<select TRUE - ###>1 -views=no # views - ###< create view crash_q as select a from crash_me - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'view crash_q as select a from crash_me' at line 1 - ###< drop view crash_q - ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'view crash_q' at line 1 - ### - ###As far as some queries didnt return OK, result is NO -where_string_size=1048539 # constant string size in where - ###We are trying (example with N=5): - ###select a from crash_me where b >='11111' diff --git a/sql-bench/limits/mysql.cfg b/sql-bench/limits/mysql.cfg deleted file mode 100644 index 76565cb16fff8ddc5c76a2f20f4a08b48f19648c..0000000000000000000000000000000000000000 --- a/sql-bench/limits/mysql.cfg +++ /dev/null @@ -1,1119 +0,0 @@ -#This file is automaticly generated by crash-me 1.61 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=yes # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=yes # Alter table alter column default -alter_change_col=yes # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=no # Alter table drop constraint -alter_drop_foreign_key=with drop foreign key # Alter table drop foreign key -alter_drop_primary_key=drop primary key # Alter table drop primary key -alter_drop_unique=with drop key # Alter table drop unique -alter_modify_col=yes # Alter table modify column -alter_rename_table=yes # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=_rowid # Automatic row id -binary_numbers=yes # binary numbers (0b1001) -binary_strings=yes # binary strings (b'0110') -case_insensitive_strings=yes # Case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=yes # # as comment -comment_--=yes # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=101 # Simultaneous connections (installation default) -constraint_check=syntax only # Column constraints -constraint_check_named=syntax only # Named constraints -constraint_check_table=syntax only # Table constraints -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.61 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=yes # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=yes # create table from select -cross_join=yes # cross join (same as from a,b) -date_as_string=yes # String functions on date columns -date_format_EUR=error # Supports DD.MM.YYYY (EUR) format -date_format_EUR_with_date=error # Supports DATE 'DD.MM.YYYY' (EUR) format -date_format_ISO=yes # Supports YYYY-MM-DD (ISO) format -date_format_ISO_with_date=yes # Supports DATE 'YYYY-MM-DD' (ISO) format -date_format_USA=error # Supports MM/DD/YYYY format -date_format_USA_with_date=error # Supports DATE 'MM/DD/YYYY' format -date_format_YYYYMMDD=yes # Supports YYYYMMDD format -date_format_YYYYMMDD_with_date=yes # Supports DATE 'YYYYMMDD' format -date_format_inresult=iso # Date format in result -date_infinity=error # Supports 'infinity dates -date_last=yes # Supports 9999-12-31 dates -date_one=yes # Supports 0001-01-01 dates -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=yes # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -dont_require_cast_to_float=yes # No need to cast from integer to float -double_quotes=yes # Double '' as ' in strings -drop_if_exists=yes # drop table if exists -drop_index=with 'ON' # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=yes # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -field_name_case=yes # case independent field names -float_int_expr=yes # mixing of integer and float in expression -foreign_key=syntax only # foreign keys -full_outer_join=no # full outer join -func_extra_!=yes # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=yes # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_adddate=yes # Function ADDDATE -func_extra_addtime=yes # Function ADDTIME -func_extra_alpha=no # Function ALPHA -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_ascii_string=error # Function ASCII in string cast -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=yes # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) -func_extra_bit_count=yes # Function BIT_COUNT -func_extra_ceil=yes # Function CEIL -func_extra_char_date=no # Function CHAR (conversation date) -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_chr_str=no # Function CHR (any type to string) -func_extra_concat_as_+=error # Function concatenation with + -func_extra_concat_list=yes # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date=yes # Function DATE -func_extra_date_format=yes # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datediff2arg=yes # Function DATEDIFF (2 arg) -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_day=yes # Function DAY -func_extra_decode=no # Function DECODE -func_extra_ebcdic_string=no # Function EBCDIC in string cast -func_extra_elt=yes # Function ELT -func_extra_encrypt=yes # Function ENCRYPT -func_extra_expand2arg=no # Function EXPAND -func_extra_field=yes # Function FIELD -func_extra_fixed=no # Function FIXED -func_extra_float=no # Function FLOAT -func_extra_format=yes # Function FORMAT -func_extra_from_days=yes # Function FROM_DAYS -func_extra_from_unixtime=yes # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=yes # Function GREATEST -func_extra_hex=yes # Function HEX -func_extra_if=yes # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_index=no # Function INDEX -func_extra_initcap=no # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=yes # Function INTERVAL -func_extra_last_day=yes # Function LAST_DAY -func_extra_last_insert_id=yes # Function LAST_INSERT_ID -func_extra_least=yes # Function LEAST -func_extra_length=error # Function LENGTH -func_extra_lengthb=no # Function LENGTHB -func_extra_lfill3arg=no # Function LFILL (3 arg) -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT -func_extra_ln=yes # Function LN -func_extra_log(m_n)=yes # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_ltrim2arg=no # Function LTRIM (2 arg) -func_extra_makedate=yes # Function MAKEDATE -func_extra_maketime=yes # Function MAKETIME -func_extra_mapchar=no # Function MAPCHAR -func_extra_mdy=no # Function MDY -func_extra_microsecond=yes # Function MICROSECOND -func_extra_mid=yes # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_noround=no # Function NOROUND -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_num=no # Function NUM -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=yes # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=yes # Function PERIOD_ADD -func_extra_period_diff=yes # Function PERIOD_DIFF -func_extra_pow=yes # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=yes # Function REGEXP in SELECT -func_extra_replace2arg=no # Function REPLACE (2 arg) -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_rfill3arg=no # Function RFILL (3 arg) -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_rpad4arg=no # Function RPAD (4 arg) -func_extra_rtrim2arg=no # Function RTRIM (2 arg) -func_extra_sec_to_time=yes # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=yes # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_subdate=yes # Function SUBDATE -func_extra_substr2arg=yes # Function SUBSTR (2 arg) -func_extra_substr3arg=yes # Function SUBSTR (3 arg) -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=yes # Function SUBSTRING_INDEX -func_extra_subtime=yes # Function SUBTIME -func_extra_sysdate=yes # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time=yes # Function TIME -func_extra_time_to_sec=yes # Function TIME_TO_SEC -func_extra_timediff=yes # Function TIMEDIFF -func_extra_timestamp=error # Function TIMESTAMP -func_extra_to_days=yes # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim1arg=yes # Function TRIM (1 arg) -func_extra_trim2arg=no # Function TRIM (2 arg) -func_extra_trim_many_char=error # Function TRIM; Many char extension -func_extra_trim_substring=yes # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_trunc1arg=no # Function TRUNC (1 arg) -func_extra_uid=no # Function UID -func_extra_unix_timestamp=yes # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_value=no # Function VALUE -func_extra_version=yes # Function VERSION -func_extra_weekday=yes # Function WEEKDAY -func_extra_weekofyear=yes # Function WEEKOFYEAR -func_extra_|=yes # Function | (bitwise or) -func_extra_||=yes # Function OR as '||' -func_extra_~*=no # Function ~* (case insensitive compare) -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=yes # Function TIMESTAMPADD -func_odbc_timestampdiff=error # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=USA # WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=yes # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=error # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_coalesce=yes # Function COALESCE -func_sql_concat_as_||=error # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=yes # CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=yes # Function LOCALTIME -func_sql_localtimestamp=yes # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=with_parenthesis # SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=with_parenthesis # SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=with_parenthesis # USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=yes # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=yes # Group function BIT_AND -group_func_extra_bit_or=yes # Group function BIT_OR -group_func_extra_count_distinct_list=yes # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=yes # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=yes # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_many_distinct_functions=yes # Group functions with several distinct -group_on_unused=yes # Group on unused column -has_true_false=yes # TRUE and FALSE -having=yes # Having -having_with_alias=yes # Having on alias -having_with_group=yes # Having with group function -hex_numbers=yes # hex numbers (0x41) -hex_strings=yes # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=yes # index in create table -index_namespace=yes # different namespace for index -index_parts=yes # index on column part (extension) -inner_join=yes # inner join -insert_default_values=no # INSERT DEFAULT VALUES -insert_empty_string=yes # insert empty string -insert_multi_value=yes # INSERT with Value lists -insert_select=yes # insert INTO ... SELECT ... -insert_with_default=yes # INSERT with DEFAULT -insert_with_empty_value_list=no # INSERT with empty value list -insert_with_set=yes # INSERT with set syntax -intersect=no # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=61 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -length_of_varchar_field=actual length # CHARACTER_LENGTH(varchar_field) -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=1 # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=255 # max char() size -max_column_name=64 # column name length -max_columns=2599 # Columns in table -max_conditions=85660 # OR and AND in WHERE -max_expressions=580 # simple expressions -max_index=+64 # max index -max_index_length=1000 # index length -max_index_name=64 # index name length -max_index_part_length=255 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=1000 # index varchar part length -max_row_length=65534 # max table row length (without blobs) -max_row_length_with_null=65502 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=580 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=64 # table name length -max_text_size=1048543 # max text or blob size -max_unique_index=+64 # unique indexes -max_varchar_size=1048543 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=yes # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_null_in_unique=yes # null in unique index -multi_strings=yes # Multiple line strings -multi_table_delete=yes # DELETE FROM table1,table2... -multi_table_update=yes # Update with many tables -natural_join=yes # natural join -natural_join_incompat=yes # natural join (incompatible lists) -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -not_id_between=yes # NOT ID BETWEEN interprets as ID NOT BETWEEN -null_concat_expr=yes # Is concat('a',NULL) = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique index -null_num_expr=yes # Is 1+NULL = NULL -nulls_in_unique=yes # null combination in unique index -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.6.8-my i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_on_unused=yes # Order by on unused column -position_of_null=first # Where is null values in sorted recordset -position_of_null_desc=last # Where is null values in sorted recordset (DESC) -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=1048574 # query size -quote_ident_with_"=error # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=yes # ` as identifier quote -quote_ident_with_dbl_"=no # Double "" in identifiers as " -quote_with_"=yes # Allows ' and " as string markers -recursive_subqueries=+64 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=yes # rename table -repeat_string_size=1048576 # return string size from function -reserved_word_ansi-92/99_absolute=no # Keyword ABSOLUTE -reserved_word_ansi-92/99_action=no # Keyword ACTION -reserved_word_ansi-92/99_add=yes # Keyword ADD -reserved_word_ansi-92/99_after=no # Keyword AFTER -reserved_word_ansi-92/99_alias=no # Keyword ALIAS -reserved_word_ansi-92/99_all=yes # Keyword ALL -reserved_word_ansi-92/99_allocate=no # Keyword ALLOCATE -reserved_word_ansi-92/99_alter=yes # Keyword ALTER -reserved_word_ansi-92/99_and=yes # Keyword AND -reserved_word_ansi-92/99_any=no # Keyword ANY -reserved_word_ansi-92/99_are=no # Keyword ARE -reserved_word_ansi-92/99_as=yes # Keyword AS -reserved_word_ansi-92/99_asc=yes # Keyword ASC -reserved_word_ansi-92/99_assertion=no # Keyword ASSERTION -reserved_word_ansi-92/99_at=no # Keyword AT -reserved_word_ansi-92/99_authorization=no # Keyword AUTHORIZATION -reserved_word_ansi-92/99_before=yes # Keyword BEFORE -reserved_word_ansi-92/99_begin=no # Keyword BEGIN -reserved_word_ansi-92/99_bit=no # Keyword BIT -reserved_word_ansi-92/99_boolean=no # Keyword BOOLEAN -reserved_word_ansi-92/99_both=yes # Keyword BOTH -reserved_word_ansi-92/99_breadth=no # Keyword BREADTH -reserved_word_ansi-92/99_by=yes # Keyword BY -reserved_word_ansi-92/99_call=yes # Keyword CALL -reserved_word_ansi-92/99_cascade=yes # Keyword CASCADE -reserved_word_ansi-92/99_cascaded=no # Keyword CASCADED -reserved_word_ansi-92/99_case=yes # Keyword CASE -reserved_word_ansi-92/99_cast=no # Keyword CAST -reserved_word_ansi-92/99_catalog=no # Keyword CATALOG -reserved_word_ansi-92/99_char=yes # Keyword CHAR -reserved_word_ansi-92/99_character=yes # Keyword CHARACTER -reserved_word_ansi-92/99_check=yes # Keyword CHECK -reserved_word_ansi-92/99_close=no # Keyword CLOSE -reserved_word_ansi-92/99_collate=yes # Keyword COLLATE -reserved_word_ansi-92/99_collation=no # Keyword COLLATION -reserved_word_ansi-92/99_column=yes # Keyword COLUMN -reserved_word_ansi-92/99_commit=no # Keyword COMMIT -reserved_word_ansi-92/99_completion=no # Keyword COMPLETION -reserved_word_ansi-92/99_connect=no # Keyword CONNECT -reserved_word_ansi-92/99_connection=yes # Keyword CONNECTION -reserved_word_ansi-92/99_constraint=yes # Keyword CONSTRAINT -reserved_word_ansi-92/99_constraints=no # Keyword CONSTRAINTS -reserved_word_ansi-92/99_continue=yes # Keyword CONTINUE -reserved_word_ansi-92/99_corresponding=no # Keyword CORRESPONDING -reserved_word_ansi-92/99_create=yes # Keyword CREATE -reserved_word_ansi-92/99_cross=yes # Keyword CROSS -reserved_word_ansi-92/99_current=no # Keyword CURRENT -reserved_word_ansi-92/99_current_date=yes # Keyword CURRENT_DATE -reserved_word_ansi-92/99_current_time=yes # Keyword CURRENT_TIME -reserved_word_ansi-92/99_current_timestamp=yes # Keyword CURRENT_TIMESTAMP -reserved_word_ansi-92/99_current_user=yes # Keyword CURRENT_USER -reserved_word_ansi-92/99_cursor=yes # Keyword CURSOR -reserved_word_ansi-92/99_cycle=no # Keyword CYCLE -reserved_word_ansi-92/99_data=no # Keyword DATA -reserved_word_ansi-92/99_date=no # Keyword DATE -reserved_word_ansi-92/99_day=no # Keyword DAY -reserved_word_ansi-92/99_deallocate=no # Keyword DEALLOCATE -reserved_word_ansi-92/99_dec=yes # Keyword DEC -reserved_word_ansi-92/99_decimal=yes # Keyword DECIMAL -reserved_word_ansi-92/99_declare=yes # Keyword DECLARE -reserved_word_ansi-92/99_default=yes # Keyword DEFAULT -reserved_word_ansi-92/99_deferrable=no # Keyword DEFERRABLE -reserved_word_ansi-92/99_deferred=no # Keyword DEFERRED -reserved_word_ansi-92/99_delete=yes # Keyword DELETE -reserved_word_ansi-92/99_depth=no # Keyword DEPTH -reserved_word_ansi-92/99_desc=yes # Keyword DESC -reserved_word_ansi-92/99_describe=yes # Keyword DESCRIBE -reserved_word_ansi-92/99_descriptor=no # Keyword DESCRIPTOR -reserved_word_ansi-92/99_diagnostics=no # Keyword DIAGNOSTICS -reserved_word_ansi-92/99_dictionary=no # Keyword DICTIONARY -reserved_word_ansi-92/99_disconnect=no # Keyword DISCONNECT -reserved_word_ansi-92/99_distinct=yes # Keyword DISTINCT -reserved_word_ansi-92/99_domain=no # Keyword DOMAIN -reserved_word_ansi-92/99_double=yes # Keyword DOUBLE -reserved_word_ansi-92/99_drop=yes # Keyword DROP -reserved_word_ansi-92/99_each=yes # Keyword EACH -reserved_word_ansi-92/99_else=yes # Keyword ELSE -reserved_word_ansi-92/99_elseif=yes # Keyword ELSEIF -reserved_word_ansi-92/99_end=no # Keyword END -reserved_word_ansi-92/99_end-exec=yes # Keyword END-EXEC -reserved_word_ansi-92/99_equals=no # Keyword EQUALS -reserved_word_ansi-92/99_escape=no # Keyword ESCAPE -reserved_word_ansi-92/99_except=no # Keyword EXCEPT -reserved_word_ansi-92/99_exception=no # Keyword EXCEPTION -reserved_word_ansi-92/99_exec=no # Keyword EXEC -reserved_word_ansi-92/99_execute=no # Keyword EXECUTE -reserved_word_ansi-92/99_external=no # Keyword EXTERNAL -reserved_word_ansi-92/99_false=yes # Keyword FALSE -reserved_word_ansi-92/99_fetch=yes # Keyword FETCH -reserved_word_ansi-92/99_first=no # Keyword FIRST -reserved_word_ansi-92/99_float=yes # Keyword FLOAT -reserved_word_ansi-92/99_for=yes # Keyword FOR -reserved_word_ansi-92/99_foreign=yes # Keyword FOREIGN -reserved_word_ansi-92/99_found=no # Keyword FOUND -reserved_word_ansi-92/99_from=yes # Keyword FROM -reserved_word_ansi-92/99_full=no # Keyword FULL -reserved_word_ansi-92/99_general=no # Keyword GENERAL -reserved_word_ansi-92/99_get=no # Keyword GET -reserved_word_ansi-92/99_global=no # Keyword GLOBAL -reserved_word_ansi-92/99_go=no # Keyword GO -reserved_word_ansi-92/99_goto=yes # Keyword GOTO -reserved_word_ansi-92/99_grant=yes # Keyword GRANT -reserved_word_ansi-92/99_group=yes # Keyword GROUP -reserved_word_ansi-92/99_having=yes # Keyword HAVING -reserved_word_ansi-92/99_hour=no # Keyword HOUR -reserved_word_ansi-92/99_identity=no # Keyword IDENTITY -reserved_word_ansi-92/99_if=yes # Keyword IF -reserved_word_ansi-92/99_ignore=yes # Keyword IGNORE -reserved_word_ansi-92/99_immediate=no # Keyword IMMEDIATE -reserved_word_ansi-92/99_in=yes # Keyword IN -reserved_word_ansi-92/99_indicator=no # Keyword INDICATOR -reserved_word_ansi-92/99_initially=no # Keyword INITIALLY -reserved_word_ansi-92/99_inner=yes # Keyword INNER -reserved_word_ansi-92/99_input=no # Keyword INPUT -reserved_word_ansi-92/99_insert=yes # Keyword INSERT -reserved_word_ansi-92/99_int=yes # Keyword INT -reserved_word_ansi-92/99_integer=yes # Keyword INTEGER -reserved_word_ansi-92/99_intersect=no # Keyword INTERSECT -reserved_word_ansi-92/99_interval=yes # Keyword INTERVAL -reserved_word_ansi-92/99_into=yes # Keyword INTO -reserved_word_ansi-92/99_is=yes # Keyword IS -reserved_word_ansi-92/99_isolation=no # Keyword ISOLATION -reserved_word_ansi-92/99_join=yes # Keyword JOIN -reserved_word_ansi-92/99_key=yes # Keyword KEY -reserved_word_ansi-92/99_language=no # Keyword LANGUAGE -reserved_word_ansi-92/99_last=no # Keyword LAST -reserved_word_ansi-92/99_leading=yes # Keyword LEADING -reserved_word_ansi-92/99_leave=yes # Keyword LEAVE -reserved_word_ansi-92/99_left=yes # Keyword LEFT -reserved_word_ansi-92/99_less=no # Keyword LESS -reserved_word_ansi-92/99_level=no # Keyword LEVEL -reserved_word_ansi-92/99_like=yes # Keyword LIKE -reserved_word_ansi-92/99_limit=yes # Keyword LIMIT -reserved_word_ansi-92/99_local=no # Keyword LOCAL -reserved_word_ansi-92/99_loop=yes # Keyword LOOP -reserved_word_ansi-92/99_match=yes # Keyword MATCH -reserved_word_ansi-92/99_minute=no # Keyword MINUTE -reserved_word_ansi-92/99_modify=no # Keyword MODIFY -reserved_word_ansi-92/99_module=no # Keyword MODULE -reserved_word_ansi-92/99_month=no # Keyword MONTH -reserved_word_ansi-92/99_names=no # Keyword NAMES -reserved_word_ansi-92/99_national=no # Keyword NATIONAL -reserved_word_ansi-92/99_natural=yes # Keyword NATURAL -reserved_word_ansi-92/99_nchar=no # Keyword NCHAR -reserved_word_ansi-92/99_new=no # Keyword NEW -reserved_word_ansi-92/99_next=no # Keyword NEXT -reserved_word_ansi-92/99_no=no # Keyword NO -reserved_word_ansi-92/99_none=no # Keyword NONE -reserved_word_ansi-92/99_not=yes # Keyword NOT -reserved_word_ansi-92/99_null=yes # Keyword NULL -reserved_word_ansi-92/99_numeric=yes # Keyword NUMERIC -reserved_word_ansi-92/99_object=no # Keyword OBJECT -reserved_word_ansi-92/99_of=no # Keyword OF -reserved_word_ansi-92/99_off=no # Keyword OFF -reserved_word_ansi-92/99_old=no # Keyword OLD -reserved_word_ansi-92/99_on=yes # Keyword ON -reserved_word_ansi-92/99_only=no # Keyword ONLY -reserved_word_ansi-92/99_open=no # Keyword OPEN -reserved_word_ansi-92/99_operation=no # Keyword OPERATION -reserved_word_ansi-92/99_option=yes # Keyword OPTION -reserved_word_ansi-92/99_or=yes # Keyword OR -reserved_word_ansi-92/99_order=yes # Keyword ORDER -reserved_word_ansi-92/99_outer=yes # Keyword OUTER -reserved_word_ansi-92/99_output=no # Keyword OUTPUT -reserved_word_ansi-92/99_pad=no # Keyword PAD -reserved_word_ansi-92/99_parameters=no # Keyword PARAMETERS -reserved_word_ansi-92/99_partial=no # Keyword PARTIAL -reserved_word_ansi-92/99_precision=yes # Keyword PRECISION -reserved_word_ansi-92/99_preorder=no # Keyword PREORDER -reserved_word_ansi-92/99_prepare=no # Keyword PREPARE -reserved_word_ansi-92/99_preserve=no # Keyword PRESERVE -reserved_word_ansi-92/99_primary=yes # Keyword PRIMARY -reserved_word_ansi-92/99_prior=no # Keyword PRIOR -reserved_word_ansi-92/99_privileges=no # Keyword PRIVILEGES -reserved_word_ansi-92/99_procedure=yes # Keyword PROCEDURE -reserved_word_ansi-92/99_public=no # Keyword PUBLIC -reserved_word_ansi-92/99_read=yes # Keyword READ -reserved_word_ansi-92/99_real=yes # Keyword REAL -reserved_word_ansi-92/99_recursive=no # Keyword RECURSIVE -reserved_word_ansi-92/99_ref=no # Keyword REF -reserved_word_ansi-92/99_references=yes # Keyword REFERENCES -reserved_word_ansi-92/99_referencing=no # Keyword REFERENCING -reserved_word_ansi-92/99_relative=no # Keyword RELATIVE -reserved_word_ansi-92/99_resignal=no # Keyword RESIGNAL -reserved_word_ansi-92/99_restrict=yes # Keyword RESTRICT -reserved_word_ansi-92/99_return=yes # Keyword RETURN -reserved_word_ansi-92/99_returns=no # Keyword RETURNS -reserved_word_ansi-92/99_revoke=yes # Keyword REVOKE -reserved_word_ansi-92/99_right=yes # Keyword RIGHT -reserved_word_ansi-92/99_role=no # Keyword ROLE -reserved_word_ansi-92/99_rollback=no # Keyword ROLLBACK -reserved_word_ansi-92/99_routine=no # Keyword ROUTINE -reserved_word_ansi-92/99_row=no # Keyword ROW -reserved_word_ansi-92/99_rows=no # Keyword ROWS -reserved_word_ansi-92/99_savepoint=no # Keyword SAVEPOINT -reserved_word_ansi-92/99_schema=yes # Keyword SCHEMA -reserved_word_ansi-92/99_scroll=no # Keyword SCROLL -reserved_word_ansi-92/99_search=no # Keyword SEARCH -reserved_word_ansi-92/99_second=no # Keyword SECOND -reserved_word_ansi-92/99_section=no # Keyword SECTION -reserved_word_ansi-92/99_select=yes # Keyword SELECT -reserved_word_ansi-92/99_sequence=no # Keyword SEQUENCE -reserved_word_ansi-92/99_session=no # Keyword SESSION -reserved_word_ansi-92/99_session_user=no # Keyword SESSION_USER -reserved_word_ansi-92/99_set=yes # Keyword SET -reserved_word_ansi-92/99_signal=no # Keyword SIGNAL -reserved_word_ansi-92/99_size=no # Keyword SIZE -reserved_word_ansi-92/99_smallint=yes # Keyword SMALLINT -reserved_word_ansi-92/99_some=no # Keyword SOME -reserved_word_ansi-92/99_space=no # Keyword SPACE -reserved_word_ansi-92/99_sql=yes # Keyword SQL -reserved_word_ansi-92/99_sqlexception=yes # Keyword SQLEXCEPTION -reserved_word_ansi-92/99_sqlstate=yes # Keyword SQLSTATE -reserved_word_ansi-92/99_sqlwarning=yes # Keyword SQLWARNING -reserved_word_ansi-92/99_structure=no # Keyword STRUCTURE -reserved_word_ansi-92/99_system_user=no # Keyword SYSTEM_USER -reserved_word_ansi-92/99_table=yes # Keyword TABLE -reserved_word_ansi-92/99_temporary=no # Keyword TEMPORARY -reserved_word_ansi-92/99_then=yes # Keyword THEN -reserved_word_ansi-92/99_time=no # Keyword TIME -reserved_word_ansi-92/99_timestamp=no # Keyword TIMESTAMP -reserved_word_ansi-92/99_timezone_hour=no # Keyword TIMEZONE_HOUR -reserved_word_ansi-92/99_timezone_minute=no # Keyword TIMEZONE_MINUTE -reserved_word_ansi-92/99_to=yes # Keyword TO -reserved_word_ansi-92/99_trailing=yes # Keyword TRAILING -reserved_word_ansi-92/99_transaction=no # Keyword TRANSACTION -reserved_word_ansi-92/99_translation=no # Keyword TRANSLATION -reserved_word_ansi-92/99_trigger=yes # Keyword TRIGGER -reserved_word_ansi-92/99_true=yes # Keyword TRUE -reserved_word_ansi-92/99_under=no # Keyword UNDER -reserved_word_ansi-92/99_union=yes # Keyword UNION -reserved_word_ansi-92/99_unique=yes # Keyword UNIQUE -reserved_word_ansi-92/99_unknown=no # Keyword UNKNOWN -reserved_word_ansi-92/99_update=yes # Keyword UPDATE -reserved_word_ansi-92/99_usage=yes # Keyword USAGE -reserved_word_ansi-92/99_user=no # Keyword USER -reserved_word_ansi-92/99_using=yes # Keyword USING -reserved_word_ansi-92/99_value=no # Keyword VALUE -reserved_word_ansi-92/99_values=yes # Keyword VALUES -reserved_word_ansi-92/99_varchar=yes # Keyword VARCHAR -reserved_word_ansi-92/99_variable=no # Keyword VARIABLE -reserved_word_ansi-92/99_varying=yes # Keyword VARYING -reserved_word_ansi-92/99_view=no # Keyword VIEW -reserved_word_ansi-92/99_when=yes # Keyword WHEN -reserved_word_ansi-92/99_whenever=no # Keyword WHENEVER -reserved_word_ansi-92/99_where=yes # Keyword WHERE -reserved_word_ansi-92/99_while=yes # Keyword WHILE -reserved_word_ansi-92/99_with=yes # Keyword WITH -reserved_word_ansi-92/99_without=no # Keyword WITHOUT -reserved_word_ansi-92/99_work=no # Keyword WORK -reserved_word_ansi-92/99_write=yes # Keyword WRITE -reserved_word_ansi-92/99_year=no # Keyword YEAR -reserved_word_ansi-92/99_zone=no # Keyword ZONE -reserved_word_ansi92_async=no # Keyword ASYNC -reserved_word_ansi92_avg=no # Keyword AVG -reserved_word_ansi92_between=yes # Keyword BETWEEN -reserved_word_ansi92_bit_length=no # Keyword BIT_LENGTH -reserved_word_ansi92_char_length=no # Keyword CHAR_LENGTH -reserved_word_ansi92_character_length=no # Keyword CHARACTER_LENGTH -reserved_word_ansi92_coalesce=no # Keyword COALESCE -reserved_word_ansi92_convert=yes # Keyword CONVERT -reserved_word_ansi92_count=no # Keyword COUNT -reserved_word_ansi92_exists=yes # Keyword EXISTS -reserved_word_ansi92_extract=no # Keyword EXTRACT -reserved_word_ansi92_insensitive=yes # Keyword INSENSITIVE -reserved_word_ansi92_lower=no # Keyword LOWER -reserved_word_ansi92_max=no # Keyword MAX -reserved_word_ansi92_min=no # Keyword MIN -reserved_word_ansi92_nullif=no # Keyword NULLIF -reserved_word_ansi92_octet_length=no # Keyword OCTET_LENGTH -reserved_word_ansi92_oid=no # Keyword OID -reserved_word_ansi92_operators=no # Keyword OPERATORS -reserved_word_ansi92_others=no # Keyword OTHERS -reserved_word_ansi92_overlaps=no # Keyword OVERLAPS -reserved_word_ansi92_pendant=no # Keyword PENDANT -reserved_word_ansi92_position=no # Keyword POSITION -reserved_word_ansi92_private=no # Keyword PRIVATE -reserved_word_ansi92_protected=no # Keyword PROTECTED -reserved_word_ansi92_replace=yes # Keyword REPLACE -reserved_word_ansi92_sensitive=yes # Keyword SENSITIVE -reserved_word_ansi92_similar=no # Keyword SIMILAR -reserved_word_ansi92_sqlcode=no # Keyword SQLCODE -reserved_word_ansi92_sqlerror=no # Keyword SQLERROR -reserved_word_ansi92_substring=no # Keyword SUBSTRING -reserved_word_ansi92_sum=no # Keyword SUM -reserved_word_ansi92_test=no # Keyword TEST -reserved_word_ansi92_there=no # Keyword THERE -reserved_word_ansi92_translate=no # Keyword TRANSLATE -reserved_word_ansi92_trim=no # Keyword TRIM -reserved_word_ansi92_type=no # Keyword TYPE -reserved_word_ansi92_upper=no # Keyword UPPER -reserved_word_ansi92_virtual=no # Keyword VIRTUAL -reserved_word_ansi92_visible=no # Keyword VISIBLE -reserved_word_ansi92_wait=no # Keyword WAIT -reserved_word_ansi99_admin=no # Keyword ADMIN -reserved_word_ansi99_aggregate=no # Keyword AGGREGATE -reserved_word_ansi99_array=no # Keyword ARRAY -reserved_word_ansi99_binary=yes # Keyword BINARY -reserved_word_ansi99_blob=yes # Keyword BLOB -reserved_word_ansi99_class=no # Keyword CLASS -reserved_word_ansi99_clob=no # Keyword CLOB -reserved_word_ansi99_condition=yes # Keyword CONDITION -reserved_word_ansi99_constructor=no # Keyword CONSTRUCTOR -reserved_word_ansi99_contains=no # Keyword CONTAINS -reserved_word_ansi99_cube=no # Keyword CUBE -reserved_word_ansi99_current_path=no # Keyword CURRENT_PATH -reserved_word_ansi99_current_role=no # Keyword CURRENT_ROLE -reserved_word_ansi99_datalink=no # Keyword DATALINK -reserved_word_ansi99_deref=no # Keyword DEREF -reserved_word_ansi99_destroy=no # Keyword DESTROY -reserved_word_ansi99_destructor=no # Keyword DESTRUCTOR -reserved_word_ansi99_deterministic=yes # Keyword DETERMINISTIC -reserved_word_ansi99_do=no # Keyword DO -reserved_word_ansi99_dynamic=no # Keyword DYNAMIC -reserved_word_ansi99_every=no # Keyword EVERY -reserved_word_ansi99_exit=yes # Keyword EXIT -reserved_word_ansi99_expand=no # Keyword EXPAND -reserved_word_ansi99_expanding=no # Keyword EXPANDING -reserved_word_ansi99_free=no # Keyword FREE -reserved_word_ansi99_function=no # Keyword FUNCTION -reserved_word_ansi99_grouping=no # Keyword GROUPING -reserved_word_ansi99_handler=no # Keyword HANDLER -reserved_word_ansi99_hast=no # Keyword HAST -reserved_word_ansi99_host=no # Keyword HOST -reserved_word_ansi99_initialize=no # Keyword INITIALIZE -reserved_word_ansi99_inout=yes # Keyword INOUT -reserved_word_ansi99_iterate=yes # Keyword ITERATE -reserved_word_ansi99_large=no # Keyword LARGE -reserved_word_ansi99_lateral=no # Keyword LATERAL -reserved_word_ansi99_localtime=yes # Keyword LOCALTIME -reserved_word_ansi99_localtimestamp=yes # Keyword LOCALTIMESTAMP -reserved_word_ansi99_locator=no # Keyword LOCATOR -reserved_word_ansi99_meets=no # Keyword MEETS -reserved_word_ansi99_modifies=yes # Keyword MODIFIES -reserved_word_ansi99_nclob=no # Keyword NCLOB -reserved_word_ansi99_normalize=no # Keyword NORMALIZE -reserved_word_ansi99_ordinality=no # Keyword ORDINALITY -reserved_word_ansi99_out=yes # Keyword OUT -reserved_word_ansi99_parameter=no # Keyword PARAMETER -reserved_word_ansi99_path=no # Keyword PATH -reserved_word_ansi99_period=no # Keyword PERIOD -reserved_word_ansi99_postfix=no # Keyword POSTFIX -reserved_word_ansi99_precedes=no # Keyword PRECEDES -reserved_word_ansi99_prefix=no # Keyword PREFIX -reserved_word_ansi99_reads=yes # Keyword READS -reserved_word_ansi99_redo=no # Keyword REDO -reserved_word_ansi99_repeat=yes # Keyword REPEAT -reserved_word_ansi99_result=no # Keyword RESULT -reserved_word_ansi99_rollup=no # Keyword ROLLUP -reserved_word_ansi99_sets=no # Keyword SETS -reserved_word_ansi99_specific=yes # Keyword SPECIFIC -reserved_word_ansi99_specifictype=no # Keyword SPECIFICTYPE -reserved_word_ansi99_start=no # Keyword START -reserved_word_ansi99_state=no # Keyword STATE -reserved_word_ansi99_static=no # Keyword STATIC -reserved_word_ansi99_succeeds=no # Keyword SUCCEEDS -reserved_word_ansi99_terminate=no # Keyword TERMINATE -reserved_word_ansi99_than=no # Keyword THAN -reserved_word_ansi99_treat=no # Keyword TREAT -reserved_word_ansi99_undo=yes # Keyword UNDO -reserved_word_ansi99_until=no # Keyword UNTIL -reserved_word_extra_access=no # Keyword ACCESS -reserved_word_extra_analyze=yes # Keyword ANALYZE -reserved_word_extra_audit=no # Keyword AUDIT -reserved_word_extra_auto_increment=no # Keyword AUTO_INCREMENT -reserved_word_extra_backup=no # Keyword BACKUP -reserved_word_extra_bdb=no # Keyword BDB -reserved_word_extra_berkeleydb=no # Keyword BERKELEYDB -reserved_word_extra_bigint=yes # Keyword BIGINT -reserved_word_extra_break=no # Keyword BREAK -reserved_word_extra_browse=no # Keyword BROWSE -reserved_word_extra_btree=no # Keyword BTREE -reserved_word_extra_bulk=no # Keyword BULK -reserved_word_extra_change=yes # Keyword CHANGE -reserved_word_extra_checkpoint=no # Keyword CHECKPOINT -reserved_word_extra_cluster=no # Keyword CLUSTER -reserved_word_extra_clustered=no # Keyword CLUSTERED -reserved_word_extra_columns=no # Keyword COLUMNS -reserved_word_extra_comment=no # Keyword COMMENT -reserved_word_extra_compress=no # Keyword COMPRESS -reserved_word_extra_compute=no # Keyword COMPUTE -reserved_word_extra_containstable=no # Keyword CONTAINSTABLE -reserved_word_extra_database=yes # Keyword DATABASE -reserved_word_extra_databases=yes # Keyword DATABASES -reserved_word_extra_day_hour=yes # Keyword DAY_HOUR -reserved_word_extra_day_minute=yes # Keyword DAY_MINUTE -reserved_word_extra_day_second=yes # Keyword DAY_SECOND -reserved_word_extra_dbcc=no # Keyword DBCC -reserved_word_extra_delayed=yes # Keyword DELAYED -reserved_word_extra_deny=no # Keyword DENY -reserved_word_extra_disk=no # Keyword DISK -reserved_word_extra_distinctrow=yes # Keyword DISTINCTROW -reserved_word_extra_distributed=no # Keyword DISTRIBUTED -reserved_word_extra_dummy=no # Keyword DUMMY -reserved_word_extra_dump=no # Keyword DUMP -reserved_word_extra_enclosed=yes # Keyword ENCLOSED -reserved_word_extra_errlvl=no # Keyword ERRLVL -reserved_word_extra_errors=no # Keyword ERRORS -reserved_word_extra_escaped=yes # Keyword ESCAPED -reserved_word_extra_exclusive=no # Keyword EXCLUSIVE -reserved_word_extra_explain=yes # Keyword EXPLAIN -reserved_word_extra_fields=no # Keyword FIELDS -reserved_word_extra_file=no # Keyword FILE -reserved_word_extra_fillfactor=no # Keyword FILLFACTOR -reserved_word_extra_freetext=no # Keyword FREETEXT -reserved_word_extra_freetexttable=no # Keyword FREETEXTTABLE -reserved_word_extra_fulltext=yes # Keyword FULLTEXT -reserved_word_extra_geometry=no # Keyword GEOMETRY -reserved_word_extra_hash=no # Keyword HASH -reserved_word_extra_high_priority=yes # Keyword HIGH_PRIORITY -reserved_word_extra_holdlock=no # Keyword HOLDLOCK -reserved_word_extra_hour_minute=yes # Keyword HOUR_MINUTE -reserved_word_extra_hour_second=yes # Keyword HOUR_SECOND -reserved_word_extra_identified=no # Keyword IDENTIFIED -reserved_word_extra_identity_insert=no # Keyword IDENTITY_INSERT -reserved_word_extra_identitycol=no # Keyword IDENTITYCOL -reserved_word_extra_increment=no # Keyword INCREMENT -reserved_word_extra_index=yes # Keyword INDEX -reserved_word_extra_infile=yes # Keyword INFILE -reserved_word_extra_initial=no # Keyword INITIAL -reserved_word_extra_innodb=no # Keyword INNODB -reserved_word_extra_keys=yes # Keyword KEYS -reserved_word_extra_kill=yes # Keyword KILL -reserved_word_extra_lineno=no # Keyword LINENO -reserved_word_extra_lines=yes # Keyword LINES -reserved_word_extra_load=yes # Keyword LOAD -reserved_word_extra_lock=yes # Keyword LOCK -reserved_word_extra_long=yes # Keyword LONG -reserved_word_extra_longblob=yes # Keyword LONGBLOB -reserved_word_extra_longtext=yes # Keyword LONGTEXT -reserved_word_extra_low_priority=yes # Keyword LOW_PRIORITY -reserved_word_extra_master_server_id=no # Keyword MASTER_SERVER_ID -reserved_word_extra_maxextents=no # Keyword MAXEXTENTS -reserved_word_extra_mediumblob=yes # Keyword MEDIUMBLOB -reserved_word_extra_mediumint=yes # Keyword MEDIUMINT -reserved_word_extra_mediumtext=yes # Keyword MEDIUMTEXT -reserved_word_extra_middleint=yes # Keyword MIDDLEINT -reserved_word_extra_minus=no # Keyword MINUS -reserved_word_extra_minute_second=yes # Keyword MINUTE_SECOND -reserved_word_extra_mlslabel=no # Keyword MLSLABEL -reserved_word_extra_mode=no # Keyword MODE -reserved_word_extra_mrg_myisam=no # Keyword MRG_MYISAM -reserved_word_extra_noaudit=no # Keyword NOAUDIT -reserved_word_extra_nocheck=no # Keyword NOCHECK -reserved_word_extra_nocompress=no # Keyword NOCOMPRESS -reserved_word_extra_nonclustered=no # Keyword NONCLUSTERED -reserved_word_extra_nowait=no # Keyword NOWAIT -reserved_word_extra_number=no # Keyword NUMBER -reserved_word_extra_offline=no # Keyword OFFLINE -reserved_word_extra_offsets=no # Keyword OFFSETS -reserved_word_extra_online=no # Keyword ONLINE -reserved_word_extra_opendatasource=no # Keyword OPENDATASOURCE -reserved_word_extra_openquery=no # Keyword OPENQUERY -reserved_word_extra_openrowset=no # Keyword OPENROWSET -reserved_word_extra_openxml=no # Keyword OPENXML -reserved_word_extra_optimize=yes # Keyword OPTIMIZE -reserved_word_extra_optionally=yes # Keyword OPTIONALLY -reserved_word_extra_outfile=yes # Keyword OUTFILE -reserved_word_extra_over=no # Keyword OVER -reserved_word_extra_pctfree=no # Keyword PCTFREE -reserved_word_extra_percent=no # Keyword PERCENT -reserved_word_extra_plan=no # Keyword PLAN -reserved_word_extra_print=no # Keyword PRINT -reserved_word_extra_proc=no # Keyword PROC -reserved_word_extra_purge=yes # Keyword PURGE -reserved_word_extra_raiserror=no # Keyword RAISERROR -reserved_word_extra_raw=no # Keyword RAW -reserved_word_extra_readtext=no # Keyword READTEXT -reserved_word_extra_reconfigure=no # Keyword RECONFIGURE -reserved_word_extra_regexp=yes # Keyword REGEXP -reserved_word_extra_rename=yes # Keyword RENAME -reserved_word_extra_replication=no # Keyword REPLICATION -reserved_word_extra_require=yes # Keyword REQUIRE -reserved_word_extra_resource=no # Keyword RESOURCE -reserved_word_extra_restore=no # Keyword RESTORE -reserved_word_extra_rlike=yes # Keyword RLIKE -reserved_word_extra_rowcount=no # Keyword ROWCOUNT -reserved_word_extra_rowguidcol=no # Keyword ROWGUIDCOL -reserved_word_extra_rowid=no # Keyword ROWID -reserved_word_extra_rownum=no # Keyword ROWNUM -reserved_word_extra_rtree=no # Keyword RTREE -reserved_word_extra_rule=no # Keyword RULE -reserved_word_extra_save=no # Keyword SAVE -reserved_word_extra_setuser=no # Keyword SETUSER -reserved_word_extra_share=no # Keyword SHARE -reserved_word_extra_show=yes # Keyword SHOW -reserved_word_extra_shutdown=no # Keyword SHUTDOWN -reserved_word_extra_soname=yes # Keyword SONAME -reserved_word_extra_spatial=yes # Keyword SPATIAL -reserved_word_extra_sql_big_result=yes # Keyword SQL_BIG_RESULT -reserved_word_extra_sql_calc_found_rows=yes # Keyword SQL_CALC_FOUND_ROWS -reserved_word_extra_sql_small_result=yes # Keyword SQL_SMALL_RESULT -reserved_word_extra_ssl=yes # Keyword SSL -reserved_word_extra_starting=yes # Keyword STARTING -reserved_word_extra_statistics=no # Keyword STATISTICS -reserved_word_extra_straight_join=yes # Keyword STRAIGHT_JOIN -reserved_word_extra_striped=no # Keyword STRIPED -reserved_word_extra_successful=no # Keyword SUCCESSFUL -reserved_word_extra_synonym=no # Keyword SYNONYM -reserved_word_extra_sysdate=no # Keyword SYSDATE -reserved_word_extra_tables=no # Keyword TABLES -reserved_word_extra_terminated=yes # Keyword TERMINATED -reserved_word_extra_textsize=no # Keyword TEXTSIZE -reserved_word_extra_tinyblob=yes # Keyword TINYBLOB -reserved_word_extra_tinyint=yes # Keyword TINYINT -reserved_word_extra_tinytext=yes # Keyword TINYTEXT -reserved_word_extra_top=no # Keyword TOP -reserved_word_extra_tran=no # Keyword TRAN -reserved_word_extra_truncate=no # Keyword TRUNCATE -reserved_word_extra_tsequal=no # Keyword TSEQUAL -reserved_word_extra_types=no # Keyword TYPES -reserved_word_extra_uid=no # Keyword UID -reserved_word_extra_unlock=yes # Keyword UNLOCK -reserved_word_extra_unsigned=yes # Keyword UNSIGNED -reserved_word_extra_updatetext=no # Keyword UPDATETEXT -reserved_word_extra_use=yes # Keyword USE -reserved_word_extra_user_resources=no # Keyword USER_RESOURCES -reserved_word_extra_validate=no # Keyword VALIDATE -reserved_word_extra_varbinary=yes # Keyword VARBINARY -reserved_word_extra_varchar2=no # Keyword VARCHAR2 -reserved_word_extra_waitfor=no # Keyword WAITFOR -reserved_word_extra_warnings=no # Keyword WARNINGS -reserved_word_extra_writetext=no # Keyword WRITETEXT -reserved_word_extra_xor=yes # Keyword XOR -reserved_word_extra_year_month=yes # Keyword YEAR_MONTH -reserved_word_extra_zerofill=yes # Keyword ZEROFILL -right_outer_join=yes # right outer join -rollback_metadata=no # rollback_metadata -rowid=auto_increment # Type for row id -safe_decimal_arithmetic=yes # safe decimal arithmetic -select_constants=yes # Select constants -select_limit=with LIMIT # LIMIT number of rows -select_limit2=yes # SELECT with LIMIT #,# -select_limit3=yes # SELECT with LIMIT # OFFSET # -select_string_size=1048565 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=MySQL 5.0.7 beta valgrind max debug/ # server version -simple_joins=yes # ANSI SQL simple joins -sorted_group_by=yes # Group by always sorted -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=no # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=yes # temporary tables -time_format_EUR=error # Supports HH.MM.SS (EUR) time format -time_format_HHHHMMSS=yes # Supports HHHHmmSS time format -time_format_ISO=yes # Supports HH:MM:SS (ISO) time format -time_format_USA=error # Supports HH:MM:SS (AM|PM) time format -time_format_inresult=iso # Time format in result -transactions=yes # transactions -truncate_table=yes # truncate -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=yes # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=yes # Type char(1 arg) binary -type_extra_cidr=no # Type cidr -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=yes # Type double -type_extra_enum(1_arg)=yes # Type enum(1 arg) -type_extra_float(2_arg)=yes # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=no # Type image -type_extra_inet=no # Type inet -type_extra_int(1_arg)_zerofill=yes # Type int(1 arg) zerofill -type_extra_int1=yes # Type int1 -type_extra_int2=yes # Type int2 -type_extra_int3=yes # Type int3 -type_extra_int4=yes # Type int4 -type_extra_int8=yes # Type int8 -type_extra_int_auto_increment=yes # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=yes # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=yes # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=yes # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_macaddr=no # Type macaddr -type_extra_mediumint=yes # Type mediumint -type_extra_mediumtext=yes # Type mediumtext -type_extra_middleint=yes # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=yes # Type point -type_extra_polygon=yes # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=yes # Type serial -type_extra_set(1_arg)=yes # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=yes # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=yes # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=yes # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_boolean=yes # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -value_of_false=0 # Value of FALSE -value_of_true=1 # Value of TRUE -views=yes # views -where_string_size=1048539 # constant string size in where diff --git a/sql-bench/limits/oracle.cfg b/sql-bench/limits/oracle.cfg deleted file mode 100644 index ad2faf22971e5b1d347dd7ec845ac0e76e932d00..0000000000000000000000000000000000000000 --- a/sql-bench/limits/oracle.cfg +++ /dev/null @@ -1,505 +0,0 @@ -#This file is automaticly generated by crash-me 1.44a - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=yes # Alter table add foreign key -alter_add_multi_col=yes # Alter table add many columns -alter_add_primary_key=with constraint # Alter table add primary key -alter_add_unique=yes # Alter table add unique -alter_alter_col=no # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_drop_constraint=yes # Alter table drop constraint -alter_drop_foreign_key=with drop constraint # Alter table drop foreign key -alter_drop_primary_key=drop primary key # Alter table drop primary key -alter_drop_unique=with constraint # Alter table drop unique -alter_modify_col=yes # Alter table modify column -alter_rename_table=yes # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -automatic_rowid=no # Automatic rowid -binary_numbers=no # binary numbers (0b1001) -binary_strings=no # binary strings (b'0110') -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=41 # Simultaneous connections (installation default) -constraint_check=yes # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.45 # crash me version -create_default=yes # default value for column -create_default_func=no # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=no # create table from select -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_last=error # Supports 9999-12-31 dates -date_one=error # Supports 0001-01-01 dates -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -end_colon=yes # allows end ';' -except=no # except -except_all=no # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=yes # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=yes # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=yes # Function CHR -func_extra_concat_as_+=no # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=yes # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=yes # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=yes # Function INITCAP -func_extra_instr=yes # Function LOCATE as INSTR -func_extra_instr_oracle=yes # Function INSTR (Oracle syntax) -func_extra_instrb=error # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=yes # Function LEAST -func_extra_lengthb=error # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=yes # Function LN -func_extra_log(m_n)=yes # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=yes # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=error # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=error # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=yes # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=yes # Function TRUNC -func_extra_uid=yes # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=no # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=error # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=no # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=yes # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=yes # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=no # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=no # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user()=yes # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=no # Function CHAR_LENGTH -func_sql_char_length(constant)=no # Function CHAR_LENGTH(constant) -func_sql_character_length=no # Function CHARACTER_LENGTH -func_sql_coalesce=no # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_user=no # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif=no # Function NULLIF -func_sql_octet_length=no # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=no # Function SESSION_USER -func_sql_simple_case=no # Function simple CASE -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # group on column with null values -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=yes # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -has_true_false=no # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=no # hex numbers (0x41) -hex_strings=no # hex strings (x'1ace') -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=no # inner join -insert_empty_string=no # insert empty string -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=yes # intersect -intersect_all=no # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=8 # big expressions -max_char_size=2000 # max char() size -max_column_name=30 # column name length -max_columns=1000 # Columns in table -max_conditions=36392 # OR and AND in WHERE -max_expressions=+10000 # simple expressions -max_index=+64 # max index -max_index_length=749 # index length -max_index_name=30 # index name length -max_index_part_length=2000 # max index part length -max_index_parts=33 # index parts -max_index_varchar_part_length=3209 # index varchar part length -max_row_length=255000 # max table row length (without blobs) -max_row_length_with_null=255000 # table row length with nulls (without blobs) -max_select_alias_name=30 # select alias name length -max_stack_expression=+2000 # stacked expressions -max_table_alias_name=30 # table alias name length -max_table_name=30 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=4000 # max varchar() size -minus=yes # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_null_in_unique=yes # null in unique index -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -insert_multi_value=no # Value lists in INSERT -natural_join=no # natural join -natural_join_incompat=no # natural join (incompatible lists) -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=error # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique index -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Microsoft Windows 2000 [Version 5.00.2195] # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=yes # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=+64 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -right_outer_join=no # right outer join -rowid=rowid # Type for row id -select_constants=yes # Select constants -select_limit=no # LIMIT number of rows -select_limit2=no # SELECT with LIMIT #,# -select_string_size=4000 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=no # SELECT without FROM -server_version=Oracle 8.1.6.0.0 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=undefined # Storage of float values -subqueries=yes # subqueries -table_alias=no # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -tempoary_table=no # temporary tables -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=yes # Type bfile -type_extra_blob=yes # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_circle=no # Type circle -type_extra_clob=yes # Type clob -type_extra_datetime=no # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=no # Type interval -type_extra_line=no # Type line -type_extra_long=yes # Type long -type_extra_long_raw=yes # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=yes # Type mlslabel -type_extra_money=no # Type money -type_extra_nclob=yes # Type nclob -type_extra_number=yes # Type number -type_extra_number(1_arg)=yes # Type number(1 arg) -type_extra_number(2_arg)=yes # Type number(2 arg) -type_extra_nvarchar2(1_arg)=yes # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=yes # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=yes # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=yes # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=no # Type interval day -type_sql_interval_day_to_hour=no # Type interval day to hour -type_sql_interval_day_to_minute=no # Type interval day to minute -type_sql_interval_day_to_second=no # Type interval day to second -type_sql_interval_hour=no # Type interval hour -type_sql_interval_hour_to_minute=no # Type interval hour to minute -type_sql_interval_hour_to_second=no # Type interval hour to second -type_sql_interval_minute=no # Type interval minute -type_sql_interval_minute_to_second=no # Type interval minute to second -type_sql_interval_month=no # Type interval month -type_sql_interval_second=no # Type interval second -type_sql_interval_year=no # Type interval year -type_sql_interval_year_to_month=no # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=no # Type time -type_sql_timestamp=no # Type timestamp -type_sql_timestamp_with_time_zone=no # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=yes # views -where_string_size=4000 # constant string size in where diff --git a/sql-bench/limits/pg.cfg b/sql-bench/limits/pg.cfg deleted file mode 100644 index 9cb42f86b8ac6b6176f34bd714dd1cf0a15d9a1f..0000000000000000000000000000000000000000 --- a/sql-bench/limits/pg.cfg +++ /dev/null @@ -1,523 +0,0 @@ -#This file is automaticly generated by crash-me 1.57 - -NEG=yes # update of column= -column -Need_cast_for_null=no # Need to cast NULL for arithmetic -alter_add_col=yes # Alter table add column -alter_add_constraint=yes # Alter table add constraint -alter_add_foreign_key=no # Alter table add foreign key -alter_add_multi_col=no # Alter table add many columns -alter_add_primary_key=no # Alter table add primary key -alter_add_unique=no # Alter table add unique -alter_alter_col=yes # Alter table alter column default -alter_change_col=no # Alter table change column -alter_drop_col=no # Alter table drop column -alter_drop_constraint=no # Alter table drop constraint -alter_drop_foreign_key=no # Alter table drop foreign key -alter_drop_primary_key=no # Alter table drop primary key -alter_drop_unique=no # Alter table drop unique -alter_modify_col=no # Alter table modify column -alter_rename_table=yes # Alter table rename table -atomic_updates=no # atomic updates -automatic_rowid=no # Automatic row id -binary_numbers=no # binary numbers (0b1001) -binary_strings=yes # binary strings (b'0110') -case_insensitive_strings=no # Case insensitive compare -char_is_space_filled=yes # char are space filled -column_alias=yes # Column alias -columns_in_group_by=+64 # number of columns in group by -columns_in_order_by=+64 # number of columns in order by -comment_#=no # # as comment -comment_--=yes # -- as comment (ANSI) -comment_/**/=yes # /* */ as comment -comment_//=no # // as comment -compute=no # Compute -connections=32 # Simultaneous connections (installation default) -constraint_check=yes # Column constraints -constraint_check_table=yes # Table constraints -constraint_null=yes # NULL constraint (SyBase style) -crash_me_safe=yes # crash me safe -crash_me_version=1.57 # crash me version -create_default=yes # default value for column -create_default_func=yes # default value function for column -create_if_not_exists=no # create table if not exists -create_index=yes # create index -create_schema=no # Create SCHEMA -create_table_select=with AS # create table from select -cross_join=yes # cross join (same as from a,b) -date_as_string=yes # String functions on date columns -date_infinity=no # Supports 'infinity dates -date_last=yes # Supports 9999-12-31 dates -date_one=yes # Supports 0001-01-01 dates -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=no # Supports 0000-00-00 dates -domains=no # Domains (ANSI SQL) -dont_require_cast_to_float=no # No need to cast from integer to float -double_quotes=yes # Double '' as ' in strings -drop_if_exists=no # drop table if exists -drop_index=yes # drop index -drop_requires_cascade=no # drop table require cascade/restrict -drop_restrict=no # drop table with cascade/restrict -end_colon=yes # allows end ';' -except=yes # except -except_all=yes # except all -except_all_incompat=no # except all (incompatible lists) -except_incompat=no # except (incompatible lists) -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=yes # Function <> in SELECT -func_extra_==yes # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=yes # Function AND and OR in SELECT -func_extra_ascii_char=no # Function ASCII_CHAR -func_extra_ascii_code=no # Function ASCII_CODE -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=yes # Function automatic string->num convert -func_extra_between=yes # Function BETWEEN in SELECT -func_extra_binary_shifts=yes # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=yes # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=yes # Function CHR -func_extra_concat_as_+=error # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=yes # Function IN on numbers in SELECT -func_extra_in_str=yes # Function IN on strings in SELECT -func_extra_initcap=yes # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instr_oracle=no # Function INSTR (Oracle syntax) -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=yes # Function LIKE in SELECT -func_extra_like_escape=yes # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=yes # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=yes # Function LPAD -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=yes # Function NOT in SELECT -func_extra_not_between=yes # Function NOT BETWEEN in SELECT -func_extra_not_like=yes # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_paste=no # Function PASTE -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=yes # Function ROUND(1 arg) -func_extra_rpad=yes # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_sysdate=no # Function SYSDATE -func_extra_tail=no # Function TAIL -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=yes # Function TRANSLATE -func_extra_trim_many_char=yes # Function TRIM; Many char extension -func_extra_trim_substring=error # Function TRIM; Substring extension -func_extra_trunc=yes # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=yes # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_extra_~*=yes # Function ~* (case insensitive compare) -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=no # Function CEILING -func_odbc_char=no # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=no # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=no # Function LOG -func_odbc_log10=no # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=no # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=no # Function SPACE -func_odbc_sqrt=no # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_cast=yes # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_char_length(constant)=yes # Function CHAR_LENGTH(constant) -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_coalesce=yes # Function COALESCE -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=yes # Function CURRENT_DATE -func_sql_current_time=yes # Function CURRENT_TIME -func_sql_current_timestamp=yes # Function CURRENT_TIMESTAMP -func_sql_current_user=yes # Function CURRENT_USER -func_sql_extract_sql=yes # Function EXTRACT -func_sql_localtime=no # Function LOCALTIME -func_sql_localtimestamp=no # Function LOCALTIMESTAMP -func_sql_lower=yes # Function LOWER -func_sql_nullif_num=yes # Function NULLIF with numbers -func_sql_nullif_string=yes # Function NULLIF with strings -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_searched_case=yes # Function searched CASE -func_sql_session_user=yes # Function SESSION_USER -func_sql_simple_case=yes # Function simple CASE -func_sql_substring=yes # Function ANSI SQL SUBSTRING -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=yes # Function TRIM -func_sql_upper=yes # Function UPPER -func_sql_user=yes # Function USER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # Group on column with null values -group_by_position=yes # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_count_distinct_list=no # Group function COUNT(DISTINCT expr,expr,...) -group_func_extra_std=no # Group function STD -group_func_extra_stddev=yes # Group function STDDEV -group_func_extra_variance=yes # Group function VARIANCE -group_func_sql_any=no # Group function ANY -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT(DISTINCT expr) -group_func_sql_every=no # Group function EVERY -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_some=no # Group function SOME -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -group_on_unused=yes # Group on unused column -has_true_false=yes # TRUE and FALSE -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -hex_numbers=no # hex numbers (0x41) -hex_strings=yes # hex strings (x'1ace') -ignore_end_space=yes # Ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -inner_join=yes # inner join -insert_empty_string=yes # insert empty string -insert_multi_value=no # INSERT with Value lists -insert_select=yes # insert INTO ... SELECT ... -insert_with_set=no # INSERT with set syntax -intersect=yes # intersect -intersect_all=yes # intersect all -intersect_all_incompat=no # intersect all (incompatible lists) -intersect_incompat=no # intersect (incompatible lists) -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=yes # left outer join using -like_with_column=yes # column LIKE column -like_with_number=yes # LIKE on numbers -lock_tables=yes # lock table -logical_value=1 # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=+8000000 # max char() size -max_column_name=+512 # column name length -max_columns=1600 # Columns in table -max_conditions=19994 # OR and AND in WHERE -max_expressions=9999 # simple expressions -max_index=+64 # max index -max_index_length=+8192 # index length -max_index_name=+512 # index name length -max_index_part_length=235328 # max index part length -max_index_parts=16 # index parts -max_index_varchar_part_length=235328 # index varchar part length -max_row_length=64519 # max table row length (without blobs) -max_row_length_with_null=64519 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=+2000 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=+512 # table name length -max_text_size=+8000000 # max text or blob size -max_unique_index=+64 # unique indexes -max_varchar_size=+8000000 # max varchar() size -minus=no # minus -minus_incompat=no # minus (incompatible lists) -minus_neg=no # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_null_in_unique=yes # null in unique index -multi_strings=yes # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=yes # natural join -natural_join_incompat=yes # natural join (incompatible lists) -natural_left_outer_join=yes # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique index -null_num_expr=yes # Is 1+NULL = NULL -nulls_in_unique=yes # null combination in unique index -odbc_left_outer_join=no # left outer join odbc style -operating_system=Linux 2.4.0-64GB-SMP i686 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_function=yes # Order by function -order_by_position=yes # Order by position -order_by_remember_desc=no # Order by DESC is remembered -order_on_unused=yes # Order by on unused column -primary_key_in_create=yes # primary key in create table -psm_functions=no # PSM functions (ANSI SQL) -psm_modules=no # PSM modules (ANSI SQL) -psm_procedures=no # PSM procedures (ANSI SQL) -psm_trigger=no # Triggers (ANSI SQL) -query_size=16777216 # query size -quote_ident_with_"=no # " as identifier quote (ANSI SQL) -quote_ident_with_[=no # [] as identifier quote -quote_ident_with_`=no # ` as identifier quote -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=+64 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -rename_table=no # rename table -repeat_string_size=+8000000 # return string size from function -right_outer_join=yes # right outer join -rowid=oid # Type for row id -select_constants=yes # Select constants -select_limit=with LIMIT # LIMIT number of rows -select_limit2=yes # SELECT with LIMIT #,# -select_string_size=16777207 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=PostgreSQL version 7.1.1 # server version -simple_joins=yes # ANSI SQL simple joins -storage_of_float=round # Storage of float values -subqueries=yes # subqueries -table_alias=yes # Table alias -table_name_case=yes # case independent table names -table_wildcard=yes # Select table_name.* -temporary_table=yes # temporary tables -transactions=yes # transactions -truncate_table=yes # truncate -type_extra_abstime=yes # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=yes # Type bool -type_extra_box=yes # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_cidr=yes # Type cidr -type_extra_circle=yes # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_double=no # Type double -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_extra_float(2_arg)=no # Type float(2 arg) -type_extra_float4=yes # Type float4 -type_extra_float8=yes # Type float8 -type_extra_image=no # Type image -type_extra_inet=yes # Type inet -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=yes # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=yes # Type int4 -type_extra_int8=yes # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_int_identity=no # Type int not null identity -type_extra_int_unsigned=no # Type int unsigned -type_extra_interval=yes # Type interval -type_extra_line=yes # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=yes # Type lseg -type_extra_macaddr=yes # Type macaddr -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_number(2_arg)=no # Type number(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=yes # Type path -type_extra_point=yes # Type point -type_extra_polygon=yes # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=yes # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=yes # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=yes # Type timespan -type_extra_uint=no # Type uint -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=yes # Type bigint -type_odbc_binary(1_arg)=no # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_odbc_tinyint=no # Type tinyint -type_odbc_varbinary(1_arg)=no # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=yes # Type bit(1 arg) -type_sql_bit_varying(1_arg)=yes # Type bit varying(1 arg) -type_sql_boolean=yes # Type boolean -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_sql_float(1_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_day=yes # Type interval day -type_sql_interval_day_to_hour=yes # Type interval day to hour -type_sql_interval_day_to_minute=yes # Type interval day to minute -type_sql_interval_day_to_second=yes # Type interval day to second -type_sql_interval_hour=yes # Type interval hour -type_sql_interval_hour_to_minute=yes # Type interval hour to minute -type_sql_interval_hour_to_second=yes # Type interval hour to second -type_sql_interval_minute=yes # Type interval minute -type_sql_interval_minute_to_second=yes # Type interval minute to second -type_sql_interval_month=yes # Type interval month -type_sql_interval_second=yes # Type interval second -type_sql_interval_year=yes # Type interval year -type_sql_interval_year_to_month=yes # Type interval year to month -type_sql_national_char_varying(1_arg)=yes # Type national char varying(1 arg) -type_sql_national_character(1_arg)=yes # Type national character(1 arg) -type_sql_national_character_varying(1_arg)=yes # Type national character varying(1 arg) -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_sql_nchar_varying(1_arg)=yes # Type nchar varying(1 arg) -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_smallint=yes # Type smallint -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_timestamp_with_time_zone=yes # Type timestamp with time zone -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -union_all_incompat=yes # union all (incompatible lists) -union_incompat=yes # union (incompatible lists) -unique_in_create=yes # unique in create table -unique_null_in_create=yes # unique null in create -views=yes # views -where_string_size=16777181 # constant string size in where diff --git a/sql-bench/limits/solid-nt4.cfg b/sql-bench/limits/solid-nt4.cfg deleted file mode 100644 index 3a5c387c7d2c91a07e96a3981fdd78aed1a9ce2d..0000000000000000000000000000000000000000 --- a/sql-bench/limits/solid-nt4.cfg +++ /dev/null @@ -1,422 +0,0 @@ -#This file is automaticly generated by crash-me 1.19a - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=no # /* */ as comment -compute=no # Compute -connections=1000 # Simultaneous connections -crash_me_safe=no # crash me safe -crash_me_version=1.19a # crash me version -create_default=no # default value for column -create_index=yes # create index -cross_join=yes # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=yes # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=yes # drop index -except=yes # except -except_all=yes # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=yes # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=no # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=yes # Function BIT_LENGTH -func_sql_case=yes # Function CASE -func_sql_cast=yes # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # Test nulls in group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=yes # intersect -intersect_all=yes # intersect all -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=65489 # max char() size -max_column_name=254 # column name length -max_columns=1000 # Columns in table -max_conditions=1518 # OR and AND in WHERE -max_expressions=3093 # simple expressions -max_index=+64 # max index -max_index_length=+8192 # index length -max_index_name=254 # index name length -max_index_part_length=65485 # max index part length -max_index_parts=63 # index parts -max_index_varchar_part_length=65485 # index varchar part length -max_row_length=2634 # max table row length (without blobs) -max_row_length_with_null=2634 # table row length with nulls (without blobs) -max_select_alias_name=+512 # select alias name length -max_stack_expression=48 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=254 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=65489 # max varchar() size -minus=no # minus -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows NT Version 4.0 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=65520 # query size -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=14 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -repeat_string_size=254 # return string size from function -right_outer_join=yes # right outer join -select_constants=yes # Select constants -select_string_size=6185 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Solid version ??? # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_wildcard=yes # Select table_name.* -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=yes # Type long varbinary -type_extra_long_varchar(1_arg)=yes # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=254 # constant string size in where diff --git a/sql-bench/limits/solid.cfg b/sql-bench/limits/solid.cfg deleted file mode 100644 index 88638a1a876f948f4ebc5eacf311f2b9b60cc416..0000000000000000000000000000000000000000 --- a/sql-bench/limits/solid.cfg +++ /dev/null @@ -1,422 +0,0 @@ -#This file is automaticly generated by crash-me 1.19a - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=no # /* */ as comment -compute=no # Compute -connections=248 # Simultaneous connections -crash_me_safe=yes # crash me safe -crash_me_version=1.19a # crash me version -create_default=no # default value for column -create_index=yes # create index -cross_join=yes # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates -date_zero=yes # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=yes # drop index -except=yes # except -except_all=yes # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=yes # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=no # Function MOD as % -func_extra_&=no # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=no # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=no # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=no # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=no # Function DATEADD -func_extra_datediff=no # Function DATEDIFF -func_extra_datename=no # Function DATENAME -func_extra_datepart=no # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=no # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=no # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=no # Function REPLICATE -func_extra_reverse=no # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=no # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=no # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=no # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=yes # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=yes # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=yes # Function CURDATE -func_odbc_curtime=yes # Function CURTIME -func_odbc_database=yes # Function DATABASE -func_odbc_dayname=yes # Function DAYNAME -func_odbc_dayofmonth=yes # Function DAYOFMONTH -func_odbc_dayofweek=yes # Function DAYOFWEEK -func_odbc_dayofyear=yes # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=no # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=yes # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=yes # Function HOUR -func_odbc_hour_time=yes # Function ANSI HOUR -func_odbc_ifnull=yes # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=yes # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=yes # Function REAL LENGTH -func_odbc_length_without_space=error # Function ODBC LENGTH -func_odbc_locate_2=yes # Function LOCATE(2 arg) -func_odbc_locate_3=yes # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=yes # Function MINUTE -func_odbc_mod=yes # Function MOD -func_odbc_month=yes # Function MONTH -func_odbc_monthname=yes # Function MONTHNAME -func_odbc_now=yes # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=yes # Function QUARTER -func_odbc_radians=yes # Function RADIANS -func_odbc_rand=no # Function RAND -func_odbc_repeat=yes # Function REPEAT -func_odbc_replace=yes # Function REPLACE -func_odbc_right=no # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=yes # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=no # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=yes # Function TRUNCATE -func_odbc_ucase=yes # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=no # Function USER() -func_odbc_week=yes # Function WEEK -func_odbc_year=yes # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=yes # Function BIT_LENGTH -func_sql_case=yes # Function CASE -func_sql_cast=yes # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_concat_as_||=yes # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=yes # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=yes # Group by alias -group_by_null=yes # Test nulls in group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=no # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=yes # intersect -intersect_all=yes # intersect all -join_tables=+64 # tables in join -left_outer_join=yes # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=1 # big expressions -max_char_size=65489 # max char() size -max_column_name=254 # column name length -max_columns=1000 # Columns in table -max_conditions=5886 # OR and AND in WHERE -max_expressions=126 # simple expressions -max_index=+64 # max index -max_index_length=+8192 # index length -max_index_name=254 # index name length -max_index_part_length=65485 # max index part length -max_index_parts=63 # index parts -max_index_varchar_part_length=65485 # index varchar part length -max_row_length=2634 # max table row length (without blobs) -max_row_length_with_null=2634 # table row length with nulls (without blobs) -max_select_alias_name=254 # select alias name length -max_stack_expression=48 # stacked expressions -max_table_alias_name=+512 # table alias name length -max_table_name=254 # table name length -max_unique_index=+64 # unique indexes -max_varchar_size=65489 # max varchar() size -minus=no # minus -minus_neg=no # Calculate 1--1 -multi_drop=no # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=yes # Is 'a' || NULL = NULL -null_in_index=yes # null in index -null_in_unique=no # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Linux 2.0.34 i586 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=65520 # query size -quote_with_"=no # Allows ' and " as string markers -recursive_subqueries=14 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=yes # Remembers end space in varchar() -repeat_string_size=254 # return string size from function -right_outer_join=yes # right outer join -select_constants=yes # Select constants -select_string_size=252 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=SOLID Server - v.02.30.0026 (Linux ix86) # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=yes # Table alias -table_wildcard=yes # Select table_name.* -transactions=yes # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=no # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=no # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=yes # Type long varbinary -type_extra_long_varchar(1_arg)=yes # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=no # Type money -type_sql_nchar(1_arg)=no # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=no # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=no # Type smallmoney -type_extra_text=no # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=no # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=no # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=no # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=yes # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=yes # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=yes # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=254 # constant string size in where diff --git a/sql-bench/limits/sybase.cfg b/sql-bench/limits/sybase.cfg deleted file mode 100644 index 910c8e9f3b188ddbbbd657038b499aafb7267355..0000000000000000000000000000000000000000 --- a/sql-bench/limits/sybase.cfg +++ /dev/null @@ -1,422 +0,0 @@ -#This file is automaticly generated by crash-me 1.19a - -NEG=yes # update of column= -column -alter_add_col=yes # Alter table add column -alter_change_col=no # Alter table change column -alter_drop_col=yes # Alter table drop column -alter_modify_col=no # Alter table modify column -alter_rename_table=no # Alter table rename table -atomic_updates=yes # atomic updates -atomic_updates_with_rollback=yes # atomic_updates_with_rollback -binary_items=yes # binary items (0x41) -case_insensitive_strings=no # case insensitive compare -char_is_space_filled=no # char are space filled -column_alias=yes # Column alias -comment_#=no # # as comment -comment_--=yes # -- as comment -comment_/**/=yes # /* */ as comment -compute=yes # Compute -connections=25 # Simultaneous connections -crash_me_safe=yes # crash me safe -crash_me_version=1.19a # crash me version -create_default=no # default value for column -create_index=yes # create index -cross_join=no # cross join (same as from a,b) -date_as_string=no # String functions on date columns -date_with_YY=no # Supports YY-MM-DD dates -date_zero=no # Supports 0000-00-00 dates -double_quotes=yes # Double '' as ' in strings -drop_index=with 'table.index' # drop index -except=no # except -except_all=no # except all -float_int_expr=yes # mixing of integer and float in expression -foreign_key=yes # foreign keys -foreign_key_syntax=yes # foreign key syntax -full_outer_join=no # full outer join -func_extra_!=no # Function NOT as '!' in SELECT -func_extra_%=yes # Function MOD as % -func_extra_&=yes # Function & (bitwise and) -func_extra_&&=no # Function AND as '&&' -func_extra_<>=no # Function <> in SELECT -func_extra_==no # Function = -func_extra_add_months=no # Function ADD_MONTHS -func_extra_and_or=no # Function AND and OR in SELECT -func_extra_atn2=yes # Function ATN2 -func_extra_auto_num2string=no # Function automatic num->string convert -func_extra_auto_string2num=no # Function automatic string->num convert -func_extra_between=no # Function BETWEEN in SELECT -func_extra_binary_shifts=no # Function << and >> (bitwise shifts) -func_extra_bit_count=no # Function BIT_COUNT -func_extra_ceil=no # Function CEIL -func_extra_charindex=yes # Function CHARINDEX -func_extra_chr=no # Function CHR -func_extra_concat_as_+=yes # Function concatenation with + -func_extra_concat_list=no # Function CONCAT(list) -func_extra_convert=yes # Function CONVERT -func_extra_cosh=no # Function COSH -func_extra_date_format=no # Function DATE_FORMAT -func_extra_dateadd=yes # Function DATEADD -func_extra_datediff=yes # Function DATEDIFF -func_extra_datename=yes # Function DATENAME -func_extra_datepart=yes # Function DATEPART -func_extra_elt=no # Function ELT -func_extra_encrypt=no # Function ENCRYPT -func_extra_field=no # Function FIELD -func_extra_format=no # Function FORMAT -func_extra_from_days=no # Function FROM_DAYS -func_extra_from_unixtime=no # Function FROM_UNIXTIME -func_extra_getdate=yes # Function GETDATE -func_extra_greatest=no # Function GREATEST -func_extra_if=no # Function IF -func_extra_in_num=no # Function IN on numbers in SELECT -func_extra_in_str=no # Function IN on strings in SELECT -func_extra_initcap=no # Function INITCAP -func_extra_instr=no # Function LOCATE as INSTR -func_extra_instrb=no # Function INSTRB -func_extra_interval=no # Function INTERVAL -func_extra_last_day=no # Function LAST_DAY -func_extra_last_insert_id=no # Function LAST_INSERT_ID -func_extra_least=no # Function LEAST -func_extra_lengthb=no # Function LENGTHB -func_extra_like=no # Function LIKE in SELECT -func_extra_like_escape=no # Function LIKE ESCAPE in SELECT -func_extra_ln=no # Function LN -func_extra_log(m_n)=no # Function LOG(m,n) -func_extra_logn=no # Function LOGN -func_extra_lpad=no # Function LPAD -func_extra_max_num=no # Function MAX on numbers -func_extra_mdy=no # Function MDY -func_extra_mid=no # Function SUBSTRING as MID -func_extra_min_num=no # Function MIN on numbers -func_extra_months_between=no # Function MONTHS_BETWEEN -func_extra_not=no # Function NOT in SELECT -func_extra_not_between=no # Function NOT BETWEEN in SELECT -func_extra_not_like=no # Function NOT LIKE in SELECT -func_extra_odbc_convert=no # Function ODBC CONVERT -func_extra_password=no # Function PASSWORD -func_extra_patindex=yes # Function PATINDEX -func_extra_period_add=no # Function PERIOD_ADD -func_extra_period_diff=no # Function PERIOD_DIFF -func_extra_pow=no # Function POW -func_extra_range=no # Function RANGE -func_extra_regexp=no # Function REGEXP in SELECT -func_extra_replicate=yes # Function REPLICATE -func_extra_reverse=yes # Function REVERSE -func_extra_root=no # Function ROOT -func_extra_round1=no # Function ROUND(1 arg) -func_extra_rpad=no # Function RPAD -func_extra_sec_to_time=no # Function SEC_TO_TIME -func_extra_sinh=no # Function SINH -func_extra_str=yes # Function STR -func_extra_strcmp=no # Function STRCMP -func_extra_stuff=yes # Function STUFF -func_extra_substrb=no # Function SUBSTRB -func_extra_substring_index=no # Function SUBSTRING_INDEX -func_extra_tanh=no # Function TANH -func_extra_time_to_sec=no # Function TIME_TO_SEC -func_extra_to_days=no # Function TO_DAYS -func_extra_translate=no # Function TRANSLATE -func_extra_trim_many_char=no # Function TRIM; Many char extension -func_extra_trim_substring=no # Function TRIM; Substring extension -func_extra_trunc=no # Function TRUNC -func_extra_uid=no # Function UID -func_extra_unix_timestamp=no # Function UNIX_TIMESTAMP -func_extra_userenv=no # Function USERENV -func_extra_version=no # Function VERSION -func_extra_weekday=no # Function WEEKDAY -func_extra_|=yes # Function | (bitwise or) -func_extra_||=no # Function OR as '||' -func_odbc_abs=yes # Function ABS -func_odbc_acos=yes # Function ACOS -func_odbc_ascii=yes # Function ASCII -func_odbc_asin=yes # Function ASIN -func_odbc_atan=yes # Function ATAN -func_odbc_atan2=no # Function ATAN2 -func_odbc_ceiling=yes # Function CEILING -func_odbc_char=yes # Function CHAR -func_odbc_concat=no # Function CONCAT(2 arg) -func_odbc_cos=yes # Function COS -func_odbc_cot=yes # Function COT -func_odbc_curdate=no # Function CURDATE -func_odbc_curtime=no # Function CURTIME -func_odbc_database=no # Function DATABASE -func_odbc_dayname=no # Function DAYNAME -func_odbc_dayofmonth=no # Function DAYOFMONTH -func_odbc_dayofweek=no # Function DAYOFWEEK -func_odbc_dayofyear=no # Function DAYOFYEAR -func_odbc_degrees=yes # Function DEGREES -func_odbc_difference=yes # Function DIFFERENCE() -func_odbc_exp=yes # Function EXP -func_odbc_extract=no # Function EXTRACT -func_odbc_floor=yes # Function FLOOR -func_odbc_fn_left=yes # Function ODBC syntax LEFT & RIGHT -func_odbc_hour=no # Function HOUR -func_odbc_hour_time=no # Function ANSI HOUR -func_odbc_ifnull=no # Function IFNULL -func_odbc_insert=no # Function INSERT -func_odbc_lcase=no # Function LCASE -func_odbc_left=no # Function LEFT -func_odbc_length=no # Function REAL LENGTH -func_odbc_length_without_space=no # Function ODBC LENGTH -func_odbc_locate_2=no # Function LOCATE(2 arg) -func_odbc_locate_3=no # Function LOCATE(3 arg) -func_odbc_log=yes # Function LOG -func_odbc_log10=yes # Function LOG10 -func_odbc_ltrim=yes # Function LTRIM -func_odbc_minute=no # Function MINUTE -func_odbc_mod=no # Function MOD -func_odbc_month=no # Function MONTH -func_odbc_monthname=no # Function MONTHNAME -func_odbc_now=no # Function NOW -func_odbc_pi=yes # Function PI -func_odbc_power=yes # Function POWER -func_odbc_quarter=no # Function QUARTER -func_odbc_radians=error # Function RADIANS -func_odbc_rand=yes # Function RAND -func_odbc_repeat=no # Function REPEAT -func_odbc_replace=no # Function REPLACE -func_odbc_right=yes # Function RIGHT -func_odbc_round=yes # Function ROUND(2 arg) -func_odbc_rtrim=yes # Function RTRIM -func_odbc_second=no # Function SECOND -func_odbc_sign=yes # Function SIGN -func_odbc_sin=yes # Function SIN -func_odbc_soundex=yes # Function SOUNDEX -func_odbc_space=yes # Function SPACE -func_odbc_sqrt=yes # Function SQRT -func_odbc_substring=yes # Function ODBC SUBSTRING -func_odbc_tan=yes # Function TAN -func_odbc_timestampadd=no # Function TIMESTAMPADD -func_odbc_timestampdiff=no # Function TIMESTAMPDIFF -func_odbc_truncate=no # Function TRUNCATE -func_odbc_ucase=no # Function UCASE -func_odbc_user=yes # Function USER -func_odbc_user()=no # Function USER() -func_odbc_week=no # Function WEEK -func_odbc_year=no # Function YEAR -func_sql_+=yes # Function +, -, * and / -func_sql_bit_length=no # Function BIT_LENGTH -func_sql_case=yes # Function CASE -func_sql_cast=no # Function CAST -func_sql_char_length=yes # Function CHAR_LENGTH -func_sql_character_length=yes # Function CHARACTER_LENGTH -func_sql_concat_as_||=no # Function concatenation with || -func_sql_current_date=no # Function CURRENT_DATE -func_sql_current_date()=no # Function CURRENT_DATE() -func_sql_current_time=no # Function CURRENT_TIME -func_sql_current_time()=no # Function CURRENT_TIME() -func_sql_current_timestamp=no # Function CURRENT_TIMESTAMP -func_sql_current_timestamp()=no # Function CURRENT_TIMESTAMP() -func_sql_lower=yes # Function LOWER -func_sql_octet_length=yes # Function OCTET_LENGTH -func_sql_position=no # Function POSITION -func_sql_session_user=no # Function SESSION_USER -func_sql_substring=no # Function ANSI SQL SUBSTRING -func_extra_sysdate=no # Function SYSDATE -func_sql_system_user=no # Function SYSTEM_USER -func_sql_trim=no # Function TRIM -func_sql_upper=yes # Function UPPER -func_where_between=yes # Function BETWEEN -func_where_eq_all=yes # Function = ALL -func_where_eq_any=yes # Function = ANY -func_where_eq_some=yes # Function = SOME -func_where_exists=yes # Function EXISTS -func_where_in_num=yes # Function IN on numbers -func_where_like=yes # Function LIKE -func_where_like_escape=yes # Function LIKE ESCAPE -func_where_match=no # Function MATCH -func_where_match_unique=no # Function MATCH UNIQUE -func_where_matches=no # Function MATCHES -func_where_not_between=yes # Function NOT BETWEEN -func_where_not_exists=yes # Function NOT EXISTS -func_where_not_like=yes # Function NOT LIKE -func_where_not_unique=no # Function NOT UNIQUE -func_where_unique=no # Function UNIQUE -functions=yes # Functions -group_by=yes # Group by -group_by_alias=no # Group by alias -group_by_null=yes # Test nulls in group by -group_by_position=no # Group by position -group_distinct_functions=yes # Group functions with distinct -group_func_extra_bit_and=no # Group function BIT_AND -group_func_extra_bit_or=no # Group function BIT_OR -group_func_extra_std=no # Group function STD -group_func_extra_stddev=no # Group function STDDEV -group_func_extra_variance=no # Group function VARIANCE -group_func_sql_avg=yes # Group function AVG -group_func_sql_count_*=yes # Group function COUNT (*) -group_func_sql_count_column=yes # Group function COUNT column name -group_func_sql_count_distinct=yes # Group function COUNT DISTINCT column name -group_func_sql_max=yes # Group function MAX on numbers -group_func_sql_max_str=yes # Group function MAX on strings -group_func_sql_min=yes # Group function MIN on numbers -group_func_sql_min_str=yes # Group function MIN on strings -group_func_sql_sum=yes # Group function SUM -group_functions=yes # Group functions -having=yes # Having -having_with_alias=no # Having on alias -having_with_group=yes # Having with group function -ignore_end_space=yes # ignore end space in compare -index_in_create=no # index in create table -index_namespace=yes # different namespace for index -index_parts=no # index on column part (extension) -insert_empty_string=yes # insert empty string -insert_select=yes # insert INTO ... SELECT ... -intersect=no # intersect -intersect_all=no # intersect all -join_tables=16 # tables in join -left_outer_join=no # left outer join -left_outer_join_using=no # left outer join using -like_with_column=yes # column LIKE column -like_with_number=no # LIKE on numbers -lock_tables=no # lock table -logical_value=not supported # Value of logical operation (1=1) -max_big_expressions=10 # big expressions -max_char_size=255 # max char() size -max_column_name=30 # column name length -max_columns=250 # Columns in table -max_conditions=250 # OR and AND in WHERE -max_expressions=1051 # simple expressions -max_index=+64 # max index -max_index_length=600 # index length -max_index_name=30 # index name length -max_index_part_length=255 # max index part length -max_index_parts=15 # index parts -max_index_varchar_part_length=255 # index varchar part length -max_row_length=1960 # max table row length (without blobs) -max_row_length_with_null=1941 # table row length with nulls (without blobs) -max_select_alias_name=30 # select alias name length -max_stack_expression=97 # stacked expressions -max_table_alias_name=30 # table alias name length -max_table_name=30 # table name length -max_text_size=65504 # max text or blob size -max_unique_index=+64 # unique indexes -max_varchar_size=255 # max varchar() size -minus=yes # minus -minus_neg=no # Calculate 1--1 -multi_drop=yes # many tables to drop table -multi_strings=no # Multiple line strings -multi_table_delete=no # DELETE FROM table1,table2... -multi_table_update=no # Update with many tables -natural_join=no # natural join -natural_left_outer_join=no # natural left outer join -no_primary_key=yes # Tables without primary key -null_concat_expr=error # Is 'a' + NULL = NULL -null_in_index=yes # null in index -null_in_unique=yes # null in unique -null_num_expr=yes # Is 1+NULL = NULL -odbc_left_outer_join=yes # left outer join odbc style -operating_system=Windows NT Version 4.0 # crash-me tested on -order_by=yes # Order by -order_by_alias=yes # Order by alias -order_by_position=yes # Order by position -primary_key_in_create=yes # primary key in create table -query_size=65535 # query size -quote_with_"=yes # Allows ' and " as string markers -recursive_subqueries=15 # recursive subqueries -remember_end_space=no # Remembers end space in char() -remember_end_space_varchar=no # Remembers end space in varchar() -right_outer_join=no # right outer join -select_constants=yes # Select constants -select_string_size=65526 # constant string size in SELECT -select_table_update=yes # Update with sub select -select_without_from=yes # SELECT without FROM -server_version=Sybase enterprise 11.5 NT # server version -simple_joins=yes # ANSI SQL simple joins -subqueries=yes # subqueries -table_alias=no # Table alias -table_wildcard=yes # Select table_name.* -transactions=error # transactions -type_extra_abstime=no # Type abstime -type_extra_bfile=no # Type bfile -type_extra_blob=no # Type blob -type_extra_bool=no # Type bool -type_extra_box=no # Type box -type_extra_byte=no # Type byte -type_extra_char(1_arg)_binary=no # Type char(1 arg) binary -type_extra_char16=no # Type char16 -type_extra_char2=no # Type char2 -type_extra_char4=no # Type char4 -type_extra_char8=no # Type char8 -type_extra_circle=no # Type circle -type_extra_clob=no # Type clob -type_extra_datetime=yes # Type datetime -type_extra_enum(1_arg)=no # Type enum(1 arg) -type_sql_float(1_arg)=yes # Type float(1 arg) -type_extra_float4=no # Type float4 -type_extra_float8=no # Type float8 -type_extra_image=yes # Type image -type_extra_int(1_arg)_zerofill=no # Type int(1 arg) zerofill -type_extra_int1=no # Type int1 -type_extra_int2=no # Type int2 -type_extra_int3=no # Type int3 -type_extra_int4=no # Type int4 -type_extra_int8=no # Type int8 -type_extra_int_auto_increment=no # Type int not null auto_increment -type_extra_line=no # Type line -type_extra_long=no # Type long -type_extra_long_raw=no # Type long raw -type_extra_long_varbinary=no # Type long varbinary -type_extra_long_varchar(1_arg)=no # Type long varchar(1 arg) -type_extra_lseg=no # Type lseg -type_extra_mediumint=no # Type mediumint -type_extra_mediumtext=no # Type mediumtext -type_extra_middleint=no # Type middleint -type_extra_mlslabel=no # Type mlslabel -type_extra_money=yes # Type money -type_sql_nchar(1_arg)=yes # Type nchar(1 arg) -type_extra_nclob=no # Type nclob -type_extra_number=no # Type number -type_extra_number(1_arg)=no # Type number(1 arg) -type_extra_nvarchar(2_arg)=no # Type nvarchar(2 arg) -type_extra_nvarchar2(1_arg)=no # Type nvarchar2(1 arg) -type_extra_path=no # Type path -type_extra_point=no # Type point -type_extra_polygon=no # Type polygon -type_extra_raw(1_arg)=no # Type raw(1 arg) -type_extra_reltime=no # Type reltime -type_extra_rowid=no # Type rowid -type_extra_serial=no # Type serial -type_extra_set(1_arg)=no # Type set(1 arg) -type_extra_smalldatetime=yes # Type smalldatetime -type_extra_smallfloat=no # Type smallfloat -type_extra_smallmoney=yes # Type smallmoney -type_extra_text=yes # Type text -type_extra_text(1_arg)=no # Type text(1 arg) -type_extra_timespan=no # Type timespan -type_extra_varchar2(1_arg)=no # Type varchar2(1 arg) -type_extra_year=no # Type year -type_odbc_bigint=no # Type bigint -type_odbc_binary(1_arg)=yes # Type binary(1 arg) -type_odbc_datetime=yes # Type datetime -type_sql_smallint=yes # Type smallint -type_odbc_tinyint=yes # Type tinyint -type_odbc_varbinary(1_arg)=yes # Type varbinary(1 arg) -type_sql_bit=yes # Type bit -type_sql_bit(1_arg)=no # Type bit(1 arg) -type_sql_bit_varying(1_arg)=no # Type bit varying(1 arg) -type_sql_char(1_arg)=yes # Type char(1 arg) -type_sql_char_varying(1_arg)=yes # Type char varying(1 arg) -type_sql_character(1_arg)=yes # Type character(1 arg) -type_sql_character_varying(1_arg)=yes # Type character varying(1 arg) -type_sql_date=no # Type date -type_sql_dec(2_arg)=yes # Type dec(2 arg) -type_sql_decimal(2_arg)=yes # Type decimal(2 arg) -type_extra_double=no # Type double -type_sql_double_precision=yes # Type double precision -type_sql_float=yes # Type float -type_extra_float(2_arg)=no # Type float(1 arg) -type_sql_int=yes # Type int -type_sql_integer=yes # Type integer -type_sql_interval_year=no # Type interval year -type_sql_numeric(2_arg)=yes # Type numeric(2 arg) -type_sql_real=yes # Type real -type_sql_time=no # Type time -type_sql_timestamp=yes # Type timestamp -type_sql_varchar(1_arg)=yes # Type varchar(1 arg) -union=yes # union -union_all=yes # union all -unique_in_create=yes # unique in create table -unique_null_in_create=no # unique null in create -views=yes # views -where_string_size=255 # constant string size in where diff --git a/sql-bench/print-limit-table b/sql-bench/print-limit-table deleted file mode 100755 index 53b62ae33971e78dfe89310708eccb6ad2abffa6..0000000000000000000000000000000000000000 --- a/sql-bench/print-limit-table +++ /dev/null @@ -1,364 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Output a html table with a compare of all servers -# -$cmp_server="mysql"; # Get limit names from here -$full_html=1; -$opt_txt=0; - -if ($#ARGV < 0) -{ - @ARGV=glob("limits/*.cfg"); - $skip_header=0; -} -else -{ - $skip_header=1; -} - -foreach (@ARGV) -{ - /([^\/\.]*)\.cfg$/; - $server=$1; - if ($server eq $cmp_server) - { - unshift(@limits,read_config_data($server,$_)); - } - else - { - push(@limits,read_config_data($server,$_)); - } -} - -@global_limits= sort keys(%all_limits); -find_match('group_functions|functions'); # Don't report these - -if ($full_html) -{ - if (!$skip_header) - { - print "<!doctype HTML public \"-//W3O//DTD W3 HTML3.0//EN\"><HTML>"; - } - print <<EOF; -<!doctype HTML public \"-//W3O//DTD W3 HTML3.0//EN\"><HTML> -<HEAD><TITLE>Database comparison table</TITLE></HEAD> -<BODY> -<center><h3>Database comparison table generated with <B>crash-me</B></h3></center> -<table><tr><td><IMG SRC="icons/mysql-03.gif" ALT=logo></td> -<td>You can get a copy of <B>crash-me</B> from the MySQL 3.23 distribution at -<A HREF="http://www.mysql.com">http://www.mysql.com</A>. -</td></tr></table> -<br> -<strong>crash-me</strong> is a program that automatically detects -limits and capabilities in a SQL server. We at TCX have worked very -hard to make crash-me as fair and accurate as possible, but there is -always a small possibility that some particular tests fails for some -database, even if the database has the capability. We are always -willing to correct this as soon as this comes to our attention. Some -tests may fail because the database in questions does not follow -<B>ANSI SQL 99</B> or <B>ODBC 3.0</B> but in this case we regard this -as a failure in the database. -<br><br> -Note that crash-me test the <B>ODBC</B> functionality by executing -SQL commands through the perl DBD driver. As some SQL servers implements -the <B>ODBC</B> functionality in the <B>ODBC</B> driver, crash-me may -tell you that the SQL server doesn\'t support some functionality, even -if this is supported when you are using the SQL server through <B>ODBC</B>. -<br><br> -Note that even if crash-me reports that some feature is missing, not -supported, or doesn\'t work it doesn\'t mean that the SQL server -doesn\'t follow the SQL standard or that you can\'t do the operation -in some other way. crash-me just tells you how the SQL server works -if you send it some specific query. The result is however often useful -for applications writers that tries to write portable code and needs to be -aware of the differences between different SQL servers. -<br><br> -TCX is trying to add as much tests to the crash-me program as they can -but it\'s always possible that some database vendor specific functions -/ queries aren\'t tested. If you find some entries not tested on a -database please let us know and try to patch the crash-me program your -self or give us some example queries so we can add those entries. We -are always open for suggestions for adding things to the crash-me -program. The crash-me program is also our input reference for the -MySQL benchmark program.<br> - -<B>Note:</B> -The crash-me table is generated from databases started with default -parameters. If this is not the case, this is noted in the comment row. -Some detected limits may also be configurable, OS dependent, depend of the -Perl DBI driver or depending on the license of the used database version. -<BR><BR> -The following markers are used in the comparison table -<table border=1> -<tr><th>Marker</th><th>Description</th></tr> -<tr><td><IMG SRC=\"images/ok.gif\" WIDTH=20 HEIGHT=16 ALT=\"yes\"></td> -<td>Function is supported</td></tr> -<tr><td><IMG SRC=\"images/no.gif\" WIDTH=14 HEIGHT=14 ALT=\"no\"></td> -<td>Function is not supported</td></tr> -<tr><td><IMG SRC=\"images/error.gif\" WIDTH=20 HEIGHT=16 ALT=\"error\"></td> -<td>Function exists but didn\'t return expected result. This usually means that -the database is using some non standard extension for the option in question</td></tr> -<tr><td>ignored</td><td>Function doesn\'t give an error from the server but it -doesn\'t do anything. One can probably do the same action with some other -command</td></tr> -<tr><td>nonstandard</td><td>Function exists but doesn\'t work according to -<B>ANSI SQL 92</B> or <B>ODBC 3.0</B></td></tr> -<tr><td> </td><td>Not relevant or not tested with the database</td></tr> -<tr><td>+number</td><td>At least <b>number</b> operations is supported</td></tr> -<tr><td><IMG SRC=\"images/warning.gif\" WIDTH=28 HEIGHT=28 ALT=\"warning\"></td> -<td><B>Anyone with normal access to the database server can take it down, possible -forever!</B></td> </table> - -<center><h3>The <B>crash-me</B> comparisons</h3></center> -EOF -} - -print "<TABLE BORDER=2><TR ALIGN=left>\n"; -# -# printer server names -# - -$columns=$#limits+2; -print "<th>Function</th>\n"; -foreach $server (@limits) -{ - print "<td>$server->[1]->{'server_version'}</td>"; - $server->[1]->{'server_version'} =~ /^(\S*)/; - push(@server_names,$1); -} -find_match("server_version"); # Mark used -print "</tr>\n"; - -print_match("Crash-me information",'crash_me|operating_system|user_comment',undef(),1); -print_match("ANSI SQL 92 types","type_sql"); -print_match("ODBC 3.0 types","type_odbc"); -print_match("Other types","type_extra"); -print_match("Constraints and type modifiers","constraint|foreign|primary|unique|default","alter|max_unique"); -print_match("ANSI SQL 92 functions","func_sql","group"); -print_match("ODBC 3.0 functions","func_odbc","group"); -print_match("Other functions","func_extra","group"); -print_match("Functions in WHERE","func_where","group"); -print_match("ANSI SQL 92 group functions","group_func_sql"); -print_match("Other group functions","group_func"); -print_match("Function use","NEG|minus_neg|like|null.*expr"); -print_match("Order by and group by","order|having|group"); -print_match("Join methods",'join|subqueries|multi_table|select_table_update'); -print_match("String handling","string|select_constant|quote_with|double_quotes|end_space"); -print_match("Quoting","quote"); -print_match("Name limits","name","alter"); -print_match("Index limits",'index|primary|unique'); -print_match("Type limits",'char|float|text_size|date|end_space','atomic'); -print_match("Expressions",'expression|conditions|select_limit|binary|hex|cast|logical|true_false'); -print_match("Comments",'comment'); -print_match("ALTER TABLE",'alter'); -print_match("CREATE and DROP",'create|drop|rowid|temporary|domains|truncate'); -print_match("SELECT",'alias|compute|select|table_wildcard'); -print_match("Sets",'intersect|minus|union|except'); -print_match("INSERT",'insert'); -print_options("Other features"); -print_match("Other limits",'\S'); - -print "</table>\n"; - -if ($full_html) -{ - print <<EOF; -<BR> -This information is provided by TCX so one can get the real limitations from -the database server (not the information from sales managers!). Hopefully the -above information will make it easier for you to find a database server that -has the functionality you need and that you can rely on! -<BR><BR> -TCX will continue to extend <b>crash-me</b> and add more database servers -to the above chart. We are also very interested in new tests so if you have -any suggestions, please mail us (or even better, send us code). -<BR> -We are also working on the <B>MySQL</B> <A HREF ="/benchmark.html">benchmark</A> -to help users see how fast a database is when doing different typical things. -<br> -<IMG SRC="images/eyesleft.gif" HEIGHT=9 WIDTH=582 ALT="=============================================="> -<ADDRESS> You can direct questions about crash-me and the benchmark to the -<A HREF=\"http://www.tcx.se/mail.html\">MySQL mailing list</A>. -</ADDRESS> -</BODY></HTML> -EOF -} exit 0; - - -sub read_config_data -{ - my ($server,$file)=@_; - my (%limits,%prompts); - open(CONFIG_FILE,"<$file") || - die "Can't open configure file $file\n"; - while (<CONFIG_FILE>) - { - chomp; - if (/^(\S+)=([^\#]*[^\#\s])\s*(\# .*)*$/) - { - $all_limits{$1}=1; - $limits{$1}=$2; - $prompts{$1}=length($3) ? substr($3,2) : ""; - } - elsif (!/^\s*$/ && !/^\#/) - { - die "Wrong config row: $_\n"; - } - } - close CONFIG_FILE; - return ([$server,\%limits,\%prompts]); -} - - -sub find_match -{ - my ($find,$find_not)=@_; - my ($key,@res); - - foreach $key (@global_limits) - { - if ($key =~ /$find/ && (!defined($find_not) || !($key =~ /$find_not/))) - { - push(@res,$key); - $key=""; - } - } - return @res; -} - - -sub print_match -{ - my ($header,$match,$not_match,$no_server_names)=@_; - my ($key); - if ($opt_txt) - { - print "\n$header\n"; - } - else - { - print "<tr><th colspan=$columns ALIGN=center>$header</th></tr>\n"; - } - print_server_names() if (!$no_server_names); - foreach $key (find_match($match,$not_match)) - { - print_key($key,$key eq "crash_me_safe" ? 1: 0); - } -} - - -sub print_options -{ - my ($header)=@_; - if ($opt_txt) - { - print "\n$header\n"; - } - else - { - print "<tr><th colspan=$columns ALIGN=center>$header</th></tr>\n"; - } - print_server_names(); - foreach $key (@global_limits) - { - if ($key && !($limits[0]->[1]{$key} =~ /^\d+$/)) - { - print_key($key,0); - $key=""; - } - } -} - - -sub print_key -{ - my ($key,$fatal)=@_; - my ($i,$server,$option,$tmp); - $option=$key; - for ($i=0 ; $i < $columns ; $i++) - { - if ($limits[$i]->[2]{$key}) - { - $option=$limits[$i]->[2]{$key}; - last; - } - } - $option =~ s/>/>\;/g; - $option =~ s/</<\;/g; - - if ($opt_txt) - { - print "\n$option\t"; - foreach $server (@limits) - { - $tmp=$server->[1]->{$key}; - $tmp="yes" if ($tmp eq "yes"); - $tmp="no" if ($tmp eq "no" && !$fatal); - $tmp="warning" if ($tmp eq "no" && $fatal); - $tmp="error" if ($tmp eq "error"); - $tmp="" if (!defined($tmp) || $tmp eq ""); - print "\t$tmp"; - } - } - else - { - $option =~ s/ / /g; - print "<tr><td>$option</td>"; - foreach $server (@limits) - { - $tmp=$server->[1]->{$key}; - $tmp="<IMG SRC=\"images/ok.gif\" WIDTH=20 HEIGHT=16 ALT=\"yes\">" if ($tmp eq "yes" && !$fatal); - $tmp="<IMG SRC=\"images/thumbs_up.gif\" ALT=\"yes\">" if ($tmp eq "yes" && $fatal); - $tmp="<IMG SRC=\"images/no.gif\" WIDTH=14 HEIGHT=14 ALT=\"no\">" if ($tmp eq "no" && !$fatal); - $tmp="<IMG SRC=\"images/warning.gif\" WIDTH=28 HEIGHT=28 ALT=\"warning\">" if ($tmp eq "no" && $fatal); - $tmp="<IMG SRC=\"images/error.gif\" WIDTH=20 HEIGHT=16 ALT=\"error\">" if ($tmp eq "error"); - $tmp=" " if (!defined($tmp) || $tmp eq ""); - print "<td>$tmp</td>"; - } - print"</tr>\n"; - } -} - - -sub print_server_names -{ - my ($server); - - if ($opt_txt) - { - my $tab; - $tab=""; - foreach $server (@server_names) - { - print "$tab$server"; - $tab="\t"; - } - print "\n"; - } - else - { - print "<tr><th></th>"; - foreach $server (@server_names) - { - print "<th>$server</th>"; - } - print "</tr>\n"; - } -} - diff --git a/sql-bench/pwd.bat b/sql-bench/pwd.bat deleted file mode 100644 index 104fd349d4edf0de6f4577abdfa433ea9c4719d4..0000000000000000000000000000000000000000 --- a/sql-bench/pwd.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -@cd diff --git a/sql-bench/run-all-tests.sh b/sql-bench/run-all-tests.sh deleted file mode 100644 index da576d7385232aefed4c9a4c9a24ae81924034da..0000000000000000000000000000000000000000 --- a/sql-bench/run-all-tests.sh +++ /dev/null @@ -1,309 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# This program runs all test that starts with 'test-' and sums -# the results that the program prints. -# Each time result should be of the form: -# Time for|to KEYWORD (number_of_runs) 'other info': timestr() -# -# All options to this script is passed to all test program. -# useful options: -# --fast --force --lock-tables -# --server ==> mysql (default) / mSQL / Pg (postgres) / Solid -# --user ==> the user with permission to create / drop / select -# --pass ==> password for the user -# --cmp ==> Compare --server with one of the others (mysql/mSQL/Pg/Solid) -# --comments ==> everything you want to say such as the extra options you -# gave to the db server. (use --comments="xxx xxx xxx" -# --machine ==> Give a OS/machine id for your logfiles. -# --log ==> puts output in output/RUN-server-machine-cmp-$opt_cmp - -use DBI; -use Cwd; - -$opt_silent=1; # Don't write header - -@ORG_ARGV=@ARGV; -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; -$opt_silent=0; -$perl=$^X; -$machine=machine(); -$redirect= !($machine =~ /windows/i || $machine =~ "^NT\s") ? "2>&1" : ""; -$dir= ($pwd =~ /\\/) ? '\\' : '/'; # directory symbol for shell - -$prog_args=""; -foreach $arg (@ORG_ARGV) -{ - if ($redirect) - { - $prog_args.="'" . $arg . "' "; - } - else - { - # Windows/NT can't handle ' around arguments - $prog_args.=$arg . " "; - } -} - -$prog_count=$errors=0; - -if ($opt_cmp) { - $filename = "$opt_server$opt_suffix-" . machine_part() . "-cmp-$opt_cmp"; -} else { - $filename = "$opt_server$opt_suffix-" . machine_part(); -} - -if (! -d $opt_dir) -{ - if (-e $opt_dir) - { - die "$opt_dir isn't a directory\n"; - } - mkdir $opt_dir,0777 || die "Can't create directory: $opt_dir\n"; -} - -if ($opt_skip_test) { - (@skip_tests) = split(/,\s*/, $opt_skip_test); -} - -if ($opt_old_headers) -{ - read_headers("$opt_dir/RUN-$filename"); -} -else -{ - $server_version=$server->version(); -} - -if (!$opt_log) -{ - open(LOG,">&STDOUT"); -} -else -{ - open(LOG, "> $opt_dir/RUN-$filename") || - die "Can't write to $opt_dir/RUN-$filename: $!\n"; -} - -select(LOG); -$|=1; - -print "Benchmark DBD suite: $benchmark_version\n"; -print "Date of test: $date\n"; -print "Running tests on: $machine\n"; -print "Arguments: $log_prog_args\n"; -print "Comments: $opt_comments\n"; -print "Limits from: $opt_cmp\n"; -print "Server version: $server_version\n"; -print "Optimization: $opt_optimization\n"; -print "Hardware: $opt_hw\n\n"; - - -$estimated=$warning=$got_warning=0; -while (<test-*>) -{ - next if (/\.sh$/); # configure script - next if (/\-fork$/); # test script - $prog_count++; - /test-(.*)$/; # Remove test from name - $prog=$1; - $skip_prog = 0; - foreach $skip_this (@skip_tests) { - if ($prog =~ /$skip_this/i) { - $skip_prog = 1; - last; - } - } - print "$prog: "; - if ((!$opt_use_old_results) && (!$skip_prog)) - { - if (system("$perl ./test-$prog $prog_args > \"$opt_dir$dir$prog-$filename\" $redirect")) - { - printf STDERR "Warning: Can't execute $prog. Check the file '$opt_dir$dir$prog-$filename'\n"; - die "aborted" if ($opt_die_on_errors); - } - } - open(TEST,"$opt_dir/$prog-$filename"); - $last_line=""; - while(<TEST>) - { - chomp; - $last_line=$_ if (!(/^\s*$/)); # Search after last line - } - if ($last_line =~ /Total time:/i) - { - print $last_line . "\n"; - open(TEST,"$opt_dir/$prog-$filename"); - while (<TEST>) - { - if (/^(estimated |)time (to|for) ([^\s:]*)\s*\((\d*)(:\d*)*\)[^:]*:\s*([\d.]+) .*secs \(\s*([^\s]*) usr\s*\+*\s*([^\s]*) sys.*=\s+([\d.]*)\s+cpu/i) - { - $arg=$summa{$3}; - if (!defined($arg)) - { - $summa{$3}= [ $4,$6,$7,$8,$9,""]; - } - else - { - $arg->[0]+=$4; - $arg->[1]+=$6; - $arg->[2]+=$7; - $arg->[3]+=$8; - $arg->[4]+=$9; - } - $prog_sum[0]+=$4; - $prog_sum[1]+=$6; - $prog_sum[2]+=$7; - $prog_sum[3]+=$8; - $prog_sum[4]+=$9; - if (length($1)) - { - $summa{$3}->[5].="+"; - $estimated=1; - } - if ($got_warning) - { - $summa{$3}->[5].="?"; - $warning=1; - $got_warning=0; - } - } - elsif (/^warning/i) - { - $got_warning=1; - } - else - { - $got_warning=0; - } - } - if ($opt_debug) - { - print "Summary for $prog: ", join(" ",@prog_sum), "\n"; - } - } - elsif ($last_line =~ /^Test skipped/i) - { - print "$last_line\n"; - } - else - { - $errors++; - print "Failed ($opt_dir/$prog-$filename)\n"; - } -} - -print "\n"; -if (!$errors) -{ - print "All $prog_count test executed successfully\n"; -} -else -{ - print "Of $prog_count tests, $errors tests didn't work\n"; -} -if ($estimated) -{ - print "Tests with estimated time have a + at end of line\n" -} -if ($warning) -{ - print "Tests with didn't return the correct result have a ? at end of line\n"; -} - -if (%summa) -{ - @total=(0,0,0,0,0,""); - print "\nTotals per operation:\n"; - print "Operation seconds usr sys cpu tests\n"; - foreach $key (sort(keys %summa)) - { - $arg=$summa{$key}; - printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", - $key,$arg->[1],$arg->[2],$arg->[3],$arg->[4],$arg->[0], - $arg->[5]); - - for ($i=0 ; $i < 5 ; $i++) - { - $total[$i]+=$arg->[$i]; - } - $total[5].=$arg->[$i]; - } - printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", - "TOTALS",$total[1],$total[2],$total[3],$total[4],$total[0], - $total[5]); -} - -select(STDOUT); -if ($opt_log) -{ - print "Test finished. You can find the result in:\n$opt_dir/RUN-$filename\n"; -} - - -# -# Read headers from an old benchmark run -# - -sub read_headers -{ - my ($filename)=@_; - - # Clear current values - $benchmark_version=$date=$machine=$server_version=""; - - open(TMP, "<$filename") || die "Can't open $filename\n"; - while (<TMP>) - { - chop; - if (/^Benchmark DBD.*:\s+(.*)$/) - { - $benchmark_version=$1; - } - elsif (/^Date of.*:\s+(.*)/) - { - $date=$1; - } - elsif (/^Running.*:\s+(.*)$/) - { - $machine=$1; - } - elsif (/^Arguments.*:\s+(.*)$/) - { - $log_prog_args=$1; - } - elsif (/^Limits.*:\s+(.*)$/) - { - $opt_cmp=$1; - } - elsif (/^Server ver.*:\s+(.*)$/) - { - $server_version=$1; - } - elsif (/^Optimiz.*:\s+(.*)$/) - { - $opt_optimization=$1; - } - elsif (/^Hardwar.*:\s+(.*)$/) - { - $opt_hw=$1; - } - } - close(TMP); -} diff --git a/sql-bench/server-cfg.sh b/sql-bench/server-cfg.sh deleted file mode 100644 index 75528b24b77c71b42a79841fb8a233d2f32eb709..0000000000000000000000000000000000000000 --- a/sql-bench/server-cfg.sh +++ /dev/null @@ -1,3620 +0,0 @@ -#!@PERL@ -# -*- perl -*- -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# The configuration file for the DBI/DBD tests on different databases .... -# You will need the DBD module for the database you are running. -# Monty made this bench script and I (Luuk de Boer) rewrote it to DBI/DBD. -# Monty rewrote this again to use packages. -# -# Each database has a different package that has 3 functions: -# new Creates a object with some standard slot -# version Version number of the server -# create Generates commands to create a table -# - -# -# First some global functions that help use the packages: -# - -sub get_server -{ - my ($name,$host,$database,$odbc,$machine,$socket,$connect_options)=@_; - my ($server); - if ($name =~ /mysql/i) - { $server=new db_MySQL($host, $database, $machine, $socket,$connect_options); } - elsif ($name =~ /pg/i) - { $server= new db_Pg($host,$database); } - elsif ($name =~ /msql/i) - { $server= new db_mSQL($host,$database); } - elsif ($name =~ /solid/i) - { $server= new db_Solid($host,$database); } - elsif ($name =~ /Empress/i) - { $server= new db_Empress($host,$database); } - elsif ($name =~ /FrontBase/i) - { $server= new db_FrontBase($host,$database); } - elsif ($name =~ /Oracle/i) - { $server= new db_Oracle($host,$database); } - elsif ($name =~ /Access/i) - { $server= new db_access($host,$database); } - elsif ($name =~ /Informix/i) - { $server= new db_Informix($host,$database); } - elsif ($name =~ /ms-sql/i) - { $server= new db_ms_sql($host,$database); } - elsif ($name =~ /sybase/i) - { $server= new db_sybase($host,$database); } - elsif ($name =~ /Adabas/i) # Adabas has two drivers - { - $server= new db_Adabas($host,$database); - if ($name =~ /AdabasD/i) - { - $server->{'data_source'} =~ s/:Adabas:/:AdabasD:/; - } - } - elsif ($name =~ /DB2/i) - { $server= new db_db2($host,$database); } - elsif ($name =~ /Mimer/i) - { $server= new db_Mimer($host,$database); } - elsif ($name =~ /Sapdb/i) - { $server= new db_sapdb($host,$database); } - elsif ($name =~ /interBase/i) - { $server= new db_interbase($host,$database); } - else - { - die "Unknown sql server name used: $name\nUse one of: Access, Adabas, AdabasD, Empress, FrontBase, Oracle, Informix, InterBase, DB2, mSQL, Mimer, MS-SQL, MySQL, Pg, Solid, SAPDB or Sybase.\nIf the connection is done trough ODBC the name must end with _ODBC\n"; - } - if ($name =~ /_ODBC$/i || defined($odbc) && $odbc) - { - if (! ($server->{'data_source'} =~ /^([^:]*):([^:]+):([^:]*)/ )) - { - die "Can't find databasename in data_source: '" . - $server->{'data_source'}. "'\n"; - } - if ($3) { - $server->{'data_source'} = "$1:ODBC:$3"; - } else { - $server->{'data_source'} = "$1:ODBC:$database"; - } - } - return $server; -} - -sub all_servers -{ - return ["Access", "Adabas", "DB2", "Empress", "FrontBase", "Oracle", - "Informix", "InterBase", "Mimer", "mSQL", "MS-SQL", "MySQL", "Pg","SAPDB", - "Solid", "Sybase"]; -} - -############################################################################# -# First the configuration for MySQL off course :-) -############################################################################# - -package db_MySQL; - -sub new -{ - my ($type,$host,$database,$machine,$socket,$connect_options)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "mysql"; - $self->{'data_source'} = "DBI:mysql:database=$database;host=$host"; - $self->{'data_source'} .= ";mysql_socket=$socket" if($socket); - $self->{'data_source'} .= ";$connect_options" if($connect_options); - $self->{'limits'} = \%limits; - $self->{'blob'} = "blob"; - $self->{'text'} = "text"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'vacuum'} = 1; # When using with --fast - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 0; # Transactions disabled by default - - $limits{'NEG'} = 1; # Supports -id - $limits{'alter_add_multi_col'}= 1; #Have ALTER TABLE t add a int,add b int; - $limits{'alter_table'} = 1; # Have ALTER TABLE - $limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'func_extra_%'} = 1; # Has % as alias for mod() - $limits{'func_extra_if'} = 1; # Have function if. - $limits{'func_extra_in_num'} = 1; # Has function in - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_odbc_mod'} = 1; # Have function mod. - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_by_position'} = 1; # Can use 'GROUP BY 1' - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'group_func_extra_std'} = 1; # Have group function std(). - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_functions'} = 1; # Have group functions - $limits{'having_with_alias'} = 1; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can use group functions in HAVING - $limits{'insert_multi_value'} = 1; # Have INSERT ... values (1,2),(3,4) - $limits{'insert_select'} = 1; - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'limit'} = 1; # supports the limit attribute - $limits{'truncate_table'} = 1; - $limits{'load_data_infile'} = 1; # Has load data infile - $limits{'lock_tables'} = 1; # Has lock tables - $limits{'max_column_name'} = 64; # max table and column name - $limits{'max_columns'} = 2000; # Max number of columns in table - $limits{'max_conditions'} = 9999; # (Actually not a limit) - $limits{'max_index'} = 16; # Max number of keys - $limits{'max_index_parts'} = 16; # Max segments/key - $limits{'max_tables'} = (($machine || '') =~ "^win") ? 5000 : 65000; - $limits{'max_text_size'} = 1000000; # Good enough for tests - $limits{'multi_drop'} = 1; # Drop table can take many tables - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'order_by_unused'} = 1; - $limits{'query_size'} = 1000000; # Max size with default buffers. - $limits{'select_without_from'}= 1; # Can do 'select 1'; - $limits{'subqueries'} = 0; # Doesn't support sub-queries. - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'working_all_fields'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - # Some fixes that depends on the environment - if (defined($main::opt_create_options) && - $main::opt_create_options =~ /engine=heap/i) - { - $limits{'working_blobs'} = 0; # HEAP tables can't handle BLOB's - } - if (defined($main::opt_create_options) && - $main::opt_create_options =~ /engine=innodb/i) - { - $self->{'transactions'} = 1; # Transactions enabled - } - if (defined($main::opt_create_options) && - $main::opt_create_options =~ /engine=ndb/i) - { - $self->{'transactions'} = 1; # Transactions enabled - $limits{'max_columns'} = 90; # Max number of columns in table - $limits{'max_tables'} = 32; # No comments - } - if (defined($main::opt_create_options) && - $main::opt_create_options =~ /engine=bdb/i) - { - $self->{'transactions'} = 1; # Transactions enabled - } - if (defined($main::opt_create_options) && - $main::opt_create_options =~ /engine=gemini/i) - { - $limits{'working_blobs'} = 0; # Blobs not implemented yet - $limits{'max_tables'} = 500; - $self->{'transactions'} = 1; # Transactions enabled - } - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); - $sth = $dbh->prepare("select VERSION()") or die $DBI::errstr; - $version="MySQL 3.20.?"; - if ($sth->execute && (@row = $sth->fetchrow_array)) - { - $row[0] =~ s/-/ /g; # To get better tables with long names - $version="MySQL $row[0]"; - } - $sth->finish; - - $sth = $dbh->prepare("show status like 'ssl_version'") or die $DBI::errstr; - if ($sth->execute && (@row = $sth->fetchrow_array)) - { - $version .= "/$row[1]"; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -# -# Connection with optional disabling of logging -# - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - - $dbh->do("SET OPTION LOG_OFF=1,UPDATE_LOG=0"); - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index,$options) = @_; - my($query,@queries); - - $query="create table $table_name ("; - foreach $field (@$fields) - { -# $field =~ s/ decimal/ double(10,2)/i; - $field =~ s/ big_decimal/ double(10,2)/i; - $query.= $field . ','; - } - foreach $index (@$index) - { - $query.= $index . ','; - } - substr($query,-1)=")"; # Remove last ','; - $query.=" $options" if (defined($options)); - $query.=" $main::opt_create_options" if (defined($main::opt_create_options)); - push(@queries,$query); - return @queries; -} - -sub insert_file { - my ($self,$dbname, $file, $dbh) = @_; - my ($command, $sth); - - $file =~ s|\\|/|g; # Change Win32 names to Unix syntax - $command = "load data infile '$file' into table $dbname columns optionally enclosed by '\\'' terminated by ','"; -# print "$command\n"; - $sth = $dbh->do($command) or die $DBI::errstr; - return $sth; # Contains number of rows -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index { - my ($self,$table,$index) = @_; - return "DROP INDEX $index ON $table"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -# -# This should return 1 if we to do disconnect / connect when doing -# big batches -# - -sub small_rollback_segment -{ - return 0; -} - -# -# reconnect on errors (needed mainly be crash-me) -# - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -# -# Optimize tables for better performance -# - -sub vacuum -{ - my ($self,$full_vacuum,$dbh_ref,@tables)=@_; - my ($loop_time,$end_time,$dbh); - if ($#tables >= 0) - { - $dbh=$$dbh_ref; - $loop_time=new Benchmark; - $dbh->do("OPTIMIZE TABLE " . join(',',@tables)) || die "Got error: $DBI::errstr when executing 'OPTIMIZE TABLE'\n"; - $end_time=new Benchmark; - print "Time for book-keeping (1): " . - Benchmark::timestr(Benchmark::timediff($end_time, $loop_time),"all") . "\n\n"; - } -} - -############################################################################# -# Definitions for mSQL -############################################################################# - -package db_mSQL; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "msql"; - $self->{'data_source'} = "DBI:mSQL:$database:$host"; - $self->{'limits'} = \%limits; - $self->{'double_quotes'} = 0; - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 0; # No transactions - $self->{'blob'} = "text(" . $limits{'max_text_size'} .")"; - $self->{'text'} = "text(" . $limits{'max_text_size'} .")"; - - $limits{'max_conditions'} = 74; - $limits{'max_columns'} = 75; - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 32000; - $limits{'query_size'} = 65535; - $limits{'max_index'} = 5; - $limits{'max_index_parts'} = 10; - $limits{'max_column_name'} = 35; - - $limits{'join_optimizer'} = 0; # Can't optimize FROM tables - $limits{'load_data_infile'} = 0; - $limits{'lock_tables'} = 0; - $limits{'functions'} = 0; - $limits{'group_functions'} = 0; - $limits{'group_distinct_functions'}= 0; # Have count(distinct) - $limits{'multi_drop'} = 0; - $limits{'select_without_from'}= 0; - $limits{'subqueries'} = 0; - $limits{'left_outer_join'} = 0; - $limits{'table_wildcard'} = 0; - $limits{'having_with_alias'} = 0; - $limits{'having_with_group'} = 0; - $limits{'like_with_column'} = 1; - $limits{'order_by_position'} = 1; - $limits{'group_by_position'} = 1; - $limits{'alter_table'} = 0; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - $limits{'group_func_extra_std'} = 0; - $limits{'limit'} = 1; # supports the limit attribute - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 0; - - $limits{'func_odbc_mod'} = 0; - $limits{'func_extra_%'} = 0; - $limits{'func_odbc_floor'} = 0; - $limits{'func_extra_if'} = 0; - $limits{'column_alias'} = 0; - $limits{'NEG'} = 0; - $limits{'func_extra_in_num'} = 0; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($tmp,$dir); - foreach $dir ("/usr/local/Hughes", "/usr/local/mSQL","/my/local/mSQL", - "/usr/local") - { - if (-x "$dir/bin/msqladmin") - { - $tmp=`$dir/bin/msqladmin version | grep server`; - if ($tmp =~ /^\s*(.*\w)\s*$/) - { # Strip pre- and endspace - $tmp=$1; - $tmp =~ s/\s+/ /g; # Remove unnecessary spaces - $tmp .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - - return $tmp; - } - } - } - return "mSQL version ???"; -} - - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Can't handle many field types, so we map everything to int and real. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$name,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/varchar/char/i; # mSQL doesn't have VARCHAR() - # mSQL can't handle more than the real basic int types - $field =~ s/tinyint|smallint|mediumint|integer/int/i; - # mSQL can't handle different visual lengths - $field =~ s/int\(\d*\)/int/i; - # mSQL doesn't have float, change it to real - $field =~ s/float(\(\d*,\d*\)){0,1}/real/i; - $field =~ s/double(\(\d*,\d*\)){0,1}/real/i; - # mSQL doesn't have blob, it has text instead - if ($field =~ / blob/i) - { - $name=$self->{'blob'}; - $field =~ s/ blob/ $name/; - } - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - - # Prepend table_name to index name because the the name may clash with - # a field name. (Should be diffent name space, but this is mSQL...) - - foreach $index (@$index) - { - # Primary key is unique index in mSQL - $index =~ s/primary key/unique index primary/i; - if ($index =~ /^unique\s*\(([^\(]*)\)$/i) - { - $nr++; - push(@queries,"create unique index ${table_name}_$nr on $table_name ($1)"); - } - else - { - if (!($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i)) - { - die "Can't parse index information in '$index'\n"; - } - push(@queries,"create $1 ${table_name}_$2 on $table_name $3"); - } - } - return @queries; -} - - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert an ascii file isn't supported by mSQL\n"; - return 0; -} - - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index FROM $table"; -} - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Definitions for PostgreSQL # -############################################################################# - -package db_Pg; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "pg"; - $self->{'data_source'} = "DBI:Pg:dbname=$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "text"; - $self->{'text'} = "text"; - $self->{'double_quotes'} = 1; - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{"vacuum"} = 1; - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; - - $limits{'NEG'} = 1; - $limits{'alter_add_multi_col'}= 0; # alter_add_multi_col ? - $limits{'alter_table'} = 1; - $limits{'alter_table_dropcol'}= 0; - $limits{'column_alias'} = 1; - $limits{'func_extra_%'} = 1; - $limits{'func_extra_if'} = 0; - $limits{'func_extra_in_num'} = 1; - $limits{'func_odbc_floor'} = 1; - $limits{'func_odbc_mod'} = 1; # Has % - $limits{'functions'} = 1; - $limits{'group_by_position'} = 1; - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'group_func_extra_std'} = 0; - $limits{'group_func_sql_min_str'}= 1; # Can execute MIN() and MAX() on strings - $limits{'group_functions'} = 1; - $limits{'having_with_alias'} = 0; - $limits{'having_with_group'} = 1; - $limits{'insert_select'} = 1; - $limits{'left_outer_join'} = 1; - $limits{'like_with_column'} = 1; - $limits{'lock_tables'} = 0; # in ATIS gives this a problem - $limits{'max_column_name'} = 128; - $limits{'max_columns'} = 1000; # 500 crashes pg 6.3 - $limits{'max_conditions'} = 9999; # This makes Pg real slow - $limits{'max_index'} = 64; # Big enough - $limits{'max_index_parts'} = 16; - $limits{'max_tables'} = 5000; # 10000 crashes pg 7.0.2 - $limits{'max_text_size'} = 65000; # Good enough for test - $limits{'multi_drop'} = 1; - $limits{'order_by_position'} = 1; - $limits{'order_by_unused'} = 1; - $limits{'query_size'} = 16777216; - $limits{'select_without_from'}= 1; - $limits{'subqueries'} = 1; - $limits{'table_wildcard'} = 1; - $limits{'truncate_table'} = 1; - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'working_all_fields'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# couldn't find the option to get the version number - -sub version -{ - my ($version,$dir); - $version = "PostgreSQL version ???"; - foreach $dir ($ENV{'PGDATA'},"/usr/local/pgsql/data", "/usr/local/pg/data") - { - if ($dir && -e "$dir/PG_VERSION") - { - $version= `cat $dir/PG_VERSION`; - if ($? == 0) - { - chomp($version); - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return "PostgreSQL $version"; - } - } - } - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$name,$in,$indfield,$table,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - if ($main::opt_fast) - { - # Allow use of char2, char4, char8 or char16 - $field =~ s/char(2|4|8|16)/char$1/; - } - # Pg can't handle more than the real basic int types - $field =~ s/tinyint|smallint|mediumint|integer/int/; - # Pg can't handle different visual lengths - $field =~ s/int\(\d*\)/int/; - $field =~ s/float\(\d*,\d*\)/float/; - $field =~ s/ double/ float/; -# $field =~ s/ decimal/ float/i; -# $field =~ s/ big_decimal/ float/i; -# $field =~ s/ date/ int/i; - # Pg doesn't have blob, it has text instead - $field =~ s/ blob/ text/; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - foreach $index (@$index) - { - $index =~ s/primary key/unique index primary_key/i; - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - # original: $indfield="using btree (" .$1.")"; - # using btree doesn´t seem to work with Postgres anymore; it creates - # the table and adds the index, but it isn´t unique - $indfield=" (" .$1.")"; - $in="unique index"; - $table="index_$nr"; $nr++; - } - elsif ($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i) - { - # original: $indfield="using btree (" .$1.")"; - $indfield=" " .$3; - $in="index"; - $table="index_$nr"; $nr++; - } - else - { - die "Can't parse index information in '$index'\n"; - } - push(@queries,"create $in ${table_name}_$table on $table_name $indfield"); - } - $queries[0]=$query; - return @queries; -} - -sub insert_file { - my ($self,$dbname, $file, $dbh) = @_; - my ($command, $sth); - -# Syntax: -# copy [binary] <class_name> [with oids] -# {to|from} {<filename>|stdin|stdout} [using delimiters <delim>] - print "The ascii files aren't correct for postgres ....!!!\n"; - $command = "copy $dbname from '$file' using delimiters ','"; - print "$command\n"; - $sth = $dbh->do($command) or die $DBI::errstr; - return $sth; -} - -# -# As postgreSQL wants A % B instead of standard mod(A,B) we have to map -# This will not handle all cases, but as the benchmarks doesn't use functions -# inside MOD() the following should work -# -# PostgreSQL cant handle count(*) or even count(1), but it can handle -# count(1+1) sometimes. ==> this is solved in PostgreSQL 6.3 -# -# PostgreSQL 6.5 is supporting MOD. - -sub query { - my($self,$sql) = @_; - my(@select,$change); -# if you use PostgreSQL 6.x and x is lower as 5 then uncomment the line below. -# $sql =~ s/mod\(([^,]*),([^\)]*)\)/\($1 % $2\)/gi; -# -# if you use PostgreSQL 6.1.x uncomment the lines below -# if ($sql =~ /select\s+count\(\*\)\s+from/i) { -# } -# elsif ($sql =~ /count\(\*\)/i) -# { -# if ($sql =~ /select\s+(.*)\s+from/i) -# { -# @select = split(/,/,$1); -# if ($select[0] =~ /(.*)\s+as\s+\w+$/i) -# { -# $change = $1; -# } -# else -# { -# $change = $select[0]; -# } -# } -# if (($change =~ /count/i) || ($change eq "")) { -# $change = "1+1"; -# } -# $sql =~ s/count\(\*\)/count($change)/gi; -# } -# till here. - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -sub abort_if_fatal_error -{ - return 1 if ($DBI::errstr =~ /sent to backend, but backend closed/i); - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -sub vacuum -{ - my ($self,$full_vacuum,$dbh_ref,@tables)=@_; - my ($loop_time,$end_time,$dbh,$table); - if (defined($full_vacuum)) - { - $$dbh_ref->disconnect; $$dbh_ref= $self->connect(); - } - $dbh=$$dbh_ref; - $loop_time=new Benchmark; - if ($#tables >= 0) - { - foreach $table (@tables) - { - $dbh->do("vacuum analyze $table") || die "Got error: $DBI::errstr when executing 'vacuum analyze $table'\n"; - $dbh->do("vacuum $table") || die "Got error: $DBI::errstr when executing 'vacuum'\n"; - } - } - else - { -# $dbh->do("vacuum pg_attributes") || die "Got error: $DBI::errstr when executing 'vacuum'\n"; -# $dbh->do("vacuum pg_index") || die "Got error: $DBI::errstr when executing 'vacuum'\n"; - $dbh->do("vacuum analyze") || die "Got error: $DBI::errstr when executing 'vacuum analyze'\n"; - $dbh->do("vacuum") || die "Got error: $DBI::errstr when executing 'vacuum'\n"; - } - $end_time=new Benchmark; - print "Time for book-keeping (1): " . - Benchmark::timestr(Benchmark::timediff($end_time, $loop_time),"all") . "\n\n"; - $dbh->disconnect; $$dbh_ref= $self->connect(); -} - - -############################################################################# -# Definitions for Solid -############################################################################# - -package db_Solid; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "solid"; - $self->{'data_source'} = "DBI:Solid:"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "long varchar"; - $self->{'text'} = "long varchar"; - $self->{'double_quotes'} = 1; - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 9999; # Probably big enough - $limits{'max_columns'} = 2000; # From crash-me - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 65492; # According to tests - $limits{'query_size'} = 65535; # Probably a limit - $limits{'max_index'} = 64; # Probably big enough - $limits{'max_index_parts'} = 64; - $limits{'max_column_name'} = 80; - - $limits{'join_optimizer'} = 1; - $limits{'load_data_infile'} = 0; - $limits{'lock_tables'} = 0; - $limits{'functions'} = 1; - $limits{'group_functions'} = 1; - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; # Can do 'select 1' ?; - $limits{'multi_drop'} = 0; - $limits{'subqueries'} = 1; - $limits{'left_outer_join'} = 1; - $limits{'table_wildcard'} = 1; - $limits{'having_with_alias'} = 0; - $limits{'having_with_group'} = 1; - $limits{'like_with_column'} = 1; - $limits{'order_by_position'} = 0; # 2.30.0018 can this - $limits{'group_by_position'} = 0; - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 1; - $limits{'func_extra_%'} = 0; - $limits{'func_odbc_floor'} = 1; - $limits{'column_alias'} = 1; - $limits{'NEG'} = 1; - $limits{'func_extra_in_num'} = 1; - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($version,$dir); - $version="Solid version ??"; - foreach $dir ($ENV{'SOLIDDIR'},"/usr/local/solid", "/my/local/solid") - { - if ($dir && -e "$dir/bin/solcon") - { - $version=`$dir/bin/solcon -e"ver" $main::opt_user $main::opt_password | grep Server | sed q`; - if ($? == 0) - { - chomp($version); - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; - } - } - } - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/integer/i; - $field =~ s/ double/ float/i; - # Solid doesn't have blob, it has long varchar - $field =~ s/ blob/ long varchar/; -# $field =~ s/ decimal/ float/i; -# $field =~ s/ big_decimal/ float/i; -# $field =~ s/ date/ int/i; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - foreach $index (@$index) - { - if ($index =~ /^primary key/i || $index =~ /^unique/i) - { # Add to create statement - substr($queries[0],-1,0)="," . $index; - } - else - { - $index =~ /^(.*)\s+(\(.*\))$/; - push(@queries,"create ${1}$nr on $table_name $2"); - $nr++; - } - } - return @queries; -} - -# there is no sql statement in solid which can do the load from -# an ascii file in the db ... but there is the speedloader program -# an external program which can load the ascii file in the db ... -# the server must be down before using speedloader !!!! -# (in the standalone version) -# it works also with a control file ... that one must be made .... -sub insert_file { - my ($self, $dbname, $file) = @_; - my ($speedcmd); - $speedcmd = '/usr/local/solid/bin/solload'; - print "At this moment not supported - solid server must go down \n"; - return 0; -} - -# solid can't handle an alias in a having statement so -# select test as foo from tmp group by foo having foor > 2 -# becomes -# select test as foo from tmp group by foo having test > 2 -# -sub query { - my($self,$sql) = @_; - my(@select,$tmp,$newhaving,$key,%change); - - if ($sql =~ /having\s+/i) - { - if ($sql =~ /select (.*) from/i) - { - (@select) = split(/,\s*/, $1); - foreach $tmp (@select) - { - if ($tmp =~ /(.*)\s+as\s+(\w+)/) - { - $change{$2} = $1; - } - } - } - if ($sql =~ /having\s+(\w+)/i) - { - $newhaving = $1; - foreach $key (sort {$a cmp $b} keys %change) - { - if ($newhaving eq $key) - { - $newhaving =~ s/$key/$change{$key}/g; - } - } - } - $sql =~ s/(having)\s+(\w+)/$1 $newhaving/i; - } - return $sql; -} - - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -sub reconnect_on_errors -{ - return 0; -} - -############################################################################# -# Definitions for Empress -# -# at this moment DBI:Empress can only handle 200 prepare statements ... -# so Empress can't be tested with the benchmark test :( -############################################################################# - -package db_Empress; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "empress"; - $self->{'data_source'} = "DBI:EmpressNet:SERVER=$host;Database=/usr/local/empress/rdbms/bin/$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "text"; - $self->{'text'} = "text"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 1258; - $limits{'max_columns'} = 226; # server is disconnecting???? - # above this value .... but can handle 2419 columns - # maybe something for crash-me ... but how to check ??? - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 4095; # max returned .... - $limits{'query_size'} = 65535; # Not a limit, big enough - $limits{'max_index'} = 64; # Big enough - $limits{'max_index_parts'} = 64; # Big enough - $limits{'max_column_name'} = 31; - - $limits{'join_optimizer'} = 1; - $limits{'load_data_infile'} = 0; - $limits{'lock_tables'} = 1; - $limits{'functions'} = 1; - $limits{'group_functions'} = 1; - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; - $limits{'multi_drop'} = 0; - $limits{'subqueries'} = 1; - $limits{'table_wildcard'} = 0; - $limits{'having_with_alias'} = 0; # AS isn't supported in a select - $limits{'having_with_group'} = 1; - $limits{'like_with_column'} = 1; - $limits{'order_by_position'} = 1; - $limits{'group_by_position'} = 0; - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'}= 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; - $limits{'func_extra_%'} = 1; - $limits{'func_odbc_floor'} = 1; - $limits{'func_extra_if'} = 0; - $limits{'column_alias'} = 0; - $limits{'NEG'} = 1; - $limits{'func_extra_in_num'} = 0; - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self,$dbh)=@_; - my ($version); - $version=""; - if (-x "/usr/local/empress/rdbms/bin/empvers") - { - $version=`/usr/local/empress/rdbms/bin/empvers | grep Version`; - } - if ($version) - { - chomp($version); - } - else - { - $version="Empress version ???"; - } - - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - my($command,$sth); - $command = "insert into $dbname from '$file'"; - print "$command\n" if ($opt_debug); - $sth = $dbh->do($command) or die $DBI::errstr; - - return $sth; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/int/i; - $field =~ s/tinyint/int/i; - $field =~ s/smallint/int/i; - $field =~ s/longint/int/i; - $field =~ s/integer/int/i; - $field =~ s/ double/ longfloat/i; - # Solid doesn't have blob, it has long varchar -# $field =~ s/ blob/ text(65535,65535,65535,65535)/; - $field =~ s/ blob/ text/; - $field =~ s/ varchar\((\d+)\)/ char($1,3)/; - $field =~ s/ char\((\d+)\)/ char($1,3)/; -# $field =~ s/ decimal/ float/i; -# $field =~ s/ big_decimal/ longfloat/i; -# $field =~ s/ date/ int/i; - $field =~ s/ float(.*)/ float/i; - if ($field =~ / int\((\d+)\)/) { - if ($1 > 4) { - $field =~ s/ int\(\d+\)/ longinteger/i; - } else { - $field =~ s/ int\(\d+\)/ longinteger/i; - } - } else { - $field =~ s/ int/ longinteger/i; - } - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=1; - foreach $index (@$index) - { - # Primary key is unique index in Empress - $index =~ s/primary key/unique index/i; - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - $nr++; - push(@queries,"create unique index ${table_name}_$nr on $table_name ($1)"); - } - else - { - if (!($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i)) - { - die "Can't parse index information in '$index'\n"; - } - push(@queries,"create $1 ${table_name}_$2 on $table_name $3"); - } - } - return @queries; -} - -# empress can't handle an alias and but can handle the number of the -# columname - so -# select test as foo from tmp order by foo -# becomes -# select test from tmp order by 1 -# -sub query { - my($self,$sql) = @_; - my(@select,$i,$tmp,$newselect,$neworder,@order,$key,%change); - my($tmp1,$otmp,$tmp2); - - if ($sql =~ /\s+as\s+/i) - { - if ($sql =~ /select\s+(.*)\s+from/i) { - $newselect = $1; - (@select) = split(/,\s*/, $1); - $i = 1; - foreach $tmp (@select) { - if ($tmp =~ /\s+as\s+(\w+)/) { - $change{$1} = $i; - } - $i++; - } - } - $newselect =~ s/\s+as\s+(\w+)//gi; - $tmp2 = 0; - if ($sql =~ /order\s+by\s+(.*)$/i) { - (@order) = split(/,\s*/, $1); - foreach $otmp (@order) { - foreach $key (sort {$a cmp $b} keys %change) { - if ($otmp eq $key) { - $neworder .= "$tmp1"."$change{$key}"; - $tmp1 = ", "; - $tmp2 = 1; - } elsif ($otmp =~ /(\w+)\s+(.+)$/) { - if ($key eq $1) { - $neworder .= "$tmp1"."$change{$key} $2"; - $tmp2 = 1; - } - } - } - if ($tmp2 == 0) { - $neworder .= "$tmp1"."$otmp"; - } - $tmp2 = 0; - $tmp1 = ", "; - } - } - $sql =~ s/(select)\s+(.*)\s+(from)/$1 $newselect $3/i; - $sql =~ s/(order\s+by)\s+(.*)$/$1 $neworder/i; - } - return $sql; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - $cmd =~ s/\'\'/\' \'/g; - return $cmd; -} - - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# This is a because of the 200 statement problem with DBI-Empress - -sub abort_if_fatal_error -{ - if ($DBI::errstr =~ /Overflow of table of prepared statements/i) - { - print "Overflow of prepared statements ... killing the process\n"; - exit 1; - } - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -############################################################################# -# Definitions for Oracle -############################################################################# - -package db_Oracle; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "Oracle"; - $self->{'data_source'} = "DBI:Oracle:$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "long"; - $self->{'text'} = "long"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{"vacuum"} = 1; - - $limits{'max_conditions'} = 9999; # (Actually not a limit) - $limits{'max_columns'} = 254; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 2000; # Limit for blob test-connect - $limits{'query_size'} = 65525; # Max size with default buffers. - $limits{'max_index'} = 16; # Max number of keys - $limits{'max_index_parts'} = 16; # Max segments/key - $limits{'max_column_name'} = 32; # max table and column name - - $limits{'truncate_table'} = 1; - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; - $limits{'multi_drop'} = 0; - $limits{'subqueries'} = 1; - $limits{'left_outer_join'} = 0; # This may be fixed in the query module - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can't use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; # Oracle has problem with mod() - $limits{'func_extra_%'} = 0; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 1; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); - $sth = $dbh->prepare("select VERSION from product_component_version WHERE PRODUCT like 'Oracle%'") or die $DBI::errstr; - $version="Oracle 7.x"; - if ($sth->execute && (@row = $sth->fetchrow_array)) - { - $version="Oracle $row[0]"; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$ind,@keys); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/ character\((\d+)\)/ char\($1\)/i; - $field =~ s/ character varying\((\d+)\)/ varchar\($1\)/i; - $field =~ s/ char varying\((\d+)\)/ varchar\($1\)/i; - $field =~ s/ integer/ number\(38\)/i; - $field =~ s/ int/ number\(38\)/i; - $field =~ s/ tinyint/ number\(38\)/i; - $field =~ s/ smallint/ number\(38\)/i; - $field =~ s/ mediumint/ number\(38\)/i; - $field =~ s/ tinynumber\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ smallnumber\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ mediumnumber\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ number\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ numeric\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ decimal\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ dec\((\d+)\)\((\d+)\)/ number\($1,$2\)/i; - $field =~ s/ float/ number/; - $field =~ s/ real/ number/; - $field =~ s/ double precision/ number/; - $field =~ s/ double/ number/; - $field =~ s/ blob/ long/; - $query.= $field . ','; - } - - foreach $ind (@$index) - { - my @index; - if ( $ind =~ /\bKEY\b/i ){ - push(@keys,"ALTER TABLE $table_name ADD $ind"); - }else{ - my @fields = split(' ',$index); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@index,$query); - } - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query,@keys,@index); -#print "query:$query\n"; - - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert an ascii file isn't supported by Oracle (?)\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - $cmd =~ s/\'\'/\' \'/g; - return $cmd; -} - - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 1; -} - -sub reconnect_on_errors -{ - return 0; -} - -# -# optimize the tables .... -# -sub vacuum -{ - my ($self,$full_vacuum,$dbh_ref)=@_; - my ($loop_time,$end_time,$sth,$dbh); - - if (defined($full_vacuum)) - { - $$dbh_ref->disconnect; $$dbh_ref= $self->connect(); - } - $dbh=$$dbh_ref; - $loop_time=new Benchmark; - # first analyze all tables - $sth = $dbh->prepare("select table_name from user_tables") || die "Got error: $DBI::errstr"; - $sth->execute || die "Got error: $DBI::errstr when select user_tables"; - while (my @r = $sth->fetchrow_array) - { - $dbh->do("analyze table $r[0] compute statistics") || die "Got error: $DBI::errstr when executing 'analyze table'\n"; - } - # now analyze all indexes ... - $sth = $dbh->prepare("select index_name from user_indexes") || die "Got error: $DBI::errstr"; - $sth->execute || die "Got error: $DBI::errstr when select user_indexes"; - while (my @r1 = $sth->fetchrow_array) - { - $dbh->do("analyze index $r1[0] compute statistics") || die "Got error: $DBI::errstr when executing 'analyze index $r1[0]'\n"; - } - $end_time=new Benchmark; - print "Time for book-keeping (1): " . - Benchmark::timestr(Benchmark::timediff($end_time, $loop_time),"all") . "\n\n"; - $dbh->disconnect; $$dbh_ref= $self->connect(); -} - - -############################################################################# -# Definitions for Informix -############################################################################# - -package db_Informix; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "Informix"; - $self->{'data_source'} = "DBI:Informix:$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "byte in table"; - $self->{'text'} = "byte in table"; - $self->{'double_quotes'} = 0; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{'host'} = $host; - - $limits{'NEG'} = 1; # Supports -id - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 1; - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'func_extra_%'} = 0; # Has % as alias for mod() - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'func_extra_in_num'}= 0; # Has function in - $limits{'func_odbc_floor'} = 0; # Has func_odbc_floor function - $limits{'func_odbc_mod'} = 1; # Have function mod. - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_by_position'} = 1; # Can use 'GROUP BY 1' - $limits{'group_by_alias'} = 0; # Can use 'select a as ab from x GROUP BY ab' - $limits{'group_func_extra_std'} = 0; # Have group function std(). - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'}= 1; # Can't use group functions in HAVING - $limits{'join_optimizer'} = 1; # Can optimize FROM tables (always 1 only for msql) - $limits{'left_outer_join'} = 0; # Supports left outer joins (ANSI) - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 1; # Has lock tables - $limits{'max_conditions'} = 1214; # (Actually not a limit) - $limits{'max_column_name'} = 18; # max table and column name - $limits{'max_columns'} = 994; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_index'} = 64; # Max number of keys - $limits{'max_index_parts'} = 15; # Max segments/key - $limits{'max_text_size'} = 65535; # Max size with default buffers. ?? - $limits{'multi_drop'} = 0; # Drop table can take many tables - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'query_size'} = 32766; # Max size with default buffers. - $limits{'select_without_from'}= 0; # Can do 'select 1'; - $limits{'subqueries'} = 1; # Doesn't support sub-queries. - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $ENV{'INFORMIXSERVER'} = $self->{'host'}; - $dbh=$self->connect(); - $sth = $dbh->prepare("SELECT owner FROM systables WHERE tabname = ' VERSION'") - or die $DBI::errstr; - $version='Informix unknown'; - if ($sth->execute && (@row = $sth->fetchrow_array)) - { - $version="Informix $row[0]"; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - - -# -# Create table -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$name,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { -# $field =~ s/\btransport_description\b/transport_desc/; - # to overcome limit 18 chars - $field =~ s/tinyint/smallint/i; - $field =~ s/tinyint\(\d+\)/smallint/i; - $field =~ s/mediumint/integer/i; - $field =~ s/mediumint\(\d+\)/integer/i; - $field =~ s/smallint\(\d+\)/smallint/i; - $field =~ s/integer\(\d+\)/integer/i; - $field =~ s/int\(\d+\)/integer/i; -# $field =~ s/\b(?:small)?int(?:eger)?\((\d+)\)/decimal($1)/i; -# $field =~ s/float(\(\d*,\d*\)){0,1}/real/i; - $field =~ s/(float|double)(\(.*?\))?/float/i; - - if ($field =~ / blob/i) - { - $name=$self->{'blob'}; - $field =~ s/ blob/ $name/; - } - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - - foreach $index (@$index) - { - # Primary key is unique index in Informix - $index =~ s/primary key/unique index primary/i; - if ($index =~ /^unique\s*\(([^\(]*)\)$/i) - { - $nr++; - push(@queries,"create unique index ${table_name}_$nr on $table_name ($1)"); - } - else - { - if (!($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i)) - { - die "Can't parse index information in '$index'\n"; - } - ### push(@queries,"create $1 ${table_name}_$2 on $table_name $3"); - $nr++; - push(@queries,"create $1 ${table_name}_$nr on $table_name $3"); - } - } - return @queries; -} -# -# Some test needed this -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - $cmd =~ s/\\\'//g; - return $cmd; -} - - - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - - -############################################################################# -# Configuration for Access -############################################################################# - -package db_access; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "access"; - $self->{'data_source'} = "DBI:ODBC:$database"; - if (defined($host) && $host ne "") - { - $self->{'data_source'} .= ":$host"; - } - $self->{'limits'} = \%limits; - $self->{'blob'} = "blob"; - $self->{'text'} = "blob"; # text ? - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 97; # We get 'Query is too complex' - $limits{'max_columns'} = 255; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 255; # Max size with default buffers. - $limits{'query_size'} = 65535; # Not a limit, big enough - $limits{'max_index'} = 32; # Max number of keys - $limits{'max_index_parts'} = 10; # Max segments/key - $limits{'max_column_name'} = 64; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 0; # Have count(distinct) - $limits{'select_without_from'}= 1; # Can do 'select 1'; - $limits{'multi_drop'} = 0; # Drop table can take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Can use 'GROUP BY 1' - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 2; #Have ALTER TABLE t add a int, b int; - $limits{'alter_table_dropcol'}= 1; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. - $limits{'func_extra_%'} = 0; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 0; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 1; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my $version="Access 2000"; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; #DBI/ODBC can't return the server version -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/integer/i; - $field =~ s/tinyint/smallint/i; - $field =~ s/float\(\d+,\d+\)/float/i; - $field =~ s/integer\(\d+\)/integer/i; - $field =~ s/smallint\(\d+\)/smallint/i; - $field =~ s/int\(\d+\)/integer/i; - $field =~ s/blob/text/i; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - foreach $index (@$index) - { - $ext="WITH DISALLOW NULL"; - if (($index =~ s/primary key/unique index primary_key/i)) - { - $ext="WITH PRIMARY;" - } - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - $nr++; - $index="unique index ${table_name}_$nr ($1)"; - } - $index =~ /^(.*)\s+(\(.*\))$/; - push(@queries,"create ${1} on $table_name $2"); - } - return @queries; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index ON $table"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 1 if (($DBI::errstr =~ /The database engine couldn\'t lock table/i) || - ($DBI::errstr =~ /niet vergrendelen. De tabel is momenteel in gebruik /i) || - ($DBI::errstr =~ /Den anv.* redan av en annan/i) || - ($DBI::errstr =~ /non-exclusive access/)); - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 1; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for Microsoft SQL server -############################################################################# - -package db_ms_sql; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "ms-sql"; - $self->{'data_source'} = "DBI:ODBC:$database"; - if (defined($host) && $host ne "") - { - $self->{'data_source'} .= ":$host"; - } - $self->{'limits'} = \%limits; - $self->{'blob'} = "text"; - $self->{'text'} = "text"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 1030; # We get 'Query is too complex' - $limits{'max_columns'} = 250; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 9830; # Max size with default buffers. - $limits{'query_size'} = 9830; # Max size with default buffers. - $limits{'max_index'} = 64; # Max number of keys - $limits{'max_index_parts'} = 15; # Max segments/key - $limits{'max_column_name'} = 30; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 1; # Can do 'select 1'; - $limits{'multi_drop'} = 1; # Drop table can take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can't use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Can use 'GROUP BY 1' - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. - $limits{'func_extra_%'} = 1; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 0; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my($sth,@row, $version); - $version='MS SQL server ?'; - $dbh=$self->connect(); - $sth = $dbh->prepare("SELECT \@\@VERSION") or die $DBI::errstr; - $sth->execute or die $DBI::errstr; - @row = $sth->fetchrow_array; - if ($row[0]) { - @server = split(/\n/,$row[0]); - chomp(@server); - $version= "$server[0]"; - } - $sth->finish; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/integer/i; - $field =~ s/float\(\d+,\d+\)/float/i; - $field =~ s/double\(\d+,\d+\)/float/i; - $field =~ s/double/float/i; - $field =~ s/integer\(\d+\)/integer/i; - $field =~ s/int\(\d+\)/integer/i; - $field =~ s/smallint\(\d+\)/smallint/i; - $field =~ s/smallinteger/smallint/i; - $field =~ s/tinyint\(\d+\)/tinyint/i; - $field =~ s/tinyinteger/tinyint/i; - $field =~ s/blob/text/i; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - foreach $index (@$index) - { - $ext="WITH DISALLOW NULL"; - if (($index =~ s/primary key/unique index primary_key/i)) - { - $ext="WITH PRIMARY;" - } - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - $nr++; - $index="unique index ${table_name}_$nr ($1)"; - } - $index =~ /^(.*)\s+(\(.*\))$/; - push(@queries,"create ${1} on $table_name $2"); - } - return @queries; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $table.$index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for Sybase -############################################################################# -package db_sybase; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "sybase"; - $self->{'data_source'} = "DBI:Sybase:database=$database"; - if (defined($host) && $host ne "") - { - $self->{'data_source'} .= ";hostname=$host"; - } - $self->{'limits'} = \%limits; - $self->{'blob'} = "text"; - $self->{'text'} = "text"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{"vacuum"} = 1; - - $limits{'max_conditions'} = 1030; # We get 'Query is too complex' - $limits{'max_columns'} = 250; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 9830; # Max size with default buffers. - $limits{'query_size'} = 9830; # Max size with default buffers. - $limits{'max_index'} = 64; # Max number of keys - $limits{'max_index_parts'} = 15; # Max segments/key - $limits{'max_column_name'} = 30; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 1; # Can do 'select 1'; - $limits{'multi_drop'} = 1; # Drop table can take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can't use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Can use 'GROUP BY 1' - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. - $limits{'func_extra_%'} = 1; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 0; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); - $sth = $dbh->prepare('SELECT @@version') or die $DBI::errstr; - $version="Sybase (unknown)"; - if ($sth->execute && (@row = $sth->fetchrow_array)) - { - $version=$row[0]; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0 , AutoCommit => 1}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/integer/i; - $field =~ s/float\(\d+,\d+\)/float/i; - $field =~ s/int\(\d+\)/int/i; - $field =~ s/double/float/i; - $field =~ s/integer\(\d+\)/integer/i; - $field =~ s/smallint\(\d+\)/smallint/i; - $field =~ s/tinyint\(\d+\)/tinyint/i; - $field =~ s/blob/text/i; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - foreach $index (@$index) - { -# $ext="WITH DISALLOW NULL"; - if (($index =~ s/primary key/unique index primary_key/i)) - { -# $ext="WITH PRIMARY;" - } - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - $nr++; - $index="unique index ${table_name}_$nr ($1)"; - } - $index =~ /^(.*)\s+(\(.*\))$/; - push(@queries,"create ${1} on $table_name $2"); - } - return @queries; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $table.$index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -# -# optimize the tables .... -# WARNING (from walrus)! This sub will work only from DBD:sybase -# driver. Because if we use ODBC we don't know actual database name -# (but DSN name only) -sub vacuum -{ - my ($self,$full_vacuum,$dbh_ref)=@_; - my ($loop_time,$end_time,$dbh); - - if (defined($full_vacuum)) - { - $$dbh_ref->disconnect; $$dbh_ref= $self->connect(); - } - $dbh=$$dbh_ref; - $loop_time=new Benchmark; - my (@tables,$sth,$current_table,$current_base); - $dbh->do("dump tran $database with truncate_only"); - $sth=$dbh->prepare("sp_tables" ) or die "prepere"; - $sth->execute() or die "execute"; - while (@row = $sth->fetchrow_array()) { - $current_table = $row[2]; - $current_base = $row[0]; - next if ($current_table =~ /^sys/); - push(@tables,$current_table) if ($database == $current_base); - } - - $sth->finish(); - - foreach $table (@tables) { -# print "$table: \n"; - $dbh->do("update statistics $table") or print "Oops!"; - } - -# $dbh->do("analyze table ?? compute statistics") || die "Got error: $DBI::errstr when executing 'vacuum'\n"; - $end_time=new Benchmark; - print "Time for book-keeping (1): " . - Benchmark::timestr(Benchmark::timediff($end_time, $loop_time),"all") . "\n\n"; - $dbh->disconnect; $$dbh_ref= $self->connect(); -} - - - - -############################################################################# -# Definitions for Adabas -############################################################################# - -package db_Adabas; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "Adabas"; - $self->{'data_source'} = "DBI:Adabas:$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "long"; - $self->{'text'} = "long"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 50; # (Actually not a limit) - $limits{'max_columns'} = 254; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 2000; # Limit for blob test-connect - $limits{'query_size'} = 65525; # Max size with default buffers. - $limits{'max_index'} = 16; # Max number of keys - $limits{'max_index_parts'} = 16; # Max segments/key - $limits{'max_column_name'} = 32; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; - $limits{'multi_drop'} = 0; - $limits{'subqueries'} = 1; - $limits{'left_outer_join'} = 0; # This may be fixed in the query module - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can't use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 1; - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 2; #Have ALTER TABLE t add a int, b int; - $limits{'alter_table_dropcol'}= 1; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 0; # Oracle has problem with mod() - $limits{'func_extra_%'} = 0; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 1; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); - $sth = $dbh->prepare("SELECT KERNEL FROM VERSIONS") or die $DBI::errstr; - $version="Adabas (unknown)"; - if ($sth->execute && (@row = $sth->fetchrow_array) - && $row[0] =~ /([\d\.]+)/) - { - $version="Adabas $1"; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$ind,@keys); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/CHARACTER\s+VARYING/VARCHAR/i; - $field =~ s/TINYINT/SMALLINT/i; - $field =~ s/MEDIUMINT/INT/i; - $field =~ s/SMALLINT\s*\(\d+\)/SMALLINT/i; - $field =~ s/INT\s*\(\d+\)/INT/i; - $field =~ s/BLOB/LONG/i; - $field =~ s/INTEGER\s*\(\d+\)/INTEGER/i; - $field =~ s/FLOAT\s*\((\d+),\d+\)/FLOAT\($1\)/i; - $field =~ s/DOUBLE/FLOAT\(38\)/i; - $field =~ s/DOUBLE\s+PRECISION/FLOAT\(38\)/i; - $query.= $field . ','; - } - - foreach $ind (@$index) - { - my @index; - if ( $ind =~ /\bKEY\b/i ){ - push(@keys,"ALTER TABLE $table_name ADD $ind"); - }else{ - my @fields = split(' ',$index); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@index,$query); - } - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query,@keys,@index); -#print "query:$query\n"; - - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert an ascii file isn't supported by Oracle (?)\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for IBM DB2 -############################################################################# - -package db_db2; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "DB2"; - $self->{'data_source'} = "DBI:ODBC:$database"; - if (defined($host) && $host ne "") - { - $self->{'data_source'} .= ":$host"; - } - $self->{'limits'} = \%limits; - $self->{'blob'} = "varchar(255)"; - $self->{'text'} = "varchar(255)"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - - $limits{'max_conditions'} = 418; # We get 'Query is too complex' - $limits{'max_columns'} = 500; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 254; # Max size with default buffers. - $limits{'query_size'} = 254; # Max size with default buffers. - $limits{'max_index'} = 48; # Max number of keys - $limits{'max_index_parts'} = 15; # Max segments/key - $limits{'max_column_name'} = 18; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'}= 1; - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; # Can do 'select 1'; - $limits{'multi_drop'} = 0; # Drop table can take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can't use group functions in HAVING - $limits{'like_with_column'} = 0; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Can use 'GROUP BY 1' - $limits{'alter_table'} = 1; - $limits{'alter_add_multi_col'}= 0; - $limits{'alter_table_dropcol'}= 0; - - $limits{'group_func_extra_std'} = 0; # Have group function std(). - - $limits{'func_odbc_mod'} = 1; # Have function mod. - $limits{'func_extra_%'} = 0; # Has % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 0; # Has function in - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - return "IBM DB2 5"; #DBI/ODBC can't return the server version -} - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, $main::opt_password) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index) = @_; - my($query,@queries,$nr); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/mediumint/integer/i; - $field =~ s/float\(\d+,\d+\)/float/i; - $field =~ s/integer\(\d+\)/integer/i; - $field =~ s/int\(\d+\)/integer/i; - $field =~ s/tinyint\(\d+\)/smallint/i; - $field =~ s/tinyint/smallint/i; - $field =~ s/smallint\(\d+\)/smallint/i; - $field =~ s/smallinteger/smallint/i; - $field =~ s/blob/varchar(256)/i; - $query.= $field . ','; - } - substr($query,-1)=")"; # Remove last ','; - push(@queries,$query); - $nr=0; - foreach $index (@$index) - { - $ext="WITH DISALLOW NULL"; - if (($index =~ s/primary key/unique index primary_key/i)) - { - $ext="WITH PRIMARY;" - } - if ($index =~ /^unique.*\(([^\(]*)\)$/i) - { - $nr++; - $index="unique index ${table_name}_$nr ($1)"; - } - $index =~ /^(.*)\s+(\(.*\))$/; - push(@queries,"create ${1} on $table_name $2"); - } - return @queries; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index -{ - my ($self,$table,$index) = @_; - return "DROP INDEX $table.$index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 1; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for MIMER -############################################################################# - -package db_Mimer; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "mimer"; - $self->{'data_source'} = "DBI:mimer:$database:$host"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "binary varying(15000)"; - $self->{'text'} = "character varying(15000)"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{'char_null'} = "cast(NULL as char(1))"; - $self->{'numeric_null'} = "cast(NULL as int)"; - - $limits{'max_conditions'} = 9999; # (Actually not a limit) - $limits{'max_columns'} = 252; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 15000; # Max size with default buffers. - $limits{'query_size'} = 1000000; # Max size with default buffers. - $limits{'max_index'} = 32; # Max number of keys - $limits{'max_index_parts'} = 16; # Max segments/key - $limits{'max_column_name'} = 128; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 1; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; # Cannot do 'select 1'; - $limits{'multi_drop'} = 0; # Drop table cannot take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Cannot use 'GROUP BY 1' - $limits{'alter_table'} = 1; # Have ALTER TABLE - $limits{'alter_add_multi_col'}= 0; # Have ALTER TABLE t add a int,add b int; - $limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column - $limits{'insert_multi_value'} = 0; # Does not have INSERT ... values (1,2),(3,4) - $limits{'multi_distinct'} = 0; # Does not allow select count(distinct a),count(distinct b).. - - $limits{'group_func_extra_std'} = 0; # Does not have group function std(). - - $limits{'func_odbc_mod'} = 1; # Have function mod. - $limits{'func_extra_%'} = 0; # Does not have % as alias for mod() - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Does not have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 1; # Has function in - $limits{'limit'} = 0; # Does not support the limit attribute - $limits{'unique_index'} = 1; # Unique index works or not - $limits{'insert_select'} = 1; - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 0; - $limits{'working_all_fields'} = 1; - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); -# -# Pick up SQLGetInfo option SQL_DBMS_VER (18) -# - $version = $dbh->func(18, GetInfo); - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -# -# Connection with optional disabling of logging -# - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - - $dbh->do("SET OPTION LOG_OFF=1,UPDATE_LOG=0"); - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index,$options) = @_; - my($query,@queries,@indexes); - - $query="create table $table_name ("; - foreach $field (@$fields) - { -# $field =~ s/ decimal/ double(10,2)/i; -# $field =~ s/ big_decimal/ double(10,2)/i; - $field =~ s/ double/ double precision/i; - $field =~ s/ tinyint\(.*\)/ smallint/i; - $field =~ s/ smallint\(.*\)/ smallint/i; - $field =~ s/ mediumint/ integer/i; - $field =~ s/ float\(.*\)/ float/i; -# $field =~ s/ date/ int/i; # Because of tcp ? - $query.= $field . ','; - } - foreach $index (@$index) - { - if ( $index =~ /\bINDEX\b/i ) - { - my @fields = split(' ',$index); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@indexes,$query); - - } else { - $query.= $index . ','; - } - } - substr($query,-1)=")"; # Remove last ','; - $query.=" $options" if (defined($options)); - push(@queries,$query,@indexes); - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert of an ascii file isn't supported by Mimer\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index { - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 1 if ($DBI::errstr =~ /Table locked by another cursor/); - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for InterBase -############################################################################# - -package db_interbase; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "interbase"; - $self->{'data_source'} = "DBI:InterBase:database=$database;ib_dialect=3"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "blob"; - $self->{'text'} = ""; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled - $self->{'char_null'} = ""; - $self->{'numeric_null'} = ""; - - $limits{'max_conditions'} = 9999; # (Actually not a limit) - $limits{'max_columns'} = 252; # Max number of columns in table - $limits{'max_tables'} = 65000; # Should be big enough - $limits{'max_text_size'} = 15000; # Max size with default buffers. - $limits{'query_size'} = 1000000; # Max size with default buffers. - $limits{'max_index'} = 65000; # Max number of keys - $limits{'max_index_parts'} = 8; # Max segments/key - $limits{'max_column_name'} = 128; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 0; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings - $limits{'group_distinct_functions'}= 1; # Have count(distinct) - $limits{'select_without_from'}= 0; # Cannot do 'select 1'; - $limits{'multi_drop'} = 0; # Drop table cannot take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 1; # Can use group functions in HAVING - $limits{'like_with_column'} = 0; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Cannot use 'GROUP BY 1' - $limits{'alter_table'} = 1; # Have ALTER TABLE - $limits{'alter_add_multi_col'}= 1; # Have ALTER TABLE t add a int,add b int; - $limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column - $limits{'insert_multi_value'} = 0; # Does not have INSERT ... values (1,2),(3,4) - - $limits{'group_func_extra_std'} = 0; # Does not have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. - $limits{'func_extra_%'} = 0; # Does not have % as alias for mod() - $limits{'func_odbc_floor'} = 0; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Does not have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 0; # Supports -id - $limits{'func_extra_in_num'} = 0; # Has function in - $limits{'limit'} = 0; # Does not support the limit attribute - $limits{'working_blobs'} = 1; # If big varchar/blobs works - $limits{'order_by_unused'} = 1; - $limits{'working_all_fields'} = 1; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$version); - - $version='Interbase ?'; - - $dbh=$self->connect(); - eval { $version = $dbh->func('version','ib_database_info')->{'version'}; }; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -# -# Connection with optional disabling of logging -# - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0, AutoCommit => 1}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index,$options) = @_; - my($query,@queries,@keys,@indexes); - - $query="create table $table_name ("; - foreach $field (@$fields) - { -# $field =~ s/ big_decimal/ decimal/i; - $field =~ s/ double/ double precision/i; - $field =~ s/ tinyint/ smallint/i; - $field =~ s/ mediumint/ integer/i; - $field =~ s/\bint\b/integer/i; - $field =~ s/ float\(\d,\d\)/ float/i; - $field =~ s/ smallint\(\d\)/ smallint/i; - $field =~ s/ integer\(\d\)/ integer/i; - $query.= $field . ','; - } - foreach $ind (@$index) - { - if ( $ind =~ /(\bKEY\b)|(\bUNIQUE\b)/i ){ - push(@keys,"ALTER TABLE $table_name ADD $ind"); - }else{ - my @fields = split(' ',$ind); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@indexes,$query); - } - } - substr($query,-1)=")"; # Remove last ','; - $query.=" $options" if (defined($options)); - push(@queries,$query,@keys,@indexes); - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert of an ascii file isn't supported by InterBase\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index { - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 1 if ($DBI::errstr =~ /Table locked by another cursor/); - return 0; -} - -sub small_rollback_segment -{ - return 1; -} - -sub reconnect_on_errors -{ - return 1; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for FrontBase -############################################################################# - -package db_FrontBase; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "FrontBase"; - $self->{'data_source'} = "DBI:FB:dbname=$database;host=$host"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "varchar(8000000)"; - $self->{'text'} = "varchar(8000000)"; - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ' restrict'; - $self->{'transactions'} = 1; # Transactions enabled - $self->{'error_on_execute_means_zero_rows'}=1; - - $limits{'max_conditions'} = 5427; # (Actually not a limit) - # The following should be 8192, but is smaller because Frontbase crashes.. - $limits{'max_columns'} = 150; # Max number of columns in table - $limits{'max_tables'} = 5000; # 10000 crashed FrontBase - $limits{'max_text_size'} = 65000; # Max size with default buffers. - $limits{'query_size'} = 8000000; # Max size with default buffers. - $limits{'max_index'} = 38; # Max number of keys - $limits{'max_index_parts'} = 20; # Max segments/key - $limits{'max_column_name'} = 128; # max table and column name - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables - $limits{'load_data_infile'} = 1; # Has load data infile - $limits{'lock_tables'} = 0; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) - $limits{'group_functions'} = 1; # Have group functions - $limits{'group_distinct_functions'}= 0; # Have count(distinct) - $limits{'select_without_from'}= 0; - $limits{'multi_drop'} = 0; # Drop table cannot take many tables - $limits{'subqueries'} = 1; # Supports sub-queries. - $limits{'left_outer_join'} = 1; # Supports left outer joins - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING - $limits{'having_with_group'} = 0; # Can use group functions in HAVING - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' - $limits{'group_by_position'} = 0; # Use of 'GROUP BY 1' - $limits{'alter_table'} = 1; # Have ALTER TABLE - $limits{'alter_add_multi_col'}= 0; # Have ALTER TABLE t add a int,add b int; - $limits{'alter_table_dropcol'}= 0; # Have ALTER TABLE DROP column - $limits{'insert_multi_value'} = 1; - - $limits{'group_func_extra_std'} = 0; # Does not have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. - $limits{'func_extra_%'} = 0; # Does not have % as alias for mod() - $limits{'func_odbc_floor'} = 0; # Has func_odbc_floor function - $limits{'func_extra_if'} = 0; # Does not have function if. - $limits{'column_alias'} = 1; # Alias for fields in select statement. - $limits{'NEG'} = 1; # Supports -id - $limits{'func_extra_in_num'} = 0; # Has function in - $limits{'limit'} = 0; # Does not support the limit attribute - $limits{'insert_select'} = 0; - $limits{'order_by_unused'} = 0; - - # We don't get an error for duplicate row in 'test-insert' - $limits{'unique_index'} = 0; # Unique index works or not - # We can't use a blob as a normal string (we got a wierd error) - $limits{'working_blobs'} = 0; - # 'select min(region),max(region) from bench1' kills the server after a while - $limits{'group_func_sql_min_str'} = 0; - # If you do select f1,f2,f3...f200 from table, Frontbase dies. - $limits{'working_all_fields'} = 0; - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - -# $dbh=$self->connect(); -# -# Pick up SQLGetInfo option SQL_DBMS_VER (18) -# - #$version = $dbh->func(18, GetInfo); - $version="FrontBase 3.3"; -# $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -# -# Connection with optional disabling of logging -# - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, - $main::opt_user, - $main::opt_password, - { PrintError => 0 , - 'fb_host'=>$main::opt_host - }) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - $db->{AutoCommit}=1; - # $dbh->do("SET OPTION LOG_OFF=1,UPDATE_LOG=0"); - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# -# If one uses $main::opt_fast then one is allowed to use -# non standard types to get better speed. -# - -sub create -{ - my($self,$table_name,$fields,$index,$options) = @_; - my($query,@queries,@indexes,@keys); - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/ blob/ varchar(32000)/i; - $field =~ s/ big_decimal/ float/i; - $field =~ s/ double/ float/i; - $field =~ s/ tinyint/ smallint/i; - $field =~ s/ mediumint/ int/i; - $field =~ s/ integer/ int/i; - $field =~ s/ float\(\d,\d\)/ float/i; - $field =~ s/ smallint\(\d\)/ smallint/i; - $field =~ s/ int\(\d\)/ int/i; - $query.= $field . ','; - } - foreach $ind (@$index) - { -# my @index; - if ( $ind =~ /(\bKEY\b)|(\bUNIQUE\b)/i ){ - push(@keys,"ALTER TABLE $table_name ADD $ind"); - }else{ - my @fields = split(' ',$ind); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@indexes,$query); - } - } - substr($query,-1)=")"; # Remove last ','; - $query.=" $options" if (defined($options)); - push(@queries,$query,@keys,@indexes); - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert of an ascii file isn't supported by InterBase\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index { - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0 if ($DBI::errstr =~ /No raw data handle/); - return 1; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 1; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -############################################################################# -# Configuration for SAPDB -############################################################################# - -package db_sapdb; - -sub new -{ - my ($type,$host,$database)= @_; - my $self= {}; - my %limits; - bless $self; - - $self->{'cmp_name'} = "sapdb"; - $self->{'data_source'} = "DBI:SAP_DB:$database"; - $self->{'limits'} = \%limits; - $self->{'blob'} = "LONG"; # * - $self->{'text'} = "LONG"; # * - $self->{'double_quotes'} = 1; # Can handle: 'Walker''s' - $self->{'drop_attr'} = ""; - $self->{'transactions'} = 1; # Transactions enabled * - $self->{'char_null'} = ""; - $self->{'numeric_null'} = ""; - - $limits{'max_conditions'} = 9999; # (Actually not a limit) * - $limits{'max_columns'} = 1023; # Max number of columns in table * - $limits{'max_tables'} = 65000; # Should be big enough * unlimited actually - $limits{'max_text_size'} = 15000; # Max size with default buffers. - $limits{'query_size'} = 64*1024; # Max size with default buffers. *64 kb by default. May be set by system variable - $limits{'max_index'} = 510; # Max number of keys * - $limits{'max_index_parts'} = 16; # Max segments/key * - $limits{'max_column_name'} = 32; # max table and column name * - - $limits{'join_optimizer'} = 1; # Can optimize FROM tables * - $limits{'load_data_infile'} = 0; # Has load data infile * - $limits{'lock_tables'} = 1; # Has lock tables - $limits{'functions'} = 1; # Has simple functions (+/-) * - $limits{'group_functions'} = 1; # Have group functions * - $limits{'group_func_sql_min_str'} = 1; # Can execute MIN() and MAX() on strings * - $limits{'group_distinct_functions'}= 1; # Have count(distinct) * - $limits{'select_without_from'}= 0; # Cannot do 'select 1'; * - $limits{'multi_drop'} = 0; # Drop table cannot take many tables * - $limits{'subqueries'} = 1; # Supports sub-queries. * - $limits{'left_outer_join'} = 1; # Supports left outer joins * - $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - $limits{'having_with_alias'} = 0; # Can use aliases in HAVING * - $limits{'having_with_group'} = 1; # Can use group functions in HAVING * - $limits{'like_with_column'} = 1; # Can use column1 LIKE column2 * - $limits{'order_by_position'} = 1; # Can use 'ORDER BY 1' * - $limits{'group_by_position'} = 0; # Cannot use 'GROUP BY 1' * - $limits{'alter_table'} = 1; # Have ALTER TABLE * - $limits{'alter_add_multi_col'}= 1; # Have ALTER TABLE t add a int,add b int; * - $limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column * - $limits{'insert_multi_value'} = 0; # INSERT ... values (1,2),(3,4) * - - $limits{'group_func_extra_std'} = 0; # Does not have group function std(). - - $limits{'func_odbc_mod'} = 0; # Have function mod. * - $limits{'func_extra_%'} = 0; # Does not have % as alias for mod() * - $limits{'func_odbc_floor'} = 1; # Has func_odbc_floor function * - $limits{'func_extra_if'} = 0; # Does not have function if. * - $limits{'column_alias'} = 1; # Alias for fields in select statement. * - $limits{'NEG'} = 1; # Supports -id * - $limits{'func_extra_in_num'} = 0; # Has function in * - $limits{'limit'} = 0; # Does not support the limit attribute * - $limits{'working_blobs'} = 1; # If big varchar/blobs works * - $limits{'order_by_unused'} = 1; # - $limits{'working_all_fields'} = 1; # - $limits{'multi_distinct'} = 1; # allows select count(distinct a),count(distinct b).. - - - return $self; -} - -# -# Get the version number of the database -# - -sub version -{ - my ($self)=@_; - my ($dbh,$sth,$version,@row); - - $dbh=$self->connect(); - $sth = $dbh->prepare("SELECT KERNEL FROM VERSIONS") or die $DBI::errstr; - $version="SAP DB (unknown)"; - if ($sth->execute && (@row = $sth->fetchrow_array) - && $row[0] =~ /([\d\.]+)/) - { - $version=$row[0]; - $version =~ s/KERNEL/SAP DB/i; - } - $sth->finish; - $dbh->disconnect; - $version .= "/ODBC" if ($self->{'data_source'} =~ /:ODBC:/); - return $version; -} - -# -# Connection with optional disabling of logging -# - -sub connect -{ - my ($self)=@_; - my ($dbh); - $dbh=DBI->connect($self->{'data_source'}, $main::opt_user, - $main::opt_password,{ PrintError => 0, AutoCommit => 1}) || - die "Got error: '$DBI::errstr' when connecting to " . $self->{'data_source'} ." with user: '$main::opt_user' password: '$main::opt_password'\n"; - - return $dbh; -} - -# -# Returns a list of statements to create a table -# The field types are in ANSI SQL format. -# - -sub create -{ - my($self,$table_name,$fields,$index,$options) = @_; - my($query,@queries,$nr); - my @index; - my @keys; - - $query="create table $table_name ("; - foreach $field (@$fields) - { - $field =~ s/\bmediumint\b/int/i; - $field =~ s/\btinyint\b/int/i; - $field =~ s/ int\(\d\)/ int/i; - $field =~ s/BLOB/LONG/i; - $field =~ s/INTEGER\s*\(\d+\)/INTEGER/i; - $field =~ s/SMALLINT\s*\(\d+\)/SMALLINT/i; - $field =~ s/FLOAT\s*\((\d+),\d+\)/FLOAT\($1\)/i; - $field =~ s/DOUBLE/FLOAT\(38\)/i; - $field =~ s/DOUBLE\s+PRECISION/FLOAT\(38\)/i; - $query.= $field . ','; - } - $nr=0; - foreach $ind (@$index) - { - if ( $ind =~ /\bKEY\b/i ){ - push(@keys,"ALTER TABLE $table_name ADD $ind"); - } elsif ($ind =~ /^unique.*\(([^\(]*)\)$/i) { - $nr++; - my $query="create unique index ${table_name}_$nr on $table_name ($1)"; - push(@index,$query); - }else{ - my @fields = split(' ',$ind); - my $query="CREATE INDEX $fields[1] ON $table_name $fields[2]"; - push(@index,$query); - } - } - substr($query,-1)=")"; # Remove last ','; - $query.=" $options" if (defined($options)); - push(@queries,$query); - push(@queries,@keys); - push(@queries,@index); - return @queries; -} - -sub insert_file { - my($self,$dbname, $file) = @_; - print "insert of an ascii file isn't supported by SAPDB\n"; - return 0; -} - -# -# Do any conversions to the ANSI SQL query so that the database can handle it -# - -sub query { - my($self,$sql) = @_; - return $sql; -} - -sub drop_index { - my ($self,$table,$index) = @_; - return "DROP INDEX $index"; -} - -# -# Abort if the server has crashed -# return: 0 if ok -# 1 question should be retried -# - -sub abort_if_fatal_error -{ - return 0; -} - -sub small_rollback_segment -{ - return 0; -} - -sub reconnect_on_errors -{ - return 0; -} - -sub fix_for_insert -{ - my ($self,$cmd) = @_; - return $cmd; -} - -1; diff --git a/sql-bench/test-ATIS.sh b/sql-bench/test-ATIS.sh deleted file mode 100644 index 1f11f4319b5c3cc5c02bd7bb3d0c1253c77a7ea2..0000000000000000000000000000000000000000 --- a/sql-bench/test-ATIS.sh +++ /dev/null @@ -1,566 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of creating the ATIS database and doing many different selects on it -# -# changes made for Oracle compatibility -# - added Oracle to the '' to ' ' translation -# - skip blank lines from the datafiles -# - skip a couple of the tests in Q4 that Oracle doesn't understand -################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count=100; # Run selects this many times - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -if ($opt_small_test) -{ - $opt_loop_count/=10; -} - -print "ATIS table test\n\n"; - -#### -#### Connect and start timeing -#### - -$dbh = $server->connect(); -$start_time=new Benchmark; - -#### -#### Create needed tables -#### - -init_data(); # Get table definitions - -if (!$opt_skip_create) -{ - print "Creating tables\n"; - $loop_time= new Benchmark; - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - my $array_ref = $tables[$ti]; - - # This may fail if we have no table so do not check answer - $sth = $dbh->do("drop table $table_name" . $server->{'drop_attr'}); - - print "Creating table $table_name\n" if ($opt_verbose); - do_many($dbh,@$array_ref); - } - $end_time=new Benchmark; - print "Time for create_table (" . ($#tables+1) ."): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - if ($opt_fast && defined($server->{vacuum})) - { - $server->vacuum(0,\$dbh); - } - -#### -#### Insert data -#### - - print "Inserting data\n"; - - $loop_time= new Benchmark; - $row_count=0; - $double_quotes=$server->{'double_quotes'}; - - if ($opt_lock_tables) - { - @tmp=@table_names; push(@tmp,@extra_names); - print "LOCK TABLES @tmp\n" if ($opt_debug); - $sth = $dbh->do("LOCK TABLES " . join(" WRITE,", @tmp) . " WRITE") || - die $DBI::errstr; - } - - if ($opt_fast && $server->{'limits'}->{'load_data_infile'}) - { - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - my $file = "$pwd/Data/ATIS/${table_name}.txt"; - print "$table_name - $file\n" if ($opt_debug); - $row_count += $server->insert_file($table_name,$file,$dbh); - } - } - else - { - if ($opt_fast && $server->{transactions}) - { - $dbh->{AutoCommit} = 0; - print "Transactions enabled\n" if ($opt_debug); - } - - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - my $array_ref = $tables[$ti]; - my @table = @$array_ref; - my $insert_start = "insert into $table_name values ("; - - open(DATA, "$pwd/Data/ATIS/${table_name}.txt") || die "Can't open text file: $pwd/Data/ATIS/${table_name}.txt\n"; - while(<DATA>) - { - chomp; - next unless ( $_ =~ /\w/ ); # skip blank lines - my $command = $insert_start . $_ . ")"; - $command = $server->fix_for_insert($command); - print "$command\n" if ($opt_debug); - $command =~ s/\\'/\'\'/g if ($double_quotes); - - $sth = $dbh->do($command) or die "Got error: $DBI::errstr when executing '$command'\n"; - $row_count++; - } - } - if ($opt_fast && $server->{transactions}) - { - $dbh->commit; - $dbh->{AutoCommit} = 1; - } - close(DATA); - } - - if ($opt_lock_tables) - { - $dbh->do("UNLOCK TABLES"); - } - $end_time=new Benchmark; - print "Time to insert ($row_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh,@table_names); -} - -if ($opt_lock_tables) -{ - @tmp=@table_names; push(@tmp,@extra_names); - $sth = $dbh->do("LOCK TABLES " . join(" READ,", @tmp) . " READ") || - die $DBI::errstr; -} -# -# Now the fun begins. Let's do some simple queries on the result -# -# The query array is defined as: -# query, number of rows in result, 0|1 where 1 means that the query is possible -# - -print "Retrieving data\n"; -@Q1=("select_simple_join", - "select city.city_name,state.state_name,city.city_code from city,state where city.city_code='MATL' and city.state_code=state.state_code",1,1, - "select city.city_name,state.state_name,city.city_code from state,city where city.state_code=state.state_code",11,1, - "select month_name.month_name,day_name.day_name from month_name,day_name where month_name.month_number=day_name.day_code",7,1, - "select month_name.month_name,day_name.day_name from month_name,day_name where month_name.month_number=day_name.day_code and day_name.day_code >= 4",4,1, - "select flight.flight_code,aircraft.aircraft_type from flight,aircraft where flight.aircraft_code=aircraft.aircraft_code",579,1, - ); - -@Q2=("select_join", - "select airline.airline_name,aircraft.aircraft_type from aircraft,airline,flight where flight.aircraft_code=aircraft.aircraft_code and flight.airline_code=airline.airline_code",579,1); - -@Q21=("select_key_prefix_join", - "select fare.fare_code from restrict_carrier,airline,fare where restrict_carrier.airline_code=airline.airline_code and fare.restrict_code=restrict_carrier.restrict_code",5692,1, - ); - -@Q3=("select_distinct", - "select distinct category from aircraft",6,1, - "select distinct from_airport from flight",9,1, - "select distinct aircraft_code from flight",22,1, - "select distinct * from fare",534,1, - "select distinct flight_code from flight_fare",579,1, - "select distinct flight.flight_code,aircraft.aircraft_type from flight,aircraft where flight.aircraft_code=aircraft.aircraft_code",579,1, - "select distinct airline.airline_name,aircraft.aircraft_type from aircraft,airline,flight where flight.aircraft_code=aircraft.aircraft_code and flight.airline_code=airline.airline_code",44,$limits->{'join_optimizer'}, - "select distinct airline.airline_name,aircraft.aircraft_type from flight,aircraft,airline where flight.aircraft_code=aircraft.aircraft_code and flight.airline_code=airline.airline_code",44,1, - ); - -@Q4=("select_group", - "select day_name.day_name,day_name.day_code,count(*) from flight_day,day_name where day_name.day_code=flight_day.day_code group by day_name.day_name,day_name.day_code order by day_name.day_code",7,$limits->{'group_functions'}, - "select day_name.day_name,count(*) from flight_day,day_name where day_name.day_code=flight_day.day_code group by day_name.day_name",7,$limits->{'group_functions'}, - "select month_name,day_name from month_name,day_name where month_number=day_code and day_code>3 group by month_name,day_name",4,$limits->{'group_functions'}, - "select day_name.day_name,flight_day.day_code,count(*) from flight_day,day_name where day_name.day_code=flight_day.day_code group by flight_day.day_code,day_name.day_name order by flight_day.day_code",7,$limits->{'group_functions'}, - "select sum(engines) from aircraft",1,$limits->{'group_functions'}, - "select avg(engines) from aircraft",1,$limits->{'group_functions'}, - "select avg(engines) from aircraft where engines>0",1,$limits->{'group_functions'}, - "select count(*),min(pay_load),max(pay_load) from aircraft where pay_load>0",1,$limits->{'group_functions'}, - "select min(flight_code),min(flight_code) from flight",1,$limits->{'group_functions'}, - "select min(from_airport),min(to_airport) from flight",1,$limits->{'group_functions'} && $limits->{'group_func_sql_min_str'}, - "select count(*) from aircraft where pay_load>10000",1,$limits->{'group_functions'}, - "select count(*) from aircraft where pay_load<>0",1,$limits->{'group_functions'}, - "select count(*) from flight where flight_code >= 112793",1,$limits->{'group_functions'}, - "select count(if(pay_load,1,NULL)) from aircraft",1,$limits->{'if'} && $limits->{'group_functions'}, - "select std(engines) from aircraft",1,$limits->{'group_func_extra_std'}, - "SELECT from_airport,to_airport,avg(time_elapsed) FROM flight WHERE from_airport='ATL' AND to_airport='BOS' group by from_airport,to_airport",1,$limits->{'group_functions'}, - "select city_code, avg(ground_fare) from ground_service where ground_fare<>0 group by city_code",11,$limits->{'group_functions'}, - "select count(*), ground_service.city_code from ground_service group by ground_service.city_code",12,$limits->{'group_functions'}, - "select category,count(*) as totalnr from aircraft where engines=2 group by category having totalnr>4",3,$limits->{'group_functions'} && $limits->{'having_with_alias'}, - "select category,count(*) from aircraft where engines=2 group by category having count(*)>4",3,$limits->{'group_functions'} && $limits->{'having_with_group'}, - "select flight_number,range_miles,fare_class FROM aircraft,flight,flight_class WHERE flight.flight_code=flight_class.flight_code AND flight.aircraft_code=aircraft.aircraft_code AND range_miles<>0 AND (stops=1 OR stops=2) GROUP BY flight_number,range_miles,fare_class",150,$limits->{'group_functions'}, - "select distinct from_airport.time_zone_code,to_airport.time_zone_code,(FLOOR(arrival_time/100)*60+MOD(arrival_time,100)-FLOOR(departure_time/100)*60-MOD(departure_time,100)-time_elapsed)/60 AS time_zone_diff FROM flight,airport AS from_airport,airport AS to_airport WHERE flight.from_airport=from_airport.airport_code AND flight.to_airport=to_airport.airport_code GROUP BY from_airport.time_zone_code,to_airport.time_zone_code,arrival_time,departure_time,time_elapsed",21,$limits->{'func_odbc_mod'} && $limits->{'func_odbc_floor'} && $limits->{'group_functions'}, - "select DISTINCT from_airport.time_zone_code,to_airport.time_zone_code,MOD((FLOOR(arrival_time/100)*60+MOD(arrival_time,100)-FLOOR(departure_time/100)*60-MOD(departure_time,100)-time_elapsed)/60+36,24)-12 AS time_zone_diff FROM flight,airport AS from_airport,airport AS to_airport WHERE flight.from_airport=from_airport.airport_code AND flight.to_airport=to_airport.airport_code and MOD((FLOOR(arrival_time/100)*60+MOD(arrival_time,100)-FLOOR(departure_time/100)*60-MOD(departure_time,100)-time_elapsed)/60+36,24)-12 < 10",14,$limits->{'func_odbc_mod'} && $limits->{'func_odbc_floor'} && $limits->{'group_functions'}, - "select from_airport,to_airport,range_miles,time_elapsed FROM aircraft,flight WHERE aircraft.aircraft_code=flight.aircraft_code AND to_airport NOT LIKE from_airport AND range_miles<>0 AND time_elapsed<>0 GROUP BY from_airport,to_airport,range_miles,time_elapsed",409,$limits->{'group_functions'} && $limits->{'like_with_column'}, - "SELECT airport.country_name,state.state_name,city.city_name,airport_service.direction FROM airport_service,state,airport,city WHERE airport_service.city_code=city.city_code AND airport_service.airport_code=airport.airport_code AND state.state_code=airport.state_code AND state.state_code=city.state_code AND airport.state_code=city.state_code AND airport.country_name=city.country_name AND airport.country_name=state.country_name AND city.time_zone_code=airport.time_zone_code GROUP BY airport.country_name,state.state_name,city.city_name,airport_service.direction ORDER BY state_name",11,$limits->{'group_functions'}, - "SELECT airport.country_name,state.state_name,city.city_name,airport_service.direction FROM airport_service,state,airport,city WHERE airport_service.city_code=city.city_code AND airport_service.airport_code=airport.airport_code AND state.state_code=airport.state_code AND state.state_code=city.state_code AND airport.state_code=city.state_code AND airport.country_name=city.country_name AND airport.country_name=state.country_name AND city.time_zone_code=airport.time_zone_code GROUP BY airport.country_name,state.state_name,city.city_name,airport_service.direction ORDER BY state_name DESC",11,$limits->{'group_functions'}, - "SELECT airport.country_name,state.state_name,city.city_name,airport_service.direction FROM airport_service,state,airport,city WHERE airport_service.city_code=city.city_code AND airport_service.airport_code=airport.airport_code AND state.state_code=airport.state_code AND state.state_code=city.state_code AND airport.state_code=city.state_code AND airport.country_name=city.country_name AND airport.country_name=state.country_name AND city.time_zone_code=airport.time_zone_code GROUP BY airport.country_name,state.state_name,city.city_name,airport_service.direction ORDER BY state_name",11,$limits->{'group_functions'}, - "SELECT from_airport,to_airport,fare.fare_class,night,one_way_cost,rnd_trip_cost,class_days FROM compound_class,fare WHERE compound_class.fare_class=fare.fare_class AND one_way_cost <= 825 AND one_way_cost >= 280 AND from_airport='SFO' AND to_airport='DFW' GROUP BY from_airport,to_airport,fare.fare_class,night,one_way_cost,rnd_trip_cost,class_days ORDER BY one_way_cost",10,$limits->{'group_functions'}, - "select engines,category,cruising_speed,from_airport,to_airport FROM aircraft,flight WHERE category='JET' AND engines >= 1 AND aircraft.aircraft_code=flight.aircraft_code AND to_airport NOT LIKE from_airport AND stops>0 GROUP BY engines,category,cruising_speed,from_airport,to_airport ORDER BY engines DESC",29,$limits->{'group_functions'} && $limits->{'like_with_column'}, - ); - -@Q=(\@Q1,\@Q2,\@Q21,\@Q3,\@Q4); - - -foreach $Q (@Q) -{ - $count=$estimated=0; - $loop_time= new Benchmark; - for ($i=1 ; $i <= $opt_loop_count; $i++) - { - for ($j=1 ; $j < $#$Q ; $j+=3) - { - if ($Q->[$j+2]) - { # We can do it with current limits - $count++; - if ($i == 100) # Do something different - { - if (($row_count=fetch_all_rows($dbh,$server->query($Q->[$j]))) != - $Q->[$j+1]) - { - if ($row_count == undef()) - { - die "Got error: $DBI::errstr when executing " . $Q->[$j] ."\n"."got $row_count instead of $Q->[$j+1] *** \n"; - } - print "Warning: Query '" . $Q->[$j] . "' returned $row_count rows when it should have returned " . $Q->[$j+1] . " rows\n"; - } - } - else - { - defined(fetch_all_rows($dbh,$server->query($Q->[$j]))) - or die "ERROR: $DBI::errstr executing '$Q->[$j]'\n"; - } - } - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i, - $opt_loop_count)); - print "Loop $i\n" if ($opt_verbose); - } - if ($count) - { - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for " . $Q->[0] . " ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - } -} - -print "\n"; - -#### -#### Delete the tables -#### - -if (!$opt_skip_delete) # Only used when testing -{ - print "Removing tables\n"; - $loop_time= new Benchmark; - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; - } - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - $sth = $dbh->do("drop table $table_name" . $server->{'drop_attr'}); - } - - $end_time=new Benchmark; - print "Time to drop_table (" .($#table_names+1) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -#### -#### End of benchmark -#### - -$dbh->disconnect; # close connection - -end_benchmark($start_time); - - -sub init_data -{ - @aircraft= - $server->create("aircraft", - ["aircraft_code char(3) NOT NULL", - "aircraft_type char(64) NOT NULL", - "engines tinyint(1) NOT NULL", - "category char(10) NOT NULL", - "wide_body char(3) NOT NULL", - "wing_span float(6,2) NOT NULL", - "length1 float(6,2) NOT NULL", - "weight integer(7) NOT NULL", - "capacity smallint(3) NOT NULL", - "pay_load integer(7) NOT NULL", - "cruising_speed mediumint(5) NOT NULL", - "range_miles mediumint(5) NOT NULL", - "pressurized char(3) NOT NULL"], - ["PRIMARY KEY (aircraft_code)"]); - @airline= - $server->create("airline", - ["airline_code char(2) NOT NULL", - "airline_name char(64) NOT NULL", - "notes char(38) NOT NULL"], - ["PRIMARY KEY (airline_code)"]); - @airport= - $server->create("airport", - ["airport_code char(3) NOT NULL", - "airport_name char(40) NOT NULL", - "location char(36) NOT NULL", - "state_code char(2) NOT NULL", - "country_name char(25) NOT NULL", - "time_zone_code char(3) NOT NULL"], - ["PRIMARY KEY (airport_code)"]); - @airport_service= - $server->create("airport_service", - ["city_code char(4) NOT NULL", - "airport_code char(3) NOT NULL", - "miles_distant float(4,1) NOT NULL", - "direction char(3) NOT NULL", - "minutes_distant smallint(3) NOT NULL"], - ["PRIMARY KEY (city_code, airport_code)"]); - @city= - $server->create("city", - ["city_code char(4) NOT NULL", - "city_name char(25) NOT NULL", - "state_code char(2) NOT NULL", - "country_name char(25) NOT NULL", - "time_zone_code char(3) NOT NULL"], - ["PRIMARY KEY (city_code)"]); - @class_of_service= - $server->create("class_of_service", - ["class_code char(2) NOT NULL", - "rank tinyint(2) NOT NULL", - "class_description char(80) NOT NULL"], - ["PRIMARY KEY (class_code)"]); - @code_description= - $server->create("code_description", - ["code char(5) NOT NULL", - "description char(110) NOT NULL"], - ["PRIMARY KEY (code)"]); - @compound_class= - $server->create("compound_class", - ["fare_class char(3) NOT NULL", - "base_class char(2) NOT NULL", - "class_type char(10) NOT NULL", - "premium char(3) NOT NULL", - "economy char(3) NOT NULL", - "discounted char(3) NOT NULL", - "night char(3) NOT NULL", - "season_fare char(4) NOT NULL", - "class_days char(7) NOT NULL"], - ["PRIMARY KEY (fare_class)"]); - @connect_leg= - $server->create("connect_leg", - ["connect_code integer(8) NOT NULL", - "leg_number tinyint(1) NOT NULL", - "flight_code integer(8) NOT NULL"], - ["PRIMARY KEY (connect_code, leg_number, flight_code)"]); - @connection= - $server->create("fconnection", - ["connect_code integer(8) NOT NULL", - "from_airport char(3) NOT NULL", - "to_airport char(3) NOT NULL", - "departure_time smallint(4) NOT NULL", - "arrival_time smallint(4) NOT NULL", - "flight_days char(7) NOT NULL", - "stops tinyint(1) NOT NULL", - "connections tinyint(1) NOT NULL", - "time_elapsed smallint(4) NOT NULL"], - ["PRIMARY KEY (connect_code)", - "INDEX from_airport1 (from_airport)", - "INDEX to_airport1 (to_airport)"]); - @day_name= - $server->create("day_name", - ["day_code tinyint(1) NOT NULL", - "day_name char(9) NOT NULL"], - ["PRIMARY KEY (day_code)"]); - @dual_carrier= - $server->create("dual_carrier", - ["main_airline char(2) NOT NULL", - "dual_airline char(2) NOT NULL", - "low_flight smallint(4) NOT NULL", - "high_flight smallint(4) NOT NULL", - "fconnection_name char(64) NOT NULL"], - ["PRIMARY KEY (main_airline, dual_airline, low_flight)", - "INDEX main_airline1 (main_airline)"]); - - @fare= - $server->create("fare", - ["fare_code char(8) NOT NULL", - "from_airport char(3) NOT NULL", - "to_airport char(3) NOT NULL", - "fare_class char(3) NOT NULL", - "fare_airline char(2) NOT NULL", - "restrict_code char(5) NOT NULL", - "one_way_cost float(7,2) NOT NULL", - "rnd_trip_cost float(8,2) NOT NULL"], - ["PRIMARY KEY (fare_code)", - "INDEX from_airport2 (from_airport)", - "INDEX to_airport2 (to_airport)"]); - @flight= - $server->create("flight", - ["flight_code integer(8) NOT NULL", - "flight_days char(7) NOT NULL", - "from_airport char(3) NOT NULL", - "to_airport char(3) NOT NULL", - "departure_time smallint(4) NOT NULL", - "arrival_time smallint(4) NOT NULL", - "airline_code char(2) NOT NULL", - "flight_number smallint(4) NOT NULL", - "class_string char(8) NOT NULL", - "aircraft_code char(3) NOT NULL", - "meal_code char(7) NOT NULL", - "stops tinyint(1) NOT NULL", - "dual_carrier char(1) NOT NULL", - "time_elapsed smallint(4) NOT NULL"], - ["PRIMARY KEY (flight_code)", - "INDEX from_airport3 (from_airport)", - "INDEX to_airport3 (to_airport)"]); - @flight_class= - $server->create("flight_class", - ["flight_code integer(8) NOT NULL", - "fare_class char(3) NOT NULL"], - ["PRIMARY KEY (flight_code, fare_class)"]); - @flight_day= - $server->create("flight_day", - ["day_mask char(7) NOT NULL", - "day_code tinyint(1) NOT NULL", - "day_name char(9) NOT NULL"], - ["PRIMARY KEY (day_mask, day_code)"]); - @flight_fare= - $server->create("flight_fare", - ["flight_code integer(8) NOT NULL", - "fare_code char(8) NOT NULL"], - ["PRIMARY KEY (flight_code, fare_code)"]); - @food_service= - $server->create("food_service", - ["meal_code char(4) NOT NULL", - "meal_number tinyint(1) NOT NULL", - "meal_class char(10) NOT NULL", - "meal_description char(10) NOT NULL"], - ["PRIMARY KEY (meal_code, meal_number, meal_class)"]); - @ground_service= - $server->create("ground_service", - ["city_code char(4) NOT NULL", - "airport_code char(3) NOT NULL", - "transport_code char(1) NOT NULL", - "ground_fare float(6,2) NOT NULL"], - ["PRIMARY KEY (city_code, airport_code, transport_code)"]); - @time_interval= - $server->create("time_interval", - ["period char(20) NOT NULL", - "begin_time smallint(4) NOT NULL", - "end_time smallint(4) NOT NULL"], - ["PRIMARY KEY (period, begin_time)"]); - @month_name= - $server->create("month_name", - ["month_number tinyint(2) NOT NULL", - "month_name char(9) NOT NULL"], - ["PRIMARY KEY (month_number)"]); - @restrict_carrier= - $server->create("restrict_carrier", - ["restrict_code char(5) NOT NULL", - "airline_code char(2) NOT NULL"], - ["PRIMARY KEY (restrict_code, airline_code)"]); - @restrict_class= - $server->create("restrict_class", - ["restrict_code char(5) NOT NULL", - "ex_fare_class char(12) NOT NULL"], - ["PRIMARY KEY (restrict_code, ex_fare_class)"]); - @restriction= - $server->create("restriction", - ["restrict_code char(5) NOT NULL", - "application char(80) NOT NULL", - "no_discounts char(80) NOT NULL", - "reserve_ticket smallint(3) NOT NULL", - "stopovers char(1) NOT NULL", - "return_min smallint(3) NOT NULL", - "return_max smallint(3) NOT NULL"], - ["PRIMARY KEY (restrict_code)"]); - @state= - $server->create("state", - ["state_code char(2) NOT NULL", - "state_name char(25) NOT NULL", - "country_name char(25) NOT NULL"], - ["PRIMARY KEY (state_code)"]); - @stop= - $server->create("stop1", - ["flight_code integer(8) NOT NULL", - "stop_number tinyint(1) NOT NULL", - "stop_flight integer(8) NOT NULL"], - ["PRIMARY KEY (flight_code, stop_number)"]); - @time_zone= - $server->create("time_zone", - ["time_zone_code char(3) NOT NULL", - "time_zone_name char(32) NOT NULL"], - ["PRIMARY KEY (time_zone_code, time_zone_name)"]); - @transport= - $server->create("transport", - ["transport_code char(1) NOT NULL", - "transport_desc char(32) NOT NULL"], - ["PRIMARY KEY (transport_code)"]); - -# Avoid not used warnings - - @tables = - (\@aircraft, \@airline, \@airport, \@airport_service, - \@city, \@class_of_service, \@code_description, - \@compound_class, \@connect_leg, \@connection, \@day_name, - \@dual_carrier, \@fare, \@flight, \@flight_class, \@flight_day, - \@flight_fare, \@food_service, \@ground_service, \@time_interval, - \@month_name, - \@restrict_carrier, \@restrict_class, \@restriction, \@state, \@stop, - \@time_zone, \@transport); - - @table_names = - ("aircraft", "airline", "airport", "airport_service", - "city", "class_of_service", "code_description", - "compound_class", "connect_leg", "fconnection", "day_name", - "dual_carrier", "fare", "flight", "flight_class", "flight_day", - "flight_fare", "food_service", "ground_service", "time_interval", - "month_name", - "restrict_carrier", "restrict_class", "restriction", "state", "stop1", - "time_zone", "transport"); - -# Alias used in joins - @extra_names=("airport as from_airport","airport as to_airport"); -} diff --git a/sql-bench/test-alter-table.sh b/sql-bench/test-alter-table.sh deleted file mode 100644 index 2ca5400006521d99e5f6b5ec970f0f25edfa4c1f..0000000000000000000000000000000000000000 --- a/sql-bench/test-alter-table.sh +++ /dev/null @@ -1,234 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of alter table -# -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$opt_start_field_count=8; # start with this many fields -$opt_loop_count=100; # How many tests to do -$opt_row_count=1000; # Rows in the table -$opt_field_count=1000; # Add until this many fields. -$opt_time_limit=10*60; # Don't wait more than 10 min for some tests - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$opt_field_count=min($opt_field_count,$limits->{'max_columns'}, - ($limits->{'query_size'}-30)/14); -$opt_start_field_count=min($opt_start_field_count,$limits->{'max_index'}); - -if ($opt_small_test) -{ - $opt_row_count/=10; - $opt_field_count/=10; -} - -if (!$limits->{'alter_table'}) -{ - print("Some of the servers given with --cmp or --server doesn't support ALTER TABLE\nTest aborted\n\n"); - $start_time=new Benchmark; - end_benchmark($start_time); - exit 0; -} - -print "Testing of ALTER TABLE\n"; -print "Testing with $opt_field_count columns and $opt_row_count rows in $opt_loop_count steps\n"; - -#### -#### Create a table and fill it with data -#### - -$dbh = $server->connect(); -@fields=(); -@index=(); -push(@fields,"i1 int not null"); -for ($i=2 ; $i <= $opt_start_field_count ; $i++) -{ - push(@fields,"i${i} int not null"); -} -$field_count= $opt_start_field_count; - -$start_time=new Benchmark; - -$dbh->do("drop table bench" . $server->{'drop_attr'}); -do_many($dbh,$server->create("bench",\@fields,\@index)); - -print "Insert data into the table\n"; - -$loop_time=new Benchmark; - -if ($opt_fast && $server->{transactions}) -{ - $dbh->{AutoCommit} = 0; - print "Transactions enabled\n" if ($opt_debug); -} - -for ($i=0 ; $i < $opt_row_count ; $i++) -{ - $query="insert into bench values ( " . ("$i," x ($opt_start_field_count-1)) . "$i)"; - $dbh->do($query) or die $DBI::errstr; -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; - -print "Time for insert ($opt_row_count)", - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - -#### -#### Add fields to the table. -#### - -$loop_time=new Benchmark; -$add= int(($opt_field_count-$opt_start_field_count)/$opt_loop_count)+1; - -$multi_add=$server->{'limits'}->{'alter_add_multi_col'} == 1; -if ($opt_fast) -{ - $add=1 if (!$server->{'limits'}->{'alter_add_multi_col'}); -} -else -{ - $add=1 if (!$limits->{'alter_add_multi_col'}); -} - -$count=0; -while ($field_count < $opt_field_count) -{ - $count++; - $end=min($field_count+$add,$opt_field_count); - $fields=""; - $tmp="ADD "; - while ($field_count < $end) - { - $field_count++; - $fields.=",$tmp i${field_count} integer"; - $tmp="" if (!$multi_add); # Adabas - } - do_query($dbh,"ALTER TABLE bench " . substr($fields,1)); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$count, - $opt_field_count/$add+1)); -} - -$end_time=new Benchmark; -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for alter_table_add ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -# -# If estimated, fix table to have known number of fields -# -if ($estimated && $field_count < $opt_field_count) -{ - $fields=""; - $tmp="ADD "; - while ($field_count < $opt_field_count) - { - $field_count++; - $fields.=",$tmp i${field_count} integer"; - $tmp="" if (!$multi_add); # Adabas - } - do_query($dbh,"ALTER TABLE bench " . substr($fields,1)); -} - -#### -#### Test adding and deleting index on the first $opt_start_fields -#### - -$loop_time=new Benchmark; - -$count= 0; -for ($i=1; $i <= $opt_start_field_count ; $i++) -{ - $dbh->do("CREATE INDEX bench_ind$i ON bench (i${i})") || die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for create_index ($opt_start_field_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -$loop_time=new Benchmark; -for ($i=1; $i <= $opt_start_field_count ; $i++) -{ - $dbh->do($server->drop_index("bench","bench_ind$i")) || die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for drop_index ($opt_start_field_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -#### -#### Delete fields from the table -#### - -goto skip_dropcol if (!$limits->{'alter_table_dropcol'}); - -$loop_time=new Benchmark; - -$count=0; -while ($field_count > $opt_start_field_count) -{ - $count++; - $end=max($field_count-$add,$opt_start_field_count); - $fields=""; - while(--$field_count >= $end) - { - $fields.=",DROP i${field_count}"; - } - $dbh->do("ALTER TABLE bench " . substr($fields,1) . $server->{'drop_attr'}) - || die $DBI::errstr; - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$count, - $opt_field_count/$add+1)); -} - -$end_time=new Benchmark; -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for alter_table_drop ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -skip_dropcol: - -################################ END ################################### -#### -#### End of the test...Finally print time used to execute the -#### whole test. - -$dbh->do("drop table bench" . $server->{'drop_attr'}); - -$dbh->disconnect; - -end_benchmark($start_time); diff --git a/sql-bench/test-big-tables.sh b/sql-bench/test-big-tables.sh deleted file mode 100644 index fb58247eddda70b0f607521cc25a2ceabdc8a266..0000000000000000000000000000000000000000 --- a/sql-bench/test-big-tables.sh +++ /dev/null @@ -1,173 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of extreme tables. -# - -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count=1000; # Change this to make test harder/easier -$opt_field_count=1000; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$opt_field_count=min($opt_field_count,$limits->{'max_columns'}, - ($limits->{'query_size'}-30)/14); - -$opt_loop_count*=10 if ($opt_field_count<100); # mSQL has so few fields... - -if ($opt_small_test) -{ - $opt_loop_count/=10; - $opt_field_count/=10; -} - - -print "Testing of some unusual tables\n"; -print "All tests are done $opt_loop_count times with $opt_field_count fields\n\n"; - - -#### -#### Testing many fields -#### - -$dbh = $server->connect(); -print "Testing table with $opt_field_count fields\n"; - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}); - -my @fields=(); -my @index=(); -my $fields="i1"; -push(@fields,"$fields int"); -$values= "1," x ($opt_field_count-1) . "1"; -for ($i=2 ; $i <= $opt_field_count ; $i++) -{ - push(@fields,"i${i} int"); - $fields.=",i${i}"; -} - -$start_time=new Benchmark; - -do_many($dbh,$server->create("bench1",\@fields,\@index)); -$sth = $dbh->do("insert into bench1 values ($values)") or die $DBI::errstr; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -test_query("Testing select * from table with 1 record", - "Time to select_many_fields", - "select * from bench1", - $dbh,$opt_loop_count); - - -if ($limits->{'working_all_fields'}) -{ - test_query("Testing select all_fields from table with 1 record", - "Time to select_many_fields", - "select $fields from bench1", - $dbh,$opt_loop_count); -} - -test_query("Testing insert VALUES()", - "Time to insert_many_fields", - "insert into bench1 values($values)", - $dbh,$opt_loop_count); - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -test_command("Testing insert (all_fields) VALUES()", - "Time to insert_many_fields", - "insert into bench1 ($fields) values($values)", - $dbh,$opt_loop_count); - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -################################ END ################################### -#### -#### End of the test...Finally print time used to execute the -#### whole test. - -$dbh->disconnect; - -end_benchmark($start_time); - - -############################ HELP FUNCTIONS ############################## - -sub test_query -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time, $using_transactions); - - print $test_text . "\n"; - $loop_time=new Benchmark; - - $using_transactions=0; - if ($opt_fast && server->{transactions} && $query=~ /^insert /i) - { - $using_transactions=1; - $dbh->{AutoCommit} = 0; - print "Transactions enabled\n" if ($opt_debug); - } - for ($i=0 ; $i < $count ; $i++) - { - defined(fetch_all_rows($dbh,$query)) or die $DBI::errstr; - } - if ($using_transactions) - { - $dbh->commit; - $dbh->{AutoCommit} = 1; - } - - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -sub test_command -{ - my($test_text,$result_text,$query,$dbh,$count)=@_; - my($i,$loop_time,$end_time); - - print $test_text . "\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $count ; $i++) - { - $dbh->do($query) or die $DBI::errstr; - } - $end_time=new Benchmark; - print $result_text . "($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} diff --git a/sql-bench/test-connect.sh b/sql-bench/test-connect.sh deleted file mode 100644 index b7a360cac38c3a725d9c648e0d8e13cf05a6d9c5..0000000000000000000000000000000000000000 --- a/sql-bench/test-connect.sh +++ /dev/null @@ -1,331 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# This test is for testing the speed of connections and sending -# data to the client. -# -# By changing the variable '$opt_loop_count' value you can make this test -# easier/harderto your computer to execute. You can also change this value -# by using option --loop_value='what_ever_you_like'. -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count=100000; # Change this to make test harder/easier -$str_length=65000; # This is the length of blob strings in PART:5 -$max_test=20; # How many times to test if the server is busy - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -# This is the length of blob strings in PART:5 -$str_length=min($limits->{'max_text_size'},$limits->{'query_size'}-30,$str_length); - -if ($opt_small_test) -{ - $opt_loop_count/=100; -} - -$opt_loop_count=min(1000, $opt_loop_count) if ($opt_tcpip); -$small_loop_count=$opt_loop_count/10; # For connect tests - -print "Testing the speed of connecting to the server and sending of data\n"; -print "Connect tests are done $small_loop_count times and other tests $opt_loop_count times\n\n"; - -################################# PART:1 ################################### -#### -#### Start timeing and start connect test.. -#### - -$start_time=new Benchmark; - -print "Testing connection/disconnect\n"; - -$loop_time=new Benchmark; -$errors=0; - -for ($i=0 ; $i < $small_loop_count ; $i++) -{ - print "$i " if (($opt_debug)); - for ($j=0; $j < $max_test ; $j++) - { - if ($dbh = DBI->connect($server->{'data_source'}, $opt_user, - $opt_password)) - { - $dbh->disconnect; - last; - } - select(undef, undef, undef, 0.01*$j); - print "$errors " if (($opt_debug)); - $errors++; - } - die "Got error '$DBI::errstr' after $i connects" if ($j == $max_test); - $dbh->disconnect; - undef($dbh); -} -$end_time=new Benchmark; -print "Warning: $errors connections didn't work without a time delay\n" if ($errors); -print "Time to connect ($small_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -################################# PART:2 ################################### -#### Now we shall do first one connect, then simple select -#### (select 1..) and then close connection. This will be -#### done $small_loop_count times. - -if ($limits->{'select_without_from'}) -{ - print "Test connect/simple select/disconnect\n"; - $loop_time=new Benchmark; - - for ($i=0; $i < $small_loop_count; $i++) - { - $dbh = DBI->connect($server->{'data_source'}, $opt_user, $opt_password) || die $DBI::errstr; - $sth = $dbh->do("select $i") or die $DBI::errstr; - $dbh->disconnect; - } - $end_time=new Benchmark; - print "Time for connect+select_simple ($small_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -################################# PART:3 ################################### -#### -#### Okay..Next thing we'll do is a simple select $opt_loop_count times. -#### - -$dbh = DBI->connect($server->{'data_source'}, $opt_user, $opt_password, - { PrintError => 0}) || die $DBI::errstr; - -if ($limits->{'select_without_from'}) -{ - print "Test simple select\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $sth = $dbh->do("select $i") or die $DBI::errstr; - } - $end_time=new Benchmark; - print "Time for select_simple ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -########################################################################### -#### The same as the previous test, but always execute the same select -#### This is done to test the query cache for real simple selects. - -if ($limits->{'select_without_from'}) -{ - print "Test simple select\n"; - $loop_time=new Benchmark; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $sth = $dbh->do("select 10000") or die $DBI::errstr; - } - $end_time=new Benchmark; - print "Time for select_simple_cache ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -########################################################################## -#### First, we'll create a simple table 'bench1' -#### Then we shall do $opt_loop_count selects from this table. -#### Table will contain very simple data. - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}); -do_many($dbh,$server->create("bench1", - ["a int NOT NULL", - "i int", - "s char(10)"], - ["primary key (a)"])); -$sth = $dbh->do("insert into bench1 values(1,100,'AAA')") or die $DBI::errstr; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} -$dbh->disconnect; - -# -# First test connect/select/disconnect -# -print "Testing connect/select 1 row from table/disconnect\n"; - -$loop_time=new Benchmark; -$errors=0; - -for ($i=0 ; $i < $small_loop_count ; $i++) -{ - for ($j=0; $j < $max_test ; $j++) - { - last if ($dbh = DBI->connect($server->{'data_source'}, $opt_user, $opt_password)); - $errors++; - } - die $DBI::errstr if ($j == $max_test); - - $sth = $dbh->do("select a,i,s,$i from bench1") # Select * from table with 1 record - or die $DBI::errstr; - $dbh->disconnect; -} - -$end_time=new Benchmark; -print "Warning: $errors connections didn't work without a time delay\n" if ($errors); -print "Time to connect+select_1_row ($small_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -# -# The same test, but without connect/disconnect -# -print "Testing select 1 row from table\n"; - -$dbh = $server->connect(); -$loop_time=new Benchmark; - -for ($i=0 ; $i < $opt_loop_count ; $i++) -{ - $sth = $dbh->do("select a,i,s,$i from bench1") # Select * from table with 1 record - or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time to select_1_row ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -# -# Same test (as with one row) but now with a cacheable query -# - -$loop_time=new Benchmark; - -for ($i=0 ; $i < $opt_loop_count ; $i++) -{ - $sth = $dbh->do("select a,i,s from bench1") # Select * from table with 1 record - or die $DBI::errstr; -} -$end_time=new Benchmark; -print "Time to select_1_row_cache ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -# -# The same test, but with 2 rows (not cacheable). -# - -print "Testing select 2 rows from table\n"; - -$sth = $dbh->do("insert into bench1 values(2,200,'BBB')") - or die $DBI::errstr; - -$loop_time=new Benchmark; - -for ($i=0 ; $i < $opt_loop_count ; $i++) -{ - $sth = $dbh->do("select a,i,s,$i from bench1") # Select * from table with 2 record - or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time to select_2_rows ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -# -# Simple test to test speed of functions. -# - -if ($limits->{'functions'}) -{ - print "Test select with aritmetic (+)\n"; - $loop_time=new Benchmark; - - for ($i=0; $i < $opt_loop_count; $i++) - { - $sth = $dbh->do("select a+a+a+a+a+a+a+a+a+$i from bench1") or die $DBI::errstr; - } - $end_time=new Benchmark; - print "Time for select_column+column ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) - or die $DBI::errstr; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -################################# PART:5 ################################### -#### We'll create one table with a single blob field,but with a -#### huge record in it and then we'll do $opt_loop_count selects -#### from it. - -goto skip_blob_test if (!$limits->{'working_blobs'}); - -print "Testing retrieval of big records ($str_length bytes)\n"; - -do_many($dbh,$server->create("bench1", ["b blob"], [])); -$dbh->{LongReadLen}= $str_length; # Set retrieval buffer - -my $string=(A) x ($str_length); # This will make a string $str_length long. -$sth = $dbh->prepare("insert into bench1 values(?)") or die $dbh->errstr; -$sth->execute($string) or die $sth->errstr; -undef($string); -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -$loop_time=new Benchmark; - -for ($i=0 ; $i < $small_loop_count ; $i++) -{ - $sth = $dbh->prepare("select b,$i from bench1"); - if (!$sth->execute || !(@row = $sth->fetchrow_array) || - length($row[0]) != $str_length) - { - warn "$DBI::errstr - ".length($row[0])." - $str_length **\n"; - } - $sth->finish; -} - -$end_time=new Benchmark; -print "Time to select_big_str ($small_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) - or do -{ - # Fix for Access 2000 - die $dbh->errstr if (!$server->abort_if_fatal_error()); -}; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -skip_blob_test: - -################################ END ################################### -#### -#### End of the test...Finally print time used to execute the -#### whole test. - -$dbh->disconnect; -end_benchmark($start_time); diff --git a/sql-bench/test-create.sh b/sql-bench/test-create.sh deleted file mode 100644 index 8188b47f5878993e0a1d1d878ecc730f5affd30d..0000000000000000000000000000000000000000 --- a/sql-bench/test-create.sh +++ /dev/null @@ -1,268 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# This test is for testing how long it takes to create tables, -# make a count(*) from them and finally drop the tables. These -# commands will be done in different ways in this test. -# Using option --fast will drop all the tables in the end -# of this test with one command instead of making own -# 'drop' command for each and every table. -# By changing the variable '$table_amount' value you can make -# this test a lot harder/easier for your computer to drive. -# Note that when using value bigger than 64 for this variable -# will do 'drop table'-command in totally different way because of that -# how MySQL handles these commands. - -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count=10000; # Change this to make test harder/easier -# This is the default value for the amount of tables used in this test. - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$create_loop_count=$opt_loop_count; -if ($opt_small_test) -{ - $opt_loop_count/=100; - $create_loop_count/=1000; -} - -$max_tables=min($limits->{'max_tables'},$opt_loop_count); - -if ($opt_small_test) -{ - $max_tables=10; -} - - -print "Testing the speed of creating and dropping tables\n"; -print "Testing with $max_tables tables and $opt_loop_count loop count\n\n"; - -#### -#### Connect and start timeing -#### - -$dbh = $server->connect(); - -### Test how the database can handle many tables -### Create $max_tables ; Access all off them with a simple query -### and then drop the tables - -if ($opt_force) # If tables used in this test exist, drop 'em -{ - print "Okay..Let's make sure that our tables don't exist yet.\n\n"; - for ($i=1 ; $i <= $max_tables ; $i++) - { - $dbh->do("drop table bench_$i" . $server->{'drop_attr'}); - } -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -print "Testing create of tables\n"; - -$loop_time=$start_time=new Benchmark; - -for ($i=1 ; $i <= $max_tables ; $i++) -{ - if (do_many($dbh,$server->create("bench_$i", - ["i int NOT NULL", - "d double", - "f float", - "s char(10)", - "v varchar(100)"], - ["primary key (i)"]))) - { - # Got an error; Do cleanup - for ($i=1 ; $i <= $max_tables ; $i++) - { - $dbh->do("drop table bench_$i" . $server->{'drop_attr'}); - } - die "Test aborted"; - } -} - -$end_time=new Benchmark; -print "Time for create_MANY_tables ($max_tables): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -#### Here comes $max_tables couples of cont(*) to the tables. -#### We'll check how long it will take... -#### - -print "Accessing tables\n"; - -if ($limits->{'group_functions'}) -{ - $query="select count(*) from "; - $type="select_group_when_MANY_tables"; -} -else -{ - $query="select * from "; - $type="select_when_MANY_tables"; -} - -$loop_time=new Benchmark; -for ($i=1 ; $i <= $max_tables ; $i++) -{ - $sth = $dbh->do("$query bench_$i") or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time to $type ($max_tables): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -#### -#### Now we are going to drop $max_tables tables; -#### - -print "Testing drop\n"; - -$loop_time=new Benchmark; - -if ($opt_fast && $server->{'limits'}->{'multi_drop'} && - $server->{'limits'}->{'query_size'} > 11+$max_tables*10) -{ - my $query="drop table bench_1"; - for ($i=2 ; $i <= $max_tables ; $i++) - { - $query.=",bench_$i"; - } - $sth = $dbh->do($query . $server->{'drop_attr'}) or die $DBI::errstr; -} -else -{ - for ($i=1 ; $i <= $max_tables ; $i++) - { - $sth = $dbh->do("drop table bench_$i" . $server->{'drop_attr'}) - or die $DBI::errstr; - } -} - - -$end_time=new Benchmark; -print "Time for drop_table_when_MANY_tables ($max_tables): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -#### We'll do first one 'create table' and then we'll drop it -#### away immediately. This loop shall be executed $opt_loop_count -#### times. - -print "Testing create+drop\n"; - -$loop_time=new Benchmark; - -for ($i=1 ; $i <= $create_loop_count ; $i++) -{ - do_many($dbh,$server->create("bench_$i", - ["i int NOT NULL", - "d double", - "f float", - "s char(10)", - "v varchar(100)"], - ["primary key (i)"])); - $sth = $dbh->do("drop table bench_$i" . $server->{'drop_attr'}) or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for create+drop ($create_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -# -# Same test, but with a table with many keys -# - -my @fields=(); my @keys=(); -$keys=min($limits->{'max_index'},16); # 16 is more than enough -$seg= min($limits->{'max_index_parts'},$keys,16); # 16 is more than enough - -# Make keys on the most important types -@types=(0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1); # A 1 for each char field -push(@fields,"field1 tinyint not null"); -push(@fields,"field2 mediumint not null"); -push(@fields,"field3 smallint not null"); -push(@fields,"field4 char(16) not null"); -push(@fields,"field5 integer not null"); -push(@fields,"field6 float not null"); -push(@fields,"field7 double not null"); -for ($i=8 ; $i <= $keys ; $i++) -{ - push(@fields,"field$i char(5) not null"); # Should be relatively fair -} - -# Let first key contain many segments -my $query="primary key ("; -for ($i= 1 ; $i <= $seg ; $i++) -{ - $query.= "field$i,"; -} -substr($query,-1)=")"; -push (@keys,$query); - -#Create other keys -for ($i=2 ; $i <= $keys ; $i++) -{ - push(@keys,"index index$i (field$i)"); -} - -$loop_time=new Benchmark; -for ($i=1 ; $i <= $opt_loop_count ; $i++) -{ - do_many($dbh,$server->create("bench_$i", \@fields, \@index)); - $dbh->do("drop table bench_$i" . $server->{'drop_attr'}) or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for create_key+drop ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -#### -#### End of benchmark -#### - -$dbh->disconnect; # close connection -end_benchmark($start_time); diff --git a/sql-bench/test-insert.sh b/sql-bench/test-insert.sh deleted file mode 100644 index f83d0fd13be509e5e072dd5b76c2814d09fa67b8..0000000000000000000000000000000000000000 --- a/sql-bench/test-insert.sh +++ /dev/null @@ -1,1801 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of creating a simple table and inserting $record_count records in it, -# $opt_loop_count rows in order, $opt_loop_count rows in reverse order and -# $opt_loop_count rows in random order -# -# changes made for Oracle compatibility -# - $limits->{'func_odbc_mod'} is OK from crash-me, but it fails here so set we -# set it to 0 in server-cfg -# - the default server config runs out of rollback segments, so we added a -# couple of disconnect/connects to reset -# -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; -use Data::Dumper; - -$opt_loop_count=100000; # number of rows/3 -$small_loop_count=10; # Loop for full table retrieval -$range_loop_count=$small_loop_count*50; -$many_keys_loop_count=$opt_loop_count; -$opt_read_key_loop_count=$opt_loop_count; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -if ($opt_small_test) -{ - $opt_loop_count/=100; - $many_keys_loop_count=$opt_loop_count/10; - $range_loop_count=10; - $opt_read_key_loop_count=10; -} -elsif ($opt_small_tables) -{ - $opt_loop_count=10000; # number of rows/3 - $many_keys_loop_count=$opt_loop_count; - $opt_read_key_loop_count=10; -} -elsif ($opt_small_key_tables) -{ - $many_keys_loop_count/=10; -} - -if ($opt_loop_count < 100) -{ - $opt_loop_count=100; # Some tests must have some data to work! -} -$range_loop_count=min($opt_loop_count,$range_loop_count); - - -print "Testing the speed of inserting data into 1 table and do some selects on it.\n"; -print "The tests are done with a table that has $opt_loop_count rows.\n\n"; - -#### -#### Generating random keys -#### - -print "Generating random keys\n"; -$random[$opt_loop_count]=0; -for ($i=0 ; $i < $opt_loop_count ; $i++) -{ - $random[$i]=$i+$opt_loop_count; -} - -my $tmpvar=1; -for ($i=0 ; $i < $opt_loop_count ; $i++) -{ - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $swap=$tmpvar % $opt_loop_count; - $tmp=$random[$i]; $random[$i]=$random[$swap]; $random[$swap]=$tmp; -} - -$total_rows=$opt_loop_count*3; - -#### -#### Connect and start timeing -#### -$start_time=new Benchmark; -$dbh = $server->connect(); -#### -#### Create needed tables -#### - -goto keys_test if ($opt_stage == 2); -goto select_test if ($opt_skip_create); - -print "Creating tables\n"; -$dbh->do("drop table bench1" . $server->{'drop_attr'}); -$dbh->do("drop table bench2" . $server->{'drop_attr'}); -$dbh->do("drop table bench3" . $server->{'drop_attr'}); -do_many($dbh,$server->create("bench1", - ["id int NOT NULL", - "id2 int NOT NULL", - "id3 int NOT NULL", - "dummy1 char(30)"], - ["primary key (id,id2)", - "index ix_id3 (id3)"])); - -if ($opt_lock_tables) -{ - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; -} - -#### -#### Insert $total_rows records in order, in reverse order and random. -#### - -$loop_time=new Benchmark; - -if ($opt_fast_insert) -{ - $query="insert into bench1 values "; -} -else -{ - $query="insert into bench1 (id,id2,id3,dummy1) values "; -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->{AutoCommit} = 0; - print "Transactions enabled\n" if ($opt_debug); -} - -if (($opt_fast || $opt_fast_insert) && $server->{'limits'}->{'insert_multi_value'}) -{ - $query_size=$server->{'limits'}->{'query_size'}; - - print "Inserting $opt_loop_count multiple-value rows in order\n"; - $res=$query; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $tmp= "($i,$i,$i,'ABCDEFGHIJ'),"; - if (length($tmp)+length($res) < $query_size) - { - $res.= $tmp; - } - else - { - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; - $res=$query . $tmp; - } - } - print "Inserting $opt_loop_count multiple-value rows in reverse order\n"; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $tmp= "(" . ($total_rows-1-$i) . "," .($total_rows-1-$i) . - "," .($total_rows-1-$i) . ",'BCDEFGHIJK'),"; - if (length($tmp)+length($res) < $query_size) - { - $res.= $tmp; - } - else - { - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; - $res=$query . $tmp; - } - } - print "Inserting $opt_loop_count multiple-value rows in random order\n"; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $tmp= "(" . $random[$i] . "," . $random[$i] . "," . $random[$i] . - ",'CDEFGHIJKL')," or die $DBI::errstr; - if (length($tmp)+length($res) < $query_size) - { - $res.= $tmp; - } - else - { - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; - $res=$query . $tmp; - } - } - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; -} -else -{ - print "Inserting $opt_loop_count rows in order\n"; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $sth = $dbh->do($query . "($i,$i,$i,'ABCDEFGHIJ')") or die $DBI::errstr; - } - - print "Inserting $opt_loop_count rows in reverse order\n"; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $sth = $dbh->do($query . "(" . ($total_rows-1-$i) . "," . - ($total_rows-1-$i) . "," . - ($total_rows-1-$i) . ",'BCDEFGHIJK')") - or die $DBI::errstr; - } - - print "Inserting $opt_loop_count rows in random order\n"; - - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $sth = $dbh->do($query . "(". $random[$i] . "," . $random[$i] . - "," . $random[$i] . ",'CDEFGHIJKL')") or die $DBI::errstr; - } -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; -print "Time for insert (" . ($total_rows) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_lock_tables) -{ - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; -} -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh,"bench1"); -} -if ($opt_lock_tables) -{ - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; -} - -#### -#### insert $opt_loop_count records with duplicate id -#### - -if ($limits->{'unique_index'}) -{ - print "Testing insert of duplicates\n"; - $loop_time=new Benchmark; - - if ($opt_fast && $server->{transactions}) - { - $dbh->{AutoCommit} = 0; - } - - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $tmp=$tmpvar % ($total_rows); - $tmpquery = "$query ($tmp,$tmp,2,'D')"; - if ($dbh->do($tmpquery)) - { - die "Didn't get an error when inserting duplicate record $tmp\n"; - } - } - if ($opt_fast && $server->{transactions}) - { - $dbh->commit; - $dbh->{AutoCommit} = 1; - } - - $end_time=new Benchmark; - print "Time for insert_duplicates (" . ($opt_loop_count) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -#### -#### Do some selects on the table -#### - -select_test: - -# ----------------- prepared+executed/prepared*executed tests - -print "Test of prepared+execute/once prepared many execute selects\n"; -$loop_time=new Benchmark; - -for ($i=1 ; $i <= $opt_loop_count ; $i++) -{ - my ($key_value)=$random[$i]; - my ($query)= "select * from bench1 where id=$key_value"; - print "$query\n" if ($opt_debug); - $sth = $dbh->prepare($query); - if (! $sth) - { - die "error in prepare select with id = $key_value : $DBI::errstr"; - }; - if (! $sth->execute) - { - die "cannot execute prepare select with id = $key_value : $DBI::errstr"; - } - while ($sth->fetchrow_arrayref) { }; - $sth->finish; -}; -$end_time=new Benchmark; -print "Time for prepared_select ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -$loop_time=new Benchmark; -$query= "select * from bench1 where id=?"; -$sth = $dbh->prepare($query); -if (! $sth) -{ - die "cannot prepare select: $DBI::errstr"; -}; - -for ($i=1 ; $i <= $opt_loop_count ; $i++) -{ - my ($key_value)=$random[$i]; - $sth->bind_param(1,$key_value); - print "$query , id = $key_value\n" if ($opt_debug); - if (! $sth->execute) - { - die "cannot execute prepare select with id = $key_value : $DBI::errstr"; - } - while ($sth->fetchrow_arrayref) { }; -}; -$sth->finish; -$end_time=new Benchmark; -print "Time for once_prepared_select ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -print "Retrieving data from the table\n"; -$loop_time=new Benchmark; -$error=0; - -# It's really a small table, so we can try a select on everything - -$count=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - if (($found_rows=fetch_all_rows($dbh,"select id from bench1")) != - $total_rows) - { - if (!$error++) - { - print "Warning: Got $found_rows rows when selecting a whole table of " . ($total_rows) . " rows\nContact the database or DBD author!\n"; - } - } - $count+=$found_rows; -} - -$end_time=new Benchmark; -print "Time for select_big ($small_loop_count:$count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -# -# Do a lot of different ORDER BY queries -# - -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select id,id2 from bench1 order by id,id2",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big_key ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select id,id2 from bench1 order by id desc, id2 desc",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big_key_desc ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select id from bench1 order by id desc",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big_key_prefix ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select id3 from bench1 order by id3",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big_key2 ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$sel=$limits->{'order_by_unused'} ? "id2" : "*"; -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select $sel from bench1 order by id3",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big_key_diff ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$sel=$limits->{'order_by_unused'} ? "id" : "*"; -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $small_loop_count ; $i++) -{ - $rows+=fetch_all_rows($dbh,"select $sel from bench1 order by id2,id3",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $small_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_big ($small_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -$sel=$limits->{'order_by_unused'} ? "dummy1" : "dummy1,id3"; -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $range_loop_count ; $i++) -{ - $start=$opt_loop_count/$range_loop_count*$i; - $end=$start+$i; - $rows+=fetch_all_rows($dbh,"select $sel from bench1 where id>=$start and id <= $end order by id3",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $range_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_range ($range_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -$sel=$limits->{'order_by_unused'} ? "dummy1" : "dummy1,id"; -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $range_loop_count ; $i++) -{ - $start=$opt_loop_count/$range_loop_count*$i; - $end=$start+$i; - $rows+=fetch_all_rows($dbh,"select $sel from bench1 where id>=$start and id <= $end order by id",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $range_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_key_prefix ($range_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -$sel=$limits->{'order_by_unused'} ? "id2" : "id2,id3"; -$loop_time=new Benchmark; -$estimated=$rows=0; -for ($i=1 ; $i <= $range_loop_count ; $i++) -{ - $start=$opt_loop_count/$range_loop_count*$i; - $end=$start+$range_loop_count; - $rows+=fetch_all_rows($dbh,"select $sel from bench1 where id3>=$start and id3 <= $end order by id3",1); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$i, - $range_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for order_by_key2_diff ($range_loop_count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -# -# Test of select on 2 different keys with or -# (In this case database can only use keys if they do an automatic union). -# - -$loop_time=new Benchmark; -$estimated=0; -$rows=0; -$count=0; -for ($i=1 ; $i <= $range_loop_count ; $i++) -{ - my $rnd=$i; - my $rnd2=$random[$i]; - $rows+=fetch_all_rows($dbh,"select id2 from bench1 where id=$rnd or id3=$rnd2",1); - $count++; - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$count, - $range_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for select_diff_key ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -# Test select that is very popular when using ODBC - -check_or_range("id","select_range_prefix"); -check_or_range("id3","select_range_key2"); - -# Check reading on direct key on id and id3 - -check_select_key("*","id","select_key_prefix"); -check_select_key2("*","id","id2","select_key"); -check_select_key2("id,id2","id","id2","select_key_return_key"); -check_select_key("*","id3","select_key2"); -check_select_key("id3","id3","select_key2_return_key"); -check_select_key("id,id2","id3","select_key2_return_prim"); - -#### -#### A lot of simple selects on ranges -#### - -@Q=("select * from bench1 where !id!=3 or !id!=2 or !id!=1 or !id!=4 or !id!=16 or !id!=10", - 6, - "select * from bench1 where !id!>=" . ($total_rows-1) ." or !id!<1", - 2, - "select * from bench1 where !id!>=1 and !id!<=2", - 2, - "select * from bench1 where (!id!>=1 and !id!<=2) or (!id!>=1 and !id!<=2)", - 2, - "select * from bench1 where !id!>=1 and !id!<=10 and !id!<=5", - 5, - "select * from bench1 where (!id!>0 and !id!<2) or !id!>=" . ($total_rows-1), - 2, - "select * from bench1 where (!id!>0 and !id!<2) or (!id!>= " . ($opt_loop_count/2) . " and !id! <= " . ($opt_loop_count/2+2) . ") or !id! = " . ($opt_loop_count/2-1), - 5, - "select * from bench1 where (!id!>=5 and !id!<=10) or (!id!>=1 and !id!<=4)", - 10, - "select * from bench1 where (!id!=1 or !id!=2) and (!id!=3 or !id!=4)", - 0, - "select * from bench1 where (!id!=1 or !id!=2) and (!id!=2 or !id!=3)", - 1, - "select * from bench1 where (!id!=1 or !id!=5 or !id!=20 or !id!=40) and (!id!=1 or !id!>=20 or !id!=4)", - 3, - "select * from bench1 where ((!id!=1 or !id!=3) or (!id!>1 and !id!<3)) and !id!<=2", - 2, - "select * from bench1 where (!id! >= 0 and !id! < 4) or (!id! >=4 and !id! < 6)", - 6, - "select * from bench1 where !id! <= -1 or (!id! >= 0 and !id! <= 5) or (!id! >=4 and !id! < 6) or (!id! >=6 and !id! <=7) or (!id!>7 and !id! <= 8)", - 9, - "select * from bench1 where (!id!>=1 and !id!<=2 or !id!>=4 and !id!<=5) or (!id!>=0 and !id! <=10)", - 11, - "select * from bench1 where (!id!>=1 and !id!<=2 or !id!>=4 and !id!<=5) or (!id!>2 and !id! <=10)", - 10, - "select * from bench1 where (!id!>1 or !id! <1) and !id!<=2", - 2, - "select * from bench1 where !id! <= 2 and (!id!>1 or !id! <=1)", - 3, - "select * from bench1 where (!id!>=1 or !id! <1) and !id!<=2", - 3, - "select * from bench1 where (!id!>=1 or !id! <=2) and !id!<=2", - 3 - ); - -print "\nTest of compares with simple ranges\n"; -check_select_range("id","select_range_prefix"); -check_select_range("id3","select_range_key2"); - -#### -#### Some group queries -#### - -if ($limits->{'group_functions'}) -{ - $loop_time=new Benchmark; - $count=1; - - $estimated=0; - for ($tests=0 ; $tests < $small_loop_count ; $tests++) - { - $sth=$dbh->prepare($query="select count(*) from bench1") or die $DBI::errstr; - $sth->execute or die $sth->errstr; - if (($sth->fetchrow_array)[0] != $total_rows) - { - print "Warning: '$query' returned wrong result\n"; - } - $sth->finish; - - # min, max in keys are very normal - $count+=7; - fetch_all_rows($dbh,"select min(id) from bench1"); - fetch_all_rows($dbh,"select max(id) from bench1"); - fetch_all_rows($dbh,"select sum(id+0.0) from bench1"); - fetch_all_rows($dbh,"select min(id3),max(id3),sum(id3-0.0) from bench1"); - if ($limits->{'group_func_sql_min_str'}) - { - fetch_all_rows($dbh,"select min(dummy1),max(dummy1) from bench1"); - } - $count++; - $sth=$dbh->prepare($query="select count(*) from bench1 where id >= " . - ($opt_loop_count*2)) or die $DBI::errstr; - $sth->execute or die $DBI::errstr; - if (($sth->fetchrow_array)[0] != $opt_loop_count) - { - print "Warning: '$query' returned wrong result\n"; - } - $sth->finish; - - $count++; - $sth=$dbh->prepare($query="select count(*),sum(id+0.0),min(id),max(id),avg(id-0.0) from bench1") or die $DBI::errstr; - $sth->execute or die $DBI::errstr; - @row=$sth->fetchrow_array; - if ($row[0] != $total_rows || - int($row[1]+0.5) != int((($total_rows-1)/2*$total_rows)+0.5) || - $row[2] != 0 || - $row[3] != $total_rows-1 || - 1-$row[4]/(($total_rows-1)/2) > 0.001) - { - # PostgreSQL 6.3 fails here - print "Warning: '$query' returned wrong result: @row\n"; - } - $sth->finish; - - if ($limits->{'func_odbc_mod'}) - { - $tmp="mod(id,10)"; - if ($limits->{'func_extra_%'}) - { - $tmp="id % 10"; # For postgreSQL - } - $count++; - if ($limits->{'group_by_alias'}) { - if (fetch_all_rows($dbh,$query=$server->query("select $tmp as last_digit,count(*) from bench1 group by last_digit")) != 10) - { - print "Warning: '$query' returned wrong number of rows\n"; - } - } elsif ($limits->{'group_by_position'}) { - if (fetch_all_rows($dbh,$query=$server->query("select $tmp,count(*) from bench1 group by 1")) != 10) - { - print "Warning: '$query' returned wrong number of rows\n"; - } - } - } - - if ($limits->{'order_by_position'} && $limits->{'group_by_position'}) - { - $count++; - if (fetch_all_rows($dbh, $query="select id,id3,dummy1 from bench1 where id < 100+$count-$count group by id,id3,dummy1 order by id desc,id3,dummy1") != 100) - { - print "Warning: '$query' returned wrong number of rows\n"; - } - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$tests, - $small_loop_count)); - } - print_time($estimated); - print " for select_group ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=$estimated=0; - for ($tests=1 ; $tests <= $range_loop_count*5 ; $tests++) - { - $count+=6; - fetch_all_rows($dbh,"select min(id) from bench1"); - fetch_all_rows($dbh,"select max(id) from bench1"); - fetch_all_rows($dbh,"select min(id2) from bench1 where id=$tests"); - fetch_all_rows($dbh,"select max(id2) from bench1 where id=$tests"); - if ($limits->{'group_func_sql_min_str'}) - { - fetch_all_rows($dbh,"select min(dummy1) from bench1 where id=$tests"); - fetch_all_rows($dbh,"select max(dummy1) from bench1 where id=$tests"); - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$tests, - $range_loop_count*5)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for min_max_on_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=$estimated=0; - for ($tests=1 ; $tests <= $small_loop_count ; $tests++) - { - $count+=6; - fetch_all_rows($dbh,"select min(id2) from bench1"); - fetch_all_rows($dbh,"select max(id2) from bench1"); - fetch_all_rows($dbh,"select min(id3) from bench1 where id2=$tests"); - fetch_all_rows($dbh,"select max(id3) from bench1 where id2=$tests"); - if ($limits->{'group_func_sql_min_str'}) - { - fetch_all_rows($dbh,"select min(dummy1) from bench1 where id2=$tests"); - fetch_all_rows($dbh,"select max(dummy1) from bench1 where id2=$tests"); - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$tests, - $range_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for min_max ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=0; - $total=$opt_loop_count*3; - for ($tests=0 ; $tests < $total ; $tests+=$total/100) - { - $count+=1; - fetch_all_rows($dbh,"select count(id) from bench1 where id < $tests"); - } - $end_time=new Benchmark; - print "Time for count_on_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=0; - for ($tests=0 ; $tests < $total ; $tests+=$total/100) - { - $count+=1; - fetch_all_rows($dbh,"select count(dummy1) from bench1 where id2 < $tests"); - } - $end_time=new Benchmark; - print "Time for count ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - if ($limits->{'group_distinct_functions'}) - { - $loop_time=new Benchmark; - $count=$estimated=0; - for ($tests=1 ; $tests <= $small_loop_count ; $tests++) - { - $count+=2; - fetch_all_rows($dbh,"select count(distinct dummy1) from bench1"); - fetch_all_rows($dbh,"select dummy1,count(distinct id) from bench1 group by dummy1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$tests, - $small_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for count_distinct_big ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - } -} - - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} - -#### -#### Some updates on the table -#### - -$loop_time=new Benchmark; - -if ($limits->{'functions'}) -{ - print "\nTesting update of keys with functions\n"; - my $update_loop_count=$opt_loop_count/2; - for ($i=0 ; $i < $update_loop_count ; $i++) - { - my $tmp=$opt_loop_count+$random[$i]; # $opt_loop_count*2 <= $tmp < $total_rows - $sth = $dbh->do("update bench1 set id3=-$tmp where id3=$tmp") or die $DBI::errstr; - } - - $end_time=new Benchmark; - print "Time for update_of_key ($update_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - if ($opt_lock_tables) - { - do_query($dbh,"UNLOCK TABLES"); - } - if ($opt_fast && defined($server->{vacuum})) - { - $server->vacuum(1,\$dbh,"bench1"); - } - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - - $loop_time=new Benchmark; - $count=0; - $step=int($opt_loop_count/$range_loop_count+1); - for ($i= 0 ; $i < $opt_loop_count ; $i+= $step) - { - $count++; - $sth=$dbh->do("update bench1 set id3= 0-id3 where id3 >= 0 and id3 <= $i") or die $DBI::errstr; - } - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - $count++; - $sth=$dbh->do("update bench1 set id3= 0-id3 where id3 >= 0 and id3 < $opt_loop_count") or die $DBI::errstr; - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - $count++; - $sth=$dbh->do("update bench1 set id3= 0-id3 where id3 >= $opt_loop_count and id3 < ". ($opt_loop_count*2)) or die $DBI::errstr; - - # - # Check that everything was updated - # In principle we shouldn't time this in the update loop.. - # - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - $row_count=0; - if (($sth=$dbh->prepare("select count(*) from bench1 where id3>=0")) - && $sth->execute) - { - ($row_count)=$sth->fetchrow; - } - $result=1 + $opt_loop_count-$update_loop_count; - if ($row_count != $result) - { - print "Warning: Update check returned $row_count instead of $result\n"; - } - - $sth->finish; - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - #restore id3 to 0 <= id3 < $total_rows/10 or 0<= id3 < $total_rows - - my $func=($limits->{'func_odbc_floor'}) ? "floor((0-id3)/20)" : "0-id3"; - $count++; - $sth=$dbh->do($query="update bench1 set id3=$func where id3<0") or die $DBI::errstr; - - $end_time=new Benchmark; - print "Time for update_of_key_big ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} -else -{ - print "\nTesting update of keys in loops\n"; - # - # This is for mSQL that doesn't have functions. Do we really need this ???? - # - - $sth=$dbh->prepare("select id3 from bench1 where id3 >= 0") or die $DBI::errstr; - $sth->execute or die $DBI::errstr; - $count=0; - while (@tmp = $sth->fetchrow_array) - { - my $tmp1 = "-$tmp[0]"; - my $sth1 = $dbh->do("update bench1 set id3 = $tmp1 where id3 = $tmp[0]"); - $count++; - $end_time=new Benchmark; - if (($end_time->[0] - $loop_time->[0]) > $opt_time_limit) - { - print "note: Aborting update loop because of timeout\n"; - last; - } - } - $sth->finish; - # Check that everything except id3=0 was updated - # In principle we shouldn't time this in the update loop.. - # - if (fetch_all_rows($dbh,$query="select * from bench1 where id3>=0") != 1) - { - if ($count == $total_rows) - { - print "Warning: Wrong information after update: Found '$row_count' rows, but should have been: 1\n"; - } - } - #restore id3 to 0 <= id3 < $total_rows - $sth=$dbh->prepare("select id3 from bench1 where id3 < 0") or die $DBI::errstr; - $sth->execute or die $DBI::errstr; - while (@tmp = $sth->fetchrow_array) - { - $count++; - my $tmp1 = floor((0-$tmp[0])/10); - my $sth1 = $dbh->do("update bench1 set id3 = $tmp1 where id3 = $tmp[0]"); - } - $sth->finish; - $end_time=new Benchmark; - $estimated=predict_query_time($loop_time,$end_time,\$count,$count, - $opt_loop_count*6); - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for update_of_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -if ($opt_fast && defined($server->{vacuum})) -{ - if ($opt_lock_tables) - { - do_query($dbh,"UNLOCK TABLES"); - } - $server->vacuum(1,\$dbh,"bench1"); - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -# -# Testing some simple updates -# - -print "Testing update with key\n"; -$loop_time=new Benchmark; -for ($i=0 ; $i < $opt_loop_count*3 ; $i++) -{ - $sth = $dbh->do("update bench1 set dummy1='updated' where id=$i and id2=$i") or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for update_with_key (" . ($opt_loop_count*3) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -$loop_time=new Benchmark; -$count=0; -for ($i=1 ; $i < $opt_loop_count*3 ; $i+=3) -{ - $sth = $dbh->do("update bench1 set dummy1='updated' where id=$i") or die $DBI::errstr; - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$i,$tests, - $opt_loop_count)); -} -if ($estimated) -{ print "Estimated time"; } -else -{ print "Time"; } -print " for update_with_key_prefix (" . ($opt_loop_count) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -print "\nTesting update of all rows\n"; -$loop_time=new Benchmark; -for ($i=0 ; $i < $small_loop_count ; $i++) -{ - $sth = $dbh->do("update bench1 set dummy1='updated $i'") or die $DBI::errstr; -} -$end_time=new Benchmark; -print "Time for update_big ($small_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - -# -# Testing left outer join -# - -if ($limits->{'func_odbc_floor'} && $limits->{'left_outer_join'}) -{ - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 a READ, bench1 b READ") || die $DBI::errstr; - } - print "\nTesting left outer join\n"; - $loop_time=new Benchmark; - $count=0; - for ($i=0 ; $i < $small_loop_count ; $i++) - { - $count+=fetch_all_rows($dbh,"select count(*) from bench1 as a left outer join bench1 as b on (a.id2=b.id3)"); - } - $end_time=new Benchmark; - print "Time for outer_join_on_key ($small_loop_count:$count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=0; - for ($i=0 ; $i < $small_loop_count ; $i++) - { - $count+=fetch_all_rows($dbh,"select count(a.dummy1),count(b.dummy1) from bench1 as a left outer join bench1 as b on (a.id2=b.id3)"); - } - $end_time=new Benchmark; - print "Time for outer_join ($small_loop_count:$count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $count=0; - $loop_time=new Benchmark; - for ($i=0 ; $i < $small_loop_count ; $i++) - { - $count+=fetch_all_rows($dbh,"select count(a.dummy1),count(b.dummy1) from bench1 as a left outer join bench1 as b on (a.id2=b.id3) where b.id3 is not null"); - } - $end_time=new Benchmark; - print "Time for outer_join_found ($small_loop_count:$count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $count=$estimated=0; - $loop_time=new Benchmark; - for ($i=1 ; $i <= $small_loop_count ; $i++) - { - $count+=fetch_all_rows($dbh,"select count(a.dummy1),count(b.dummy1) from bench1 as a left outer join bench1 as b on (a.id2=b.id3) where b.id3 is null"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time, - \$count,$i, - $range_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for outer_join_not_found ($range_loop_count:$count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} - -### -### Test speed of IN( value list) -### - -if ($limits->{'left_outer_join'}) -{ - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; - } - print "\n"; - do_many($dbh,$server->create("bench2", - ["id int NOT NULL"], - ["primary key (id)"])); - - $max_tests=min(($limits->{'query_size'}-50)/6, $opt_loop_count); - - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 READ, bench2 WRITE") || - die $DBI::errstr; - } - test_where_in("bench1","bench2","id",1,10); - test_where_in("bench1","bench2","id",11,min(100,$max_tests)); - test_where_in("bench1","bench2","id",101,min(1000,$max_tests)); - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; - } - $sth = $dbh->do("DROP TABLE bench2" . $server->{'drop_attr'}) || - die $DBI::errstr; - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -#### -#### Test INSERT INTO ... SELECT -#### - -if ($limits->{'insert_select'}) -{ - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; - } - print "\nTesting INSERT INTO ... SELECT\n"; - do_many($dbh,$server->create("bench2", - ["id int NOT NULL", - "id2 int NOT NULL", - "id3 int NOT NULL", - "dummy1 char(30)"], - ["primary key (id,id2)"])); - do_many($dbh,$server->create("bench3", - ["id int NOT NULL", - "id2 int NOT NULL", - "id3 int NOT NULL", - "dummy1 char(30)"], - ["primary key (id,id2)", - "index index_id3 (id3)"])); - $loop_time=new Benchmark; - $sth = $dbh->do("INSERT INTO bench2 SELECT * from bench1") || - die $DBI::errstr; - $end_time=new Benchmark; - print "Time for insert_select_1_key (1): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - $loop_time=new Benchmark; - $sth = $dbh->do("INSERT INTO bench3 SELECT * from bench1") || - die $DBI::errstr; - $end_time=new Benchmark; - print "Time for insert_select_2_keys (1): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - $loop_time=new Benchmark; - $sth = $dbh->do("DROP TABLE bench2" . $server->{'drop_attr'}) || - die $DBI::errstr; - $sth = $dbh->do("DROP TABLE bench3" . $server->{'drop_attr'}) || - die $DBI::errstr; - $end_time=new Benchmark; - print "Time for drop table(2): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - if ($opt_fast && defined($server->{vacuum})) - { - $server->vacuum(1,\$dbh); - } - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -#### -#### Do some deletes on the table -#### - -if (!$opt_skip_delete) -{ - print "\nTesting delete\n"; - $loop_time=new Benchmark; - $count=0; - for ($i=0 ; $i < $opt_loop_count ; $i+=10) - { - $count++; - $tmp=$opt_loop_count+$random[$i]; # $opt_loop_count*2 <= $tmp < $total_rows - $dbh->do("delete from bench1 where id3=$tmp") or die $DBI::errstr; - } - - $end_time=new Benchmark; - print "Time for delete_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - - $count=0; - $loop_time=new Benchmark; - for ($i= 0 ; $i < $opt_loop_count ; $i+=$opt_loop_count/10) - { - $sth=$dbh->do("delete from bench1 where id3 >= 0 and id3 <= $i") or die $DBI::errstr; - $count++; - } - $count+=2; - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - $sth=$dbh->do("delete from bench1 where id3 >= 0 and id3 <= $opt_loop_count") or die $DBI::errstr; - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - - $sth=$dbh->do("delete from bench1 where id >= $opt_loop_count and id <= " . ($opt_loop_count*2) ) or die $DBI::errstr; - - if ($server->small_rollback_segment()) - { - $dbh->disconnect; # close connection - $dbh = $server->connect(); - } - if ($opt_fast) - { - $sth=$dbh->do("delete from bench1") or die $DBI::errstr; - } - else - { - $sth = $dbh->do("delete from bench1 where id3 < " . ($total_rows)) or die $DBI::errstr; - } - - $end_time=new Benchmark; - print "Time for delete_range ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; - } - $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr; -} - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - - -keys_test: -# -# Test of insert in table with many keys -# This test assumes that the server really create the keys! -# - -my @fields=(); my @keys=(); -$keys=min($limits->{'max_index'},16); # 16 is more than enough -$seg= min($limits->{'max_index_parts'},$keys,16); # 16 is more than enough - -print "Insert into table with $keys keys and with a primary key with $seg parts\n"; - -# Make keys on the most important types -@types=(0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1); # A 1 for each char field -push(@fields,"field1 tinyint not null"); -push(@fields,"field_search tinyint not null"); -push(@fields,"field2 mediumint not null"); -push(@fields,"field3 smallint not null"); -push(@fields,"field4 char(16) not null"); -push(@fields,"field5 integer not null"); -push(@fields,"field6 float not null"); -push(@fields,"field7 double not null"); -for ($i=8 ; $i <= $keys ; $i++) -{ - push(@fields,"field$i char(6) not null"); # Should be relatively fair -} - -# First key contains many segments -$query="primary key ("; -for ($i= 1 ; $i <= $seg ; $i++) -{ - $query.= "field$i,"; -} -substr($query,-1)=")"; -push (@keys,$query); -push (@keys,"index index2 (field_search)"); - -#Create other keys -for ($i=3 ; $i <= $keys ; $i++) -{ - push(@keys,"index index$i (field$i)"); -} - -do_many($dbh,$server->create("bench1",\@fields,\@keys)); -if ($opt_lock_tables) -{ - $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; -} - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} - -$loop_time=new Benchmark; -if ($opt_fast && $server->{transactions}) -{ - $dbh->{AutoCommit} = 0; -} - -$fields=$#fields; -if (($opt_fast || $opt_fast_insert) && $server->{'limits'}->{'insert_multi_value'}) -{ - $query_size=$server->{'limits'}->{'query_size'}; - $query="insert into bench1 values "; - $res=$query; - for ($i=0; $i < $many_keys_loop_count; $i++) - { - $id= $i & 127; - $rand=$random[$i]; - $tmp="($id,$id,$rand," . ($i & 32766) . ",'ABCDEF$rand',0,$rand,$rand.0,"; - - for ($j=8; $j <= $fields ; $j++) - { - $tmp.= ($types[$j] == 0) ? "$rand," : "'$rand',"; - } - substr($tmp,-1)=")"; - if (length($tmp)+length($res) < $query_size) - { - $res.= $tmp . ","; - } - else - { - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; - $res=$query . $tmp . ","; - } - } - $sth = $dbh->do(substr($res,0,length($res)-1)) or die $DBI::errstr; -} -else -{ - for ($i=0; $i < $many_keys_loop_count; $i++) - { - $id= $i & 127; - $rand=$random[$i]; - $query="insert into bench1 values ($id,$id,$rand," . ($i & 32767) . - ",'ABCDEF$rand',0,$rand,$rand.0,"; - - for ($j=8; $j <= $fields ; $j++) - { - $query.= ($types[$j] == 0) ? "$rand," : "'$rand',"; - } - substr($query,-1)=")"; - print "query1: $query\n" if ($opt_debug); - $dbh->do($query) or die "Got error $DBI::errstr with query: $query\n"; - } -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; -print "Time for insert_key ($many_keys_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} -if ($opt_fast && defined($server->{vacuum})) -{ - if ($opt_lock_tables) - { - do_query($dbh,"UNLOCK TABLES"); - } - $server->vacuum(1,\$dbh,"bench1"); - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -# -# update one key of the above -# - -print "Testing update of keys\n"; -$loop_time=new Benchmark; - -if ($opt_fast && $server->{transactions}) -{ - $dbh->{AutoCommit} = 0; -} - -for ($i=0 ; $i< 256; $i++) -{ - $dbh->do("update bench1 set field5=1 where field_search=$i") - or die "Got error $DBI::errstr with query: update bench1 set field5=1 where field_search=$i\n"; -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; -print "Time for update_of_primary_key_many_keys (256): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} -if ($opt_fast && defined($server->{vacuum})) -{ - if ($opt_lock_tables) - { - do_query($dbh,"UNLOCK TABLES"); - } - $server->vacuum(1,\$dbh,"bench1"); - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 WRITE") || die $DBI::errstr; - } -} - -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh = $server->connect(); -} - -# -# Delete everything from table -# - -print "Deleting rows from the table\n"; -$loop_time=new Benchmark; -$count=0; - -for ($i=0 ; $i < 128 ; $i++) -{ - $count++; - $dbh->do("delete from bench1 where field_search = $i") or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for delete_big_many_keys ($count): " . -timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_lock_tables) -{ - $sth = $dbh->do("UNLOCK TABLES") || die $DBI::errstr; -} - -print "Deleting everything from table\n"; -$count=1; -if ($opt_fast) -{ - $query= ($limits->{'truncate_table'} ? "truncate table bench1" : - "delete from bench1"); - $dbh->do($query) or die $DBI::errstr; -} -else -{ - $dbh->do("delete from bench1 where field1 > 0") or die $DBI::errstr; -} - -$end_time=new Benchmark; -print "Time for delete_all_many_keys ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr; -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -# -# Test multi value inserts if the server supports it -# - -if ($limits->{'insert_multi_value'}) -{ - $query_size=$limits->{'query_size'}; # Same limit for all databases - - $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}); - do_many($dbh,$server->create("bench1", - ["id int NOT NULL", - "id2 int NOT NULL", - "id3 int NOT NULL", - "dummy1 char(30)"], - ["primary key (id,id2)", - "index index_id3 (id3)"])); - - $loop_time=new Benchmark; - - if ($opt_lock_tables) - { - $sth = $dbh->do("LOCK TABLES bench1 write") || die $DBI::errstr; - } - if ($opt_fast && $server->{transactions}) - { - $dbh->{AutoCommit} = 0; - } - - print "Inserting $opt_loop_count rows with multiple values\n"; - $query="insert into bench1 values "; - $res=$query; - for ($i=0 ; $i < $opt_loop_count ; $i++) - { - my $tmp= "($i,$i,$i,'EFGHIJKLM'),"; - if (length($i)+length($res) < $query_size) - { - $res.= $tmp; - } - else - { - do_query($dbh,substr($res,0,length($res)-1)); - $res=$query .$tmp; - } - } - do_query($dbh,substr($res,0,length($res)-1)); - - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES ") || die $DBI::errstr; - } - if ($opt_fast && $server->{transactions}) - { - $dbh->commit; - $dbh->{AutoCommit} = 1; - } - - $end_time=new Benchmark; - print "Time for multiple_value_insert (" . ($opt_loop_count) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - if ($opt_lock_tables) - { - $sth = $dbh->do("UNLOCK TABLES ") || die $DBI::errstr; - } - - # A big table may take a while to drop - $loop_time=new Benchmark; - $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr; - $end_time=new Benchmark; - print "Time for drop table(1): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -#### -#### End of benchmark -#### - -$dbh->disconnect; # close connection - -end_benchmark($start_time); - -### -### Some help functions -### - - -# Do some sample selects on direct key -# First select finds a row, the second one doesn't find. - -sub check_select_key -{ - my ($sel_columns,$column,$check)= @_; - my ($loop_time,$end_time,$i,$tmp_var,$tmp,$count,$row_count,$estimated); - - $estimated=0; - $loop_time=new Benchmark; - $count=0; - for ($i=1 ; $i <= $opt_read_key_loop_count; $i++) - { - $count+=2; - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $tmp=$tmpvar % ($total_rows); - fetch_all_rows($dbh,"select $sel_columns from bench1 where $column=$tmp") - or die $DBI::errstr; - $tmp+=$total_rows; - defined($row_count=fetch_all_rows($dbh,"select $sel_columns from bench1 where $column=$tmp")) or die $DBI::errstr; - die "Found $row_count rows on impossible id: $tmp\n" if ($row_count); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i, - $opt_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for $check ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -# Same as above, but select on 2 columns - -sub check_select_key2 -{ - my ($sel_columns,$column,$column2,$check)= @_; - my ($loop_time,$end_time,$i,$tmp_var,$tmp,$count,$row_count,$estimated); - - $estimated=0; - $loop_time=new Benchmark; - $count=0; - for ($i=1 ; $i <= $opt_read_key_loop_count; $i++) - { - $count+=2; - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $tmp=$tmpvar % ($total_rows); - fetch_all_rows($dbh,"select $sel_columns from bench1 where $column=$tmp and $column2=$tmp") - or die $DBI::errstr; - $tmp+=$total_rows; - defined($row_count=fetch_all_rows($dbh,"select $sel_columns from bench1 where $column=$tmp and $column2=$tmp")) or die $DBI::errstr; - die "Found $row_count rows on impossible id: $tmp\n" if ($row_count); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i, - $opt_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for $check ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -# -# Search using some very simple queries -# - -sub check_select_range -{ - my ($column,$check)= @_; - my ($loop_time,$end_time,$i,$tmp_var,$tmp,$query,$rows,$estimated); - - $estimated=0; - $loop_time=new Benchmark; - $found=$count=0; - for ($test=1 ; $test <= $range_loop_count; $test++) - { - $count+=$#Q+1; - for ($i=0 ; $i < $#Q ; $i+=2) - { - $query=$Q[$i]; - $rows=$Q[$i+1]; - $query =~ s/!id!/$column/g; - if (($row_count=fetch_all_rows($dbh,$query)) != $rows) - { - if ($row_count == undef()) - { - die "Got error: $DBI::errstr when executing $query\n"; - } - die "'$query' returned wrong number of rows: $row_count instead of $rows\n"; - } - $found+=$row_count; - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$test, - $range_loop_count)); - } - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for $check ($count:$found): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - - -# -# SELECT * from bench where col=x or col=x or col=x ... - - -sub check_or_range -{ - my ($column,$check)= @_; - my ($loop_time,$end_time,$i,$tmp_var,$tmp,$columns,$estimated,$found, - $or_part,$count,$loop_count); - - $columns=min($limits->{'max_columns'},50,($limits->{'query_size'}-50)/13); - $columns=$columns- ($columns % 4); # Make Divisible by 4 - - $estimated=0; - $loop_time=new Benchmark; - $found=0; - # The number of tests must be divisible by the following - $tmp= $limits->{'func_extra_in_num'} ? 15 : 10; - # We need to calculate the exact number of test to make 'Estimated' right - $loop_count=$range_loop_count*10+$tmp-1; - $loop_count=$loop_count- ($loop_count % $tmp); - - for ($count=0 ; $count < $loop_count ; ) - { - for ($rowcnt=0; $rowcnt <= $columns; $rowcnt+= $columns/4) - { - my $query="select * from bench1 where "; - my $or_part= "$column = 1"; - $count+=2; - - for ($i=1 ; $i < $rowcnt ; $i++) - { - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $tmp=$tmpvar % ($opt_loop_count*4); - $or_part.=" or $column=$tmp"; - } - print $query . $or_part . "\n" if ($opt_debug); - ($rows=fetch_all_rows($dbh,$query . $or_part)) or die $DBI::errstr; - $found+=$rows; - - if ($limits->{'func_extra_in_num'}) - { - my $in_part=$or_part; # Same query, but use 'func_extra_in_num' instead. - $in_part=~ s/ = / IN \(/; - $in_part=~ s/ or $column=/,/g; - $in_part.= ")"; - fetch_all_rows($dbh,$query . $in_part) or die $DBI::errstr; - $count++; - } - # Do it a little harder by setting a extra range - defined(($rows=fetch_all_rows($dbh,"$query($or_part) and $column < 10"))) or die $DBI::errstr; - $found+=$rows; - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$count, - $loop_count)); - } - - if ($estimated) - { print "Estimated time"; } - else - { print "Time"; } - print " for $check ($count:$found): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -# -# General test of SELECT ... WHERE id in(value-list) -# - -sub test_where_in -{ - my ($t1,$t2,$id,$from,$to)= @_; - - return if ($from >= $to); - - $query="SELECT $t1.* FROM $t1 WHERE $id IN ("; - for ($i=1 ; $i <= $to ; $i++) - { - $query.="$i,"; - } - $query=substr($query,0,length($query)-1) . ")"; - - # Fill join table to have the same id's as 'query' - for ($i= $from ; $i <= $to ; $i++) - { - $dbh->do("insert into $t2 values($i)") or die $DBI::errstr; - } - if ($opt_fast && defined($server->{vacuum})) - { - $server->vacuum(1,\$dbh,"bench1"); - } - - time_fetch_all_rows("Testing SELECT ... WHERE id in ($to values)", - "select_in", $query, $dbh, - $range_loop_count); - time_fetch_all_rows(undef, "select_join_in", - "SELECT $t1.* FROM $t2 left outer join $t1 on ($t1.$id=$t2.$id)", - $dbh, $range_loop_count); -} diff --git a/sql-bench/test-select.sh b/sql-bench/test-select.sh deleted file mode 100644 index 63f70b0aaa1e179b76c1bc39b77b1e19b5ed14fe..0000000000000000000000000000000000000000 --- a/sql-bench/test-select.sh +++ /dev/null @@ -1,455 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of selecting on keys that consist of many parts -# -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Getopt::Long; -use Benchmark; - -$opt_loop_count=10000; -$opt_medium_loop_count=1000; -$opt_small_loop_count=10; -$opt_regions=6; -$opt_groups=100; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$columns=min($limits->{'max_columns'},500,($limits->{'query_size'}-50)/24, - $limits->{'max_conditions'}/2-3); - -if ($opt_small_test) -{ - $opt_loop_count/=10; - $opt_medium_loop_count/=10; - $opt_small_loop_count/=10; - $opt_groups/=10; -} - -print "Testing the speed of selecting on keys that consist of many parts\n"; -print "The test-table has $opt_loop_count rows and the test is done with $columns ranges.\n\n"; - -#### -#### Connect and start timeing -#### - -$dbh = $server->connect(); -$start_time=new Benchmark; - -#### -#### Create needed tables -#### - -goto select_test if ($opt_skip_create); - -print "Creating table\n"; -$dbh->do("drop table bench1" . $server->{'drop_attr'}); - -do_many($dbh,$server->create("bench1", - ["region char(1) NOT NULL", - "idn integer(6) NOT NULL", - "rev_idn integer(6) NOT NULL", - "grp integer(6) NOT NULL"], - ["primary key (region,idn)", - "unique (region,rev_idn)", - "unique (region,grp,idn)"])); -if ($opt_lock_tables) -{ - do_query($dbh,"LOCK TABLES bench1 WRITE"); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - -#### -#### Insert $opt_loop_count records with -#### region: "A" -> "E" -#### idn: 0 -> count -#### rev_idn: count -> 0, -#### grp: distributed values 0 - > count/100 -#### - -print "Inserting $opt_loop_count rows\n"; - -$loop_time=new Benchmark; - -if ($opt_fast && $server->{transactions}) -{ - $dbh->{AutoCommit} = 0; -} - -$query="insert into bench1 values ("; -$half_done=$opt_loop_count/2; -for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--) -{ - $grp=$id*3 % $opt_groups; - $region=chr(65+$id%$opt_regions); - do_query($dbh,"$query'$region',$id,$rev_id,$grp)"); - if ($id == $half_done) - { # Test with different insert - $query="insert into bench1 (region,idn,rev_idn,grp) values ("; - } -} - -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; -print "Time to insert ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_lock_tables) -{ - do_query($dbh,"UNLOCK TABLES"); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh,"bench1"); -} - -if ($opt_lock_tables) -{ - do_query($dbh,"LOCK TABLES bench1 WRITE"); -} - -#### -#### Do some selects on the table -#### - -select_test: - -if ($limits->{'group_functions'}) -{ - my ($tmp); $tmp=1000; - print "Test if the database has a query cache\n"; - - # First ensure that the table is read into memory - fetch_all_rows($dbh,"select sum(idn+$tmp),sum(rev_idn-$tmp) from bench1"); - - $loop_time=new Benchmark; - for ($tests=0 ; $tests < $opt_loop_count ; $tests++) - { - fetch_all_rows($dbh,"select sum(idn+100),sum(rev_idn-100) from bench1"); - } - $end_time=new Benchmark; - print "Time for select_cache ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - # If the database has a query cache, the following loop should be much - # slower than the previous loop - - $loop_time=new Benchmark; - for ($tests=0 ; $tests < $opt_loop_count ; $tests++) - { - fetch_all_rows($dbh,"select sum(idn+$tests),sum(rev_idn-$tests) from bench1"); - } - $end_time=new Benchmark; - print "Time for select_cache2 ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -print "Testing big selects on the table\n"; -$loop_time=new Benchmark; -$rows=0; -for ($i=0 ; $i < $opt_small_loop_count ; $i++) -{ - $grp=$i*11 % $opt_groups; - $region=chr(65+$i%($opt_regions+1)); # One larger to test misses - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region='$region'"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region='$region' and idn=$i"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region='$region' and rev_idn=$i"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region='$region' and grp=$grp"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region>='B' and region<='C' and grp=$grp"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where region>='B' and region<='E' and grp=$grp"); - $rows+=fetch_all_rows($dbh,"select idn from bench1 where grp=$grp"); # This is hard -} -$count=$opt_small_loop_count*7; - -$end_time=new Benchmark; -print "Time for select_big ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -# Test select with many OR's - -$loop_time=new Benchmark; -$tmpvar=0; -$count=0; -$estimated=0; -$max_and_conditions=$limits->{'max_conditions'}/2; -$rows=0; - -for ($i=0 ; $i < $opt_small_loop_count ; $i++) -{ - $region=chr(65+$i%($opt_regions+1)); # One larger to test out-of-regions - $query="select * from bench1 where "; - $or_part="grp = 1"; - $or_part2="region='A' and grp=1"; - - for ($j=1 ; $j < $columns; $j++) - { - $tmpvar^= ((($tmpvar + 63) + $j)*3 % 100000); - $tmp=$tmpvar % $opt_groups; - $tmp_region=chr(65+$tmpvar%$opt_regions); - $or_part.=" or grp=$tmp"; - if ($j < $max_and_conditions) - { - $or_part2.=" or region='$tmp_region' and grp=$tmp"; - } - } - $or_part="region='$region' and ($or_part)"; - -# Same query, but use 'func_extra_in_num' instead. - if ($limits->{'func_extra_in_num'}) - { - $in_part=$or_part; - $in_part=~ s/ = / IN \(/; - $in_part=~ s/ or grp=/,/g; - $in_part.= ")"; - defined($found=fetch_all_rows($dbh,$query . $in_part)) || die $DBI::errstr; - $rows+=$found; - $count++; - } - for ($j=0; $j < 10 ; $j++) - { - $rows+=fetch_all_rows($dbh,$query . $or_part); - $rows+=fetch_all_rows($dbh,$query . $or_part2); -# Do it a little harder by setting a extra range - $rows+=fetch_all_rows($dbh,"$query ($or_part) and idn < 50"); - $rows+=fetch_all_rows($dbh,"$query (($or_part) or (region='A' and grp < 10)) and region <='B'") - } - $count+=$j*4; - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_small_loop_count)); -} - -print_time($estimated); -print " for select_range ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -# -# Testing MIN() and MAX() on keys -# - -if ($limits->{'group_functions'} && $limits->{'order_by_unused'}) -{ - $loop_time=new Benchmark; - $count=0; - $estimated=0; - for ($tests=0 ; $tests < $opt_loop_count ; $tests++) - { - $count+=7; - $grp=$tests*3 % $opt_groups; - $region=chr(65+$tests % $opt_regions); - if ($limits->{'group_func_sql_min_str'}) - { - fetch_all_rows($dbh,"select min(region) from bench1"); - fetch_all_rows($dbh,"select max(region) from bench1"); - fetch_all_rows($dbh,"select min(region),max(region) from bench1"); - } - fetch_all_rows($dbh,"select min(rev_idn) from bench1 where region='$region'"); - - fetch_all_rows($dbh,"select max(grp) from bench1 where region='$region'"); - fetch_all_rows($dbh,"select max(idn) from bench1 where region='$region' and grp=$grp"); - if ($limits->{'group_func_sql_min_str'}) - { - fetch_all_rows($dbh,"select max(region) from bench1 where region<'$region'"); - } - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count, - $tests+1, $opt_loop_count)); - } - print_time($estimated); - print " for min_max_on_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $count=0; - $estimated=0; - for ($tests=0 ; $tests < $opt_loop_count ; $tests++) - { - $count+=5; - $grp=$tests*3 % $opt_groups; - $region=chr(65+$tests % $opt_regions); - fetch_all_rows($dbh,"select count(*) from bench1 where region='$region'"); - fetch_all_rows($dbh,"select count(*) from bench1 where region='$region' and grp=$grp"); - fetch_all_rows($dbh,"select count(*) from bench1 where region>'$region'"); - fetch_all_rows($dbh,"select count(*) from bench1 where region<='$region'"); - fetch_all_rows($dbh,"select count(*) from bench1 where region='$region' and grp>$grp"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count, - $tests+1, $opt_loop_count)); - } - print_time($estimated); - print " for count_on_key ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -} - -if ($limits->{'group_functions'}) -{ - $loop_time=new Benchmark; - $rows=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $rows+=fetch_all_rows($dbh,"select grp,count(*) from bench1 group by grp"); - } - $end_time=new Benchmark; - print "Time for count_group_on_key_parts ($i:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -if ($limits->{'group_distinct_functions'}) -{ - print "Testing count(distinct) on the table\n"; - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct region) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_key_prefix ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct grp) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -# Workaround mimer's behavior - if ($limits->{'multi_distinct'}) - { - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select count(distinct grp),count(distinct rev_idn) from bench1"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_2 ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - } - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select region,count(distinct idn) from bench1 group by region"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group_on_key ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select grp,count(distinct idn) from bench1 group by grp"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group_on_key_parts ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - for ($i=0 ; $i < $opt_medium_loop_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select grp,count(distinct rev_idn) from bench1 group by grp"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $opt_medium_loop_count)); - } - print_time($estimated); - print " for count_distinct_group ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - - $loop_time=new Benchmark; - $rows=$estimated=$count=0; - $test_count=$opt_medium_loop_count/10; - for ($i=0 ; $i < $test_count ; $i++) - { - $count++; - $rows+=fetch_all_rows($dbh,"select idn,count(distinct region) from bench1 group by idn"); - $end_time=new Benchmark; - last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1, - $test_count)); - } - print_time($estimated); - print " for count_distinct_big ($count:$rows): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; -} - -#### -#### End of benchmark -#### - -if ($opt_lock_tables) -{ - do_query($dbh,"UNLOCK TABLES"); -} -if (!$opt_skip_delete) -{ - do_query($dbh,"drop table bench1" . $server->{'drop_attr'}); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -$dbh->disconnect; # close connection - -end_benchmark($start_time); diff --git a/sql-bench/test-transactions.sh b/sql-bench/test-transactions.sh deleted file mode 100644 index 50d7098bca7e4d12477656fdb3745bf62a42965d..0000000000000000000000000000000000000000 --- a/sql-bench/test-transactions.sh +++ /dev/null @@ -1,298 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# -# Test of transactions performance. -# - -##################### Standard benchmark inits ############################## - -use Cwd; -use DBI; -use Benchmark; -#use warnings; - -$opt_groups=27; # Characters are 'A' -> Z - -$opt_loop_count=10000; # Change this to make test harder/easier -$opt_medium_loop_count=100; # Change this to make test harder/easier - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -# Avoid warnings for variables in bench-init.pl -# (Only works with perl 5.6) -#our ($opt_small_test, $opt_small_tables, $opt_debug, $opt_force); - -if ($opt_small_test || $opt_small_tables) -{ - $opt_loop_count/=100; - $opt_medium_loop_count/=10; -} - - -if (!$server->{transactions} && !$opt_force) -{ - print "Test skipped because the database doesn't support transactions\n"; - exit(0); -} - -#### -#### Connect and start timeing -#### - -$start_time=new Benchmark; -$dbh = $server->connect(); - -### -### Create Table -### - -print "Creating tables\n"; -$dbh->do("drop table bench1"); -$dbh->do("drop table bench2"); - -do_many($dbh,$server->create("bench1", - ["idn int NOT NULL", - "rev_idn int NOT NULL", - "region char(1) NOT NULL", - "grp int NOT NULL", - "updated tinyint NOT NULL"], - ["primary key (idn)", - "unique (region,grp)"])); -do_many($dbh,$server->create("bench2", - ["idn int NOT NULL", - "rev_idn int NOT NULL", - "region char(1) NOT NULL", - "grp int NOT NULL", - "updated tinyint NOT NULL"], - ["primary key (idn)", - "unique (region,grp)"])); - -$dbh->{AutoCommit} = 0; - -### -### Test insert perfomance -### - -test_insert("bench1","insert_commit",0); -test_insert("bench2","insert_autocommit",1); - -sub test_insert -{ - my ($table, $test_name, $auto_commit)= @_; - my ($loop_time,$end_time,$id,$rev_id,$grp,$region); - - $dbh->{AutoCommit}= $auto_commit; - $loop_time=new Benchmark; - - for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; - $id++,$rev_id--) - { - $grp=$id/$opt_groups; - $region=chr(65+$id%$opt_groups); - do_query($dbh,"insert into $table values ($id,$rev_id,'$region',$grp,0)"); - } - - $dbh->commit if (!$auto_commit); - $end_time=new Benchmark; - print "Time for $test_name ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -### -### Test rollback performance -### - -print "Test transactions rollback performance\n" if($opt_debug); - -## -## Insert rollback test -## - -# -# Test is done by inserting 100 rows in a table with lots of rows and -# then doing a rollback on these -# - -{ - my ($id,$rev_id,$grp,$region,$end,$loop_time,$end_time,$commit_loop,$count); - - $dbh->{AutoCommit} = 0; - $loop_time=new Benchmark; - $end=$opt_loop_count*2; - $count=0; - - for ($commit_loop=1, $id=$opt_loop_count ; $id < $end ; - $id++, $commit_loop++) - { - $rev_id=$end-$id; - $grp=$id/$opt_groups; - $region=chr(65+$id%$opt_groups); - do_query($dbh,"insert into bench1 values ($id,$rev_id,'$region',$grp,0)"); - if ($commit_loop >= $opt_medium_loop_count) - { - $dbh->rollback; - $commit_loop=0; - $count++; - } - } - if ($commit_loop > 1) - { - $dbh->rollback; - $count++; - } - $end_time=new Benchmark; - print "Time for insert_rollback ($count:$opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -## -## Update rollback test -## - -# -# Test is done by updating 100 rows in a table with lots of rows and -# then doing a rollback on these -# - -{ - my ($id,$loop_time,$end_time,$commit_loop,$count); - - $dbh->{AutoCommit} = 0; - $loop_time=new Benchmark; - $end=$opt_loop_count*2; - $count=0; - - for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++) - { - do_query($dbh,"update bench1 set updated=2 where idn=$id"); - if ($commit_loop >= $opt_medium_loop_count) - { - $dbh->rollback; - $commit_loop=0; - $count++; - } - } - if ($commit_loop > 1) - { - $dbh->rollback; - $count++; - } - $end_time=new Benchmark; - print "Time for update_rollback ($count:$opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -## -## Delete rollback test -## - -# -# Test is done by deleting 100 rows in a table with lots of rows and -# then doing a rollback on these -# - -{ - my ($id,$loop_time,$end_time,$commit_loop,$count); - - $dbh->{AutoCommit} = 0; - $loop_time=new Benchmark; - $end=$opt_loop_count*2; - $count=0; - - for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++) - { - do_query($dbh,"delete from bench1 where idn=$id"); - if ($commit_loop >= $opt_medium_loop_count) - { - $dbh->rollback; - $commit_loop=0; - $count++; - } - } - if ($commit_loop > 1) - { - $dbh->rollback; - $count++; - } - $end_time=new Benchmark; - print "Time for delete_rollback ($count:$opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - - -### -### Test update perfomance -### - -test_update("bench1","update_commit",0); -test_update("bench2","update_autocommit",1); - -sub test_update -{ - my ($table, $test_name, $auto_commit)= @_; - my ($loop_time,$end_time,$id); - - $dbh->{AutoCommit}= $auto_commit; - $loop_time=new Benchmark; - - for ($id=0 ; $id < $opt_loop_count ; $id++) - { - do_query($dbh,"update $table set updated=1 where idn=$id"); - } - - $dbh->commit if (!$auto_commit); - $end_time=new Benchmark; - print "Time for $test_name ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -### -### Test delete perfomance -### - -test_delete("bench1","delete_commit",0); -test_delete("bench2","delete_autocommit",1); - -sub test_delete -{ - my ($table, $test_name, $auto_commit)= @_; - my ($loop_time,$end_time,$id); - - $dbh->{AutoCommit}= $auto_commit; - $loop_time=new Benchmark; - - for ($id=0 ; $id < $opt_loop_count ; $id++) - { - do_query($dbh,"delete from $table where idn=$id"); - } - $dbh->commit if (!$auto_commit); - $end_time=new Benchmark; - print "Time for $test_name ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; -} - -#### -#### End of benchmark -#### - -$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr; -$sth = $dbh->do("drop table bench2" . $server->{'drop_attr'}) or die $DBI::errstr; - -$dbh->disconnect; # close connection -end_benchmark($start_time); diff --git a/sql-bench/test-wisconsin.sh b/sql-bench/test-wisconsin.sh deleted file mode 100644 index 89ffb9aa6295e91747e2801f4ba8e053042c35a0..0000000000000000000000000000000000000000 --- a/sql-bench/test-wisconsin.sh +++ /dev/null @@ -1,372 +0,0 @@ -#!@PERL@ -# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA -# - -use Cwd; -use DBI; -use Benchmark; - -$opt_loop_count=10; - -$pwd = cwd(); $pwd = "." if ($pwd eq ''); -require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; - -$into_table = ""; - -if ($opt_small_test) -{ - $opt_loop_count/=5; -} - -#### -#### Connect and start timeing -#### - -$dbh = $server->connect(); -$start_time=new Benchmark; - -#### -#### Create needed tables -#### - -init_data(); -init_query(); - -print "Wisconsin benchmark test\n\n"; - -if ($opt_skip_create) -{ - if ($opt_lock_tables) - { - @tmp=@table_names; push(@tmp,@extra_names); - $sth = $dbh->do("LOCK TABLES " . join(" WRITE,", @tmp) . " WRITE") || - die $DBI::errstr; - } - goto start_benchmark; -} - -$loop_time= new Benchmark; -for($ti = 0; $ti <= $#table_names; $ti++) -{ - my $table_name = $table_names[$ti]; - my $array_ref = $tables[$ti]; - - # This may fail if we have no table so do not check answer - $sth = $dbh->do("drop table $table_name" . $server->{'drop_attr'}); - print "Creating table $table_name\n" if ($opt_verbose); - do_many($dbh,@$array_ref); -} -$end_time=new Benchmark; -print "Time for create_table ($#tables): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(1,\$dbh); -} - - -#### -#### Insert data -#### - -print "Inserting data\n"; -$loop_time= new Benchmark; -$row_count=0; -if ($opt_lock_tables) -{ - @tmp=@table_names; push(@tmp,@extra_names); - $sth = $dbh->do("LOCK TABLES " . join(" WRITE,", @tmp) . " WRITE") || - die $DBI::errstr; -} - -if ($opt_fast && $server->{'limits'}->{'load_data_infile'}) -{ - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - if ($table_name =~ /tenk|Bprime/i) { - $filename = "$pwd/Data/Wisconsin/tenk.data"; - } else { - $filename = "$pwd/Data/Wisconsin/$table_name.data"; - } - $row_count+=$server->insert_file($table_name,$filename,$dbh); - } -} -else -{ - if ($opt_fast && $server->{transactions}) - { - $dbh->{AutoCommit} = 0; - } - - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - my $array_ref = $tables[$ti]; - my @table = @$array_ref; - my $insert_start = "insert into $table_name values ("; - - if ($table_name =~ /tenk|Bprime/i) { - $filename = "$pwd/Data/Wisconsin/tenk.data"; - } else { - $filename = "$pwd/Data/Wisconsin/$table_name.data"; - } - open(DATA, "$filename") || die "Can't open text file: $filename\n"; - while(<DATA>) - { - chomp; - $command = $insert_start . $_ . ")"; - print "$command\n" if ($opt_debug); - $sth = $dbh->do($command) or die $DBI::errstr; - $row_count++; - } - } - close(DATA); -} - -if ($opt_lock_tables) -{ - do_query($dbh,"UNLOCK TABLES"); -} -if ($opt_fast && $server->{transactions}) -{ - $dbh->commit; - $dbh->{AutoCommit} = 1; -} - -$end_time=new Benchmark; -print "Time to insert ($row_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n"; - -## Oracle runs out of rollback segments here if using the default "small" -## configuration so disconnect and reconnect to use a new segment -if ($server->small_rollback_segment()) -{ - $dbh->disconnect; # close connection - $dbh=$server->connect(); -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh,@table_names); -} - -if ($opt_lock_tables) -{ - @tmp=@table_names; push(@tmp,@extra_names); - $sth = $dbh->do("LOCK TABLES " . join(" WRITE,", @tmp) . " WRITE") || - die $DBI::errstr; -} - -$loop_time= $end_time; -print "Delete from Bprime where unique2 >= 1000\n" if ($opt_debug); -$sth = $dbh->do("delete from Bprime where Bprime.unique2 >= 1000") or - die $DBI::errstr; -$end_time=new Benchmark; -print "Time to delete_big (1): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -#### -#### Running the benchmark -#### - -start_benchmark: - -print "Running the actual benchmark\n"; - -$loop_time= new Benchmark; -$count=0; -for ($i = 0; $i <= $#query; $i+=2) -{ - if ($query[$i+1]) # If the server can handle it - { - $loop_count = 1; - $loop_count = $opt_loop_count if ($query[$i] =~ /^select/i); - $query[$i] =~ s/\sAS\s+[^\s,]+//ig if (!$limits->{'column_alias'}); - timeit($loop_count, "fetch_all_rows(\$dbh,\"$query[$i]\")"); - $count+=$loop_count; - } -} - -$end_time=new Benchmark; -print "Time for wisc_benchmark ($count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - -if (!$opt_skip_delete) -{ - for ($ti = 0; $ti <= $#table_names; $ti++) - { - my $table_name = $table_names[$ti]; - $sth = $dbh->do("drop table $table_name" . $server->{'drop_attr'}); - } -} - -if ($opt_fast && defined($server->{vacuum})) -{ - $server->vacuum(0,\$dbh); -} - -#### -#### The END -#### - -$dbh->disconnect; # close connection -end_benchmark($start_time); - - -################################ -###### subroutine for database structure -################################ - -sub init_data -{ - @onek= - $server->create("onek", - ["unique1 int(5) NOT NULL", - "unique2 int(4) NOT NULL", - "two int(4)", - "four int(4)", - "ten int(4)", - "twenty int(4)", - "hundred int(4) NOT NULL", - "thousand int(4)", - "twothousand int(4)", - "fivethous int(4)", - "tenthous int(4)", - "odd int(4)", - "even int(4)", - "stringu1 char(16)", - "stringu2 char(16)", - "string4 char(16)"], - ["UNIQUE (unique1)", - "UNIQUE (unique2)", - "INDEX hundred1 (hundred)"]); - - @tenk1= - $server->create("tenk1", - ["unique1 int(4) NOT NULL", - "unique2 int(4) NOT NULL", - "two int(4)", - "four int(4)", - "ten int(4)", - "twenty int(4)", - "hundred int(4) NOT NULL", - "thousand int(4)", - "twothousand int(4)", - "fivethous int(4)", - "tenthous int(4)", - "odd int(4)", - "even int(4)", - "stringu1 char(16)", - "stringu2 char(16)", - "string4 char(16)"], - ["UNIQUE (unique1)", - "UNIQUE (unique2)", - "INDEX hundred2 (hundred)"]); - - @tenk2= - $server->create("tenk2", - ["unique1 int(4) NOT NULL", - "unique2 int(4) NOT NULL", - "two int(4)", - "four int(4)", - "ten int(4)", - "twenty int(4)", - "hundred int(4) NOT NULL", - "thousand int(4)", - "twothousand int(4)", - "fivethous int(4)", - "tenthous int(4)", - "odd int(4)", - "even int(4)", - "stringu1 char(16)", - "stringu2 char(16)", - "string4 char(16)"], - ["UNIQUE (unique1)", - "UNIQUE (unique2)", - "INDEX hundred3 (hundred)"]); - - @Bprime= - $server->create("Bprime", - ["unique1 int(4) NOT NULL", - "unique2 int(4) NOT NULL", - "two int(4)", - "four int(4)", - "ten int(4)", - "twenty int(4)", - "hundred int(4) NOT NULL", - "thousand int(4)", - "twothousand int(4)", - "fivethous int(4)", - "tenthous int(4)", - "odd int(4)", - "even int(4)", - "stringu1 char(16)", - "stringu2 char(16)", - "string4 char(16)"], - ["UNIQUE (unique1)", - "UNIQUE (unique2)", - "INDEX hundred4 (hundred)"]); - - @tables = - (\@onek, \@tenk1, \@tenk2, \@Bprime); - - @table_names = - ("onek", "tenk1", "tenk2", "Bprime"); - -# Alias used in joins - @extra_names= - ("tenk1 as t", "tenk1 as t1","tenk1 as t2", "Bprime as B","onek as o"); -} - - -sub init_query -{ - @query= - ("select * $into_table from tenk1 where (unique2 > 301) and (unique2 < 402)",1, - "select * $into_table from tenk1 where (unique1 > 647) and (unique1 < 1648)",1, - "select * from tenk1 where unique2 = 2001",1, - "select * from tenk1 where (unique2 > 301) and (unique2 < 402)",1, - "select t1.*, t2.unique1 AS t2unique1, t2.unique2 AS t2unique2, t2.two AS t2two, t2.four AS t2four, t2.ten AS t2ten, t2.twenty AS t2twenty, t2.hundred AS t2hundred, t2.thousand AS t2thousand, t2.twothousand AS t2twothousand, t2.fivethous AS t2fivethous, t2.tenthous AS t2tenthous, t2.odd AS t2odd, t2.even AS t2even, t2.stringu1 AS t2stringu1, t2.stringu2 AS t2stringu2, t2.string4 AS t2string4 $into_table from tenk1 t1, tenk1 t2 where (t1.unique2 = t2.unique2) and (t2.unique2 < 1000)",$limits->{'table_wildcard'}, - "select t.*,B.unique1 AS Bunique1,B.unique2 AS Bunique2,B.two AS Btwo,B.four AS Bfour,B.ten AS Bten,B.twenty AS Btwenty,B.hundred AS Bhundred,B.thousand AS Bthousand,B.twothousand AS Btwothousand,B.fivethous AS Bfivethous,B.tenthous AS Btenthous,B.odd AS Bodd,B.even AS Beven,B.stringu1 AS Bstringu1,B.stringu2 AS Bstringu2,B.string4 AS Bstring4 $into_table from tenk1 t, Bprime B where t.unique2 = B.unique2",$limits->{'table_wildcard'}, - "select t1.*,o.unique1 AS ounique1,o.unique2 AS ounique2,o.two AS otwo,o.four AS ofour,o.ten AS oten,o.twenty AS otwenty,o.hundred AS ohundred,o.thousand AS othousand,o.twothousand AS otwothousand,o.fivethous AS ofivethous,o.tenthous AS otenthous,o.odd AS oodd, o.even AS oeven,o.stringu1 AS ostringu1,o.stringu2 AS ostringu2,o.string4 AS ostring4 $into_table from onek o, tenk1 t1, tenk1 t2 where (o.unique2 = t1.unique2) and (t1.unique2 = t2.unique2) and (t1.unique2 < 1000) and (t2.unique2 < 1000)",$limits->{'table_wildcard'}, - "select two, four, ten, twenty, hundred, string4 $into_table from tenk1",1, - "select * $into_table from onek",1, - "select MIN(unique2) as x $into_table from tenk1",$limits->{'group_functions'}, - "insert into tenk1 (unique1, unique2, two, four, ten, twenty, hundred, thousand, twothousand, fivethous, tenthous, odd, even,stringu1,stringu2, string4) values (10001, 74001, 0, 2, 0, 10, 50, 688, 1950, 4950, 9950, 1, 100, 'ron may choi','jae kwang choi', 'u. c. berkeley')",1, - "insert into tenk1 (unique1, unique2, two, four, ten, twenty, hundred, thousand, twothousand, fivethous, tenthous, odd, even,stringu1,stringu2, string4) values (19991, 60001, 0, 2, 0, 10, 50, 688, 1950, 4950, 9950, 1, 100, 'ron may choi','jae kwang choi', 'u. c. berkeley')",1, - "delete from tenk1 where tenk1.unique2 = 877",1, - "delete from tenk1 where tenk1.unique2 = 876",1, - "update tenk1 set unique2 = 10001 where tenk1.unique2 =1491",1, - "update tenk1 set unique2 = 10023 where tenk1.unique2 =1480",1, - "insert into tenk1 (unique1, unique2, two, four, ten, twenty, hundred, thousand, twothousand, fivethous, tenthous, odd, even, stringu1, stringu2, string4) values (20002, 70002, 0, 2, 0, 10, 50, 688, 1950, 4950, 9950, 1, 100, 'ron may choi', 'jae kwang choi', 'u. c. berkeley')",1, - "insert into tenk1 (unique1, unique2, two, four, ten, twenty, hundred, thousand, twothousand, fivethous, tenthous, odd, even, stringu1, stringu2, string4) values (50002, 40002, 0, 2, 0, 10, 50, 688, 1950, 4950, 9950, 1, 100, 'ron may choi', 'jae kwang choi', 'u. c. berkeley')",1, - "delete from tenk1 where tenk1.unique2 = 10001",1, - "delete from tenk1 where tenk1.unique2 = 900",1, - "update tenk1 set unique2 = 10088 where tenk1.unique2 =187",1, - "update tenk1 set unique2 = 10003 where tenk1.unique2 =2000",1, - "update tenk1 set unique2 = 10020 where tenk1.unique2 =1974",1, - "update tenk1 set unique2 = 16001 where tenk1.unique2 =1140",1, - ); -} diff --git a/sql-bench/uname.bat b/sql-bench/uname.bat deleted file mode 100644 index dd9fe012a3d910e35fbf872f73e3f924ff4c035b..0000000000000000000000000000000000000000 --- a/sql-bench/uname.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -@ver diff --git a/sql-common/client.c b/sql-common/client.c index 84df31b74400522f0d5d82d55b5fc4bf4619f8bb..32672ce120100de6662e8308e206b9d4feeca91d 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -71,11 +71,6 @@ my_bool net_flush(NET *net); #include <my_pthread.h> /* because of signal() */ #endif /* defined(THREAD) && !defined(__WIN__) */ -#if defined(OS2) && defined(MYSQL_SERVER) -#undef ER -#define ER CER -#endif /* defined( OS2) && defined(MYSQL_SERVER) */ - #include <sys/stat.h> #include <signal.h> #include <time.h> @@ -126,7 +121,7 @@ const char *def_shared_memory_base_name= default_shared_memory_base_name; static void mysql_close_free_options(MYSQL *mysql); static void mysql_close_free(MYSQL *mysql); -#if !(defined(__WIN__) || defined(OS2) || defined(__NETWARE__)) +#if !(defined(__WIN__) || defined(__NETWARE__)) static int wait_for_data(my_socket fd, uint timeout); #endif @@ -143,7 +138,7 @@ static int wait_for_data(my_socket fd, uint timeout); int my_connect(my_socket fd, const struct sockaddr *name, uint namelen, uint timeout) { -#if defined(__WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined(__WIN__) || defined(__NETWARE__) return connect(fd, (struct sockaddr*) name, namelen); #else int flags, res, s_err; @@ -183,7 +178,7 @@ int my_connect(my_socket fd, const struct sockaddr *name, uint namelen, If not, we will use select() */ -#if !(defined(__WIN__) || defined(OS2) || defined(__NETWARE__)) +#if !(defined(__WIN__) || defined(__NETWARE__)) static int wait_for_data(my_socket fd, uint timeout) { @@ -274,7 +269,7 @@ static int wait_for_data(my_socket fd, uint timeout) return (0); /* ok */ #endif /* HAVE_POLL */ } -#endif /* defined(__WIN__) || defined(OS2) || defined(__NETWARE__) */ +#endif /* defined(__WIN__) || defined(__NETWARE__) */ /* @@ -1535,6 +1530,27 @@ mysql_ssl_free(MYSQL *mysql __attribute__((unused))) mysql->connector_fd = 0; DBUG_VOID_RETURN; } + + +/* + Return the SSL cipher (if any) used for current + connection to the server. + + SYNOPSYS + mysql_get_ssl_cipher() + mysql pointer to the mysql connection + +*/ + +const char * STDCALL +mysql_get_ssl_cipher(MYSQL *mysql) +{ + DBUG_ENTER("mysql_get_ssl_cipher"); + if (mysql->net.vio && mysql->net.vio->ssl_arg) + DBUG_RETURN(SSL_get_cipher_name((SSL*)mysql->net.vio->ssl_arg)); + DBUG_RETURN(NULL); +} + #endif /* HAVE_OPENSSL */ diff --git a/sql/event_executor.cc b/sql/event_executor.cc index 498760bb6fd4032ebf531eba9fbe7e38c3201775..21464dd777bfc9359d7d7b3237af8db183e4f8e1 100644 --- a/sql/event_executor.cc +++ b/sql/event_executor.cc @@ -291,7 +291,7 @@ init_event_thread(THD* thd) DBUG_RETURN(-1); } -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); diff --git a/sql/field.cc b/sql/field.cc index 1f67f83aabd6b8476c3d92aba5030930e482a12b..9c504f186b34912943f8cf7fa1fddfb6fbe0d93a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5989,7 +5989,7 @@ int Field_str::store(double nr) uint Field::is_equal(create_field *new_field) { - return (new_field->sql_type == type()); + return (new_field->sql_type == real_type()); } @@ -6001,7 +6001,7 @@ uint Field_str::is_equal(create_field *new_field) (flags & (BINCMP_FLAG | BINARY_FLAG)))) return 0; /* One of the fields is binary and the other one isn't */ - return ((new_field->sql_type == type()) && + return ((new_field->sql_type == real_type()) && new_field->charset == field_charset && new_field->length == max_length()); } @@ -6798,7 +6798,7 @@ Field *Field_varstring::new_key_field(MEM_ROOT *root, uint Field_varstring::is_equal(create_field *new_field) { - if (new_field->sql_type == type() && + if (new_field->sql_type == real_type() && new_field->charset == field_charset) { if (new_field->length == max_length()) @@ -7957,12 +7957,12 @@ bool Field_num::eq_def(Field *field) uint Field_num::is_equal(create_field *new_field) { - return ((new_field->sql_type == type()) && + return ((new_field->sql_type == real_type()) && ((new_field->flags & UNSIGNED_FLAG) == (uint) (flags & UNSIGNED_FLAG)) && ((new_field->flags & AUTO_INCREMENT_FLAG) == (uint) (flags & AUTO_INCREMENT_FLAG)) && - (new_field->length >= max_length())); + (new_field->length <= max_length())); } @@ -7998,9 +7998,10 @@ uint Field_num::is_equal(create_field *new_field) Field_bit::Field_bit(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar *bit_ptr_arg, uchar bit_ofs_arg, enum utype unireg_check_arg, const char *field_name_arg) - : Field(ptr_arg, len_arg >> 3, null_ptr_arg, null_bit_arg, + : Field(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg), - bit_ptr(bit_ptr_arg), bit_ofs(bit_ofs_arg), bit_len(len_arg & 7) + bit_ptr(bit_ptr_arg), bit_ofs(bit_ofs_arg), bit_len(len_arg & 7), + bytes_in_rec(len_arg / 8) { /* Ensure that Field::eq() can distinguish between two different bit fields. @@ -8036,14 +8037,14 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs) int delta; for (; length && !*from; from++, length--); // skip left 0's - delta= field_length - length; + delta= bytes_in_rec - length; if (delta < -1 || (delta == -1 && (uchar) *from > ((1 << bit_len) - 1)) || (!bit_len && delta < 0)) { set_rec_bits(0xff, bit_ptr, bit_ofs, bit_len); - memset(ptr, 0xff, field_length); + memset(ptr, 0xff, bytes_in_rec); if (table->in_use->really_abort_on_warning()) set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1); else @@ -8071,7 +8072,7 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs) set_rec_bits((uchar) *from, bit_ptr, bit_ofs, bit_len); from++; } - memcpy(ptr, from, field_length); + memcpy(ptr, from, bytes_in_rec); } return 0; } @@ -8112,10 +8113,10 @@ longlong Field_bit::val_int(void) if (bit_len) { bits= get_rec_bits(bit_ptr, bit_ofs, bit_len); - bits<<= (field_length * 8); + bits<<= (bytes_in_rec * 8); } - switch (field_length) { + switch (bytes_in_rec) { case 0: return bits; case 1: return bits | (ulonglong) (uchar) ptr[0]; case 2: return bits | mi_uint2korr(ptr); @@ -8124,7 +8125,7 @@ longlong Field_bit::val_int(void) case 5: return bits | mi_uint5korr(ptr); case 6: return bits | mi_uint6korr(ptr); case 7: return bits | mi_uint7korr(ptr); - default: return mi_uint8korr(ptr + field_length - sizeof(longlong)); + default: return mi_uint8korr(ptr + bytes_in_rec - sizeof(longlong)); } } @@ -8206,7 +8207,7 @@ int Field_bit::cmp_offset(uint row_offset) if ((flag= (int) (bits_a - bits_b))) return flag; } - return memcmp(ptr, ptr + row_offset, field_length); + return memcmp(ptr, ptr + row_offset, bytes_in_rec); } @@ -8218,7 +8219,7 @@ void Field_bit::get_key_image(char *buff, uint length, imagetype type) *buff++= bits; length--; } - memcpy(buff, ptr, min(length, field_length)); + memcpy(buff, ptr, min(length, bytes_in_rec)); } @@ -8226,22 +8227,22 @@ void Field_bit::sql_type(String &res) const { CHARSET_INFO *cs= res.charset(); ulong length= cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(), - "bit(%d)", - (int) field_length * 8 + bit_len); + "bit(%d)", (int) field_length); res.length((uint) length); } char *Field_bit::pack(char *to, const char *from, uint max_length) { - uint length= min(field_length + (bit_len > 0), max_length); + DBUG_ASSERT(max_length); + uint length; if (bit_len) { uchar bits= get_rec_bits(bit_ptr, bit_ofs, bit_len); *to++= bits; - length--; } - memcpy(to, from, length); + length= min(bytes_in_rec, max_length - (bit_len > 0)); + memcpy(to, from, length); return to + length; } @@ -8253,8 +8254,8 @@ const char *Field_bit::unpack(char *to, const char *from) set_rec_bits(*from, bit_ptr, bit_ofs, bit_len); from++; } - memcpy(to, from, field_length); - return from + field_length; + memcpy(to, from, bytes_in_rec); + return from + bytes_in_rec; } @@ -8267,26 +8268,25 @@ Field_bit_as_char::Field_bit_as_char(char *ptr_arg, uint32 len_arg, enum utype unireg_check_arg, const char *field_name_arg) :Field_bit(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, 0, 0, - unireg_check_arg, field_name_arg), - create_length(len_arg) + unireg_check_arg, field_name_arg) { bit_len= 0; - field_length= ((len_arg + 7) & ~7) / 8; + bytes_in_rec= (len_arg + 7) / 8; } int Field_bit_as_char::store(const char *from, uint length, CHARSET_INFO *cs) { int delta; - uchar bits= create_length & 7; + uchar bits= field_length & 7; for (; length && !*from; from++, length--); // skip left 0's - delta= field_length - length; + delta= bytes_in_rec - length; if (delta < 0 || (delta == 0 && bits && (uint) (uchar) *from >= (uint) (1 << bits))) { - memset(ptr, 0xff, field_length); + memset(ptr, 0xff, bytes_in_rec); if (bits) *ptr&= ((1 << bits) - 1); /* set first byte */ if (table->in_use->really_abort_on_warning()) @@ -8305,7 +8305,7 @@ void Field_bit_as_char::sql_type(String &res) const { CHARSET_INFO *cs= res.charset(); ulong length= cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(), - "bit(%d)", (int) create_length); + "bit(%d)", (int) field_length); res.length((uint) length); } @@ -9033,11 +9033,6 @@ create_field::create_field(Field *old_field,Field *orig_field) geom_type= ((Field_geom*)old_field)->geom_type; break; #endif - case FIELD_TYPE_BIT: - length= (old_field->key_type() == HA_KEYTYPE_BIT) ? - ((Field_bit *) old_field)->bit_len + length * 8 : - ((Field_bit_as_char *) old_field)->create_length; - break; default: break; } diff --git a/sql/field.h b/sql/field.h index 936babdd26ac89386d1fa36641bff2af7049137a..b473100eaabf23d40f736d99db9b0e9623c155dd 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1346,16 +1346,17 @@ public: uchar *bit_ptr; // position in record where 'uneven' bits store uchar bit_ofs; // offset to 'uneven' high bits uint bit_len; // number of 'uneven' high bits + uint bytes_in_rec; Field_bit(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar *bit_ptr_arg, uchar bit_ofs_arg, enum utype unireg_check_arg, const char *field_name_arg); enum_field_types type() const { return FIELD_TYPE_BIT; } enum ha_base_keytype key_type() const { return HA_KEYTYPE_BIT; } - uint32 key_length() const { return (uint32) field_length + (bit_len > 0); } - uint32 max_length() { return (uint32) field_length * 8 + bit_len; } + uint32 key_length() const { return (uint32) (field_length + 7) / 8; } + uint32 max_length() { return field_length; } uint size_of() const { return sizeof(*this); } Item_result result_type () const { return INT_RESULT; } - void reset(void) { bzero(ptr, field_length); } + void reset(void) { bzero(ptr, bytes_in_rec); } int store(const char *to, uint length, CHARSET_INFO *charset); int store(double nr); int store(longlong nr, bool unsigned_val); @@ -1378,9 +1379,8 @@ public: { Field_bit::store(buff, length, &my_charset_bin); } void sort_string(char *buff, uint length) { get_key_image(buff, length, itRAW); } - uint32 pack_length() const - { return (uint32) field_length + (bit_len > 0); } - uint32 pack_length_in_rec() const { return field_length; } + uint32 pack_length() const { return (uint32) (field_length + 7) / 8; } + uint32 pack_length_in_rec() const { return bytes_in_rec; } void sql_type(String &str) const; char *pack(char *to, const char *from, uint max_length=~(uint) 0); const char *unpack(char* to, const char *from); @@ -1402,12 +1402,10 @@ public: class Field_bit_as_char: public Field_bit { public: - uchar create_length; Field_bit_as_char(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg); enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; } - uint32 max_length() { return (uint32) create_length; } uint size_of() const { return sizeof(*this); } int store(const char *to, uint length, CHARSET_INFO *charset); int store(double nr) { return Field_bit::store(nr); } diff --git a/sql/ha_archive.cc b/sql/ha_archive.cc index 403855b6a01ea946dd0ada8e70e7a8c73765691e..942faaae51753b4c734e90acd55ce5d258504353 100644 --- a/sql/ha_archive.cc +++ b/sql/ha_archive.cc @@ -63,8 +63,7 @@ pool. For MyISAM its a question of how much the file system caches the MyISAM file. With enough free memory MyISAM is faster. Its only when the OS doesn't have enough memory to cache entire table that archive turns out - to be any faster. For writes it is always a bit slower then MyISAM. It has no - internal limits though for row length. + to be any faster. Examples between MyISAM (packed) and Archive. @@ -81,11 +80,8 @@ TODO: Add bzip optional support. Allow users to set compression level. - Add truncate table command. Implement versioning, should be easy. Allow for errors, find a way to mark bad rows. - Talk to the azip guys, come up with a writable format so that updates are doable - without switching to a block method. Add optional feature so that rows can be flushed at interval (which will cause less compression but may speed up ordered searches). Checkpoint the meta file to allow for faster rebuilds. @@ -126,10 +122,12 @@ static HASH archive_open_tables; #define ARN ".ARN" // Files used during an optimize call #define ARM ".ARM" // Meta file /* - uchar + uchar + ulonglong + ulonglong + ulonglong + ulonglong + uchar + uchar + uchar + ulonglong + ulonglong + ulonglong + ulonglong + FN_REFLEN + + uchar */ #define META_BUFFER_SIZE sizeof(uchar) + sizeof(uchar) + sizeof(ulonglong) \ - + sizeof(ulonglong) + sizeof(ulonglong) + sizeof(ulonglong) + sizeof(uchar) + + sizeof(ulonglong) + sizeof(ulonglong) + sizeof(ulonglong) + FN_REFLEN \ + + sizeof(uchar) /* uchar + uchar @@ -317,7 +315,8 @@ error: */ int ha_archive::read_meta_file(File meta_file, ha_rows *rows, ulonglong *auto_increment, - ulonglong *forced_flushes) + ulonglong *forced_flushes, + char *real_path) { uchar meta_buffer[META_BUFFER_SIZE]; uchar *ptr= meta_buffer; @@ -342,6 +341,8 @@ int ha_archive::read_meta_file(File meta_file, ha_rows *rows, ptr+= sizeof(ulonglong); // Move past auto_increment *forced_flushes= uint8korr(ptr); ptr+= sizeof(ulonglong); // Move past forced_flush + memmove(real_path, ptr, FN_REFLEN); + ptr+= FN_REFLEN; // Move past the possible location of the file DBUG_PRINT("ha_archive::read_meta_file", ("Check %d", (uint)meta_buffer[0])); DBUG_PRINT("ha_archive::read_meta_file", ("Version %d", (uint)meta_buffer[1])); @@ -349,6 +350,7 @@ int ha_archive::read_meta_file(File meta_file, ha_rows *rows, DBUG_PRINT("ha_archive::read_meta_file", ("Checkpoint %llu", check_point)); DBUG_PRINT("ha_archive::read_meta_file", ("Auto-Increment %llu", *auto_increment)); DBUG_PRINT("ha_archive::read_meta_file", ("Forced Flushes %llu", *forced_flushes)); + DBUG_PRINT("ha_archive::read_meta_file", ("Real Path %s", real_path)); DBUG_PRINT("ha_archive::read_meta_file", ("Dirty %d", (int)(*ptr))); if ((meta_buffer[0] != (uchar)ARCHIVE_CHECK_HEADER) || @@ -368,6 +370,7 @@ int ha_archive::read_meta_file(File meta_file, ha_rows *rows, int ha_archive::write_meta_file(File meta_file, ha_rows rows, ulonglong auto_increment, ulonglong forced_flushes, + char *real_path, bool dirty) { uchar meta_buffer[META_BUFFER_SIZE]; @@ -388,6 +391,12 @@ int ha_archive::write_meta_file(File meta_file, ha_rows rows, ptr += sizeof(ulonglong); int8store(ptr, forced_flushes); ptr += sizeof(ulonglong); + // No matter what, we pad with nulls + if (real_path) + strncpy((char *)ptr, real_path, FN_REFLEN); + else + bzero(ptr, FN_REFLEN); + ptr += FN_REFLEN; *ptr= (uchar)dirty; DBUG_PRINT("ha_archive::write_meta_file", ("Check %d", (uint)ARCHIVE_CHECK_HEADER)); @@ -399,6 +408,8 @@ int ha_archive::write_meta_file(File meta_file, ha_rows rows, auto_increment)); DBUG_PRINT("ha_archive::write_meta_file", ("Forced Flushes %llu", forced_flushes)); + DBUG_PRINT("ha_archive::write_meta_file", ("Real path %s", + real_path)); DBUG_PRINT("ha_archive::write_meta_file", ("Dirty %d", (uint)dirty)); VOID(my_seek(meta_file, 0, MY_SEEK_SET, MYF(0))); @@ -448,8 +459,12 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, share->table_name_length= length; share->table_name= tmp_name; share->crashed= FALSE; - fn_format(share->data_file_name,table_name,"",ARZ,MY_REPLACE_EXT|MY_UNPACK_FILENAME); - fn_format(meta_file_name,table_name,"",ARM,MY_REPLACE_EXT|MY_UNPACK_FILENAME); + fn_format(share->data_file_name, table_name, "", + ARZ,MY_REPLACE_EXT|MY_UNPACK_FILENAME); + fn_format(meta_file_name, table_name, "", ARM, + MY_REPLACE_EXT|MY_UNPACK_FILENAME); + DBUG_PRINT("info", ("archive opening (1) up write at %s", + share->data_file_name)); strmov(share->table_name,table_name); /* We will use this lock for rows. @@ -457,6 +472,8 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, VOID(pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST)); if ((share->meta_file= my_open(meta_file_name, O_RDWR, MYF(0))) == -1) share->crashed= TRUE; + DBUG_PRINT("info", ("archive opening (1) up write at %s", + share->data_file_name)); /* After we read, we set the file to dirty. When we close, we will do the @@ -465,13 +482,21 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, */ if (read_meta_file(share->meta_file, &share->rows_recorded, &share->auto_increment_value, - &share->forced_flushes)) + &share->forced_flushes, + share->real_path)) share->crashed= TRUE; else (void)write_meta_file(share->meta_file, share->rows_recorded, share->auto_increment_value, share->forced_flushes, + share->real_path, TRUE); + /* + Since we now possibly no real_path, we will use it instead if it exists. + */ + if (*share->real_path) + fn_format(share->data_file_name, share->real_path, "", ARZ, + MY_REPLACE_EXT|MY_UNPACK_FILENAME); /* It is expensive to open and close the data files and since you can't have a gzip file that can be both read and written we keep a writer open @@ -527,6 +552,7 @@ int ha_archive::free_share(ARCHIVE_SHARE *share) (void)write_meta_file(share->meta_file, share->rows_recorded, share->auto_increment_value, share->forced_flushes, + share->real_path, share->crashed ? TRUE :FALSE); if (azclose(&(share->archive_write))) rc= 1; @@ -566,7 +592,7 @@ int ha_archive::open(const char *name, int mode, uint open_options) int rc= 0; DBUG_ENTER("ha_archive::open"); - DBUG_PRINT("info", ("archive table was opened for crash %s", + DBUG_PRINT("info", ("archive table was opened for crash: %s", (open_options & HA_OPEN_FOR_REPAIR) ? "yes" : "no")); share= get_share(name, table, &rc); @@ -582,6 +608,7 @@ int ha_archive::open(const char *name, int mode, uint open_options) thr_lock_data_init(&share->lock,&lock,NULL); + DBUG_PRINT("info", ("archive data_file_name %s", share->data_file_name)); if (!(azopen(&archive, share->data_file_name, O_RDONLY|O_BINARY))) { if (errno == EROFS || errno == EACCES) @@ -679,18 +706,40 @@ int ha_archive::create(const char *name, TABLE *table_arg, } } - write_meta_file(create_file, 0, auto_increment_value, 0, FALSE); + write_meta_file(create_file, 0, auto_increment_value, 0, + (char *)create_info->data_file_name, + FALSE); my_close(create_file,MYF(0)); /* We reuse name_buff since it is available. */ - if ((create_file= my_create(fn_format(name_buff,name,"",ARZ, - MY_REPLACE_EXT|MY_UNPACK_FILENAME),0, - O_RDWR | O_TRUNC,MYF(MY_WME))) < 0) + if (create_info->data_file_name) { - error= my_errno; - goto error; + char linkname[FN_REFLEN]; + DBUG_PRINT("info", ("archive will create stream file %s", + create_info->data_file_name)); + + fn_format(name_buff, create_info->data_file_name, "", ARZ, + MY_REPLACE_EXT|MY_UNPACK_FILENAME); + fn_format(linkname, name, "", ARZ, + MY_UNPACK_FILENAME | MY_APPEND_EXT); + if ((create_file= my_create_with_symlink(linkname, name_buff, 0, + O_RDWR | O_TRUNC,MYF(MY_WME))) < 0) + { + error= my_errno; + goto error; + } + } + else + { + if ((create_file= my_create(fn_format(name_buff, name,"", ARZ, + MY_REPLACE_EXT|MY_UNPACK_FILENAME),0, + O_RDWR | O_TRUNC,MYF(MY_WME))) < 0) + { + error= my_errno; + goto error; + } } if (!azdopen(&archive, create_file, O_WRONLY|O_BINARY)) { @@ -1348,8 +1397,10 @@ void ha_archive::update_create_info(HA_CREATE_INFO *create_info) ha_archive::info(HA_STATUS_AUTO | HA_STATUS_CONST); if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) { - create_info->auto_increment_value=auto_increment_value; + create_info->auto_increment_value= auto_increment_value; } + if (*share->real_path) + create_info->data_file_name= share->real_path; } diff --git a/sql/ha_archive.h b/sql/ha_archive.h index 9b351b7e8da179d5ec9a9bcbd05d8a36d44a700c..c3f4e82d99761a47f85581e73a0e954b7e44e540 100644 --- a/sql/ha_archive.h +++ b/sql/ha_archive.h @@ -41,6 +41,7 @@ typedef struct st_archive_share { ulonglong auto_increment_value; ulonglong forced_flushes; ulonglong mean_rec_length; + char real_path[FN_REFLEN]; } ARCHIVE_SHARE; /* @@ -102,10 +103,12 @@ public: int get_row(azio_stream *file_to_read, byte *buf); int read_meta_file(File meta_file, ha_rows *rows, ulonglong *auto_increment, - ulonglong *forced_flushes); + ulonglong *forced_flushes, + char *real_path); int write_meta_file(File meta_file, ha_rows rows, ulonglong auto_increment, ulonglong forced_flushes, + char *real_path, bool dirty); ARCHIVE_SHARE *get_share(const char *table_name, TABLE *table, int *rc); int free_share(ARCHIVE_SHARE *share); diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index a4193e4eb339d2c875ebe0c5c860915bdb7575e9..587eabb82d2d3e00cd198527e83629b038da7518 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -556,6 +556,14 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans) ERR_PRINT(err); switch (err.classification) { case NdbError::SchemaError: + { + /* Close other open handlers not used by any thread */ + TABLE_LIST table_list; + bzero((char*) &table_list,sizeof(table_list)); + table_list.db= m_dbname; + table_list.alias= table_list.table_name= m_tabname; + close_cached_tables(current_thd, 0, &table_list); + invalidate_dictionary_cache(TRUE); if (err.code==284) @@ -576,6 +584,7 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans) DBUG_PRINT("info", ("Table exists but must have changed")); } break; + } default: break; } @@ -4411,7 +4420,7 @@ static int create_ndb_column(NDBCOL &col, break; case MYSQL_TYPE_BIT: { - int no_of_bits= field->field_length*8 + ((Field_bit *) field)->bit_len; + int no_of_bits= field->field_length; col.setType(NDBCOL::Bit); if (!no_of_bits) col.setLength(1); @@ -4480,6 +4489,21 @@ int ha_ndbcluster::create(const char *name, DBUG_RETURN(my_errno); } +#ifdef HAVE_NDB_BINLOG + /* + Don't allow table creation unless + schema distribution table is setup + ( unless it is a creation of the schema dist table itself ) + */ + if (!schema_share && + !(strcmp(m_dbname, NDB_REP_DB) == 0 && + strcmp(m_tabname, NDB_SCHEMA_TABLE) == 0)) + { + DBUG_PRINT("info", ("Schema distribution table not setup")); + DBUG_RETURN(HA_ERR_NO_CONNECTION); + } +#endif /* HAVE_NDB_BINLOG */ + DBUG_PRINT("table", ("name: %s", m_tabname)); tab.setName(m_tabname); tab.setLogging(!(info->options & HA_LEX_CREATE_TMP_TABLE)); @@ -4687,8 +4711,9 @@ int ha_ndbcluster::create(const char *name, DBUG_RETURN(my_errno); } -int ha_ndbcluster::create_handler_files(const char *file) +int ha_ndbcluster::create_handler_files(const char *file, HA_CREATE_INFO *info) { + char path[FN_REFLEN]; const char *name; Ndb* ndb; const NDBTAB *tab; @@ -4698,16 +4723,21 @@ int ha_ndbcluster::create_handler_files(const char *file) DBUG_ENTER("create_handler_files"); + DBUG_PRINT("enter", ("file: %s", file)); if (!(ndb= get_ndb())) DBUG_RETURN(HA_ERR_NO_CONNECTION); NDBDICT *dict= ndb->getDictionary(); - if (!(tab= dict->getTable(m_tabname))) + if (!info->frm_only) DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create + set_dbname(file); + set_tabname(file); + DBUG_PRINT("info", ("m_dbname: %s, m_tabname: %s", m_dbname, m_tabname)); + if (!(tab= dict->getTable(m_tabname))) + DBUG_RETURN(0); // Unkown table, must be temporary table + DBUG_ASSERT(get_ndb_share_state(m_share) == NSS_ALTERED); - name= table->s->normalized_path.str; - DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name)); - if (readfrm(name, &data, &length) || + if (readfrm(file, &data, &length) || packfrm(data, length, &pack_data, &pack_length)) { DBUG_PRINT("info", ("Missing frm for %s", m_tabname)); @@ -4723,6 +4753,7 @@ int ha_ndbcluster::create_handler_files(const char *file) my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR)); my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR)); } + set_ndb_share_state(m_share, NSS_INITIAL); free_share(&m_share); // Decrease ref_count @@ -4829,6 +4860,15 @@ int ha_ndbcluster::create_ndb_index(const char *name, DBUG_RETURN(0); } +/* + Prepare for an on-line alter table +*/ +void ha_ndbcluster::prepare_for_alter() +{ + ndbcluster_get_share(m_share); // Increase ref_count + set_ndb_share_state(m_share, NSS_ALTERED); +} + /* Add an index on-line to a table */ @@ -4841,7 +4881,7 @@ int ha_ndbcluster::add_index(TABLE *table_arg, int error= 0; uint idx; - DBUG_ASSERT(m_share->state == NSS_INITIAL); + DBUG_ASSERT(m_share->state == NSS_ALTERED); for (idx= 0; idx < num_of_keys; idx++) { KEY *key= key_info + idx; @@ -4857,10 +4897,10 @@ int ha_ndbcluster::add_index(TABLE *table_arg, if((error= create_index(key_info[idx].name, key, idx_type, idx))) break; } - if (!error) + if (error) { - ndbcluster_get_share(m_share); // Increase ref_count - set_ndb_share_state(m_share, NSS_ALTERED); + set_ndb_share_state(m_share, NSS_INITIAL); + free_share(&m_share); // Decrease ref_count } DBUG_RETURN(error); } @@ -4885,7 +4925,7 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys) { DBUG_ENTER("ha_ndbcluster::prepare_drop_index"); - DBUG_ASSERT(m_share->state == NSS_INITIAL); + DBUG_ASSERT(m_share->state == NSS_ALTERED); // Mark indexes for deletion uint idx; for (idx= 0; idx < num_of_keys; idx++) @@ -4898,8 +4938,6 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, Thd_ndb *thd_ndb= get_thd_ndb(thd); Ndb *ndb= thd_ndb->ndb; renumber_indexes(ndb, table_arg); - ndbcluster_get_share(m_share); // Increase ref_count - set_ndb_share_state(m_share, NSS_ALTERED); DBUG_RETURN(0); } @@ -5004,7 +5042,8 @@ int ha_ndbcluster::rename_table(const char *from, const char *to) is_old_table_tmpfile= 0; String event_name(INJECTOR_EVENT_LEN); ndb_rep_event_name(&event_name, from + sizeof(share_prefix) - 1, 0); - ndbcluster_handle_drop_table(ndb, event_name.c_ptr(), share); + ndbcluster_handle_drop_table(ndb, event_name.c_ptr(), share, + "rename table"); } if (!result && !IS_TMP_PREFIX(new_tabname)) @@ -5088,6 +5127,15 @@ ha_ndbcluster::delete_table(ha_ndbcluster *h, Ndb *ndb, DBUG_ENTER("ha_ndbcluster::ndbcluster_delete_table"); NDBDICT *dict= ndb->getDictionary(); #ifdef HAVE_NDB_BINLOG + /* + Don't allow drop table unless + schema distribution table is setup + */ + if (!schema_share) + { + DBUG_PRINT("info", ("Schema distribution table not setup")); + DBUG_RETURN(HA_ERR_NO_CONNECTION); + } NDB_SHARE *share= get_share(path, 0, false); #endif @@ -5156,7 +5204,7 @@ ha_ndbcluster::delete_table(ha_ndbcluster *h, Ndb *ndb, ndb_rep_event_name(&event_name, path + sizeof(share_prefix) - 1, 0); ndbcluster_handle_drop_table(ndb, table_dropped ? event_name.c_ptr() : 0, - share); + share, "delete table"); } if (share) @@ -5185,6 +5233,18 @@ int ha_ndbcluster::delete_table(const char *name) set_dbname(name); set_tabname(name); +#ifdef HAVE_NDB_BINLOG + /* + Don't allow drop table unless + schema distribution table is setup + */ + if (!schema_share) + { + DBUG_PRINT("info", ("Schema distribution table not setup")); + DBUG_RETURN(HA_ERR_NO_CONNECTION); + } +#endif + if (check_ndb_connection()) DBUG_RETURN(HA_ERR_NO_CONNECTION); @@ -5406,6 +5466,11 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked) if (!res) info(HA_STATUS_VARIABLE | HA_STATUS_CONST); +#ifdef HAVE_NDB_BINLOG + if (!ndb_binlog_tables_inited && ndb_binlog_running) + table->db_stat|= HA_READ_ONLY; +#endif + DBUG_RETURN(res); } @@ -5704,6 +5769,19 @@ int ndbcluster_drop_database_impl(const char *path) static void ndbcluster_drop_database(char *path) { + DBUG_ENTER("ndbcluster_drop_database"); +#ifdef HAVE_NDB_BINLOG + /* + Don't allow drop database unless + schema distribution table is setup + */ + if (!schema_share) + { + DBUG_PRINT("info", ("Schema distribution table not setup")); + DBUG_VOID_RETURN; + //DBUG_RETURN(HA_ERR_NO_CONNECTION); + } +#endif ndbcluster_drop_database_impl(path); #ifdef HAVE_NDB_BINLOG char db[FN_REFLEN]; @@ -5712,6 +5790,7 @@ static void ndbcluster_drop_database(char *path) current_thd->query, current_thd->query_length, db, "", 0, 0, SOT_DROP_DB); #endif + DBUG_VOID_RETURN; } /* find all tables in ndb and discover those needed @@ -5733,36 +5812,37 @@ int ndbcluster_find_all_files(THD *thd) DBUG_ENTER("ndbcluster_find_all_files"); Ndb* ndb; char key[FN_REFLEN]; - NdbDictionary::Dictionary::List list; if (!(ndb= check_ndb_in_thd(thd))) DBUG_RETURN(HA_ERR_NO_CONNECTION); NDBDICT *dict= ndb->getDictionary(); - int unhandled, retries= 5; + int unhandled, retries= 5, skipped; do { + NdbDictionary::Dictionary::List list; if (dict->listObjects(list, NdbDictionary::Object::UserTable) != 0) ERR_RETURN(dict->getNdbError()); unhandled= 0; + skipped= 0; + retries--; for (uint i= 0 ; i < list.count ; i++) { NDBDICT::List::Element& elmt= list.elements[i]; - int do_handle_table= 0; if (IS_TMP_PREFIX(elmt.name) || IS_NDB_BLOB_PREFIX(elmt.name)) { DBUG_PRINT("info", ("Skipping %s.%s in NDB", elmt.database, elmt.name)); continue; } DBUG_PRINT("info", ("Found %s.%s in NDB", elmt.database, elmt.name)); - if (elmt.state == NDBOBJ::StateOnline || - elmt.state == NDBOBJ::StateBackup) - do_handle_table= 1; - else if (!(elmt.state == NDBOBJ::StateBuilding)) + if (elmt.state != NDBOBJ::StateOnline && + elmt.state != NDBOBJ::StateBackup && + elmt.state != NDBOBJ::StateBuilding) { sql_print_information("NDB: skipping setup table %s.%s, in state %d", elmt.database, elmt.name, elmt.state); + skipped++; continue; } @@ -5771,7 +5851,7 @@ int ndbcluster_find_all_files(THD *thd) if (!(ndbtab= dict->getTable(elmt.name))) { - if (do_handle_table) + if (retries == 0) sql_print_error("NDB: failed to setup table %s.%s, error: %d, %s", elmt.database, elmt.name, dict->getNdbError().code, @@ -5840,9 +5920,9 @@ int ndbcluster_find_all_files(THD *thd) pthread_mutex_unlock(&LOCK_open); } } - while (unhandled && retries--); + while (unhandled && retries); - DBUG_RETURN(0); + DBUG_RETURN(-(skipped + unhandled)); } int ndbcluster_find_files(THD *thd,const char *db,const char *path, @@ -7706,6 +7786,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) pthread_cond_wait(&COND_server_started, &LOCK_server_started); pthread_mutex_unlock(&LOCK_server_started); + ndbcluster_util_inited= 1; + /* Wait for cluster to start */ @@ -7737,6 +7819,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) } #ifdef HAVE_NDB_BINLOG + if (ndb_extra_logging && ndb_binlog_running) + sql_print_information("NDB Binlog: Ndb tables initially read only."); /* create tables needed by the replication */ ndbcluster_setup_binlog_table_shares(thd); #else @@ -7746,17 +7830,9 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ndbcluster_find_all_files(thd); #endif - ndbcluster_util_inited= 1; - -#ifdef HAVE_NDB_BINLOG - /* Signal injector thread that all is setup */ - pthread_cond_signal(&injector_cond); -#endif - set_timespec(abstime, 0); for (;!abort_loop;) { - pthread_mutex_lock(&LOCK_ndb_util_thread); pthread_cond_timedwait(&COND_ndb_util_thread, &LOCK_ndb_util_thread, @@ -7774,7 +7850,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) Check that the apply_status_share and schema_share has been created. If not try to create it */ - if (!apply_status_share || !schema_share) + if (!ndb_binlog_tables_inited) ndbcluster_setup_binlog_table_shares(thd); #endif @@ -10029,14 +10105,15 @@ static int ndbcluster_fill_files_table(THD *thd, TABLE_LIST *tables, COND *cond) } } - dict->listObjects(dflist, NdbDictionary::Object::Undofile); + NdbDictionary::Dictionary::List uflist; + dict->listObjects(uflist, NdbDictionary::Object::Undofile); ndberr= dict->getNdbError(); if (ndberr.classification != NdbError::NoError) ERR_RETURN(ndberr); - for (i= 0; i < dflist.count; i++) + for (i= 0; i < uflist.count; i++) { - NdbDictionary::Dictionary::List::Element& elt= dflist.elements[i]; + NdbDictionary::Dictionary::List::Element& elt= uflist.elements[i]; Ndb_cluster_connection_node_iter iter; unsigned id; diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 7dfec18fcb642c670525e7ebf799119fa2261c9a..b375e30338f7c110913c3bfab061bbdaab244fef 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -595,6 +595,7 @@ class ha_ndbcluster: public handler const char * table_type() const; const char ** bas_ext() const; ulong table_flags(void) const; + void prepare_for_alter(); int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys); int prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys); int final_drop_index(TABLE *table_arg); @@ -609,7 +610,7 @@ class ha_ndbcluster: public handler int rename_table(const char *from, const char *to); int delete_table(const char *name); int create(const char *name, TABLE *form, HA_CREATE_INFO *info); - int create_handler_files(const char *file); + int create_handler_files(const char *file, HA_CREATE_INFO *info); int get_default_no_partitions(ulonglong max_rows); bool get_no_parts(const char *name, uint *no_parts); void set_auto_partitions(partition_info *part_info); diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc index 60ccb6617031a64460e1d4d44740ddab9f7a25a8..ec5b5858f5c858b235e9abc5e21df408aea2c969 100644 --- a/sql/ha_ndbcluster_binlog.cc +++ b/sql/ha_ndbcluster_binlog.cc @@ -48,6 +48,7 @@ int ndb_binlog_thread_running= 0; FALSE if not */ my_bool ndb_binlog_running= FALSE; +my_bool ndb_binlog_tables_inited= FALSE; /* Global reference to the ndb injector thread THD oject @@ -775,32 +776,50 @@ static int ndbcluster_create_schema_table(THD *thd) DBUG_RETURN(0); } -void ndbcluster_setup_binlog_table_shares(THD *thd) +int ndbcluster_setup_binlog_table_shares(THD *thd) { - int done_find_all_files= 0; if (!schema_share && ndbcluster_check_schema_share() == 0) { - if (!done_find_all_files) + pthread_mutex_lock(&LOCK_open); + ndb_create_table_from_engine(thd, NDB_REP_DB, NDB_SCHEMA_TABLE); + pthread_mutex_unlock(&LOCK_open); + if (!schema_share) { - ndbcluster_find_all_files(thd); - done_find_all_files= 1; + ndbcluster_create_schema_table(thd); + // always make sure we create the 'schema' first + if (!schema_share) + return 1; } - ndbcluster_create_schema_table(thd); - // always make sure we create the 'schema' first - if (!schema_share) - return; } if (!apply_status_share && ndbcluster_check_apply_status_share() == 0) { - if (!done_find_all_files) + pthread_mutex_lock(&LOCK_open); + ndb_create_table_from_engine(thd, NDB_REP_DB, NDB_APPLY_TABLE); + pthread_mutex_unlock(&LOCK_open); + if (!apply_status_share) { - ndbcluster_find_all_files(thd); - done_find_all_files= 1; + ndbcluster_create_apply_status_table(thd); + if (!apply_status_share) + return 1; } - ndbcluster_create_apply_status_table(thd); } + if (!ndbcluster_find_all_files(thd)) + { + pthread_mutex_lock(&LOCK_open); + ndb_binlog_tables_inited= TRUE; + if (ndb_binlog_running) + { + if (ndb_extra_logging) + sql_print_information("NDB Binlog: ndb tables writable"); + close_cached_tables((THD*) 0, 0, (TABLE_LIST*) 0, TRUE); + } + pthread_mutex_unlock(&LOCK_open); + /* Signal injector thread that all is setup */ + pthread_cond_signal(&injector_cond); + } + return 0; } /* @@ -936,6 +955,31 @@ static char *ndb_pack_varchar(const NDBCOL *col, char *buf, /* log query in schema table */ +static void ndb_report_waiting(const char *key, + int the_time, + const char *op, + const char *obj) +{ + ulonglong ndb_latest_epoch= 0; + const char *proc_info= "<no info>"; + pthread_mutex_lock(&injector_mutex); + if (injector_ndb) + ndb_latest_epoch= injector_ndb->getLatestGCI(); + if (injector_thd) + proc_info= injector_thd->proc_info; + pthread_mutex_unlock(&injector_mutex); + sql_print_information("NDB %s:" + " waiting max %u sec for %s %s." + " epochs: (%u,%u,%u)" + " injector proc_info: %s" + ,key, the_time, op, obj + ,(uint)ndb_latest_handled_binlog_epoch + ,(uint)ndb_latest_received_binlog_epoch + ,(uint)ndb_latest_epoch + ,proc_info + ); +} + int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share, const char *query, int query_length, const char *db, const char *table_name, @@ -965,6 +1009,7 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share, } char tmp_buf2[FN_REFLEN]; + const char *type_str; switch (type) { case SOT_DROP_TABLE: @@ -975,6 +1020,7 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share, query= tmp_buf2; query_length= (uint) (strxmov(tmp_buf2, "drop table `", table_name, "`", NullS) - tmp_buf2); + type_str= "drop table"; break; case SOT_RENAME_TABLE: /* redo the rename table query as is may contain several tables */ @@ -982,20 +1028,28 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share, query_length= (uint) (strxmov(tmp_buf2, "rename table `", old_db, ".", old_table_name, "` to `", db, ".", table_name, "`", NullS) - tmp_buf2); + type_str= "rename table"; break; case SOT_CREATE_TABLE: - // fall through + type_str= "create table"; + break; case SOT_ALTER_TABLE: + type_str= "create table"; break; case SOT_DROP_DB: + type_str= "drop db"; break; case SOT_CREATE_DB: + type_str= "create db"; break; case SOT_ALTER_DB: + type_str= "alter db"; break; case SOT_TABLESPACE: + type_str= "tablespace"; break; case SOT_LOGFILE_GROUP: + type_str= "logfile group"; break; default: abort(); /* should not happen, programming error */ @@ -1174,9 +1228,9 @@ end: struct timespec abstime; int i; set_timespec(abstime, 1); - (void) pthread_cond_timedwait(&injector_cond, - &ndb_schema_object->mutex, - &abstime); + int ret= pthread_cond_timedwait(&injector_cond, + &ndb_schema_object->mutex, + &abstime); (void) pthread_mutex_lock(&schema_share->mutex); for (i= 0; i < ndb_number_of_storage_nodes; i++) @@ -1198,16 +1252,19 @@ end: if (bitmap_is_clear_all(&ndb_schema_object->slock_bitmap)) break; - max_timeout--; - if (max_timeout == 0) + if (ret) { - sql_print_error("NDB create table: timed out. Ignoring..."); - break; + max_timeout--; + if (max_timeout == 0) + { + sql_print_error("NDB %s: distributing %s timed out. Ignoring...", + type_str, ndb_schema_object->key); + break; + } + if (ndb_extra_logging) + ndb_report_waiting(type_str, max_timeout, + "distributing", ndb_schema_object->key); } - if (ndb_extra_logging) - sql_print_information("NDB create table: " - "waiting max %u sec for create table %s.", - max_timeout, ndb_schema_object->key); } (void) pthread_mutex_unlock(&ndb_schema_object->mutex); } @@ -1373,6 +1430,10 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp, NDB_SHARE *share) { DBUG_ENTER("ndb_handle_schema_change"); + TABLE* table= share->table; + TABLE_SHARE *table_share= table->s; + const char *dbname= table_share->db.str; + const char *tabname= table_share->table_name.str; bool do_close_cached_tables= FALSE; bool is_online_alter_table= FALSE; bool is_rename_table= FALSE; @@ -1392,70 +1453,68 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp, } } - if (is_remote_change) /* includes CLUSTER_FAILURE */ + /* + Refresh local dictionary cache by + invalidating table and all it's indexes + */ + ndb->setDatabaseName(dbname); + Thd_ndb *thd_ndb= get_thd_ndb(thd); + DBUG_ASSERT(thd_ndb != NULL); + Ndb* old_ndb= thd_ndb->ndb; + thd_ndb->ndb= ndb; + ha_ndbcluster table_handler(table_share); + (void)strxmov(table_handler.m_dbname, dbname, NullS); + (void)strxmov(table_handler.m_tabname, tabname, NullS); + table_handler.open_indexes(ndb, table, TRUE); + table_handler.invalidate_dictionary_cache(TRUE); + thd_ndb->ndb= old_ndb; + + /* + Refresh local frm file and dictionary cache if + remote on-line alter table + */ + if (is_remote_change && is_online_alter_table) { - TABLE* table= share->table; - TABLE_SHARE *table_share= table->s; - const char *dbname= table_share->db.str; + const char *tabname= table_share->table_name.str; + char key[FN_REFLEN]; + const void *data= 0, *pack_data= 0; + uint length, pack_length; + int error; + NDBDICT *dict= ndb->getDictionary(); + const NDBTAB *altered_table= pOp->getTable(); - /* - Invalidate table and all it's indexes + DBUG_PRINT("info", ("Detected frm change of table %s.%s", + dbname, tabname)); + build_table_filename(key, FN_LEN-1, dbname, tabname, NullS); + /* + If the frm of the altered table is different than the one on + disk then overwrite it with the new table definition */ - ndb->setDatabaseName(dbname); - Thd_ndb *thd_ndb= get_thd_ndb(thd); - DBUG_ASSERT(thd_ndb != NULL); - Ndb* old_ndb= thd_ndb->ndb; - thd_ndb->ndb= ndb; - ha_ndbcluster table_handler(table_share); - table_handler.set_dbname(share->key); - table_handler.set_tabname(share->key); - table_handler.open_indexes(ndb, table, TRUE); - table_handler.invalidate_dictionary_cache(TRUE); - thd_ndb->ndb= old_ndb; - - if (is_online_alter_table) - { - const char *tabname= table_share->table_name.str; - char key[FN_REFLEN]; - const void *data= 0, *pack_data= 0; - uint length, pack_length; - int error; - NDBDICT *dict= ndb->getDictionary(); - const NDBTAB *altered_table= pOp->getTable(); - - DBUG_PRINT("info", ("Detected frm change of table %s.%s", - dbname, tabname)); - build_table_filename(key, FN_LEN-1, dbname, tabname, NullS); - /* - If the frm of the altered table is different than the one on - disk then overwrite it with the new table definition - */ - if (readfrm(key, &data, &length) == 0 && - packfrm(data, length, &pack_data, &pack_length) == 0 && - cmp_frm(altered_table, pack_data, pack_length)) + if (readfrm(key, &data, &length) == 0 && + packfrm(data, length, &pack_data, &pack_length) == 0 && + cmp_frm(altered_table, pack_data, pack_length)) + { + DBUG_DUMP("frm", (char*)altered_table->getFrmData(), + altered_table->getFrmLength()); + pthread_mutex_lock(&LOCK_open); + const NDBTAB *old= dict->getTable(tabname); + if (!old && + old->getObjectVersion() != altered_table->getObjectVersion()) + dict->putTable(altered_table); + + if ((error= unpackfrm(&data, &length, altered_table->getFrmData())) || + (error= writefrm(key, data, length))) { - DBUG_DUMP("frm", (char*)altered_table->getFrmData(), - altered_table->getFrmLength()); - pthread_mutex_lock(&LOCK_open); - const NDBTAB *old= dict->getTable(tabname); - if (!old && - old->getObjectVersion() != altered_table->getObjectVersion()) - dict->putTable(altered_table); - - if ((error= unpackfrm(&data, &length, altered_table->getFrmData())) || - (error= writefrm(key, data, length))) - { - sql_print_information("NDB: Failed write frm for %s.%s, error %d", - dbname, tabname, error); - } - ndbcluster_binlog_close_table(thd, share); - close_cached_tables((THD*) 0, 0, (TABLE_LIST*) 0, TRUE); - if ((error= ndbcluster_binlog_open_table(thd, share, - table_share, table))) - sql_print_information("NDB: Failed to re-open table %s.%s", - dbname, tabname); - pthread_mutex_unlock(&LOCK_open); + sql_print_information("NDB: Failed write frm for %s.%s, error %d", + dbname, tabname, error); } + ndbcluster_binlog_close_table(thd, share); + close_cached_tables((THD*) 0, 0, (TABLE_LIST*) 0, TRUE); + if ((error= ndbcluster_binlog_open_table(thd, share, + table_share, table))) + sql_print_information("NDB: Failed to re-open table %s.%s", + dbname, tabname); + pthread_mutex_unlock(&LOCK_open); } } @@ -1483,6 +1542,21 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp, share->table->s->db.length= strlen(share->db); share->table->s->table_name.str= share->table_name; share->table->s->table_name.length= strlen(share->table_name); + /* + Refresh local dictionary cache by invalidating any + old table with same name and all it's indexes + */ + ndb->setDatabaseName(dbname); + Thd_ndb *thd_ndb= get_thd_ndb(thd); + DBUG_ASSERT(thd_ndb != NULL); + Ndb* old_ndb= thd_ndb->ndb; + thd_ndb->ndb= ndb; + ha_ndbcluster table_handler(table_share); + table_handler.set_dbname(share->key); + table_handler.set_tabname(share->key); + table_handler.open_indexes(ndb, table, TRUE); + table_handler.invalidate_dictionary_cache(TRUE); + thd_ndb->ndb= old_ndb; } DBUG_ASSERT(share->op == pOp || share->op_old == pOp); if (share->op_old == pOp) @@ -1509,9 +1583,9 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp, share= 0; pOp->setCustomData(0); - + pthread_mutex_lock(&injector_mutex); - injector_ndb->dropEventOperation(pOp); + ndb->dropEventOperation(pOp); pOp= 0; pthread_mutex_unlock(&injector_mutex); @@ -1689,9 +1763,15 @@ ndb_binlog_thread_handle_schema_event(THD *thd, Ndb *ndb, // skip break; case NDBEVENT::TE_CLUSTER_FAILURE: + // fall through case NDBEVENT::TE_DROP: + if (ndb_extra_logging && + ndb_binlog_tables_inited && ndb_binlog_running) + sql_print_information("NDB Binlog: ndb tables initially " + "read only on reconnect."); free_share(&schema_share); schema_share= 0; + ndb_binlog_tables_inited= FALSE; // fall through case NDBEVENT::TE_ALTER: ndb_handle_schema_change(thd, ndb, pOp, tmp_share); @@ -2385,7 +2465,6 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, } if (!op) { - pthread_mutex_unlock(&injector_mutex); sql_print_error("NDB Binlog: Creating NdbEventOperation failed for" " %s",event_name); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, @@ -2393,6 +2472,7 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, ndb->getNdbError().code, ndb->getNdbError().message, "NDB"); + pthread_mutex_unlock(&injector_mutex); DBUG_RETURN(-1); } @@ -2494,9 +2574,15 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, get_share(share); if (do_apply_status_share) + { apply_status_share= get_share(share); + (void) pthread_cond_signal(&injector_cond); + } else if (do_schema_share) + { schema_share= get_share(share); + (void) pthread_cond_signal(&injector_cond); + } DBUG_PRINT("info",("%s share->op: 0x%lx, share->use_count: %u", share->key, share->op, share->use_count)); @@ -2513,7 +2599,7 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, */ int ndbcluster_handle_drop_table(Ndb *ndb, const char *event_name, - NDB_SHARE *share) + NDB_SHARE *share, const char *type_str) { DBUG_ENTER("ndbcluster_handle_drop_table"); @@ -2569,21 +2655,24 @@ ndbcluster_handle_drop_table(Ndb *ndb, const char *event_name, { struct timespec abstime; set_timespec(abstime, 1); - (void) pthread_cond_timedwait(&injector_cond, - &share->mutex, - &abstime); - max_timeout--; + int ret= pthread_cond_timedwait(&injector_cond, + &share->mutex, + &abstime); if (share->op == 0) break; - if (max_timeout == 0) + if (ret) { - sql_print_error("NDB delete table: timed out. Ignoring..."); - break; + max_timeout--; + if (max_timeout == 0) + { + sql_print_error("NDB %s: %s timed out. Ignoring...", + type_str, share->key); + break; + } + if (ndb_extra_logging) + ndb_report_waiting(type_str, max_timeout, + type_str, share->key); } - if (ndb_extra_logging) - sql_print_information("NDB delete table: " - "waiting max %u sec for drop table %s.", - max_timeout, share->key); } (void) pthread_mutex_unlock(&share->mutex); #else @@ -2646,7 +2735,8 @@ static int ndb_binlog_thread_handle_error(Ndb *ndb, NdbEventOperation *pOp, } static int -ndb_binlog_thread_handle_non_data_event(Ndb *ndb, NdbEventOperation *pOp, +ndb_binlog_thread_handle_non_data_event(THD *thd, Ndb *ndb, + NdbEventOperation *pOp, Binlog_index_row &row) { NDB_SHARE *share= (NDB_SHARE *)pOp->getCustomData(); @@ -2655,18 +2745,23 @@ ndb_binlog_thread_handle_non_data_event(Ndb *ndb, NdbEventOperation *pOp, /* make sure to flush any pending events as they can be dependent on one of the tables being changed below */ - injector_thd->binlog_flush_pending_rows_event(true); + thd->binlog_flush_pending_rows_event(true); switch (type) { case NDBEVENT::TE_CLUSTER_FAILURE: + if (ndb_extra_logging) + sql_print_information("NDB Binlog: cluster failure for %s.", share->key); if (apply_status_share == share) { + if (ndb_extra_logging && + ndb_binlog_tables_inited && ndb_binlog_running) + sql_print_information("NDB Binlog: ndb tables initially " + "read only on reconnect."); free_share(&apply_status_share); apply_status_share= 0; + ndb_binlog_tables_inited= FALSE; } - if (ndb_extra_logging) - sql_print_information("NDB Binlog: cluster failure for %s.", share->key); DBUG_PRINT("info", ("CLUSTER FAILURE EVENT: " "%s received share: 0x%lx op: %lx share op: %lx " "op_old: %lx", @@ -2675,8 +2770,13 @@ ndb_binlog_thread_handle_non_data_event(Ndb *ndb, NdbEventOperation *pOp, case NDBEVENT::TE_DROP: if (apply_status_share == share) { + if (ndb_extra_logging && + ndb_binlog_tables_inited && ndb_binlog_running) + sql_print_information("NDB Binlog: ndb tables initially " + "read only on reconnect."); free_share(&apply_status_share); apply_status_share= 0; + ndb_binlog_tables_inited= FALSE; } /* ToDo: remove printout */ if (ndb_extra_logging) @@ -2702,7 +2802,7 @@ ndb_binlog_thread_handle_non_data_event(Ndb *ndb, NdbEventOperation *pOp, return 0; } - ndb_handle_schema_change(injector_thd, ndb, pOp, share); + ndb_handle_schema_change(thd, ndb, pOp, share); return 0; } @@ -2982,7 +3082,8 @@ static void ndb_free_schema_object(NDB_SCHEMA_OBJECT **ndb_schema_object, pthread_handler_t ndb_binlog_thread_func(void *arg) { THD *thd; /* needs to be first for thread_stack */ - Ndb *ndb= 0; + Ndb *i_ndb= 0; + Ndb *s_ndb= 0; Thd_ndb *thd_ndb=0; int ndb_update_binlog_index= 1; injector *inj= injector::instance(); @@ -3034,16 +3135,16 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) pthread_mutex_unlock(&LOCK_thread_count); thd->lex->start_transaction_opt= 0; - if (!(schema_ndb= new Ndb(g_ndb_cluster_connection, "")) || - schema_ndb->init()) + if (!(s_ndb= new Ndb(g_ndb_cluster_connection, "")) || + s_ndb->init()) { sql_print_error("NDB Binlog: Getting Schema Ndb object failed"); goto err; } // empty database - if (!(ndb= new Ndb(g_ndb_cluster_connection, "")) || - ndb->init()) + if (!(i_ndb= new Ndb(g_ndb_cluster_connection, "")) || + i_ndb->init()) { sql_print_error("NDB Binlog: Getting Ndb object failed"); ndb_binlog_thread_running= -1; @@ -3064,7 +3165,8 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) pthread_mutex_lock(&injector_mutex); */ injector_thd= thd; - injector_ndb= ndb; + injector_ndb= i_ndb; + schema_ndb= s_ndb; ndb_binlog_thread_running= 1; if (opt_bin_log) { @@ -3087,7 +3189,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) thd->proc_info= "Waiting for ndbcluster to start"; pthread_mutex_lock(&injector_mutex); - while (!ndbcluster_util_inited) + while (!schema_share || !apply_status_share) { /* ndb not connected yet */ struct timespec abstime; @@ -3119,10 +3221,6 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) thd->db= db; if (ndb_binlog_running) open_binlog_index(thd, &binlog_tables, &binlog_index); - if (!apply_status_share) - { - sql_print_error("NDB: Could not get apply status share"); - } thd->db= db; } @@ -3150,14 +3248,14 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) int res= 0, tot_poll_wait= 1000; if (ndb_binlog_running) { - res= ndb->pollEvents(tot_poll_wait, &gci); + res= i_ndb->pollEvents(tot_poll_wait, &gci); tot_poll_wait= 0; } - int schema_res= schema_ndb->pollEvents(tot_poll_wait, &schema_gci); + int schema_res= s_ndb->pollEvents(tot_poll_wait, &schema_gci); ndb_latest_received_binlog_epoch= gci; while (gci > schema_gci && schema_res >= 0) - schema_res= schema_ndb->pollEvents(10, &schema_gci); + schema_res= s_ndb->pollEvents(10, &schema_gci); if ((abort_loop || do_ndbcluster_binlog_close_connection) && (ndb_latest_handled_binlog_epoch >= g_latest_trans_gci || @@ -3184,15 +3282,16 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) if (unlikely(schema_res > 0)) { - schema_ndb-> + thd->proc_info= "Processing events from schema table"; + s_ndb-> setReportThreshEventGCISlip(ndb_report_thresh_binlog_epoch_slip); - schema_ndb-> + s_ndb-> setReportThreshEventFreeMem(ndb_report_thresh_binlog_mem_usage); - NdbEventOperation *pOp= schema_ndb->nextEvent(); + NdbEventOperation *pOp= s_ndb->nextEvent(); while (pOp != NULL) { if (!pOp->hasError()) - ndb_binlog_thread_handle_schema_event(thd, schema_ndb, pOp, + ndb_binlog_thread_handle_schema_event(thd, s_ndb, pOp, &post_epoch_log_list, &post_epoch_unlock_list, &mem_root); @@ -3201,7 +3300,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) "binlog schema event", (ulong) pOp->getNdbError().code, pOp->getNdbError().message); - pOp= schema_ndb->nextEvent(); + pOp= s_ndb->nextEvent(); } } @@ -3213,7 +3312,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) int event_count= 0; #endif thd->proc_info= "Processing events"; - NdbEventOperation *pOp= ndb->nextEvent(); + NdbEventOperation *pOp= i_ndb->nextEvent(); Binlog_index_row row; while (pOp != NULL) { @@ -3224,9 +3323,9 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) ! IS_NDB_BLOB_PREFIX(pOp->getEvent()->getTable()->getName())); DBUG_ASSERT(gci <= ndb_latest_received_binlog_epoch); - ndb-> + i_ndb-> setReportThreshEventGCISlip(ndb_report_thresh_binlog_epoch_slip); - ndb->setReportThreshEventFreeMem(ndb_report_thresh_binlog_mem_usage); + i_ndb->setReportThreshEventFreeMem(ndb_report_thresh_binlog_mem_usage); bzero((char*) &row, sizeof(row)); injector::transaction trans; @@ -3235,7 +3334,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) Uint32 iter= 0; const NdbEventOperation *gci_op; Uint32 event_types; - while ((gci_op= ndb->getGCIEventOperations(&iter, &event_types)) + while ((gci_op= i_ndb->getGCIEventOperations(&iter, &event_types)) != NULL) { NDB_SHARE *share= (NDB_SHARE*)gci_op->getCustomData(); @@ -3321,7 +3420,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) event_count++; #endif if (pOp->hasError() && - ndb_binlog_thread_handle_error(ndb, pOp, row) < 0) + ndb_binlog_thread_handle_error(i_ndb, pOp, row) < 0) goto err; #ifndef DBUG_OFF @@ -3341,7 +3440,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) Uint32 iter= 0; const NdbEventOperation *gci_op; Uint32 event_types; - while ((gci_op= ndb->getGCIEventOperations(&iter, &event_types)) + while ((gci_op= i_ndb->getGCIEventOperations(&iter, &event_types)) != NULL) { if (gci_op == pOp) @@ -3353,19 +3452,19 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) #endif if ((unsigned) pOp->getEventType() < (unsigned) NDBEVENT::TE_FIRST_NON_DATA_EVENT) - ndb_binlog_thread_handle_data_event(ndb, pOp, row, trans); + ndb_binlog_thread_handle_data_event(i_ndb, pOp, row, trans); else { // set injector_ndb database/schema from table internal name int ret= - ndb->setDatabaseAndSchemaName(pOp->getEvent()->getTable()); + i_ndb->setDatabaseAndSchemaName(pOp->getEvent()->getTable()); DBUG_ASSERT(ret == 0); - ndb_binlog_thread_handle_non_data_event(ndb, pOp, row); + ndb_binlog_thread_handle_non_data_event(thd, i_ndb, pOp, row); // reset to catch errors - ndb->setDatabaseName(""); + i_ndb->setDatabaseName(""); } - pOp= ndb->nextEvent(); + pOp= i_ndb->nextEvent(); } while (pOp && pOp->getGCI() == gci); /* @@ -3379,6 +3478,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) if (trans.good()) { //DBUG_ASSERT(row.n_inserts || row.n_updates || row.n_deletes); + thd->proc_info= "Committing events to binlog"; injector::transaction::binlog_pos start= trans.start_pos(); if (int r= trans.commit()) { @@ -3418,10 +3518,13 @@ pthread_handler_t ndb_binlog_thread_func(void *arg) } err: DBUG_PRINT("info",("Shutting down cluster binlog thread")); + thd->proc_info= "Shutting down"; close_thread_tables(thd); pthread_mutex_lock(&injector_mutex); /* don't mess with the injector_ndb anymore from other threads */ + injector_thd= 0; injector_ndb= 0; + schema_ndb= 0; pthread_mutex_unlock(&injector_mutex); thd->db= 0; // as not to try to free memory sql_print_information("Stopping Cluster Binlog"); @@ -3438,21 +3541,45 @@ err: } /* remove all event operations */ - if (ndb) + if (s_ndb) { NdbEventOperation *op; DBUG_PRINT("info",("removing all event operations")); - while ((op= ndb->getEventOperation())) + while ((op= s_ndb->getEventOperation())) { DBUG_ASSERT(! IS_NDB_BLOB_PREFIX(op->getEvent()->getTable()->getName())); DBUG_PRINT("info",("removing event operation on %s", op->getEvent()->getName())); NDB_SHARE *share= (NDB_SHARE*) op->getCustomData(); + DBUG_ASSERT(share != 0); + DBUG_ASSERT(share->op == op || + share->op_old == op); + share->op= share->op_old= 0; free_share(&share); - ndb->dropEventOperation(op); + s_ndb->dropEventOperation(op); + } + delete s_ndb; + s_ndb= 0; + } + if (i_ndb) + { + NdbEventOperation *op; + DBUG_PRINT("info",("removing all event operations")); + while ((op= i_ndb->getEventOperation())) + { + DBUG_ASSERT(! IS_NDB_BLOB_PREFIX(op->getEvent()->getTable()->getName())); + DBUG_PRINT("info",("removing event operation on %s", + op->getEvent()->getName())); + NDB_SHARE *share= (NDB_SHARE*) op->getCustomData(); + DBUG_ASSERT(share != 0); + DBUG_ASSERT(share->op == op || + share->op_old == op); + share->op= share->op_old= 0; + free_share(&share); + i_ndb->dropEventOperation(op); } - delete ndb; - ndb= 0; + delete i_ndb; + i_ndb= 0; } hash_free(&ndb_schema_objects); diff --git a/sql/ha_ndbcluster_binlog.h b/sql/ha_ndbcluster_binlog.h index fda025842a0e034d9fb3b27f4f51e520b98e8736..9d15016568b2d6253a3f61db56a11dc82aae9414 100644 --- a/sql/ha_ndbcluster_binlog.h +++ b/sql/ha_ndbcluster_binlog.h @@ -101,7 +101,8 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share, const char *old_db= 0, const char *old_table_name= 0); int ndbcluster_handle_drop_table(Ndb *ndb, const char *event_name, - NDB_SHARE *share); + NDB_SHARE *share, + const char *type_str); void ndb_rep_event_name(String *event_name, const char *db, const char *tbl); int ndb_create_table_from_engine(THD *thd, const char *db, @@ -112,12 +113,13 @@ pthread_handler_t ndb_binlog_thread_func(void *arg); /* table cluster_replication.apply_status */ -void ndbcluster_setup_binlog_table_shares(THD *thd); +int ndbcluster_setup_binlog_table_shares(THD *thd); extern NDB_SHARE *apply_status_share; extern NDB_SHARE *schema_share; extern THD *injector_thd; extern my_bool ndb_binlog_running; +extern my_bool ndb_binlog_tables_inited; bool ndbcluster_show_status_binlog(THD* thd, stat_print_fn *stat_print, diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 7cf841a5d71e6c6d13736c60c98c5360bffee9a4..3ee9a2954eb990a8786bf9412a44b73ad200dacc 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -562,6 +562,7 @@ int ha_partition::rename_table(const char *from, const char *to) SYNOPSIS create_handler_files() name Full path of table name + create_info Create info generated for CREATE TABLE RETURN VALUE >0 Error @@ -575,7 +576,8 @@ int ha_partition::rename_table(const char *from, const char *to) and types of engines in the partitions. */ -int ha_partition::create_handler_files(const char *name) +int ha_partition::create_handler_files(const char *name, + HA_CREATE_INFO *create_info) { DBUG_ENTER("ha_partition::create_handler_files()"); @@ -1135,7 +1137,6 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt, partition_element *part_elem= part_it++; if (all_parts || part_elem->part_state == PART_CHANGED) { - handler *file; if (m_is_sub_partitioned) { List_iterator<partition_element> sub_it(part_elem->subpartitions); @@ -2311,7 +2312,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked) err_handler: while (file-- != m_file) (*file)->close(); -err: + DBUG_RETURN(error); } @@ -2915,7 +2916,6 @@ int ha_partition::rnd_init(bool scan) int error; uint i= 0; uint32 part_id; - handler **file; DBUG_ENTER("ha_partition::rnd_init"); include_partition_fields_in_used_fields(); @@ -4201,11 +4201,7 @@ void ha_partition::info(uint flag) if (flag & HA_STATUS_AUTO) { DBUG_PRINT("info", ("HA_STATUS_AUTO")); - /* - The auto increment value is only maintained by the first handler - so we will only call this. - */ - m_file[0]->info(HA_STATUS_AUTO); + auto_increment_value= get_auto_increment(); } if (flag & HA_STATUS_VARIABLE) { @@ -5349,9 +5345,15 @@ void ha_partition::restore_auto_increment() ulonglong ha_partition::get_auto_increment() { + ulonglong auto_inc, max_auto_inc= 0; DBUG_ENTER("ha_partition::get_auto_increment"); - DBUG_RETURN(m_file[0]->get_auto_increment()); + for (uint i= 0; i < m_tot_parts; i++) + { + auto_inc= m_file[i]->get_auto_increment(); + set_if_bigger(max_auto_inc, auto_inc); + } + DBUG_RETURN(max_auto_inc); } diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 96b615df71aab459833263937394f797a77bf37f..ecaa7e1e8fa3be0f0e4b10920b2501b02ac7fcf4 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -179,7 +179,8 @@ public: virtual int rename_table(const char *from, const char *to); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); - virtual int create_handler_files(const char *name); + virtual int create_handler_files(const char *name, + HA_CREATE_INFO *create_info); virtual void update_create_info(HA_CREATE_INFO *create_info); virtual char *update_table_comment(const char *comment); virtual int change_partitions(HA_CREATE_INFO *create_info, diff --git a/sql/handler.h b/sql/handler.h index 261a813bbfa974d47f7bf6ded277171944e6ed42..e93fdfe67e37d7b287faec37bbbc7472faf8968c 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1338,6 +1338,7 @@ public: virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0; + virtual void prepare_for_alter() { return; } virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { return (HA_ERR_WRONG_COMMAND); } virtual int prepare_drop_index(TABLE *table_arg, uint *key_num, @@ -1378,7 +1379,8 @@ public: virtual void drop_table(const char *name); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0; - virtual int create_handler_files(const char *name) { return FALSE;} + virtual int create_handler_files(const char *name, HA_CREATE_INFO *info) + { return FALSE;} virtual int change_partitions(HA_CREATE_INFO *create_info, const char *path, diff --git a/sql/hostname.cc b/sql/hostname.cc index c5c337080cf9ae9585fed7a0a487b0501a26f75a..52c4107372f78cfe9a81d7c54888e4aff6cd4873 100644 --- a/sql/hostname.cc +++ b/sql/hostname.cc @@ -26,7 +26,7 @@ #ifdef __cplusplus extern "C" { // Because of SCO 3.2V4.2 #endif -#if !defined( __WIN__) && !defined(OS2) +#if !defined( __WIN__) #ifdef HAVE_SYS_UN_H #include <sys/un.h> #endif diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 65654b150e1d3a5010ff89d465be78bbadc9254e..acee912c91298d241590522dd2a541494ac57a4b 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -52,11 +52,10 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) { uint i; Field *field= NULL; - bool all_constant= TRUE; /* If the first argument is a FIELD_ITEM, pull out the field. */ - if (items[0]->type() == Item::FIELD_ITEM) - field=((Item_field *)items[0])->field; + if (items[0]->real_item()->type() == Item::FIELD_ITEM) + field=((Item_field *)(items[0]->real_item()))->field; /* But if it can't be compared as a longlong, we don't really care. */ if (field && !field->can_be_compared_as_longlong()) field= NULL; @@ -65,16 +64,9 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) for (i= 1; i < nitems; i++) { type[0]= item_cmp_type(type[0], items[i]->result_type()); - if (field && !convert_constant_item(thd, field, &items[i])) - all_constant= FALSE; + if (field && convert_constant_item(thd, field, &items[i])) + type[0]= INT_RESULT; } - - /* - If we had a field that can be compared as a longlong, and all constant - items, then the aggregate result will be an INT_RESULT. - */ - if (field && all_constant) - type[0]= INT_RESULT; } diff --git a/sql/item_row.cc b/sql/item_row.cc index 75c3f8a292240ed78f76715cffa90732fe850e0b..f5c8d5110257147604f3ff1fff45dcebed245f59 100644 --- a/sql/item_row.cc +++ b/sql/item_row.cc @@ -26,7 +26,7 @@ */ Item_row::Item_row(List<Item> &arg): - Item(), used_tables_cache(0), array_holder(1), const_item_cache(1), with_null(0) + Item(), used_tables_cache(0), const_item_cache(1), with_null(0) { //TODO: think placing 2-3 component items in item (as it done for function) @@ -85,6 +85,20 @@ bool Item_row::fix_fields(THD *thd, Item **ref) } +void Item_row::cleanup() +{ + DBUG_ENTER("Item_row::cleanup"); + + Item::cleanup(); + /* Reset to the original values */ + used_tables_cache= 0; + const_item_cache= 1; + with_null= 0; + + DBUG_VOID_RETURN; +} + + void Item_row::split_sum_func(THD *thd, Item **ref_pointer_array, List<Item> &fields) { diff --git a/sql/item_row.h b/sql/item_row.h index 6fbe7436b72679835aa3a867c303d4fa4dc4d333..d6dd4371372d24d11745ba9359bf39f721b4a6b3 100644 --- a/sql/item_row.h +++ b/sql/item_row.h @@ -19,7 +19,6 @@ class Item_row: public Item Item **items; table_map used_tables_cache; uint arg_count; - bool array_holder; bool const_item_cache; bool with_null; public: @@ -29,7 +28,6 @@ public: items(item->items), used_tables_cache(item->used_tables_cache), arg_count(item->arg_count), - array_holder(0), const_item_cache(item->const_item_cache), with_null(0) {} @@ -62,6 +60,7 @@ public: return 0; }; bool fix_fields(THD *thd, Item **ref); + void cleanup(); void split_sum_func(THD *thd, Item **ref_pointer_array, List<Item> &fields); table_map used_tables() const { return used_tables_cache; }; bool const_item() const { return const_item_cache; }; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 99cb7078ebab240082d3ae0370b9fdb46defc024..6fbd6db1a89fed3b944e444bf95227e1ba0e081f 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -2002,6 +2002,41 @@ longlong Item_date_add_interval::val_int() ((date*100L + ltime.hour)*100L+ ltime.minute)*100L + ltime.second; } + + +bool Item_date_add_interval::eq(const Item *item, bool binary_cmp) const +{ + INTERVAL interval, other_interval; + String val= value; // Because of const + + if (this == item) + return TRUE; + + if ((item->type() != FUNC_ITEM) || + (arg_count != ((Item_func*) item)->arg_count) || + (func_name() != ((Item_func*) item)->func_name())) + return FALSE; + + Item_date_add_interval *other= (Item_date_add_interval*) item; + + if ((int_type != other->int_type) || + (!args[0]->eq(other->args[0], binary_cmp)) || + (get_interval_value(args[1], int_type, &val, &interval))) + return FALSE; + + val= other->value; + + if ((get_interval_value(other->args[1], other->int_type, &val, + &other_interval)) || + ((date_sub_interval ^ interval.neg) ^ + (other->date_sub_interval ^ other_interval.neg))) + return FALSE; + + // Assume comparing same types here due to earlier check + return memcmp(&interval, &other_interval, sizeof(INTERVAL)) == 0; +} + + static const char *interval_names[]= { "year", "quarter", "month", "day", "hour", diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index ffe049873fc1b233e1b5a4d6a61caf8d45ef9e55..a42232fd0fc55781b562d5013991bd1dfdaec9a0 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -667,6 +667,7 @@ public: double val_real() { DBUG_ASSERT(fixed == 1); return (double) val_int(); } longlong val_int(); bool get_date(TIME *res, uint fuzzy_date); + bool eq(const Item *item, bool binary_cmp) const; void print(String *str); virtual bool check_partition_func_processor(byte *bool_arg) { return 0;} }; diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 91f958d5b70ac996fe17d0a1a79dac5fc47fecc7..a245e3b1b33c208364a404618543820bb9d0c4c3 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -1133,6 +1133,13 @@ static Item *create_func_number(MY_XPATH *xpath, Item **args, uint nargs) } +static Item *create_func_string_length(MY_XPATH *xpath, Item **args, uint nargs) +{ + Item *arg= nargs ? args[0] : xpath->context; + return arg ? new Item_func_char_length(arg) : 0; +} + + static Item *create_func_round(MY_XPATH *xpath, Item **args, uint nargs) { return new Item_func_round(args[0], new Item_int((char*)"0",0,1),0); @@ -1246,6 +1253,7 @@ static MY_XPATH_FUNC my_func_names[] = {"local-name" , 10 , 0 , 1 , 0}, {"starts-with" , 11 , 2 , 2 , 0}, {"namespace-uri" , 13 , 0 , 1 , 0}, + {"string-length" , 13 , 0 , 1 , create_func_string_length}, {"substring-after" , 15 , 2 , 2 , 0}, {"normalize-space" , 15 , 0 , 1 , 0}, {"substring-before" , 16 , 2 , 2 , 0}, @@ -1304,30 +1312,6 @@ my_xpath_init(MY_XPATH *xpath) } -/* - Some ctype-alike helper functions. Note, we cannot - reuse cs->ident_map[], because in Xpath, unlike in SQL, - dash character is a valid identifier part. -*/ -static int -my_xident_beg(int c) -{ - return (((c) >= 'a' && (c) <= 'z') || - ((c) >= 'A' && (c) <= 'Z') || - ((c) == '_')); -} - - -static int -my_xident_body(int c) -{ - return (((c) >= 'a' && (c) <= 'z') || - ((c) >= 'A' && (c) <= 'Z') || - ((c) >= '0' && (c) <= '9') || - ((c)=='-') || ((c) == '_')); -} - - static int my_xdigit(int c) { @@ -1350,7 +1334,7 @@ static void my_xpath_lex_scan(MY_XPATH *xpath, MY_XPATH_LEX *lex, const char *beg, const char *end) { - int ch; + int ch, ctype, length; for ( ; beg < end && *beg == ' ' ; beg++); // skip leading spaces lex->beg= beg; @@ -1360,20 +1344,20 @@ my_xpath_lex_scan(MY_XPATH *xpath, lex->term= MY_XPATH_LEX_EOF; // end of line reached return; } - ch= *beg++; - - if (ch > 0 && ch < 128 && simpletok[ch]) - { - // a token consisting of one character found - lex->end= beg; - lex->term= ch; - return; - } - - if (my_xident_beg(ch)) // ident, or a function call, or a keyword + + // Check ident, or a function call, or a keyword + if ((length= xpath->cs->cset->ctype(xpath->cs, &ctype, + (const uchar*) beg, + (const uchar*) end)) > 0 && + ((ctype & (_MY_L | _MY_U)) || *beg == '_')) { - // scan until the end of the identifier - for ( ; beg < end && my_xident_body(*beg); beg++); + // scan untill the end of the idenfitier + for (beg+= length; + (length= xpath->cs->cset->ctype(xpath->cs, &ctype, + (const uchar*) beg, + (const uchar*) end)) > 0 && + ((ctype & (_MY_L | _MY_U | _MY_NMR)) || *beg == '_' || *beg == '-') ; + beg+= length) /* no op */; lex->end= beg; // check if a function call @@ -1388,6 +1372,18 @@ my_xpath_lex_scan(MY_XPATH *xpath, return; } + + ch= *beg++; + + if (ch > 0 && ch < 128 && simpletok[ch]) + { + // a token consisting of one character found + lex->end= beg; + lex->term= ch; + return; + } + + if (my_xdigit(ch)) // a sequence of digits { for ( ; beg < end && my_xdigit(*beg) ; beg++); @@ -1849,7 +1845,11 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) for (nargs= 0 ; nargs < func->maxargs; ) { if (!my_xpath_parse_Expr(xpath)) - return 0; + { + if (nargs < func->minargs) + return 0; + goto right_paren; + } args[nargs++]= xpath->item; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_COMMA)) { @@ -1859,6 +1859,8 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) break; } } + +right_paren: if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_RP)) return 0; diff --git a/sql/key.cc b/sql/key.cc index fd9e8a89b1782e6e252676659d8eeb6a5a2de15f..a407fff484059c5a55dffab574c96241457657be 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -192,7 +192,8 @@ void key_restore(byte *to_record, byte *from_key, KEY *key_info, Field_bit *field= (Field_bit *) (key_part->field); if (field->bit_len) { - uchar bits= *(from_key + key_part->length - field->field_length -1); + uchar bits= *(from_key + key_part->length - + field->pack_length_in_rec() - 1); set_rec_bits(bits, to_record + key_part->null_offset + (key_part->null_bit == 128), field->bit_ofs, field->bit_len); diff --git a/sql/lex.h b/sql/lex.h index 9f0c6c4f8b74f396bfb797c3afe6f0b3910b020c..d22a56034c548e19147a98a525a46d2f956161e3 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -390,9 +390,11 @@ static SYMBOL symbols[] = { { "PACK_KEYS", SYM(PACK_KEYS_SYM)}, { "PARSER", SYM(PARSER_SYM)}, { "PARTIAL", SYM(PARTIAL)}, +#ifdef WITH_PARTITION_STORAGE_ENGINE { "PARTITION", SYM(PARTITION_SYM)}, { "PARTITIONING", SYM(PARTITIONING_SYM)}, { "PARTITIONS", SYM(PARTITIONS_SYM)}, +#endif { "PASSWORD", SYM(PASSWORD)}, { "PHASE", SYM(PHASE_SYM)}, { "PLUGIN", SYM(PLUGIN_SYM)}, diff --git a/sql/log.cc b/sql/log.cc index b93b5319ffb9abd3c8fc34aa45d016f41500720e..818abe89e02cfd0d850cb0ed91a8bf65f75d2996 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -18,10 +18,6 @@ /* logging of commands */ /* TODO: Abort logging when we get an error in reading or writing log files */ -#ifdef __EMX__ -#include <io.h> -#endif - #include "mysql_priv.h" #include "sql_repl.h" #include "rpl_filter.h" @@ -680,20 +676,36 @@ bool LOGGER::flush_logs(THD *thd) /* reopen log files */ file_log_handler->flush(); - /* - this will lock and wait for all but the logger thread to release the - tables. Then we could reopen log tables. Then release the name locks. - */ - lock_and_wait_for_table_name(thd, &close_slow_log); - lock_and_wait_for_table_name(thd, &close_general_log); + /* flush tables, in the case they are enabled */ + if (logger.is_log_tables_initialized) + { + /* + This will lock and wait for all but the logger thread to release the + tables. Then we could reopen log tables. Then release the name locks. + + NOTE: in fact, the first parameter used in lock_and_wait_for_table_name() + and table_log_handler->flush() could be any non-NULL THD, as the + underlying code makes certain assumptions about this. + Here we use one of the logger handler THD's. Simply because it + seems appropriate. + */ + lock_and_wait_for_table_name(table_log_handler->general_log_thd, + &close_slow_log); + lock_and_wait_for_table_name(table_log_handler->general_log_thd, + &close_general_log); - /* deny others from logging to general and slow log, while reopening tables */ - logger.lock(); + /* + Deny others from logging to general and slow log, + while reopening tables. + */ + logger.lock(); - table_log_handler->flush(thd, &close_slow_log, &close_general_log); + table_log_handler->flush(table_log_handler->general_log_thd, + &close_slow_log, &close_general_log); - /* end of log tables flush */ - logger.unlock(); + /* end of log tables flush */ + logger.unlock(); + } return FALSE; } @@ -3122,7 +3134,11 @@ DBUG_skip_commit: rotate binlog, if necessary. */ if (commit_event->get_type_code() == XID_EVENT) - thread_safe_increment(prepared_xids, &LOCK_prep_xids); + { + pthread_mutex_lock(&LOCK_prep_xids); + prepared_xids++; + pthread_mutex_unlock(&LOCK_prep_xids); + } else rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED); } diff --git a/sql/log_event.cc b/sql/log_event.cc index 8a39b1fc4ebbc4b79a9d9e35f03cfba1b1b9d4a9..d51a0ef4c9f684a5e41c88c071c4a236266fdacc 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6579,18 +6579,6 @@ int Delete_rows_log_event::do_before_row_operations(TABLE *table) if (!m_memory) return HA_ERR_OUT_OF_MEM; - if (table->s->keys > 0) - { - /* We have a key: search the table using the index */ - if (!table->file->inited) - error= table->file->ha_index_init(0, FALSE); - } - else - { - /* We doesn't have a key: search the table using rnd_next() */ - error= table->file->ha_rnd_init(1); - } - return error; } @@ -6638,6 +6626,20 @@ int Delete_rows_log_event::do_exec_row(TABLE *table) { DBUG_ASSERT(table != NULL); + if (table->s->keys > 0) + { + /* We have a key: search the table using the index */ + if (!table->file->inited) + if (int error= table->file->ha_index_init(0, FALSE)) + return error; + } + else + { + /* We doesn't have a key: search the table using rnd_next() */ + if (int error= table->file->ha_rnd_init(1)) + return error; + } + int error= find_and_fetch_row(table, m_key); if (error) return error; @@ -6649,6 +6651,11 @@ int Delete_rows_log_event::do_exec_row(TABLE *table) */ error= table->file->ha_delete_row(table->record[0]); + /* + Have to restart the scan to be able to fetch the next row. + */ + table->file->ha_index_or_rnd_end(); + return error; } diff --git a/sql/log_event.h b/sql/log_event.h index d6ce354fbdf5bd52473ebd9342e385fa8b1cdca5..b24686514e3b57643d09822348d7beb3a981b334 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -18,10 +18,6 @@ #ifndef _log_event_h #define _log_event_h -#ifdef __EMX__ -#undef write // remove pthread.h macro definition, conflict with write() class member -#endif - #if defined(USE_PRAGMA_INTERFACE) && !defined(MYSQL_CLIENT) #pragma interface /* gcc class implementation */ #endif diff --git a/sql/my_lock.c b/sql/my_lock.c index 7f47256703a8d2d73cd9e59c21273e8f69447726..69884df22f8d3391979c2069a6234ee1a78ce4a3 100644 --- a/sql/my_lock.c +++ b/sql/my_lock.c @@ -14,7 +14,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#if defined(__EMX__) || defined(__NETWARE__) +#if defined(__NETWARE__) #include "../mysys/my_lock.c" #else diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index ac7957d41f13f863cc8036701226d3c410d4768c..5773f0476a950b427287ff3f4200cad23c43d799 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -36,10 +36,6 @@ #include "sql_bitmap.h" #include "sql_array.h" -#ifdef __EMX__ -#undef write /* remove pthread.h macro definition for EMX */ -#endif - /* TODO convert all these three maps to Bitmap classes */ typedef ulonglong table_map; /* Used for table bits in join */ #if MAX_INDEXES <= 64 @@ -206,7 +202,7 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; #define IF_NETWARE(A,B) (B) #endif -#if defined(__WIN__) || defined(OS2) +#if defined(__WIN__) #define IF_WIN(A,B) (A) #undef FLUSH_TIME #define FLUSH_TIME 1800 /* Flush every half hour */ @@ -1300,6 +1296,7 @@ extern ulong slave_net_timeout, slave_trans_retries; extern uint max_user_connections; extern ulong what_to_log,flush_time; extern ulong query_buff_size, thread_stack; +extern ulong max_prepared_stmt_count, prepared_stmt_count; extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit; extern ulong max_binlog_size, max_relay_log_size; #ifdef HAVE_ROW_BASED_REPLICATION @@ -1354,6 +1351,7 @@ extern pthread_mutex_t LOCK_mysql_create_db,LOCK_Acl,LOCK_open, LOCK_lock_db, LOCK_delayed_status, LOCK_delayed_create, LOCK_crypt, LOCK_timezone, LOCK_slave_list, LOCK_active_mi, LOCK_manager, LOCK_global_read_lock, LOCK_global_system_variables, LOCK_user_conn, + LOCK_prepared_stmt_count, LOCK_bytes_sent, LOCK_bytes_received; #ifdef HAVE_OPENSSL extern pthread_mutex_t LOCK_des_key_file; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 71067630535f074a0ce5a0bcbee7293c62e37799..73bd0d57eb385eaa3dbc98c86ce6febbf0e9741a 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -95,9 +95,7 @@ extern "C" { // Because of SCO 3.2V4.2 #endif #include <my_net.h> -#if defined(OS2) -# include <sys/un.h> -#elif !defined(__WIN__) +#if !defined(__WIN__) # ifndef __NETWARE__ #include <sys/resource.h> # endif /* __NETWARE__ */ @@ -502,6 +500,22 @@ ulong specialflag=0; ulong binlog_cache_use= 0, binlog_cache_disk_use= 0; ulong max_connections, max_connect_errors; uint max_user_connections= 0; +/* + Limit of the total number of prepared statements in the server. + Is necessary to protect the server against out-of-memory attacks. +*/ +ulong max_prepared_stmt_count; +/* + Current total number of prepared statements in the server. This number + is exact, and therefore may not be equal to the difference between + `com_stmt_prepare' and `com_stmt_close' (global status variables), as + the latter ones account for all registered attempts to prepare + a statement (including unsuccessful ones). Prepared statements are + currently connection-local: if the same SQL query text is prepared in + two different connections, this counts as two distinct prepared + statements. +*/ +ulong prepared_stmt_count=0; ulong thread_id=1L,current_pid; ulong slow_launch_threads = 0, sync_binlog_period; ulong expire_logs_days = 0; @@ -579,6 +593,14 @@ pthread_mutex_t LOCK_mysql_create_db, LOCK_Acl, LOCK_open, LOCK_thread_count, LOCK_crypt, LOCK_bytes_sent, LOCK_bytes_received, LOCK_global_system_variables, LOCK_user_conn, LOCK_slave_list, LOCK_active_mi; +/* + The below lock protects access to two global server variables: + max_prepared_stmt_count and prepared_stmt_count. These variables + set the limit and hold the current total number of prepared statements + in the server, respectively. As PREPARE/DEALLOCATE rate in a loaded + server may be fairly high, we need a dedicated lock. +*/ +pthread_mutex_t LOCK_prepared_stmt_count; #ifdef HAVE_OPENSSL pthread_mutex_t LOCK_des_key_file; #endif @@ -648,10 +670,6 @@ static SECURITY_DESCRIPTOR sdPipeDescriptor; static HANDLE hPipe = INVALID_HANDLE_VALUE; #endif -#ifdef OS2 -pthread_cond_t eventShutdown; -#endif - #ifndef EMBEDDED_LIBRARY bool mysqld_embedded=0; #else @@ -751,7 +769,7 @@ static void close_connections(void) (void) pthread_mutex_unlock(&LOCK_manager); /* kill connection thread */ -#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) DBUG_PRINT("quit",("waiting for select thread: 0x%lx",select_thread)); (void) pthread_mutex_lock(&LOCK_thread_count); @@ -980,8 +998,6 @@ void kill_mysql(void) */ } #endif -#elif defined(OS2) - pthread_cond_signal(&eventShutdown); // post semaphore #elif defined(HAVE_PTHREAD_KILL) if (pthread_kill(signal_thread, MYSQL_KILL_SIGNAL)) { @@ -1007,7 +1023,7 @@ void kill_mysql(void) /* Force server down. kill all connections and threads and exit */ -#if defined(OS2) || defined(__NETWARE__) +#if defined(__NETWARE__) extern "C" void kill_server(int sig_ptr) #define RETURN_FROM_KILL_SERVER DBUG_VOID_RETURN #elif !defined(__WIN__) @@ -1044,7 +1060,7 @@ static void __cdecl kill_server(int sig_ptr) } #endif -#if defined(__NETWARE__) || (defined(USE_ONE_SIGNAL_HAND) && !defined(__WIN__) && !defined(OS2)) +#if defined(__NETWARE__) || (defined(USE_ONE_SIGNAL_HAND) && !defined(__WIN__)) my_thread_init(); // If this is a new thread #endif close_connections(); @@ -1082,7 +1098,7 @@ extern "C" sig_handler print_signal_warning(int sig) #ifdef DONT_REMEMBER_SIGNAL my_sigset(sig,print_signal_warning); /* int. thread system calls */ #endif -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) if (sig == SIGALRM) alarm(2); /* reschedule alarm */ #endif @@ -1296,6 +1312,7 @@ static void clean_up_mutexes() (void) pthread_mutex_destroy(&LOCK_global_system_variables); (void) pthread_mutex_destroy(&LOCK_global_read_lock); (void) pthread_mutex_destroy(&LOCK_uuid_generator); + (void) pthread_mutex_destroy(&LOCK_prepared_stmt_count); (void) pthread_cond_destroy(&COND_thread_count); (void) pthread_cond_destroy(&COND_refresh); (void) pthread_cond_destroy(&COND_thread_cache); @@ -1336,7 +1353,7 @@ static void set_ports() static struct passwd *check_user(const char *user) { -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) struct passwd *user_info; uid_t user_id= geteuid(); @@ -1390,7 +1407,7 @@ err: static void set_user(const char *user, struct passwd *user_info) { -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) DBUG_ASSERT(user_info != 0); #ifdef HAVE_INITGROUPS /* @@ -1419,7 +1436,7 @@ static void set_user(const char *user, struct passwd *user_info) static void set_effective_user(struct passwd *user_info) { -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) DBUG_ASSERT(user_info != 0); if (setregid((gid_t)-1, user_info->pw_gid) == -1) { @@ -1439,7 +1456,7 @@ static void set_effective_user(struct passwd *user_info) static void set_root(const char *path) { -#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) if (chroot(path) == -1) { sql_perror("chroot"); @@ -1786,7 +1803,7 @@ extern "C" sig_handler abort_thread(int sig __attribute__((unused))) the signal thread is ready before continuing ******************************************************************************/ -#if defined(__WIN__) || defined(OS2) +#if defined(__WIN__) static void init_signals(void) { int signals[] = {SIGINT,SIGILL,SIGFPE,SIGSEGV,SIGTERM,SIGABRT } ; @@ -2046,44 +2063,7 @@ static void check_data_home(const char *path) { } -#elif defined(__EMX__) -static void sig_reload(int signo) -{ - // Flush everything - bool not_used; - reload_acl_and_cache((THD*) 0,REFRESH_LOG, (TABLE_LIST*) 0, ¬_used); - signal(signo, SIG_ACK); -} - -static void sig_kill(int signo) -{ - if (!kill_in_progress) - { - abort_loop=1; // mark abort for threads - kill_server((void*) signo); - } - signal(signo, SIG_ACK); -} - -static void init_signals(void) -{ - signal(SIGQUIT, sig_kill); - signal(SIGKILL, sig_kill); - signal(SIGTERM, sig_kill); - signal(SIGINT, sig_kill); - signal(SIGHUP, sig_reload); // Flush everything - signal(SIGALRM, SIG_IGN); - signal(SIGBREAK,SIG_IGN); - signal_thread = pthread_self(); -} - -static void start_signal_handler(void) -{} - -static void check_data_home(const char *path) -{} - -#else /* if ! __WIN__ && ! __EMX__ */ +#else /* if ! __WIN__ */ #ifdef HAVE_LINUXTHREADS #define UNSAFE_DEFAULT_LINUX_THREADS 200 @@ -2556,33 +2536,6 @@ int STDCALL handle_kill(ulong ctrl_type) } #endif - -#ifdef OS2 -pthread_handler_t handle_shutdown(void *arg) -{ - my_thread_init(); - - // wait semaphore - pthread_cond_wait(&eventShutdown, NULL); - - // close semaphore and kill server - pthread_cond_destroy(&eventShutdown); - - /* - Exit main loop on main thread, so kill will be done from - main thread (this is thread 2) - */ - abort_loop = 1; - - // unblock select() - so_cancel(ip_sock); - so_cancel(unix_sock); - - return 0; -} -#endif - - static const char *load_default_groups[]= { #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE "mysql_cluster", @@ -2650,14 +2603,6 @@ static int init_common_variables(const char *conf_file_name, int argc, return 1; mysql_init_variables(); -#ifdef OS2 - { - // fix timezone for daylight saving - struct tm *ts = localtime(&start_time); - if (ts->tm_isdst > 0) - _timezone -= 3600; - } -#endif #ifdef HAVE_TZNAME { struct tm tm_tmp; @@ -2890,6 +2835,7 @@ static int init_thread_environment() (void) pthread_mutex_init(&LOCK_active_mi, MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_global_system_variables, MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_global_read_lock, MY_MUTEX_INIT_FAST); + (void) pthread_mutex_init(&LOCK_prepared_stmt_count, MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_uuid_generator, MY_MUTEX_INIT_FAST); #ifdef HAVE_OPENSSL (void) pthread_mutex_init(&LOCK_des_key_file,MY_MUTEX_INIT_FAST); @@ -3360,12 +3306,6 @@ static void create_shutdown_thread() // On "Stop Service" we have to do regular shutdown Service.SetShutdownEvent(hEventShutdown); #endif -#ifdef OS2 - pthread_cond_init(&eventShutdown, NULL); - pthread_t hThread; - if (pthread_create(&hThread,&connection_attrib,handle_shutdown,0)) - sql_print_warning("Can't create thread to handle shutdown requests"); -#endif #endif // EMBEDDED_LIBRARY } @@ -4292,10 +4232,6 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused))) create_new_thread(thd); } -#ifdef OS2 - // kill server must be invoked from thread 1! - kill_server(MYSQL_KILL_SIGNAL); -#endif decrement_handler_count(); DBUG_RETURN(0); } @@ -4724,7 +4660,8 @@ enum options_mysqld OPT_MAX_BINLOG_CACHE_SIZE, OPT_MAX_BINLOG_SIZE, OPT_MAX_CONNECTIONS, OPT_MAX_CONNECT_ERRORS, OPT_MAX_DELAYED_THREADS, OPT_MAX_HEP_TABLE_SIZE, - OPT_MAX_JOIN_SIZE, OPT_MAX_RELAY_LOG_SIZE, OPT_MAX_SORT_LENGTH, + OPT_MAX_JOIN_SIZE, OPT_MAX_PREPARED_STMT_COUNT, + OPT_MAX_RELAY_LOG_SIZE, OPT_MAX_SORT_LENGTH, OPT_MAX_SEEKS_FOR_KEY, OPT_MAX_TMP_TABLES, OPT_MAX_USER_CONNECTIONS, OPT_MAX_LENGTH_FOR_SORT_DATA, OPT_MAX_WRITE_LOCK_COUNT, OPT_BULK_INSERT_BUFFER_SIZE, @@ -5666,7 +5603,7 @@ log and this option does nothing anymore.", 0, 0, 0, 0, 0}, {"tmpdir", 't', "Path for temporary files. Several paths may be specified, separated by a " -#if defined(__WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined(__WIN__) || defined(__NETWARE__) "semicolon (;)" #else "colon (:)" @@ -5980,6 +5917,10 @@ The minimum value for this variable is 4096.", (gptr*) &global_system_variables.max_length_for_sort_data, (gptr*) &max_system_variables.max_length_for_sort_data, 0, GET_ULONG, REQUIRED_ARG, 1024, 4, 8192*1024L, 0, 1, 0}, + {"max_prepared_stmt_count", OPT_MAX_PREPARED_STMT_COUNT, + "Maximum numbrer of prepared statements in the server.", + (gptr*) &max_prepared_stmt_count, (gptr*) &max_prepared_stmt_count, + 0, GET_ULONG, REQUIRED_ARG, 16382, 0, 1*1024*1024, 0, 1, 0}, {"max_relay_log_size", OPT_MAX_RELAY_LOG_SIZE, "If non-zero: relay log will be rotated automatically when the size exceeds this value; if zero (the default): when the size exceeds max_binlog_size. 0 excepted, the minimum value for this variable is 4096.", (gptr*) &max_relay_log_size, (gptr*) &max_relay_log_size, 0, GET_ULONG, @@ -6864,6 +6805,10 @@ SHOW_VAR status_vars[]= { static void print_version(void) { set_server_version(); + /* + Note: the instance manager keys off the string 'Ver' so it can find the + version from the output of 'mysqld --version', so don't change it! + */ printf("%s Ver %s for %s on %s (%s)\n",my_progname, server_version,SYSTEM_TYPE,MACHINE_TYPE, MYSQL_COMPILATION_COMMENT); } diff --git a/sql/net_serv.cc b/sql/net_serv.cc index c80bb8bad9aad585e44ac7fe19f8c05066177339..9713e4bed449671244535f3ce8ba8baef5307c92 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -135,7 +135,7 @@ my_bool my_net_init(NET *net, Vio* vio) if (vio != 0) /* If real connection */ { net->fd = vio_fd(vio); /* For perl DBI/DBD */ -#if defined(MYSQL_SERVER) && !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) +#if defined(MYSQL_SERVER) && !defined(__WIN__) if (!(test_flags & TEST_BLOCKING)) { my_bool old_mode; @@ -604,7 +604,7 @@ net_real_write(NET *net,const char *packet,ulong len) if ((long) (length=vio_write(net->vio,pos,(uint32) (end-pos))) <= 0) { my_bool interrupted = vio_should_retry(net->vio); -#if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) +#if !defined(__WIN__) if ((interrupted || length==0) && !thr_alarm_in_use(&alarmed)) { if (!thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff)) @@ -631,7 +631,7 @@ net_real_write(NET *net,const char *packet,ulong len) } } else -#endif /* (!defined(__WIN__) && !defined(__EMX__)) */ +#endif /* !defined(__WIN__) */ if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) && interrupted) { @@ -803,7 +803,7 @@ my_real_read(NET *net, ulong *complen) DBUG_PRINT("info",("vio_read returned %d, errno: %d", length, vio_errno(net->vio))); -#if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) || defined(MYSQL_SERVER) +#if !defined(__WIN__) || defined(MYSQL_SERVER) /* We got an error that there was no data on the socket. We now set up an alarm to not 'read forever', change the socket to non blocking @@ -839,7 +839,7 @@ my_real_read(NET *net, ulong *complen) continue; } } -#endif /* (!defined(__WIN__) && !defined(__EMX__)) || defined(MYSQL_SERVER) */ +#endif /* (!defined(__WIN__) || defined(MYSQL_SERVER) */ if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) && interrupted) { /* Probably in MIT threads */ diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 42f723eb382b12ff215cbd4523a78130cfef0a4e..3fddd78017183f582ee4816eb30c760456f82f5c 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -4370,7 +4370,7 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param, sizeof(ROR_SCAN_INFO*)* best_num))) DBUG_RETURN(NULL); - memcpy(trp->first_scan, ror_scan_mark, best_num*sizeof(ROR_SCAN_INFO*)); + memcpy(trp->first_scan, tree->ror_scans, best_num*sizeof(ROR_SCAN_INFO*)); trp->last_scan= trp->first_scan + best_num; trp->is_covering= TRUE; trp->read_cost= total_cost; diff --git a/sql/partition_info.cc b/sql/partition_info.cc index c957efa71fbe483952a81fd9fdd2e91679d98491..a62b58a04ac382408e22cbd9ee0355db7e955715 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -708,6 +708,12 @@ bool partition_info::check_partition_info(handlerton **eng_type, partition_element *part_elem= part_it++; if (!is_sub_partitioned()) { + if (check_table_name(part_elem->partition_name, + strlen(part_elem->partition_name))) + { + my_error(ER_WRONG_PARTITION_NAME, MYF(0)); + goto end; + } if (part_elem->engine_type == NULL) part_elem->engine_type= default_engine_type; DBUG_PRINT("info", ("engine = %d", @@ -721,6 +727,12 @@ bool partition_info::check_partition_info(handlerton **eng_type, do { part_elem= sub_it++; + if (check_table_name(part_elem->partition_name, + strlen(part_elem->partition_name))) + { + my_error(ER_WRONG_PARTITION_NAME, MYF(0)); + goto end; + } if (part_elem->engine_type == NULL) part_elem->engine_type= default_engine_type; DBUG_PRINT("info", ("engine = %u", diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 34dcd80a23614e2fda6472fa1f16b2e8a1f94130..e207a0bf633036bbc2acf164165cac20a760138c 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -83,7 +83,7 @@ static int init_failsafe_rpl_thread(THD* thd) DBUG_RETURN(-1); } -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); diff --git a/sql/set_var.cc b/sql/set_var.cc index f2694f651f4388165f12a7d0c29fcbcb6126a30d..59e0c7b6ff76798b0c9b74429bcbb5c5a5ad16ae 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -161,6 +161,7 @@ static KEY_CACHE *create_key_cache(const char *name, uint length); void fix_sql_mode_var(THD *thd, enum_var_type type); static byte *get_error_count(THD *thd); static byte *get_warning_count(THD *thd); +static byte *get_prepared_stmt_count(THD *thd); /* Variable definition list @@ -311,6 +312,10 @@ sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size", &SV::max_join_size, fix_max_join_size); #endif +static sys_var_long_ptr_global +sys_max_prepared_stmt_count("max_prepared_stmt_count", + &max_prepared_stmt_count, + &LOCK_prepared_stmt_count); sys_var_long_ptr sys_max_relay_log_size("max_relay_log_size", &max_relay_log_size, fix_max_relay_log_size); @@ -604,6 +609,9 @@ static sys_var_readonly sys_warning_count("warning_count", OPT_SESSION, SHOW_LONG, get_warning_count); +static sys_var_readonly sys_prepared_stmt_count("prepared_stmt_count", + OPT_GLOBAL, SHOW_LONG, + get_prepared_stmt_count); /* alias for last_insert_id() to be compatible with Sybase */ #ifdef HAVE_REPLICATION @@ -847,6 +855,8 @@ SHOW_VAR init_vars[]= { {sys_max_join_size.name, (char*) &sys_max_join_size, SHOW_SYS}, {sys_max_length_for_sort_data.name, (char*) &sys_max_length_for_sort_data, SHOW_SYS}, + {sys_max_prepared_stmt_count.name, (char*) &sys_max_prepared_stmt_count, + SHOW_SYS}, {sys_max_relay_log_size.name, (char*) &sys_max_relay_log_size, SHOW_SYS}, {sys_max_seeks_for_key.name, (char*) &sys_max_seeks_for_key, SHOW_SYS}, {sys_max_sort_length.name, (char*) &sys_max_sort_length, SHOW_SYS}, @@ -900,6 +910,7 @@ SHOW_VAR init_vars[]= { SHOW_SYS}, {"pid_file", (char*) pidfile_name, SHOW_CHAR}, {"plugin_dir", (char*) opt_plugin_dir, SHOW_CHAR}, + {sys_prepared_stmt_count.name, (char*) &sys_prepared_stmt_count, SHOW_SYS}, {"port", (char*) &mysqld_port, SHOW_INT}, {sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS}, {"protocol_version", (char*) &protocol_version, SHOW_INT}, @@ -1367,29 +1378,40 @@ static void fix_server_id(THD *thd, enum_var_type type) server_id_supplied = 1; } -bool sys_var_long_ptr::check(THD *thd, set_var *var) + +sys_var_long_ptr:: +sys_var_long_ptr(const char *name_arg, ulong *value_ptr, + sys_after_update_func after_update_arg) + :sys_var_long_ptr_global(name_arg, value_ptr, + &LOCK_global_system_variables, after_update_arg) +{} + + +bool sys_var_long_ptr_global::check(THD *thd, set_var *var) { longlong v= var->value->val_int(); var->save_result.ulonglong_value= v < 0 ? 0 : v; return 0; } -bool sys_var_long_ptr::update(THD *thd, set_var *var) +bool sys_var_long_ptr_global::update(THD *thd, set_var *var) { ulonglong tmp= var->save_result.ulonglong_value; - pthread_mutex_lock(&LOCK_global_system_variables); + pthread_mutex_lock(guard); if (option_limits) *value= (ulong) getopt_ull_limit_value(tmp, option_limits); else *value= (ulong) tmp; - pthread_mutex_unlock(&LOCK_global_system_variables); + pthread_mutex_unlock(guard); return 0; } -void sys_var_long_ptr::set_default(THD *thd, enum_var_type type) +void sys_var_long_ptr_global::set_default(THD *thd, enum_var_type type) { + pthread_mutex_lock(guard); *value= (ulong) option_limits->def_value; + pthread_mutex_unlock(guard); } @@ -2824,6 +2846,13 @@ static byte *get_error_count(THD *thd) return (byte*) &thd->sys_var_tmp.long_value; } +static byte *get_prepared_stmt_count(THD *thd) +{ + pthread_mutex_lock(&LOCK_prepared_stmt_count); + thd->sys_var_tmp.ulong_value= prepared_stmt_count; + pthread_mutex_unlock(&LOCK_prepared_stmt_count); + return (byte*) &thd->sys_var_tmp.ulong_value; +} /**************************************************************************** Main handling of variables: diff --git a/sql/set_var.h b/sql/set_var.h index f62d6ce8d2a44fc4883921e6cc1c73a8fc190009..8076f10bb0a6ac9976e12465f7ddaf0b5cdcdcaa 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -48,11 +48,7 @@ public: sys_after_update_func after_update; bool no_support_one_shot; - sys_var(const char *name_arg) - :name(name_arg), after_update(0) - , no_support_one_shot(1) - { add_sys_var(); } - sys_var(const char *name_arg,sys_after_update_func func) + sys_var(const char *name_arg,sys_after_update_func func= NULL) :name(name_arg), after_update(func) , no_support_one_shot(1) { add_sys_var(); } @@ -83,15 +79,35 @@ public: }; -class sys_var_long_ptr :public sys_var +/* + A base class for all variables that require its access to + be guarded with a mutex. +*/ + +class sys_var_global: public sys_var +{ +protected: + pthread_mutex_t *guard; +public: + sys_var_global(const char *name_arg, sys_after_update_func after_update_arg, + pthread_mutex_t *guard_arg) + :sys_var(name_arg, after_update_arg), guard(guard_arg) {} +}; + + +/* + A global-only ulong variable that requires its access to be + protected with a mutex. +*/ + +class sys_var_long_ptr_global: public sys_var_global { public: ulong *value; - sys_var_long_ptr(const char *name_arg, ulong *value_ptr) - :sys_var(name_arg),value(value_ptr) {} - sys_var_long_ptr(const char *name_arg, ulong *value_ptr, - sys_after_update_func func) - :sys_var(name_arg,func), value(value_ptr) {} + sys_var_long_ptr_global(const char *name_arg, ulong *value_ptr, + pthread_mutex_t *guard_arg, + sys_after_update_func after_update_arg= NULL) + :sys_var_global(name_arg, after_update_arg, guard_arg), value(value_ptr) {} bool check(THD *thd, set_var *var); bool update(THD *thd, set_var *var); void set_default(THD *thd, enum_var_type type); @@ -101,6 +117,18 @@ public: }; +/* + A global ulong variable that is protected by LOCK_global_system_variables +*/ + +class sys_var_long_ptr :public sys_var_long_ptr_global +{ +public: + sys_var_long_ptr(const char *name_arg, ulong *value_ptr, + sys_after_update_func after_update_arg= NULL); +}; + + class sys_var_ulonglong_ptr :public sys_var { public: @@ -179,7 +207,7 @@ class sys_var_const_str :public sys_var public: char *value; // Pointer to const value sys_var_const_str(const char *name_arg, const char *value_arg) - :sys_var(name_arg), value((char*) value_arg) + :sys_var(name_arg),value((char*) value_arg) {} bool check(THD *thd, set_var *var) { @@ -226,10 +254,7 @@ public: class sys_var_thd :public sys_var { public: - sys_var_thd(const char *name_arg) - :sys_var(name_arg) - {} - sys_var_thd(const char *name_arg, sys_after_update_func func) + sys_var_thd(const char *name_arg, sys_after_update_func func= NULL) :sys_var(name_arg,func) {} bool check_type(enum_var_type type) { return 0; } diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index da2e0f4e275d18ec9090ae1b610aa3a1c63e13ca..8fe93cb99f38571846f847f7c9630563db4d89f5 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5829,3 +5829,11 @@ ER_PARTITION_NO_TEMPORARY ER_PARTITION_FUNCTION_IS_NOT_ALLOWED eng "This partition function is not allowed" swe "Denna partitioneringsfunktion är inte tillåten" +ER_NULL_IN_VALUES_LESS_THAN + eng "Not allowed to use NULL value in VALUES LESS THAN" + swe "Det är inte tillåtet att använda NULL-värden i VALUES LESS THAN" +ER_WRONG_PARTITION_NAME + eng "Incorrect partition name" + swe "Felaktigt partitionsnamn" +ER_MAX_PREPARED_STMT_COUNT_REACHED 42000 + eng "Can't create more than max_prepared_stmt_count statements (current value: %lu)" diff --git a/sql/slave.cc b/sql/slave.cc index 04ecc04ab174e732fcf74c28b777e8b725ddec3e..4ab9e951813498af909b9ead005c4a5bd8cdeff4 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2601,7 +2601,7 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) DBUG_RETURN(-1); } -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 7499cec614776e14593e5563fb6078e3351cdea2..e09fed180ba79dc012b156d80f3f91191e08c840 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -3000,13 +3000,13 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type) if (table) { -#if defined( __WIN__) || defined(OS2) +#if defined( __WIN__) /* Win32 can't drop a file that is open */ if (lock_type == TL_WRITE_ALLOW_READ) { lock_type= TL_WRITE; } -#endif /* __WIN__ || OS2 */ +#endif /* __WIN__ */ table_list->lock_type= lock_type; table_list->table= table; table->grant= table_list->grant; diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 5b060aa13c64de406d1462b75c86883edc3593d4..6e8a559ee07877cdd28d4deaae0e46e49d31e030 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -830,6 +830,11 @@ sql mode: 0x%lx, sort len: %lu, conncat len: %lu", flags.sql_mode, flags.max_sort_length, flags.group_concat_max_len)); + /* + Make InnoDB to release the adaptive hash index latch before + acquiring the query cache mutex. + */ + ha_release_temporary_latches(thd); STRUCT_LOCK(&structure_guard_mutex); if (query_cache_size == 0) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 123152c95ecead63bf6995705e2fe3ee458ab9a0..63d3b05352970b7d1e8da56ddc1abf378e6ff0d4 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -447,7 +447,7 @@ THD::~THD() net_end(&net); } #endif - stmt_map.destroy(); /* close all prepared statements */ + stmt_map.reset(); /* close all prepared statements */ DBUG_ASSERT(lock_info.n_cursors == 0); if (!cleanup_done) cleanup(); @@ -1769,21 +1769,72 @@ Statement_map::Statement_map() : } -int Statement_map::insert(Statement *statement) +/* + Insert a new statement to the thread-local statement map. + + DESCRIPTION + If there was an old statement with the same name, replace it with the + new one. Otherwise, check if max_prepared_stmt_count is not reached yet, + increase prepared_stmt_count, and insert the new statement. It's okay + to delete an old statement and fail to insert the new one. + + POSTCONDITIONS + All named prepared statements are also present in names_hash. + Statement names in names_hash are unique. + The statement is added only if prepared_stmt_count < max_prepard_stmt_count + last_found_statement always points to a valid statement or is 0 + + RETURN VALUE + 0 success + 1 error: out of resources or max_prepared_stmt_count limit has been + reached. An error is sent to the client, the statement is deleted. +*/ + +int Statement_map::insert(THD *thd, Statement *statement) { - int res= my_hash_insert(&st_hash, (byte *) statement); - if (res) - return res; - if (statement->name.str) + if (my_hash_insert(&st_hash, (byte*) statement)) { - if ((res= my_hash_insert(&names_hash, (byte*)statement))) - { - hash_delete(&st_hash, (byte*)statement); - return res; - } + /* + Delete is needed only in case of an insert failure. In all other + cases hash_delete will also delete the statement. + */ + delete statement; + my_error(ER_OUT_OF_RESOURCES, MYF(0)); + goto err_st_hash; + } + if (statement->name.str && my_hash_insert(&names_hash, (byte*) statement)) + { + my_error(ER_OUT_OF_RESOURCES, MYF(0)); + goto err_names_hash; } + pthread_mutex_lock(&LOCK_prepared_stmt_count); + /* + We don't check that prepared_stmt_count is <= max_prepared_stmt_count + because we would like to allow to lower the total limit + of prepared statements below the current count. In that case + no new statements can be added until prepared_stmt_count drops below + the limit. + */ + if (prepared_stmt_count >= max_prepared_stmt_count) + { + pthread_mutex_unlock(&LOCK_prepared_stmt_count); + my_error(ER_MAX_PREPARED_STMT_COUNT_REACHED, MYF(0), + max_prepared_stmt_count); + goto err_max; + } + prepared_stmt_count++; + pthread_mutex_unlock(&LOCK_prepared_stmt_count); + last_found_statement= statement; - return res; + return 0; + +err_max: + if (statement->name.str) + hash_delete(&names_hash, (byte*) statement); +err_names_hash: + hash_delete(&st_hash, (byte*) statement); +err_st_hash: + return 1; } @@ -1797,6 +1848,47 @@ void Statement_map::close_transient_cursors() } +void Statement_map::erase(Statement *statement) +{ + if (statement == last_found_statement) + last_found_statement= 0; + if (statement->name.str) + hash_delete(&names_hash, (byte *) statement); + + hash_delete(&st_hash, (byte *) statement); + pthread_mutex_lock(&LOCK_prepared_stmt_count); + DBUG_ASSERT(prepared_stmt_count > 0); + prepared_stmt_count--; + pthread_mutex_unlock(&LOCK_prepared_stmt_count); +} + + +void Statement_map::reset() +{ + /* Must be first, hash_free will reset st_hash.records */ + pthread_mutex_lock(&LOCK_prepared_stmt_count); + DBUG_ASSERT(prepared_stmt_count >= st_hash.records); + prepared_stmt_count-= st_hash.records; + pthread_mutex_unlock(&LOCK_prepared_stmt_count); + + my_hash_reset(&names_hash); + my_hash_reset(&st_hash); + last_found_statement= 0; +} + + +Statement_map::~Statement_map() +{ + /* Must go first, hash_free will reset st_hash.records */ + pthread_mutex_lock(&LOCK_prepared_stmt_count); + DBUG_ASSERT(prepared_stmt_count >= st_hash.records); + prepared_stmt_count-= st_hash.records; + pthread_mutex_unlock(&LOCK_prepared_stmt_count); + + hash_free(&names_hash); + hash_free(&st_hash); +} + bool select_dumpvar::send_data(List<Item> &items) { List_iterator_fast<Item_func_set_user_var> li(vars); diff --git a/sql/sql_class.h b/sql/sql_class.h index 60ff558ac48685bce8cf7fde08b3d03ef19ed016..53712aaf69e6a0c6e5323c3ae8aa4fd8a870a811 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -545,7 +545,7 @@ class Statement_map public: Statement_map(); - int insert(Statement *statement); + int insert(THD *thd, Statement *statement); Statement *find_by_name(LEX_STRING *name) { @@ -567,36 +567,16 @@ public: } return last_found_statement; } - void erase(Statement *statement) - { - if (statement == last_found_statement) - last_found_statement= 0; - if (statement->name.str) - { - hash_delete(&names_hash, (byte *) statement); - } - hash_delete(&st_hash, (byte *) statement); - } /* Close all cursors of this connection that use tables of a storage engine that has transaction-specific state and therefore can not survive COMMIT or ROLLBACK. Currently all but MyISAM cursors are closed. */ void close_transient_cursors(); + void erase(Statement *statement); /* Erase all statements (calls Statement destructor) */ - void reset() - { - my_hash_reset(&names_hash); - my_hash_reset(&st_hash); - transient_cursor_list.empty(); - last_found_statement= 0; - } - - void destroy() - { - hash_free(&names_hash); - hash_free(&st_hash); - } + void reset(); + ~Statement_map(); private: HASH st_hash; HASH names_hash; @@ -1179,6 +1159,7 @@ public: { my_bool my_bool_value; long long_value; + ulong ulong_value; } sys_var_tmp; struct { diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc index 33ad27b9d148ffe8efdbc87d8354b179fb6f152c..2784e71ccaedb79988afd4feeb3d5db641a1fb28 100644 --- a/sql/sql_cursor.cc +++ b/sql/sql_cursor.cc @@ -445,9 +445,8 @@ Sensitive_cursor::fetch(ulong num_rows) if (error == NESTED_LOOP_CURSOR_LIMIT) join->resume_nested_loop= TRUE; -#ifdef USING_TRANSACTIONS ha_release_temporary_latches(thd); -#endif + /* Grab free_list here to correctly free it in close */ thd->restore_active_arena(this, &backup_arena); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 804270992e500117e719d4d85a38dff4f32eff25..4365d5b04ce771216a374b33545a1639fe7acfbb 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -870,7 +870,6 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) TABLE *table; bool error; uint closed_log_tables= 0, lock_logger= 0; - TABLE_LIST *tmp_table_list; uint path_length; DBUG_ENTER("mysql_truncate"); diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 9dfa20da522e55aa8c5ca72f4b955c25e7d44cf0..18b63ba49a372d05f2a127c7a81ca7bc1f35c862 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -337,7 +337,6 @@ bool mysql_ha_read(THD *thd, TABLE_LIST *tables, ha_rows select_limit_cnt, ha_rows offset_limit_cnt) { TABLE_LIST *hash_tables; - TABLE **table_ptr; TABLE *table; MYSQL_LOCK *lock; List<Item> list; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 0aef574b3e46856ace86fea6f57dc9d862efb119..946c0536897347f8bcc304e59a51f55de13d4c11 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1713,7 +1713,7 @@ pthread_handler_t handle_delayed_insert(void *arg) since it does not find one in the list. */ pthread_mutex_lock(&di->mutex); -#if !defined( __WIN__) && !defined(OS2) /* Win32 calls this in pthread_create */ +#if !defined( __WIN__) /* Win32 calls this in pthread_create */ if (my_thread_init()) { strmov(thd->net.last_error,ER(thd->net.last_errno=ER_OUT_OF_RESOURCES)); @@ -1729,7 +1729,7 @@ pthread_handler_t handle_delayed_insert(void *arg) strmov(thd->net.last_error,ER(thd->net.last_errno=ER_OUT_OF_RESOURCES)); goto err; } -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index e1a519060aa3dbc81d3a69b0117aba91c284fb33..5a76066af8c3492f1d1a5aff501d9b6f4dc34620 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -80,7 +80,7 @@ inline int lex_casecmp(const char *s, const char *t, uint len) return (int) len+1; } -#include "lex_hash.h" +#include <lex_hash.h> void lex_init(void) diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 599480e616c7d979c090edb913edc675b7863940..bf8a6b8cfbe849884451855c2ce042165518195f 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -294,7 +294,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, { (void) fn_format(name, ex->file_name, mysql_real_data_home, "", MY_RELATIVE_PATH | MY_UNPACK_FILENAME); -#if !defined(__WIN__) && !defined(OS2) && ! defined(__NETWARE__) +#if !defined(__WIN__) && ! defined(__NETWARE__) MY_STAT stat_info; if (!my_stat(name,&stat_info,MYF(MY_WME))) DBUG_RETURN(TRUE); @@ -302,9 +302,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, // if we are not in slave thread, the file must be: if (!thd->slave_thread && !((stat_info.st_mode & S_IROTH) == S_IROTH && // readable by others -#ifndef __EMX__ (stat_info.st_mode & S_IFLNK) != S_IFLNK && // and not a symlink -#endif ((stat_info.st_mode & S_IFREG) == S_IFREG || (stat_info.st_mode & S_IFIFO) == S_IFIFO))) { diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 51d3cbbd41d8deae4608188107be27bef84b3a36..c63a5c23d60f7fc4704baa09150b0cc5e26d5834 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -118,10 +118,6 @@ static void test_signal(int sig_ptr) #if !defined( DBUG_OFF) MessageBox(NULL,"Test signal","DBUG",MB_OK); #endif -#if defined(OS2) - fprintf(stderr, "Test signal %d\n", sig_ptr); - fflush(stderr); -#endif } static void init_signals(void) { @@ -1092,7 +1088,7 @@ pthread_handler_t handle_one_connection(void *arg) pthread_detach_this_thread(); -#if !defined( __WIN__) && !defined(OS2) // Win32 calls this in pthread_create +#if !defined( __WIN__) // Win32 calls this in pthread_create /* The following calls needs to be done before we call DBUG_ macros */ if (!(test_flags & TEST_NO_THREADS) & my_thread_init()) { @@ -1116,7 +1112,7 @@ pthread_handler_t handle_one_connection(void *arg) #if defined(__WIN__) init_signals(); -#elif !defined(OS2) && !defined(__NETWARE__) +#elif !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); @@ -1240,7 +1236,7 @@ pthread_handler_t handle_bootstrap(void *arg) #ifndef EMBEDDED_LIBRARY pthread_detach_this_thread(); thd->thread_stack= (char*) &thd; -#if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) +#if !defined(__WIN__) && !defined(__NETWARE__) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); @@ -1969,9 +1965,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, #ifdef __WIN__ sleep(1); // must wait after eof() #endif -#ifndef OS2 send_eof(thd); // This is for 'quit request' -#endif close_connection(thd, 0, 1); close_thread_tables(thd); // Free before kill kill_mysql(); @@ -2991,6 +2985,11 @@ end_with_restore_list: #else { ulong priv=0; + ulong priv_needed= ALTER_ACL; + /* We also require DROP priv for ALTER TABLE ... DROP PARTITION */ + if (lex->alter_info.flags & ALTER_DROP_PARTITION) + priv_needed|= DROP_ACL; + if (lex->name && (!lex->name[0] || strlen(lex->name) > NAME_LEN)) { my_error(ER_WRONG_TABLE_NAME, MYF(0), lex->name); @@ -3015,7 +3014,7 @@ end_with_restore_list: else select_lex->db= first_table->db; } - if (check_access(thd, ALTER_ACL, first_table->db, + if (check_access(thd, priv_needed, first_table->db, &first_table->grant.privilege, 0, 0, test(first_table->schema_table)) || check_access(thd,INSERT_ACL | CREATE_ACL,select_lex->db,&priv,0,0, @@ -3026,7 +3025,7 @@ end_with_restore_list: goto error; /* purecov: inspected */ if (grant_option) { - if (check_grant(thd, ALTER_ACL, all_tables, 0, UINT_MAX, 0)) + if (check_grant(thd, priv_needed, all_tables, 0, UINT_MAX, 0)) goto error; if (lex->name && !test_all_bits(priv,INSERT_ACL | CREATE_ACL)) { // Rename of table diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 5cae38f27730aa5968da8e53e0d7d0395f5972a7..aae80f07b71efbb8a1fe449f79662e1650cd6c42 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -1614,6 +1614,21 @@ static int add_key_partition(File fptr, List<char> field_list) return err; } +static int add_name_string(File fptr, const char *name) +{ + int err; + String name_string("", 0, system_charset_info); + THD *thd= current_thd; + ulonglong save_options= thd->options; + + thd->options= 0; + append_identifier(thd, &name_string, name, + strlen(name)); + thd->options= save_options; + err= add_string_object(fptr, &name_string); + return err; +} + static int add_int(File fptr, longlong number) { llstr(number, buff); @@ -1912,7 +1927,7 @@ char *generate_partition_syntax(partition_info *part_info, part_info->part_state_len= part_state_id+1; } err+= add_partition(fptr); - err+= add_string(fptr, part_elem->partition_name); + err+= add_name_string(fptr, part_elem->partition_name); err+= add_space(fptr); err+= add_partition_values(fptr, part_info, part_elem); if (!part_info->is_sub_partitioned()) @@ -1928,7 +1943,7 @@ char *generate_partition_syntax(partition_info *part_info, { part_elem= sub_it++; err+= add_subpartition(fptr); - err+= add_string(fptr, part_elem->partition_name); + err+= add_name_string(fptr, part_elem->partition_name); err+= add_space(fptr); err+= add_partition_options(fptr, part_elem); if (j != (no_subparts-1)) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 3d42bfea1040eda72f423e1af08949bd3aba4cbf..b4e42dc47008fe98caa08244fa1689aa16cfcf0b 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -529,8 +529,16 @@ static int plugin_initialize(struct st_plugin_int *plugin) switch (plugin->plugin->type) { case MYSQL_STORAGE_ENGINE_PLUGIN: - sql_print_error("Storage Engine plugins are unsupported in this version."); - goto err; + if (ha_initialize_handlerton((handlerton*) plugin->plugin->info)) + { + sql_print_error("Plugin '%s' handlerton init returned error.", + plugin->name.str); + DBUG_PRINT("warning", ("Plugin '%s' handlerton init returned error.", + plugin->name.str)); + goto err; + } + break; + default: break; } diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index ced15b3f7285970cc512f08b7eac323428408627..e0cf9095a22ad727ad29a4e4ac3e0543a73b1887 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1848,10 +1848,13 @@ void mysql_stmt_prepare(THD *thd, const char *packet, uint packet_length) if (! (stmt= new Prepared_statement(thd, &thd->protocol_prep))) DBUG_VOID_RETURN; /* out of memory: error is set in Sql_alloc */ - if (thd->stmt_map.insert(stmt)) + if (thd->stmt_map.insert(thd, stmt)) { - delete stmt; - DBUG_VOID_RETURN; /* out of memory */ + /* + The error is set in the insert. The statement itself + will be also deleted there (this is how the hash works). + */ + DBUG_VOID_RETURN; } /* Reset warnings from previous command */ @@ -2028,11 +2031,17 @@ void mysql_sql_stmt_prepare(THD *thd) DBUG_VOID_RETURN; /* out of memory */ } - if (stmt->set_name(name) || thd->stmt_map.insert(stmt)) + /* Set the name first, insert should know that this statement has a name */ + if (stmt->set_name(name)) { delete stmt; DBUG_VOID_RETURN; } + if (thd->stmt_map.insert(thd, stmt)) + { + /* The statement is deleted and an error is set if insert fails */ + DBUG_VOID_RETURN; + } if (stmt->prepare(query, query_len+1)) { diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index e900d33f743bf5782c0acbc1460ea91beaeb7d8b..6ec010b8a4433b77649c8fcd99c45f7ce9475aac 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -464,6 +464,12 @@ impossible position"; (rli->group_master_log_pos) */ int4store((char*) packet->ptr()+LOG_POS_OFFSET+1, 0); + /* + if reconnect master sends FD event with `created' as 0 + to avoid destroying temp tables. + */ + int4store((char*) packet->ptr()+LOG_EVENT_MINIMAL_HEADER_LEN+ + ST_CREATED_OFFSET+1, (ulong) 0); /* send it */ if (my_net_write(net, (char*)packet->ptr(), packet->length())) { diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 19535f3182a75585f21a382a70e6307935b7670e..95433828a1e5432ec0189e17ba7e621c66f0dab6 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -753,6 +753,7 @@ mysqld_dump_create_info(THD *thd, TABLE_LIST *table_list, int fd) static const char *require_quotes(const char *name, uint name_length) { uint length; + bool pure_digit= TRUE; const char *end= name + name_length; for (; name < end ; name++) @@ -761,7 +762,11 @@ static const char *require_quotes(const char *name, uint name_length) length= my_mbcharlen(system_charset_info, chr); if (length == 1 && !system_charset_info->ident_map[chr]) return name; + if (length == 1 && (chr < '0' || chr > '9')) + pure_digit= FALSE; } + if (pure_digit) + return name; return 0; } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 2687b64841fe001216dc33376b7e9d8df148eb45..6cc2ad266e59e7d6a9a6943c5a37d02f4575cd06 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -72,12 +72,19 @@ uint filename_to_tablename(const char *from, char *to, uint to_length) uint tablename_to_filename(const char *from, char *to, uint to_length) { - uint errors; + uint errors, length; if (from[0] == '#' && !strncmp(from, MYSQL50_TABLE_NAME_PREFIX, MYSQL50_TABLE_NAME_PREFIX_LENGTH)) return my_snprintf(to, to_length, "%s", from + 9); - return strconvert(system_charset_info, from, - &my_charset_filename, to, to_length, &errors); + length= strconvert(system_charset_info, from, + &my_charset_filename, to, to_length, &errors); + if (check_if_legal_tablename(to) && + length + 4 < to_length) + { + memcpy(to + length, "@@@", 4); + length+= 3; + } + return length; } @@ -347,7 +354,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags) lpt->create_info, lpt->new_create_list, lpt->key_count, lpt->key_info_buffer, lpt->table->file)) || ((flags & WFRM_CREATE_HANDLER_FILES) && - lpt->table->file->create_handler_files(path))) + lpt->table->file->create_handler_files(path, lpt->create_info))) { error= 1; goto end; @@ -3625,11 +3632,7 @@ err: bool mysql_analyze_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt) { -#ifdef OS2 - thr_lock_type lock_type = TL_WRITE; -#else thr_lock_type lock_type = TL_READ_NO_INSERT; -#endif DBUG_ENTER("mysql_analyze_table"); DBUG_RETURN(mysql_admin_table(thd, tables, check_opt, @@ -3640,11 +3643,7 @@ bool mysql_analyze_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt) bool mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt) { -#ifdef OS2 - thr_lock_type lock_type = TL_WRITE; -#else thr_lock_type lock_type = TL_READ_NO_INSERT; -#endif DBUG_ENTER("mysql_check_table"); DBUG_RETURN(mysql_admin_table(thd, tables, check_opt, @@ -3964,6 +3963,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN]; char new_alias_buff[FN_REFLEN], *table_name, *db, *new_alias, *alias; char index_file[FN_REFLEN], data_file[FN_REFLEN]; + char path[FN_REFLEN]; char reg_path[FN_REFLEN+1]; ha_rows copied,deleted; ulonglong next_insert_id; @@ -4000,6 +4000,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, if (!new_db || !my_strcasecmp(table_alias_charset, new_db, db)) new_db= db; build_table_filename(reg_path, sizeof(reg_path), db, table_name, reg_ext); + build_table_filename(path, sizeof(path), db, table_name, ""); used_fields=create_info->used_fields; @@ -4773,6 +4774,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, KEY_PART_INFO *part_end; DBUG_PRINT("info", ("No new_table, checking add/drop index")); + table->file->prepare_for_alter(); if (index_add_count) { #ifdef XXX_TO_BE_DONE_LATER_BY_WL3020_AND_WL1892 @@ -4788,7 +4790,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, error= (mysql_create_frm(thd, reg_path, db, table_name, create_info, prepared_create_list, key_count, key_info_buffer, table->file) || - table->file->create_handler_files(reg_path)); + table->file->create_handler_files(path, create_info)); VOID(pthread_mutex_unlock(&LOCK_open)); if (error) goto err; @@ -4834,7 +4836,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, error= (mysql_create_frm(thd, reg_path, db, table_name, create_info, prepared_create_list, key_count, key_info_buffer, table->file) || - table->file->create_handler_files(reg_path)); + table->file->create_handler_files(path, create_info)); VOID(pthread_mutex_unlock(&LOCK_open)); if (error) goto err; @@ -4904,19 +4906,16 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } /*end of if (index_drop_count)*/ - if (index_add_count || index_drop_count) - { - /* - The final .frm file is already created as a temporary file - and will be renamed to the original table name later. - */ + /* + The final .frm file is already created as a temporary file + and will be renamed to the original table name later. + */ - /* Need to commit before a table is unlocked (NDB requirement). */ - DBUG_PRINT("info", ("Committing after add/drop index")); - if (ha_commit_stmt(thd) || ha_commit(thd)) - goto err; - committed= 1; - } + /* Need to commit before a table is unlocked (NDB requirement). */ + DBUG_PRINT("info", ("Committing before unlocking table")); + if (ha_commit_stmt(thd) || ha_commit(thd)) + goto err; + committed= 1; } /*end of if (! new_table) for add/drop index*/ @@ -4998,7 +4997,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } } -#if (!defined( __WIN__) && !defined( __EMX__) && !defined( OS2)) +#if !defined( __WIN__) if (table->file->has_transactions()) #endif { @@ -5011,7 +5010,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, table=0; // Marker that table is closed no_table_reopen= TRUE; } -#if (!defined( __WIN__) && !defined( __EMX__) && !defined( OS2)) +#if !defined( __WIN__) else table->file->extra(HA_EXTRA_FORCE_REOPEN); // Don't use this file anymore #endif @@ -5061,7 +5060,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, VOID(pthread_mutex_lock(&LOCK_open)); } /* Tell the handler that a new frm file is in place. */ - if (table->file->create_handler_files(reg_path)) + if (table->file->create_handler_files(path, create_info)) { VOID(pthread_mutex_unlock(&LOCK_open)); goto err; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e48748bcfa51ea70010135a0f76e4731e90f597c..2f91472ad2dd926fe5fbce714b620dc33d458c71 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3639,7 +3639,7 @@ part_definition: ; part_name: - ident_or_text + ident { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -3721,6 +3721,11 @@ part_func_max: yyerror(ER(ER_PARTITION_MAXVALUE_ERROR)); YYABORT; } + if (Lex->part_info->curr_part_elem->has_null_value) + { + yyerror(ER(ER_NULL_IN_VALUES_LESS_THAN)); + YYABORT; + } } ; diff --git a/sql/udf_example.cc b/sql/udf_example.cc index 73e49aef1786293997715eb9cdaff2abd88a2c5d..f4f936f34efedd94fa9fc650ef3c82dcebc1786d 100644 --- a/sql/udf_example.cc +++ b/sql/udf_example.cc @@ -497,7 +497,7 @@ char *metaphon(UDF_INIT *initid, UDF_ARGS *args, char *result, } } } - *length= (ulong) (max(0, result - org_result - 1)); + *length= (unsigned long) (result - org_result); return org_result; } diff --git a/sql/unireg.cc b/sql/unireg.cc index 7cb79e866f98c96ed628d314d790c23b11b739f2..bb197181e2aae0329d31197777e4cdee6f5b6a1a 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -330,7 +330,7 @@ int rea_create_table(THD *thd, const char *path, // Make sure mysql_create_frm din't remove extension DBUG_ASSERT(*fn_rext(frm_name)); - if (file->create_handler_files(path)) + if (file->create_handler_files(path, create_info)) goto err_handler; if (!create_info->frm_only && ha_create_table(thd, path, db, table_name, create_info,0)) diff --git a/sql/watchdog_mysqld b/sql/watchdog_mysqld deleted file mode 100755 index 0b26bb15acd8799ad34492e39670c7ac8c4fa299..0000000000000000000000000000000000000000 --- a/sql/watchdog_mysqld +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) 1979-1998 TcX AB & Monty Program KB & Detron HB -# -# This software is distributed with NO WARRANTY OF ANY KIND. No author or -# distributor accepts any responsibility for the consequences of using it, or -# for whether it serves any particular purpose or works at all, unless he or -# she says so in writing. Refer to the Free Public License (the "License") -# for full details. -# -# Every copy of this file must include a copy of the License, normally in a -# plain ASCII text file named PUBLIC. The License grants you the right to -# copy, modify and redistribute this file, but only under certain conditions -# described in the License. Among other things, the License requires that -# the copyright notice and this notice be preserved on all copies. */ - -# -# This scripts is started by safe_mysqld. It checks that MySQL is alive and -# working ( = answering to ping). If not, force mysqld down, check all -# tables and let safe_mysqld restart the server. -# -# For this to work, you should have procmail installed as the commands -# 'lockfile' and is used to sync with safe_mysqld -# -# NOTE: You should only use this script as a last resort if mysqld locks -# up unexpectedly in a critical application and you have to get it to -# work temporarily while waiting for a solution from mysql@tcx.se or -# mysql-support@tcx.se - - -use POSIX "waitpid"; - -# Arguments from safe_mysqld - -if ($#ARGV != 4) -{ - print "$0: Wrong number of arguments. Aborting\n"; - exit 1; -} - -$lock_file=shift; # File to lock to sync with safe_mysqld -$pid_file=shift; # Pid file used by mysqld -$bin_dir=shift; # Directory where mysqladmin is -$test_timeout=shift; # Time between testing if mysqld is alive -$wait_timeout=shift; # How long time to wait for ping - -$|=1; # autoflush - -# Check that mysqld has started properly - -for ($i=1 ; $i < 10 ; $i ++) -{ - last if (-e $pid_file); -} -sleep(1); # If server has just created the file -if (($mysqld_pid=`cat $pid_file`) <= 0) -{ - print "$0: Error: Invalid pidfile (contains '$mysqld_pid'). Aborting\n"; -} - -# Start pinging mysqld - -for (;;) -{ - sleep($test_timeout); # Time between tests - `lockfile $lock_file > /dev/null 2>&1`; # Sync with safe_mysqld - if (($pid=fork()) == 0) - { - setpgrp(0,0); - exit(int(system("$bin_dir/mysqladmin -w status > /dev/null")/256)); - } - for ($i=0; ($res=waitpid(-1,&POSIX::WNOHANG)) == 0 && $i < $wait_timeout ; $i++) - { - sleep(1); - } - if ($res == 0) - { - print "$0: Warning: mysqld hanged; Killing it so that safe_mysqld can restart it!\n"; - $mysqld_pid= `cat $pid_file`; - if ($mysqld_pid <= 0) - { - print "$0: Error: Invalid pidfile (contains '$mysqld_pid'). Aborting\n"; - system("rm -f $lock_file"); - kill(-9,$pid); - exit 1; - } - print "$0: Sending signal 15 to $mysqld_pid\n"; - kill(-15, $pid,$mysqld_pid); # Give it a last change to die nicely - for ($i=0 ; $i < 5 ; $i++) { sleep(1); } # Wait 5 seconds (signal safe) - waitpid(-1,&POSIX::WNOHANG); - if (kill(0,$pid,$mysqld_pid) != 0) - { - print "$0: Sending signal 9 to $mysqld_pid\n"; - kill(-9,$pid,$mysqld_pid); # No time to be nice anymore - sleep(2); # Give system time to clean up - waitpid(-1,&POSIX::WNOHANG); - if (kill(0,$mysqld_pid) != 0) - { - print "$0: Warning: mysqld don't want to die. Aborting\n"; - system("rm -f $lock_file"); - exit 1; - } - } - # safe_mysqld will not restart mysqld if the pid file doesn't exists - system("rm $pid_file"); - system("touch $pid_file"); - } - elsif ($res == -1) - { - print "$0: Error: waitpid returned $res when wating for pid $pid\nPlease verify that $0 is correct for your system\n"; - system("rm -f $lock_file"); - exit 1; - } - else - { - $exit_code=int($?/256); - if ($exit_code != 0) - { - print "$0: Warning: mysqladmin returned exit code $exit_code\n"; - } - else - { - #print "mysqld is alive and feeling well\n"; - } - } - system("rm -f $lock_file"); # safemysqld will now take over -} diff --git a/storage/Makefile.am b/storage/Makefile.am index 95c49b50890e550d267727e2f9709b4ce73561d5..900e486c6aceae33ad1658d8c291181a17030d29 100644 --- a/storage/Makefile.am +++ b/storage/Makefile.am @@ -20,8 +20,7 @@ AUTOMAKE_OPTIONS = foreign # These are built from source in the Docs directory EXTRA_DIST = -SUBDIRS = -DIST_SUBDIRS = . csv example bdb heap innobase myisam myisammrg ndb archive +SUBDIRS = @mysql_se_dirs@ # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/storage/archive/archive_test.c b/storage/archive/archive_test.c index e01a75404d82f989017589f7e39c901a1a13d8f1..043d743f1c99e419ffd9d275bd4230605959da79 100644 --- a/storage/archive/archive_test.c +++ b/storage/archive/archive_test.c @@ -1,5 +1,5 @@ +#include "azlib.h" #include <stdio.h> -#include <azlib.h> #define TEST_STRING "This is a test" #define BUFFER_LEN 1024 diff --git a/storage/archive/azio.c b/storage/archive/azio.c index ebf45c01710a6fd72d9cc505bd960046c6cc93a6..45bad474d95f95ac635c4fb262a97becc8ad047e 100644 --- a/storage/archive/azio.c +++ b/storage/archive/azio.c @@ -11,11 +11,11 @@ /* @(#) $Id$ */ +#include "azlib.h" + #include <stdio.h> #include <string.h> -#include "azlib.h" - static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ /* gzip flag byte */ diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index 537e5b1bcc4d904cf999422be3cd804cc619a203..aed861279d905c1e3bb62b7b457b067cf93b9139 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -281,13 +281,6 @@ static TINA_SHARE *get_share(const char *table_name, TABLE *table) MYF(0))) == -1) goto error2; - /* - We only use share->data_file for writing, so we scan to - the end to append - */ - if (my_seek(share->data_file, 0, SEEK_END, MYF(0)) == MY_FILEPOS_ERROR) - goto error2; - share->mapped_file= NULL; // We don't know the state as we just allocated it if (get_mmap(share, 0) > 0) goto error3; @@ -451,6 +444,7 @@ static int free_share(TINA_SHARE *share) result_code= 1; if (share->mapped_file) my_munmap(share->mapped_file, share->file_stat.st_size); + share->mapped_file= NULL; result_code= my_close(share->data_file,MYF(0)); hash_delete(&tina_open_tables, (byte*) share); thr_lock_delete(&share->lock); @@ -1228,9 +1222,10 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt) my_free((char*)buf, MYF(0)); - /* The file is ok */ if (rc == HA_ERR_END_OF_FILE) { + /* All rows were read ok until end of file, the file does not need repair. */ + /* If rows_recorded != rows_repaired, we should update rows_recorded value to the current amount of rows. @@ -1258,11 +1253,25 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt) if (my_munmap(share->mapped_file, share->file_stat.st_size)) DBUG_RETURN(-1); - - my_rename(repaired_fname, share->data_file_name, MYF(0)); - /* We set it to null so that get_mmap() won't try to unmap it */ share->mapped_file= NULL; + + /* + Close the "to"-file before renaming + On Windows one cannot rename a file, which descriptor + is still open. EACCES will be returned when trying to delete + the "to"-file in my_rename() + */ + my_close(share->data_file,MYF(0)); + + if (my_rename(repaired_fname, share->data_file_name, MYF(0))) + DBUG_RETURN(-1); + + /* Open the file again, it should now be repaired */ + if ((share->data_file= my_open(share->data_file_name, O_RDWR|O_APPEND, + MYF(0))) == -1) + DBUG_RETURN(-1); + if (get_mmap(share, 0) > 0) DBUG_RETURN(-1); diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc index 433fc3e78e0d2f49cce9a8b37a4091b54fa4e7de..caa64c10bbd8f9141b3132fb0ca478022eaf5d33 100644 --- a/storage/example/ha_example.cc +++ b/storage/example/ha_example.cc @@ -74,6 +74,8 @@ static handler* example_create_handler(TABLE_SHARE *table); static int example_init_func(); +static bool example_init_func_for_handlerton(); +static int example_panic(enum ha_panic_function flag); handlerton example_hton= { MYSQL_HANDLERTON_INTERFACE_VERSION, @@ -81,7 +83,7 @@ handlerton example_hton= { SHOW_OPTION_YES, "Example storage engine", DB_TYPE_EXAMPLE_DB, - (bool (*)()) example_init_func, + example_init_func_for_handlerton, 0, /* slot */ 0, /* savepoint size. */ NULL, /* close_connection */ @@ -99,7 +101,7 @@ handlerton example_hton= { NULL, /* close_cursor_read_view */ example_create_handler, /* Create a new handler */ NULL, /* Drop a database */ - NULL, /* Panic call */ + example_panic, /* Panic call */ NULL, /* Start Consistent Snapshot */ NULL, /* Flush logs */ NULL, /* Show status */ @@ -107,7 +109,10 @@ handlerton example_hton= { NULL, /* Alter table flags */ NULL, /* Alter tablespace */ NULL, /* Fill Files table */ - HTON_CAN_RECREATE + HTON_CAN_RECREATE, + NULL, + NULL, + NULL, }; /* Variables for example share methods */ @@ -126,32 +131,43 @@ static byte* example_get_key(EXAMPLE_SHARE *share,uint *length, return (byte*) share->table_name; } - static int example_init_func() { + DBUG_ENTER("example_init_func"); if (!example_init) { - example_init++; + example_init= 1; VOID(pthread_mutex_init(&example_mutex,MY_MUTEX_INIT_FAST)); (void) hash_init(&example_open_tables,system_charset_info,32,0,0, (hash_get_key) example_get_key,0,0); } - return 0; + DBUG_RETURN(0); } static int example_done_func() { + int error= 0; + DBUG_ENTER("example_done_func"); + if (example_init) { + example_init= 0; if (example_open_tables.records) - { - return 1; - } + error= 1; hash_free(&example_open_tables); pthread_mutex_destroy(&example_mutex); - example_init--; } - return 0; + DBUG_RETURN(0); +} + +static bool example_init_func_for_handlerton() +{ + return example_init_func(); +} + +static int example_panic(enum ha_panic_function flag) +{ + return example_done_func(); } diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c index abf1d1ea9a734f83e176a88b4ccc3c6f17a09eba..91bf438035f9134a440779ba2f4d3a516705dc49 100644 --- a/storage/myisam/mi_open.c +++ b/storage/myisam/mi_open.c @@ -96,7 +96,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) bzero((byte*) &info,sizeof(info)); my_realpath(name_buff, fn_format(org_name,name,"",MI_NAME_IEXT, - MY_UNPACK_FILENAME|MY_APPEND_EXT),MYF(0)); + MY_UNPACK_FILENAME),MYF(0)); pthread_mutex_lock(&THR_LOCK_myisam); if (!(old_info=test_if_reopen(name_buff))) { diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index e2c8b446322ececf3ad1a9009216b86451031c3a..7fcfb8fc65af1ff0b54c83a1ad1cab83e2ee7447 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -34,10 +34,6 @@ SET_STACK_SIZE(9000) /* Minimum stack size for program */ #define my_raid_delete(A,B,C) my_delete(A,B) #endif -#ifdef OS2 -#define _sanity(a,b) -#endif - static uint decode_bits; static char **default_argv; static const char *load_default_groups[]= { "myisamchk", 0 }; @@ -92,10 +88,6 @@ int main(int argc, char **argv) MY_INIT(argv[0]); my_progname_short= my_progname+dirname_length(my_progname); -#ifdef __EMX__ - _wildcard (&argc, &argv); -#endif - myisamchk_init(&check_param); check_param.opt_lock_memory=1; /* Lock memory if possible */ check_param.using_global_keycache = 0; @@ -378,7 +370,7 @@ static void usage(void) directly with '--variable-name=value'.\n\ -t, --tmpdir=path Path for temporary files. Multiple paths can be\n\ specified, separated by "); -#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) +#if defined( __WIN__) || defined(__NETWARE__) printf("semicolon (;)"); #else printf("colon (:)"); diff --git a/storage/ndb/Makefile.am b/storage/ndb/Makefile.am index 9adb67f89fc103108e5171c278b598c1f310c3f4..287368c5ae7fee2db9ebcd41e77f7d9cb33d9a7d 100644 --- a/storage/ndb/Makefile.am +++ b/storage/ndb/Makefile.am @@ -1,12 +1,12 @@ SUBDIRS = src tools . include @ndb_opt_subdirs@ DIST_SUBDIRS = src tools include test docs EXTRA_DIST = config ndbapi-examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in include $(top_srcdir)/storage/ndb/config/common.mk.am dist-hook: -rm -rf `find $(distdir) -type d -name SCCS` - -rm -rf `find $(distdir) -type d -name old_files` -rm -rf `find $(distdir)/ndbapi-examples -name '*.o'` list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" != "." -a "$$subdir" != "include"; then \ diff --git a/storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp b/storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp index f33c991249fb5f9a3c81fda5f4465c1619ccf58f..ab51ed17bc3337df74f1b5b3a788ea1eefa13b63 100644 --- a/storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp +++ b/storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp @@ -30,12 +30,17 @@ class CmRegReq { friend class Qmgr; public: - STATIC_CONST( SignalLength = 3 ); + STATIC_CONST( SignalLength = 5 + NdbNodeBitmask::Size ); private: Uint32 blockRef; Uint32 nodeId; - Uint32 version; // See ndb_version.h + Uint32 version; // See ndb_version.h + + Uint32 start_type; // As specified by cmd-line or mgm, NodeState::StartType + Uint32 latest_gci; // 0 means no fs + Uint32 skip_nodes[NdbNodeBitmask::Size]; // Nodes that does not _need_ + // to be part of restart }; /** @@ -59,8 +64,7 @@ private: * The dynamic id that the node reciving this signal has */ Uint32 dynamicId; - - Uint32 allNdbNodes[NdbNodeBitmask::Size]; + Uint32 allNdbNodes[NdbNodeBitmask::Size]; }; /** @@ -73,7 +77,7 @@ class CmRegRef { friend class Qmgr; public: - STATIC_CONST( SignalLength = 4 ); + STATIC_CONST( SignalLength = 7 + NdbNodeBitmask::Size ); enum ErrorCode { ZBUSY = 0, /* Only the president can send this */ @@ -85,14 +89,27 @@ public: * as president. */ ZNOT_PRESIDENT = 5, /* We are not president */ ZNOT_DEAD = 6, /* We are not dead when we are starting */ - ZINCOMPATIBLE_VERSION = 7 + ZINCOMPATIBLE_VERSION = 7, + ZINCOMPATIBLE_START_TYPE = 8 }; private: Uint32 blockRef; Uint32 nodeId; Uint32 errorCode; + /** + * Applicable if ZELECTION + */ Uint32 presidentCandidate; + Uint32 candidate_latest_gci; // 0 means non + + /** + * Data for sending node sending node + */ + Uint32 latest_gci; + Uint32 start_type; + Uint32 skip_nodes[NdbNodeBitmask::Size]; // Nodes that does not _need_ + // to be part of restart }; class CmAdd { diff --git a/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp b/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp index 6997938472c5d25f441cf1784461b71740adc23e..42e06fba3812aa7c727e44e8b06e0cc8a45ce082 100644 --- a/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp +++ b/storage/ndb/include/kernel/signaldata/DictTabInfo.hpp @@ -586,7 +586,8 @@ public: enum Unimplemented { ScanOptimised = 15, //Default updateOptimised - AttributeGroup = 1012 //Default 0 + AttributeGroup = 1012, //Default 0 + FileNo = 102 }; }; @@ -618,13 +619,13 @@ struct DictFilegroupInfo { */ FileName = 100, FileType = 101, - FileId = 102, - FileNo = 103, // Per Filegroup + FileId = 103, FileFGroupId = 104, FileFGroupVersion = 105, FileSizeHi = 106, FileSizeLo = 107, FileFreeExtents = 108, + FileVersion = 109, FileEnd = 199, // /** @@ -696,8 +697,8 @@ struct DictFilegroupInfo { struct File { char FileName[PATH_MAX]; Uint32 FileType; - Uint32 FileNo; Uint32 FileId; + Uint32 FileVersion; Uint32 FilegroupId; Uint32 FilegroupVersion; Uint32 FileSizeHi; diff --git a/storage/ndb/include/kernel/signaldata/DropFilegroup.hpp b/storage/ndb/include/kernel/signaldata/DropFilegroup.hpp index 70ca21c203b44dc6448ecbf8233e034822b856be..7cf275b1f9e1e721f6dc4a622c39de37bc52ee00 100644 --- a/storage/ndb/include/kernel/signaldata/DropFilegroup.hpp +++ b/storage/ndb/include/kernel/signaldata/DropFilegroup.hpp @@ -66,9 +66,10 @@ struct DropFilegroupRef { Busy = 701, NotMaster = 702, NoSuchFilegroup = 767, - FilegroupInUse = 768 + FilegroupInUse = 768, + InvalidSchemaObjectVersion = 774 }; - + Uint32 senderData; Uint32 senderRef; Uint32 masterNodeId; @@ -150,7 +151,8 @@ struct DropFileRef { NoError = 0, Busy = 701, NoSuchFile = 766, - DropUndoFileNotSupported = 769 + DropUndoFileNotSupported = 769, + InvalidSchemaObjectVersion = 774 }; Uint32 senderData; diff --git a/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp b/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp index ef165b6c16f7d05de5611588da9ffa6747895c31..3e3d926a999fc347ada557769bf17a454958059d 100644 --- a/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp +++ b/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp @@ -64,6 +64,7 @@ public: // 19 NDBFS Fipple with O_SYNC, O_CREATE etc. // 20-24 BACKUP NdbcntrTestStopOnError = 25, + NdbcntrStopNodes = 70, // 100-105 TUP and ACC // 200-240 UTIL // 300-305 TRIX diff --git a/storage/ndb/include/kernel/signaldata/FailRep.hpp b/storage/ndb/include/kernel/signaldata/FailRep.hpp index 44577f07fdc9986c03849053de32e1196502f875..f2250f1af73e54fd6195fdaff203b2bd42142ab0 100644 --- a/storage/ndb/include/kernel/signaldata/FailRep.hpp +++ b/storage/ndb/include/kernel/signaldata/FailRep.hpp @@ -18,6 +18,7 @@ #define FAIL_REP_HPP #include "SignalData.hpp" +#include <NodeBitmask.hpp> /** * @@ -27,6 +28,7 @@ class FailRep { * Sender(s) & Reciver(s) */ friend class Qmgr; + friend class Ndbcntr; /** * For printing @@ -35,7 +37,8 @@ class FailRep { public: STATIC_CONST( SignalLength = 2 ); - + STATIC_CONST( ExtraLength = 1 + NdbNodeBitmask::Size ); + enum FailCause { ZOWN_FAILURE=0, ZOTHER_NODE_WHEN_WE_START=1, @@ -43,13 +46,20 @@ public: ZSTART_IN_REGREQ=3, ZHEARTBEAT_FAILURE=4, ZLINK_FAILURE=5, - ZOTHERNODE_FAILED_DURING_START=6 + ZOTHERNODE_FAILED_DURING_START=6, + ZMULTI_NODE_SHUTDOWN = 7, + ZPARTITIONED_CLUSTER = 8 }; - + private: Uint32 failNodeId; Uint32 failCause; + /** + * Used when failCause == ZPARTITIONED_CLUSTER + */ + Uint32 president; + Uint32 partition[NdbNodeBitmask::Size]; }; diff --git a/storage/ndb/include/kernel/signaldata/StopReq.hpp b/storage/ndb/include/kernel/signaldata/StopReq.hpp index 8e6a0b90a91f06e59c75ec249fd8a696962dcbc8..70e195961cea72ec37f52a6ca64e9e610be463c4 100644 --- a/storage/ndb/include/kernel/signaldata/StopReq.hpp +++ b/storage/ndb/include/kernel/signaldata/StopReq.hpp @@ -32,7 +32,7 @@ class StopReq friend class MgmtSrvr; public: - STATIC_CONST( SignalLength = 9 ); + STATIC_CONST( SignalLength = 9 + NdbNodeBitmask::Size); public: Uint32 senderRef; @@ -49,29 +49,34 @@ public: Int32 readOperationTimeout; // Timeout before read operations are aborted Int32 operationTimeout; // Timeout before all operations are aborted + Uint32 nodes[NdbNodeBitmask::Size]; + static void setSystemStop(Uint32 & requestInfo, bool value); static void setPerformRestart(Uint32 & requestInfo, bool value); static void setNoStart(Uint32 & requestInfo, bool value); static void setInitialStart(Uint32 & requestInfo, bool value); - static void setEscalateOnNodeFail(Uint32 & requestInfo, bool value); /** * Don't perform "graceful" shutdown/restart... */ static void setStopAbort(Uint32 & requestInfo, bool value); + static void setStopNodes(Uint32 & requestInfo, bool value); static bool getSystemStop(const Uint32 & requestInfo); static bool getPerformRestart(const Uint32 & requestInfo); static bool getNoStart(const Uint32 & requestInfo); static bool getInitialStart(const Uint32 & requestInfo); - static bool getEscalateOnNodeFail(const Uint32 & requestInfo); static bool getStopAbort(const Uint32 & requestInfo); + static bool getStopNodes(const Uint32 & requestInfo); }; struct StopConf { STATIC_CONST( SignalLength = 2 ); Uint32 senderData; - Uint32 nodeState; + union { + Uint32 nodeState; + Uint32 nodeId; + }; }; class StopRef @@ -87,19 +92,22 @@ class StopRef friend class Ndbcntr; public: - STATIC_CONST( SignalLength = 2 ); + STATIC_CONST( SignalLength = 3 ); enum ErrorCode { OK = 0, NodeShutdownInProgress = 1, SystemShutdownInProgress = 2, NodeShutdownWouldCauseSystemCrash = 3, - TransactionAbortFailed = 4 + TransactionAbortFailed = 4, + UnsupportedNodeShutdown = 5, + MultiNodeShutdownNotMaster = 6 }; public: Uint32 senderData; Uint32 errorCode; + Uint32 masterNodeId; }; inline @@ -132,16 +140,16 @@ StopReq::getInitialStart(const Uint32 & requestInfo) inline bool -StopReq::getEscalateOnNodeFail(const Uint32 & requestInfo) +StopReq::getStopAbort(const Uint32 & requestInfo) { - return requestInfo & 16; + return requestInfo & 32; } inline bool -StopReq::getStopAbort(const Uint32 & requestInfo) +StopReq::getStopNodes(const Uint32 & requestInfo) { - return requestInfo & 32; + return requestInfo & 64; } @@ -187,24 +195,23 @@ StopReq::setInitialStart(Uint32 & requestInfo, bool value) inline void -StopReq::setEscalateOnNodeFail(Uint32 & requestInfo, bool value) +StopReq::setStopAbort(Uint32 & requestInfo, bool value) { if(value) - requestInfo |= 16; + requestInfo |= 32; else - requestInfo &= ~16; + requestInfo &= ~32; } inline void -StopReq::setStopAbort(Uint32 & requestInfo, bool value) +StopReq::setStopNodes(Uint32 & requestInfo, bool value) { if(value) - requestInfo |= 32; + requestInfo |= 64; else - requestInfo &= ~32; + requestInfo &= ~64; } - #endif diff --git a/storage/ndb/include/kernel/signaldata/TupFrag.hpp b/storage/ndb/include/kernel/signaldata/TupFrag.hpp index 53581dec56d61dd80e1b0aa408360864a521c79b..d8f2139de613541b0e253481e3e0ceaa8dd7776d 100644 --- a/storage/ndb/include/kernel/signaldata/TupFrag.hpp +++ b/storage/ndb/include/kernel/signaldata/TupFrag.hpp @@ -147,7 +147,8 @@ public: enum ErrorCode { NoError = 0, InvalidCharset = 743, - TooManyBitsUsed = 831 + TooManyBitsUsed = 831, + UnsupportedType = 906 }; private: Uint32 userPtr; diff --git a/storage/ndb/include/kernel/signaldata/WaitGCP.hpp b/storage/ndb/include/kernel/signaldata/WaitGCP.hpp index ebed28714d2c8bf7d22ab820b62a5be2d49c8dc7..be2a5b9d5f01c4cab30ee7e5e362711fd56e503d 100644 --- a/storage/ndb/include/kernel/signaldata/WaitGCP.hpp +++ b/storage/ndb/include/kernel/signaldata/WaitGCP.hpp @@ -46,7 +46,9 @@ public: Complete = 1, ///< Wait for a GCP to complete CompleteForceStart = 2, ///< Wait for a GCP to complete start one if needed CompleteIfRunning = 3, ///< Wait for ongoing GCP - CurrentGCI = 8 ///< Immediately return current GCI + CurrentGCI = 8, ///< Immediately return current GCI + BlockStartGcp = 9, + UnblockStartGcp = 10 }; Uint32 senderRef; @@ -70,11 +72,12 @@ class WaitGCPConf { //friend class Grep::PSCoord; public: - STATIC_CONST( SignalLength = 2 ); + STATIC_CONST( SignalLength = 3 ); public: Uint32 senderData; Uint32 gcp; + Uint32 blockStatus; }; class WaitGCPRef { diff --git a/storage/ndb/include/mgmapi/ndb_logevent.h b/storage/ndb/include/mgmapi/ndb_logevent.h index df4c228ec8ab7604219991ef82793d6cb20a2e84..73dd192e305ea283a312898a2093206c4d818fa5 100644 --- a/storage/ndb/include/mgmapi/ndb_logevent.h +++ b/storage/ndb/include/mgmapi/ndb_logevent.h @@ -169,9 +169,13 @@ extern "C" { NDB_LE_BackupAborted = 57, /** NDB_MGM_EVENT_CATEGORY_INFO */ - NDB_LE_EventBufferStatus = 58 + NDB_LE_EventBufferStatus = 58, /* 59 used */ + + /** NDB_MGM_EVENT_CATEGORY_STARTUP */ + NDB_LE_StartReport = 60 + /* 60 unused */ /* 61 unused */ /* 62 unused */ @@ -637,6 +641,13 @@ extern "C" { unsigned type; unsigned node_id; } SingleUser; + /** Log even data @ref NDB_LE_StartReport */ + struct { + unsigned report_type; + unsigned remaining_time; + unsigned bitmask_size; + unsigned bitmask_data[1]; + } StartReport; #ifndef DOXYGEN_FIX }; #else diff --git a/storage/ndb/include/util/NdbSqlUtil.hpp b/storage/ndb/include/util/NdbSqlUtil.hpp index 3e98dcd1805fd84dba0657a5a549489aa86d2357..36a75136c45e46b3a27a813539b4c15375a7f7ff 100644 --- a/storage/ndb/include/util/NdbSqlUtil.hpp +++ b/storage/ndb/include/util/NdbSqlUtil.hpp @@ -117,9 +117,9 @@ public: /** * Check character set. */ - static bool usable_in_pk(Uint32 typeId, const void* info); - static bool usable_in_hash_index(Uint32 typeId, const void* info); - static bool usable_in_ordered_index(Uint32 typeId, const void* info); + static uint check_column_for_pk(Uint32 typeId, const void* info); + static uint check_column_for_hash_index(Uint32 typeId, const void* info); + static uint check_column_for_ordered_index(Uint32 typeId, const void* info); /** * Get number of length bytes and length from variable length string. diff --git a/storage/ndb/src/common/debugger/EventLogger.cpp b/storage/ndb/src/common/debugger/EventLogger.cpp index cfa06e96085a5bf6aded7fec4c43c7c8e759baf5..db9b8417c0da3d1b0bd9504e82edf66d1b1a2151 100644 --- a/storage/ndb/src/common/debugger/EventLogger.cpp +++ b/storage/ndb/src/common/debugger/EventLogger.cpp @@ -743,6 +743,90 @@ void getTextSingleUser(QQQQ) { } } +void getTextStartReport(QQQQ) { + Uint32 time = theData[2]; + Uint32 sz = theData[3]; + char mask1[100]; + char mask2[100]; + char mask3[100]; + char mask4[100]; + BitmaskImpl::getText(sz, theData + 4 + (0 * sz), mask1); + BitmaskImpl::getText(sz, theData + 4 + (1 * sz), mask2); + BitmaskImpl::getText(sz, theData + 4 + (2 * sz), mask3); + BitmaskImpl::getText(sz, theData + 4 + (3 * sz), mask4); + switch(theData[1]){ + case 1: // Wait initial + BaseString::snprintf + (m_text, m_text_len, + "Initial start, waiting for %s to connect, " + " nodes [ all: %s connected: %s no-wait: %s ]", + mask4, mask1, mask2, mask3); + break; + case 2: // Wait partial + BaseString::snprintf + (m_text, m_text_len, + "Waiting until nodes: %s connects, " + "nodes [ all: %s connected: %s no-wait: %s ]", + mask4, mask1, mask2, mask3); + break; + case 3: // Wait partial timeout + BaseString::snprintf + (m_text, m_text_len, + "Waiting %u sec for nodes %s to connect, " + "nodes [ all: %s connected: %s no-wait: %s ]", + + time, mask4, mask1, mask2, mask3); + break; + case 4: // Wait partioned + BaseString::snprintf + (m_text, m_text_len, + "Waiting for non partitioned start, " + "nodes [ all: %s connected: %s missing: %s no-wait: %s ]", + + mask1, mask2, mask4, mask3); + break; + case 5: + BaseString::snprintf + (m_text, m_text_len, + "Waiting %u sec for non partitioned start, " + "nodes [ all: %s connected: %s missing: %s no-wait: %s ]", + + time, mask1, mask2, mask4, mask3); + break; + case 0x8000: // Do initial + BaseString::snprintf + (m_text, m_text_len, + "Initial start with nodes %s [ missing: %s no-wait: %s ]", + mask2, mask4, mask3); + break; + case 0x8001: // Do start + BaseString::snprintf + (m_text, m_text_len, + "Start with all nodes %s", + mask2); + break; + case 0x8002: // Do partial + BaseString::snprintf + (m_text, m_text_len, + "Start with nodes %s [ missing: %s no-wait: %s ]", + mask2, mask4, mask3); + break; + case 0x8003: // Do partioned + BaseString::snprintf + (m_text, m_text_len, + "Start potentially partitioned with nodes %s " + " [ missing: %s no-wait: %s ]", + mask2, mask4, mask3); + break; + default: + BaseString::snprintf + (m_text, m_text_len, + "Unknown startreport: 0x%x [ %s %s %s %s ]", + theData[1], + mask1, mask2, mask3, mask4); + } +} + #if 0 BaseString::snprintf(m_text, m_text_len, @@ -791,6 +875,7 @@ const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = { ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ), + ROW(StartReport, LogLevel::llStartUp, 4, Logger::LL_INFO ), // NODERESTART ROW(NR_CopyDict, LogLevel::llNodeRestart, 8, Logger::LL_INFO ), diff --git a/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp b/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp index b9f91c510c0650b107674439e5ad581a871b6992..e46fc2ff7da5157c1af807d3abd89286deb17371 100644 --- a/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp +++ b/storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp @@ -216,8 +216,8 @@ SimpleProperties::SP2StructMapping DictFilegroupInfo::FileMapping[] = { DFGIMAPS(File, FileName, FileName, 0, PATH_MAX), DFGIMAP2(File, FileType, FileType, 0, 1), - DFGIMAP(File, FileNo, FileNo), DFGIMAP(File, FileId, FileId), + DFGIMAP(File, FileVersion, FileVersion), DFGIMAP(File, FileFGroupId, FilegroupId), DFGIMAP(File, FileFGroupVersion, FilegroupVersion), DFGIMAP(File, FileSizeHi, FileSizeHi), @@ -254,8 +254,8 @@ void DictFilegroupInfo::File::init(){ memset(FileName, sizeof(FileName), 0); FileType = ~0; - FileNo = ~0; FileId = ~0; + FileVersion = ~0; FilegroupId = ~0; FilegroupVersion = ~0; FileSizeHi = 0; diff --git a/storage/ndb/src/common/portlib/old_dirs/memtest/Makefile b/storage/ndb/src/common/portlib/old_dirs/memtest/Makefile deleted file mode 100644 index 716cdbdea82969839645a3b1ab875206b27ef1e2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/memtest/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -CC=gcc -LD=$(CC) -SOURCES=memtest.c -OUTPUT=memtest -all: - $(CC) $(SOURCES) -o $(OUTPUT) - -debug: - $(CC) -g $(SOURCES) -o $(OUTPUT) - -clean: rm -rf *.o - rm -rf core* diff --git a/storage/ndb/src/common/portlib/old_dirs/memtest/munmaptest/Makefile b/storage/ndb/src/common/portlib/old_dirs/memtest/munmaptest/Makefile deleted file mode 100644 index ea8c5238d1cc2c33caf3c0d4651f092ec0b81275..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/memtest/munmaptest/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest -BIN_TARGET := munmaptest - - -SOURCES = munmaptest.cpp - -include $(NDB_TOP)/Epilogue.mk - - - - - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/Makefile b/storage/ndb/src/common/portlib/old_dirs/ose/Makefile deleted file mode 100644 index 4ef93b7824ab2f709cdc01632932671e23176885..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -include .defs.mk - -TYPE := - -PIC_ARCHIVE := Y -ARCHIVE_TARGET := portlib - -SOURCES = NdbOut.cpp - -SOURCES.c = NdbCondition.c \ - NdbMutex.c \ - NdbSleep.c \ - NdbTick.c \ - NdbEnv.c \ - NdbThread.c \ - NdbHost.c \ - NdbTCP.c - -ifeq ($(NDB_OS), SOFTOSE) - SOURCES += NdbMem_SoftOse.cpp -else - SOURCES.c += NdbMem.c -endif - -include $(NDB_TOP)/Epilogue.mk - - - - - - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbCondition.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbCondition.c deleted file mode 100644 index 73a2dbc5d66293cfa1a5f746a677e53c8644a372..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbCondition.c +++ /dev/null @@ -1,243 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbCondition.h" -#include <pthread.h> -#include <sys/types.h> -#include <malloc.h> - -#include <NdbMutex.h> - -#include "NdbConditionOSE.h" -struct NdbCondition -{ - PROCESS condserv_pid; -}; - - -OS_PROCESS(ndbcond_serv){ - - union SIGNAL* sig; - union SIGNAL* sig2; - - static const SIGSELECT sel_signal[] = {2, NDBCOND_SIGNAL, NDBCOND_BROADCAST}; - static const SIGSELECT sel_cond[] = {2, NDBCOND_WAIT, NDBCOND_WAITTIMEOUT}; - - for(;;){ - /* Receive condition wait signal */ - sig = receive((SIGSELECT*)sel_cond); - if (sig != NIL){ - switch (sig->sigNo){ - - case NDBCOND_WAIT: - /* Wait for a SIGNAL or BROADCAST from anyone */ - sig2 = receive((SIGSELECT*)sel_signal); - if (sig2 != NIL){ - switch(sig2->sigNo){ - - case NDBCOND_SIGNAL: - ((struct NdbCondWait*)sig)->status = NDBCOND_SIGNALED; - /* Send signal back to the one waiting for this condition */ - send(&sig, sender(&sig)); - break; - case NDBCOND_BROADCAST: - /* Not handled yet */ - assert(1==0); - break; - default: - assert(1==0); - break; - } - free_buf(&sig2); - } - break; - - case NDBCOND_WAITTIMEOUT: - /* Wait for a SIGNAL or BROADCAST from anyone */ - sig2 = receive_w_tmo(((struct NdbCondWaitTimeout*)sig)->timeout, (SIGSELECT*)sel_signal); - if (sig2 != NIL){ - switch(sig2->sigNo){ - - case NDBCOND_SIGNAL: - ((struct NdbCondWaitTimeout*)sig)->status = NDBCOND_SIGNALED; - /* Send signal back to the one waiting for this condition */ - send(&sig, sender(&sig)); - break; - case NDBCOND_BROADCAST: - /* Not handled yet */ - assert(1==0); - break; - default: - assert(1==0); - break; - } - free_buf(&sig2); - }else{ - ((struct NdbCondWaitTimeout*)sig)->status = NDBCOND_TIMEOUT; - send(&sig, sender(&sig)); - } - break; - - default: - assert(1==0); - break; - - } - } - - } -} - - -struct NdbCondition* -NdbCondition_Create(void) -{ - struct NdbCondition* tmpCond; - - - tmpCond = (struct NdbCondition*)malloc(sizeof(struct NdbCondition)); - - if (tmpCond == NULL) - return NULL; - - /** - * Start this process with a quite high - * priority, we want it to be responsive - */ - tmpCond->condserv_pid = create_process(OS_PRI_PROC, /* Process type */ - "ndbcond_serv", /* Name */ - ndbcond_serv, /* Entry point */ - 2048, /* Stack size */ - 10, /* Priority */ - 0, /* Time slice */ - get_bid(current_process()), /* Block */ - NULL, /* Redir table */ - 0, - 0); - - start(tmpCond->condserv_pid); - - return tmpCond; -} - - -int -NdbCondition_Wait(struct NdbCondition* p_cond, - NdbMutex* p_mutex) -{ - static const SIGSELECT sel_cond[] = {1, NDBCOND_WAIT}; - union SIGNAL* sig; - int result; - if (p_cond == NULL || p_mutex == NULL) - return 0; - - sig = alloc(sizeof(struct NdbCondWait), NDBCOND_WAIT); - send(&sig, p_cond->condserv_pid); - - NdbMutex_Unlock(p_mutex); - - result = 1; - while(NIL == (sig = receive_from((OSTIME)-1, (SIGSELECT*)sel_cond, p_cond->condserv_pid))); - if (sig != NIL){ - if (sig->sigNo == NDBCOND_WAIT){ - /* Condition is signaled */ - result = 0; - }else{ - assert(1==0); - } - free_buf(&sig); - - } - NdbMutex_Lock(p_mutex); - - return result; -} - - -int -NdbCondition_WaitTimeout(struct NdbCondition* p_cond, - NdbMutex* p_mutex, - int msecs){ - static const SIGSELECT sel_cond[] = {1, NDBCOND_WAITTIMEOUT}; - union SIGNAL* sig; - int result; - if (p_cond == NULL || p_mutex == NULL) - return 0; - - sig = alloc(sizeof(struct NdbCondWaitTimeout), NDBCOND_WAITTIMEOUT); - ((struct NdbCondWaitTimeout*)sig)->timeout = msecs; - send(&sig, p_cond->condserv_pid); - - NdbMutex_Unlock(p_mutex); - - result = 1; - while(NIL == (sig = receive_from((OSTIME)-1, (SIGSELECT*)sel_cond, p_cond->condserv_pid))); - if (sig != NIL){ - if (sig->sigNo == NDBCOND_WAITTIMEOUT){ - /* Condition is signaled */ - result = 0; - }else{ - assert(1==0); - } - free_buf(&sig); - - } - - NdbMutex_Lock(p_mutex); - - return result; -} - - -int -NdbCondition_Signal(struct NdbCondition* p_cond){ - - union SIGNAL* sig; - if (p_cond == NULL) - return 1; - - sig = alloc(sizeof(struct NdbCondSignal), NDBCOND_SIGNAL); - send(&sig, p_cond->condserv_pid); - - return 0; -} - - -int NdbCondition_Broadcast(struct NdbCondition* p_cond) -{ - union SIGNAL* sig; - if (p_cond == NULL) - return 1; - - sig = alloc(sizeof(struct NdbCondBroadcast), NDBCOND_BROADCAST); - send(&sig, p_cond->condserv_pid); - - return 0; -} - - -int NdbCondition_Destroy(struct NdbCondition* p_cond) -{ - if (p_cond == NULL) - return 1; - - kill_proc(p_cond->condserv_pid); - free(p_cond); - - return 0; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbConditionOSE.h b/storage/ndb/src/common/portlib/old_dirs/ose/NdbConditionOSE.h deleted file mode 100644 index bd0306261ccab2cf2db7f6f4d23e4d86afee5fa5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbConditionOSE.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NDB_CONDITIONOSE_H -#define NDB_CONDITIONOSE_H - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define NDBCOND_SIGBASE 4000 - -#define NDBCOND_WAIT (NDBCOND_SIGBASE + 1) /* !-SIGNO(struct NdbCondWait)-! */ -#define NDBCOND_WAITTIMEOUT (NDBCOND_SIGBASE + 2) /* !-SIGNO(struct NdbCondWaitTimeOut)-! */ -#define NDBCOND_SIGNAL (NDBCOND_SIGBASE + 3) /* !-SIGNO(struct NdbCondSignal)-! */ -#define NDBCOND_BROADCAST (NDBCOND_SIGBASE + 4) /* !-SIGNO(struct NdbCondBroadcast)-! */ - - -const char * -sigNo2String(SIGSELECT sigNo){ - switch(sigNo){ - case NDBCOND_WAIT: - return "NDBCOND_WAIT"; - break; - case NDBCOND_WAITTIMEOUT: - return "NDBCOND_WAITTIMEOUT"; - break; - case NDBCOND_SIGNAL: - return "NDBCOND_SIGNAL"; - break; - case NDBCOND_BROADCAST: - return "NDBCOND_BROADCAST"; - break; - } - return "UNKNOWN"; -} - -struct NdbCondWait -{ - SIGSELECT sigNo; - int status; -}; - -/** - * Signal received - */ -#define NDBCOND_SIGNALED 1 - -/** - * Timeout occured - */ -#define NDBCOND_TIMEOUT 2 - -struct NdbCondWaitTimeout -{ - SIGSELECT sigNo; - int timeout; - int status; - -}; - -struct NdbCondSignal -{ - SIGSELECT sigNo; -}; - -struct NdbCondBroadcast -{ - SIGSELECT sigNo; -}; - - -union SIGNAL -{ - SIGSELECT sigNo; - struct NdbCondWait condWait; - struct NdbCondWaitTimeout condWaitTimeout; - struct NdbCondSignal condSignal; - struct NdbCondBroadcast condBroadcast; -}; - - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbEnv.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbEnv.c deleted file mode 100644 index e2ac4d879d2d2c2a717f5efed0ee31a25d75e17d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbEnv.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbEnv.h" -#include <string.h> -#include <stdlib.h> - -const char* NdbEnv_GetEnv(const char* name, char * buf, int buflen) -{ - /** - * All environment variables are associated with a process - * it's important to read env from the correct process - * for now read from own process, own block and last the "ose_shell" process. - * - * TODO! What process should this be read from in the future? - * - */ - PROCESS proc_; - char* p = NULL; - /* Look in own process */ - p = get_env(current_process(), (char*)name); - if (p == NULL){ - /* Look in block process */ - p = get_env(get_bid(current_process()), (char*)name); - if (p == NULL){ - /* Look in ose_shell process */ - if (hunt("ose_shell", 0, &proc_, NULL)){ - p = get_env(proc_, (char*)name); - } - } - } - - if (p != NULL){ - strncpy(buf, p, buflen); - buf[buflen-1] = 0; - free_buf((union SIGNAL **)&p); - p = buf; - } - return p; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbHost.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbHost.c deleted file mode 100644 index f5e1e511c16580ee822bcb7513ddeee121520f91..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbHost.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbHost.h" -#include <unistd.h> - - -#include <inet.sig> -#include <string.h> - -union SIGNAL -{ - SIGSELECT sigNo; - struct InetIfUp inetIfUp; -}; - -int NdbHost_GetHostName(char* buf) -{ -#if 0 - extern PROCESS ose_inet_; - union SIGNAL *signal; - static const SIGSELECT select_if_up_reply[] = { 1, INET_IF_UP_REPLY }; - - signal = alloc(sizeof(struct InetIfUp), INET_IF_UP_REQUEST); - strcpy(signal->inetIfUp.ifName, "*"); - send((union SIGNAL **)&signal, ose_inet_); - signal = receive((SIGSELECT *)select_if_up_reply); - strcpy(buf, signal->inetIfUp.ifName); - free_buf(&signal); - return 0; -#else - return -1; -#endif -} - - -int NdbHost_GetProcessId(void) -{ - return current_process(); -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem.c deleted file mode 100644 index 0e38024bbb4c06b5f86660a8dd039af9923e2e14..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem.c +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbMem.h" - - -#if defined NDB_OSE -#include <ose.h> -#include <mms.sig> -#include <mms_err.h> -#include <string.h> -#include <stdio.h> -#include <NdbOut.hpp> - -// Page size for mp750 is 4096 bytes. -#define PAGE_SIZE 4096 - -/** - * NOTE: To use NdbMem from a OSE system ose_mms has to be defined - * as a "Required External Process"(see OSE Kernel User's Guide/R1.1(p. 148)), - * like this in osemain.con: - * EXT_PROC(ose_mms, ose_mms, 50000) - * This will create a global variable ose_mms_ that is used from here. - */ - -union SIGNAL -{ - SIGSELECT sigNo; - struct MmsAllocateRegionRequest mmsAllocateRegionRequest; - struct MmsAllocateRegionReply mmsAllocateRegionReply; - struct MmsFreeRegionRequest mmsFreeRegionRequest; - struct MmsFreeRegionReply mmsFreeRegionReply; -}; /* union SIGNAL */ - -extern PROCESS ose_mms_; - -void NdbMem_Create(void) -{ - /* Do nothing */ - return; -} - -void NdbMem_Destroy(void) -{ - /* Do nothing */ - return; -} - -void* NdbMem_Allocate(size_t size) -{ - static SIGSELECT allocate_sig[] = {1,MMS_ALLOCATE_REGION_REPLY}; - union SIGNAL *sig; - U32 allocatedAdress; - - assert(size > 0); - - // Only allowed to allocate multiples of the page size. - if(size % PAGE_SIZE != 0) { - size += PAGE_SIZE - size%PAGE_SIZE; - } - - /* Allocate a new region in the callers memory segment. */ - sig = alloc(sizeof(struct MmsAllocateRegionRequest), - MMS_ALLOCATE_REGION_REQUEST); - /* -1: The callers domain is used */ - sig->mmsAllocateRegionRequest.domain = (MemoryDomain)-1; - sig->mmsAllocateRegionRequest.useAddr = False; - sig->mmsAllocateRegionRequest.size = size; - sig->mmsAllocateRegionRequest.access = SuperRW_UserRW; - sig->mmsAllocateRegionRequest.resident = False; - sig->mmsAllocateRegionRequest.memory = CodeData; - sig->mmsAllocateRegionRequest.cache = CopyBack; - strcpy(sig->mmsAllocateRegionRequest.name, "NDB_DATA"); - send(&sig, ose_mms_); - sig = receive(allocate_sig); - - if (sig->mmsAllocateRegionReply.status != MMS_SUCCESS){ - /* Memory allocation failed, make sure this function returns NULL */ - allocatedAdress = NULL; - } - else{ - allocatedAdress = sig->mmsAllocateRegionReply.address; - } - free_buf(&sig); - return (void*)allocatedAdress; -} - -void* NdbMem_AllocateAlign(size_t size, size_t alignment) -{ - return NdbMem_Allocate(size); -} - - -void NdbMem_Free(void* ptr) -{ - static SIGSELECT free_sig[] = {1,MMS_FREE_REGION_REPLY}; - union SIGNAL *sig; - - /* Free a region in the callers domain. */ - sig = alloc(sizeof(struct MmsFreeRegionRequest), - MMS_FREE_REGION_REQUEST); - sig->mmsFreeRegionRequest.address = (U32)ptr; - send(&sig, ose_mms_); - sig = receive(free_sig); - - if (sig->mmsFreeRegionReply.status != MMS_SUCCESS){ - ndbout_c("The MMS Region could not be deallocated.\r\n"); - error(sig->mmsFreeRegionReply.status); - }; - free_buf(&sig); -} - -int NdbMem_MemLockAll(){ - return -1; -} - -int NdbMem_MemUnlockAll(){ - return -1; -} - -#else -#include <stdlib.h> - - -void NdbMem_Create() -{ - /* Do nothing */ - return; -} - -void NdbMem_Destroy() -{ - /* Do nothing */ - return; -} - -void* NdbMem_Allocate(size_t size) -{ - assert(size > 0); - return (void*)malloc(size); -} - -void* NdbMem_AllocateAlign(size_t size, size_t alignment) -{ - /* - return (void*)memalign(alignment, size); - TEMP fix - */ - return (void*)malloc(size); -} - - -void NdbMem_Free(void* ptr) -{ - free(ptr); -} - - -int NdbMem_MemLockAll(){ - return -1; -} - -int NdbMem_MemUnlockAll(){ - return -1; -} - -#endif diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem_SoftOse.cpp b/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem_SoftOse.cpp deleted file mode 100644 index cad22c0474b43320563818d5090528da64d2dc71..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMem_SoftOse.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "NdbMem.h" - -extern "C" -void NdbMem_Create() -{ -} -extern "C" -void NdbMem_Destroy() -{ -} - -extern "C" -void* NdbMem_Allocate(size_t size) -{ - return new char[size]; -} - -extern "C" -void* NdbMem_AllocateAlign(size_t size, size_t alignment) -{ - return NdbMem_Allocate(size); -} - -extern "C" -void NdbMem_Free(void* ptr) -{ - delete [] (char *)(ptr); -} - -int NdbMem_MemLockAll(){ - return -1; -} - -int NdbMem_MemUnlockAll(){ - return -1; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMutex.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbMutex.c deleted file mode 100644 index 253c0e412ffb373219d51dee65cf54892eaf30df..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbMutex.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbMutex.h" - -#include <pthread.h> -#include <stdlib.h> - - -NdbMutex* NdbMutex_Create(void) -{ - NdbMutex* pNdbMutex; - - pNdbMutex = create_sem(1); - - return pNdbMutex; -} - - -int NdbMutex_Destroy(NdbMutex* p_mutex) -{ - - if (p_mutex == NULL) - return -1; - - kill_sem(p_mutex); - - return 0; - -} - - -int NdbMutex_Lock(NdbMutex* p_mutex) -{ - if (p_mutex == NULL) - return -1; - - wait_sem(p_mutex); - - return 0; -} - - -int NdbMutex_Unlock(NdbMutex* p_mutex) -{ - - if (p_mutex == NULL) - return -1; - - signal_sem(p_mutex); - - return 0; -} - - -int NdbMutex_Trylock(NdbMutex* p_mutex) -{ - int result = -1; - - if (p_mutex != NULL) { - OSSEMVAL semvalue = get_sem(p_mutex); - if (semvalue > 0) { - wait_sem(p_mutex); - result = 0; - } - } - - return result; - -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbOut.cpp b/storage/ndb/src/common/portlib/old_dirs/ose/NdbOut.cpp deleted file mode 100644 index eb81bc9d9713c5aebd88aca97a92f6841344ab5a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbOut.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include "NdbOut.hpp" - -#if defined NDB_SOFTOSE -#include <dbgprintf.h> -#define printfunc dbgprintf -#else -#define printfunc printf -#endif - -static char const* const endlineString = "\r\n"; - -static int CtrlC = 0; -NdbOut ndbout; - - -NdbOut& NdbOut::operator<<(int aVal) -{ - char* format; - char HexFormat[] = "0x%08x"; - char DecFormat[] = "%d"; - if (isHexFormat == 1) - format = HexFormat; - else - format = DecFormat; - - printfunc(format, aVal); - return *this; -} - -NdbOut& NdbOut::operator<<(char* pVal) -{ - printfunc("%s", pVal); - return *this; -} - -NdbOut& NdbOut::endline() -{ - isHexFormat = 0; // Reset hex to normal, if user forgot this - printfunc(endlineString); - return *this; -} - -NdbOut& NdbOut::flushline() -{ - isHexFormat = 0; // Reset hex to normal, if user forgot this - return *this; -} - -NdbOut& NdbOut::setHexFormat(int _format) -{ - isHexFormat = _format; - return *this; -} - -NdbOut::NdbOut() -{ - CtrlC = 0; - isHexFormat = 0; -} - -NdbOut::~NdbOut() -{ -} - - - -extern "C" -void -ndbout_c(const char * fmt, ...){ - va_list ap; - char buf[1000]; - - va_start(ap, fmt); - if (fmt != 0) - vsnprintf(buf, sizeof(buf)-1, fmt, ap); - ndbout << buf << endl; - va_end(ap); -} diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbSleep.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbSleep.c deleted file mode 100644 index 70fd83117ef3862a7913e775891f47c7ed885006..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbSleep.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbSleep.h" - -#include <ose.h> - - -int -NdbSleep_MilliSleep(int milliseconds){ - const OSTIME millisecond_delay = milliseconds; - delay(millisecond_delay); - return 0; -} - -int -NdbSleep_SecSleep(int seconds){ - const OSTIME millisecond_delay = seconds*1000; - delay(millisecond_delay); - return 0; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbTCP.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbTCP.c deleted file mode 100644 index 9994697b3f8e3cf328d21b2f06a279b87a7b11d9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbTCP.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbTCP.h" - - -int -Ndb_getInAddr(struct in_addr * dst, const char *address) { - struct hostent * host; - host = gethostbyname_r(address); - if(host != 0){ - dst->s_addr = ((struct in_addr *) *host->h_addr_list)->s_addr; - free_buf((union SIGNAL **)&host); - return 0; - } - /* Try it as aaa.bbb.ccc.ddd. */ - dst->s_addr = inet_addr(address); - if (dst->s_addr != INADDR_NONE) { - return 0; - } - return -1; -} - - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbThread.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbThread.c deleted file mode 100644 index e46903a5cce8dc5cbfc2b217e522e662c687d850..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbThread.c +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbThread.h" -#include <pthread.h> -#include <malloc.h> -#include <string.h> -#include <NdbOut.hpp> - -#define MAX_THREAD_NAME 16 - - -struct NdbThread -{ - PROCESS pid; - char thread_name[MAX_THREAD_NAME]; -}; - -#define NDBTHREAD_SIGBASE 4010 - -#define NDBTHREAD_START (NDBTHREAD_SIGBASE + 1) /* !-SIGNO(struct NdbThreadStart)-! */ - -struct NdbThreadStart -{ - SIGSELECT sigNo; - NDB_THREAD_FUNC* func; - NDB_THREAD_ARG arg; -}; - -struct NdbThreadStopped -{ - SIGSELECT sigNo; -}; - -union SIGNAL -{ - SIGSELECT sigNo; - struct NdbThreadStart threadStart; - struct NdbThreadStopped threadStopped; -}; - -OS_PROCESS(thread_starter){ - static const SIGSELECT sel_start[] = {1, NDBTHREAD_START}; - struct NdbThreadStart* sigstart; - union SIGNAL* sig; - - /* Receive function adress and params */ - sig = receive((SIGSELECT*)sel_start); - if (sig != NIL){ - if (sig->sigNo == NDBTHREAD_START){ - sigstart = ((struct NdbThreadStart*)sig); - /* Execute function with arg */ - (*sigstart->func)(sigstart->arg); - }else{ - assert(1==0); - } - free_buf(&sig); - } -} - -struct NdbThread* NdbThread_Create(NDB_THREAD_FUNC* p_thread_func, - NDB_THREAD_ARG *p_thread_arg, - const NDB_THREAD_STACKSIZE thread_stack_size, - const char* p_thread_name, - NDB_THREAD_PRIO thread_prio) -{ - struct NdbThread* tmpThread; - union SIGNAL* sig; - int ose_prio; - - if (p_thread_func == NULL) - return 0; - - tmpThread = (struct NdbThread*)malloc(sizeof(struct NdbThread)); - if (tmpThread == NULL) - return NULL; - - strncpy((char*)&tmpThread->thread_name, p_thread_name, MAX_THREAD_NAME); - - switch(thread_prio){ - case NDB_THREAD_PRIO_HIGHEST: - ose_prio = 1; - break; - case NDB_THREAD_PRIO_HIGH: - ose_prio = 10; - break; - case NDB_THREAD_PRIO_MEAN: - ose_prio = 16; - break; - case NDB_THREAD_PRIO_LOW: - ose_prio = 23; - break; - case NDB_THREAD_PRIO_LOWEST: - ose_prio = 31; - break; - default: - return NULL; - break; - } - - /* Create process */ - tmpThread->pid = create_process(OS_PRI_PROC, /* Process type */ - (char*)p_thread_name, /* Name */ - thread_starter, /* Entry point */ - thread_stack_size, /* Stack size */ - ose_prio, /* Priority */ - 0, /* Time slice */ - get_bid(current_process()), /* Block */ - NULL, /* Redir table */ - 0, - 0); - - /* Send params to process */ - sig = alloc(sizeof(struct NdbThreadStart), NDBTHREAD_START); - ((struct NdbThreadStart*)sig)->func = p_thread_func; - ((struct NdbThreadStart*)sig)->arg = p_thread_arg; - send(&sig, tmpThread->pid); - - /* Enable NDB_HOME environment variable for the thread */ - { - /* Hardcoded NDB_HOME...*/ - char* ndb_home_env = get_env(current_process(), "NDB_HOME"); - if (ndb_home_env != NULL) - { - /* Set NDB_HOME */ - int rc = set_env(tmpThread->pid, "NDB_HOME", ndb_home_env); - if (rc != 0) - { - /* Not really a problem */ - } - } /* Enable NDB_HOME */ - } - - /* Start process */ - start(tmpThread->pid); - - return tmpThread; -} - - - -void NdbThread_Destroy(struct NdbThread** p_thread) -{ - free(* p_thread); * p_thread = 0; -} - - -int NdbThread_WaitFor(struct NdbThread* p_wait_thread, void** status) -{ - while(hunt(p_wait_thread->thread_name, 0, NULL, NULL) != 0) - delay(1000); - - * status = 0; - - return 0; -} - - -void NdbThread_Exit(int a) -{ - kill_proc(current_process()); -} - - -int NdbThread_SetConcurrencyLevel(int level) -{ - return 0; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/ose/NdbTick.c b/storage/ndb/src/common/portlib/old_dirs/ose/NdbTick.c deleted file mode 100644 index c3deae2bec333838851ddc7f4b8f8c96bdf40cf0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/ose/NdbTick.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbTick.h" -#include <time.h> - -#define NANOSEC_PER_SEC 1000000000 -#define MICROSEC_PER_SEC 1000000 -#define MILLISEC_PER_SEC 1000 -#define MICROSEC_PER_MILLISEC 1000 -#define MILLISEC_PER_NANOSEC 1000000 - -#ifdef NDB_OSE -NDB_TICKS NdbTick_CurrentMillisecond(void) -{ - return get_ticks()*4; -} -#include <rtc.h> -int -NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros){ - struct TimePair tvp; - rtc_get_time(&tvp); - * secs = tvp.seconds; - * micros = tvp.micros; - return 0; -} - -#endif - -#if defined NDB_SOFTOSE -NDB_TICKS NdbTick_CurrentMillisecond(void) -{ - /** - * Depends on the interval counter in solaris - * that means each "tick" in OSE is really 10 milliseconds - */ - return get_ticks()*10; -} - -#include <rtc.h> -int -NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros){ - struct TimePair tvp; - rtc_get_time(&tvp); - * secs = tvp.seconds; - * micros = tvp.micros; - return 0; -} -#endif - diff --git a/storage/ndb/src/common/portlib/old_dirs/test/Makefile b/storage/ndb/src/common/portlib/old_dirs/test/Makefile deleted file mode 100644 index 4edc98ede75ed1ba0cfae611953185329d4a94ba..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/test/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include .defs.mk - -TYPE := kernel - -BIN_TARGET := PortLibTest -BIN_TARGET_ARCHIVES := portlib general - -SOURCES = NdbPortLibTest.cpp - -include $(NDB_TOP)/Epilogue.mk - - - - - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/Makefile b/storage/ndb/src/common/portlib/old_dirs/win32/Makefile deleted file mode 100644 index bb29ac5547eb0d8bf1cba99854f7bed7b841b549..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -include .defs.mk - -TYPE := util - -PIC_ARCHIVE := Y -ARCHIVE_TARGET := portlib - -SOURCES.c = NdbCondition.c \ - NdbMutex.c \ - NdbSleep.c \ - NdbTick.c \ - NdbEnv.c \ - NdbThread.c \ - NdbHost.c \ - NdbTCP.c \ - NdbDaemon.c - -ifeq ($(NDB_OS), SOFTOSE) - SOURCES += NdbMem_SoftOse.cpp -else - SOURCES.c += NdbMem.c -endif - -include $(NDB_TOP)/Epilogue.mk - - - - - - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbCondition.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbCondition.c deleted file mode 100644 index 77869b673deacdf197bcc7f443da81f16975b963..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbCondition.c +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <winsock2.h> -#include <ws2tcpip.h> -#include <windows.h> -#include <sys/types.h> - -#include "NdbCondition.h" -#include <NdbMutex.h> - - -struct NdbCondition -{ - long nWaiters; - NdbMutex* pNdbMutexWaitersLock; - HANDLE hSemaphore; - HANDLE hEventWaitersDone; - int bWasBroadcast; -}; - - -struct NdbCondition* -NdbCondition_Create(void) -{ - int result = 0; - struct NdbCondition* pNdbCondition = (struct NdbCondition*)malloc(sizeof(struct NdbCondition)); - if(!pNdbCondition) - return 0; - - pNdbCondition->nWaiters = 0; - pNdbCondition->bWasBroadcast = 0; - if(!(pNdbCondition->hSemaphore = CreateSemaphore(0, 0, MAXLONG, 0))) - result = -1; - else if(!(pNdbCondition->pNdbMutexWaitersLock = NdbMutex_Create())) - result = -1; - else if(!(pNdbCondition->hEventWaitersDone = CreateEvent(0, 0, 0, 0))) - result = -1; - - assert(!result); - return pNdbCondition; -} - - -int -NdbCondition_Wait(struct NdbCondition* p_cond, - NdbMutex* p_mutex) -{ - int result; - int bLastWaiter; - if(!p_cond || !p_mutex) - return 1; - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - p_cond->nWaiters++; - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - - if(NdbMutex_Unlock(p_mutex)) - return -1; - result = WaitForSingleObject (p_cond->hSemaphore, INFINITE); - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - p_cond->nWaiters--; - bLastWaiter = (p_cond->bWasBroadcast && p_cond->nWaiters==0); - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - - if(result==WAIT_OBJECT_0 && bLastWaiter) - SetEvent(p_cond->hEventWaitersDone); - - NdbMutex_Lock(p_mutex); - return result; -} - - -int -NdbCondition_WaitTimeout(struct NdbCondition* p_cond, - NdbMutex* p_mutex, - int msecs) -{ - int result; - int bLastWaiter; - if (!p_cond || !p_mutex) - return 1; - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - p_cond->nWaiters++; - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - if(msecs<0) - msecs = 0; - - if(NdbMutex_Unlock(p_mutex)) - return -1; - result = WaitForSingleObject(p_cond->hSemaphore, msecs); - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - p_cond->nWaiters--; - bLastWaiter = (p_cond->bWasBroadcast && p_cond->nWaiters==0); - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - - if(result!=WAIT_OBJECT_0) - result = -1; - - if(bLastWaiter) - SetEvent(p_cond->hEventWaitersDone); - - NdbMutex_Lock(p_mutex); - return result; -} - - -int -NdbCondition_Signal(struct NdbCondition* p_cond) -{ - int bHaveWaiters; - if(!p_cond) - return 1; - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - bHaveWaiters = (p_cond->nWaiters > 0); - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - - if(bHaveWaiters) - return (ReleaseSemaphore(p_cond->hSemaphore, 1, 0) ? 0 : -1); - else - return 0; -} - - -int NdbCondition_Broadcast(struct NdbCondition* p_cond) -{ - int bHaveWaiters; - int result = 0; - if(!p_cond) - return 1; - - NdbMutex_Lock(p_cond->pNdbMutexWaitersLock); - bHaveWaiters = 0; - if(p_cond->nWaiters > 0) - { - p_cond->bWasBroadcast = !0; - bHaveWaiters = 1; - } - NdbMutex_Unlock(p_cond->pNdbMutexWaitersLock); - if(bHaveWaiters) - { - if(!ReleaseSemaphore(p_cond->hSemaphore, p_cond->nWaiters, 0)) - result = -1; - else if(WaitForSingleObject (p_cond->hEventWaitersDone, INFINITE) != WAIT_OBJECT_0) - result = -1; - p_cond->bWasBroadcast = 0; - } - return result; -} - - -int NdbCondition_Destroy(struct NdbCondition* p_cond) -{ - int result; - if(!p_cond) - return 1; - - CloseHandle(p_cond->hEventWaitersDone); - NdbMutex_Destroy(p_cond->pNdbMutexWaitersLock); - result = (CloseHandle(p_cond->hSemaphore) ? 0 : -1); - - free(p_cond); - return 0; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbDaemon.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbDaemon.c deleted file mode 100644 index 972fb1b88d8a4c5d1fa0a159a350168534bb8c62..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbDaemon.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> -#include "NdbDaemon.h" - -#define NdbDaemon_ErrorSize 500 -long NdbDaemon_DaemonPid; -int NdbDaemon_ErrorCode; -char NdbDaemon_ErrorText[NdbDaemon_ErrorSize]; - -int -NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags) -{ - /* Fail */ - snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "Daemon mode not implemented"); - return -1; -} - -#ifdef NDB_DAEMON_TEST - -int -main() -{ - if (NdbDaemon_Make("test.pid", "test.log", 0) == -1) { - fprintf(stderr, "NdbDaemon_Make: %s\n", NdbDaemon_ErrorText); - return 1; - } - sleep(10); - return 0; -} - -#endif diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbEnv.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbEnv.c deleted file mode 100644 index 0df703a5e97b152e348420b0adf313b73026fe0f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbEnv.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbEnv.h" -#include <string.h> -#include <stdlib.h> - -const char* NdbEnv_GetEnv(const char* name, char * buf, int buflen) -{ - char* p = NULL; - p = getenv(name); - - if (p != NULL && buf != NULL){ - strncpy(buf, p, buflen); - buf[buflen-1] = 0; - } - return p; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbHost.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbHost.c deleted file mode 100644 index f91dd1a531c5e39253dbe9b5caed03c6d23dc9b1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbHost.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbHost.h" -#include <windows.h> -#include <process.h> - - -int NdbHost_GetHostName(char* buf) -{ - /* We must initialize TCP/IP if we want to call gethostname */ - WORD wVersionRequested; - WSADATA wsaData; - int err; - - wVersionRequested = MAKEWORD( 2, 0 ); - err = WSAStartup( wVersionRequested, &wsaData ); - if ( err != 0 ) { - /** - * Tell the user that we couldn't find a usable - * WinSock DLL. - */ - return -1; - } - - /* Get host name */ - if(gethostname(buf, MAXHOSTNAMELEN)) - { - return -1; - } - return 0; -} - - -int NdbHost_GetProcessId(void) -{ - return _getpid(); -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbMem.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbMem.c deleted file mode 100644 index ab7123b0a29fb06f9c71bd589a173b01e5342021..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbMem.c +++ /dev/null @@ -1,235 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <windows.h> - -#include "NdbMem.h" - - -struct AWEINFO -{ - SIZE_T dwSizeInBytesRequested; - ULONG_PTR nNumberOfPagesRequested; - ULONG_PTR nNumberOfPagesActual; - ULONG_PTR nNumberOfPagesFreed; - ULONG_PTR* pnPhysicalMemoryPageArray; - void* pRegionReserved; -}; - -const size_t cNdbMem_nMaxAWEinfo = 256; -size_t gNdbMem_nAWEinfo = 0; - -struct AWEINFO* gNdbMem_pAWEinfo = 0; - - -void ShowLastError(const char* szContext, const char* szFunction) -{ - DWORD dwError = GetLastError(); - LPVOID lpMsgBuf; - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - dwError, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR)&lpMsgBuf, - 0, - NULL - ); - printf("%s : %s failed : %lu : %s\n", szContext, szFunction, dwError, (char*)lpMsgBuf); - LocalFree(lpMsgBuf); -} - - - -void NdbMem_Create() -{ - // Address Windowing Extensions - struct PRIVINFO - { - DWORD Count; - LUID_AND_ATTRIBUTES Privilege[1]; - } Info; - - HANDLE hProcess = GetCurrentProcess(); - HANDLE hToken; - if(!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken)) - { - ShowLastError("NdbMem_Create", "OpenProcessToken"); - } - - Info.Count = 1; - Info.Privilege[0].Attributes = SE_PRIVILEGE_ENABLED; - if(!LookupPrivilegeValue(0, SE_LOCK_MEMORY_NAME, &(Info.Privilege[0].Luid))) - { - ShowLastError("NdbMem_Create", "LookupPrivilegeValue"); - } - - if(!AdjustTokenPrivileges(hToken, FALSE, (PTOKEN_PRIVILEGES)&Info, 0, 0, 0)) - { - ShowLastError("NdbMem_Create", "AdjustTokenPrivileges"); - } - - if(!CloseHandle(hToken)) - { - ShowLastError("NdbMem_Create", "CloseHandle"); - } - - return; -} - -void NdbMem_Destroy() -{ - /* Do nothing */ - return; -} - -void* NdbMem_Allocate(size_t size) -{ - // Address Windowing Extensions - struct AWEINFO* pAWEinfo; - HANDLE hProcess; - SYSTEM_INFO sysinfo; - - if(!gNdbMem_pAWEinfo) - { - gNdbMem_pAWEinfo = VirtualAlloc(0, - sizeof(struct AWEINFO)*cNdbMem_nMaxAWEinfo, - MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); - } - - assert(gNdbMem_nAWEinfo < cNdbMem_nMaxAWEinfo); - pAWEinfo = gNdbMem_pAWEinfo+gNdbMem_nAWEinfo++; - - hProcess = GetCurrentProcess(); - GetSystemInfo(&sysinfo); - pAWEinfo->nNumberOfPagesRequested = (size+sysinfo.dwPageSize-1)/sysinfo.dwPageSize; - pAWEinfo->pnPhysicalMemoryPageArray = VirtualAlloc(0, - sizeof(ULONG_PTR)*pAWEinfo->nNumberOfPagesRequested, - MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); - pAWEinfo->nNumberOfPagesActual = pAWEinfo->nNumberOfPagesRequested; - if(!AllocateUserPhysicalPages(hProcess, &(pAWEinfo->nNumberOfPagesActual), pAWEinfo->pnPhysicalMemoryPageArray)) - { - ShowLastError("NdbMem_Allocate", "AllocateUserPhysicalPages"); - return 0; - } - if(pAWEinfo->nNumberOfPagesRequested != pAWEinfo->nNumberOfPagesActual) - { - ShowLastError("NdbMem_Allocate", "nNumberOfPagesRequested != nNumberOfPagesActual"); - return 0; - } - - pAWEinfo->dwSizeInBytesRequested = size; - pAWEinfo->pRegionReserved = VirtualAlloc(0, pAWEinfo->dwSizeInBytesRequested, MEM_RESERVE | MEM_PHYSICAL, PAGE_READWRITE); - if(!pAWEinfo->pRegionReserved) - { - ShowLastError("NdbMem_Allocate", "VirtualAlloc"); - return 0; - } - - if(!MapUserPhysicalPages(pAWEinfo->pRegionReserved, pAWEinfo->nNumberOfPagesActual, pAWEinfo->pnPhysicalMemoryPageArray)) - { - ShowLastError("NdbMem_Allocate", "MapUserPhysicalPages"); - return 0; - } - - /* - printf("allocate AWE memory: %lu bytes, %lu pages, address %lx\n", - pAWEinfo->dwSizeInBytesRequested, - pAWEinfo->nNumberOfPagesActual, - pAWEinfo->pRegionReserved); - */ - return pAWEinfo->pRegionReserved; -} - - -void* NdbMem_AllocateAlign(size_t size, size_t alignment) -{ - /* - return (void*)memalign(alignment, size); - TEMP fix - */ - return NdbMem_Allocate(size); -} - - -void NdbMem_Free(void* ptr) -{ - // VirtualFree(ptr, 0, MEM_DECOMMIT|MEM_RELEASE); - - // Address Windowing Extensions - struct AWEINFO* pAWEinfo = 0; - size_t i; - HANDLE hProcess; - - for(i=0; i<gNdbMem_nAWEinfo; ++i) - { - if(ptr==gNdbMem_pAWEinfo[i].pRegionReserved) - { - pAWEinfo = gNdbMem_pAWEinfo+i; - } - } - if(!pAWEinfo) - { - ShowLastError("NdbMem_Free", "ptr is not AWE memory"); - } - - hProcess = GetCurrentProcess(); - if(!MapUserPhysicalPages(ptr, pAWEinfo->nNumberOfPagesActual, 0)) - { - ShowLastError("NdbMem_Free", "MapUserPhysicalPages"); - } - - if(!VirtualFree(ptr, 0, MEM_RELEASE)) - { - ShowLastError("NdbMem_Free", "VirtualFree"); - } - - pAWEinfo->nNumberOfPagesFreed = pAWEinfo->nNumberOfPagesActual; - if(!FreeUserPhysicalPages(hProcess, &(pAWEinfo->nNumberOfPagesFreed), pAWEinfo->pnPhysicalMemoryPageArray)) - { - ShowLastError("NdbMem_Free", "FreeUserPhysicalPages"); - } - - VirtualFree(pAWEinfo->pnPhysicalMemoryPageArray, 0, MEM_DECOMMIT|MEM_RELEASE); -} - - -int NdbMem_MemLockAll() -{ - /* - HANDLE hProcess = GetCurrentProcess(); - SIZE_T nMinimumWorkingSetSize; - SIZE_T nMaximumWorkingSetSize; - GetProcessWorkingSetSize(hProcess, &nMinimumWorkingSetSize, &nMaximumWorkingSetSize); - ndbout << "nMinimumWorkingSetSize=" << nMinimumWorkingSetSize << ", nMaximumWorkingSetSize=" << nMaximumWorkingSetSize << endl; - - SetProcessWorkingSetSize(hProcess, 50000000, 100000000); - - GetProcessWorkingSetSize(hProcess, &nMinimumWorkingSetSize, &nMaximumWorkingSetSize); - ndbout << "nMinimumWorkingSetSize=" << nMinimumWorkingSetSize << ", nMaximumWorkingSetSize=" << nMaximumWorkingSetSize << endl; - */ - return -1; -} - -int NdbMem_MemUnlockAll() -{ - //VirtualUnlock(); - return -1; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbMutex.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbMutex.c deleted file mode 100644 index e797024d5bb4fcb9132c588beae4d6841a69ece8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbMutex.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <winsock2.h> -#include <ws2tcpip.h> -#include <windows.h> -#include <time.h> - -#include "NdbMutex.h" - - -NdbMutex* NdbMutex_Create(void) -{ - NdbMutex* pNdbMutex = (NdbMutex*)malloc(sizeof(NdbMutex)); - if(!pNdbMutex) - return 0; - - InitializeCriticalSection(pNdbMutex); - return pNdbMutex; -} - - -int NdbMutex_Destroy(NdbMutex* p_mutex) -{ - if(!p_mutex) - return -1; - - DeleteCriticalSection(p_mutex); - free(p_mutex); - return 0; -} - - -int NdbMutex_Lock(NdbMutex* p_mutex) -{ - if(!p_mutex) - return -1; - - EnterCriticalSection (p_mutex); - return 0; -} - - -int NdbMutex_Unlock(NdbMutex* p_mutex) -{ - if(!p_mutex) - return -1; - - LeaveCriticalSection(p_mutex); - return 0; -} - - -int NdbMutex_Trylock(NdbMutex* p_mutex) -{ - int result = -1; - if(p_mutex) - { - result = (TryEnterCriticalSection(p_mutex) ? 0 : -1); - } - return result; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbSleep.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbSleep.c deleted file mode 100644 index ac0f44dd07f5ef5c04ed964d41b501194dc42576..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbSleep.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbSleep.h" - -#include <windows.h> - - -int -NdbSleep_MilliSleep(int milliseconds) -{ - Sleep(milliseconds); - return 0; -} - -int -NdbSleep_SecSleep(int seconds) -{ - return NdbSleep_MilliSleep(seconds*1000); -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbTCP.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbTCP.c deleted file mode 100644 index 483a53bd606932f5b2d45283e9c6aa977e03207f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbTCP.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "NdbTCP.h" - -int -Ndb_getInAddr(struct in_addr * dst, const char *address) -{ - struct hostent * hostPtr; - - /* Try it as aaa.bbb.ccc.ddd. */ - dst->s_addr = inet_addr(address); - if (dst->s_addr != -1) { - return 0; - } - - hostPtr = gethostbyname(address); - if (hostPtr != NULL) { - dst->s_addr = ((struct in_addr *) *hostPtr->h_addr_list)->s_addr; - return 0; - } - - return -1; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbThread.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbThread.c deleted file mode 100644 index 1f052f034e8c0e4a4d685e2f20a2bcff07e016c8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbThread.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <windows.h> -#include <process.h> - -#include "NdbThread.h" - - -#define MAX_THREAD_NAME 16 - -typedef unsigned (WINAPI* NDB_WIN32_THREAD_FUNC)(void*); - - -struct NdbThread -{ - HANDLE hThread; - unsigned nThreadId; - char thread_name[MAX_THREAD_NAME]; -}; - - -struct NdbThread* NdbThread_Create(NDB_THREAD_FUNC *p_thread_func, - NDB_THREAD_ARG *p_thread_arg, - const NDB_THREAD_STACKSIZE thread_stack_size, - const char* p_thread_name, - NDB_THREAD_PRIO thread_prio) -{ - struct NdbThread* tmpThread; - unsigned initflag; - int nPriority = 0; - - if(!p_thread_func) - return 0; - - tmpThread = (struct NdbThread*)malloc(sizeof(struct NdbThread)); - if(!tmpThread) - return 0; - - strncpy((char*)&tmpThread->thread_name, p_thread_name, MAX_THREAD_NAME); - - switch(thread_prio) - { - case NDB_THREAD_PRIO_HIGHEST: nPriority=THREAD_PRIORITY_HIGHEST; break; - case NDB_THREAD_PRIO_HIGH: nPriority=THREAD_PRIORITY_ABOVE_NORMAL; break; - case NDB_THREAD_PRIO_MEAN: nPriority=THREAD_PRIORITY_NORMAL; break; - case NDB_THREAD_PRIO_LOW: nPriority=THREAD_PRIORITY_BELOW_NORMAL; break; - case NDB_THREAD_PRIO_LOWEST: nPriority=THREAD_PRIORITY_LOWEST; break; - } - initflag = (nPriority ? CREATE_SUSPENDED : 0); - - tmpThread->hThread = (HANDLE)_beginthreadex(0, thread_stack_size, - (NDB_WIN32_THREAD_FUNC)p_thread_func, p_thread_arg, - initflag, &tmpThread->nThreadId); - - if(nPriority && tmpThread->hThread) - { - SetThreadPriority(tmpThread->hThread, nPriority); - ResumeThread (tmpThread->hThread); - } - - assert(tmpThread->hThread); - return tmpThread; -} - - -void NdbThread_Destroy(struct NdbThread** p_thread) -{ - CloseHandle((*p_thread)->hThread); - (*p_thread)->hThread = 0; - free(*p_thread); - *p_thread = 0; -} - - -int NdbThread_WaitFor(struct NdbThread* p_wait_thread, void** status) -{ - void *local_status = 0; - if (status == 0) - status = &local_status; - - if(WaitForSingleObject(p_wait_thread->hThread, INFINITE) == WAIT_OBJECT_0 - && GetExitCodeThread(p_wait_thread->hThread, (LPDWORD)status)) - { - CloseHandle(p_wait_thread->hThread); - p_wait_thread->hThread = 0; - return 0; - } - return -1; -} - - -void NdbThread_Exit(int status) -{ - _endthreadex((DWORD) status); -} - - -int NdbThread_SetConcurrencyLevel(int level) -{ - return 0; -} - diff --git a/storage/ndb/src/common/portlib/old_dirs/win32/NdbTick.c b/storage/ndb/src/common/portlib/old_dirs/win32/NdbTick.c deleted file mode 100644 index e3a67d8437d9dbd42d4d6b726f19f47f040a670d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/common/portlib/old_dirs/win32/NdbTick.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <windows.h> -#include "NdbTick.h" - -/* -#define FILETIME_PER_MICROSEC 10 -#define FILETIME_PER_MILLISEC 10000 -#define FILETIME_PER_SEC 10000000 - - -NDB_TICKS NdbTick_CurrentMillisecond(void) -{ - ULONGLONG ullTime; - GetSystemTimeAsFileTime((LPFILETIME)&ullTime); - return (ullTime / FILETIME_PER_MILLISEC); -} - -int -NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros) -{ - ULONGLONG ullTime; - GetSystemTimeAsFileTime((LPFILETIME)&ullTime); - *secs = (ullTime / FILETIME_PER_SEC); - *micros = (Uint32)((ullTime % FILETIME_PER_SEC) / FILETIME_PER_MICROSEC); - return 0; -} -*/ - - -NDB_TICKS NdbTick_CurrentMillisecond(void) -{ - LARGE_INTEGER liCount, liFreq; - QueryPerformanceCounter(&liCount); - QueryPerformanceFrequency(&liFreq); - return (liCount.QuadPart*1000) / liFreq.QuadPart; -} - -int -NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros) -{ - LARGE_INTEGER liCount, liFreq; - QueryPerformanceCounter(&liCount); - QueryPerformanceFrequency(&liFreq); - *secs = liCount.QuadPart / liFreq.QuadPart; - liCount.QuadPart -= *secs * liFreq.QuadPart; - *micros = (liCount.QuadPart*1000000) / liFreq.QuadPart; - return 0; -} diff --git a/storage/ndb/src/common/util/NdbSqlUtil.cpp b/storage/ndb/src/common/util/NdbSqlUtil.cpp index 09e150dbacf4298f0efda4b6019d4b9596cd63c4..f2506eda6d433fa20774beb800eb7c5955724364 100644 --- a/storage/ndb/src/common/util/NdbSqlUtil.cpp +++ b/storage/ndb/src/common/util/NdbSqlUtil.cpp @@ -872,8 +872,8 @@ NdbSqlUtil::likeLongvarbinary(const void* info, const void* p1, unsigned n1, con // check charset -bool -NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) +uint +NdbSqlUtil::check_column_for_pk(Uint32 typeId, const void* info) { const Type& type = getType(typeId); switch (type.m_typeId) { @@ -882,12 +882,14 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) case Type::Longvarchar: { const CHARSET_INFO *cs = (const CHARSET_INFO*)info; - return - cs != 0 && - cs->cset != 0 && - cs->coll != 0 && - cs->coll->strnxfrm != 0 && - cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY; + if(cs != 0 && + cs->cset != 0 && + cs->coll != 0 && + cs->coll->strnxfrm != 0 && + cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY) + return 0; + else + return 743; } break; case Type::Undefined: @@ -896,19 +898,19 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) case Type::Bit: break; default: - return true; + return 0; } - return false; + return 906; } -bool -NdbSqlUtil::usable_in_hash_index(Uint32 typeId, const void* info) +uint +NdbSqlUtil::check_column_for_hash_index(Uint32 typeId, const void* info) { - return usable_in_pk(typeId, info); + return check_column_for_pk(typeId, info); } -bool -NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) +uint +NdbSqlUtil::check_column_for_ordered_index(Uint32 typeId, const void* info) { const Type& type = getType(typeId); if (type.m_cmp == NULL) @@ -919,13 +921,15 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) case Type::Longvarchar: { const CHARSET_INFO *cs = (const CHARSET_INFO*)info; - return - cs != 0 && - cs->cset != 0 && - cs->coll != 0 && - cs->coll->strnxfrm != 0 && - cs->coll->strnncollsp != 0 && - cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY; + if (cs != 0 && + cs->cset != 0 && + cs->coll != 0 && + cs->coll->strnxfrm != 0 && + cs->coll->strnncollsp != 0 && + cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY) + return 0; + else + return 743; } break; case Type::Undefined: @@ -934,9 +938,9 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) case Type::Bit: // can be fixed break; default: - return true; + return 0; } - return false; + return 906; } // utilities diff --git a/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp b/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp index 48072fe946ee3f5ed7e02043f2bf196f1247f2ed..b22cd51e61dae39e37cc6857307c84e1c218a339 100644 --- a/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp +++ b/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp @@ -143,12 +143,13 @@ Backup::execREAD_CONFIG_REQ(Signal* signal) m_ctx.m_config.getOwnConfigIterator(); ndbrequire(p != 0); - Uint32 noBackups = 0, noTables = 0, noAttribs = 0; + Uint32 noBackups = 0, noTables = 0, noAttribs = 0, noFrags = 0; ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_DISCLESS, &m_diskless)); ndb_mgm_get_int_parameter(p, CFG_DB_PARALLEL_BACKUPS, &noBackups); // ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_TABLES, &noTables)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DICT_TABLE, &noTables)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_ATTRIBUTES, &noAttribs)); + ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DIH_FRAG_CONNECT, &noFrags)); noAttribs++; //RT 527 bug fix @@ -158,9 +159,7 @@ Backup::execREAD_CONFIG_REQ(Signal* signal) c_tablePool.setSize(noBackups * noTables + 1); c_attributePool.setSize(noBackups * noAttribs + MAX_ATTRIBUTES_IN_TABLE); c_triggerPool.setSize(noBackups * 3 * noTables); - - // 2 = no of replicas - c_fragmentPool.setSize(noBackups * NO_OF_FRAG_PER_NODE * noTables + 1); + c_fragmentPool.setSize(noBackups * noFrags + 1); Uint32 szDataBuf = (2 * 1024 * 1024); Uint32 szLogBuf = (2 * 1024 * 1024); diff --git a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp index 6d3df7b204725d21a20a4237b31e2711569f8f1c..c3c35ac4ab250883bb0db052a17ac4e106e413f0 100644 --- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp +++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp @@ -134,6 +134,9 @@ Cmvmi::~Cmvmi() m_shared_page_pool.clear(); } +#ifdef ERROR_INSERT +NodeBitmask c_error_9000_nodes_mask; +#endif void Cmvmi::execNDB_TAMPER(Signal* signal) { @@ -441,21 +444,33 @@ void Cmvmi::execOPEN_COMREQ(Signal* signal) const Uint32 len = signal->getLength(); if(len == 2){ - globalTransporterRegistry.do_connect(tStartingNode); - globalTransporterRegistry.setIOState(tStartingNode, HaltIO); - //----------------------------------------------------- - // Report that the connection to the node is opened - //----------------------------------------------------- - signal->theData[0] = NDB_LE_CommunicationOpened; - signal->theData[1] = tStartingNode; - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB); - //----------------------------------------------------- +#ifdef ERROR_INSERT + if (! (ERROR_INSERTED(9000) && c_error_9000_nodes_mask.get(tStartingNode))) +#endif + { + globalTransporterRegistry.do_connect(tStartingNode); + globalTransporterRegistry.setIOState(tStartingNode, HaltIO); + + //----------------------------------------------------- + // Report that the connection to the node is opened + //----------------------------------------------------- + signal->theData[0] = NDB_LE_CommunicationOpened; + signal->theData[1] = tStartingNode; + sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB); + //----------------------------------------------------- + } } else { for(unsigned int i = 1; i < MAX_NODES; i++ ) { jam(); if (i != getOwnNodeId() && getNodeInfo(i).m_type == tData2){ jam(); + +#ifdef ERROR_INSERT + if (ERROR_INSERTED(9000) && c_error_9000_nodes_mask.get(i)) + continue; +#endif + globalTransporterRegistry.do_connect(i); globalTransporterRegistry.setIOState(i, HaltIO); @@ -1064,7 +1079,8 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal) } DumpStateOrd * const & dumpState = (DumpStateOrd *)&signal->theData[0]; - if (dumpState->args[0] == DumpStateOrd::CmvmiDumpConnections){ + Uint32 arg = dumpState->args[0]; + if (arg == DumpStateOrd::CmvmiDumpConnections){ for(unsigned int i = 1; i < MAX_NODES; i++ ){ const char* nodeTypeStr = ""; switch(getNodeInfo(i).m_type){ @@ -1094,7 +1110,7 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal) } } - if (dumpState->args[0] == DumpStateOrd::CmvmiDumpLongSignalMemory){ + if (arg == DumpStateOrd::CmvmiDumpLongSignalMemory){ infoEvent("Cmvmi: g_sectionSegmentPool size: %d free: %d", g_sectionSegmentPool.getSize(), g_sectionSegmentPool.getNoOfFree()); @@ -1131,7 +1147,7 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal) return; } - if (dumpState->args[0] == DumpStateOrd::CmvmiSetRestartOnErrorInsert) + if (arg == DumpStateOrd::CmvmiSetRestartOnErrorInsert) { if(signal->getLength() == 1) { @@ -1151,7 +1167,7 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal) } } - if (dumpState->args[0] == DumpStateOrd::CmvmiTestLongSigWithDelay) { + if (arg == DumpStateOrd::CmvmiTestLongSigWithDelay) { unsigned i; Uint32 loopCount = dumpState->args[1]; const unsigned len0 = 11; @@ -1179,6 +1195,30 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal) sendSignal(reference(), GSN_TESTSIG, signal, 8, JBB, ptr, 2); } +#ifdef ERROR_INSERT + if (arg == 9000) + { + SET_ERROR_INSERT_VALUE(9000); + for (Uint32 i = 1; i<signal->getLength(); i++) + c_error_9000_nodes_mask.set(signal->theData[i]); + } + + if (arg == 9001) + { + CLEAR_ERROR_INSERT_VALUE; + for (Uint32 i = 0; i<MAX_NODES; i++) + { + if (c_error_9000_nodes_mask.get(i)) + { + signal->theData[0] = 0; + signal->theData[1] = i; + EXECUTE_DIRECT(CMVMI, GSN_OPEN_COMREQ, signal, 2); + } + } + c_error_9000_nodes_mask.clear(); + } +#endif + #ifdef VM_TRACE #if 0 { diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp index 9425762e4cb6eeaed42a28cedb8210424c919dee..87bd1d7c53bcf593f02ccb2b5972f198b25a41cb 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp @@ -631,7 +631,8 @@ Dbdict::packFileIntoPages(SimpleProperties::Writer & w, f.FileSizeHi = (f_ptr.p->m_file_size >> 32); f.FileSizeLo = (f_ptr.p->m_file_size & 0xFFFFFFFF); f.FileFreeExtents= free_extents; - f.FileNo = f_ptr.p->key; + f.FileId = f_ptr.p->key; + f.FileVersion = f_ptr.p->m_version; FilegroupPtr lfg_ptr; ndbrequire(c_filegroup_hash.find(lfg_ptr, f.FilegroupId)); @@ -13588,6 +13589,13 @@ Dbdict::execDROP_FILE_REQ(Signal* signal) break; } + if (file_ptr.p->m_version != version) + { + ref->errorCode = DropFileRef::InvalidSchemaObjectVersion; + ref->errorLine = __LINE__; + break; + } + Ptr<SchemaTransaction> trans_ptr; if (! c_Trans.seize(trans_ptr)) { @@ -13662,6 +13670,13 @@ Dbdict::execDROP_FILEGROUP_REQ(Signal* signal) ref->errorLine = __LINE__; break; } + + if (filegroup_ptr.p->m_version != version) + { + ref->errorCode = DropFilegroupRef::InvalidSchemaObjectVersion; + ref->errorLine = __LINE__; + break; + } Ptr<SchemaTransaction> trans_ptr; if (! c_Trans.seize(trans_ptr)) @@ -15095,6 +15110,7 @@ Dbdict::create_file_prepare_start(Signal* signal, SchemaOp* op){ filePtr.p->m_obj_ptr_i = obj_ptr.i; filePtr.p->m_filegroup_id = f.FilegroupId; filePtr.p->m_type = f.FileType; + filePtr.p->m_version = op->m_obj_version; obj_ptr.p->m_id = op->m_obj_id; obj_ptr.p->m_type = f.FileType; diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp index e0c82af3c59b91030bc3314ff0f170032087c284..c770b6c69b87da020bdd7adab0ef4476060b3669 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp @@ -535,6 +535,7 @@ public: Uint32 key; Uint32 m_magic; + Uint32 m_version; Uint32 m_obj_ptr_i; Uint32 m_filegroup_id; Uint32 m_type; diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp index aaf27b351be2c831a9fcb5af4605ab37410e1c03..a6ec37496060cadded1dfb56a839be62c00d97e4 100644 --- a/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp +++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp @@ -58,6 +58,7 @@ void Dbdih::initData() cwaitLcpSr = false; c_blockCommit = false; c_blockCommitNo = 1; + cntrlblockref = RNIL; }//Dbdih::initData() void Dbdih::initRecords() diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index 95c691f0c6b06720facbc760345011020baf9376..9936217bbf3bcae49eae2f86efccfe4e13c19585 100644 --- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -11995,7 +11995,7 @@ void Dbdih::makeNodeGroups(Uint32 nodeArray[]) Uint32 tmngNode; Uint32 tmngNodeGroup; Uint32 tmngLimit; - Uint32 i; + Uint32 i, j; /**----------------------------------------------------------------------- * ASSIGN ALL ACTIVE NODES INTO NODE GROUPS. HOT SPARE NODES ARE ASSIGNED @@ -12041,6 +12041,38 @@ void Dbdih::makeNodeGroups(Uint32 nodeArray[]) Sysfile::setNodeGroup(mngNodeptr.i, SYSFILE->nodeGroups, mngNodeptr.p->nodeGroup); }//if }//for + + for (i = 0; i<cnoOfNodeGroups; i++) + { + jam(); + bool alive = false; + NodeGroupRecordPtr NGPtr; + NGPtr.i = i; + ptrCheckGuard(NGPtr, MAX_NDB_NODES, nodeGroupRecord); + for (j = 0; j<NGPtr.p->nodeCount; j++) + { + jam(); + mngNodeptr.i = NGPtr.p->nodesInGroup[j]; + ptrCheckGuard(mngNodeptr, MAX_NDB_NODES, nodeRecord); + if (checkNodeAlive(NGPtr.p->nodesInGroup[j])) + { + alive = true; + break; + } + } + + if (!alive) + { + char buf[255]; + BaseString::snprintf + (buf, sizeof(buf), + "Illegal initial start, no alive node in nodegroup %u", i); + progError(__LINE__, + NDBD_EXIT_SR_RESTARTCONFLICT, + buf); + + } + } }//Dbdih::makeNodeGroups() /** @@ -12851,7 +12883,6 @@ void Dbdih::sendStartFragreq(Signal* signal, void Dbdih::setInitialActiveStatus() { NodeRecordPtr siaNodeptr; - Uint32 tsiaNodeActiveStatus; Uint32 tsiaNoActiveNodes; tsiaNoActiveNodes = csystemnodes - cnoHotSpare; @@ -12859,39 +12890,34 @@ void Dbdih::setInitialActiveStatus() SYSFILE->nodeStatus[i] = 0; for (siaNodeptr.i = 1; siaNodeptr.i < MAX_NDB_NODES; siaNodeptr.i++) { ptrAss(siaNodeptr, nodeRecord); - if (siaNodeptr.p->nodeStatus == NodeRecord::ALIVE) { + switch(siaNodeptr.p->nodeStatus){ + case NodeRecord::ALIVE: + case NodeRecord::DEAD: if (tsiaNoActiveNodes == 0) { jam(); siaNodeptr.p->activeStatus = Sysfile::NS_HotSpare; } else { jam(); tsiaNoActiveNodes = tsiaNoActiveNodes - 1; - siaNodeptr.p->activeStatus = Sysfile::NS_Active; - }//if - } else { - jam(); - siaNodeptr.p->activeStatus = Sysfile::NS_NotDefined; - }//if - switch (siaNodeptr.p->activeStatus) { - case Sysfile::NS_Active: - jam(); - tsiaNodeActiveStatus = Sysfile::NS_Active; - break; - case Sysfile::NS_HotSpare: - jam(); - tsiaNodeActiveStatus = Sysfile::NS_HotSpare; - break; - case Sysfile::NS_NotDefined: - jam(); - tsiaNodeActiveStatus = Sysfile::NS_NotDefined; + if (siaNodeptr.p->nodeStatus == NodeRecord::ALIVE) + { + jam(); + siaNodeptr.p->activeStatus = Sysfile::NS_Active; + } + else + { + siaNodeptr.p->activeStatus = Sysfile::NS_NotActive_NotTakenOver; + } + } break; default: - ndbrequire(false); - return; + jam(); + siaNodeptr.p->activeStatus = Sysfile::NS_NotDefined; break; - }//switch - Sysfile::setNodeStatus(siaNodeptr.i, SYSFILE->nodeStatus, - tsiaNodeActiveStatus); + }//if + Sysfile::setNodeStatus(siaNodeptr.i, + SYSFILE->nodeStatus, + siaNodeptr.p->activeStatus); }//for }//Dbdih::setInitialActiveStatus() @@ -14613,11 +14639,36 @@ void Dbdih::execWAIT_GCP_REQ(Signal* signal) jam(); conf->senderData = senderData; conf->gcp = cnewgcp; + conf->blockStatus = cgcpOrderBlocked; sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, WaitGCPConf::SignalLength, JBB); return; }//if + if (requestType == WaitGCPReq::BlockStartGcp) + { + jam(); + conf->senderData = senderData; + conf->gcp = cnewgcp; + conf->blockStatus = cgcpOrderBlocked; + sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, + WaitGCPConf::SignalLength, JBB); + cgcpOrderBlocked = 1; + return; + } + + if (requestType == WaitGCPReq::UnblockStartGcp) + { + jam(); + conf->senderData = senderData; + conf->gcp = cnewgcp; + conf->blockStatus = cgcpOrderBlocked; + sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, + WaitGCPConf::SignalLength, JBB); + cgcpOrderBlocked = 0; + return; + } + if(isMaster()) { /** * Master @@ -14629,6 +14680,7 @@ void Dbdih::execWAIT_GCP_REQ(Signal* signal) jam(); conf->senderData = senderData; conf->gcp = coldgcp; + conf->blockStatus = cgcpOrderBlocked; sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, WaitGCPConf::SignalLength, JBB); return; @@ -14715,6 +14767,7 @@ void Dbdih::execWAIT_GCP_CONF(Signal* signal) conf->senderData = ptr.p->clientData; conf->gcp = gcp; + conf->blockStatus = cgcpOrderBlocked; sendSignal(ptr.p->clientRef, GSN_WAIT_GCP_CONF, signal, WaitGCPConf::SignalLength, JBB); @@ -14782,6 +14835,7 @@ void Dbdih::emptyWaitGCPMasterQueue(Signal* signal) c_waitGCPMasterList.next(ptr); conf->senderData = clientData; + conf->blockStatus = cgcpOrderBlocked; sendSignal(clientRef, GSN_WAIT_GCP_CONF, signal, WaitGCPConf::SignalLength, JBB); diff --git a/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp b/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp index 7703b3e6ab834951fc0c669fa1c4f9221c7772df..5911dead4a0dc5436c6d0afb2ca7f13160d8b1a5 100644 --- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp +++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp @@ -215,11 +215,12 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal) break; } if (descAttr.m_charset != 0) { + uint err; CHARSET_INFO *cs = all_charsets[descAttr.m_charset]; ndbrequire(cs != 0); - if (! NdbSqlUtil::usable_in_ordered_index(descAttr.m_typeId, cs)) { + if ((err = NdbSqlUtil::check_column_for_ordered_index(descAttr.m_typeId, cs))) { jam(); - errorCode = TuxAddAttrRef::InvalidCharset; + errorCode = (TuxAddAttrRef::ErrorCode) err; break; } } diff --git a/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp b/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp index ffebce36757dc6e603dbff49d90715b76732cb50..da6aeaf8e8fdc0ce316c1dd6e145e38fd5f7a0e0 100644 --- a/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp +++ b/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp @@ -204,6 +204,7 @@ private: void execWAIT_GCP_CONF(Signal* signal); void execSTOP_REQ(Signal* signal); + void execSTOP_CONF(Signal* signal); void execRESUME_REQ(Signal* signal); void execCHANGE_NODE_STATE_CONF(Signal* signal); @@ -339,6 +340,16 @@ public: void progError(int line, int cause, const char * extra) { cntr.progError(line, cause, extra); } + + enum StopNodesStep { + SR_BLOCK_GCP_START_GCP = 0, + SR_WAIT_COMPLETE_GCP = 1, + SR_UNBLOCK_GCP_START_GCP = 2, + SR_QMGR_STOP_REQ = 3, + SR_WAIT_NODE_FAILURES = 4, + SR_CLUSTER_SHUTDOWN = 12 + } m_state; + SignalCounter m_stop_req_counter; }; private: StopRecord c_stopRec; diff --git a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp index d2e2f1d2335102d38318ba41bfc2e2b2055cc013..ed37622657d98a936e0436e82cbb626855f13b74 100644 --- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp +++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp @@ -88,6 +88,7 @@ Ndbcntr::Ndbcntr(Block_context& ctx): addRecSignal(GSN_STOP_ME_CONF, &Ndbcntr::execSTOP_ME_CONF); addRecSignal(GSN_STOP_REQ, &Ndbcntr::execSTOP_REQ); + addRecSignal(GSN_STOP_CONF, &Ndbcntr::execSTOP_CONF); addRecSignal(GSN_RESUME_REQ, &Ndbcntr::execRESUME_REQ); addRecSignal(GSN_WAIT_GCP_REF, &Ndbcntr::execWAIT_GCP_REF); diff --git a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp index eced400d48019dc51458b660b32a55617f1e14d0..b0372ec89a2996f8fe78b5c6f16307f327182974 100644 --- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp +++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp @@ -42,6 +42,8 @@ #include <signaldata/FsRemoveReq.hpp> #include <signaldata/ReadConfig.hpp> +#include <signaldata/FailRep.hpp> + #include <AttributeHeader.hpp> #include <Configuration.hpp> #include <DebuggerNames.hpp> @@ -853,17 +855,9 @@ Ndbcntr::trySystemRestart(Signal* signal){ return false; } - if(!allNodes && c_start.m_startPartialTimeout > now){ - jam(); - return false; - } - NodeState::StartType srType = NodeState::ST_SYSTEM_RESTART; - if(c_start.m_waiting.equal(c_start.m_withoutLog)){ - if(!allNodes){ - jam(); - return false; - } + if(c_start.m_waiting.equal(c_start.m_withoutLog)) + { jam(); srType = NodeState::ST_INITIAL_START; c_start.m_starting = c_start.m_withoutLog; // Used for starting... @@ -893,10 +887,6 @@ Ndbcntr::trySystemRestart(Signal* signal){ ndbrequire(false); // All nodes -> partitioning, which is not allowed } - if(c_start.m_startPartitionedTimeout > now){ - jam(); - return false; - } break; } @@ -1512,13 +1502,74 @@ void Ndbcntr::execNODE_FAILREP(Signal* signal) sendSignal(QMGR_REF, GSN_NODE_FAILREP, signal, NodeFailRep::SignalLength, JBB); + if (c_stopRec.stopReq.senderRef) + { + jam(); + switch(c_stopRec.m_state){ + case StopRecord::SR_WAIT_NODE_FAILURES: + { + jam(); + NdbNodeBitmask tmp; + tmp.assign(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + tmp.bitANDC(allFailed); + tmp.copyto(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + + if (tmp.isclear()) + { + jam(); + if (c_stopRec.stopReq.senderRef != RNIL) + { + jam(); + StopConf * const stopConf = (StopConf *)&signal->theData[0]; + stopConf->senderData = c_stopRec.stopReq.senderData; + stopConf->nodeState = (Uint32) NodeState::SL_SINGLEUSER; + sendSignal(c_stopRec.stopReq.senderRef, GSN_STOP_CONF, signal, + StopConf::SignalLength, JBB); + } + + c_stopRec.stopReq.senderRef = 0; + WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; + req->senderRef = reference(); + req->senderData = StopRecord::SR_UNBLOCK_GCP_START_GCP; + req->requestType = WaitGCPReq::UnblockStartGcp; + sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, + WaitGCPReq::SignalLength, JBA); + } + break; + } + case StopRecord::SR_QMGR_STOP_REQ: + { + NdbNodeBitmask tmp; + tmp.assign(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + tmp.bitANDC(allFailed); + + if (tmp.isclear()) + { + Uint32 nodeId = allFailed.find(0); + tmp.set(nodeId); + + StopConf* conf = (StopConf*)signal->getDataPtrSend(); + conf->senderData = c_stopRec.stopReq.senderData; + conf->nodeId = nodeId; + sendSignal(reference(), + GSN_STOP_CONF, signal, StopConf::SignalLength, JBB); + } + + tmp.copyto(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + + break; + } + } + } + + signal->theData[0] = NDB_LE_NODE_FAILREP; + signal->theData[2] = 0; + Uint32 nodeId = 0; while(!allFailed.isclear()){ nodeId = allFailed.find(nodeId + 1); allFailed.clear(nodeId); - signal->theData[0] = NDB_LE_NODE_FAILREP; signal->theData[1] = nodeId; - signal->theData[2] = 0; sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 3, JBB); }//for @@ -1964,13 +2015,15 @@ void Ndbcntr::execDUMP_STATE_ORD(Signal* signal) { DumpStateOrd * const & dumpState = (DumpStateOrd *)&signal->theData[0]; - if(signal->theData[0] == 13){ + Uint32 arg = dumpState->args[0]; + + if(arg == 13){ infoEvent("Cntr: cstartPhase = %d, cinternalStartphase = %d, block = %d", cstartPhase, cinternalStartphase, cndbBlocksCount); infoEvent("Cntr: cmasterNodeId = %d", cmasterNodeId); } - if (dumpState->args[0] == DumpStateOrd::NdbcntrTestStopOnError){ + if (arg == DumpStateOrd::NdbcntrTestStopOnError){ if (m_ctx.m_config.stopOnError() == true) ((Configuration&)m_ctx.m_config).stopOnError(false); @@ -1983,6 +2036,28 @@ Ndbcntr::execDUMP_STATE_ORD(Signal* signal) SystemError::SignalLength, JBA); } + if (arg == DumpStateOrd::NdbcntrStopNodes) + { + NdbNodeBitmask mask; + for(Uint32 i = 1; i<signal->getLength(); i++) + mask.set(signal->theData[i]); + + StopReq* req = (StopReq*)signal->getDataPtrSend(); + req->senderRef = RNIL; + req->senderData = 123; + req->requestInfo = 0; + req->singleuser = 0; + req->singleUserApi = 0; + mask.copyto(NdbNodeBitmask::Size, req->nodes); + StopReq::setPerformRestart(req->requestInfo, 1); + StopReq::setNoStart(req->requestInfo, 1); + StopReq::setStopNodes(req->requestInfo, 1); + StopReq::setStopAbort(req->requestInfo, 1); + + sendSignal(reference(), GSN_STOP_REQ, signal, + StopReq::SignalLength, JBB); + return; + } }//Ndbcntr::execDUMP_STATE_ORD() @@ -2043,9 +2118,12 @@ Ndbcntr::execSTOP_REQ(Signal* signal){ Uint32 senderData = req->senderData; BlockReference senderRef = req->senderRef; bool abort = StopReq::getStopAbort(req->requestInfo); + bool stopnodes = StopReq::getStopNodes(req->requestInfo); - if(getNodeState().startLevel < NodeState::SL_STARTED || - abort && !singleuser){ + if(!singleuser && + (getNodeState().startLevel < NodeState::SL_STARTED || + (abort && !stopnodes))) + { /** * Node is not started yet * @@ -2087,21 +2165,74 @@ Ndbcntr::execSTOP_REQ(Signal* signal){ else ref->errorCode = StopRef::NodeShutdownInProgress; ref->senderData = senderData; - sendSignal(senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); + ref->masterNodeId = cmasterNodeId; + + if (senderRef != RNIL) + sendSignal(senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); + return; + } + + if (stopnodes && !abort) + { + jam(); + ref->errorCode = StopRef::UnsupportedNodeShutdown; + ref->senderData = senderData; + ref->masterNodeId = cmasterNodeId; + if (senderRef != RNIL) + sendSignal(senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); + return; + } + + if (stopnodes && cmasterNodeId != getOwnNodeId()) + { + jam(); + ref->errorCode = StopRef::MultiNodeShutdownNotMaster; + ref->senderData = senderData; + ref->masterNodeId = cmasterNodeId; + if (senderRef != RNIL) + sendSignal(senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); return; } c_stopRec.stopReq = * req; c_stopRec.stopInitiatedTime = NdbTick_CurrentMillisecond(); - if(!singleuser) { - if(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo)) { + if (stopnodes) + { + jam(); + + if(!c_stopRec.checkNodeFail(signal)) + { + jam(); + return; + } + + char buf[100]; + NdbNodeBitmask mask; + mask.assign(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + infoEvent("Initiating shutdown abort of %s", mask.getText(buf)); + ndbout_c("Initiating shutdown abort of %s", mask.getText(buf)); + + WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; + req->senderRef = reference(); + req->senderData = StopRecord::SR_BLOCK_GCP_START_GCP; + req->requestType = WaitGCPReq::BlockStartGcp; + sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, + WaitGCPReq::SignalLength, JBB); + return; + } + else if(!singleuser) + { + if(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo)) + { jam(); - if(StopReq::getPerformRestart(c_stopRec.stopReq.requestInfo)){ + if(StopReq::getPerformRestart(c_stopRec.stopReq.requestInfo)) + { ((Configuration&)m_ctx.m_config).stopOnError(false); } } - if(!c_stopRec.checkNodeFail(signal)){ + if(!c_stopRec.checkNodeFail(signal)) + { jam(); return; } @@ -2171,7 +2302,17 @@ Ndbcntr::StopRecord::checkNodeFail(Signal* signal){ */ NodeBitmask ndbMask; ndbMask.assign(cntr.c_startedNodes); - ndbMask.clear(cntr.getOwnNodeId()); + + if (StopReq::getStopNodes(stopReq.requestInfo)) + { + NdbNodeBitmask tmp; + tmp.assign(NdbNodeBitmask::Size, stopReq.nodes); + ndbMask.bitANDC(tmp); + } + else + { + ndbMask.clear(cntr.getOwnNodeId()); + } CheckNodeGroups* sd = (CheckNodeGroups*)&signal->theData[0]; sd->blockRef = cntr.reference(); @@ -2191,9 +2332,11 @@ Ndbcntr::StopRecord::checkNodeFail(Signal* signal){ ref->senderData = stopReq.senderData; ref->errorCode = StopRef::NodeShutdownWouldCauseSystemCrash; + ref->masterNodeId = cntr.cmasterNodeId; const BlockReference bref = stopReq.senderRef; - cntr.sendSignal(bref, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); + if (bref != RNIL) + cntr.sendSignal(bref, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); stopReq.senderRef = 0; @@ -2243,23 +2386,23 @@ Ndbcntr::StopRecord::checkTcTimeout(Signal* signal){ if(stopReq.getSystemStop(stopReq.requestInfo) || stopReq.singleuser){ jam(); if(stopReq.singleuser) - { - jam(); - AbortAllReq * req = (AbortAllReq*)&signal->theData[0]; - req->senderRef = cntr.reference(); - req->senderData = 12; - cntr.sendSignal(DBTC_REF, GSN_ABORT_ALL_REQ, signal, - AbortAllReq::SignalLength, JBB); - } + { + jam(); + AbortAllReq * req = (AbortAllReq*)&signal->theData[0]; + req->senderRef = cntr.reference(); + req->senderData = 12; + cntr.sendSignal(DBTC_REF, GSN_ABORT_ALL_REQ, signal, + AbortAllReq::SignalLength, JBB); + } else - { - WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; - req->senderRef = cntr.reference(); - req->senderData = 12; - req->requestType = WaitGCPReq::CompleteForceStart; - cntr.sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, - WaitGCPReq::SignalLength, JBB); - } + { + WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; + req->senderRef = cntr.reference(); + req->senderData = StopRecord::SR_CLUSTER_SHUTDOWN; + req->requestType = WaitGCPReq::CompleteForceStart; + cntr.sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, + WaitGCPReq::SignalLength, JBB); + } } else { jam(); StopPermReq * req = (StopPermReq*)&signal->theData[0]; @@ -2338,6 +2481,7 @@ void Ndbcntr::execABORT_ALL_REF(Signal* signal){ StopRef * const stopRef = (StopRef *)&signal->theData[0]; stopRef->senderData = c_stopRec.stopReq.senderData; stopRef->errorCode = StopRef::TransactionAbortFailed; + stopRef->masterNodeId = cmasterNodeId; sendSignal(c_stopRec.stopReq.senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB); } @@ -2421,7 +2565,7 @@ void Ndbcntr::execWAIT_GCP_REF(Signal* signal){ WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; req->senderRef = reference(); - req->senderData = 12; + req->senderData = StopRecord::SR_CLUSTER_SHUTDOWN; req->requestType = WaitGCPReq::CompleteForceStart; sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, WaitGCPReq::SignalLength, JBB); @@ -2430,29 +2574,129 @@ void Ndbcntr::execWAIT_GCP_REF(Signal* signal){ void Ndbcntr::execWAIT_GCP_CONF(Signal* signal){ jamEntry(); - ndbrequire(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo)); - NodeState newState(NodeState::SL_STOPPING_3, true); + WaitGCPConf* conf = (WaitGCPConf*)signal->getDataPtr(); - /** - * Inform QMGR so that arbitrator won't kill us - */ - NodeStateRep * rep = (NodeStateRep *)&signal->theData[0]; - rep->nodeState = newState; - rep->nodeState.masterNodeId = cmasterNodeId; - rep->nodeState.setNodeGroup(c_nodeGroup); - EXECUTE_DIRECT(QMGR, GSN_NODE_STATE_REP, signal, NodeStateRep::SignalLength); - - if(StopReq::getPerformRestart(c_stopRec.stopReq.requestInfo)){ - jam(); - StartOrd * startOrd = (StartOrd *)&signal->theData[0]; - startOrd->restartInfo = c_stopRec.stopReq.requestInfo; - sendSignalWithDelay(CMVMI_REF, GSN_START_ORD, signal, 500, - StartOrd::SignalLength); - } else { + switch(conf->senderData){ + case StopRecord::SR_BLOCK_GCP_START_GCP: + { + jam(); + /** + * + */ + if(!c_stopRec.checkNodeFail(signal)) + { + jam(); + goto unblock; + } + + WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; + req->senderRef = reference(); + req->senderData = StopRecord::SR_WAIT_COMPLETE_GCP; + req->requestType = WaitGCPReq::CompleteIfRunning; + + sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, + WaitGCPReq::SignalLength, JBB); + return; + } + case StopRecord::SR_UNBLOCK_GCP_START_GCP: + { + jam(); + return; + } + case StopRecord::SR_WAIT_COMPLETE_GCP: + { jam(); - sendSignalWithDelay(CMVMI_REF, GSN_STOP_ORD, signal, 500, 1); + if(!c_stopRec.checkNodeFail(signal)) + { + jam(); + goto unblock; + } + + NdbNodeBitmask tmp; + tmp.assign(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + c_stopRec.m_stop_req_counter = tmp; + NodeReceiverGroup rg(QMGR, tmp); + StopReq * stopReq = (StopReq *)&signal->theData[0]; + * stopReq = c_stopRec.stopReq; + stopReq->senderRef = reference(); + sendSignal(rg, GSN_STOP_REQ, signal, StopReq::SignalLength, JBA); + c_stopRec.m_state = StopRecord::SR_QMGR_STOP_REQ; + return; + } + case StopRecord::SR_CLUSTER_SHUTDOWN: + { + jam(); + break; + } + } + + { + ndbrequire(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo)); + NodeState newState(NodeState::SL_STOPPING_3, true); + + /** + * Inform QMGR so that arbitrator won't kill us + */ + NodeStateRep * rep = (NodeStateRep *)&signal->theData[0]; + rep->nodeState = newState; + rep->nodeState.masterNodeId = cmasterNodeId; + rep->nodeState.setNodeGroup(c_nodeGroup); + EXECUTE_DIRECT(QMGR, GSN_NODE_STATE_REP, signal, + NodeStateRep::SignalLength); + + if(StopReq::getPerformRestart(c_stopRec.stopReq.requestInfo)){ + jam(); + StartOrd * startOrd = (StartOrd *)&signal->theData[0]; + startOrd->restartInfo = c_stopRec.stopReq.requestInfo; + sendSignalWithDelay(CMVMI_REF, GSN_START_ORD, signal, 500, + StartOrd::SignalLength); + } else { + jam(); + sendSignalWithDelay(CMVMI_REF, GSN_STOP_ORD, signal, 500, 1); + } + return; + } + +unblock: + WaitGCPReq * req = (WaitGCPReq*)&signal->theData[0]; + req->senderRef = reference(); + req->senderData = StopRecord::SR_UNBLOCK_GCP_START_GCP; + req->requestType = WaitGCPReq::UnblockStartGcp; + sendSignal(DBDIH_REF, GSN_WAIT_GCP_REQ, signal, + WaitGCPReq::SignalLength, JBB); +} + +void +Ndbcntr::execSTOP_CONF(Signal* signal) +{ + jamEntry(); + StopConf *conf = (StopConf*)signal->getDataPtr(); + ndbrequire(c_stopRec.m_state == StopRecord::SR_QMGR_STOP_REQ); + c_stopRec.m_stop_req_counter.clearWaitingFor(conf->nodeId); + if (c_stopRec.m_stop_req_counter.done()) + { + char buf[100]; + NdbNodeBitmask mask; + mask.assign(NdbNodeBitmask::Size, c_stopRec.stopReq.nodes); + infoEvent("Stopping of %s", mask.getText(buf)); + ndbout_c("Stopping of %s", mask.getText(buf)); + + /** + * Kill any node... + */ + FailRep * const failRep = (FailRep *)&signal->theData[0]; + failRep->failCause = FailRep::ZMULTI_NODE_SHUTDOWN; + NodeReceiverGroup rg(QMGR, c_clusterNodes); + Uint32 nodeId = 0; + while ((nodeId = NdbNodeBitmask::find(c_stopRec.stopReq.nodes, nodeId+1)) + != NdbNodeBitmask::NotFound) + { + failRep->failNodeId = nodeId; + sendSignal(rg, GSN_FAIL_REP, signal, FailRep::SignalLength, JBA); + } + c_stopRec.m_state = StopRecord::SR_WAIT_NODE_FAILURES; + return; } - return; } void Ndbcntr::execSTTORRY(Signal* signal){ diff --git a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp index 5b69a0a921c5a02976787b7c4ed58cd068b0ed88..70c0fdfc988f0e2db18a2f20dc8a35bdfa2bcd5e 100644 --- a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp +++ b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp @@ -33,6 +33,7 @@ #include <SafeCounter.hpp> #include <RequestTracker.hpp> +#include <signaldata/StopReq.hpp> #include "timer.hpp" @@ -53,6 +54,7 @@ #define ZAPI_HB_HANDLING 3 #define ZTIMER_HANDLING 4 #define ZARBIT_HANDLING 5 +#define ZSTART_FAILURE_LIMIT 6 /* Error Codes ------------------------------*/ #define ZERRTOOMANY 1101 @@ -104,18 +106,42 @@ public: }; struct StartRecord { - void reset(){ m_startKey++; m_startNode = 0;} + void reset(){ + m_startKey++; + m_startNode = 0; + m_gsn = RNIL; + m_nodes.clearWaitingFor(); + } Uint32 m_startKey; Uint32 m_startNode; Uint64 m_startTimeout; Uint32 m_gsn; SignalCounter m_nodes; - } c_start; + Uint32 m_latest_gci; + Uint32 m_start_type; + NdbNodeBitmask m_skip_nodes; + NdbNodeBitmask m_starting_nodes; + NdbNodeBitmask m_starting_nodes_w_log; + + Uint16 m_president_candidate; + Uint32 m_president_candidate_gci; + Uint16 m_regReqReqSent; + Uint16 m_regReqReqRecv; + } c_start; + NdbNodeBitmask c_definedNodes; // DB nodes in config NdbNodeBitmask c_clusterNodes; // DB nodes in cluster NodeBitmask c_connectedNodes; // All kinds of connected nodes + + /** + * Nodes which we're checking for partitioned cluster + * + * i.e. nodes that connect to use, when we already have elected president + */ + NdbNodeBitmask c_readnodes_nodes; + Uint32 c_maxDynamicId; // Records @@ -208,6 +234,7 @@ private: void execPRES_TOCONF(Signal* signal); void execDISCONNECT_REP(Signal* signal); void execSYSTEM_ERROR(Signal* signal); + void execSTOP_REQ(Signal* signal); // Received signals void execDUMP_STATE_ORD(Signal* signal); @@ -222,7 +249,12 @@ private: void execREAD_NODESREQ(Signal* signal); void execSET_VAR_REQ(Signal* signal); + void execREAD_NODESREF(Signal* signal); + void execREAD_NODESCONF(Signal* signal); + void execDIH_RESTARTREF(Signal* signal); + void execDIH_RESTARTCONF(Signal* signal); + void execAPI_VERSION_REQ(Signal* signal); void execAPI_BROADCAST_REP(Signal* signal); @@ -244,6 +276,9 @@ private: void execARBIT_STOPREP(Signal* signal); // Statement blocks + void check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn); + Uint32 check_startup(Signal* signal); + void node_failed(Signal* signal, Uint16 aFailedNode); void checkStartInterface(Signal* signal); void failReport(Signal* signal, @@ -261,8 +296,9 @@ private: // Generated statement blocks void startphase1(Signal* signal); - void electionWon(); + void electionWon(Signal* signal); void cmInfoconf010Lab(Signal* signal); + void apiHbHandlingLab(Signal* signal); void timerHandlingLab(Signal* signal); void hbReceivedLab(Signal* signal); @@ -364,12 +400,12 @@ private: /* Status flags ----------------------------------*/ Uint32 c_restartPartialTimeout; + Uint32 c_restartPartionedTimeout; + Uint32 c_restartFailureTimeout; + Uint64 c_start_election_time; Uint16 creadyDistCom; - Uint16 c_regReqReqSent; - Uint16 c_regReqReqRecv; - Uint64 c_stopElectionTime; - Uint16 cpresidentCandidate; + Uint16 cdelayRegreq; Uint16 cpresidentAlive; Uint16 cnoFailedNodes; @@ -397,7 +433,7 @@ private: Uint16 cfailedNodes[MAX_NDB_NODES]; Uint16 cprepFailedNodes[MAX_NDB_NODES]; Uint16 ccommitFailedNodes[MAX_NDB_NODES]; - + struct OpAllocNodeIdReq { RequestTracker m_tracker; AllocNodeIdReq m_req; @@ -406,6 +442,9 @@ private: }; struct OpAllocNodeIdReq opAllocNodeIdReq; + + StopReq c_stopReq; + bool check_multi_node_shutdown(Signal* signal); }; #endif diff --git a/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp index 5d964acc016344580a1eb36f04d1fe9a1985c20c..6ee24561b0a818f17518ae3b5f516cae5bd53128 100644 --- a/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp +++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp @@ -35,9 +35,8 @@ void Qmgr::initData() Uint32 hbDBAPI = 500; setHbApiDelay(hbDBAPI); - - c_connectedNodes.clear(); c_connectedNodes.set(getOwnNodeId()); + c_stopReq.senderRef = 0; }//Qmgr::initData() void Qmgr::initRecords() @@ -52,6 +51,7 @@ Qmgr::Qmgr(Block_context& ctx) // Transit signals addRecSignal(GSN_DUMP_STATE_ORD, &Qmgr::execDUMP_STATE_ORD); + addRecSignal(GSN_STOP_REQ, &Qmgr::execSTOP_REQ); addRecSignal(GSN_DEBUG_SIG, &Qmgr::execDEBUG_SIG); addRecSignal(GSN_CONTINUEB, &Qmgr::execCONTINUEB); addRecSignal(GSN_CM_HEARTBEAT, &Qmgr::execCM_HEARTBEAT); @@ -101,6 +101,12 @@ Qmgr::Qmgr(Block_context& ctx) addRecSignal(GSN_ARBIT_CHOOSEREF, &Qmgr::execARBIT_CHOOSEREF); addRecSignal(GSN_ARBIT_STOPREP, &Qmgr::execARBIT_STOPREP); + addRecSignal(GSN_READ_NODESREF, &Qmgr::execREAD_NODESREF); + addRecSignal(GSN_READ_NODESCONF, &Qmgr::execREAD_NODESCONF); + + addRecSignal(GSN_DIH_RESTARTREF, &Qmgr::execDIH_RESTARTREF); + addRecSignal(GSN_DIH_RESTARTCONF, &Qmgr::execDIH_RESTARTCONF); + initData(); }//Qmgr::Qmgr() diff --git a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp index 6944774575760a95311459d635da8167af2837b8..8772e00f02792a44bb3f57c8bdf7d631ebfef244 100644 --- a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp +++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp @@ -56,6 +56,33 @@ #define DEBUG_START3(signal, msg) #endif +/** + * c_start.m_gsn = GSN_CM_REGREQ + * Possible for all nodes + * c_start.m_nodes contains all nodes in config + * + * c_start.m_gsn = GSN_CM_NODEINFOREQ; + * Set when receiving CM_REGCONF + * State possible for starting node only (not in cluster) + * + * c_start.m_nodes contains all node in alive cluster that + * that has not replied to GSN_CM_NODEINFOREQ + * passed by president in GSN_CM_REGCONF + * + * c_start.m_gsn = GSN_CM_ADD + * Possible for president only + * Set when receiving and accepting CM_REGREQ (to include node) + * + * c_start.m_nodes contains all nodes in alive cluster + starting node + * that has not replied to GSN_CM_ADD + * by sending GSN_CM_ACKADD + * + * c_start.m_gsn = GSN_CM_NODEINFOCONF + * Possible for non presidents only + * c_start.m_nodes contains a node that has been accepted by president + * but has not connected to us yet + */ + // Signal entries and statement blocks /* 4 P R O G R A M */ /*******************************/ @@ -119,6 +146,30 @@ void Qmgr::execCONTINUEB(Signal* signal) runArbitThread(signal); return; break; + case ZSTART_FAILURE_LIMIT:{ + if (cpresident != ZNIL) + { + jam(); + return; + } + Uint64 now = NdbTick_CurrentMillisecond(); + if (now > (c_start_election_time + c_restartFailureTimeout)) + { + jam(); + BaseString tmp; + tmp.append("Shutting down node as total restart time exceeds " + " StartFailureTimeout as set in config file "); + if(c_restartFailureTimeout == ~0) + tmp.append(" 0 (inifinite)"); + else + tmp.appfmt(" %d", c_restartFailureTimeout); + + progError(__LINE__, NDBD_EXIT_SYSTEM_ERROR, tmp.c_str()); + } + signal->theData[0] = ZSTART_FAILURE_LIMIT; + sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 3000, 1); + return; + } default: jam(); // ZCOULD_NOT_OCCUR_ERROR; @@ -246,14 +297,28 @@ void Qmgr::startphase1(Signal* signal) nodePtr.p->phase = ZSTARTING; nodePtr.p->blockRef = reference(); c_connectedNodes.set(nodePtr.i); + + signal->theData[0] = reference(); + sendSignal(DBDIH_REF, GSN_DIH_RESTARTREQ, signal, 1, JBB); + return; +} - signal->theData[0] = 0; // no answer - signal->theData[1] = 0; // no id - signal->theData[2] = NodeInfo::DB; - sendSignal(CMVMI_REF, GSN_OPEN_COMREQ, signal, 3, JBB); +void +Qmgr::execDIH_RESTARTREF(Signal*signal) +{ + jamEntry(); + c_start.m_latest_gci = 0; + execCM_INFOCONF(signal); +} + +void +Qmgr::execDIH_RESTARTCONF(Signal*signal) +{ + jamEntry(); + + c_start.m_latest_gci = signal->theData[1]; execCM_INFOCONF(signal); - return; } void Qmgr::setHbDelay(UintR aHbDelay) @@ -280,18 +345,24 @@ void Qmgr::execCONNECT_REP(Signal* signal) { jamEntry(); const Uint32 nodeId = signal->theData[0]; + + if (ERROR_INSERTED(931)) + { + jam(); + ndbout_c("Discarding CONNECT_REP(%d)", nodeId); + infoEvent("Discarding CONNECT_REP(%d)", nodeId); + return; + } + c_connectedNodes.set(nodeId); NodeRecPtr nodePtr; nodePtr.i = getOwnNodeId(); ptrCheckGuard(nodePtr, MAX_NODES, nodeRec); switch(nodePtr.p->phase){ - case ZSTARTING: case ZRUNNING: + ndbrequire(!c_clusterNodes.get(nodeId)); + case ZSTARTING: jam(); - if(!c_start.m_nodes.isWaitingFor(nodeId)){ - jam(); - return; - } break; case ZPREPARE_FAIL: case ZFAIL_CLOSING: @@ -303,59 +374,126 @@ void Qmgr::execCONNECT_REP(Signal* signal) case ZAPI_INACTIVE: return; } - + + if (getNodeInfo(nodeId).getType() != NodeInfo::DB) + { + jam(); + return; + } + switch(c_start.m_gsn){ case GSN_CM_REGREQ: jam(); sendCmRegReq(signal, nodeId); + + /** + * We're waiting for CM_REGCONF c_start.m_nodes contains all configured + * nodes + */ + ndbrequire(nodePtr.p->phase == ZSTARTING); + ndbrequire(c_start.m_nodes.isWaitingFor(nodeId)); return; case GSN_CM_NODEINFOREQ: jam(); - sendCmNodeInfoReq(signal, nodeId, nodePtr.p); + + if (c_start.m_nodes.isWaitingFor(nodeId)) + { + jam(); + ndbrequire(getOwnNodeId() != cpresident); + ndbrequire(nodePtr.p->phase == ZSTARTING); + sendCmNodeInfoReq(signal, nodeId, nodePtr.p); + return; + } return; - case GSN_CM_ADD:{ + case GSN_CM_NODEINFOCONF:{ jam(); - - ndbrequire(getOwnNodeId() != cpresident); - c_start.m_nodes.clearWaitingFor(nodeId); - c_start.m_gsn = RNIL; - NodeRecPtr addNodePtr; - addNodePtr.i = nodeId; - ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec); - cmAddPrepare(signal, addNodePtr, nodePtr.p); - return; + ndbrequire(getOwnNodeId() != cpresident); + ndbrequire(nodePtr.p->phase == ZRUNNING); + if (c_start.m_nodes.isWaitingFor(nodeId)) + { + jam(); + c_start.m_nodes.clearWaitingFor(nodeId); + c_start.m_gsn = RNIL; + + NodeRecPtr addNodePtr; + addNodePtr.i = nodeId; + ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec); + cmAddPrepare(signal, addNodePtr, nodePtr.p); + return; + } } default: - return; + (void)1; } + + ndbrequire(!c_start.m_nodes.isWaitingFor(nodeId)); + ndbrequire(!c_readnodes_nodes.get(nodeId)); + c_readnodes_nodes.set(nodeId); + signal->theData[0] = reference(); + sendSignal(calcQmgrBlockRef(nodeId), GSN_READ_NODESREQ, signal, 1, JBA); return; }//Qmgr::execCONNECT_REP() +void +Qmgr::execREAD_NODESCONF(Signal* signal) +{ + check_readnodes_reply(signal, + refToNode(signal->getSendersBlockRef()), + GSN_READ_NODESCONF); +} + +void +Qmgr::execREAD_NODESREF(Signal* signal) +{ + check_readnodes_reply(signal, + refToNode(signal->getSendersBlockRef()), + GSN_READ_NODESREF); +} + /*******************************/ /* CM_INFOCONF */ /*******************************/ void Qmgr::execCM_INFOCONF(Signal* signal) { + /** + * Open communcation to all DB nodes + */ + signal->theData[0] = 0; // no answer + signal->theData[1] = 0; // no id + signal->theData[2] = NodeInfo::DB; + sendSignal(CMVMI_REF, GSN_OPEN_COMREQ, signal, 3, JBB); + cpresident = ZNIL; - cpresidentCandidate = getOwnNodeId(); cpresidentAlive = ZFALSE; - c_stopElectionTime = NdbTick_CurrentMillisecond(); - c_stopElectionTime += c_restartPartialTimeout; + c_start_election_time = NdbTick_CurrentMillisecond(); + + signal->theData[0] = ZSTART_FAILURE_LIMIT; + sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 3000, 1); + cmInfoconf010Lab(signal); return; }//Qmgr::execCM_INFOCONF() +Uint32 g_start_type = 0; +NdbNodeBitmask g_nowait_nodes; // Set by clo + void Qmgr::cmInfoconf010Lab(Signal* signal) { c_start.m_startKey = 0; c_start.m_startNode = getOwnNodeId(); c_start.m_nodes.clearWaitingFor(); c_start.m_gsn = GSN_CM_REGREQ; + c_start.m_starting_nodes.clear(); + c_start.m_starting_nodes_w_log.clear(); + c_start.m_regReqReqSent = 0; + c_start.m_regReqReqRecv = 0; + c_start.m_skip_nodes = g_nowait_nodes; + c_start.m_skip_nodes.bitAND(c_definedNodes); + c_start.m_start_type = g_start_type; NodeRecPtr nodePtr; - c_regReqReqSent = c_regReqReqRecv = 0; cnoOfNodes = 0; for (nodePtr.i = 1; nodePtr.i < MAX_NDB_NODES; nodePtr.i++) { jam(); @@ -390,14 +528,18 @@ void Qmgr::cmInfoconf010Lab(Signal* signal) void Qmgr::sendCmRegReq(Signal * signal, Uint32 nodeId){ - c_regReqReqSent++; - CmRegReq * const cmRegReq = (CmRegReq *)&signal->theData[0]; - cmRegReq->blockRef = reference(); - cmRegReq->nodeId = getOwnNodeId(); - cmRegReq->version = NDB_VERSION; + CmRegReq * req = (CmRegReq *)&signal->theData[0]; + req->blockRef = reference(); + req->nodeId = getOwnNodeId(); + req->version = NDB_VERSION; + req->latest_gci = c_start.m_latest_gci; + req->start_type = c_start.m_start_type; + c_start.m_skip_nodes.copyto(NdbNodeBitmask::Size, req->skip_nodes); const Uint32 ref = calcQmgrBlockRef(nodeId); sendSignal(ref, GSN_CM_REGREQ, signal, CmRegReq::SignalLength, JBB); DEBUG_START(GSN_CM_REGREQ, nodeId, ""); + + c_start.m_regReqReqSent++; } /* @@ -437,6 +579,18 @@ Qmgr::sendCmRegReq(Signal * signal, Uint32 nodeId){ /*******************************/ /* CM_REGREQ */ /*******************************/ +static +int +check_start_type(Uint32 starting, Uint32 own) +{ + if (starting == (1 << NodeState::ST_INITIAL_START) && + ((own & (1 << NodeState::ST_INITIAL_START)) == 0)) + { + return 1; + } + return 0; +} + void Qmgr::execCM_REGREQ(Signal* signal) { DEBUG_START3(signal, ""); @@ -448,6 +602,17 @@ void Qmgr::execCM_REGREQ(Signal* signal) const BlockReference Tblockref = cmRegReq->blockRef; const Uint32 startingVersion = cmRegReq->version; addNodePtr.i = cmRegReq->nodeId; + Uint32 gci = 1; + Uint32 start_type = ~0; + NdbNodeBitmask skip_nodes; + + if (signal->getLength() == CmRegReq::SignalLength) + { + jam(); + gci = cmRegReq->latest_gci; + start_type = cmRegReq->start_type; + skip_nodes.assign(NdbNodeBitmask::Size, cmRegReq->skip_nodes); + } if (creadyDistCom == ZFALSE) { jam(); @@ -461,11 +626,19 @@ void Qmgr::execCM_REGREQ(Signal* signal) return; } - ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec); - - if (cpresident != getOwnNodeId()){ + if (check_start_type(start_type, c_start.m_start_type)) + { + jam(); + sendCmRegrefLab(signal, Tblockref, CmRegRef::ZINCOMPATIBLE_START_TYPE); + return; + } + + if (cpresident != getOwnNodeId()) + { jam(); - if (cpresident == ZNIL) { + + if (cpresident == ZNIL) + { /*** * We don't know the president. * If the node to be added has lower node id @@ -473,13 +646,18 @@ void Qmgr::execCM_REGREQ(Signal* signal) * candidate */ jam(); - if (addNodePtr.i < cpresidentCandidate) { + if (gci > c_start.m_president_candidate_gci || + (gci == c_start.m_president_candidate_gci && + addNodePtr.i < c_start.m_president_candidate)) + { jam(); - cpresidentCandidate = addNodePtr.i; - }//if + c_start.m_president_candidate = addNodePtr.i; + c_start.m_president_candidate_gci = gci; + } sendCmRegrefLab(signal, Tblockref, CmRegRef::ZELECTION); return; - } + } + /** * We are not the president. * We know the president. @@ -489,7 +667,8 @@ void Qmgr::execCM_REGREQ(Signal* signal) return; }//if - if (c_start.m_startNode != 0){ + if (c_start.m_startNode != 0) + { jam(); /** * President busy by adding another node @@ -498,7 +677,8 @@ void Qmgr::execCM_REGREQ(Signal* signal) return; }//if - if (ctoStatus == Q_ACTIVE) { + if (ctoStatus == Q_ACTIVE) + { jam(); /** * Active taking over as president @@ -507,7 +687,8 @@ void Qmgr::execCM_REGREQ(Signal* signal) return; }//if - if (getNodeInfo(addNodePtr.i).m_type != NodeInfo::DB) { + if (getNodeInfo(addNodePtr.i).m_type != NodeInfo::DB) + { jam(); /** * The new node is not in config file @@ -516,13 +697,15 @@ void Qmgr::execCM_REGREQ(Signal* signal) return; } + ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec); Phase phase = addNodePtr.p->phase; - if (phase != ZINIT){ + if (phase != ZINIT) + { jam(); DEBUG("phase = " << phase); sendCmRegrefLab(signal, Tblockref, CmRegRef::ZNOT_DEAD); return; - }//if + } jam(); /** @@ -594,7 +777,12 @@ void Qmgr::sendCmRegrefLab(Signal* signal, BlockReference TBRef, ref->blockRef = reference(); ref->nodeId = getOwnNodeId(); ref->errorCode = Terror; - ref->presidentCandidate = (cpresident == ZNIL ? cpresidentCandidate : cpresident); + ref->presidentCandidate = + (cpresident == ZNIL ? c_start.m_president_candidate : cpresident); + ref->candidate_latest_gci = c_start.m_president_candidate_gci; + ref->latest_gci = c_start.m_latest_gci; + ref->start_type = c_start.m_start_type; + c_start.m_skip_nodes.copyto(NdbNodeBitmask::Size, ref->skip_nodes); sendSignal(TBRef, GSN_CM_REGREF, signal, CmRegRef::SignalLength, JBB); DEBUG_START(GSN_CM_REGREF, refToNode(TBRef), ""); @@ -622,22 +810,33 @@ void Qmgr::execCM_REGCONF(Signal* signal) jamEntry(); const CmRegConf * const cmRegConf = (CmRegConf *)&signal->theData[0]; + Uint32 presidentNodeId = cmRegConf->presidentNodeId; if (!ndbCompatible_ndb_ndb(NDB_VERSION, cmRegConf->presidentVersion)) { jam(); char buf[128]; - BaseString::snprintf(buf,sizeof(buf),"incompatible version own=0x%x other=0x%x, shutting down", NDB_VERSION, cmRegConf->presidentVersion); + BaseString::snprintf(buf,sizeof(buf), + "incompatible version own=0x%x other=0x%x, " + " shutting down", + NDB_VERSION, cmRegConf->presidentVersion); systemErrorLab(signal, __LINE__, buf); return; } - + myNodePtr.i = getOwnNodeId(); + ptrCheckGuard(myNodePtr, MAX_NDB_NODES, nodeRec); + + ndbrequire(c_start.m_gsn == GSN_CM_REGREQ); + ndbrequire(myNodePtr.p->phase = ZSTARTING); + cpdistref = cmRegConf->presidentBlockRef; cpresident = cmRegConf->presidentNodeId; UintR TdynamicId = cmRegConf->dynamicId; c_maxDynamicId = TdynamicId; c_clusterNodes.assign(NdbNodeBitmask::Size, cmRegConf->allNdbNodes); + myNodePtr.p->ndynamicId = TdynamicId; + /*--------------------------------------------------------------*/ // Send this as an EVENT REPORT to inform about hearing about // other NDB node proclaiming to be president. @@ -648,10 +847,6 @@ void Qmgr::execCM_REGCONF(Signal* signal) signal->theData[3] = TdynamicId; sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); - myNodePtr.i = getOwnNodeId(); - ptrCheckGuard(myNodePtr, MAX_NDB_NODES, nodeRec); - myNodePtr.p->ndynamicId = TdynamicId; - for (nodePtr.i = 1; nodePtr.i < MAX_NDB_NODES; nodePtr.i++) { jam(); if (c_clusterNodes.get(nodePtr.i)){ @@ -674,6 +869,84 @@ void Qmgr::execCM_REGCONF(Signal* signal) return; }//Qmgr::execCM_REGCONF() +void +Qmgr::check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn) +{ + NodeRecPtr myNodePtr; + myNodePtr.i = getOwnNodeId(); + ptrCheckGuard(myNodePtr, MAX_NDB_NODES, nodeRec); + + NodeRecPtr nodePtr; + nodePtr.i = nodeId; + ptrCheckGuard(nodePtr, MAX_NDB_NODES, nodeRec); + + ndbrequire(c_readnodes_nodes.get(nodeId)); + ReadNodesConf* conf = (ReadNodesConf*)signal->getDataPtr(); + if (gsn == GSN_READ_NODESREF) + { + jam(); +retry: + signal->theData[0] = reference(); + sendSignal(calcQmgrBlockRef(nodeId), GSN_READ_NODESREQ, signal, 1, JBA); + return; + } + + if (conf->masterNodeId == ZNIL) + { + jam(); + goto retry; + } + + Uint32 president = conf->masterNodeId; + if (president == cpresident) + { + jam(); + c_readnodes_nodes.clear(nodeId); + return; + } + + char buf[255]; + BaseString::snprintf(buf, sizeof(buf), + "Partitioned cluster! check StartPartialTimeout, " + " node %d thinks %d is president, " + " I think president is: %d", + nodeId, president, cpresident); + + ndbout_c(buf); + CRASH_INSERTION(933); + + if (getNodeState().startLevel == NodeState::SL_STARTED) + { + jam(); + NdbNodeBitmask part; + part.assign(NdbNodeBitmask::Size, conf->clusterNodes); + FailRep* rep = (FailRep*)signal->getDataPtrSend(); + rep->failCause = FailRep::ZPARTITIONED_CLUSTER; + rep->president = cpresident; + c_clusterNodes.copyto(NdbNodeBitmask::Size, rep->partition); + Uint32 ref = calcQmgrBlockRef(nodeId); + Uint32 i = 0; + while((i = part.find(i + 1)) != NdbNodeBitmask::NotFound) + { + if (i == nodeId) + continue; + rep->failNodeId = i; + sendSignal(ref, GSN_FAIL_REP, signal, FailRep::SignalLength, JBA); + } + rep->failNodeId = nodeId; + sendSignal(ref, GSN_FAIL_REP, signal, FailRep::SignalLength, JBB); + return; + } + + CRASH_INSERTION(932); + + progError(__LINE__, + NDBD_EXIT_ARBIT_SHUTDOWN, + buf); + + ndbrequire(false); +} + void Qmgr::sendCmNodeInfoReq(Signal* signal, Uint32 nodeId, const NodeRec * self){ CmNodeInfoReq * const req = (CmNodeInfoReq*)signal->getDataPtrSend(); @@ -703,26 +976,105 @@ Qmgr::sendCmNodeInfoReq(Signal* signal, Uint32 nodeId, const NodeRec * self){ /*******************************/ /* CM_REGREF */ /*******************************/ +static +const char * +get_start_type_string(Uint32 st) +{ + static char buf[256]; + + if (st == 0) + { + return "<ANY>"; + } + else + { + buf[0] = 0; + for(Uint32 i = 0; i<NodeState::ST_ILLEGAL_TYPE; i++) + { + if (st & (1 << i)) + { + if (buf[0]) + strcat(buf, "/"); + switch(i){ + case NodeState::ST_INITIAL_START: + strcat(buf, "inital start"); + break; + case NodeState::ST_SYSTEM_RESTART: + strcat(buf, "system restart"); + break; + case NodeState::ST_NODE_RESTART: + strcat(buf, "node restart"); + break; + case NodeState::ST_INITIAL_NODE_RESTART: + strcat(buf, "initial node restart"); + break; + } + } + } + return buf; + } +} + void Qmgr::execCM_REGREF(Signal* signal) { jamEntry(); - c_regReqReqRecv++; - // Ignore block reference in data[0] - UintR TaddNodeno = signal->theData[1]; - UintR TrefuseReason = signal->theData[2]; - Uint32 candidate = signal->theData[3]; + CmRegRef* ref = (CmRegRef*)signal->getDataPtr(); + UintR TaddNodeno = ref->nodeId; + UintR TrefuseReason = ref->errorCode; + Uint32 candidate = ref->presidentCandidate; + Uint32 node_gci = 1; + Uint32 candidate_gci = 1; + Uint32 start_type = ~0; + NdbNodeBitmask skip_nodes; DEBUG_START3(signal, TrefuseReason); - - if(candidate != cpresidentCandidate){ + + if (signal->getLength() == CmRegRef::SignalLength) + { jam(); - c_regReqReqRecv = ~0; + node_gci = ref->latest_gci; + candidate_gci = ref->candidate_latest_gci; + start_type = ref->start_type; + skip_nodes.assign(NdbNodeBitmask::Size, ref->skip_nodes); } + + c_start.m_regReqReqRecv++; + // Ignore block reference in data[0] + + if(candidate != c_start.m_president_candidate) + { + jam(); + c_start.m_regReqReqRecv = ~0; + } + + c_start.m_starting_nodes.set(TaddNodeno); + if (node_gci) + { + jam(); + c_start.m_starting_nodes_w_log.set(TaddNodeno); + } + + skip_nodes.bitAND(c_definedNodes); + c_start.m_skip_nodes.bitOR(skip_nodes); + + char buf[100]; switch (TrefuseReason) { case CmRegRef::ZINCOMPATIBLE_VERSION: jam(); - systemErrorLab(signal, __LINE__, "incompatible version, connection refused by running ndb node"); + systemErrorLab(signal, __LINE__, + "incompatible version, " + "connection refused by running ndb node"); + case CmRegRef::ZINCOMPATIBLE_START_TYPE: + jam(); + BaseString::snprintf(buf, sizeof(buf), + "incompatible start type detected: node %d" + " reports %s(%d) my start type: %s(%d)", + TaddNodeno, + get_start_type_string(start_type), start_type, + get_start_type_string(c_start.m_start_type), + c_start.m_start_type); + progError(__LINE__, NDBD_EXIT_SR_RESTARTCONFLICT, buf); break; case CmRegRef::ZBUSY: case CmRegRef::ZBUSY_TO_PRES: @@ -741,14 +1093,18 @@ void Qmgr::execCM_REGREF(Signal* signal) break; case CmRegRef::ZELECTION: jam(); - if (cpresidentCandidate > TaddNodeno) { + if (candidate_gci > c_start.m_president_candidate_gci || + (candidate_gci == c_start.m_president_candidate_gci && + candidate < c_start.m_president_candidate)) + { jam(); //---------------------------------------- /* We may already have a candidate */ /* choose the lowest nodeno */ //---------------------------------------- signal->theData[3] = 2; - cpresidentCandidate = TaddNodeno; + c_start.m_president_candidate = candidate; + c_start.m_president_candidate_gci = candidate_gci; } else { signal->theData[3] = 4; }//if @@ -776,32 +1132,34 @@ void Qmgr::execCM_REGREF(Signal* signal) //----------------------------------------- sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); - if(cpresidentAlive == ZTRUE){ + if(cpresidentAlive == ZTRUE) + { jam(); - DEBUG(""); + DEBUG("cpresidentAlive"); return; } - if(c_regReqReqSent != c_regReqReqRecv){ + if(c_start.m_regReqReqSent != c_start.m_regReqReqRecv) + { jam(); - DEBUG( c_regReqReqSent << " != " << c_regReqReqRecv); + DEBUG(c_start.m_regReqReqSent << " != " << c_start.m_regReqReqRecv); return; } - if(cpresidentCandidate != getOwnNodeId()){ + if(c_start.m_president_candidate != getOwnNodeId()) + { jam(); - DEBUG(""); + DEBUG("i'm not the candidate"); return; } - + /** - * All configured nodes has agreed + * All connected nodes has agreed */ - Uint64 now = NdbTick_CurrentMillisecond(); - if((c_regReqReqRecv == cnoOfNodes) || now > c_stopElectionTime){ + if(check_startup(signal)) + { jam(); - electionWon(); - sendSttorryLab(signal); + electionWon(signal); /** * Start timer handling @@ -813,8 +1171,193 @@ void Qmgr::execCM_REGREF(Signal* signal) return; }//Qmgr::execCM_REGREF() +Uint32 +Qmgr::check_startup(Signal* signal) +{ + Uint64 now = NdbTick_CurrentMillisecond(); + Uint64 partial_timeout = c_start_election_time + c_restartPartialTimeout; + Uint64 partitioned_timeout = partial_timeout + c_restartPartionedTimeout; + + /** + * First see if we should wait more... + */ + NdbNodeBitmask tmp; + tmp.bitOR(c_start.m_skip_nodes); + tmp.bitOR(c_start.m_starting_nodes); + + NdbNodeBitmask wait; + wait.assign(c_definedNodes); + wait.bitANDC(tmp); + + Uint32 retVal = 0; + NdbNodeBitmask report_mask; + + if ((c_start.m_latest_gci == 0) || + (c_start.m_start_type == (1 << NodeState::ST_INITIAL_START))) + { + if (!tmp.equal(c_definedNodes)) + { + jam(); + signal->theData[1] = 1; + signal->theData[2] = ~0; + report_mask.assign(wait); + retVal = 0; + goto start_report; + } + else + { + jam(); + signal->theData[1] = 0x8000; + report_mask.assign(c_definedNodes); + report_mask.bitANDC(c_start.m_starting_nodes); + retVal = 1; + goto start_report; + } + } + { + const bool all = c_start.m_starting_nodes.equal(c_definedNodes); + CheckNodeGroups* sd = (CheckNodeGroups*)&signal->theData[0]; + + { + /** + * Check for missing node group directly + */ + char buf[100]; + NdbNodeBitmask check; + check.assign(c_definedNodes); + check.bitANDC(c_start.m_starting_nodes); // Not connected nodes + check.bitOR(c_start.m_starting_nodes_w_log); + + sd->blockRef = reference(); + sd->requestType = CheckNodeGroups::Direct | CheckNodeGroups::ArbitCheck; + sd->mask = check; + EXECUTE_DIRECT(DBDIH, GSN_CHECKNODEGROUPSREQ, signal, + CheckNodeGroups::SignalLength); + + if (sd->output == CheckNodeGroups::Lose) + { + jam(); + goto missing_nodegroup; + } + } + + sd->blockRef = reference(); + sd->requestType = CheckNodeGroups::Direct | CheckNodeGroups::ArbitCheck; + sd->mask = c_start.m_starting_nodes; + EXECUTE_DIRECT(DBDIH, GSN_CHECKNODEGROUPSREQ, signal, + CheckNodeGroups::SignalLength); + + const Uint32 result = sd->output; + + sd->blockRef = reference(); + sd->requestType = CheckNodeGroups::Direct | CheckNodeGroups::ArbitCheck; + sd->mask = c_start.m_starting_nodes_w_log; + EXECUTE_DIRECT(DBDIH, GSN_CHECKNODEGROUPSREQ, signal, + CheckNodeGroups::SignalLength); + + const Uint32 result_w_log = sd->output; + + if (tmp.equal(c_definedNodes)) + { + /** + * All nodes (wrt no-wait nodes) has connected... + * this means that we will now start or die + */ + jam(); + switch(result_w_log){ + case CheckNodeGroups::Lose: + { + jam(); + goto missing_nodegroup; + } + case CheckNodeGroups::Win: + signal->theData[1] = all ? 0x8001 : 0x8002; + report_mask.assign(c_definedNodes); + report_mask.bitANDC(c_start.m_starting_nodes); + retVal = 1; + goto start_report; + case CheckNodeGroups::Partitioning: + ndbrequire(result != CheckNodeGroups::Lose); + signal->theData[1] = + all ? 0x8001 : (result == CheckNodeGroups::Win ? 0x8002 : 0x8003); + report_mask.assign(c_definedNodes); + report_mask.bitANDC(c_start.m_starting_nodes); + retVal = 1; + goto start_report; + } + } + + if (now < partial_timeout) + { + jam(); + signal->theData[1] = c_restartPartialTimeout == ~0 ? 2 : 3; + signal->theData[2] = Uint32((partial_timeout - now + 500) / 1000); + report_mask.assign(wait); + retVal = 0; + goto start_report; + } + + /** + * Start partial has passed...check for partitioning... + */ + switch(result_w_log){ + case CheckNodeGroups::Lose: + jam(); + goto missing_nodegroup; + case CheckNodeGroups::Partitioning: + if (now < partitioned_timeout && result != CheckNodeGroups::Win) + { + signal->theData[1] = c_restartPartionedTimeout == ~0 ? 4 : 5; + signal->theData[2] = Uint32((partitioned_timeout - now + 500) / 1000); + report_mask.assign(c_definedNodes); + report_mask.bitANDC(c_start.m_starting_nodes); + retVal = 0; + goto start_report; + } + // Fall through... + case CheckNodeGroups::Win: + signal->theData[1] = + all ? 0x8001 : (result == CheckNodeGroups::Win ? 0x8002 : 0x8003); + report_mask.assign(c_definedNodes); + report_mask.bitANDC(c_start.m_starting_nodes); + retVal = 1; + goto start_report; + } + } + ndbrequire(false); + +start_report: + jam(); + { + Uint32 sz = NdbNodeBitmask::Size; + signal->theData[0] = NDB_LE_StartReport; + signal->theData[3] = sz; + Uint32* ptr = signal->theData+4; + c_definedNodes.copyto(sz, ptr); ptr += sz; + c_start.m_starting_nodes.copyto(sz, ptr); ptr += sz; + c_start.m_skip_nodes.copyto(sz, ptr); ptr += sz; + report_mask.copyto(sz, ptr); ptr+= sz; + sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, + 4+4*NdbNodeBitmask::Size, JBB); + } + return retVal; + +missing_nodegroup: + jam(); + char buf[100], mask1[100], mask2[100]; + c_start.m_starting_nodes.getText(mask1); + tmp.assign(c_start.m_starting_nodes); + tmp.bitANDC(c_start.m_starting_nodes_w_log); + tmp.getText(mask2); + BaseString::snprintf(buf, sizeof(buf), + "Unable to start missing node group! " + " starting: %s (missing fs for: %s)", + mask1, mask2); + progError(__LINE__, NDBD_EXIT_SR_RESTARTCONFLICT, buf); +} + void -Qmgr::electionWon(){ +Qmgr::electionWon(Signal* signal){ NodeRecPtr myNodePtr; cpresident = getOwnNodeId(); /* This node becomes president. */ myNodePtr.i = getOwnNodeId(); @@ -831,8 +1374,21 @@ Qmgr::electionWon(){ c_clusterNodes.set(getOwnNodeId()); cpresidentAlive = ZTRUE; - c_stopElectionTime = ~0; + c_start_election_time = ~0; c_start.reset(); + + signal->theData[0] = NDB_LE_CM_REGCONF; + signal->theData[1] = getOwnNodeId(); + signal->theData[2] = cpresident; + signal->theData[3] = 1; + sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); + + c_start.m_starting_nodes.clear(getOwnNodeId()); + if (c_start.m_starting_nodes.isclear()) + { + jam(); + sendSttorryLab(signal); + } } /* @@ -846,7 +1402,14 @@ Qmgr::electionWon(){ /*--------------------------------------------------------------*/ void Qmgr::regreqTimeLimitLab(Signal* signal) { - if(cpresident == ZNIL){ + if(cpresident == ZNIL) + { + if (c_start.m_president_candidate == ZNIL) + { + jam(); + c_start.m_president_candidate = getOwnNodeId(); + } + cmInfoconf010Lab(signal); } }//Qmgr::regreqTimelimitLab() @@ -967,7 +1530,7 @@ Qmgr::cmAddPrepare(Signal* signal, NodeRecPtr nodePtr, const NodeRec * self){ ndbrequire(signal->header.theVerId_signalNumber == GSN_CM_ADD); c_start.m_nodes.clearWaitingFor(); c_start.m_nodes.setWaitingFor(nodePtr.i); - c_start.m_gsn = GSN_CM_ADD; + c_start.m_gsn = GSN_CM_NODEINFOCONF; #else warningEvent("Enabling communication to CM_ADD node %u state=%d", nodePtr.i, @@ -1256,6 +1819,17 @@ void Qmgr::execCM_ACKADD(Signal* signal) */ handleArbitNdbAdd(signal, addNodePtr.i); c_start.reset(); + + if (c_start.m_starting_nodes.get(addNodePtr.i)) + { + jam(); + c_start.m_starting_nodes.clear(addNodePtr.i); + if (c_start.m_starting_nodes.isclear()) + { + jam(); + sendSttorryLab(signal); + } + } return; }//switch ndbrequire(false); @@ -1409,7 +1983,8 @@ void Qmgr::initData(Signal* signal) cnoPrepFailedNodes = 0; creadyDistCom = ZFALSE; cpresident = ZNIL; - cpresidentCandidate = ZNIL; + c_start.m_president_candidate = ZNIL; + c_start.m_president_candidate_gci = 0; cpdistref = 0; cneighbourh = ZNIL; cneighbourl = ZNIL; @@ -1437,15 +2012,33 @@ void Qmgr::initData(Signal* signal) Uint32 hbDBAPI = 1500; Uint32 arbitTimeout = 1000; c_restartPartialTimeout = 30000; + c_restartPartionedTimeout = 60000; + c_restartFailureTimeout = ~0; ndb_mgm_get_int_parameter(p, CFG_DB_HEARTBEAT_INTERVAL, &hbDBDB); ndb_mgm_get_int_parameter(p, CFG_DB_API_HEARTBEAT_INTERVAL, &hbDBAPI); ndb_mgm_get_int_parameter(p, CFG_DB_ARBIT_TIMEOUT, &arbitTimeout); ndb_mgm_get_int_parameter(p, CFG_DB_START_PARTIAL_TIMEOUT, &c_restartPartialTimeout); - if(c_restartPartialTimeout == 0){ + ndb_mgm_get_int_parameter(p, CFG_DB_START_PARTITION_TIMEOUT, + &c_restartPartionedTimeout); + ndb_mgm_get_int_parameter(p, CFG_DB_START_FAILURE_TIMEOUT, + &c_restartFailureTimeout); + + if(c_restartPartialTimeout == 0) + { c_restartPartialTimeout = ~0; } + if (c_restartPartionedTimeout ==0) + { + c_restartPartionedTimeout = ~0; + } + + if (c_restartFailureTimeout == 0) + { + c_restartFailureTimeout = ~0; + } + setHbDelay(hbDBDB); setHbApiDelay(hbDBAPI); setArbitTimeout(arbitTimeout); @@ -1872,10 +2465,23 @@ void Qmgr::execDISCONNECT_REP(Signal* signal) const Uint32 nodeId = rep->nodeId; const Uint32 err = rep->err; c_connectedNodes.clear(nodeId); - + c_readnodes_nodes.clear(nodeId); + NodeRecPtr nodePtr; nodePtr.i = getOwnNodeId(); ptrCheckGuard(nodePtr, MAX_NODES, nodeRec); + + char buf[100]; + if (getNodeInfo(nodeId).getType() == NodeInfo::DB && + getNodeState().startLevel < NodeState::SL_STARTED) + { + jam(); + CRASH_INSERTION(932); + BaseString::snprintf(buf, 100, "Node %u disconected", nodeId); + progError(__LINE__, NDBD_EXIT_SR_OTHERNODEFAILED, buf); + ndbrequire(false); + } + switch(nodePtr.p->phase){ case ZRUNNING: jam(); @@ -1893,9 +2499,12 @@ void Qmgr::execDISCONNECT_REP(Signal* signal) case ZAPI_ACTIVE: ndbrequire(false); case ZAPI_INACTIVE: + { + BaseString::snprintf(buf, 100, "Node %u disconected", nodeId); + progError(__LINE__, NDBD_EXIT_SR_OTHERNODEFAILED, buf); ndbrequire(false); } - + } node_failed(signal, nodeId); }//DISCONNECT_REP @@ -2153,10 +2762,20 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode, failedNodePtr.i = aFailedNode; ptrCheckGuard(failedNodePtr, MAX_NODES, nodeRec); + FailRep* rep = (FailRep*)signal->getDataPtr(); + + if (check_multi_node_shutdown(signal)) + { + jam(); + return; + } + if (failedNodePtr.i == getOwnNodeId()) { jam(); + Uint32 code = 0; const char * msg = 0; + char extra[100]; switch(aFailCause){ case FailRep::ZOWN_FAILURE: msg = "Own failure"; @@ -2177,17 +2796,51 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode, case FailRep::ZLINK_FAILURE: msg = "Connection failure"; break; + case FailRep::ZPARTITIONED_CLUSTER: + { + code = NDBD_EXIT_ARBIT_SHUTDOWN; + char buf1[100], buf2[100]; + c_clusterNodes.getText(buf1); + if (signal->getLength()== FailRep::SignalLength + FailRep::ExtraLength && + signal->header.theVerId_signalNumber == GSN_FAIL_REP) + { + jam(); + NdbNodeBitmask part; + part.assign(NdbNodeBitmask::Size, rep->partition); + part.getText(buf2); + BaseString::snprintf(extra, sizeof(extra), + "Partitioned cluster!" + " Our cluster: %s other cluster: %s", + buf1, buf2); + } + else + { + jam(); + BaseString::snprintf(extra, sizeof(extra), + "Partitioned cluster!" + " Our cluster: %s ", buf1); + } + msg = extra; + break; + } + case FailRep::ZMULTI_NODE_SHUTDOWN: + msg = "Multi node shutdown"; + break; + default: + msg = "<UNKNOWN>"; } - char buf[100]; - BaseString::snprintf(buf, 100, + CRASH_INSERTION(932); + + char buf[255]; + BaseString::snprintf(buf, sizeof(buf), "We(%u) have been declared dead by %u reason: %s(%u)", getOwnNodeId(), refToNode(signal->getSendersBlockRef()), - aFailCause, - msg ? msg : "<Unknown>"); - - progError(__LINE__, 0, buf); + msg ? msg : "<Unknown>", + aFailCause); + + progError(__LINE__, code, buf); return; }//if @@ -2244,7 +2897,13 @@ void Qmgr::execPREP_FAILREQ(Signal* signal) { NodeRecPtr myNodePtr; jamEntry(); - + + if (check_multi_node_shutdown(signal)) + { + jam(); + return; + } + PrepFailReqRef * const prepFail = (PrepFailReqRef *)&signal->theData[0]; BlockReference Tblockref = prepFail->xxxBlockRef; @@ -3896,6 +4555,7 @@ Qmgr::stateArbitCrash(Signal* signal) if (! (arbitRec.getTimediff() > getArbitTimeout())) return; #endif + CRASH_INSERTION(932); progError(__LINE__, NDBD_EXIT_ARBIT_SHUTDOWN, "Arbitrator decided to shutdown this node"); } @@ -3959,8 +4619,10 @@ Qmgr::execDUMP_STATE_ORD(Signal* signal) case 1: infoEvent("creadyDistCom = %d, cpresident = %d\n", creadyDistCom, cpresident); - infoEvent("cpresidentAlive = %d, cpresidentCand = %d\n", - cpresidentAlive, cpresidentCandidate); + infoEvent("cpresidentAlive = %d, cpresidentCand = %d (gci: %d)\n", + cpresidentAlive, + c_start.m_president_candidate, + c_start.m_president_candidate_gci); infoEvent("ctoStatus = %d\n", ctoStatus); for(Uint32 i = 1; i<MAX_NDB_NODES; i++){ if(getNodeInfo(i).getType() == NodeInfo::DB){ @@ -4221,3 +4883,43 @@ Qmgr::completeAllocNodeIdReq(Signal *signal) sendSignal(opAllocNodeIdReq.m_req.senderRef, GSN_ALLOC_NODEID_CONF, signal, AllocNodeIdConf::SignalLength, JBB); } + +void +Qmgr::execSTOP_REQ(Signal* signal) +{ + jamEntry(); + c_stopReq = * (StopReq*)signal->getDataPtr(); + + if (c_stopReq.senderRef) + { + jam(); + ndbrequire(NdbNodeBitmask::get(c_stopReq.nodes, getOwnNodeId())); + + StopConf *conf = (StopConf*)signal->getDataPtrSend(); + conf->senderData = c_stopReq.senderData; + conf->nodeState = getOwnNodeId(); + sendSignal(c_stopReq.senderRef, + GSN_STOP_CONF, signal, StopConf::SignalLength, JBA); + } +} + +bool +Qmgr::check_multi_node_shutdown(Signal* signal) +{ + if (c_stopReq.senderRef && + NdbNodeBitmask::get(c_stopReq.nodes, getOwnNodeId())) + { + jam(); + if(StopReq::getPerformRestart(c_stopReq.requestInfo)) + { + jam(); + StartOrd * startOrd = (StartOrd *)&signal->theData[0]; + startOrd->restartInfo = c_stopReq.requestInfo; + EXECUTE_DIRECT(CMVMI, GSN_START_ORD, signal, 2); + } else { + EXECUTE_DIRECT(CMVMI, GSN_STOP_ORD, signal, 1); + } + return true; + } + return false; +} diff --git a/storage/ndb/src/kernel/vm/Configuration.cpp b/storage/ndb/src/kernel/vm/Configuration.cpp index 5f3b601023f00e3d7b66a15846fb3534f904f0c2..227ad6d689374a77c22dafea933f7491ae333771 100644 --- a/storage/ndb/src/kernel/vm/Configuration.cpp +++ b/storage/ndb/src/kernel/vm/Configuration.cpp @@ -55,6 +55,12 @@ enum ndbd_options { NDB_STD_OPTS_VARS; // XXX should be my_bool ??? static int _daemon, _no_daemon, _foreground, _initial, _no_start; +static int _initialstart; +static const char* _nowait_nodes; + +extern Uint32 g_start_type; +extern NdbNodeBitmask g_nowait_nodes; + /** * Arguments to NDB process */ @@ -82,6 +88,14 @@ static struct my_option my_long_options[] = " (implies --nodaemon)", (gptr*) &_foreground, (gptr*) &_foreground, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, + { "nowait-nodes", NO_ARG, + "Nodes that will not be waited for during start", + (gptr*) &_nowait_nodes, (gptr*) &_nowait_nodes, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + { "initial-start", NO_ARG, + "Perform initial start", + (gptr*) &_initialstart, (gptr*) &_initialstart, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; static void short_usage_sub(void) @@ -150,6 +164,37 @@ Configuration::init(int argc, char** argv) globalData.ownId= 0; + if (_nowait_nodes) + { + BaseString str(_nowait_nodes); + Vector<BaseString> arr; + str.split(arr, ","); + for (Uint32 i = 0; i<arr.size(); i++) + { + char *endptr = 0; + long val = strtol(arr[i].c_str(), &endptr, 10); + if (*endptr) + { + ndbout_c("Unable to parse nowait-nodes argument: %s : %s", + arr[i].c_str(), _nowait_nodes); + exit(-1); + } + if (! (val > 0 && val < MAX_NDB_NODES)) + { + ndbout_c("Invalid nodeid specified in nowait-nodes: %d : %s", + val, _nowait_nodes); + exit(-1); + } + g_nowait_nodes.set(val); + } + } + + if (_initialstart) + { + _initialStart = true; + g_start_type |= (1 << NodeState::ST_INITIAL_START); + } + return true; } diff --git a/storage/ndb/src/kernel/vm/Emulator.cpp b/storage/ndb/src/kernel/vm/Emulator.cpp index d05fc5fa97c2c565afca6c80a417f2c0af316494..7784048dcb396d89ac9b1db31ed28321d70c3f12 100644 --- a/storage/ndb/src/kernel/vm/Emulator.cpp +++ b/storage/ndb/src/kernel/vm/Emulator.cpp @@ -114,6 +114,7 @@ EmulatorData::destroy(){ delete theSimBlockList; theSimBlockList = 0; if(m_socket_server) delete m_socket_server; m_socket_server = 0; + NdbMutex_Destroy(theShutdownMutex); if (m_mem_manager) delete m_mem_manager; m_mem_manager = 0; diff --git a/storage/ndb/src/mgmapi/mgmapi.cpp b/storage/ndb/src/mgmapi/mgmapi.cpp index 27e25369439c80cda49005b815eea924bef61fa8..22f3d2524a963bdc9981135df2cf94445aaefcb5 100644 --- a/storage/ndb/src/mgmapi/mgmapi.cpp +++ b/storage/ndb/src/mgmapi/mgmapi.cpp @@ -138,6 +138,12 @@ setError(NdbMgmHandle h, int error, int error_line, const char * msg, ...){ return ret; \ } +#define DBUG_CHECK_REPLY(reply, ret) \ + if (reply == NULL) { \ + SET_ERROR(handle, NDB_MGM_ILLEGAL_SERVER_REPLY, ""); \ + DBUG_RETURN(ret); \ + } + /***************************************************************************** * Handles *****************************************************************************/ @@ -2171,9 +2177,9 @@ ndb_mgm_set_connection_int_parameter(NdbMgmHandle handle, int param, int value, struct ndb_mgm_reply* mgmreply){ - DBUG_ENTER("ndb_mgm_set_connection_int_parameter"); CHECK_HANDLE(handle, 0); CHECK_CONNECTED(handle, 0); + DBUG_ENTER("ndb_mgm_set_connection_int_parameter"); Properties args; args.put("node1", node1); @@ -2190,7 +2196,7 @@ ndb_mgm_set_connection_int_parameter(NdbMgmHandle handle, const Properties *prop; prop= ndb_mgm_call(handle, reply, "set connection parameter", &args); - CHECK_REPLY(prop, -1); + DBUG_CHECK_REPLY(prop, -1); int res= -1; do { @@ -2214,9 +2220,9 @@ ndb_mgm_get_connection_int_parameter(NdbMgmHandle handle, int param, int *value, struct ndb_mgm_reply* mgmreply){ - DBUG_ENTER("ndb_mgm_get_connection_int_parameter"); CHECK_HANDLE(handle, -1); CHECK_CONNECTED(handle, -2); + DBUG_ENTER("ndb_mgm_get_connection_int_parameter"); Properties args; args.put("node1", node1); @@ -2232,7 +2238,7 @@ ndb_mgm_get_connection_int_parameter(NdbMgmHandle handle, const Properties *prop; prop = ndb_mgm_call(handle, reply, "get connection parameter", &args); - CHECK_REPLY(prop, -3); + DBUG_CHECK_REPLY(prop, -3); int res= -1; do { @@ -2280,9 +2286,9 @@ ndb_mgm_get_mgmd_nodeid(NdbMgmHandle handle) { Uint32 nodeid=0; - DBUG_ENTER("ndb_mgm_get_mgmd_nodeid"); CHECK_HANDLE(handle, 0); CHECK_CONNECTED(handle, 0); + DBUG_ENTER("ndb_mgm_get_mgmd_nodeid"); Properties args; @@ -2294,7 +2300,7 @@ ndb_mgm_get_mgmd_nodeid(NdbMgmHandle handle) const Properties *prop; prop = ndb_mgm_call(handle, reply, "get mgmd nodeid", &args); - CHECK_REPLY(prop, 0); + DBUG_CHECK_REPLY(prop, 0); if(!prop->get("nodeid",&nodeid)){ fprintf(handle->errstream, "Unable to get value\n"); @@ -2308,9 +2314,9 @@ ndb_mgm_get_mgmd_nodeid(NdbMgmHandle handle) extern "C" int ndb_mgm_report_event(NdbMgmHandle handle, Uint32 *data, Uint32 length) { - DBUG_ENTER("ndb_mgm_report_event"); CHECK_HANDLE(handle, 0); CHECK_CONNECTED(handle, 0); + DBUG_ENTER("ndb_mgm_report_event"); Properties args; args.put("length", length); @@ -2329,7 +2335,7 @@ int ndb_mgm_report_event(NdbMgmHandle handle, Uint32 *data, Uint32 length) const Properties *prop; prop = ndb_mgm_call(handle, reply, "report event", &args); - CHECK_REPLY(prop, -1); + DBUG_CHECK_REPLY(prop, -1); DBUG_RETURN(0); } @@ -2337,9 +2343,9 @@ int ndb_mgm_report_event(NdbMgmHandle handle, Uint32 *data, Uint32 length) extern "C" int ndb_mgm_end_session(NdbMgmHandle handle) { - DBUG_ENTER("ndb_mgm_end_session"); CHECK_HANDLE(handle, 0); CHECK_CONNECTED(handle, 0); + DBUG_ENTER("ndb_mgm_end_session"); SocketOutputStream s_output(handle->socket); s_output.println("end session"); diff --git a/storage/ndb/src/mgmclient/CommandInterpreter.cpp b/storage/ndb/src/mgmclient/CommandInterpreter.cpp index 5496b2dadc345e59ffdaa7789228a95e5b1a3715..ccd05abaaa16e08ada4482536a38fef54dd68939 100644 --- a/storage/ndb/src/mgmclient/CommandInterpreter.cpp +++ b/storage/ndb/src/mgmclient/CommandInterpreter.cpp @@ -18,6 +18,7 @@ #include <my_sys.h> #include <Vector.hpp> #include <mgmapi.h> +#include <util/BaseString.hpp> class MgmtSrvr; @@ -63,6 +64,9 @@ private: */ void analyseAfterFirstToken(int processId, char* allAfterFirstTokenCstr); + void executeCommand(Vector<BaseString> &command_list, + unsigned command_pos, + int *node_ids, int no_of_nodes); /** * Parse the block specification part of the LOG* commands, * things after LOG*: [BLOCK = {ALL|<blockName>+}] @@ -97,10 +101,14 @@ private: public: void executeStop(int processId, const char* parameters, bool all); + void executeStop(Vector<BaseString> &command_list, unsigned command_pos, + int *node_ids, int no_of_nodes); void executeEnterSingleUser(char* parameters); void executeExitSingleUser(char* parameters); void executeStart(int processId, const char* parameters, bool all); void executeRestart(int processId, const char* parameters, bool all); + void executeRestart(Vector<BaseString> &command_list, unsigned command_pos, + int *node_ids, int no_of_nodes); void executeLogLevel(int processId, const char* parameters, bool all); void executeError(int processId, const char* parameters, bool all); void executeLog(int processId, const char* parameters, bool all); @@ -583,9 +591,16 @@ CommandInterpreter::execute_impl(const char *_line) } } while (do_continue); // if there is anything in the line proceed + Vector<BaseString> command_list; + { + BaseString tmp(line); + tmp.split(command_list); + for (unsigned i= 0; i < command_list.size();) + command_list[i].c_str()[0] ? i++ : (command_list.erase(i),0); + } char* firstToken = strtok(line, " "); char* allAfterFirstToken = strtok(NULL, ""); - + if (strcasecmp(firstToken, "HELP") == 0 || strcasecmp(firstToken, "?") == 0) { executeHelp(allAfterFirstToken); @@ -656,22 +671,45 @@ CommandInterpreter::execute_impl(const char *_line) analyseAfterFirstToken(-1, allAfterFirstToken); } else { /** - * First token should be a digit, node ID + * First tokens should be digits, node ID's */ - int nodeId; - - if (! convert(firstToken, nodeId)) { + int node_ids[MAX_NODES]; + unsigned pos; + for (pos= 0; pos < command_list.size(); pos++) + { + int node_id; + if (convert(command_list[pos].c_str(), node_id)) + { + if (node_id <= 0) { + ndbout << "Invalid node ID: " << command_list[pos].c_str() + << "." << endl; + DBUG_RETURN(true); + } + node_ids[pos]= node_id; + continue; + } + break; + } + int no_of_nodes= pos; + if (no_of_nodes == 0) + { + /* No digit found */ invalid_command(_line); DBUG_RETURN(true); } - - if (nodeId <= 0) { - ndbout << "Invalid node ID: " << firstToken << "." << endl; + if (pos == command_list.size()) + { + /* No command found */ + invalid_command(_line); DBUG_RETURN(true); } - - analyseAfterFirstToken(nodeId, allAfterFirstToken); - + if (no_of_nodes == 1) + { + analyseAfterFirstToken(node_ids[0], allAfterFirstToken); + DBUG_RETURN(true); + } + executeCommand(command_list, pos, node_ids, no_of_nodes); + DBUG_RETURN(true); } DBUG_RETURN(true); } @@ -741,6 +779,27 @@ CommandInterpreter::analyseAfterFirstToken(int processId, ndbout << endl; } +void +CommandInterpreter::executeCommand(Vector<BaseString> &command_list, + unsigned command_pos, + int *node_ids, int no_of_nodes) +{ + const char *cmd= command_list[command_pos].c_str(); + if (strcasecmp("STOP", cmd) == 0) + { + executeStop(command_list, command_pos+1, node_ids, no_of_nodes); + return; + } + if (strcasecmp("RESTART", cmd) == 0) + { + executeRestart(command_list, command_pos+1, node_ids, no_of_nodes); + return; + } + ndbout_c("Invalid command: '%s' after multi node id list. " + "Expected STOP or RESTART.", cmd); + return; +} + /** * Get next nodeid larger than the give node_id. node_id will be * set to the next node_id in the list. node_id should be set @@ -1020,7 +1079,7 @@ print_nodes(ndb_mgm_cluster_state *state, ndb_mgm_configuration_iterator *it, } if (node_state->node_group >= 0) { ndbout << ", Nodegroup: " << node_state->node_group; - if (node_state->dynamic_id == master_id) + if (master_id && node_state->dynamic_id == master_id) ndbout << ", Master"; } } @@ -1326,24 +1385,60 @@ CommandInterpreter::executeClusterLog(char* parameters) //***************************************************************************** void -CommandInterpreter::executeStop(int processId, const char *, bool all) +CommandInterpreter::executeStop(int processId, const char *parameters, + bool all) { - int result = 0; - if(all) { - result = ndb_mgm_stop(m_mgmsrv, 0, 0); - } else { - result = ndb_mgm_stop(m_mgmsrv, 1, &processId); + Vector<BaseString> command_list; + if (parameters) + { + BaseString tmp(parameters); + tmp.split(command_list); + for (unsigned i= 0; i < command_list.size();) + command_list[i].c_str()[0] ? i++ : (command_list.erase(i),0); } - if (result < 0) { - ndbout << "Shutdown failed." << endl; + if (all) + executeStop(command_list, 0, 0, 0); + else + executeStop(command_list, 0, &processId, 1); +} + +void +CommandInterpreter::executeStop(Vector<BaseString> &command_list, + unsigned command_pos, + int *node_ids, int no_of_nodes) +{ + int abort= 0; + for (; command_pos < command_list.size(); command_pos++) + { + const char *item= command_list[command_pos].c_str(); + if (strcasecmp(item, "-A") == 0) + { + abort= 1; + continue; + } + ndbout_c("Invalid option: %s. Expecting -A after STOP", + item); + return; + } + + int result= ndb_mgm_stop2(m_mgmsrv, no_of_nodes, node_ids, abort); + if (result < 0) + { + ndbout_c("Shutdown failed."); printError(); - } else + } + else + { + if (node_ids == 0) + ndbout_c("NDB Cluster has shutdown."); + else { - if(all) - ndbout << "NDB Cluster has shutdown." << endl; - else - ndbout << "Node " << processId << " has shutdown." << endl; + ndbout << "Node"; + for (int i= 0; i < no_of_nodes; i++) + ndbout << " " << node_ids[i]; + ndbout_c(" has shutdown."); } + } } void @@ -1409,47 +1504,74 @@ CommandInterpreter::executeStart(int processId, const char* parameters, void CommandInterpreter::executeRestart(int processId, const char* parameters, - bool all) + bool all) +{ + Vector<BaseString> command_list; + if (parameters) + { + BaseString tmp(parameters); + tmp.split(command_list); + for (unsigned i= 0; i < command_list.size();) + command_list[i].c_str()[0] ? i++ : (command_list.erase(i),0); + } + if (all) + executeRestart(command_list, 0, 0, 0); + else + executeRestart(command_list, 0, &processId, 1); +} + +void +CommandInterpreter::executeRestart(Vector<BaseString> &command_list, + unsigned command_pos, + int *node_ids, int no_of_nodes) { int result; - int nostart = 0; - int initialstart = 0; - int abort = 0; - - if(parameters != 0 && strlen(parameters) != 0){ - char * tmpString = my_strdup(parameters,MYF(MY_WME)); - My_auto_ptr<char> ap1(tmpString); - char * tmpPtr = 0; - char * item = strtok_r(tmpString, " ", &tmpPtr); - while(item != NULL){ - if(strcasecmp(item, "-N") == 0) - nostart = 1; - if(strcasecmp(item, "-I") == 0) - initialstart = 1; - if(strcasecmp(item, "-A") == 0) - abort = 1; - item = strtok_r(NULL, " ", &tmpPtr); + int nostart= 0; + int initialstart= 0; + int abort= 0; + + for (; command_pos < command_list.size(); command_pos++) + { + const char *item= command_list[command_pos].c_str(); + if (strcasecmp(item, "-N") == 0) + { + nostart= 1; + continue; } + if (strcasecmp(item, "-I") == 0) + { + initialstart= 1; + continue; + } + if (strcasecmp(item, "-A") == 0) + { + abort= 1; + continue; + } + ndbout_c("Invalid option: %s. Expecting -A,-N or -I after RESTART", + item); + return; } - if(all) { - result = ndb_mgm_restart2(m_mgmsrv, 0, NULL, initialstart, nostart, abort); - } else { - int v[1]; - v[0] = processId; - result = ndb_mgm_restart2(m_mgmsrv, 1, v, initialstart, nostart, abort); - } + result= ndb_mgm_restart2(m_mgmsrv, no_of_nodes, node_ids, + initialstart, nostart, abort); if (result <= 0) { - ndbout.println("Restart failed.", result); + ndbout_c("Restart failed."); printError(); - } else + } + else + { + if (node_ids == 0) + ndbout_c("NDB Cluster is being restarted."); + else { - if(all) - ndbout << "NDB Cluster is being restarted." << endl; - else - ndbout_c("Node %d is being restarted.", processId); + ndbout << "Node"; + for (int i= 0; i < no_of_nodes; i++) + ndbout << " " << node_ids[i]; + ndbout_c(" is being restarted"); } + } } void diff --git a/storage/ndb/src/mgmclient/main.cpp b/storage/ndb/src/mgmclient/main.cpp index ba5d0308f1fd0e88490fc2192e63d781fcc2cfee..73a18f98c9d5c1bceb72f61e97d19a1fb86b65df 100644 --- a/storage/ndb/src/mgmclient/main.cpp +++ b/storage/ndb/src/mgmclient/main.cpp @@ -19,7 +19,7 @@ // copied from mysql.cc to get readline extern "C" { -#if defined( __WIN__) || defined(OS2) +#if defined( __WIN__) #include <conio.h> #elif !defined(__NETWARE__) #include <readline/readline.h> diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp index 5bdc62207f5ba974eb60f1e332256ee01c2ab972..48094800f9a9247ffbd95e28fc656bf694e98a74 100644 --- a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp +++ b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp @@ -294,6 +294,8 @@ static ErrorItem errorTable[] = {MgmtSrvr::SYSTEM_SHUTDOWN_IN_PROGRESS, "System shutdown in progress" }, {MgmtSrvr::NODE_SHUTDOWN_WOULD_CAUSE_SYSTEM_CRASH, "Node shutdown would cause system crash" }, + {MgmtSrvr::UNSUPPORTED_NODE_SHUTDOWN, + "Unsupported multi node shutdown. Abort option required." }, {MgmtSrvr::NODE_NOT_API_NODE, "The specified node is not an API node." }, {MgmtSrvr::OPERATION_NOT_ALLOWED_START_STOP, "Operation not allowed while nodes are starting or stopping."}, @@ -312,6 +314,9 @@ int MgmtSrvr::translateStopRef(Uint32 errCode) case StopRef::NodeShutdownWouldCauseSystemCrash: return NODE_SHUTDOWN_WOULD_CAUSE_SYSTEM_CRASH; break; + case StopRef::UnsupportedNodeShutdown: + return UNSUPPORTED_NODE_SHUTDOWN; + break; } return 4999; } @@ -386,8 +391,9 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server, _ownReference(0), theSignalIdleList(NULL), theWaitState(WAIT_SUBSCRIBE_CONF), + m_local_mgm_handle(0), m_event_listner(this), - m_local_mgm_handle(0) + m_master_node(0) { DBUG_ENTER("MgmtSrvr::MgmtSrvr"); @@ -672,23 +678,16 @@ MgmtSrvr::~MgmtSrvr() int MgmtSrvr::okToSendTo(NodeId nodeId, bool unCond) { - if(nodeId == 0) - return 0; - - if (getNodeType(nodeId) != NDB_MGM_NODE_TYPE_NDB) + if(nodeId == 0 || getNodeType(nodeId) != NDB_MGM_NODE_TYPE_NDB) return WRONG_PROCESS_TYPE; - // Check if we have contact with it if(unCond){ if(theFacade->theClusterMgr->getNodeInfo(nodeId).connected) return 0; - return NO_CONTACT_WITH_PROCESS; } - if (theFacade->get_node_alive(nodeId) == 0) { - return NO_CONTACT_WITH_PROCESS; - } else { + else if (theFacade->get_node_alive(nodeId) == true) return 0; - } + return NO_CONTACT_WITH_PROCESS; } void report_unknown_signal(SimpleSignal *signal) @@ -930,7 +929,7 @@ int MgmtSrvr::sendStopMgmd(NodeId nodeId, * distributed communication up. */ -int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, +int MgmtSrvr::sendSTOP_REQ(const Vector<NodeId> &node_ids, NodeBitmask &stoppedNodes, Uint32 singleUserNodeId, bool abort, @@ -940,6 +939,12 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, bool initialStart) { int error = 0; + DBUG_ENTER("MgmtSrvr::sendSTOP_REQ"); + DBUG_PRINT("enter", ("no of nodes: %d singleUseNodeId: %d " + "abort: %d stop: %d restart: %d " + "nostart: %d initialStart: %d", + node_ids.size(), singleUserNodeId, + abort, stop, restart, nostart, initialStart)); stoppedNodes.clear(); @@ -977,36 +982,49 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, // send the signals NodeBitmask nodes; - if (nodeId) + NodeId nodeId= 0; + int use_master_node= 0; + int do_send= 0; + int do_stop_self= 0; + NdbNodeBitmask nodes_to_stop; { - if(nodeId==getOwnNodeId()) - { - if(restart) - g_RestartServer= true; - g_StopServer= true; - return 0; - } - if(getNodeType(nodeId) == NDB_MGM_NODE_TYPE_NDB) + for (unsigned i= 0; i < node_ids.size(); i++) { - int r; - if((r= okToSendTo(nodeId, true)) != 0) - return r; - if (ss.sendSignal(nodeId, &ssig) != SEND_OK) - return SEND_OR_RECEIVE_FAILED; + nodeId= node_ids[i]; + if (getNodeType(nodeId) != NDB_MGM_NODE_TYPE_MGM) + nodes_to_stop.set(nodeId); + else if (nodeId != getOwnNodeId()) + { + error= sendStopMgmd(nodeId, abort, stop, restart, + nostart, initialStart); + if (error == 0) + stoppedNodes.set(nodeId); + } + else + do_stop_self= 1;; } - else if(getNodeType(nodeId) == NDB_MGM_NODE_TYPE_MGM) + } + int no_of_nodes_to_stop= nodes_to_stop.count(); + if (node_ids.size()) + { + if (no_of_nodes_to_stop) { - error= sendStopMgmd(nodeId, abort, stop, restart, nostart, initialStart); - if(error==0) - stoppedNodes.set(nodeId); - return error; + do_send= 1; + if (no_of_nodes_to_stop == 1) + { + nodeId= nodes_to_stop.find(0); + } + else // multi node stop, send to master + { + use_master_node= 1; + nodes_to_stop.copyto(NdbNodeBitmask::Size, stopReq->nodes); + StopReq::setStopNodes(stopReq->requestInfo, 1); + } } - else - return WRONG_PROCESS_TYPE; - nodes.set(nodeId); } else { + nodeId= 0; while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) { if(okToSendTo(nodeId, true) == 0) @@ -1027,8 +1045,30 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, } // now wait for the replies - while (!nodes.isclear()) + while (!nodes.isclear() || do_send) { + if (do_send) + { + int r; + assert(nodes.count() == 0); + if (use_master_node) + nodeId= m_master_node; + if ((r= okToSendTo(nodeId, true)) != 0) + { + bool next; + if (!use_master_node) + DBUG_RETURN(r); + m_master_node= nodeId= 0; + while((next= getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) == true && + (r= okToSendTo(nodeId, true)) != 0); + if (!next) + DBUG_RETURN(NO_CONTACT_WITH_DB_NODES); + } + if (ss.sendSignal(nodeId, &ssig) != SEND_OK) + DBUG_RETURN(SEND_OR_RECEIVE_FAILED); + nodes.set(nodeId); + do_send= 0; + } SimpleSignal *signal = ss.waitFor(); int gsn = signal->readSignalNumber(); switch (gsn) { @@ -1040,6 +1080,13 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, #endif assert(nodes.get(nodeId)); nodes.clear(nodeId); + if (ref->errorCode == StopRef::MultiNodeShutdownNotMaster) + { + assert(use_master_node); + m_master_node= ref->masterNodeId; + do_send= 1; + continue; + } error = translateStopRef(ref->errorCode); break; } @@ -1050,9 +1097,16 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, ndbout_c("Node %d single user mode", nodeId); #endif assert(nodes.get(nodeId)); - assert(singleUserNodeId != 0); + if (singleUserNodeId != 0) + { + stoppedNodes.set(nodeId); + } + else + { + assert(no_of_nodes_to_stop > 1); + stoppedNodes.bitOR(nodes_to_stop); + } nodes.clear(nodeId); - stoppedNodes.set(nodeId); break; } case GSN_NF_COMPLETEREP:{ @@ -1091,17 +1145,24 @@ int MgmtSrvr::sendSTOP_REQ(NodeId nodeId, #ifdef VM_TRACE ndbout_c("Unknown signal %d", gsn); #endif - return SEND_OR_RECEIVE_FAILED; + DBUG_RETURN(SEND_OR_RECEIVE_FAILED); } } - return error; + if (!error && do_stop_self) + { + if (restart) + g_RestartServer= true; + g_StopServer= true; + } + DBUG_RETURN(error); } /* - * Stop one node + * Stop one nodes */ -int MgmtSrvr::stopNode(int nodeId, bool abort) +int MgmtSrvr::stopNodes(const Vector<NodeId> &node_ids, + int *stopCount, bool abort) { if (!abort) { @@ -1116,14 +1177,17 @@ int MgmtSrvr::stopNode(int nodeId, bool abort) } } NodeBitmask nodes; - return sendSTOP_REQ(nodeId, - nodes, - 0, - abort, - false, - false, - false, - false); + int ret= sendSTOP_REQ(node_ids, + nodes, + 0, + abort, + false, + false, + false, + false); + if (stopCount) + *stopCount= nodes.count(); + return ret; } /* @@ -1133,7 +1197,8 @@ int MgmtSrvr::stopNode(int nodeId, bool abort) int MgmtSrvr::stop(int * stopCount, bool abort) { NodeBitmask nodes; - int ret = sendSTOP_REQ(0, + Vector<NodeId> node_ids; + int ret = sendSTOP_REQ(node_ids, nodes, 0, abort, @@ -1164,7 +1229,8 @@ int MgmtSrvr::enterSingleUser(int * stopCount, Uint32 singleUserNodeId) return OPERATION_NOT_ALLOWED_START_STOP; } NodeBitmask nodes; - int ret = sendSTOP_REQ(0, + Vector<NodeId> node_ids; + int ret = sendSTOP_REQ(node_ids, nodes, singleUserNodeId, false, @@ -1181,18 +1247,22 @@ int MgmtSrvr::enterSingleUser(int * stopCount, Uint32 singleUserNodeId) * Perform node restart */ -int MgmtSrvr::restartNode(int nodeId, bool nostart, bool initialStart, - bool abort) +int MgmtSrvr::restartNodes(const Vector<NodeId> &node_ids, + int * stopCount, bool nostart, + bool initialStart, bool abort) { NodeBitmask nodes; - return sendSTOP_REQ(nodeId, - nodes, - 0, - abort, - false, - true, - nostart, - initialStart); + int ret= sendSTOP_REQ(node_ids, + nodes, + 0, + abort, + false, + true, + nostart, + initialStart); + if (stopCount) + *stopCount = nodes.count(); + return ret; } /* @@ -1203,7 +1273,8 @@ int MgmtSrvr::restart(bool nostart, bool initialStart, bool abort, int * stopCount ) { NodeBitmask nodes; - int ret = sendSTOP_REQ(0, + Vector<NodeId> node_ids; + int ret = sendSTOP_REQ(node_ids, nodes, 0, abort, @@ -2241,12 +2312,16 @@ MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted) SignalSender ss(theFacade); ss.lock(); // lock will be released on exit - bool next; - NodeId nodeId = 0; - while((next = getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) == true && - theFacade->get_node_alive(nodeId) == false); - - if(!next) return NO_CONTACT_WITH_DB_NODES; + NodeId nodeId = m_master_node; + if (okToSendTo(nodeId, false) != 0) + { + bool next; + nodeId = m_master_node = 0; + while((next = getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) == true && + okToSendTo(nodeId, false) != 0); + if(!next) + return NO_CONTACT_WITH_DB_NODES; + } SimpleSignal ssig; BackupReq* req = CAST_PTR(BackupReq, ssig.getDataPtrSend()); @@ -2314,7 +2389,7 @@ MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted) const BackupRef * const ref = CAST_CONSTPTR(BackupRef, signal->getDataPtr()); if(ref->errorCode == BackupRef::IAmNotMaster){ - nodeId = refToNode(ref->masterRef); + m_master_node = nodeId = refToNode(ref->masterRef); #ifdef VM_TRACE ndbout_c("I'm not master resending to %d", nodeId); #endif diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.hpp b/storage/ndb/src/mgmsrv/MgmtSrvr.hpp index 20e6ff1bc4377bb60bc4d4d997b888e18c7d079f..ddd5247b44673406e5dc0e6de91e2db3b9488cce 100644 --- a/storage/ndb/src/mgmsrv/MgmtSrvr.hpp +++ b/storage/ndb/src/mgmsrv/MgmtSrvr.hpp @@ -176,6 +176,7 @@ public: STATIC_CONST( NODE_SHUTDOWN_WOULD_CAUSE_SYSTEM_CRASH = 5028 ); STATIC_CONST( NO_CONTACT_WITH_DB_NODES = 5030 ); + STATIC_CONST( UNSUPPORTED_NODE_SHUTDOWN = 5031 ); STATIC_CONST( NODE_NOT_API_NODE = 5062 ); STATIC_CONST( OPERATION_NOT_ALLOWED_START_STOP = 5063 ); @@ -252,7 +253,7 @@ public: * @param processId: Id of the DB process to stop * @return 0 if succeeded, otherwise: as stated above, plus: */ - int stopNode(int nodeId, bool abort = false); + int stopNodes(const Vector<NodeId> &node_ids, int *stopCount, bool abort); /** * Stop the system @@ -286,11 +287,12 @@ public: int start(int processId); /** - * Restart a node + * Restart nodes * @param processId: Id of the DB process to start */ - int restartNode(int processId, bool nostart, bool initialStart, - bool abort = false); + int restartNodes(const Vector<NodeId> &node_ids, + int *stopCount, bool nostart, + bool initialStart, bool abort); /** * Restart the system @@ -489,7 +491,7 @@ private: bool nostart, bool initialStart); - int sendSTOP_REQ(NodeId nodeId, + int sendSTOP_REQ(const Vector<NodeId> &node_ids, NodeBitmask &stoppedNodes, Uint32 singleUserNodeId, bool abort, @@ -649,6 +651,8 @@ private: friend class Ndb_mgmd_event_service; Ndb_mgmd_event_service m_event_listner; + NodeId m_master_node; + /** * Handles the thread wich upon a 'Node is started' event will * set the node's previous loglevel settings. diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp index aebadec933c2eac697703d30ea4444fb168d9229..7b17cfa21e2601561dfec8e407cf9a6638f29eb7 100644 --- a/storage/ndb/src/mgmsrv/Services.cpp +++ b/storage/ndb/src/mgmsrv/Services.cpp @@ -866,14 +866,11 @@ MgmApiSession::restart(Parser<MgmApiSession>::Context &, } int restarted = 0; - int result = 0; - - for(size_t i = 0; i < nodes.size(); i++) - if((result = m_mgmsrv.restartNode(nodes[i], - nostart != 0, - initialstart != 0, - abort != 0)) == 0) - restarted++; + int result= m_mgmsrv.restartNodes(nodes, + &restarted, + nostart != 0, + initialstart != 0, + abort != 0); m_output->println("restart reply"); if(result != 0){ @@ -998,7 +995,12 @@ MgmApiSession::stop(Parser<MgmApiSession>::Context &, args.get("node", (const char **)&nodes_str); if(nodes_str == NULL) + { + m_output->println("stop reply"); + m_output->println("result: empty node list"); + m_output->println(""); return; + } args.get("abort", &abort); char *p, *last; @@ -1008,29 +1010,10 @@ MgmApiSession::stop(Parser<MgmApiSession>::Context &, nodes.push_back(atoi(p)); } - int stop_self= 0; - size_t i; - - for(i=0; i < nodes.size(); i++) { - if (nodes[i] == m_mgmsrv.getOwnNodeId()) { - stop_self= 1; - if (i != nodes.size()-1) { - m_output->println("stop reply"); - m_output->println("result: server must be stopped last"); - m_output->println(""); - return; - } - } - } - - int stopped = 0, result = 0; - - for(i=0; i < nodes.size(); i++) - if (nodes[i] != m_mgmsrv.getOwnNodeId()) { - if((result = m_mgmsrv.stopNode(nodes[i], abort != 0)) == 0) - stopped++; - } else - stopped++; + int stopped= 0; + int result= 0; + if (nodes.size()) + result= m_mgmsrv.stopNodes(nodes, &stopped, abort != 0); m_output->println("stop reply"); if(result != 0) @@ -1039,9 +1022,6 @@ MgmApiSession::stop(Parser<MgmApiSession>::Context &, m_output->println("result: Ok"); m_output->println("stopped: %d", stopped); m_output->println(""); - - if (stop_self) - g_StopServer= true; } diff --git a/storage/ndb/src/mgmsrv/main.cpp b/storage/ndb/src/mgmsrv/main.cpp index 5960a3517b533ab2e5adec89db3bdfff623b1dd3..26cb0951d3a3276419ed0e44dfe264c24bd4b946 100644 --- a/storage/ndb/src/mgmsrv/main.cpp +++ b/storage/ndb/src/mgmsrv/main.cpp @@ -50,7 +50,7 @@ const char progname[] = "mgmtsrvr"; // copied from mysql.cc to get readline extern "C" { -#if defined( __WIN__) || defined(OS2) +#if defined( __WIN__) #include <conio.h> #elif !defined(__NETWARE__) #include <readline/readline.h> diff --git a/storage/ndb/src/ndbapi/NdbBlob.cpp b/storage/ndb/src/ndbapi/NdbBlob.cpp index 2adb928ba427d37e4466d0c61a24d41db4423eb7..00f71a2f85bf3903fde299da309bdf5cf52332cb 100644 --- a/storage/ndb/src/ndbapi/NdbBlob.cpp +++ b/storage/ndb/src/ndbapi/NdbBlob.cpp @@ -535,6 +535,8 @@ NdbBlob::setTableKeyValue(NdbOperation* anOp) pos += (len + 3) / 4; } } + if (theNdbOp->theDistrKeyIndicator_) + anOp->setPartitionId(theNdbOp->getPartitionId()); assert(pos == theKeyBuf.size / 4); DBUG_RETURN(0); } diff --git a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp index faf52b65cee87825dfbdeab1ea5251de178939c5..07895648107e60f99153f488bd3db364decbfe7b 100644 --- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -1789,9 +1789,14 @@ NdbDictInterface::getTable(const BaseString& name, bool fullyQualifiedNames) // Copy name to m_buffer to get a word sized buffer m_buffer.clear(); - m_buffer.grow(namelen_words*4); + m_buffer.grow(namelen_words*4+4); m_buffer.append(name.c_str(), namelen); +#ifndef IGNORE_VALGRIND_WARNINGS + Uint32 pad = 0; + m_buffer.append(&pad, 4); +#endif + LinearSectionPtr ptr[1]; ptr[0].p= (Uint32*)m_buffer.get_data(); ptr[0].sz= namelen_words; @@ -2287,7 +2292,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, NdbTableImpl & impl, bool alter) { - unsigned i; + unsigned i, err; char *ts_names[MAX_NDB_PARTITIONS]; DBUG_ENTER("NdbDictInterface::createOrAlterTable"); @@ -2588,8 +2593,10 @@ loop: DBUG_RETURN(-1); } // primary key type check - if (col->m_pk && ! NdbSqlUtil::usable_in_pk(col->m_type, col->m_cs)) { - m_error.code= (col->m_cs != 0 ? 743 : 739); + if (col->m_pk && + (err = NdbSqlUtil::check_column_for_pk(col->m_type, col->m_cs))) + { + m_error.code= err; DBUG_RETURN(-1); } // distribution key not supported for Char attribute @@ -3020,7 +3027,7 @@ NdbDictInterface::createIndex(Ndb & ndb, { //validate(); //aggregate(); - unsigned i; + unsigned i, err; UtilBufferWriter w(m_buffer); const size_t len = strlen(impl.m_externalName.c_str()) + 1; if(len > MAX_TAB_NAME_SIZE) { @@ -3069,10 +3076,12 @@ NdbDictInterface::createIndex(Ndb & ndb, // index key type check if (it == DictTabInfo::UniqueHashIndex && - ! NdbSqlUtil::usable_in_hash_index(col->m_type, col->m_cs) || + (err = NdbSqlUtil::check_column_for_hash_index(col->m_type, col->m_cs)) + || it == DictTabInfo::OrderedIndex && - ! NdbSqlUtil::usable_in_ordered_index(col->m_type, col->m_cs)) { - m_error.code = 743; + (err = NdbSqlUtil::check_column_for_ordered_index(col->m_type, col->m_cs))) + { + m_error.code = err; return -1; } // API uses external column number to talk to DICT @@ -4619,13 +4628,27 @@ NdbDictInterface::get_filegroup(NdbFilegroupImpl & dst, LinearSectionPtr ptr[1]; ptr[0].p = (Uint32*)name; ptr[0].sz = (strLen + 3)/4; - + +#ifndef IGNORE_VALGRIND_WARNINGS + if (strLen & 3) + { + Uint32 pad = 0; + m_buffer.clear(); + m_buffer.append(name, strLen); + m_buffer.append(&pad, 4); + ptr[0].p = (Uint32*)m_buffer.get_data(); + } +#endif + int r = dictSignal(&tSignal, ptr, 1, -1, // any node WAIT_GET_TAB_INFO_REQ, DICT_WAITFOR_TIMEOUT, 100); if (r) { + dst.m_id = -1; + dst.m_version = ~0; + DBUG_PRINT("info", ("get_filegroup failed dictSignal")); DBUG_RETURN(-1); } @@ -4761,7 +4784,18 @@ NdbDictInterface::get_file(NdbFileImpl & dst, LinearSectionPtr ptr[1]; ptr[0].p = (Uint32*)name; ptr[0].sz = (strLen + 3)/4; - + +#ifndef IGNORE_VALGRIND_WARNINGS + if (strLen & 3) + { + Uint32 pad = 0; + m_buffer.clear(); + m_buffer.append(name, strLen); + m_buffer.append(&pad, 4); + ptr[0].p = (Uint32*)m_buffer.get_data(); + } +#endif + int r = dictSignal(&tSignal, ptr, 1, node, WAIT_GET_TAB_INFO_REQ, @@ -4829,7 +4863,8 @@ NdbDictInterface::parseFileInfo(NdbFileImpl &dst, } dst.m_type= (NdbDictionary::Object::Type)f.FileType; - dst.m_id= f.FileNo; + dst.m_id= f.FileId; + dst.m_version = f.FileVersion; dst.m_size= ((Uint64)f.FileSizeHi << 32) | (f.FileSizeLo); dst.m_path.assign(f.FileName); diff --git a/storage/ndb/src/ndbapi/NdbLinHash.hpp b/storage/ndb/src/ndbapi/NdbLinHash.hpp index 05670534c959ff8c11db0d3c5674dcd838c585a2..0655e81ce9d50fb62e7bb29bc7b3c53fe4a5a797 100644 --- a/storage/ndb/src/ndbapi/NdbLinHash.hpp +++ b/storage/ndb/src/ndbapi/NdbLinHash.hpp @@ -427,19 +427,26 @@ NdbLinHash<C>::getNext(NdbElement_t<C> * curr){ return curr->next; int dir = 0, seg = 0; - - if(curr != 0){ + int counts; + if(curr != 0) + { getBucket(curr->hash, &dir, &seg); + counts = seg + 1; + } + else + { + counts = 0; } for(int countd = dir; countd < DIRECTORYSIZE;countd++ ){ if (directory[countd] != 0) { - for(int counts = seg + 1; counts < SEGMENTSIZE; counts++ ){ + for(; counts < SEGMENTSIZE; counts++ ){ if (directory[countd]->elements[counts] != 0) { return directory[countd]->elements[counts]; } } } + counts = 0; } return 0; diff --git a/storage/ndb/src/ndbapi/NdbOperationSearch.cpp b/storage/ndb/src/ndbapi/NdbOperationSearch.cpp index cea8eff94122f2966944eb5f22e0d6244e776eb4..65d50a55634adef374fe20c1ea432bd4ba01073a 100644 --- a/storage/ndb/src/ndbapi/NdbOperationSearch.cpp +++ b/storage/ndb/src/ndbapi/NdbOperationSearch.cpp @@ -640,10 +640,14 @@ NdbOperation::setPartitionId(Uint32 value) { theDistributionKey = value; theDistrKeyIndicator_ = 1; + DBUG_PRINT("info", ("NdbOperation::setPartitionId: %u", + theDistributionKey)); } Uint32 NdbOperation::getPartitionId() const { + DBUG_PRINT("info", ("NdbOperation::getPartitionId: %u ind=%d", + theDistributionKey, theDistrKeyIndicator_)); return theDistributionKey; } diff --git a/storage/ndb/src/ndbapi/ndberror.c b/storage/ndb/src/ndbapi/ndberror.c index 52ecb5f8e2103466545317d1d34feb22f38a2b5d..8185bf38c3ee33a7c01fdde8731e36ee481119b2 100644 --- a/storage/ndb/src/ndbapi/ndberror.c +++ b/storage/ndb/src/ndbapi/ndberror.c @@ -386,6 +386,7 @@ ErrorBundle ErrorCodes[] = { { 768, DMEC, SE, "Cant drop filegroup, filegroup is used" }, { 769, DMEC, SE, "Drop undofile not supported, drop logfile group instead" }, { 770, DMEC, SE, "Cant drop file, file is used" }, + { 774, DMEC, SE, "Invalid schema object for drop" }, { 241, HA_ERR_TABLE_DEF_CHANGED, SE, "Invalid schema object version" }, { 283, HA_ERR_NO_SUCH_TABLE, SE, "Table is being dropped" }, { 284, HA_ERR_TABLE_DEF_CHANGED, SE, "Table not defined in transaction coordinator" }, diff --git a/storage/ndb/src/old_files/client/Makefile b/storage/ndb/src/old_files/client/Makefile deleted file mode 100644 index 1751a98bdfed6e4d49a8804490e154a2e19b57d9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -DIRS = - -ifneq ($(NDB_ODBC),N) -DIRS += odbc -endif - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/Extra.mk b/storage/ndb/src/old_files/client/odbc/Extra.mk deleted file mode 100644 index 762fb0bedd0ae9b6ee75552ebb9a6fb96e227a27..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/Extra.mk +++ /dev/null @@ -1,59 +0,0 @@ -# before Epilogue.mk - -CCFLAGS_LOC += -I.. - -CCFLAGS_LOC += \ - -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \ - -I$(call fixpath,$(NDB_TOP)/include/util) \ - -I$(call fixpath,$(NDB_TOP)/include/portlib) - -ifeq ($(NDB_OS),SOLARIS) - -CCFLAGS_LOC += -I/usr/local/include - -ifeq ($(NDB_COMPILER),GCC) -LIBS_LOC += -Wl,-z,text -CCFLAGS_WARNINGS += -Wno-unused -Wformat -CCFLAGS_TOP += -D__STL_PTHREADS -endif - -ifeq ($(NDB_COMPILER),FORTE6) -LIBS_LOC += -z text -LIBS_SPEC += /usr/lib/libCrun.so.1 -endif - -LIB_TARGET_LIBS += -lthread -lrt - -endif -ifneq ($(filter $(NDB_OS), LINUX MACOSX IBMAIX TRU64X),) - -LIBS_LOC += -Wl,-z,text -CCFLAGS_WARNINGS += -Wno-unused -Wformat -GCC_VER := $(shell $(CC) --version) - -ifeq ($(GCC_VER),2.96) -CCFLAGS_TOP += -D__STL_PTHREADS -CCFLAGS_TOP += -fmessage-length=0 -endif - -CCFLAGS_TOP += -fno-rtti - -LIB_TARGET_LIBS += -lpthread - -endif - -ifeq ($(NDB_OS),WIN32) -ifeq (RELEASE, $(NDB_VERSION)) -CCFLAGS_WIN += /MT /GR /GS /Zi -D_WINDOWS -D_USRDLL -DNDBODBC_EXPORTS -DNO_COMMAND_HANDLER -D_MBCS -D_WINDLL -U_LIB -else -ifeq (RELEASE_TRACE, $(NDB_VERSION)) -CCFLAGS_WIN += /MT /GR /GS /Zi -D_WINDOWS -D_USRDLL -DNDBODBC_EXPORTS -DNO_COMMAND_HANDLER -D_MBCS -D_WINDLL -U_LIB -else -CCFLAGS_WIN += /MT /GR /GS /Zi -D_WINDOWS -D_USRDLL -DNDBODBC_EXPORTS -DNO_COMMAND_HANDLER -D_MBCS -D_WINDLL -U_LIB -endif -endif -endif - -CCFLAGS_TOP += -DYYDEBUG=0 -fexceptions - -CCFLAGS_TOP += -DHAVE_LONG_LONG diff --git a/storage/ndb/src/old_files/client/odbc/Makefile b/storage/ndb/src/old_files/client/odbc/Makefile deleted file mode 100644 index 2da683e7d86d0f6c1402653e0f8e576235a7b84d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -include .defs.mk - -TYPE = * - -A_LIB = N -PIC_LIB = Y -SO_LIB = Y - -LIB_TARGET = NDB_ODBC - -LIB_TARGET_ARCHIVES = $(LIB_DIRS:%=odbc%) NDB_API - -# Overide Defs.mk -LDFLAGS_LAST = -lstdc++ -lm - -XXX = \ - ndbapi \ - mgmsrvcommon \ - transporter \ - general \ - signaldataprint \ - portlib \ - logger \ - trace - -ifeq ($(NDB_OS),WIN32) - -LIB_DIRS = \ - handles \ - dictionary \ - codegen \ - executor \ - common - -SOURCES += NdbOdbc.cpp -CFLAGS_NdbOdbc.cpp += -I. -I$(call fixpath,driver) - -PIC_ARCHIVE := Y -NONPIC_ARCHIVE := N -ARCHIVE_TARGET := ndb_odbcwin32 -LIB_TARGET_ARCHIVES += ndb_odbcwin32 - -ifeq (RELEASE, $(NDB_VERSION)) -WIN_LIBS += /VERSION:2.0x /NODEFAULTLIB:"odbc32" /INCREMENTAL:NO /DLL /SUBSYSTEM:WINDOWS /MACHINE:IX86 /OPT:REF /OPT:ICF /DEF:NdbOdbc.def odbc32.lib odbccp32.lib user32.lib -else -ifeq (RELEASE_TRACE, $(NDB_VERSION)) -WIN_LIBS += /VERSION:2.0x /NODEFAULTLIB:"odbc32" /INCREMENTAL:NO /DLL /SUBSYSTEM:WINDOWS /MACHINE:IX86 /OPT:REF /OPT:ICF /DEF:NdbOdbc.def odbc32.lib odbccp32.lib user32.lib -else -WIN_LIBS += /VERSION:2.0x /NODEFAULTLIB:"odbc32" /INCREMENTAL /DLL /DEBUG /SUBSYSTEM:WINDOWS /MACHINE:IX86 /DEF:NdbOdbc.def odbc32.lib odbccp32.lib user32.lib -endif -endif - -else - -LIB_DIRS = \ - driver \ - handles \ - dictionary \ - codegen \ - executor \ - common - -endif - -include Extra.mk -include $(NDB_TOP)/Epilogue.mk - -# yo - -test: - $(MAKE) -j4 - $(MAKE) -C $(NDB_TOP)/tools/ndbsql - $(MAKE) -C $(NDB_TOP)/test/odbc/driver tidy - $(MAKE) -C $(NDB_TOP)/test/odbc/driver - $(MAKE) -C $(NDB_TOP)/test/ndbapi/testOIBasic diff --git a/storage/ndb/src/old_files/client/odbc/NdbOdbc.cpp b/storage/ndb/src/old_files/client/odbc/NdbOdbc.cpp deleted file mode 100755 index 67c6b5e0004d25b91d1a102a5484c41a07b6ba31..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/NdbOdbc.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <NdbUnistd.h> -#include <odbcinst.h> - -#include "driver.cpp" - - -BOOL APIENTRY DllMain( HANDLE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - - -BOOL INSTAPI ConfigDSN( - HWND hwndParent, - WORD fRequest, - LPCSTR lpszDriver, - LPCSTR lpszAttributes) -{ - const char* szDSN = "NDB"; - - switch(fRequest) - { - case ODBC_ADD_DSN: - SQLWriteDSNToIni(szDSN, lpszDriver); - break; - - case ODBC_CONFIG_DSN: - break; - - case ODBC_REMOVE_DSN: - SQLRemoveDSNFromIni(szDSN); - break; - } - - return TRUE; -} - - -int FAR PASCAL -DriverConnectProc(HWND hdlg, WORD wMsg, WPARAM wParam, LPARAM lParam) -{ - return FALSE; -} - -void __declspec( dllexport) FAR PASCAL LoadByOrdinal(void); -/* Entry point to cause DM to load using ordinals */ -void __declspec( dllexport) FAR PASCAL LoadByOrdinal(void) -{ -} - diff --git a/storage/ndb/src/old_files/client/odbc/NdbOdbc.def b/storage/ndb/src/old_files/client/odbc/NdbOdbc.def deleted file mode 100755 index 85619b91915765964b4110d8a3a3709d4c973d88..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/NdbOdbc.def +++ /dev/null @@ -1,85 +0,0 @@ -LIBRARY NdbOdbc.DLL -VERSION 03.51.00 -EXPORTS -SQLAllocConnect -SQLAllocEnv -SQLAllocHandle -SQLAllocHandleStd -SQLAllocStmt -SQLBindCol -SQLBindParam -SQLBindParameter -SQLBrowseConnect -SQLBulkOperations -SQLCancel -SQLCloseCursor -SQLColAttribute -SQLColAttributes -SQLColumnPrivileges -SQLColumns -SQLConnect -SQLCopyDesc -SQLDataSources -SQLDescribeCol -SQLDescribeParam -SQLDisconnect -SQLDriverConnect -SQLDrivers -SQLEndTran -SQLError -SQLExecDirect -SQLExecute -SQLExtendedFetch -SQLFetch -SQLFetchScroll -SQLForeignKeys -SQLFreeConnect -SQLFreeEnv -SQLFreeHandle -SQLFreeStmt -SQLGetConnectAttr -SQLGetConnectOption -SQLGetCursorName -SQLGetData -SQLGetDescField -SQLGetDescRec -SQLGetDiagField -SQLGetDiagRec -SQLGetEnvAttr -SQLGetFunctions -SQLGetInfo -SQLGetStmtAttr -SQLGetStmtOption -SQLGetTypeInfo -SQLMoreResults -SQLNativeSql -SQLNumParams -SQLNumResultCols -SQLParamData -SQLParamOptions -SQLPrepare -SQLPrimaryKeys -SQLProcedureColumns -SQLProcedures -SQLPutData -SQLRowCount -SQLSetConnectAttr -SQLSetConnectOption -SQLSetCursorName -SQLSetDescField -SQLSetDescRec -SQLSetEnvAttr -SQLSetParam -SQLSetPos -SQLSetScrollOptions -SQLSetStmtAttr -SQLSetStmtOption -SQLSpecialColumns -SQLStatistics -SQLTablePrivileges -SQLTables -SQLTransact -DllMain -DriverConnectProc -ConfigDSN -LoadByOrdinal diff --git a/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.cpp b/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.cpp deleted file mode 100644 index 6be78b62bd9a3537e9657d378284f4da0ba1d56f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <common/CodeTree.hpp> -#include <executor/Executor.hpp> -#include "CodeGen.hpp" -#include "Code_root.hpp" - -#include <FlexLexer.h> -#include "SimpleParser.hpp" - -void -CodeGen::prepare(Ctx& ctx) -{ - parse(ctx); - if (! ctx.ok()) - return; - analyze(ctx); - if (! ctx.ok()) - return; - describe(ctx); -} - -void -CodeGen::execute(Ctx& ctx) -{ - DescArea& ipd = m_stmtArea.descArea(Desc_usage_IPD); - if (m_stmtArea.m_unbound) { - analyze(ctx); - if (! ctx.ok()) - return; - describe(ctx); - if (! ctx.ok()) - return; - if (m_stmtArea.m_unbound) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "%u input parameters have unbound SQL type", m_stmtArea.m_unbound); - return; - } - ipd.setBound(true); - } - if (! ipd.isBound()) { - ctx_log2(("IPD changed between executes - reanalyze")); - // jdbc can change parameter length at each execute - analyze(ctx); - if (! ctx.ok()) - return; - describe(ctx); - if (! ctx.ok()) - return; - freeExec(ctx); - codegen(ctx); - if (! ctx.ok()) - return; - alloc(ctx); - if (! ctx.ok()) - return; - ipd.setBound(true); - } - if (m_stmtArea.m_execTree == 0) { - codegen(ctx); - if (! ctx.ok()) - return; - alloc(ctx); - if (! ctx.ok()) - return; - } - Executor executor(m_stmtArea); - executor.execute(ctx); -} - -void -CodeGen::fetch(Ctx& ctx) -{ - // XXX parameter types are not checked any more - ctx_assert(! m_stmtArea.m_unbound); - Executor executor(m_stmtArea); - executor.fetch(ctx); -} - -void -CodeGen::parse(Ctx& ctx) -{ - Plan_root* planRoot = new Plan_root(m_stmtArea); - SimpleParser simpleParser(ctx, m_stmtArea, planRoot); - simpleParser.yyparse(); - if (! ctx.ok()) - return; - planRoot->m_paramList.resize(1 + simpleParser.paramNumber()); - ctx_log2(("CodeGen: parse done - plan tree follows")); - if (ctx.logLevel() >= 2) - planRoot->print(ctx); - m_stmtArea.m_planTree = planRoot; -} - -void -CodeGen::analyze(Ctx& ctx) -{ - Plan_root* planRoot = static_cast<Plan_root*>(m_stmtArea.m_planTree); - ctx_assert(planRoot != 0); - Plan_base::Ctl ctl(0); - planRoot->analyze(ctx, ctl); // returns itself - if (! ctx.ok()) - return; - ctx_log2(("CodeGen: analyze done - plan tree follows")); - if (ctx.logLevel() >= 2) - planRoot->print(ctx); -} - -void -CodeGen::describe(Ctx& ctx) -{ - Plan_root* planRoot = static_cast<Plan_root*>(m_stmtArea.m_planTree); - ctx_assert(planRoot != 0); - planRoot->describe(ctx); - ctx_log2(("CodeGen: describe done")); -} - -void -CodeGen::codegen(Ctx& ctx) -{ - Plan_root* planRoot = static_cast<Plan_root*>(m_stmtArea.m_planTree); - ctx_assert(planRoot != 0); - Plan_base::Ctl ctl(0); - Exec_root* execRoot = static_cast<Exec_root*>(planRoot->codegen(ctx, ctl)); - if (! ctx.ok()) - return; - ctx_assert(execRoot != 0); - ctx_log2(("CodeGen: codegen done - code tree follows")); - if (ctx.logLevel() >= 2) - execRoot->print(ctx); - m_stmtArea.m_execTree = execRoot; -} - -void -CodeGen::alloc(Ctx& ctx) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - Exec_base::Ctl ctl(0); - execRoot->alloc(ctx, ctl); - if (! ctx.ok()) - return; - ctx_log2(("CodeGen: alloc done")); -} - -void -CodeGen::close(Ctx& ctx) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - if (execRoot != 0) { - execRoot->close(ctx); - ctx_log2(("CodeGen: close done")); - } -} - -void -CodeGen::free(Ctx& ctx) -{ - freePlan(ctx); - freeExec(ctx); -} - -void -CodeGen::freePlan(Ctx & ctx) -{ - if (m_stmtArea.m_planTree != 0) { - Plan_root* planRoot = static_cast<Plan_root*>(m_stmtArea.m_planTree); - ctx_assert(planRoot != 0); - unsigned count = 1 + planRoot->m_nodeList.size(); - planRoot->freeNodeList(); - delete planRoot; - m_stmtArea.m_planTree = 0; - ctx_log3(("CodeGen: freed %u plan tree nodes", count)); - } -} - -void -CodeGen::freeExec(Ctx & ctx) -{ - if (m_stmtArea.m_execTree != 0) { - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - unsigned count = 1 + execRoot->m_nodeList.size(); - execRoot->freeNodeList(); - delete execRoot; - m_stmtArea.m_execTree = 0; - ctx_log3(("CodeGen: freed %u exec tree nodes", count)); - } -} - -// odbc support - -void -CodeGen::sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - execRoot->sqlGetData(ctx, columnNumber, targetType, targetValue, bufferLength, strlen_or_Ind); -} - -void -CodeGen::sqlParamData(Ctx& ctx, SQLPOINTER* value) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - execRoot->sqlParamData(ctx, value); -} - -void -CodeGen::sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - execRoot->sqlPutData(ctx, data, strlen_or_Ind); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.hpp b/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.hpp deleted file mode 100644 index ae61dab0c2a395ccf0610c252c8892ef46b556b1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/CodeGen.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_CodeGen_hpp -#define ODBC_CODEGEN_CodeGen_hpp - -#include <common/common.hpp> - -class StmtArea; -class SqlField; -class ExtField; - -/** - * @class CodeGen - * @brief Compiles SQL text into ExecTree::Code - */ -class CodeGen { -public: - CodeGen(StmtArea& stmtArea); - ~CodeGen(); - // parse and analyze SQL statement - void prepare(Ctx& ctx); - // these are passed to Executor - void execute(Ctx& ctx); - void fetch(Ctx& ctx); - // close statement (mainly scan) - void close(Ctx& ctx); - // free data structures - void free(Ctx& ctx); - // odbc support - void sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind); - void sqlParamData(Ctx& ctx, SQLPOINTER* value); - void sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind); -private: - void parse(Ctx& ctx); - void analyze(Ctx& ctx); - void describe(Ctx& ctx); - void codegen(Ctx& ctx); - void alloc(Ctx& ctx); - void freePlan(Ctx& ctx); - void freeExec(Ctx& ctx); - StmtArea& m_stmtArea; -}; - -inline -CodeGen::CodeGen(StmtArea& stmtArea) : - m_stmtArea(stmtArea) -{ -} - -inline -CodeGen::~CodeGen() -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_base.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_base.cpp deleted file mode 100644 index dc02e071156f73814c4c5ef50e0c43ad2fc9e947..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_base.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_base.hpp" -#include "Code_root.hpp" - -// Plan_base - -Plan_base::~Plan_base() -{ -} - -StmtArea& -Plan_base::stmtArea() const -{ - ctx_assert(m_root != 0); - return m_root->m_stmtArea; -} - -DescArea& -Plan_base::descArea(DescUsage u) const -{ - return stmtArea().descArea(u); -} - -ConnArea& -Plan_base::connArea() const -{ - return stmtArea().connArea(); -} - -DictCatalog& -Plan_base::dictCatalog() const -{ - return connArea().dictCatalog(); -} - -DictSchema& -Plan_base::dictSchema() const -{ - return connArea().dictSchema(); -} - -Ndb* -Plan_base::ndbObject() const -{ - Ndb* ndb = connArea().ndbObject(); - ctx_assert(ndb != 0); - return ndb; -} - -NdbSchemaCon* -Plan_base::ndbSchemaCon() const -{ - NdbSchemaCon* ndbSchemaCon = connArea().ndbSchemaCon(); - ctx_assert(ndbSchemaCon != 0); - return ndbSchemaCon; -} - -NdbConnection* -Plan_base::ndbConnection() const -{ - NdbConnection* ndbConnection = connArea().ndbConnection(); - ctx_assert(ndbConnection != 0); - return ndbConnection; -} - -void -Plan_base::printList(Ctx& ctx, Plan_base* a[], unsigned n) -{ - for (unsigned i = 0; i < n; i++) { - if (a[i] == 0) - ctx.print(" -"); - else - a[i]->print(ctx); - } -} - -// Exec_base - -Exec_base::Code::~Code() -{ -} - -Exec_base::Data::~Data() -{ -} - -Exec_base::~Exec_base() -{ - delete m_code; // remove when code becomes shared - m_code = 0; - delete m_data; - m_data = 0; -} - -StmtArea& -Exec_base::stmtArea() const -{ - ctx_assert(m_root != 0); - return m_root->m_stmtArea; -} - -DescArea& -Exec_base::descArea(DescUsage u) const -{ - return stmtArea().descArea(u); -} - -ConnArea& -Exec_base::connArea() const -{ - return stmtArea().connArea(); -} - -DictSchema& -Exec_base::dictSchema() const -{ - return connArea().dictSchema(); -} - -Ndb* -Exec_base::ndbObject() const -{ - Ndb* ndb = connArea().ndbObject(); - ctx_assert(ndb != 0); - return ndb; -} - -NdbSchemaCon* -Exec_base::ndbSchemaCon() const -{ - NdbSchemaCon* ndbSchemaCon = connArea().ndbSchemaCon(); - ctx_assert(ndbSchemaCon != 0); - return ndbSchemaCon; -} - -NdbConnection* -Exec_base::ndbConnection() const -{ - NdbConnection* ndbConnection = connArea().ndbConnection(); - ctx_assert(ndbConnection != 0); - return ndbConnection; -} - -void -Exec_base::printList(Ctx& ctx, Exec_base* a[], unsigned n) -{ - for (unsigned i = 0; i < n; i++) { - ctx_assert(a[i] != 0); - a[i]->print(ctx); - } -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_base.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_base.hpp deleted file mode 100644 index c67c0ca7adbf918e1877618030b467e4b0422718..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_base.hpp +++ /dev/null @@ -1,237 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_base_hpp -#define ODBC_CODEGEN_Code_base_hpp - -#include <set> -#include <list> -#include <vector> -#include <common/common.hpp> -#include <common/CodeTree.hpp> -#include <common/DescArea.hpp> - -class Ctx; -class ConnArea; -class StmtArea; -class DescArea; -class DictCatalog; -class DictSchema; -class ResultArea; -class ResultSet; -class SpecRow; -class Ndb; -class NdbSchemaCon; -class NdbConnection; -class NdbOperation; -class NdbScanFilter; - -class Plan_root; -class Plan_table; -class Plan_column; -class Plan_expr; -class Plan_expr_param; -class Plan_pred; -class Plan_dml_row; -class Plan_dml_column; -class Plan_ddl_column; -class Plan_ddl_constr; -class Plan_idx_column; -class Exec_root; -class Exec_base; -class Exec_query; -class Exec_expr; -class Exec_expr_row; -class Exec_expr_param; - -/** - * @class Plan_base - * @brief Base class for plan trees - */ -class Plan_base : public PlanTree { -public: - Plan_base(Plan_root* root); - virtual ~Plan_base() = 0; - // get references to StmtArea via Plan_root - StmtArea& stmtArea() const; - DescArea& descArea(DescUsage u) const; - ConnArea& connArea() const; - // catalogs - DictCatalog& dictCatalog() const; - DictSchema& dictSchema() const; - // ndb - Ndb* ndbObject() const; - NdbSchemaCon* ndbSchemaCon() const; - NdbConnection* ndbConnection() const; - // containers for Plan classes - typedef std::vector<Plan_table*> TableVector; - typedef std::vector<Plan_column*> ColumnVector; - typedef std::vector<Plan_dml_column*> DmlColumnVector; - typedef std::vector<Plan_ddl_column*> DdlColumnVector; - typedef std::vector<Plan_ddl_constr*> DdlConstrVector; - typedef std::vector<Plan_idx_column*> IdxColumnVector; - typedef std::vector<Plan_expr*> ExprVector; - typedef std::list<Plan_expr*> ExprList; - typedef std::vector<ExprList> ExprListVector; - typedef std::list<Plan_pred*> PredList; - typedef std::set<Plan_table*> TableSet; - typedef std::vector<Plan_expr_param*> ParamVector; - // control area on the stack XXX needs to be designed - struct Ctl { - Ctl(Ctl* up); - Ctl* m_up; // up the stack - // analyze - TableVector m_tableList; // resolve column names - bool m_topand; // in top-level where clause - bool m_extra; // anything but single pk=expr - bool m_aggrok; // aggregate allowed - bool m_aggrin; // within aggregate args - bool m_const; // only constants in set clause - PredList m_topcomp; // top level comparisons - Plan_dml_row *m_dmlRow; // row type to convert to - Plan_table* m_topTable; // top level table for interpreted progs - bool m_having; // in having-predicate - // codegen - Exec_root* m_execRoot; // root of Exec tree - const Exec_query* m_execQuery; // pass to column - }; - // semantic analysis and optimization - virtual Plan_base* analyze(Ctx& ctx, Ctl& ctl) = 0; - // generate "executable" code - virtual Exec_base* codegen(Ctx& ctx, Ctl& ctl) = 0; - // misc - virtual void print(Ctx& ctx) = 0; -protected: - Plan_root* m_root; - void printList(Ctx& ctx, Plan_base* a[], unsigned n); -}; - -inline -Plan_base::Plan_base(Plan_root* root) : - m_root(root) -{ - ctx_assert(m_root != 0); -} - -inline -Plan_base::Ctl::Ctl(Ctl* up) : - m_up(up), - m_tableList(1), // 1-based - m_topand(false), - m_extra(false), - m_aggrok(false), - m_aggrin(false), - m_dmlRow(0), - m_topTable(0), - m_having(false), - m_execRoot(0), - m_execQuery(0) -{ -} - -/** - * @class Exec_base - * @brief Base class for exec trees - */ -class Exec_base : public ExecTree { -public: - class Code : public ExecTree::Code { - public: - virtual ~Code() = 0; - }; - class Data : public ExecTree::Data { - public: - virtual ~Data() = 0; - }; - Exec_base(Exec_root* root); - virtual ~Exec_base() = 0; - // get references to StmtArea via Exec_root - virtual StmtArea& stmtArea() const; - DescArea& descArea(DescUsage u) const; - ConnArea& connArea() const; - // catalogs - DictSchema& dictSchema() const; - // ndb - Ndb* ndbObject() const; - NdbSchemaCon* ndbSchemaCon() const; - NdbConnection* ndbConnection() const; - // containers for Exec classes - typedef std::vector<Exec_expr*> ExprVector; - typedef std::vector<Exec_expr_param*> ParamVector; - // control area on the stack - struct Ctl { - Ctl(Ctl* up); - Ctl* m_up; // up the stack - const Exec_query* m_query; // pass Data - ExprVector m_exprList; // pass Data - NdbOperation* m_scanOp; // scan operation - bool m_postEval; // for rownum - unsigned m_groupIndex; // for group by - bool m_groupInit; // first in group - Exec_expr_row* m_sortRow; // from sort to group by - NdbScanFilter* m_scanFilter; // scan filter - }; - // allocate and deallocate Data instances - virtual void alloc(Ctx& ctx, Ctl& ctl) = 0; - virtual void close(Ctx& ctx) = 0; - // set Code and Data - void setCode(const Code& code); - void setData(Data& data); - // misc - virtual void print(Ctx& ctx) = 0; -protected: - const Code* m_code; - Data* m_data; - Exec_root* m_root; - void printList(Ctx& ctx, Exec_base* a[], unsigned n); -}; - -inline -Exec_base::Exec_base(Exec_root* root) : - m_code(0), - m_data(0), - m_root(root) -{ - ctx_assert(m_root != 0); -} - -inline void -Exec_base::setCode(const Code& code) -{ - ctx_assert(m_code == 0); - m_code = &code; -} - -inline void -Exec_base::setData(Data& data) -{ - ctx_assert(m_data == 0); - m_data = &data; -} - -inline -Exec_base::Ctl::Ctl(Ctl* up) : - m_up(up), - m_scanOp(0), - m_postEval(false), - m_groupIndex(0), - m_groupInit(false), - m_sortRow(0), - m_scanFilter(0) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_column.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_column.cpp deleted file mode 100644 index c4c0480a5e7728af1f1f47cbb5f89a821f4ab594..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_column.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <dictionary/DictSchema.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_column.hpp" -#include "Code_table_list.hpp" -#include "Code_table.hpp" - -// Plan_column - -Plan_column::~Plan_column() -{ -} - -void -Plan_column::analyzeColumn(Ctx& ctx, Plan_base::Ctl& ctl) -{ - if (m_resTable != 0) // done on previous pass - return; - if (! (ctl.m_tableList.size() > 1)) { - ctx.pushStatus(Sqlstate::_42000, Error::Gen, "column %s not allowed here", getPrintName()); - return; - } - unsigned resCount = 0; - for (unsigned i = 1; i < ctl.m_tableList.size(); i++) { - Plan_table* table = ctl.m_tableList[i]; - ctx_assert(table != 0); - int ret = table->resolveColumn(ctx, this); - if (ret < 0) - return; - if (ret) - resCount++; - } - if (resCount == 0) { - // XXX try to strip "schema name" from table name - for (unsigned i = 1; i < ctl.m_tableList.size(); i++) { - Plan_table* table = ctl.m_tableList[i]; - ctx_assert(table != 0); - int ret = table->resolveColumn(ctx, this, true); - if (ret < 0) - return; - if (ret) - resCount++; - } - } - if (resCount == 0) { - ctx.pushStatus(Sqlstate::_42S22, Error::Gen, "column %s not found", getPrintName()); - return; - } - if (resCount > 1) { - ctx.pushStatus(Error::Gen, "column %s is ambiguous", getPrintName()); - return; - } - // copy SQL type - m_sqlType = dictColumn().sqlType(); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_column.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_column.hpp deleted file mode 100644 index af0dcea690dc0f7cca3c94e6e43a674054286135..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_column.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_column_hpp -#define ODBC_CODEGEN_Code_column_hpp - -#include <common/common.hpp> -#include <common/DataType.hpp> -#include "Code_base.hpp" - -class DictColumn; -class Plan_table; - -/** - * @class Plan_column - * @brief Abstract base class for columns - */ -class Plan_column { -public: - enum Type { - Type_expr = 1, - Type_dml = 2, - Type_ddl = 3, // new columns in create table - Type_idx = 4 // old columns in create index - }; - Plan_column(Type type, const BaseString& name); - virtual ~Plan_column() = 0; - void analyzeColumn(Ctx& ctx, Plan_base::Ctl& ctl); - // attributes - const BaseString& getName() const; - const BaseString& getCname() const; - const char* getPrintName() const; - void setCname(const BaseString& cname); - const DictColumn& dictColumn() const; - const SqlType& sqlType() const; -protected: - friend class Plan_table; - friend class Plan_comp_op; - Type m_type; - BaseString m_name; - BaseString m_cname; - BaseString m_printName; - DictColumn* m_dictColumn; - /** - * Resolve to table and operational position (for example - * column number in scan query). - */ - Plan_table* m_resTable; - unsigned m_resPos; - SqlType m_sqlType; -}; - -inline -Plan_column::Plan_column(Type type, const BaseString& name) : - m_type(type), - m_name(name), - m_printName(name), - m_dictColumn(0), - m_resTable(0), - m_resPos(0) -{ -} - -inline const BaseString& -Plan_column::getName() const -{ - return m_name; -} - -inline const BaseString& -Plan_column::getCname() const -{ - return m_cname; -} - -inline const char* -Plan_column::getPrintName() const -{ - return m_printName.c_str(); -} - -inline void -Plan_column::setCname(const BaseString& cname) -{ - m_cname.assign(cname); - if (m_cname.empty()) - m_printName.assign(m_name); - else { - m_printName.assign(m_cname); - m_printName.append("."); - m_printName.append(m_name); - } -} - -inline const DictColumn& -Plan_column::dictColumn() const -{ - ctx_assert(m_dictColumn != 0); - return *m_dictColumn; -} - -inline const SqlType& -Plan_column::sqlType() const -{ - ctx_assert(m_sqlType.type() != SqlType::Undef); - return m_sqlType; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.cpp deleted file mode 100644 index 7782ed1ea2a5e1d5b25fd763f28f734a455408f3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <dictionary/DictColumn.hpp> -#include "Code_pred.hpp" -#include "Code_comp_op.hpp" -#include "Code_expr_conv.hpp" -#include "Code_expr_column.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -// Comp_op - -const char* -Comp_op::name() const -{ - switch (m_opcode) { - case Eq: - return "="; - case Noteq: - return "!="; - case Lt: - return "<"; - case Lteq: - return "<="; - case Gt: - return ">"; - case Gteq: - return ">="; - case Like: - return "like"; - case Notlike: - return "not like"; - case Isnull: - return "is null"; - case Isnotnull: - return "is not null"; - } - ctx_assert(false); - return ""; -} - -unsigned -Comp_op::arity() const -{ - switch (m_opcode) { - case Eq: - case Noteq: - case Lt: - case Lteq: - case Gt: - case Gteq: - case Like: - case Notlike: - return 2; - case Isnull: - case Isnotnull: - return 1; - } - ctx_assert(false); - return 0; -} - -// Plan_comp_op - -Plan_comp_op::~Plan_comp_op() -{ -} - -Plan_base* -Plan_comp_op::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - const unsigned arity = m_op.arity(); - // analyze operands - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // for each operand, find type to convert to - SqlType con[1 + 2]; - if (arity == 1) { - const SqlType& t1 = m_expr[1]->sqlType(); - switch (t1.type()) { - case SqlType::Char: - case SqlType::Varchar: - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Real: - case SqlType::Double: - case SqlType::Datetime: - case SqlType::Null: - case SqlType::Unbound: - con[1] = t1; - break; - default: - break; - } - if (con[1].type() == SqlType::Undef) { - char b1[40]; - t1.print(b1, sizeof(b1)); - ctx.pushStatus(Error::Gen, "type mismatch in comparison: %s %s", b1, m_op.name()); - return 0; - } - } else if (arity == 2) { - const SqlType& t1 = m_expr[1]->sqlType(); - const SqlType& t2 = m_expr[2]->sqlType(); - switch (t1.type()) { - case SqlType::Char: - switch (t2.type()) { - case SqlType::Char: - case SqlType::Varchar: - case SqlType::Null: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Varchar: - switch (t2.type()) { - case SqlType::Char: - case SqlType::Varchar: - case SqlType::Null: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - switch (t2.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - // conversion would mask primary key optimization - con[1] = t1; - con[2] = t2; - break; - case SqlType::Real: - case SqlType::Double: - con[1].setType(ctx, SqlType::Double); - con[2] = con[1]; - break; - case SqlType::Null: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Real: - case SqlType::Double: - switch (t2.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Real: - case SqlType::Double: - con[1].setType(ctx, SqlType::Double); - con[2] = con[1]; - break; - case SqlType::Null: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Datetime: - switch (t2.type()) { - case SqlType::Datetime: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Null: - switch (t2.type()) { - case SqlType::Char: - case SqlType::Varchar: - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Real: - case SqlType::Double: - case SqlType::Datetime: - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - con[1] = con[2] = t2; - break; - default: - break; - } - break; - case SqlType::Unbound: - con[1] = con[2] = t1; - break; - default: - break; - } - if (con[1].type() == SqlType::Undef || con[2].type() == SqlType::Undef) { - char b1[40], b2[40]; - t1.print(b1, sizeof(b1)); - t2.print(b2, sizeof(b2)); - ctx.pushStatus(Error::Gen, "type mismatch in comparison: %s %s %s", b1, m_op.name(), b2); - return 0; - } - } else { - ctx_assert(false); - return 0; - } - if (! ctx.ok()) - return 0; - // insert required conversions - for (unsigned i = 1; i <= arity; i++) { - if (con[i].type() == SqlType::Unbound) { - continue; - } - Plan_expr_conv* exprConv = new Plan_expr_conv(m_root, con[i]); - m_root->saveNode(exprConv); - exprConv->setExpr(m_expr[i]); - m_expr[i] = static_cast<Plan_expr*>(exprConv->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_expr[i] != 0); - } - // look for column=expr - if (ctl.m_topand && m_op.m_opcode == Comp_op::Eq) { - ctx_assert(arity == 2); - for (unsigned i = 1, j = 2; i <= 2; i++, j--) { - if (m_expr[i]->type() != Plan_expr::TypeColumn) - continue; - Plan_expr_column* column = static_cast<Plan_expr_column*>(m_expr[i]); - if (! column->resolveEq(ctx, m_expr[j])) - ctl.m_extra = true; - } - } else { - ctl.m_extra = true; - } - // save top level comparison on list - if (ctl.m_topand) { - ctl.m_topcomp.push_back(this); - } - // table dependencies are union from operands - m_tableSet.clear(); - for (unsigned i = 1; i <= arity; i++) { - const TableSet& ts = m_expr[i]->tableSet(); - m_tableSet.insert(ts.begin(), ts.end()); - } - // set of tables for which interpreter cannot be used - m_noInterp.clear(); - // convenient -#undef ustype -#define ustype(b, n) (((b) ? 1 : 0) * 100 + (n)) - if (arity == 1) { - for (unsigned i = 1; i <= 1; i++) { - const SqlType t1 = m_expr[i]->sqlType(); - switch (m_op.m_opcode) { - case Comp_op::Isnull: - case Comp_op::Isnotnull: - if (m_expr[i]->type() == Plan_expr::TypeColumn) { - switch (ustype(t1.unSigned(), t1.type())) { - // all types accepted now - default: - { - Plan_expr_column* column = static_cast<Plan_expr_column*>(m_expr[i]); - ctx_assert(column->m_resTable != 0); - m_interpColumn[i] = column; - continue; // ok - } - break; - } - } - break; - default: - break; - } - const TableSet& ts = m_expr[i]->tableSet(); - m_noInterp.insert(ts.begin(), ts.end()); - } - } else if (arity == 2) { - for (unsigned i = 1, j = 2; i <= 2; i++, j--) { - const SqlType t1 = m_expr[i]->sqlType(); - switch (m_op.m_opcode) { - case Comp_op::Like: - case Comp_op::Notlike: - if (i == 2) // col like val but not val like col - break; - /*FALLTHRU*/ - case Comp_op::Eq: - case Comp_op::Noteq: - case Comp_op::Lt: - case Comp_op::Lteq: - case Comp_op::Gt: - case Comp_op::Gteq: - if (m_expr[i]->type() == Plan_expr::TypeColumn) { - switch (ustype(t1.unSigned(), t1.type())) { - case ustype(false, SqlType::Char): - case ustype(false, SqlType::Varchar): - case ustype(true, SqlType::Smallint): - case ustype(true, SqlType::Integer): - case ustype(true, SqlType::Bigint): - { - Plan_expr_column* column = static_cast<Plan_expr_column*>(m_expr[i]); - ctx_assert(column->m_resTable != 0); - const TableSet& ts = m_expr[j]->tableSet(); - if (ts.find(column->m_resTable) == ts.end()) { - // candidate for column=const - m_interpColumn[i] = column; - continue; // ok - } - } - break; - default: - break; - } - } - break; - default: - break; - } - const TableSet& ts = m_expr[i]->tableSet(); - m_noInterp.insert(ts.begin(), ts.end()); - } - } else { - ctx_assert(false); - return 0; - } -#undef ustype - return this; -} - -Exec_base* -Plan_comp_op::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - const unsigned arity = m_op.arity(); - Exec_comp_op* exec = new Exec_comp_op(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // create code for operands - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - Exec_expr* execExpr = static_cast<Exec_expr*>(m_expr[i]->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - exec->setExpr(i, execExpr); - } - // create the code - Exec_comp_op::Code& code = *new Exec_comp_op::Code(m_op); - // interpreted column=const - if (! ctl.m_having) { - ctx_assert(ctl.m_topTable != 0); - for (unsigned i = 1; i <= arity; i++) { - Plan_expr_column* column = m_interpColumn[i]; - if (column == 0) - continue; - ctx_assert(column->m_resTable != 0); - if (column->m_resTable != ctl.m_topTable) - continue; - ctx_assert(code.m_interpColumn == 0); - code.m_interpColumn = i; - code.m_interpAttrId = column->dictColumn().getAttrId(); - ctx_log2(("can use interpreter on %s", column->getPrintName())); - } - } - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_comp_op::print(Ctx& ctx) -{ - ctx.print(" [%s", m_op.name()); - Plan_base* a[] = { m_expr[1], m_expr[2] }; - printList(ctx, a, m_op.arity()); - ctx.print("]"); -} - -bool -Plan_comp_op::isGroupBy(const Plan_expr_row* row) const -{ - const unsigned arity = m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - if (! m_expr[i]->isGroupBy(row)) - return false; - } - return true; -} - -// Code_comp_op - -Exec_comp_op::Code::~Code() -{ -} - -Exec_comp_op::Data::~Data() -{ -} - -Exec_comp_op::~Exec_comp_op() -{ -} - -void -Exec_comp_op::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate subexpressions - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - Data& data = *new Data; - setData(data); -} - -void -Exec_comp_op::close(Ctx& ctx) -{ - const Code& code = getCode(); - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->close(ctx); - } -} - -void -Exec_comp_op::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [%s", code.m_op.name()); - Exec_base* a[] = { m_expr[1], m_expr[2] }; - printList(ctx, a, code.m_op.arity()); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.hpp deleted file mode 100644 index 0585ab1dabfb19a7e904ba2aad3f2ea3c69c4d65..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_comp_op.hpp +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_comp_op_hpp -#define ODBC_CODEGEN_Code_comp_op_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_pred.hpp" -#include "Code_expr.hpp" -#include "Code_expr_column.hpp" - -/** - * @class Comp_op - * @brief Comparison operations - */ -struct Comp_op { - enum Opcode { - Eq = 1, // binary - Noteq, - Lt, - Lteq, - Gt, - Gteq, - Like, - Notlike, - Isnull, // unary - Isnotnull - }; - Comp_op(Opcode opcode); - const char* name() const; - unsigned arity() const; - Opcode m_opcode; -}; - -inline -Comp_op::Comp_op(Opcode opcode) : - m_opcode(opcode) -{ -} - -/** - * @class Plan_comp_op - * @brief Comparison operator node in PlanTree - */ -class Plan_comp_op : public Plan_pred { -public: - Plan_comp_op(Plan_root* root, Comp_op op); - virtual ~Plan_comp_op(); - void setExpr(unsigned i, Plan_expr* expr); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - virtual bool isGroupBy(const Plan_expr_row* row) const; -protected: - Comp_op m_op; - Plan_expr* m_expr[1 + 2]; - Plan_expr_column* m_interpColumn[1 + 2]; // candidates -}; - -inline -Plan_comp_op::Plan_comp_op(Plan_root* root, Comp_op op) : - Plan_pred(root, TypeComp), - m_op(op) -{ - m_expr[0] = m_expr[1] = m_expr[2] = 0; - m_interpColumn[0] = m_interpColumn[1] = m_interpColumn[2] = 0; -} - -inline void -Plan_comp_op::setExpr(unsigned i, Plan_expr* expr) -{ - ctx_assert(1 <= i && i <= 2); - m_expr[i] = expr; -} - -/** - * @class Exec_comp_op - * @brief Comparison operator node in ExecTree - */ -class Exec_comp_op : public Exec_pred { -public: - class Code : public Exec_pred::Code { - public: - Code(Comp_op op); - virtual ~Code(); - protected: - friend class Plan_comp_op; - friend class Exec_comp_op; - Comp_op m_op; - unsigned m_interpColumn; // 1 or 2 if interpreted column, 0 if both constant - NdbAttrId m_interpAttrId; - }; - class Data : public Exec_pred::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_comp_op; - }; - Exec_comp_op(Exec_root* root); - virtual ~Exec_comp_op(); - void alloc(Ctx& ctx, Ctl& ctl); - void execInterp(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setExpr(unsigned i, Exec_expr* expr); -protected: - Exec_expr* m_expr[1 + 2]; -}; - -inline -Exec_comp_op::Code::Code(Comp_op op) : - m_op(op), - m_interpColumn(0), - m_interpAttrId((NdbAttrId)-1) -{ -} - -inline -Exec_comp_op::Data::Data() -{ -} - -inline -Exec_comp_op::Exec_comp_op(Exec_root* root) : - Exec_pred(root) -{ - m_expr[0] = m_expr[1] = m_expr[2] = 0; -} - -// children - -inline const Exec_comp_op::Code& -Exec_comp_op::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_comp_op::Data& -Exec_comp_op::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_comp_op::setExpr(unsigned i, Exec_expr* expr) -{ - ctx_assert(1 <= i && i <= 2 && m_expr[i] == 0); - m_expr[i] = expr; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.cpp deleted file mode 100644 index 84f319338a49fd58aa0b7c45fcb9d292d1944e5c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_create_index.hpp" -#include "Code_root.hpp" - -// Plan_create_index - -Plan_create_index::~Plan_create_index() -{ -} - -Plan_base* -Plan_create_index::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_create_index); - // analyze the table - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // analyze the columns - ctl.m_tableList.resize(1 + 1); // indexed from 1 - ctl.m_tableList[1] = m_table; - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_idx_column* column = getColumn(i); - column->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - return this; -} - -void -Plan_create_index::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "CREATE INDEX", SQL_DIAG_CREATE_INDEX); -} - -Exec_base* -Plan_create_index::codegen(Ctx& ctx, Ctl& ctl) -{ - Exec_create_index* exec = new Exec_create_index(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - const unsigned count = countColumn(); - const char** attrList = new const char* [1 + count]; - attrList[0] = 0; // unused - for (unsigned i = 1; i <= count; i++) { - Plan_idx_column* column = getColumn(i); - const char* cname = column->getName().c_str(); - attrList[i] = strcpy(new char[strlen(cname) + 1], cname); - } - Exec_create_index::Code& code = *new Exec_create_index::Code(m_name, m_table->getName(), m_type, count, attrList); - exec->setCode(code); - code.m_fragmentType = m_fragmentType; - code.m_logging = m_logging; - return exec; -} - -void -Plan_create_index::print(Ctx& ctx) -{ - ctx.print(" [create_index name=%s table=%s type=%d", m_name.c_str(), m_table->getName().c_str(), (int)m_type); - ctx.print(" ["); - for (unsigned i = 1; i <= countColumn(); i++) { - Plan_idx_column* column = getColumn(i); - if (i > 1) - ctx.print(" "); - column->print(ctx); - } - ctx.print("]"); -} - -// Exec_create_index - -Exec_create_index::Code::~Code() -{ - for (unsigned i = 1; i <= m_attrCount; i++) { - delete[] m_attrList[i]; - m_attrList[i] = 0; - } - delete[] m_attrList; -} - -Exec_create_index::Data::~Data() -{ -} - -Exec_create_index::~Exec_create_index() -{ -} - -void -Exec_create_index::alloc(Ctx& ctx, Ctl& ctl) -{ - Data& data = *new Data; - setData(data); -} - -void -Exec_create_index::close(Ctx& ctx) -{ -} - -void -Exec_create_index::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [create_index %s]", code.m_tableName.c_str()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.hpp deleted file mode 100644 index ebd757e111880e3c36ff69b206c2478bbf1aa3e9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_index.hpp +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_create_index_hpp -#define ODBC_CODEGEN_Code_create_index_hpp - -#include <vector> -#include <NdbApi.hpp> -#include <common/common.hpp> -#include "Code_ddl.hpp" -#include "Code_table.hpp" -#include "Code_idx_column.hpp" - -class DictTable; -class DictColumn; - -/** - * @class Plan_create_index - * @brief Create table in PlanTree - */ -class Plan_create_index : public Plan_ddl { -public: - Plan_create_index(Plan_root* root, const BaseString& name); - virtual ~Plan_create_index(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void describe(Ctx & ctx); - void print(Ctx& ctx); - // attributes - const BaseString& getName() const; - // children - void setType(NdbDictionary::Object::Type type); - void setTable(Plan_table* table); - unsigned countColumn() const; - void addColumn(Plan_idx_column* column); - Plan_idx_column* getColumn(unsigned i) const; - void setFragmentType(NdbDictionary::Object::FragmentType fragmentType); - void setLogging(bool logging); -protected: - BaseString m_name; - NdbDictionary::Object::Type m_type; - Plan_table* m_table; - IdxColumnVector m_columnList; - NdbDictionary::Object::FragmentType m_fragmentType; - bool m_logging; -}; - -inline -Plan_create_index::Plan_create_index(Plan_root* root, const BaseString& name) : - Plan_ddl(root), - m_name(name), - m_type(NdbDictionary::Object::TypeUndefined), - m_columnList(1), - m_fragmentType(NdbDictionary::Object::FragUndefined), - m_logging(true) -{ -} - -inline const BaseString& -Plan_create_index::getName() const -{ - return m_name; -} - -// children - -inline void -Plan_create_index::setType(NdbDictionary::Object::Type type) -{ - m_type = type; -} - -inline void -Plan_create_index::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline unsigned -Plan_create_index::countColumn() const -{ - return m_columnList.size() - 1; -} - -inline void -Plan_create_index::addColumn(Plan_idx_column* column) -{ - ctx_assert(column != 0); - m_columnList.push_back(column); -} - -inline Plan_idx_column* -Plan_create_index::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= countColumn() && m_columnList[i] != 0); - return m_columnList[i]; -} - -inline void -Plan_create_index::setFragmentType(NdbDictionary::Object::FragmentType fragmentType) -{ - m_fragmentType = fragmentType; -} - -inline void -Plan_create_index::setLogging(bool logging) -{ - m_logging = logging; -} - -/** - * @class Exec_create_index - * @brief Create table in ExecTree - */ -class Exec_create_index : public Exec_ddl { -public: - class Code : public Exec_ddl::Code { - public: - Code(const BaseString& indexName, const BaseString& tableName, NdbDictionary::Object::Type type, unsigned attrCount, const char** attrList); - virtual ~Code(); - protected: - friend class Plan_create_index; - friend class Exec_create_index; - const BaseString m_indexName; - const BaseString m_tableName; - NdbDictionary::Object::Type m_type; - const unsigned m_attrCount; - const char** m_attrList; - NdbDictionary::Object::FragmentType m_fragmentType; - bool m_logging; - }; - class Data : public Exec_ddl::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_create_index; - }; - Exec_create_index(Exec_root* root); - virtual ~Exec_create_index(); - void alloc(Ctx& ctx, Ctl& ctl); - void execute(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_create_index::Code::Code(const BaseString& indexName, const BaseString& tableName, NdbDictionary::Object::Type type, unsigned attrCount, const char** attrList) : - m_indexName(indexName), - m_tableName(tableName), - m_type(type), - m_attrCount(attrCount), - m_attrList(attrList), - m_fragmentType(NdbDictionary::Object::FragUndefined), - m_logging(true) -{ -} - -inline -Exec_create_index::Data::Data() -{ -} - -inline -Exec_create_index::Exec_create_index(Exec_root* root) : - Exec_ddl(root) -{ -} - -// children - -inline const Exec_create_index::Code& -Exec_create_index::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_create_index::Data& -Exec_create_index::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.cpp deleted file mode 100644 index 5b90b658ed702f1d3a8fdf4ff82ec2894cf41ae1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_create_row.hpp" -#include "Code_root.hpp" - -Plan_create_row::~Plan_create_row() -{ -} - -Plan_base* -Plan_create_row::analyze(Ctx& ctx, Ctl& ctl) -{ - // check for duplicate column name - for (unsigned i = 1, n = countColumn(); i < n; i++) { - const BaseString& a = getColumn(i)->getName(); - for (unsigned i2 = i + 1; i2 <= n; i2++) { - const BaseString& a2 = getColumn(i2)->getName(); - if (strcmp(a.c_str(), a2.c_str()) == 0) { - ctx.pushStatus(Error::Gen, "duplicate column %s", a.c_str()); - return 0; - } - } - } - // move single-column primary key constraint to constraint list - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - if (column->m_primaryKey) { - Plan_ddl_row* ddlRow = new Plan_ddl_row(m_root); - m_root->saveNode(ddlRow); - ddlRow->addColumn(column); - Plan_ddl_constr* constr = new Plan_ddl_constr(m_root); - m_root->saveNode(constr); - constr->setRow(ddlRow); - addConstr(constr); - column->m_primaryKey = false; // will be set again - } - } - // check primary key constraints - if (countConstr() < 1) { - ctx.pushStatus(Error::Gen, "table must have a primary key"); - return 0; - } - if (countConstr() > 1) { - ctx.pushStatus(Error::Gen, "table can have only one primary key"); - return 0; - } - Plan_ddl_row* ddlRow = getConstr(1)->getRow(); - for (unsigned i = 1, n = ddlRow->countColumn(); i <= n; i++) { - Plan_ddl_column* column = ddlRow->getColumn(i); - const BaseString& a = column->getName(); - bool found = false; - for (unsigned i2 = 1, n2 = countColumn(); i2 <= n2; i2++) { - Plan_ddl_column* column2 = getColumn(i2); - const BaseString& a2 = column2->getName(); - if (strcmp(a.c_str(), a2.c_str()) != 0) - continue; - if (column2->getPrimaryKey()) { - ctx.pushStatus(Error::Gen, "duplicate primary key constraint on %s", a.c_str()); - return 0; - } - column2->setPrimaryKey(); - found = true; - break; - } - if (! found) { - ctx.pushStatus(Error::Gen, "undefined primary key column %s", a.c_str()); - return 0; - } - } - // analyze column types - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - getColumn(i)->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // check TupleId - unsigned tupleId = 0; - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - if (! column->getTupleId()) - continue; - if (i != 1) { - ctx.pushStatus(Error::Gen, "tuple id column %u is not first column", i); - return 0; - } - if (tupleId != 0) { // cannot happen now since attr name is fixed - ctx.pushStatus(Error::Gen, "duplicate tuple id column %u", i); - return 0; - } - tupleId = i; - } - if (tupleId != 0) { - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - if (i == tupleId) - continue; - if (! column->getPrimaryKey()) - continue; - ctx.pushStatus(Error::Gen, "cannot have both tuple id and other primary key column %u", i); - return 0; - } - } - // check auto-increment - unsigned autoIncrement = 0; - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - if (! column->getAutoIncrement()) - continue; - if (autoIncrement != 0) { - ctx.pushStatus(Error::Gen, "duplicate auto-increment column %u", i); - return 0; - } - autoIncrement = i; - } - if (autoIncrement != 0) { - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - if (i == autoIncrement) - continue; - if (! column->getPrimaryKey()) - continue; - ctx.pushStatus(Error::Gen, "cannot have both auto-increment column and other primary key column %u", i); - return 0; - } - } - return this; -} - -Exec_base* -Plan_create_row::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_create_row::print(Ctx& ctx) -{ - ctx.print(" [create_row"); - for (unsigned i = 1; i <= countColumn(); i++) { - Plan_base* a = m_columnList[i]; - printList(ctx, &a, 1); - } - for (unsigned i = 1; i <= countConstr(); i++) { - Plan_base* a = m_constrList[i]; - printList(ctx, &a, 1); - } -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.hpp deleted file mode 100644 index f03455ff28e0dff30e8bab7eb55e1e0ab9f043f6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_row.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_create_row_hpp -#define ODBC_CODEGEN_Code_create_row_hpp - -#include <vector> -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_ddl_column.hpp" -#include "Code_ddl_constr.hpp" - -/** - * @class Plan_create_row - * @brief Row of columns and constraints in create statement - */ -class Plan_create_row : public Plan_base { -public: - Plan_create_row(Plan_root* root); - virtual ~Plan_create_row(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - unsigned countColumn() const; - void addColumn(Plan_ddl_column* column); - Plan_ddl_column* getColumn(unsigned i) const; - unsigned countConstr() const; - void addConstr(Plan_ddl_constr* constr); - Plan_ddl_constr* getConstr(unsigned i) const; -protected: - DdlColumnVector m_columnList; - DdlConstrVector m_constrList; -}; - -inline -Plan_create_row::Plan_create_row(Plan_root* root) : - Plan_base(root), - m_columnList(1), - m_constrList(1) -{ -} - -// children - -inline unsigned -Plan_create_row::countColumn() const -{ - return m_columnList.size() - 1; -} - -inline void -Plan_create_row::addColumn(Plan_ddl_column* column) -{ - ctx_assert(column != 0); - m_columnList.push_back(column); -} - -inline Plan_ddl_column* -Plan_create_row::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_columnList.size() && m_columnList[i] != 0); - return m_columnList[i]; -} - -inline unsigned -Plan_create_row::countConstr() const -{ - return m_constrList.size() - 1; -} - -inline void -Plan_create_row::addConstr(Plan_ddl_constr* constr) -{ - ctx_assert(constr != 0); - m_constrList.push_back(constr); -} - -inline Plan_ddl_constr* -Plan_create_row::getConstr(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_constrList.size() && m_constrList[i] != 0); - return m_constrList[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.cpp deleted file mode 100644 index 14e4abbd7fe316d6867a680e93b5f8d0a2eaabf8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_create_table.hpp" -#include "Code_root.hpp" - -// Plan_create_table - -Plan_create_table::~Plan_create_table() -{ -} - -Plan_base* -Plan_create_table::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_create_table); - // analyze the create row - ctx_assert(m_createRow != 0); - m_createRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_create_table::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "CREATE TABLE", SQL_DIAG_CREATE_TABLE); -} - -Exec_base* -Plan_create_table::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_createRow != 0); - Exec_create_table* exec = new Exec_create_table(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - const unsigned count = m_createRow->countColumn(); - Exec_create_table::Code::Attr* attrList = new Exec_create_table::Code::Attr[1 + count]; - unsigned tupleId = 0; - unsigned autoIncrement = 0; - for (unsigned i = 1; i <= count; i++) { - Plan_ddl_column* column = m_createRow->getColumn(i); - Exec_create_table::Code::Attr& attr = attrList[i]; - attr.m_attrName.assign(column->getName()); - attr.m_sqlType = column->sqlType(); - attr.m_tupleKey = column->getPrimaryKey(); - attr.m_tupleId = column->getTupleId(); - attr.m_autoIncrement = column->getAutoIncrement(); - if (attr.m_tupleId) - tupleId = i; - if (attr.m_autoIncrement) - autoIncrement = i; - attr.m_defaultValue = 0; - Plan_expr* expr; - if ((expr = column->getDefaultValue()) != 0) { - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - attr.m_defaultValue = execExpr; - } - } - Exec_create_table::Code& code = *new Exec_create_table::Code(m_name, count, attrList, tupleId, autoIncrement); - exec->setCode(code); - code.m_fragmentType = m_fragmentType; - code.m_logging = m_logging; - return exec; -} - -void -Plan_create_table::print(Ctx& ctx) -{ - ctx.print(" [create_table '%s'", m_name.c_str()); - Plan_base* a[] = { m_createRow }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_create_table - -Exec_create_table::Code::~Code() -{ - delete[] m_attrList; -} - -Exec_create_table::Data::~Data() -{ -} - -Exec_create_table::~Exec_create_table() -{ -} - -void -Exec_create_table::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const Code::Attr& attr = code.m_attrList[i]; - if (attr.m_defaultValue != 0) - attr.m_defaultValue->alloc(ctx, ctl); - } - Data& data = *new Data; - setData(data); -} - -void -Exec_create_table::close(Ctx& ctx) -{ - const Code& code = getCode(); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const Code::Attr& attr = code.m_attrList[i]; - if (attr.m_defaultValue != 0) - attr.m_defaultValue->close(ctx); - } -} - -void -Exec_create_table::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [create_table %s]", code.m_tableName.c_str()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.hpp deleted file mode 100644 index cbb2189d8ceb49cb1f5503ac0c4a2a7dd197a02f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_create_table.hpp +++ /dev/null @@ -1,178 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_create_table_hpp -#define ODBC_CODEGEN_Code_create_table_hpp - -#include <vector> -#include <common/common.hpp> -#include "Code_ddl.hpp" -#include "Code_ddl_row.hpp" -#include "Code_create_row.hpp" - -class DictTable; -class DictColumn; - -/** - * @class Plan_create_table - * @brief Create table in PlanTree - */ -class Plan_create_table : public Plan_ddl { -public: - Plan_create_table(Plan_root* root, const BaseString& name); - virtual ~Plan_create_table(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void describe(Ctx & ctx); - void print(Ctx& ctx); - // attributes - const BaseString& getName() const; - // children - void setCreateRow(Plan_create_row* createRow); - void setFragmentType(NdbDictionary::Object::FragmentType fragmentType); - void setLogging(bool logging); -protected: - BaseString m_name; - Plan_create_row* m_createRow; - NdbDictionary::Object::FragmentType m_fragmentType; - bool m_logging; -}; - -inline -Plan_create_table::Plan_create_table(Plan_root* root, const BaseString& name) : - Plan_ddl(root), - m_name(name), - m_createRow(0), - m_fragmentType(NdbDictionary::Object::FragUndefined), - m_logging(true) -{ -} - -inline const BaseString& -Plan_create_table::getName() const -{ - return m_name; -} - -// children - -inline void -Plan_create_table::setCreateRow(Plan_create_row* createRow) -{ - ctx_assert(createRow != 0); - m_createRow = createRow; -} - -inline void -Plan_create_table::setFragmentType(NdbDictionary::Object::FragmentType fragmentType) -{ - m_fragmentType = fragmentType; -} - -inline void -Plan_create_table::setLogging(bool logging) -{ - m_logging = logging; -} - -/** - * @class Exec_create_table - * @brief Create table in ExecTree - */ -class Exec_create_table : public Exec_ddl { -public: - class Code : public Exec_ddl::Code { - public: - struct Attr { - Attr() : m_defaultValue(0) {} - BaseString m_attrName; - SqlType m_sqlType; - bool m_tupleKey; - bool m_tupleId; - bool m_autoIncrement; - Exec_expr* m_defaultValue; - }; - Code(const BaseString& tableName, unsigned attrCount, const Attr* attrList, unsigned tupleId, unsigned autoIncrement); - virtual ~Code(); - protected: - friend class Plan_create_table; - friend class Exec_create_table; - const BaseString m_tableName; - const unsigned m_attrCount; - const Attr* const m_attrList; - unsigned m_tupleId; - unsigned m_autoIncrement; - NdbDictionary::Object::FragmentType m_fragmentType; - bool m_logging; - }; - class Data : public Exec_ddl::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_create_table; - }; - Exec_create_table(Exec_root* root); - virtual ~Exec_create_table(); - void alloc(Ctx& ctx, Ctl& ctl); - void execute(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_create_table::Code::Code(const BaseString& tableName, unsigned attrCount, const Attr* attrList, unsigned tupleId, unsigned autoIncrement) : - m_tableName(tableName), - m_attrCount(attrCount), - m_attrList(attrList), - m_tupleId(tupleId), - m_autoIncrement(autoIncrement), - m_fragmentType(NdbDictionary::Object::FragUndefined), - m_logging(true) -{ -} - -inline -Exec_create_table::Data::Data() -{ -} - -inline -Exec_create_table::Exec_create_table(Exec_root* root) : - Exec_ddl(root) -{ -} - -// children - -inline const Exec_create_table::Code& -Exec_create_table::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_create_table::Data& -Exec_create_table::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.cpp deleted file mode 100644 index 1ff0fcebcbe53e36c46d58e212672f4ee708696e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include "Code_data_type.hpp" - -// Plan_data_type - -Plan_data_type::~Plan_data_type() -{ -} - -Plan_base* -Plan_data_type::analyze(Ctx& ctx, Ctl& ctl) -{ - return this; -} - -Exec_base* -Plan_data_type::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_data_type::print(Ctx& ctx) -{ - ctx.print(" [data_type]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.hpp deleted file mode 100644 index 735dc05014fc66a460ce0ee5b9ae762ff7026c46..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_data_type.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_data_type_hpp -#define ODBC_CODEGEN_Code_data_type_hpp - -#include <common/common.hpp> -#include <common/DataType.hpp> -#include "Code_base.hpp" - -/** - * @class Plan_data_type - * @brief Data type in DDL statement - * - * This is pure plan node. - */ -class Plan_data_type : public Plan_base { -public: - Plan_data_type(Plan_root* root, const SqlType& sqlType); - virtual ~Plan_data_type(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); -private: - friend class Plan_ddl_column; - SqlType m_sqlType; -}; - -inline -Plan_data_type::Plan_data_type(Plan_root* root, const SqlType& sqlType) : - Plan_base(root), - m_sqlType(sqlType) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.cpp deleted file mode 100644 index 2ba4291a0e804125f610391ddddb9aa2e322735e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_ddl.hpp" - -// Plan_ddl - -Plan_ddl::~Plan_ddl() -{ -} - -// Exec_ddl - -Exec_ddl::Code::~Code() -{ -} - -Exec_ddl::Data::~Data() -{ -} - -Exec_ddl::~Exec_ddl() -{ -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.hpp deleted file mode 100644 index 1ceca62d55d6173c198b7cd1be1e6a3c6864d25e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_ddl_hpp -#define ODBC_CODEGEN_Code_ddl_hpp - -#include <common/common.hpp> -#include "Code_stmt.hpp" - -/** - * @class Plan_ddl - * @brief Base class for DDL statements in PlanTree - */ -class Plan_ddl : public Plan_stmt { -public: - Plan_ddl(Plan_root* root); - virtual ~Plan_ddl() = 0; -}; - -inline -Plan_ddl::Plan_ddl(Plan_root* root) : - Plan_stmt(root) -{ -} - -/** - * @class Exec_ddl - * @brief Base class for DDL statements in ExecTree - */ -class Exec_ddl : public Exec_stmt { -public: - class Code : public Exec_stmt::Code { - public: - virtual ~Code() = 0; - }; - class Data : public Exec_stmt::Data { - public: - virtual ~Data() = 0; - }; - Exec_ddl(Exec_root* root); - virtual ~Exec_ddl() = 0; -}; - -inline -Exec_ddl::Exec_ddl(Exec_root* root) : - Exec_stmt(root) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.cpp deleted file mode 100644 index ee037e54c1fd010934e9c18b894ce8f74c9e338f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include "Code_ddl_column.hpp" -#include "Code_expr_conv.hpp" -#include "Code_root.hpp" - -// Plan_ddl_column - -Plan_ddl_column::~Plan_ddl_column() -{ -} - -Plan_base* -Plan_ddl_column::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_type != 0); - if (! m_type->m_sqlType.nullable()) { - m_nullable = false; - } - m_sqlType = m_type->m_sqlType; - m_sqlType.nullable(m_nullable); - const BaseString& name = getName(); - if (m_unSigned) { - switch (m_sqlType.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - break; - default: - ctx.pushStatus(Error::Gen, "invalid unsigned qualifier on column %s", name.c_str()); - return 0; - } - m_sqlType.unSigned(true); - } - if (strcmp(name.c_str(), "NDB$TID") == 0) { - if (! m_primaryKey) { - ctx.pushStatus(Error::Gen, "column %s must be a primary key", name.c_str()); - return 0; - } - if (sqlType().type() != SqlType::Bigint || ! sqlType().unSigned()) { - ctx.pushStatus(Error::Gen, "tuple id %s must have type BIGINT UNSIGNED", name.c_str()); - return 0; - } - setTupleId(); - } - if (m_autoIncrement) { - if (! m_primaryKey) { - ctx.pushStatus(Error::Gen, "auto-increment column %s must be a primary key", name.c_str()); - return 0; - } - if (sqlType().type() != SqlType::Smallint && sqlType().type() != SqlType::Integer && sqlType().type() != SqlType::Bigint) { - ctx.pushStatus(Error::Gen, "auto-increment column %s must have an integral type", name.c_str()); - return 0; - } - } - if (m_defaultValue != 0) { - if (m_primaryKey) { - ctx.pushStatus(Sqlstate::_42000, Error::Gen, "default value not allowed on primary key column %s", name.c_str()); - return 0; - } - m_defaultValue->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // insert conversion node - Plan_expr_conv* exprConv = new Plan_expr_conv(m_root, sqlType()); - m_root->saveNode(exprConv); - exprConv->setExpr(m_defaultValue); - Plan_expr* expr = static_cast<Plan_expr*>(exprConv->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(expr != 0); - m_defaultValue = expr; - } - return this; -} - -Exec_base* -Plan_ddl_column::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_ddl_column::print(Ctx& ctx) -{ - ctx.print(" [ddl_column %s key=%d id=%d]", getPrintName(), m_primaryKey, m_tupleId); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.hpp deleted file mode 100644 index 7d089d3744089eda080061b813d3fdf24bde8978..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_column.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_ddl_column_hpp -#define ODBC_CODEGEN_Code_ddl_column_hpp - -#include <common/common.hpp> -#include "Code_column.hpp" -#include "Code_data_type.hpp" -#include "Code_expr.hpp" - -class DictColumn; -class Plan_table; - -/** - * @class Plan_ddl_column - * @brief Column in DDL statement - */ -class Plan_ddl_column : public Plan_base, public Plan_column { -public: - Plan_ddl_column(Plan_root* root, const BaseString& name); - virtual ~Plan_ddl_column(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // attributes - void setNotNull(); - void setUnSigned(); - void setPrimaryKey(); - bool getPrimaryKey() const; - void setTupleId(); - bool getTupleId() const; - void setAutoIncrement(); - bool getAutoIncrement() const; - // children - void setType(Plan_data_type* type); - void setDefaultValue(Plan_expr* defaultValue); - Plan_expr* getDefaultValue() const; -protected: - friend class Plan_create_row; - Plan_data_type* m_type; - Plan_expr* m_defaultValue; - bool m_nullable; - bool m_unSigned; - bool m_primaryKey; - bool m_tupleId; - bool m_autoIncrement; -}; - -inline -Plan_ddl_column::Plan_ddl_column(Plan_root* root, const BaseString& name) : - Plan_base(root), - Plan_column(Type_ddl, name), - m_type(0), - m_defaultValue(0), - m_nullable(true), - m_unSigned(false), - m_primaryKey(false), - m_tupleId(false), - m_autoIncrement(false) -{ -} - -inline void -Plan_ddl_column::setNotNull() -{ - m_nullable = false; -} - -inline void -Plan_ddl_column::setUnSigned() -{ - m_unSigned = true; -} - -inline void -Plan_ddl_column::setPrimaryKey() -{ - m_nullable = false; - m_primaryKey = true; -} - -inline bool -Plan_ddl_column::getPrimaryKey() const -{ - return m_primaryKey; -} - -inline void -Plan_ddl_column::setTupleId() -{ - m_nullable = false; - m_tupleId = true; -} - -inline bool -Plan_ddl_column::getTupleId() const -{ - return m_tupleId; -} - -inline void -Plan_ddl_column::setAutoIncrement() -{ - m_nullable = false; - m_autoIncrement = true; -} - -inline bool -Plan_ddl_column::getAutoIncrement() const -{ - return m_autoIncrement; -} - -// children - -inline void -Plan_ddl_column::setType(Plan_data_type* type) -{ - ctx_assert(type != 0); - m_type = type; -} - -inline void -Plan_ddl_column::setDefaultValue(Plan_expr* defaultValue) -{ - ctx_assert(defaultValue != 0); - m_defaultValue = defaultValue; -} - -inline Plan_expr* -Plan_ddl_column::getDefaultValue() const -{ - return m_defaultValue; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.cpp deleted file mode 100644 index 78c23e38d978d39173ab5602157880677b2215f3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include "Code_ddl_constr.hpp" - -// Plan_ddl_constr - -Plan_ddl_constr::~Plan_ddl_constr() -{ -} - -Plan_base* -Plan_ddl_constr::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_ddlRow != 0); - m_ddlRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_ddl_constr::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_ddl_constr::print(Ctx& ctx) -{ - ctx.print(" [ddl_constr"); - Plan_base* a[] = { m_ddlRow }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.hpp deleted file mode 100644 index ea7808b37cbad53851dfeff8cb857d4ca2f0e584..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_constr.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_ddl_constr_hpp -#define ODBC_CODEGEN_Code_ddl_constr_hpp - -#include <common/common.hpp> -#include "Code_ddl_row.hpp" - -/** - * @class Plan_ddl_constr - * @brief Constraint in DDL statement - * - * Only unnamed primary key constraint exists. - */ -class Plan_ddl_constr : public Plan_base { -public: - Plan_ddl_constr(Plan_root* root); - virtual ~Plan_ddl_constr(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setRow(Plan_ddl_row* ddlRow); - Plan_ddl_row* getRow() const; -protected: - Plan_ddl_row* m_ddlRow; -}; - -inline -Plan_ddl_constr::Plan_ddl_constr(Plan_root* root) : - Plan_base(root) -{ -} - -// children - -inline void -Plan_ddl_constr::setRow(Plan_ddl_row* ddlRow) -{ - ctx_assert(ddlRow != 0); - m_ddlRow = ddlRow; -} - -inline Plan_ddl_row* -Plan_ddl_constr::getRow() const -{ - ctx_assert(m_ddlRow != 0); - return m_ddlRow; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.cpp deleted file mode 100644 index 87589ebbaa0caa56c2dadf3ddb6b2017acf737f0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_ddl_row.hpp" -#include "Code_ddl_column.hpp" -#include "Code_ddl_constr.hpp" - -Plan_ddl_row::~Plan_ddl_row() -{ -} - -Plan_base* -Plan_ddl_row::analyze(Ctx& ctx, Ctl& ctl) -{ - // analyze the columns - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_ddl_column* column = getColumn(i); - column->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // node was not replaced - return this; -} - -Exec_base* -Plan_ddl_row::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_ddl_row::print(Ctx& ctx) -{ - ctx.print(" [ddl_row"); - for (unsigned i = 1, n = countColumn(); i <= n; i++) { - Plan_base* a = m_columnList[i]; - printList(ctx, &a, 1); - } -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.hpp deleted file mode 100644 index ac3eded1b2ec9e86dbb8302ecf3b9f6ff0546964..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_ddl_row.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_ddl_row_hpp -#define ODBC_CODEGEN_Code_ddl_row_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_ddl_column.hpp" - -/** - * @class Plan_ddl_row - * @brief Row of columns in create statement - */ -class Plan_ddl_row : public Plan_base { -public: - Plan_ddl_row(Plan_root* root); - virtual ~Plan_ddl_row(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - unsigned countColumn() const; - void addColumn(Plan_ddl_column* column); - Plan_ddl_column* getColumn(unsigned i) const; -protected: - DdlColumnVector m_columnList; -}; - -inline -Plan_ddl_row::Plan_ddl_row(Plan_root* root) : - Plan_base(root), - m_columnList(1) -{ -} - -// children - -inline unsigned -Plan_ddl_row::countColumn() const -{ - return m_columnList.size() - 1; -} - -inline void -Plan_ddl_row::addColumn(Plan_ddl_column* column) -{ - ctx_assert(column != 0); - m_columnList.push_back(column); -} - -inline Plan_ddl_column* -Plan_ddl_row::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= countColumn() && m_columnList[i] != 0); - return m_columnList[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.cpp deleted file mode 100644 index 35b3daa1aca3a3e38c796ce826f1a1db39b75b76..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_delete.hpp" -#include "Code_delete_lookup.hpp" -#include "Code_delete_index.hpp" -#include "Code_delete_scan.hpp" -#include "Code_query_filter.hpp" -#include "Code_query_lookup.hpp" -#include "Code_query_index.hpp" -#include "Code_query_scan.hpp" -#include "Code_query_range.hpp" -#include "Code_query_repeat.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -Plan_delete::~Plan_delete() -{ -} - -Plan_base* -Plan_delete::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_delete); - // analyze the table - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // set name resolution scope - ctl.m_tableList.resize(1 + 1); // indexed from 1 - ctl.m_tableList[1] = m_table; - Plan_dml* stmt = 0; - if (m_pred != 0) { - // analyze the predicate - ctl.m_topand = true; - ctl.m_extra = false; - m_pred = static_cast<Plan_pred*>(m_pred->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_pred != 0); - // check for key match - Plan_table::Index* indexBest = 0; - for (unsigned i = 0; i <= m_table->indexCount(); i++) { - Plan_table::Index& index = m_table->m_indexList[i]; - TableSet tsDone; - m_table->resolveSet(ctx, index, tsDone); - if (! ctx.ok()) - return 0; - if (! index.m_keyFound) - continue; - // prefer smaller rank, less unused keys - int k; - (k = (indexBest == 0)) || - (k = (indexBest->m_rank - index.m_rank)) || - (k = (indexBest->m_keyCountUnused - index.m_keyCountUnused)); - if (k > 0) - indexBest = &index; - } - if (indexBest != 0) { - const bool exactKey = indexBest->m_rank <= 1 ? m_table->exactKey(ctx, indexBest) : false; - const bool direct = ! ctl.m_extra && exactKey; - ctx_log3(("delete direct=%d: extra=%d exact=%d", direct, ctl.m_extra, exactKey)); - if (indexBest->m_rank == 0) { - // primary key - Plan_delete_lookup* deleteLookup = new Plan_delete_lookup(m_root); - m_root->saveNode(deleteLookup); - deleteLookup->setTable(m_table); - if (direct) { - // key match with no extra conditions - Plan_query_repeat* queryRepeat = new Plan_query_repeat(m_root, 1); - m_root->saveNode(queryRepeat); - deleteLookup->setQuery(queryRepeat); - } else { - // key match with extra conditions - Plan_query_lookup* queryLookup = new Plan_query_lookup(m_root); - m_root->saveNode(queryLookup); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryLookup->setTable(m_table); - queryFilter->setQuery(queryLookup); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - deleteLookup->setQuery(queryFilter); - } - stmt = deleteLookup; - } else if (indexBest->m_rank == 1) { - // hash index - Plan_delete_index* deleteIndex = new Plan_delete_index(m_root); - m_root->saveNode(deleteIndex); - deleteIndex->setTable(m_table, indexBest); - if (direct) { - // key match with no extra conditions - Plan_query_repeat* queryRepeat = new Plan_query_repeat(m_root, 1); - m_root->saveNode(queryRepeat); - deleteIndex->setQuery(queryRepeat); - } else { - // key match with extra conditions - Plan_query_index* queryIndex = new Plan_query_index(m_root); - m_root->saveNode(queryIndex); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryIndex->setTable(m_table, indexBest); - queryFilter->setQuery(queryIndex); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - deleteIndex->setQuery(queryFilter); - } - stmt = deleteIndex; - } else if (indexBest->m_rank == 2) { - // ordered index - Plan_delete_scan* deleteScan = new Plan_delete_scan(m_root); - m_root->saveNode(deleteScan); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - Plan_query_range* queryRange = new Plan_query_range(m_root); - m_root->saveNode(queryRange); - queryRange->setTable(m_table, indexBest); - queryRange->setExclusive(); - queryFilter->setQuery(queryRange); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - const TableSet& ts2 = m_pred->noInterp(); - ctx_assert(ts2.size() <= 1); - if (ts2.size() == 0) { - queryRange->setInterp(m_pred); - } - deleteScan->setQuery(queryFilter); - stmt = deleteScan; - } else { - ctx_assert(false); - } - } else { - // scan delete with filter - Plan_delete_scan* deleteScan = new Plan_delete_scan(m_root); - m_root->saveNode(deleteScan); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - Plan_query_scan* queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(m_table); - queryScan->setExclusive(); - queryFilter->setQuery(queryScan); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - // interpeter - const TableSet& ts2 = m_pred->noInterp(); - ctx_assert(ts2.size() <= 1); - if (ts2.size() == 0) { - queryScan->setInterp(m_pred); - } - deleteScan->setQuery(queryFilter); - stmt = deleteScan; - } - } else { - // scan delete without filter - Plan_delete_scan* deleteScan = new Plan_delete_scan(m_root); - m_root->saveNode(deleteScan); - Plan_query_scan* queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(m_table); - queryScan->setExclusive(); - deleteScan->setQuery(queryScan); - stmt = deleteScan; - } - // set base for column position offsets - m_table->m_resOff = 1; - return stmt; -} - -void -Plan_delete::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DELETE WHERE", SQL_DIAG_DELETE_WHERE); -} - -Exec_base* -Plan_delete::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_delete::print(Ctx& ctx) -{ - ctx.print(" [delete"); - Plan_base* a[] = { m_table, m_pred }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.hpp deleted file mode 100644 index c7fa245497b2df4b0fb36f078786829137dc696b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_delete_hpp -#define ODBC_CODEGEN_Code_delete_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_table.hpp" -#include "Code_query.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_delete - * @brief Delete in PlanTree - */ -class Plan_delete : public Plan_dml { -public: - Plan_delete(Plan_root* root); - virtual ~Plan_delete(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); - void setPred(Plan_pred* pred); -protected: - Plan_table* m_table; - Plan_pred* m_pred; -}; - -inline -Plan_delete::Plan_delete(Plan_root* root) : - Plan_dml(root), - m_table(0), - m_pred(0) -{ -} - -inline void -Plan_delete::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_delete::setPred(Plan_pred* pred) -{ - ctx_assert(pred != 0); - m_pred = pred; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.cpp deleted file mode 100644 index 8f2c3be2848cb9c4f4de762581324f654a666792..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include "Code_expr.hpp" -#include "Code_delete_index.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -Plan_delete_index::~Plan_delete_index() -{ -} - -Plan_base* -Plan_delete_index::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_delete_index::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DELETE WHERE", SQL_DIAG_DELETE_WHERE); -} - -Exec_base* -Plan_delete_index::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0 && m_index != 0); - const BaseString& tableName = m_table->getName(); - ctx_assert(m_index->m_dictIndex != 0); - const DictIndex& dictIndex = *m_index->m_dictIndex; - const BaseString& indexName = dictIndex.getName(); - const unsigned keyCount = m_index->m_keyCount; - // create the code - Exec_delete_index::Code& code = *new Exec_delete_index::Code(keyCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_indexName = strcpy(new char[indexName.length() + 1], indexName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictIndex.getColumn(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = k - 1; // index column order - } - // matching expressions - ctx_assert(m_index->m_keyFound); - const ExprVector& keyEq = m_index->m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // create the exec - Exec_delete_index* exec = new Exec_delete_index(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_delete_index::print(Ctx& ctx) -{ - ctx.print(" [delete_index"); - Plan_base* a[] = { m_query, m_table }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_delete_index - -Exec_delete_index::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; -} - -Exec_delete_index::Data::~Data() -{ -} - -Exec_delete_index::~Exec_delete_index() -{ -} - -void -Exec_delete_index::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - // create data - Data& data = *new Data; - setData(data); -} - -void -Exec_delete_index::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_delete_index::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [delete_index"); - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - printList(ctx, (Exec_base**)&code.m_keyMatch[1], code.m_keyCount); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.hpp deleted file mode 100644 index 1aaaa18abcb9eda6a6b91ad793d4d0b647a51f65..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_index.hpp +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_delete_index_hpp -#define ODBC_CODEGEN_Code_delete_index_hpp - -#include <common/common.hpp> -#include "Code_dml.hpp" -#include "Code_query.hpp" -#include "Code_table.hpp" - -/** - * @class Plan_delete_index - * @brief Delete by primary key - */ -class Plan_delete_index : public Plan_dml { -public: - Plan_delete_index(Plan_root* root); - virtual ~Plan_delete_index(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setTable(Plan_table* table, Plan_table::Index* index); -protected: - Plan_query* m_query; - Plan_table* m_table; - Plan_table::Index* m_index; -}; - -inline -Plan_delete_index::Plan_delete_index(Plan_root* root) : - Plan_dml(root), - m_query(0), - m_table(0) -{ -} - -inline void -Plan_delete_index::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_delete_index::setTable(Plan_table* table, Plan_table::Index* index) -{ - ctx_assert(table != 0 && index != 0 && index == &table->m_indexList[index->m_pos] && index->m_pos != 0); - m_table = table; - m_index = index; -} - -/** - * @class Exec_delete_index - * @brief Delete by primary key - */ -class Exec_delete_index : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(unsigned keyCount); - virtual ~Code(); - protected: - friend class Plan_delete_index; - friend class Exec_delete_index; - const char* m_tableName; - const char* m_indexName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_delete_index; - }; - Exec_delete_index(Exec_root* root); - virtual ~Exec_delete_index(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_delete_index::Code::Code(unsigned keyCount) : - m_tableName(0), - m_indexName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_keyMatch(0) -{ -} - -inline -Exec_delete_index::Data::Data() -{ -} - -inline -Exec_delete_index::Exec_delete_index(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_delete_index::Code& -Exec_delete_index::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_delete_index::Data& -Exec_delete_index::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_delete_index::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.cpp deleted file mode 100644 index 4a6dec64654683943faa71220567667ad16725b1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include "Code_expr.hpp" -#include "Code_delete_lookup.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -Plan_delete_lookup::~Plan_delete_lookup() -{ -} - -Plan_base* -Plan_delete_lookup::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_delete_lookup::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DELETE WHERE", SQL_DIAG_DELETE_WHERE); -} - -Exec_base* -Plan_delete_lookup::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0); - const BaseString& tableName = m_table->getName(); - const DictTable& dictTable = m_table->dictTable(); - const unsigned keyCount = dictTable.keyCount(); - // create the code - Exec_delete_lookup::Code& code = *new Exec_delete_lookup::Code(keyCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictTable.getKey(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = keyColumn->getAttrId(); - } - // matching expressions - const Plan_table::Index& index = m_table->m_indexList[0]; - ctx_assert(index.m_keyFound); - const ExprVector& keyEq = index.m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // create the exec - Exec_delete_lookup* exec = new Exec_delete_lookup(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_delete_lookup::print(Ctx& ctx) -{ - ctx.print(" [delete_lookup"); - Plan_base* a[] = { m_query, m_table }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_delete_lookup - -Exec_delete_lookup::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; -} - -Exec_delete_lookup::Data::~Data() -{ -} - -Exec_delete_lookup::~Exec_delete_lookup() -{ -} - -void -Exec_delete_lookup::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - // create data - Data& data = *new Data; - setData(data); -} - -void -Exec_delete_lookup::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_delete_lookup::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [delete_lookup"); - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - printList(ctx, (Exec_base**)&code.m_keyMatch[1], code.m_keyCount); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.hpp deleted file mode 100644 index 4138baefa4cbff2ae2be87d7d93c65aa3e13e8d0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_lookup.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_delete_lookup_hpp -#define ODBC_CODEGEN_Code_delete_lookup_hpp - -#include <common/common.hpp> -#include "Code_dml.hpp" -#include "Code_query.hpp" -#include "Code_table.hpp" - -/** - * @class Plan_delete_lookup - * @brief Delete by primary key - */ -class Plan_delete_lookup : public Plan_dml { -public: - Plan_delete_lookup(Plan_root* root); - virtual ~Plan_delete_lookup(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setTable(Plan_table* table); -protected: - Plan_query* m_query; - Plan_table* m_table; -}; - -inline -Plan_delete_lookup::Plan_delete_lookup(Plan_root* root) : - Plan_dml(root), - m_query(0), - m_table(0) -{ -} - -inline void -Plan_delete_lookup::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_delete_lookup::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -/** - * @class Exec_delete_lookup - * @brief Delete by primary key - */ -class Exec_delete_lookup : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(unsigned keyCount); - virtual ~Code(); - protected: - friend class Plan_delete_lookup; - friend class Exec_delete_lookup; - char* m_tableName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_delete_lookup; - }; - Exec_delete_lookup(Exec_root* root); - virtual ~Exec_delete_lookup(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_delete_lookup::Code::Code(unsigned keyCount) : - m_tableName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_keyMatch(0) -{ -} - -inline -Exec_delete_lookup::Data::Data() -{ -} - -inline -Exec_delete_lookup::Exec_delete_lookup(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_delete_lookup::Code& -Exec_delete_lookup::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_delete_lookup::Data& -Exec_delete_lookup::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_delete_lookup::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.cpp deleted file mode 100644 index fed7244a02606bf95b2f6499cd848ec7cbffc1b1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_delete_scan.hpp" -#include "Code_root.hpp" - -Plan_delete_scan::~Plan_delete_scan() -{ -} - -Plan_base* -Plan_delete_scan::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_delete_scan::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DELETE WHERE", SQL_DIAG_DELETE_WHERE); -} - -Exec_base* -Plan_delete_scan::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create the code - Exec_delete_scan* exec = new Exec_delete_scan(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_delete_scan::Code& code = *new Exec_delete_scan::Code; - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_delete_scan::print(Ctx& ctx) -{ - ctx.print(" [delete_scan"); - Plan_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_delete_scan - -Exec_delete_scan::Code::~Code() -{ -} - -Exec_delete_scan::Data::~Data() -{ -} - -Exec_delete_scan::~Exec_delete_scan() -{ -} - -void -Exec_delete_scan::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // create data - Data& data = *new Data; - setData(data); -} - -void -Exec_delete_scan::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_delete_scan::print(Ctx& ctx) -{ - ctx.print(" [delete_scan"); - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} - diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.hpp deleted file mode 100644 index eb013a8257eac749f6f9a1c3fe8ae97f5fa214e9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_delete_scan.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_delete_scan_hpp -#define ODBC_CODEGEN_Code_delete_scan_hpp - -#include <common/common.hpp> -#include "Code_dml.hpp" -#include "Code_query.hpp" - -/** - * @class Plan_delete_scan - * @brief Scan delete - */ -class Plan_delete_scan : public Plan_dml { -public: - Plan_delete_scan(Plan_root* root); - virtual ~Plan_delete_scan(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); -protected: - Plan_query* m_query; -}; - -inline -Plan_delete_scan::Plan_delete_scan(Plan_root* root) : - Plan_dml(root), - m_query(0) -{ -} - -inline void -Plan_delete_scan::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -/** - * @class Exec_delete_scan - * @brief Scan delete - */ -class Exec_delete_scan : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(); - virtual ~Code(); - protected: - friend class Exec_delete_scan; - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_delete_scan; - }; - Exec_delete_scan(Exec_root* root); - virtual ~Exec_delete_scan(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_delete_scan::Code::Code() -{ -} - -inline -Exec_delete_scan::Data::Data() -{ -} - -inline -Exec_delete_scan::Exec_delete_scan(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_delete_scan::Code& -Exec_delete_scan::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_delete_scan::Data& -Exec_delete_scan::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_delete_scan::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.cpp deleted file mode 100644 index 44fd4478646eb56268565013b5db122ef0d50344..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_dml.hpp" - -// Plan_dml - -Plan_dml::~Plan_dml() -{ -} - -// Exec_dml - -Exec_dml::Code::~Code() -{ -} - -Exec_dml::Data::~Data() -{ -} - -Exec_dml::~Exec_dml() -{ -} - -void -Exec_dml::execute(Ctx& ctx, Ctl& ctl) -{ - execImpl(ctx, ctl); - if (m_topLevel) { - if (ctx.ok()) { - if (stmtArea().getRowCount() == 0) { - ctx.setCode(SQL_NO_DATA); - } - } - } -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.hpp deleted file mode 100644 index 0618f583984572dd2525a5a68912319bc4306fdf..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_dml_hpp -#define ODBC_CODEGEN_Code_dml_hpp - -#include <common/common.hpp> -#include <common/ResultArea.hpp> -#include "Code_stmt.hpp" - -/** - * @class Plan_dml - * @brief Base class for DML statements in PlanTree - */ -class Plan_dml : public Plan_stmt { -public: - Plan_dml(Plan_root* root); - virtual ~Plan_dml() = 0; -}; - -inline -Plan_dml::Plan_dml(Plan_root* root) : - Plan_stmt(root) -{ -} - -/** - * @class Exec_dml - * @brief Base class for DML statements in ExecTree - */ -class Exec_dml : public Exec_stmt { -public: - class Code : public Exec_stmt::Code { - public: - virtual ~Code() = 0; - }; - class Data : public Exec_stmt::Data, public ResultArea { - public: - virtual ~Data() = 0; - }; - Exec_dml(Exec_root* root); - virtual ~Exec_dml() = 0; - void execute(Ctx& ctx, Ctl& ctl); -protected: - virtual void execImpl(Ctx& ctx, Ctl& ctl) = 0; -}; - -inline -Exec_dml::Exec_dml(Exec_root* root) : - Exec_stmt(root) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.cpp deleted file mode 100644 index 808e2ac8c4ba3758f6f65be48fd6c1d948872d57..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include "Code_dml_column.hpp" - -// Plan_dml_column - -Plan_dml_column::~Plan_dml_column() -{ -} - -Plan_base* -Plan_dml_column::analyze(Ctx& ctx, Ctl& ctl) -{ - analyzeColumn(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_dml_column::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_dml_column::print(Ctx& ctx) -{ - ctx.print(" [dml_column %s]", getPrintName()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.hpp deleted file mode 100644 index 0fb33944a3a6f26486c5aac49cc8b7cca166d7a4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_column.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_dml_column_hpp -#define ODBC_CODEGEN_Code_dml_column_hpp - -#include <common/common.hpp> -#include "Code_column.hpp" - -class DictColumn; -class Plan_table; - -/** - * @class Plan_dml_column - * @brief Column in query expression - */ -class Plan_dml_column : public Plan_base, public Plan_column { -public: - Plan_dml_column(Plan_root* root, const BaseString& name); - virtual ~Plan_dml_column(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); -}; - -inline -Plan_dml_column::Plan_dml_column(Plan_root* root, const BaseString& name) : - Plan_base(root), - Plan_column(Type_dml, name) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.cpp deleted file mode 100644 index ceb63a9f7b98d62a2e6449320cf7a6cf2bbfc0be..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_dml_row.hpp" -#include "Code_dml_column.hpp" - -Plan_dml_row::~Plan_dml_row() -{ -} - -Plan_base* -Plan_dml_row::analyze(Ctx& ctx, Ctl& ctl) -{ - unsigned size = getSize(); - // analyze the columns - for (unsigned i = 1; i <= size; i++) { - Plan_dml_column* column = getColumn(i); - column->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // node was not replaced - return this; -} - -Exec_base* -Plan_dml_row::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_dml_row::print(Ctx& ctx) -{ - unsigned size = getSize(); - ctx.print(" [dml_row"); - for (unsigned i = 1; i <= size; i++) { - Plan_base* a = m_columnList[i]; - a == 0 ? ctx.print(" -") : a->print(ctx); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.hpp deleted file mode 100644 index 6c7e46ba9af442a10c200788e6eea0d47289ddb8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_dml_row.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_dml_row_hpp -#define ODBC_CODEGEN_Code_dml_row_hpp - -#include <vector> -#include <common/common.hpp> -#include <common/DataRow.hpp> -#include "Code_base.hpp" -#include "Code_dml_column.hpp" - -class Plan_dml_column; - -/** - * @class Plan_dml_row - * @brief Row of lvalue columns in insert or update - */ -class Plan_dml_row : public Plan_base { -public: - Plan_dml_row(Plan_root* root); - virtual ~Plan_dml_row(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - unsigned getSize() const; - void addColumn(Plan_dml_column* column); - Plan_dml_column* getColumn(unsigned i) const; -protected: - DmlColumnVector m_columnList; -}; - -inline -Plan_dml_row::Plan_dml_row(Plan_root* root) : - Plan_base(root), - m_columnList(1) -{ -} - -// children - -inline unsigned -Plan_dml_row::getSize() const -{ - return m_columnList.size() - 1; -} - -inline void -Plan_dml_row::addColumn(Plan_dml_column* column) -{ - ctx_assert(column != 0); - m_columnList.push_back(column); -} - -inline Plan_dml_column* -Plan_dml_row::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_columnList.size() && m_columnList[i] != 0); - return m_columnList[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.cpp deleted file mode 100644 index b6bae88e2708e67104c05566281bcbc8bff902e4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_drop_index.hpp" -#include "Code_root.hpp" - -// Plan_drop_index - -Plan_drop_index::~Plan_drop_index() -{ -} - -Plan_base* -Plan_drop_index::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_drop_index); - return this; -} - -void -Plan_drop_index::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DROP INDEX", SQL_DIAG_DROP_INDEX); -} - -Exec_base* -Plan_drop_index::codegen(Ctx& ctx, Ctl& ctl) -{ - Exec_drop_index* exec = new Exec_drop_index(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_drop_index::Code& code = *new Exec_drop_index::Code(m_name, m_tableName); - exec->setCode(code); - return exec; -} - -void -Plan_drop_index::print(Ctx& ctx) -{ - ctx.print(" [drop_index %s]", m_name.c_str()); -} - -// Exec_drop_index - -Exec_drop_index::Code::~Code() -{ -} - -Exec_drop_index::Data::~Data() -{ -} - -Exec_drop_index::~Exec_drop_index() -{ -} - -void -Exec_drop_index::alloc(Ctx& ctx, Ctl& ctl) -{ - Data& data = *new Data; - setData(data); -} - -void -Exec_drop_index::close(Ctx& ctx) -{ -} - -void -Exec_drop_index::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [drop_index %s]", code.m_indexName.c_str()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.hpp deleted file mode 100644 index 99891c9a52f96ff69790a0e08a6bf67c958116d5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_index.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_drop_index_hpp -#define ODBC_CODEGEN_Code_drop_index_hpp - -#include <vector> -#include <NdbApi.hpp> -#include <common/common.hpp> -#include "Code_ddl.hpp" - -class DictTable; -class DictColumn; - -/** - * @class Plan_drop_index - * @brief Drop index in PlanTree - */ -class Plan_drop_index : public Plan_ddl { -public: - Plan_drop_index(Plan_root* root, const BaseString& name); - Plan_drop_index(Plan_root* root, const BaseString& name, const BaseString& tableName); - virtual ~Plan_drop_index(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void describe(Ctx & ctx); - void print(Ctx& ctx); - // attributes - const BaseString& getName() const; -protected: - BaseString m_name; - BaseString m_tableName; -}; - -inline -Plan_drop_index::Plan_drop_index(Plan_root* root, const BaseString& name) : - Plan_ddl(root), - m_name(name) -{ -} - -inline -Plan_drop_index::Plan_drop_index(Plan_root* root, const BaseString& name, const BaseString& tableName) : - Plan_ddl(root), - m_name(name), - m_tableName(tableName) -{ -} - -inline const BaseString& -Plan_drop_index::getName() const -{ - return m_name; -} - -/** - * @class Exec_drop_index - * @brief Drop index in ExecTree - */ -class Exec_drop_index : public Exec_ddl { -public: - class Code : public Exec_ddl::Code { - public: - Code(const BaseString& indexName, const BaseString& tableName); - virtual ~Code(); - protected: - friend class Exec_drop_index; - const BaseString m_indexName; - const BaseString m_tableName; - }; - class Data : public Exec_ddl::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_drop_index; - }; - Exec_drop_index(Exec_root* root); - virtual ~Exec_drop_index(); - void alloc(Ctx& ctx, Ctl& ctl); - void execute(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_drop_index::Code::Code(const BaseString& indexName, const BaseString& tableName) : - m_indexName(indexName), - m_tableName(tableName) -{ -} - -inline -Exec_drop_index::Data::Data() -{ -} - -inline -Exec_drop_index::Exec_drop_index(Exec_root* root) : - Exec_ddl(root) -{ -} - -// children - -inline const Exec_drop_index::Code& -Exec_drop_index::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_drop_index::Data& -Exec_drop_index::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.cpp deleted file mode 100644 index f20bf9fdae026376079382c27bbf9bdd0bb380ef..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_drop_table.hpp" -#include "Code_root.hpp" - -// Plan_drop_table - -Plan_drop_table::~Plan_drop_table() -{ -} - -Plan_base* -Plan_drop_table::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_drop_table); - return this; -} - -void -Plan_drop_table::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "DROP TABLE", SQL_DIAG_DROP_TABLE); -} - -Exec_base* -Plan_drop_table::codegen(Ctx& ctx, Ctl& ctl) -{ - Exec_drop_table* exec = new Exec_drop_table(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_drop_table::Code& code = *new Exec_drop_table::Code(m_name); - exec->setCode(code); - return exec; -} - -void -Plan_drop_table::print(Ctx& ctx) -{ - ctx.print(" [drop_table %s]", m_name.c_str()); -} - -// Exec_drop_table - -Exec_drop_table::Code::~Code() -{ -} - -Exec_drop_table::Data::~Data() -{ -} - -Exec_drop_table::~Exec_drop_table() -{ -} - -void -Exec_drop_table::alloc(Ctx& ctx, Ctl& ctl) -{ - Data& data = *new Data; - setData(data); -} - -void -Exec_drop_table::close(Ctx& ctx) -{ -} - -void -Exec_drop_table::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [drop_table %s]", code.m_tableName.c_str()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.hpp deleted file mode 100644 index 849a472ed94d1ee71391b34c2aa9fc1b5ccc5ffc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_drop_table.hpp +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_drop_table_hpp -#define ODBC_CODEGEN_Code_drop_table_hpp - -#include <vector> -#include <NdbApi.hpp> -#include <common/common.hpp> -#include "Code_ddl.hpp" - -class DictTable; -class DictColumn; - -/** - * @class Plan_drop_table - * @brief Drop table in PlanTree - */ -class Plan_drop_table : public Plan_ddl { -public: - Plan_drop_table(Plan_root* root, const BaseString& name); - virtual ~Plan_drop_table(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void describe(Ctx & ctx); - void print(Ctx& ctx); - // attributes - const BaseString& getName() const; -protected: - BaseString m_name; -}; - -inline -Plan_drop_table::Plan_drop_table(Plan_root* root, const BaseString& name) : - Plan_ddl(root), - m_name(name) -{ -} - -inline const BaseString& -Plan_drop_table::getName() const -{ - return m_name; -} - -/** - * @class Exec_drop_table - * @brief Drop table in ExecTree - */ -class Exec_drop_table : public Exec_ddl { -public: - class Code : public Exec_ddl::Code { - public: - Code(const BaseString& tableName); - virtual ~Code(); - protected: - friend class Exec_drop_table; - const BaseString m_tableName; - }; - class Data : public Exec_ddl::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_drop_table; - }; - Exec_drop_table(Exec_root* root); - virtual ~Exec_drop_table(); - void alloc(Ctx& ctx, Ctl& ctl); - void execute(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_drop_table::Code::Code(const BaseString& tableName) : - m_tableName(tableName) -{ -} - -inline -Exec_drop_table::Data::Data() -{ -} - -inline -Exec_drop_table::Exec_drop_table(Exec_root* root) : - Exec_ddl(root) -{ -} - -// children - -inline const Exec_drop_table::Code& -Exec_drop_table::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_drop_table::Data& -Exec_drop_table::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.cpp deleted file mode 100644 index 4afa75986a0eb05d3a996cf72b6b5a7df8203b1a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr.hpp" -#include "Code_expr_row.hpp" - -// Plan_expr - -Plan_expr::~Plan_expr() -{ -} - -bool -Plan_expr::isEqual(const Plan_expr* expr) const -{ - return false; -} - -bool -Plan_expr::isAnyEqual(const Plan_expr_row* row) const -{ - ctx_assert(row != 0); - const unsigned size = row->getSize(); - for (unsigned i = 1; i <= size; i++) { - if (isEqual(row->getExpr(i))) - return true; - } - return false; -} - -bool -Plan_expr::isGroupBy(const Plan_expr_row* row) const -{ - return false; -} - -// Exec_expr - -Exec_expr::Code::~Code() -{ -} - -Exec_expr::Data::~Data() -{ -} - -Exec_expr::~Exec_expr() -{ -} - -SqlField& -Exec_expr::Data::groupField(const SqlType& sqlType, unsigned i, bool initFlag) -{ - if (m_groupField.size() == 0) { - m_groupField.resize(1); - } - if (initFlag) { - //unsigned i2 = m_groupField.size(); - //ctx_assert(i == i2); - const SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - const SqlField sqlField(sqlSpec); - m_groupField.push_back(sqlField); - } - ctx_assert(i != 0 && i < m_groupField.size()); - return m_groupField[i]; -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.hpp deleted file mode 100644 index b6f07471b4d2c359e3cc6c58cf23969a27ce0724..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr.hpp +++ /dev/null @@ -1,219 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_hpp -#define ODBC_CODEGEN_Code_expr_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_base.hpp" - -class Ctx; -class Plan_expr_row; -class Exec_expr; - -/** - * @class Plan_expr - * @brief Base class for expressions in PlanTree - */ -class Plan_expr : public Plan_base { -public: - // type is convenient since RTTI cannot be used - enum Type { - TypeUndefined = 0, - TypeColumn, - TypeConst, - TypeConv, - TypeFunc, - TypeOp, - TypeParam, - TypeValue - }; - Plan_expr(Plan_root* root, Type type); - virtual ~Plan_expr() = 0; - Type type() const; - const SqlType& sqlType() const; // data type set by analyze - const TableSet& tableSet() const; - const BaseString& getAlias() const; - bool isAggr() const; - bool isBound() const; - bool isAnyEqual(const Plan_expr_row* row) const; - virtual bool isEqual(const Plan_expr* expr) const; - virtual bool isGroupBy(const Plan_expr_row* row) const; -protected: - friend class Plan_expr_row; - friend class Plan_expr_op; - friend class Plan_expr_func; - friend class Plan_comp_op; - const Type m_type; - SqlType m_sqlType; // subclass must set - BaseString m_alias; // for row expression alias - TableSet m_tableSet; // depends on these tables - bool m_isAggr; // contains an aggregate expression - bool m_isBound; // only constants and aggregates - Exec_expr* m_exec; // XXX wrong move -}; - -inline -Plan_expr::Plan_expr(Plan_root* root, Type type) : - Plan_base(root), - m_type(type), - m_isAggr(false), - m_isBound(false), - m_exec(0) -{ -} - -inline Plan_expr::Type -Plan_expr::type() const -{ - return m_type; -} - -inline const SqlType& -Plan_expr::sqlType() const -{ - ctx_assert(m_sqlType.type() != SqlType::Undef); - return m_sqlType; -} - -inline const Plan_base::TableSet& -Plan_expr::tableSet() const -{ - return m_tableSet; -} - -inline const BaseString& -Plan_expr::getAlias() const -{ - return m_alias; -} - -inline bool -Plan_expr::isAggr() const -{ - return m_isAggr; -} - -inline bool -Plan_expr::isBound() const -{ - return m_isBound; -} - -/** - * @class Exec_expr - * @brief Base class for expressions in ExecTree - */ -class Exec_expr : public Exec_base { -public: - /** - * Exec_expr::Code includes reference to SqlSpec which - * specifies data type and access method. - */ - class Code : public Exec_base::Code { - public: - Code(const SqlSpec& sqlSpec); - virtual ~Code() = 0; - const SqlSpec& sqlSpec() const; - protected: - friend class Exec_expr; - const SqlSpec& m_sqlSpec; // subclass must contain - }; - /** - * Exec_expr::Data includes reference to SqlField which - * contains specification and data address. - */ - class Data : public Exec_base::Data { - public: - Data(const SqlField& sqlField); - virtual ~Data() = 0; - const SqlField& sqlField() const; - const SqlField& groupField(unsigned i) const; - protected: - friend class Exec_expr; - const SqlField& m_sqlField; // subclass must contain - // group-by data - typedef std::vector<SqlField> GroupField; - GroupField m_groupField; - SqlField& groupField(const SqlType& sqlType, unsigned i, bool initFlag); - }; - Exec_expr(Exec_root* root); - virtual ~Exec_expr() = 0; - /** - * Evaluate the expression. Must be implemented by all - * subclasses. Check ctx.ok() for errors. - */ - virtual void evaluate(Ctx& ctx, Ctl& ctl) = 0; - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_expr::Code::Code(const SqlSpec& sqlSpec) : - m_sqlSpec(sqlSpec) -{ -} - -inline const SqlSpec& -Exec_expr::Code::sqlSpec() const { - return m_sqlSpec; -} - -inline -Exec_expr::Data::Data(const SqlField& sqlField) : - m_sqlField(sqlField) -{ -} - -inline const SqlField& -Exec_expr::Data::sqlField() const -{ - return m_sqlField; -} - -inline const SqlField& -Exec_expr::Data::groupField(unsigned i) const -{ - ctx_assert(i != 0 && i < m_groupField.size()); - return m_groupField[i]; -} - -inline -Exec_expr::Exec_expr(Exec_root* root) : - Exec_base(root) -{ -} - -// children - -inline const Exec_expr::Code& -Exec_expr::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr::Data& -Exec_expr::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.cpp deleted file mode 100644 index 17a9a502d4cb0f33b5d023028396400e296f9f5b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <dictionary/DictSchema.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" -#include "Code_expr_column.hpp" -#include "Code_root.hpp" - -// Plan_expr_column - -Plan_expr_column::~Plan_expr_column() -{ -} - -Plan_base* -Plan_expr_column::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - analyzeColumn(ctx, ctl); - if (! ctx.ok()) - return 0; - Plan_expr::m_sqlType = Plan_column::m_sqlType; - // depends on one table - m_tableSet.insert(m_resTable); - // not constant as set-value - ctl.m_const = false; - // set alias name - m_alias = m_name; - return this; -} - -Exec_base* -Plan_expr_column::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - // connect column to query column - const Exec_query* execQuery = ctl.m_execQuery; - ctx_assert(execQuery != 0); - const Exec_query::Code& codeQuery = execQuery->getCode(); - const SqlSpec sqlSpec(Plan_expr::m_sqlType, SqlSpec::Reference); - // offset in final output row - ctx_assert(m_resTable != 0 && m_resTable->m_resOff != 0 && m_resPos != 0); - unsigned resOff = m_resTable->m_resOff + (m_resPos - 1); - // create the code - Exec_expr_column* exec = new Exec_expr_column(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_expr_column::Code& code = *new Exec_expr_column::Code(sqlSpec, resOff); - exec->setCode(code); - m_exec = exec; - return exec; -} - -bool -Plan_expr_column::resolveEq(Ctx& ctx, Plan_expr* expr) -{ - ctx_assert(m_resTable != 0 && expr != 0); - return m_resTable->resolveEq(ctx, this, expr); -} - -void -Plan_expr_column::print(Ctx& ctx) -{ - ctx.print(" [expr_column %s]", getPrintName()); -} - -bool -Plan_expr_column::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeColumn) - return false; - const Plan_expr_column* expr2 = static_cast<const Plan_expr_column*>(expr); - ctx_assert(m_resTable != 0 && expr2->m_resTable != 0); - if (m_resTable != expr2->m_resTable) - return false; - ctx_assert(m_dictColumn != 0 && expr2->m_dictColumn != 0); - if (m_dictColumn != expr2->m_dictColumn) - return false; - return true; -} - -bool -Plan_expr_column::isGroupBy(const Plan_expr_row* row) const -{ - if (isAnyEqual(row)) - return true; - return false; -} - -// Exec_expr_column - -Exec_expr_column::Code::~Code() -{ -} - -Exec_expr_column::Data::~Data() -{ -} - -Exec_expr_column::~Exec_expr_column() -{ -} - -void -Exec_expr_column::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - const Code& code = getCode(); - // connect column to query column - ctx_assert(ctl.m_query != 0); - const SqlRow& sqlRow = ctl.m_query->getData().sqlRow(); - SqlField& sqlField = sqlRow.getEntry(code.m_resOff); - // create the data - Data& data = *new Data(sqlField); - setData(data); -} - -void -Exec_expr_column::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - if (ctl.m_groupIndex != 0) { - SqlField& out = data.groupField(code.sqlSpec().sqlType(), ctl.m_groupIndex, ctl.m_groupInit); - data.sqlField().copy(ctx, out); - } -} - -void -Exec_expr_column::close(Ctx& ctx) -{ - Data& data = getData(); - data.m_groupField.clear(); -} - -void -Exec_expr_column::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [column %d]", code.m_resOff); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.hpp deleted file mode 100644 index 2ce7c441e45a03196941c888635fe4bad3ad7dc4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_column.hpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_column_hpp -#define ODBC_CODEGEN_Code_expr_column_hpp - -#include <common/common.hpp> -#include "Code_column.hpp" -#include "Code_expr.hpp" - -class DictColumn; -class Plan_table; - -/** - * @class Plan_expr_column - * @brief Column in query expression - */ -class Plan_expr_column : public Plan_expr, public Plan_column { -public: - Plan_expr_column(Plan_root* root, const BaseString& name); - virtual ~Plan_expr_column(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - bool resolveEq(Ctx& ctx, Plan_expr* expr); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; -}; - -inline -Plan_expr_column::Plan_expr_column(Plan_root* root, const BaseString& name) : - Plan_expr(root, TypeColumn), - Plan_column(Type_expr, name) -{ -} - -/** - * @class Exec_expr_column - * @brief Column in query expression - */ -class Exec_expr_column : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(const SqlSpec& sqlSpec, unsigned resOff); - virtual ~Code(); - protected: - friend class Exec_expr_column; - SqlSpec m_sqlSpec; - unsigned m_resOff; - }; - class Data : public Exec_expr::Data { - public: - Data(SqlField& sqlField); - virtual ~Data(); - protected: - friend class Exec_expr_column; - // set reference to SqlField in query - }; - Exec_expr_column(Exec_root* root); - virtual ~Exec_expr_column(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_expr_column::Code::Code(const SqlSpec& sqlSpec, unsigned resOff) : - Exec_expr::Code(m_sqlSpec), - m_sqlSpec(sqlSpec), - m_resOff(resOff) -{ -} - -inline -Exec_expr_column::Data::Data(SqlField& sqlField) : - Exec_expr::Data(sqlField) -{ -} - -inline -Exec_expr_column::Exec_expr_column(Exec_root* root) : - Exec_expr(root) -{ -} - -// children - -inline const Exec_expr_column::Code& -Exec_expr_column::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_column::Data& -Exec_expr_column::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.cpp deleted file mode 100644 index 564d307a4f84e0462dda7445fbff2a6b9f1ea1f1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr_const.hpp" -#include "Code_root.hpp" - -// Plan_expr_const - -Plan_expr_const::~Plan_expr_const() -{ -} - -Plan_base* -Plan_expr_const::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - // convert data type - m_lexType.convert(ctx, m_sqlType, m_string.length()); - if (! ctx.ok()) - return 0; - // depends on no tables - // set alias name - m_alias = m_string; - // node was not changed - return this; -} - -Exec_base* -Plan_expr_const::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - // convert data - SqlSpec sqlSpec(m_sqlType, SqlSpec::Physical); - SqlField sqlField(sqlSpec); - LexSpec lexSpec(m_lexType); - lexSpec.convert(ctx, m_string, sqlField); - if (! ctx.ok()) - return 0; - // create code - Exec_expr_const* exec = new Exec_expr_const(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_expr_const::Code& code = *new Exec_expr_const::Code(sqlField); - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_expr_const::print(Ctx& ctx) -{ - ctx.print(" [const %s]", m_string.c_str()); -} - -bool -Plan_expr_const::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeConst) - return false; - const Plan_expr_const* expr2 = static_cast<const Plan_expr_const*>(expr); - if (strcmp(m_string.c_str(), expr2->m_string.c_str()) != 0) - return false; - return true; -} - -bool -Plan_expr_const::isGroupBy(const Plan_expr_row* row) const -{ - return true; -} - -// Exec_expr_const - -Exec_expr_const::Code::~Code() -{ -} - -Exec_expr_const::Data::~Data() -{ -} - -Exec_expr_const::~Exec_expr_const() -{ -} - -void -Exec_expr_const::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - // copy the value for const correctness reasons - SqlField sqlField(getCode().m_sqlField); - Data& data = *new Data(sqlField); - setData(data); -} - -void -Exec_expr_const::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - if (ctl.m_groupIndex != 0) { - SqlField& out = data.groupField(code.sqlSpec().sqlType(), ctl.m_groupIndex, ctl.m_groupInit); - data.sqlField().copy(ctx, out); - } -} - -void -Exec_expr_const::close(Ctx& ctx) -{ - Data& data = getData(); - data.m_groupField.clear(); -} - -void -Exec_expr_const::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" ["); - char buf[500]; - code.m_sqlField.print(buf, sizeof(buf)); - ctx.print("%s", buf); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.hpp deleted file mode 100644 index 2e26c637a230b337b4d420e3664ae226fcb76208..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_const.hpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_const_hpp -#define ODBC_CODEGEN_Code_expr_const_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_expr.hpp" - -/** - * @class Plan_expr_const - * @brief Constant expression value in PlanTree - */ -class Plan_expr_const : public Plan_expr { -public: - Plan_expr_const(Plan_root* root, LexType lexType, const char* value); - virtual ~Plan_expr_const(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; -protected: - // lexical type and token set by the parser - LexType m_lexType; - BaseString m_string; -}; - -inline -Plan_expr_const::Plan_expr_const(Plan_root* root, LexType lexType, const char* value) : - Plan_expr(root, TypeConst), - m_lexType(lexType), - m_string(value) -{ -} - -/** - * @class Exec_expr_const - * @brief Constant expression value in ExecTree - */ -class Exec_expr_const : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(const SqlField& sqlField); - virtual ~Code(); - protected: - friend class Exec_expr_const; - const SqlField m_sqlField; - }; - class Data : public Exec_expr::Data { - public: - Data(SqlField& sqlField); - virtual ~Data(); - protected: - friend class Exec_expr_const; - SqlField m_sqlField; - }; - Exec_expr_const(Exec_root* root); - virtual ~Exec_expr_const(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_expr_const::Code::Code(const SqlField& sqlField) : - Exec_expr::Code(m_sqlField.sqlSpec()), - m_sqlField(sqlField) -{ -} - -inline -Exec_expr_const::Data::Data(SqlField& sqlField) : - Exec_expr::Data(m_sqlField), - m_sqlField(sqlField) -{ -} - -inline -Exec_expr_const::Exec_expr_const(Exec_root* root) : - Exec_expr(root) -{ -} - -// children - -inline const Exec_expr_const::Code& -Exec_expr_const::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_const::Data& -Exec_expr_const::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.cpp deleted file mode 100644 index bc89482fedcea94bb8fae02dfb315c71b6a08f3e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr.hpp" -#include "Code_expr_conv.hpp" -#include "Code_root.hpp" - -// Plan_expr_conv - -Plan_expr_conv::~Plan_expr_conv() -{ -} - -Plan_base* -Plan_expr_conv::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - const SqlType& t1 = sqlType(); - ctx_assert(m_expr != 0); - m_expr->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - const SqlType& t2 = m_expr->sqlType(); - if (t2.type() == SqlType::Unbound) { - return m_expr; - } - if (t1.equal(t2)) { - return m_expr; - } - // XXX move to runtime or make table-driven - bool ok = false; - if (t2.type() == SqlType::Null) { - ok = true; - } else if (t1.type() == SqlType::Char) { - if (t2.type() == SqlType::Char) { - ok = true; - } else if (t2.type() == SqlType::Varchar) { - ok = true; - } else if (t2.type() == SqlType::Binary) { - ok = true; - } else if (t2.type() == SqlType::Varbinary) { - ok = true; - } - } else if (t1.type() == SqlType::Varchar) { - if (t2.type() == SqlType::Char) { - ok = true; - } else if (t2.type() == SqlType::Varchar) { - ok = true; - } else if (t2.type() == SqlType::Binary) { - ok = true; - } else if (t2.type() == SqlType::Varbinary) { - ok = true; - } - } else if (t1.type() == SqlType::Binary) { - if (t2.type() == SqlType::Char) { - ok = true; - } else if (t2.type() == SqlType::Varchar) { - ok = true; - } else if (t2.type() == SqlType::Binary) { - ok = true; - } else if (t2.type() == SqlType::Varbinary) { - ok = true; - } - } else if (t1.type() == SqlType::Varbinary) { - if (t2.type() == SqlType::Char) { - ok = true; - } else if (t2.type() == SqlType::Varchar) { - ok = true; - } else if (t2.type() == SqlType::Binary) { - ok = true; - } else if (t2.type() == SqlType::Varbinary) { - ok = true; - } - } else if (t1.type() == SqlType::Smallint) { - if (t2.type() == SqlType::Smallint) { - ok = true; - } else if (t2.type() == SqlType::Integer) { - ok = true; - } else if (t2.type() == SqlType::Bigint) { - ok = true; - } else if (t2.type() == SqlType::Real) { - ok = true; - } else if (t2.type() == SqlType::Double) { - ok = true; - } - } else if (t1.type() == SqlType::Integer) { - if (t2.type() == SqlType::Smallint) { - ok = true; - } else if (t2.type() == SqlType::Integer) { - ok = true; - } else if (t2.type() == SqlType::Bigint) { - ok = true; - } else if (t2.type() == SqlType::Real) { - ok = true; - } else if (t2.type() == SqlType::Double) { - ok = true; - } - } else if (t1.type() == SqlType::Bigint) { - if (t2.type() == SqlType::Smallint) { - ok = true; - } else if (t2.type() == SqlType::Integer) { - ok = true; - } else if (t2.type() == SqlType::Bigint) { - ok = true; - } else if (t2.type() == SqlType::Real) { - ok = true; - } else if (t2.type() == SqlType::Double) { - ok = true; - } - } else if (t1.type() == SqlType::Real) { - if (t2.type() == SqlType::Smallint) { - ok = true; - } else if (t2.type() == SqlType::Integer) { - ok = true; - } else if (t2.type() == SqlType::Bigint) { - ok = true; - } else if (t2.type() == SqlType::Real) { - ok = true; - } else if (t2.type() == SqlType::Double) { - ok = true; - } - } else if (t1.type() == SqlType::Double) { - if (t2.type() == SqlType::Smallint) { - ok = true; - } else if (t2.type() == SqlType::Integer) { - ok = true; - } else if (t2.type() == SqlType::Bigint) { - ok = true; - } else if (t2.type() == SqlType::Real) { - ok = true; - } else if (t2.type() == SqlType::Double) { - ok = true; - } - } else if (t1.type() == SqlType::Datetime) { - if (t2.type() == SqlType::Datetime) { - ok = true; - } - } - if (! ok) { - char b1[40], b2[40]; - t1.print(b1, sizeof(b1)); - t2.print(b2, sizeof(b2)); - ctx.pushStatus(Error::Gen, "cannot convert %s to %s", b2, b1); - return 0; - } - // depend on same tables - const TableSet& ts = m_expr->tableSet(); - m_tableSet.insert(ts.begin(), ts.end()); - // set alias - m_alias = m_expr->getAlias(); - return this; -} - -Exec_base* -Plan_expr_conv::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - Exec_expr_conv* exec = new Exec_expr_conv(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // create code for subexpression - ctx_assert(m_expr != 0); - Exec_expr* execExpr = static_cast<Exec_expr*>(m_expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - exec->setExpr(execExpr); - // create the code - SqlSpec sqlSpec(sqlType(), SqlSpec::Physical); - Exec_expr_conv::Code& code = *new Exec_expr_conv::Code(sqlSpec); - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_expr_conv::print(Ctx& ctx) -{ - ctx.print(" [expr_conv "); - char buf[100]; - m_sqlType.print(buf, sizeof(buf)); - ctx.print("%s", buf); - Plan_base* a[] = { m_expr }; - printList(ctx, a, 1); - ctx.print("]"); -} - -bool -Plan_expr_conv::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeConv) - return false; - const Plan_expr_conv* expr2 = static_cast<const Plan_expr_conv*>(expr); - if (! m_sqlType.equal(expr2->m_sqlType)) - return false; - ctx_assert(m_expr != 0 && expr2->m_expr != 0); - if (! m_expr->isEqual(expr2->m_expr)) - return false; - return true; -} - -bool -Plan_expr_conv::isGroupBy(const Plan_expr_row* row) const -{ - if (isAnyEqual(row)) - return true; - ctx_assert(m_expr != 0); - if (m_expr->isGroupBy(row)) - return true; - return false; -} - -// Code_expr_conv - -Exec_expr_conv::Code::~Code() -{ -} - -Exec_expr_conv::Data::~Data() -{ -} - -Exec_expr_conv::~Exec_expr_conv() -{ -} - -void -Exec_expr_conv::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - const Code& code = getCode(); - // allocate subexpression - ctx_assert(m_expr != 0); - m_expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - SqlField sqlField(code.m_sqlSpec); - Data& data = *new Data(sqlField); - setData(data); -} - -void -Exec_expr_conv::close(Ctx& ctx) -{ - ctx_assert(m_expr != 0); - m_expr->close(ctx); - Data& data = getData(); - data.m_groupField.clear(); -} - -void -Exec_expr_conv::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [expr_conv"); - Exec_base* a[] = { m_expr }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.hpp deleted file mode 100644 index 3294960c7b34dacd435a75664a4e05ea17edbf96..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_conv.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_conv_hpp -#define ODBC_CODEGEN_Code_expr_conv_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_expr.hpp" - -/** - * @class Plan_expr_conv - * @brief Data type conversion in PlanTree - * - * Inserted to convert value to another compatible type. - */ -class Plan_expr_conv : public Plan_expr { -public: - Plan_expr_conv(Plan_root* root, const SqlType& sqlType); - virtual ~Plan_expr_conv(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; - // children - void setExpr(Plan_expr* expr); -protected: - Plan_expr* m_expr; -}; - -inline -Plan_expr_conv::Plan_expr_conv(Plan_root* root, const SqlType& sqlType) : - Plan_expr(root, TypeConv), - m_expr(0) -{ - ctx_assert(sqlType.type() != SqlType::Undef); - m_sqlType = sqlType; -} - -inline void -Plan_expr_conv::setExpr(Plan_expr* expr) -{ - ctx_assert(expr != 0); - m_expr = expr; -} - -/** - * @class Exec_expr_conv - * @brief Data type conversion in ExecTree - */ -class Exec_expr_conv : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(const SqlSpec& spec); - virtual ~Code(); - protected: - friend class Exec_expr_conv; - const SqlSpec m_sqlSpec; - }; - class Data : public Exec_expr::Data { - public: - Data(const SqlField& sqlField); - virtual ~Data(); - protected: - friend class Exec_expr_conv; - SqlField m_sqlField; - }; - Exec_expr_conv(Exec_root* root); - virtual ~Exec_expr_conv(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setExpr(Exec_expr* expr); -protected: - Exec_expr* m_expr; -}; - -inline -Exec_expr_conv::Code::Code(const SqlSpec& sqlSpec) : - Exec_expr::Code(m_sqlSpec), - m_sqlSpec(sqlSpec) -{ -} - -inline -Exec_expr_conv::Data::Data(const SqlField& sqlField) : - Exec_expr::Data(m_sqlField), - m_sqlField(sqlField) -{ -} - -inline -Exec_expr_conv::Exec_expr_conv(Exec_root* root) : - Exec_expr(root), - m_expr(0) -{ -} - -// children - -inline const Exec_expr_conv::Code& -Exec_expr_conv::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_conv::Data& -Exec_expr_conv::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_expr_conv::setExpr(Exec_expr* expr) -{ - ctx_assert(m_expr == 0 && expr != 0); - m_expr = expr; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.cpp deleted file mode 100644 index 96b461a72d9ae81f91b49f72b4aaefe4cca377a7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.cpp +++ /dev/null @@ -1,401 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr.hpp" -#include "Code_expr_func.hpp" -#include "Code_expr_conv.hpp" -#include "Code_root.hpp" -#include "PortDefs.h" - - -// Expr_func - -static const struct { const char* alias; const char* name; } -expr_func_alias[] = { - { "SUBSTRING", "SUBSTR" }, - { 0, 0 } -}; - -static const Expr_func -expr_func[] = { - Expr_func(Expr_func::Substr, "SUBSTR", false ), - Expr_func(Expr_func::Left, "LEFT", false ), - Expr_func(Expr_func::Right, "RIGHT", false ), - Expr_func(Expr_func::Count, "COUNT", true ), - Expr_func(Expr_func::Max, "MAX", true ), - Expr_func(Expr_func::Min, "MIN", true ), - Expr_func(Expr_func::Sum, "SUM", true ), - Expr_func(Expr_func::Avg, "AVG", true ), - Expr_func(Expr_func::Rownum, "ROWNUM", false ), - Expr_func(Expr_func::Sysdate, "SYSDATE", false ), - Expr_func(Expr_func::Undef, 0, false ) -}; - -const Expr_func& -Expr_func::find(const char* name) -{ - for (unsigned i = 0; expr_func_alias[i].alias != 0; i++) { - if (strcasecmp(expr_func_alias[i].alias, name) == 0) { - name = expr_func_alias[i].name; - break; - } - } - const Expr_func* p; - for (p = expr_func; p->m_name != 0; p++) { - if (strcasecmp(p->m_name, name) == 0) - break; - } - return *p; -} - -// Plan_expr_func - -Plan_expr_func::~Plan_expr_func() -{ - delete[] m_conv; - m_conv = 0; -} - -Plan_base* -Plan_expr_func::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - ctx_assert(m_narg == 0 || m_args != 0); - // aggregate check - if (m_func.m_aggr) { - if (! ctl.m_aggrok) { - ctx.pushStatus(Error::Gen, "%s: invalid use of aggregate function", m_func.m_name); - return 0; - } - if (ctl.m_aggrin) { - // XXX actually possible with group-by but too hard - ctx.pushStatus(Error::Gen, "%s: nested aggregate function", m_func.m_name); - return 0; - } - ctl.m_aggrin = true; - m_isAggr = true; - m_isBound = true; - } - // analyze argument expressions - if (m_func.m_code != Expr_func::Rownum) - m_isBound = true; - for (unsigned i = 1; i <= m_narg; i++) { - Plan_expr* expr = m_args->getExpr(i); - expr = static_cast<Plan_expr*>(expr->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(expr != 0); - if (expr->m_isAggr) - m_isAggr = true; - if (! m_func.m_aggr && ! expr->m_isBound) - m_isBound = false; - } - if (m_func.m_aggr) - ctl.m_aggrin = false; - // find result type and conversion types - SqlType res; - const Expr_func::Code fc = m_func.m_code; - const char* const invalidArgCount = "%s: argument count %u is invalid"; - const char* const invalidArgType = "%s: argument %u has invalid type"; - if (fc == Expr_func::Substr || fc == Expr_func::Left || fc == Expr_func::Right) { - if ((m_narg != (unsigned)2) && (m_narg != (unsigned)(fc == Expr_func::Substr ? 3 : 2))) { - ctx.pushStatus(Error::Gen, invalidArgCount, m_func.m_name, m_narg); - return 0; - } - const SqlType& t1 = m_args->getExpr(1)->sqlType(); - switch (t1.type()) { - case SqlType::Char: - { - // XXX convert to varchar for now to get length right - SqlType tx(SqlType::Varchar, t1.length()); - res = m_conv[1] = tx; - } - break; - case SqlType::Varchar: - case SqlType::Unbound: - res = m_conv[1] = t1; - break; - default: - ctx.pushStatus(Error::Gen, invalidArgType, m_func.m_name, 1); - return 0; - } - for (unsigned i = 2; i <= m_narg; i++) { - const SqlType& t2 = m_args->getExpr(i)->sqlType(); - switch (t2.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Unbound: - m_conv[i] = t2; - break; - default: - ctx.pushStatus(Error::Gen, invalidArgType, m_func.m_name, i); - return 0; - } - } - } else if (fc == Expr_func::Count) { - ctx_assert(m_args != 0); - if (m_args->getAsterisk()) { - ctx_assert(m_narg == 0); - } else { - if (m_narg != 1) { - ctx.pushStatus(Error::Gen, invalidArgCount, m_func.m_name, m_narg); - return 0; - } - m_conv[1] = m_args->getExpr(1)->sqlType(); - } - res.setType(ctx, SqlType::Bigint); - } else if (fc == Expr_func::Min || fc == Expr_func::Max) { - if (m_narg != 1) { - ctx.pushStatus(Error::Gen, invalidArgCount, m_func.m_name, m_narg); - return 0; - } - const SqlType& t1 = m_args->getExpr(1)->sqlType(); - res = m_conv[1] = t1; - } else if (fc == Expr_func::Sum) { - if (m_narg != 1) { - ctx.pushStatus(Error::Gen, invalidArgCount, m_func.m_name, m_narg); - return 0; - } - const SqlType& t1 = m_args->getExpr(1)->sqlType(); - switch (t1.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - res.setType(ctx, SqlType::Bigint); - m_conv[1] = res; - break; - case SqlType::Real: - case SqlType::Double: - res.setType(ctx, SqlType::Double); - m_conv[1] = res; - break; - case SqlType::Unbound: - res = m_conv[1] = t1; - break; - default: - ctx.pushStatus(Error::Gen, invalidArgType, m_func.m_name, 1); - return 0; - } - } else if (fc == Expr_func::Avg) { - if (m_narg != 1) { - ctx.pushStatus(Error::Gen, invalidArgCount, m_func.m_name, m_narg); - return 0; - } - const SqlType& t1 = m_args->getExpr(1)->sqlType(); - switch (t1.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Real: - case SqlType::Double: - res.setType(ctx, SqlType::Double); - m_conv[1] = res; - break; - case SqlType::Unbound: - res = m_conv[1] = t1; - break; - default: - ctx.pushStatus(Error::Gen, invalidArgType, m_func.m_name, 1); - return 0; - } - } else if (fc == Expr_func::Rownum) { - ctx_assert(m_narg == 0 && m_args == 0); - res.setType(ctx, SqlType::Bigint); - } else if (fc == Expr_func::Sysdate) { - ctx_assert(m_narg == 0 && m_args == 0); - res.setType(ctx, SqlType::Datetime); - } else { - ctx_assert(false); - } - // insert required conversions - for (unsigned i = 1; i <= m_narg; i++) { - if (m_conv[i].type() == SqlType::Unbound) { - // parameter type not yet bound - continue; - } - Plan_expr_conv* exprConv = new Plan_expr_conv(m_root, m_conv[i]); - m_root->saveNode(exprConv); - exprConv->setExpr(m_args->getExpr(i)); - Plan_expr* expr = static_cast<Plan_expr*>(exprConv->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - m_args->setExpr(i, expr); - } - // set result type - m_sqlType = res; - // set table dependencies - for (unsigned i = 1; i <= m_narg; i++) { - const TableSet& ts = m_args->getExpr(i)->tableSet(); - m_tableSet.insert(ts.begin(), ts.end()); - } - // set alias name - m_alias.assign(m_func.m_name); - if (m_narg == 0) { - if (fc == Expr_func::Count) - m_alias.append("(*)"); - } else { - m_alias.append("("); - for (unsigned i = 1; i <= m_narg; i++) { - if (i > 1) - m_alias.append(","); - m_alias.append(m_args->getExpr(i)->getAlias()); - } - m_alias.append(")"); - } - return this; -} - -Exec_base* -Plan_expr_func::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - Exec_expr_func* exec = new Exec_expr_func(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - SqlSpec sqlSpec(sqlType(), SqlSpec::Physical); - Exec_expr_func::Code& code = *new Exec_expr_func::Code(m_func, sqlSpec); - exec->setCode(code); - code.m_narg = m_narg; - code.m_args = new Exec_expr* [1 + m_narg]; - for (unsigned i = 0; i <= m_narg; i++) - code.m_args[i] = 0; - // create code for arguments - for (unsigned i = 1; i <= m_narg; i++) { - Plan_expr* expr = m_args->getExpr(i); - ctx_assert(expr != 0); - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_args[i] = execExpr; - } - m_exec = exec; - return exec; -} - -void -Plan_expr_func::print(Ctx& ctx) -{ - ctx.print(" [%s", m_func.m_name); - Plan_base* a[] = { m_args }; - printList(ctx, a, sizeof(a)/sizeof(a[1])); - ctx.print("]"); -} - -bool -Plan_expr_func::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeFunc) - return false; - const Plan_expr_func* expr2 = static_cast<const Plan_expr_func*>(expr); - if (m_func.m_code != expr2->m_func.m_code) - return false; - if (m_narg != expr2->m_narg) - return false; - ctx_assert(m_args != 0 && expr2->m_args != 0); - for (unsigned i = 1; i <= m_narg; i++) { - if (! m_args->getExpr(i)->isEqual(expr2->m_args->getExpr(i))) - return false; - } - return true; -} - -bool -Plan_expr_func::isGroupBy(const Plan_expr_row* row) const -{ - if (m_func.m_aggr) - return true; - switch (m_func.m_code) { - case Expr_func::Substr: - case Expr_func::Left: - case Expr_func::Right: - ctx_assert(m_narg >= 1); - if (m_args->getExpr(1)->isGroupBy(row)) - return true; - break; - case Expr_func::Sysdate: - return true; - default: - break; - } - if (isAnyEqual(row)) - return true; - return false; -} - -// Exec_expr_func - -Exec_expr_func::Code::~Code() -{ - delete[] m_args; - m_args = 0; -} - -Exec_expr_func::Data::~Data() -{ -} - -Exec_expr_func::~Exec_expr_func() -{ -} - -void -Exec_expr_func::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - const Code& code = getCode(); - // allocate arguments - for (unsigned i = 1; i <= code.m_narg; i++) { - ctx_assert(code.m_args != 0 && code.m_args[i] != 0); - code.m_args[i]->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - SqlField sqlField(code.m_sqlSpec); - Data& data = *new Data(sqlField); - setData(data); - ctx_assert(ctl.m_groupIndex == 0); - init(ctx, ctl); -} - -void -Exec_expr_func::close(Ctx& ctx) -{ - const Code& code = getCode(); - Data& data = getData(); - for (unsigned i = 1; i <= code.m_narg; i++) { - ctx_assert(code.m_args != 0 && code.m_args[i] != 0); - code.m_args[i]->close(ctx); - } - data.m_groupField.clear(); - Ctl ctl(0); - init(ctx, ctl); -} - -void -Exec_expr_func::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [%s", code.m_func.m_name); - for (unsigned i = 1; i <= code.m_narg; i++) { - Exec_base* a[] = { code.m_args[i] }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.hpp deleted file mode 100644 index 856d752987523181e3f651af3344161092dda1aa..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_func.hpp +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_func_hpp -#define ODBC_CODEGEN_Code_expr_func_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_expr.hpp" -#include "Code_expr_row.hpp" - -/** - * @class Expr_func - * @brief Specifies a function - */ -struct Expr_func { - enum Code { - Undef = 0, - Substr, - Left, - Right, - Count, - Max, - Min, - Sum, - Avg, - Rownum, - Sysdate - }; - Expr_func(Code code, const char* name, bool aggr); - Code m_code; - const char* m_name; - bool m_aggr; - static const Expr_func& find(const char* name); -}; - -inline -Expr_func::Expr_func(Code code, const char* name, bool aggr) : - m_code(code), - m_name(name), - m_aggr(aggr) -{ -} - -/** - * @class Plan_expr_func - * @brief Function node in an expression in PlanTree - */ -class Plan_expr_func : public Plan_expr { -public: - Plan_expr_func(Plan_root* root, const Expr_func& func); - virtual ~Plan_expr_func(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; - // children - void setArgs(Plan_expr_row* args); -protected: - const Expr_func& m_func; - Plan_expr_row* m_args; - unsigned m_narg; - SqlType* m_conv; // temp work area -}; - -inline -Plan_expr_func::Plan_expr_func(Plan_root* root, const Expr_func& func) : - Plan_expr(root, TypeFunc), - m_func(func), - m_args(0), - m_narg(0), - m_conv(0) -{ -} - -inline void -Plan_expr_func::setArgs(Plan_expr_row* args) -{ - if (args == 0) { - m_args = 0; - m_narg = 0; - } else { - m_args = args; - m_narg = m_args->getSize(); - delete[] m_conv; - m_conv = new SqlType[1 + m_narg]; - } -} - -/** - * @class Exec_expr_func - * @brief Function node in an expression in ExecTree - */ -class Exec_expr_func : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(const Expr_func& func, const SqlSpec& spec); - virtual ~Code(); - protected: - friend class Plan_expr_func; - friend class Exec_expr_func; - const Expr_func& m_func; - const SqlSpec m_sqlSpec; - unsigned m_narg; - Exec_expr** m_args; // XXX pointers for now - }; - class Data : public Exec_expr::Data { - public: - Data(const SqlField& sqlField); - virtual ~Data(); - protected: - friend class Exec_expr_func; - SqlField m_sqlField; - struct Acc { // accumulators etc - SqlBigint m_count; // current row count - union { - SqlBigint m_bigint; - SqlDouble m_double; - SqlDatetime m_sysdate; - }; - }; - // group-by extra accumulators (default in entry 0) - typedef std::vector<Acc> GroupAcc; - GroupAcc m_groupAcc; - }; - Exec_expr_func(Exec_root* root); - virtual ~Exec_expr_func(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -protected: - void init(Ctx &ctx, Ctl& ctl); // initialize values -}; - -inline -Exec_expr_func::Code::Code(const Expr_func& func, const SqlSpec& sqlSpec) : - Exec_expr::Code(m_sqlSpec), - m_func(func), - m_sqlSpec(sqlSpec), - m_args(0) -{ -} - -inline -Exec_expr_func::Data::Data(const SqlField& sqlField) : - Exec_expr::Data(m_sqlField), - m_sqlField(sqlField), - m_groupAcc(1) -{ -} - -inline -Exec_expr_func::Exec_expr_func(Exec_root* root) : - Exec_expr(root) -{ -} - -// children - -inline const Exec_expr_func::Code& -Exec_expr_func::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_func::Data& -Exec_expr_func::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.cpp deleted file mode 100644 index 7e8314c17419a00df79ba9a2ea59496cbad5d384..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr.hpp" -#include "Code_expr_op.hpp" -#include "Code_expr_conv.hpp" -#include "Code_root.hpp" - -// Expr_op - -const char* -Expr_op::name() const -{ - switch (m_opcode) { - case Add: - return "+"; - case Subtract: - return "-"; - case Multiply: - return "*"; - case Divide: - return "/"; - case Plus: - return "+"; - case Minus: - return "-"; - } - ctx_assert(false); - return ""; -} - -unsigned -Expr_op::arity() const -{ - switch (m_opcode) { - case Add: - case Subtract: - case Multiply: - case Divide: - return 2; - case Plus: - case Minus: - return 1; - } - ctx_assert(false); - return 0; -} - -// Plan_expr_op - -Plan_expr_op::~Plan_expr_op() -{ -} - -Plan_base* -Plan_expr_op::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - unsigned arity = m_op.arity(); - // analyze operands - m_isAggr = false; - m_isBound = true; - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - if (m_expr[i]->m_isAggr) - m_isAggr = true; - if (! m_expr[i]->m_isBound) - m_isBound = false; - } - // find result type and conversion types (currently same) - SqlType res; - SqlType con[1 + 2]; - if (arity == 1) { - const SqlType& t1 = m_expr[1]->sqlType(); - switch (t1.type()) { - case SqlType::Char: - case SqlType::Varchar: - break; - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - res.setType(ctx, SqlType::Bigint); - con[1] = res; - break; - case SqlType::Real: - case SqlType::Double: - res.setType(ctx, SqlType::Double); - con[1] = res; - break; - case SqlType::Null: - res.setType(ctx, SqlType::Null); - con[1] = res; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = res; - default: - break; - } - if (con[1].type() == SqlType::Undef) { - char b1[40]; - t1.print(b1, sizeof(b1)); - ctx.pushStatus(Error::Gen, "type mismatch in operation: %s %s", m_op.name(), b1); - return 0; - } - } else if (arity == 2) { - const SqlType& t1 = m_expr[1]->sqlType(); - const SqlType& t2 = m_expr[2]->sqlType(); - switch (t1.type()) { - case SqlType::Char: // handle char types as in oracle - switch (t2.type()) { - case SqlType::Char: - res.setType(ctx, SqlType::Char, t1.length() + t2.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Varchar: - res.setType(ctx, SqlType::Varchar, t1.length() + t2.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Null: - res.setType(ctx, SqlType::Varchar, t1.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - break; - } - break; - case SqlType::Varchar: - switch (t2.type()) { - case SqlType::Char: - res.setType(ctx, SqlType::Varchar, t1.length() + t2.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Varchar: - res.setType(ctx, SqlType::Varchar, t1.length() + t2.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Null: - res.setType(ctx, SqlType::Varchar, t1.length()); - con[1] = t1; - con[2] = t2; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - break; - } - break; - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - switch (t2.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - res.setType(ctx, SqlType::Bigint); - con[1] = con[2] = res; - if (t1.unSigned() || t2.unSigned()) { - con[1].unSigned(true); - con[2].unSigned(true); - } - break; - case SqlType::Real: - case SqlType::Double: - res.setType(ctx, SqlType::Double); - con[1] = con[2] = res; - break; - case SqlType::Null: - res.setType(ctx, SqlType::Null); - con[1] = con[2] = res; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - break; - } - break; - case SqlType::Real: - case SqlType::Double: - switch (t2.type()) { - case SqlType::Smallint: - case SqlType::Integer: - case SqlType::Bigint: - case SqlType::Real: - case SqlType::Double: - res.setType(ctx, SqlType::Double); - con[1] = con[2] = res; - break; - case SqlType::Null: - res.setType(ctx, SqlType::Null); - con[1] = con[2] = res; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - break; - } - break; - case SqlType::Null: - switch (t2.type()) { - case SqlType::Char: - case SqlType::Varchar: - res.setType(ctx, SqlType::Varchar, t2.length()); - con[1] = con[2] = res; - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - res.setType(ctx, SqlType::Null); - con[1] = con[2] = res; - break; - } - break; - case SqlType::Unbound: - res.setType(ctx, SqlType::Unbound); - con[1] = con[2] = res; - break; - default: - break; - } - if (con[1].type() == SqlType::Undef || con[2].type() == SqlType::Undef) { - char b1[40], b2[40]; - t1.print(b1, sizeof(b1)); - t2.print(b2, sizeof(b2)); - ctx.pushStatus(Error::Gen, "type mismatch in operation: %s %s %s", b1, m_op.name(), b2); - return 0; - } - } else { - ctx_assert(false); - return 0; - } - if (! ctx.ok()) - return 0; - // insert required conversions - for (unsigned i = 1; i <= arity; i++) { - if (con[i].type() == SqlType::Undef) { - ctx.pushStatus(Error::Gen, "mismatched types in operation"); - return 0; - } - if (con[i].type() == SqlType::Unbound) { - // parameter type not yet bound - continue; - } - Plan_expr_conv* exprConv = new Plan_expr_conv(m_root, con[i]); - m_root->saveNode(exprConv); - exprConv->setExpr(m_expr[i]); - m_expr[i] = static_cast<Plan_expr*>(exprConv->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_expr[i] != 0); - } - // set result type - m_sqlType = res; - // table dependencies are union from operands - for (unsigned i = 1; i <= arity; i++) { - const TableSet& ts = m_expr[i]->tableSet(); - m_tableSet.insert(ts.begin(), ts.end()); - } - // set alias name XXX misses operator precedence - if (arity == 1) { - m_alias.assign(m_op.name()); - m_alias.append(m_expr[1]->m_alias); - } else if (arity == 2) { - m_alias.assign(m_expr[1]->m_alias); - m_alias.append(m_op.name()); - m_alias.append(m_expr[2]->m_alias); - } - return this; -} - -Exec_base* -Plan_expr_op::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - unsigned arity = m_op.arity(); - Exec_expr_op* exec = new Exec_expr_op(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // create code for operands - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - Exec_expr* execExpr = static_cast<Exec_expr*>(m_expr[i]->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - exec->setExpr(i, execExpr); - } - // create the code - SqlSpec sqlSpec(sqlType(), SqlSpec::Physical); - Exec_expr_op::Code& code = *new Exec_expr_op::Code(m_op, sqlSpec); - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_expr_op::print(Ctx& ctx) -{ - ctx.print(" [%s", m_op.name()); - Plan_base* a[] = { m_expr[1], m_expr[2] }; - printList(ctx, a, m_op.arity()); - ctx.print("]"); -} - -bool -Plan_expr_op::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeOp) - return false; - const Plan_expr_op* expr2 = static_cast<const Plan_expr_op*>(expr); - if (m_op.m_opcode != expr2->m_op.m_opcode) - return false; - const unsigned arity = m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - if (! m_expr[i]->isEqual(expr2->m_expr[i])) - return false; - } - return true; -} - -bool -Plan_expr_op::isGroupBy(const Plan_expr_row* row) const -{ - if (isAnyEqual(row)) - return true; - const unsigned arity = m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - if (! m_expr[i]->isGroupBy(row)) - return false; - } - return true; -} - -// Code_expr_op - -Exec_expr_op::Code::~Code() -{ -} - -Exec_expr_op::Data::~Data() -{ -} - -Exec_expr_op::~Exec_expr_op() -{ -} - -void -Exec_expr_op::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - const Code& code = getCode(); - // allocate subexpressions - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - SqlField sqlField(code.m_sqlSpec); - Data& data = *new Data(sqlField); - setData(data); -} - -void -Exec_expr_op::close(Ctx& ctx) -{ - const Code& code = getCode(); - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_expr[i] != 0); - m_expr[i]->close(ctx); - } - Data& data = getData(); - data.m_groupField.clear(); -} - -void -Exec_expr_op::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [%s", code.m_op.name()); - Exec_base* a[] = { m_expr[1], m_expr[2] }; - printList(ctx, a, code.m_op.arity()); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.hpp deleted file mode 100644 index f9686cad1515236050d3603ccace04bc6a781337..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_op.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_op_hpp -#define ODBC_CODEGEN_Code_expr_op_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_expr.hpp" - -/** - * @class Expr_op - * @brief Arithmetic and string operators - */ -struct Expr_op { - enum Opcode { - Add = 1, // binary - Subtract, - Multiply, - Divide, - Plus, // unary - Minus - }; - Expr_op(Opcode opcode); - const char* name() const; - unsigned arity() const; - Opcode m_opcode; -}; - -inline -Expr_op::Expr_op(Opcode opcode) : - m_opcode(opcode) -{ -} - -/** - * @class Plan_expr_op - * @brief Operator node in an expression in PlanTree - */ -class Plan_expr_op : public Plan_expr { -public: - Plan_expr_op(Plan_root* root, Expr_op op); - virtual ~Plan_expr_op(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; - // children - void setExpr(unsigned i, Plan_expr* expr); -protected: - Expr_op m_op; - Plan_expr* m_expr[1 + 2]; -}; - -inline -Plan_expr_op::Plan_expr_op(Plan_root* root, Expr_op op) : - Plan_expr(root, TypeOp), - m_op(op) -{ - m_expr[0] = m_expr[1] = m_expr[2] = 0; -} - -inline void -Plan_expr_op::setExpr(unsigned i, Plan_expr* expr) -{ - ctx_assert(1 <= i && i <= 2 && expr != 0); - m_expr[i] = expr; -} - -/** - * @class Exec_expr_op - * @brief Operator node in an expression in ExecTree - */ -class Exec_expr_op : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(Expr_op op, const SqlSpec& spec); - virtual ~Code(); - protected: - friend class Exec_expr_op; - Expr_op m_op; - const SqlSpec m_sqlSpec; - }; - class Data : public Exec_expr::Data { - public: - Data(const SqlField& sqlField); - virtual ~Data(); - protected: - friend class Exec_expr_op; - SqlField m_sqlField; - }; - Exec_expr_op(Exec_root* root); - virtual ~Exec_expr_op(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setExpr(unsigned i, Exec_expr* expr); -protected: - Exec_expr* m_expr[1 + 2]; -}; - -inline -Exec_expr_op::Code::Code(Expr_op op, const SqlSpec& sqlSpec) : - Exec_expr::Code(m_sqlSpec), - m_op(op), - m_sqlSpec(sqlSpec) -{ -} - -inline -Exec_expr_op::Data::Data(const SqlField& sqlField) : - Exec_expr::Data(m_sqlField), - m_sqlField(sqlField) -{ -} - -inline -Exec_expr_op::Exec_expr_op(Exec_root* root) : - Exec_expr(root) -{ - m_expr[0] = m_expr[1] = m_expr[2] = 0; -} - -// children - -inline const Exec_expr_op::Code& -Exec_expr_op::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_op::Data& -Exec_expr_op::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_expr_op::setExpr(unsigned i, Exec_expr* expr) -{ - ctx_assert(1 <= i && i <= 2 && m_expr[i] == 0); - m_expr[i] = expr; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.cpp deleted file mode 100644 index 93892cae5e61443499aa423e0a453aefa410e9a2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_expr_param.hpp" -#include "Code_root.hpp" - -// Plan_expr_param - -Plan_expr_param::~Plan_expr_param() -{ -} - -Plan_base* -Plan_expr_param::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - ctx_assert(m_paramNumber != 0); - ctx_assert(m_paramNumber < m_root->m_paramList.size()); - m_root->m_paramList[m_paramNumber] = this; - m_sqlType.setType(ctx, SqlType::Unbound); - // check if type is bound now - DescArea& ipd = descArea(Desc_usage_IPD); - if (m_paramNumber <= ipd.getCount()) { - DescRec& rec = ipd.getRecord(m_paramNumber); - OdbcData descData; - rec.getField(ctx, SQL_DESC_TYPE, descData); - if (descData.type() != OdbcData::Undef) { - SQLSMALLINT desc_TYPE = descData.smallint(); - // XXX wrong but fixes sun.jdbc.odbc - if (desc_TYPE == SQL_CHAR) - desc_TYPE = SQL_VARCHAR; - if (desc_TYPE == SQL_CHAR) { - rec.getField(ctx, SQL_DESC_LENGTH, descData); - if (descData.type() != OdbcData::Undef) { - unsigned desc_LENGTH = descData.uinteger(); - m_sqlType.setType(ctx, SqlType::Char, desc_LENGTH); - } - } else if (desc_TYPE == SQL_VARCHAR) { - rec.getField(ctx, SQL_DESC_LENGTH, descData); - if (descData.type() != OdbcData::Undef) { - unsigned desc_LENGTH = descData.uinteger(); - m_sqlType.setType(ctx, SqlType::Varchar, desc_LENGTH); - } - } else if (desc_TYPE == SQL_BINARY) { - rec.getField(ctx, SQL_DESC_LENGTH, descData); - if (descData.type() != OdbcData::Undef) { - unsigned desc_LENGTH = descData.uinteger(); - m_sqlType.setType(ctx, SqlType::Binary, desc_LENGTH); - } - } else if (desc_TYPE == SQL_VARBINARY) { - rec.getField(ctx, SQL_DESC_LENGTH, descData); - if (descData.type() != OdbcData::Undef) { - unsigned desc_LENGTH = descData.uinteger(); - m_sqlType.setType(ctx, SqlType::Varbinary, desc_LENGTH); - } else { - // XXX BLOB hack - unsigned desc_LENGTH = FAKE_BLOB_SIZE; - m_sqlType.setType(ctx, SqlType::Varbinary, desc_LENGTH); - } - } else if (desc_TYPE == SQL_SMALLINT) { - m_sqlType.setType(ctx, SqlType::Smallint); - } else if (desc_TYPE == SQL_INTEGER) { - m_sqlType.setType(ctx, SqlType::Integer); - } else if (desc_TYPE == SQL_BIGINT) { - m_sqlType.setType(ctx, SqlType::Bigint); - } else if (desc_TYPE == SQL_REAL) { - m_sqlType.setType(ctx, SqlType::Real); - } else if (desc_TYPE == SQL_DOUBLE) { - m_sqlType.setType(ctx, SqlType::Double); - } else if (desc_TYPE == SQL_TYPE_TIMESTAMP) { - m_sqlType.setType(ctx, SqlType::Datetime); - // XXX BLOB hack - } else if (desc_TYPE == SQL_LONGVARBINARY) { - m_sqlType.setType(ctx, SqlType::Varbinary, (unsigned)FAKE_BLOB_SIZE); - } else { - ctx.pushStatus(Error::Gen, "parameter %u unsupported SQL type %d", m_paramNumber, (int)desc_TYPE); - return 0; - } - char buf[100]; - m_sqlType.print(buf, sizeof(buf)); - ctx_log2(("parameter %u SQL type bound to %s", m_paramNumber, buf)); - } - } - return this; -} - -void -Plan_expr_param::describe(Ctx& ctx) -{ - DescArea& ipd = descArea(Desc_usage_IPD); - if (ipd.getCount() < m_paramNumber) - ipd.setCount(ctx, m_paramNumber); - // XXX describe if possible - DescRec& rec = ipd.getRecord(m_paramNumber); -} - -Exec_base* -Plan_expr_param::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - SqlSpec sqlSpec(m_sqlType, SqlSpec::Physical); - // create code - Exec_expr_param* exec = new Exec_expr_param(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - ctx_assert(m_paramNumber != 0); - Exec_expr_param::Code& code = *new Exec_expr_param::Code(sqlSpec, m_paramNumber); - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_expr_param::print(Ctx& ctx) -{ - ctx.print(" [param %u]", m_paramNumber); -} - -bool -Plan_expr_param::isEqual(const Plan_expr* expr) const -{ - ctx_assert(expr != 0); - if (expr->type() != Plan_expr::TypeParam) - return false; - const Plan_expr_param* expr2 = static_cast<const Plan_expr_param*>(expr); - // params are not equal ever - return false; -} - -bool -Plan_expr_param::isGroupBy(const Plan_expr_row* row) const -{ - // params are constants - return true; -} - -// Exec_expr_param - -Exec_expr_param::Code::~Code() -{ -} - -Exec_expr_param::Data::~Data() -{ - delete m_extField; - m_extField = 0; -} - -Exec_expr_param::~Exec_expr_param() -{ -} - -void -Exec_expr_param::alloc(Ctx& ctx, Ctl& ctl) -{ - if (m_data != 0) - return; - const Code& code = getCode(); - SqlField sqlField(code.sqlSpec()); - Data& data = *new Data(sqlField); - setData(data); -} - -void -Exec_expr_param::bind(Ctx& ctx) -{ - const Code& code = getCode(); - Data& data = getData(); - DescArea& apd = descArea(Desc_usage_APD); - if (apd.getCount() < code.m_paramNumber) { - ctx_log1(("parameter %u is not bound", code.m_paramNumber)); - return; - } - const unsigned paramNumber = code.m_paramNumber; - DescRec& rec = apd.getRecord(paramNumber); - OdbcData descData; - // create type - rec.getField(ctx, SQL_DESC_TYPE, descData); - if (descData.type() == OdbcData::Undef) { - ctx.pushStatus(Error::Gen, "parameter %u external type not defined", paramNumber); - return; - } - ExtType extType; - SQLSMALLINT desc_TYPE = descData.smallint(); - switch (desc_TYPE) { - case SQL_C_CHAR: - case SQL_C_SHORT: // for sun.jdbc.odbc - case SQL_C_SSHORT: - case SQL_C_USHORT: - case SQL_C_LONG: // for sun.jdbc.odbc - case SQL_C_SLONG: - case SQL_C_ULONG: - case SQL_C_SBIGINT: - case SQL_C_UBIGINT: - case SQL_C_FLOAT: - case SQL_C_DOUBLE: - case SQL_C_TYPE_TIMESTAMP: - case SQL_C_BINARY: // XXX BLOB hack - break; - default: - ctx.pushStatus(Error::Gen, "parameter %u unsupported external type %d", paramNumber, (int)desc_TYPE); - return; - } - extType.setType(ctx, static_cast<ExtType::Type>(desc_TYPE)); - ExtSpec extSpec(extType); - // create data field - rec.getField(ctx, SQL_DESC_DATA_PTR, descData); - if (descData.type() == OdbcData::Undef) { - ctx.pushStatus(Error::Gen, "parameter %u data address not defined", paramNumber); - return; - } - SQLPOINTER desc_DATA_PTR = descData.pointer(); - rec.getField(ctx, SQL_DESC_OCTET_LENGTH, descData); - if (descData.type() == OdbcData::Undef) { - ctx.pushStatus(Error::Gen, "parameter %u data length not defined", paramNumber); - return; - } - SQLINTEGER desc_OCTET_LENGTH = descData.integer(); - rec.getField(ctx, SQL_DESC_INDICATOR_PTR, descData); - if (descData.type() == OdbcData::Undef) { - ctx.pushStatus(Error::Gen, "parameter %u indicator address not defined", paramNumber); - return; - } - SQLINTEGER* desc_INDICATOR_PTR = descData.integerPtr(); - ctx_log4(("parameter %u bind to 0x%x %d 0x%x", paramNumber, (unsigned)desc_DATA_PTR, (int)desc_OCTET_LENGTH, (unsigned)desc_INDICATOR_PTR)); - ExtField& extField = *new ExtField(extSpec, desc_DATA_PTR, desc_OCTET_LENGTH, desc_INDICATOR_PTR, paramNumber); - data.m_atExec = false; - if (desc_INDICATOR_PTR != 0 && *desc_INDICATOR_PTR < 0) { - if (*desc_INDICATOR_PTR == SQL_NULL_DATA) { - ; - } else if (*desc_INDICATOR_PTR == SQL_DATA_AT_EXEC) { - data.m_atExec = true; - } else if (*desc_INDICATOR_PTR <= SQL_LEN_DATA_AT_EXEC(0)) { - data.m_atExec = true; - } - } - delete data.m_extField; - data.m_extField = &extField; -} - -void -Exec_expr_param::evaluate(Ctx& ctx, Ctl& ctl) -{ - if (ctl.m_postEval) - return; - const Code& code = getCode(); - Data& data = getData(); - if (data.m_atExec) - return; - ctx_assert(data.m_extField != 0); - data.m_sqlField.copyin(ctx, *data.m_extField); -} - -void -Exec_expr_param::close(Ctx& ctx) -{ - Data& data = getData(); - data.m_extPos = -1; -} - -void -Exec_expr_param::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [param %u]", code.m_paramNumber); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.hpp deleted file mode 100644 index 783e5c087b446b789c4ae57c8361b2484edf9c84..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_param.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_param_hpp -#define ODBC_CODEGEN_Code_expr_param_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_expr.hpp" - -/** - * @class Plan_expr_param - * @brief Constant expression value in PlanTree - */ -class Plan_expr_param : public Plan_expr { -public: - Plan_expr_param(Plan_root* root, unsigned paramNumber); - virtual ~Plan_expr_param(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isEqual(const Plan_expr* expr) const; - bool isGroupBy(const Plan_expr_row* row) const; -protected: - const unsigned m_paramNumber; -}; - -inline -Plan_expr_param::Plan_expr_param(Plan_root* root, unsigned paramNumber) : - Plan_expr(root, TypeParam), - m_paramNumber(paramNumber) -{ -} - -/** - * @class Exec_expr_param - * @brief Constant expression value in ExecTree - */ -class Exec_expr_param : public Exec_expr { -public: - class Code : public Exec_expr::Code { - public: - Code(const SqlSpec& sqlSpec, unsigned paramNumber); - virtual ~Code(); - protected: - friend class Plan_expr_param; - friend class Exec_expr_param; - const SqlSpec m_sqlSpec; - const unsigned m_paramNumber; - }; - class Data : public Exec_expr::Data { - public: - Data(SqlField& sqlField); - virtual ~Data(); - ExtField* extField() const; - protected: - friend class Exec_expr_param; - friend class Exec_root; - SqlField m_sqlField; - ExtField* m_extField; // input binding - bool m_atExec; // data at exec - int m_extPos; // position for SQLPutData (-1 before first call) - }; - Exec_expr_param(Exec_root* root); - virtual ~Exec_expr_param(); - void alloc(Ctx& ctx, Ctl& ctl); - void bind(Ctx& ctx); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_expr_param::Code::Code(const SqlSpec& sqlSpec, unsigned paramNumber) : - Exec_expr::Code(m_sqlSpec), - m_sqlSpec(sqlSpec), - m_paramNumber(paramNumber) -{ -} - -inline -Exec_expr_param::Data::Data(SqlField& sqlField) : - Exec_expr::Data(m_sqlField), - m_sqlField(sqlField), - m_extField(0), - m_atExec(false), - m_extPos(-1) -{ -} - -inline ExtField* -Exec_expr_param::Data::extField() const -{ - return m_extField; -} - -inline -Exec_expr_param::Exec_expr_param(Exec_root* root) : - Exec_expr(root) -{ -} - -// children - -inline const Exec_expr_param::Code& -Exec_expr_param::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_param::Data& -Exec_expr_param::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.cpp deleted file mode 100644 index da1751d41d1e50155d4d9b7c10088885de3df692..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/DataType.hpp> -#include "Code_expr_row.hpp" -#include "Code_expr.hpp" -#include "Code_expr_conv.hpp" -#include "Code_dml_row.hpp" -#include "Code_root.hpp" - -// Plan_expr_row - -Plan_expr_row::~Plan_expr_row() -{ -} - -Plan_base* -Plan_expr_row::analyze(Ctx& ctx, Ctl& ctl) -{ - unsigned size = getSize(); - // analyze subexpressions - m_anyAggr = false; - m_allBound = true; - for (unsigned i = 1; i <= size; i++) { - Plan_expr* expr1 = getExpr(i); - Plan_expr* expr2 = static_cast<Plan_expr*>(expr1->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - setExpr(i, expr2); - if (expr2->isAggr()) - m_anyAggr = true; - if (! expr2->isBound()) - m_allBound = false; - } - // insert conversions if requested XXX ugly hack - if (ctl.m_dmlRow != 0) { - if (ctl.m_dmlRow->getSize() > getSize()) { - ctx.pushStatus(Sqlstate::_21S01, Error::Gen, "not enough values (%u > %u)", ctl.m_dmlRow->getSize(), getSize()); - return 0; - } - if (ctl.m_dmlRow->getSize() < getSize()) { - ctx.pushStatus(Sqlstate::_21S01, Error::Gen, "too many values (%u < %u)", ctl.m_dmlRow->getSize(), getSize()); - return 0; - } - for (unsigned i = 1; i <= size; i++) { - const SqlType& sqlType = ctl.m_dmlRow->getColumn(i)->sqlType(); - Plan_expr_conv* exprConv = new Plan_expr_conv(m_root, sqlType); - m_root->saveNode(exprConv); - exprConv->setExpr(getExpr(i)); - Plan_expr* expr = static_cast<Plan_expr*>(exprConv->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(expr != 0); - setExpr(i, expr); - } - } - // set aliases - m_aliasList.resize(1 + size); - for (unsigned i = 1; i <= size; i++) { - if (m_aliasList[i].empty()) { - setAlias(i, getExpr(i)->getAlias()); - } - } - // node was not replaced - return this; -} - -Exec_base* -Plan_expr_row::codegen(Ctx& ctx, Ctl& ctl) -{ - unsigned size = getSize(); - Exec_expr_row* exec = new Exec_expr_row(ctl.m_execRoot, size); - ctl.m_execRoot->saveNode(exec); - SqlSpecs sqlSpecs(size); - // create code for subexpressions - for (unsigned i = 1; i <= size; i++) { - Plan_expr* planExpr = getExpr(i); - Exec_expr* execExpr = static_cast<Exec_expr*>(planExpr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - exec->setExpr(i, execExpr); - const SqlSpec sqlSpec(execExpr->getCode().sqlSpec(), SqlSpec::Reference); - sqlSpecs.setEntry(i, sqlSpec); - } - // create alias list - Exec_expr_row::Code::Alias* aliasList = new Exec_expr_row::Code::Alias[1 + size]; - strcpy(aliasList[0], "?"); - for (unsigned i = 1; i <= size; i++) { - const char* s = m_aliasList[i].c_str(); - if (strlen(s) == 0) - s = getExpr(i)->getAlias().c_str(); - unsigned n = strlen(s); - if (n >= sizeof(Exec_expr_row::Code::Alias)) - n = sizeof(Exec_expr_row::Code::Alias) - 1; - strncpy(aliasList[i], s, n); - aliasList[i][n] = 0; - } - // create the code - Exec_expr_row::Code& code = *new Exec_expr_row::Code(sqlSpecs, aliasList); - exec->setCode(code); - return exec; -} - -void -Plan_expr_row::print(Ctx& ctx) -{ - const unsigned size = getSize(); - ctx.print(" [expr_row"); - for (unsigned i = 1; i <= size; i++) { - Plan_base* a = m_exprList[i]; - a == 0 ? ctx.print(" -") : a->print(ctx); - } - ctx.print("]"); -} - -bool -Plan_expr_row::isAllGroupBy(const Plan_expr_row* row) const -{ - const unsigned size = getSize(); - for (unsigned i = 1; i <= size; i++) { - if (! getExpr(i)->isGroupBy(row)) - return false; - } - return true; -} - -// Exec_expr_row - -Exec_expr_row::Code::~Code() -{ - delete[] m_aliasList; -} - -Exec_expr_row::Data::~Data() -{ -} - -Exec_expr_row::~Exec_expr_row() -{ - delete[] m_expr; -} - -void -Exec_expr_row::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate subexpressions - for (unsigned i = 1; i <= m_size; i++) { - getExpr(i)->alloc(ctx, ctl); - } - // construct SqlRow of references - const Code& code = getCode(); - SqlRow sqlRow(getCode().m_sqlSpecs); - for (unsigned i = 1; i <= m_size; i++) { - const Exec_expr::Data& dataExpr = getExpr(i)->getData(); - const SqlSpec& sqlSpec = code.m_sqlSpecs.getEntry(i); - const SqlField sqlField(sqlSpec, &dataExpr.sqlField()); - sqlRow.setEntry(i, sqlField); - } - // create the data - Data& data = *new Data(sqlRow); - setData(data); -} - -void -Exec_expr_row::evaluate(Ctx& ctx, Ctl& ctl) -{ - for (unsigned i = 1; i <= m_size; i++) { - getExpr(i)->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - } -} - -void -Exec_expr_row::close(Ctx& ctx) -{ - for (unsigned i = 1; i <= m_size; i++) { - getExpr(i)->close(ctx); - } -} - -void -Exec_expr_row::print(Ctx& ctx) -{ - ctx.print(" [expr_row"); - for (unsigned i = 1; i <= m_size; i++) { - getExpr(i)->print(ctx); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.hpp deleted file mode 100644 index 94527931dbae06814464e6dd1943f8d750bb6644..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_expr_row.hpp +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_expr_row_hpp -#define ODBC_CODEGEN_Code_expr_row_hpp - -#include <vector> -#include <common/common.hpp> -#include <common/DataRow.hpp> -#include "Code_base.hpp" -#include "Code_expr.hpp" - -class Plan_expr; - -/** - * @class Plan_expr_row - * @brief Row of expressions in PlanTree - * - * Used for select, value, and order by rows. - */ -class Plan_expr_row : public Plan_base { -public: - Plan_expr_row(Plan_root* root); - virtual ~Plan_expr_row(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setAsterisk(); - bool getAsterisk() const; - unsigned getSize() const; - Plan_expr* getExpr(unsigned i) const; - void setExpr(unsigned i, Plan_expr* expr); - void addExpr(Plan_expr* expr); - void addExpr(Plan_expr* expr, const BaseString& alias); - void setAlias(unsigned i, const BaseString& alias); - void addExpr(Plan_expr* expr, bool asc); - bool anyAggr() const; - bool allBound() const; - bool isAllGroupBy(const Plan_expr_row* row) const; -protected: - friend class Plan_query; - friend class Plan_query_sort; - bool m_asterisk; // early plan node type - ExprVector m_exprList; - typedef std::vector<BaseString> AliasList; - AliasList m_aliasList; - typedef std::vector<bool> AscList; - AscList m_ascList; - bool m_anyAggr; // at least one aggreate - bool m_allBound; // all bound -}; - -inline -Plan_expr_row::Plan_expr_row(Plan_root* root) : - Plan_base(root), - m_asterisk(false), - m_exprList(1), - m_aliasList(1), - m_ascList(1), - m_anyAggr(false), - m_allBound(false) -{ -} - -// children - -inline void -Plan_expr_row::setAsterisk() -{ - m_asterisk = true; -} - -inline bool -Plan_expr_row::getAsterisk() const -{ - return m_asterisk; -} - -inline unsigned -Plan_expr_row::getSize() const -{ - ctx_assert(m_exprList.size() >= 1); - return m_exprList.size() - 1; -} - -inline void -Plan_expr_row::addExpr(Plan_expr* expr) -{ - ctx_assert(expr != 0); - addExpr(expr, expr->m_alias); -} - -inline void -Plan_expr_row::addExpr(Plan_expr* expr, const BaseString& alias) -{ - ctx_assert(expr != 0); - m_exprList.push_back(expr); - m_aliasList.push_back(alias); -} - -inline void -Plan_expr_row::addExpr(Plan_expr* expr, bool asc) -{ - ctx_assert(expr != 0); - m_exprList.push_back(expr); - m_ascList.push_back(asc); -} - -inline void -Plan_expr_row::setExpr(unsigned i, Plan_expr* expr) -{ - ctx_assert(1 <= i && i < m_exprList.size() && expr != 0); - m_exprList[i] = expr; -} - -inline Plan_expr* -Plan_expr_row::getExpr(unsigned i) const -{ - ctx_assert(1 <= i && i < m_exprList.size() && m_exprList[i] != 0); - return m_exprList[i]; -} - -inline void -Plan_expr_row::setAlias(unsigned i, const BaseString& alias) -{ - ctx_assert(1 <= i && i < m_aliasList.size()); - m_aliasList[i] = alias; -} - -inline bool -Plan_expr_row::anyAggr() const -{ - return m_anyAggr; -} - -inline bool -Plan_expr_row::allBound() const -{ - return m_allBound; -} - -/** - * @class Expr_expr_row - * @brief Row of expressions in ExecTree - */ -class Exec_expr_row : public Exec_base { -public: - class Code : public Exec_base::Code { - public: - typedef char Alias[40]; - Code(const SqlSpecs& sqlSpecs, const Alias* aliasList); - virtual ~Code(); - const SqlSpecs& sqlSpecs() const; - const char* getAlias(unsigned i) const; - protected: - friend class Exec_expr_row; - const SqlSpecs m_sqlSpecs; - const Alias* m_aliasList; - }; - class Data : public Exec_base::Data { - public: - Data(const SqlRow& sqlRow); - virtual ~Data(); - const SqlRow& sqlRow() const; - protected: - friend class Exec_expr_row; - SqlRow m_sqlRow; - }; - Exec_expr_row(Exec_root* root, unsigned size); - virtual ~Exec_expr_row(); - void alloc(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - Exec_expr* getExpr(unsigned i) const; - void setExpr(unsigned i, Exec_expr* expr); -protected: - Exec_expr** m_expr; // numbered from 1 - unsigned m_size; -}; - -inline -Exec_expr_row::Code::Code(const SqlSpecs& sqlSpecs, const Alias* aliasList) : - m_sqlSpecs(sqlSpecs), - m_aliasList(aliasList) -{ -} - -inline const SqlSpecs& -Exec_expr_row::Code::sqlSpecs() const -{ - return m_sqlSpecs; -} - -inline const char* -Exec_expr_row::Code::getAlias(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_sqlSpecs.count() && m_aliasList != 0); - return m_aliasList[i]; -} - -inline -Exec_expr_row::Data::Data(const SqlRow& sqlRow) : - m_sqlRow(sqlRow) -{ -} - -inline const SqlRow& -Exec_expr_row::Data::sqlRow() const -{ - return m_sqlRow; -} - -inline -Exec_expr_row::Exec_expr_row(Exec_root* root, unsigned size) : - Exec_base(root), - m_expr(new Exec_expr* [1 + size]), - m_size(size) -{ - m_expr[0] = (Exec_expr*)-1; - for (unsigned i = 1; i <= m_size; i++) - m_expr[i] = 0; -} - -// children - -inline const Exec_expr_row::Code& -Exec_expr_row::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_expr_row::Data& -Exec_expr_row::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline Exec_expr* -Exec_expr_row::getExpr(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_size && m_expr != 0 && m_expr[i] != 0); - return m_expr[i]; -} - -inline void -Exec_expr_row::setExpr(unsigned i, Exec_expr* expr) -{ - ctx_assert(1 <= i && i <= m_size && m_expr != 0 && m_expr[i] == 0); - m_expr[i] = expr; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.cpp deleted file mode 100644 index 584ffef3e0193cf0862388fad86f47a506f0d5bf..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include "Code_idx_column.hpp" -#include "Code_expr_conv.hpp" -#include "Code_root.hpp" - -// Plan_idx_column - -Plan_idx_column::~Plan_idx_column() -{ -} - -Plan_base* -Plan_idx_column::analyze(Ctx& ctx, Ctl& ctl) -{ - analyzeColumn(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_idx_column::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_idx_column::print(Ctx& ctx) -{ - ctx.print(" [idx_column %s]", getPrintName()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.hpp deleted file mode 100644 index 209ed705b489a0a7334b9e0b2fb28484fe56364e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_idx_column.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_idx_column_hpp -#define ODBC_CODEGEN_Code_idx_column_hpp - -#include <common/common.hpp> -#include "Code_column.hpp" -#include "Code_data_type.hpp" -#include "Code_expr.hpp" - -class DictColumn; -class Plan_table; - -/** - * @class Plan_idx_column - * @brief Column in create index statement - */ -class Plan_idx_column : public Plan_base, public Plan_column { -public: - Plan_idx_column(Plan_root* root, const BaseString& name); - virtual ~Plan_idx_column(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); -protected: - friend class Plan_create_row; -}; - -inline -Plan_idx_column::Plan_idx_column(Plan_root* root, const BaseString& name) : - Plan_base(root), - Plan_column(Type_idx, name) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.cpp deleted file mode 100644 index c442186c181be6a62abc0464e901299117d698c6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_insert.hpp" -#include "Code_query_repeat.hpp" -#include "Code_query_project.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -// Plan_insert - -Plan_insert::~Plan_insert() -{ -} - -Plan_base* -Plan_insert::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_insert); - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // handle MySql syntax - if (m_mysqlRow != 0) { - setDmlRow(m_mysqlRow->m_dmlRow); - setExprRow(m_mysqlRow->m_exprRow); - m_mysqlRow = 0; - } - if (m_dmlRow == 0) { - // construct column list - setDmlRow(new Plan_dml_row(m_root)); - m_root->saveNode(m_dmlRow); - const DictTable& dictTable = m_table->dictTable(); - unsigned n = dictTable.getSize(); - for (unsigned i = 1; i <= n; i++) { - DictColumn* dictColumn = dictTable.getColumn(i); - Plan_dml_column* column = new Plan_dml_column(m_root, dictColumn->getName()); - m_root->saveNode(column); - m_dmlRow->addColumn(column); - } - } - // set name resolution scope - ctl.m_tableList.resize(1 + 1); // indexed from 1 - ctl.m_tableList[1] = m_table; - // analyze the dml columns - m_dmlRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctl.m_dmlRow = m_dmlRow; // row type to convert to - if (m_query != 0) { - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } else if (m_select == 0) { - // analyze the expression row - m_exprRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // transform the row into query - Plan_query_repeat* queryRepeat = new Plan_query_repeat(m_root, 1); - m_root->saveNode(queryRepeat); - Plan_query_project* queryProject = new Plan_query_project(m_root); - m_root->saveNode(queryProject); - queryProject->setQuery(queryRepeat); - queryProject->setRow(m_exprRow); - setQuery(queryProject); - } else { - // analyze the select into query - Plan_query* query = static_cast<Plan_query*>(m_select->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - setQuery(query); - } - return this; -} - -void -Plan_insert::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "INSERT", SQL_DIAG_INSERT); -} - -Exec_base* -Plan_insert::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0); - const BaseString& tableName = m_table->getName(); - const DictTable& dictTable = m_table->dictTable(); - const ColumnVector& columns = m_table->dmlColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_insert::Code& code = *new Exec_insert::Code(); - code.m_insertOp = m_insertOp; - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_attrCount = attrCount; - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_isKey = new bool[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - code.m_tupleId = dictTable.tupleId(); // maybe 0 - code.m_autoIncrement = dictTable.autoIncrement(); // maybe 0 - unsigned k; - if ((k = code.m_tupleId) != 0 || (k = code.m_autoIncrement) != 0) { - const DictColumn& dictColumn = *dictTable.getColumn(k); - code.m_idType = dictColumn.sqlType(); - } - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - code.m_attrId[i] = dictColumn.getAttrId(); - code.m_isKey[i] = dictColumn.isKey(); - } - // default values XXX a mess - code.m_defaultCount = 0; - for (unsigned j = 1; j <= dictTable.getSize(); j++) { - const DictColumn& dictColumn = *dictTable.getColumn(j); - if (dictColumn.getDefaultValue() != 0 && ! code.findAttrId(dictColumn.getAttrId())) - code.m_defaultCount++; - } - if (code.m_defaultCount != 0) { - code.m_defaultId = new NdbAttrId[1 + code.m_defaultCount]; - for (unsigned i = 0, j = 1; j <= dictTable.getSize(); j++) { - const DictColumn& dictColumn = *dictTable.getColumn(j); - if (dictColumn.getDefaultValue() != 0 && ! code.findAttrId(dictColumn.getAttrId())) - code.m_defaultId[++i] = dictColumn.getAttrId(); - } - SqlSpecs sqlSpecs(code.m_defaultCount); - for (unsigned i = 0, j = 1; j <= dictTable.getSize(); j++) { - const DictColumn& dictColumn = *dictTable.getColumn(j); - if (dictColumn.getDefaultValue() != 0 && ! code.findAttrId(dictColumn.getAttrId())) { - SqlSpec sqlSpec(dictColumn.sqlType(), SqlSpec::Physical); - sqlSpecs.setEntry(++i, sqlSpec); - } - } - code.m_defaultValue = new SqlRow(sqlSpecs); - for (unsigned i = 0, j = 1; j <= dictTable.getSize(); j++) { - const DictColumn& dictColumn = *dictTable.getColumn(j); - if (dictColumn.getDefaultValue() != 0 && ! code.findAttrId(dictColumn.getAttrId())) { - const char* defaultValue = dictColumn.getDefaultValue(); - ExtType extType(ExtType::Char); - ExtSpec extSpec(extType); - SQLINTEGER ind = SQL_NTS; - ExtField extField(extSpec, (SQLPOINTER)defaultValue, 0, &ind); - SqlField& f = code.m_defaultValue->getEntry(++i); - f.copyin(ctx, extField); - if (! ctx.ok()) - return 0; - } - } - } - // create the exec - Exec_insert* exec = new Exec_insert(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_insert::print(Ctx& ctx) -{ - ctx.print(" [%s", m_insertOp == Insert_op_insert ? "insert" : "write"); - Plan_base* a[] = { m_table, m_dmlRow, m_exprRow, m_query }; - printList(ctx, a, 4); - ctx.print("]"); -} - -// Exec_insert - -Exec_insert::Code::~Code() -{ - delete[] m_tableName; - delete[] m_attrId; - delete[] m_isKey; - delete[] m_defaultId; - delete m_defaultValue; -} - -bool -Exec_insert::Code::findAttrId(NdbAttrId attrId) const -{ - for (unsigned i = 1; i <= m_attrCount; i++) { - if (m_attrId[i] == attrId) - return true; - } - return false; -} - -Exec_insert::Data::~Data() -{ -} - -Exec_insert::~Exec_insert() -{ -} - -void -Exec_insert::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the query - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - // create data - Data& data = *new Data(); - setData(data); -} - -void -Exec_insert::close(Ctx& ctx) -{ -} - -void -Exec_insert::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx_assert(m_query != 0); - ctx.print(" [insert"); - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" table=%s", code.m_tableName); - m_query->print(ctx); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.hpp deleted file mode 100644 index 748b092e33a04597557b3b6a53f5ba982638652f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_insert.hpp +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_insert_hpp -#define ODBC_CODEGEN_Code_insert_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_dml_row.hpp" -#include "Code_expr_row.hpp" -#include "Code_select.hpp" -#include "Code_query.hpp" -#include "Code_table.hpp" -#include "Code_set_row.hpp" - -enum Insert_op { - Insert_op_undef = 0, - Insert_op_insert = 1, - Insert_op_write = 2 -}; - -/** - * @class Plan_insert - * @brief Insert in PlanTree - * - * Insert. Becomes directly executable. - */ -class Plan_insert : public Plan_dml { -public: - Plan_insert(Plan_root* root, Insert_op insertOp); - virtual ~Plan_insert(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); - Plan_dml_row* getDmlRow() const; - void setDmlRow(Plan_dml_row* dmlRow); - void setExprRow(Plan_expr_row* exprRow); - void setSelect(Plan_select* select); - void setQuery(Plan_query* query); - void setMysqlRow(Plan_set_row* mysqlRow); -protected: - Insert_op m_insertOp; - Plan_table* m_table; - Plan_dml_row* m_dmlRow; - Plan_expr_row* m_exprRow; - Plan_select* m_select; - Plan_query* m_query; - Plan_set_row* m_mysqlRow; -}; - -inline -Plan_insert::Plan_insert(Plan_root* root, Insert_op insertOp) : - Plan_dml(root), - m_insertOp(insertOp), - m_table(0), - m_dmlRow(0), - m_exprRow(0), - m_select(0), - m_query(0), - m_mysqlRow(0) -{ -} - -// children - -inline void -Plan_insert::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_insert::setDmlRow(Plan_dml_row* dmlRow) -{ - ctx_assert(dmlRow != 0); - m_dmlRow = dmlRow; -} - -inline Plan_dml_row* -Plan_insert::getDmlRow() const -{ - ctx_assert(m_dmlRow != 0); - return m_dmlRow; -} - -inline void -Plan_insert::setExprRow(Plan_expr_row* exprRow) -{ - ctx_assert(exprRow != 0); - m_exprRow = exprRow; -} - -inline void -Plan_insert::setSelect(Plan_select* select) -{ - ctx_assert(select != 0); - m_select = select; -} - -inline void -Plan_insert::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_insert::setMysqlRow(Plan_set_row* mysqlRow) -{ - ctx_assert(mysqlRow != 0); - m_mysqlRow = mysqlRow; -} - -/** - * @class Exec_insert - * @brief Executable insert - */ -class Exec_insert : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(); - virtual ~Code(); - protected: - friend class Plan_insert; - friend class Exec_insert; - Insert_op m_insertOp; - char* m_tableName; - unsigned m_attrCount; - NdbAttrId* m_attrId; - bool* m_isKey; - unsigned m_tupleId; // position of tuple id - unsigned m_autoIncrement; // position of ai key - SqlType m_idType; // type of tuple id or ai key - unsigned m_defaultCount; - NdbAttrId* m_defaultId; - SqlRow* m_defaultValue; - bool findAttrId(NdbAttrId attrId) const; - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_insert; - }; - Exec_insert(Exec_root* root); - virtual ~Exec_insert(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -private: - Exec_query* m_query; -}; - -inline -Exec_insert::Code::Code() : - m_insertOp(Insert_op_undef), - m_tableName(0), - m_attrCount(0), - m_attrId(0), - m_isKey(0), - m_tupleId(0), - m_autoIncrement(0), - m_defaultCount(0), - m_defaultId(0), - m_defaultValue(0) -{ -} - -inline -Exec_insert::Data::Data() -{ -} - -inline -Exec_insert::Exec_insert(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_insert::Code& -Exec_insert::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_insert::Data& -Exec_insert::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_insert::setQuery(Exec_query* query) -{ - ctx_assert(m_query == 0 && query != 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.cpp deleted file mode 100644 index fe7cac7606ee0bd97f0f6379cc317ebc50a502a1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_pred.hpp" -#include "Code_pred_op.hpp" -#include "Code_root.hpp" - -// Plan_pred - -Plan_pred::~Plan_pred() -{ -} - -bool -Plan_pred::isGroupBy(const Plan_expr_row* row) const -{ - return false; -} - -Plan_pred* -Plan_pred::opAnd(Plan_pred* pred2) -{ - Plan_pred_op* predAnd = new Plan_pred_op(m_root, Pred_op::And); - m_root->saveNode(predAnd); - predAnd->setPred(1, this); - predAnd->setPred(2, pred2); - return predAnd; -} - -// Exec_pred - -Exec_pred::Code::~Code() -{ -} - -Exec_pred::Data::~Data() -{ -} - -Exec_pred::~Exec_pred() -{ -} - -Pred_value& -Exec_pred::Data::groupValue(unsigned i, bool initFlag) -{ - if (m_groupValue.size() == 0) { - m_groupValue.resize(1); - } - if (initFlag) { - //unsigned i2 = m_groupValue.size(); - //ctx_assert(i == i2); - m_groupValue.push_back(Pred_value_unknown); - } - ctx_assert(i != 0 && i < m_groupValue.size()); - return m_groupValue[i]; -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.hpp deleted file mode 100644 index a77c1161fa1607c577da8b362fadb2f976eea051..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred.hpp +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_pred_hpp -#define ODBC_CODEGEN_Code_pred_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_base.hpp" - -enum Pred_value { - Pred_value_unknown = -1, - Pred_value_false = 0, - Pred_value_true = 1 -}; - -class Ctx; -class Plan_expr_row; -class Exec_pred; - -/** - * @class Plan_pred - * @brief Base class for predicates in PlanTree - * - * Predicate represents a boolean value. - */ -class Plan_pred : public Plan_base { -public: - // type is convenient since RTTI cannot be used - enum Type { - TypeUndefined = 0, - TypeComp = 1, - TypeOp = 2 - }; - Plan_pred(Plan_root* root, Type type); - virtual ~Plan_pred() = 0; - Type type() const; - const TableSet& tableSet() const; - const TableSet& noInterp() const; - virtual bool isGroupBy(const Plan_expr_row* row) const; - // helpers - Plan_pred* opAnd(Plan_pred* pred2); -protected: - const Type m_type; - TableSet m_tableSet; // depends on these tables - TableSet m_noInterp; // cannot use interpreted TUP program on these tables - Exec_pred* m_exec; // probably stupid -}; - -inline -Plan_pred::Plan_pred(Plan_root* root, Type type) : - Plan_base(root), - m_type(type), - m_exec(0) -{ -} - -inline Plan_pred::Type -Plan_pred::type() const -{ - return m_type; -} - -inline const Plan_pred::TableSet& -Plan_pred::tableSet() const -{ - return m_tableSet; -} - -inline const Plan_pred::TableSet& -Plan_pred::noInterp() const -{ - return m_noInterp; -} - -/** - * @class Exec_pred - * @brief Base class for predicates in ExecTree - */ -class Exec_pred : public Exec_base { -public: - class Code : public Exec_base::Code { - public: - Code(); - virtual ~Code() = 0; - protected: - friend class Exec_pred; - }; - class Data : public Exec_base::Data { - public: - Data(); - virtual ~Data() = 0; - Pred_value getValue() const; - Pred_value groupValue(unsigned i) const; - protected: - friend class Exec_pred; - Pred_value m_value; // the value - // group-by data - typedef std::vector<Pred_value> GroupValue; - GroupValue m_groupValue; - Pred_value& groupValue(unsigned i, bool initFlag); - }; - Exec_pred(Exec_root* root); - virtual ~Exec_pred() = 0; - virtual void execInterp(Ctx& ctx, Ctl& ctl) = 0; - virtual void evaluate(Ctx& ctx, Ctl& ctl) = 0; - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_pred::Code::Code() -{ -} - -inline -Exec_pred::Data::Data() : - m_value(Pred_value_unknown) -{ -} - -inline Pred_value -Exec_pred::Data::getValue() const -{ - return m_value; -} - -inline Pred_value -Exec_pred::Data::groupValue(unsigned i) const -{ - ctx_assert(i != 0 && i < m_groupValue.size()); - return m_groupValue[i]; -} - -inline -Exec_pred::Exec_pred(Exec_root* root) : - Exec_base(root) -{ -} - -// children - -inline const Exec_pred::Code& -Exec_pred::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_pred::Data& -Exec_pred::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.cpp deleted file mode 100644 index 29736e45818ed1a0d5e82c33483103b324fe4c9c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_pred.hpp" -#include "Code_pred_op.hpp" -#include "Code_root.hpp" - -// Pred_op - -const char* -Pred_op::name() const -{ - switch (m_opcode) { - case And: - return "and"; - case Or: - return "or"; - case Not: - return "not"; - } - ctx_assert(false); - return ""; -} - -unsigned -Pred_op::arity() const -{ - switch (m_opcode) { - case And: - case Or: - return 2; - case Not: - return 1; - } - ctx_assert(false); - return 0; -} - -// Plan_pred_op - -Plan_pred_op::~Plan_pred_op() -{ -} - -Plan_base* -Plan_pred_op::analyze(Ctx& ctx, Ctl& ctl) -{ - m_exec = 0; - unsigned arity = m_op.arity(); - // check if we remain in top-level AND-clause - const bool topand = ctl.m_topand; - if (m_op.m_opcode != Pred_op::And) - ctl.m_topand = false; - // analyze sub-predicates - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_pred[i] != 0); - m_pred[i]->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // save top level predicate on list - if (topand && ! ctl.m_topand) { - ctl.m_topcomp.push_back(this); - } - ctl.m_topand = topand; - // table dependencies are union from operands - m_tableSet.clear(); - for (unsigned i = 1; i <= arity; i++) { - const TableSet& ts = m_pred[i]->tableSet(); - m_tableSet.insert(ts.begin(), ts.end()); - } - // set of tables for which interpreter cannot be used - m_noInterp.clear(); - for (unsigned i = 1; i <= arity; i++) { - const TableSet& ts = m_pred[i]->noInterp(); - m_noInterp.insert(ts.begin(), ts.end()); - } - return this; -} - -Exec_base* -Plan_pred_op::codegen(Ctx& ctx, Ctl& ctl) -{ - if (m_exec != 0) - return m_exec; - unsigned arity = m_op.arity(); - Exec_pred_op* exec = new Exec_pred_op(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // create code for operands - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_pred[i] != 0); - Exec_pred* execPred = static_cast<Exec_pred*>(m_pred[i]->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execPred != 0); - exec->setPred(i, execPred); - } - // create the code - Exec_pred_op::Code& code = *new Exec_pred_op::Code(m_op); - exec->setCode(code); - m_exec = exec; - return exec; -} - -void -Plan_pred_op::print(Ctx& ctx) -{ - ctx.print(" [%s", m_op.name()); - Plan_base* a[] = { m_pred[1], m_pred[2] }; - printList(ctx, a, m_op.arity()); - ctx.print("]"); -} - -bool -Plan_pred_op::isGroupBy(const Plan_expr_row* row) const -{ - const unsigned arity = m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_pred[i] != 0); - if (! m_pred[i]->isGroupBy(row)) - return false; - } - return true; -} - -// Code_pred_op - -Exec_pred_op::Code::~Code() -{ -} - -Exec_pred_op::Data::~Data() -{ -} - -Exec_pred_op::~Exec_pred_op() -{ -} - -void -Exec_pred_op::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate sub-predicates - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_pred[i] != 0); - m_pred[i]->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - Data& data = *new Data; - setData(data); -} - -void -Exec_pred_op::close(Ctx& ctx) -{ - const Code& code = getCode(); - unsigned arity = code.m_op.arity(); - for (unsigned i = 1; i <= arity; i++) { - ctx_assert(m_pred[i] != 0); - m_pred[i]->close(ctx); - } -} - -void -Exec_pred_op::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [%s", code.m_op.name()); - Exec_base* a[] = { m_pred[1], m_pred[2] }; - printList(ctx, a, code.m_op.arity()); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.hpp deleted file mode 100644 index 9130bc3cb81305e684d444da176dac0212b335e6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_pred_op.hpp +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_pred_op_hpp -#define ODBC_CODEGEN_Code_pred_op_hpp - -#include <common/common.hpp> -#include <common/DataField.hpp> -#include "Code_pred.hpp" - -/** - * @class Pred_op - * @brief Boolean operators - */ -struct Pred_op { - enum Opcode { - And = 1, // binary - Or, - Not // unary - }; - Pred_op(Opcode opcode); - const char* name() const; - unsigned arity() const; - Opcode m_opcode; -}; - -inline -Pred_op::Pred_op(Opcode opcode) : - m_opcode(opcode) -{ -} - -/** - * @class Plan_pred_op - * @brief Operator node in a predicate in PlanTree - */ -class Plan_pred_op : public Plan_pred { -public: - Plan_pred_op(Plan_root* root, Pred_op op); - virtual ~Plan_pred_op(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - bool isGroupBy(const Plan_expr_row* row) const; - // children - void setPred(unsigned i, Plan_pred* pred); -protected: - friend class Plan_pred; - Pred_op m_op; - Plan_pred* m_pred[1 + 2]; -}; - -inline -Plan_pred_op::Plan_pred_op(Plan_root* root, Pred_op op) : - Plan_pred(root, TypeOp), - m_op(op) -{ - m_pred[0] = m_pred[1] = m_pred[2] = 0; -} - -inline void -Plan_pred_op::setPred(unsigned i, Plan_pred* pred) -{ - ctx_assert(1 <= i && i <= m_op.arity() && pred != 0); - m_pred[i] = pred; -} - -/** - * @class Exec_pred_op - * @brief Operator node in a predicate in ExecTree - */ -class Exec_pred_op : public Exec_pred { -public: - class Code : public Exec_pred::Code { - public: - Code(Pred_op op); - virtual ~Code(); - protected: - friend class Exec_pred_op; - Pred_op m_op; - }; - class Data : public Exec_pred::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_pred_op; - }; - Exec_pred_op(Exec_root* root); - virtual ~Exec_pred_op(); - void alloc(Ctx& ctx, Ctl& ctl); - void execInterp(Ctx& ctx, Ctl& ctl); - void evaluate(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setPred(unsigned i, Exec_pred* pred); -protected: - Exec_pred* m_pred[1 + 2]; -}; - -inline -Exec_pred_op::Code::Code(Pred_op op) : - m_op(op) -{ -} - -inline -Exec_pred_op::Data::Data() -{ -} - -inline -Exec_pred_op::Exec_pred_op(Exec_root* root) : - Exec_pred(root) -{ - m_pred[0] = m_pred[1] = m_pred[2] = 0; -} - -// children - -inline const Exec_pred_op::Code& -Exec_pred_op::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_pred_op::Data& -Exec_pred_op::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_pred_op::setPred(unsigned i, Exec_pred* pred) -{ - ctx_assert(1 <= i && i <= 2 && m_pred[i] == 0); - m_pred[i] = pred; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query.cpp deleted file mode 100644 index 9e9839426016f65ee7dbbf43c48509fd5a937980..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query.cpp +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_query.hpp" -#include "Code_query_project.hpp" -#include "Code_query_count.hpp" - -// Plan_query - -Plan_query::~Plan_query() -{ -} - -Plan_expr_row* -Plan_query::getRow() -{ - ctx_assert(false); - return 0; -} - -void -Plan_query::describe(Ctx& ctx) -{ - const Plan_expr_row* exprRow = getRow(); - const unsigned count = exprRow->getSize(); - // create IRD - DescArea& ird = descArea(Desc_usage_IRD); - ird.setCount(ctx, count); - for (unsigned i = 1; i <= count; i++) { - DescRec& rec = ird.getRecord(i); - const Plan_expr* expr = exprRow->m_exprList[i]; - const SqlType& sqlType = expr->sqlType(); - // data type - SQLSMALLINT desc_TYPE = sqlType.type(); - rec.setField(SQL_DESC_TYPE, desc_TYPE); - SQLSMALLINT desc_CONCISE_TYPE = desc_TYPE; - rec.setField(SQL_DESC_CONCISE_TYPE, desc_CONCISE_TYPE); - SQLSMALLINT desc_DESC_DATETIME_INTERVAL_CODE = 0; - rec.setField(SQL_DESC_DATETIME_INTERVAL_CODE, desc_DESC_DATETIME_INTERVAL_CODE); - // nullable - SQLSMALLINT desc_NULLABLE = sqlType.nullable() ? SQL_NULLABLE : SQL_NO_NULLS; - rec.setField(SQL_DESC_NULLABLE, desc_NULLABLE); - // unsigned - SQLSMALLINT desc_UNSIGNED; - switch (sqlType.type()) { - case SQL_SMALLINT: - case SQL_INTEGER: - case SQL_BIGINT: - desc_UNSIGNED = sqlType.unSigned() ? SQL_TRUE : SQL_FALSE; - break; - default: - desc_UNSIGNED = SQL_TRUE; // thus spake microsoft - break; - } - rec.setField(SQL_DESC_UNSIGNED, desc_UNSIGNED); - // sizes - SQLUINTEGER desc_LENGTH = sqlType.length(); - rec.setField(SQL_DESC_LENGTH, desc_LENGTH); - SQLINTEGER desc_OCTET_LENGTH = sqlType.size(); - rec.setField(SQL_DESC_OCTET_LENGTH, desc_OCTET_LENGTH); - SQLINTEGER desc_DISPLAY_SIZE = sqlType.displaySize(); - rec.setField(SQL_DESC_DISPLAY_SIZE, desc_DISPLAY_SIZE); - // name - ctx_assert(i < exprRow->m_aliasList.size()); - const char* desc_NAME = exprRow->m_aliasList[i].c_str(); - rec.setField(SQL_DESC_NAME, desc_NAME); - } - ctx_log3(("describe %u columns done", count)); - stmtArea().setFunction(ctx, "SELECT CURSOR", SQL_DIAG_SELECT_CURSOR); -} - -// Exec_query - -Exec_query::Code::~Code() -{ -} - -Exec_query::Data::~Data() -{ - delete m_extRow; - m_extRow = 0; - delete[] m_extPos; - m_extPos = 0; -} - -Exec_query::~Exec_query() -{ -} - -const Exec_query* -Exec_query::getRawQuery() const -{ - ctx_assert(false); - return 0; -} - -void -Exec_query::bind(Ctx& ctx) -{ - const Code& code = getCode(); - const SqlSpecs& sqlSpecs = code.sqlSpecs(); - const unsigned count = sqlSpecs.count(); - // read ARD - DescArea& ard = descArea(Desc_usage_ARD); - const unsigned ardCount = ard.getCount(); - // create specification row - ExtSpecs extSpecs(count); - for (unsigned i = 1; i <= count; i++) { - ExtType extType; - if (i <= ardCount) { - OdbcData descData; - DescRec& rec = ard.getRecord(i); - // check for unbound column - rec.getField(ctx, SQL_DESC_DATA_PTR, descData); - SQLPOINTER desc_DATA_PTR = descData.type() != OdbcData::Undef ? descData.pointer() : 0; - if (desc_DATA_PTR == 0) { - extType.setType(ctx, ExtType::Unbound); - } else { - rec.getField(ctx, SQL_DESC_TYPE, descData); - if (descData.type() == OdbcData::Undef) { - ctx.pushStatus(Error::Gen, "query column %u: external type not defined", i); - return; - } - SQLSMALLINT desc_TYPE = descData.smallint(); - if (desc_TYPE == SQL_C_DEFAULT) { - if (i <= code.m_sqlSpecs.count()) - desc_TYPE = code.m_sqlSpecs.getEntry(i).sqlType().sqlcdefault(ctx); - } - switch (desc_TYPE) { - case SQL_C_CHAR: - case SQL_C_BINARY: - case SQL_C_SHORT: // for sun.jdbc.odbc - case SQL_C_SSHORT: - case SQL_C_USHORT: - case SQL_C_LONG: // for sun.jdbc.odbc - case SQL_C_SLONG: - case SQL_C_ULONG: - case SQL_C_SBIGINT: - case SQL_C_UBIGINT: - case SQL_C_FLOAT: - case SQL_C_DOUBLE: - case SQL_C_TYPE_TIMESTAMP: - break; - default: - ctx.pushStatus(Error::Gen, "query column %u: unsupported external type %d", i, (int)desc_TYPE); - return; - } - extType.setType(ctx, static_cast<ExtType::Type>(desc_TYPE)); - } - } else { - extType.setType(ctx, ExtType::Unbound); - } - const ExtSpec extSpec(extType); - extSpecs.setEntry(i, extSpec); - } - // create data row - ExtRow& extRow = *new ExtRow(extSpecs); - unsigned boundCount = 0; - for (unsigned i = 1; i <= count; i++) { - const ExtSpec& extSpec = extSpecs.getEntry(i); - if (extSpec.extType().type() != ExtType::Unbound) { - OdbcData descData; - DescRec& rec = ard.getRecord(i); - rec.getField(ctx, SQL_DESC_DATA_PTR, descData); - SQLPOINTER desc_DATA_PTR = descData.type() != OdbcData::Undef ? descData.pointer() : 0; - rec.getField(ctx, SQL_DESC_OCTET_LENGTH, descData); - SQLINTEGER desc_OCTET_LENGTH = descData.type() != OdbcData::Undef ? descData.integer() : 0; - rec.getField(ctx, SQL_DESC_INDICATOR_PTR, descData); - SQLINTEGER* desc_INDICATOR_PTR = descData.type() != OdbcData::Undef ? descData.integerPtr() : 0; - ctx_log4(("column %u: bind to 0x%x %d 0x%x", i, (unsigned)desc_DATA_PTR, (int)desc_OCTET_LENGTH, (unsigned)desc_INDICATOR_PTR)); - ExtField extField(extSpec, desc_DATA_PTR, desc_OCTET_LENGTH, desc_INDICATOR_PTR, i); - extRow.setEntry(i, extField); - boundCount++; - } else { - ExtField extField(extSpec, i); - extRow.setEntry(i, extField); - } - } - Data& data = getData(); - delete data.m_extRow; - data.m_extRow = &extRow; - ctx_log3(("bound %u out of %u columns", boundCount, count)); -} - -// execute and fetch - -void -Exec_query::execute(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - execImpl(ctx, ctl); - if (! ctx.ok()) - return; - data.initState(); - if (m_topLevel) { - stmtArea().setRowCount(ctx, data.getCount()); - } -} - -bool -Exec_query::fetch(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - if (data.fetch(ctx, ctl)) { - if (m_topLevel) { - stmtArea().setRowCount(ctx, data.getCount()); - } - if (data.m_extRow != 0) { - data.sqlRow().copyout(ctx, *data.m_extRow); - if (! ctx.ok()) - return false; - } - if (data.m_extPos != 0) { - const unsigned count = code.sqlSpecs().count(); - for (unsigned i = 0; i <= count; i++) { - data.m_extPos[i] = 0; - } - } - return true; - } - if (m_topLevel) { - stmtArea().setRowCount(ctx, data.getCount()); - if (ctx.ok()) { - ctx.setCode(SQL_NO_DATA); - } - } - return false; -} - -// odbc support - -void -Exec_query::sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind) -{ - const Code& code = getCode(); - Data& data = getData(); - const SqlSpecs& sqlSpecs = code.m_sqlSpecs; - const unsigned count = sqlSpecs.count(); - if (columnNumber == 0 || columnNumber > count) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "column index %u is not within 1 to %u", (unsigned)columnNumber, count); - return; - } - // create positions array on first use - if (data.m_extPos == 0) { - data.m_extPos = new int[1 + count]; - for (unsigned i = 0; i <= count; i++) { - data.m_extPos[i] = 0; - } - } - if (targetType == SQL_ARD_TYPE) { - // get type from ARD - DescArea& ard = descArea(Desc_usage_ARD); - const unsigned ardCount = ard.getCount(); - if (columnNumber <= ardCount) { - OdbcData descData; - DescRec& rec = ard.getRecord(columnNumber); - rec.getField(ctx, SQL_DESC_CONCISE_TYPE, descData); - if (descData.type() != OdbcData::Undef) { - targetType = descData.smallint(); - } - } - if (targetType == SQL_ARD_TYPE) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "output column %u type not bound - cannot use SQL_ARD_TYPE", (unsigned)columnNumber); - return; - } - } - ExtType extType; - if (targetValue != 0) { - extType.setType(ctx, static_cast<ExtType::Type>(targetType)); - // check if supported - if (! ctx.ok()) - return; - } else { - extType.setType(ctx, ExtType::Unbound); - } - ExtSpec extSpec(extType); - ExtField extField(extSpec, targetValue, bufferLength, strlen_or_Ind, columnNumber); - // copy out and update position - extField.setPos(data.m_extPos[columnNumber]); - const SqlRow& sqlRow = data.sqlRow(); - const SqlField& sqlField = sqlRow.getEntry(columnNumber); - sqlField.copyout(ctx, extField); - data.m_extPos[columnNumber] = extField.getPos(); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query.hpp deleted file mode 100644 index 97f98f859ffe6fdd9b2bc3cb26af7bce74445b5f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query.hpp +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_hpp -#define ODBC_CODEGEN_Code_query_hpp - -#include <common/common.hpp> -#include <common/DataRow.hpp> -#include <common/ResultArea.hpp> -#include "Code_stmt.hpp" - -class Plan_expr_row; -class Plan_table; -class Exec_expr_row; - -/** - * @class Plan_query - * @brief Base class for queries in PlanTree - */ -class Plan_query : public Plan_stmt { -public: - Plan_query(Plan_root* root); - virtual ~Plan_query() = 0; - void describe(Ctx& ctx); - virtual Plan_expr_row* getRow(); -}; - -inline -Plan_query::Plan_query(Plan_root* root) : - Plan_stmt(root) -{ -} - -/** - * @class Exec_query - * @brief Base class for executable queries. - * - * Executable queriable statement. - */ -class Exec_query : public Exec_stmt { -public: - class Code : public Exec_stmt::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code() = 0; - const SqlSpecs& sqlSpecs() const; - protected: - friend class Exec_query; - const SqlSpecs& m_sqlSpecs; // subclass must contain - }; - class Data : public Exec_stmt::Data, public ResultSet { - public: - Data(Exec_query* node, const SqlRow& sqlRow); - virtual ~Data() = 0; - const SqlRow& sqlRow() const; - ExtRow* extRow() const; - bool fetchImpl(Ctx& ctx, Ctl& ctl); - protected: - friend class Exec_query; - Exec_query* const m_node; - ExtRow* m_extRow; // output bindings - int* m_extPos; // positions for SQLGetData - }; - Exec_query(Exec_root* root); - virtual ~Exec_query() = 0; - void bind(Ctx& ctx); - void execute(Ctx& ctx, Ctl& ctl); - bool fetch(Ctx& ctx, Ctl& ctl); - // children - const Code& getCode() const; - Data& getData() const; - virtual const Exec_query* getRawQuery() const; - // odbc support - void sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind); -protected: - friend class Data; - virtual void execImpl(Ctx& ctx, Ctl& ctl) = 0; - virtual bool fetchImpl(Ctx& ctx, Ctl& ctl) = 0; -}; - -inline -Exec_query::Code::Code(const SqlSpecs& sqlSpecs) : - m_sqlSpecs(sqlSpecs) -{ -} - -inline const SqlSpecs& -Exec_query::Code::sqlSpecs() const -{ - return m_sqlSpecs; -} - -inline -Exec_query::Data::Data(Exec_query* node, const SqlRow& sqlRow) : - ResultSet(sqlRow), - m_node(node), - m_extRow(0), - m_extPos(0) -{ -} - -inline const SqlRow& -Exec_query::Data::sqlRow() const -{ - return static_cast<const SqlRow&>(m_dataRow); -} - -inline ExtRow* -Exec_query::Data::extRow() const -{ - return m_extRow; -} - -inline bool -Exec_query::Data::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - return m_node->fetchImpl(ctx, ctl); -} - -inline -Exec_query::Exec_query(Exec_root* root) : - Exec_stmt(root) -{ -} - -// children - -inline const Exec_query::Code& -Exec_query::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query::Data& -Exec_query::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.cpp deleted file mode 100644 index f52c41df802740f40cea20a06897ea19d11fa891..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_count.hpp" -#include "Code_column.hpp" -#include "Code_expr_row.hpp" -#include "Code_root.hpp" - -// Plan_query_count - -Plan_query_count::~Plan_query_count() -{ -} - -Plan_expr_row* -Plan_query_count::getRow() -{ - ctx_assert(m_exprRow != 0); - return m_exprRow; -} - -Plan_base* -Plan_query_count::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_exprRow != 0); - ctl.m_aggrok = true; - ctl.m_aggrin = false; - m_exprRow->analyze(ctx, ctl); - ctl.m_aggrok = false; - if (! ctx.ok()) - return 0; - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_count::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create code for the row based on query code - ctx_assert(m_exprRow != 0); - ctl.m_execQuery = execQuery; - Exec_expr_row* execRow = static_cast<Exec_expr_row*>(m_exprRow->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execRow != 0); - Exec_query_count* exec = new Exec_query_count(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // re-use SqlSpecs from the row - const SqlSpecs& sqlSpecs = execRow->getCode().sqlSpecs(); - Exec_query_count::Code& code = *new Exec_query_count::Code(sqlSpecs); - exec->setCode(code); - exec->setQuery(execQuery); - exec->setRow(execRow); - return exec; -} - -void -Plan_query_count::print(Ctx& ctx) -{ - ctx.print(" [query_count"); - Plan_base* a[] = { m_query, m_exprRow }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]"); -} - -// Exec_query_count - -Exec_query_count::Code::~Code() -{ -} - -Exec_query_count::Data::~Data() -{ -} - -Exec_query_count::~Exec_query_count() -{ -} - -const Exec_query* -Exec_query_count::getRawQuery() const -{ - ctx_assert(m_query != 0); - return m_query; -} - -void -Exec_query_count::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - // allocate the row based on subquery data - ctx_assert(m_exprRow != 0); - ctl.m_query = m_query; - m_exprRow->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // re-use SqlRow from the expression row - const SqlRow& sqlRow = m_exprRow->getData().sqlRow(); - Data& data = *new Data(this, sqlRow); - setData(data); -} - -void -Exec_query_count::execImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - // zero counters - ctx_assert(m_exprRow != 0); - m_exprRow->close(ctx); - data.m_done = false; - // execute the subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); -} - -bool -Exec_query_count::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - // returns one row only - if (data.m_done) - return false; - ctx_assert(m_query != 0 && m_exprRow != 0); - while (m_query->fetch(ctx, ctl)) { - // accumulate values - m_exprRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - } - data.m_done = true; - return true; -} - -void -Exec_query_count::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); - ctx_assert(m_exprRow != 0); - m_exprRow->close(ctx); -} - -void -Exec_query_count::print(Ctx& ctx) -{ - ctx.print(" [query_count"); - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.hpp deleted file mode 100644 index a094eba4519479cfbcf9820bab758f4e37e00c85..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_count.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_count_hpp -#define ODBC_CODEGEN_Code_query_count_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" -#include "Code_root.hpp" - -class Ctx; - -/** - * @class Plan_query_count - * @brief Select count and other aggregates (no group by) - */ -class Plan_query_count : public Plan_query { -public: - Plan_query_count(Plan_root* root); - virtual ~Plan_query_count(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setRow(Plan_expr_row* exprRow); -protected: - Plan_expr_row* getRow(); - Plan_query* m_query; - Plan_expr_row* m_exprRow; -}; - -inline -Plan_query_count::Plan_query_count(Plan_root* root) : - Plan_query(root), - m_query(0), - m_exprRow(0) -{ -} - -// children - -inline void -Plan_query_count::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_query_count::setRow(Plan_expr_row* exprRow) -{ - ctx_assert(exprRow != 0); - m_exprRow = exprRow; -} - -/** - * @class Exec_query_count - * @brief Select count and other aggregates (no group by) - */ -class Exec_query_count : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Exec_query_count; - // sets reference to Sqlspecs from the row - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_count* node, const SqlRow& sqlRow); - virtual ~Data(); - protected: - friend class Exec_query_count; - // sets reference to SqlRow from the row - bool m_done; // returns one row - }; - Exec_query_count(Exec_root* root); - virtual ~Exec_query_count(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - void setRow(Exec_expr_row* exprRow); - const Exec_query* getRawQuery() const; -protected: - Exec_query* m_query; - Exec_expr_row* m_exprRow; -}; - -inline -Exec_query_count::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(sqlSpecs) -{ -} - -inline -Exec_query_count::Data::Data(Exec_query_count* node, const SqlRow& sqlRow) : - Exec_query::Data(node, sqlRow) -{ -} - -inline -Exec_query_count::Exec_query_count(Exec_root* root) : - Exec_query(root), - m_query(0), - m_exprRow(0) -{ -} - -// children - -inline const Exec_query_count::Code& -Exec_query_count::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_count::Data& -Exec_query_count::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_count::setQuery(Exec_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Exec_query_count::setRow(Exec_expr_row* exprRow) -{ - ctx_assert(m_exprRow == 0 && exprRow != 0); - m_exprRow = exprRow; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.cpp deleted file mode 100644 index 4cbfbfe812d69f02b315c6583d4da7840d70d642..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <algorithm> -#include "Code_query_distinct.hpp" -#include "Code_root.hpp" - -// Plan_query_distinct - -Plan_query_distinct::~Plan_query_distinct() -{ -} - -Plan_expr_row* -Plan_query_distinct::getRow() -{ - ctx_assert(m_query != 0); - return m_query->getRow(); -} - -Plan_base* -Plan_query_distinct::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_distinct::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // the exec node - Exec_query_distinct* exec = new Exec_query_distinct(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // re-use SqlSpecs from subquery - const Exec_query::Code& codeQuery = execQuery->getCode(); - const SqlSpecs& sqlSpecs = codeQuery.sqlSpecs(); - Exec_query_distinct::Code& code = *new Exec_query_distinct::Code(sqlSpecs); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_query_distinct::print(Ctx& ctx) -{ - ctx.print(" [query_distinct"); - Plan_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_query_distinct - -Exec_query_distinct::Code::~Code() -{ -} - -Exec_query_distinct::Data::~Data() -{ - for (DistinctList::iterator i = m_groupList.begin(); i != m_groupList.end(); i++) { - delete (*i).first; - } -} - -Exec_query_distinct::~Exec_query_distinct() -{ -} - -const Exec_query* -Exec_query_distinct::getRawQuery() const -{ - ctx_assert(m_query != 0); - return m_query->getRawQuery(); -} - -void -Exec_query_distinct::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - Data& data = *new Data(this, getCode().sqlSpecs()); - setData(data); -} - -void -Exec_query_distinct::execImpl(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); -} - -bool -DistinctLess::operator()(const SqlRow* s1, const SqlRow* s2) const -{ - ctx_assert(s1 != 0 && s2 != 0); - const SqlRow& r1 = *s1; - const SqlRow& r2 = *s2; - for (unsigned i = 1; i <= r1.count(); i++) { - const SqlField& f1 = r1.getEntry(i); - const SqlField& f2 = r2.getEntry(i); - // nulls last is default in oracle - const bool f1null = f1.sqlNull(); - const bool f2null = f2.sqlNull(); - if (f1null && f2null) - continue; - if (! f1null && f2null) - return true; - if (f1null && ! f2null) - return false; - if (f1.less(f2)) - return true; - if (f2.less(f1)) - return false; - } - return false; -} - -bool -Exec_query_distinct::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - ctx_assert(m_query != 0); - if (! data.m_grouped) { - // read and group all rows - while (m_query->fetch(ctx, ctl)) { - const SqlRow* dataRow = &m_query->getData().sqlRow(); - DistinctList::iterator i = data.m_groupList.find(dataRow); - if (i != data.m_groupList.end()) - continue; - unsigned index = data.m_count++; - dataRow = dataRow->copy(); - const DistinctList::value_type groupPair(dataRow, index); - data.m_groupList.insert(groupPair); - data.m_groupVector.push_back(dataRow); - } - if (! ctx.ok()) - return false; - data.m_index = 0; - data.m_grouped = true; - } - ctx_assert(data.m_count == data.m_groupVector.size()); - if (data.m_index < data.m_count) { - const SqlRow* currRow = data.m_groupVector[data.m_index]; - // make our SqlRow reference to it - for (unsigned i = 1; i <= data.m_sqlRow.count(); i++) { - const SqlField& currField = currRow->getEntry(i); - SqlSpec sqlSpec(currField.sqlSpec(), SqlSpec::Reference); - SqlField sqlField(sqlSpec, &currField); - data.m_sqlRow.setEntry(i, sqlField); - } - data.m_index++; - return true; - } - return false; -} - -void -Exec_query_distinct::close(Ctx& ctx) -{ - Data& data = getData(); - ctx_assert(m_query != 0); - m_query->close(ctx); - data.m_grouped = false; - data.m_count = 0; - for (DistinctList::iterator i = data.m_groupList.begin(); i != data.m_groupList.end(); i++) { - delete (*i).first; - } - data.m_groupList.clear(); - data.m_groupVector.clear(); -} - -void -Exec_query_distinct::print(Ctx& ctx) -{ - ctx.print(" [query_distinct"); - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.hpp deleted file mode 100644 index 62c46bda90131994027273ea9858814923dcff66..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_distinct.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_distinct_hpp -#define ODBC_CODEGEN_Code_query_distinct_hpp - -#include <functional> -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_query_distinct - * @brief Group-by node in PlanTree - */ -class Plan_query_distinct : public Plan_query { -public: - Plan_query_distinct(Plan_root* root); - virtual ~Plan_query_distinct(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - Plan_expr_row* getRow(); -protected: - Plan_query* m_query; -}; - -inline -Plan_query_distinct::Plan_query_distinct(Plan_root* root) : - Plan_query(root), - m_query(0) -{ -} - -// children - -inline void -Plan_query_distinct::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -/** - * Distinct preserves order of input rows so we use 2 data structures: - * map<row> = index and vector<index> = row (index >= 0). - */ - -class Exec_query_distinct; - -struct DistinctLess : std::binary_function<const SqlRow*, const SqlRow*, bool> { - bool operator()(const SqlRow* s1, const SqlRow* s2) const; -}; - -typedef std::map<const SqlRow*, unsigned, DistinctLess> DistinctList; - -typedef std::vector<const SqlRow*> DistinctVector; - -/** - * @class Exec_query_distinct - * @brief Group-by node in ExecTree - */ -class Exec_query_distinct : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Exec_query_distinct; - // sets reference to Sqlspecs from subquery - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_distinct* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_distinct; - SqlRow m_sqlRow; // current row - bool m_grouped; // fetch and group-by done - unsigned m_count; - DistinctList m_groupList; - DistinctVector m_groupVector; - unsigned m_index; - }; - Exec_query_distinct(Exec_root* root); - virtual ~Exec_query_distinct(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - const Exec_query* getRawQuery() const; -protected: - friend class Exec_query; - Exec_query* m_query; -}; - -inline -Exec_query_distinct::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(sqlSpecs) -{ -} - -inline -Exec_query_distinct::Data::Data(Exec_query_distinct* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_grouped(false), - m_count(0), - m_index(0) -{ -} - -inline -Exec_query_distinct::Exec_query_distinct(Exec_root* root) : - Exec_query(root), - m_query(0) -{ -} - -// children - -inline const Exec_query_distinct::Code& -Exec_query_distinct::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_distinct::Data& -Exec_query_distinct::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_distinct::setQuery(Exec_query* query) -{ - ctx_assert(m_query == 0 && query != 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.cpp deleted file mode 100644 index 934a24d182d8476b7532018dde94adf08313155b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_query_filter.hpp" -#include "Code_query_join.hpp" -#include "Code_query_scan.hpp" -#include "Code_root.hpp" - -// Plan_query_filter - -Plan_query_filter::~Plan_query_filter() -{ -} - -Plan_base* -Plan_query_filter::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_pred != 0); - m_pred->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_filter::codegen(Ctx& ctx, Ctl& ctl) -{ - // generate code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create code for the predicate based on query code - Exec_pred* execPred = 0; - ctl.m_execQuery = execQuery; - ctx_assert(m_topTable != 0); - ctl.m_topTable = m_topTable; - ctx_assert(m_pred != 0); - execPred = static_cast<Exec_pred*>(m_pred->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execPred != 0); - ctl.m_topTable = 0; - // re-use SqlSpecs from subquery - const Exec_query::Code& codeQuery = execQuery->getCode(); - const SqlSpecs& sqlSpecs = codeQuery.sqlSpecs(); - Exec_query_filter* exec = new Exec_query_filter(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - Exec_query_filter::Code& code = *new Exec_query_filter::Code(sqlSpecs); - exec->setCode(code); - exec->setQuery(execQuery); - exec->setPred(execPred); - return exec; -} - -void -Plan_query_filter::print(Ctx& ctx) -{ - ctx.print(" [query_filter"); - Plan_base* a[] = { m_query, m_pred }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_query_filter - -Exec_query_filter::Code::~Code() -{ -} - -Exec_query_filter::Data::~Data() -{ -} - -Exec_query_filter::~Exec_query_filter() -{ -} - -void -Exec_query_filter::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate the predicate - ctl.m_query = m_query; - ctx_assert(m_pred != 0); - m_pred->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // re-use SqlRow from subquery - Exec_query::Data& dataQuery = m_query->getData(); - Data& data = *new Data(this, dataQuery.sqlRow()); - setData(data); -} - -void -Exec_query_filter::execImpl(Ctx& ctx, Ctl& ctl) -{ - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); -} - -bool -Exec_query_filter::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - // invoke fetch on subquery until predicate is true - ctx_assert(m_query != 0); - while (m_query->fetch(ctx, ctl)) { - ctx_assert(m_pred != 0); - m_pred->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - if (m_pred->getData().getValue() == Pred_value_true) { - ctl.m_postEval = true; - m_pred->evaluate(ctx, ctl); - ctl.m_postEval = false; - return true; - } - } - return false; -} - -void -Exec_query_filter::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); - ctx_assert(m_pred != 0); - m_pred->close(ctx); -} - -void -Exec_query_filter::print(Ctx& ctx) -{ - ctx.print(" [query_filter"); - Exec_base* a[] = { m_query, m_pred }; - printList(ctx, a, 2); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.hpp deleted file mode 100644 index 60cbf0f86a73020df4f10042b441129a3ebad6f5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_filter.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_filter_hpp -#define ODBC_CODEGEN_Code_query_filter_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table_list.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_query_filter - * @brief Filter node in PlanTree - */ -class Plan_query_filter : public Plan_query { -public: - Plan_query_filter(Plan_root* root); - virtual ~Plan_query_filter(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setPred(Plan_pred* pred); -protected: - friend class Plan_select; - friend class Plan_update; - friend class Plan_delete; - Plan_query* m_query; - Plan_pred* m_pred; - Plan_table* m_topTable; // top level table for interpreted progs -}; - -inline -Plan_query_filter::Plan_query_filter(Plan_root* root) : - Plan_query(root), - m_query(0), - m_pred(0), - m_topTable(0) -{ -} - -// children - -inline void -Plan_query_filter::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_query_filter::setPred(Plan_pred* pred) -{ - ctx_assert(pred != 0); - m_pred = pred; -} - -/** - * @class Exec_query_filter - * @brief Filter node in ExecTree - */ -class Exec_query_filter : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Exec_query_filter; - // sets reference to SqlSpecs from subquery - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_filter* node, const SqlRow& sqlRow); - virtual ~Data(); - protected: - friend class Exec_query_filter; - // sets reference to SqlRow from subquery - }; - Exec_query_filter(Exec_root* root); - virtual ~Exec_query_filter(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - void setPred(Exec_pred* pred); -protected: - Exec_query* m_query; - Exec_pred* m_pred; -}; - -inline -Exec_query_filter::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(sqlSpecs) -{ -} - -inline -Exec_query_filter::Data::Data(Exec_query_filter* node, const SqlRow& sqlRow) : - Exec_query::Data(node, sqlRow) -{ -} - -inline -Exec_query_filter::Exec_query_filter(Exec_root* root) : - Exec_query(root), - m_query(0), - m_pred(0) -{ -} - -// children - -inline const Exec_query_filter::Code& -Exec_query_filter::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_filter::Data& -Exec_query_filter::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_filter::setQuery(Exec_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Exec_query_filter::setPred(Exec_pred* pred) -{ - ctx_assert(pred != 0); - m_pred = pred; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.cpp deleted file mode 100644 index c3019efaa851076826f45c23e12c2c74dbb7548a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.cpp +++ /dev/null @@ -1,301 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <algorithm> -#include "Code_query_group.hpp" -#include "Code_root.hpp" - -// Plan_query_group - -Plan_query_group::~Plan_query_group() -{ -} - -Plan_expr_row* -Plan_query_group::getRow() -{ - ctx_assert(m_dataRow != 0); - return m_dataRow; -} - -Plan_base* -Plan_query_group::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_dataRow != 0); - m_dataRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_groupRow != 0); - m_groupRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - if (m_havingPred != 0) { - ctl.m_having = true; - m_havingPred->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctl.m_having = false; - } - return this; -} - -Exec_base* -Plan_query_group::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create code for the rows based on query code - ctl.m_execQuery = execQuery; - ctx_assert(m_dataRow != 0); - Exec_expr_row* execDataRow = static_cast<Exec_expr_row*>(m_dataRow->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execDataRow != 0); - ctx_assert(m_groupRow != 0); - Exec_expr_row* execGroupRow = static_cast<Exec_expr_row*>(m_groupRow->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execGroupRow != 0); - Exec_pred* execHavingPred = 0; - if (m_havingPred != 0) { - ctl.m_having = true; - execHavingPred = static_cast<Exec_pred*>(m_havingPred->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execHavingPred != 0); - ctl.m_having = false; - } - // the exec node - Exec_query_group* exec = new Exec_query_group(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // re-use SqlSpecs from data row - const SqlSpecs& sqlSpecs = execDataRow->getCode().sqlSpecs(); - Exec_query_group::Code& code = *new Exec_query_group::Code(sqlSpecs); - exec->setCode(code); - exec->setQuery(execQuery); - exec->setDataRow(execDataRow); - exec->setGroupRow(execGroupRow); - if (execHavingPred != 0) - exec->setHavingPred(execHavingPred); - return exec; -} - -void -Plan_query_group::print(Ctx& ctx) -{ - ctx.print(" [query_group"); - Plan_base* a[] = { m_query, m_dataRow, m_groupRow }; - printList(ctx, a, 3); - ctx.print("]"); -} - -// Exec_query_group - -Exec_query_group::Code::~Code() -{ -} - -Exec_query_group::Data::~Data() -{ - for (GroupList::iterator i = m_groupList.begin(); i != m_groupList.end(); i++) { - delete (*i).first; - } -} - -Exec_query_group::~Exec_query_group() -{ -} - -const Exec_query* -Exec_query_group::getRawQuery() const -{ - ctx_assert(m_query != 0); - return m_query; -} - -void -Exec_query_group::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate rows based on subquery data - ctl.m_query = m_query; - ctx_assert(m_dataRow != 0); - m_dataRow->alloc(ctx, ctl); - if (! ctx.ok()) - return; - ctx_assert(m_groupRow != 0); - m_groupRow->alloc(ctx, ctl); - if (! ctx.ok()) - return; - if (m_havingPred != 0) { - m_havingPred->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - Data& data = *new Data(this, getCode().sqlSpecs()); - setData(data); -} - -void -Exec_query_group::execImpl(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); -} - -bool -GroupLess::operator()(const SqlRow* s1, const SqlRow* s2) const -{ - ctx_assert(s1 != 0 && s2 != 0); - const SqlRow& r1 = *s1; - const SqlRow& r2 = *s2; - for (unsigned i = 1; i <= r1.count(); i++) { - const SqlField& f1 = r1.getEntry(i); - const SqlField& f2 = r2.getEntry(i); - // nulls last is default in oracle - const bool f1null = f1.sqlNull(); - const bool f2null = f2.sqlNull(); - if (f1null && f2null) - continue; - if (! f1null && f2null) - return true; - if (f1null && ! f2null) - return false; - if (f1.less(f2)) - return true; - if (f2.less(f1)) - return false; - } - return false; -} - -bool -Exec_query_group::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - ctx_assert(m_query != 0 && m_groupRow != 0); - if (! data.m_grouped) { - // read and group all rows - while (m_query->fetch(ctx, ctl)) { - // evaluate and insert group-by values - m_groupRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - const SqlRow* groupRow = 0; - unsigned index = 0; - bool init; - GroupList::iterator i = data.m_groupList.find(&m_groupRow->getData().sqlRow()); - if (i == data.m_groupList.end()) { - groupRow = m_groupRow->getData().sqlRow().copy(); - index = ++data.m_count; - const GroupList::value_type groupPair(groupRow, index); - data.m_groupList.insert(groupPair); - init = true; - } else { - groupRow = (*i).first; - index = (*i).second; - ctx_assert(groupRow != 0 && index != 0); - init = false; - } - // evaluate rows saving expression values at index position - ctl.m_groupIndex = index; - ctl.m_groupInit = init; - m_dataRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - if (m_havingPred != 0) { - m_havingPred->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - } - if (ctl.m_sortRow != 0) { - ctl.m_sortRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - } - ctl.m_groupIndex = 0; - } - if (! ctx.ok()) - return false; - data.m_iterator = data.m_groupList.begin(); - data.m_grouped = true; - } - while (data.m_iterator != data.m_groupList.end()) { - const SqlRow* groupRow = (*data.m_iterator).first; - const unsigned index = (*data.m_iterator).second; - ctx_assert(groupRow != 0 && index != 0); - if (m_havingPred != 0) { - Pred_value v = m_havingPred->getData().groupValue(index); - if (v != Pred_value_true) { - data.m_iterator++; - continue; - } - } - // make our SqlRow reference to the saved values - for (unsigned i = 1; i <= data.m_sqlRow.count(); i++) { - const SqlField& currField = m_dataRow->getExpr(i)->getData().groupField(index); - SqlSpec sqlSpec(currField.sqlSpec(), SqlSpec::Reference); - SqlField sqlField(sqlSpec, &currField); - data.m_sqlRow.setEntry(i, sqlField); - } - // send group index up for possible order by - ctl.m_groupIndex = index; - data.m_iterator++; - return true; - } - return false; -} - -void -Exec_query_group::close(Ctx& ctx) -{ - Data& data = getData(); - ctx_assert(m_query != 0); - m_query->close(ctx); - ctx_assert(m_dataRow != 0); - m_dataRow->close(ctx); - ctx_assert(m_groupRow != 0); - m_groupRow->close(ctx); - if (m_havingPred != 0) - m_havingPred->close(ctx); - data.m_grouped = false; - data.m_count = 0; - for (GroupList::iterator i = data.m_groupList.begin(); i != data.m_groupList.end(); i++) { - delete (*i).first; - } - data.m_groupList.clear(); -} - -void -Exec_query_group::print(Ctx& ctx) -{ - ctx.print(" [query_group"); - Exec_base* a[] = { m_query, m_dataRow, m_groupRow }; - printList(ctx, a, 3); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.hpp deleted file mode 100644 index e79022c52841f309473e056918271fa4dd607cd6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_group.hpp +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_group_hpp -#define ODBC_CODEGEN_Code_query_group_hpp - -#include <functional> -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_query_group - * @brief Group-by node in PlanTree - */ -class Plan_query_group : public Plan_query { -public: - Plan_query_group(Plan_root* root); - virtual ~Plan_query_group(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setDataRow(Plan_expr_row* dataRow); - void setGroupRow(Plan_expr_row* groupRow); - void setHavingPred(Plan_pred* havingPred); - Plan_expr_row* getRow(); -protected: - Plan_query* m_query; - Plan_expr_row* m_dataRow; - Plan_expr_row* m_groupRow; - Plan_pred* m_havingPred; -}; - -inline -Plan_query_group::Plan_query_group(Plan_root* root) : - Plan_query(root), - m_query(0), - m_dataRow(0), - m_groupRow(0), - m_havingPred(0) -{ -} - -// children - -inline void -Plan_query_group::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_query_group::setDataRow(Plan_expr_row* dataRow) -{ - ctx_assert(dataRow != 0); - m_dataRow = dataRow; -} - -inline void -Plan_query_group::setGroupRow(Plan_expr_row* groupRow) -{ - ctx_assert(groupRow != 0); - m_groupRow = groupRow; -} - -inline void -Plan_query_group::setHavingPred(Plan_pred* havingPred) -{ - ctx_assert(havingPred != 0); - m_havingPred = havingPred; -} - -/** - * Group-by uses a std::map. Key is values grouped by. Data is unique index - * (starting at 1) into arrays in expression data. - */ - -class Exec_query_group; - -struct GroupLess : std::binary_function<const SqlRow*, const SqlRow*, bool> { - bool operator()(const SqlRow* s1, const SqlRow* s2) const; -}; - -typedef std::map<const SqlRow*, unsigned, GroupLess> GroupList; - -/** - * @class Exec_query_group - * @brief Group-by node in ExecTree - */ -class Exec_query_group : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Exec_query_group; - // sets reference to Sqlspecs from subquery - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_group* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_group; - SqlRow m_sqlRow; // current row - bool m_grouped; // fetch and group-by done - unsigned m_count; - GroupList m_groupList; - GroupList::iterator m_iterator; - }; - Exec_query_group(Exec_root* root); - virtual ~Exec_query_group(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - void setDataRow(Exec_expr_row* dataRow); - void setGroupRow(Exec_expr_row* groupRow); - void setHavingPred(Exec_pred* havingPred); - const Exec_query* getRawQuery() const; -protected: - friend class Exec_query; - Exec_query* m_query; - Exec_expr_row* m_dataRow; - Exec_expr_row* m_groupRow; - Exec_pred* m_havingPred; -}; - -inline -Exec_query_group::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(sqlSpecs) -{ -} - -inline -Exec_query_group::Data::Data(Exec_query_group* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_grouped(false), - m_count(0) -{ -} - -inline -Exec_query_group::Exec_query_group(Exec_root* root) : - Exec_query(root), - m_query(0), - m_dataRow(0), - m_groupRow(0), - m_havingPred(0) -{ -} - -// children - -inline const Exec_query_group::Code& -Exec_query_group::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_group::Data& -Exec_query_group::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_group::setQuery(Exec_query* query) -{ - ctx_assert(m_query == 0 && query != 0); - m_query = query; -} - -inline void -Exec_query_group::setDataRow(Exec_expr_row* dataRow) -{ - ctx_assert(m_dataRow == 0 && dataRow != 0); - m_dataRow = dataRow; -} - -inline void -Exec_query_group::setGroupRow(Exec_expr_row* groupRow) -{ - ctx_assert(m_groupRow == 0 && groupRow != 0); - m_groupRow = groupRow; -} - -inline void -Exec_query_group::setHavingPred(Exec_pred* havingPred) -{ - ctx_assert(m_havingPred == 0 && havingPred != 0); - m_havingPred = havingPred; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.cpp deleted file mode 100644 index ee19d6123cc50c2c483f03c03ff8272c8b7e761b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_index.hpp" -#include "Code_column.hpp" -#include "Code_expr.hpp" -#include "Code_root.hpp" - -// Plan_query_index - -Plan_query_index::~Plan_query_index() -{ -} - -Plan_base* -Plan_query_index::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_index::codegen(Ctx& ctx, Ctl& ctl) -{ - // set up - ctx_assert(m_table != 0 && m_index != 0); - const BaseString& tableName = m_table->getName(); - ctx_assert(m_index->m_dictIndex != 0); - const DictIndex& dictIndex = *m_index->m_dictIndex; - const BaseString& indexName = dictIndex.getName(); - const unsigned keyCount = m_index->m_keyCount; - const ColumnVector& columns = m_table->exprColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_query_index::Code& code = *new Exec_query_index::Code(keyCount, attrCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_indexName = strcpy(new char[indexName.length() + 1], indexName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictIndex.getColumn(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = k - 1; // index column order - } - // matching expressions - ctx_assert(m_index->m_keyFound); - const ExprVector& keyEq = m_index->m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // queried attributes - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - const SqlType& sqlType = dictColumn.sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_sqlSpecs.setEntry(i, sqlSpec); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_query_index* exec = new Exec_query_index(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - return exec; -} - -void -Plan_query_index::print(Ctx& ctx) -{ - ctx.print(" [query_index"); - Plan_base* a[] = { m_table }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_query_index - -Exec_query_index::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; - delete[] m_attrId; -} - -Exec_query_index::Data::~Data() -{ - delete[] m_recAttr; -} - -Exec_query_index::~Exec_query_index() -{ -} - -void -Exec_query_index::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // create data - Data& data = *new Data(this, code.sqlSpecs()); - setData(data); - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - // needed for isNULL - data.m_recAttr = new NdbRecAttr* [1 + code.m_attrCount]; - for (unsigned i = 0; i <= code.m_attrCount; i++) { - data.m_recAttr[i] = 0; - } -} - -void -Exec_query_index::close(Ctx& ctx) -{ - Data& data = getData(); - if (data.m_con != 0) { - Ndb* const ndb = ndbObject(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - data.m_done = true; - ctx_log2(("lookup closed at statement close")); - } -} - -void -Exec_query_index::print(Ctx& ctx) -{ - ctx.print(" [query_index"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" keyId="); - for (unsigned i = 1; i <= code.m_keyCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_keyId[i]); - } - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" table=%s", code.m_tableName); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.hpp deleted file mode 100644 index 87affd5058080f3014759f4c4ca11ff464e0c7e8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_index.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_index_hpp -#define ODBC_CODEGEN_Code_query_index_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" - -class Ctx; -class StmtArea; -class NdbConnection; -class NdbOperation; -class NdbRecAttr; - -/** - * @class Plan_query_index - * @brief Full select (no where clause) - */ -class Plan_query_index : public Plan_query { -public: - Plan_query_index(Plan_root* root); - virtual ~Plan_query_index(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table, Plan_table::Index* index); -protected: - Plan_table* m_table; - Plan_table::Index* m_index; -}; - -inline -Plan_query_index::Plan_query_index(Plan_root* root) : - Plan_query(root), - m_table(0), - m_index(0) -{ -} - -// children - -inline void -Plan_query_index::setTable(Plan_table* table, Plan_table::Index* index) -{ - ctx_assert(table != 0 && index != 0 && index == &table->m_indexList[index->m_pos] && index->m_pos != 0); - m_table = table; - m_index = index; -} - -/** - * @class Exec_query_index - * @brief Full select (no where clause) - */ -class Exec_query_index : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(unsigned keyCount, unsigned attrCount); - virtual ~Code(); - protected: - friend class Plan_query_index; - friend class Exec_query_index; - const char* m_tableName; - const char* m_indexName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - unsigned m_attrCount; - SqlSpecs m_sqlSpecs; - NdbAttrId* m_attrId; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_index* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_index; - SqlRow m_sqlRow; - NdbConnection* m_con; - NdbOperation* m_op; - NdbRecAttr** m_recAttr; - bool m_done; // returns one row - }; - Exec_query_index(Exec_root* root); - virtual ~Exec_query_index(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_query_index::Code::Code(unsigned keyCount, unsigned attrCount) : - Exec_query::Code(m_sqlSpecs), - m_tableName(0), - m_indexName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_attrCount(attrCount), - m_sqlSpecs(attrCount), - m_attrId(0) -{ -} - -inline -Exec_query_index::Data::Data(Exec_query_index* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_con(0), - m_op(0), - m_recAttr(0), - m_done(false) -{ -} - -inline -Exec_query_index::Exec_query_index(Exec_root* root) : - Exec_query(root) -{ -} - -// children - -inline const Exec_query_index::Code& -Exec_query_index::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_index::Data& -Exec_query_index::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.cpp deleted file mode 100644 index 89aafe13610c4a1bc7bb01f0292b8ff6c49d9b2e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_query.hpp" -#include "Code_query_join.hpp" -#include "Code_query_scan.hpp" -#include "Code_root.hpp" - -// Plan_query_join - -Plan_query_join::~Plan_query_join() -{ -} - -Plan_base* -Plan_query_join::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_inner != 0); - m_inner->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_outer != 0); - m_outer->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_join::codegen(Ctx& ctx, Ctl& ctl) -{ - // generate code for subqueries - ctx_assert(m_inner != 0); - Exec_query* execInner = static_cast<Exec_query*>(m_inner->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execInner != 0); - ctx_assert(m_outer != 0); - ctl.m_execQuery = execInner; - Exec_query* execOuter = static_cast<Exec_query*>(m_outer->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execOuter != 0); - // combine sql specs from subqueries - const SqlSpecs& specsInner = execInner->getCode().sqlSpecs(); - const SqlSpecs& specsOuter = execOuter->getCode().sqlSpecs(); - SqlSpecs sqlSpecs(specsInner.count() + specsOuter.count()); - for (unsigned i = 1; i <= specsInner.count(); i++) { - const SqlSpec sqlSpec(specsInner.getEntry(i), SqlSpec::Reference); - sqlSpecs.setEntry(i, sqlSpec); - } - for (unsigned i = 1; i <= specsOuter.count(); i++) { - const SqlSpec sqlSpec(specsOuter.getEntry(i), SqlSpec::Reference); - sqlSpecs.setEntry(specsInner.count() + i, sqlSpec); - } - // create the code - Exec_query_join* exec = new Exec_query_join(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setInner(execInner); - exec->setOuter(execOuter); - Exec_query_join::Code& code = *new Exec_query_join::Code(sqlSpecs); - exec->setCode(code); - return exec; -} - -void -Plan_query_join::print(Ctx& ctx) -{ - ctx.print(" [query_join"); - Plan_base* a[] = { m_inner, m_outer }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_query_join - -Exec_query_join::Code::~Code() -{ -} - -Exec_query_join::Data::~Data() -{ -} - -Exec_query_join::~Exec_query_join() -{ -} - -void -Exec_query_join::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subqueries - ctx_assert(m_inner != 0); - m_inner->alloc(ctx, ctl); - if (! ctx.ok()) - return; - ctx_assert(m_outer != 0); - ctl.m_query = m_inner; - m_outer->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // combine data rows from subqueries - const Code& code = getCode(); - const SqlRow& rowInner = m_inner->getData().sqlRow(); - const SqlRow& rowOuter = m_outer->getData().sqlRow(); - SqlRow sqlRow(code.m_sqlSpecs); - for (unsigned i = 1; i <= rowInner.count(); i++) { - const SqlSpec& sqlSpec = code.m_sqlSpecs.getEntry(i); - const SqlField sqlField(sqlSpec, &rowInner.getEntry(i)); - sqlRow.setEntry(i, sqlField); - } - for (unsigned i = 1; i <= rowOuter.count(); i++) { - const SqlSpec& sqlSpec = code.m_sqlSpecs.getEntry(rowInner.count() + i); - const SqlField sqlField(sqlSpec, &rowOuter.getEntry(i)); - sqlRow.setEntry(rowInner.count() + i, sqlField); - } - // create the data - Data& data = *new Data(this, sqlRow); - setData(data); -} - -void -Exec_query_join::execImpl(Ctx& ctx, Ctl& ctl) -{ - // execute only inner query - ctx_assert(m_inner != 0); - m_inner->execute(ctx, ctl); -} - -bool -Exec_query_join::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_inner != 0); - ctx_assert(m_outer != 0); - if (getData().getState() == ResultSet::State_init) { - // fetch first row from inner - if (! m_inner->fetch(ctx, ctl)) - return false; - } - while (1) { - if (m_outer->getData().getState() == ResultSet::State_end) { - // execute or re-execute outer - Ctl ctl(0); - m_outer->close(ctx); - if (! ctx.ok()) - return false; - m_outer->execute(ctx, ctl); - if (! ctx.ok()) - return false; - } - if (! m_outer->fetch(ctx, ctl)) { - if (! ctx.ok()) - return false; - // fetch next row from inner - if (! m_inner->fetch(ctx, ctl)) - return false; - } - else - return true; - } -} - -void -Exec_query_join::close(Ctx& ctx) -{ - ctx_assert(m_inner != 0); - m_inner->close(ctx); - ctx_assert(m_outer != 0); - m_outer->close(ctx); -} - -void -Exec_query_join::print(Ctx& ctx) -{ - ctx.print(" [query_join"); - Exec_base* a[] = { m_inner, m_outer }; - printList(ctx, a, 2); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.hpp deleted file mode 100644 index f6ac9205329d035c62d76007bd5b05b40bf975d1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_join.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_join_hpp -#define ODBC_CODEGEN_Code_query_join_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table_list.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_query_join - * @brief Filter node in PlanTree - */ -class Plan_query_join : public Plan_query { -public: - Plan_query_join(Plan_root* root); - virtual ~Plan_query_join(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setInner(Plan_query* query); - void setOuter(Plan_query* query); -protected: - Plan_query* m_inner; - Plan_query* m_outer; -}; - -inline -Plan_query_join::Plan_query_join(Plan_root* root) : - Plan_query(root), - m_inner(0), - m_outer(0) -{ -} - -// children - -inline void -Plan_query_join::setInner(Plan_query* query) -{ - ctx_assert(query != 0); - m_inner = query; -} - -inline void -Plan_query_join::setOuter(Plan_query* query) -{ - ctx_assert(query != 0); - m_outer = query; -} - -/** - * @class Exec_query_join - * @brief Filter node in ExecTree - */ -class Exec_query_join : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Exec_query_join; - SqlSpecs m_sqlSpecs; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_join* node, const SqlRow& sqlRow); - virtual ~Data(); - protected: - friend class Exec_query_join; - SqlRow m_sqlRow; - }; - Exec_query_join(Exec_root* root); - virtual ~Exec_query_join(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setInner(Exec_query* query); - void setOuter(Exec_query* query); -protected: - Exec_query* m_inner; - Exec_query* m_outer; -}; - -inline -Exec_query_join::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(m_sqlSpecs), - m_sqlSpecs(sqlSpecs) -{ -} - -inline -Exec_query_join::Data::Data(Exec_query_join* node, const SqlRow& sqlRow) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlRow) -{ -} - -inline -Exec_query_join::Exec_query_join(Exec_root* root) : - Exec_query(root), - m_inner(0), - m_outer(0) -{ -} - -// children - -inline const Exec_query_join::Code& -Exec_query_join::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_join::Data& -Exec_query_join::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_join::setInner(Exec_query* query) -{ - ctx_assert(query != 0); - m_inner = query; -} - -inline void -Exec_query_join::setOuter(Exec_query* query) -{ - ctx_assert(query != 0); - m_outer = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.cpp deleted file mode 100644 index bad4199190bcb9b69afb1decd03808ba7b9021fb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_lookup.hpp" -#include "Code_column.hpp" -#include "Code_expr.hpp" -#include "Code_root.hpp" - -// Plan_query_lookup - -Plan_query_lookup::~Plan_query_lookup() -{ -} - -Plan_base* -Plan_query_lookup::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_lookup::codegen(Ctx& ctx, Ctl& ctl) -{ - // set up - ctx_assert(m_table != 0); - const BaseString& tableName = m_table->getName(); - const DictTable& dictTable = m_table->dictTable(); - const unsigned keyCount = dictTable.keyCount(); - const ColumnVector& columns = m_table->exprColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_query_lookup::Code& code = *new Exec_query_lookup::Code(keyCount, attrCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictTable.getKey(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = keyColumn->getAttrId(); - } - // matching expressions - const Plan_table::Index& index = m_table->m_indexList[0]; - ctx_assert(index.m_keyFound); - const ExprVector& keyEq = index.m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // queried attributes - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - const SqlType& sqlType = dictColumn.sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_sqlSpecs.setEntry(i, sqlSpec); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_query_lookup* exec = new Exec_query_lookup(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - return exec; -} - -void -Plan_query_lookup::print(Ctx& ctx) -{ - ctx.print(" [query_lookup"); - Plan_base* a[] = { m_table }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_query_lookup - -Exec_query_lookup::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; - delete[] m_attrId; -} - -Exec_query_lookup::Data::~Data() -{ - delete[] m_recAttr; -} - -Exec_query_lookup::~Exec_query_lookup() -{ -} - -void -Exec_query_lookup::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // create data - Data& data = *new Data(this, code.sqlSpecs()); - setData(data); - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - // needed for isNULL - data.m_recAttr = new NdbRecAttr* [1 + code.m_attrCount]; - for (unsigned i = 0; i <= code.m_attrCount; i++) { - data.m_recAttr[i] = 0; - } -} - -void -Exec_query_lookup::close(Ctx& ctx) -{ - Data& data = getData(); - if (data.m_con != 0) { - Ndb* const ndb = ndbObject(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - data.m_done = true; - ctx_log2(("lookup closed at statement close")); - } -} - -void -Exec_query_lookup::print(Ctx& ctx) -{ - ctx.print(" [query_lookup"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" keyId="); - for (unsigned i = 1; i <= code.m_keyCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_keyId[i]); - } - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" table=%s", code.m_tableName); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.hpp deleted file mode 100644 index e66623d4030f3f8d0674c404ea329d51da565a95..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_lookup.hpp +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_lookup_hpp -#define ODBC_CODEGEN_Code_query_lookup_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" - -class Ctx; -class StmtArea; -class NdbConnection; -class NdbOperation; -class NdbRecAttr; - -/** - * @class Plan_query_lookup - * @brief Full select (no where clause) - */ -class Plan_query_lookup : public Plan_query { -public: - Plan_query_lookup(Plan_root* root); - virtual ~Plan_query_lookup(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); -protected: - Plan_table* m_table; -}; - -inline -Plan_query_lookup::Plan_query_lookup(Plan_root* root) : - Plan_query(root), - m_table(0) -{ -} - -// children - -inline void -Plan_query_lookup::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -/** - * @class Exec_query_lookup - * @brief Full select (no where clause) - */ -class Exec_query_lookup : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(unsigned keyCount, unsigned attrCount); - virtual ~Code(); - protected: - friend class Plan_query_lookup; - friend class Exec_query_lookup; - char* m_tableName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - unsigned m_attrCount; - SqlSpecs m_sqlSpecs; - NdbAttrId* m_attrId; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_lookup* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_lookup; - SqlRow m_sqlRow; - NdbConnection* m_con; - NdbOperation* m_op; - NdbRecAttr** m_recAttr; - bool m_done; // returns one row - }; - Exec_query_lookup(Exec_root* root); - virtual ~Exec_query_lookup(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_query_lookup::Code::Code(unsigned keyCount, unsigned attrCount) : - Exec_query::Code(m_sqlSpecs), - m_tableName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_attrCount(attrCount), - m_sqlSpecs(attrCount), - m_attrId(0) -{ -} - -inline -Exec_query_lookup::Data::Data(Exec_query_lookup* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_con(0), - m_op(0), - m_recAttr(0), - m_done(false) -{ -} - -inline -Exec_query_lookup::Exec_query_lookup(Exec_root* root) : - Exec_query(root) -{ -} - -// children - -inline const Exec_query_lookup::Code& -Exec_query_lookup::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_lookup::Data& -Exec_query_lookup::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.cpp deleted file mode 100644 index 54043ce3d5dfc3a9737babe3b35fe5e0ab43b052..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_query_project.hpp" -#include "Code_root.hpp" - -// Plan_query_project - -Plan_query_project::~Plan_query_project() -{ -} - -Plan_base* -Plan_query_project::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_exprRow != 0); - ctl.m_aggrok = true; - ctl.m_aggrin = false; - m_exprRow->analyze(ctx, ctl); - ctl.m_aggrok = false; - if (! ctx.ok()) - return 0; - return this; -} - -Plan_expr_row* -Plan_query_project::getRow() -{ - ctx_assert(m_exprRow != 0); - return m_exprRow; -} - -Exec_base* -Plan_query_project::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create code for the row based on query code - ctx_assert(m_exprRow != 0); - ctl.m_execQuery = execQuery; - Exec_expr_row* execRow = static_cast<Exec_expr_row*>(m_exprRow->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execRow != 0); - Exec_query_project* exec = new Exec_query_project(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // re-use SqlSpecs from the row - const SqlSpecs& sqlSpecs = execRow->getCode().sqlSpecs(); - Exec_query_project::Code& code = *new Exec_query_project::Code(sqlSpecs); - code.m_limitOff = m_limitOff; - code.m_limitCnt = m_limitCnt; - exec->setCode(code); - exec->setQuery(execQuery); - exec->setRow(execRow); - return exec; -} - -void -Plan_query_project::print(Ctx& ctx) -{ - ctx.print(" [query_project"); - Plan_base* a[] = { m_query, m_exprRow }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_query_project - -Exec_query_project::Code::~Code() -{ -} - -Exec_query_project::Data::~Data() -{ -} - -Exec_query_project::~Exec_query_project() -{ -} - -const Exec_query* -Exec_query_project::getRawQuery() const -{ - ctx_assert(m_query != 0); - return m_query; -} - -void -Exec_query_project::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate the row based on subquery data - ctx_assert(m_exprRow != 0); - ctl.m_query = m_query; - m_exprRow->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // re-use SqlRow from the expression row - const SqlRow& sqlRow = m_exprRow->getData().sqlRow(); - Data& data = *new Data(this, sqlRow); - setData(data); -} - -void -Exec_query_project::execImpl(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); -} - -bool -Exec_query_project::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - ctx_assert(m_query != 0); - while (1) { - if (! m_query->fetch(ctx, ctl)) - return false; - ctx_assert(m_exprRow != 0); - m_exprRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - ctl.m_postEval = true; - m_exprRow->evaluate(ctx, ctl); - ctl.m_postEval = false; - const int n = ++data.m_cnt; - const int o = code.m_limitOff <= 0 ? 0 : code.m_limitOff; - const int c = code.m_limitCnt; - if (n <= o) - continue; - if (c < 0) - break; - if (n - o <= c) - break; - return false; - } - return true; -} - -void -Exec_query_project::close(Ctx& ctx) -{ - Data& data = getData(); - data.m_cnt = 0; - ctx_assert(m_query != 0); - m_query->close(ctx); - ctx_assert(m_exprRow != 0); - m_exprRow->close(ctx); -} - -void -Exec_query_project::print(Ctx& ctx) -{ - ctx.print(" [query_project"); - Exec_base* a[] = { m_query, m_exprRow }; - printList(ctx, a, 2); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.hpp deleted file mode 100644 index 545685ab9dfe2798125759d27dec52c62fced398..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_project.hpp +++ /dev/null @@ -1,178 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_project_hpp -#define ODBC_CODEGEN_Code_query_project_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" - -/** - * @class Plan_query_project - * @brief Project node in PlanTree - */ -class Plan_query_project : public Plan_query { -public: - Plan_query_project(Plan_root* root); - virtual ~Plan_query_project(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setRow(Plan_expr_row* exprRow); - void setLimit(int off, int cnt); -protected: - Plan_expr_row* getRow(); - Plan_query* m_query; - Plan_expr_row* m_exprRow; - int m_limitOff; - int m_limitCnt; -}; - -inline -Plan_query_project::Plan_query_project(Plan_root* root) : - Plan_query(root), - m_query(0), - m_exprRow(0), - m_limitOff(0), - m_limitCnt(-1) -{ -} - -// children - -inline void -Plan_query_project::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_query_project::setRow(Plan_expr_row* exprRow) -{ - ctx_assert(exprRow != 0); - m_exprRow = exprRow; -} - -inline void -Plan_query_project::setLimit(int off, int cnt) -{ - m_limitOff = off; - m_limitCnt = cnt; -} - -/** - * @class Exec_query_project - * @brief Project node in ExecTree - */ -class Exec_query_project : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs); - virtual ~Code(); - protected: - friend class Plan_query_project; - friend class Exec_query_project; - // sets reference to Sqlspecs from the row - int m_limitOff; - int m_limitCnt; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_project* node, const SqlRow& sqlRow); - virtual ~Data(); - protected: - friend class Exec_query_project; - // sets reference to SqlRow from the row - unsigned m_cnt; - }; - Exec_query_project(Exec_root* root); - virtual ~Exec_query_project(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - void setRow(Exec_expr_row* exprRow); - const Exec_query* getRawQuery() const; -protected: - friend class Exec_query; - Exec_query* m_query; - Exec_expr_row* m_exprRow; -}; - -inline -Exec_query_project::Code::Code(const SqlSpecs& sqlSpecs) : - Exec_query::Code(sqlSpecs), - m_limitOff(0), - m_limitCnt(-1) -{ -} - -inline -Exec_query_project::Data::Data(Exec_query_project* node, const SqlRow& sqlRow) : - Exec_query::Data(node, sqlRow), - m_cnt(0) -{ -} - -inline -Exec_query_project::Exec_query_project(Exec_root* root) : - Exec_query(root), - m_query(0), - m_exprRow(0) -{ -} - -// children - -inline const Exec_query_project::Code& -Exec_query_project::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_project::Data& -Exec_query_project::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_project::setQuery(Exec_query* query) -{ - ctx_assert(m_query == 0 && query != 0); - m_query = query; -} - -inline void -Exec_query_project::setRow(Exec_expr_row* exprRow) -{ - ctx_assert(m_exprRow == 0 && exprRow != 0); - m_exprRow = exprRow; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.cpp deleted file mode 100644 index 5d29c5af315aeca5f28a5e37c93e75e20fd7af90..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_range.hpp" -#include "Code_column.hpp" -#include "Code_expr.hpp" -#include "Code_root.hpp" - -// Plan_query_range - -Plan_query_range::~Plan_query_range() -{ -} - -Plan_base* -Plan_query_range::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_range::codegen(Ctx& ctx, Ctl& ctl) -{ - // set up - ctx_assert(m_table != 0 && m_index != 0); - const BaseString& tableName = m_table->getName(); - ctx_assert(m_index->m_dictIndex != 0); - const DictIndex& dictIndex = *m_index->m_dictIndex; - const BaseString& indexName = dictIndex.getName(); - const unsigned keyCount = m_index->m_keyCountUsed; - const ColumnVector& columns = m_table->exprColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_query_range::Code& code = *new Exec_query_range::Code(keyCount, attrCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_indexName = strcpy(new char[indexName.length() + 1], indexName.c_str()); - code.m_exclusive = m_exclusive; - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictIndex.getColumn(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = k - 1; // index column order - } - // matching expressions - ctx_assert(m_index->m_keyFound); - const ExprVector& keyEq = m_index->m_keyEq; - // check size matches - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // queried attributes - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - const SqlType& sqlType = dictColumn.sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_sqlSpecs.setEntry(i, sqlSpec); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_query_range* exec = new Exec_query_range(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - // interpreter - ctl.m_execQuery = exec; - Exec_pred* execInterp = 0; - ctl.m_topTable = m_table; - if (m_interp != 0) { - execInterp = static_cast<Exec_pred*>(m_interp->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execInterp != 0); - } - ctl.m_topTable = 0; - if (m_interp != 0) - exec->setInterp(execInterp); - return exec; -} - -void -Plan_query_range::print(Ctx& ctx) -{ - ctx.print(" [query_range"); - Plan_base* a[] = { m_table }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_query_range - -Exec_query_range::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; - delete[] m_attrId; -} - -Exec_query_range::Data::~Data() -{ - delete[] m_recAttr; -} - -Exec_query_range::~Exec_query_range() -{ -} - -void -Exec_query_range::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // create data - Data& data = *new Data(this, code.sqlSpecs()); - setData(data); - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } - // needed for isNULL - data.m_recAttr = new NdbRecAttr* [1 + code.m_attrCount]; - for (unsigned i = 0; i <= code.m_attrCount; i++) { - data.m_recAttr[i] = 0; - } - // parallel - data.m_parallel = code.m_exclusive ? 1 : 240; // best supported - // interpreter - if (m_interp != 0) { - //m_interp->alloc(ctx, ctl); XXX - if (! ctx.ok()) - return; - } -} - -void -Exec_query_range::close(Ctx& ctx) -{ - Data& data = getData(); - if (data.m_con != 0) { - Ndb* const ndb = ndbObject(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - data.m_done = true; - ctx_log2(("lookup closed at statement close")); - } - // if (m_interp != 0) - // m_interp->close(ctx); -} - -void -Exec_query_range::print(Ctx& ctx) -{ - ctx.print(" [query_range"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" keyId="); - for (unsigned i = 1; i <= code.m_keyCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_keyId[i]); - } - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" table=%s", code.m_tableName); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.hpp deleted file mode 100644 index 4438189522ce59142b0949d55436250213edaff0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_range.hpp +++ /dev/null @@ -1,186 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_range_hpp -#define ODBC_CODEGEN_Code_query_range_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" -#include "Code_pred.hpp" - -class Ctx; -class StmtArea; -class NdbConnection; -class NdbOperation; -class NdbRecAttr; - -/* - * Range scan via ordered index. We implement only the case of equality - * on an initial sequence of index keys. - */ - -class Plan_query_range : public Plan_query { -public: - Plan_query_range(Plan_root* root); - virtual ~Plan_query_range(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - void setTable(Plan_table* table, Plan_table::Index* index); - void setInterp(Plan_pred* interp); - void setExclusive(); -protected: - Plan_table* m_table; - Plan_table::Index* m_index; - Plan_pred* m_interp; - bool m_exclusive; -}; - -inline -Plan_query_range::Plan_query_range(Plan_root* root) : - Plan_query(root), - m_table(0), - m_index(0), - m_interp(0), - m_exclusive(false) -{ -} - -inline void -Plan_query_range::setTable(Plan_table* table, Plan_table::Index* index) -{ - ctx_assert(table != 0 && index != 0 && index == &table->m_indexList[index->m_pos] && index->m_pos != 0); - m_table = table; - m_index = index; -} - -inline void -Plan_query_range::setInterp(Plan_pred* interp) -{ - ctx_assert(interp != 0); - m_interp = interp; -} - -inline void -Plan_query_range::setExclusive() -{ - m_exclusive = true; -} - -class Exec_query_range : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(unsigned keyCount, unsigned attrCount); - virtual ~Code(); - protected: - friend class Plan_query_range; - friend class Exec_query_range; - const char* m_tableName; - const char* m_indexName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - unsigned m_attrCount; - SqlSpecs m_sqlSpecs; - NdbAttrId* m_attrId; - bool m_exclusive; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_range* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_range; - SqlRow m_sqlRow; - NdbConnection* m_con; - NdbOperation* m_op; - NdbRecAttr** m_recAttr; - unsigned m_parallel; - bool m_done; // if no match possible due to range - }; - Exec_query_range(Exec_root* root); - virtual ~Exec_query_range(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - const Code& getCode() const; - Data& getData() const; - void setInterp(Exec_pred* interp); -protected: - Exec_pred* m_interp; -}; - -inline -Exec_query_range::Code::Code(unsigned keyCount, unsigned attrCount) : - Exec_query::Code(m_sqlSpecs), - m_tableName(0), - m_indexName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_attrCount(attrCount), - m_sqlSpecs(attrCount), - m_attrId(0), - m_exclusive(false) -{ -} - -inline -Exec_query_range::Data::Data(Exec_query_range* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_con(0), - m_op(0), - m_recAttr(0), - m_parallel(1), - m_done(false) -{ -} - -inline -Exec_query_range::Exec_query_range(Exec_root* root) : - Exec_query(root), - m_interp(0) -{ -} - -inline const Exec_query_range::Code& -Exec_query_range::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_range::Data& -Exec_query_range::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_range::setInterp(Exec_pred* interp) -{ - ctx_assert(interp != 0); - m_interp = interp; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.cpp deleted file mode 100644 index 8b295a97916270e32fac374c0034b4822655d33a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_query_repeat.hpp" -#include "Code_root.hpp" - -// Plan_query_repeat - -Plan_query_repeat::~Plan_query_repeat() -{ -} - -Plan_base* -Plan_query_repeat::analyze(Ctx& ctx, Ctl& ctl) -{ - return this; -} - -Exec_base* -Plan_query_repeat::codegen(Ctx& ctx, Ctl& ctl) -{ - Exec_query_repeat* exec = new Exec_query_repeat(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // SqlSpecs is empty - const SqlSpecs sqlSpecs(0); - Exec_query_repeat::Code& code = *new Exec_query_repeat::Code(sqlSpecs, m_forever, m_maxcount); - exec->setCode(code); - return exec; -} - -void -Plan_query_repeat::print(Ctx& ctx) -{ - ctx.print(" [query_repeat"); - if (! m_forever) - ctx.print(" %ld", (long)m_maxcount); - ctx.print("]"); -} - -// Exec_query_repeat - -Exec_query_repeat::Code::~Code() -{ -} - -Exec_query_repeat::Data::~Data() -{ -} - -Exec_query_repeat::~Exec_query_repeat() -{ -} - -void -Exec_query_repeat::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // SqlRow is empty - Data& data = *new Data(this, code.sqlSpecs()); - setData(data); -} - -void -Exec_query_repeat::execImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - data.m_count = 0; -} - -bool -Exec_query_repeat::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - // fetch until count is up - if (code.m_forever || data.m_count < code.m_maxcount) { - data.m_count++; - return true; - } - return false; -} - -void -Exec_query_repeat::close(Ctx& ctx) -{ -} - -void -Exec_query_repeat::print(Ctx& ctx) -{ - const Code& code = getCode(); - ctx.print(" [query_repeat"); - if (! code.m_forever) - ctx.print(" %ld", (long)code.m_maxcount); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.hpp deleted file mode 100644 index 90d6ef55104c3caf8321c3789ebc5ae85f2fb7d0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_repeat.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_repeat_hpp -#define ODBC_CODEGEN_Code_query_repeat_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" - -/** - * @class Plan_query_repeat - * @brief Constant query node in PlanTree - */ -class Plan_query_repeat : public Plan_query { -public: - Plan_query_repeat(Plan_root* root); - Plan_query_repeat(Plan_root* root, CountType maxcount); - virtual ~Plan_query_repeat(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); -private: - bool m_forever; - CountType m_maxcount; -}; - -inline -Plan_query_repeat::Plan_query_repeat(Plan_root* root) : - Plan_query(root), - m_forever(true), - m_maxcount(0) -{ -} - -inline -Plan_query_repeat::Plan_query_repeat(Plan_root* root, CountType maxcount) : - Plan_query(root), - m_forever(false), - m_maxcount(maxcount) -{ -} - -/** - * @class Exec_query_repeat - * @brief Constant query node in ExecTree - */ -class Exec_query_repeat : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs, bool forever, CountType maxcount); - virtual ~Code(); - protected: - friend class Exec_query_repeat; - SqlSpecs m_sqlSpecs; - bool m_forever; - CountType m_maxcount; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_repeat* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_repeat; - SqlRow m_sqlRow; - CountType m_count; - }; - Exec_query_repeat(Exec_root* root); - virtual ~Exec_query_repeat(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_query_repeat::Code::Code(const SqlSpecs& sqlSpecs, bool forever, CountType maxcount) : - Exec_query::Code(m_sqlSpecs), - m_sqlSpecs(sqlSpecs), - m_forever(forever), - m_maxcount(maxcount) -{ -} - -inline -Exec_query_repeat::Data::Data(Exec_query_repeat* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_count(0) -{ -} - -inline -Exec_query_repeat::Exec_query_repeat(Exec_root* root) : - Exec_query(root) -{ -} - -// children - -inline const Exec_query_repeat::Code& -Exec_query_repeat::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_repeat::Data& -Exec_query_repeat::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.cpp deleted file mode 100644 index 1c0f58980e5e1eeee10fbab3136bdd4a9d820e93..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_scan.hpp" -#include "Code_column.hpp" -#include "Code_root.hpp" - -// Plan_query_scan - -Plan_query_scan::~Plan_query_scan() -{ -} - -Plan_base* -Plan_query_scan::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - if (m_interp != 0) { - m_interp = static_cast<Plan_pred*>(m_interp->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_interp != 0); - } - return this; -} - -Exec_base* -Plan_query_scan::codegen(Ctx& ctx, Ctl& ctl) -{ - // set up - ctx_assert(m_table != 0); - const BaseString& tableName = m_table->getName(); - const DictTable& dictTable = m_table->dictTable(); - const ColumnVector& columns = m_table->exprColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_query_scan::Code& code = *new Exec_query_scan::Code(attrCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_exclusive = m_exclusive; - // queried attributes - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - const SqlType& sqlType = dictColumn.sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_sqlSpecs.setEntry(i, sqlSpec); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_query_scan* exec = new Exec_query_scan(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - // interpreter - Exec_pred* execInterp = 0; - ctl.m_execQuery = exec; - ctl.m_topTable = m_table; - if (m_interp != 0) { - execInterp = static_cast<Exec_pred*>(m_interp->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execInterp != 0); - } - ctl.m_topTable = 0; - if (m_interp != 0) - exec->setInterp(execInterp); - return exec; -} - -void -Plan_query_scan::print(Ctx& ctx) -{ - ctx.print(" [query_scan"); - Plan_base* a[] = { m_table, m_interp }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_query_scan - -Exec_query_scan::Code::~Code() -{ - delete[] m_tableName; - delete[] m_attrId; -} - -Exec_query_scan::Data::~Data() -{ - delete[] m_recAttr; -} - -Exec_query_scan::~Exec_query_scan() -{ -} - -void -Exec_query_scan::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // create data - Data& data = *new Data(this, code.sqlSpecs()); - // needed for isNULL - data.m_recAttr = new NdbRecAttr* [1 + code.m_attrCount]; - for (unsigned i = 0; i <= code.m_attrCount; i++) { - data.m_recAttr[i] = 0; - } - data.m_parallel = code.m_exclusive ? 1 : 240; // best supported - setData(data); - // interpreter - ctl.m_query = this; - if (m_interp != 0) { - //m_interp->alloc(ctx, ctl); XXX - if (! ctx.ok()) - return; - } -} - -void -Exec_query_scan::close(Ctx& ctx) -{ - Data& data = getData(); - if (data.m_con != 0) { - Ndb* const ndb = ndbObject(); - int ret = data.m_con->stopScan(); - if (ret == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "stopScan"); - } - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("scan closed at statement close")); - } - if (m_interp != 0) - m_interp->close(ctx); -} - -void -Exec_query_scan::print(Ctx& ctx) -{ - ctx.print(" [query_scan"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" table=%s", code.m_tableName); - } - if (m_interp != 0) - m_interp->print(ctx); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.hpp deleted file mode 100644 index d6d1630ddf8948fc680e65f38d569af62bddecb7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_scan.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_scan_hpp -#define ODBC_CODEGEN_Code_query_scan_hpp - -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" -#include "Code_pred.hpp" - -class Ctx; -class StmtArea; -class NdbConnection; -class NdbOperation; -class NdbRecAttr; - -/* - * Table scan. - */ - -class Plan_query_scan : public Plan_query { -public: - Plan_query_scan(Plan_root* root); - virtual ~Plan_query_scan(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - void setTable(Plan_table* table); - void setInterp(Plan_pred* interp); - void setExclusive(); -protected: - Plan_table* m_table; - Plan_pred* m_interp; - bool m_exclusive; // exclusive -}; - -inline -Plan_query_scan::Plan_query_scan(Plan_root* root) : - Plan_query(root), - m_table(0), - m_interp(0), - m_exclusive(false) -{ -} - -inline void -Plan_query_scan::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_query_scan::setInterp(Plan_pred* interp) -{ - ctx_assert(interp != 0); - m_interp = interp; -} - -inline void -Plan_query_scan::setExclusive() -{ - m_exclusive = true; -} - -class Exec_query_scan : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(unsigned attrCount); - virtual ~Code(); - protected: - friend class Plan_query_scan; - friend class Exec_query_scan; - char* m_tableName; - unsigned m_attrCount; - SqlSpecs m_sqlSpecs; - NdbAttrId* m_attrId; - bool m_exclusive; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_scan* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_scan; - SqlRow m_sqlRow; - NdbConnection* m_con; - NdbOperation* m_op; - NdbRecAttr** m_recAttr; - unsigned m_parallel; // parallelism could be runtime option - }; - Exec_query_scan(Exec_root* root); - virtual ~Exec_query_scan(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setInterp(Exec_pred* interp); -protected: - Exec_pred* m_interp; -}; - -inline -Exec_query_scan::Code::Code(unsigned attrCount) : - Exec_query::Code(m_sqlSpecs), - m_tableName(0), - m_attrCount(attrCount), - m_sqlSpecs(attrCount), - m_attrId(0), - m_exclusive(false) -{ -} - -inline -Exec_query_scan::Data::Data(Exec_query_scan* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_con(0), - m_op(0), - m_recAttr(0), - m_parallel(1) -{ -} - -inline -Exec_query_scan::Exec_query_scan(Exec_root* root) : - Exec_query(root), - m_interp(0) -{ -} - -// children - -inline const Exec_query_scan::Code& -Exec_query_scan::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_scan::Data& -Exec_query_scan::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_scan::setInterp(Exec_pred* interp) -{ - ctx_assert(interp != 0); - m_interp = interp; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.cpp deleted file mode 100644 index 4ea6db8c4e2f8339728edeb3b699eba205978aa2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <algorithm> -#include "Code_query_sort.hpp" -#include "Code_root.hpp" - -// Plan_query_sort - -Plan_query_sort::~Plan_query_sort() -{ -} - -Plan_expr_row* -Plan_query_sort::getRow() -{ - ctx_assert(m_query != 0); - return m_query->getRow(); -} - -Plan_base* -Plan_query_sort::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_sortRow != 0); - m_sortRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_sort::codegen(Ctx& ctx, Ctl& ctl) -{ - // create code for the subquery - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // create code for the row based on query code - ctx_assert(m_sortRow != 0); - ctl.m_execQuery = execQuery->getRawQuery(); - Exec_expr_row* execRow = static_cast<Exec_expr_row*>(m_sortRow->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execRow != 0); - Exec_query_sort* exec = new Exec_query_sort(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - // re-use SqlSpecs from subquery - const Exec_query::Code& codeQuery = execQuery->getCode(); - const SqlSpecs& sqlSpecs = codeQuery.sqlSpecs(); - // make asc - unsigned size = m_sortRow->getSize(); - bool* asc = new bool[1 + size]; - for (unsigned i = 1; i <= size; i++) { - asc[i] = m_sortRow->m_ascList[i]; - } - Exec_query_sort::Code& code = *new Exec_query_sort::Code(sqlSpecs, asc); - exec->setCode(code); - exec->setQuery(execQuery); - exec->setRow(execRow); - return exec; -} - -void -Plan_query_sort::print(Ctx& ctx) -{ - ctx.print(" [query_sort"); - Plan_base* a[] = { m_query, m_sortRow }; - printList(ctx, a, 2); - ctx.print("]"); -} - -// Exec_query_sort - -Exec_query_sort::Code::~Code() -{ -} - -Exec_query_sort::Data::~Data() -{ - for (unsigned i = 0; i < m_sortList.size(); i++) { - SortItem& sortItem = m_sortList[i]; - delete sortItem.m_dataRow; - delete sortItem.m_sortRow; - } -} - -Exec_query_sort::~Exec_query_sort() -{ -} - -void -Exec_query_sort::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // allocate sort row based on subquery data - ctx_assert(m_sortRow != 0); - ctl.m_query = m_query->getRawQuery(); - m_sortRow->alloc(ctx, ctl); - if (! ctx.ok()) - return; - Data& data = *new Data(this, getCode().sqlSpecs()); - setData(data); -} - -void -Exec_query_sort::execImpl(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_query != 0 && m_sortRow != 0); - ctl.m_sortRow = m_sortRow; - m_query->execute(ctx, ctl); -} - -bool -SortLess::operator()(SortItem s1, SortItem s2) const -{ - const Exec_query_sort::Code& code = m_node->getCode(); - const SqlRow& r1 = *s1.m_sortRow; - const SqlRow& r2 = *s2.m_sortRow; - for (unsigned i = 1; i <= r1.count(); i++) { - const SqlField& f1 = r1.getEntry(i); - const SqlField& f2 = r2.getEntry(i); - // nulls last is default in oracle - bool f1null = f1.sqlNull(); - bool f2null = f2.sqlNull(); - if (f1null && f2null) - continue; - if (! f1null && f2null) - return code.getAsc(i) ? true : false; - if (f1null && ! f2null) - return code.getAsc(i) ? false : true; - if (f1.less(f2)) - return code.getAsc(i) ? true : false; - if (f2.less(f1)) - return code.getAsc(i) ? false : true; - } - return false; -} - -bool -Exec_query_sort::fetchImpl(Ctx& ctx, Ctl& ctl) -{ - Data& data = getData(); - ctx_assert(m_query != 0 && m_sortRow != 0); - ctl.m_sortRow = m_sortRow; - if (! data.m_sorted) { - // read and cache all rows - data.m_count = 0; - while (m_query->fetch(ctx, ctl)) { - const SqlRow* dataRow = m_query->getData().sqlRow().copy(); - const SqlRow* sortRow = 0; - if (ctl.m_groupIndex == 0) { - // evaluate sort row - m_sortRow->evaluate(ctx, ctl); - if (! ctx.ok()) - return false; - sortRow = m_sortRow->getData().sqlRow().copy(); - } else { - // evaluate done by group-by - SqlRow tmpSortRow(m_sortRow->getCode().sqlSpecs()); - for (unsigned i = 1; i <= tmpSortRow.count(); i++) { - tmpSortRow.setEntry(i, m_sortRow->getExpr(i)->getData().groupField(ctl.m_groupIndex)); - } - sortRow = tmpSortRow.copy(); - } - SortItem sortItem(dataRow, sortRow); - data.m_sortList.push_back(sortItem); - data.m_count++; - } - data.m_index = 0; - if (! ctx.ok()) - return false; - // sort the rows XXX use iterated stable_sort - SortLess sortLess(this); - std::sort(data.m_sortList.begin(), data.m_sortList.end(), sortLess); - data.m_sorted = true; - } - if (data.m_index < data.m_count) { - // make our SqlRow reference to current row - const SqlRow& currRow = *data.m_sortList[data.m_index].m_dataRow; - for (unsigned i = 1; i <= data.m_sqlRow.count(); i++) { - const SqlField& currField = currRow.getEntry(i); - SqlSpec sqlSpec(currField.sqlSpec(), SqlSpec::Reference); - SqlField sqlField(sqlSpec, &currField); - data.m_sqlRow.setEntry(i, sqlField); - } - data.m_index++; - return true; - } - return false; -} - -void -Exec_query_sort::close(Ctx& ctx) -{ - Data& data = getData(); - ctx_assert(m_query != 0); - m_query->close(ctx); - data.m_sorted = false; - for (unsigned i = 0; i < data.m_sortList.size(); i++) { - SortItem& sortItem = data.m_sortList[i]; - delete sortItem.m_dataRow; - delete sortItem.m_sortRow; - } - data.m_sortList.clear(); - data.m_count = 0; - data.m_index = 0; -} - -void -Exec_query_sort::print(Ctx& ctx) -{ - ctx.print(" [query_sort"); - Exec_base* a[] = { m_query, m_sortRow }; - printList(ctx, a, 2); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.hpp deleted file mode 100644 index d1aa03d9aefa3499ff0167e579fe08debf57a67d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sort.hpp +++ /dev/null @@ -1,208 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_sort_hpp -#define ODBC_CODEGEN_Code_query_sort_hpp - -#include <functional> -#include <common/common.hpp> -#include "Code_query.hpp" -#include "Code_expr_row.hpp" - -/** - * @class Plan_query_sort - * @brief Project node in PlanTree - */ -class Plan_query_sort : public Plan_query { -public: - Plan_query_sort(Plan_root* root); - virtual ~Plan_query_sort(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setQuery(Plan_query* query); - void setRow(Plan_expr_row* sortRow); -protected: - Plan_expr_row* getRow(); - Plan_query* m_query; - Plan_expr_row* m_sortRow; -}; - -inline -Plan_query_sort::Plan_query_sort(Plan_root* root) : - Plan_query(root), - m_query(0), - m_sortRow(0) -{ -} - -// children - -inline void -Plan_query_sort::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -inline void -Plan_query_sort::setRow(Plan_expr_row* sortRow) -{ - ctx_assert(sortRow != 0); - m_sortRow = sortRow; -} - -/** - * Item to sort includes data row and sort row. - */ -struct SortItem { - SortItem(const SqlRow* dataRow, const SqlRow* sortRow); - const SqlRow* m_dataRow; // copy of fetched row from subquery - const SqlRow* m_sortRow; // copy of values to sort on -}; - -typedef std::vector<SortItem> SortList; - -class Exec_query_sort; - -struct SortLess : std::binary_function<SortItem, SortItem, bool> { - SortLess(const Exec_query_sort* node); - const Exec_query_sort* m_node; - bool operator()(SortItem s1, SortItem s2) const; -}; - -inline -SortItem::SortItem(const SqlRow* dataRow, const SqlRow* sortRow) : - m_dataRow(dataRow), - m_sortRow(sortRow) -{ -} - -inline -SortLess::SortLess(const Exec_query_sort* node) : - m_node(node) -{ -} - -/** - * @class Exec_query_sort - * @brief Project node in ExecTree - */ -class Exec_query_sort : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(const SqlSpecs& sqlSpecs, bool* asc); - virtual ~Code(); - bool getAsc(unsigned i) const; - protected: - friend class Exec_query_sort; - const bool* const m_asc; - // sets reference to Sqlspecs from subquery - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_sort* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_sort; - SqlRow m_sqlRow; // current row - bool m_sorted; // fetch and sort done - SortList m_sortList; - unsigned m_count; // number of rows - unsigned m_index; // current fetch index - }; - Exec_query_sort(Exec_root* root); - virtual ~Exec_query_sort(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); - void setRow(Exec_expr_row* sortRow); -protected: - friend class Exec_query; - Exec_query* m_query; - Exec_expr_row* m_sortRow; -}; - -inline -Exec_query_sort::Code::Code(const SqlSpecs& sqlSpecs, bool* asc) : - Exec_query::Code(sqlSpecs), - m_asc(asc) -{ -} - -inline bool -Exec_query_sort::Code::getAsc(unsigned i) const -{ - return m_asc[i]; -} - -inline -Exec_query_sort::Data::Data(Exec_query_sort* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs), - m_sorted(false), - m_count(0), - m_index(0) -{ -} - -inline -Exec_query_sort::Exec_query_sort(Exec_root* root) : - Exec_query(root), - m_query(0), - m_sortRow(0) -{ -} - -// children - -inline const Exec_query_sort::Code& -Exec_query_sort::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_sort::Data& -Exec_query_sort::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_query_sort::setQuery(Exec_query* query) -{ - ctx_assert(m_query == 0 && query != 0); - m_query = query; -} - -inline void -Exec_query_sort::setRow(Exec_expr_row* sortRow) -{ - ctx_assert(m_sortRow == 0 && sortRow != 0); - m_sortRow = sortRow; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.cpp deleted file mode 100644 index affe3dc1264bd6cda17d331ab979cd04eeb7bd8b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_query_sys.hpp" -#include "Code_column.hpp" -#include "Code_root.hpp" - -// Plan_query_sys - -Plan_query_sys::~Plan_query_sys() -{ -} - -Plan_base* -Plan_query_sys::analyze(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -Exec_base* -Plan_query_sys::codegen(Ctx& ctx, Ctl& ctl) -{ - // set up - ctx_assert(m_table != 0); - const DictTable& dictTable = m_table->dictTable(); - const ColumnVector& columns = m_table->exprColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_query_sys::Code& code = *new Exec_query_sys::Code(attrCount); - code.m_sysId = dictTable.sysId(); - // queried attributes - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - const SqlType& sqlType = dictColumn.sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_sqlSpecs.setEntry(i, sqlSpec); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_query_sys* exec = new Exec_query_sys(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - return exec; -} - -void -Plan_query_sys::print(Ctx& ctx) -{ - ctx.print(" [query_sys"); - Plan_base* a[] = { m_table }; - printList(ctx, a, 1); - ctx.print("]"); -} - -// Exec_query_sys - -Exec_query_sys::Code::~Code() -{ - delete[] m_attrId; -} - -Exec_query_sys::Data::~Data() -{ -} - -Exec_query_sys::~Exec_query_sys() -{ -} - -void -Exec_query_sys::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // create data - Data& data = *new Data(this, code.sqlSpecs()); - setData(data); -} - -void -Exec_query_sys::close(Ctx& ctx) -{ - Data& data = getData(); - data.m_rowPos = 0; - data.m_tablePos = 0; - data.m_attrPos = 0; - data.m_keyPos = 0; -} - -void -Exec_query_sys::print(Ctx& ctx) -{ - ctx.print(" [query_sys"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - ctx.print(" sysId=%u", (unsigned)code.m_sysId); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.hpp deleted file mode 100644 index 8eb069d0413e586eaa2e22903bc5ad2ece39c9c0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_query_sys.hpp +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_query_sys_hpp -#define ODBC_CODEGEN_Code_query_sys_hpp - -#include <common/common.hpp> -#include <dictionary/DictSys.hpp> -#include "Code_query.hpp" -#include "Code_table.hpp" - -class Ctx; -class StmtArea; -class NdbConnection; -class NdbOperation; -class NdbRecAttr; - -/** - * @class Plan_query_sys - * @brief Full select (no where clause) - */ -class Plan_query_sys : public Plan_query { -public: - Plan_query_sys(Plan_root* root); - virtual ~Plan_query_sys(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); -protected: - Plan_table* m_table; -}; - -inline -Plan_query_sys::Plan_query_sys(Plan_root* root) : - Plan_query(root), - m_table(0) -{ -} - -// children - -inline void -Plan_query_sys::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -/** - * @class Exec_query_sys - * @brief Full select (no where clause) - */ -class Exec_query_sys : public Exec_query { -public: - class Code : public Exec_query::Code { - public: - Code(unsigned attrCount); - virtual ~Code(); - protected: - friend class Plan_query_sys; - friend class Exec_query_sys; - DictSys::Id m_sysId; - unsigned m_attrCount; - SqlSpecs m_sqlSpecs; - NdbAttrId* m_attrId; - }; - class Data : public Exec_query::Data { - public: - Data(Exec_query_sys* node, const SqlSpecs& sqlSpecs); - virtual ~Data(); - protected: - friend class Exec_query_sys; - SqlRow m_sqlRow; - // for typeinfo - unsigned m_rowPos; - // for tables and columns - NdbDictionary::Dictionary::List m_objectList; - unsigned m_tablePos; - unsigned m_attrPos; - unsigned m_keyPos; - }; - Exec_query_sys(Exec_root* root); - virtual ~Exec_query_sys(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - bool fetchImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; -}; - -inline -Exec_query_sys::Code::Code(unsigned attrCount) : - Exec_query::Code(m_sqlSpecs), - m_sysId(DictSys::Undef), - m_attrCount(attrCount), - m_sqlSpecs(attrCount), - m_attrId(0) -{ -} - -inline -Exec_query_sys::Data::Data(Exec_query_sys* node, const SqlSpecs& sqlSpecs) : - Exec_query::Data(node, m_sqlRow), - m_sqlRow(sqlSpecs) -{ -} - -inline -Exec_query_sys::Exec_query_sys(Exec_root* root) : - Exec_query(root) -{ -} - -// children - -inline const Exec_query_sys::Code& -Exec_query_sys::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_query_sys::Data& -Exec_query_sys::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_root.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_root.cpp deleted file mode 100644 index 4f45bdffdaf22804972f9c3c1d38e1ec79783bf3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_root.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include "Code_root.hpp" -#include "Code_stmt.hpp" -#include "Code_query.hpp" -#include "Code_expr_param.hpp" -#include "Code_root.hpp" - -// Plan_root - -Plan_root::~Plan_root() -{ -} - -Plan_base* -Plan_root::analyze(Ctx& ctx, Ctl& ctl) -{ - // analyze statement - ctx_assert(m_stmt != 0); - m_stmt = static_cast<Plan_stmt*>(m_stmt->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_stmt != 0); - // analyze parameters - ctx_assert(m_paramList.size() > 0); - const unsigned paramCount = m_paramList.size() - 1; - DescArea& ipd = descArea(Desc_usage_IPD); - ipd.setCount(ctx, paramCount); - for (unsigned i = 1; i <= paramCount; i++) { - Plan_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - // analyze the parameter - param->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // must return self - return this; -} - -void -Plan_root::describe(Ctx& ctx) -{ - // describe statement - ctx_assert(m_stmt != 0); - m_stmt->describe(ctx); - // describe parameters - ctx_assert(m_paramList.size() > 0); - const unsigned paramCount = m_paramList.size() - 1; - DescArea& ipd = descArea(Desc_usage_IPD); - ipd.setCount(ctx, paramCount); - unsigned unbound = 0; - for (unsigned i = 1; i <= paramCount; i++) { - Plan_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - // describe the parameter - param->describe(ctx); - // check if SQL type is bound - ctx_assert(param->sqlType().type() != SqlType::Undef); - if (param->sqlType().type() == SqlType::Unbound) - unbound++; - } - if (unbound > 0) - ctx_log2(("%u out of %u params have unbound SQL type", unbound, paramCount)); - m_stmtArea.m_unbound = unbound; -} - -Exec_base* -Plan_root::codegen(Ctx& ctx, Ctl& ctl) -{ - Exec_root* execRoot = new Exec_root(m_stmtArea); - Exec_root::Code& code = *new Exec_root::Code; - execRoot->setCode(code); - // set root in helper struct - ctl.m_execRoot = execRoot; - // generate code for the statement - ctx_assert(m_stmt != 0); - Exec_stmt* execStmt = static_cast<Exec_stmt*>(m_stmt->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - execRoot->setStmt(execStmt); - // create parameters list - execRoot->m_paramList.resize(m_paramList.size()); - for (unsigned i = 1; i < m_paramList.size(); i++) { - Plan_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - Exec_expr_param* execParam = static_cast<Exec_expr_param*>(param->codegen(ctx, ctl)); - ctx_assert(execParam != 0); - execRoot->m_paramList[i] = execParam; - } - return execRoot; -} - -void -Plan_root::print(Ctx& ctx) -{ - ctx.print("[root"); - Plan_base* a[] = { m_stmt }; - printList(ctx, a, 1); - ctx.print("]\n"); -} - -void -Plan_root::saveNode(Plan_base* node) -{ - ctx_assert(node != 0); - m_nodeList.push_back(node); -} - -void -Plan_root::freeNodeList() -{ - for (NodeList::iterator i = m_nodeList.begin(); i != m_nodeList.end(); i++) { - Plan_base* node = *i; - *i = 0; - delete node; - } - m_nodeList.clear(); -} - -// Exec_root - -Exec_root::Code::~Code() -{ -} - -Exec_root::Data::~Data() -{ -} - -Exec_root::~Exec_root() -{ -} - -StmtArea& -Exec_root::stmtArea() const -{ - return m_stmtArea; -} - -void -Exec_root::alloc(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_stmt != 0); - m_stmt->alloc(ctx, ctl); -} - -void -Exec_root::bind(Ctx& ctx) -{ - // bind output cols - ctx_assert(m_stmt != 0); - m_stmt->bind(ctx); - // bind input params - for (unsigned i = 1; i < m_paramList.size(); i++) { - Exec_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - param->bind(ctx); - if (! ctx.ok()) - return; - } -} - -void -Exec_root::execute(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_stmt != 0); - // check if data is needed - for (unsigned i = 1; i < m_paramList.size(); i++) { - Exec_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - Exec_expr_param::Data& paramData = param->getData(); - if (paramData.m_atExec && paramData.m_extPos == -1) { - ctx.setCode(SQL_NEED_DATA); - return; - } - } - m_stmt->execute(ctx, ctl); -} - -void -Exec_root::fetch(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(m_stmt != 0); - Exec_query* query = static_cast<Exec_query*>(m_stmt); - ctx_assert(query != 0); - query->fetch(ctx, ctl); -} - -void -Exec_root::close(Ctx& ctx) -{ - ctx_assert(m_stmt != 0); - m_stmt->close(ctx); - for (unsigned i = 1; i < m_paramList.size(); i++) { - Exec_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - param->close(ctx); - } -} - -void -Exec_root::print(Ctx& ctx) -{ - ctx.print("[root"); - Exec_base* a[] = { m_stmt }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]\n"); -} - -void -Exec_root::saveNode(Exec_base* node) -{ - ctx_assert(node != 0); - m_nodeList.push_back(node); -} - -void -Exec_root::freeNodeList() -{ - for (NodeList::iterator i = m_nodeList.begin(); i != m_nodeList.end(); i++) { - Exec_base* node = *i; - *i = 0; - delete node; - } - m_nodeList.clear(); -} - -// odbc support - -void -Exec_root::sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind) -{ - ctx_assert(m_stmt != 0); - Exec_query* query = static_cast<Exec_query*>(m_stmt); - ctx_assert(query != 0); - query->sqlGetData(ctx, columnNumber, targetType, targetValue, bufferLength, strlen_or_Ind); -} - -void -Exec_root::sqlParamData(Ctx& ctx, SQLPOINTER* value) -{ - ctx_assert(m_paramList.size() > 0); - unsigned count = m_paramList.size() - 1; - for (unsigned i = 1; i <= count; i++) { - Exec_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - Exec_expr_param::Data& paramData = param->getData(); - if (! paramData.m_atExec || paramData.m_extPos >= 0) - continue; - ctx_assert(paramData.m_extField != 0); - ExtField& extField = *paramData.m_extField; - if (value != 0) - *value = extField.m_dataPtr; - m_paramData = i; - ctx.setCode(SQL_NEED_DATA); - return; - } -} - -void -Exec_root::sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind) -{ - ctx_assert(m_paramList.size() > 0); - unsigned count = m_paramList.size() - 1; - unsigned i = m_paramData; - if (i == 0) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "missing call to SQLParamData"); - return; - } - if (i > count) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "parameter %u out of range 1 to %u", i, count); - return; - } - Exec_expr_param* param = m_paramList[i]; - ctx_assert(param != 0); - Exec_expr_param::Data& paramData = param->getData(); - if (! paramData.m_atExec) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "parameter %u not marked for data-at-exec", i); - return; - } - ctx_assert(paramData.m_extField != 0); - ExtField extField(paramData.m_extField->extSpec(), data, 0, &strlen_or_Ind, i); - if (paramData.m_extPos == -1) - paramData.m_extPos = 0; - extField.setPos(paramData.m_extPos); - // copy in and update position - SqlField& sqlField = paramData.m_sqlField; - sqlField.copyin(ctx, extField); - paramData.m_extPos = extField.getPos(); - ctx_log4(("parameter %u data received", i)); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_root.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_root.hpp deleted file mode 100644 index 4f0f96725e3b2b1b589467962ea52fb118c3f785..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_root.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_root_hpp -#define ODBC_CODEGEN_Code_root_hpp - -#include <list> -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_stmt.hpp" - -class SqlField; -class ExtField; - -/** - * @class Plan_root - * @brief Root node above top level statement node - */ -class Plan_root : public Plan_base { -public: - Plan_root(StmtArea& stmtArea); - virtual ~Plan_root(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setStmt(Plan_stmt* stmt); - // save and free nodes - void saveNode(Plan_base* node); - void freeNodeList(); -private: - friend class CodeGen; - friend class Plan_base; - friend class Plan_expr_param; - StmtArea& m_stmtArea; - Plan_stmt* m_stmt; - ParamVector m_paramList; - typedef std::list<Plan_base*> NodeList; - NodeList m_nodeList; -}; - -inline -Plan_root::Plan_root(StmtArea& stmtArea) : - Plan_base(this), - m_stmtArea(stmtArea), - m_stmt(0) -{ -} - -inline void -Plan_root::setStmt(Plan_stmt* stmt) -{ - ctx_assert(stmt != 0); - m_stmt = stmt; -} - -/** - * @class Exec_root - * @brief Root node above top level statement node - */ -class Exec_root : public Exec_base { -public: - class Code : public Exec_base::Code { - public: - Code(); - virtual ~Code(); - }; - class Data : public Exec_base::Data { - public: - Data(); - virtual ~Data(); - }; - Exec_root(StmtArea& stmtArea); - virtual ~Exec_root(); - StmtArea& stmtArea() const; - void alloc(Ctx& ctx, Ctl& ctl); - void bind(Ctx& ctx); - void execute(Ctx& ctx, Ctl& ctl); - void fetch(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setStmt(Exec_stmt* stmt); - // save and free nodes - void saveNode(Exec_base* node); - void freeNodeList(); - // odbc support - void sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind); - void sqlParamData(Ctx& ctx, SQLPOINTER* value); - void sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind); -private: - friend class Plan_root; - friend class Exec_base; - friend class CodeGen; - StmtArea& m_stmtArea; - Exec_stmt* m_stmt; - ParamVector m_paramList; - unsigned m_paramData; // position of SQLParamData - typedef std::list<Exec_base*> NodeList; - NodeList m_nodeList; -}; - -inline -Exec_root::Code::Code() -{ -} - -inline -Exec_root::Data::Data() -{ -} - -inline -Exec_root::Exec_root(StmtArea& stmtArea) : - Exec_base(this), - m_stmtArea(stmtArea), - m_stmt(0), - m_paramData(0) -{ -} - -// children - -inline const Exec_root::Code& -Exec_root::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_root::Data& -Exec_root::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_root::setStmt(Exec_stmt* stmt) -{ - ctx_assert(stmt != 0); - m_stmt = stmt; - m_stmt->m_topLevel = true; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_select.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_select.cpp deleted file mode 100644 index 611b491968ddcf3d70a9bc9c193ff21e5dad36a8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_select.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <algorithm> -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include "Code_select.hpp" -#include "Code_query_lookup.hpp" -#include "Code_query_index.hpp" -#include "Code_query_scan.hpp" -#include "Code_query_range.hpp" -#include "Code_query_sys.hpp" -#include "Code_query_project.hpp" -#include "Code_query_filter.hpp" -#include "Code_query_join.hpp" -#include "Code_query_count.hpp" -#include "Code_query_sort.hpp" -#include "Code_query_group.hpp" -#include "Code_query_distinct.hpp" -#include "Code_expr_column.hpp" -#include "Code_expr_const.hpp" -#include "Code_pred_op.hpp" -#include "Code_root.hpp" - -Plan_select::~Plan_select() -{ -} - -Plan_base* -Plan_select::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_select); - // analyze tables - ctx_assert(m_tableList != 0); - for (unsigned i = 1; i <= m_tableList->countTable(); i++) { - Plan_table* table = m_tableList->getTable(i); - table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - ctx_assert(m_exprRow != 0); - if (m_exprRow->getAsterisk()) { - // expand unqualified asterisk to table-qualified columns - setRow(new Plan_expr_row(m_root)); - m_root->saveNode(m_exprRow); - for (unsigned i = 1; i <= m_tableList->countTable(); i++) { - const Plan_table* table = m_tableList->getTable(i); - const DictTable& dictTable = table->dictTable(); - for (unsigned i = 1; i <= dictTable.getSize(); i++) { - DictColumn* dictColumn = dictTable.getColumn(i); - Plan_expr_column* column = new Plan_expr_column(m_root, dictColumn->getName()); - m_root->saveNode(column); - column->setCname(table->getCname()); - m_exprRow->addExpr(column); - } - } - } - // set name resolution scope - ctl.m_tableList = m_tableList->m_tableList; - ctx_assert(ctl.m_tableList.size() >= 1 + 1); - ctl.m_aggrin = false; - // analyze select row - ctl.m_aggrok = true; - ctx_assert(m_exprRow != 0); - m_exprRow = static_cast<Plan_expr_row*>(m_exprRow->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_exprRow != 0); - // analyze group by row - ctl.m_aggrok = false; - if (m_groupRow != 0) { - m_groupRow = static_cast<Plan_expr_row*>(m_groupRow->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_groupRow != 0); - } - // analyze having predicate - ctl.m_aggrok = true; - if (m_havingPred != 0) { - m_havingPred = static_cast<Plan_pred*>(m_havingPred->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_havingPred != 0); - } - // ana|yze order by row - ctl.m_aggrok = true; - if (m_sortRow != 0) { - m_sortRow = static_cast<Plan_expr_row*>(m_sortRow->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_sortRow != 0); - } - // analyze the predicate - ctl.m_aggrok = false; - ctl.m_topand = true; - ctl.m_extra = false; - if (m_pred != 0) { - m_pred = static_cast<Plan_pred*>(m_pred->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_pred != 0); - } - // check if group by required - if (m_exprRow->anyAggr() && ! m_exprRow->allBound() && m_groupRow == 0) { - ctx.pushStatus(Error::Gen, "missing GROUP BY clause"); - return 0; - } - // in special cases add "group by 1" - if (m_groupRow == 0) { - bool addgb = false; - if (m_havingPred != 0) { - // allowed by oracle but nearly useless - addgb = true; - } else if (m_exprRow->anyAggr() && m_sortRow != 0) { - // allowed by oracle but useless - ctx_assert(m_exprRow->allBound()); - addgb = true; - } - if (addgb) { - ctx_log2(("adding 'group by 1'")); - m_groupRow = new Plan_expr_row(m_root); - m_root->saveNode(m_groupRow); - LexType type(LexType::Integer); - Plan_expr* expr = new Plan_expr_const(m_root, type, "1"); - m_root->saveNode(expr); - m_groupRow->addExpr(expr); - m_groupRow = static_cast<Plan_expr_row*>(m_groupRow->analyze(ctx, ctl)); - ctx_assert(ctx.ok()); - ctx_assert(m_groupRow != 0); - } - } - // check group by allowed - if (m_groupRow != 0) { - if (! m_exprRow->isAllGroupBy(m_groupRow)) { - ctx.pushStatus(Error::Gen, "invalid GROUP BY expression in SELECT list"); - return 0; - } - if (m_havingPred != 0) { - if (! m_havingPred->isGroupBy(m_groupRow)) { - ctx.pushStatus(Error::Gen, "invalid GROUP BY expression in HAVING clause"); - return 0; - } - } - if (m_sortRow != 0) { - if (! m_sortRow->isAllGroupBy(m_groupRow)) { - ctx.pushStatus(Error::Gen, "invalid GROUP BY expression in ORDER BY clause"); - return 0; - } - } - } - // log top level predicate - { - unsigned n = 0; - for (PredList::iterator i = ctl.m_topcomp.begin(); i != ctl.m_topcomp.end(); i++) - ctx_log2(("top level pred %u: count tables = %u, not interp = %u", - ++n, - (unsigned)(*i)->tableSet().size(), - (unsigned)(*i)->noInterp().size())); - } - // compose the raw query from lookups and scans - Plan_query* queryRaw = 0; - TableVector tableVector(1); - TableSet tsDone; - while (tableVector.size() < ctl.m_tableList.size()) { - Plan_table* tableBest = 0; - Plan_table::Index* indexBest = 0; - for (unsigned n = 1; n < ctl.m_tableList.size(); n++) { - Plan_table* table = ctl.m_tableList[n]; - if (tsDone.find(table) != tsDone.end()) - continue; - // get system table out of the way - if (table->dictTable().sysId()) { - tableBest = table; - break; - } - // find best match for primary key or index - for (unsigned i = 0; i <= table->indexCount(); i++) { - Plan_table::Index& index = table->m_indexList[i]; - table->resolveSet(ctx, index, tsDone); - if (! ctx.ok()) - return 0; - if (! index.m_keyFound) - continue; - // prefer smaller dependency set, smaller rank, less unused keys - int k; - (k = (indexBest == 0)) || - (k = (indexBest->m_keySet.size() - index.m_keySet.size())) || - (k = (indexBest->m_rank - index.m_rank)) || - (k = (indexBest->m_keyCountUnused - index.m_keyCountUnused)); - if (k > 0) { - tableBest = table; - indexBest = &index; - } - } - } - Plan_query* queryNext = 0; - Plan_table* tableNext = 0; - Plan_query_scan* queryScan = 0; // for pushing interpreted program - Plan_query_range* queryRange = 0; // ditto - if (tableBest == 0) { - // scan first unprocessed table - for (unsigned n = 1; n < ctl.m_tableList.size(); n++) { - Plan_table* table = ctl.m_tableList[n]; - if (tsDone.find(table) != tsDone.end()) - continue; - tableNext = table; - break; - } - ctx_assert(tableNext != 0); - queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(tableNext); - queryNext = queryScan; - ctx_log2(("optim: scan %s", tableNext->getPrintName())); - } else if (tableBest->dictTable().sysId()) { - // "scan" system table - tableNext = tableBest; - Plan_query_sys* querySys = new Plan_query_sys(m_root); - m_root->saveNode(querySys); - querySys->setTable(tableNext); - queryNext = querySys; - ctx_log2(("optim: scan %s", tableNext->getPrintName())); - } else if (indexBest->m_keySet.size() > 0) { - // scan first table this one depends on - const TableSet& keySet = indexBest->m_keySet; - for (unsigned n = 1; n < ctl.m_tableList.size(); n++) { - Plan_table* table = ctl.m_tableList[n]; - if (keySet.find(table) == keySet.end()) - continue; - ctx_assert(tsDone.find(table) == tsDone.end()); - tableNext = table; - break; - } - ctx_assert(tableNext != 0); - queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(tableNext); - queryNext = queryScan; - ctx_log2(("optim: scan %s for %s", tableNext->getPrintName(), tableBest->getPrintName())); - } else if (indexBest->m_rank == 0) { - // primary key depends only on processed tables - tableNext = tableBest; - Plan_query_lookup* queryLookup = new Plan_query_lookup(m_root); - m_root->saveNode(queryLookup); - queryLookup->setTable(tableNext); - queryNext = queryLookup; - ctx_log2(("optim: lookup %s", tableNext->getPrintName())); - } else if (indexBest->m_rank == 1) { - // hash index key depends only on processed tables - tableNext = tableBest; - Plan_query_index* queryIndex = new Plan_query_index(m_root); - m_root->saveNode(queryIndex); - queryIndex->setTable(tableNext, indexBest); - queryNext = queryIndex; - ctx_log2(("optim: lookup %s via index %s", tableNext->getPrintName(), indexBest->m_dictIndex->getName().c_str())); - } else if (indexBest->m_rank == 2) { - // ordered index key depends only on processed tables - tableNext = tableBest; - queryRange = new Plan_query_range(m_root); - m_root->saveNode(queryRange); - queryRange->setTable(tableNext, indexBest); - queryNext = queryRange; - ctx_log2(("optim: range scan %s via index %s", tableNext->getPrintName(), indexBest->m_dictIndex->getName().c_str())); - } else { - ctx_assert(false); - } - if (queryRaw == 0) { - queryRaw = queryNext; - } else { - Plan_query_join* queryJoin = new Plan_query_join(m_root); - m_root->saveNode(queryJoin); - queryJoin->setInner(queryRaw); - queryJoin->setOuter(queryNext); - queryRaw = queryJoin; - } - tableVector.push_back(tableNext); - tsDone.insert(tableNext); - // push down part of top level predicate to table scan or range scan - Plan_pred* predPush = 0; - Plan_pred* predInterp = 0; - PredList::iterator i = ctl.m_topcomp.begin(); - while (i != ctl.m_topcomp.end()) { - const TableSet& ts = (*i)->tableSet(); - if (! std::includes(tsDone.begin(), tsDone.end(), ts.begin(), ts.end())) { - i++; - continue; - } - predPush = predPush == 0 ? *i : predPush->opAnd(*i); - if (queryScan != 0) { - const TableSet& ts2 = (*i)->noInterp(); - if (ts2.find(tableNext) == ts2.end()) - predInterp = predInterp == 0 ? *i : predInterp->opAnd(*i); - } - if (queryRange != 0) { - const TableSet& ts2 = (*i)->noInterp(); - if (ts2.find(tableNext) == ts2.end()) - predInterp = predInterp == 0 ? *i : predInterp->opAnd(*i); - } - // remove it from top level predicate - PredList::iterator j = i; - i++; - ctl.m_topcomp.erase(j); - } - if (predPush != 0) { - Plan_query_filter* queryPush = new Plan_query_filter(m_root); - m_root->saveNode(queryPush); - queryPush->setQuery(queryRaw); - queryPush->setPred(predPush); - queryPush->m_topTable = tableNext; - queryRaw = queryPush; - } - if (predInterp != 0) { - if (queryScan != 0) - queryScan->setInterp(predInterp); - else if (queryRange != 0) - queryRange->setInterp(predInterp); - else - ctx_assert(false); - } - } - ctx_assert(ctl.m_topcomp.empty()); - // set base for column position offsets - for (unsigned n = 1; n < tableVector.size(); n++) { - Plan_table* table = tableVector[n]; - if (n == 1) { - table->m_resOff = 1; - } else { - Plan_table* tablePrev = tableVector[n - 1]; - table->m_resOff = tablePrev->m_resOff + tablePrev->m_exprColumns.size() - 1; - } - } - // next level up is one of project, count, group by - Plan_query* queryTop; - if (m_groupRow == 0) { - if (! m_exprRow->anyAggr()) { - Plan_query_project* queryProject = new Plan_query_project(m_root); - m_root->saveNode(queryProject); - queryProject->setQuery(queryRaw); - queryProject->setRow(m_exprRow); - queryProject->setLimit(m_limitOff, m_limitCnt); - queryTop = queryProject; - } else { - ctx_assert(m_exprRow->allBound()); - Plan_query_count* queryCount = new Plan_query_count(m_root); - m_root->saveNode(queryCount); - queryCount->setQuery(queryRaw); - queryCount->setRow(m_exprRow); - queryTop = queryCount; - } - } else { - Plan_query_group* queryGroup = new Plan_query_group(m_root); - m_root->saveNode(queryGroup); - queryGroup->setQuery(queryRaw); - queryGroup->setDataRow(m_exprRow); - queryGroup->setGroupRow(m_groupRow); - if (m_havingPred != 0) - queryGroup->setHavingPred(m_havingPred); - queryTop = queryGroup; - } - // optional sort becomes new top level - if (m_sortRow != 0) { - Plan_query_sort* querySort = new Plan_query_sort(m_root); - m_root->saveNode(querySort); - querySort->setQuery(queryTop); - querySort->setRow(m_sortRow); - queryTop = querySort; - } - // optional distinct becomes new top level - if (m_distinct) { - Plan_query_distinct* queryDistinct = new Plan_query_distinct(m_root); - m_root->saveNode(queryDistinct); - queryDistinct->setQuery(queryTop); - queryTop = queryDistinct; - } - // return top node - return queryTop; -} - -Exec_base* -Plan_select::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_select::print(Ctx& ctx) -{ - ctx.print(" [select"); - Plan_base* a[] = { m_tableList, m_exprRow, m_pred, m_groupRow, m_havingPred }; - printList(ctx, a, 5); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_select.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_select.hpp deleted file mode 100644 index eaa9b801f29b970c92bdb09da78ee82339274e40..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_select.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_select_hpp -#define ODBC_CODEGEN_Code_select_hpp - -#include <common/common.hpp> -#include "Code_stmt.hpp" -#include "Code_expr_row.hpp" -#include "Code_table_list.hpp" -#include "Code_pred.hpp" - -/** - * @class Plan_select - * @brief General select in PlanTree - * - * General select. An initial PlanTree node. - */ -class Plan_select : public Plan_stmt { -public: - Plan_select(Plan_root* root); - virtual ~Plan_select(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setList(Plan_table_list* tableList); - void setRow(Plan_expr_row* exprRow); - void setPred(Plan_pred* pred); - void setSort(Plan_expr_row* sortRow); - void setDistinct(bool distinct); - void setGroup(Plan_expr_row* groupRow); - void setHaving(Plan_pred* havingPred); - void setLimit(int off, int cnt); -protected: - Plan_table_list* m_tableList; - Plan_expr_row* m_exprRow; - Plan_pred* m_pred; - Plan_expr_row* m_sortRow; - bool m_distinct; - Plan_expr_row* m_groupRow; - Plan_pred* m_havingPred; - int m_limitOff; - int m_limitCnt; -}; - -inline -Plan_select::Plan_select(Plan_root* root) : - Plan_stmt(root), - m_tableList(0), - m_exprRow(0), - m_pred(0), - m_sortRow(0), - m_distinct(false), - m_groupRow(0), - m_havingPred(0), - m_limitOff(0), - m_limitCnt(-1) -{ -} - -// children - -inline void -Plan_select::setList(Plan_table_list* tableList) -{ - ctx_assert(tableList != 0); - m_tableList = tableList; -} - -inline void -Plan_select::setRow(Plan_expr_row* exprRow) -{ - ctx_assert(exprRow != 0); - m_exprRow = exprRow; -} - -inline void -Plan_select::setPred(Plan_pred* pred) -{ - ctx_assert(pred != 0); - m_pred = pred; -} - -inline void -Plan_select::setSort(Plan_expr_row* sortRow) -{ - ctx_assert(sortRow != 0); - m_sortRow = sortRow; -} - -inline void -Plan_select::setDistinct(bool distinct) -{ - m_distinct = distinct; -} - -inline void -Plan_select::setGroup(Plan_expr_row* groupRow) -{ - ctx_assert(groupRow != 0); - m_groupRow = groupRow; -} - -inline void -Plan_select::setHaving(Plan_pred* havingPred) -{ - ctx_assert(havingPred != 0); - m_havingPred = havingPred; -} - -inline void -Plan_select::setLimit(int off, int cnt) -{ - m_limitOff = off; - m_limitCnt = cnt; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.cpp deleted file mode 100644 index dd13ba0c3f7ae1e11ad137ff2f4f62253f491e57..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_set_row.hpp" -#include "Code_dml_column.hpp" - -Plan_set_row::~Plan_set_row() -{ -} - -Plan_base* -Plan_set_row::analyze(Ctx& ctx, Ctl& ctl) -{ - return this; -} - -Exec_base* -Plan_set_row::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_set_row::print(Ctx& ctx) -{ - ctx.print(" [set_row"); - Plan_base* a[] = { m_dmlRow, m_exprRow }; - printList(ctx, a, 2); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.hpp deleted file mode 100644 index 10d62826ac76466b2daae11d50551c487fc8e05e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_set_row.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_set_row_hpp -#define ODBC_CODEGEN_Code_set_row_hpp - -#include <vector> -#include <common/common.hpp> -#include <common/DataRow.hpp> -#include "Code_base.hpp" -#include "Code_dml_row.hpp" -#include "Code_expr_row.hpp" -#include "Code_root.hpp" - -/** - * @class Plan_set_row - * @brief Row of column assigments in update - * - * Used only in parse. The column and expression rows are moved - * to the update node immediately after parse. - */ -class Plan_set_row : public Plan_base { -public: - Plan_set_row(Plan_root* root); - virtual ~Plan_set_row(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void addColumn(Plan_dml_column* column); - void addExpr(Plan_expr* expr); -protected: - friend class Plan_update; - friend class Plan_insert; // for MySql - Plan_dml_row* m_dmlRow; - Plan_expr_row* m_exprRow; -}; - -inline -Plan_set_row::Plan_set_row(Plan_root* root) : - Plan_base(root) -{ - m_dmlRow = new Plan_dml_row(root); - root->saveNode(m_dmlRow); - m_exprRow = new Plan_expr_row(root); - root->saveNode(m_exprRow); -} - -// children - -inline void -Plan_set_row::addColumn(Plan_dml_column* column) -{ - m_dmlRow->addColumn(column); -} - -inline void -Plan_set_row::addExpr(Plan_expr* expr) -{ - m_exprRow->addExpr(expr); -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.cpp deleted file mode 100644 index d790f667b8455afacbf714f77f93d09b03239b34..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_stmt.hpp" - -// Plan_stmt - -Plan_stmt::~Plan_stmt() -{ -} - -// XXX remove -void -Plan_stmt::describe(Ctx& ctx) -{ - ctx_log1(("unimplemented describe")); -} - -// Exec_stmt - -Exec_stmt::Code::~Code() -{ -} - -Exec_stmt::Data::~Data() -{ -} - -Exec_stmt::~Exec_stmt() -{ -} - -void -Exec_stmt::bind(Ctx& ctx) -{ -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.hpp deleted file mode 100644 index 20b7fb965fba060b3d5874d0e2c64a732fc3cfec..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_stmt.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_stmt_hpp -#define ODBC_CODEGEN_Code_stmt_hpp - -#include <common/common.hpp> -#include <common/DataType.hpp> -#include "Code_base.hpp" - -class Ctx; - -/** - * @class Plan_stmt - * @brief Base class for statements in PlanTree - * - * A statement is a complete or partial SQL statement which can - * be optimized into executable statements Exec_stmt. - */ -class Plan_stmt : public Plan_base { -public: - Plan_stmt(Plan_root* root); - virtual ~Plan_stmt() = 0; - virtual void describe(Ctx& ctx); -}; - -inline -Plan_stmt::Plan_stmt(Plan_root* root) : - Plan_base(root) -{ -} - -/** - * @class Exec_stmt - * @brief Base class for statements in ExecTree - */ -class Exec_stmt : public Exec_base { -public: - class Code : public Exec_base::Code { - public: - virtual ~Code() = 0; - }; - class Data : public Exec_base::Data { - public: - virtual ~Data() = 0; - }; - Exec_stmt(Exec_root* root); - virtual ~Exec_stmt() = 0; - virtual void bind(Ctx& ctx); - virtual void execute(Ctx& ctx, Ctl& ctl) = 0; -protected: - friend class Exec_root; - bool m_topLevel; -}; - -inline -Exec_stmt::Exec_stmt(Exec_root* root) : - Exec_base(root), - m_topLevel(false) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_table.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_table.cpp deleted file mode 100644 index ee3c2a2ed07c3ed3d5ed2954a27605e2657e2dc0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_table.cpp +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <dictionary/DictSchema.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_table.hpp" -#include "Code_column.hpp" -#include "Code_expr_column.hpp" - -Plan_table::~Plan_table() -{ -} - -Plan_base* -Plan_table::analyze(Ctx& ctx, Ctl& ctl) -{ - if (m_dictTable != 0) // already done - return this; - DictTable* table = dictSchema().findTable(m_name); - if (table == 0) { - table = dictSchema().loadTable(ctx, m_name); - if (table == 0) { - ctx.pushStatus(Sqlstate::_42S02, Error::Gen, "table %s not found", m_name.c_str()); - return 0; - } - } - m_dictTable = table; - // indexes - m_indexList.resize(1 + m_dictTable->indexCount()); - for (unsigned i = 0; i <= indexCount(); i++) { - Index& index = m_indexList[i]; - index.m_pos = i; - if (index.m_pos == 0) { - index.m_keyCount = m_dictTable->keyCount(); - index.m_rank = 0; - } else { - index.m_dictIndex = m_dictTable->getIndex(i); - index.m_keyCount = index.m_dictIndex->getSize(); - if (index.m_dictIndex->getType() == NdbDictionary::Object::UniqueHashIndex) { - index.m_rank = 1; - } else if (index.m_dictIndex->getType() == NdbDictionary::Object::OrderedIndex) { - index.m_rank = 2; - } else { - ctx_assert(false); - } - } - index.m_keyEqList.resize(1 + index.m_keyCount); - } - return this; -} - -int -Plan_table::resolveColumn(Ctx& ctx, Plan_column* column, bool stripSchemaName) -{ - ctx_assert(column != 0); - bool dml, unq; - switch (column->m_type) { - case Plan_column::Type_expr: - dml = false; - unq = false; - break; - case Plan_column::Type_dml: - dml = true; - unq = true; - break; - case Plan_column::Type_idx: - dml = false; - unq = true; - break; - default: - ctx_assert(false); - break; - } - ColumnVector& columns = ! dml ? m_exprColumns : m_dmlColumns; - const BaseString& name = column->m_name; - const BaseString& cname = column->m_cname; - ctx_log3(("resolve %s column %s in table %s", ! dml ? "expr" : "dml", column->getPrintName(), getPrintName())); - // find column in table - DictColumn* dictColumn = dictTable().findColumn(name); - if (dictColumn == 0) - return 0; - // qualified column must match table correlation name - if (! cname.empty()) { - const char* str; - if (! m_cname.empty()) { - str = m_cname.c_str(); - } else { - str = m_name.c_str(); - if (stripSchemaName && strrchr(str, '.') != 0) - str = strrchr(str, '.') + 1; - } - if (strcmp(cname.c_str(), str) != 0) - return 0; - } - // find in positional list or add to it - unsigned resPos; - for (resPos = 1; resPos < columns.size(); resPos++) { - if (strcmp(columns[resPos]->getName().c_str(), name.c_str()) != 0) - continue; - // these columns must be unique - if (unq) { - ctx.pushStatus(Error::Gen, "duplicate column %s", column->getName().c_str()); - return -1; - } - break; - } - if (resPos >= columns.size()) { - columns.push_back(column); - } - ctx_log3(("resolve to attrId %u pos %u", (unsigned)dictColumn->getAttrId(), resPos)); - column->m_dictColumn = dictColumn; - column->m_resTable = this; - column->m_resPos = resPos; - // found - return 1; -} - -bool -Plan_table::resolveEq(Ctx& ctx, Plan_expr_column* column, Plan_expr* expr) -{ - ctx_assert(m_dictTable != 0); - const TableSet& ts = expr->tableSet(); - TableSet::const_iterator i = ts.find(this); - if (i != ts.end()) - return false; - unsigned found = 0; - for (unsigned i = 0; i <= indexCount(); i++) { - Index& index = m_indexList[i]; - for (unsigned n = 1, cnt = 0; n <= index.m_keyCount; n++) { - const DictColumn* dictColumn = 0; - if (index.m_pos == 0) { - ctx_assert(m_dictTable != 0); - dictColumn = m_dictTable->getKey(n); - } else { - ctx_assert(index.m_dictIndex != 0); - dictColumn = index.m_dictIndex->getColumn(n); - } - if (dictColumn != &column->dictColumn()) - continue; - ctx_assert(++cnt == 1); - index.m_keyEqList[n].push_back(expr); - if (index.m_pos == 0) - ctx_log2(("%s: found match to primary key column %s pos %u", getPrintName(), column->getPrintName(), n)); - else - ctx_log2(("%s: found match to index %s column %s pos %u", getPrintName(), index.m_dictIndex->getName().c_str(), column->getPrintName(), n)); - found++; - } - } - return (found != 0); -} - -void -Plan_table::resolveSet(Ctx& ctx, Index& index, const TableSet& tsDone) -{ - index.m_keyFound = false; - ExprVector keyEq; - keyEq.resize(1 + index.m_keyCount); - resolveSet(ctx, index, tsDone, keyEq, 1); -} - -void -Plan_table::resolveSet(Ctx& ctx, Index& index, const TableSet& tsDone, ExprVector& keyEq, unsigned n) -{ - if (n <= index.m_keyCount) { - // building up combinations - ExprList& keyEqList = index.m_keyEqList[n]; - for (ExprList::iterator i = keyEqList.begin(); i != keyEqList.end(); i++) { - keyEq[n] = *i; - resolveSet(ctx, index, tsDone, keyEq, n + 1); - } - if (! keyEqList.empty() || index.m_rank <= 1 || n == 1) - return; - // ordered index with maximal initial key match - } - TableSet keySet; - for (unsigned i = 1; i <= n - 1; i++) { - const TableSet& tableSet = keyEq[i]->tableSet(); - for (TableSet::const_iterator j = tableSet.begin(); j != tableSet.end(); j++) { - if (tsDone.find(*j) == tsDone.end()) - keySet.insert(*j); - } - } - if (! index.m_keyFound || index.m_keySet.size() > keySet.size()) { - index.m_keyFound = true; - index.m_keyEq = keyEq; - index.m_keySet = keySet; - index.m_keyCountUsed = n - 1; - index.m_keyCountUnused = index.m_keyCount - index.m_keyCountUsed; - // set matching size - index.m_keyEq.resize(1 + index.m_keyCountUsed); - } -} - -bool -Plan_table::exactKey(Ctx& ctx, const Index* indexKey) const -{ - ctx_assert(indexKey != 0 && indexKey == &m_indexList[indexKey->m_pos]); - for (unsigned i = 0; i <= indexCount(); i++) { - const Index& index = m_indexList[i]; - const ExprListVector& keyEqList = index.m_keyEqList; - for (unsigned n = 1; n <= index.m_keyCount; n++) { - if (index.m_pos == indexKey->m_pos) { - ctx_assert(keyEqList[n].size() >= 1); - if (keyEqList[n].size() > 1) { - ctx_log2(("index %u not exact: column %u has %u > 1 matches", - indexKey->m_pos, - n, - (unsigned)keyEqList[n].size())); - return false; - } - } else { - if (keyEqList[n].size() > 0) { - ctx_log2(("index %u not exact: index %u column %u has %u > 0 matches", - indexKey->m_pos, - index.m_pos, - n, - (unsigned)keyEqList[n].size())); - return false; - } - } - } - } - ctx_log2(("index %u is exact", indexKey->m_pos)); - return true; -} - -Exec_base* -Plan_table::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_table::print(Ctx& ctx) -{ - ctx.print(" [table %s]", getPrintName()); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_table.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_table.hpp deleted file mode 100644 index 8a95b8fa26c40a98b0be2c25a116812106263d87..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_table.hpp +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_table_hpp -#define ODBC_CODEGEN_Code_table_hpp - -#include <vector> -#include <common/common.hpp> -#include "Code_base.hpp" - -class DictTable; -class DictColumn; -class DictIndex; -class Plan_query_filter; -class Plan_query_lookup; -class Plan_query_range; -class Plan_column; -class Plan_expr_column; -class Plan_select; -class Plan_delete; -class Plan_delete_lookup; -class Plan_update; -class Plan_update_lookup; - -/** - * @class Plan_table - * @brief Table node in PlanTree - * - * This is a pure Plan node. Final executable nodes have table - * information built-in. - */ -class Plan_table : public Plan_base { -public: - Plan_table(Plan_root* root, const BaseString& name); - virtual ~Plan_table(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // attributes - const BaseString& getName() const; - const BaseString& getCname() const; - const char* getPrintName() const; - void setCname(const BaseString& cname); - const DictTable& dictTable() const; - unsigned indexCount() const; - // resolve - const ColumnVector& exprColumns() const; - const ColumnVector& dmlColumns() const; -protected: - friend class Plan_column; - friend class Plan_query_filter; - friend class Plan_query_lookup; - friend class Plan_query_index; - friend class Plan_query_range; - friend class Plan_expr_column; - friend class Plan_select; - friend class Plan_delete; - friend class Plan_delete_lookup; - friend class Plan_delete_index; - friend class Plan_update; - friend class Plan_update_lookup; - friend class Plan_update_index; - BaseString m_name; - BaseString m_cname; - BaseString m_printName; - DictTable* m_dictTable; - /* - * Resolve column. Returns 1 on found, 0 on not found, and -1 on error. - * Modifies both table and column data. - */ - int resolveColumn(Ctx& ctx, Plan_column* column, bool stripSchemaName = false); - ColumnVector m_exprColumns; - ColumnVector m_dmlColumns; - /* - * Offset for resolved columns in join. This is sum over m_exprColumns - * lengths for all preceding tables. - */ - unsigned m_resOff; - /* - * Each column in primary key and unique hash index has list of - * expressions it is set equal to in the where-clause (at top level). - */ - bool resolveEq(Ctx& ctx, Plan_expr_column* column, Plan_expr* expr); - /* - * Index struct for primary key and indexes. - */ - struct Index { - Index() : - m_pos(0), - m_keyFound(false), - m_dictIndex(0), - m_rank(~0), - m_keyCount(0), - m_keyCountUsed(0) { - } - unsigned m_pos; - ExprListVector m_keyEqList; - bool m_keyFound; - ExprVector m_keyEq; - TableSet m_keySet; - const DictIndex* m_dictIndex; // for index only - unsigned m_rank; // 0-pk 1-hash index 2-ordered index - unsigned m_keyCount; // number of columns - unsigned m_keyCountUsed; // may be less for ordered index - unsigned m_keyCountUnused; // m_keyCount - m_keyCountUsed - }; - typedef std::vector<Index> IndexList; // primary key is entry 0 - IndexList m_indexList; - /* - * Find set of additional tables (maybe empty) required to resolve the key - * columns. - */ - void resolveSet(Ctx& ctx, Index& index, const TableSet& tsDone); - void resolveSet(Ctx& ctx, Index& index, const TableSet& tsDone, ExprVector& keyEq, unsigned n); - /* - * Check for exactly one key or index match. - */ - bool exactKey(Ctx& ctx, const Index* indexKey) const; -}; - -inline -Plan_table::Plan_table(Plan_root* root, const BaseString& name) : - Plan_base(root), - m_name(name), - m_printName(name), - m_dictTable(0), - m_exprColumns(1), // 1-based - m_dmlColumns(1), // 1-based - m_resOff(0), - m_indexList(1) -{ -} - -inline const BaseString& -Plan_table::getName() const -{ - return m_name; -} - -inline const BaseString& -Plan_table::getCname() const -{ - return m_cname; -} - -inline const char* -Plan_table::getPrintName() const -{ - return m_printName.c_str(); -} - -inline void -Plan_table::setCname(const BaseString& cname) -{ - m_cname.assign(cname); - m_printName.assign(m_name); - if (! m_cname.empty()) { - m_printName.append(" "); - m_printName.append(m_cname); - } -} - -inline const DictTable& -Plan_table::dictTable() const -{ - ctx_assert(m_dictTable != 0); - return *m_dictTable; -} - -inline unsigned -Plan_table::indexCount() const -{ - ctx_assert(m_indexList.size() > 0); - return m_indexList.size() - 1; -} - -inline const Plan_table::ColumnVector& -Plan_table::exprColumns() const -{ - return m_exprColumns; -} - -inline const Plan_table::ColumnVector& -Plan_table::dmlColumns() const -{ - return m_dmlColumns; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.cpp deleted file mode 100644 index ea9f4fdc26e5ab77f8ee65ac3d1f14f515d68004..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Code_table_list.hpp" - -Plan_table_list::~Plan_table_list() -{ -} - -Plan_base* -Plan_table_list::analyze(Ctx& ctx, Ctl& ctl) -{ - // analyze the tables - for (unsigned i = 1, n = countTable(); i <= n; i++) { - Plan_table* table = getTable(i); - table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - } - // node was not replaced - return this; -} - -Exec_base* -Plan_table_list::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_table_list::print(Ctx& ctx) -{ - ctx.print(" [table_list"); - for (unsigned i = 1, n = countTable(); i <= n; i++) { - Plan_base* a[] = { m_tableList[i] }; - printList(ctx, a, 1); - } - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.hpp deleted file mode 100644 index 47989166cace5eecd3f369886d86a32d5f52f45a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_table_list.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_table_list_hpp -#define ODBC_CODEGEN_Code_table_list_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_table.hpp" - -/** - * @class Plan_table_list - * @brief List of tables in select statement - */ -class Plan_table_list : public Plan_base { -public: - Plan_table_list(Plan_root* root); - virtual ~Plan_table_list(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - unsigned countTable() const; - void addTable(Plan_table* table); - Plan_table* getTable(unsigned i) const; -protected: - friend class Plan_select; - TableVector m_tableList; -}; - -inline -Plan_table_list::Plan_table_list(Plan_root* root) : - Plan_base(root), - m_tableList(1) -{ -} - -// children - -inline unsigned -Plan_table_list::countTable() const -{ - return m_tableList.size() - 1; -} - -inline void -Plan_table_list::addTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_tableList.push_back(table); -} - -inline Plan_table* -Plan_table_list::getTable(unsigned i) const -{ - ctx_assert(1 <= i && i <= countTable() && m_tableList[i] != 0); - return m_tableList[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update.cpp deleted file mode 100644 index 0b33cd628b43519b7cdcf3b968336af661d99b42..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update.cpp +++ /dev/null @@ -1,246 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_update.hpp" -#include "Code_update_lookup.hpp" -#include "Code_update_index.hpp" -#include "Code_update_scan.hpp" -#include "Code_table.hpp" -#include "Code_query_project.hpp" -#include "Code_query_filter.hpp" -#include "Code_query_scan.hpp" -#include "Code_query_lookup.hpp" -#include "Code_query_index.hpp" -#include "Code_query_range.hpp" -#include "Code_query_repeat.hpp" -#include "Code_root.hpp" - -// Plan_update - -Plan_update::~Plan_update() -{ -} - -Plan_base* -Plan_update::analyze(Ctx& ctx, Ctl& ctl) -{ - stmtArea().stmtInfo().setName(Stmt_name_update); - // analyze the table - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - // get column and expression rows - ctx_assert(m_setRow != 0); - setDmlRow(m_setRow->m_dmlRow); - setExprRow(m_setRow->m_exprRow); - m_setRow = 0; - // implied by parse - ctx_assert(m_dmlRow->getSize() == m_exprRow->getSize()); - // set name resolution scope - ctl.m_tableList.resize(1 + 1); // indexed from 1 - ctl.m_tableList[1] = m_table; - // analyze the rows - m_dmlRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctl.m_dmlRow = m_dmlRow; // row type to convert to - ctl.m_const = true; // set to constants - m_exprRow->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - bool setConst = ctl.m_const; - ctl.m_dmlRow = 0; - Plan_dml* stmt = 0; - // top level query is a project - Plan_query_project* queryProject = new Plan_query_project(m_root); - m_root->saveNode(queryProject); - queryProject->setRow(m_exprRow); - if (m_pred != 0) { - // analyze the predicate - ctl.m_topand = true; - ctl.m_extra = false; - m_pred = static_cast<Plan_pred*>(m_pred->analyze(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(m_pred != 0); - // check for key match - Plan_table::Index* indexBest = 0; - for (unsigned i = 0; i <= m_table->indexCount(); i++) { - Plan_table::Index& index = m_table->m_indexList[i]; - TableSet tsDone; - m_table->resolveSet(ctx, index, tsDone); - if (! ctx.ok()) - return 0; - if (! index.m_keyFound) - continue; - // prefer smaller rank, less unused keys - int k; - (k = (indexBest == 0)) || - (k = (indexBest->m_rank - index.m_rank)) || - (k = (indexBest->m_keyCountUnused - index.m_keyCountUnused)); - if (k > 0) - indexBest = &index; - } - if (indexBest != 0) { - const bool exactKey = indexBest->m_rank <= 1 ? m_table->exactKey(ctx, indexBest) : false; - const bool direct = setConst && ! ctl.m_extra && exactKey; - ctx_log3(("update direct=%d: const=%d extra=%d exact=%d", direct, setConst, ctl.m_extra, exactKey)); - if (indexBest->m_rank == 0) { - // primary key - Plan_update_lookup* updateLookup = new Plan_update_lookup(m_root); - m_root->saveNode(updateLookup); - updateLookup->setTable(m_table); - updateLookup->setDmlRow(m_dmlRow); - if (direct) { - // constant values and exact key match - Plan_query_repeat* queryRepeat = new Plan_query_repeat(m_root, 1); - m_root->saveNode(queryRepeat); - queryProject->setQuery(queryRepeat); - } else { - // more conditions or non-constant values - Plan_query_lookup* queryLookup = new Plan_query_lookup(m_root); - m_root->saveNode(queryLookup); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryLookup->setTable(m_table); - queryFilter->setQuery(queryLookup); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - queryProject->setQuery(queryFilter); - } - updateLookup->setQuery(queryProject); - stmt = updateLookup; - } else if (indexBest->m_rank == 1) { - // hash index - Plan_update_index* updateIndex = new Plan_update_index(m_root); - m_root->saveNode(updateIndex); - updateIndex->setTable(m_table, indexBest); - updateIndex->setDmlRow(m_dmlRow); - if (direct) { - // constant values and exact key match - Plan_query_repeat* queryRepeat = new Plan_query_repeat(m_root, 1); - m_root->saveNode(queryRepeat); - queryProject->setQuery(queryRepeat); - } else { - // more conditions or non-constant values - Plan_query_index* queryIndex = new Plan_query_index(m_root); - m_root->saveNode(queryIndex); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryIndex->setTable(m_table, indexBest); - queryFilter->setQuery(queryIndex); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - queryProject->setQuery(queryFilter); - } - updateIndex->setQuery(queryProject); - stmt = updateIndex; - } else if (indexBest->m_rank == 2) { - // ordered index - Plan_update_scan* updateScan = new Plan_update_scan(m_root); - m_root->saveNode(updateScan); - updateScan->setTable(m_table); - updateScan->setDmlRow(m_dmlRow); - Plan_query_range* queryRange = new Plan_query_range(m_root); - m_root->saveNode(queryRange); - queryRange->setTable(m_table, indexBest); - queryRange->setExclusive(); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryFilter->setQuery(queryRange); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - // interpeter - const TableSet& ts2 = m_pred->noInterp(); - ctx_assert(ts2.size() <= 1); - if (ts2.size() == 0) { - queryRange->setInterp(m_pred); - } - queryProject->setQuery(queryFilter); - updateScan->setQuery(queryProject); - stmt = updateScan; - } else { - ctx_assert(false); - } - } else { - // scan update with filter - Plan_update_scan* updateScan = new Plan_update_scan(m_root); - m_root->saveNode(updateScan); - updateScan->setTable(m_table); - updateScan->setDmlRow(m_dmlRow); - Plan_query_scan* queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(m_table); - queryScan->setExclusive(); - Plan_query_filter* queryFilter = new Plan_query_filter(m_root); - m_root->saveNode(queryFilter); - queryFilter->setQuery(queryScan); - queryFilter->setPred(m_pred); - queryFilter->m_topTable = m_table; - // interpeter - const TableSet& ts2 = m_pred->noInterp(); - ctx_assert(ts2.size() <= 1); - if (ts2.size() == 0) { - queryScan->setInterp(m_pred); - } - queryProject->setQuery(queryFilter); - updateScan->setQuery(queryProject); - stmt = updateScan; - } - } else { - // scan update without filter - Plan_update_scan* updateScan = new Plan_update_scan(m_root); - m_root->saveNode(updateScan); - updateScan->setTable(m_table); - updateScan->setDmlRow(m_dmlRow); - Plan_query_scan* queryScan = new Plan_query_scan(m_root); - m_root->saveNode(queryScan); - queryScan->setTable(m_table); - queryScan->setExclusive(); - queryProject->setQuery(queryScan); - updateScan->setQuery(queryProject); - stmt = updateScan; - } - // set base for column position offsets - m_table->m_resOff = 1; - return stmt; -} - -void -Plan_update::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "UPDATE WHERE", SQL_DIAG_UPDATE_WHERE); -} - -Exec_base* -Plan_update::codegen(Ctx& ctx, Ctl& ctl) -{ - ctx_assert(false); - return 0; -} - -void -Plan_update::print(Ctx& ctx) -{ - ctx.print(" [update"); - Plan_base* a[] = { m_table, m_setRow, m_dmlRow, m_exprRow }; - printList(ctx, a, 4); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update.hpp deleted file mode 100644 index 380b651518b9aef904c0e87846c18e985467f44b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update.hpp +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_update_hpp -#define ODBC_CODEGEN_Code_update_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_set_row.hpp" -#include "Code_table.hpp" -#include "Code_pred.hpp" -#include "Code_query.hpp" - -/** - * @class Plan_update - * @brief Update in PlanTree - */ -class Plan_update : public Plan_dml { -public: - Plan_update(Plan_root* root); - virtual ~Plan_update(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); - void setRow(Plan_set_row* setRow); - void setDmlRow(Plan_dml_row* dmlRow); - void setExprRow(Plan_expr_row* exprRow); - void setPred(Plan_pred* pred); -protected: - Plan_table* m_table; - Plan_set_row* m_setRow; - Plan_dml_row* m_dmlRow; - Plan_expr_row* m_exprRow; - Plan_pred* m_pred; -}; - -inline -Plan_update::Plan_update(Plan_root* root) : - Plan_dml(root), - m_table(0), - m_setRow(0), - m_dmlRow(0), - m_exprRow(0), - m_pred(0) -{ -} - -// children - -inline void -Plan_update::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_update::setRow(Plan_set_row* setRow) -{ - ctx_assert(setRow != 0); - m_setRow = setRow; -} - -inline void -Plan_update::setDmlRow(Plan_dml_row* dmlRow) -{ - ctx_assert(dmlRow != 0); - m_dmlRow = dmlRow; -} - -inline void -Plan_update::setExprRow(Plan_expr_row* exprRow) -{ - ctx_assert(exprRow != 0); - m_exprRow = exprRow; -} - -inline void -Plan_update::setPred(Plan_pred* pred) -{ - ctx_assert(pred != 0); - m_pred = pred; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.cpp deleted file mode 100644 index 6f74db0d9136f598a98ce4095c44c7a6a3fc90fe..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_dml_column.hpp" -#include "Code_expr.hpp" -#include "Code_update_index.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -// Plan_update_index - -Plan_update_index::~Plan_update_index() -{ -} - -Plan_base* -Plan_update_index::analyze(Ctx& ctx, Ctl& ctl) -{ - ctl.m_dmlRow = m_dmlRow; // row type to convert to - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_update_index::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "UPDATE WHERE", SQL_DIAG_UPDATE_WHERE); -} - -Exec_base* -Plan_update_index::codegen(Ctx& ctx, Ctl& ctl) -{ - // generate code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0 && m_index != 0); - const BaseString& tableName = m_table->getName(); - ctx_assert(m_index->m_dictIndex != 0); - const DictIndex& dictIndex = *m_index->m_dictIndex; - const BaseString& indexName = dictIndex.getName(); - const unsigned keyCount = m_index->m_keyCount; - const ColumnVector& columns = m_table->dmlColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_update_index::Code& code = *new Exec_update_index::Code(keyCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - code.m_indexName = strcpy(new char[indexName.length() + 1], indexName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictIndex.getColumn(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = k - 1; // index column order - } - // matching expressions - ctx_assert(m_index->m_keyFound); - const ExprVector& keyEq = m_index->m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // updated attributes - code.m_attrCount = attrCount; - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_update_index* exec = new Exec_update_index(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_update_index::print(Ctx& ctx) -{ - ctx.print(" [update_index"); - Plan_base* a[] = { m_table, m_query }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]"); -} - -// Exec_delete - -Exec_update_index::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; - delete[] m_attrId; -} - -Exec_update_index::Data::~Data() -{ -} - -Exec_update_index::~Exec_update_index() -{ -} - -void -Exec_update_index::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // create data - Data& data = *new Data; - setData(data); - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } -} - -void -Exec_update_index::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_update_index::print(Ctx& ctx) -{ - ctx.print(" [update_index"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" keyId="); - for (unsigned i = 1; i <= code.m_keyCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_keyId[i]); - } - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - } - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.hpp deleted file mode 100644 index bbad822650aab02203eab929678d415758870630..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_index.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_update_index_hpp -#define ODBC_CODEGEN_Code_update_index_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_table.hpp" -#include "Code_query.hpp" - -/** - * @class Plan_update_index - * @brief Update in PlanTree - */ -class Plan_update_index : public Plan_dml { -public: - Plan_update_index(Plan_root* root); - virtual ~Plan_update_index(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table, Plan_table::Index* index); - void setDmlRow(Plan_dml_row* dmlRow); - void setQuery(Plan_query* query); -protected: - Plan_table* m_table; - Plan_table::Index* m_index; - Plan_dml_row* m_dmlRow; - Plan_query* m_query; -}; - -inline -Plan_update_index::Plan_update_index(Plan_root* root) : - Plan_dml(root), - m_table(0), - m_dmlRow(0), - m_query(0) -{ -} - -inline void -Plan_update_index::setTable(Plan_table* table, Plan_table::Index* index) -{ - ctx_assert(table != 0 && index != 0 && index == &table->m_indexList[index->m_pos] && index->m_pos != 0); - m_table = table; - m_index = index; -} - -inline void -Plan_update_index::setDmlRow(Plan_dml_row* dmlRow) -{ - ctx_assert(dmlRow != 0); - m_dmlRow = dmlRow; -} - -inline void -Plan_update_index::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -/** - * @class Exec_update_index - * @brief Insert in ExecTree - */ -class Exec_update_index : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(unsigned keyCount); - virtual ~Code(); - protected: - friend class Plan_update_index; - friend class Exec_update_index; - const char* m_tableName; - const char* m_indexName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - unsigned m_attrCount; - NdbAttrId* m_attrId; - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_update_index; - }; - Exec_update_index(Exec_root* root); - virtual ~Exec_update_index(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_update_index::Code::Code(unsigned keyCount) : - m_tableName(0), - m_indexName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_keyMatch(0), - m_attrCount(0), - m_attrId(0) -{ -} - -inline -Exec_update_index::Data::Data() -{ -} - -inline -Exec_update_index::Exec_update_index(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_update_index::Code& -Exec_update_index::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_update_index::Data& -Exec_update_index::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_update_index::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.cpp deleted file mode 100644 index 7525fb72692d018816093dd866ec1ce3f119864d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_dml_column.hpp" -#include "Code_expr.hpp" -#include "Code_update_lookup.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -// Plan_update_lookup - -Plan_update_lookup::~Plan_update_lookup() -{ -} - -Plan_base* -Plan_update_lookup::analyze(Ctx& ctx, Ctl& ctl) -{ - ctl.m_dmlRow = m_dmlRow; // row type to convert to - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_update_lookup::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "UPDATE WHERE", SQL_DIAG_UPDATE_WHERE); -} - -Exec_base* -Plan_update_lookup::codegen(Ctx& ctx, Ctl& ctl) -{ - // generate code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0); - const BaseString& tableName = m_table->getName(); - const DictTable& dictTable = m_table->dictTable(); - const unsigned keyCount = dictTable.keyCount(); - const ColumnVector& columns = m_table->dmlColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_update_lookup::Code& code = *new Exec_update_lookup::Code(keyCount); - code.m_tableName = strcpy(new char[tableName.length() + 1], tableName.c_str()); - // key attributes - code.m_keyId = new NdbAttrId[1 + keyCount]; - code.m_keyId[0] = (NdbAttrId)-1; - for (unsigned k = 1; k <= keyCount; k++) { - const DictColumn* keyColumn = dictTable.getKey(k); - const SqlType& sqlType = keyColumn->sqlType(); - SqlSpec sqlSpec(sqlType, SqlSpec::Physical); - code.m_keySpecs.setEntry(k, sqlSpec); - code.m_keyId[k] = keyColumn->getAttrId(); - } - // matching expressions - const Plan_table::Index& index = m_table->m_indexList[0]; - ctx_assert(index.m_keyFound); - const ExprVector& keyEq = index.m_keyEq; - ctx_assert(keyEq.size() == 1 + keyCount); - code.m_keyMatch = new Exec_expr* [1 + keyCount]; - code.m_keyMatch[0] = 0; - for (unsigned k = 1; k <= keyCount; k++) { - Plan_expr* expr = keyEq[k]; - Exec_expr* execExpr = static_cast<Exec_expr*>(expr->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execExpr != 0); - code.m_keyMatch[k] = execExpr; - } - // updated attributes - code.m_attrCount = attrCount; - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_update_lookup* exec = new Exec_update_lookup(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_update_lookup::print(Ctx& ctx) -{ - ctx.print(" [update_lookup"); - Plan_base* a[] = { m_table, m_query }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]"); -} - -// Exec_delete - -Exec_update_lookup::Code::~Code() -{ - delete[] m_tableName; - delete[] m_keyId; - delete[] m_keyMatch; - delete[] m_attrId; -} - -Exec_update_lookup::Data::~Data() -{ -} - -Exec_update_lookup::~Exec_update_lookup() -{ -} - -void -Exec_update_lookup::alloc(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // create data - Data& data = *new Data; - setData(data); - // allocate matching expressions - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* expr = code.m_keyMatch[k]; - ctx_assert(expr != 0); - expr->alloc(ctx, ctl); - if (! ctx.ok()) - return; - } -} - -void -Exec_update_lookup::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_update_lookup::print(Ctx& ctx) -{ - ctx.print(" [update_lookup"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" keyId="); - for (unsigned i = 1; i <= code.m_keyCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_keyId[i]); - } - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - } - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.hpp deleted file mode 100644 index fc4341880ddb0a2a9cd841eda09bfb069f5f8bd8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_lookup.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_update_lookup_hpp -#define ODBC_CODEGEN_Code_update_lookup_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_table.hpp" -#include "Code_query.hpp" - -/** - * @class Plan_update_lookup - * @brief Update in PlanTree - */ -class Plan_update_lookup : public Plan_dml { -public: - Plan_update_lookup(Plan_root* root); - virtual ~Plan_update_lookup(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); - void setDmlRow(Plan_dml_row* dmlRow); - void setQuery(Plan_query* query); -protected: - Plan_table* m_table; - Plan_dml_row* m_dmlRow; - Plan_query* m_query; -}; - -inline -Plan_update_lookup::Plan_update_lookup(Plan_root* root) : - Plan_dml(root), - m_table(0), - m_dmlRow(0), - m_query(0) -{ -} - -inline void -Plan_update_lookup::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_update_lookup::setDmlRow(Plan_dml_row* dmlRow) -{ - ctx_assert(dmlRow != 0); - m_dmlRow = dmlRow; -} - -inline void -Plan_update_lookup::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -/** - * @class Exec_update_lookup - * @brief Insert in ExecTree - */ -class Exec_update_lookup : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(unsigned keyCount); - virtual ~Code(); - protected: - friend class Plan_update_lookup; - friend class Exec_update_lookup; - char* m_tableName; - unsigned m_keyCount; - SqlSpecs m_keySpecs; // key types - NdbAttrId* m_keyId; - Exec_expr** m_keyMatch; // XXX pointers for now - unsigned m_attrCount; - NdbAttrId* m_attrId; - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_update_lookup; - }; - Exec_update_lookup(Exec_root* root); - virtual ~Exec_update_lookup(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_update_lookup::Code::Code(unsigned keyCount) : - m_tableName(0), - m_keyCount(keyCount), - m_keySpecs(keyCount), - m_keyId(0), - m_keyMatch(0), - m_attrCount(0), - m_attrId(0) -{ -} - -inline -Exec_update_lookup::Data::Data() -{ -} - -inline -Exec_update_lookup::Exec_update_lookup(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_update_lookup::Code& -Exec_update_lookup::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_update_lookup::Data& -Exec_update_lookup::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_update_lookup::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.cpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.cpp deleted file mode 100644 index 9fac17284698add171788680350f90bdfae63688..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/StmtArea.hpp> -#include <dictionary/DictTable.hpp> -#include <dictionary/DictColumn.hpp> -#include "Code_dml_column.hpp" -#include "Code_update_scan.hpp" -#include "Code_table.hpp" -#include "Code_root.hpp" - -// Plan_update_scan - -Plan_update_scan::~Plan_update_scan() -{ -} - -Plan_base* -Plan_update_scan::analyze(Ctx& ctx, Ctl& ctl) -{ - ctl.m_dmlRow = m_dmlRow; // row type to convert to - ctx_assert(m_query != 0); - m_query->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - ctx_assert(m_table != 0); - m_table->analyze(ctx, ctl); - if (! ctx.ok()) - return 0; - return this; -} - -void -Plan_update_scan::describe(Ctx& ctx) -{ - stmtArea().setFunction(ctx, "UPDATE WHERE", SQL_DIAG_UPDATE_WHERE); -} - -Exec_base* -Plan_update_scan::codegen(Ctx& ctx, Ctl& ctl) -{ - // generate code for the query - ctx_assert(m_query != 0); - Exec_query* execQuery = static_cast<Exec_query*>(m_query->codegen(ctx, ctl)); - if (! ctx.ok()) - return 0; - ctx_assert(execQuery != 0); - // set up - ctx_assert(m_table != 0); - const ColumnVector& columns = m_table->dmlColumns(); - ctx_assert(columns.size() > 0); - const unsigned attrCount = columns.size() - 1; - // create the code - Exec_update_scan::Code& code = *new Exec_update_scan::Code(); - // updated attributes - code.m_attrCount = attrCount; - code.m_attrId = new NdbAttrId[1 + attrCount]; - code.m_attrId[0] = (NdbAttrId)-1; - for (unsigned i = 1; i <= attrCount; i++) { - Plan_column* column = columns[i]; - ctx_assert(column != 0); - const DictColumn& dictColumn = column->dictColumn(); - code.m_attrId[i] = dictColumn.getAttrId(); - } - // create the exec - Exec_update_scan* exec = new Exec_update_scan(ctl.m_execRoot); - ctl.m_execRoot->saveNode(exec); - exec->setCode(code); - exec->setQuery(execQuery); - return exec; -} - -void -Plan_update_scan::print(Ctx& ctx) -{ - ctx.print(" [update_scan"); - Plan_base* a[] = { m_table, m_query }; - printList(ctx, a, sizeof(a)/sizeof(a[0])); - ctx.print("]"); -} - -// Exec_delete - -Exec_update_scan::Code::~Code() -{ - delete[] m_attrId; -} - -Exec_update_scan::Data::~Data() -{ -} - -Exec_update_scan::~Exec_update_scan() -{ -} - -void -Exec_update_scan::alloc(Ctx& ctx, Ctl& ctl) -{ - // allocate the subquery - ctx_assert(m_query != 0); - m_query->alloc(ctx, ctl); - if (! ctx.ok()) - return; - // create data - Data& data = *new Data; - setData(data); -} - -void -Exec_update_scan::close(Ctx& ctx) -{ - ctx_assert(m_query != 0); - m_query->close(ctx); -} - -void -Exec_update_scan::print(Ctx& ctx) -{ - ctx.print(" [update_scan"); - if (m_code != 0) { - const Code& code = getCode(); - ctx.print(" attrId="); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - if (i > 1) - ctx.print(","); - ctx.print("%u", (unsigned)code.m_attrId[i]); - } - } - Exec_base* a[] = { m_query }; - printList(ctx, a, 1); - ctx.print("]"); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.hpp b/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.hpp deleted file mode 100644 index d742883e56189ff85124d09ca32e1825bb4d3920..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Code_update_scan.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_Code_update_scan_hpp -#define ODBC_CODEGEN_Code_update_scan_hpp - -#include <common/common.hpp> -#include "Code_base.hpp" -#include "Code_dml.hpp" -#include "Code_table.hpp" -#include "Code_pred.hpp" -#include "Code_query.hpp" - -/** - * @class Plan_update_scan - * @brief Update in PlanTree - */ -class Plan_update_scan : public Plan_dml { -public: - Plan_update_scan(Plan_root* root); - virtual ~Plan_update_scan(); - Plan_base* analyze(Ctx& ctx, Ctl& ctl); - void describe(Ctx& ctx); - Exec_base* codegen(Ctx& ctx, Ctl& ctl); - void print(Ctx& ctx); - // children - void setTable(Plan_table* table); - void setDmlRow(Plan_dml_row* dmlRow); - void setQuery(Plan_query* query); -protected: - Plan_table* m_table; - Plan_dml_row* m_dmlRow; - Plan_query* m_query; -}; - -inline -Plan_update_scan::Plan_update_scan(Plan_root* root) : - Plan_dml(root), - m_table(0), - m_dmlRow(0), - m_query(0) -{ -} - -// children - -inline void -Plan_update_scan::setTable(Plan_table* table) -{ - ctx_assert(table != 0); - m_table = table; -} - -inline void -Plan_update_scan::setDmlRow(Plan_dml_row* dmlRow) -{ - ctx_assert(dmlRow != 0); - m_dmlRow = dmlRow; -} - -inline void -Plan_update_scan::setQuery(Plan_query* query) -{ - ctx_assert(query != 0); - m_query = query; -} - -/** - * @class Exec_update_scan - * @brief Insert in ExecTree - */ -class Exec_update_scan : public Exec_dml { -public: - class Code : public Exec_dml::Code { - public: - Code(); - virtual ~Code(); - protected: - friend class Plan_update_scan; - friend class Exec_update_scan; - unsigned m_attrCount; - NdbAttrId* m_attrId; - }; - class Data : public Exec_dml::Data { - public: - Data(); - virtual ~Data(); - protected: - friend class Exec_update_scan; - }; - Exec_update_scan(Exec_root* root); - virtual ~Exec_update_scan(); - void alloc(Ctx& ctx, Ctl& ctl); - void execImpl(Ctx& ctx, Ctl& ctl); - void close(Ctx& ctx); - void print(Ctx& ctx); - // children - const Code& getCode() const; - Data& getData() const; - void setQuery(Exec_query* query); -protected: - Exec_query* m_query; -}; - -inline -Exec_update_scan::Code::Code() : - m_attrCount(0), - m_attrId(0) -{ -} - -inline -Exec_update_scan::Data::Data() -{ -} - -inline -Exec_update_scan::Exec_update_scan(Exec_root* root) : - Exec_dml(root), - m_query(0) -{ -} - -// children - -inline const Exec_update_scan::Code& -Exec_update_scan::getCode() const -{ - const Code* code = static_cast<const Code*>(m_code); - return *code; -} - -inline Exec_update_scan::Data& -Exec_update_scan::getData() const -{ - Data* data = static_cast<Data*>(m_data); - return *data; -} - -inline void -Exec_update_scan::setQuery(Exec_query* query) -{ - ctx_assert(query != 0 && m_query == 0); - m_query = query; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/Makefile b/storage/ndb/src/old_files/client/odbc/codegen/Makefile deleted file mode 100644 index 49e5439556d9394603ec056a1fa62e14e18c8749..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/Makefile +++ /dev/null @@ -1,104 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbccodegen - -SOURCES = \ - SimpleScan.lpp \ - SimpleGram.ypp \ - SimpleParser.cpp \ - CodeGen.cpp \ - Code_base.cpp \ - Code_root.cpp \ - Code_stmt.cpp \ - Code_query.cpp \ - Code_dml.cpp \ - Code_ddl.cpp \ - Code_select.cpp \ - Code_pred.cpp \ - Code_pred_op.cpp \ - Code_comp_op.cpp \ - Code_query_project.cpp \ - Code_query_filter.cpp \ - Code_query_join.cpp \ - Code_query_lookup.cpp \ - Code_query_index.cpp \ - Code_query_scan.cpp \ - Code_query_range.cpp \ - Code_query_sys.cpp \ - Code_query_repeat.cpp \ - Code_query_count.cpp \ - Code_query_sort.cpp \ - Code_query_group.cpp \ - Code_query_distinct.cpp \ - Code_expr_row.cpp \ - Code_expr.cpp \ - Code_expr_op.cpp \ - Code_expr_func.cpp \ - Code_expr_conv.cpp \ - Code_expr_column.cpp \ - Code_expr_const.cpp \ - Code_expr_param.cpp \ - Code_update.cpp \ - Code_update_lookup.cpp \ - Code_update_index.cpp \ - Code_update_scan.cpp \ - Code_set_row.cpp \ - Code_insert.cpp \ - Code_dml_row.cpp \ - Code_dml_column.cpp \ - Code_delete.cpp \ - Code_delete_lookup.cpp \ - Code_delete_index.cpp \ - Code_delete_scan.cpp \ - Code_column.cpp \ - Code_table_list.cpp \ - Code_table.cpp \ - Code_create_table.cpp \ - Code_create_index.cpp \ - Code_create_row.cpp \ - Code_ddl_row.cpp \ - Code_ddl_column.cpp \ - Code_ddl_constr.cpp \ - Code_idx_column.cpp \ - Code_data_type.cpp \ - Code_drop_table.cpp \ - Code_drop_index.cpp - -ifeq ($(NDB_OS),WIN32) -CCFLAGS += -I$(call fixpath,.) - -_libs:: FlexLexer.h unistd.h - -endif - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk - -ifeq ($(NDB_OS),LINUX) -FLEXHACK = perl -i -pe 's/\bisatty\b/ouencunbwdb2y1bdc/g' -BISONHACK = perl -i -pe 's/^\s*__attribute__\s*\(\(.*\)\)//' -endif - -ifeq ($(NDB_OS),MACOSX) -FLEXHACK = perl -i -pe 's/\bisatty\b/ouencunbwdb2y1bdc/g' -BISONHACK = perl -i -pe 's/^\s*__attribute__\s*\(\(.*\)\)//' -endif - -ifeq ($(NDB_OS),SOLARIS) -BISONHACK = perl -i -pe 's/^\s*__attribute__\s*\(\(.*\)\)//' -endif - -ifeq ($(NDB_OS),WIN32) -unistd.h: - touch unistd.h - -FlexLexer.h: - cp /usr/include/FlexLexer.h . - -endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/SimpleGram.ypp b/storage/ndb/src/old_files/client/odbc/codegen/SimpleGram.ypp deleted file mode 100644 index 07d8017e5edf2b07f7df41bb2f662b97e2b81041..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/SimpleGram.ypp +++ /dev/null @@ -1,1649 +0,0 @@ -%{ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/DataRow.hpp> -#include "CodeGen.hpp" -#include <FlexLexer.h> -#include "SimpleParser.hpp" - -/* redefine globals after headers */ -#define yyparse SimpleParser_yyparse -#if YYDEBUG -#define yydebug SimpleParser_yydebug -#endif - -#define YYLEX_PARAM simpleParserPtr -#define YYPARSE_PARAM simpleParserPtr -#define simpleParser (*static_cast<SimpleParser*>(simpleParserPtr)) - -static int yylex(YYSTYPE* lvalp, void* simpleParserPtr); - -#define yyerror(s) simpleParser.parseError(s) - -#if YYDEBUG -// does not work in bison 1.75 -#undef stderr -#define stderr 0 -#define YYFPRINTF simpleParser.ctx().print -#endif - -// scanner states - -#define pushState(sc) simpleParser.pushState(sc) -#define popState() simpleParser.popState() - -#define StateEval SimpleParser_stateEval -#define StateType SimpleParser_stateType -#define StatePhys SimpleParser_statePhys -extern int SimpleParser_stateEval; -extern int SimpleParser_stateType; -extern int SimpleParser_statePhys; - -struct LimitPair { int off; int cnt; }; - -struct PhysAttr { int storage; int logging; }; - -%} - -%defines -%pure-parser -%verbose - -%union { - Plan_root* m_root; - Plan_stmt* m_stmt; - Plan_select* m_select; - Insert_op m_insert_op; - Plan_insert* m_insert; - Plan_update* m_update; - Plan_delete* m_delete; - Plan_create_table* m_create_table; - Plan_create_index* m_create_index; - NdbDictionary::Object::Type m_index_type; - Plan_create_row* m_create_row; - Plan_ddl_row* m_ddl_row; - Plan_ddl_column* m_ddl_column; - Plan_ddl_constr* m_ddl_constr; - Plan_idx_column* m_idx_column; - Plan_data_type* m_data_type; - Plan_drop_table* m_drop_table; - Plan_drop_index* m_drop_index; - Plan_set_row* m_set_row; - Plan_expr_row* m_expr_row; - bool m_asc_desc; - Plan_pred* m_pred; - Pred_op::Opcode m_pred_opcode; - Comp_op::Opcode m_comp_opcode; - Plan_expr* m_expr; - Expr_op::Opcode m_expr_opcode; - Plan_dml_row* m_dml_row; - Plan_dml_column* m_dml_column; - Plan_table* m_table; - Plan_table_list* m_table_list; - const char* m_string; - struct LimitPair* m_limit; - int m_signed_integer; - bool m_distinct; - struct PhysAttr* m_phys_attr; - NdbDictionary::Object::FragmentType m_storage_attr; - bool m_logging_attr; - SqlType::Type m_sql_type; -} - -/* keywords */ -%token - T_AND - T_ASC - T_AUTO_INCREMENT - T_BIGINT - T_BINARY - T_BLOB - T_BY - T_CHAR - T_CLOB - T_CONSTRAINT - T_CREATE - T_DATETIME - T_DEFAULT - T_DELETE - T_DESC - T_DISTINCT - T_DOUBLE - T_DROP - T_FLOAT - T_FOREIGN - T_FROM - T_GROUP - T_HASH - T_HAVING - T_IN - T_INDEX - T_INSERT - T_INT - T_INTEGER - T_INTO - T_IS - T_KEY - T_LARGE - T_LIKE - T_LIMIT - T_LOGGING - T_LONGBLOB - T_LONGCLOB - T_MEDIUM - T_NOLOGGING - T_NOT - T_NULL - T_OFFSET - T_ON - T_OR - T_ORDER - T_PRECISION - T_PRIMARY - T_REAL - T_REFERENCES - T_ROWNUM - T_SELECT - T_SET - T_SINGLE - T_SMALL - T_SMALLINT - T_STORAGE - T_SYSDATE - T_TABLE - T_UNIQUE - T_UNSIGNED - T_UPDATE - T_VALUES - T_VARBINARY - T_VARCHAR - T_WHERE - T_WRITE - -/* identifiers and constants */ -%token - <m_string> T_IDENTIFIER - <m_string> T_LINTEGER - <m_string> T_LDECIMAL - <m_string> T_LREAL - <m_string> T_STRING - -/* expressions and predicates */ -%token - T_PLUS - T_MINUS - T_TIMES - T_DIVIDE - T_EQ - T_NOTEQ - T_LT - T_LTEQ - T_GT - T_GTEQ - T_QUES - -/* common special symbols */ -%token - T_PERIOD - T_COMMA - T_PARENLEFT - T_PARENRIGHT - T_ASTERISK - T_ASSIGN - -%type <m_root> root -%type <m_stmt> stmt -%type <m_select> stmt_select -%type <m_insert> stmt_insert -%type <m_insert_op> insert_op -%type <m_update> stmt_update -%type <m_delete> stmt_delete -%type <m_create_table> create_table -%type <m_create_index> create_index -%type <m_index_type> index_type -%type <m_create_row> create_row -%type <m_ddl_column> create_column -%type <m_ddl_constr> create_constr -%type <m_idx_column> idx_column -%type <m_data_type> data_type -%type <m_ddl_row> ddl_row -%type <m_ddl_column> ddl_column -%type <m_drop_table> drop_table -%type <m_drop_index> drop_index -%type <m_asc_desc> asc_desc -%type <m_set_row> set_row -%type <m_expr_row> expr_row -%type <m_expr_row> sort_row -%type <m_pred> where_clause -%type <m_expr_row> order_clause -%type <m_pred> pred -%type <m_pred> pred1 -%type <m_pred_opcode> pred1_op -%type <m_pred> pred2 -%type <m_pred_opcode> pred2_op -%type <m_pred> pred3 -%type <m_pred_opcode> pred3_op -%type <m_pred> pred4 -%type <m_comp_opcode> comp_op -%type <m_expr> expr -%type <m_expr> expr1 -%type <m_expr_opcode> expr1_op -%type <m_expr> expr2 -%type <m_expr_opcode> expr2_op -%type <m_expr> expr3 -%type <m_expr_opcode> expr3_op -%type <m_expr> expr4 -%type <m_expr> expr_column -%type <m_dml_row> dml_row -%type <m_dml_column> dml_column -%type <m_expr_row> value_row -%type <m_expr> value_expr -%type <m_table> table -%type <m_table_list> table_list -%type <m_string> dot_identifier -%type <m_limit> limit_clause -%type <m_signed_integer> signed_integer -%type <m_distinct> distinct_clause -%type <m_expr_row> group_clause -%type <m_pred> having_clause -%type <m_phys_attr> phys_attr -%type <m_phys_attr> phys_attr2 -%type <m_storage_attr> storage_attr -%type <m_logging_attr> logging_attr -%type <m_sql_type> blob_type - -%% - -root: - stmt - { - Plan_root* root = simpleParser.root(); - root->setStmt($1); - } - ; -stmt: - stmt_select - { - $$ = $1; - } - | - stmt_insert - { - $$ = $1; - } - | - stmt_update - { - $$ = $1; - } - | - stmt_delete - { - $$ = $1; - } - | - create_table - { - $$ = $1; - } - | - create_index - { - $$ = $1; - } - | - drop_table - { - $$ = $1; - } - | - drop_index - { - $$ = $1; - } - ; -stmt_select: - T_SELECT distinct_clause expr_row T_FROM table_list where_clause group_clause having_clause order_clause limit_clause - { - Plan_root* root = simpleParser.root(); - Plan_select* stmt = new Plan_select(root); - root->saveNode(stmt); - stmt->setDistinct($2); - stmt->setRow($3); - stmt->setList($5); - if ($6 != 0) - stmt->setPred($6); - if ($7 != 0) - stmt->setGroup($7); - if ($8 != 0) - stmt->setHaving($8); - if ($9 != 0) - stmt->setSort($9); - if ($10 != 0) { - stmt->setLimit($10->off, $10->cnt); - delete $10; - } - $$ = stmt; - } - ; -stmt_insert: - insert_op T_INTO table T_VALUES T_PARENLEFT value_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_insert* stmt = new Plan_insert(root, $1); - root->saveNode(stmt); - stmt->setTable($3); - stmt->setExprRow($6); - $$ = stmt; - } - | - insert_op T_INTO table T_PARENLEFT dml_row T_PARENRIGHT T_VALUES T_PARENLEFT value_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_insert* stmt = new Plan_insert(root, $1); - root->saveNode(stmt); - stmt->setTable($3); - stmt->setDmlRow($5); - stmt->setExprRow($9); - $$ = stmt; - } - | - insert_op T_INTO table stmt_select - { - Plan_root* root = simpleParser.root(); - Plan_insert* stmt = new Plan_insert(root, $1); - root->saveNode(stmt); - stmt->setTable($3); - stmt->setSelect($4); - $$ = stmt; - } - | - insert_op T_INTO table T_PARENLEFT dml_row T_PARENRIGHT stmt_select - { - Plan_root* root = simpleParser.root(); - Plan_insert* stmt = new Plan_insert(root, $1); - root->saveNode(stmt); - stmt->setTable($3); - stmt->setDmlRow($5); - stmt->setSelect($7); - $$ = stmt; - } - | - insert_op T_INTO table T_SET set_row - { - Plan_root* root = simpleParser.root(); - Plan_insert* stmt = new Plan_insert(root, $1); - root->saveNode(stmt); - stmt->setTable($3); - stmt->setMysqlRow($5); - $$ = stmt; - } - ; -insert_op: - T_INSERT - { - $$ = Insert_op_insert; - } - | - T_WRITE - { - $$ = Insert_op_write; - } - ; -stmt_update: - T_UPDATE table T_SET set_row where_clause - { - Plan_root* root = simpleParser.root(); - Plan_update* stmt = new Plan_update(root); - root->saveNode(stmt); - stmt->setTable($2); - stmt->setRow($4); - if ($5 != 0) - stmt->setPred($5); - $$ = stmt; - } - ; -stmt_delete: - T_DELETE T_FROM table where_clause - { - Plan_root* root = simpleParser.root(); - Plan_delete* stmt = new Plan_delete(root); - root->saveNode(stmt); - stmt->setTable($3); - if ($4 != 0) - stmt->setPred($4); - $$ = stmt; - } - ; -create_table: - T_CREATE T_TABLE dot_identifier T_PARENLEFT create_row T_PARENRIGHT phys_attr - { - Plan_root* root = simpleParser.root(); - Plan_create_table* stmt = new Plan_create_table(root, $3); - root->saveNode(stmt); - delete[] $3; - stmt->setCreateRow($5); - if ($7->storage != -1) - stmt->setFragmentType((NdbDictionary::Object::FragmentType)$7->storage); - if ($7->logging != -1) - stmt->setLogging($7->logging); - delete $7; - $$ = stmt; - } - ; -create_row: - create_column - { - Plan_root* root = simpleParser.root(); - Plan_create_row* createRow = new Plan_create_row(root); - root->saveNode(createRow); - createRow->addColumn($1); - $$ = createRow; - } - | - create_constr - { - Plan_root* root = simpleParser.root(); - Plan_create_row* createRow = new Plan_create_row(root); - root->saveNode(createRow); - createRow->addConstr($1); - $$ = createRow; - } - | - create_row T_COMMA create_column - { - Plan_create_row* createRow = $1; - createRow->addColumn($3); - $$ = createRow; - } - | - create_row T_COMMA create_constr - { - Plan_create_row* createRow = $1; - createRow->addConstr($3); - $$ = createRow; - } - | - create_row T_COMMA create_ignore - { - $$ = $1; - } - ; -create_column: - T_IDENTIFIER { pushState(StateType); } data_type { popState(); } - { - Plan_root* root = simpleParser.root(); - Plan_ddl_column* ddlColumn = new Plan_ddl_column(root, $1); - root->saveNode(ddlColumn); - delete[] $1; - ddlColumn->setType($3); - simpleParser.curr(ddlColumn); - } - create_column_rest - { - $$ = simpleParser.curr((Plan_ddl_column*)0); - } - ; -data_type: - T_CHAR T_PARENLEFT T_LINTEGER T_PARENRIGHT dummy_binary - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(simpleParser.ctx(), SqlType::Char, atoi($3), true); - delete[] $3; - if (! simpleParser.ctx().ok()) { - YYABORT; - } - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_BINARY T_PARENLEFT T_LINTEGER T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(simpleParser.ctx(), SqlType::Binary, atoi($3), true); - delete[] $3; - if (! simpleParser.ctx().ok()) { - YYABORT; - } - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_VARCHAR T_PARENLEFT T_LINTEGER T_PARENRIGHT dummy_binary - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(simpleParser.ctx(), SqlType::Varchar, atoi($3), true); - delete[] $3; - if (! simpleParser.ctx().ok()) { - YYABORT; - } - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_VARBINARY T_PARENLEFT T_LINTEGER T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(simpleParser.ctx(), SqlType::Varbinary, atoi($3), true); - delete[] $3; - if (! simpleParser.ctx().ok()) { - YYABORT; - } - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_SMALLINT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Smallint, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_INTEGER - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Integer, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_INT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Integer, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_BIGINT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Bigint, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_REAL - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Real, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_FLOAT - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Double, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_DOUBLE T_PRECISION - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Double, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - T_DATETIME - { - Plan_root* root = simpleParser.root(); - SqlType sqlType(SqlType::Datetime, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - | - blob_type - { - Plan_root* root = simpleParser.root(); - SqlType sqlType($1, true); - Plan_data_type* dataType = new Plan_data_type(root, sqlType); - root->saveNode(dataType); - $$ = dataType; - } - ; -dummy_binary: - /* empty */ - | - T_BINARY - ; -blob_type: - T_BLOB - { - $$ = SqlType::Blob; - } - | - T_LONGBLOB - { - $$ = SqlType::Blob; - } - | - T_CLOB - { - $$ = SqlType::Clob; - } - | - T_LONGCLOB - { - $$ = SqlType::Clob; - } - ; -create_column_rest: - /* empty */ - | - data_constr_list - ; -data_constr_list: - data_constr - | - data_constr_list data_constr - ; -data_constr: - T_NULL - | - T_NOT T_NULL - { - Plan_ddl_column* ddlColumn = simpleParser.curr((Plan_ddl_column*)0); - ddlColumn->setNotNull(); - } - | - T_UNSIGNED - { - Plan_ddl_column* ddlColumn = simpleParser.curr((Plan_ddl_column*)0); - ddlColumn->setUnSigned(); - } - | - T_PRIMARY T_KEY - { - Plan_ddl_column* ddlColumn = simpleParser.curr((Plan_ddl_column*)0); - ddlColumn->setPrimaryKey(); - } - | - T_AUTO_INCREMENT - { - Plan_ddl_column* ddlColumn = simpleParser.curr((Plan_ddl_column*)0); - ddlColumn->setAutoIncrement(); - } - | - T_DEFAULT expr - { - Plan_ddl_column* ddlColumn = simpleParser.curr((Plan_ddl_column*)0); - ddlColumn->setDefaultValue($2); - } - ; -create_constr: - T_PRIMARY T_KEY T_PARENLEFT ddl_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_ddl_constr* ddlConstr = new Plan_ddl_constr(root); - root->saveNode(ddlConstr); - ddlConstr->setRow($4); - $$ = ddlConstr; - } - | - T_CONSTRAINT dot_identifier T_PRIMARY T_KEY T_PARENLEFT ddl_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_ddl_constr* ddlConstr = new Plan_ddl_constr(root); - root->saveNode(ddlConstr); - ddlConstr->setRow($6); - $$ = ddlConstr; - } - ; -create_ignore: - T_INDEX dot_identifier T_PARENLEFT ddl_row T_PARENRIGHT - | - T_FOREIGN T_KEY T_PARENLEFT ddl_row T_PARENRIGHT T_REFERENCES dot_identifier T_PARENLEFT ddl_row T_PARENRIGHT - ; -ddl_row: - ddl_column - { - Plan_root* root = simpleParser.root(); - Plan_ddl_row* ddlRow = new Plan_ddl_row(root); - root->saveNode(ddlRow); - ddlRow->addColumn($1); - $$ = ddlRow; - } - | - ddl_row T_COMMA ddl_column - { - Plan_ddl_row* ddlRow = $1; - ddlRow->addColumn($3); - $$ = ddlRow; - } - ; -ddl_column: - T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_ddl_column* column = new Plan_ddl_column(root, $1); - root->saveNode(column); - delete[] $1; - $$ = column; - } - ; -create_index: - T_CREATE index_type T_INDEX dot_identifier T_ON table - { - Plan_root* root = simpleParser.root(); - Plan_create_index* stmt = new Plan_create_index(root, $4); - root->saveNode(stmt); - delete[] $4; - stmt->setType($2); - stmt->setTable($6); - simpleParser.curr(stmt); - } - T_PARENLEFT idx_row T_PARENRIGHT phys_attr - { - $$ = simpleParser.curr((Plan_create_index*)0); - if ($11->storage != -1) - $$->setFragmentType((NdbDictionary::Object::FragmentType)$11->storage); - if ($11->logging != -1) - $$->setLogging($11->logging); - delete $11; - } - ; -index_type: - T_HASH - { - $$ = NdbDictionary::Object::HashIndex; - } - | - T_UNIQUE T_HASH - { - $$ = NdbDictionary::Object::UniqueHashIndex; - } - | - /* empty */ - { - $$ = NdbDictionary::Object::OrderedIndex; - } - | - T_UNIQUE - { - $$ = NdbDictionary::Object::UniqueOrderedIndex; - } - ; -idx_row: - idx_column - { - } - | - idx_row T_COMMA idx_column - { - } - ; -idx_column: - T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_idx_column* column = new Plan_idx_column(root, $1); - root->saveNode(column); - delete[] $1; - Plan_create_index* stmt = simpleParser.curr((Plan_create_index*)0); - stmt->addColumn(column); - } - ; -phys_attr: - { pushState(StatePhys); } phys_attr2 { popState(); } - { - $$ = $2; - } - ; -phys_attr2: - /* empty */ - { - $$ = new PhysAttr(); - $$->storage = $$->logging = -1; - } - | - phys_attr2 storage_attr - { - if ($1->storage != -1 && $1->storage != $2) { - simpleParser.ctx().pushStatus(Sqlstate::_42000, Error::Gen, "conflicting STORAGE clauses"); - YYABORT; - } - $$->storage = $2; - } - | - phys_attr2 logging_attr - { - if ($1->logging != -1 && $1->logging != $2) { - simpleParser.ctx().pushStatus(Sqlstate::_42000, Error::Gen, "conflicting LOGGING clauses"); - YYABORT; - } - $$->logging = $2; - } - ; -logging_attr: - T_LOGGING - { - $$ = true; - } - | - T_NOLOGGING - { - $$ = false; - } - ; -storage_attr: - T_STORAGE T_PARENLEFT T_SINGLE T_PARENRIGHT - { - $$ = NdbDictionary::Object::FragSingle; - } - | - T_STORAGE T_PARENLEFT T_SMALL T_PARENRIGHT - { - $$ = NdbDictionary::Object::FragAllSmall; - } - | - T_STORAGE T_PARENLEFT T_MEDIUM T_PARENRIGHT - { - $$ = NdbDictionary::Object::FragAllMedium; - } - | - T_STORAGE T_PARENLEFT T_LARGE T_PARENRIGHT - { - $$ = NdbDictionary::Object::FragAllLarge; - } - ; -drop_table: - T_DROP T_TABLE dot_identifier - { - Plan_root* root = simpleParser.root(); - Plan_drop_table* stmt = new Plan_drop_table(root, $3); - root->saveNode(stmt); - delete[] $3; - $$ = stmt; - } - ; -drop_index: - T_DROP T_INDEX dot_identifier - { - Plan_root* root = simpleParser.root(); - Plan_drop_index* stmt = new Plan_drop_index(root, $3); - root->saveNode(stmt); - delete[] $3; - $$ = stmt; - } - | - T_DROP T_INDEX dot_identifier T_ON dot_identifier - { - Plan_root* root = simpleParser.root(); - Plan_drop_index* stmt = new Plan_drop_index(root, $3, $5); - root->saveNode(stmt); - delete[] $3; - delete[] $5; - $$ = stmt; - } - ; -distinct_clause: - /* empty */ - { - $$ = false; - } - | - T_DISTINCT - { - $$ = true; - } - ; -where_clause: - /* empty */ - { - $$ = 0; - } - | - T_WHERE pred - { - $$ = $2; - } - ; -group_clause: - /* empty */ - { - $$ = 0; - } - | - T_GROUP T_BY value_row - { - $$ = $3; - } - ; -having_clause: - /* empty */ - { - $$ = 0; - } - | - T_HAVING pred - { - $$ = $2; - } - ; -order_clause: - /* empty */ - { - $$ = 0; - } - | - T_ORDER T_BY sort_row - { - $$ = $3; - } - ; -limit_clause: - /* empty */ - { - $$ = 0; - } - | - T_LIMIT signed_integer - { - LimitPair* p = new LimitPair; - p->off = 0; - p->cnt = $2; - $$ = p; - } - | - T_LIMIT signed_integer T_COMMA signed_integer - { - LimitPair* p = new LimitPair; - p->off = $2, - p->cnt = $4; - $$ = p; - } - | - T_LIMIT signed_integer T_OFFSET signed_integer - { - LimitPair* p = new LimitPair; - p->off = $4; - p->cnt = $2; - $$ = p; - } - ; -signed_integer: - T_LINTEGER - { - $$ = atoi($1); - delete[] $1; - } - | - T_MINUS T_LINTEGER - { - $$ = (-1) * atoi($2); - delete[] $2; - } - ; -set_row: - dml_column T_ASSIGN expr - { - Plan_root* root = simpleParser.root(); - Plan_set_row* row = new Plan_set_row(root); - root->saveNode(row); - row->addColumn($1); - row->addExpr($3); - $$ = row; - } - | - set_row T_COMMA dml_column T_ASSIGN expr - { - Plan_set_row* row = $1; - row->addColumn($3); - row->addExpr($5); - $$ = row; - } - ; -dml_row: - dml_column - { - Plan_root* root = simpleParser.root(); - Plan_dml_row* row = new Plan_dml_row(root); - root->saveNode(row); - row->addColumn($1); - $$ = row; - } - | - dml_row T_COMMA dml_column - { - Plan_dml_row* row = $1; - row->addColumn($3); - $$ = row; - } - ; -dml_column: - T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_dml_column* column = new Plan_dml_column(root, $1); - root->saveNode(column); - delete[] $1; - $$ = column; - } - ; -value_row: - value_expr - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->addExpr($1); - $$ = row; - } - | - value_row T_COMMA value_expr - { - Plan_expr_row* row = $1; - row->addExpr($3); - $$ = row; - } - ; -value_expr: - expr - { - $$ = $1; - } - ; -sort_row: - expr asc_desc - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->addExpr($1, $2); - $$ = row; - } - | - sort_row T_COMMA expr asc_desc - { - Plan_expr_row* row = $1; - row->addExpr($3, $4); - $$ = row; - } - ; -asc_desc: - /* empty */ - { - $$ = true; - } - | - T_ASC - { - $$ = true; - } - | - T_DESC - { - $$ = false; - } - ; -expr_row: - T_ASTERISK - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->setAsterisk(); - $$ = row; - } - | - T_TIMES /* XXX fix scanner state */ - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->setAsterisk(); - $$ = row; - } - | - expr - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->addExpr($1); - $$ = row; - } - | - expr T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_expr_row* row = new Plan_expr_row(root); - root->saveNode(row); - row->addExpr($1, BaseString($2)); - $$ = row; - } - | - expr_row T_COMMA expr - { - Plan_expr_row* row = $1; - row->addExpr($3); - $$ = row; - } - | - expr_row T_COMMA expr T_IDENTIFIER - { - Plan_expr_row* row = $1; - row->addExpr($3, BaseString($4)); - $$ = row; - } - ; -pred: - { pushState(StateEval); } pred1 { popState(); } - { - $$ = $2; - } - ; -pred1: - pred2 - { - $$ = $1; - } - | - pred1 pred1_op pred2 - { - Plan_root* root = simpleParser.root(); - Pred_op op($2); - Plan_pred_op* pred = new Plan_pred_op(root, op); - root->saveNode(pred); - pred->setPred(1, $1); - pred->setPred(2, $3); - $$ = pred; - } - ; -pred1_op: - T_OR - { - $$ = Pred_op::Or; - } - ; -pred2: - pred3 - { - $$ = $1; - } - | - pred2 pred2_op pred3 - { - Plan_root* root = simpleParser.root(); - Pred_op op($2); - Plan_pred_op* pred = new Plan_pred_op(root, op); - root->saveNode(pred); - pred->setPred(1, $1); - pred->setPred(2, $3); - $$ = pred; - } - ; -pred2_op: - T_AND - { - $$ = Pred_op::And; - } - ; -pred3: - pred4 - { - $$ = $1; - } - | - pred3_op pred3 - { - Plan_root* root = simpleParser.root(); - Pred_op op($1); - Plan_pred_op* pred = new Plan_pred_op(root, op); - root->saveNode(pred); - pred->setPred(1, $2); - $$ = pred; - } - ; -pred3_op: - T_NOT - { - $$ = Pred_op::Not; - } - ; -pred4: - T_PARENLEFT pred1 T_PARENRIGHT - { - $$ = $2; - } - | - expr1 comp_op expr1 - { - Plan_root* root = simpleParser.root(); - Comp_op op($2); - Plan_comp_op* comp = new Plan_comp_op(root, op); - root->saveNode(comp); - comp->setExpr(1, $1); - comp->setExpr(2, $3); - $$ = comp; - } - | - expr1 T_IS T_NULL - { - Plan_root* root = simpleParser.root(); - Comp_op op(Comp_op::Isnull); - Plan_comp_op* comp = new Plan_comp_op(root, op); - root->saveNode(comp); - comp->setExpr(1, $1); - $$ = comp; - } - | - expr1 T_IS T_NOT T_NULL - { - Plan_root* root = simpleParser.root(); - Comp_op op(Comp_op::Isnotnull); - Plan_comp_op* comp = new Plan_comp_op(root, op); - root->saveNode(comp); - comp->setExpr(1, $1); - $$ = comp; - } - | - expr1 T_IN T_PARENLEFT value_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_pred* predOut = 0; // hack directly into Or of Eq - Plan_expr* exprLeft = $1; - Plan_expr_row* row = $4; - for (unsigned i = row->getSize(); i >= 1; i--) { - Plan_expr* exprRight = row->getExpr(i); - Plan_comp_op* comp = new Plan_comp_op(root, Comp_op::Eq); - root->saveNode(comp); - comp->setExpr(1, exprLeft); - comp->setExpr(2, exprRight); - if (predOut == 0) { - predOut = comp; - } else { - Plan_pred_op* pred = new Plan_pred_op(root, Pred_op::Or); - root->saveNode(pred); - pred->setPred(1, predOut); - pred->setPred(2, comp); - predOut = pred; - } - } - $$ = predOut; - } - | - expr1 T_NOT T_IN T_PARENLEFT value_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - Plan_pred* predOut = 0; // hack directly into And of Noteq - Plan_expr* exprLeft = $1; - Plan_expr_row* row = $5; - for (unsigned i = row->getSize(); i >= 1; i--) { - Plan_expr* exprRight = row->getExpr(i); - Plan_comp_op* comp = new Plan_comp_op(root, Comp_op::Noteq); - root->saveNode(comp); - comp->setExpr(1, exprLeft); - comp->setExpr(2, exprRight); - if (predOut == 0) { - predOut = comp; - } else { - Plan_pred_op* pred = new Plan_pred_op(root, Pred_op::And); - root->saveNode(pred); - pred->setPred(1, predOut); - pred->setPred(2, comp); - predOut = pred; - } - } - $$ = predOut; - } - ; -comp_op: - T_EQ - { - $$ = Comp_op::Eq; - } - | - T_NOTEQ - { - $$ = Comp_op::Noteq; - } - | - T_LT - { - $$ = Comp_op::Lt; - } - | - T_LTEQ - { - $$ = Comp_op::Lteq; - } - | - T_GT - { - $$ = Comp_op::Gt; - } - | - T_GTEQ - { - $$ = Comp_op::Gteq; - } - | - T_LIKE - { - $$ = Comp_op::Like; - } - | - T_NOT T_LIKE - { - $$ = Comp_op::Notlike; - } - ; -expr: - { pushState(StateEval); } expr1 { popState(); } - { - $$ = $2; - } - ; -expr1: - expr2 - { - $$ = $1; - } - | - expr1 expr1_op expr2 - { - Plan_root* root = simpleParser.root(); - Expr_op op($2); - Plan_expr_op* expr = new Plan_expr_op(root, op); - root->saveNode(expr); - expr->setExpr(1, $1); - expr->setExpr(2, $3); - $$ = expr; - } - ; -expr1_op: - T_PLUS - { - $$ = Expr_op::Add; - } - | - T_MINUS - { - $$ = Expr_op::Subtract; - } - ; -expr2: - expr3 - { - $$ = $1; - } - | - expr2 expr2_op expr3 - { - Plan_root* root = simpleParser.root(); - Expr_op op($2); - Plan_expr_op* expr = new Plan_expr_op(root, op); - root->saveNode(expr); - expr->setExpr(1, $1); - expr->setExpr(2, $3); - $$ = expr; - } - ; -expr2_op: - T_TIMES - { - $$ = Expr_op::Multiply; - } - | - T_DIVIDE - { - $$ = Expr_op::Divide; - } - ; -expr3: - expr4 - { - $$ = $1; - } - | - expr3_op expr3 - { - Plan_root* root = simpleParser.root(); - Expr_op op($1); - Plan_expr_op* expr = new Plan_expr_op(root, op); - root->saveNode(expr); - expr->setExpr(1, $2); - $$ = expr; - } - ; -expr3_op: - T_PLUS - { - $$ = Expr_op::Plus; - } - | - T_MINUS - { - $$ = Expr_op::Minus; - } - ; -expr4: - T_PARENLEFT expr1 T_PARENRIGHT - { - $$ = $2; - } - | - T_IDENTIFIER T_PARENLEFT expr_row T_PARENRIGHT - { - Plan_root* root = simpleParser.root(); - const Expr_func& spec = Expr_func::find($1); - if (spec.m_name == 0) { - simpleParser.ctx().pushStatus(Sqlstate::_42000, Error::Gen, "unknown function %s", $1); - delete[] $1; - YYABORT; - } - Plan_expr_func* func = new Plan_expr_func(root, spec); - root->saveNode(func); - delete[] $1; - func->setArgs($3); - $$ = func; - } - | - T_ROWNUM - { - Plan_root* root = simpleParser.root(); - const Expr_func& spec = Expr_func::find("ROWNUM"); - ctx_assert(spec.m_name != 0); - Plan_expr_func* func = new Plan_expr_func(root, spec); - root->saveNode(func); - func->setArgs(0); - $$ = func; - } - | - T_SYSDATE - { - Plan_root* root = simpleParser.root(); - const Expr_func& spec = Expr_func::find("SYSDATE"); - ctx_assert(spec.m_name != 0); - Plan_expr_func* func = new Plan_expr_func(root, spec); - root->saveNode(func); - func->setArgs(0); - $$ = func; - } - | - expr_column - { - $$ = $1; - } - | - T_STRING - { - Plan_root* root = simpleParser.root(); - LexType lexType(LexType::Char); - Plan_expr_const* expr = new Plan_expr_const(root, lexType, $1); - root->saveNode(expr); - delete[] $1; - $$ = expr; - } - | - T_LINTEGER - { - Plan_root* root = simpleParser.root(); - LexType lexType(LexType::Integer); - Plan_expr_const* expr = new Plan_expr_const(root, lexType, $1); - root->saveNode(expr); - delete[] $1; - $$ = expr; - } - | - T_LDECIMAL - { - Plan_root* root = simpleParser.root(); - LexType lexType(LexType::Float); - Plan_expr_const* expr = new Plan_expr_const(root, lexType, $1); - root->saveNode(expr); - delete[] $1; - $$ = expr; - } - | - T_LREAL - { - Plan_root* root = simpleParser.root(); - LexType lexType(LexType::Float); - Plan_expr_const* expr = new Plan_expr_const(root, lexType, $1); - root->saveNode(expr); - delete[] $1; - $$ = expr; - } - | - T_NULL - { - Plan_root* root = simpleParser.root(); - LexType lexType(LexType::Null); - Plan_expr_const* expr = new Plan_expr_const(root, lexType, ""); - root->saveNode(expr); - $$ = expr; - } - | - T_QUES - { - Plan_root* root = simpleParser.root(); - unsigned paramNumber = simpleParser.paramNumber(); - ctx_assert(paramNumber != 0); - Plan_expr_param* expr = new Plan_expr_param(root, paramNumber); - root->saveNode(expr); - $$ = expr; - } - ; -expr_column: - T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_expr_column* column = new Plan_expr_column(root, $1); - root->saveNode(column); - delete[] $1; - $$ = column; - } - | - T_IDENTIFIER T_PERIOD T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_expr_column* column = new Plan_expr_column(root, $3); - root->saveNode(column); - delete[] $3; - column->setCname($1); - $$ = column; - } - | - T_IDENTIFIER T_PERIOD T_IDENTIFIER T_PERIOD T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - BaseString str; - str.append($1); - str.append("."); - str.append($3); - delete[] $1; - delete[] $3; - Plan_expr_column* column = new Plan_expr_column(root, $5); - root->saveNode(column); - delete[] $5; - column->setCname(str); - $$ = column; - } - ; -table_list: - table - { - Plan_root* root = simpleParser.root(); - Plan_table_list* tableList = new Plan_table_list(root); - root->saveNode(tableList); - tableList->addTable($1); - $$ = tableList; - } - | - table_list T_COMMA table - { - Plan_table_list* tableList = $1; - tableList->addTable($3); - $$ = tableList; - } - ; -table: - dot_identifier - { - Plan_root* root = simpleParser.root(); - Plan_table* table = new Plan_table(root, $1); - root->saveNode(table); - delete[] $1; - $$ = table; - } - | - dot_identifier T_IDENTIFIER - { - Plan_root* root = simpleParser.root(); - Plan_table* table = new Plan_table(root, $1); - root->saveNode(table); - delete[] $1; - table->setCname($2); - delete[] $2; - $$ = table; - } - ; -dot_identifier: - T_IDENTIFIER - { - $$ = $1; - } - | - T_IDENTIFIER T_PERIOD T_IDENTIFIER - { - char* s = new char[strlen($1) + 1 + strlen($3) + 1]; - strcpy(s, $1); - strcat(s, "."); - strcat(s, $3); - delete[] $1; - delete[] $3; - $$ = s; - } - ; - -%% - -static int -yylex(YYSTYPE* lvalp, void* simpleParserPtr) -{ - int ret = simpleParser.yylex(); - *lvalp = simpleParser.yylval(); - return ret; -} - -/* vim: set filetype=yacc: */ diff --git a/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.cpp b/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.cpp deleted file mode 100644 index a2418f49e37380d765f6389b8e4e5869ed075b61..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/common.hpp> -#include <NdbMutex.h> -#include <common/StmtArea.hpp> -#include <FlexLexer.h> -#include "SimpleParser.hpp" - -SimpleParser::~SimpleParser() -{ -} - -#ifdef NDB_WIN32 -static NdbMutex & parse_mutex = * NdbMutex_Create(); -#else -static NdbMutex parse_mutex = NDB_MUTEX_INITIALIZER; -#endif - -void -SimpleParser::yyparse() -{ - Ctx& ctx = this->ctx(); - NdbMutex_Lock(&parse_mutex); - ctx_log2(("parse: %s", stmtArea().sqlText().c_str())); -#if YYDEBUG - SimpleParser_yydebug = (m_ctx.logLevel() >= 5); -#endif - SimpleParser_yyparse((void*)this); - NdbMutex_Unlock(&parse_mutex); -} - -void -SimpleParser::pushState(int sc) -{ - yy_push_state(sc); - m_stacksize++; -} - -void -SimpleParser::popState() -{ - ctx_assert(m_stacksize > 0); - yy_pop_state(); - m_stacksize--; -} - -void -SimpleParser::parseError(const char* msg) -{ - ctx().pushStatus(Sqlstate::_42000, Error::Gen, "%s at '%*s' position %u", msg, yyleng, yytext, m_parsePos - yyleng); -} - -int -SimpleParser::LexerInput(char* buf, int max_size) -{ - const BaseString& text = stmtArea().sqlText(); - int n = 0; - const char* const t = text.c_str(); - const unsigned m = text.length(); - while (n < max_size && m_textPos < m) { - buf[n++] = t[m_textPos++]; - m_parsePos++; // XXX simple hack - break; - } - return n; -} - -// XXX just a catch-all (scanner should match all input) -void -SimpleParser::LexerOutput(const char* buf, int size) -{ - if (! ctx().ok()) - return; - const char* msg = "unrecognized input"; - ctx().pushStatus(Sqlstate::_42000, Error::Gen, "%s at '%*s' position %u", msg, size, buf, m_parsePos); -} - -void -SimpleParser::LexerError(const char* msg) -{ - ctx().pushStatus(Sqlstate::_42000, Error::Gen, "%s at '%*s' position %u", msg, yyleng, yytext, m_parsePos); -} diff --git a/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.hpp b/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.hpp deleted file mode 100644 index abadae8f905fceee48dfba8786bcfeb0203ad3e7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/SimpleParser.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_SimpleParser_hpp -#define ODBC_CODEGEN_SimpleParser_hpp - -#include <common/common.hpp> -#include "Code_root.hpp" -#include "Code_stmt.hpp" -#include "Code_select.hpp" -#include "Code_pred.hpp" -#include "Code_pred_op.hpp" -#include "Code_comp_op.hpp" -#include "Code_expr_row.hpp" -#include "Code_expr.hpp" -#include "Code_expr_op.hpp" -#include "Code_expr_func.hpp" -#include "Code_expr_column.hpp" -#include "Code_expr_const.hpp" -#include "Code_expr_param.hpp" -#include "Code_update.hpp" -#include "Code_set_row.hpp" -#include "Code_insert.hpp" -#include "Code_dml_row.hpp" -#include "Code_dml_column.hpp" -#include "Code_delete.hpp" -#include "Code_table_list.hpp" -#include "Code_table.hpp" -#include "Code_create_table.hpp" -#include "Code_create_index.hpp" -#include "Code_ddl_row.hpp" -#include "Code_ddl_column.hpp" -#include "Code_ddl_constr.hpp" -#include "Code_data_type.hpp" -#include "Code_drop_table.hpp" -#include "Code_drop_index.hpp" - -#include "SimpleGram.tab.hpp" - -class StmtArea; -class Plan_root; - -class SimpleParser : public yyFlexLexer { -public: - SimpleParser(Ctx& ctx, StmtArea& stmtArea, Plan_root* root); - ~SimpleParser(); - Ctx& ctx(); - StmtArea& stmtArea(); - Plan_root* root(); - void yyparse(); // calls real yyparse - int yylex(); // generated by flex - YYSTYPE yylval(); - void pushState(int sc); // push start condition - void popState(); // pop start condition - unsigned paramNumber() const; - void parseError(const char* msg); - // parser helpers - to avoid creating new Plan tree types - Plan_ddl_column* curr(Plan_ddl_column* p); - Plan_create_index* curr(Plan_create_index* p); -protected: - virtual int LexerInput(char* buf, int max_size); - virtual void LexerOutput(const char* buf, int size); - virtual void LexerError(const char* msg); -private: - Ctx& m_ctx; - StmtArea& m_stmtArea; - Plan_root* const m_root; - unsigned m_textPos; // position in sql text - unsigned m_parsePos; // parse position, to report error - YYSTYPE m_yylval; // token value - BaseString m_string; // storage for edited string token - unsigned m_stacksize; // state stack size - unsigned m_paramNumber; // parameter number - // parser helpers - Plan_ddl_column* m_ddl_column; - Plan_create_index* m_create_index; -}; - -extern int SimpleParser_yyparse(void* simpleParserPtr); -#if YYDEBUG -extern int SimpleParser_yydebug; -#endif - -inline -SimpleParser::SimpleParser(Ctx& ctx, StmtArea& stmtArea, Plan_root* root) : - m_ctx(ctx), - m_stmtArea(stmtArea), - m_root(root), - m_textPos(0), - m_parsePos(0), - m_stacksize(0), - m_paramNumber(0), - // parser helpers - m_ddl_column(0) -{ -} - -inline Ctx& -SimpleParser::ctx() -{ - return m_ctx; -} - -inline StmtArea& -SimpleParser::stmtArea() -{ - return m_stmtArea; -} - -inline Plan_root* -SimpleParser::root() -{ - return m_root; -} - -inline YYSTYPE -SimpleParser::yylval() -{ - return m_yylval; -} - -inline unsigned -SimpleParser::paramNumber() const -{ - return m_paramNumber; -} - -// parser helpers - -inline Plan_ddl_column* -SimpleParser::curr(Plan_ddl_column* p) -{ - if (p != 0) - m_ddl_column = p; - ctx_assert(m_ddl_column != 0); - return m_ddl_column; -} - -inline Plan_create_index* -SimpleParser::curr(Plan_create_index* p) -{ - if (p != 0) - m_create_index = p; - ctx_assert(m_create_index != 0); - return m_create_index; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp b/storage/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp deleted file mode 100644 index 29aa876f66949e583b307fedf0ef8fe781ca42a5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp +++ /dev/null @@ -1,243 +0,0 @@ -%{ -#include <ctype.h> -#include "SimpleParser.hpp" - -struct SqlKeyword { - const char* m_name; - int m_value; - int m_state; - static const SqlKeyword* find(Ctx& ctx, const char* name, int state); -}; - -%} - -%option c++ -%option yyclass="SimpleParser" -%option stack -%option noyywrap - -space [\040\t\n\r\f] -digit [0-9] -letter [A-Za-z_] -special ("$") -identifier ({letter}({letter}|{digit}|{special})*) -integer {digit}++ -decimal (({digit}*\.{digit}+)|({digit}+\.{digit}*)) -real ((({digit}*\.{digit}+)|({digit}+\.{digit}*)|({digit}+))([Ee][-+]?{digit}+)) - -%s StateEval -%s StateType -%s StatePhys -%x StateString -%x StateQuoted - -%% - -{space} { - } -{identifier} { - const SqlKeyword* key = SqlKeyword::find(m_ctx, (char*)yytext, YYSTATE); - if (key != 0) - return key->m_value; - for (unsigned char* a = (unsigned char*)yytext; *a != 0; a++) { - if (islower(*a)) - *a = toupper(*a); - } - m_yylval.m_string = strcpy(new char[yyleng + 1], yytext); - return T_IDENTIFIER; - } -{integer} { - m_yylval.m_string = strcpy(new char[yyleng + 1], yytext); - return T_LINTEGER; - } -{decimal} { - m_yylval.m_string = strcpy(new char[yyleng + 1], yytext); - return T_LDECIMAL; - } -{real} { - m_yylval.m_string = strcpy(new char[yyleng + 1], yytext); - return T_LREAL; - } -"--".* { - } -"/*" { - int c = 0, d; - while (1) { - d = c; - if ((c = yyinput()) == EOF) { - parseError("unterminated comment"); - yyterminate(); - } - if (d == '*' && c == '/') - break; - } - } -<StateEval>{ -"+" return T_PLUS; -"-" return T_MINUS; -"*" return T_TIMES; -"/" return T_DIVIDE; -"=" return T_EQ; -"!=" return T_NOTEQ; -"^=" return T_NOTEQ; -"<>" return T_NOTEQ; -"<" return T_LT; -"<=" return T_LTEQ; -">" return T_GT; -">=" return T_GTEQ; -"?" m_paramNumber++; return T_QUES; -} - -"." return T_PERIOD; -"," return T_COMMA; -"(" return T_PARENLEFT; -")" return T_PARENRIGHT; -"*" return T_ASTERISK; -"=" return T_ASSIGN; - -"'" { - pushState(StateString); - m_string.assign(""); - } -<StateString>{ -[^']* { - m_string.append(yytext); - } -"''" { - m_string.append("'"); - } -"'" { - m_yylval.m_string = strcpy(new char[m_string.length() + 1], m_string.c_str()); - popState(); - return T_STRING; - } -} - -\" { - pushState(StateQuoted); - m_string.assign(""); - } -<StateQuoted>{ -[^"]* { - m_string.append(yytext); - } -\\\" { - m_string.append("\""); - } -\" { - m_yylval.m_string = strcpy(new char[m_string.length() + 1], m_string.c_str()); - popState(); - return T_IDENTIFIER; - } -} - -%% - -// scan states -int SimpleParser_stateEval = StateEval; -int SimpleParser_stateType = StateType; -int SimpleParser_statePhys = StatePhys; - -// keep sorted - -static const SqlKeyword sqlKeyword[] = { - { "AND", T_AND, -1 }, - { "ASC", T_ASC, -1 }, - { "AUTO_INCREMENT", T_AUTO_INCREMENT, -1 }, - { "BIGINT", T_BIGINT, StateType }, - { "BINARY", T_BINARY, StateType }, - { "BLOB", T_BLOB, StateType }, - { "BY", T_BY, -1 }, - { "CHAR", T_CHAR, StateType }, - { "CLOB", T_CLOB, StateType }, - { "CONSTRAINT", T_CONSTRAINT, -1 }, - { "CREATE", T_CREATE, -1 }, - { "DATETIME", T_DATETIME, StateType }, - { "DEFAULT", T_DEFAULT, -1 }, - { "DELETE", T_DELETE, -1 }, - { "DESC", T_DESC, -1 }, - { "DISTINCT", T_DISTINCT, -1 }, - { "DOUBLE", T_DOUBLE, StateType }, - { "DROP", T_DROP, -1 }, - { "FLOAT", T_FLOAT, StateType }, - { "FOREIGN", T_FOREIGN, -1 }, - { "FROM", T_FROM, -1 }, - { "GROUP", T_GROUP, -1 }, - { "HASH", T_HASH, -1 }, - { "HAVING", T_HAVING, -1 }, - { "IN", T_IN, -1 }, - { "INDEX", T_INDEX, -1 }, - { "INSERT", T_INSERT, -1 }, - { "INT", T_INT, StateType }, - { "INTEGER", T_INTEGER, StateType }, - { "INTO", T_INTO, -1 }, - { "IS", T_IS, -1 }, - { "KEY", T_KEY, -1 }, - { "LARGE", T_LARGE, StatePhys }, - { "LIKE", T_LIKE, -1 }, - { "LIMIT", T_LIMIT, -1 }, - { "LOGGING", T_LOGGING, StatePhys }, - { "LONGBLOB", T_LONGBLOB, StateType }, - { "LONGCLOB", T_LONGCLOB, StateType }, - { "MEDIUM", T_MEDIUM, StatePhys }, - { "NOLOGGING", T_NOLOGGING, StatePhys }, - { "NOT", T_NOT, -1 }, - { "NULL", T_NULL, -1 }, - { "OFFSET", T_OFFSET, -1 }, - { "ON", T_ON, -1 }, - { "OR", T_OR, -1 }, - { "ORDER", T_ORDER, -1 }, - { "PRECISION", T_PRECISION, StateType }, - { "PRIMARY", T_PRIMARY, -1 }, - { "REAL", T_REAL, StateType }, - { "REFERENCES", T_REFERENCES, -1 }, - { "ROWNUM", T_ROWNUM, -1 }, - { "SELECT", T_SELECT, -1 }, - { "SET", T_SET, -1 }, - { "SINGLE", T_SINGLE, StatePhys }, - { "SMALL", T_SMALL, StatePhys }, - { "SMALLINT", T_SMALLINT, StateType }, - { "STORAGE", T_STORAGE, StatePhys }, - { "SYSDATE", T_SYSDATE, -1 }, - { "TABLE", T_TABLE, -1 }, - { "UNIQUE", T_UNIQUE, -1 }, - { "UNSIGNED", T_UNSIGNED, -1 }, - { "UPDATE", T_UPDATE, -1 }, - { "VALUES", T_VALUES, -1 }, - { "VARBINARY", T_VARBINARY, StateType }, - { "VARCHAR", T_VARCHAR, StateType }, - { "WHERE", T_WHERE, -1 }, - { "WRITE", T_WRITE, -1 } -}; - -static const unsigned sqlKeywordCount = sizeof(sqlKeyword) / sizeof(sqlKeyword[0]); - -const SqlKeyword* -SqlKeyword::find(Ctx& ctx, const char* name, int state) -{ - ctx_log4(("find keyword '%s' lex state = %d", name, state)); - const unsigned maxlen = 99; - char buf[maxlen + 1]; - char* a = buf; - const char* b = name; - while (*b != 0) { - if (a >= buf + maxlen) // will not be found - break; - char c = *b++; - if ('a' <= c && c <= 'z') // locale independent - c -= 'a' - 'A'; - *a++ = c; - } - *a = 0; - for (unsigned i = 0; i < sqlKeywordCount; i++) { - const SqlKeyword* key = &sqlKeyword[i]; - if (strcmp(key->m_name, buf) == 0) { - if (key->m_state != -1 && key->m_state != state) - return 0; - return key; - } - } - return 0; -} - -/* vim: set filetype=lex: */ diff --git a/storage/ndb/src/old_files/client/odbc/common/AttrArea.cpp b/storage/ndb/src/old_files/client/odbc/common/AttrArea.cpp deleted file mode 100644 index ff9e085a7f65332f912b71948e0d8a74c5e75ed8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/AttrArea.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "AttrArea.hpp" - -// AttrSpec - -// AttrField - -// AttrArea - -AttrArea::AttrArea(const AttrSpec* specList) : - m_specList(specList) -{ -} - -AttrArea::~AttrArea() -{ -} - -const AttrSpec& -AttrArea::findSpec(int id) const -{ - const AttrSpec* p; - for (p = m_specList; p->m_mode != Attr_mode_undef; p++) { - if (p->m_id == id) - break; - } - return *p; -} - -void -AttrArea::setAttr(Ctx& ctx, int id, const OdbcData& data) -{ - const AttrSpec& spec = findSpec(id); - if (spec.m_mode == Attr_mode_undef) { - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "undefined attribute id %d", id); - return; - } - ctx_assert(spec.m_type == data.type()); - ctx_assert(spec.m_set != 0); - spec.m_set(ctx, m_handle, data); - if (! ctx.ok()) - return; - Fields::iterator iter; - if (ctx.logLevel() >= 3) { - char buf[100]; - data.print(buf, sizeof(buf)); - ctx_log3(("attr handle 0x%x set id %d = %s", (unsigned)m_handle, id, buf)); - } - iter = m_fields.find(id); - if (iter != m_fields.end()) { - AttrField& field = (*iter).second; - field.setData(data); - return; - } - AttrField field(spec, data); - m_fields.insert(Fields::value_type(id, field)); -} - -void -AttrArea::getAttr(Ctx& ctx, int id, OdbcData& data) -{ - const AttrSpec& spec = findSpec(id); - if (spec.m_mode == Attr_mode_undef) { - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "undefined attribute id %d", id); - return; - } - Fields::iterator iter; - iter = m_fields.find(id); - if (iter != m_fields.end()) { - AttrField& field = (*iter).second; - data.setValue(field.getData()); - return; - } - ctx_assert(spec.m_default != 0); - spec.m_default(ctx, m_handle, data); -} diff --git a/storage/ndb/src/old_files/client/odbc/common/AttrArea.hpp b/storage/ndb/src/old_files/client/odbc/common/AttrArea.hpp deleted file mode 100644 index 050cce719bfd9280ea1216608547cff4897c6ba5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/AttrArea.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_AttrArea_hpp -#define ODBC_HANDLES_AttrArea_hpp - -#include <map> -#include <common/common.hpp> -#include "OdbcData.hpp" - -class HandleBase; - -enum AttrMode { - Attr_mode_undef, - Attr_mode_readonly, - Attr_mode_writeonly, - Attr_mode_readwrite -}; - -/** - * @struct AttrSpec - * @brief Attribute specifier - * - * Each handle class has a list of attribute specifiers. - */ -struct AttrSpec { - int m_id; // SQL_ATTR_ identifier - OdbcData::Type m_type; // data type - AttrMode m_mode; // access mode, undef indicates end of list - /** - * Callback for checks and side effects. Called before the - * attribute is stored. May set error status. - */ - typedef void CallbackSet(Ctx& ctx, HandleBase* self, const OdbcData& data); - CallbackSet* m_set; - /** - * Callback to set default value. May set error status. - */ - typedef void CallbackDefault(Ctx& ctx, HandleBase* self, OdbcData& data); - CallbackDefault* m_default; -}; - -/** - * @class AttrField - * @brief Attribute value (stored as OdbcData) - */ -class AttrField { -public: - AttrField(const AttrSpec& attrSpec, const OdbcData& data); - AttrField(const AttrField& field); - ~AttrField(); - void setData(const OdbcData& data); - const OdbcData& getData(); -private: - const AttrSpec& m_spec; - OdbcData m_data; -}; - -inline -AttrField::AttrField(const AttrSpec& spec, const OdbcData& data) : - m_spec(spec), - m_data(data) -{ -} - -inline -AttrField::AttrField(const AttrField& field) : - m_spec(field.m_spec), - m_data(field.m_data) -{ -} - -inline -AttrField::~AttrField() -{ -} - -inline void -AttrField::setData(const OdbcData& data) -{ - ctx_assert(m_spec.m_type == data.type()); - m_data.setValue(data); -} - -inline const OdbcData& -AttrField::getData() -{ - ctx_assert(m_data.type() != OdbcData::Undef); - return m_data; -} - -/** - * @class AttrArea - * @brief Handle attributes - * - * Each handle instance has a list of attribute values stored - * under an AttrArea. Callbacks to handle code provide for - * default values, extra checks, and side-effects. - */ -class AttrArea { -public: - AttrArea(const AttrSpec* specList); - ~AttrArea(); - void setHandle(HandleBase* handle); - const AttrSpec& findSpec(int id) const; - void setAttr(Ctx& ctx, int id, const OdbcData& data); - void getAttr(Ctx& ctx, int id, OdbcData& data); -private: - HandleBase* m_handle; - const AttrSpec* const m_specList; - typedef std::map<int, AttrField> Fields; - Fields m_fields; -}; - -inline void -AttrArea::setHandle(HandleBase* handle) -{ - ctx_assert(handle != 0); - m_handle = handle; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/CodeTree.cpp b/storage/ndb/src/old_files/client/odbc/common/CodeTree.cpp deleted file mode 100644 index ebe4840c5f6a207ef737637ac0a332d674831219..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/CodeTree.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "CodeTree.hpp" - -// PlanTree - -PlanTree::~PlanTree() -{ -} - -// ExecTree - -ExecTree::Code::~Code() -{ -} - -ExecTree::Data::~Data() -{ -} - -ExecTree::~ExecTree() -{ -} diff --git a/storage/ndb/src/old_files/client/odbc/common/CodeTree.hpp b/storage/ndb/src/old_files/client/odbc/common/CodeTree.hpp deleted file mode 100644 index 1b0ae3199af2bb6d9876908b133df7ee09c3b3be..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/CodeTree.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_CODEGEN_CodeTree_hpp -#define ODBC_CODEGEN_CodeTree_hpp - -#include <common/common.hpp> - -/* - * Intermediary statement evalution plan. Starts as parse tree. Final - * format maps directly to ExecTree. - */ -class PlanTree { -public: - virtual ~PlanTree() = 0; -}; - -/* - * Executable code and runtime data. Currently looks like PlanTree. - * Later may change code format to linear "byte code" and move execution - * to a SQL block in NDB kernel. - */ -class ExecTree { -public: - class Code { - public: - virtual ~Code() = 0; - }; - class Data { - public: - virtual ~Data() = 0; - }; - virtual ~ExecTree() = 0; -}; - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/ConnArea.cpp b/storage/ndb/src/old_files/client/odbc/common/ConnArea.cpp deleted file mode 100644 index d4d3be52a3c33cbd4b36a172608779abacef6eea..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/ConnArea.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <dictionary/DictCatalog.hpp> -#include <dictionary/DictSchema.hpp> -#include "ConnArea.hpp" - -ConnArea::ConnArea() : - m_state(Free), - m_ndbObject(0), - m_ndbSchemaCon(0), - m_ndbConnection(0), - m_useSchemaCon(0), - m_useConnection(0), - m_autocommit(true), - m_uncommitted(false) -{ - // initialize connection catalog - m_catalog = new DictCatalog(*this); - m_schema = new DictSchema(*this, "NDB"); - m_catalog->addSchema(m_schema); -} - -ConnArea::~ConnArea() -{ - delete m_catalog; -} - -bool -ConnArea::useSchemaCon(Ctx& ctx, bool use) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "not connected"); - return false; - } - Ndb* ndb = m_ndbObject; - ctx_assert(ndb != 0); - NdbSchemaCon* scon = m_ndbSchemaCon; - if (use) { - if (scon == 0) { - ctx_assert(m_useSchemaCon == 0); - scon = ndb->startSchemaTransaction(); - if (scon == 0) { - ctx.pushStatus(ndb, scon, 0, "startSchemaTransaction"); - return false; - } - m_ndbSchemaCon = scon; - } - m_useSchemaCon++; - } else { - ctx_assert(scon != 0 && m_useSchemaCon != 0); - if (--m_useSchemaCon == 0) { - ndb->closeSchemaTransaction(scon); - m_ndbSchemaCon = 0; - } - } - return true; -} - -bool -ConnArea::useConnection(Ctx& ctx, bool use) -{ - ctx_log3(("useConnection: count before=%u on-off=%d", m_useConnection, (int)use)); - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "not connected"); - return false; - } - Ndb* ndb = m_ndbObject; - ctx_assert(ndb != 0); - NdbConnection* tcon = m_ndbConnection; - if (use) { - if (tcon == 0) { - ctx_assert(m_useConnection == 0); - tcon = ndb->startTransaction(); - if (tcon == 0) { - ctx.pushStatus(ndb, tcon, 0, "startTransaction"); - return false; - } - m_ndbConnection = tcon; - m_state = Transacting; - ctx_log2(("transaction opened")); - } - m_useConnection++; - } else { - ctx_assert(tcon != 0 && m_useConnection != 0); - if (--m_useConnection == 0) { - ndb->closeTransaction(tcon); - m_ndbConnection = 0; - m_uncommitted = false; - m_state = Connected; - ctx_log2(("transaction closed")); - } - } - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/ConnArea.hpp b/storage/ndb/src/old_files/client/odbc/common/ConnArea.hpp deleted file mode 100644 index 36367a39bae0dd4b77c96aab9408f40842268431..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/ConnArea.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_ConnArea_hpp -#define ODBC_COMMON_ConnArea_hpp - -#include <common/common.hpp> - -class Ctx; -class Ndb; -class NdbSchemaCon; -class NdbConnection; -class DictCatalog; -class DictSchema; - -/** - * @class ConnArea - * @brief Public part of connection handle - */ -class ConnArea { -public: - // state between ODBC function calls - enum State { - Free = 1, // not in use, no Ndb object - Connected = 2, // has Ndb object but no Ndb connection - Transacting = 3 // has Ndb connection - }; - State getState() const; - DictCatalog& dictCatalog() const; - DictSchema& dictSchema() const; - Ndb* ndbObject() const; - NdbSchemaCon* ndbSchemaCon() const; - NdbConnection* ndbConnection() const; - // called from StmtArea - bool useSchemaCon(Ctx& ctx, bool use); - bool useConnection(Ctx& ctx, bool use); - // these just get and set the flag - no semantics - bool autocommit() const; - void autocommit(bool flag); - bool uncommitted() const; - void uncommitted(bool flag); -protected: - ConnArea(); - ~ConnArea(); - State m_state; - DictCatalog* m_catalog; - DictSchema* m_schema; - Ndb* m_ndbObject; - NdbSchemaCon* m_ndbSchemaCon; - NdbConnection* m_ndbConnection; - unsigned m_useSchemaCon; - unsigned m_useConnection; - bool m_autocommit; - bool m_uncommitted; // has uncommitted changes -}; - -inline ConnArea::State -ConnArea::getState() const -{ - return m_state; -} - -inline DictCatalog& -ConnArea::dictCatalog() const -{ - ctx_assert(m_catalog != 0); - return *m_catalog; -} - -inline DictSchema& -ConnArea::dictSchema() const -{ - ctx_assert(m_schema != 0); - return *m_schema; -} - -inline Ndb* -ConnArea::ndbObject() const -{ - ctx_assert(m_ndbObject != 0); - return m_ndbObject; -} - -inline NdbSchemaCon* -ConnArea::ndbSchemaCon() const -{ - ctx_assert(m_ndbSchemaCon != 0); - return m_ndbSchemaCon; -} - -inline NdbConnection* -ConnArea::ndbConnection() const -{ - ctx_assert(m_ndbConnection != 0); - return m_ndbConnection; -} - -inline bool -ConnArea::autocommit() const -{ - return m_autocommit; -} - -inline void -ConnArea::autocommit(bool flag) -{ - m_autocommit = flag; -} - -inline bool -ConnArea::uncommitted() const -{ - return m_uncommitted; -} - -inline void -ConnArea::uncommitted(bool flag) -{ - m_uncommitted = flag; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/Ctx.cpp b/storage/ndb/src/old_files/client/odbc/common/Ctx.cpp deleted file mode 100644 index d6faa5cba77d2eca05fea2958b2fd30751984296..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/Ctx.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/common.hpp> -#include "DiagArea.hpp" - -// ctor - -Ctx::Ctx() : - m_diagArea(0) // create on demand -{ - const char* p; - if ((p = getenv("NDB_ODBC_TRACE")) != 0) - m_logLevel = atoi(p); - if ((p = getenv("NDB_ODBC_TRACE_FILE")) != 0 && *p != 0) - strcpy(m_szTraceFile, p); -} - -Ctx::~Ctx() -{ - delete m_diagArea; - m_diagArea = 0; -} - -// handle exceptions - -CtxAssert::CtxAssert(const char* file, int line) : - m_file(file), - m_line(line) -{ - const char* p; - if ((p = getenv("NDB_ODBC_DEBUG")) != 0 && atoi(p) != 0) { - char buf[200]; - snprintf(buf, sizeof(buf), "%s, line %d: assert failed\n", m_file, m_line); - if ((p = getenv("NDB_ODBC_TRACE_FILE")) != 0 && *p != 0) { - FILE* pFile = fopen(p, "a"); - fprintf(pFile, buf); - fflush(pFile); - fclose(pFile); - } else { - fprintf(stderr, buf); - fflush(stderr); - } - abort(); - exit(1); - } -} - -void -Ctx::handleEx(CtxAssert& ctxAssert) -{ - pushStatus(Sqlstate::_IM001, Error::Gen, "exception at %s line %d", ctxAssert.m_file, ctxAssert.m_line); -} - -// logging methods - -int Ctx::m_logLevel = 0; -char Ctx::m_szTraceFile[MAX_PATH]; - -void -Ctx::log(const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - if (m_szTraceFile[0]) { - FILE* pFile = fopen(m_szTraceFile, "a"); - fprintf(pFile, "[NdbOdbc] "); - vfprintf(pFile, fmt, ap); - fprintf(pFile, "\n"); - fflush(pFile); - fclose(pFile); - } else { - printf("[NdbOdbc] "); - vprintf(fmt, ap); - printf("\n"); - fflush(stdout); - } - va_end(ap); -} - -void -Ctx::logSqlEnter(const char* sqlFunction) -{ - Ctx& ctx = *this; - snprintf(m_sqlFunction, sizeof(m_sqlFunction), "%s", sqlFunction); - ctx_log3(("%s", m_sqlFunction)); -} - -void -Ctx::logSqlExit() -{ - Ctx& ctx = *this; - if (m_diagArea == 0) { - ctx_log3(("%s ret=%d", m_sqlFunction, getCode())); - return; - } - int logLevel = diagArea().numStatus() != 0 ? 2 : 3; - ctx_logN(logLevel, ("%s ret=%d diag=%d", m_sqlFunction, diagArea().getCode(), diagArea().numStatus())); - for (unsigned i = 1; i <= diagArea().numStatus(); i++) { - OdbcData state; - OdbcData message; - diagArea().getRecord(ctx, i, SQL_DIAG_SQLSTATE, state); - diagArea().getRecord(ctx, i, SQL_DIAG_MESSAGE_TEXT, message); - ctx_logN(logLevel, ("diag %u: %s - %s", i, state.sqlstate().state(), message.sqlchar())); - } -} - -void -Ctx::print(const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - if (m_szTraceFile[0]) { - FILE* pFile = fopen(m_szTraceFile, "a"); - vfprintf(pFile, fmt, ap); - unsigned n = strlen(fmt); - if (n > 0 && fmt[n-1] == '\n') - fflush(pFile); - fclose(pFile); - } else { - vprintf(fmt, ap); - unsigned n = strlen(fmt); - if (n > 0 && fmt[n-1] == '\n') - fflush(stdout); - } - va_end(ap); -} - -void -Ctx::print(int level, const char* fmt, ...) -{ - if (level > m_logLevel) - return; - va_list ap; - va_start(ap, fmt); - if (m_szTraceFile[0]) { - FILE* pFile = fopen(m_szTraceFile, "a"); - vfprintf(pFile, fmt, ap); - unsigned n = strlen(fmt); - if (n > 0 && fmt[n-1] == '\n') - fflush(pFile); - fclose(pFile); - } else { - vprintf(fmt, ap); - unsigned n = strlen(fmt); - if (n > 0 && fmt[n-1] == '\n') - fflush(stdout); - } - va_end(ap); -} - -// diagnostics - -static const unsigned MessageSize = 512; - -DiagArea& -Ctx::diagArea() const -{ - ctx_assert(m_diagArea != 0); - return *m_diagArea; -} - -DiagArea& -Ctx::diagArea() -{ - if (m_diagArea == 0) - m_diagArea = new DiagArea; - return *m_diagArea; -} - -SQLRETURN -Ctx::getCode() const -{ - if (m_diagArea == 0) - return SQL_SUCCESS; - return diagArea().getCode(); -} - -void -Ctx::setCode(SQLRETURN ret) -{ - diagArea().setCode(ret); -} - -void -Ctx::pushStatus(const Sqlstate& state, SQLINTEGER code, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - vsnprintf(message, sizeof(message), fmt, ap); - va_end(ap); - Error error(state); - error.m_status = NdbError::PermanentError; - error.m_classification = NdbError::ApplicationError; - error.m_code = code; - error.m_message = message; - error.m_sqlFunction = m_sqlFunction; - diagArea().pushStatus(error); -} - -void -Ctx::pushStatus(SQLINTEGER code, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - vsnprintf(message, sizeof(message), fmt, ap); - va_end(ap); - Error error(Sqlstate::_IM000); - error.m_status = NdbError::PermanentError; - error.m_classification = NdbError::ApplicationError; - error.m_code = code; - error.m_message = message; - error.m_sqlFunction = m_sqlFunction; - diagArea().pushStatus(error); -} - -void -Ctx::pushStatus(const NdbError& ndbError, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - snprintf(message, sizeof(message), "%s", ndbError.message); - snprintf(message + strlen(message), sizeof(message) - strlen(message), "%s", " - at "); - vsnprintf(message + strlen(message), sizeof(message) - strlen(message), fmt, ap); - va_end(ap); - Error error(Sqlstate::_IM000); - error.m_status = ndbError.status; - error.m_classification = ndbError.classification; - error.m_code = ndbError.code; - error.m_message = message; - error.m_sqlFunction = m_sqlFunction; - diagArea().pushStatus(error); -} - -void -Ctx::pushStatus(const Ndb* ndb, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - vsnprintf(message, sizeof(message), fmt, ap); - va_end(ap); - bool found = false; - if (ndb != 0) { - const NdbError& ndbError = ndb->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (! found) { - pushStatus(Error::Gen, "unknown NDB error"); - } -} - -void -Ctx::pushStatus(const Ndb* ndb, const NdbConnection* tcon, const NdbOperation* op, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - vsnprintf(message, sizeof(message), fmt, ap); - va_end(ap); - bool found = false; - if (op != 0) { - const NdbError& ndbError = op->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (tcon != 0) { - const NdbError& ndbError = tcon->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (ndb != 0) { - const NdbError& ndbError = ndb->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (! found) { - pushStatus(Error::Gen, "unknown NDB error"); - } -} - -void -Ctx::pushStatus(const Ndb* ndb, const NdbSchemaCon* scon, const NdbSchemaOp* op, const char* fmt, ...) -{ - char message[MessageSize]; - va_list ap; - va_start(ap, fmt); - vsnprintf(message, sizeof(message), fmt, ap); - va_end(ap); - bool found = false; - if (op != 0) { - const NdbError& ndbError = op->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (scon != 0) { - const NdbError& ndbError = scon->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (ndb != 0) { - const NdbError& ndbError = ndb->getNdbError(); - if (ndbError.code != 0) { - pushStatus(ndbError, "%s", message); - found = true; - } - } - if (! found) { - pushStatus(Error::Gen, "unknown NDB error"); - } -} - -// check for error - -bool -Ctx::ok() -{ - if (m_diagArea == 0) - return true; - if (diagArea().getCode() == SQL_SUCCESS) - return true; - if (diagArea().getCode() == SQL_SUCCESS_WITH_INFO) - return true; - return false; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/Ctx.hpp b/storage/ndb/src/old_files/client/odbc/common/Ctx.hpp deleted file mode 100644 index d25d45ff0c7a12790624819ee678c8910aaa553e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/Ctx.hpp +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_Ctx_hpp -#define ODBC_COMMON_Ctx_hpp - -#include <NdbDictionary.hpp> - -class Ndb; -class NdbConnection; -class NdbOperation; -class NdbSchemaCon; -class NdbSchemaOp; -class NdbError; - -class Sqlstate; -class DiagArea; -class CtxOwner; - -#ifndef MAX_PATH -#define MAX_PATH 1024 -#endif - -/** - * @class Error - * @brief Sql state, error codes, and message - */ -struct Error { - enum { - Gen = NDB_ODBC_ERROR_MIN + 1 // unclassified - }; - explicit Error(const Sqlstate& sqlstate); - const Sqlstate& m_sqlstate; - int m_status; - int m_classification; - int m_code; - const char* m_message; - const char* m_sqlFunction; - bool driverError() const; -}; - -inline -Error::Error(const Sqlstate& sqlstate) : - m_sqlstate(sqlstate), - m_status(0), - m_classification(0), - m_code(0), - m_sqlFunction(0) -{ -} - -inline bool -Error::driverError() const -{ - return NDB_ODBC_ERROR_MIN <= m_code && m_code < NDB_ODBC_ERROR_MAX; -} - -#define ctx_assert(x) \ - do { if (x) break; throw CtxAssert(__FILE__, __LINE__); } while (0) - -/** - * @class Assert - * @brief Assert thrown - */ -class CtxAssert { -public: - CtxAssert(const char* file, int line); - const char* const m_file; - const int m_line; -}; - -/** - * @class Ctx - * @brief Context for one ODBC SQL function - * - * Local to the function (not member of the handle) because methods on - * a handle can call methods on other handles. Created in driver/ - * before method calls and saved under the handle on return. Contains - * diag area for the function. Also used as logger. - */ -class Ctx { -public: - Ctx(); - ~Ctx(); - // handle exceptions - void handleEx(CtxAssert& ctxAssert); - // logging methods - int logLevel() const; - void log(const char* fmt, ...) PRINTFLIKE(2,3); - void logSqlEnter(const char* sqlFunction); - void logSqlExit(); - const char* sqlFunction() const; - void print(const char* fmt, ...) PRINTFLIKE(2,3); - void print(int level, const char* fmt, ...) PRINTFLIKE(3,4); - // diagnostics area. - DiagArea& diagArea() const; - DiagArea& diagArea(); - SQLRETURN getCode() const; - void setCode(SQLRETURN ret); - // push diagnostic record - void pushStatus(const Sqlstate& state, SQLINTEGER code, const char* fmt, ...) PRINTFLIKE(4,5); - void pushStatus(SQLINTEGER code, const char* fmt, ...) PRINTFLIKE(3,4); - void pushStatus(const NdbError& ndbError, const char* fmt, ...) PRINTFLIKE(3,4); - void pushStatus(const Ndb* ndb, const char* fmt, ...) PRINTFLIKE(3,4); - void pushStatus(const Ndb* ndb, const NdbConnection* tcon, const NdbOperation* op, const char* fmt, ...) PRINTFLIKE(5,6); - void pushStatus(const Ndb* ndb, const NdbSchemaCon* scon, const NdbSchemaOp* op, const char* fmt, ...) PRINTFLIKE(5,6); - // check if we should continue executing. - bool ok(); -private: - static int m_logLevel; - static char m_szTraceFile[MAX_PATH]; - char m_sqlFunction[32]; // max needed is 20 - DiagArea* m_diagArea; -}; - -inline int -Ctx::logLevel() const -{ - return m_logLevel; -} - -inline const char* -Ctx::sqlFunction() const -{ - return m_sqlFunction; -} - -// logging macros can be used only when ctx is in scope - -#define ctx_logN(n, x) \ - do { if (ctx.logLevel() < (n)) break; ctx.log x; } while (0) - -#if NDB_ODBC_MAX_LOG_LEVEL >= 0 -#define ctx_log0(x) ctx_logN(0, x) -#else -#define ctx_log0(x) -#endif - -#if NDB_ODBC_MAX_LOG_LEVEL >= 1 -#define ctx_log1(x) ctx_logN(1, x) -#else -#define ctx_log1(x) -#endif - -#if NDB_ODBC_MAX_LOG_LEVEL >= 2 -#define ctx_log2(x) ctx_logN(2, x) -#else -#define ctx_log2(x) -#endif - -#if NDB_ODBC_MAX_LOG_LEVEL >= 3 -#define ctx_log3(x) ctx_logN(3, x) -#else -#define ctx_log3(x) -#endif - -#if NDB_ODBC_MAX_LOG_LEVEL >= 4 -#define ctx_log4(x) ctx_logN(4, x) -#else -#define ctx_log4(x) -#endif - -#if NDB_ODBC_MAX_LOG_LEVEL >= 5 -#define ctx_log5(x) ctx_logN(5, x) -#else -#define ctx_log5(x) -#endif - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/DataField.cpp b/storage/ndb/src/old_files/client/odbc/common/DataField.cpp deleted file mode 100644 index 11aae7d893b36356d35a13456af8659ae978326b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataField.cpp +++ /dev/null @@ -1,3023 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DataField.hpp" - -#ifndef INT_MAX -#define INT_MAX (2147483647) -#endif - -#ifndef INT_MIN -#define INT_MIN (-INT_MAX - 1) -#endif - -#ifndef UINT_MAX -#define UINT_MAX 4294967295U -#endif - -#ifndef FLT_MAX -#define FLT_MAX (3.402823466E+38F) -#endif -#ifndef FLT_MIN -#define FLT_MIN (1.175494351E-38F) -#endif - -#ifdef NDB_WIN32 -#define FMT_I64 "%I64d" -#define FMT_U64 "%I64u" -#else -#define FMT_I64 "%lld" -#define FMT_U64 "%llu" -#endif - -#ifdef NDB_WIN32 -#define strtoll(str, endptr, base) strtoint64(str, endptr, base) -#define strtoull(str, endptr, base) strtouint64(str, endptr, base) - -static Int64 -strtoint64(const char *str, char **endptr, int base) -{ - Int64 x = 0; - while (*str == ' ') - str++; - const char* p = str; - while ('0' <= *p && *p <= '9') - x = 10 * x + *p++ - '0'; - if (p == str) { - *endptr = 0; - return 0; - } - *endptr = (char*)p; - return x; -} - -static Uint64 -strtouint64(const char *str, char **endptr, int base) -{ - Uint64 x = 0; - while (*str == ' ') - str++; - const char* p = str; - while ('0' <= *p && *p <= '9') - x = 10 * x + *p++ - '0'; - if (p == str) { - *endptr = 0; - return 0; - } - *endptr = (char*)p; - return x; -} -#endif - -// LexSpec - -void -LexSpec::convert(Ctx& ctx, const BaseString& value, SqlField& out) -{ - const SqlSpec& sqlSpec = out.sqlSpec(); - const SqlType& sqlType = sqlSpec.sqlType(); - out.alloc(); - if (sqlType.type() == SqlType::Char) { - const SqlChar* s = (const SqlChar*)value.c_str(); - out.sqlChar(s, SQL_NTS); - return; - } - if (sqlType.type() == SqlType::Bigint) { - char* endptr = 0; - SqlBigint n = static_cast<SqlBigint>(strtoll(value.c_str(), &endptr, 10)); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Error::Gen, "cannot convert '%s' to integer", value.c_str()); - return; - } - out.sqlBigint(n); - return; - } - if (sqlType.type() == SqlType::Double) { - char* endptr = 0; - SqlDouble x = static_cast<SqlDouble>(strtod(value.c_str(), &endptr)); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Error::Gen, "cannot convert '%s' to number", value.c_str()); - return; - } - out.sqlDouble(x); - return; - } - if (sqlType.type() == SqlType::Null) { - out.u_null.m_nullFlag = true; - return; - } - ctx_assert(false); -} - -// SqlField - -void -SqlField::alloc() -{ - ctx_assert(sqlSpec().store() == SqlSpec::Physical); - const SqlType& sqlType = sqlSpec().sqlType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varchar) - n += 2; - if (n > SqlField_CharSmall) { - u_data.m_sqlChar = new SqlChar[n]; - } - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varbinary) - n += 2; - if (n > SqlField_CharSmall) { - u_data.m_sqlChar = new SqlChar[n]; - } - } -} - -void -SqlField::alloc(const SqlField& sqlField) -{ - alloc(); - const SqlType& sqlType = sqlSpec().sqlType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varchar) - n += 2; - if (n > SqlField_CharSmall) { - memcpy(u_data.m_sqlChar, sqlField.u_data.m_sqlChar, n); - } - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varbinary) - n += 2; - if (n > SqlField_CharSmall) { - memcpy(u_data.m_sqlChar, sqlField.u_data.m_sqlChar, n); - } - } -} - -const void* -SqlField::addr() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->addr(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varchar) - n += 2; - if (n > SqlField_CharSmall) { - return static_cast<const void*>(u_data.m_sqlChar); - } - return static_cast<const void*>(u_data.m_sqlCharSmall); - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varbinary) - n += 2; - if (n > SqlField_CharSmall) { - return static_cast<const void*>(u_data.m_sqlChar); - } - return static_cast<const void*>(u_data.m_sqlCharSmall); - } - if (sqlType.type() == SqlType::Smallint) { - return static_cast<const void*>(&u_data.m_sqlSmallint); - } - if (sqlType.type() == SqlType::Integer) { - return static_cast<const void*>(&u_data.m_sqlInteger); - } - if (sqlType.type() == SqlType::Bigint) { - return static_cast<const void*>(&u_data.m_sqlBigint); - } - if (sqlType.type() == SqlType::Real) { - return static_cast<const void*>(&u_data.m_sqlReal); - } - if (sqlType.type() == SqlType::Double) { - return static_cast<const void*>(&u_data.m_sqlDouble); - } - if (sqlType.type() == SqlType::Datetime) { - return static_cast<const void*>(&u_data.m_sqlDatetime); - } - ctx_assert(false); // SqlType::Null has no address - return 0; -} - -void* -SqlField::addr() -{ - const SqlType& sqlType = sqlSpec().sqlType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varchar) - n += 2; - if (n > SqlField_CharSmall) { - return static_cast<void*>(u_data.m_sqlChar); - } - return static_cast<void*>(u_data.m_sqlCharSmall); - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varbinary) - n += 2; - if (n > SqlField_CharSmall) { - return static_cast<void*>(u_data.m_sqlChar); - } - return static_cast<void*>(u_data.m_sqlCharSmall); - } - if (sqlType.type() == SqlType::Smallint) { - return static_cast<void*>(&u_data.m_sqlSmallint); - } - if (sqlType.type() == SqlType::Integer) { - return static_cast<void*>(&u_data.m_sqlInteger); - } - if (sqlType.type() == SqlType::Bigint) { - return static_cast<void*>(&u_data.m_sqlBigint); - } - if (sqlType.type() == SqlType::Real) { - return static_cast<void*>(&u_data.m_sqlReal); - } - if (sqlType.type() == SqlType::Double) { - return static_cast<void*>(&u_data.m_sqlDouble); - } - if (sqlType.type() == SqlType::Datetime) { - return static_cast<void*>(&u_data.m_sqlDatetime); - } - ctx_assert(false); // SqlType::Null has no address - return 0; -} - -unsigned -SqlField::allocSize() const -{ - const SqlType& sqlType = sqlSpec().sqlType(); - unsigned n = sqlType.size(); - if (sqlType.type() == SqlType::Varchar || sqlType.type() == SqlType::Varbinary) { - n += 2; - } - return n; -} - -void -SqlField::free() -{ - ctx_assert(sqlSpec().store() == SqlSpec::Physical); - const SqlType& sqlType = sqlSpec().sqlType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varchar) - n += 2; - if (n > SqlField_CharSmall) { - delete[] u_data.m_sqlChar; - u_data.m_sqlChar = 0; // safety since dtor used explicitly - } - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = sqlType.length(); - if (sqlType.type() == SqlType::Varbinary) - n += 2; - if (n > SqlField_CharSmall) { - delete[] u_data.m_sqlChar; - u_data.m_sqlChar = 0; // safety since dtor used explicitly - } - } -} - -// get - -const SqlChar* -SqlField::sqlChar() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlChar(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Char); - if (sqlType.length() > SqlField_CharSmall) - return u_data.m_sqlChar; - return u_data.m_sqlCharSmall; -} - -const SqlChar* -SqlField::sqlVarchar(unsigned* length) const -{ -#if NDB_VERSION_MAJOR >= 3 - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlVarchar(length); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varchar); - const SqlChar* sqlChar; - unsigned n = sqlType.length(); - if (2 + n > SqlField_CharSmall) - sqlChar = u_data.m_sqlChar; - else - sqlChar = u_data.m_sqlCharSmall; - if (length != 0) - *length = (sqlChar[0] << 8) | sqlChar[1]; // big-endian - return sqlChar + 2; -#else - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlVarchar(length); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varchar); - const SqlChar* sqlChar; - unsigned n = sqlType.length(); - if (n + 2 > SqlField_CharSmall) - sqlChar = u_data.m_sqlChar; - else - sqlChar = u_data.m_sqlCharSmall; - if (length != 0) - *length = (sqlChar[n + 0] << 8) | sqlChar[n + 1]; // big-endian - return sqlChar; -#endif -} - -const SqlChar* -SqlField::sqlBinary() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlChar(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Binary); - if (sqlType.length() > SqlField_CharSmall) - return u_data.m_sqlChar; - return u_data.m_sqlCharSmall; -} - -const SqlChar* -SqlField::sqlVarbinary(unsigned* length) const -{ -#if NDB_VERSION_MAJOR >= 3 - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlVarchar(length); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varbinary); - const SqlChar* sqlChar; - unsigned n = sqlType.length(); - if (2 + n > SqlField_CharSmall) - sqlChar = u_data.m_sqlChar; - else - sqlChar = u_data.m_sqlCharSmall; - if (length != 0) - *length = (sqlChar[0] << 8) | sqlChar[1]; // big-endian - return sqlChar + 2; -#else - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlVarchar(length); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varbinary); - const SqlChar* sqlChar; - unsigned n = sqlType.length(); - if (n + 2 > SqlField_CharSmall) - sqlChar = u_data.m_sqlChar; - else - sqlChar = u_data.m_sqlCharSmall; - if (length != 0) - *length = (sqlChar[n + 0] << 8) | sqlChar[n + 1]; // big-endian - return sqlChar; -#endif -} - -SqlSmallint -SqlField::sqlSmallint() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlSmallint(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Smallint); - return u_data.m_sqlSmallint; -} - -SqlInteger -SqlField::sqlInteger() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlInteger(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Integer); - return u_data.m_sqlInteger; -} - -SqlBigint -SqlField::sqlBigint() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlBigint(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Bigint); - return u_data.m_sqlBigint; -} - -SqlReal -SqlField::sqlReal() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlReal(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Real); - return u_data.m_sqlReal; -} - -SqlDouble -SqlField::sqlDouble() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlDouble(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Double); - return u_data.m_sqlDouble; -} - -SqlDatetime -SqlField::sqlDatetime() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlDatetime(); - } - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Datetime); - return u_data.m_sqlDatetime; -} - -// set - -void -SqlField::sqlChar(const SqlChar* value, int length) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Char); - unsigned n = sqlType.length(); - SqlChar* p = n > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length == SQL_NTS ? strlen((const char*)q) : length; - ctx_assert(m <= n); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x20; // space - u_null.m_nullFlag = false; -} - -void -SqlField::sqlVarchar(const SqlChar* value, int length) -{ -#if NDB_VERSION_MAJOR >= 3 - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varchar); - unsigned n = sqlType.length(); - SqlChar* p = 2 + n > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length == SQL_NTS ? strlen((const char*)q) : length; - ctx_assert(m <= n); - *p++ = (m >> 8) & 0xff; // big-endian - *p++ = (m & 0xff); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x0; // null - u_null.m_nullFlag = false; -#else - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varchar); - unsigned n = sqlType.length(); - SqlChar* p = n + 2 > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length == SQL_NTS ? strlen((const char*)q) : length; - ctx_assert(m <= n); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x0; // null - *p++ = (m >> 8) & 0xff; // big-endian - *p++ = (m & 0xff); - u_null.m_nullFlag = false; -#endif -} - -void -SqlField::sqlBinary(const SqlChar* value, int length) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Binary); - unsigned n = sqlType.length(); - SqlChar* p = n > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length; - ctx_assert(m <= n); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x0; // null - u_null.m_nullFlag = false; -} - -void -SqlField::sqlVarbinary(const SqlChar* value, int length) -{ -#if NDB_VERSION_MAJOR >= 3 - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varbinary); - unsigned n = sqlType.length(); - SqlChar* p = 2 + n > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length; - ctx_assert(m <= n); - *p++ = (m >> 8) & 0xff; // big-endian - *p++ = (m & 0xff); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x0; // null - u_null.m_nullFlag = false; -#else - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Varbinary); - unsigned n = sqlType.length(); - SqlChar* p = n + 2 > SqlField_CharSmall ? u_data.m_sqlChar : u_data.m_sqlCharSmall; - const SqlChar* q = value; - unsigned m = length; - ctx_assert(m <= n); - for (unsigned i = 0; i < m; i++) - *p++ = *q++; - for (unsigned i = m; i < n; i++) - *p++ = 0x0; // null - *p++ = (m >> 8) & 0xff; // big-endian - *p++ = (m & 0xff); - u_null.m_nullFlag = false; -#endif -} - -void -SqlField::sqlSmallint(SqlSmallint value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Smallint); - u_data.m_sqlSmallint = value; - u_null.m_nullFlag = false; -} - -void -SqlField::sqlInteger(SqlInteger value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Integer); - u_data.m_sqlInteger = value; - u_null.m_nullFlag = false; -} - -void -SqlField::sqlBigint(SqlBigint value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Bigint); - u_data.m_sqlBigint = value; - u_null.m_nullFlag = false; -} - -void -SqlField::sqlReal(SqlReal value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Real); - u_data.m_sqlReal = value; - u_null.m_nullFlag = false; -} - -void -SqlField::sqlDouble(SqlDouble value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Double); - u_data.m_sqlDouble = value; - u_null.m_nullFlag = false; -} - -void -SqlField::sqlDatetime(SqlDatetime value) -{ - const SqlType& sqlType = sqlSpec().sqlType(); - ctx_assert(sqlType.type() == SqlType::Datetime); - u_data.m_sqlDatetime = value; - u_null.m_nullFlag = false; -} - -// get and and set null - -bool -SqlField::sqlNull() const -{ - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - return u_data.m_sqlField->sqlNull(); - } - return u_null.m_nullFlag; -} - -void -SqlField::sqlNull(bool value) -{ - u_null.m_nullFlag = value; -} - -unsigned -SqlField::trim() const -{ - const SqlType& sqlType = sqlSpec().sqlType(); - unsigned n = 0; - const SqlChar* s = 0; - if (sqlType.type() == SqlType::Char) { - n = sqlType.length(); - s = sqlChar(); - } else if (sqlType.type() == SqlType::Varchar) { - s = sqlVarchar(&n); - } else { - ctx_assert(false); - return 0; - } - while (n > 0 && s[n - 1] == 0x20) - n--; - return n; -} - -void -SqlField::copy(Ctx& ctx, SqlField& out) const -{ - const SqlField& f1 = *this; - SqlField& f2 = out; - const SqlType& t1 = f1.sqlSpec().sqlType(); - const SqlType& t2 = f2.sqlSpec().sqlType(); - ctx_assert(t1.type() == t2.type()); - if (f1.sqlNull()) { - f2.sqlNull(true); - return; - } - if (t1.type() == SqlType::Char) { - f2.sqlChar(f1.sqlChar(), t1.length()); - return; - } - if (t1.type() == SqlType::Varchar) { - unsigned length; - const SqlChar* s1 = f1.sqlVarchar(&length); - f2.sqlVarchar(s1, length); - return; - } - if (t1.type() == SqlType::Binary) { - f2.sqlBinary(f1.sqlBinary(), t1.length()); - return; - } - if (t1.type() == SqlType::Varbinary) { - unsigned length; - const SqlChar* s1 = f1.sqlVarbinary(&length); - f2.sqlVarbinary(s1, length); - return; - } - if (t1.type() == SqlType::Smallint) { - f2.sqlSmallint(f1.sqlSmallint()); - return; - } - if (t1.type() == SqlType::Integer) { - f2.sqlInteger(f1.sqlInteger()); - return; - } - if (t1.type() == SqlType::Bigint) { - f2.sqlBigint(f1.sqlBigint()); - return; - } - if (t1.type() == SqlType::Real) { - f2.sqlReal(f1.sqlReal()); - return; - } - if (t1.type() == SqlType::Double) { - f2.sqlDouble(f1.sqlDouble()); - return; - } - if (t1.type() == SqlType::Datetime) { - f2.sqlDatetime(f1.sqlDatetime()); - return; - } - ctx_assert(false); -} - -bool -SqlField::cast(Ctx& ctx, SqlField& out) const -{ - const SqlField& f1 = *this; - SqlField& f2 = out; - if (f1.sqlNull()) { - f2.sqlNull(true); - return true; - } - const SqlType& t1 = f1.sqlSpec().sqlType(); - const SqlType& t2 = f2.sqlSpec().sqlType(); - if (t1.type() == SqlType::Char) { - if (t2.type() == SqlType::Char) { - unsigned n1 = f1.trim(); - if (n1 > t2.length()) - return false; - f2.sqlChar(f1.sqlChar(), n1); - return true; - } - if (t2.type() == SqlType::Varchar) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlVarchar(f1.sqlChar(), n1); - return true; - } - if (t2.type() == SqlType::Binary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlBinary(f1.sqlChar(), n1); - return true; - } - if (t2.type() == SqlType::Varbinary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlVarbinary(f1.sqlChar(), n1); - return true; - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Varchar) { - if (t2.type() == SqlType::Char) { - unsigned n1 = f1.trim(); - if (n1 > t2.length()) - return false; - f2.sqlChar(f1.sqlVarchar(0), n1); - return true; - } - if (t2.type() == SqlType::Varchar) { - unsigned n1 = f1.trim(); - if (n1 > t2.length()) - return false; - f2.sqlVarchar(f1.sqlVarchar(0), n1); - return true; - } - if (t2.type() == SqlType::Binary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlBinary(f1.sqlVarchar(0), n1); - return true; - } - if (t2.type() == SqlType::Varbinary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlVarbinary(f1.sqlVarchar(0), n1); - return true; - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Binary) { - if (t2.type() == SqlType::Binary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlBinary(f1.sqlBinary(), n1); - return true; - } - if (t2.type() == SqlType::Varbinary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlVarbinary(f1.sqlBinary(), n1); - return true; - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Varbinary) { - if (t2.type() == SqlType::Binary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlBinary(f1.sqlVarbinary(0), n1); - return true; - } - if (t2.type() == SqlType::Varbinary) { - unsigned n1 = t1.length(); - if (n1 > t2.length()) - return false; - f2.sqlVarbinary(f1.sqlVarbinary(0), n1); - return true; - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Smallint) { - if (! t2.unSigned()) { - SqlSmallint x1 = f1.sqlSmallint(); - if (t2.type() == SqlType::Smallint) { - f2.sqlSmallint(x1); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlInteger x2 = static_cast<SqlInteger>(x1); - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlBigint x2 = static_cast<SqlBigint>(x1); - f2.sqlBigint(x2); - return true; - } - if (t2.type() == SqlType::Real) { - SqlReal x2 = static_cast<SqlReal>(x1); - f2.sqlReal(x2); - return true; - } - if (t2.type() == SqlType::Double) { - SqlDouble x2 = static_cast<SqlDouble>(x1); - f2.sqlDouble(x2); - return true; - } - } else { - SqlUsmallint x1 = f1.sqlSmallint(); - if (t2.type() == SqlType::Smallint) { - f2.sqlSmallint(x1); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlUinteger x2 = static_cast<SqlUinteger>(x1); - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlUbigint x2 = static_cast<SqlUbigint>(x1); - f2.sqlBigint(x2); - return true; - } - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Integer) { - if (! t2.unSigned()) { - SqlInteger x1 = f1.sqlInteger(); - if (t2.type() == SqlType::Smallint) { - SqlSmallint x2 = static_cast<SqlSmallint>(x1); - if (x1 != static_cast<SqlInteger>(x2)) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - f2.sqlInteger(x1); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlBigint x2 = static_cast<SqlBigint>(x1); - f2.sqlBigint(x2); - return true; - } - if (t2.type() == SqlType::Real) { - SqlReal x2 = static_cast<SqlReal>(x1); - f2.sqlReal(x2); - return true; - } - if (t2.type() == SqlType::Double) { - SqlDouble x2 = static_cast<SqlDouble>(x1); - f2.sqlDouble(x2); - return true; - } - } else { - SqlUinteger x1 = f1.sqlInteger(); - if (t2.type() == SqlType::Smallint) { - SqlUsmallint x2 = static_cast<SqlUsmallint>(x1); - if (x1 != static_cast<SqlUinteger>(x2)) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - f2.sqlInteger(x1); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlUbigint x2 = static_cast<SqlUbigint>(x1); - f2.sqlBigint(x2); - return true; - } - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Bigint) { - if (! t2.unSigned()) { - SqlBigint x1 = f1.sqlBigint(); - if (t2.type() == SqlType::Smallint) { - SqlSmallint x2 = static_cast<SqlSmallint>(x1); - if (x1 != static_cast<SqlBigint>(x2)) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlInteger x2 = static_cast<SqlInteger>(x1); - if (x1 != static_cast<SqlBigint>(x2)) - return false; - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - f2.sqlBigint(x1); - return true; - } - if (t2.type() == SqlType::Real) { - SqlReal x2 = static_cast<SqlReal>(x1); - f2.sqlReal(x2); - return true; - } - if (t2.type() == SqlType::Double) { - SqlDouble x2 = static_cast<SqlDouble>(x1); - f2.sqlDouble(x2); - return true; - } - } else { - SqlUbigint x1 = f1.sqlBigint(); - if (t2.type() == SqlType::Smallint) { - SqlUsmallint x2 = static_cast<SqlUsmallint>(x1); - if (x1 != static_cast<SqlUbigint>(x2)) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlUinteger x2 = static_cast<SqlUinteger>(x1); - if (x1 != static_cast<SqlUbigint>(x2)) - return false; - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - f2.sqlBigint(x1); - return true; - } - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Real) { - SqlReal x1 = f1.sqlReal(); - int off = 0; - if (x1 > 0.0 && x1 - floor(x1) >= 0.5) - off = 1; - if (x1 < 0.0 && x1 - floor(x1) <= 0.5) - off = -1; - bool b = (x1 - floor(x1) < 0.5); - if (t2.type() == SqlType::Smallint) { - SqlSmallint x2 = static_cast<SqlSmallint>(x1) + off; - if (fabs(x1 - static_cast<SqlReal>(x2)) >= 1.0) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlInteger x2 = static_cast<SqlInteger>(x1) + off; - if (fabs(x1 - static_cast<SqlReal>(x2)) >= 1.0) - return false; - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlBigint x2 = static_cast<SqlBigint>(x1) + off; - if (fabs(x1 - static_cast<SqlReal>(x2)) >= 1.0) - return false; - f2.sqlBigint(x2); - return true; - } - if (t2.type() == SqlType::Real) { - f2.sqlReal(x1); - return true; - } - if (t2.type() == SqlType::Double) { - SqlDouble x2 = static_cast<SqlDouble>(x1); - f2.sqlDouble(x2); - return true; - } - ctx_assert(false); - return false; - } - if (t1.type() == SqlType::Double) { - SqlDouble x1 = f1.sqlDouble(); - int off = 0; - if (x1 > 0.0 && x1 - floor(x1) >= 0.5) - off = 1; - if (x1 < 0.0 && x1 - floor(x1) <= 0.5) - off = -1; - bool b = (x1 - floor(x1) < 0.5); - if (t2.type() == SqlType::Smallint) { - SqlSmallint x2 = static_cast<SqlSmallint>(x1) + off; - if (fabs(x1 - static_cast<SqlDouble>(x2)) >= 1.0) - return false; - f2.sqlSmallint(x2); - return true; - } - if (t2.type() == SqlType::Integer) { - SqlInteger x2 = static_cast<SqlInteger>(x1) + off; - if (fabs(x1 - static_cast<SqlDouble>(x2)) >= 1.0) - return false; - f2.sqlInteger(x2); - return true; - } - if (t2.type() == SqlType::Bigint) { - SqlBigint x2 = static_cast<SqlBigint>(x1) + off; - if (fabs(x1 - static_cast<SqlDouble>(x2)) >= 1.0) - return false; - f2.sqlBigint(x2); - return true; - } - if (t2.type() == SqlType::Real) { - SqlReal x2 = static_cast<SqlReal>(x1); - if (fabs(x1 - static_cast<SqlDouble>(x2)) >= 1.0) // XXX - return false; - f2.sqlReal(x1); - return true; - } - if (t2.type() == SqlType::Double) { - f2.sqlDouble(x1); - return true; - } - ctx_assert(false); - return false; - } - ctx_assert(false); - return false; -} - -bool -SqlField::less(const SqlField& sqlField) const -{ - const SqlField& f1 = *this; - const SqlField& f2 = sqlField; - const SqlType& t1 = f1.sqlSpec().sqlType(); - const SqlType& t2 = f2.sqlSpec().sqlType(); - ctx_assert(t1.type() == t2.type()); - if (t1.type() == SqlType::Char) { - const SqlChar* s1 = f1.sqlChar(); - const SqlChar* s2 = f2.sqlChar(); - unsigned n1 = t1.length(); - unsigned n2 = t2.length(); - SqlChar c1 = 0; - SqlChar c2 = 0; - unsigned i = 0; - while (i < n1 || i < n2) { - c1 = i < n1 ? s1[i] : 0x20; - c2 = i < n2 ? s2[i] : 0x20; - if (c1 != c2) - break; - i++; - } - return (c1 < c2); - } - if (t1.type() == SqlType::Varchar) { - unsigned n1, n2; - const SqlChar* s1 = f1.sqlVarchar(&n1); - const SqlChar* s2 = f2.sqlVarchar(&n2); - SqlChar c1 = 0; - SqlChar c2 = 0; - unsigned i = 0; - while (i < n1 || i < n2) { - c1 = i < n1 ? s1[i] : 0x0; - c2 = i < n2 ? s2[i] : 0x0; - if (c1 != c2) - break; - i++; - } - return (c1 < c2); - } - if (t1.type() == SqlType::Smallint) { - ctx_assert(t1.unSigned() == t2.unSigned()); - if (! t1.unSigned()) { - SqlSmallint x1 = f1.sqlSmallint(); - SqlSmallint x2 = f2.sqlSmallint(); - return (x1 < x2); - } else { - SqlUsmallint x1 = f1.sqlSmallint(); - SqlUsmallint x2 = f2.sqlSmallint(); - return (x1 < x2); - } - } - if (t1.type() == SqlType::Integer) { - ctx_assert(t1.unSigned() == t2.unSigned()); - if (! t1.unSigned()) { - SqlInteger x1 = f1.sqlInteger(); - SqlInteger x2 = f2.sqlInteger(); - return (x1 < x2); - } else { - SqlUinteger x1 = f1.sqlInteger(); - SqlUinteger x2 = f2.sqlInteger(); - return (x1 < x2); - } - } - if (t1.type() == SqlType::Bigint) { - ctx_assert(t1.unSigned() == t2.unSigned()); - if (! t1.unSigned()) { - SqlBigint x1 = f1.sqlBigint(); - SqlBigint x2 = f2.sqlBigint(); - return (x1 < x2); - } else { - SqlUbigint x1 = f1.sqlBigint(); - SqlUbigint x2 = f2.sqlBigint(); - return (x1 < x2); - } - } - if (t1.type() == SqlType::Real) { - SqlReal x1 = f1.sqlReal(); - SqlReal x2 = f2.sqlReal(); - return (x1 < x2); - } - if (t1.type() == SqlType::Double) { - SqlDouble x1 = f1.sqlDouble(); - SqlDouble x2 = f2.sqlDouble(); - return (x1 < x2); - } - if (t1.type() == SqlType::Datetime) { - SqlDatetime x1 = f1.sqlDatetime(); - SqlDatetime x2 = f2.sqlDatetime(); - return x1.less(x2); - } - ctx_assert(false); -} - -// copy from external - -static bool -copyin_char_char(Ctx& ctx, char* value, unsigned n, const char* ptr, const SQLINTEGER* ind, int* off, SqlChar* addr, int fieldId) -{ - if (off != 0 && *off >= 0) { - if ((unsigned)*off > n) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d truncated (%u > %u)", fieldId, (unsigned)*off, n); - return false; - } - value += *off; - n -= *off; - } - unsigned m; - if (ind == 0 || *ind == SQL_NTS) - m = strlen(ptr); - else - m = *ind; - if (m > n) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d truncated (%u > %u)", fieldId, m, n); - return false; - } - for (unsigned i = 0; i < m; i++) - value[i] = ptr[i]; - if (off != 0 && *off >= 0) - *off += m; - for (unsigned i = m; i < n; i++) - value[i] = addr == 0 ? 0x20 : 0x0; - if (addr != 0) { - if (off != 0 && *off >= 0) - m = *off; - addr[0] = (m >> 8) & 0xff; - addr[1] = (m & 0xff); - } - return true; -} - -static bool -copyin_binary_binary(Ctx& ctx, char* value, unsigned n, const char* ptr, const SQLINTEGER* ind, int* off, SqlChar* addr, int fieldId) -{ - if (off != 0 && *off >= 0) { - if ((unsigned)*off > n) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d truncated (%u > %u)", fieldId, (unsigned)*off, n); - return false; - } - value += *off; - n -= *off; - } - if (ind == 0) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d missing length", fieldId); - return false; - } - if (*ind < 0) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d invalid length %d", fieldId, (int)*ind); - return false; - } - unsigned m; - m = *ind; - if (m > n) { - ctx.pushStatus(Sqlstate::_22001, Error::Gen, "input parameter %d truncated (%u > %u)", fieldId, m, n); - return false; - } - for (unsigned i = 0; i < m; i++) - value[i] = ptr[i]; - if (off != 0 && *off >= 0) - *off += m; - for (unsigned i = m; i < n; i++) - value[i] = addr == 0 ? 0x0 : 0x0; // just null - if (addr != 0) { - if (off != 0 && *off >= 0) - m = *off; - addr[0] = (m >> 8) & 0xff; - addr[1] = (m & 0xff); - } - return true; -} - -static bool -copyin_signed_char(Ctx& ctx, SqlBigint* value, const char* ptr, int fieldId) -{ - errno = 0; - char* endptr = 0; - SqlBigint x = strtoll(ptr, &endptr, 10); - if (endptr == 0 || *endptr != 0) { - errno = 0; - endptr = 0; - double y = strtod(ptr, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "input parameter %d value %s not numeric", fieldId, ptr); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "input parameter %d value %s overflow", fieldId, ptr); - return false; - } - // XXX should handle 123.000 - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "input parameter %d value %s truncated", fieldId, ptr); - x = static_cast<SqlBigint>(y); - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "input parameter %d value %s overflow", fieldId, ptr); - return false; - } - *value = x; - return true; -} - -static bool -copyin_double_char(Ctx& ctx, SqlDouble* value, const char* ptr, int fieldId) -{ - errno = 0; - char* endptr = 0; - double x = strtod(ptr, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "input parameter %d value %s not numeric", fieldId, ptr); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "input parameter %d value %s overflow", fieldId, ptr); - return false; - } - *value = x; - return true; -} - -void -SqlField::copyin(Ctx& ctx, ExtField& extField) -{ - ctx_assert(extField.extSpec().extType().type() != ExtType::Unbound); - ctx_assert(sqlSpec().store() == SqlSpec::Physical); - SQLINTEGER* indPtr = extField.m_indPtr; - const int fieldId = extField.fieldId(); - if (indPtr != 0 && *indPtr == SQL_NULL_DATA) { - sqlNull(true); - return; - } - const SqlType& sqlType = sqlSpec().sqlType(); - const ExtType& extType = extField.extSpec().extType(); - if (extField.m_pos > 0) { - if (sqlType.type() == SqlType::Char && extType.type() == ExtType::Char) - ; - else if (sqlType.type() == SqlType::Varchar && extType.type() == ExtType::Char) - ; - else { - char buf[40]; - sqlType.print(buf, sizeof(buf)); - ctx.pushStatus(Sqlstate::_HY019, Error::Gen, "cannot send %s data in pieces", buf); - return; - } - } - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned length = 0; - char* value = 0; - SqlChar* laddr = 0; // Varchar length address - if (sqlType.type() == SqlType::Char) { - length = sqlType.length(); - if (length > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall); - laddr = 0; - } else { -#if NDB_VERSION_MAJOR >= 3 - length = sqlType.length(); - if (2 + length > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar + 2); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall + 2); - laddr = (SqlChar*)value - 2; -#else - length = sqlType.length(); - if (length + 2 > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall); - laddr = (SqlChar*)value + length; -#endif - } - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - int* off = 0; - if (extField.m_pos >= 0) - off = &extField.m_pos; - if (! copyin_char_char(ctx, value, length, dataPtr, indPtr, off, laddr, fieldId)) - return; - sqlNull(false); - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - const short* dataPtr = static_cast<short*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%hd", *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - const unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%hu", *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - const long* dataPtr = static_cast<long*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%ld", *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - const unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%lu", *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - const SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, FMT_I64, *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - const SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, FMT_U64, *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - const float* dataPtr = static_cast<float*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%.7f", (double)*dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - const double* dataPtr = static_cast<double*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%.14f", *dataPtr); - if (! copyin_char_char(ctx, value, length, buf, indPtr, 0, laddr, fieldId)) - return; - sqlNull(false); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned length = 0; - char* value = 0; - SqlChar* laddr = 0; // Varbinary length address - if (sqlType.type() == SqlType::Binary) { - length = sqlType.length(); - if (length > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall); - laddr = 0; - } else { -#if NDB_VERSION_MAJOR >= 3 - length = sqlType.length(); - if (2 + length > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar + 2); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall + 2); - laddr = (SqlChar*)value - 2; -#else - length = sqlType.length(); - if (length + 2 > SqlField_CharSmall) - value = reinterpret_cast<char *>(u_data.m_sqlChar); - else - value = reinterpret_cast<char *>(u_data.m_sqlCharSmall); - laddr = (SqlChar*)value + length; -#endif - } - if (extType.type() == ExtType::Binary) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - int* off = 0; - if (extField.m_pos >= 0) - off = &extField.m_pos; - if (! copyin_binary_binary(ctx, value, length, dataPtr, indPtr, off, laddr, fieldId)) - return; - sqlNull(false); - return; - } - } - if (sqlType.type() == SqlType::Smallint) { - SqlSmallint value; - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - SqlBigint x; - if (! copyin_signed_char(ctx, &x, dataPtr, fieldId)) - return; - value = x; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - value = (SqlSmallint)*dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - value = (SqlSmallint)*dataPtr; - sqlSmallint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Integer) { - SqlInteger value; - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - SqlBigint x; - if (! copyin_signed_char(ctx, &x, dataPtr, fieldId)) - return; - value = x; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - value = (SqlInteger)*dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - value = (SqlInteger)*dataPtr; - sqlInteger(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Bigint) { - SqlBigint value; - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - SqlBigint x; - if (! copyin_signed_char(ctx, &x, dataPtr, fieldId)) - return; - value = x; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - value = (SqlBigint)*dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - value = (SqlBigint)*dataPtr; - sqlBigint(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Real) { - SqlReal value; - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - SqlDouble x; - if (! copyin_double_char(ctx, &x, dataPtr, fieldId)) - return; - value = x; - sqlReal(x); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - value = *dataPtr; - sqlReal(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Double) { - SqlDouble value; - if (extType.type() == ExtType::Char) { - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - SqlDouble x; - if (! copyin_double_char(ctx, &x, dataPtr, fieldId)) - return; - value = x; - sqlDouble(x); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - value = *dataPtr; - sqlDouble(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Datetime) { - SqlDatetime value; - if (extType.type() == ExtType::Char) { - // XXX replace sscanf by manual scan or regex - const char* dataPtr = static_cast<char*>(extField.m_dataPtr); - int cc = 0; - unsigned yy = 0, mm = 0, dd = 0, HH = 0, MM = 0, SS = 0, ff = 0; - bool setdate = false; - char dummy[10]; - if (sscanf(dataPtr, "%2d%2u-%2u-%2u %2u:%2u:%2u.%4u%1s", &cc, &yy, &mm, &dd, &HH, &MM, &SS, &ff, dummy) == 8) { - ; - } else if (sscanf(dataPtr, "%2d%2u-%2u-%2u %2u:%2u:%2u%1s", &cc, &yy, &mm, &dd, &HH, &MM, &SS, dummy) == 7) { - ; - } else if (sscanf(dataPtr, "%2d%2u-%2u-%2u%1s", &cc, &yy, &mm, &dd, dummy) == 4) { - ; - } else if (sscanf(dataPtr, "%2u:%2u:%2u.%4u%1s", &HH, &MM, &SS, &ff, dummy) == 4) { - setdate = true; - } else if (sscanf(dataPtr, "%2u:%2u:%2u%1s", &HH, &MM, &SS, dummy) == 3) { - setdate = true; - } else { - ctx.pushStatus(Sqlstate::_22008, Error::Gen, "invalid timestamp format '%s'", dataPtr); - return; - } - if (setdate) { - time_t clock = time(0); - struct tm* t = localtime(&clock); - cc = (1900 + t->tm_year) / 100; - yy = (1900 + t->tm_year) % 100; - mm = 1 + t->tm_mon; - dd = t->tm_mday; - } - value.cc(cc); - value.yy(yy); - value.mm(mm); - value.dd(dd); - value.HH(HH); - value.MM(MM); - value.SS(SS); - value.ff(ff); - // XXX write date routines later - if (! value.valid()) { - ctx.pushStatus(Sqlstate::_22008, Error::Gen, "invalid timestamp values '%s'", dataPtr); - return; - } - sqlDatetime(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Timestamp) { - SQL_TIMESTAMP_STRUCT* dataPtr = static_cast<SQL_TIMESTAMP_STRUCT*>(extField.m_dataPtr); - // XXX assume same datatype - value.cc(dataPtr->year / 100); - value.yy(dataPtr->year / 100); - value.mm(dataPtr->month); - value.dd(dataPtr->day); - value.HH(dataPtr->hour); - value.MM(dataPtr->minute); - value.SS(dataPtr->second); - value.ff(dataPtr->fraction); - if (! value.valid()) { - ctx.pushStatus(Sqlstate::_22008, Error::Gen, "invalid timestamp struct"); - return; - } - sqlDatetime(value); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - ctx_assert(false); // SqlType::Null not applicable -} - -// copy to external - -static bool -copyout_char_char(Ctx& ctx, const char* value, unsigned n, char* ptr, unsigned len, SQLINTEGER* ind, int* off) -{ - unsigned n2 = n; - if (off != 0 && *off >= 0) { - ctx_assert((unsigned)*off <= n2); - value += *off; - n2 -= *off; - if (len < n2 + 1) { - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "more data at offset %d, current fetch %u, available %u", *off, len, n2); - n2 = len - 1; - } - } else { - if (len < n + 1) { // room for null byte - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "char value '%.*s' overflow (%u < %u)", (int)n, value, (unsigned)len, (unsigned)(len + 1)); - return false; - } - } - memcpy(ptr, value, n2); - ptr[n2] = 0; - if (off != 0 && *off >= 0) { - if (ind != 0) - *ind = n - *off; - *off += n2; - } else { - if (ind != 0) - *ind = n; - } - return true; -} - -static bool -copyout_binary_binary(Ctx& ctx, const char* value, unsigned n, char* ptr, unsigned len, SQLINTEGER* ind, int* off) -{ - unsigned n2 = n; - if (off != 0 && *off >= 0) { - ctx_assert((unsigned)*off <= n2); - value += *off; - n2 -= *off; - if (len < n2 + 1) { - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "more data at offset %d, current fetch %u, available %u", *off, len, n2); - n2 = len - 1; - } - } else { - if (len < n) { // no room for null byte - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "binary value '%.*s' overflow (%u < %u)", (int)n, value, (unsigned)len, (unsigned)n); - return false; - } - } - memcpy(ptr, value, n2); - ptr[n2] = 0; - if (off != 0 && *off >= 0) { - if (ind != 0) - *ind = n - *off; - *off += n2; - } else { - if (ind != 0) - *ind = n; - } - return true; -} - -static bool -copyout_char_signed(Ctx& ctx, const char* value, unsigned n, long* ptr) -{ - while (n > 0 && value[0] == 0x20) { - value++; - n--; - } - char buf[200]; - if (n >= 200) - n = 200 - 1; - memcpy(buf, value, n); - buf[n] = 0; - errno = 0; - char* endptr = 0; - long x = strtol(buf, &endptr, 10); - if (endptr == 0 || *endptr != 0) { - errno = 0; - endptr = 0; - double y = strtod(buf, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "value %s not numeric", buf); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - // XXX should handle 123.000 - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "value %s truncated", buf); - x = static_cast<long>(y); - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - *ptr = x; - return true; -} - -static bool -copyout_char_bigsigned(Ctx& ctx, const char* value, unsigned n, SQLBIGINT* ptr) -{ - while (n > 0 && value[0] == 0x20) { - value++; - n--; - } - char buf[200]; - if (n >= 200) - n = 200 - 1; - memcpy(buf, value, n); - buf[n] = 0; - errno = 0; - char* endptr = 0; - SQLBIGINT x = strtoll(buf, &endptr, 10); - if (endptr == 0 || *endptr != 0) { - errno = 0; - endptr = 0; - double y = strtod(buf, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "value %s not numeric", buf); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - // XXX should handle 123.000 - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "value %s truncated", buf); - x = static_cast<long>(y); - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - *ptr = x; - return true; -} - -static bool -copyout_char_unsigned(Ctx& ctx, const char* value, unsigned n, unsigned long* ptr) -{ - while (n > 0 && value[0] == 0x20) { - value++; - n--; - } - char buf[200]; - if (n >= 200) - n = 200 - 1; - memcpy(buf, value, n); - buf[n] = 0; - errno = 0; - char* endptr = 0; - unsigned long x = strtoul(buf, &endptr, 10); - if (endptr == 0 || *endptr != 0) { - errno = 0; - endptr = 0; - double y = strtod(buf, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "value %s not numeric", buf); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - // XXX should handle 123.000 - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "value %s truncated", buf); - x = static_cast<unsigned long>(y); - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - *ptr = x; - return true; -} - -static bool -copyout_char_bigunsigned(Ctx& ctx, const char* value, unsigned n, SQLUBIGINT* ptr) -{ - while (n > 0 && value[0] == 0x20) { - value++; - n--; - } - char buf[200]; - if (n >= 200) - n = 200 - 1; - memcpy(buf, value, n); - buf[n] = 0; - errno = 0; - char* endptr = 0; - SQLUBIGINT x = strtoull(buf, &endptr, 10); - if (endptr == 0 || *endptr != 0) { - errno = 0; - endptr = 0; - double y = strtod(buf, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "value %s not numeric", buf); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - // XXX should handle 123.000 - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "value %s truncated", buf); - x = static_cast<unsigned long>(y); - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - *ptr = x; - return true; -} - -static bool -copyout_char_double(Ctx& ctx, const char* value, unsigned n, double* ptr) -{ - while (n > 0 && value[0] == 0x20) { - value++; - n--; - } - char buf[200]; - if (n >= 200) - n = 200 - 1; - memcpy(buf, value, n); - buf[n] = 0; - errno = 0; - char* endptr = 0; - double x = strtod(value, &endptr); - if (endptr == 0 || *endptr != 0) { - ctx.pushStatus(Sqlstate::_22005, Error::Gen, "value %s not numeric", value); - return false; - } else if (errno != 0) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", value); - return false; - } - *ptr = x; - return true; -} - -static bool -copyout_signed_char(Ctx& ctx, Int64 value, char* ptr, int len, SQLINTEGER* ind) -{ - char buf[100]; - sprintf(buf, FMT_I64, value); - unsigned n = strlen(buf); - if (len <= 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid output buffer length %d", len); - return false; - } - if ((unsigned)len < n + 1) { // room for null byte - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - strcpy(ptr, buf); - if (ind != 0) - *ind = n; - return true; -} - -static bool -copyout_unsigned_char(Ctx& ctx, Uint64 uvalue, char* ptr, int len, SQLINTEGER* ind) -{ - char buf[100]; - sprintf(buf, FMT_U64, uvalue); - unsigned n = strlen(buf); - if (len <= 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid output buffer length %d", len); - return false; - } - if ((unsigned)len < n + 1) { // room for null byte - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - strcpy(ptr, buf); - if (ind != 0) - *ind = n; - return true; -} - -static bool -copyout_double_char(Ctx& ctx, double value, unsigned prec, char* ptr, int len, SQLINTEGER* ind) -{ - char buf[100]; - sprintf(buf, "%.*f", (int)prec, value); - char* p = buf + strlen(buf); - while (p > buf + prec) - *--p = 0; - while (p > buf && *(p - 1) == '0') - *--p = 0; - if (p > buf && *(p - 1) == '.') { - *p++ = '0'; - *p = 0; - } - unsigned n = strlen(buf); - if (len <= 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid output buffer length %d", len); - return false; - } - if ((unsigned)len < n + 1) { // room for null byte - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", buf); - return false; - } - strcpy(ptr, buf); - if (ind != 0) - *ind = n; - return true; -} - -void -SqlField::copyout(Ctx& ctx, ExtField& extField) const -{ - if (extField.extSpec().extType().type() == ExtType::Unbound) { - return; // output buffer may be unbound - } - if (sqlSpec().store() == SqlSpec::Reference) { - ctx_assert(u_data.m_sqlField != 0); - u_data.m_sqlField->copyout(ctx, extField); - return; - } - SQLINTEGER* indPtr = extField.m_indPtr; - if (u_null.m_nullFlag) { - if (extField.m_pos > 0) { // second time from SQLGetData - ctx.setCode(SQL_NO_DATA); - return; - } - if (indPtr == 0) { - ctx.pushStatus(Sqlstate::_22002, Error::Gen, "indicator variable required"); - return; - } - *indPtr = SQL_NULL_DATA; - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - const SqlType& sqlType = sqlSpec().sqlType(); - const ExtType& extType = extField.extSpec().extType(); - if (sqlType.type() == SqlType::Char || sqlType.type() == SqlType::Varchar) { - unsigned n = 0; - const char* value = 0; - if (sqlType.type() == SqlType::Char) { - n = sqlType.length(); - value = reinterpret_cast<const char*>(sqlChar()); - } else { - value = reinterpret_cast<const char*>(sqlVarchar(&n)); - } - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (extField.m_dataLen <= 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid output buffer length %d", (int)extField.m_dataLen); - return; - } - int* off = 0; - if (extField.m_pos >= 0) { - off = &extField.m_pos; - if ((unsigned)*off >= n) { - ctx.setCode(SQL_NO_DATA); - return; - } - } - if (! copyout_char_char(ctx, value, n, dataPtr, extField.m_dataLen, indPtr, off)) - return; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - long x; - if (! copyout_char_signed(ctx, value, n, &x)) - return; - if (x < SHRT_MIN || x > SHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", value); - return; - } - *dataPtr = static_cast<short>(x); - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - unsigned long x; - if (! copyout_char_unsigned(ctx, value, n, &x)) - return; - if (x > USHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", value); - return; - } - *dataPtr = static_cast<unsigned short>(x); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - if (! copyout_char_signed(ctx, value, n, dataPtr)) - return; - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - if (! copyout_char_unsigned(ctx, value, n, dataPtr)) - return; - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - if (! copyout_char_bigsigned(ctx, value, n, dataPtr)) - return; - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - if (! copyout_char_bigunsigned(ctx, value, n, dataPtr)) - return; - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - double x; - if (! copyout_char_double(ctx, value, n, &x)) - return; - if (fabs(x) < FLT_MIN || fabs(x) > FLT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %s overflow", value); - return; - } - *dataPtr = static_cast<float>(x); - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - double x; - if (! copyout_char_double(ctx, value, n, &x)) - return; - *dataPtr = static_cast<double>(x); - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Binary || sqlType.type() == SqlType::Varbinary) { - unsigned n = 0; - const char* value = 0; - if (sqlType.type() == SqlType::Binary) { - n = sqlType.length(); - value = reinterpret_cast<const char*>(sqlBinary()); - } else { - value = reinterpret_cast<const char*>(sqlVarbinary(&n)); - } - if (extType.type() == ExtType::Binary) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (extField.m_dataLen <= 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid output buffer length %d", (int)extField.m_dataLen); - return; - } - int* off = 0; - if (extField.m_pos >= 0) { - off = &extField.m_pos; - if ((unsigned)*off >= n) { - ctx.setCode(SQL_NO_DATA); - return; - } - } - if (! copyout_binary_binary(ctx, value, n, dataPtr, extField.m_dataLen, indPtr, off)) - return; - return; - } - } - if (sqlType.type() == SqlType::Smallint) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - const SqlSmallint value = sqlSmallint(); - const SqlUsmallint uvalue = value; - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (! sqlType.unSigned()) { - if (! copyout_signed_char(ctx, value, dataPtr, extField.m_dataLen, indPtr)) - return; - } else { - if (! copyout_unsigned_char(ctx, uvalue, dataPtr, extField.m_dataLen, indPtr)) - return; - } - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - *dataPtr = static_cast<short>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - *dataPtr = static_cast<unsigned short>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - *dataPtr = static_cast<long>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - *dataPtr = static_cast<unsigned long>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLBIGINT>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLUBIGINT>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - *dataPtr = static_cast<float>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - *dataPtr = static_cast<double>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Integer) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - const SqlInteger value = sqlInteger(); - const SqlUinteger uvalue = value; - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (! sqlType.unSigned()) { - if (! copyout_signed_char(ctx, value, dataPtr, extField.m_dataLen, indPtr)) - return; - } else { - if (! copyout_unsigned_char(ctx, uvalue, dataPtr, extField.m_dataLen, indPtr)) - return; - } - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - if (value < SHRT_MIN || value > SHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %d overflow", (int)value); - return; - } - *dataPtr = static_cast<short>(value); - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - if (uvalue > USHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %u overflow", uvalue); - return; - } - *dataPtr = static_cast<unsigned short>(value); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - *dataPtr = static_cast<long>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - *dataPtr = static_cast<unsigned long>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLBIGINT>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLUBIGINT>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - *dataPtr = static_cast<float>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - *dataPtr = static_cast<double>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Bigint) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - const SqlBigint value = sqlBigint(); - const SqlUbigint uvalue = value; - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (! sqlType.unSigned()) { - if (! copyout_signed_char(ctx, value, dataPtr, extField.m_dataLen, indPtr)) - return; - } else { - if (! copyout_unsigned_char(ctx, uvalue, dataPtr, extField.m_dataLen, indPtr)) - return; - } - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - if (value < SHRT_MIN || value > SHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value " FMT_I64 " overflow", (Int64)value); - return; - } - *dataPtr = static_cast<short>(value); - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - if (uvalue > USHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value " FMT_U64 " overflow", (Uint64)uvalue); - return; - } - *dataPtr = static_cast<short>(value); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - if (value < INT_MIN || value > INT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value " FMT_I64 " overflow", (Int64)value); - return; - } - *dataPtr = static_cast<long>(value); - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - if (uvalue > UINT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value " FMT_U64 " overflow", (Uint64)uvalue); - return; - } - *dataPtr = static_cast<unsigned long>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLBIGINT>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLUBIGINT>(uvalue); - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - *dataPtr = static_cast<float>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - *dataPtr = static_cast<double>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Real) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - const SqlReal value = sqlReal(); - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (! copyout_double_char(ctx, value, 7, dataPtr, extField.m_dataLen, indPtr)) - return; - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - *dataPtr = static_cast<short>(value); // XXX todo - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - if (value < 0 || value > USHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %g overflow", (double)value); - return; - } - *dataPtr = static_cast<short>(value); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - *dataPtr = static_cast<long>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - *dataPtr = static_cast<unsigned long>(value); // XXX todo - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLBIGINT>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLUBIGINT>(value); - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - *dataPtr = static_cast<float>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - *dataPtr = static_cast<double>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Double) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - SqlDouble value = sqlDouble(); - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - if (! copyout_double_char(ctx, value, 14, dataPtr, extField.m_dataLen, indPtr)) - return; - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Short || extType.type() == ExtType::Sshort) { - short* dataPtr = static_cast<short*>(extField.m_dataPtr); - *dataPtr = static_cast<short>(value); // XXX todo - if (indPtr != 0) - *indPtr = sizeof(short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ushort) { - unsigned short* dataPtr = static_cast<unsigned short*>(extField.m_dataPtr); - if (value < 0 || value > USHRT_MAX) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "value %g overflow", (double)value); - return; - } - *dataPtr = static_cast<short>(value); - if (indPtr != 0) - *indPtr = sizeof(unsigned short); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Long || extType.type() == ExtType::Slong) { - long* dataPtr = static_cast<long*>(extField.m_dataPtr); - *dataPtr = static_cast<long>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ulong) { - unsigned long* dataPtr = static_cast<unsigned long*>(extField.m_dataPtr); - *dataPtr = static_cast<unsigned long>(value); // XXX todo - if (indPtr != 0) - *indPtr = sizeof(unsigned long); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Sbigint) { - SQLBIGINT* dataPtr = static_cast<SQLBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLBIGINT>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(SQLBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Ubigint) { - SQLUBIGINT* dataPtr = static_cast<SQLUBIGINT*>(extField.m_dataPtr); - *dataPtr = static_cast<SQLUBIGINT>(value); - if (indPtr != 0) - *indPtr = sizeof(SQLUBIGINT); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Float) { - float* dataPtr = static_cast<float*>(extField.m_dataPtr); - *dataPtr = static_cast<float>(value); // big enough - if (indPtr != 0) - *indPtr = sizeof(float); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Double) { - double* dataPtr = static_cast<double*>(extField.m_dataPtr); - *dataPtr = static_cast<double>(value); - if (indPtr != 0) - *indPtr = sizeof(double); - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - } - if (sqlType.type() == SqlType::Datetime) { - if (extField.m_pos > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - SqlDatetime value = sqlDatetime(); - if (extType.type() == ExtType::Char) { - char* dataPtr = static_cast<char*>(extField.m_dataPtr); - char buf[100]; - sprintf(buf, "%02d%02u-%02u-%02u\040%02u:%02u:%02u.%09u", value.cc(), value.yy(), value.mm(), value.dd(), value.HH(), value.MM(), value.SS(), value.ff()); - int n = strlen(buf); - if (extField.m_dataLen < 20) { - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "buffer too small for timestamp %s", buf); - return; - } - if (extField.m_dataLen < n) { - ctx.pushStatus(Sqlstate::_01004, Error::Gen, "truncating fractional part of timestamp %s", buf); - n = extField.m_dataLen; - } - if (! copyout_char_char(ctx, buf, n, dataPtr, extField.m_dataLen, indPtr, 0)) - return; - if (extField.m_pos >= 0) - extField.m_pos = 1; - return; - } - if (extType.type() == ExtType::Timestamp) { - SQL_TIMESTAMP_STRUCT* dataPtr = static_cast<SQL_TIMESTAMP_STRUCT*>(extField.m_dataPtr); - // XXX assume same datatype - dataPtr->year = value.cc() * 100 + value.yy(); - dataPtr->month = value.mm(); - dataPtr->day = value.dd(); - dataPtr->hour = value.HH(); - dataPtr->minute = value.MM(); - dataPtr->second = value.SS(); - dataPtr->fraction = value.ff(); - return; - } - } - ctx_assert(false); // SqlType::Null not applicable -} - -void -SqlField::print(char* buf, unsigned size) const -{ - Ctx ctx; - unsigned n = sqlSpec().sqlType().displaySize(); - SQLINTEGER ind = 0; - ExtType extType(ExtType::Char); - ExtSpec extSpec(extType); - ExtField extField(extSpec, (SQLPOINTER)buf, size, &ind); - buf[0] = 0; - copyout(ctx, extField); - if (ind == SQL_NULL_DATA) - snprintf(buf, size, "NULL"); -} diff --git a/storage/ndb/src/old_files/client/odbc/common/DataField.hpp b/storage/ndb/src/old_files/client/odbc/common/DataField.hpp deleted file mode 100644 index 65138df25f1de76e75018786c1ab2f4c7375ea81..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataField.hpp +++ /dev/null @@ -1,446 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_DataField_hpp -#define ODBC_COMMON_DataField_hpp - -#include <NdbApi.hpp> -#include <common/common.hpp> -#include "DataType.hpp" - -/** - * @class SqlSpec - * @brief Specification of data in SQL format - */ -class SqlSpec { -public: - enum Store { - Undef = 0, - Reference = 1, // reference to read-only SqlField of same type - Physical = 2 // stored within or in allocated storage - }; - SqlSpec(); - SqlSpec(const SqlType& sqlType, Store store); - SqlSpec(const SqlSpec& sqlSpec); - SqlSpec(const SqlSpec& sqlSpec, Store store); - const SqlType& sqlType() const; - const Store store() const; - unsigned size() const; -private: - //SqlSpec& operator=(const SqlSpec& sqlSpec); // disallowed - SqlType m_sqlType; - Store m_store; -}; - -/** - * @class ExtSpec - * @brief Specification of data in external format - */ -class ExtSpec { -public: - ExtSpec(); - ExtSpec(const ExtType& extType); - ExtSpec(const ExtSpec& extSpec); - const ExtType& extType() const; - unsigned size() const; - void setValue(const ExtType& extType); -private: - ExtType m_extType; -}; - -/** - * @class LexSpec - * @brief Specification of lexical data - * - * Used only for converting lexical data to SQL data. - */ -class LexSpec { -public: - LexSpec(); - LexSpec(const LexType& lexType); - /** - * Lexical data is represented as string. Following - * converts it to SQL data. - */ - void convert(Ctx& ctx, const BaseString& value, class SqlField& out); -private: - LexType m_lexType; -}; - -// SqlSpec - -inline -SqlSpec::SqlSpec() : - m_store(Undef) -{ -} - -inline -SqlSpec::SqlSpec(const SqlType& sqlType, Store store) : - m_sqlType(sqlType), - m_store(store) -{ -} - -inline -SqlSpec::SqlSpec(const SqlSpec& sqlSpec) : - m_sqlType(sqlSpec.m_sqlType), - m_store(sqlSpec.m_store) -{ -} - -inline -SqlSpec::SqlSpec(const SqlSpec& sqlSpec, Store store) : - m_sqlType(sqlSpec.m_sqlType), - m_store(store) -{ -} - -inline const SqlType& -SqlSpec::sqlType() const -{ - return m_sqlType; -} - -inline const SqlSpec::Store -SqlSpec::store() const -{ - return m_store; -} - -inline unsigned -SqlSpec::size() const -{ - return sqlType().size(); -} - -// ExtSpec - -inline -ExtSpec::ExtSpec() -{ -} - -inline -ExtSpec::ExtSpec(const ExtType& extType) : - m_extType(extType) -{ -} - -inline -ExtSpec::ExtSpec(const ExtSpec& extSpec) : - m_extType(extSpec.m_extType) -{ -} - -inline const ExtType& -ExtSpec::extType() const -{ - return m_extType; -} - -inline unsigned -ExtSpec::size() const -{ - return m_extType.size(); -} - -inline void -ExtSpec::setValue(const ExtType& extType) -{ - m_extType = extType; -} - -// LexSpec - -inline -LexSpec::LexSpec(const LexType& lexType) : - m_lexType(lexType) -{ -} - -/** - * @class SqlField - * @brief Sql data field accessor - */ -class SqlField { -public: - SqlField(); - SqlField(const SqlSpec& sqlSpec); - SqlField(const SqlSpec& sqlSpec, const SqlField* sqlField); - SqlField(const SqlField& sqlField); - ~SqlField(); - const SqlSpec& sqlSpec() const; - const void* addr() const; // address of data - void* addr(); - unsigned allocSize() const; - const SqlChar* sqlChar() const; // get - const SqlChar* sqlVarchar(unsigned* length) const; - const SqlChar* sqlBinary() const; - const SqlChar* sqlVarbinary(unsigned* length) const; - SqlSmallint sqlSmallint() const; - SqlInteger sqlInteger() const; - SqlBigint sqlBigint() const; - SqlReal sqlReal() const; - SqlDouble sqlDouble() const; - SqlDatetime sqlDatetime() const; - void sqlChar(const char* value, int length); // set - void sqlChar(const SqlChar* value, int length); - void sqlVarchar(const char* value, int length); - void sqlVarchar(const SqlChar* value, int length); - void sqlBinary(const char* value, int length); - void sqlBinary(const SqlChar* value, int length); - void sqlVarbinary(const char* value, int length); - void sqlVarbinary(const SqlChar* value, int length); - void sqlSmallint(SqlSmallint value); - void sqlInteger(SqlInteger value); - void sqlBigint(SqlBigint value); - void sqlReal(SqlReal value); - void sqlDouble(SqlDouble value); - void sqlDatetime(SqlDatetime value); - bool sqlNull() const; // get and set null - void sqlNull(bool value); - unsigned trim() const; // right trimmed length - void copy(Ctx& ctx, SqlField& out) const; - bool cast(Ctx& ctx, SqlField& out) const; - bool less(const SqlField& sqlField) const; - // application input and output - void copyin(Ctx& ctx, class ExtField& extField); - void copyout(Ctx& ctx, class ExtField& extField) const; - // print for debugging - void print(char* buf, unsigned size) const; - // public for forte6 - //enum { CharSmall = 20 }; -#define SqlField_CharSmall 20 // redhat-6.2 (egcs-2.91.66) -private: - friend class LexSpec; - friend class SqlRow; - void alloc(); // allocate Physical - void alloc(const SqlField& sqlField); - void free(); // free Physical - SqlSpec m_sqlSpec; - union Data { - Data(); - Data(const SqlField* sqlField); - const SqlField* m_sqlField; - // Physical - SqlChar* m_sqlChar; // all char types - SqlChar m_sqlCharSmall[SqlField_CharSmall]; - SqlSmallint m_sqlSmallint; - SqlInteger m_sqlInteger; - SqlBigint m_sqlBigint; - SqlReal m_sqlReal; - SqlDouble m_sqlDouble; - SqlDatetime m_sqlDatetime; - } u_data; - union Null { - Null(); - bool m_nullFlag; - } u_null; -}; - -/** - * @class ExtField - * @brief External data field accessor - */ -class ExtField { -public: - ExtField(); - ExtField(const ExtSpec& extSpec, int fieldId = 0); - ExtField(const ExtSpec& extSpec, SQLPOINTER dataPtr, SQLINTEGER dataLen, SQLINTEGER* indPtr, int fieldId = 0); - ~ExtField(); - const ExtSpec& extSpec() const; - void setValue(SQLPOINTER dataPtr, SQLINTEGER dataLen); - void setValue(const ExtSpec& extSpec, SQLPOINTER dataPtr, SQLINTEGER dataLen, SQLINTEGER* indPtr); - int fieldId() const; - void setPos(int pos); - int getPos() const; -private: - friend class SqlField; - friend class Exec_root; - ExtSpec m_extSpec; - SQLPOINTER m_dataPtr; // data buffer - SQLINTEGER m_dataLen; // data buffer length - SQLINTEGER* m_indPtr; // null indicator or length - int m_fieldId; // field id > 0 for error messages - int m_pos; // output position for SQLGetData (if != -1) -}; - -inline int -ExtField::fieldId() const -{ - return m_fieldId; -} - -inline void -ExtField::setPos(int pos) -{ - m_pos = pos; -} - -inline int -ExtField::getPos() const -{ - return m_pos; -} - -// SqlField - -inline -SqlField::SqlField() -{ -} - -inline -SqlField::SqlField(const SqlSpec& sqlSpec) : - m_sqlSpec(sqlSpec) -{ - if (m_sqlSpec.store() == SqlSpec::Physical) - alloc(); -} - -inline -SqlField::SqlField(const SqlSpec& sqlSpec, const SqlField* sqlField) : - m_sqlSpec(sqlSpec), - u_data(sqlField) -{ - ctx_assert(m_sqlSpec.store() == SqlSpec::Reference); -} - -inline -SqlField::SqlField(const SqlField& sqlField) : - m_sqlSpec(sqlField.m_sqlSpec), - u_data(sqlField.u_data), - u_null(sqlField.u_null) -{ - if (m_sqlSpec.store() == SqlSpec::Physical) - alloc(sqlField); -} - -inline -SqlField::Data::Data() -{ -} - -inline -SqlField::Data::Data(const SqlField* sqlField) -{ - m_sqlField = sqlField; -} - -inline -SqlField::Null::Null() -{ -} - -inline -SqlField::~SqlField() -{ - if (m_sqlSpec.store() == SqlSpec::Physical) - free(); -} - -inline const SqlSpec& -SqlField::sqlSpec() const -{ - return m_sqlSpec; -} - -inline void -SqlField::sqlChar(const char* value, int length) -{ - sqlChar(reinterpret_cast<const SqlChar*>(value), length); -} - -inline void -SqlField::sqlVarchar(const char* value, int length) -{ - sqlVarchar(reinterpret_cast<const SqlChar*>(value), length); -} - -inline void -SqlField::sqlBinary(const char* value, int length) -{ - sqlBinary(reinterpret_cast<const SqlChar*>(value), length); -} - -inline void -SqlField::sqlVarbinary(const char* value, int length) -{ - sqlVarbinary(reinterpret_cast<const SqlChar*>(value), length); -} - -// ExtField - -inline -ExtField::ExtField() : - m_dataPtr(0), - m_dataLen(0), - m_indPtr(0), - m_pos(-1) -{ -} - -inline -ExtField::ExtField(const ExtSpec& extSpec, int fieldId) : - m_extSpec(extSpec), - m_dataPtr(0), - m_dataLen(0), - m_indPtr(0), - m_fieldId(fieldId), - m_pos(-1) -{ -} - -inline -ExtField::ExtField(const ExtSpec& extSpec, SQLPOINTER dataPtr, SQLINTEGER dataLen, SQLINTEGER* indPtr, int fieldId) : - m_extSpec(extSpec), - m_dataPtr(dataPtr), - m_dataLen(dataLen), - m_indPtr(indPtr), - m_fieldId(fieldId), - m_pos(-1) -{ -} - -inline -ExtField::~ExtField() -{ -} - -inline const ExtSpec& -ExtField::extSpec() const -{ - return m_extSpec; -} - -inline void -ExtField::setValue(SQLPOINTER dataPtr, SQLINTEGER dataLen) -{ - m_dataPtr = dataPtr; - m_dataLen = dataLen; -} - -inline void -ExtField::setValue(const ExtSpec& extSpec, SQLPOINTER dataPtr, SQLINTEGER dataLen, SQLINTEGER* indPtr) -{ - m_extSpec.setValue(extSpec.extType()); - m_dataPtr = dataPtr; - m_dataLen = dataLen; - m_indPtr = indPtr; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/DataRow.cpp b/storage/ndb/src/old_files/client/odbc/common/DataRow.cpp deleted file mode 100644 index 509f2673e0d66c455ced4d229ab4ec14a29882cb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataRow.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DataRow.hpp" - -// SqlSpecs - -SqlSpecs::SqlSpecs(unsigned count) : - m_count(count) -{ - m_sqlSpec = new SqlSpec[1 + count]; -} - -SqlSpecs::SqlSpecs(const SqlSpecs& sqlSpecs) : - m_count(sqlSpecs.m_count) -{ - m_sqlSpec = new SqlSpec[1 + m_count]; - for (unsigned i = 1; i <= m_count; i++) { - void* place = static_cast<void*>(&m_sqlSpec[i]); - new (place) SqlSpec(sqlSpecs.m_sqlSpec[i]); - } -} - -SqlSpecs::~SqlSpecs() -{ - delete[] m_sqlSpec; -} - -// ExtSpecs - -ExtSpecs::ExtSpecs(unsigned count) : - m_count(count) -{ - m_extSpec = new ExtSpec[1 + count]; -} - -ExtSpecs::ExtSpecs(const ExtSpecs& extSpecs) : - m_count(extSpecs.m_count) -{ - m_extSpec = new ExtSpec[1 + m_count]; - for (unsigned i = 1; i <= m_count; i++) { - void* place = static_cast<void*>(&m_extSpec[i]); - new (place) ExtSpec(extSpecs.m_extSpec[i]); - } -} - -ExtSpecs::~ExtSpecs() -{ - delete[] m_extSpec; -} - -// SqlRow - -SqlRow::SqlRow(const SqlSpecs& sqlSpecs) : - m_sqlSpecs(sqlSpecs) -{ - m_sqlField = new SqlField[1 + count()]; - for (unsigned i = 1; i <= count(); i++) { - SqlField sqlField(m_sqlSpecs.getEntry(i)); - setEntry(i, sqlField); - } -} - -SqlRow::SqlRow(const SqlRow& sqlRow) : - m_sqlSpecs(sqlRow.m_sqlSpecs) -{ - m_sqlField = new SqlField[1 + count()]; - for (unsigned i = 1; i <= count(); i++) { - void* place = static_cast<void*>(&m_sqlField[i]); - new (place) SqlField(sqlRow.getEntry(i)); - } -} - -SqlRow::~SqlRow() -{ - for (unsigned i = 1; i <= count(); i++) { - m_sqlField[i].~SqlField(); - } - delete[] m_sqlField; -} - -SqlRow* -SqlRow::copy() const -{ - SqlRow* copyRow = new SqlRow(m_sqlSpecs); - for (unsigned i = 1; i <= count(); i++) { - const SqlField* sqlField = &m_sqlField[i]; - while (sqlField->sqlSpec().store() == SqlSpec::Reference) { - sqlField = sqlField->u_data.m_sqlField; - } - copyRow->setEntry(i, *sqlField); - } - return copyRow; -} - -void -SqlRow::copyout(Ctx& ctx, class ExtRow& extRow) const -{ - for (unsigned i = 1; i <= count(); i++) { - const SqlField& sqlField = getEntry(i); - ExtField& extField = extRow.getEntry(i); - sqlField.copyout(ctx, extField); - } -} - -// ExtRow - -ExtRow::ExtRow(const ExtSpecs& extSpecs) : - m_extSpecs(extSpecs) -{ - m_extField = new ExtField[1 + count()]; -} - -ExtRow::ExtRow(const ExtRow& extRow) : - m_extSpecs(extRow.m_extSpecs) -{ - m_extField = new ExtField[1 + count()]; - for (unsigned i = 1; i <= count(); i++) { - void* place = static_cast<void*>(&m_extField[i]); - new (place) ExtField(extRow.getEntry(i)); - } -} - -ExtRow::~ExtRow() -{ - delete[] m_extField; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/DataRow.hpp b/storage/ndb/src/old_files/client/odbc/common/DataRow.hpp deleted file mode 100644 index 4a5a1e905b992fde04e76b740b500f2345c0f9c3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataRow.hpp +++ /dev/null @@ -1,185 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_DataRow_hpp -#define ODBC_COMMON_DataRow_hpp - -#include <new> -#include <common/common.hpp> -#include "DataField.hpp" - -class Ctx; - -/** - * @class SqlSpecs - * @brief Specification of row of SQL data - */ -class SqlSpecs { -public: - SqlSpecs(unsigned count); - SqlSpecs(const SqlSpecs& sqlSpecs); - ~SqlSpecs(); - unsigned count() const; - void setEntry(unsigned i, const SqlSpec& sqlSpec); - const SqlSpec& getEntry(unsigned i) const; -private: - SqlSpecs& operator=(const SqlSpecs& sqlSpecs); // disallowed - const unsigned m_count; - SqlSpec* m_sqlSpec; -}; - -inline unsigned -SqlSpecs::count() const -{ - return m_count; -} - -inline void -SqlSpecs::setEntry(unsigned i, const SqlSpec& sqlSpec) -{ - ctx_assert(m_sqlSpec != 0 && 1 <= i && i <= m_count); - void* place = static_cast<void*>(&m_sqlSpec[i]); - new (place) SqlSpec(sqlSpec); -} - -inline const SqlSpec& -SqlSpecs::getEntry(unsigned i) const -{ - ctx_assert(m_sqlSpec != 0 && 1 <= i && i <= m_count); - return m_sqlSpec[i]; -} - -/** - * @class ExtSpecs - * @brief Specification of row of external data - */ -class ExtSpecs { -public: - ExtSpecs(unsigned count); - ExtSpecs(const ExtSpecs& extSpecs); - ~ExtSpecs(); - unsigned count() const; - void setEntry(unsigned i, const ExtSpec& extSpec); - const ExtSpec& getEntry(unsigned i) const; -private: - ExtSpecs& operator=(const ExtSpecs& extSpecs); // disallowed - const unsigned m_count; - ExtSpec* m_extSpec; -}; - -inline unsigned -ExtSpecs::count() const -{ - return m_count; -} - -inline void -ExtSpecs::setEntry(unsigned i, const ExtSpec& extSpec) -{ - ctx_assert(m_extSpec != 0 && 1 <= i && i <= m_count); - void* place = static_cast<void*>(&m_extSpec[i]); - new (place) ExtSpec(extSpec); -} - -inline const ExtSpec& -ExtSpecs::getEntry(unsigned i) const -{ - ctx_assert(m_extSpec != 0 && 1 <= i && i <= m_count); - return m_extSpec[i]; -} - -/** - * @class SqlRow - * @brief Sql data row - */ -class SqlRow { -public: - SqlRow(const SqlSpecs& sqlSpecs); - SqlRow(const SqlRow& sqlRow); - ~SqlRow(); - unsigned count() const; - void setEntry(unsigned i, const SqlField& sqlField); - SqlField& getEntry(unsigned i) const; - SqlRow* copy() const; - void copyout(Ctx& ctx, class ExtRow& extRow) const; -private: - SqlRow& operator=(const SqlRow& sqlRow); // disallowed - SqlSpecs m_sqlSpecs; - SqlField* m_sqlField; -}; - -inline unsigned -SqlRow::count() const -{ - return m_sqlSpecs.count(); -} - -inline void -SqlRow::setEntry(unsigned i, const SqlField& sqlField) -{ - ctx_assert(1 <= i && i <= count() && m_sqlField != 0); - m_sqlField[i].~SqlField(); - void* place = static_cast<void*>(&m_sqlField[i]); - new (place) SqlField(sqlField); -} - -inline SqlField& -SqlRow::getEntry(unsigned i) const -{ - ctx_assert(1 <= i && i <= count() && m_sqlField != 0); - return m_sqlField[i]; -} - -/** - * @class ExtRow - * @brief External data row - */ -class ExtRow { -public: - ExtRow(const ExtSpecs& extSpecs); - ExtRow(const ExtRow& extRow); - ~ExtRow(); - unsigned count() const; - void setEntry(unsigned i, const ExtField& extField); - ExtField& getEntry(unsigned i) const; -private: - ExtRow& operator=(const ExtRow& extRow); // disallowed - ExtSpecs m_extSpecs; - ExtField* m_extField; -}; - -inline unsigned -ExtRow::count() const -{ - return m_extSpecs.count(); -} - -inline void -ExtRow::setEntry(unsigned i, const ExtField& extField) -{ - ctx_assert(1 <= i && i <= count() && m_extField != 0); - void* place = static_cast<void*>(&m_extField[i]); - new (place) ExtField(extField); -} - -inline ExtField& -ExtRow::getEntry(unsigned i) const -{ - ctx_assert(1 <= i && i <= count() && m_extField != 0); - return m_extField[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/DataType.cpp b/storage/ndb/src/old_files/client/odbc/common/DataType.cpp deleted file mode 100644 index 96f6a6e08776294c2176f33deb9f2dda54da5b87..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataType.cpp +++ /dev/null @@ -1,551 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DataType.hpp" - -// SqlType - -SqlType::SqlType() : - m_type(Undef) -{ -} - -SqlType::SqlType(Type type, bool nullable) -{ - Ctx ctx; - setType(ctx, type, nullable); - ctx_assert(ctx.ok()); -} - -SqlType::SqlType(Type type, unsigned length, bool nullable) -{ - Ctx ctx; - setType(ctx, type, length, nullable); - ctx_assert(ctx.ok()); -} - -SqlType::SqlType(Type type, unsigned precision, unsigned scale, bool nullable) -{ - Ctx ctx; - setType(ctx, type, precision, scale, nullable); - ctx_assert(ctx.ok()); -} - -SqlType::SqlType(Ctx& ctx, Type type, bool nullable) -{ - setType(ctx, type, nullable); -} - -SqlType::SqlType(Ctx& ctx, Type type, unsigned length, bool nullable) -{ - setType(ctx, type, length, nullable); -} - -SqlType::SqlType(Ctx& ctx, Type type, unsigned precision, unsigned scale, bool nullable) -{ - setType(ctx, type, precision, scale, nullable); -} - -SqlType::SqlType(Ctx& ctx, const NdbDictionary::Column* ndbColumn) -{ - setType(ctx, ndbColumn); -} - -void -SqlType::setType(Ctx& ctx, Type type, bool nullable) -{ - switch (type) { - case Smallint: - case Integer: - case Bigint: - case Real: - case Double: - case Datetime: - break; - case Blob: - setType(ctx, Varbinary, FAKE_BLOB_SIZE, nullable); // XXX BLOB hack - return; - case Clob: - setType(ctx, Varchar, FAKE_BLOB_SIZE, nullable); // XXX BLOB hack - return; - case Null: - case Unbound: - break; - default: - ctx_assert(false); - break; - } - m_type = type; - m_precision = 0; - m_scale = 0; - m_length = 0; - m_nullable = nullable; - m_unSigned = false; -} - -void -SqlType::setType(Ctx& ctx, Type type, unsigned length, bool nullable) -{ - switch (type) { - case Char: - case Varchar: - case Binary: - case Varbinary: - break; - default: - ctx_assert(false); - break; - } - m_type = type; - m_precision = 0; - m_scale = 0; - m_length = length; - m_nullable = nullable; - m_unSigned = false; -} - -void -SqlType::setType(Ctx& ctx, Type type, unsigned precision, unsigned scale, bool nullable) -{ - ctx_assert(false); // not yet -} - -void -SqlType::setType(Ctx& ctx, const NdbDictionary::Column* ndbColumn) -{ - NdbDictionary::Column::Type type = ndbColumn->getType(); - unsigned length = ndbColumn->getLength(); - unsigned precision = ndbColumn->getPrecision(); - unsigned scale = ndbColumn->getScale(); - bool nullable = ndbColumn->getNullable(); - switch (type) { - case NdbDictionary::Column::Undefined: - break; - case NdbDictionary::Column::Int: - if (length == 1) - setType(ctx, Integer, nullable); - else - setType(ctx, Binary, length * sizeof(SqlInteger), nullable); - return; - case NdbDictionary::Column::Unsigned: - if (length == 1) { - setType(ctx, Integer, nullable); - unSigned(true); - } else - setType(ctx, Binary, length * sizeof(SqlUinteger), nullable); - return; - case NdbDictionary::Column::Bigint: - if (length == 1) - setType(ctx, Bigint, nullable); - else - setType(ctx, Binary, length * sizeof(SqlBigint), nullable); - return; - case NdbDictionary::Column::Bigunsigned: - if (length == 1) { - setType(ctx, Bigint, nullable); - unSigned(true); - } else - setType(ctx, Binary, length * sizeof(SqlBigint), nullable); - return; - case NdbDictionary::Column::Float: - if (length == 1) - setType(ctx, Real, nullable); - else - setType(ctx, Binary, length * sizeof(SqlReal), nullable); - return; - case NdbDictionary::Column::Double: - if (length == 1) - setType(ctx, Double, nullable); - else - setType(ctx, Binary, length * sizeof(SqlDouble), nullable); - return; - case NdbDictionary::Column::Decimal: - setType(ctx, Decimal, precision, scale, nullable); - return; - case NdbDictionary::Column::Char: - setType(ctx, Char, length, nullable); - return; - case NdbDictionary::Column::Varchar: - setType(ctx, Varchar, length, nullable); - return; - case NdbDictionary::Column::Binary: - setType(ctx, Binary, length, nullable); - return; - case NdbDictionary::Column::Varbinary: - setType(ctx, Varbinary, length, nullable); - return; - case NdbDictionary::Column::Datetime: - // XXX not yet - break; - case NdbDictionary::Column::Timespec: - setType(ctx, Datetime, nullable); - return; - case NdbDictionary::Column::Blob: - setType(ctx, Blob, nullable); - return; - case NdbDictionary::Column::Clob: - setType(ctx, Clob, nullable); - return; - default: - break; - } - ctx.pushStatus(Error::Gen, "unsupported NDB type %d", (signed)type); -} - -bool -SqlType::equal(const SqlType& sqlType) const -{ - return - m_type == sqlType.m_type && - m_precision == sqlType.m_precision && - m_scale == sqlType.m_scale && - m_length == sqlType.m_length; -} - -unsigned -SqlType::size() const -{ - switch (m_type) { - case Char: - case Varchar: - case Binary: - case Varbinary: - return m_length; - case Smallint: - return sizeof(SqlSmallint); - case Integer: - return sizeof(SqlInteger); - case Bigint: - return sizeof(SqlBigint); - case Real: - return sizeof(SqlReal); - case Double: - return sizeof(SqlDouble); - case Datetime: - return sizeof(SqlDatetime); - case Null: - return 0; - default: - break; - } - ctx_assert(false); - return 0; -} - -unsigned -SqlType::displaySize() const -{ - switch (m_type) { - case Char: - case Varchar: - return m_length; - case Binary: - case Varbinary: - return m_length; - case Smallint: - return m_unSigned ? 5 : 6; - case Integer: - return m_unSigned ? 10 : 11; - case Bigint: - return m_unSigned ? 20 : 21; - case Real: - return 10; - case Double: - return 20; - case Datetime: - return 30; - case Null: - return 0; - default: - break; - } - ctx_assert(false); - return 0; -} - -void -SqlType::getType(Ctx& ctx, NdbDictionary::Column* ndbColumn) const -{ - switch (m_type) { - case Char: - ndbColumn->setType(NdbDictionary::Column::Char); - ndbColumn->setLength(m_length); - break; - case Varchar: - ndbColumn->setType(NdbDictionary::Column::Varchar); - ndbColumn->setLength(m_length); - break; - case Binary: - ndbColumn->setType(NdbDictionary::Column::Binary); - ndbColumn->setLength(m_length); - break; - case Varbinary: - ndbColumn->setType(NdbDictionary::Column::Varbinary); - ndbColumn->setLength(m_length); - break; - case Smallint: - break; // XXX - case Integer: - if (! m_unSigned) - ndbColumn->setType(NdbDictionary::Column::Int); - else - ndbColumn->setType(NdbDictionary::Column::Unsigned); - ndbColumn->setLength(1); - break; - case Bigint: - if (! m_unSigned) - ndbColumn->setType(NdbDictionary::Column::Bigint); - else - ndbColumn->setType(NdbDictionary::Column::Bigunsigned); - ndbColumn->setLength(1); - break; - case Real: - ndbColumn->setType(NdbDictionary::Column::Float); - ndbColumn->setLength(1); - break; - case Double: - ndbColumn->setType(NdbDictionary::Column::Double); - ndbColumn->setLength(1); - break; - case Datetime: - ndbColumn->setType(NdbDictionary::Column::Timespec); - ndbColumn->setLength(1); - break; - default: - ctx_assert(false); - break; - } - ndbColumn->setNullable(m_nullable); -} - -const char* -SqlType::typeName() const -{ - switch (m_type) { - case Char: - return "CHAR"; - case Varchar: - return "VARCHAR"; - case Binary: - return "BINARY"; - case Varbinary: - return "VARBINARY"; - case Smallint: - return "SMALLINT"; - case Integer: - return "INTEGER"; - case Bigint: - return "BIGINT"; - case Real: - return "REAL"; - case Double: - return "FLOAT"; - case Datetime: - return "DATETIME"; - default: - break; - } - return "UNKNOWN"; -} - -void -SqlType::print(char* buf, unsigned size) const -{ - switch (m_type) { - case Char: - snprintf(buf, size, "char(%d)", m_length); - break; - case Varchar: - snprintf(buf, size, "varchar(%d)", m_length); - break; - case Binary: - snprintf(buf, size, "binary(%d)", m_length); - break; - case Varbinary: - snprintf(buf, size, "varbinary(%d)", m_length); - break; - case Smallint: - snprintf(buf, size, "smallint%s", m_unSigned ? " unsigned" : ""); - break; - case Integer: - snprintf(buf, size, "integer%s", m_unSigned ? " unsigned" : ""); - break; - case Bigint: - snprintf(buf, size, "bigint%s", m_unSigned ? " unsigned" : ""); - break; - case Real: - snprintf(buf, size, "real"); - break; - case Double: - snprintf(buf, size, "double"); - break; - case Datetime: - snprintf(buf, size, "datetime"); - break; - case Null: - snprintf(buf, size, "null"); - break; - case Unbound: - snprintf(buf, size, "unbound"); - break; - default: - snprintf(buf, size, "sqltype(%d)", (int)m_type); - break; - } -} - -// ExtType - -ExtType::ExtType() : - m_type(Undef) -{ -} - -ExtType::ExtType(Type type) -{ - Ctx ctx; - setType(ctx, type); - ctx_assert(ctx.ok()); -} - -ExtType::ExtType(Ctx& ctx, Type type) -{ - setType(ctx, type); -} - -void -ExtType::setType(Ctx& ctx, Type type) -{ - switch (type) { - case Char: - case Short: - case Sshort: - case Ushort: - case Long: - case Slong: - case Ulong: - case Sbigint: - case Ubigint: - case Float: - case Double: - case Timestamp: - case Binary: // XXX BLOB hack - case Unbound: - break; - default: - ctx.pushStatus(Error::Gen, "unsupported external type %d", (int)type); - return; - } - m_type = type; -} - -unsigned -ExtType::size() const -{ - ctx_assert(false); - return 0; -} - -// LexType - -LexType::LexType() : - m_type(Undef) -{ -} - -LexType::LexType(Type type) -{ - Ctx ctx; - setType(ctx, type); - ctx_assert(ctx.ok()); -} - -LexType::LexType(Ctx& ctx, Type type) -{ - setType(ctx, type); -} - -void -LexType::setType(Ctx& ctx, Type type) -{ - switch (type) { - case Char: - case Integer: - case Float: - case Null: - break; - default: - ctx_assert(false); - break; - } - m_type = type; -} - -// convert types - -SQLSMALLINT -SqlType::sqlcdefault(Ctx& ctx) const -{ - switch (m_type) { - case Char: - return SQL_C_CHAR; - case Varchar: - return SQL_C_CHAR; - case Binary: - return SQL_C_BINARY; - case Varbinary: - return SQL_C_BINARY; - case Smallint: - return m_unSigned ? SQL_C_USHORT : SQL_C_SSHORT; - case Integer: - return m_unSigned ? SQL_C_ULONG : SQL_C_SLONG; - case Bigint: - return SQL_C_CHAR; - // or maybe this - return m_unSigned ? SQL_C_UBIGINT : SQL_C_SBIGINT; - case Real: - return SQL_C_FLOAT; - case Double: - return SQL_C_DOUBLE; - case Datetime: - return SQL_C_TYPE_TIMESTAMP; - default: - break; - } - return SQL_C_DEFAULT; // no default -} - -void -LexType::convert(Ctx& ctx, SqlType& out, unsigned length) const -{ - switch (m_type) { - case Char: - out.setType(ctx, SqlType::Char, length, true); - return; - case Integer: - out.setType(ctx, SqlType::Bigint, false); - return; - case Float: - out.setType(ctx, SqlType::Double, false); - return; - case Null: - out.setType(ctx, SqlType::Null, true); - return; - default: - break; - } - ctx.pushStatus(Error::Gen, "unsupported lexical to SQL type conversion"); -} diff --git a/storage/ndb/src/old_files/client/odbc/common/DataType.hpp b/storage/ndb/src/old_files/client/odbc/common/DataType.hpp deleted file mode 100644 index e03e445cf057e89da70a7ba1334bf0985f105e3c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DataType.hpp +++ /dev/null @@ -1,293 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_DataType_hpp -#define ODBC_COMMON_DataType_hpp - -#include <map> -#include <ndb_types.h> -#include <AttrType.hpp> -#include <NdbDictionary.hpp> -#include <common/common.hpp> - -/** - * Sql data exists in several formats: - * - * - as NDB data at the bottom - * - as SQL data during intermediary processing - * - as external data in user input and output buffers - * - as lexical constants in SQL statement text - * - * Each data format has specific types (e.g. number) and each - * type has specific attributes (e.g. precision). - */ -enum DataFormat { - Undef_format = 0, - Ndb_format = 1, // not used in NDB version >= v2.10 - Sql_format = 2, - Ext_format = 3, - Lex_format = 4 -}; - -#define UndefDataType 990 -#define NullDataType 991 -#define UnboundDataType 992 - -class SqlType; -class ExtType; -class LexType; - -/** - * @class SqlType - * @brief Sql data type - */ -class SqlType { -public: - enum Type { - Undef = UndefDataType, - Char = SQL_CHAR, - Varchar = SQL_VARCHAR, - Longvarchar = SQL_LONGVARCHAR, - Binary = SQL_BINARY, - Varbinary = SQL_VARBINARY, - Longvarbinary = SQL_LONGVARBINARY, - Decimal = SQL_DECIMAL, - Tinyint = SQL_TINYINT, - Smallint = SQL_SMALLINT, - Integer = SQL_INTEGER, - Bigint = SQL_BIGINT, - Real = SQL_REAL, - Double = SQL_DOUBLE, - Date = SQL_DATE, - Datetime = SQL_TYPE_TIMESTAMP, - Blob = SQL_BLOB, - Clob = SQL_CLOB, - Null = NullDataType, // not an ODBC SQL type - Unbound = UnboundDataType // special for placeholders - }; - SqlType(); - SqlType(Type type, bool nullable = true); - SqlType(Type type, unsigned length, bool nullable = true); - SqlType(Type type, unsigned precision, unsigned scale, bool nullable = true); - SqlType(Ctx& ctx, Type type, bool nullable = true); - SqlType(Ctx& ctx, Type type, unsigned length, bool nullable = true); - SqlType(Ctx& ctx, Type type, unsigned precision, unsigned scale, bool nullable = true); - SqlType(Ctx& ctx, const NdbDictionary::Column* ndbColumn); - Type type() const; - void setType(Ctx& ctx, Type type, bool nullable = true); - void setType(Ctx& ctx, Type type, unsigned length, bool nullable = true); - void setType(Ctx& ctx, Type type, unsigned precision, unsigned scale, bool nullable = true); - void setType(Ctx& ctx, const NdbDictionary::Column* ndbColumn); - bool equal(const SqlType& sqlType) const; - unsigned size() const; - unsigned displaySize() const; - const char* typeName() const; - unsigned length() const; - bool nullable() const; - void nullable(bool value); - bool unSigned() const; - void unSigned(bool value); - // forwards compatible - void getType(Ctx& ctx, NdbDictionary::Column* ndbColumn) const; - // type conversion - SQLSMALLINT sqlcdefault(Ctx& ctx) const; - // print for debugging - void print(char* buf, unsigned size) const; -private: - friend class LexType; - Type m_type; - unsigned m_precision; - unsigned m_scale; - unsigned m_length; - bool m_nullable; - bool m_unSigned; // qualifier instead of separate types -}; - -inline SqlType::Type -SqlType::type() const -{ - return m_type; -} - -inline unsigned -SqlType::length() const -{ - return m_length; -} - -inline bool -SqlType::nullable() const -{ - return m_nullable; -} - -inline void -SqlType::nullable(bool value) -{ - m_nullable = value; -} - -inline bool -SqlType::unSigned() const -{ - return m_unSigned; -} - -inline void -SqlType::unSigned(bool value) -{ - ctx_assert(m_type == Smallint || m_type == Integer || m_type == Bigint); - m_unSigned = value; -} - -/** - * Actual SQL datatypes. - */ -typedef unsigned char SqlChar; // Char and Varchar via pointer -typedef Int16 SqlSmallint; -typedef Int32 SqlInteger; -typedef Int64 SqlBigint; -typedef Uint16 SqlUsmallint; -typedef Uint32 SqlUinteger; -typedef Uint64 SqlUbigint; -typedef float SqlReal; -typedef double SqlDouble; - -// datetime cc yy mm dd HH MM SS 00 ff ff ff ff stored as String(12) -struct SqlDatetime { - int cc() const { return *(signed char*)&m_data[0]; } - void cc(int x) { *(signed char*)&m_data[0] = x; } - unsigned yy() const { return *(unsigned char*)&m_data[1]; } - void yy(unsigned x) { *(unsigned char*)&m_data[1] = x; } - unsigned mm() const { return *(unsigned char*)&m_data[2]; } - void mm(unsigned x) { *(unsigned char*)&m_data[2] = x; } - unsigned dd() const { return *(unsigned char*)&m_data[3]; } - void dd(unsigned x) { *(unsigned char*)&m_data[3] = x; } - unsigned HH() const { return *(unsigned char*)&m_data[4]; } - void HH(unsigned x) { *(unsigned char*)&m_data[4] = x; } - unsigned MM() const { return *(unsigned char*)&m_data[5]; } - void MM(unsigned x) { *(unsigned char*)&m_data[5] = x; } - unsigned SS() const { return *(unsigned char*)&m_data[6]; } - void SS(unsigned x) { *(unsigned char*)&m_data[6] = x; } - unsigned ff() const { - const unsigned char* p = (unsigned char*)&m_data[8]; - unsigned x = 0; - x += *p++ << 24; - x += *p++ << 16; - x += *p++ << 8; - x += *p++; - return x; - } - void ff(unsigned x) { - unsigned char* p = (unsigned char*)&m_data[8]; - *p++ = (x >> 24) & 0xff; - *p++ = (x >> 16) & 0xff; - *p++ = (x >> 8) & 0xff; - *p++ = x & 0xff; - } - bool valid() { return true; } // XXX later - bool less(const SqlDatetime t) const { - if (cc() != t.cc()) - return cc() < t.cc(); - if (yy() != t.yy()) - return yy() < t.yy(); - if (mm() != t.mm()) - return mm() < t.mm(); - if (dd() != t.dd()) - return dd() < t.dd(); - if (HH() != t.HH()) - return HH() < t.HH(); - if (MM() != t.MM()) - return MM() < t.MM(); - if (SS() != t.SS()) - return SS() < t.SS(); - if (ff() != t.ff()) - return ff() < t.ff(); - return false; - } -private: - char m_data[12]; // use array to avoid gaps -}; - -/** - * @class ExtType - * @brief External data type - */ -class ExtType { -public: - enum Type { - Undef = UndefDataType, - Char = SQL_C_CHAR, - Short = SQL_C_SHORT, - Sshort = SQL_C_SSHORT, - Ushort = SQL_C_USHORT, - Long = SQL_C_LONG, // for sun.jdbc.odbc - Slong = SQL_C_SLONG, - Ulong = SQL_C_ULONG, - Sbigint = SQL_C_SBIGINT, - Ubigint = SQL_C_UBIGINT, - Float = SQL_C_FLOAT, - Double = SQL_C_DOUBLE, - Timestamp = SQL_C_TYPE_TIMESTAMP, - Binary = SQL_C_BINARY, // XXX BLOB hack - Unbound = UnboundDataType - }; - ExtType(); - ExtType(Type type); - ExtType(Ctx& ctx, Type type); - Type type() const; - void setType(Ctx& ctx, Type type); - unsigned size() const; -private: - Type m_type; -}; - -inline ExtType::Type -ExtType::type() const -{ - return m_type; -} - -/** - * @class LexType - * @class Lexical data type - */ -class LexType { -public: - enum Type { - Undef = UndefDataType, - Char = 1, - Integer = 2, - Float = 3, - Null = 4 - }; - LexType(); - LexType(Type type); - LexType(Ctx& ctx, Type type); - Type type() const; - void setType(Ctx& ctx, Type type); - void convert(Ctx& ctx, SqlType& out, unsigned length = 0) const; -private: - Type m_type; -}; - -inline LexType::Type -LexType::type() const -{ - return m_type; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/DescArea.cpp b/storage/ndb/src/old_files/client/odbc/common/DescArea.cpp deleted file mode 100644 index bad9f23d3ef5c731a01c7b563dacb15937ccd76d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DescArea.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <vector> -#include "DescArea.hpp" - -// DescField - -// DescRec - -void -DescRec::setField(int id, const OdbcData& data) -{ - Ctx ctx; - setField(ctx, id, data); - ctx_assert(ctx.ok()); -} - -void -DescRec::getField(int id, OdbcData& data) -{ - Ctx ctx; - getField(ctx, id, data); - ctx_assert(ctx.ok()); -} - -void -DescRec::setField(Ctx& ctx, int id, const OdbcData& data) -{ - Fields::iterator iter; - iter = m_fields.find(id); - if (ctx.logLevel() >= 3) { - char buf[100]; - data.print(buf, sizeof(buf)); - ctx_log3(("set %s rec %d id %d = %s", DescArea::nameUsage(m_area->getUsage()), m_num, id, buf)); - } - if (iter != m_fields.end()) { - DescField& field = (*iter).second; - field.setData(data); - m_area->setBound(false); // XXX could compare data values - return; - } - const DescSpec& spec = m_area->findSpec(id); - if (spec.m_pos != Desc_pos_end) { - DescField field(spec, data); - m_fields.insert(Fields::value_type(id, field)); - m_area->setBound(false); - return; - } - ctx_assert(false); -} - -void -DescRec::getField(Ctx& ctx, int id, OdbcData& data) -{ - Fields::iterator iter; - iter = m_fields.find(id); - if (iter != m_fields.end()) { - DescField& field = (*iter).second; - data.setValue(field.getData()); - return; - } - const DescSpec& spec = m_area->findSpec(id); - if (spec.m_pos != Desc_pos_end) { - data.setValue(); - return; // XXX default value - } - ctx_assert(false); -} - -// DescArea - -DescArea::DescArea(HandleBase* handle, const DescSpec* specList) : - m_handle(handle), - m_specList(specList), - m_alloc(Desc_alloc_undef), - m_usage(Desc_usage_undef), - m_bound(true) // no bind necessary since empty -{ - m_header.m_area = this; - m_header.m_num = -1; - DescRec rec; - rec.m_area = this; - rec.m_num = m_recs.size(); - m_recs.push_back(rec); // add bookmark record - SQLSMALLINT count = 0; - getHeader().setField(SQL_DESC_COUNT, count); - m_bound = true; -} - -DescArea::~DescArea() -{ -} - -const DescSpec& -DescArea::findSpec(int id) -{ - const DescSpec* p; - for (p = m_specList; p->m_pos != Desc_pos_end; p++) { - if (p->m_id == id) - break; - } - return *p; -} - -unsigned -DescArea::getCount() const -{ - ctx_assert(m_recs.size() > 0); - return m_recs.size() - 1; -} - -void -DescArea::setCount(Ctx& ctx, unsigned count) -{ - if (m_recs.size() - 1 == count) - return; - ctx_log3(("set %s count %d to %d", - DescArea::nameUsage(m_usage), - (unsigned)(m_recs.size() - 1), - count)); - m_recs.resize(1 + count); - for (unsigned i = 0; i <= count; i++) { - m_recs[i].m_area = this; - m_recs[i].m_num = i; - } - getHeader().setField(SQL_DESC_COUNT, static_cast<SQLSMALLINT>(count)); -} - -DescRec& -DescArea::pushRecord() -{ - ctx_assert(m_recs.size() > 0); - DescRec rec; - rec.m_area = this; - rec.m_num = m_recs.size(); - m_recs.push_back(rec); - SQLSMALLINT count = m_recs.size() - 1; - getHeader().setField(SQL_DESC_COUNT, count); - return m_recs.back(); -} - -DescRec& -DescArea::getHeader() -{ - return m_header; -} - -DescRec& -DescArea::getRecord(unsigned num) -{ - ctx_assert(num < m_recs.size()); - return m_recs[num]; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/DescArea.hpp b/storage/ndb/src/old_files/client/odbc/common/DescArea.hpp deleted file mode 100644 index e9f552d758d872216607ea7c9746795c885dc101..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DescArea.hpp +++ /dev/null @@ -1,266 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_DescArea_hpp -#define ODBC_COMMON_DescArea_hpp - -#include <map> -#include <vector> -#include <common/common.hpp> -#include "OdbcData.hpp" - -/** - * Descriptor records. Contains: - * -# header, not called a "record" in this context - * -# bookmark record at index position 0 - * -# descriptor records at index positions starting from 1 - * - * These classes are in common/ since the code is general. - * However each area is associated with a HandleDesc. - * - * DescField - field identified by an SQL_DESC_* constant - * DescRec - header or record, a list of fields - * DescArea - header and all records - */ - -class HandleBase; -class DescField; -class DescRec; -class DescArea; - -enum DescPos { - Desc_pos_undef = 0, - Desc_pos_header, - Desc_pos_record, - Desc_pos_end -}; - -enum DescMode { - Desc_mode_undef = 0, - Desc_mode_readonly, - Desc_mode_writeonly, - Desc_mode_readwrite, - Desc_mode_unused -}; - -struct DescSpec { - DescPos m_pos; // header or record - int m_id; // SQL_DESC_ identifier - OdbcData::Type m_type; // data type - DescMode m_mode[1+4]; // access mode IPD APD IRD ARD - // called before setting value - typedef void CallbackSet(Ctx& ctx, HandleBase* self, const OdbcData& data); - CallbackSet* m_set; - // called to get default value - typedef void CallbackDefault(Ctx& ctx, HandleBase* self, OdbcData& data); - CallbackDefault* m_default; -}; - -enum DescAlloc { - Desc_alloc_undef = 0, - Desc_alloc_auto, - Desc_alloc_user -}; - -enum DescUsage { - Desc_usage_undef = 0, - Desc_usage_IPD = 1, // these must be 1-4 - Desc_usage_IRD = 2, - Desc_usage_APD = 3, - Desc_usage_ARD = 4 -}; - -/** - * @class DescField - * @brief Field identified by an SQL_DESC_* constant - */ -class DescField { -public: - DescField(const DescSpec& spec, const OdbcData& data); - DescField(const DescField& field); - ~DescField(); -private: - friend class DescRec; - void setData(const OdbcData& data); - const OdbcData& getData(); - const DescSpec& m_spec; - OdbcData m_data; -}; - -inline -DescField::DescField(const DescSpec& spec, const OdbcData& data) : - m_spec(spec), - m_data(data) -{ -} - -inline -DescField::DescField(const DescField& field) : - m_spec(field.m_spec), - m_data(field.m_data) -{ -} - -inline -DescField::~DescField() -{ -} - -inline void -DescField::setData(const OdbcData& data) -{ - ctx_assert(m_spec.m_type == data.type()); - m_data.setValue(data); -} - -inline const OdbcData& -DescField::getData() -{ - ctx_assert(m_data.type() != OdbcData::Undef); - return m_data; -} - -/** - * @class DescRec - * @brief Descriptor record, a list of fields - */ -class DescRec { - friend class DescArea; -public: - DescRec(); - ~DescRec(); - void setField(int id, const OdbcData& data); - void getField(int id, OdbcData& data); - void setField(Ctx& ctx, int id, const OdbcData& data); - void getField(Ctx& ctx, int id, OdbcData& data); -private: - DescArea* m_area; - int m_num; // for logging only -1 = header 0 = bookmark - typedef std::map<int, DescField> Fields; - Fields m_fields; -}; - -inline -DescRec::DescRec() : - m_area(0) -{ -} - -inline -DescRec::~DescRec() -{ -} - -/** - * @class DescArea - * @brief All records, including header (record 0) - * - * Descriptor area includes a header (record 0) - * and zero or more records at position >= 1. - * Each of these describes one parameter or one column. - * - * - DescArea : Collection of records - * - DescRec : Collection of fields - * - DescField : Contains data of type OdbcData - */ -class DescArea { -public: - DescArea(HandleBase* handle, const DescSpec* specList); - ~DescArea(); - void setAlloc(DescAlloc alloc); - DescAlloc getAlloc() const; - void setUsage(DescUsage usage); - DescUsage getUsage() const; - static const char* nameUsage(DescUsage u); - // find specifier - const DescSpec& findSpec(int id); - // get or set number of records (record 0 not counted) - unsigned getCount() const; - void setCount(Ctx& ctx, unsigned count); - // paush new record (record 0 exists always) - DescRec& pushRecord(); - // get ref to header or to any record - DescRec& getHeader(); - DescRec& getRecord(unsigned num); - // modified since last bind - void setBound(bool bound); - bool isBound() const; -private: - HandleBase* m_handle; - const DescSpec* const m_specList; - DescRec m_header; - typedef std::vector<DescRec> Recs; - Recs m_recs; - DescAlloc m_alloc; - DescUsage m_usage; - bool m_bound; -}; - -inline void -DescArea::setAlloc(DescAlloc alloc) -{ - m_alloc = alloc; -} - -inline DescAlloc -DescArea::getAlloc() const -{ - return m_alloc; -} - -inline void -DescArea::setUsage(DescUsage usage) -{ - m_usage = usage; -} - -inline DescUsage -DescArea::getUsage() const -{ - return m_usage; -} - -inline const char* -DescArea::nameUsage(DescUsage u) -{ - switch (u) { - case Desc_usage_undef: - break; - case Desc_usage_IPD: - return "IPD"; - case Desc_usage_IRD: - return "IRD"; - case Desc_usage_APD: - return "APD"; - case Desc_usage_ARD: - return "ARD"; - } - return "?"; -} - -inline void -DescArea::setBound(bool bound) -{ - m_bound = bound; -} - -inline bool -DescArea::isBound() const -{ - return m_bound; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/DiagArea.cpp b/storage/ndb/src/old_files/client/odbc/common/DiagArea.cpp deleted file mode 100644 index 06e8da89495c397747365223c1daf97e7b753c0f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DiagArea.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <stdio.h> -#include "OdbcData.hpp" -#include "DiagArea.hpp" - -// DiagSpec - -static const DiagSpec -diag_spec_list[] = { - { Diag_pos_header, - SQL_DIAG_CURSOR_ROW_COUNT, - OdbcData::Integer, - Odbc_handle_stmt - }, - { Diag_pos_header, - SQL_DIAG_DYNAMIC_FUNCTION, - OdbcData::Sqlchar, - Odbc_handle_stmt - }, - { Diag_pos_header, - SQL_DIAG_DYNAMIC_FUNCTION_CODE, - OdbcData::Integer, - Odbc_handle_stmt - }, - { Diag_pos_header, - SQL_DIAG_NUMBER, - OdbcData::Integer, - Odbc_handle_all - }, - { Diag_pos_header, - SQL_DIAG_RETURNCODE, - OdbcData::Smallint, - Odbc_handle_all - }, - { Diag_pos_header, - SQL_DIAG_ROW_COUNT, - OdbcData::Integer, - Odbc_handle_stmt - }, - { Diag_pos_status, - SQL_DIAG_CLASS_ORIGIN, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_COLUMN_NUMBER, - OdbcData::Integer, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_CONNECTION_NAME, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_MESSAGE_TEXT, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_NATIVE, - OdbcData::Integer, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_ROW_NUMBER, - OdbcData::Integer, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_SERVER_NAME, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_SQLSTATE, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_status, - SQL_DIAG_SUBCLASS_ORIGIN, - OdbcData::Sqlchar, - Odbc_handle_all - }, - { Diag_pos_end, - 0, - OdbcData::Undef, - 0 - } -}; - -const DiagSpec& -DiagSpec::find(int id) -{ - const DiagSpec* p; - for (p = diag_spec_list; p->m_pos != Diag_pos_end; p++) { - if (p->m_id == id) - break; - } - return *p; -} - -// DiagField - -// DiagRec - -void -DiagRec::setField(int id, const OdbcData& data) -{ - Fields::iterator iter; - iter = m_fields.find(id); - if (iter != m_fields.end()) { - DiagField& field = (*iter).second; - field.setData(data); - return; - } - const DiagSpec& spec = DiagSpec::find(id); - if (spec.m_pos != Diag_pos_end) { - DiagField field(spec, data); - m_fields.insert(Fields::value_type(id, field)); - return; - } - ctx_assert(false); -} - -void -DiagRec::getField(Ctx& ctx, int id, OdbcData& data) -{ - Fields::iterator iter; - iter = m_fields.find(id); - if (iter != m_fields.end()) { - DiagField& field = (*iter).second; - data.setValue(field.getData()); - return; - } - const DiagSpec& spec = DiagSpec::find(id); - if (spec.m_pos != Diag_pos_end) { - // success and undefined value says the MS doc - data.setValue(); - return; - } - ctx_assert(false); -} - -// DiagArea - -DiagArea::DiagArea() : - m_recs(1), // add header - m_code(SQL_SUCCESS), - m_recNumber(0) -{ - setHeader(SQL_DIAG_NUMBER, (SQLINTEGER)0); -} - -DiagArea::~DiagArea() { -} - -unsigned -DiagArea::numStatus() -{ - ctx_assert(m_recs.size() > 0); - return m_recs.size() - 1; -} - -void -DiagArea::pushStatus() -{ - ctx_assert(m_recs.size() > 0); - DiagRec rec; - m_recs.push_back(rec); - SQLINTEGER diagNumber = m_recs.size() - 1; - setHeader(SQL_DIAG_NUMBER, diagNumber); -} - -void -DiagArea::setHeader(int id, const OdbcData& data) -{ - ctx_assert(m_recs.size() > 0); - getHeader().setField(id, data); -} - -// set status - -void -DiagArea::setStatus(int id, const OdbcData& data) -{ - getStatus().setField(id, data); -} - -void -DiagArea::setStatus(const Sqlstate& state) -{ - getStatus().setField(SQL_DIAG_SQLSTATE, state); - setCode(state.getCode(m_code)); -} - -void -DiagArea::setStatus(const Error& error) -{ - BaseString message(""); - // bracketed prefixes - message.append(NDB_ODBC_COMPONENT_VENDOR); - message.append(NDB_ODBC_COMPONENT_DRIVER); - if (! error.driverError()) - message.append(NDB_ODBC_COMPONENT_DATABASE); - // native error code - char nativeString[20]; - sprintf(nativeString, "%02d%02d%04d", - (unsigned)error.m_status % 100, - (unsigned)error.m_classification % 100, - (unsigned)error.m_code % 10000); - SQLINTEGER native = atoi(nativeString); - message.appfmt("NDB-%s", nativeString); - // message text - message.append(" "); - message.append(error.m_message); - if (error.m_sqlFunction != 0) - message.appfmt(" (in %s)", error.m_sqlFunction); - // set diag fields - setStatus(error.m_sqlstate); - setStatus(SQL_DIAG_NATIVE, native); - setStatus(SQL_DIAG_MESSAGE_TEXT, message.c_str()); -} - -// push status - -void -DiagArea::pushStatus(const Error& error) -{ - pushStatus(); - setStatus(error); -} - -// record access - -DiagRec& -DiagArea::getHeader() -{ - ctx_assert(m_recs.size() > 0); - return m_recs[0]; -} - -DiagRec& -DiagArea::getStatus() -{ - ctx_assert(m_recs.size() > 1); - return m_recs.back(); -} - -DiagRec& -DiagArea::getRecord(unsigned num) -{ - ctx_assert(num < m_recs.size()); - return m_recs[num]; -} - -void -DiagArea::getRecord(Ctx& ctx, unsigned num, int id, OdbcData& data) -{ - DiagRec& rec = getRecord(num); - rec.getField(ctx, id, data); -} - -void -DiagArea::setCode(SQLRETURN code) -{ - m_code = code; - getHeader().setField(SQL_DIAG_RETURNCODE, (SQLSMALLINT)code); -} diff --git a/storage/ndb/src/old_files/client/odbc/common/DiagArea.hpp b/storage/ndb/src/old_files/client/odbc/common/DiagArea.hpp deleted file mode 100644 index 79c03de662307587b64dcd85bcff3566978494f7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/DiagArea.hpp +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_DiagArea_hpp -#define ODBC_COMMON_DiagArea_hpp - -#include <map> -#include <vector> -#include <common/common.hpp> -#include "OdbcData.hpp" - -enum DiagPos { - Diag_pos_undef = 0, - Diag_pos_header, - Diag_pos_status, - Diag_pos_end -}; - -/** - * @class DiagSpec - * @brief Field specification - */ -struct DiagSpec { - DiagPos m_pos; // header or status - int m_id; // SQL_DIAG_ identifier - OdbcData::Type m_type; // data type - unsigned m_handles; // defined for these handle types - // find the spec - static const DiagSpec& find(int id); -}; - -/** - * @class DiagField - * @brief Field identified by an SQL_DIAG_* constant - */ -class DiagField { -public: - DiagField(const DiagSpec& spec, const OdbcData& data); - DiagField(const DiagField& field); - ~DiagField(); - void setData(const OdbcData& data); - const OdbcData& getData(); -private: - const DiagSpec& m_spec; - OdbcData m_data; -}; - -inline -DiagField::DiagField(const DiagSpec& spec, const OdbcData& data) : - m_spec(spec), - m_data(data) -{ -} - -inline -DiagField::DiagField(const DiagField& field) : - m_spec(field.m_spec), - m_data(field.m_data) -{ -} - -inline -DiagField::~DiagField() -{ -} - -inline void -DiagField::setData(const OdbcData& data) -{ - ctx_assert(m_spec.m_type == data.type()); - m_data.setValue(data); -} - -inline const OdbcData& -DiagField::getData() -{ - ctx_assert(m_data.type() != OdbcData::Undef); - return m_data; -} - -/** - * @class DiagRec - * @brief One diagnostic record, a list of fields - */ -class DiagRec { -public: - DiagRec(); - ~DiagRec(); - void setField(int id, const OdbcData& data); - void getField(Ctx& ctx, int id, OdbcData& data); -private: - typedef std::map<int, DiagField> Fields; - Fields m_fields; -}; - -inline -DiagRec::DiagRec() -{ -} - -inline -DiagRec::~DiagRec() -{ -} - -/** - * @class DiagArea - * @brief All records, including header (record 0) - * - * Diagnostic area includes a header (record 0) and zero or more - * status records at positions >= 1. - */ -class DiagArea { -public: - DiagArea(); - ~DiagArea(); - /** - * Get number of status records. - */ - unsigned numStatus(); - /** - * Push new status record. - */ - void pushStatus(); - /** - * Set field in header. - */ - void setHeader(int id, const OdbcData& data); - /** - * Set field in latest status record. The arguments can - * also be plain int, char*, Sqlstate. The NDB and other - * native errors set Sqlstate _IM000 automatically. - */ - void setStatus(int id, const OdbcData& data); - void setStatus(const Sqlstate& state); - void setStatus(const Error& error); - /** - * Convenience methods to push new status record and set - * some common fields in it. Sqlstate is set always. - */ - void pushStatus(const Error& error); - /** - * Get refs to various records. - */ - DiagRec& getHeader(); - DiagRec& getStatus(); - DiagRec& getRecord(unsigned num); - /** - * Get diag values. - */ - void getRecord(Ctx& ctx, unsigned num, int id, OdbcData& data); - /** - * Get or set return code. - */ - SQLRETURN getCode() const; - void setCode(SQLRETURN ret); - /** - * Get "next" record number (0 when no more). - * Used only by the deprecated SQLError function. - */ - unsigned nextRecNumber(); -private: - typedef std::vector<DiagRec> Recs; - Recs m_recs; - SQLRETURN m_code; - unsigned m_recNumber; // for SQLError -}; - -inline SQLRETURN -DiagArea::getCode() const -{ - return m_code; -} - -inline unsigned -DiagArea::nextRecNumber() -{ - if (m_recNumber >= numStatus()) - return 0; - return ++m_recNumber; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/Makefile b/storage/ndb/src/old_files/client/odbc/common/Makefile deleted file mode 100644 index 7ee29738d86a581ff5a645643e089d67c0c5fb50..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbccommon - -SOURCES = \ - common.cpp \ - Ctx.cpp \ - Sqlstate.cpp \ - OdbcData.cpp \ - DiagArea.cpp \ - AttrArea.cpp \ - DescArea.cpp \ - ConnArea.cpp \ - StmtInfo.cpp \ - StmtArea.cpp \ - CodeTree.cpp \ - ResultArea.cpp \ - DataType.cpp \ - DataField.cpp \ - DataRow.cpp - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/common/OdbcData.cpp b/storage/ndb/src/old_files/client/odbc/common/OdbcData.cpp deleted file mode 100644 index 32400e07c7a6d7c20c1cd3d506d7e229b8823258..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/OdbcData.cpp +++ /dev/null @@ -1,560 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "OdbcData.hpp" - -OdbcData::OdbcData() : - m_type(Undef) -{ -} - -OdbcData::OdbcData(Type type) : - m_type(type) -{ - switch (m_type) { - case Smallint: - m_smallint = 0; - break; - case Usmallint: - m_usmallint = 0; - break; - case Integer: - m_integer = 0; - break; - case Uinteger: - m_uinteger = 0; - break; - case Pointer: - m_pointer = 0; - break; - case SmallintPtr: - m_smallintPtr = 0; - break; - case UsmallintPtr: - m_usmallintPtr = 0; - break; - case IntegerPtr: - m_integerPtr = 0; - break; - case UintegerPtr: - m_uintegerPtr = 0; - break; - case PointerPtr: - m_pointerPtr = 0; - break; - case Sqlchar: - m_sqlchar = 0; - break; - case Sqlstate: - m_sqlstate = 0; - break; - default: - ctx_assert(false); - break; - }; -} - -OdbcData::OdbcData(const OdbcData& odbcData) : - m_type(odbcData.m_type) -{ - switch (m_type) { - case Smallint: - m_smallint = odbcData.m_smallint; - break; - case Usmallint: - m_usmallint = odbcData.m_usmallint; - break; - case Integer: - m_integer = odbcData.m_integer; - break; - case Uinteger: - m_uinteger = odbcData.m_uinteger; - break; - case Pointer: - m_pointer = odbcData.m_pointer; - break; - case SmallintPtr: - m_smallintPtr = odbcData.m_smallintPtr; - break; - case UsmallintPtr: - m_usmallintPtr = odbcData.m_usmallintPtr; - break; - case IntegerPtr: - m_integerPtr = odbcData.m_integerPtr; - break; - case UintegerPtr: - m_uintegerPtr = odbcData.m_uintegerPtr; - break; - case PointerPtr: - m_pointerPtr = odbcData.m_pointerPtr; - break; - case Sqlchar: { - unsigned n = strlen(odbcData.m_sqlchar); - m_sqlchar = new char[n + 1]; - memcpy(m_sqlchar, odbcData.m_sqlchar, n + 1); - break; - } - case Sqlstate: - m_sqlstate = odbcData.m_sqlstate; - break; - default: - ctx_assert(false); - break; - }; -} - -OdbcData::~OdbcData() -{ - switch (m_type) { - case Sqlchar: - delete[] m_sqlchar; - break; - default: - break; - } -} - -void -OdbcData::setValue() -{ - m_type = Undef; -} - -void -OdbcData::setValue(Type type) -{ - if (m_type == Sqlchar) { - delete[] m_sqlchar; - m_sqlchar = 0; - } - switch (m_type) { - case Smallint: - m_smallint = 0; - break; - case Usmallint: - m_usmallint = 0; - break; - case Integer: - m_integer = 0; - break; - case Uinteger: - m_uinteger = 0; - break; - case Pointer: - m_pointer = 0; - break; - case SmallintPtr: - m_smallintPtr = 0; - break; - case UsmallintPtr: - m_usmallintPtr = 0; - break; - case IntegerPtr: - m_integerPtr = 0; - break; - case UintegerPtr: - m_uintegerPtr = 0; - break; - case PointerPtr: - m_pointerPtr = 0; - break; - case Sqlchar: - m_sqlchar = 0; - break; - case Sqlstate: - m_sqlstate = 0; - break; - default: - ctx_assert(false); - break; - }; -} - -void -OdbcData::setValue(const OdbcData odbcData) -{ - if (m_type == Sqlchar) { - delete[] m_sqlchar; - m_sqlchar = 0; - } - m_type = odbcData.m_type; - switch (m_type) { - case Smallint: - m_smallint = odbcData.m_smallint; - break; - case Usmallint: - m_usmallint = odbcData.m_usmallint; - break; - case Integer: - m_integer = odbcData.m_integer; - break; - case Uinteger: - m_uinteger = odbcData.m_uinteger; - break; - case Pointer: - m_pointer = odbcData.m_pointer; - break; - case SmallintPtr: - m_smallintPtr = odbcData.m_smallintPtr; - break; - case UsmallintPtr: - m_usmallintPtr = odbcData.m_usmallintPtr; - break; - case IntegerPtr: - m_integerPtr = odbcData.m_integerPtr; - break; - case UintegerPtr: - m_uintegerPtr = odbcData.m_uintegerPtr; - break; - case PointerPtr: - m_pointerPtr = odbcData.m_pointerPtr; - break; - case Sqlchar: { - unsigned n = strlen(odbcData.m_sqlchar); - m_sqlchar = new char[n + 1]; - memcpy(m_sqlchar, odbcData.m_sqlchar, n + 1); - break; - } - case Sqlstate: - m_sqlstate = odbcData.m_sqlstate; - break; - default: - ctx_assert(false); - break; - }; -} - -// copy in from user buffer - -void -OdbcData::copyin(Ctx& ctx, Type type, SQLPOINTER buf, SQLINTEGER length) -{ - if (m_type == Sqlchar) { - delete[] m_sqlchar; - m_sqlchar = 0; - } - m_type = type; - switch (m_type) { - case Smallint: { - SQLSMALLINT val = 0; - switch (length) { - case 0: - case SQL_IS_SMALLINT: - val = (SQLSMALLINT)(SQLINTEGER)buf; - break; - case SQL_IS_USMALLINT: - val = (SQLUSMALLINT)(SQLUINTEGER)buf; - break; - case SQL_IS_INTEGER: - val = (SQLINTEGER)buf; - break; - case SQL_IS_UINTEGER: - val = (SQLUINTEGER)buf; - break; - default: - ctx.pushStatus(Error::Gen, "smallint input - invalid length %d", (int)length); - return; - } - m_smallint = val; - break; - } - case Usmallint: { - SQLUSMALLINT val = 0; - switch (length) { - case SQL_IS_SMALLINT: - val = (SQLSMALLINT)(SQLINTEGER)buf; - break; - case 0: - case SQL_IS_USMALLINT: - val = (SQLUSMALLINT)(SQLUINTEGER)buf; - break; - case SQL_IS_INTEGER: - val = (SQLINTEGER)buf; - break; - case SQL_IS_UINTEGER: - val = (SQLUINTEGER)buf; - break; - default: - ctx.pushStatus(Error::Gen, "unsigned smallint input - invalid length %d", (int)length); - return; - } - m_usmallint = val; - break; - } - case Integer: { - SQLINTEGER val = 0; - switch (length) { - case SQL_IS_SMALLINT: - val = (SQLSMALLINT)(SQLINTEGER)buf; - break; - case SQL_IS_USMALLINT: - val = (SQLUSMALLINT)(SQLUINTEGER)buf; - break; - case 0: - case SQL_IS_INTEGER: - val = (SQLINTEGER)buf; - break; - case SQL_IS_UINTEGER: - val = (SQLUINTEGER)buf; - break; - default: - ctx.pushStatus(Error::Gen, "integer input - invalid length %d", (int)length); - return; - } - m_integer = val; - break; - } - case Uinteger: { - SQLUINTEGER val = 0; - switch (length) { - case SQL_IS_SMALLINT: - val = (SQLSMALLINT)(SQLINTEGER)buf; - break; - case SQL_IS_USMALLINT: - val = (SQLUSMALLINT)(SQLUINTEGER)buf; - break; - case SQL_IS_INTEGER: - val = (SQLINTEGER)buf; - break; - case 0: - case SQL_IS_UINTEGER: - val = (SQLUINTEGER)buf; - break; - default: - ctx.pushStatus(Error::Gen, "unsigned integer input - invalid length %d", (int)length); - return; - } - m_uinteger = val; - break; - } - case Pointer: { - SQLPOINTER val = 0; - switch (length) { - case 0: - case SQL_IS_POINTER: - val = (SQLPOINTER)buf; - break; - default: - ctx.pushStatus(Error::Gen, "pointer input - invalid length %d", (int)length); - return; - } - m_pointer = val; - break; - } - case SmallintPtr: { - SQLSMALLINT* val = 0; - switch (length) { - case 0: - case SQL_IS_POINTER: - val = (SQLSMALLINT*)buf; - break; - default: - ctx.pushStatus(Error::Gen, "smallint pointer input - invalid length %d", (int)length); - return; - } - m_smallintPtr = val; - break; - } - case UsmallintPtr: { - SQLUSMALLINT* val = 0; - switch (length) { - case 0: - case SQL_IS_POINTER: - val = (SQLUSMALLINT*)buf; - break; - default: - ctx.pushStatus(Error::Gen, "unsigned smallint pointer input - invalid length %d", (int)length); - return; - } - m_usmallintPtr = val; - break; - } - case IntegerPtr: { - SQLINTEGER* val = 0; - switch (length) { - case 0: - case SQL_IS_POINTER: - val = (SQLINTEGER*)buf; - break; - default: - ctx.pushStatus(Error::Gen, "integer pointer input - invalid length %d", (int)length); - return; - } - m_integerPtr = val; - break; - } - case UintegerPtr: { - SQLUINTEGER* val = 0; - switch (length) { - case 0: - case SQL_IS_POINTER: - val = (SQLUINTEGER*)buf; - break; - default: - ctx.pushStatus(Error::Gen, "unsigned integer pointer input - invalid length %d", (int)length); - return; - } - m_uintegerPtr = val; - break; - } - case Sqlchar: { - const char* val = (char*)buf; - if (val == 0) { - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "null string input"); - return; - } - if (length < 0 && length != SQL_NTS) { - ctx.pushStatus(Error::Gen, "string input - invalid length %d", (int)length); - return; - } - if (length == SQL_NTS) { - m_sqlchar = strcpy(new char[strlen(val) + 1], val); - } else { - m_sqlchar = (char*)memcpy(new char[length + 1], val, length); - m_sqlchar[length] = 0; - } - break; - } - default: - ctx_assert(false); - break; - } -} - -// copy out to user buffer - -void -OdbcData::copyout(Ctx& ctx, SQLPOINTER buf, SQLINTEGER length, SQLINTEGER* total, SQLSMALLINT* total2) -{ - if (buf == 0) { - ctx.setCode(SQL_ERROR); - return; - } - switch (m_type) { - case Smallint: { - SQLSMALLINT* ptr = static_cast<SQLSMALLINT*>(buf); - *ptr = m_smallint; - break; - } - case Usmallint: { - SQLUSMALLINT* ptr = static_cast<SQLUSMALLINT*>(buf); - *ptr = m_usmallint; - break; - } - case Integer: { - SQLINTEGER* ptr = static_cast<SQLINTEGER*>(buf); - *ptr = m_integer; - break; - } - case Uinteger: { - SQLUINTEGER* ptr = static_cast<SQLUINTEGER*>(buf); - *ptr = m_uinteger; - break; - } - case Pointer: { - SQLPOINTER* ptr = static_cast<SQLPOINTER*>(buf); - *ptr = m_pointer; - break; - } - case Sqlchar: { - char* ptr = static_cast<char*>(buf); - if (length < 0 && length != SQL_NTS) { - ctx.setCode(SQL_ERROR); - return; - } - if (length == SQL_NTS) { - strcpy(ptr, m_sqlchar); - } else { - strncpy(ptr, m_sqlchar, length); - } - if (total != 0) - *total = strlen(m_sqlchar); - if (total2 != 0) - *total2 = strlen(m_sqlchar); - break; - } - case Sqlstate: { - char* ptr = static_cast<char*>(buf); - const char* state = m_sqlstate->state(); - if (length < 0 && length != SQL_NTS) { - ctx.setCode(SQL_ERROR); - return; - } - if (length == SQL_NTS) { - strcpy(ptr, state); - } else { - strncpy(ptr, state, length); - } - if (total != 0) - *total = strlen(state); - if (total2 != 0) - *total2 = strlen(state); - break; - } - default: - ctx_assert(false); - break; - } -} - -void -OdbcData::print(char* buf, unsigned size) const -{ - switch (m_type) { - case Undef: - snprintf(buf, size, "undef"); - break; - case Smallint: - snprintf(buf, size, "%d", (int)m_smallint); - break; - case Usmallint: - snprintf(buf, size, "%u", (unsigned)m_usmallint); - break; - case Integer: - snprintf(buf, size, "%ld", (long)m_integer); - break; - case Uinteger: - snprintf(buf, size, "%lu", (unsigned long)m_uinteger); - break; - case Pointer: - snprintf(buf, size, "0x%lx", (unsigned long)m_pointer); - break; - case SmallintPtr: - snprintf(buf, size, "0x%lx", (unsigned long)m_smallintPtr); - break; - case UsmallintPtr: - snprintf(buf, size, "0x%lx", (unsigned long)m_usmallintPtr); - break; - case IntegerPtr: - snprintf(buf, size, "0x%lx", (unsigned long)m_integerPtr); - break; - case UintegerPtr: - snprintf(buf, size, "0x%lx", (unsigned long)m_uintegerPtr); - break; - case PointerPtr: - snprintf(buf, size, "0x%lx", (unsigned long)m_pointerPtr); - break; - case Sqlchar: - snprintf(buf, size, "%s", m_sqlchar); - break; - case Sqlstate: - snprintf(buf, size, "%s", m_sqlstate->state()); - break; - default: - snprintf(buf, size, "data(%d)", (int)m_type); - break; - }; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/OdbcData.hpp b/storage/ndb/src/old_files/client/odbc/common/OdbcData.hpp deleted file mode 100644 index c1884507cfeaf2e1fab296e45b0329dc0d9ac813..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/OdbcData.hpp +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_OdbcData_hpp -#define ODBC_COMMON_OdbcData_hpp - -#include <ndb_types.h> -#include <common/common.hpp> - -/** - * @class OdbcData - * @brief Odbc data types and storage - * - * Stores diagnostics, attributes, and descriptors. Also used - * for converting to and from driver function arguments. - */ -class OdbcData { -public: - enum Type { - Undef = 0, - Smallint, - Usmallint, - Integer, - Uinteger, - Pointer, - SmallintPtr, - UsmallintPtr, - IntegerPtr, - UintegerPtr, - PointerPtr, - Sqlchar, - Sqlstate - }; - OdbcData(); - OdbcData(Type type); - OdbcData(const OdbcData& odbcData); - OdbcData(SQLSMALLINT smallint); - OdbcData(SQLUSMALLINT usmallint); - OdbcData(SQLINTEGER integer); - OdbcData(SQLUINTEGER uinteger); - OdbcData(SQLPOINTER pointer); - OdbcData(SQLSMALLINT* smallintPtr); - OdbcData(SQLUSMALLINT* usmallintPtr); - OdbcData(SQLINTEGER* integerPtr); - OdbcData(SQLUINTEGER* uintegerPtr); - OdbcData(SQLPOINTER* pointerPtr); - OdbcData(const char* sqlchar); - OdbcData(const ::Sqlstate& sqlstate); - ~OdbcData(); - Type type() const; - void setValue(); - void setValue(Type type); - void setValue(const OdbcData odbcData); - // get value - SQLSMALLINT smallint() const; - SQLUSMALLINT usmallint() const; - SQLINTEGER integer() const; - SQLUINTEGER uinteger() const; - SQLPOINTER pointer() const; - SQLSMALLINT* smallintPtr() const; - SQLUSMALLINT* usmallintPtr() const; - SQLINTEGER* integerPtr() const; - SQLUINTEGER* uintegerPtr() const; - SQLPOINTER* pointerPtr() const; - const char* sqlchar() const; - const ::Sqlstate& sqlstate() const; - // copy in from user buffer - void copyin(Ctx& ctx, Type type, SQLPOINTER buf, SQLINTEGER length); - // copy out to user buffer - void copyout(Ctx& ctx, SQLPOINTER buf, SQLINTEGER length, SQLINTEGER* total, SQLSMALLINT* total2 = 0); - // logging - void print(char* buf, unsigned size) const; -private: - OdbcData& operator=(const OdbcData& odbcData); // disallowed - Type m_type; - union { - SQLSMALLINT m_smallint; - SQLUSMALLINT m_usmallint; - SQLINTEGER m_integer; - SQLUINTEGER m_uinteger; - SQLPOINTER m_pointer; - SQLSMALLINT* m_smallintPtr; - SQLUSMALLINT* m_usmallintPtr; - SQLINTEGER* m_integerPtr; - SQLUINTEGER* m_uintegerPtr; - SQLPOINTER* m_pointerPtr; - char* m_sqlchar; - const ::Sqlstate* m_sqlstate; - }; -}; - -inline OdbcData::Type -OdbcData::type() const -{ - return m_type; -} - -inline -OdbcData::OdbcData(SQLSMALLINT smallint) : - m_type(Smallint), - m_smallint(smallint) -{ -} - -inline -OdbcData::OdbcData(SQLUSMALLINT usmallint) : - m_type(Usmallint), - m_usmallint(usmallint) -{ -} - -inline -OdbcData::OdbcData(SQLINTEGER integer) : - m_type(Integer), - m_integer(integer) -{ -} - -inline -OdbcData::OdbcData(SQLUINTEGER uinteger) : - m_type(Uinteger), - m_uinteger(uinteger) -{ -} - -inline -OdbcData::OdbcData(SQLPOINTER pointer) : - m_type(Pointer), - m_pointer(pointer) -{ -} - -inline -OdbcData::OdbcData(SQLSMALLINT* smallintPtr) : - m_type(SmallintPtr), - m_smallintPtr(smallintPtr) -{ -} - -inline -OdbcData::OdbcData(SQLUSMALLINT* usmallintPtr) : - m_type(UsmallintPtr), - m_usmallintPtr(usmallintPtr) -{ -} - -inline -OdbcData::OdbcData(SQLINTEGER* integerPtr) : - m_type(IntegerPtr), - m_integerPtr(integerPtr) -{ -} - -inline -OdbcData::OdbcData(SQLUINTEGER* uintegerPtr) : - m_type(UintegerPtr), - m_uintegerPtr(uintegerPtr) -{ -} - -inline -OdbcData::OdbcData(SQLPOINTER* pointerPtr) : - m_type(PointerPtr), - m_pointerPtr(pointerPtr) -{ -} - -inline -OdbcData::OdbcData(const char* sqlchar) : - m_type(Sqlchar) -{ - unsigned n = strlen(sqlchar); - m_sqlchar = new char[n + 1]; - strcpy(m_sqlchar, sqlchar); -} - -inline -OdbcData::OdbcData(const ::Sqlstate& sqlstate) : - m_type(Sqlstate), - m_sqlstate(&sqlstate) -{ -} - -// get value - -inline SQLSMALLINT -OdbcData::smallint() const -{ - ctx_assert(m_type == Smallint); - return m_smallint; -} - -inline SQLUSMALLINT -OdbcData::usmallint() const -{ - ctx_assert(m_type == Usmallint); - return m_usmallint; -} - -inline SQLINTEGER -OdbcData::integer() const -{ - ctx_assert(m_type == Integer); - return m_integer; -} - -inline SQLUINTEGER -OdbcData::uinteger() const -{ - ctx_assert(m_type == Uinteger); - return m_uinteger; -} - -inline SQLPOINTER -OdbcData::pointer() const -{ - ctx_assert(m_type == Pointer); - return m_pointer; -} - -inline SQLSMALLINT* -OdbcData::smallintPtr() const -{ - ctx_assert(m_type == SmallintPtr); - return m_smallintPtr; -} - -inline SQLUSMALLINT* -OdbcData::usmallintPtr() const -{ - ctx_assert(m_type == UsmallintPtr); - return m_usmallintPtr; -} - -inline SQLINTEGER* -OdbcData::integerPtr() const -{ - ctx_assert(m_type == IntegerPtr); - return m_integerPtr; -} - -inline SQLUINTEGER* -OdbcData::uintegerPtr() const -{ - ctx_assert(m_type == UintegerPtr); - return m_uintegerPtr; -} - -inline SQLPOINTER* -OdbcData::pointerPtr() const -{ - ctx_assert(m_type == PointerPtr); - return m_pointerPtr; -} - -inline const char* -OdbcData::sqlchar() const -{ - ctx_assert(m_type == Sqlchar); - return m_sqlchar; -} - -inline const ::Sqlstate& -OdbcData::sqlstate() const -{ - ctx_assert(m_type == Sqlstate); - return *m_sqlstate; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/ResultArea.cpp b/storage/ndb/src/old_files/client/odbc/common/ResultArea.cpp deleted file mode 100644 index 79d7fb0ccc433b51d427fb74b62b8a242f405404..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/ResultArea.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "ResultArea.hpp" - -// ResultArea - -ResultArea::~ResultArea() -{ -} - -// ResultSet - -ResultSet::~ResultSet() -{ -} diff --git a/storage/ndb/src/old_files/client/odbc/common/ResultArea.hpp b/storage/ndb/src/old_files/client/odbc/common/ResultArea.hpp deleted file mode 100644 index d4890c44d999972d1544ab004664730093af3d46..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/ResultArea.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_ResultArea_hpp -#define ODBC_COMMON_ResultArea_hpp - -#include <common/common.hpp> -#include <codegen/Code_base.hpp> - -class SqlRow; - -/** - * @class ResultArea - * @brief Execution result - * - * ResultArea contains general results from executing SQL - * statements. Data rows from queries are fetched via derived - * class ResultSet. - */ -class ResultArea { -public: - ResultArea(); - virtual ~ResultArea(); - /** - * Get number of rows: - * - * - for queries: number of rows fetched so far - * - for DML statements: number of rows affected - * - for DDL and other statements: 0 - */ - CountType getCount() const; -protected: - void setCount(CountType count); - void addCount(unsigned count = 1); -private: - CountType m_count; -}; - -inline -ResultArea::ResultArea() : - m_count(0) -{ -} - -inline CountType -ResultArea::getCount() const -{ - return m_count; -} - -inline void -ResultArea::setCount(CountType count) -{ - m_count = count; -} - -inline void -ResultArea::addCount(unsigned count) -{ - m_count += count; -} - -/** - * @class ResultSet - * @brief Data rows from queries - * - * ResultSet is an interface implemented by SQL queries and - * virtual queries (such as SQLTables). It has an associated - * data row accessor SqlRow. - */ -class ResultSet : public ResultArea { -public: - ResultSet(const SqlRow& dataRow); - virtual ~ResultSet(); - enum State { - State_init = 1, // before first fetch - State_ok = 2, // last fetch succeeded - State_end = 3 // end of fetch or error - }; - void initState(); - State getState() const; - /** - * Get data accessor. Can be retrieved once and used after - * each successful ResultSet::fetch(). - */ - const SqlRow& dataRow() const; - /** - * Try to fetch one more row from this result set. - * - returns true if a row was fetched - * - returns false on end of fetch - * - returns false on error and sets error status - * It is a fatal error to call fetch after end of fetch. - */ - bool fetch(Ctx& ctx, Exec_base::Ctl& ctl); -protected: - /** - * Implementation of ResultSet::fetch() must be provided by - * each concrete subclass. - */ - virtual bool fetchImpl(Ctx& ctx, Exec_base::Ctl& ctl) = 0; - const SqlRow& m_dataRow; - State m_state; -}; - -inline -ResultSet::ResultSet(const SqlRow& dataRow) : - m_dataRow(dataRow), - m_state(State_end) // explicit initState() is required -{ -} - -inline const SqlRow& -ResultSet::dataRow() const -{ - return m_dataRow; -} - -inline void -ResultSet::initState() -{ - m_state = State_init; - setCount(0); -} - -inline ResultSet::State -ResultSet::getState() const -{ - return m_state; -} - -inline bool -ResultSet::fetch(Ctx& ctx, Exec_base::Ctl& ctl) -{ - if (! (m_state == State_init || m_state == State_ok)) { - // should not happen but return error instead of assert - ctx.pushStatus(Error::Gen, "invalid fetch state %d", (int)m_state); - m_state = State_end; - return false; - } - if (fetchImpl(ctx, ctl)) { - m_state = State_ok; - addCount(); - return true; - } - m_state = State_end; - return false; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/Sqlstate.cpp b/storage/ndb/src/old_files/client/odbc/common/Sqlstate.cpp deleted file mode 100644 index 2d625a7c159f9e7475caa56df41f725ba0444ac6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/Sqlstate.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/common.hpp> - -// Initialize Sqlstate records statically. -// They are not used by other static initializers. - -#define make_Sqlstate(state, code) \ - const Sqlstate Sqlstate::_##state(#state, code) - -make_Sqlstate(00000, SQL_SUCCESS); -make_Sqlstate(01004, SQL_SUCCESS_WITH_INFO); -make_Sqlstate(01S02, SQL_SUCCESS_WITH_INFO); -make_Sqlstate(07009, SQL_ERROR); -make_Sqlstate(08003, SQL_ERROR); -make_Sqlstate(21S01, SQL_ERROR); -make_Sqlstate(22001, SQL_ERROR); -make_Sqlstate(22002, SQL_ERROR); -make_Sqlstate(22003, SQL_ERROR); -make_Sqlstate(22005, SQL_ERROR); -make_Sqlstate(22008, SQL_ERROR); -make_Sqlstate(22012, SQL_ERROR); -make_Sqlstate(24000, SQL_ERROR); -make_Sqlstate(25000, SQL_ERROR); -make_Sqlstate(42000, SQL_ERROR); -make_Sqlstate(42S02, SQL_ERROR); -make_Sqlstate(42S22, SQL_ERROR); -make_Sqlstate(HY004, SQL_ERROR); -make_Sqlstate(HY009, SQL_ERROR); -make_Sqlstate(HY010, SQL_ERROR); -make_Sqlstate(HY011, SQL_ERROR); -make_Sqlstate(HY012, SQL_ERROR); -make_Sqlstate(HY014, SQL_ERROR); -make_Sqlstate(HY019, SQL_ERROR); -make_Sqlstate(HY024, SQL_ERROR); -make_Sqlstate(HY090, SQL_ERROR); -make_Sqlstate(HY091, SQL_ERROR); -make_Sqlstate(HY092, SQL_ERROR); -make_Sqlstate(HY095, SQL_ERROR); -make_Sqlstate(HY096, SQL_ERROR); -make_Sqlstate(HYC00, SQL_ERROR); -make_Sqlstate(HYT00, SQL_ERROR); -make_Sqlstate(IM000, SQL_ERROR); // consider all to be errors for now -make_Sqlstate(IM001, SQL_ERROR); -make_Sqlstate(IM999, SQL_ERROR); - -SQLRETURN -Sqlstate::getCode(SQLRETURN code) const -{ - int codes[2]; - int ranks[2]; - codes[0] = code; - codes[1] = m_code; - for (int i = 0; i < 2; i++) { - switch (codes[i]) { - case SQL_SUCCESS: - ranks[i] = 0; - break; - case SQL_SUCCESS_WITH_INFO: - ranks[i] = 1; - break; - case SQL_NO_DATA: - ranks[i] = 2; - break; - case SQL_NEED_DATA: - ranks[i] = 3; - break; - case SQL_ERROR: - ranks[i] = 9; - break; - default: - ctx_assert(false); - ranks[i] = 9; - } - } - if (ranks[0] < ranks[1]) - code = m_code; - return code; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/Sqlstate.hpp b/storage/ndb/src/old_files/client/odbc/common/Sqlstate.hpp deleted file mode 100644 index 3b4665dc6ca04dd7df34a011e69fa1030361a6b1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/Sqlstate.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_SqlState_hpp -#define ODBC_COMMON_SqlState_hpp - -#include <string.h> - -/** - * SQL states. - */ -class Sqlstate { -public: - static const Sqlstate _00000; // no state - static const Sqlstate _01004; // data converted with truncation - static const Sqlstate _01S02; // option value changed - static const Sqlstate _07009; // invalid descriptor index - static const Sqlstate _08003; // connection not open - static const Sqlstate _21S01; // insert value list does not match column list - static const Sqlstate _22001; // string data, right truncation - static const Sqlstate _22002; // indicator variable required but not supplied - static const Sqlstate _22003; // data overflow - static const Sqlstate _22005; // data is not numeric-literal - static const Sqlstate _22008; // data value is not a valid timestamp - static const Sqlstate _22012; // division by zero - static const Sqlstate _24000; // invalid cursor state - static const Sqlstate _25000; // invalid transaction state - static const Sqlstate _42000; // syntax error or access violation - static const Sqlstate _42S02; // base table or view not found - static const Sqlstate _42S22; // column not found - static const Sqlstate _HY004; // invalid SQL data type - static const Sqlstate _HY009; // invalid use of null pointer - static const Sqlstate _HY010; // function sequence error - static const Sqlstate _HY011; // attribute cannot be set now - static const Sqlstate _HY012; // invalid transaction operation code - static const Sqlstate _HY014; // limit on number of handles exceeded - static const Sqlstate _HY019; // non-character and non-binary data sent in pieces - static const Sqlstate _HY024; // invalid attribute value - static const Sqlstate _HY090; // invalid string or buffer length - static const Sqlstate _HY091; // invalid descriptor field identifier - static const Sqlstate _HY092; // invalid attribute/option identifier - static const Sqlstate _HY095; // function type out of range - static const Sqlstate _HY096; // information type out of range - static const Sqlstate _HYC00; // optional feature not implemented - static const Sqlstate _HYT00; // timeout expired - static const Sqlstate _IM000; // implementation defined - static const Sqlstate _IM001; // driver does not support this function - static const Sqlstate _IM999; // fill in the right state please - // get the 5-char text string - const char* state() const; - // get code or "upgrade" existing code - SQLRETURN getCode(SQLRETURN code = SQL_SUCCESS) const; -private: - Sqlstate(const char* state, const SQLRETURN code); - const char* const m_state; - const SQLRETURN m_code; -}; - -inline const char* -Sqlstate::state() const -{ - return m_state; -} - -inline -Sqlstate::Sqlstate(const char* state, const SQLRETURN code) : - m_state(state), - m_code(code) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/StmtArea.cpp b/storage/ndb/src/old_files/client/odbc/common/StmtArea.cpp deleted file mode 100644 index 5ce2d47d31ac158ad7614844c3a8e9429c29a2cd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/StmtArea.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DiagArea.hpp" -#include "StmtArea.hpp" -#include <codegen/CodeGen.hpp> - -StmtArea::StmtArea(ConnArea& connArea) : - m_connArea(connArea), - m_state(Free), - m_useSchemaCon(false), - m_useConnection(false), - m_planTree(0), - m_execTree(0), - m_unbound(0), - m_rowCount(0), - m_tuplesFetched(0) -{ - for (unsigned i = 0; i <= 4; i++) - m_descArea[i] = 0; -} - -StmtArea::~StmtArea() -{ -} - -void -StmtArea::free(Ctx &ctx) -{ - CodeGen codegen(*this); - codegen.close(ctx); - codegen.free(ctx); - m_sqlText.assign(""); - m_nativeText.assign(""); - useSchemaCon(ctx, false); - useConnection(ctx, false); - m_stmtInfo.free(ctx); - m_planTree = 0; - m_execTree = 0; - m_rowCount = 0; - m_tuplesFetched = 0; - m_unbound = 0; - m_state = Free; -} - -void -StmtArea::setRowCount(Ctx& ctx, CountType rowCount) -{ - m_rowCount = rowCount; - // location - DescArea& ird = descArea(Desc_usage_IRD); - OdbcData data; - ird.getHeader().getField(ctx, SQL_DESC_ROWS_PROCESSED_PTR, data); - if (data.type() != OdbcData::Undef) { - SQLUINTEGER* countPtr = data.uintegerPtr(); - if (countPtr != 0) { - *countPtr = static_cast<SQLUINTEGER>(m_rowCount); - } - } - // diagnostic - SQLINTEGER count = static_cast<SQLINTEGER>(m_rowCount); - ctx.diagArea().setHeader(SQL_DIAG_ROW_COUNT, count); -} - -void -StmtArea::setFunction(Ctx& ctx, const char* function, SQLINTEGER functionCode) -{ - m_stmtInfo.m_function = function; - m_stmtInfo.m_functionCode = functionCode; -} - -void -StmtArea::setFunction(Ctx& ctx) -{ - OdbcData function(m_stmtInfo.m_function); - ctx.diagArea().setHeader(SQL_DIAG_DYNAMIC_FUNCTION, function); - OdbcData functionCode(m_stmtInfo.m_functionCode); - ctx.diagArea().setHeader(SQL_DIAG_DYNAMIC_FUNCTION_CODE, functionCode); -} - -bool -StmtArea::useSchemaCon(Ctx& ctx, bool use) -{ - if (m_useSchemaCon != use) - if (! m_connArea.useSchemaCon(ctx, use)) - return false; - m_useSchemaCon = use; - return true; -} - -bool -StmtArea::useConnection(Ctx& ctx, bool use) -{ - if (m_useConnection != use) - if (! m_connArea.useConnection(ctx, use)) - return false; - m_useConnection = use; - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/StmtArea.hpp b/storage/ndb/src/old_files/client/odbc/common/StmtArea.hpp deleted file mode 100644 index a88c6d36e6d6651db26fad130df860176600fcab..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/StmtArea.hpp +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_StmtArea_hpp -#define ODBC_COMMON_StmtArea_hpp - -#include <common/common.hpp> -#include "ConnArea.hpp" -#include "StmtInfo.hpp" -#include "DescArea.hpp" - -class PlanTree; -class ExecTree; - -/** - * @class StmtArea - * @brief Public part of statement handle - */ -class StmtArea { -public: - // state between ODBC function calls - enum State { - Free = 1, // not in use - Prepared = 2, // statement prepared, maybe unbound - NeedData = 3, // executed, SQLParamData expected - Open = 4 // cursor open - }; - // connection area shared by all statements - ConnArea& connArea(); - State getState() const; - // SQL text - const BaseString& sqlText(); - BaseString& nativeText(); - // allocate or unallocate connections if necessary - bool useSchemaCon(Ctx& ctx, bool use); - bool useConnection(Ctx& ctx, bool use); - // statement info - StmtInfo& stmtInfo(); - DescArea& descArea(DescUsage u); - unsigned unbound() const; - // set row count here and in diagnostics - void setRowCount(Ctx& ctx, CountType rowCount); - CountType getRowCount() const; - // raw tuple count (tuples fetched from NDB) - void resetTuplesFetched(); - void incTuplesFetched(); - CountType getTuplesFetched() const; - // set dynamic function in StmtInfo only (at prepare) - void setFunction(Ctx& ctx, const char* function, SQLINTEGER functionCode); - // set dynamic function in diagnostics (at execute) - void setFunction(Ctx& ctx); -protected: - friend class CodeGen; - friend class Executor; - friend class Plan_root; - StmtArea(ConnArea& connArea); - ~StmtArea(); - void free(Ctx& ctx); - ConnArea& m_connArea; - State m_state; - BaseString m_sqlText; - BaseString m_nativeText; - bool m_useSchemaCon; - bool m_useConnection; - StmtInfo m_stmtInfo; - // plan tree output from parser and rewritten by analyze - PlanTree* m_planTree; - // exec tree output from analyze - ExecTree* m_execTree; - // pointers within HandleDesc allocated via HandleStmt - DescArea* m_descArea[1+4]; - // parameters with unbound SQL type - unsigned m_unbound; - CountType m_rowCount; - CountType m_tuplesFetched; -}; - -inline ConnArea& -StmtArea::connArea() -{ - return m_connArea; -} - -inline StmtArea::State -StmtArea::getState() const -{ - return m_state; -} - -inline const BaseString& -StmtArea::sqlText() { - return m_sqlText; -} - -inline BaseString& -StmtArea::nativeText() { - return m_nativeText; -} - -inline StmtInfo& -StmtArea::stmtInfo() -{ - return m_stmtInfo; -} - -inline DescArea& -StmtArea::descArea(DescUsage u) -{ - ctx_assert(1 <= u && u <= 4); - ctx_assert(m_descArea[u] != 0); - return *m_descArea[u]; -} - -inline unsigned -StmtArea::unbound() const -{ - return m_unbound; -} - -inline CountType -StmtArea::getRowCount() const -{ - return m_rowCount; -} - -inline void -StmtArea::resetTuplesFetched() -{ - m_tuplesFetched = 0; -} - -inline void -StmtArea::incTuplesFetched() -{ - m_tuplesFetched++; -} - -inline CountType -StmtArea::getTuplesFetched() const -{ - return m_tuplesFetched; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/StmtInfo.cpp b/storage/ndb/src/old_files/client/odbc/common/StmtInfo.cpp deleted file mode 100644 index 3467fb5023e991a30df1774f0327e92f9988b8f0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/StmtInfo.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "StmtInfo.hpp" - -const char* -StmtInfo::getDesc() const -{ - switch (m_name) { - case Stmt_name_select: - return "select"; - case Stmt_name_insert: - return "insert"; - case Stmt_name_update: - return "update"; - case Stmt_name_delete: - return "delete"; - case Stmt_name_create_table: - return "create table"; - case Stmt_name_create_index: - return "create index"; - case Stmt_name_drop_table: - return "drop table"; - case Stmt_name_drop_index: - return "drop index"; - default: - ctx_assert(false); - break; - } - return ""; -} - -StmtType -StmtInfo::getType() const -{ - StmtType type = Stmt_type_undef; - switch (m_name) { - case Stmt_name_select: // query - type = Stmt_type_query; - break; - case Stmt_name_insert: // DML - case Stmt_name_update: - case Stmt_name_delete: - type = Stmt_type_DML; - break; - case Stmt_name_create_table: // DDL - case Stmt_name_create_index: - case Stmt_name_drop_table: - case Stmt_name_drop_index: - type = Stmt_type_DDL; - break; - default: - ctx_assert(false); - break; - } - return type; -} - -void -StmtInfo::free(Ctx& ctx) -{ - m_name = Stmt_name_undef; - m_function = ""; - m_functionCode = SQL_DIAG_UNKNOWN_STATEMENT; -} diff --git a/storage/ndb/src/old_files/client/odbc/common/StmtInfo.hpp b/storage/ndb/src/old_files/client/odbc/common/StmtInfo.hpp deleted file mode 100644 index 9cd489be6daf18aa0e4abb3c40a5f4421960f0d3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/StmtInfo.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_StmtInfo_hpp -#define ODBC_COMMON_StmtInfo_hpp - -#include <common/common.hpp> - -// general type (determined by SQL command) -enum StmtType { - Stmt_type_undef = 0, - Stmt_type_query, // select - Stmt_type_DML, // insert, update, delete - Stmt_type_DDL, // create, drop, alter table - Stmt_type_info // virtual query -}; - -// specific SQL command (first 1-2 words) -enum StmtName { - Stmt_name_undef = 0, - Stmt_name_select, - Stmt_name_insert, - Stmt_name_update, - Stmt_name_delete, - Stmt_name_create_table, - Stmt_name_create_index, - Stmt_name_drop_table, - Stmt_name_drop_index -}; - -/** - * @class StmtInfo - * @brief Statement Info - * - * Statement info. This is a separate class which could - * be used in cases not tied to statement execution. - */ -class StmtInfo { -public: - StmtInfo(); - void setName(StmtName name); - StmtName getName() const; - const char* getDesc() const; - StmtType getType() const; - void free(Ctx& ctx); -private: - friend class StmtArea; - StmtName m_name; - const char* m_function; // not allocated - SQLINTEGER m_functionCode; -}; - -inline -StmtInfo::StmtInfo() : - m_name(Stmt_name_undef), - m_function(""), - m_functionCode(SQL_DIAG_UNKNOWN_STATEMENT) -{ -} - -inline void -StmtInfo::setName(StmtName name) -{ - m_name = name; -} - -inline StmtName -StmtInfo::getName() const -{ - return m_name; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/common/common.cpp b/storage/ndb/src/old_files/client/odbc/common/common.cpp deleted file mode 100644 index 73d14c82efe56a1c8b973eb2c4c2e00d3cf2f5ee..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/common.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "common.hpp" diff --git a/storage/ndb/src/old_files/client/odbc/common/common.hpp b/storage/ndb/src/old_files/client/odbc/common/common.hpp deleted file mode 100644 index d2f243b643759f06d8752cbec6b890c9aebccb61..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/common/common.hpp +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_COMMON_common_hpp -#define ODBC_COMMON_common_hpp - -#define stpcpy stpcpy -#include <ndb_global.h> -#undef swap - -// misc defs - -#ifdef NDB_GCC // only for odbc -#define PRINTFLIKE(i,j) __attribute__ ((format (printf, i, j))) -#else -#define PRINTFLIKE(i,j) -#endif - -// odbc defs - -#define ODBCVER 0x0351 - -#ifdef NDB_WIN32 -#include <windows.h> -#endif - -extern "C" { -#include <sqlext.h> -} -// some types which may be missing -#ifndef SQL_BLOB -#define SQL_BLOB 30 -#endif -#ifndef SQL_BLOB_LOCATOR -#define SQL_BLOB_LOCATOR 31 -#endif -#ifndef SQL_CLOB -#define SQL_CLOB 40 -#endif -#ifndef SQL_CLOB_LOCATOR -#define SQL_CLOB_LOCATOR 41 -#endif - -// until real blobs use Varchar of this size -#define FAKE_BLOB_SIZE 2000 - -#define SQL_HANDLE_ROOT 0 // assume real handles != 0 - -enum OdbcHandle { - Odbc_handle_root = 0, // not an odbc handle - Odbc_handle_env = 1, - Odbc_handle_dbc = 2, - Odbc_handle_stmt = 4, - Odbc_handle_desc = 8, - Odbc_handle_all = (1|2|4|8) -}; - -// ndb defs - -#undef BOOL -#include <ndb_types.h> -// this info not yet on api side -#include <kernel/ndb_limits.h> -#include <ndb_version.h> - -#ifndef MAX_TAB_NAME_SIZE -#define MAX_TAB_NAME_SIZE 128 -#endif - -#ifndef MAX_ATTR_NAME_SIZE -#define MAX_ATTR_NAME_SIZE 32 -#endif - -#ifndef MAX_ATTR_DEFAULT_VALUE_SIZE -#define MAX_ATTR_DEFAULT_VALUE_SIZE 128 -#endif - -typedef Uint32 NdbAttrId; -typedef Uint64 CountType; - -// ndb odbc defs - -#define NDB_ODBC_COMPONENT_VENDOR "[MySQL]" -#define NDB_ODBC_COMPONENT_DRIVER "[ODBC driver]" -#define NDB_ODBC_COMPONENT_DATABASE "[NDB Cluster]" - -#define NDB_ODBC_VERSION_MAJOR 0 -#define NDB_ODBC_VERSION_MINOR 22 -#define NDB_ODBC_VERSION_STRING "0.22" - -// reserved error codes for non-NDB errors -#define NDB_ODBC_ERROR_MIN 5000 -#define NDB_ODBC_ERROR_MAX 5100 - -// maximum log level compiled in -#ifdef VM_TRACE -#define NDB_ODBC_MAX_LOG_LEVEL 5 -#else -#define NDB_ODBC_MAX_LOG_LEVEL 3 -#endif - -// driver specific statement attribute for number of NDB tuples fetched -#define SQL_ATTR_NDB_TUPLES_FETCHED 66601 - -#include <BaseString.hpp> -#include <common/Sqlstate.hpp> -#include <common/Ctx.hpp> - -#undef assert - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.cpp deleted file mode 100644 index 433347c9a70a8b744fda0821cb48ad1720b3a7bc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/ConnArea.hpp> -#include "DictCatalog.hpp" -#include "DictSchema.hpp" - -DictCatalog::~DictCatalog() -{ - for (Schemas::iterator i = m_schemas.begin(); i != m_schemas.end(); i++) { - delete *i; - *i = 0; - } -} - -DictSchema* -DictCatalog::findSchema(Ctx& ctx, const BaseString& name) -{ - for (Schemas::iterator i = m_schemas.begin(); i != m_schemas.end(); i++) { - DictSchema* schema = *i; - ctx_assert(schema != 0); - if (strcmp(schema->getName().c_str(), name.c_str()) == 0) - return schema; - } - ctx_assert(strcmp(name.c_str(), "NDB") == 0); - DictSchema* schema = new DictSchema(m_connArea, "NDB"); - m_schemas.push_back(schema); - return schema; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.hpp deleted file mode 100644 index 5452990a51b31adeb4f968e15bf52679c060cd3f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictCatalog.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictCatalog_hpp -#define ODBC_DICTIONARY_DictCatalog_hpp - -#include <list> -#include <common/common.hpp> -#include "DictSchema.hpp" - -class Ctx; -class ConnArea; -class DictSchema; - -/** - * @class DictCatalog - * @brief Collection of schemas - */ -class DictCatalog { -public: - DictCatalog(const ConnArea& connArea); - ~DictCatalog(); - const ConnArea& connArea() const; - DictSchema* findSchema(Ctx& ctx, const BaseString& name); - void addSchema(DictSchema* schema); -protected: - const ConnArea& m_connArea; - typedef std::list<DictSchema*> Schemas; - Schemas m_schemas; -}; - -inline -DictCatalog::DictCatalog(const ConnArea& connArea) : - m_connArea(connArea) -{ -} - -inline const ConnArea& -DictCatalog::connArea() const -{ - return m_connArea; -} - -inline void -DictCatalog::addSchema(DictSchema* schema) -{ - m_schemas.push_back(schema); - schema->setParent(this); -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.cpp deleted file mode 100644 index fa0128f1ddb16a799462bc9c1dca0ebbba3923bd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DictColumn.hpp" - -DictColumn::~DictColumn() -{ - delete[] m_defaultValue; - m_defaultValue = 0; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.hpp deleted file mode 100644 index 945fb86367b8e961b5528407607e6f1ba80cdadc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictColumn.hpp +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictColumn_hpp -#define ODBC_DICTIONARY_DictColumn_hpp - -#include <common/common.hpp> -#include <common/DataType.hpp> - -class Ctx; -class SqlType; -class ConnArea; -class DictTable; - -/** - * @class DictColumn - * @brief Table column - */ -class DictColumn { -public: - DictColumn(const ConnArea& connArea, const BaseString& name, const SqlType& sqlType); - ~DictColumn(); - const BaseString& getName() const; - const SqlType& sqlType() const; - void setPosition(unsigned position); - unsigned getPosition() const; - void setParent(DictTable* parent); - DictTable* getParent() const; - NdbAttrId getAttrId() const; - bool isKey() const; - bool isTupleId() const; - bool isAutoIncrement() const; - const char* getDefaultValue() const; -protected: - friend class DictSys; - friend class DictTable; - const ConnArea& m_connArea; - const BaseString m_name; - SqlType m_sqlType; - unsigned m_position; - DictTable* m_parent; - bool m_key; // part of key - bool m_tupleId; // the tuple id - bool m_autoIncrement; - const char* m_defaultValue; -}; - -inline -DictColumn::DictColumn(const ConnArea& connArea, const BaseString& name, const SqlType& sqlType) : - m_connArea(connArea), - m_name(name), - m_sqlType(sqlType), - m_position(0), - m_parent(0), - m_key(false), - m_tupleId(false), - m_autoIncrement(false), - m_defaultValue(0) -{ -} - -inline const SqlType& -DictColumn::sqlType() const -{ - return m_sqlType; -} - -inline void -DictColumn::setPosition(unsigned position) -{ - ctx_assert(position != 0); - m_position = position; -} - -inline unsigned -DictColumn::getPosition() const -{ - return m_position; -} - -inline void -DictColumn::setParent(DictTable* parent) -{ - m_parent = parent; -} - -inline DictTable* -DictColumn::getParent() const -{ - return m_parent; -} - -inline const BaseString& -DictColumn::getName() const -{ - return m_name; -} - -inline NdbAttrId -DictColumn::getAttrId() const -{ - ctx_assert(m_position != 0); - return static_cast<NdbAttrId>(m_position - 1); -} - -inline bool -DictColumn::isKey() const -{ - return m_key; -} - -inline bool -DictColumn::isTupleId() const -{ - return m_tupleId; -} - -inline bool -DictColumn::isAutoIncrement() const -{ - return m_autoIncrement; -} - -inline const char* -DictColumn::getDefaultValue() const -{ - return m_defaultValue; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.cpp deleted file mode 100644 index 95d93318902af1402119b584436bdfa7f5355b2b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "DictTable.hpp" -#include "DictIndex.hpp" - -DictIndex::~DictIndex() -{ -} - -void -DictIndex::setColumn(unsigned i, DictColumn* column) -{ - ctx_assert(1 <= i && i <= m_size); - m_columns[i] = column; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.hpp deleted file mode 100644 index 7ba46daaae3a18c27b155e0e6d417d63c7801fc2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictIndex.hpp +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictIndex_hpp -#define ODBC_DICTIONARY_DictIndex_hpp - -#include <vector> -#include <common/common.hpp> -#include "DictColumn.hpp" - -class Ctx; -class ConnArea; -class DictTable; -class DictColumn; -class DictIndex; - -/** - * @class DictIndex - * @brief Database table - */ -class DictIndex { - friend class DictSchema; -public: - DictIndex(const ConnArea& connArea, const BaseString& name, NdbDictionary::Object::Type type, unsigned size); - ~DictIndex(); - NdbDictionary::Object::Type getType() const; - unsigned getSize() const; - void setTable(DictTable* table); - DictTable* getTable() const; - void setColumn(unsigned i, DictColumn* column); - DictColumn* getColumn(unsigned i) const; - const BaseString& getName() const; - DictColumn* findColumn(const BaseString& name) const; -protected: - const ConnArea& m_connArea; - const BaseString m_name; - const NdbDictionary::Object::Type m_type; - const unsigned m_size; - DictSchema* m_parent; - DictTable* m_table; - typedef std::vector<DictColumn*> Columns; // pointers to table columns - Columns m_columns; -}; - -inline -DictIndex::DictIndex(const ConnArea& connArea, const BaseString& name, NdbDictionary::Object::Type type, unsigned size) : - m_connArea(connArea), - m_name(name), - m_type(type), - m_size(size), - m_parent(0), - m_columns(1 + size) -{ -} - -inline NdbDictionary::Object::Type -DictIndex::getType() const -{ - return m_type; -} - -inline unsigned -DictIndex::getSize() const -{ - ctx_assert(m_columns.size() == 1 + m_size); - return m_size; -} - -inline void -DictIndex::setTable(DictTable* table) -{ - m_table = table; -} - -inline DictTable* -DictIndex::getTable() const -{ - return m_table; -} - -inline DictColumn* -DictIndex::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_size); - ctx_assert(m_columns[i] != 0); - return m_columns[i]; -} - -inline const BaseString& -DictIndex::getName() const -{ - return m_name; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.cpp deleted file mode 100644 index 91939cb2f269667aa44ae99519ae4baebb7eab8d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/ConnArea.hpp> -#include "DictCatalog.hpp" -#include "DictSchema.hpp" -#include "DictTable.hpp" -#include "DictTable.hpp" -#include "DictColumn.hpp" -#include "DictIndex.hpp" -#include "DictSys.hpp" - -DictSchema::~DictSchema() -{ - for (Tables::iterator i = m_tables.begin(); i != m_tables.end(); i++) { - delete *i; - *i = 0; - } -} - -DictTable* -DictSchema::findTable(const BaseString& name) -{ - for (Tables::iterator i = m_tables.begin(); i != m_tables.end(); i++) { - DictTable* table = *i; - ctx_assert(table != 0); - if (strcmp(table->getName().c_str(), name.c_str()) == 0) - return table; - } - return 0; -} - -void -DictSchema::deleteTable(Ctx& ctx, const BaseString& name) -{ - Tables::iterator i = m_tables.begin(); - while (i != m_tables.end()) { - DictTable* table = *i; - ctx_assert(table != 0); - if (strcmp(table->getName().c_str(), name.c_str()) == 0) { - ctx_log2(("purge table %s from dictionary", name.c_str())); - delete table; - Tables::iterator j = i; - i++; - m_tables.erase(j); - break; - } - i++; - } -} - -void -DictSchema::deleteTableByIndex(Ctx& ctx, const BaseString& indexName) -{ - DictTable* foundTable = 0; - for (Tables::iterator i = m_tables.begin(); i != m_tables.end(); i++) { - DictTable* table = *i; - ctx_assert(table != 0); - for (unsigned k = 1; k <= table->indexCount(); k++) { - const DictIndex* index = table->getIndex(k); - if (strcmp(index->getName().c_str(), indexName.c_str()) == 0) { - foundTable = table; - break; - } - } - if (foundTable != 0) - break; - } - if (foundTable != 0) - deleteTable(ctx, foundTable->getName()); -} - -DictTable* -DictSchema::loadTable(Ctx& ctx, const BaseString& name) -{ - ctx_log4(("%s: load from NDB", name.c_str())); - Ndb* ndb = m_connArea.ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return 0; - } - const NdbDictionary::Table* ndbTable = ndbDictionary->getTable(name.c_str()); - if (ndbTable == 0) { - const NdbError& ndbError = ndbDictionary->getNdbError(); - if (ndbError.code == 709) { - // try built-in system table - DictTable* table = DictSys::loadTable(ctx, this, name); - if (table != 0) { - return table; - } - ctx_log3(("%s: not found in NDB", name.c_str())); - return 0; - } - ctx.pushStatus(ndbDictionary->getNdbError(), "getTable"); - return 0; - } - int nattr = ndbTable->getNoOfColumns(); - DictTable* table = new DictTable(m_connArea, name, nattr); - for (unsigned position = 1; position <= (unsigned)nattr; position++) { - DictColumn* column = table->loadColumn(ctx, position); - if (column == 0) - return 0; - ctx_log4(("add column %u %s", column->getPosition(), column->getName().c_str())); - } - // load indexes - NdbDictionary::Dictionary::List list; - if (ndbDictionary->listIndexes(list, name.c_str()) == -1) { - ctx.pushStatus(ndbDictionary->getNdbError(), "listIndexes"); - return 0; - } - for (unsigned i = 0; i < list.count; i++) { - const NdbDictionary::Dictionary::List::Element& elt = list.elements[i]; - if (elt.state != NdbDictionary::Object::StateOnline) { - ctx_log1(("%s: skip broken index %s", name.c_str(), elt.name)); - continue; - } - if (elt.type != NdbDictionary::Object::UniqueHashIndex && elt.type != NdbDictionary::Object::OrderedIndex) { - ctx_log1(("%s: skip unknown index type %s", name.c_str(), elt.name)); - continue; - } - const NdbDictionary::Index* ndbIndex = ndbDictionary->getIndex(elt.name, name.c_str()); - if (ndbIndex == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "table %s getIndex %s", name.c_str(), elt.name); - return 0; - } - DictIndex* index = new DictIndex(m_connArea, elt.name, elt.type, ndbIndex->getNoOfIndexColumns()); - for (unsigned j = 0; j < index->getSize(); j++) { - const char* cname = ndbIndex->getIndexColumn(j); - ctx_assert(cname != 0); - DictColumn* icolumn = table->findColumn(cname); - ctx_assert(icolumn != 0); - index->setColumn(1 + j, icolumn); - } - table->addIndex(index); - ctx_log3(("%s: index %s: load from NDB done", name.c_str(), elt.name)); - } - addTable(table); - ctx_log3(("%s: load from NDB done", name.c_str())); - return table; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.hpp deleted file mode 100644 index 099352edbb97126c3ba816b4136eccab5d5e17ec..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictSchema.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictSchema_hpp -#define ODBC_DICTIONARY_DictSchema_hpp - -#include <list> -#include <common/common.hpp> -#include "DictTable.hpp" - -class Ctx; -class ConnArea; -class DictCatalog; -class DictTable; - -/** - * @class DictSchema - * @brief Collection of tables - */ -class DictSchema { -public: - DictSchema(const ConnArea& connArea, const BaseString& name); - ~DictSchema(); - const BaseString& getName() const; - void setParent(DictCatalog* parent); - DictCatalog* getParent() const; - void addTable(DictTable* table); - DictTable* findTable(const BaseString& name); - DictTable* loadTable(Ctx& ctx, const BaseString& name); - void deleteTable(Ctx& ctx, const BaseString& name); - void deleteTableByIndex(Ctx& ctx, const BaseString& indexName); -protected: - friend class DictCatalog; - friend class DictSys; - const ConnArea& m_connArea; - BaseString m_name; - DictCatalog* m_parent; - typedef std::list<DictTable*> Tables; - Tables m_tables; -}; - -inline -DictSchema::DictSchema(const ConnArea& connArea, const BaseString& name) : - m_connArea(connArea), - m_name(name), - m_parent(0) -{ - ctx_assert(strcmp(name.c_str(), "NDB") == 0); -} - -inline const BaseString& -DictSchema::getName() const -{ - return m_name; -} - -inline void -DictSchema::setParent(DictCatalog* parent) -{ - m_parent = parent; -} - -inline DictCatalog* -DictSchema::getParent() const -{ - return m_parent; -} - -inline void -DictSchema::addTable(DictTable* table) -{ - m_tables.push_back(table); - table->setParent(this); -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.cpp deleted file mode 100644 index 1ceef66ee57b131727f0255749a3f3c83498f9a6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.cpp +++ /dev/null @@ -1,433 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/ConnArea.hpp> -#include "DictSchema.hpp" -#include "DictTable.hpp" -#include "DictColumn.hpp" -#include "DictSys.hpp" - -#define arraySize(x) sizeof(x)/sizeof(x[0]) - -#define MAX_SCHEMA_NAME_LENGTH 32 -#define MAX_REMARKS_LENGTH 256 - -// typeinfo - -static DictSys::Column -column_ODBC_TYPEINFO[] = { - DictSys::Column( - 1, - "TYPE_NAME", - false, - SqlType(SqlType::Varchar, 20, false) - ), - DictSys::Column( - 2, - "DATA_TYPE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 3, - "COLUMN_SIZE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 4, - "LITERAL_PREFIX", - false, - SqlType(SqlType::Varchar, 1, true) - ), - DictSys::Column( - 5, - "LITERAL_SUFFIX", - false, - SqlType(SqlType::Varchar, 1, true) - ), - DictSys::Column( - 6, - "CREATE_PARAMS", - false, - SqlType(SqlType::Varchar, 20, true) - ), - DictSys::Column( - 7, - "NULLABLE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 8, - "CASE_SENSITIVE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 9, - "SEARCHABLE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 10, - "UNSIGNED_ATTRIBUTE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 11, - "FIXED_PREC_SCALE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 12, - "AUTO_UNIQUE_VALUE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 13, - "LOCAL_TYPE_NAME", - false, - SqlType(SqlType::Varchar, 20, true) - ), - DictSys::Column( - 14, - "MINIMUM_SCALE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 15, - "MAXIMUM_SCALE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 16, - "SQL_DATA_TYPE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 17, - "SQL_DATETIME_SUB", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 18, - "NUM_PREC_RADIX", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 19, - "INTERVAL_PRECISION", - false, - SqlType(SqlType::Integer, true) - ) -}; - -static DictSys::Table -table_ODBC_TYPEINFO( - DictSys::OdbcTypeinfo, - "ODBC$TYPEINFO", - column_ODBC_TYPEINFO, - arraySize(column_ODBC_TYPEINFO) -); - -// tables - -static DictSys::Column -column_ODBC_TABLES[] = { - // perl docs/systables.pl tables -c - DictSys::Column( - 1, - "TABLE_CAT", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 2, - "TABLE_SCHEM", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 3, - "TABLE_NAME", - false, - SqlType(SqlType::Varchar, MAX_TAB_NAME_SIZE, false) - ), - DictSys::Column( - 4, - "TABLE_TYPE", - false, - SqlType(SqlType::Varchar, 20, false) - ), - DictSys::Column( - 5, - "REMARKS", - false, - SqlType(SqlType::Varchar, MAX_REMARKS_LENGTH, true) - ) -}; - -static DictSys::Table -table_ODBC_TABLES( - DictSys::OdbcTables, - "ODBC$TABLES", - column_ODBC_TABLES, - arraySize(column_ODBC_TABLES) -); - -// columns - -static DictSys::Column -column_ODBC_COLUMNS[] = { - // perl docs/systables.pl columns -c - DictSys::Column( - 1, - "TABLE_CAT", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 2, - "TABLE_SCHEM", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 3, - "TABLE_NAME", - false, - SqlType(SqlType::Varchar, MAX_TAB_NAME_SIZE, false) - ), - DictSys::Column( - 4, - "COLUMN_NAME", - false, - SqlType(SqlType::Varchar, MAX_ATTR_NAME_SIZE, false) - ), - DictSys::Column( - 5, - "DATA_TYPE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 6, - "TYPE_NAME", - false, - SqlType(SqlType::Varchar, 20, false) - ), - DictSys::Column( - 7, - "COLUMN_SIZE", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 8, - "BUFFER_LENGTH", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 9, - "DECIMAL_DIGITS", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 10, - "NUM_PREC_RADIX", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 11, - "NULLABLE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 12, - "REMARKS", - false, - SqlType(SqlType::Varchar, MAX_REMARKS_LENGTH, true) - ), - DictSys::Column( - 13, - "COLUMN_DEF", - false, - SqlType(SqlType::Varchar, MAX_ATTR_DEFAULT_VALUE_SIZE, true) - ), - DictSys::Column( - 14, - "SQL_DATA_TYPE", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 15, - "SQL_DATETIME_SUB", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 16, - "CHAR_OCTET_LENGTH", - false, - SqlType(SqlType::Integer, true) - ), - DictSys::Column( - 17, - "ORDINAL_POSITION", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 18, - "IS_NULLABLE", - false, - SqlType(SqlType::Varchar, 3, true) - ) -}; - -static DictSys::Table -table_ODBC_COLUMNS( - DictSys::OdbcColumns, - "ODBC$COLUMNS", - column_ODBC_COLUMNS, - arraySize(column_ODBC_COLUMNS) -); - -// primarykeys - -static DictSys::Column -column_ODBC_PRIMARYKEYS[] = { - DictSys::Column( - 1, - "TABLE_CAT", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 2, - "TABLE_SCHEM", - false, - SqlType(SqlType::Varchar, MAX_SCHEMA_NAME_LENGTH, true) - ), - DictSys::Column( - 3, - "TABLE_NAME", - false, - SqlType(SqlType::Varchar, MAX_TAB_NAME_SIZE, false) - ), - DictSys::Column( - 4, - "COLUMN_NAME", - false, - SqlType(SqlType::Varchar, MAX_ATTR_NAME_SIZE, false) - ), - DictSys::Column( - 5, - "KEY_SEQ", - false, - SqlType(SqlType::Integer, false) - ), - DictSys::Column( - 6, - "PK_NAME", - false, - SqlType(SqlType::Varchar, MAX_ATTR_NAME_SIZE, true) - ) -}; - -static DictSys::Table -table_ODBC_PRIMARYKEYS( - DictSys::OdbcPrimarykeys, - "ODBC$PRIMARYKEYS", - column_ODBC_PRIMARYKEYS, - arraySize(column_ODBC_PRIMARYKEYS) -); - -static DictSys::Column -column_DUAL[] = { - DictSys::Column( - 1, - "DUMMY", - false, - SqlType(SqlType::Varchar, 1, false) - ) -}; - -static DictSys::Table -table_DUAL( - DictSys::Dual, - "DUAL", - column_DUAL, - arraySize(column_DUAL) -); - -// all tables - -static const DictSys::Table* -tableList[] = { - &table_ODBC_TYPEINFO, - &table_ODBC_TABLES, - &table_ODBC_COLUMNS, - &table_ODBC_PRIMARYKEYS, - &table_DUAL -}; - -static const unsigned tableCount = arraySize(tableList); - -DictTable* -DictSys::loadTable(Ctx& ctx, DictSchema* schema, const BaseString& name) -{ - const Table* tp = 0; - for (unsigned i = 0; i < tableCount; i++) { - if (strcmp(tableList[i]->m_name, name.c_str()) == 0) { - tp = tableList[i]; - break; - } - } - if (tp == 0) - return 0; - DictTable* table = new DictTable(schema->m_connArea, tp->m_name, tp->m_columnCount); - table->sysId(tp->m_id); - schema->addTable(table); - for (unsigned position = 1; position <= tp->m_columnCount; position++) { - const Column* cp = &tp->m_columnList[position - 1]; - ctx_assert(cp->m_position == position); - const SqlType& sqlType = cp->m_sqlType; - DictColumn* column = new DictColumn(table->m_connArea, cp->m_name, sqlType); - table->setColumn(position, column); - column->m_key = cp->m_key; - if (column->m_key) - table->m_keys.push_back(column); - } - ctx_log3(("%s: system table defined", name.c_str())); - return table; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.hpp deleted file mode 100644 index e6fa661fd59aebea64488c628e49b7b37975120a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictSys.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictSys_hpp -#define ODBC_DICTIONARY_DictSys_hpp - -#include <common/common.hpp> -#include <common/DataType.hpp> - -class Ctx; -class DictSchema; -class DictTable; -class SqlType; - -/** - * @class DictSys - * @brief Built-in tables (replaced later by real systables) - */ -class DictSys { -public: - enum Id { - Undef = 0, - OdbcTypeinfo = 1, - OdbcTables = 2, - OdbcColumns = 3, - OdbcPrimarykeys = 4, - Dual = 5 - }; - struct Column { - Column(unsigned position, const char* name, bool key, const SqlType& sqlType); - const unsigned m_position; - const char* const m_name; - const bool m_key; - const SqlType m_sqlType; - }; - struct Table { - Table(Id id, const char* name, const Column* columnList, unsigned columnCount); - const Id m_id; - const char* m_name; - const Column* const m_columnList; - const unsigned m_columnCount; - }; - static DictTable* loadTable(Ctx& ctx, DictSchema* schema, const BaseString& name); -}; - -inline -DictSys::Column::Column(unsigned position, const char* name, bool key, const SqlType& sqlType) : - m_position(position), - m_name(name), - m_key(key), - m_sqlType(sqlType) -{ -} - -inline -DictSys::Table::Table(DictSys::Id id, const char* name, const Column* columnList, unsigned columnCount) : - m_id(id), - m_name(name), - m_columnList(columnList), - m_columnCount(columnCount) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp deleted file mode 100644 index 4db7d3b3aecaca7e15a707e87319abd8b3a3a567..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/common.hpp> -#include <common/Ctx.hpp> -#include <common/ConnArea.hpp> -#include "DictSchema.hpp" -#include "DictTable.hpp" -#include "DictColumn.hpp" -#include "DictColumn.hpp" - -DictTable::~DictTable() -{ - for (Columns::iterator i = m_columns.begin(); i != m_columns.end(); i++) { - delete *i; - *i = 0; - } - for (Indexes::iterator i = m_indexes.begin(); i != m_indexes.end(); i++) { - delete *i; - *i = 0; - } -} - -DictColumn* -DictTable::findColumn(const BaseString& name) const -{ - for (unsigned i = 1; i <= getSize(); i++) { - DictColumn* column = m_columns[i]; - ctx_assert(column != 0); - if (strcmp(column->getName().c_str(), name.c_str()) == 0) - return column; - } - return 0; -} - -DictColumn* -DictTable::loadColumn(Ctx& ctx, unsigned position) -{ - Ndb* ndb = m_connArea.ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return 0; - } - const NdbDictionary::Table* ndbTable = ndbDictionary->getTable(m_name.c_str()); - ctx_assert(ndbTable != 0); - ctx_assert(position != 0); - NdbAttrId attrId = position - 1; - const NdbDictionary::Column* ndbColumn = ndbTable->getColumn(attrId); - ctx_assert(ndbColumn != 0); - SqlType sqlType(ctx, ndbColumn); - if (! ctx.ok()) - return 0; - DictColumn* column = new DictColumn(m_connArea, ndbColumn->getName(), sqlType); - setColumn(position, column); - column->m_key = column->m_tupleId = false; - if (ndbColumn->getPrimaryKey()) - column->m_key = true; - if (ndbColumn->getTupleKey()) - column->m_key = column->m_tupleId = true; - if (column->m_key) - m_keys.push_back(column); - // props - const char* value; - column->m_autoIncrement = false; - if (ndbColumn->getAutoIncrement()) - column->m_autoIncrement = true; - column->m_defaultValue = 0; - if ((value = ndbColumn->getDefaultValue()) != 0 && strlen(value) != 0) - column->m_defaultValue = strcpy(new char[strlen(value) + 1], value); - ctx_log4(("column %u %s keyFlag=%d idFlag=%d", position, ndbColumn->getName(), column->m_key, column->m_tupleId)); - if (column->m_tupleId) - m_tupleId = position; - if (column->m_autoIncrement) - m_autoIncrement = position; - return column; -} diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.hpp b/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.hpp deleted file mode 100644 index 5cecfff956265e67bcfe0f70f490c27a08a339e0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/DictTable.hpp +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DICTIONARY_DictTable_hpp -#define ODBC_DICTIONARY_DictTable_hpp - -#include <vector> -#include <list> -#include <common/common.hpp> -#include "DictColumn.hpp" -#include "DictIndex.hpp" -#include "DictSys.hpp" - -class Ctx; -class ConnArea; -class DictSchema; -class DictColumn; -class DictIndex; - -/** - * @class DictTable - * @brief Database table - */ -class DictTable { - friend class DictSchema; -public: - DictTable(const ConnArea& connArea, const BaseString& name, unsigned size); - ~DictTable(); - unsigned getSize() const; - void setParent(DictSchema* parent); - DictSchema* getParent() const; - void setColumn(unsigned i, DictColumn* column); - DictColumn* getColumn(unsigned i) const; - const BaseString& getName() const; - DictColumn* findColumn(const BaseString& name) const; - DictColumn* loadColumn(Ctx& ctx, unsigned position); - unsigned keyCount() const; - DictColumn* getKey(unsigned i) const; - unsigned tupleId() const; - unsigned autoIncrement() const; - void sysId(DictSys::Id id); - DictSys::Id sysId() const; - // indexes - void addIndex(DictIndex* index); - unsigned indexCount() const; - const DictIndex* getIndex(unsigned i) const; // indexed from 1 -protected: - friend class DictSys; - const ConnArea& m_connArea; - const BaseString m_name; - unsigned m_size; - DictSchema* m_parent; - typedef std::vector<DictColumn*> Columns; - Columns m_columns; - Columns m_keys; - unsigned m_tupleId; // tuple id column - unsigned m_autoIncrement; // autoincrement key - DictSys::Id m_sysId; // built-in system table id (if non-zero) - typedef std::vector<DictIndex*> Indexes; - Indexes m_indexes; -}; - -inline -DictTable::DictTable(const ConnArea& connArea, const BaseString& name, unsigned size) : - m_connArea(connArea), - m_name(name), - m_size(size), - m_parent(0), - m_columns(1 + size), - m_keys(1), // indexed from 1 - m_tupleId(0), - m_autoIncrement(0), - m_sysId(DictSys::Undef), - m_indexes(1) -{ -} - -inline unsigned -DictTable::getSize() const -{ - ctx_assert(m_columns.size() == 1 + m_size); - return m_size; -} - -inline void -DictTable::setParent(DictSchema* parent) -{ - m_parent = parent; -} - -inline DictSchema* -DictTable::getParent() const -{ - return m_parent; -} - -inline void -DictTable::setColumn(unsigned i, DictColumn* column) -{ - ctx_assert(1 <= i && i <= m_size); - m_columns[i] = column; - column->setPosition(i); - column->setParent(this); -} - -inline DictColumn* -DictTable::getColumn(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_size); - ctx_assert(m_columns[i] != 0); - return m_columns[i]; -} - -inline const BaseString& -DictTable::getName() const -{ - return m_name; -} - -inline unsigned -DictTable::keyCount() const -{ - ctx_assert(m_keys.size() >= 1); - return m_keys.size() - 1; -} - -inline DictColumn* -DictTable::getKey(unsigned i) const -{ - ctx_assert(1 <= i && i <= m_keys.size() && m_keys[i] != 0); - return m_keys[i]; -} - -inline unsigned -DictTable::tupleId() const -{ - return m_tupleId; -} - -inline unsigned -DictTable::autoIncrement() const -{ - return m_autoIncrement; -} - -inline void -DictTable::sysId(DictSys::Id id) -{ - m_sysId = id; -} - -inline DictSys::Id -DictTable::sysId() const -{ - return m_sysId; -} - -inline void -DictTable::addIndex(DictIndex* index) -{ - m_indexes.push_back(index); - index->setTable(this); -} - -inline unsigned -DictTable::indexCount() const -{ - ctx_assert(m_indexes.size() >= 1); - return m_indexes.size() - 1; -} - -inline const DictIndex* -DictTable::getIndex(unsigned i) const -{ - ctx_assert(1 <= i && i < m_indexes.size() && m_indexes[i] != 0); - return m_indexes[i]; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/dictionary/Makefile b/storage/ndb/src/old_files/client/odbc/dictionary/Makefile deleted file mode 100644 index cdfd3b6ea0c81aa5c49129627e2f455f3ce27b94..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/dictionary/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbcdictionary - -SOURCES = \ - DictCatalog.cpp \ - DictSchema.cpp \ - DictTable.cpp \ - DictColumn.cpp \ - DictIndex.cpp \ - DictSys.cpp - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/docs/class.fig b/storage/ndb/src/old_files/client/odbc/docs/class.fig deleted file mode 100644 index 38c24c1fba4431b1faf0abedae3322e3a6b2144a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/class.fig +++ /dev/null @@ -1,332 +0,0 @@ -#FIG 3.2 -Landscape -Flush left -Inches -A4 -100.00 -Single --2 -1200 2 -6 600 6600 1500 9600 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 600 6600 1500 6600 1500 7200 600 7200 600 6600 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 600 7800 1500 7800 1500 8400 600 8400 600 7800 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 600 9000 1500 9000 1500 9600 600 9600 600 9000 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 900 9000 900 8400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 900 7800 900 7200 -4 0 0 50 0 12 12 0.0000 4 180 420 750 6825 Diag\001 -4 0 0 50 0 12 12 0.0000 4 180 420 750 8025 Diag\001 -4 0 0 50 0 12 12 0.0000 4 135 630 750 8325 Record\001 -4 0 0 50 0 12 12 0.0000 4 180 420 750 9225 Diag\001 -4 0 0 50 0 12 12 0.0000 4 135 525 750 9525 Field\001 -4 0 0 50 0 12 12 0.0000 4 120 420 750 7125 Area\001 --6 -6 2700 6600 3600 9600 -6 2700 6600 3600 9600 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 2700 6600 3600 6600 3600 7200 2700 7200 2700 6600 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 2700 9000 3600 9000 3600 9600 2700 9600 2700 9000 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3000 9000 3000 7200 -4 0 0 50 0 12 12 0.0000 4 120 420 2850 6825 Attr\001 -4 0 0 50 0 12 12 0.0000 4 120 420 2850 9225 Attr\001 -4 0 0 50 0 12 12 0.0000 4 135 525 2850 9525 Field\001 -4 0 0 50 0 12 12 0.0000 4 120 420 2850 7125 Area\001 --6 --6 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 3300 3900 4200 3900 4200 4500 3300 4500 3300 3900 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 3300 2700 4200 2700 4200 3300 3300 3300 3300 2700 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 3300 1500 4200 1500 4200 2100 3300 2100 3300 1500 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 3300 300 4200 300 4200 900 3300 900 3300 300 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 1800 2700 2700 2700 2700 3300 1800 3300 1800 2700 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2 - 1 1 1.00 60.00 120.00 - 3300 1800 3000 1800 -2 1 0 1 0 7 50 0 -1 0.000 0 0 7 0 1 2 - 1 1 1.00 60.00 120.00 - 3300 3000 3000 3000 -2 1 0 1 0 7 50 0 -1 0.000 0 0 7 0 1 2 - 1 1 1.00 60.00 120.00 - 3300 4200 3000 4200 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2 - 1 1 1.00 60.00 120.00 - 1 1 1.00 60.00 120.00 - 4200 4200 4800 4200 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3600 3900 3600 3300 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3600 2700 3600 2100 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3600 1500 3600 900 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 5100 5700 5100 5700 5700 4800 5700 4800 5100 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 2700 5700 2700 5700 3300 4800 3300 4800 2700 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 3900 5700 3900 5700 4500 4800 4500 4800 3900 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2 - 1 1 1.00 60.00 120.00 - 1 1 1.00 60.00 120.00 - 5100 6600 5100 5700 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 6 - 1 1 1.00 60.00 120.00 - 5100 5100 5100 4800 4500 4800 4500 3600 3900 3600 3900 3300 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 - 1 1 1.00 60.00 120.00 - 3600 4500 3600 5400 4800 5400 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 6600 5700 6600 5700 7200 4800 7200 4800 6600 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 7800 5700 7800 5700 8400 4800 8400 4800 7800 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 4800 9000 5700 9000 5700 9600 4800 9600 4800 9000 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5100 9000 5100 8400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5100 7800 5100 7200 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2 - 1 1 1.00 60.00 120.00 - 1 1 1.00 60.00 120.00 - 4200 3000 4800 3000 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 6900 2700 7800 2700 7800 3300 6900 3300 6900 2700 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 6900 1500 7800 1500 7800 2100 6900 2100 6900 1500 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 - 0 0 1.00 60.00 120.00 - 7200 3300 7200 4050 5700 4050 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3 - 0 0 1.00 60.00 120.00 - 11700 3300 11700 4350 5700 4350 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 5100 3900 5100 3300 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 8400 300 9300 300 9300 900 8400 900 8400 300 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 5100 2700 5100 900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2 - 3000 6600 3000 1800 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 6900 5100 7800 5100 7800 6000 6900 6000 6900 5100 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 8400 5100 9300 5100 9300 6000 8400 6000 8400 5100 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 9900 5100 10800 5100 10800 6000 9900 6000 9900 5100 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 11400 5100 12300 5100 12300 6000 11400 6000 11400 5100 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 7800 5550 8400 5550 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9300 5550 9900 5550 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 7500 5100 7500 3300 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 10500 5100 10500 3300 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 12000 5100 12000 3300 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 9900 2700 10800 2700 10800 3300 9900 3300 9900 2700 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 11400 2700 12300 2700 12300 3300 11400 3300 11400 2700 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 11400 1500 12300 1500 12300 2100 11400 2100 11400 1500 -2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 - 9900 1500 10800 1500 10800 2100 9900 2100 9900 1500 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 6900 6600 7800 6600 7800 7200 6900 7200 6900 6600 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 6900 7800 7800 7800 7800 8400 6900 8400 6900 7800 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 8400 6600 9300 6600 9300 7200 8400 7200 8400 6600 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 8400 7800 9300 7800 9300 8400 8400 8400 8400 7800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 4 - 0 0 1.00 60.00 120.00 - 5700 3000 6300 3000 6300 6900 6900 6900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 4 - 0 0 1.00 60.00 120.00 - 5700 4200 6000 4200 6000 8100 6900 8100 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 8400 6900 7800 6900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 8400 8100 7800 8100 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9900 6900 9300 6900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9900 8100 9300 8100 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 6900 10800 6900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 8100 10800 8100 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 11400 6600 12300 6600 12300 7200 11400 7200 11400 6600 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 11400 7800 12300 7800 12300 8400 11400 8400 11400 7800 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 9900 6600 10800 6600 10800 7200 9900 7200 9900 6600 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 9900 7800 10800 7800 10800 8400 9900 8400 9900 7800 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 8400 2700 9300 2700 9300 3300 8400 3300 8400 2700 -2 2 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 8400 1500 9300 1500 9300 2100 8400 2100 8400 1500 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9000 5100 9000 3300 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 7800 3000 8400 3000 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9300 3000 9900 3000 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 7800 1800 8400 1800 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 9300 1800 9900 1800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 3000 10800 3000 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 1800 10800 1800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 5550 10800 5550 -2 4 0 2 0 7 50 0 -1 6.000 0 0 7 0 0 5 - 5700 900 5700 300 4800 300 4800 900 5700 900 -2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 12900 6600 13800 6600 13800 7200 12900 7200 12900 6600 -2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 12900 5100 13800 5100 13800 5700 12900 5700 12900 5100 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 13200 7800 13200 7200 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 13200 6600 13200 5700 -2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5 - 12900 7800 13800 7800 13800 8400 12900 8400 12900 7800 -2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 0 3 - 0 0 1.00 60.00 120.00 - 13200 5100 13200 1800 12300 1800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 4 - 0 0 1.00 60.00 120.00 - 0 0 1.00 60.00 120.00 - 5700 7050 6600 7050 6600 7875 6900 7875 -4 0 0 50 0 12 12 0.0000 4 135 630 3375 525 Handle\001 -4 0 0 50 0 12 12 0.0000 4 135 630 3375 1725 Handle\001 -4 0 0 50 0 12 12 0.0000 4 135 630 3375 2925 Handle\001 -4 0 0 50 0 12 12 0.0000 4 135 630 3375 4125 Handle\001 -4 0 0 50 0 12 12 0.0000 4 120 420 3450 825 Root\001 -4 0 0 50 0 12 12 0.0000 4 120 315 3450 2025 Env\001 -4 0 0 50 0 12 12 0.0000 4 135 315 3450 3225 Dbc\001 -4 0 0 50 0 12 12 0.0000 4 120 420 3450 4425 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 135 630 1875 2925 Handle\001 -4 0 0 50 0 12 12 0.0000 4 120 420 1950 3225 Base\001 -4 0 0 50 0 12 12 0.0000 4 135 630 4875 5325 Handle\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4950 5625 Desc\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4875 3225 Area\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4875 2925 Conn\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4875 4425 Area\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4875 4125 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4950 6825 Desc\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4950 8025 Desc\001 -4 0 0 50 0 12 12 0.0000 4 135 630 4950 8325 Record\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4950 9225 Desc\001 -4 0 0 50 0 12 12 0.0000 4 120 420 4950 7125 Area\001 -4 0 0 50 0 12 12 0.0000 4 135 525 4950 9525 Field\001 -4 0 0 50 0 12 12 0.0000 4 135 735 3675 5925 ird ard\001 -4 0 0 50 0 12 12 0.0000 4 180 735 3675 5625 ipd apd\001 -4 0 0 50 0 12 12 0.0000 4 135 420 6975 2925 Plan\001 -4 0 0 50 0 12 12 0.0000 4 120 420 6975 3225 root\001 -4 0 0 50 0 12 12 0.0000 4 135 420 6975 1725 Plan\001 -4 0 0 50 0 12 12 0.0000 4 120 420 6975 2025 Tree\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 525 Base\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 825 Tree\001 -4 0 0 50 0 12 12 0.0000 4 120 315 5025 675 NDB\001 -4 0 0 50 0 14 14 0.0000 4 195 1755 300 525 Class Diagram\001 -4 0 0 50 0 12 12 0.0000 4 135 420 6975 5325 Plan\001 -4 0 0 50 0 12 12 0.0000 4 135 630 6975 5625 delete\001 -4 0 0 50 0 12 12 0.0000 4 135 840 6975 5925 searched\001 -4 0 0 50 0 12 12 0.0000 4 135 420 8475 5325 Plan\001 -4 0 0 50 0 12 12 0.0000 4 135 630 8475 5625 delete\001 -4 0 0 50 0 12 12 0.0000 4 135 420 8475 5925 full\001 -4 0 0 50 0 12 12 0.0000 4 135 420 9975 5325 Code\001 -4 0 0 50 0 12 12 0.0000 4 135 630 9975 5625 delete\001 -4 0 0 50 0 12 12 0.0000 4 135 420 9975 5925 full\001 -4 0 0 50 0 12 12 0.0000 4 120 315 11475 5325 Run\001 -4 0 0 50 0 12 12 0.0000 4 135 630 11475 5625 delete\001 -4 0 0 50 0 12 12 0.0000 4 135 420 11475 5925 full\001 -4 0 0 50 0 12 12 0.0000 4 120 420 9975 3225 root\001 -4 0 0 50 0 12 12 0.0000 4 120 315 11475 2925 Run\001 -4 0 0 50 0 12 12 0.0000 4 120 420 11475 3225 root\001 -4 0 0 50 0 12 12 0.0000 4 120 315 11475 1725 Run\001 -4 0 0 50 0 12 12 0.0000 4 120 420 11475 2025 Tree\001 -4 0 0 50 0 12 12 0.0000 4 135 420 9975 1725 Code\001 -4 0 0 50 0 12 12 0.0000 4 120 420 9975 2025 Tree\001 -4 0 0 50 0 12 12 0.0000 4 135 420 9975 2925 Code\001 -4 0 0 50 0 12 12 0.0000 4 120 420 6975 6825 Conn\001 -4 0 0 50 0 12 12 0.0000 4 180 735 6975 7125 Catalog\001 -4 0 0 50 0 12 12 0.0000 4 120 420 6975 8025 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 180 735 6975 8325 Catalog\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 6825 Conn\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 8025 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 135 630 8475 7125 Schema\001 -4 0 0 50 0 12 12 0.0000 4 135 630 8475 8325 Schema\001 -4 0 0 50 0 12 12 0.0000 4 120 420 11475 6825 Conn\001 -4 0 0 50 0 12 12 0.0000 4 120 420 11475 8025 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 135 630 11475 7125 Column\001 -4 0 0 50 0 12 12 0.0000 4 135 525 11475 8325 Field\001 -4 0 0 50 0 12 12 0.0000 4 120 420 9975 6825 Conn\001 -4 0 0 50 0 12 12 0.0000 4 120 420 9975 8025 Stmt\001 -4 0 0 50 0 12 12 0.0000 4 135 525 9975 7125 Table\001 -4 0 0 50 0 12 12 0.0000 4 120 315 9975 8325 Row\001 -4 0 0 50 0 12 12 0.0000 4 135 420 8475 1725 Plan\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 2025 Tree\001 -4 0 0 50 0 12 12 0.0000 4 135 420 8475 2925 Plan\001 -4 0 0 50 0 12 12 0.0000 4 120 420 8475 3225 root\001 -4 0 0 50 0 14 11 0.0000 4 180 840 675 825 (prelim)\001 -4 0 0 50 0 12 12 0.0000 4 180 525 6375 1350 input\001 -4 0 0 50 0 12 12 0.0000 4 180 840 7725 1350 optimize\001 -4 0 0 50 0 12 12 0.0000 4 165 630 9375 1350 output\001 -4 0 0 50 0 12 12 0.0000 4 120 735 10650 1350 execute\001 -4 0 0 50 0 12 12 0.0000 4 135 525 12075 1350 fetch\001 -4 0 0 50 0 12 12 0.0000 4 135 630 13050 5325 Result\001 -4 0 0 50 0 12 12 0.0000 4 120 315 13050 5625 Set\001 -4 0 0 50 0 12 12 0.0000 4 135 630 13050 6825 Result\001 -4 0 0 50 0 12 12 0.0000 4 120 315 13125 7125 Row\001 -4 0 0 50 0 12 12 0.0000 4 135 630 13050 8025 Result\001 -4 0 0 50 0 12 12 0.0000 4 135 525 13050 8325 Field\001 diff --git a/storage/ndb/src/old_files/client/odbc/docs/descfield.pl b/storage/ndb/src/old_files/client/odbc/docs/descfield.pl deleted file mode 100644 index 80fef22f303a459e3274494c297575c574dfdc18..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/descfield.pl +++ /dev/null @@ -1,1482 +0,0 @@ -# usage perl Desc.data -# prints template for DescSpec.cpp -use strict; -my $order = 0; - -# XXX do it later - -# -# odbcsqlsetdescfield.htm -# -my $descSpec = { -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLSetDescField</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlsetdescfield"></A>SQLSetDescField</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 3.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLSetDescField</B> sets the value of a single field of a descriptor record.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLSetDescField</B>( -# SQLHDESC <I>DescriptorHandle</I>, -# SQLSMALLINT <I>RecNumber</I>, -# SQLSMALLINT <I>FieldIdentifier</I>, -# SQLPOINTER <I>ValuePtr</I>, -# SQLINTEGER <I>BufferLength</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>DescriptorHandle</I></DT> -# -# <DD>[Input]<BR> -# Descriptor handle.</dd> -# -# <DT><I>RecNumber</I></DT> -# -# <DD>[Input]<BR> -# Indicates the descriptor record containing the field that the application seeks to set. Descriptor records are numbered from 0, with record number 0 being the bookmark record. The <I>RecNumber</I> argument is ignored for header fields.</dd> -# -# <DT><I>FieldIdentifier</I></DT> -# -# <DD>[Input]<BR> -# Indicates the field of the descriptor whose value is to be set. For more information, see "<I>FieldIdentifier</I> Argument" in the "Comments" section.</dd> -# -# <DT><I>ValuePtr</I></DT> -# -# <DD>[Input]<BR> -# Pointer to a buffer containing the descriptor information, or a 4-byte value. The data type depends on the value of <I>FieldIdentifier</I>. If <I>ValuePtr</I> is a 4-byte value, either all four of the bytes are used or just two of the four are used, depending on the value of the <I>FieldIdentifier</I> argument.</dd> -# -# <DT><I>BufferLength</I></DT> -# -# <DD>[Input]<BR> -# If <I>FieldIdentifier</I> is an ODBC-defined field and <I>ValuePtr</I> points to a character string or a binary buffer, this argument should be the length of *<I>ValuePtr</I>. If <I>FieldIdentifier</I> is an ODBC-defined field and <I>ValuePtr</I> is an integer, <I>BufferLength</I> is ignored. -# -# <P>If <I>FieldIdentifier</I> is a driver-defined field, the application indicates the nature of the field to the Driver Manager by setting the <I>BufferLength</I> argument. <I>BufferLength</I> can have the following values: -# -# -# <UL type=disc> -# <LI>If <I>ValuePtr</I> is a pointer to a character string, then <I>BufferLength</I> is the length of the string or SQL_NTS.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a binary buffer, then the application places the result of the SQL_LEN_BINARY_ATTR(<I>length</I>) macro in <I>BufferLength</I>. This places a negative value in <I>BufferLength</I>.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a value other than a character string or a binary string, then <I>BufferLength</I> should have the value SQL_IS_POINTER. </li> -# -# <LI>If <I>ValuePtr</I> contains a fixed-length value, then <I>BufferLength</I> is either SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT, or SQL_IS_USMALLINT, as appropriate.</li> -# </UL> -# </dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLSetDescField</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_DESC and a <I>Handle</I> of <I>DescriptorHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLSetDescField</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=16%>SQLSTATE</TH> -# <TH width=30%>Error</TH> -# <TH width=54%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>01000</TD> -# <TD width=30%>General warning</TD> -# <TD width=54%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>01S02</TD> -# <TD width=30%>Option value changed</TD> -# <TD width=54%>The driver did not support the value specified in <I>*ValuePtr</I> (if <I>ValuePtr</I> was a pointer) or the value in <I>ValuePtr</I> (if <I>ValuePtr </I>was a 4-byte value), or <I>*ValuePtr</I> was invalid because of implementation working conditions, so the driver substituted a similar value. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>07009</TD> -# <TD width=30%>Invalid descriptor index</TD> -# <TD width=54%>The <I>FieldIdentifier</I> argument was a record field, the <I>RecNumber</I> argument was 0, and the <I>DescriptorHandle</I> argument referred to an IPD handle. -# <P>The <I>RecNumber</I> argument was less than 0, and the <I>DescriptorHandle</I> argument referred to an ARD or an APD.</P> -# -# <P>The <I>RecNumber</I> argument was greater than the maximum number of columns or parameters that the data source can support, and the <I>DescriptorHandle</I> argument referred to an APD or ARD.</P> -# -# <P>(DM) The <I>FieldIdentifier</I> argument was SQL_DESC_COUNT, and <I>*ValuePtr</I> argument was less than 0.</P> -# -# <P>The <I>RecNumber</I> argument was equal to 0, and the <I>DescriptorHandle</I> argument referred to an implicitly allocated APD. (This error does not occur with an explicitly allocated application descriptor, because it is not known whether an explicitly allocated application descriptor is an APD or ARD until execute time.)</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>08S01</TD> -# <TD width=30%>Communication link failure</TD> -# <TD width=54%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>22001</TD> -# <TD width=30%>String data, right <BR> -# truncated</TD> -# <TD width=54%>The <I>FieldIdentifier</I> argument was SQL_DESC_NAME, and the <I>BufferLength</I> argument was a value larger than SQL_MAX_IDENTIFIER_LEN.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY000</TD> -# <TD width=30%>General error</TD> -# <TD width=54%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY001</TD> -# <TD width=30%>Memory allocation <BR> -# error</TD> -# <TD width=54%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY010</TD> -# <TD width=30%>Function sequence error</TD> -# <TD width=54%>(DM) The <I>DescriptorHandle</I> was associated with a <I>StatementHandle</I> for which an asynchronously executing function (not this one) was called and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> with which the <I>DescriptorHandle</I> was associated and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY013</TD> -# <TD width=30%>Memory management error</TD> -# <TD width=54%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY016</TD> -# <TD width=30%>Cannot modify an implementation row descriptor</TD> -# <TD width=54%>The <I>DescriptorHandle</I> argument was associated with an IRD, and the <I>FieldIdentifier</I> argument was not SQL_DESC_ARRAY_STATUS_PTR or SQL_DESC_ROWS_PROCESSED_PTR.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY021</TD> -# <TD width=30%>Inconsistent descriptor information</TD> -# <TD width=54%>The SQL_DESC_TYPE and SQL_DESC_DATETIME_INTERVAL_CODE fields do not form a valid ODBC SQL type or a valid driver-specific SQL type (for IPDs) or a valid ODBC C type (for APDs or ARDs). -# <P>Descriptor information checked during a consistency check was not consistent. (See "Consistency Check" in <B>SQLSetDescRec</B>.)</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY090</TD> -# <TD width=30%>Invalid string or buffer length</TD> -# <TD width=54%>(DM) <I>*ValuePtr</I> is a character string, and <I>BufferLength</I> was less than zero but was not equal to SQL_NTS. -# <P>(DM) The driver was an ODBC 2<I>.x</I> driver, the descriptor was an ARD, the <I>ColumnNumber</I> argument was set to 0, and the value specified for the argument <I>BufferLength</I> was not equal to 4. </P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY091</TD> -# <TD width=30%>Invalid descriptor field identifier</TD> -# <TD width=54%>The value specified for the <I>FieldIdentifier</I> argument was not an ODBC-defined field and was not an implementation-defined value. -# <P>The <I>FieldIdentifier</I> argument was invalid for the <I>DescriptorHandle</I> argument.</P> -# -# <P>The <I>FieldIdentifier</I> argument was a read-only, ODBC-defined field.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY092</TD> -# <TD width=30%>Invalid attribute/option identifier</TD> -# <TD width=54%>The value in <I>*ValuePtr</I> was not valid for the <I>FieldIdentifier</I> argument. -# <P>The <I>FieldIdentifier</I> argument was SQL_DESC_UNNAMED, and <I>ValuePtr</I> was SQL_NAMED.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HY105</TD> -# <TD width=30%>Invalid parameter type</TD> -# <TD width=54%>(DM) The value specified for the SQL_DESC_PARAMETER_TYPE field was invalid. (For more information, see the "<I>InputOutputType</I> Argument" section in <B>SQLBindParameter</B>.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>HYT01</TD> -# <TD width=30%>Connection timeout expired</TD> -# <TD width=54%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=16%>IM001</TD> -# <TD width=30%>Driver does not support this function</TD> -# <TD width=54%>(DM) The driver associated with the <I>DescriptorHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P>An application can call <B>SQLSetDescField</B> to set any descriptor field one at a time. One call to <B>SQLSetDescField</B> sets a single field in a single descriptor. This function can be called to set any field in any descriptor type, provided the field can be set. (See the table later in this section.)</P> -# -# <P class="indent"><b class="le">Note</b> If a call to <B>SQLSetDescField</B> fails, the contents of the descriptor record identified by the <I>RecNumber</I> argument are undefined.</P> -# -# <P>Other functions can be called to set multiple descriptor fields with a single call of the function. The <B>SQLSetDescRec</B> function sets a variety of fields that affect the data type and buffer bound to a column or parameter (the SQL_DESC_TYPE, SQL_DESC_DATETIME_INTERVAL_CODE, SQL_DESC_OCTET_LENGTH, SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR, and SQL_DESC_INDICATOR_PTR fields). <B>SQLBindCol </B>or <B>SQLBindParameter</B> can be used to make a complete specification for the binding of a column or parameter. These functions set a specific group of descriptor fields with one function call.</P> -# -# <P><B>SQLSetDescField</B> can be called to change the binding buffers by adding an offset to the binding pointers (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, or SQL_DESC_OCTET_LENGTH_PTR). This changes the binding buffers without calling <B>SQLBindCol </B>or <B>SQLBindParameter</B>, which allows an application to change SQL_DESC_DATA_PTR without changing other fields, such as SQL_DESC_DATA_TYPE.</P> -# -# <P>If an application calls <B>SQLSetDescField</B> to set any field other than SQL_DESC_COUNT or the deferred fields SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR, or SQL_DESC_INDICATOR_PTR, the record becomes unbound.</P> -# -# <P>Descriptor header fields are set by calling <B>SQLSetDescField </B>with the appropriate <I>FieldIdentifier</I>. Many header fields are also statement attributes, so they can also be set by a call to <B>SQLSetStmtAttr</B>. This allows applications to set a descriptor field without first obtaining a descriptor handle. When <B>SQLSetDescField</B> is called to set a header field, the <I>RecNumber</I> argument is ignored.</P> -# -# <P>A <I>RecNumber</I> of 0 is used to set bookmark fields.</P> -# -# <P class="indent"><b class="le">Note</b> The statement attribute SQL_ATTR_USE_BOOKMARKS should always be set before calling <B>SQLSetDescField</B> to set bookmark fields. While this is not mandatory, it is strongly recommended.</P> -# -# <H1>Sequence of Setting Descriptor Fields</H1> -# -# <P>When setting descriptor fields by calling <B>SQLSetDescField</B>, the application must follow a specific sequence: -# -# <OL type=1> -# <LI>The application must first set the SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE, or SQL_DESC_DATETIME_INTERVAL_CODE field. </li> -# -# <LI>After one of these fields has been set, the application can set an attribute of a data type, and the driver sets data type attribute fields to the appropriate default values for the data type. Automatic defaulting of type attribute fields ensures that the descriptor is always ready to use once the application has specified a data type. If the application explicitly sets a data type attribute, it is overriding the default attribute.</li> -# -# <LI>After one of the fields listed in step 1 has been set, and data type attributes have been set, the application can set SQL_DESC_DATA_PTR. This prompts a consistency check of descriptor fields. If the application changes the data type or attributes after setting the SQL_DESC_DATA_PTR field, the driver sets SQL_DESC_DATA_PTR to a null pointer, unbinding the record. This forces the application to complete the proper steps in sequence, before the descriptor record is usable.</li> -# </OL> -# -# <H1>Initialization of Descriptor Fields</H1> -# -# <P>When a descriptor is allocated, the fields in the descriptor can be initialized to a default value, be initialized without a default value, or be undefined for the type of descriptor. The following tables indicate the initialization of each field for each type of descriptor, with "D" indicating that the field is initialized with a default, and "ND" indicating that the field is initialized without a default. If a number is shown, the default value of the field is that number. The tables also indicate whether a field is read/write (R/W) or read-only (R). </P> -# -# <P>The fields of an IRD have a default value only after the statement has been prepared or executed and the IRD has been populated, not when the statement handle or descriptor has been allocated. Until the IRD has been populated, any attempt to gain access to a field of an IRD will return an error.</P> -# -# <P>Some descriptor fields are defined for one or more, but not all, of the descriptor types (ARDs and IRDs, and APDs and IPDs). When a field is undefined for a type of descriptor, it is not needed by any of the functions that use that descriptor.</P> -# -# <P>The fields that can be accessed by <B>SQLGetDescField</B> cannot necessarily be set by <B>SQLSetDescField</B>. Fields that can be set by <B>SQLSetDescField</B> are listed in the following tables.</P> -# -# <P>The initialization of header fields is outlined in the table that follows.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=27%>Header field name</TH> -# <TH width=21%>Type</TH> -# <TH width=19%>R/W</TH> -# <TH width=33%>Default</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_ALLOC_TYPE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R<BR> -# APD: R<BR> -# IRD: R<BR> -# IPD: R </TD> -# <TD width=33%>ARD: SQL_DESC_ALLOC_AUTO for implicit or SQL_DESC_ALLOC_USER for explicit -# <P>APD: SQL_DESC_ALLOC_AUTO for implicit or SQL_DESC_ALLOC_USER for explicit</P> -# -# <P>IRD: SQL_DESC_ALLOC_AUTO</P> -# -# <P>IPD: SQL_DESC_ALLOC_AUTO</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_ARRAY_SIZE</TD> -# <TD width=21%>SQLUINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD:<SUP>[1]</SUP><BR> -# APD:<SUP>[1]</SUP><BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_ARRAY_STATUS_PTR</TD> -# <TD width=21%>SQLUSMALLINT*</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R/W<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: Null ptr<BR> -# APD: Null ptr<BR> -# IRD: Null ptr<BR> -# IPD: Null ptr</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_BIND_OFFSET_PTR</TD> -# <TD width=21%>SQLINTEGER*</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Null ptr<BR> -# APD: Null ptr<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_BIND_TYPE</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: SQL_BIND_BY_COLUMN -# <P>APD: SQL_BIND_BY_COLUMN</P> -# -# <P>IRD: Unused</P> -# -# <P>IPD: Unused</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_COUNT</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: 0<BR> -# APD: 0<BR> -# IRD: D<BR> -# IPD: 0</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_ROWS_PROCESSED_PTR</TD> -# <TD width=21%>SQLUINTEGER*</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R/W<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: Null ptr<BR> -# IPD: Null ptr</TD> -# </TR> -# </table></div> -# -# <P class="fineprint">[1] These fields are defined only when the IPD is automatically populated by the driver. If not, they are undefined. If an application attempts to set these fields, SQLSTATE HY091 (Invalid descriptor field identifier) will be returned.</p> -# <P>The initialization of record fields is as shown in the following table.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=27%>Record field name</TH> -# <TH width=21%>Type</TH> -# <TH width=19%>R/W</TH> -# <TH width=33%>Default</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_AUTO_UNIQUE_VALUE</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_BASE_COLUMN_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_BASE_TABLE_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_CASE_SENSITIVE</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: D<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_CATALOG_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_CONCISE_TYPE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: SQL_C_<BR> -# DEFAULT<BR> -# APD: SQL_C_<BR> -# DEFAULT<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_DATA_PTR</TD> -# <TD width=21%>SQLPOINTER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Null ptr<BR> -# APD: Null ptr<BR> -# IRD: Unused<BR> -# IPD: Unused<SUP>[2]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_DATETIME_INTERVAL_CODE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_DATETIME_INTERVAL_PRECISION</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_DISPLAY_SIZE</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_FIXED_PREC_SCALE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: D<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_INDICATOR_PTR</TD> -# <TD width=21%>SQLINTEGER *</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Null ptr<BR> -# APD: Null ptr<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_LABEL</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_LENGTH</TD> -# <TD width=21%>SQLUINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_LITERAL_PREFIX</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_LITERAL_SUFFIX</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_LOCAL_TYPE_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: D<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_NULLABLE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_NUM_PREC_RADIX</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_OCTET_LENGTH</TD> -# <TD width=21%>SQLINTEGER</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_OCTET_LENGTH_PTR</TD> -# <TD width=21%>SQLINTEGER *</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Null ptr<BR> -# APD: Null ptr<BR> -# IRD: Unused<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_PARAMETER_TYPE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: Unused<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: Unused<BR> -# IPD: D=SQL_PARAM_INPUT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_PRECISION</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_ROWVER</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused -# <P>APD: Unused</P> -# -# <P>IRD: R</P> -# -# <P>IPD: R</P> -# </TD> -# <TD width=33%>ARD: Unused -# <P>APD: Unused</P> -# -# <P>IRD: ND</P> -# -# <P>IPD: ND</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_SCALE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_SCHEMA_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_SEARCHABLE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_TABLE_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_TYPE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: R/W<BR> -# APD: R/W<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: SQL_C_DEFAULT<BR> -# APD: SQL_C_DEFAULT<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_TYPE_NAME</TD> -# <TD width=21%>SQLCHAR *</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: D<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_UNNAMED</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R/W</TD> -# <TD width=33%>ARD: ND<BR> -# APD: ND<BR> -# IRD: D<BR> -# IPD: ND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_UNSIGNED</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: R</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: D<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>SQL_DESC_UPDATABLE</TD> -# <TD width=21%>SQLSMALLINT</TD> -# <TD width=19%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: R<BR> -# IPD: Unused</TD> -# <TD width=33%>ARD: Unused<BR> -# APD: Unused<BR> -# IRD: D<BR> -# IPD: Unused</TD> -# </TR> -# </table></div> -# -# <P class="fineprint">[1] These fields are defined only when the IPD is automatically populated by the driver. If not, they are undefined. If an application attempts to set these fields, SQLSTATE HY091 (Invalid descriptor field identifier) will be returned.</p> -# <P class="fineprint">[2] The SQL_DESC_DATA_PTR field in the IPD can be set to force a consistency check. In a subsequent call to <B>SQLGetDescField</B> or <B>SQLGetDescRec</B>, the driver is not required to return the value that SQL_DESC_DATA_PTR was set to.</p> -# <P class="label"><B><I>FieldIdentifier</I> Argument</B></P> -# -# <P>The <I>FieldIdentifier</I> argument indicates the descriptor field to be set. A descriptor contains the <I>descriptor header,</I> consisting of the header fields described in the next section, "Header Fields," and zero or more <I>descriptor records,</I> consisting of the record fields described in the section following the "Header Fields" section.</P> -# -# <H1>Header Fields</H1> -# -# <P>Each descriptor has a header consisting of the following fields: -# -# <DL> -# <DT><B>SQL_DESC_ALLOC_TYPE [All]</B></DT> -# -# <DD>This read-only SQLSMALLINT header field specifies whether the descriptor was allocated automatically by the driver or explicitly by the application. The application can obtain, but not modify, this field. The field is set to SQL_DESC_ALLOC_AUTO by the driver if the descriptor was automatically allocated by the driver. It is set to SQL_DESC_ALLOC_USER by the driver if the descriptor was explicitly allocated by the application.</dd> -# -# <DT><B>SQL_DESC_ARRAY_SIZE [Application descriptors]</B></DT> -# -# <DD>In ARDs, this SQLUINTEGER header field specifies the number of rows in the rowset. This is the number of rows to be returned by a call to <B>SQLFetch</B> or <B>SQLFetchScroll</B> or to be operated on by a call to <B>SQLBulkOperations</B> or <B>SQLSetPos</B>. -# -# <P>In APDs, this SQLUINTEGER header field specifies the number of values for each parameter. -# -# -# <P>The default value of this field is 1. If SQL_DESC_ARRAY_SIZE is greater than 1, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR of the APD or ARD point to arrays. The cardinality of each array is equal to the value of this field. -# -# -# <P>This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROW_ARRAY_SIZE attribute. This field in the APD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAMSET_SIZE attribute. -# </dd> -# -# <DT><B>SQL_DESC_ARRAY_STATUS_PTR [All]</B></DT> -# -# <DD>For each descriptor type, this SQLUSMALLINT * header field points to an array of SQLUSMALLINT values. These arrays are named as follows: row status array (IRD), parameter status array (IPD), row operation array (ARD), and parameter operation array (APD). -# -# <P>In the IRD, this header field points to a row status array containing status values after a call to <B>SQLBulkOperations</B>, <B>SQLFetch</B>, <B>SQLFetchScroll</B>, or <B>SQLSetPos</B>. The array has as many elements as there are rows in the rowset. The application must allocate an array of SQLUSMALLINTs and set this field to point to the array. The field is set to a null pointer by default. The driver will populate the array—unless the SQL_DESC_ARRAY_STATUS_PTR field is set to a null pointer, in which case no status values are generated and the array is not populated. -# -# -# <P class="indent"><b class="le">Caution</b> Driver behavior is undefined if the application sets the elements of the row status array pointed to by the SQL_DESC_ARRAY_STATUS_PTR field of the IRD. -# -# -# <P>The array is initially populated by a call to <B>SQLBulkOperations</B>, <B>SQLFetch</B>, <B>SQLFetchScroll</B>, or <B>SQLSetPos</B>. If the call did not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the array pointed to by this field are undefined. The elements in the array can contain the following values: -# -# -# <UL type=disc> -# <LI>SQL_ROW_SUCCESS: The row was successfully fetched and has not changed since it was last fetched.</li> -# -# <LI>SQL_ROW_SUCCESS_WITH_INFO: The row was successfully fetched and has not changed since it was last fetched. However, a warning was returned about the row.</li> -# -# <LI>SQL_ROW_ERROR: An error occurred while fetching the row.</li> -# -# <LI>SQL_ROW_UPDATED: The row was successfully fetched and has been updated since it was last fetched. If the row is fetched again, its status is SQL_ROW_SUCCESS.</li> -# -# <LI>SQL_ROW_DELETED: The row has been deleted since it was last fetched.</li> -# -# <LI>SQL_ROW_ADDED: The row was inserted by <B>SQLBulkOperations</B>. If the row is fetched again, its status is SQL_ROW_SUCCESS.</li> -# -# <LI>SQL_ROW_NOROW: The rowset overlapped the end of the result set, and no row was returned that corresponded to this element of the row status array.</li> -# </UL> -# -# -# <P>This field in the IRD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROW_STATUS_PTR attribute. -# -# -# <P>The SQL_DESC_ARRAY_STATUS_PTR field of the IRD is valid only after SQL_SUCCESS or SQL_SUCCESS_WITH_INFO has been returned. If the return code is not one of these, the location pointed to by SQL_DESC_ROWS_PROCESSED_PTR is undefined. -# -# -# <P>In the IPD, this header field points to a parameter status array containing status information for each set of parameter values after a call to <B>SQLExecute</B> or <B>SQLExecDirect</B>. If the call to <B>SQLExecute</B> or <B>SQLExecDirect</B> did not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the array pointed to by this field are undefined. The application must allocate an array of SQLUSMALLINTs and set this field to point to the array. The driver will populate the array—unless the SQL_DESC_ARRAY_STATUS_PTR field is set to a null pointer, in which case no status values are generated and the array is not populated. The elements in the array can contain the following values: -# -# -# <UL type=disc> -# <LI>SQL_PARAM_SUCCESS: The SQL statement was successfully executed for this set of parameters.</li> -# -# <LI>SQL_PARAM_SUCCESS_WITH_INFO: The SQL statement was successfully executed for this set of parameters; however, warning information is available in the diagnostics data structure.</li> -# -# <LI>SQL_PARAM_ERROR: An error occurred in processing this set of parameters. Additional error information is available in the diagnostics data structure.</li> -# -# <LI>SQL_PARAM_UNUSED: This parameter set was unused, possibly due to the fact that some previous parameter set caused an error that aborted further processing, or because SQL_PARAM_IGNORE was set for that set of parameters in the array specified by the SQL_DESC_ARRAY_STATUS_PTR field of the APD.</li> -# -# <LI>SQL_PARAM_DIAG_UNAVAILABLE: Diagnostic information is not available. An example of this is when the driver treats arrays of parameters as a monolithic unit and so does not generate this level of error information.</li> -# </UL> -# -# -# <P>This field in the IPD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAM_STATUS_PTR attribute. -# -# -# <P>In the ARD, this header field points to a row operation array of values that can be set by the application to indicate whether this row is to be ignored for <B>SQLSetPos</B> operations. The elements in the array can contain the following values: -# -# -# <UL type=disc> -# <LI>SQL_ROW_PROCEED: The row is included in the bulk operation using <B>SQLSetPos</B>. (This setting does not guarantee that the operation will occur on the row. If the row has the status SQL_ROW_ERROR in the IRD row status array, the driver might not be able to perform the operation in the row.)</li> -# -# <LI>SQL_ROW_IGNORE: The row is excluded from the bulk operation using <B>SQLSetPos</B>.</li> -# </UL> -# -# -# <P>If no elements of the array are set, all rows are included in the bulk operation. If the value in the SQL_DESC_ARRAY_STATUS_PTR field of the ARD is a null pointer, all rows are included in the bulk operation; the interpretation is the same as if the pointer pointed to a valid array and all elements of the array were SQL_ROW_PROCEED. If an element in the array is set to SQL_ROW_IGNORE, the value in the row status array for the ignored row is not changed. -# -# -# <P>This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROW_OPERATION_PTR attribute. -# -# -# <P>In the APD, this header field points to a parameter operation array of values that can be set by the application to indicate whether this set of parameters is to be ignored when <B>SQLExecute</B> or<B> SQLExecDirect</B> is called. The elements in the array can contain the following values: -# -# -# <UL type=disc> -# <LI>SQL_PARAM_PROCEED: The set of parameters is included in the <B>SQLExecute</B> or <B>SQLExecDirect</B> call.</li> -# -# <LI>SQL_PARAM_IGNORE: The set of parameters is excluded from the <B>SQLExecute</B> or <B>SQLExecDirect</B> call.</li> -# </UL> -# -# -# <P>If no elements of the array are set, all sets of parameters in the array are used in the <B>SQLExecute</B> or <B>SQLExecDirect</B> calls. If the value in the SQL_DESC_ARRAY_STATUS_PTR field of the APD is a null pointer, all sets of parameters are used; the interpretation is the same as if the pointer pointed to a valid array and all elements of the array were SQL_PARAM_PROCEED. -# -# -# <P>This field in the APD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAM_OPERATION_PTR attribute. -# </dd> -# -# <DT><B>SQL_DESC_BIND_OFFSET_PTR [Application descriptors]</B></DT> -# -# <DD>This SQLINTEGER * header field points to the binding offset. It is set to a null pointer by default. If this field is not a null pointer, the driver dereferences the pointer and adds the dereferenced value to each of the deferred fields that has a non-null value in the descriptor record (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR) at fetch time and uses the new pointer values when binding. -# -# <P>The binding offset is always added directly to the values in the SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR fields. If the offset is changed to a different value, the new value is still added directly to the value in each descriptor field. The new offset is not added to the field value plus any earlier offset. -# -# -# <P>This field is a <I>deferred field</I>: It is not used at the time it is set but is used at a later time by the driver when it needs to determine addresses for data buffers. -# -# -# <P>This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROW_BIND_OFFSET_PTR attribute. This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAM_BIND_OFFSET_PTR attribute. -# -# -# <P>For more information, see the description of row-wise binding in <A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A> and <A HREF="odbcsqlbindparameter.htm">SQLBindParameter</A>. -# </dd> -# -# <DT><B>SQL_DESC_BIND_TYPE [Application descriptors]</B></DT> -# -# <DD>This SQLUINTEGER header field sets the binding orientation to be used for binding either columns or parameters. -# -# <P>In ARDs, this field specifies the binding orientation when <B>SQLFetchScroll</B> or <B>SQLFetch</B> is called on the associated statement handle. -# -# -# <P>To select column-wise binding for columns, this field is set to SQL_BIND_BY_COLUMN (the default). -# -# -# <P>This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROW_BIND_TYPE <I>Attribute</I>. -# -# -# <P>In APDs, this field specifies the binding orientation to be used for dynamic parameters. -# -# -# <P>To select column-wise binding for parameters, this field is set to SQL_BIND_BY_COLUMN (the default). -# -# -# <P>This field in the APD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAM_BIND_TYPE <I>Attribute</I>. -# </dd> -# -# <DT><B>SQL_DESC_COUNT [All]</B></DT> -# -# <DD>This SQLSMALLINT header field specifies the 1-based index of the highest-numbered record that contains data. When the driver sets the data structure for the descriptor, it must also set the SQL_DESC_COUNT field to show how many records are significant. When an application allocates an instance of this data structure, it does not have to specify how many records to reserve room for. As the application specifies the contents of the records, the driver takes any required action to ensure that the descriptor handle refers to a data structure of the adequate size. -# -# <P>SQL_DESC_COUNT is not a count of all data columns that are bound (if the field is in an ARD) or of all parameters that are bound (if the field is in an APD), but the number of the highest-numbered record. If the highest-numbered column or parameter is unbound, then SQL_DESC_COUNT is changed to the number of the next highest-numbered column or parameter. If a column or a parameter with a number that is less than the number of the highest-numbered column is unbound (by calling <B>SQLBindCol</B> with the <I>TargetValuePtr</I> argument set to a null pointer, or <B>SQLBindParameter</B> with the <I>ParameterValuePtr</I> argument set to a null pointer), SQL_DESC_COUNT is not changed. If additional columns or parameters are bound with numbers greater than the highest-numbered record that contains data, the driver automatically increases the value in the SQL_DESC_COUNT field. If all columns are unbound by calling <B>SQLFreeStmt</B> with the SQL_UNBIND option, the SQL_DESC_COUNT fields in the ARD and IRD are set to 0. If <B>SQLFreeStmt</B> is called with the SQL_RESET_PARAMS option, the SQL_DESC_COUNT fields in the APD and IPD are set to 0. -# -# -# <P>The value in SQL_DESC_COUNT can be set explicitly by an application by calling <B>SQLSetDescField</B>. If the value in SQL_DESC_COUNT is explicitly decreased, all records with numbers greater than the new value in SQL_DESC_COUNT are effectively removed. If the value in SQL_DESC_COUNT is explicitly set to 0 and the field is in an ARD, all data buffers except a bound bookmark column are released. -# -# -# <P>The record count in this field of an ARD does not include a bound bookmark column. The only way to unbind a bookmark column is to set the SQL_DESC_DATA_PTR field to a null pointer. -# </dd> -# -# <DT><B>SQL_DESC_ROWS_PROCESSED_PTR [Implementation descriptors]</B></DT> -# -# <DD>In an IRD, this SQLUINTEGER * header field points to a buffer containing the number of rows fetched after a call to <B>SQLFetch</B> or <B>SQLFetchScroll</B>, or the number of rows affected in a bulk operation performed by a call to <B>SQLBulkOperations</B> or <B>SQLSetPos</B>, including error rows. -# -# <P>In an IPD, this SQLUINTEGER * header field points to a buffer containing the number of sets of parameters that have been processed, including error sets. No number will be returned if this is a null pointer. -# -# -# <P>SQL_DESC_ROWS_PROCESSED_PTR is valid only after SQL_SUCCESS or SQL_SUCCESS_WITH_INFO has been returned after a call to <B>SQLFetch</B> or <B>SQLFetchScroll </B>(for an IRD field) or <B>SQLExecute</B>, <B>SQLExecDirect</B>, or <B>SQLParamData</B> (for an IPD field). If the call that fills in the buffer pointed to by this field does not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined, unless it returns SQL_NO_DATA, in which case the value in the buffer is set to 0. -# -# -# <P>This field in the ARD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_ROWS_FETCHED_PTR attribute. This field in the APD can also be set by calling <B>SQLSetStmtAttr</B> with the SQL_ATTR_PARAMS_PROCESSED_PTR attribute. -# -# -# <P>The buffer pointed to by this field is allocated by the application. It is a deferred output buffer that is set by the driver. It is set to a null pointer by default. -# </dd> -# </DL> -# -# <H1>Record Fields</H1> -# -# <P>Each descriptor contains one or more records consisting of fields that define either column data or dynamic parameters, depending on the type of descriptor. Each record is a complete definition of a single column or parameter. -# -# <DL> -# <DT><B>SQL_DESC_AUTO_UNIQUE_VALUE [IRDs]</B></DT> -# -# <DD>This read-only SQLINTEGER record field contains SQL_TRUE if the column is an auto-incrementing column, or SQL_FALSE if the column is not an auto-incrementing column. This field is read-only, but the underlying auto-incrementing column is not necessarily read-only.</dd> -# -# <DT><B>SQL_DESC_BASE_COLUMN_NAME [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the base column name for the result set column. If a base column name does not exist (as in the case of columns that are expressions), this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_BASE_TABLE_NAME [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the base table name for the result set column. If a base table name cannot be defined or is not applicable, this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_CASE_SENSITIVE [Implementation descriptors]</B></DT> -# -# <DD>This read-only SQLINTEGER record field contains SQL_TRUE if the column or parameter is treated as case-sensitive for collations and comparisons, or SQL_FALSE if the column is not treated as case-sensitive for collations and comparisons or if it is a noncharacter column.</dd> -# -# <DT><B>SQL_DESC_CATALOG_NAME [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the catalog for the base table that contains the column. The return value is driver-dependent if the column is an expression or if the column is part of a view. If the data source does not support catalogs or the catalog cannot be determined, this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_CONCISE_TYPE [All]</B></DT> -# -# <DD>This SQLSMALLINT header field specifies the concise data type for all data types, including the datetime and interval data types. -# -# <P>The values in the SQL_DESC_CONCISE_TYPE, SQL_DESC_TYPE, and SQL_DESC_DATETIME_INTERVAL_CODE fields are interdependent. Each time one of the fields is set, the other must also be set. SQL_DESC_CONCISE_TYPE can be set by a call to <B>SQLBindCol</B> or <B>SQLBindParameter</B>, or <B>SQLSetDescField</B>. SQL_DESC_TYPE can be set by a call to <B>SQLSetDescField</B> or <B>SQLSetDescRec</B>. -# -# -# <P>If SQL_DESC_CONCISE_TYPE is set to a concise data type other than an interval or datetime data type, the SQL_DESC_TYPE field is set to the same value and the SQL_DESC_DATETIME_INTERVAL_CODE field is set to 0. -# -# -# <P>If SQL_DESC_CONCISE_TYPE is set to the concise datetime or interval data type, the SQL_DESC_TYPE field is set to the corresponding verbose type (SQL_DATETIME or SQL_INTERVAL) and the SQL_DESC_DATETIME_INTERVAL_CODE field is set to the appropriate subcode. -# </dd> -# -# <DT><B>SQL_DESC_DATA_PTR [Application descriptors and IPDs]</B></DT> -# -# <DD>This SQLPOINTER record field points to a variable that will contain the parameter value (for APDs) or the column value (for ARDs). This field is a <I>deferred field</I>. It is not used at the time it is set but is used at a later time by the driver to retrieve data. -# -# <P>The column specified by the SQL_DESC_DATA_PTR field of the ARD is unbound if the <I>TargetValuePtr</I> argument in a call to <B>SQLBindCol</B> is a null pointer or if the SQL_DESC_DATA_PTR field in the ARD is set by a call to <B>SQLSetDescField</B> or <B>SQLSetDescRec</B> to a null pointer. Other fields are not affected if the SQL_DESC_DATA_PTR field is set to a null pointer. -# -# -# <P>If the call to <B>SQLFetch</B> or <B>SQLFetchScroll </B>that fills in the buffer pointed to by this field did not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined. -# -# -# <P>Whenever the SQL_DESC_DATA_PTR field of an APD, ARD, or IPD is set, the driver checks that the value in the SQL_DESC_TYPE field contains one of the valid ODBC C data types or a driver-specific data type, and that all other fields affecting the data types are consistent. Prompting a consistency check is the only use of the SQL_DESC_DATA_PTR field of an IPD. Specifically, if an application sets the SQL_DESC_DATA_PTR field of an IPD and later calls <B>SQLGetDescField</B> on this field, it is not necessarily returned the value that it had set. For more information, see "Consistency Checks" in <A HREF="odbcsqlsetdescrec.htm">SQLSetDescRec</A>. -# </dd> -# -# <DT><B>SQL_DESC_DATETIME_INTERVAL_CODE [All]</B></DT> -# -# <DD>This SQLSMALLINT record field contains the subcode for the specific datetime or interval data type when the SQL_DESC_TYPE field is SQL_DATETIME or SQL_INTERVAL. This is true for both SQL and C data types. The code consists of the data type name with "CODE" substituted for either "TYPE" or "C_TYPE" (for datetime types), or "CODE" substituted for "INTERVAL" or "C_INTERVAL" (for interval types). -# -# <P>If SQL_DESC_TYPE and SQL_DESC_CONCISE_TYPE in an application descriptor are set to SQL_C_DEFAULT and the descriptor is not associated with a statement handle, the contents of SQL_DESC_DATETIME_INTERVAL_CODE are undefined. -# -# -# <P>This field can be set for the datetime data types listed in the following table. -# -# <!--TS:--> -# <div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>Datetime types</TH> -# <TH width=50%>DATETIME_INTERVAL_CODE</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TYPE_DATE/SQL_C_TYPE_DATE</TD> -# <TD width=50%>SQL_CODE_DATE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TYPE_TIME/SQL_C_TYPE_TIME</TD> -# <TD width=50%>SQL_CODE_TIME</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TYPE_TIMESTAMP/<BR> -# SQL_C_TYPE_TIMESTAMP</TD> -# <TD width=50%>SQL_CODE_TIMESTAMP</TD> -# </TR> -# </table></div> -# -# <!--TS:--> -# -# <P>This field can be set for the interval data types listed in the following table. -# -# <!--TS:--> -# <div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>Interval type</TH> -# <TH width=50%>DATETIME_INTERVAL_CODE</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_DAY/<BR> -# SQL_C_INTERVAL_DAY</TD> -# <TD width=50%>SQL_CODE_DAY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_DAY_TO_HOUR/<BR> -# SQL_C_INTERVAL_DAY_TO_HOUR</TD> -# <TD width=50%>SQL_CODE_DAY_TO_HOUR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_DAY_TO_MINUTE/<BR> -# SQL_C_INTERVAL_DAY_TO_MINUTE</TD> -# <TD width=50%>SQL_CODE_DAY_TO_MINUTE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_DAY_TO_SECOND/<BR> -# SQL_C_INTERVAL_DAY_TO_SECOND</TD> -# <TD width=50%>SQL_CODE_DAY_TO_SECOND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_HOUR/<BR> -# SQL_C_INTERVAL_HOUR</TD> -# <TD width=50%>SQL_CODE_HOUR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_HOUR_TO_MINUTE/<BR> -# SQL_C_INTERVAL_HOUR_TO_MINUTE</TD> -# <TD width=50%>SQL_CODE_HOUR_TO_MINUTE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_HOUR_TO_SECOND/<BR> -# SQL_C_INTERVAL_HOUR_TO_SECOND</TD> -# <TD width=50%>SQL_CODE_HOUR_TO_SECOND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_MINUTE/<BR> -# SQL_C_INTERVAL_MINUTE</TD> -# <TD width=50%>SQL_CODE_MINUTE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_MINUTE_TO_SECOND/<BR> -# SQL_C_INTERVAL_MINUTE_TO_SECOND</TD> -# <TD width=50%>SQL_CODE_MINUTE_TO_SECOND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_MONTH/<BR> -# SQL_C_INTERVAL_MONTH</TD> -# <TD width=50%>SQL_CODE_MONTH</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_SECOND/<BR> -# SQL_C_INTERVAL_SECOND</TD> -# <TD width=50%>SQL_CODE_SECOND</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_YEAR/<BR> -# SQL_C_INTERVAL_YEAR</TD> -# <TD width=50%>SQL_CODE_YEAR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTERVAL_YEAR_TO_MONTH/<BR> -# SQL_C_INTERVAL_YEAR_TO_MONTH</TD> -# <TD width=50%>SQL_CODE_YEAR_TO_MONTH</TD> -# </TR> -# </table></div> -# -# <!--TS:--> -# -# <P>For more information about the data intervals and this field, see "<A HREF="odbcdata_type_identifiers_and_descriptors.htm">Data Type Identifiers and Descriptors</A>" in Appendix D: Data Types. -# </dd> -# -# <DT><B>SQL_DESC_DATETIME_INTERVAL_PRECISION [All]</B></DT> -# -# <DD>This SQLINTEGER record field contains the interval leading precision if the SQL_DESC_TYPE field is SQL_INTERVAL. When the SQL_DESC_DATETIME_INTERVAL_CODE field is set to an interval data type, this field is set to the default interval leading precision.</dd> -# -# <DT><B>SQL_DESC_DISPLAY_SIZE [IRDs]</B></DT> -# -# <DD>This read-only SQLINTEGER record field contains the maximum number of characters required to display the data from the column. </dd> -# -# <DT><B>SQL_DESC_FIXED_PREC_SCALE [Implementation descriptors]</B></DT> -# -# <DD>This read-only SQLSMALLINT record field is set to SQL_TRUE if the column is an exact numeric column and has a fixed precision and nonzero scale, or to SQL_FALSE if the column is not an exact numeric column with a fixed precision and scale.</dd> -# -# <DT><B>SQL_DESC_INDICATOR_PTR [Application descriptors]</B></DT> -# -# <DD>In ARDs, this SQLINTEGER * record field points to the indicator variable. This variable contains SQL_NULL_DATA if the column value is a NULL. For APDs, the indicator variable is set to SQL_NULL_DATA to specify NULL dynamic arguments. Otherwise, the variable is zero (unless the values in SQL_DESC_INDICATOR_PTR and SQL_DESC_OCTET_LENGTH_PTR are the same pointer). -# -# <P>If the SQL_DESC_INDICATOR_PTR field in an ARD is a null pointer, the driver is prevented from returning information about whether the column is NULL or not. If the column is NULL and SQL_DESC_INDICATOR_PTR is a null pointer, SQLSTATE 22002 (Indicator variable required but not supplied) is returned when the driver attempts to populate the buffer after a call to <B>SQLFetch</B> or <B>SQLFetchScroll</B>. If the call to <B>SQLFetch</B> or <B>SQLFetchScroll </B>did not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined. -# -# -# <P>The SQL_DESC_INDICATOR_PTR field determines whether the field pointed to by SQL_DESC_OCTET_LENGTH_PTR is set. If the data value for a column is NULL, the driver sets the indicator variable to SQL_NULL_DATA. The field pointed to by SQL_DESC_OCTET_LENGTH_PTR is then not set. If a NULL value is not encountered during the fetch, the buffer pointed to by SQL_DESC_INDICATOR_PTR is set to zero and the buffer pointed to by SQL_DESC_OCTET_LENGTH_PTR is set to the length of the data. -# -# -# <P>If the SQL_DESC_INDICATOR_PTR field in an APD is a null pointer, the application cannot use this descriptor record to specify NULL arguments. -# -# -# <P>This field is a <I>deferred field</I>: It is not used at the time it is set but is used at a later time by the driver to indicate nullability (for ARDs) or to determine nullability (for APDs). -# </dd> -# -# <DT><B>SQL_DESC_LABEL [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the column label or title. If the column does not have a label, this variable contains the column name. If the column is unnamed and unlabeled, this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_LENGTH [All]</B></DT> -# -# <DD>This SQLUINTEGER record field is either the maximum or actual length of a character string in characters or a binary data type in bytes. It is the maximum length for a fixed-length data type, or the actual length for a variable-length data type. Its value always excludes the null-termination character that ends the character string. For values whose type is SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, or one of the SQL interval data types, this field has the length in characters of the character string representation of the datetime or interval value. -# -# <P>The value in this field may be different from the value for "length" as defined in ODBC 2<I>.x</I>. For more information, see <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>. -# </dd> -# -# <DT><B>SQL_DESC_LITERAL_PREFIX [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the character or characters that the driver recognizes as a prefix for a literal of this data type. This variable contains an empty string for a data type for which a literal prefix is not applicable.</dd> -# -# <DT><B>SQL_DESC_LITERAL_SUFFIX [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the character or characters that the driver recognizes as a suffix for a literal of this data type. This variable contains an empty string for a data type for which a literal suffix is not applicable.</dd> -# -# <DT><B>SQL_DESC_LOCAL_TYPE_NAME [Implementation descriptors]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains any localized (native language) name for the data type that may be different from the regular name of the data type. If there is no localized name, an empty string is returned. This field is for display purposes only.</dd> -# -# <DT><B>SQL_DESC_NAME [Implementation descriptors]</B></DT> -# -# <DD>This SQLCHAR * record field in a row descriptor contains the column alias, if it applies. If the column alias does not apply, the column name is returned. In either case, the driver sets the SQL_DESC_UNNAMED field to SQL_NAMED when it sets the SQL_DESC_NAME field. If there is no column name or a column alias, the driver returns an empty string in the SQL_DESC_NAME field and sets the SQL_DESC_UNNAMED field to SQL_UNNAMED. -# -# <P>An application can set the SQL_DESC_NAME field of an IPD to a parameter name or alias to specify stored procedure parameters by name. (For more information, see "<A HREF="odbcbinding_parameters_by_name__named_parameters_.htm">Binding Parameters by Name (Named Parameters)</A>" in Chapter 9: Executing Statements.) The SQL_DESC_NAME field of an IRD is a read-only field; SQLSTATE HY091 (Invalid descriptor field identifier) will be returned if an application attempts to set it. -# -# -# <P>In IPDs, this field is undefined if the driver does not support named parameters. If the driver supports named parameters and is capable of describing parameters, the parameter name is returned in this field. -# </dd> -# -# <DT><B>SQL_DESC_NULLABLE [Implementation descriptors]</B></DT> -# -# <DD>In IRDs, this read-only SQLSMALLINT record field is SQL_NULLABLE if the column can have NULL values, SQL_NO_NULLS if the column does not have NULL values, or SQL_NULLABLE_UNKNOWN if it is not known whether the column accepts NULL values. This field pertains to the result set column, not the base column. -# -# <P>In IPDs, this field is always set to SQL_NULLABLE because dynamic parameters are always nullable and cannot be set by an application. -# </dd> -# -# <DT><B>SQL_DESC_NUM_PREC_RADIX [All]</B></DT> -# -# <DD>This SQLINTEGER field contains a value of 2 if the data type in the SQL_DESC_TYPE field is an approximate numeric data type, because the SQL_DESC_PRECISION field contains the number of bits. This field contains a value of 10 if the data type in the SQL_DESC_TYPE field is an exact numeric data type, because the SQL_DESC_PRECISION field contains the number of decimal digits. This field is set to 0 for all non-numeric data types.</dd> -# -# <DT><B>SQL_DESC_OCTET_LENGTH [All]</B></DT> -# -# <DD>This SQLINTEGER record field contains the length, in bytes, of a character string or binary data type. For fixed-length character or binary types, this is the actual length in bytes. For variable-length character or binary types, this is the maximum length in bytes. This value always excludes space for the null-termination character for implementation descriptors and always includes space for the null-termination character for application descriptors. For application data, this field contains the size of the buffer. For APDs, this field is defined only for output or input/output parameters.</dd> -# -# <DT><B>SQL_DESC_OCTET_LENGTH_PTR [Application descriptors]</B></DT> -# -# <DD>This SQLINTEGER * record field points to a variable that will contain the total length in bytes of a dynamic argument (for parameter descriptors) or of a bound column value (for row descriptors). -# -# <P>For an APD, this value is ignored for all arguments except character string and binary; if this field points to SQL_NTS, the dynamic argument must be null-terminated. To indicate that a bound parameter will be a data-at-execution parameter, an application sets this field in the appropriate record of the APD to a variable that, at execute time, will contain the value SQL_DATA_AT_EXEC or the result of the SQL_LEN_DATA_AT_EXEC macro. If there is more than one such field, SQL_DESC_DATA_PTR can be set to a value uniquely identifying the parameter to help the application determine which parameter is being requested. -# -# -# <P>If the OCTET_LENGTH_PTR field of an ARD is a null pointer, the driver does not return length information for the column. If the SQL_DESC_OCTET_LENGTH_PTR field of an APD is a null pointer, the driver assumes that character strings and binary values are null-terminated. (Binary values should not be null-terminated but should be given a length to avoid truncation.) -# -# -# <P>If the call to <B>SQLFetch</B> or <B>SQLFetchScroll</B> that fills in the buffer pointed to by this field did not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined. This field is a <I>deferred field</I>. It is not used at the time it is set but is used at a later time by the driver to determine or indicate the octet length of the data. -# </dd> -# -# <DT><B>SQL_DESC_PARAMETER_TYPE [IPDs]</B></DT> -# -# <DD>This SQLSMALLINT record field is set to SQL_PARAM_INPUT for an input parameter, SQL_PARAM_INPUT_OUTPUT for an input/output parameter, or SQL_PARAM_OUTPUT for an output parameter. It is set to SQL_PARAM_INPUT by default. -# -# <P>For an IPD, the field is set to SQL_PARAM_INPUT by default if the IPD is not automatically populated by the driver (the SQL_ATTR_ENABLE_AUTO_IPD statement attribute is SQL_FALSE). An application should set this field in the IPD for parameters that are not input parameters. -# </dd> -# -# <DT><B>SQL_DESC_PRECISION [All]</B></DT> -# -# <DD>This SQLSMALLINT record field contains the number of digits for an exact numeric type, the number of bits in the mantissa (binary precision) for an approximate numeric type, or the numbers of digits in the fractional seconds component for the SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, or SQL_INTERVAL_SECOND data type. This field is undefined for all other data types. -# -# <P>The value in this field may be different from the value for "precision" as defined in ODBC 2<I>.x</I>. For more information, see <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>. -# </dd> -# -# <DT><B>SQL_DESC_ROWVER [Implementation descriptors]</B></DT> -# -# <DD>This SQLSMALLINT<B> </B>record field indicates whether a column is automatically modified by the DBMS when a row is updated (for example, a column of the type "timestamp" in SQL Server). The value of this record field is set to SQL_TRUE if the column is a row versioning column, and to SQL_FALSE otherwise. This column attribute is similar to calling <B>SQLSpecialColumns</B> with IdentifierType of SQL_ROWVER to determine whether a column is automatically updated.</dd> -# -# <DT><B>SQL_DESC_SCALE [All]</B></DT> -# -# <DD>This SQLSMALLINT record field contains the defined scale for decimal and numeric data types. The field is undefined for all other data types. -# -# <P>The value in this field may be different from the value for "scale" as defined in ODBC 2<I>.x</I>. For more information, see <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>. -# </dd> -# -# <DT><B>SQL_DESC_SCHEMA_NAME [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the schema name of the base table that contains the column. The return value is driver-dependent if the column is an expression or if the column is part of a view. If the data source does not support schemas or the schema name cannot be determined, this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_SEARCHABLE [IRDs]</B></DT> -# -# <DD>This read-only SQLSMALLINT record field is set to one of the following values: -# -# <UL type=disc> -# <LI>SQL_PRED_NONE if the column cannot be used in a <B>WHERE</B> clause. (This is the same as the SQL_UNSEARCHABLE value in ODBC 2<I>.x</I>.)</li> -# -# <LI>SQL_PRED_CHAR if the column can be used in a <B>WHERE</B> clause but only with the <B>LIKE</B> predicate. (This is the same as the SQL_LIKE_ONLY value in ODBC 2<I>.x</I>.)</li> -# -# <LI>SQL_PRED_BASIC if the column can be used in a <B>WHERE</B> clause with all the comparison operators except <B>LIKE</B>. (This is the same as the SQL_EXCEPT_LIKE value in ODBC 2<I>.x</I>.)</li> -# -# <LI>SQL_PRED_SEARCHABLE if the column can be used in a <B>WHERE</B> clause with any comparison operator.</li> -# </UL> -# </dd> -# -# <DT><B>SQL_DESC_TABLE_NAME [IRDs]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the name of the base table that contains this column. The return value is driver-dependent if the column is an expression or if the column is part of a view.</dd> -# -# <DT><B>SQL_DESC_TYPE [All]</B></DT> -# -# <DD>This SQLSMALLINT record field specifies the concise SQL or C data type for all data types except datetime and interval data types. For the datetime and interval data types, this field specifies the verbose data type, which is SQL_DATETIME or SQL_INTERVAL. -# -# <P>Whenever this field contains SQL_DATETIME or SQL_INTERVAL, the SQL_DESC_DATETIME_INTERVAL_CODE field must contain the appropriate subcode for the concise type. For datetime data types, SQL_DESC_TYPE contains SQL_DATETIME, and the SQL_DESC_DATETIME_INTERVAL_CODE field contains a subcode for the specific datetime data type. For interval data types, SQL_DESC_TYPE contains SQL_INTERVAL and the SQL_DESC_DATETIME_INTERVAL_CODE field contains a subcode for the specific interval data type. -# -# -# <P>The values in the SQL_DESC_TYPE and SQL_DESC_CONCISE_TYPE fields are interdependent. Each time one of the fields is set, the other must also be set. SQL_DESC_TYPE can be set by a call to <B>SQLSetDescField</B> or <B>SQLSetDescRec</B>. SQL_DESC_CONCISE_TYPE can be set by a call to <B>SQLBindCol</B> or <B>SQLBindParameter</B>, or <B>SQLSetDescField</B>. -# -# -# <P>If SQL_DESC_TYPE is set to a concise data type other than an interval or datetime data type, the SQL_DESC_CONCISE_TYPE field is set to the same value and the SQL_DESC_DATETIME_INTERVAL_CODE field is set to 0. -# -# -# <P>If SQL_DESC_TYPE is set to the verbose datetime or interval data type (SQL_DATETIME or SQL_INTERVAL) and the SQL_DESC_DATETIME_INTERVAL_CODE field is set to the appropriate subcode, the SQL_DESC_CONCISE TYPE field is set to the corresponding concise type. Trying to set SQL_DESC_TYPE to one of the concise datetime or interval types will return SQLSTATE HY021 (Inconsistent descriptor information). -# -# -# <P>When the SQL_DESC_TYPE field is set by a call to <B>SQLBindCol</B>, <B>SQLBindParameter</B>, or <B>SQLSetDescField</B>, the following fields are set to the following default values, as shown in the table below. The values of the remaining fields of the same record are undefined. -# -# <!--TS:--> -# <div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>Value of SQL_DESC_TYPE</TH> -# <TH width=52%>Other fields implicitly set</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SQL_CHAR, SQL_VARCHAR, SQL_C_CHAR, SQL_C_VARCHAR</TD> -# <TD width=52%>SQL_DESC_LENGTH is set to 1. SQL_DESC_PRECISION is set to 0.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SQL_DATETIME</TD> -# <TD width=52%>When SQL_DESC_DATETIME_INTERVAL_CODE is set to SQL_CODE_DATE or SQL_CODE_TIME, SQL_DESC_PRECISION is set to 0. When it is set to SQL_DESC_TIMESTAMP, SQL_DESC_PRECISION is set to 6.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SQL_DECIMAL, SQL_NUMERIC,<BR> -# SQL_C_NUMERIC</TD> -# <TD width=52%>SQL_DESC_SCALE is set to 0. SQL_DESC_PRECISION is set to the implementation-defined precision for the respective data type.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SQL_FLOAT, SQL_C_FLOAT</TD> -# <TD width=52%>SQL_DESC_PRECISION is set to the implementation-defined default precision for SQL_FLOAT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SQL_INTERVAL</TD> -# <TD width=52%>When SQL_DESC_DATETIME_INTERVAL_CODE is set to an interval data type, SQL_DESC_DATETIME_INTERVAL_PRECISION is set to 2 (the default interval leading precision). When the interval has a seconds component, SQL_DESC_PRECISION is set to 6 (the default interval seconds precision).</TD> -# </TR> -# </table></div> -# -# <!--TS:--> -# -# <P>When an application calls <B>SQLSetDescField</B> to set fields of a descriptor rather than calling <B>SQLSetDescRec</B>, the application must first declare the data type. When it does, the other fields indicated in the previous table are implicitly set. If any of the values implicitly set are unacceptable, the application can then call <B>SQLSetDescField</B> or <B>SQLSetDescRec</B> to set the unacceptable value explicitly. -# </dd> -# -# <DT><B>SQL_DESC_TYPE_NAME [Implementation descriptors]</B></DT> -# -# <DD>This read-only SQLCHAR * record field contains the data source–dependent type name (for example, "CHAR", "VARCHAR", and so on). If the data type name is unknown, this variable contains an empty string.</dd> -# -# <DT><B>SQL_DESC_UNNAMED [Implementation descriptors]</B></DT> -# -# <DD>This SQLSMALLINT record field in a row descriptor is set by the driver to either SQL_NAMED or SQL_UNNAMED when it sets the SQL_DESC_NAME field. If the SQL_DESC_NAME field contains a column alias or if the column alias does not apply, the driver sets the SQL_DESC_UNNAMED field to SQL_NAMED. If an application sets the SQL_DESC_NAME field of an IPD to a parameter name or alias, the driver sets the SQL_DESC_UNNAMED field of the IPD to SQL_NAMED. If there is no column name or a column alias, the driver sets the SQL_DESC_UNNAMED field to SQL_UNNAMED. -# -# <P>An application can set the SQL_DESC_UNNAMED field of an IPD to SQL_UNNAMED. A driver returns SQLSTATE HY091 (Invalid descriptor field identifier) if an application attempts to set the SQL_DESC_UNNAMED field of an IPD to SQL_NAMED. The SQL_DESC_UNNAMED field of an IRD is read-only; SQLSTATE HY091 (Invalid descriptor field identifier) will be returned if an application attempts to set it. -# </dd> -# -# <DT><B>SQL_DESC_UNSIGNED [Implementation descriptors]</B></DT> -# -# <DD>This read-only SQLSMALLINT record field is set to SQL_TRUE if the column type is unsigned or non-numeric, or SQL_FALSE if the column type is signed.</dd> -# -# <DT><B>SQL_DESC_UPDATABLE [IRDs]</B></DT> -# -# <DD>This read-only SQLSMALLINT record field is set to one of the following values: -# -# <UL type=disc> -# <LI>SQL_ATTR_READ_ONLY if the result set column is read-only.</li> -# -# <LI>SQL_ATTR_WRITE if the result set column is read-write.</li> -# -# <LI>SQL_ATTR_READWRITE_UNKNOWN if it is not known whether the result set column is updatable or not.</li> -# </UL> -# -# -# <P>SQL_DESC_UPDATABLE describes the updatability of the column in the result set, not the column in the base table. The updatability of the column in the base table on which this result set column is based may be different than the value in this field. Whether a column is updatable can be based on the data type, user privileges, and the definition of the result set itself. If it is unclear whether a column is updatable, SQL_ATTR_READWRITE_UNKNOWN should be returned. -# </dd> -# </DL> -# -# <H1>Consistency Checks</H1> -# -# <P>A consistency check is performed by the driver automatically whenever an application passes in a value for the SQL_DESC_DATA_PTR field of the ARD, APD, or IPD. If any of the fields is inconsistent with other fields, <B>SQLSetDescField</B> will return SQLSTATE HY021 (Inconsistent descriptor information). For more information, see "Consistency Check" in <A HREF="odbcsqlsetdescrec.htm">SQLSetDescRec</A>.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>For information about</TH> -# <TH width=52%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Binding a column</TD> -# <TD width=52%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Binding a parameter</TD> -# <TD width=52%><A HREF="odbcsqlbindparameter.htm">SQLBindParameter</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Getting a descriptor field</TD> -# <TD width=52%><A HREF="odbcsqlgetdescfield.htm">SQLGetDescField</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Getting multiple descriptor fields</TD> -# <TD width=52%><A HREF="odbcsqlgetdescrec.htm">SQLGetDescRec</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Setting multiple descriptor fields</TD> -# <TD width=52%><A HREF="odbcsqlsetdescrec.htm">SQLSetDescRec</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -}; diff --git a/storage/ndb/src/old_files/client/odbc/docs/diag.txt b/storage/ndb/src/old_files/client/odbc/docs/diag.txt deleted file mode 100644 index a9a0e0f42d03a449028a909a438e78fc6fff7572..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/diag.txt +++ /dev/null @@ -1,48 +0,0 @@ -# Header Fields - -SQL_DIAG_CURSOR_ROW_COUNT -SQLINTEGER - -SQL_DIAG_DYNAMIC_FUNCTION -SQLCHAR * - -SQL_DIAG_DYNAMIC_FUNCTION_CODE -SQLINTEGER - -SQL_DIAG_NUMBER -SQLINTEGER - -SQL_DIAG_RETURNCODE -SQLRETURN - -SQL_DIAG_ROW_COUNT -SQLINTEGER - -# Record Fields - -SQL_DIAG_CLASS_ORIGIN -SQLCHAR * - -SQL_DIAG_COLUMN_NUMBER -SQLINTEGER - -SQL_DIAG_CONNECTION_NAME -SQLCHAR * - -SQL_DIAG_MESSAGE_TEXT -SQLCHAR * - -SQL_DIAG_NATIVE -SQLINTEGER - -SQL_DIAG_ROW_NUMBER -SQLINTEGER - -SQL_DIAG_SERVER_NAME -SQLCHAR * - -SQL_DIAG_SQLSTATE -SQLCHAR * - -SQL_DIAG_SUBCLASS_ORIGIN -SQLCHAR * diff --git a/storage/ndb/src/old_files/client/odbc/docs/getinfo.pl b/storage/ndb/src/old_files/client/odbc/docs/getinfo.pl deleted file mode 100644 index 34e26b47bab3aa495347cb62ee5a63dfc7597d66..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/getinfo.pl +++ /dev/null @@ -1,3676 +0,0 @@ -# -use strict; - -# -# odbcsqlgetinfo.htm -# -my $info = { -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLGetInfo</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlgetinfo"></A>SQLGetInfo</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLGetInfo</B> returns general information about the driver and data source associated with a connection.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLGetInfo</B>( -# SQLHDBC <I>ConnectionHandle</I>, -# SQLUSMALLINT <I>InfoType</I>, -# SQLPOINTER <I>InfoValuePtr</I>, -# SQLSMALLINT <I>BufferLength</I>, -# SQLSMALLINT * <I>StringLengthPtr</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>ConnectionHandle</I></DT> -# -# <DD>[Input]<BR> -# Connection handle.</dd> -# -# <DT><I>InfoType</I></DT> -# -# <DD>[Input]<BR> -# Type of information.</dd> -# -# <DT><I>InfoValuePtr</I></DT> -# -# <DD>[Output]<BR> -# Pointer to a buffer in which to return the information. Depending on the <I>InfoType</I> requested, the information returned will be one of the following: a null-terminated character string, an SQLUSMALLINT value, an SQLUINTEGER bitmask, an SQLUINTEGER flag, or a SQLUINTEGER binary value. -# -# <P>If the <I>InfoType</I> argument is SQL_DRIVER_HDESC or SQL_DRIVER_HSTMT, the <I>InfoValuePtr</I> argument is both input and output. (See the SQL_DRIVER_HDESC or SQL_DRIVER_HSTMT descriptors later in this function description for more information.) -# </dd> -# -# <DT><I>BufferLength</I></DT> -# -# <DD>[Input]<BR> -# Length of the *<I>InfoValuePtr</I> buffer. If the value in <I>*InfoValuePtr</I> is not a character string or if <I>InfoValuePtr</I> is a null pointer,<I> </I>the <I>BufferLength</I> argument is ignored. The driver assumes that the size of <I>*InfoValuePtr</I> is SQLUSMALLINT or SQLUINTEGER, based on the <I>InfoType</I>. If <I>*InfoValuePtr</I> is a Unicode string (when calling <B>SQLGetInfoW</B>), the <I>BufferLength</I> argument must be an even number; if not, SQLSTATE HY090 (Invalid string or buffer length) is returned. </dd> -# -# <DT><I>StringLengthPtr</I></DT> -# -# <DD>[Output]<BR> -# Pointer to a buffer in which to return the total number of bytes (excluding the null-termination character for character data) available to return in *<I>InfoValuePtr</I>. -# -# <P>For character data, if the number of bytes available to return is greater than or equal to <I>BufferLength</I>, the information in *<I>InfoValuePtr</I> is truncated to <I>BufferLength</I> bytes minus the length of a null-termination character and is null-terminated by the driver. -# -# -# <P>For all other types of data, the value of <I>BufferLength</I> is ignored and the driver assumes the size of *<I>InfoValuePtr</I> is SQLUSMALLINT or SQLUINTEGER, depending on the <I>InfoType</I>. -# </dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLGetInfo</B> returns either SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_DBC and a <I>Handle</I> of <I>ConnectionHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLGetInfo</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=23%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=51%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=51%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>01004</TD> -# <TD width=26%>String data, right truncated</TD> -# <TD width=51%>The buffer *<I>InfoValuePtr</I> was not large enough to return all of the requested information, so the information was truncated. The length of the requested information in its untruncated form is returned in *<I>StringLengthPtr</I>. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>08003</TD> -# <TD width=26%>Connection does not exist</TD> -# <TD width=51%>(DM) The type of information requested in <I>InfoType</I> requires an open connection. Of the information types reserved by ODBC, only SQL_ODBC_VER can be returned without an open connection.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=51%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=51%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY001</TD> -# <TD width=26%>Memory allocation <BR> -# error</TD> -# <TD width=51%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=51%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY024</TD> -# <TD width=26%>Invalid attribute value</TD> -# <TD width=51%>(DM) The <I>InfoType</I> argument was SQL_DRIVER_HSTMT, and the value pointed to by <I>InfoValuePtr</I> was not a valid statement handle. -# <P>(DM) The <I>InfoType</I> argument was SQL_DRIVER_HDESC, and the value pointed to by <I>InfoValuePtr</I> was not a valid descriptor handle.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=51%>(DM) The value specified for argument <I>BufferLength</I> was less than 0. -# <P>(DM) The value specified for <I>BufferLength</I> was an odd number, and <I>*InfoValuePtr </I>was of a Unicode data type.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HY096</TD> -# <TD width=26%>Information type out of range</TD> -# <TD width=51%>The value specified for the argument <I>InfoType</I> was not valid for the version of ODBC supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HYC00</TD> -# <TD width=26%>Optional field not implemented</TD> -# <TD width=51%>The value specified for the argument <I>InfoType</I> was a driver-specific value that is not supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=51%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=23%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=51%>(DM) The driver corresponding to the <I>ConnectionHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P>The currently defined information types are shown in "Information Types," later in this section; it is expected that more will be defined to take advantage of different data sources. A range of information types is reserved by ODBC; driver developers must reserve values for their own driver-specific use from X/Open. <B>SQLGetInfo</B> performs no Unicode conversion or <I>thunking</I> (see <A HREF="odbcodbc_error_codes.htm">Appendix A</A> of the <I>ODBC Programmer's Reference</I>) for driver-defined <I>InfoTypes</I>. For more information, see "<A HREF="odbcdriver_specific_data_types__descriptor_types__information_types.htm">Driver-Specific Data Types, Descriptor Types, Information Types, Diagnostic Types, and Attributes</A>" in Chapter 17: Programming Considerations. The format of the information returned in *<I>InfoValuePtr</I> depends on the <I>InfoType</I> requested. <B>SQLGetInfo</B> will return information in one of five different formats: -# -# <UL type=disc> -# <LI>A null-terminated character string</li> -# -# <LI>An SQLUSMALLINT value</li> -# -# <LI>An SQLUINTEGER bitmask</li> -# -# <LI>An SQLUINTEGER value</li> -# -# <LI>A SQLUINTEGER binary value</li> -# </UL> -# -# <P>The format of each of the following information types is noted in the type's description. The application must cast the value returned in *<I>InfoValuePtr</I> accordingly. For an example of how an application could retrieve data from a SQLUINTEGER bitmask, see "Code Example."</P> -# -# <P>A driver must return a value for each of the information types defined in the tables below. If an information type does not apply to the driver or data source, the driver returns one of the values listed in the following table.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=49%>Format of *<I>InfoValuePtr</I></TH> -# <TH width=51%>Returned value</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>Character string ("Y" or "N")</TD> -# <TD width=51%>"N"</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>Character string (not "Y" or "N")</TD> -# <TD width=51%>Empty string</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQLUSMALLINT</TD> -# <TD width=51%>0</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQLUINTEGER bitmask or SQLUINTEGER binary value</TD> -# <TD width=51%>0L</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>For example, if a data source does not support procedures, <B>SQLGetInfo</B> returns the values listed in the following table for the values of <I>InfoType</I> that are related to procedures.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=49%><I>InfoType</I></TH> -# <TH width=51%>Returned value</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_PROCEDURES</TD> -# <TD width=51%>"N"</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ACCESSIBLE_PROCEDURES</TD> -# <TD width=51%>"N"</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_PROCEDURE_NAME_LEN</TD> -# <TD width=51%>0</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_PROCEDURE_TERM</TD> -# <TD width=51%>Empty string</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P><B>SQLGetInfo</B> returns SQLSTATE HY096 (Invalid argument value) for values of <I>InfoType</I> that are in the range of information types reserved for use by ODBC but are not defined by the version of ODBC supported by the driver. To determine what version of ODBC a driver conforms to, an application calls <B>SQLGetInfo</B> with the SQL_DRIVER_ODBC_VER information type. <B>SQLGetInfo</B> returns SQLSTATE HYC00 (Optional feature not implemented) for values of <I>InfoType</I> that are in the range of information types reserved for driver-specific use but are not supported by the driver.</P> -# -# <P>All calls to <B>SQLGetInfo</B> require an open connection, except when the <I>InfoType</I> is SQL_ODBC_VER, which returns the version of the Driver Manager.</P> -# -# <H1>Information Types</H1> -# -# <P>This section lists the information types supported by <B>SQLGetInfo</B>. Information types are grouped categorically and listed alphabetically. Information types that were added or renamed for ODBC 3<I>.x</I> are also listed.</P> -# -# <H2>Driver Information</H2> -# -# <P>The following values of the <I>InfoType</I> argument return information about the ODBC driver, such as the number of active statements, the data source name, and the interface standards compliance level:</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_ACTIVE_ENVIRONMENTS</TD> -# <TD width=57%>SQL_GETDATA_EXTENSIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_ASYNC_MODE</TD> -# <TD width=57%>SQL_INFO_SCHEMA_VIEWS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_BATCH_ROW_COUNT</TD> -# <TD width=57%>SQL_KEYSET_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_BATCH_SUPPORT</TD> -# <TD width=57%>SQL_KEYSET_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DATA_SOURCE_NAME</TD> -# <TD width=57%>SQL_MAX_ASYNC_CONCURRENT_STATEMENTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_HDBC</TD> -# <TD width=57%>SQL_MAX_CONCURRENT_ACTIVITIES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_HDESC</TD> -# <TD width=57%>SQL_MAX_DRIVER_CONNECTIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_HENV</TD> -# <TD width=57%>SQL_ODBC_INTERFACE_CONFORMANCE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_HLIB</TD> -# <TD width=57%>SQL_ODBC_STANDARD_CLI_CONFORMANCE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_HSTMT</TD> -# <TD width=57%>SQL_ODBC_VER</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_NAME</TD> -# <TD width=57%>SQL_PARAM_ARRAY_ROW_COUNTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_ODBC_VER</TD> -# <TD width=57%>SQL_PARAM_ARRAY_SELECTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DRIVER_VER</TD> -# <TD width=57%>SQL_ROW_UPDATES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DYNAMIC_CURSOR_ATTRIBUTES1</TD> -# <TD width=57%>SQL_SEARCH_PATTERN_ESCAPE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_DYNAMIC_CURSOR_ATTRIBUTES2</TD> -# <TD width=57%>SQL_SERVER_NAME</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1</TD> -# <TD width=57%>SQL_STATIC_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2</TD> -# <TD width=57%>SQL_STATIC_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>SQL_FILE_USAGE</TD> -# <TD width=57%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <H2>DBMS Product Information</H2> -# -# <P>The following values of the <I>InfoType</I> argument return information about the DBMS product, such as the DBMS name and version:</P> -# -# <P>SQL_DATABASE_NAME<BR> -# SQL_DBMS_NAME<BR> -# SQL_DBMS_VER</P> -# -# <H2>Data Source Information</H2> -# -# <P>The following values of the <I>InfoType</I> argument return information about the data source, such as cursor characteristics and transaction capabilities:</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_ACCESSIBLE_PROCEDURES</TD> -# <TD width=46%>SQL_MULT_RESULT_SETS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_ACCESSIBLE_TABLES</TD> -# <TD width=46%>SQL_MULTIPLE_ACTIVE_TXN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_BOOKMARK_PERSISTENCE</TD> -# <TD width=46%>SQL_NEED_LONG_DATA_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_CATALOG_TERM</TD> -# <TD width=46%>SQL_NULL_COLLATION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_COLLATION_SEQ</TD> -# <TD width=46%>SQL_PROCEDURE_TERM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_CONCAT_NULL_BEHAVIOR</TD> -# <TD width=46%>SQL_SCHEMA_TERM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_CURSOR_COMMIT_BEHAVIOR</TD> -# <TD width=46%>SQL_SCROLL_OPTIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_CURSOR_ROLLBACK_BEHAVIOR</TD> -# <TD width=46%>SQL_TABLE_TERM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_CURSOR_SENSITIVITY</TD> -# <TD width=46%>SQL_TXN_CAPABLE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_DATA_SOURCE_READ_ONLY</TD> -# <TD width=46%>SQL_TXN_ISOLATION_OPTION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_DEFAULT_TXN_ISOLATION</TD> -# <TD width=46%>SQL_USER_NAME</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=54%>SQL_DESCRIBE_PARAMETER</TD> -# <TD width=46%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <H2>Supported SQL</H2> -# -# <P>The following values of the <I>InfoType</I> argument return information about the SQL statements supported by the data source. The SQL syntax of each feature described by these information types is the SQL-92 syntax. These information types do not exhaustively describe the entire SQL-92 grammar. Instead, they describe those parts of the grammar for which data sources commonly offer different levels of support. Specifically, most of the DDL statements in SQL-92 are covered.</P> -# -# <P>Applications should determine the general level of supported grammar from the SQL_SQL_CONFORMANCE information type and use the other information types to determine variations from the stated standards compliance level.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_AGGREGATE_FUNCTIONS</TD> -# <TD width=51%>SQL_DROP_TABLE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ALTER_DOMAIN</TD> -# <TD width=51%>SQL_DROP_TRANSLATION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ALTER_SCHEMA</TD> -# <TD width=51%>SQL_DROP_VIEW</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ALTER_TABLE</TD> -# <TD width=51%>SQL_EXPRESSIONS_IN_ORDERBY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ANSI_SQL_DATETIME_LITERALS</TD> -# <TD width=51%>SQL_GROUP_BY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CATALOG_LOCATION </TD> -# <TD width=51%>SQL_IDENTIFIER_CASE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CATALOG_NAME</TD> -# <TD width=51%>SQL_IDENTIFIER_QUOTE_CHAR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CATALOG_NAME_SEPARATOR</TD> -# <TD width=51%>SQL_INDEX_KEYWORDS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CATALOG_USAGE</TD> -# <TD width=51%>SQL_INSERT_STATEMENT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_COLUMN_ALIAS</TD> -# <TD width=51%>SQL_INTEGRITY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CORRELATION_NAME</TD> -# <TD width=51%>SQL_KEYWORDS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_ASSERTION</TD> -# <TD width=51%>SQL_LIKE_ESCAPE_CLAUSE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_CHARACTER_SET</TD> -# <TD width=51%>SQL_NON_NULLABLE_COLUMNS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_COLLATION</TD> -# <TD width=51%>SQL_SQL_CONFORMANCE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_DOMAIN</TD> -# <TD width=51%>SQL_OJ_CAPABILITIES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_SCHEMA</TD> -# <TD width=51%>SQL_ORDER_BY_COLUMNS_IN_SELECT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_TABLE</TD> -# <TD width=51%>SQL_OUTER_JOINS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_TRANSLATION</TD> -# <TD width=51%>SQL_PROCEDURES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DDL_INDEX</TD> -# <TD width=51%>SQL_QUOTED_IDENTIFIER_CASE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DROP_ASSERTION</TD> -# <TD width=51%>SQL_SCHEMA_USAGE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DROP_CHARACTER_SET</TD> -# <TD width=51%>SQL_SPECIAL_CHARACTERS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DROP_COLLATION</TD> -# <TD width=51%>SQL_SUBQUERIES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DROP_DOMAIN</TD> -# <TD width=51%>SQL_UNION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DROP_SCHEMA</TD> -# <TD width=51%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>SQL Limits</B></P> -# -# <P>The following values of the <I>InfoType</I> argument return information about the limits applied to identifiers and clauses in SQL statements, such as the maximum lengths of identifiers and the maximum number of columns in a select list. Limitations can be imposed by either the driver or the data source.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_BINARY_LITERAL_LEN</TD> -# <TD width=51%>SQL_MAX_IDENTIFIER_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_CATALOG_NAME_LEN</TD> -# <TD width=51%>SQL_MAX_INDEX_SIZE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_CHAR_LITERAL_LEN</TD> -# <TD width=51%>SQL_MAX_PROCEDURE_NAME_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMN_NAME_LEN</TD> -# <TD width=51%>SQL_MAX_ROW_SIZE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMNS_IN_GROUP_BY</TD> -# <TD width=51%>SQL_MAX_ROW_SIZE_INCLUDES_LONG</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMNS_IN_INDEX</TD> -# <TD width=51%>SQL_MAX_SCHEMA_NAME_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMNS_IN_ORDER_BY</TD> -# <TD width=51%>SQL_MAX_STATEMENT_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMNS_IN_SELECT</TD> -# <TD width=51%>SQL_MAX_TABLE_NAME_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_COLUMNS_IN_TABLE</TD> -# <TD width=51%>SQL_MAX_TABLES_IN_SELECT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_MAX_CURSOR_NAME_LEN</TD> -# <TD width=51%>SQL_MAX_USER_NAME_LEN</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Scalar Function Information</B></P> -# -# <P>The following values of the <I>InfoType</I> argument return information about the scalar functions supported by the data source and the driver. For more information about scalar functions, see <A HREF="odbcscalar_functions.htm">Appendix E: Scalar Functions</A>.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CONVERT_FUNCTIONS</TD> -# <TD width=51%>SQL_TIMEDATE_ADD_INTERVALS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_NUMERIC_FUNCTIONS</TD> -# <TD width=51%>SQL_TIMEDATE_DIFF_INTERVALS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_STRING_FUNCTIONS</TD> -# <TD width=51%>SQL_TIMEDATE_FUNCTIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_SYSTEM_FUNCTIONS</TD> -# <TD width=51%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Conversion Information</B></P> -# -# <P>The following values of the <I>InfoType</I> argument return a list of the SQL data types to which the data source can convert the specified SQL data type with the <B>CONVERT</B> scalar function:</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_BIGINT</TD> -# <TD width=47%>SQL_CONVERT_LONGVARBINARY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_BINARY</TD> -# <TD width=47%>SQL_CONVERT_LONGVARCHAR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_BIT</TD> -# <TD width=47%>SQL_CONVERT_NUMERIC</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_CHAR</TD> -# <TD width=47%>SQL_CONVERT_REAL</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_DATE</TD> -# <TD width=47%>SQL_CONVERT_SMALLINT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_DECIMAL</TD> -# <TD width=47%>SQL_CONVERT_TIME</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_DOUBLE</TD> -# <TD width=47%>SQL_CONVERT_TIMESTAMP</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_FLOAT</TD> -# <TD width=47%>SQL_CONVERT_TINYINT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_INTEGER</TD> -# <TD width=47%>SQL_CONVERT_VARBINARY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_INTERVAL_YEAR_MONTH</TD> -# <TD width=47%>SQL_CONVERT_VARCHAR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=53%>SQL_CONVERT_INTERVAL_DAY_TIME</TD> -# <TD width=47%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Information Types Added for ODBC 3<I>.x</I></B></P> -# -# <P>The following values of the <I>InfoType</I> argument have been added for ODBC 3<I>.x</I>:</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ACTIVE_ENVIRONMENTS</TD> -# <TD width=51%>SQL_DROP_ASSERTION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_AGGREGATE_FUNCTIONS</TD> -# <TD width=51%>SQL_DROP_CHARACTER_SET</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ALTER_DOMAIN</TD> -# <TD width=51%>SQL_DROP_COLLATION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ALTER_SCHEMA</TD> -# <TD width=51%>SQL_DROP_DOMAIN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ANSI_SQL_DATETIME_LITERALS</TD> -# <TD width=51%>SQL_DROP_SCHEMA</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_ASYNC_MODE</TD> -# <TD width=51%>SQL_DROP_TABLE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_BATCH_ROW_COUNT</TD> -# <TD width=51%>SQL_DROP_TRANSLATION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_BATCH_SUPPORT</TD> -# <TD width=51%>SQL_DROP_VIEW</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CATALOG_NAME</TD> -# <TD width=51%>SQL_DYNAMIC_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_COLLATION_SEQ</TD> -# <TD width=51%>SQL_DYNAMIC_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CONVERT_INTERVAL_YEAR_MONTH</TD> -# <TD width=51%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CONVERT_INTERVAL_DAY_TIME</TD> -# <TD width=51%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_ASSERTION</TD> -# <TD width=51%>SQL_INFO_SCHEMA_VIEWS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_CHARACTER_SET</TD> -# <TD width=51%>SQL_INSERT_STATEMENT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_COLLATION</TD> -# <TD width=51%>SQL_KEYSET_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_DOMAIN</TD> -# <TD width=51%>SQL_KEYSET_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_SCHEMA</TD> -# <TD width=51%>SQL_MAX_ASYNC_CONCURRENT_STATEMENTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_TABLE</TD> -# <TD width=51%>SQL_MAX_IDENTIFIER_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CREATE_TRANSLATION</TD> -# <TD width=51%>SQL_PARAM_ARRAY_ROW_COUNTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_CURSOR_SENSITIVITY</TD> -# <TD width=51%>SQL_PARAM_ARRAY_SELECTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DDL_INDEX</TD> -# <TD width=51%>SQL_STATIC_CURSOR_ATTRIBUTES1</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DESCRIBE_PARAMETER</TD> -# <TD width=51%>SQL_STATIC_CURSOR_ATTRIBUTES2</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DM_VER</TD> -# <TD width=51%>SQL_XOPEN_CLI_YEAR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=49%>SQL_DRIVER_HDESC</TD> -# <TD width=51%> </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Information Types Renamed for ODBC 3<I>.x</I></B></P> -# -# <P>The following values of the <I>InfoType</I> argument have been renamed for ODBC 3<I>.x</I>.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=55%>ODBC 2.0 <I>InfoType</I></TH> -# <TH width=45%>ODBC 3<I>.x</I> <I>InfoType</I></TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_ACTIVE_CONNECTIONS</TD> -# <TD width=45%>SQL_MAX_DRIVER_CONNECTIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_ACTIVE_STATEMENTS</TD> -# <TD width=45%>SQL_MAX_CONCURRENT_ACTIVITIES</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_MAX_OWNER_NAME_LEN</TD> -# <TD width=45%>SQL_MAX_SCHEMA_NAME_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_MAX_QUALIFIER_NAME_LEN</TD> -# <TD width=45%>SQL_MAX_CATALOG_NAME_LEN</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_ODBC_SQL_OPT_IEF</TD> -# <TD width=45%>SQL_INTEGRITY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_OWNER_TERM</TD> -# <TD width=45%>SQL_SCHEMA_TERM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_OWNER_USAGE</TD> -# <TD width=45%>SQL_SCHEMA_USAGE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_QUALIFIER_LOCATION</TD> -# <TD width=45%>SQL_CATALOG_LOCATION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_QUALIFIER_NAME_SEPARATOR</TD> -# <TD width=45%>SQL_CATALOG_NAME_SEPARATOR</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_QUALIFIER_TERM</TD> -# <TD width=45%>SQL_CATALOG_TERM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=55%>SQL_QUALIFIER_USAGE</TD> -# <TD width=45%>SQL_CATALOG_USAGE</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Information Types Deprecated in ODBC 3<I>.x</I></B></P> -# -# <P>The following values of the <I>InfoType</I> argument have been deprecated in ODBC 3<I>.x</I>. ODBC 3<I>.x</I> drivers must continue to support these information types for backward compatibility with ODBC 2<I>.x</I> applications. (For more information on these types, see "<A HREF="odbcsqlgetinfo_support.htm">SQLGetInfo Support</A>" in Appendix G: Driver Guidelines for Backward Compatibility.)</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=51%>SQL_FETCH_DIRECTION</TD> -# <TD width=49%>SQL_POS_OPERATIONS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=51%>SQL_LOCK_TYPES</TD> -# <TD width=49%>SQL_POSITIONED_STATEMENTS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=51%>SQL_ODBC_API_CONFORMANCE</TD> -# <TD width=49%>SQL_SCROLL_CONCURRENCY</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=51%>SQL_ODBC_SQL_CONFORMANCE</TD> -# <TD width=49%>SQL_STATIC_SENSITIVITY</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <H2>Information Type Descriptions</H2> -# -# <P>The following table alphabetically lists each information type, the version of ODBC in which it was introduced, and its description.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%><I>InfoType</I></TH> -# <TH width=50%>Returns</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ACCESSIBLE_PROCEDURES<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the user can execute all procedures returned by <B>SQLProcedures</B>; "N" if there may be procedures returned that the user cannot execute.</TD> -# </TR> - SQL_ACCESSIBLE_PROCEDURES => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ACCESSIBLE_TABLES<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the user is guaranteed <B>SELECT</B> privileges to all tables returned by <B>SQLTables</B>; "N" if there may be tables returned that the user cannot access.</TD> -# </TR> - SQL_ACCESSIBLE_TABLES => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ACTIVE_ENVIRONMENTS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of active environments that the driver can support. If there is no specified limit or the limit is unknown, this value is set to zero.</TD> -# </TR> - SQL_ACTIVE_ENVIRONMENTS => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_AGGREGATE_FUNCTIONS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating support for aggregation functions: -# <P>SQL_AF_ALL<BR> -# SQL_AF_AVG<BR> -# SQL_AF_COUNT<BR> -# SQL_AF_DISTINCT<BR> -# SQL_AF_MAX<BR> -# SQL_AF_MIN<BR> -# SQL_AF_SUM </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_AGGREGATE_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ALTER_DOMAIN<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>ALTER DOMAIN</B> statement, as defined in SQL-92, supported by the data source. An SQL-92 Full level–compliant driver will always return all of the bitmasks. A return value of "0" means that the <B>ALTER DOMAIN</B> statement is not supported. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_AD_ADD_DOMAIN_CONSTRAINT = Adding a domain constraint is supported (Full level)</P> -# -# <P>SQL_AD_ADD_DOMAIN_DEFAULT = <alter domain> <set domain default clause> is supported (Full level)</P> -# -# <P>SQL_AD_CONSTRAINT_NAME_DEFINITION = <constraint name definition clause> is supported for naming domain constraint (Intermediate level)</P> -# -# <P>SQL_AD_DROP_DOMAIN_CONSTRAINT = <drop domain constraint clause> is supported (Full level)</P> -# -# <P>SQL_AD_DROP_DOMAIN_DEFAULT = <alter domain> <drop domain default clause> is supported (Full level)</P> -# -# <P>The following bits specify the supported <constraint attributes> if <add domain constraint> is supported (the SQL_AD_ADD_DOMAIN_CONSTRAINT bit is set):</P> -# -# <P>SQL_AD_ADD_CONSTRAINT_DEFERRABLE (Full level)<BR> -# SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE (Full level)<BR> -# SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED (Full level)<BR> -# SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE (Full level)</P> -# </TD> -# </TR> - SQL_ALTER_DOMAIN => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ALTER_TABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>ALTER TABLE</B> statement supported by the data source. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_AT_ADD_COLUMN_COLLATION = <add column> clause is supported, with facility to specify column collation (Full level) (ODBC 3.0)</P> -# -# <P>SQL_AT_ADD_COLUMN_DEFAULT = <add column> clause is supported, with facility to specify column defaults (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_ADD_COLUMN_SINGLE = <add column> is supported (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_ADD_CONSTRAINT = <add column> clause is supported, with facility to specify column constraints (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_ADD_TABLE_CONSTRAINT = <add table constraint> clause is supported (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_CONSTRAINT_NAME_DEFINITION = <constraint name definition> is supported for naming column and table constraints (Intermediate level) (ODBC 3.0)</P> -# -# <P>SQL_AT_DROP_COLUMN_CASCADE = <drop column> CASCADE is supported (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_DROP_COLUMN_DEFAULT = <alter column> <drop column default clause> is supported (Intermediate level) (ODBC 3.0)</P> -# -# <P>SQL_AT_DROP_COLUMN_RESTRICT = <drop column> RESTRICT is supported (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE (ODBC 3.0)</P> -# -# <P>SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT = <drop column> RESTRICT is supported (FIPS Transitional level) (ODBC 3.0)</P> -# -# <P>SQL_AT_SET_COLUMN_DEFAULT = <alter column> <set column default clause> is supported (Intermediate level) (ODBC 3.0)</P> -# -# <P>The following bits specify the support <constraint attributes> if specifying column or table constraints is supported (the SQL_AT_ADD_CONSTRAINT bit is set):</P> -# -# <P>SQL_AT_CONSTRAINT_INITIALLY_DEFERRED (Full level) (ODBC 3.0)<BR> -# SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE (Full level) (ODBC 3.0)<BR> -# SQL_AT_CONSTRAINT_DEFERRABLE (Full level) (ODBC 3.0)<BR> -# SQL_AT_CONSTRAINT_NON_DEFERRABLE (Full level) (ODBC 3.0)</P> -# </TD> -# </TR> - SQL_ALTER_TABLE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ASYNC_MODE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value indicating the level of asynchronous support in the driver: -# <P>SQL_AM_CONNECTION = Connection level asynchronous execution is supported. Either all statement handles associated with a given connection handle are in asynchronous mode or all are in synchronous mode. A statement handle on a connection cannot be in asynchronous mode while another statement handle on the same connection is in synchronous mode, and vice versa.</P> -# -# <P>SQL_AM_STATEMENT = Statement level asynchronous execution is supported. Some statement handles associated with a connection handle can be in asynchronous mode, while other statement handles on the same connection are in synchronous mode.</P> -# -# <P>SQL_AM_NONE = Asynchronous mode is not supported.</P> -# </TD> -# </TR> - SQL_ASYNC_MODE => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_BATCH_ROW_COUNT <BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the behavior of the driver with respect to the availability of row counts. The following bitmasks are used in conjunction with the information type: -# <P>SQL_BRC_ROLLED_UP = Row counts for consecutive INSERT, DELETE, or UPDATE statements are rolled up into one. If this bit is not set, then row counts are available for each individual statement.</P> -# -# <P>SQL_BRC_PROCEDURES = Row counts, if any, are available when a batch is executed in a stored procedure. If row counts are available, they can be rolled up or individually available, depending on the SQL_BRC_ROLLED_UP bit.</P> -# -# <P>SQL_BRC_EXPLICIT = Row counts, if any, are available when a batch is executed directly by calling <B>SQLExecute</B> or <B>SQLExecDirect</B>. If row counts are available, they can be rolled up or individually available, depending on the SQL_BRC_ROLLED_UP bit.</P> -# </TD> -# </TR> - SQL_BATCH_ROW_COUNT => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_BATCH_SUPPORT <BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the driver's support for batches. The following bitmasks are used to determine which level is supported: -# <P>SQL_BS_SELECT_EXPLICIT = The driver supports explicit batches that can have result-set generating statements.</P> -# -# <P>SQL_BS_ROW_COUNT_EXPLICIT = The driver supports explicit batches that can have row-count generating statements.</P> -# -# <P>SQL_BS_SELECT_PROC = The driver supports explicit procedures that can have result-set generating statements.</P> -# -# <P>SQL_BS_ROW_COUNT_PROC = The driver supports explicit procedures that can have row-count generating statements.</P> -# </TD> -# </TR> - SQL_BATCH_SUPPORT => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_BOOKMARK_PERSISTENCE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the operations through which bookmarks persist. -# <P>The following bitmasks are used in conjunction with the flag to determine through which options bookmarks persist:</P> -# -# <P>SQL_BP_CLOSE = Bookmarks are valid after an application calls <B>SQLFreeStmt</B> with the SQL_CLOSE option, or <B>SQLCloseCursor</B> to close the cursor associated with a statement.</P> -# -# <P>SQL_BP_DELETE = The bookmark for a row is valid after that row has been deleted.</P> -# -# <P>SQL_BP_DROP = Bookmarks are valid after an application calls <B>SQLFreeHandle</B> with a <I>HandleType</I> of SQL_HANDLE_STMT to drop a statement.</P> -# -# <P>SQL_BP_TRANSACTION = Bookmarks are valid after an application commits or rolls back a transaction.</P> -# -# <P>SQL_BP_UPDATE = The bookmark for a row is valid after any column in that row has been updated, including key columns.</P> -# -# <P>SQL_BP_OTHER_HSTMT = A bookmark associated with one statement can be used with another statement. Unless SQL_BP_CLOSE or SQL_BP_DROP is specified, the cursor on the first statement must be open.</P> -# </TD> -# </TR> - SQL_BOOKMARK_PERSISTENCE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CATALOG_LOCATION<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating the position of the catalog in a qualified table name: -# <P>SQL_CL_START<BR> -# SQL_CL_END</P> -# -# <P>For example, an Xbase driver returns SQL_CL_START because the directory (catalog) name is at the start of the table name, as in \EMPDATA\EMP.DBF. An ORACLE Server driver returns SQL_CL_END because the catalog is at the end of the table name, as in ADMIN.EMP@EMPDATA.</P> -# -# <P>An SQL-92 Full level–conformant driver will always return SQL_CL_START. A value of 0 is returned if catalogs are not supported by the data source. To find out whether catalogs are supported, an application calls <B>SQLGetInfo</B> with the SQL_CATALOG_NAME information type.</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_QUALIFIER_LOCATION.</P> -# </TD> -# </TR> - SQL_CATALOG_LOCATION => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CATALOG_NAME<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>A character string: "Y" if the server supports catalog names, or "N" if it does not. -# <P>An SQL-92 Full level–conformant driver will always return "Y".</P> -# </TD> -# </TR> - SQL_CATALOG_NAME => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CATALOG_NAME_SEPARATOR<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: the character or characters that the data source defines as the separator between a catalog name and the qualified name element that follows or precedes it. -# <P>An empty string is returned if catalogs are not supported by the data source. To find out whether catalogs are supported, an application calls <B>SQLGetInfo</B> with the SQL_CATALOG_NAME information type. An SQL-92 Full level–conformant driver will always return ".".</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_QUALIFIER_NAME_SEPARATOR.</P> -# </TD> -# </TR> - SQL_CATALOG_NAME_SEPARATOR => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CATALOG_TERM<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the data source vendor's name for a catalog; for example, "database" or "directory". This string can be in upper, lower, or mixed case. -# <P>An empty string is returned if catalogs are not supported by the data source. To find out whether catalogs are supported, an application calls <B>SQLGetInfo</B> with the SQL_CATALOG_NAME information type. An SQL-92 Full level–conformant driver will always return "catalog".</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_QUALIFIER_TERM.</P> -# </TD> -# </TR> - SQL_CATALOG_TERM => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CATALOG_USAGE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the statements in which catalogs can be used. -# <P>The following bitmasks are used to determine where catalogs can be used:</P> -# -# <P>SQL_CU_DML_STATEMENTS = Catalogs are supported in all Data Manipulation Language statements: <B>SELECT</B>, <B>INSERT</B>, <B>UPDATE</B>, <B>DELETE</B>, and if supported, <B>SELECT FOR UPDATE</B> and positioned update and delete statements.</P> -# -# <P>SQL_CU_PROCEDURE_INVOCATION = Catalogs are supported in the ODBC procedure invocation statement.</P> -# -# <P>SQL_CU_TABLE_DEFINITION = Catalogs are supported in all table definition statements: <B>CREATE TABLE</B>, <B>CREATE VIEW</B>, <B>ALTER TABLE</B>, <B>DROP TABLE</B>, and <B>DROP VIEW</B>.</P> -# -# <P>SQL_CU_INDEX_DEFINITION = Catalogs are supported in all index definition statements: <B>CREATE INDEX</B> and <B>DROP INDEX</B>.</P> -# -# <P>SQL_CU_PRIVILEGE_DEFINITION = Catalogs are supported in all privilege definition statements: <B>GRANT</B> and <B>REVOKE</B>. </P> -# -# <P>A value of 0 is returned if catalogs are not supported by the data source. To find out whether catalogs are supported, an application calls <B>SQLGetInfo</B> with the SQL_CATALOG_NAME information type. An SQL-92 Full level–conformant driver will always return a bitmask with all of these bits set.</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_QUALIFIER_USAGE.</P> -# </TD> -# </TR> - SQL_CATALOG_USAGE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_COLLATION_SEQ<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>The name of the collation sequence. This is a character string that indicates the name of the default collation for the default character set for this server (for example, 'ISO 8859-1' or EBCDIC). If this is unknown, an empty string will be returned. An SQL-92 Full level–conformant driver will always return a non-empty string.</TD> -# </TR> - SQL_COLLATION_SEQ => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_COLUMN_ALIAS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports column aliases; otherwise, "N". -# <P>A column alias is an alternate name that can be specified for a column in the select list by using an AS clause. An SQL-92 Entry level–conformant driver will always return "Y".</P> -# </TD> -# </TR> - SQL_COLUMN_ALIAS => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CONCAT_NULL_BEHAVIOR<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating how the data source handles the concatenation of NULL valued character data type columns with non-NULL valued character data type columns: -# <P>SQL_CB_NULL = Result is NULL valued.</P> -# -# <P>SQL_CB_NON_NULL = Result is concatenation of non-NULL valued column or columns. </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return SQL_CB_NULL.</P> -# </TD> -# </TR> - SQL_CONCAT_NULL_BEHAVIOR => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CONVERT_BIGINT<BR> - SQL_CONVERT_BIGINT => { - type => q(Bitmask), - }, -# SQL_CONVERT_BINARY<BR> - SQL_CONVERT_BINARY => { - type => q(Bitmask), - }, -# SQL_CONVERT_BIT <BR> - SQL_CONVERT_BIT => { - type => q(Bitmask), - }, -# SQL_CONVERT_CHAR <BR> - SQL_CONVERT_CHAR => { - type => q(Bitmask), - }, -# SQL_CONVERT_GUID<BR> - SQL_CONVERT_GUID => { - type => q(Bitmask), - omit => 1, - }, -# SQL_CONVERT_DATE<BR> - SQL_CONVERT_DATE => { - type => q(Bitmask), - }, -# SQL_CONVERT_DECIMAL<BR> - SQL_CONVERT_DECIMAL => { - type => q(Bitmask), - }, -# SQL_CONVERT_DOUBLE<BR> - SQL_CONVERT_DOUBLE => { - type => q(Bitmask), - }, -# SQL_CONVERT_FLOAT<BR> - SQL_CONVERT_FLOAT => { - type => q(Bitmask), - }, -# SQL_CONVERT_INTEGER<BR> - SQL_CONVERT_INTEGER => { - type => q(Bitmask), - }, -# SQL_CONVERT_INTERVAL_YEAR_MONTH<BR> - SQL_CONVERT_INTERVAL_YEAR_MONTH => { - type => q(Bitmask), - }, -# SQL_CONVERT_INTERVAL_DAY_TIME<BR> - SQL_CONVERT_INTERVAL_DAY_TIME => { - type => q(Bitmask), - }, -# SQL_CONVERT_LONGVARBINARY<BR> - SQL_CONVERT_LONGVARBINARY => { - type => q(Bitmask), - }, -# SQL_CONVERT_LONGVARCHAR<BR> - SQL_CONVERT_LONGVARCHAR => { - type => q(Bitmask), - }, -# SQL_CONVERT_NUMERIC<BR> - SQL_CONVERT_NUMERIC => { - type => q(Bitmask), - }, -# SQL_CONVERT_REAL<BR> - SQL_CONVERT_REAL => { - type => q(Bitmask), - }, -# SQL_CONVERT_SMALLINT<BR> - SQL_CONVERT_SMALLINT => { - type => q(Bitmask), - }, -# SQL_CONVERT_TIME<BR> - SQL_CONVERT_TIME => { - type => q(Bitmask), - }, -# SQL_CONVERT_TIMESTAMP<BR> - SQL_CONVERT_TIMESTAMP => { - type => q(Bitmask), - }, -# SQL_CONVERT_TINYINT<BR> - SQL_CONVERT_TINYINT => { - type => q(Bitmask), - }, -# SQL_CONVERT_VARBINARY<BR> - SQL_CONVERT_VARBINARY => { - type => q(Bitmask), - }, -# SQL_CONVERT_VARCHAR <BR> - SQL_CONVERT_VARCHAR => { - type => q(Bitmask), - }, -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask. The bitmask indicates the conversions supported by the data source with the <B>CONVERT</B> scalar function for data of the type named in the <I>InfoType</I>. If the bitmask equals zero, the data source does not support any conversions from data of the named type, including conversion to the same data type. -# <P>For example, to find out if a data source supports the conversion of SQL_INTEGER data to the SQL_BIGINT data type, an application calls <B>SQLGetInfo</B> with the <I>InfoType</I> of SQL_CONVERT_INTEGER. The application performs an <B>AND</B> operation with the returned bitmask and SQL_CVT_BIGINT. If the resulting value is nonzero, the conversion is supported. </P> -# -# <P>The following bitmasks are used to determine which conversions are supported:</P> -# -# <P>SQL_CVT_BIGINT (ODBC 1.0)<BR> -# SQL_CVT_BINARY (ODBC 1.0)<BR> -# SQL_CVT_BIT (ODBC 1.0) <BR> -# SQL_CVT_GUID (ODBC 3.5)<BR> -# SQL_CVT_CHAR (ODBC 1.0) <BR> -# SQL_CVT_DATE (ODBC 1.0)<BR> -# SQL_CVT_DECIMAL (ODBC 1.0)<BR> -# SQL_CVT_DOUBLE (ODBC 1.0)<BR> -# SQL_CVT_FLOAT (ODBC 1.0)<BR> -# SQL_CVT_INTEGER (ODBC 1.0)<BR> -# SQL_CVT_INTERVAL_YEAR_MONTH (ODBC 3.0)<BR> -# SQL_CVT_INTERVAL_DAY_TIME (ODBC 3.0)<BR> -# SQL_CVT_LONGVARBINARY (ODBC 1.0)<BR> -# SQL_CVT_LONGVARCHAR (ODBC 1.0)<BR> -# SQL_CVT_NUMERIC (ODBC 1.0)<BR> -# SQL_CVT_REAL ODBC 1.0)<BR> -# SQL_CVT_SMALLINT (ODBC 1.0)<BR> -# SQL_CVT_TIME (ODBC 1.0)<BR> -# SQL_CVT_TIMESTAMP (ODBC 1.0)<BR> -# SQL_CVT_TINYINT (ODBC 1.0)<BR> -# SQL_CVT_VARBINARY (ODBC 1.0)<BR> -# SQL_CVT_VARCHAR (ODBC 1.0)</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CONVERT_FUNCTIONS<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scalar conversion functions supported by the driver and associated data source. -# <P>The following bitmask is used to determine which conversion functions are supported:</P> -# -# <P>SQL_FN_CVT_CAST<BR> -# SQL_FN_CVT_CONVERT</P> -# </TD> -# </TR> - SQL_CONVERT_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CORRELATION_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating whether table correlation names are supported: -# <P>SQL_CN_NONE = Correlation names are not supported.</P> -# -# <P>SQL_CN_DIFFERENT = Correlation names are supported but must differ from the names of the tables they represent.</P> -# -# <P>SQL_CN_ANY = Correlation names are supported and can be any valid user-defined name. </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return SQL_CN_ANY.</P> -# </TD> -# </TR> - SQL_CORRELATION_NAME => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_ASSERTION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE ASSERTION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CA_CREATE_ASSERTION</P> -# -# <P>The following bits specify the supported constraint attribute if the ability to specify constraint attributes explicitly is supported (see the SQL_ALTER_TABLE and SQL_CREATE_TABLE information types):</P> -# -# <P>SQL_CA_CONSTRAINT_INITIALLY_DEFERRED<BR> -# SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE<BR> -# SQL_CA_CONSTRAINT_DEFERRABLE<BR> -# SQL_CA_CONSTRAINT_NON_DEFERRABLE</P> -# -# <P>An SQL-92 Full level–conformant driver will always return all of these options as supported. A return value of "0" means that the <B>CREATE ASSERTION</B> statement is not supported.</P> -# </TD> -# </TR> - SQL_CREATE_ASSERTION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_CHARACTER_SET<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE CHARACTER SET</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CCS_CREATE_CHARACTER_SET<BR> -# SQL_CCS_COLLATE_CLAUSE<BR> -# SQL_CCS_LIMITED_COLLATION</P> -# -# <P>An SQL-92 Full level–conformant driver will always return all of these options as supported. A return value of "0" means that the <B>CREATE CHARACTER SET</B> statement is not supported.</P> -# </TD> -# </TR> - SQL_CREATE_CHARACTER_SET => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_COLLATION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE COLLATION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_CCOL_CREATE_COLLATION </P> -# -# <P>An SQL-92 Full level–conformant driver will always return this option as supported. A return value of "0" means that the <B>CREATE COLLATION</B> statement is not supported.</P> -# </TD> -# </TR> - SQL_CREATE_COLLATION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_DOMAIN<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE DOMAIN</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CDO_CREATE_DOMAIN = The CREATE DOMAIN statement is supported (Intermediate level).</P> -# -# <P>SQL_CDO_CONSTRAINT_NAME_DEFINITION = <constraint name definition> is supported for naming domain constraints (Intermediate level).</P> -# -# <P>The following bits specify the ability to create column constraints:<BR> -# SQL_CDO_DEFAULT = Specifying domain constraints is supported (Intermediate level)<BR> -# SQL_CDO_CONSTRAINT = Specifying domain defaults is supported (Intermediate level)<BR> -# SQL_CDO_COLLATION = Specifying domain collation is supported (Full level)</P> -# -# <P>The following bits specify the supported constraint attributes if specifying domain constraints is supported (SQL_CDO_DEFAULT is set):</P> -# -# <P>SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED (Full level)<BR> -# SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE (Full level)<BR> -# SQL_CDO_CONSTRAINT_DEFERRABLE (Full level)<BR> -# SQL_CDO_CONSTRAINT_NON_DEFERRABLE (Full level)</P> -# -# <P>A return value of "0" means that the <B>CREATE DOMAIN</B> statement is not supported.</P> -# </TD> -# </TR> - SQL_CREATE_DOMAIN => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_SCHEMA<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE SCHEMA</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CS_CREATE_SCHEMA<BR> -# SQL_CS_AUTHORIZATION<BR> -# SQL_CS_DEFAULT_CHARACTER_SET </P> -# -# <P>An SQL-92 Intermediate level–conformant driver will always return the SQL_CS_CREATE_SCHEMA and SQL_CS_AUTHORIZATION options as supported. These must also be supported at the SQL-92 Entry level, but not necessarily as SQL statements. An SQL-92 Full level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_CREATE_SCHEMA => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_TABLE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE TABLE</B> statement, as defined in SQL-92, supported by the data source. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CT_CREATE_TABLE = The CREATE TABLE statement is supported. (Entry level)</P> -# -# <P>SQL_CT_TABLE_CONSTRAINT = Specifying table constraints is supported (FIPS Transitional level)</P> -# -# <P>SQL_CT_CONSTRAINT_NAME_DEFINITION = The <constraint name definition> clause is supported for naming column and table constraints (Intermediate level)</P> -# -# <P>The following bits specify the ability to create temporary tables:</P> -# -# <P>SQL_CT_COMMIT_PRESERVE = Deleted rows are preserved on commit. (Full level)<BR> -# SQL_CT_COMMIT_DELETE = Deleted rows are deleted on commit. (Full level)<BR> -# SQL_CT_GLOBAL_TEMPORARY = Global temporary tables can be created. (Full level)<BR> -# SQL_CT_LOCAL_TEMPORARY = Local temporary tables can be created. (Full level)</P> -# -# <P>The following bits specify the ability to create column constraints:</P> -# -# <P>SQL_CT_COLUMN_CONSTRAINT = Specifying column constraints is supported (FIPS Transitional level)<BR> -# SQL_CT_COLUMN_DEFAULT = Specifying column defaults is supported (FIPS Transitional level)<BR> -# SQL_CT_COLUMN_COLLATION = Specifying column collation is supported (Full level)</P> -# -# <P>The following bits specify the supported constraint attributes if specifying column or table constraints is supported:</P> -# -# <P>SQL_CT_CONSTRAINT_INITIALLY_DEFERRED (Full level)<BR> -# SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE (Full level)<BR> -# SQL_CT_CONSTRAINT_DEFERRABLE (Full level)<BR> -# SQL_CT_CONSTRAINT_NON_DEFERRABLE (Full level)</P> -# </TD> -# </TR> - SQL_CREATE_TABLE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_TRANSLATION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE TRANSLATION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_CTR_CREATE_TRANSLATION</P> -# -# <P>An SQL-92 Full level–conformant driver will always return these options as supported. A return value of "0" means that the <B>CREATE TRANSLATION</B> statement is not supported.</P> -# </TD> -# </TR> - SQL_CREATE_TRANSLATION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CREATE_VIEW<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>CREATE VIEW</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_CV_CREATE_VIEW<BR> -# SQL_CV_CHECK_OPTION<BR> -# SQL_CV_CASCADED<BR> -# SQL_CV_LOCAL </P> -# -# <P>A return value of "0" means that the <B>CREATE VIEW</B> statement is not supported.</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return the SQL_CV_CREATE_VIEW and SQL_CV_CHECK_OPTION options as supported. </P> -# -# <P>An SQL-92 Full level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_CREATE_VIEW => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CURSOR_COMMIT_BEHAVIOR<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating how a <B>COMMIT</B> operation affects cursors and prepared statements in the data source: -# <P>SQL_CB_DELETE = Close cursors and delete prepared statements. To use the cursor again, the application must reprepare and reexecute the statement.</P> -# -# <P>SQL_CB_CLOSE = Close cursors. For prepared statements, the application can call <B>SQLExecute</B> on the statement without calling <B>SQLPrepare</B> again.</P> -# -# <P>SQL_CB_PRESERVE = Preserve cursors in the same position as before the <B>COMMIT</B> operation. The application can continue to fetch data, or it can close the cursor and reexecute the statement without repreparing it.</P> -# </TD> -# </TR> - SQL_CURSOR_COMMIT_BEHAVIOR => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CURSOR_ROLLBACK_BEHAVIOR<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating how a <B>ROLLBACK</B> operation affects cursors and prepared statements in the data source: -# <P>SQL_CB_DELETE = Close cursors and delete prepared statements. To use the cursor again, the application must reprepare and reexecute the statement.</P> -# -# <P>SQL_CB_CLOSE = Close cursors. For prepared statements, the application can call <B>SQLExecute</B> on the statement without calling <B>SQLPrepare</B> again.</P> -# -# <P>SQL_CB_PRESERVE = Preserve cursors in the same position as before the <B>ROLLBACK</B> operation. The application can continue to fetch data, or it can close the cursor and reexecute the statement without repreparing it.</P> -# </TD> -# </TR> - SQL_CURSOR_ROLLBACK_BEHAVIOR => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_CURSOR_ROLLBACK_SQL_CURSOR_SENSITIVITY<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value indicating the support for cursor sensitivity: -# <P>SQL_INSENSITIVE = All cursors on the statement handle show the result set without reflecting any changes made to it by any other cursor within the same transaction.</P> -# -# <P>SQL_UNSPECIFIED = It is unspecified whether cursors on the statement handle make visible the changes made to a result set by another cursor within the same transaction. Cursors on the statement handle may make visible none, some, or all such changes.</P> -# -# <P>SQL_SENSITIVE = Cursors are sensitive to changes made by other cursors within the same transaction.</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return the SQL_UNSPECIFIED option as supported. </P> -# -# <P>An SQL-92 Full level–conformant driver will always return the SQL_INSENSITIVE option as supported.</P> -# </TD> -# </TR> - SQL_CURSOR_SENSITIVITY => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DATA_SOURCE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the data source name used during connection. If the application called <B>SQLConnect</B>, this is the value of the <I>szDSN</I> argument. If the application called <B>SQLDriverConnect</B> or <B>SQLBrowseConnect</B>, this is the value of the DSN keyword in the connection string passed to the driver. If the connection string did not contain the <B>DSN</B> keyword (such as when it contains the <B>DRIVER</B> keyword), this is an empty string.</TD> -# </TR> - SQL_DATA_SOURCE_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DATA_SOURCE_READ_ONLY<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string. "Y" if the data source is set to READ ONLY mode, "N" if it is otherwise. -# <P>This characteristic pertains only to the data source itself; it is not a characteristic of the driver that enables access to the data source. A driver that is read/write can be used with a data source that is read-only. If a driver is read-only, all of its data sources must be read-only and must return SQL_DATA_SOURCE_READ_ONLY.</P> -# </TD> -# </TR> - SQL_DATA_SOURCE_READ_ONLY => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DATABASE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the name of the current database in use, if the data source defines a named object called "database". -# <P class="indent"><b class="le">Note</b> In ODBC 3<I>.x</I>, the value returned for this <I>InfoType</I> can also be returned by calling <B>SQLGetConnectAttr</B> with an <I>Attribute</I> argument of SQL_ATTR_CURRENT_CATALOG.</P> -# </TD> -# </TR> - SQL_DATABASE_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DATETIME_LITERALS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the SQL-92 datetime literals supported by the data source. Note that these are the datetime literals listed in the SQL-92 specification and are separate from the datetime literal escape clauses defined by ODBC. For more information about the ODBC datetime literal escape clauses, see "Date, Time, Timestamp, and Datetime Interval Literals" in Chapter 8: SQL Statements. -# <P>A FIPS Transitional level–conformant driver will always return the "1" value in the bitmask for the bits listed below. A value of "0" means that SQL-92 datetime literals are not supported.</P> -# -# <P>The following bitmasks are used to determine which literals are supported:</P> -# -# <P>SQL_DL_SQL92_DATE<BR> -# SQL_DL_SQL92_TIME<BR> -# SQL_DL_SQL92_TIMESTAMP<BR> -# SQL_DL_SQL92_INTERVAL_YEAR<BR> -# SQL_DL_SQL92_INTERVAL_MONTH<BR> -# SQL_DL_SQL92_INTERVAL_DAY<BR> -# SQL_DL_SQL92_INTERVAL_HOUR<BR> -# SQL_DL_SQL92_INTERVAL_MINUTE<BR> -# SQL_DL_SQL92_INTERVAL_SECOND<BR> -# SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH<BR> -# SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR</P> -# -# <P>SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE<BR> -# SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND<BR> -# SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE<BR> -# SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND<BR> -# SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND</P> -# </TD> -# </TR> - SQL_DATETIME_LITERALS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DBMS_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the name of the DBMS product accessed by the driver.</TD> -# </TR> - SQL_DBMS_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DBMS_VER<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string indicating the version of the DBMS product accessed by the driver. The version is of the form ##.##.####, where the first two digits are the major version, the next two digits are the minor version, and the last four digits are the release version. The driver must render the DBMS product version in this form but can also append the DBMS product-specific version as well. For example, "04.01.0000 Rdb 4.1".</TD> -# </TR> - SQL_DBMS_VER => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DDL_INDEX<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value that indicates support for creation and dropping of indexes: -# <P>SQL_DI_CREATE_INDEX<BR> -# SQL_DI_DROP_INDEX </P> -# </TD> -# </TR> - SQL_DDL_INDEX => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DEFAULT_TXN_ISOLATION<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER value that indicates the default transaction isolation level supported by the driver or data source, or zero if the data source does not support transactions. The following terms are used to define transaction isolation levels: -# <P><B>Dirty Read </B>Transaction 1 changes a row. Transaction 2 reads the changed row before transaction 1 commits the change. If transaction 1 rolls back the change, transaction 2 will have read a row that is considered to have never existed.</P> -# -# <P><B>Nonrepeatable Read </B>Transaction 1 reads a row. Transaction 2 updates or deletes that row and commits this change. If transaction 1 attempts to reread the row, it will receive different row values or discover that the row has been deleted.</P> -# -# <P><B>Phantom </B>Transaction 1 reads a set of rows that satisfy some search criteria. Transaction 2 generates one or more rows (through either inserts or updates) that match the search criteria. If transaction 1 reexecutes the statement that reads the rows, it receives a different set of rows.</P> -# -# <P>If the data source supports transactions, the driver returns one of the following bitmasks:</P> -# -# <P>SQL_TXN_READ_UNCOMMITTED = Dirty reads, nonrepeatable reads, and phantoms are possible.</P> -# -# <P>SQL_TXN_READ_COMMITTED = Dirty reads are not possible. Nonrepeatable reads and phantoms are possible.</P> -# -# <P>SQL_TXN_REPEATABLE_READ = Dirty reads and nonrepeatable reads are not possible. Phantoms are possible.</P> -# -# <P>SQL_TXN_SERIALIZABLE = Transactions are serializable. Serializable transactions do not allow dirty reads, nonrepeatable reads, or phantoms.</P> -# </TD> -# </TR> - SQL_DEFAULT_TXN_ISOLATION => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DESCRIBE_PARAMETER<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>A character string: "Y" if parameters can be described; "N", if not. -# <P>An SQL-92 Full level–conformant driver will usually return "Y" because it will support the <B>DESCRIBE INPUT</B> statement. Because this does not directly specify the underlying SQL support, however, describing parameters might not be supported, even in a SQL-92 Full level–conformant driver.</P> -# </TD> -# </TR> - SQL_DESCRIBE_PARAMETER => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DM_VER<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>A character string with the version of the Driver Manager. The version is of the form ##.##.####.####, where: -# <P>The first set of two digits is the major ODBC version, as given by the constant SQL_SPEC_MAJOR.</P> -# -# <P>The second set of two digits is the minor ODBC version, as given by the constant SQL_SPEC_MINOR.</P> -# -# <P>The third set of four digits is the Driver Manager major build number.</P> -# -# <P>The last set of four digits is the Driver Manager minor build number.</P> -# </TD> -# </TR> - SQL_DM_VER => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_HDBC<BR> -# SQL_DRIVER_HENV<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER value, the driver's environment handle or connection handle, determined by the argument <I>InfoType</I>. -# <P>These information types are implemented by the Driver Manager alone.</P> -# </TD> -# </TR> - SQL_DRIVER_HDBC => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_HDESC<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value, the driver's descriptor handle determined by the Driver Manager's descriptor handle, which must be passed on input in *<I>InfoValuePtr</I> from the application. In this case, <I>InfoValuePtr</I> is both an input and output argument. The input descriptor handle passed in *<I>InfoValuePtr</I> must have been either explicitly or implicitly allocated on the <I>ConnectionHandle</I>. -# <P>The application should make a copy of the Driver Manager's descriptor handle before calling <B>SQLGetInfo</B> with this information type, to ensure that the handle is not overwritten on output.</P> -# -# <P>This information type is implemented by the Driver Manager alone.</P> -# </TD> -# </TR> - SQL_DRIVER_HDESC => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_HLIB<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value, the <I>hinst</I> from the load library returned to the Driver Manager when it loaded the driver DLL (on a Microsoft® Windows® platform) or equivalent on a non-Windows platform. The handle is valid only for the connection handle specified in the call to <B>SQLGetInfo</B>. -# <P>This information type is implemented by the Driver Manager alone.</P> -# </TD> -# </TR> - SQL_DRIVER_HLIB => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_HSTMT<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER value, the driver's statement handle determined by the Driver Manager statement handle, which must be passed on input in *<I>InfoValuePtr</I> from the application. In this case, <I>InfoValuePtr</I> is both an input and an output argument. The input statement handle passed in *<I>InfoValuePtr</I> must have been allocated on the argument <I>ConnectionHandle</I>. -# <P>The application should make a copy of the Driver Manager's statement handle before calling <B>SQLGetInfo</B> with this information type, to ensure that the handle is not overwritten on output.</P> -# -# <P>This information type is implemented by the Driver Manager alone.</P> -# </TD> -# </TR> - SQL_DRIVER_HSTMT => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the file name of the driver used to access the data source.</TD> -# </TR> - SQL_DRIVER_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_ODBC_VER<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string with the version of ODBC that the driver supports. The version is of the form ##.##, where the first two digits are the major version and the next two digits are the minor version. SQL_SPEC_MAJOR and SQL_SPEC_MINOR define the major and minor version numbers. For the version of ODBC described in this manual, these are 3 and 0, and the driver should return "03.00".</TD> -# </TR> - SQL_DRIVER_ODBC_VER => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DRIVER_VER<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the version of the driver and optionally, a description of the driver. At a minimum, the version is of the form ##.##.####, where the first two digits are the major version, the next two digits are the minor version, and the last four digits are the release version.</TD> -# </TR> - SQL_DRIVER_VER => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_ASSERTION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP ASSERTION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_DA_DROP_ASSERTION </P> -# -# <P>An SQL-92 Full level–conformant driver will always return this option as supported.</P> -# </TD> -# </TR> - SQL_DROP_ASSERTION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_CHARACTER_SET<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP CHARACTER SET</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_DCS_DROP_CHARACTER_SET </P> -# -# <P>An SQL-92 Full level–conformant driver will always return this option as supported.</P> -# </TD> -# </TR> - SQL_DROP_CHARACTER_SET => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_COLLATION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP COLLATION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_DC_DROP_COLLATION </P> -# -# <P>An SQL-92 Full level–conformant driver will always return this option as supported.</P> -# </TD> -# </TR> - SQL_DROP_COLLATION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_DOMAIN<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP DOMAIN</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_DD_DROP_DOMAIN<BR> -# SQL_DD_CASCADE<BR> -# SQL_DD_RESTRICT </P> -# -# <P>An SQL-92 Intermediate level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_DROP_DOMAIN => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_SCHEMA<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP SCHEMA</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_DS_DROP_SCHEMA<BR> -# SQL_DS_CASCADE<BR> -# SQL_DS_RESTRICT </P> -# -# <P>An SQL-92 Intermediate level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_DROP_SCHEMA => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_TABLE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP TABLE</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_DT_DROP_TABLE<BR> -# SQL_DT_CASCADE<BR> -# SQL_DT_RESTRICT </P> -# -# <P>An FIPS Transitional level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_DROP_TABLE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_TRANSLATION<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP TRANSLATION</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmask is used to determine which clauses are supported:</P> -# -# <P>SQL_DTR_DROP_TRANSLATION </P> -# -# <P>An SQL-92 Full level–conformant driver will always return this option as supported.</P> -# </TD> -# </TR> - SQL_DROP_TRANSLATION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DROP_VIEW<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses in the <B>DROP VIEW</B> statement, as defined in SQL-92, supported by the data source. -# <P>The following bitmasks are used to determine which clauses are supported:</P> -# -# <P>SQL_DV_DROP_VIEW<BR> -# SQL_DV_CASCADE<BR> -# SQL_DV_RESTRICT </P> -# -# <P>An FIPS Transitional level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_DROP_VIEW => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DYNAMIC_CURSOR_ATTRIBUTES1<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a dynamic cursor that are supported by the driver. This bitmask contains the first subset of attributes; for the second subset, see SQL_DYNAMIC_CURSOR_ATTRIBUTES2. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA1_NEXT = A <I>FetchOrientation</I> argument of SQL_FETCH_NEXT is supported in a call to <B>SQLFetchScroll</B> when the cursor is a dynamic cursor.</P> -# -# <P>SQL_CA1_ABSOLUTE = <I>FetchOrientation</I> arguments of SQL_FETCH_FIRST, SQL_FETCH_LAST, and SQL_FETCH_ABSOLUTE are supported in a call to <B>SQLFetchScroll</B> when the cursor is a dynamic cursor. (The rowset that will be fetched is independent of the current cursor position.) </P> -# -# <P>SQL_CA1_RELATIVE = <I>FetchOrientation</I> arguments of SQL_FETCH_PRIOR and SQL_FETCH_RELATIVE are supported in a call to <B>SQLFetchScroll</B> when the cursor is a dynamic cursor. (The rowset that will be fetched is dependent on the current cursor position. Note that this is separated from SQL_FETCH_NEXT because in a forward-only cursor, only SQL_FETCH_NEXT is supported.) </P> -# -# <P>SQL_CA1_BOOKMARK = A <I>FetchOrientation</I> argument of SQL_FETCH_BOOKMARK is supported in a call to <B>SQLFetchScroll</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_LOCK_EXCLUSIVE = A <I>LockType</I> argument of SQL_LOCK_EXCLUSIVE is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor.</P> -# -# <P>SQL_CA1_LOCK_NO_CHANGE = A <I>LockType</I> argument of SQL_LOCK_NO_CHANGE is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_LOCK_UNLOCK = A <I>LockType</I> argument of SQL_LOCK_UNLOCK is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor.</P> -# -# <P>SQL_CA1_POS_POSITION = An <I>Operation</I> argument of SQL_POSITION is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor.</P> -# -# <P>SQL_CA1_POS_UPDATE = An <I>Operation</I> argument of SQL_UPDATE is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_POS_DELETE = An <I>Operation</I> argument of SQL_DELETE is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_POS_REFRESH = An <I>Operation</I> argument of SQL_REFRESH is supported in a call to <B>SQLSetPos</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_POSITIONED_UPDATE = An UPDATE WHERE CURRENT OF SQL statement is supported when the cursor is a dynamic cursor. (An SQL-92 Entry level–conformant driver will always return this option as supported.)</P> -# -# <P>SQL_CA1_POSITIONED_DELETE = A DELETE WHERE CURRENT OF SQL statement is supported when the cursor is a dynamic cursor. (An SQL-92 Entry level–conformant driver will always return this option as supported.)</P> -# -# <P>SQL_CA1_SELECT_FOR_UPDATE = A SELECT FOR UPDATE SQL statement is supported when the cursor is a dynamic cursor. (An SQL-92 Entry level–conformant driver will always return this option as supported.)</P> -# -# <P>SQL_CA1_BULK_ADD = An <I>Operation</I> argument of SQL_ADD is supported in a call to <B>SQLBulkOperations</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_BULK_UPDATE_BY_BOOKMARK = An <I>Operation</I> argument of SQL_UPDATE_BY_BOOKMARK is supported in a call to <B>SQLBulkOperations</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_BULK_DELETE_BY_BOOKMARK = An <I>Operation</I> argument of SQL_DELETE_BY_BOOKMARK is supported in a call to <B>SQLBulkOperations</B> when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA1_BULK_FETCH_BY_BOOKMARK = An <I>Operation</I> argument of SQL_FETCH_BY_BOOKMARK is supported in a call to <B>SQLBulkOperations</B> when the cursor is a dynamic cursor. </P> -# -# <P>An SQL-92 Intermediate level–conformant driver will usually return the SQL_CA1_NEXT, SQL_CA1_ABSOLUTE, and SQL_CA1_RELATIVE options as supported, because it supports scrollable cursors through the embedded SQL FETCH statement. Because this does not directly determine the underlying SQL support, however, scrollable cursors may not be supported, even for an SQL-92 Intermediate level–conformant driver.</P> -# </TD> -# </TR> - SQL_DYNAMIC_CURSOR_ATTRIBUTES1 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_DYNAMIC_CURSOR_ATTRIBUTES2<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a dynamic cursor that are supported by the driver. This bitmask contains the second subset of attributes; for the first subset, see SQL_DYNAMIC_CURSOR_ATTRIBUTES1. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA2_READ_ONLY_CONCURRENCY = A read-only dynamic cursor, in which no updates are allowed, is supported. (The SQL_ATTR_CONCURRENCY statement attribute can be SQL_CONCUR_READ_ONLY for a dynamic cursor). </P> -# -# <P>SQL_CA2_LOCK_CONCURRENCY = A dynamic cursor that uses the lowest level of locking sufficient to ensure that the row can be updated is supported. (The SQL_ATTR_CONCURRENCY statement attribute can be SQL_CONCUR_LOCK for a dynamic cursor.) These locks must be consistent with the transaction isolation level set by the SQL_ATTR_TXN_ISOLATION connection attribute.</P> -# -# <P>SQL_CA2_OPT_ROWVER_CONCURRENCY = A dynamic cursor that uses the optimistic concurrency control comparing row versions is supported. (The SQL_ATTR_CONCURRENCY statement attribute can be SQL_CONCUR_ROWVER for a dynamic cursor.) </P> -# -# <P>SQL_CA2_OPT_VALUES_CONCURRENCY = A dynamic cursor that uses the optimistic concurrency control comparing values is supported. (The SQL_ATTR_CONCURRENCY statement attribute can be SQL_CONCUR_VALUES for a dynamic cursor.) </P> -# -# <P>SQL_CA2_SENSITIVITY_ADDITIONS = Added rows are visible to a dynamic cursor; the cursor can scroll to those rows. (Where these rows are added to the cursor is driver-dependent.) </P> -# -# <P>SQL_CA2_SENSITIVITY_DELETIONS = Deleted rows are no longer available to a dynamic cursor, and do not leave a "hole" in the result set; after the dynamic cursor scrolls from a deleted row, it cannot return to that row. </P> -# -# <P>SQL_CA2_SENSITIVITY_UPDATES = Updates to rows are visible to a dynamic cursor; if the dynamic cursor scrolls from and returns to an updated row, the data returned by the cursor is the updated data, not the original data. </P> -# -# <P>SQL_CA2_MAX_ROWS_SELECT = The SQL_ATTR_MAX_ROWS statement attribute affects <B>SELECT</B> statements when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_MAX_ROWS_INSERT = The SQL_ATTR_MAX_ROWS statement attribute affects <B>INSERT</B> statements when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_MAX_ROWS_DELETE = The SQL_ATTR_MAX_ROWS statement attribute affects <B>DELETE</B> statements when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_MAX_ROWS_UPDATE = The SQL_ATTR_MAX_ROWS statement attribute affects <B>UPDATE</B> statements when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_MAX_ROWS_CATALOG = The SQL_ATTR_MAX_ROWS statement attribute affects <B>CATALOG</B> result sets when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_MAX_ROWS_AFFECTS_ALL = The SQL_ATTR_MAX_ROWS statement attribute affects <B>SELECT</B>, <B>INSERT</B>, <B>DELETE</B>, and <B>UPDATE</B> statements, and <B>CATALOG</B> result sets, when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_CRC_EXACT = The exact row count is available in the SQL_DIAG_CURSOR_ROW_COUNT diagnostic field when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_CRC_APPROXIMATE = An approximate row count is available in the SQL_DIAG_CURSOR_ROW_COUNT diagnostic field when the cursor is a dynamic cursor. </P> -# -# <P>SQL_CA2_SIMULATE_NON_UNIQUE = The driver does not guarantee that simulated positioned update or delete statements will affect only one row when the cursor is a dynamic cursor; it is the application's responsibility to guarantee this. (If a statement affects more than one row, <B>SQLExecute</B> or <B>SQLExecDirect</B> returns SQLSTATE 01001 [Cursor operation conflict].) To set this behavior, the application calls <B>SQLSetStmtAttr</B> with the SQL_ATTR_SIMULATE_CURSOR attribute set to SQL_SC_NON_UNIQUE. </P> -# -# <P>SQL_CA2_SIMULATE_TRY_UNIQUE = The driver attempts to guarantee that simulated positioned update or delete statements will affect only one row when the cursor is a dynamic cursor. The driver always executes such statements, even if they might affect more than one row, such as when there is no unique key. (If a statement affects more than one row, <B>SQLExecute</B> or <B>SQLExecDirect</B> returns SQLSTATE 01001 [Cursor operation conflict].) To set this behavior, the application calls <B>SQLSetStmtAttr</B> with the SQL_ATTR_SIMULATE_CURSOR attribute set to SQL_SC_TRY_UNIQUE. </P> -# -# <P>SQL_CA2_SIMULATE_UNIQUE = The driver guarantees that simulated positioned update or delete statements will affect only one row when the cursor is a dynamic cursor. If the driver cannot guarantee this for a given statement, <B>SQLExecDirect</B> or <B>SQLPrepare</B> return SQLSTATE 01001 (Cursor operation conflict). To set this behavior, the application calls <B>SQLSetStmtAttr</B> with the SQL_ATTR_SIMULATE_CURSOR attribute set to SQL_SC_UNIQUE.</P> -# </TD> -# </TR> - SQL_DYNAMIC_CURSOR_ATTRIBUTES2 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_EXPRESSIONS_IN_ORDERBY<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports expressions in the <B>ORDER BY</B> list; "N" if it does not.</TD> -# </TR> - SQL_EXPRESSIONS_IN_ORDERBY => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_FILE_USAGE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value indicating how a single-tier driver directly treats files in a data source: -# <P>SQL_FILE_NOT_SUPPORTED = The driver is not a single-tier driver. For example, an ORACLE driver is a two-tier driver.</P> -# -# <P>SQL_FILE_TABLE = A single-tier driver treats files in a data source as tables. For example, an Xbase driver treats each Xbase file as a table.</P> -# -# <P>SQL_FILE_CATALOG = A single-tier driver treats files in a data source as a catalog. For example, a Microsoft® Access driver treats each Microsoft Access file as a complete database.</P> -# -# <P>An application might use this to determine how users will select data. For example, Xbase users often think of data as stored in files, while ORACLE and MicrosoftAccess users generally think of data as stored in tables.</P> -# -# <P>When a user selects an Xbase data source, the application could display the Windows <B>File Open</B> common dialog box; when the user selects a Microsoft Access or ORACLE data source, the application could display a custom <B>Select Table</B> dialog box.</P> -# </TD> -# </TR> - SQL_FILE_USAGE => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a forward-only cursor that are supported by the driver. This bitmask contains the first subset of attributes; for the second subset, see SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA1_NEXT<BR> -# SQL_CA1_LOCK_EXCLUSIVE<BR> -# SQL_CA1_LOCK_NO_CHANGE<BR> -# SQL_CA1_LOCK_UNLOCK<BR> -# SQL_CA1_POS_POSITION<BR> -# SQL_CA1_POS_UPDATE<BR> -# SQL_CA1_POS_DELETE<BR> -# SQL_CA1_POS_REFRESH<BR> -# SQL_CA1_POSITIONED_UPDATE<BR> -# SQL_CA1_POSITIONED_DELETE<BR> -# SQL_CA1_SELECT_FOR_UPDATE<BR> -# SQL_CA1_BULK_ADD<BR> -# SQL_CA1_BULK_UPDATE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_DELETE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_FETCH_BY_BOOKMARK</P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES1 (and substitute "forward-only cursor" for "dynamic cursor" in the descriptions). </P> -# </TD> -# </TR> - SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a forward-only cursor that are supported by the driver. This bitmask contains the second subset of attributes; for the first subset, see SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA2_READ_ONLY_CONCURRENCY<BR> -# SQL_CA2_LOCK_CONCURRENCY<BR> -# SQL_CA2_OPT_ROWVER_CONCURRENCY<BR> -# SQL_CA2_OPT_VALUES_CONCURRENCY<BR> -# SQL_CA2_SENSITIVITY_ADDITIONS<BR> -# SQL_CA2_SENSITIVITY_DELETIONS<BR> -# SQL_CA2_SENSITIVITY_UPDATES<BR> -# SQL_CA2_MAX_ROWS_SELECT<BR> -# SQL_CA2_MAX_ROWS_INSERT<BR> -# SQL_CA2_MAX_ROWS_DELETE<BR> -# SQL_CA2_MAX_ROWS_UPDATE<BR> -# SQL_CA2_MAX_ROWS_CATALOG<BR> -# SQL_CA2_MAX_ROWS_AFFECTS_ALL<BR> -# SQL_CA2_CRC_EXACT<BR> -# SQL_CA2_CRC_APPROXIMATE<BR> -# SQL_CA2_SIMULATE_NON_UNIQUE<BR> -# SQL_CA2_SIMULATE_TRY_UNIQUE<BR> -# SQL_CA2_SIMULATE_UNIQUE </P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES2 (and substitute "forward-only cursor" for "dynamic cursor" in the descriptions).</P> -# </TD> -# </TR> - SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_GETDATA_EXTENSIONS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating extensions to <B>SQLGetData</B>. -# <P>The following bitmasks are used in conjunction with the flag to determine what common extensions the driver supports for <B>SQLGetData</B>:</P> -# -# <P>SQL_GD_ANY_COLUMN = <B>SQLGetData</B> can be called for any unbound column, including those before the last bound column. Note that the columns must be called in order of ascending column number unless SQL_GD_ANY_ORDER is also returned.</P> -# -# <P>SQL_GD_ANY_ORDER = <B>SQLGetData</B> can be called for unbound columns in any order. Note that <B>SQLGetData</B> can be called only for columns after the last bound column unless SQL_GD_ANY_COLUMN is also returned.</P> -# -# <P>SQL_GD_BLOCK = <B>SQLGetData</B> can be called for an unbound column in any row in a block (where the rowset size is greater than 1) of data after positioning to that row with <B>SQLSetPos</B>.</P> -# -# <P>SQL_GD_BOUND = <B>SQLGetData</B> can be called for bound columns as well as unbound columns. A driver cannot return this value unless it also returns SQL_GD_ANY_COLUMN.</P> -# -# <P><B>SQLGetData</B> is required to return data only from unbound columns that occur after the last bound column, are called in order of increasing column number, and are not in a row in a block of rows.</P> -# -# <P>If a driver supports bookmarks (either fixed-length or variable-length), it must support calling <B>SQLGetData</B> on column 0. This support is required regardless of what the driver returns for a call to <B>SQLGetInfo</B> with the SQL_GETDATA_EXTENSIONS <I>InfoType</I>.</P> -# </TD> -# </TR> - SQL_GETDATA_EXTENSIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_GROUP_BY<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the relationship between the columns in the <B>GROUP BY</B> clause and the nonaggregated columns in the select list: -# <P>SQL_GB_COLLATE = A <B>COLLATE</B> clause can be specified at the end of each grouping column. (ODBC 3.0)</P> -# -# <P>SQL_GB_NOT_SUPPORTED = <B>GROUP BY</B> clauses are not supported. (ODBC 2.0)</P> -# -# <P>SQL_GB_GROUP_BY_EQUALS_SELECT = The <B>GROUP BY</B> clause must contain all nonaggregated columns in the select list. It cannot contain any other columns. For example, <B>SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT</B>. (ODBC 2.0)</P> -# -# <P>SQL_GB_GROUP_BY_CONTAINS_SELECT = The <B>GROUP BY</B> clause must contain all nonaggregated columns in the select list. It can contain columns that are not in the select list. For example, <B>SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE</B>. (ODBC 2.0)</P> -# -# <P>SQL_GB_NO_RELATION = The columns in the <B>GROUP BY</B> clause and the select list are not related. The meaning of nongrouped, nonaggregated columns in the select list is data source–dependent. For example, <B>SELECT DEPT, SALARY FROM EMPLOYEE GROUP BY DEPT, AGE</B>. (ODBC 2.0)</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return the SQL_GB_GROUP_BY_EQUALS_SELECT option as supported. An SQL-92 Full level–conformant driver will always return the SQL_GB_COLLATE option as supported. If none of the options is supported, the <B>GROUP BY</B> clause is not supported by the data source.</P> -# </TD> -# </TR> - SQL_GROUP_BY => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_IDENTIFIER_CASE<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value as follows: -# <P>SQL_IC_UPPER = Identifiers in SQL are not case-sensitive and are stored in uppercase in system catalog.</P> -# -# <P>SQL_IC_LOWER = Identifiers in SQL are not case-sensitive and are stored in lowercase in system catalog.</P> -# -# <P>SQL_IC_SENSITIVE = Identifiers in SQL are case-sensitive and are stored in mixed case in system catalog.</P> -# -# <P>SQL_IC_MIXED = Identifiers in SQL are not case-sensitive and are stored in mixed case in system catalog. </P> -# -# <P>Because identifiers in SQL-92 are never case-sensitive, a driver that conforms strictly to SQL-92 (any level) will never return the SQL_IC_SENSITIVE option as supported.</P> -# </TD> -# </TR> - SQL_IDENTIFIER_CASE => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_IDENTIFIER_QUOTE_CHAR<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>The character string used as the starting and ending delimiter of a quoted (delimited) identifier in SQL statements. (Identifiers passed as arguments to ODBC functions do not need to be quoted.) If the data source does not support quoted identifiers, a blank is returned. -# <P>This character string can also be used for quoting catalog function arguments when the connection attribute SQL_ATTR_METADATA_ID is set to SQL_TRUE.</P> -# -# <P>Because the identifier quote character in SQL-92 is the double quotation mark ("), a driver that conforms strictly to SQL-92 will always return the double quotation mark character.</P> -# </TD> -# </TR> - SQL_IDENTIFIER_QUOTE_CHAR => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INDEX_KEYWORDS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that enumerates keywords in the CREATE INDEX statement that are supported by the driver: -# <P>SQL_IK_NONE = None of the keywords is supported.</P> -# -# <P>SQL_IK_ASC = ASC keyword is supported.</P> -# -# <P>SQL_IK_DESC = DESC keyword is supported.</P> -# -# <P>SQL_IK_ALL = All keywords are supported.</P> -# -# <P>To see if the CREATE INDEX statement is supported, an application calls <B>SQLGetInfo</B> with the SQL_DLL_INDEX information type.</P> -# </TD> -# </TR> - SQL_INDEX_KEYWORDS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INFO_SCHEMA_VIEWS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the views in the INFORMATION_SCHEMA that are supported by the driver. The views in, and the contents of, INFORMATION_SCHEMA are as defined in SQL-92. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which views are supported:</P> -# -# <P>SQL_ISV_ASSERTIONS = Identifies the catalog's assertions that are owned by a given user. (Full level)</P> -# -# <P>SQL_ISV_CHARACTER_SETS = Identifies the catalog's character sets that are accessible to a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_CHECK_CONSTRAINTS = Identifies the CHECK constraints that are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_COLLATIONS = Identifies the character collations for the catalog that are accessible to a given user. (Full level)</P> -# -# <P>SQL_ISV_COLUMN_DOMAIN_USAGE = Identifies columns for the catalog that are dependent on domains defined in the catalog and are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_COLUMN_PRIVILEGES = Identifies the privileges on columns of persistent tables that are available to or granted by a given user. (FIPS Transitional level)</P> -# -# <P>SQL_ISV_COLUMNS = Identifies the columns of persistent tables that are accessible to a given user. (FIPS Transitional level)</P> -# -# <P>SQL_ISV_CONSTRAINT_COLUMN_USAGE = Similar to CONSTRAINT_TABLE_USAGE view, columns are identified for the various constraints that are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_CONSTRAINT_TABLE_USAGE = Identifies the tables that are used by constraints (referential, unique, and assertions), and are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_DOMAIN_CONSTRAINTS = Identifies the domain constraints (of the domains in the catalog) that are accessible to a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_DOMAINS = Identifies the domains defined in a catalog that are accessible to the user. (Intermediate level)</P> -# -# <P>SQL_ISV_KEY_COLUMN_USAGE = Identifies columns defined in the catalog that are constrained as keys by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_REFERENTIAL_CONSTRAINTS = Identifies the referential constraints that are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_SCHEMATA = Identifies the schemas that are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_SQL_LANGUAGES = Identifies the SQL conformance levels, options, and dialects supported by the SQL implementation. (Intermediate level)</P> -# -# <P>SQL_ISV_TABLE_CONSTRAINTS = Identifies the table constraints that are owned by a given user. (Intermediate level)</P> -# -# <P>SQL_ISV_TABLE_PRIVILEGES = Identifies the privileges on persistent tables that are available to or granted by a given user. (FIPS Transitional level)</P> -# -# <P>SQL_ISV_TABLES = Identifies the persistent tables defined in a catalog that are accessible to a given user. (FIPS Transitional level)</P> -# -# <P>SQL_ISV_TRANSLATIONS = Identifies character translations for the catalog that are accessible to a given user. (Full level) </P> -# -# <P>SQL_ISV_USAGE_PRIVILEGES = Identifies the USAGE privileges on catalog objects that are available to or owned by a given user. (FIPS Transitional level)</P> -# -# <P>SQL_ISV_VIEW_COLUMN_USAGE = Identifies the columns on which the catalog's views that are owned by a given user are dependent. (Intermediate level)</P> -# -# <P>SQL_ISV_VIEW_TABLE_USAGE = Identifies the tables on which the catalog's views that are owned by a given user are dependent. (Intermediate level) </P> -# -# <P>SQL_ISV_VIEWS = Identifies the viewed tables defined in this catalog that are accessible to a given user. (FIPS Transitional level)</P> -# </TD> -# </TR> - SQL_INFO_SCHEMA_VIEWS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INSERT_STATEMENT<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that indicates support for <B>INSERT</B> statements: -# <P>SQL_IS_INSERT_LITERALS</P> -# -# <P>SQL_IS_INSERT_SEARCHED</P> -# -# <P>SQL_IS_SELECT_INTO </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_INSERT_STATEMENT => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_INTEGRITY<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports the Integrity Enhancement Facility; "N" if it does not. -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_ODBC_SQL_OPT_IEF.</P> -# </TD> -# </TR> - SQL_INTEGRITY => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_KEYSET_CURSOR_ATTRIBUTES1<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a keyset cursor that are supported by the driver. This bitmask contains the first subset of attributes; for the second subset, see SQL_KEYSET_CURSOR_ATTRIBUTES2. -# <P>The following bitmasks are used to determine which attributes are supported: </P> -# -# <P>SQL_CA1_NEXT<BR> -# SQL_CA1_ABSOLUTE<BR> -# SQL_CA1_RELATIVE<BR> -# SQL_CA1_BOOKMARK<BR> -# SQL_CA1_LOCK_EXCLUSIVE<BR> -# SQL_CA1_LOCK_NO_CHANGE<BR> -# SQL_CA1_LOCK_UNLOCK<BR> -# SQL_CA1_POS_POSITION<BR> -# SQL_CA1_POS_UPDATE<BR> -# SQL_CA1_POS_DELETE<BR> -# SQL_CA1_POS_REFRESH<BR> -# SQL_CA1_POSITIONED_UPDATE<BR> -# SQL_CA1_POSITIONED_DELETE<BR> -# SQL_CA1_SELECT_FOR_UPDATE<BR> -# SQL_CA1_BULK_ADD<BR> -# SQL_CA1_BULK_UPDATE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_DELETE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_FETCH_BY_BOOKMARK</P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES1 (and substitute "keyset-driven cursor" for "dynamic cursor" in the descriptions).</P> -# -# <P>An SQL-92 Intermediate level–conformant driver will usually return the SQL_CA1_NEXT, SQL_CA1_ABSOLUTE, and SQL_CA1_RELATIVE options as supported, because the driver supports scrollable cursors through the embedded SQL FETCH statement. Because this does not directly determine the underlying SQL support, however, scrollable cursors may not be supported, even for an SQL-92 Intermediate level–conformant driver.</P> -# </TD> -# </TR> - SQL_KEYSET_CURSOR_ATTRIBUTES1 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_KEYSET_CURSOR_ATTRIBUTES2<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a keyset cursor that are supported by the driver. This bitmask contains the second subset of attributes; for the first subset, see SQL_KEYSET_CURSOR_ATTRIBUTES1. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA2_READ_ONLY_CONCURRENCY<BR> -# SQL_CA2_LOCK_CONCURRENCY<BR> -# SQL_CA2_OPT_ROWVER_CONCURRENCY<BR> -# SQL_CA2_OPT_VALUES_CONCURRENCY<BR> -# SQL_CA2_SENSITIVITY_ADDITIONS<BR> -# SQL_CA2_SENSITIVITY_DELETIONS<BR> -# SQL_CA2_SENSITIVITY_UPDATES<BR> -# SQL_CA2_MAX_ROWS_SELECT<BR> -# SQL_CA2_MAX_ROWS_INSERT<BR> -# SQL_CA2_MAX_ROWS_DELETE<BR> -# SQL_CA2_MAX_ROWS_UPDATE<BR> -# SQL_CA2_MAX_ROWS_CATALOG<BR> -# SQL_CA2_MAX_ROWS_AFFECTS_ALL<BR> -# SQL_CA2_CRC_EXACT<BR> -# SQL_CA2_CRC_APPROXIMATE<BR> -# SQL_CA2_SIMULATE_NON_UNIQUE<BR> -# SQL_CA2_SIMULATE_TRY_UNIQUE<BR> -# SQL_CA2_SIMULATE_UNIQUE</P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES1 (and substitute "keyset-driven cursor" for "dynamic cursor" in the descriptions).</P> -# </TD> -# </TR> - SQL_KEYSET_CURSOR_ATTRIBUTES2 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_KEYWORDS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string containing a comma-separated list of all data source–specific keywords. This list does not contain keywords specific to ODBC or keywords used by both the data source and ODBC. This list represents all the reserved keywords; interoperable applications should not use these words in object names. -# <P>For a list of ODBC keywords, see "<A HREF="odbclist_of_reserved_keywords.htm">List of Reserved Keywords</A>" in Appendix C, "SQL Grammar." The <B>#define</B> value SQL_ODBC_KEYWORDS contains a comma-separated list of ODBC keywords.</P> -# </TD> -# </TR> - SQL_KEYWORDS => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_LIKE_ESCAPE_CLAUSE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports an escape character for the percent character (%) and underscore character (_) in a <B>LIKE</B> predicate and the driver supports the ODBC syntax for defining a <B>LIKE</B> predicate escape character; "N" otherwise.</TD> -# </TR> - SQL_LIKE_ESCAPE_CLAUSE => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_ASYNC_CONCURRENT_STATEMENTS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum number of active concurrent statements in asynchronous mode that the driver can support on a given connection. If there is no specific limit or the limit is unknown, this value is zero.</TD> -# </TR> - SQL_MAX_ASYNC_CONCURRENT_STATEMENTS => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_BINARY_LITERAL_LEN<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum length (number of hexadecimal characters, excluding the literal prefix and suffix returned by <B>SQLGetTypeInfo</B>) of a binary literal in an SQL statement. For example, the binary literal 0xFFAA has a length of 4. If there is no maximum length or the length is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_BINARY_LITERAL_LEN => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_CATALOG_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a catalog name in the data source. If there is no maximum length or the length is unknown, this value is set to zero. -# <P>An FIPS Full level–conformant driver will return at least 128.</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_MAX_QUALIFIER_NAME_LEN.</P> -# </TD> -# </TR> - SQL_MAX_CATALOG_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_CHAR_LITERAL_LEN<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum length (number of characters, excluding the literal prefix and suffix returned by <B>SQLGetTypeInfo</B>) of a character literal in an SQL statement. If there is no maximum length or the length is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_CHAR_LITERAL_LEN => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMN_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a column name in the data source. If there is no maximum length or the length is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 18. An FIPS Intermediate level–conformant driver will return at least 128.</P> -# </TD> -# </TR> - SQL_MAX_COLUMN_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMNS_IN_GROUP_BY<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of columns allowed in a <B>GROUP BY</B> clause. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 6. An FIPS Intermediate level–conformant driver will return at least 15.</P> -# </TD> -# </TR> - SQL_MAX_COLUMNS_IN_GROUP_BY => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMNS_IN_INDEX<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of columns allowed in an index. If there is no specified limit or the limit is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_COLUMNS_IN_INDEX => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMNS_IN_ORDER_BY<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of columns allowed in an <B>ORDER BY</B> clause. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 6. An FIPS Intermediate level–conformant driver will return at least 15.</P> -# </TD> -# </TR> - SQL_MAX_COLUMNS_IN_ORDER_BY => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMNS_IN_SELECT<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of columns allowed in a select list. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 100. An FIPS Intermediate level–conformant driver will return at least 250.</P> -# </TD> -# </TR> - SQL_MAX_COLUMNS_IN_SELECT => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_COLUMNS_IN_TABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of columns allowed in a table. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 100. An FIPS Intermediate level–conformant driver will return at least 250.</P> -# </TD> -# </TR> - SQL_MAX_COLUMNS_IN_TABLE => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_CONCURRENT_ACTIVITIES<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of active statements that the driver can support for a connection. A statement is defined as active if it has results pending, with the term "results" meaning rows from a <B>SELECT</B> operation or rows affected by an <B>INSERT</B>, <B>UPDATE</B>, or <B>DELETE</B> operation (such as a row count), or if it is in a NEED_DATA state. This value can reflect a limitation imposed by either the driver or the data source. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_ACTIVE_STATEMENTS.</P> -# </TD> -# </TR> - SQL_MAX_CONCURRENT_ACTIVITIES => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_CURSOR_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a cursor name in the data source. If there is no maximum length or the length is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 18. An FIPS Intermediate level–conformant driver will return at least 128.</P> -# </TD> -# </TR> - SQL_MAX_CURSOR_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_DRIVER_CONNECTIONS<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of active connections that the driver can support for an environment. This value can reflect a limitation imposed by either the driver or the data source. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_ACTIVE_CONNECTIONS.</P> -# </TD> -# </TR> - SQL_MAX_DRIVER_CONNECTIONS => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_IDENTIFIER_LEN<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUSMALLINT that indicates the maximum size in characters that the data source supports for user-defined names. -# <P>An FIPS Entry level–conformant driver will return at least 18. An FIPS Intermediate level–conformant driver will return at least 128.</P> -# </TD> -# </TR> - SQL_MAX_IDENTIFIER_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_INDEX_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum number of bytes allowed in the combined fields of an index. If there is no specified limit or the limit is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_INDEX_SIZE => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_PROCEDURE_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a procedure name in the data source. If there is no maximum length or the length is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_PROCEDURE_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_ROW_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum length of a single row in a table. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 2,000. An FIPS Intermediate level–conformant driver will return at least 8,000.</P> -# </TD> -# </TR> - SQL_MAX_ROW_SIZE => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_ROW_SIZE_INCLUDES_LONG<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>A character string: "Y" if the maximum row size returned for the SQL_MAX_ROW_SIZE information type includes the length of all SQL_LONGVARCHAR and SQL_LONGVARBINARY columns in the row; "N" otherwise.</TD> -# </TR> - SQL_MAX_ROW_SIZE_INCLUDES_LONG => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_SCHEMA_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a schema name in the data source. If there is no maximum length or the length is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 18. An FIPS Intermediate level–conformant driver will return at least 128.</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_MAX_OWNER_NAME_LEN.</P> -# </TD> -# </TR> - SQL_MAX_SCHEMA_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_STATEMENT_LEN<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER value specifying the maximum length (number of characters, including white space) of an SQL statement. If there is no maximum length or the length is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_STATEMENT_LEN => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_TABLE_NAME_LEN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a table name in the data source. If there is no maximum length or the length is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 18. An FIPS Intermediate level–conformant driver will return at least 128.</P> -# </TD> -# </TR> - SQL_MAX_TABLE_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_TABLES_IN_SELECT<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum number of tables allowed in the <B>FROM</B> clause of a <B>SELECT </B>statement. If there is no specified limit or the limit is unknown, this value is set to zero. -# <P>An FIPS Entry level–conformant driver will return at least 15. An FIPS Intermediate level–conformant driver will return at least 50.</P> -# </TD> -# </TR> - SQL_MAX_TABLES_IN_SELECT => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MAX_USER_NAME_LEN<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying the maximum length of a user name in the data source. If there is no maximum length or the length is unknown, this value is set to zero.</TD> -# </TR> - SQL_MAX_USER_NAME_LEN => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MULT_RESULT_SETS<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports multiple result sets, "N" if it does not. -# <P>For more information on multiple result sets, see "<A HREF="odbcmultiple_results.htm">Multiple Results</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_MULT_RESULT_SETS => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_MULTIPLE_ACTIVE_TXN<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the driver supports more than one active transaction at the same time, "N" if only one transaction can be active at any time. -# <P>The information returned for this information type does not apply in the case of distributed transactions.</P> -# </TD> -# </TR> - SQL_MULTIPLE_ACTIVE_TXN => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_NEED_LONG_DATA_LEN<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string: "Y" if the data source needs the length of a long data value (the data type is SQL_LONGVARCHAR, SQL_LONGVARBINARY, or a long data source–specific data type) before that value is sent to the data source, "N" if it does not. For more information, see <B>SQLBindParameter</B> and <B>SQLSetPos</B>.</TD> -# </TR> - SQL_NEED_LONG_DATA_LEN => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_NON_NULLABLE_COLUMNS<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying whether the data source supports NOT NULL in columns: -# <P>SQL_NNC_NULL = All columns must be nullable.</P> -# -# <P>SQL_NNC_NON_NULL = Columns cannot be nullable. (The data source supports the <B>NOT NULL</B> column constraint in <B>CREATE TABLE</B> statements.) </P> -# -# <P>An SQL-92 Entry level–conformant driver will return SQL_NNC_NON_NULL.</P> -# </TD> -# </TR> - SQL_NON_NULLABLE_COLUMNS => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_NULL_COLLATION<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value specifying where NULLs are sorted in a result set: -# <P>SQL_NC_END = NULLs are sorted at the end of the result set, regardless of the ASC or DESC keywords.</P> -# -# <P>SQL_NC_HIGH = NULLs are sorted at the high end of the result set, depending on the ASC or DESC keywords.</P> -# -# <P>SQL_NC_LOW = NULLs are sorted at the low end of the result set, depending on the ASC or DESC keywords.</P> -# -# <P>SQL_NC_START = NULLs are sorted at the start of the result set, regardless of the ASC or DESC keywords.</P> -# </TD> -# </TR> - SQL_NULL_COLLATION => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_NUMERIC_FUNCTIONS<BR> -# (ODBC 1.0) -# <P>The information type was introduced in ODBC 1.0; each bitmask is labeled with the version in which it was introduced.</P> -# </TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scalar numeric functions supported by the driver and associated data source. -# <P>The following bitmasks are used to determine which numeric functions are supported:</P> -# -# <P>SQL_FN_NUM_ABS (ODBC 1.0)<BR> -# SQL_FN_NUM_ACOS (ODBC 1.0)<BR> -# SQL_FN_NUM_ASIN (ODBC 1.0)<BR> -# SQL_FN_NUM_ATAN (ODBC 1.0)<BR> -# SQL_FN_NUM_ATAN2 (ODBC 1.0)<BR> -# SQL_FN_NUM_CEILING (ODBC 1.0)<BR> -# SQL_FN_NUM_COS (ODBC 1.0)<BR> -# SQL_FN_NUM_COT (ODBC 1.0)<BR> -# SQL_FN_NUM_DEGREES (ODBC 2.0)<BR> -# SQL_FN_NUM_EXP (ODBC 1.0)<BR> -# SQL_FN_NUM_FLOOR (ODBC 1.0)<BR> -# SQL_FN_NUM_LOG (ODBC 1.0)<BR> -# SQL_FN_NUM_LOG10 (ODBC 2.0)<BR> -# SQL_FN_NUM_MOD (ODBC 1.0)<BR> -# SQL_FN_NUM_PI (ODBC 1.0)<BR> -# SQL_FN_NUM_POWER (ODBC 2.0)<BR> -# SQL_FN_NUM_RADIANS (ODBC 2.0)<BR> -# SQL_FN_NUM_RAND (ODBC 1.0)<BR> -# SQL_FN_NUM_ROUND (ODBC 2.0)<BR> -# SQL_FN_NUM_SIGN (ODBC 1.0)<BR> -# SQL_FN_NUM_SIN (ODBC 1.0)<BR> -# SQL_FN_NUM_SQRT (ODBC 1.0)<BR> -# SQL_FN_NUM_TAN (ODBC 1.0)<BR> -# SQL_FN_NUM_TRUNCATE (ODBC 2.0)</P> -# </TD> -# </TR> - SQL_NUMERIC_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ODBC_INTERFACE_CONFORMANCE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value indicating the level of the ODBC 3<I>.x</I> interface that the driver conforms to. -# <P>SQL_OIC_CORE: The minimum level that all ODBC drivers are expected to conform to. This level includes basic interface elements such as connection functions, functions for preparing and executing an SQL statement, basic result set metadata functions, basic catalog functions, and so on.</P> -# -# <P>SQL_OIC_LEVEL1: A level including the core standards compliance level functionality, plus scrollable cursors, bookmarks, positioned updates and deletes, and so on.</P> -# -# <P>SQL_OIC_LEVEL2: A level including level 1 standards compliance level functionality, plus advanced features such as sensitive cursors; update, delete, and refresh by bookmarks; stored procedure support; catalog functions for primary and foreign keys; multicatalog support; and so on.</P> -# -# <P>For more information, see "<A HREF="odbcinterface_conformance_levels.htm">Interface Conformance Levels</A>" in Chapter 4: ODBC Fundamentals.</P> -# </TD> -# </TR> - SQL_ODBC_INTERFACE_CONFORMANCE => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ODBC_VER<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the version of ODBC to which the Driver Manager conforms. The version is of the form ##.##.0000, where the first two digits are the major version and the next two digits are the minor version. This is implemented solely in the Driver Manager.</TD> -# </TR> - SQL_ODBC_VER => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_OJ_CAPABILITIES<BR> -# (ODBC 2.01)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the types of outer joins supported by the driver and data source. The following bitmasks are used to determine which types are supported: -# <P>SQL_OJ_LEFT = Left outer joins are supported.</P> -# -# <P>SQL_OJ_RIGHT = Right outer joins are supported.</P> -# -# <P>SQL_OJ_FULL = Full outer joins are supported.</P> -# -# <P>SQL_OJ_NESTED = Nested outer joins are supported.</P> -# -# <P>SQL_OJ_NOT_ORDERED = The column names in the ON clause of the outer join do not have to be in the same order as their respective table names in the <B>OUTER JOIN </B>clause.</P> -# -# <P>SQL_OJ_INNER = The inner table (the right table in a left outer join or the left table in a right outer join) can also be used in an inner join. This does not apply to full outer joins, which do not have an inner table.</P> -# -# <P>SQL_OJ_ALL_COMPARISON_OPS = The comparison operator in the ON clause can be any of the ODBC comparison operators. If this bit is not set, only the equals (=) comparison operator can be used in outer joins.</P> -# -# <P>If none of these options is returned as supported, no outer join clause is supported.</P> -# -# <P>For information on the support of relational join operators in a SELECT statement, as defined by SQL-92, see SQL_SQL92_RELATIONAL_JOIN_OPERATORS.</P> -# </TD> -# </TR> - SQL_OJ_CAPABILITIES => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ORDER_BY_COLUMNS_IN_SELECT<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string: "Y" if the columns in the <B>ORDER BY</B> clause must be in the select list; otherwise, "N".</TD> -# </TR> - SQL_ORDER_BY_COLUMNS_IN_SELECT => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_PARAM_ARRAY_ROW_COUNTS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER enumerating the driver's properties regarding the availability of row counts in a parameterized execution. Has the following values: -# <P>SQL_PARC_BATCH = Individual row counts are available for each set of parameters. This is conceptually equivalent to the driver generating a batch of SQL statements, one for each parameter set in the array. Extended error information can be retrieved by using the SQL_PARAM_STATUS_PTR descriptor field.</P> -# -# <P>SQL_PARC_NO_BATCH = There is only one row count available, which is the cumulative row count resulting from the execution of the statement for the entire array of parameters. This is conceptually equivalent to treating the statement along with the entire parameter array as one atomic unit. Errors are handled the same as if one statement were executed.</P> -# </TD> -# </TR> - SQL_PARAM_ARRAY_ROW_COUNTS => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_PARAM_ARRAY_SELECTS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER enumerating the driver's properties regarding the availability of result sets in a parameterized execution. Has the following values: -# <P>SQL_PAS_BATCH = There is one result set available per set of parameters. This is conceptually equivalent to the driver generating a batch of SQL statements, one for each parameter set in the array.</P> -# -# <P>SQL_PAS_NO_BATCH = There is only one result set available, which represents the cumulative result set resulting from the execution of the statement for the entire array of parameters. This is conceptually equivalent to treating the statement along with the entire parameter array as one atomic unit.</P> -# -# <P>SQL_PAS_NO_SELECT = A driver does not allow a result-set generating statement to be executed with an array of parameters.</P> -# </TD> -# </TR> - SQL_PARAM_ARRAY_SELECTS => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_PROCEDURE_TERM<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the data source vendor's name for a procedure; for example, "database procedure", "stored procedure", "procedure", "package", or "stored query".</TD> -# </TR> - SQL_PROCEDURE_TERM => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_PROCEDURES<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if the data source supports procedures and the driver supports the ODBC procedure invocation syntax; "N" otherwise.</TD> -# </TR> - SQL_PROCEDURES => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_POS_OPERATIONS (ODBC 2.0)</TD> -# <TD width=50%>An SQLINTEGER bitmask enumerating the support operations in <B>SQLSetPos</B>. -# <P>The following bitmasks are used in conjunction with the flag to determine which options are supported.</P> -# -# <P>SQL_POS_POSITION (ODBC 2.0) SQL_POS_REFRESH (ODBC 2.0) SQL_POS_UPDATE (ODBC 2.0) SQL_POS_DELETE (ODBC 2.0) SQL_POS_ADD (ODBC 2.0) </P> -# </TD> -# </TR> - SQL_POS_OPERATIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_QUOTED_IDENTIFIER_CASE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUSMALLINT value as follows: -# <P>SQL_IC_UPPER = Quoted identifiers in SQL are not case-sensitive and are stored in uppercase in the system catalog.</P> -# -# <P>SQL_IC_LOWER = Quoted identifiers in SQL are not case-sensitive and are stored in lowercase in the system catalog.</P> -# -# <P>SQL_IC_SENSITIVE = Quoted identifiers in SQL are case-sensitive and are stored in mixed case in the system catalog. (In an SQL-92–compliant database, quoted identifiers are always case-sensitive.)</P> -# -# <P>SQL_IC_MIXED = Quoted identifiers in SQL are not case-sensitive and are stored in mixed case in the system catalog.</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return SQL_IC_SENSITIVE.</P> -# </TD> -# </TR> - SQL_QUOTED_IDENTIFIER_CASE => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ROW_UPDATES<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string: "Y" if a keyset-driven or mixed cursor maintains row versions or values for all fetched rows and therefore can detect any updates made to a row by any user since the row was last fetched. (This applies only to updates, not to deletions or insertions.) The driver can return the SQL_ROW_UPDATED flag to the row status array when <B>SQLFetchScroll</B> is called. Otherwise, "N".</TD> -# </TR> - SQL_ROW_UPDATES => { - type => q(YesNo), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SCHEMA_TERM<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the data source vendor's name for an schema; for example, "owner", "Authorization ID", or "Schema". -# <P>The character string can be returned in upper, lower, or mixed case.</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return "schema".</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_OWNER_TERM.</P> -# </TD> -# </TR> - SQL_SCHEMA_TERM => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SCHEMA_USAGE<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the statements in which schemas can be used: -# <P>SQL_SU_DML_STATEMENTS = Schemas are supported in all Data Manipulation Language statements: <B>SELECT</B>, <B>INSERT</B>, <B>UPDATE</B>, <B>DELETE</B>, and if supported, <B>SELECT FOR UPDATE</B> and positioned update and delete statements.</P> -# -# <P>SQL_SU_PROCEDURE_INVOCATION = Schemas are supported in the ODBC procedure invocation statement.</P> -# -# <P>SQL_SU_TABLE_DEFINITION = Schemas are supported in all table definition statements: <B>CREATE TABLE</B>, <B>CREATE VIEW</B>, <B>ALTER TABLE</B>, <B>DROP TABLE</B>, and <B>DROP VIEW</B>.</P> -# -# <P>SQL_SU_INDEX_DEFINITION = Schemas are supported in all index definition statements: <B>CREATE INDEX</B> and <B>DROP INDEX</B>.</P> -# -# <P>SQL_SU_PRIVILEGE_DEFINITION = Schemas are supported in all privilege definition statements: <B>GRANT</B> and <B>REVOKE</B>. </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return the SQL_SU_DML_STATEMENTS, SQL_SU_TABLE_DEFINITION, and SQL_SU_PRIVILEGE_DEFINITION options, as supported.</P> -# -# <P>This <I>InfoType</I> has been renamed for ODBC 3.0 from the ODBC 2.0 <I>InfoType</I> SQL_OWNER_USAGE.</P> -# </TD> -# </TR> - SQL_SCHEMA_USAGE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SCROLL_OPTIONS<BR> -# (ODBC 1.0) -# <P>The information type was introduced in ODBC 1.0; each bitmask is labeled with the version in which it was introduced.</P> -# </TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scroll options supported for scrollable cursors. -# <P>The following bitmasks are used to determine which options are supported:</P> -# -# <P>SQL_SO_FORWARD_ONLY = The cursor only scrolls forward. (ODBC 1.0)</P> -# -# <P>SQL_SO_STATIC = The data in the result set is static. (ODBC 2.0)</P> -# -# <P>SQL_SO_KEYSET_DRIVEN = The driver saves and uses the keys for every row in the result set. (ODBC 1.0)</P> -# -# <P>SQL_SO_DYNAMIC = The driver keeps the keys for every row in the rowset (the keyset size is the same as the rowset size). (ODBC 1.0)</P> -# -# <P>SQL_SO_MIXED = The driver keeps the keys for every row in the keyset, and the keyset size is greater than the rowset size. The cursor is keyset-driven inside the keyset and dynamic outside the keyset. (ODBC 1.0)</P> -# -# <P>For information about scrollable cursors, see "<A HREF="odbcscrollable_cursors.htm">Scrollable Cursors</A>" in Chapter 11: Retrieving Results (Advanced)</P> -# </TD> -# </TR> - SQL_SCROLL_OPTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SEARCH_PATTERN_ESCAPE<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string specifying what the driver supports as an escape character that permits the use of the pattern match metacharacters underscore (_) and percent sign (%) as valid characters in search patterns. This escape character applies only for those catalog function arguments that support search strings. If this string is empty, the driver does not support a search-pattern escape character. -# <P>Because this information type does not indicate general support of the escape character in the <B>LIKE</B> predicate, SQL-92 does not include requirements for this character string.</P> -# -# <P>This <I>InfoType</I> is limited to catalog functions. For a description of the use of the escape character in search pattern strings, see "<A HREF="odbcpattern_value_arguments.htm">Pattern Value Arguments</A>" in Chapter 7: Catalog Functions.</P> -# </TD> -# </TR> - SQL_SEARCH_PATTERN_ESCAPE => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SERVER_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the actual data source–specific server name; useful when a data source name is used during <B>SQLConnect</B>, <B>SQLDriverConnect</B>, and<B> SQLBrowseConnect</B>.</TD> -# </TR> - SQL_SERVER_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SPECIAL_CHARACTERS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>A character string containing all special characters (that is, all characters except a through z, A through Z, 0 through 9, and underscore) that can be used in an identifier name, such as a table name, column column name, or index name, on the data source. For example, "#$^". If an identifier contains one or more of these characters, the identifier must be a delimited identifier.</TD> -# </TR> - SQL_SPECIAL_CHARACTERS => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL_CONFORMANCE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER value indicating the level of SQL-92 supported by the driver: -# <P>SQL_SC_SQL92_ENTRY = Entry level SQL-92 compliant.</P> -# -# <P>SQL_SC_FIPS127_2_TRANSITIONAL = FIPS 127-2 transitional level compliant.</P> -# -# <P>SQL_SC_SQL92_FULL = Full level SQL-92 compliant.</P> -# -# <P>SQL_SC_ SQL92_INTERMEDIATE = Intermediate level SQL-92 compliant.</P> -# </TD> -# </TR> - SQL_SQL_CONFORMANCE => { - type => q(Long), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_DATETIME_FUNCTIONS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the datetime scalar functions that are supported by the driver and the associated data source, as defined in SQL-92. -# <P>The following bitmasks are used to determine which datetime functions are supported:</P> -# -# <P>SQL_SDF_CURRENT_DATE<BR> -# SQL_SDF_CURRENT_TIME<BR> -# SQL_SDF_CURRENT_TIMESTAMP</P> -# </TD> -# </TR> - SQL_SQL92_DATETIME_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_FOREIGN_KEY_DELETE_RULE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the rules supported for a foreign key in a <B>DELETE</B> statement, as defined in SQL-92. -# <P>The following bitmasks are used to determine which clauses are supported by the data source:</P> -# -# <P>SQL_SFKD_CASCADE<BR> -# SQL_SFKD_NO_ACTION<BR> -# SQL_SFKD_SET_DEFAULT<BR> -# SQL_SFKD_SET_NULL</P> -# -# <P>An FIPS Transitional level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_SQL92_FOREIGN_KEY_DELETE_RULE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_FOREIGN_KEY_UPDATE_RULE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the rules supported for a foreign key in an <B>UPDATE</B> statement, as defined in SQL-92. -# <P>The following bitmasks are used to determine which clauses are supported by the data source:</P> -# -# <P>SQL_SFKU_CASCADE<BR> -# SQL_SFKU_NO_ACTION<BR> -# SQL_SFKU_SET_DEFAULT<BR> -# SQL_SFKU_SET_NULL </P> -# -# <P>An SQL-92 Full level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_SQL92_FOREIGN_KEY_UPDATE_RULE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_GRANT<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses supported in the <B>GRANT</B> statement, as defined in SQL-92. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which clauses are supported by the data source:</P> -# -# <P>SQL_SG_DELETE_TABLE (Entry level)<BR> -# SQL_SG_INSERT_COLUMN (Intermediate level)<BR> -# SQL_SG_INSERT_TABLE (Entry level) <BR> -# SQL_SG_REFERENCES_TABLE (Entry level)<BR> -# SQL_SG_REFERENCES_COLUMN (Entry level)<BR> -# SQL_SG_SELECT_TABLE (Entry level)<BR> -# SQL_SG_UPDATE_COLUMN (Entry level)<BR> -# SQL_SG_UPDATE_TABLE (Entry level) <BR> -# SQL_SG_USAGE_ON_DOMAIN (FIPS Transitional level)<BR> -# SQL_SG_USAGE_ON_CHARACTER_SET (FIPS Transitional level)<BR> -# SQL_SG_USAGE_ON_COLLATION (FIPS Transitional level)<BR> -# SQL_SG_USAGE_ON_TRANSLATION (FIPS Transitional level)<BR> -# SQL_SG_WITH_GRANT_OPTION (Entry level)</P> -# </TD> -# </TR> - SQL_SQL92_GRANT => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_NUMERIC_VALUE_FUNCTIONS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the numeric value scalar functions that are supported by the driver and the associated data source, as defined in SQL-92. -# <P>The following bitmasks are used to determine which numeric functions are supported:</P> -# -# <P>SQL_SNVF_BIT_LENGTH<BR> -# SQL_SNVF_CHAR_LENGTH<BR> -# SQL_SNVF_CHARACTER_LENGTH<BR> -# SQL_SNVF_EXTRACT<BR> -# SQL_SNVF_OCTET_LENGTH<BR> -# SQL_SNVF_POSITION</P> -# </TD> -# </TR> - SQL_SQL92_NUMERIC_VALUE_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_PREDICATES<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the predicates supported in a <B>SELECT</B> statement, as defined in SQL-92. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which options are supported by the data source:</P> -# -# <P>SQL_SP_BETWEEN (Entry level)<BR> -# SQL_SP_COMPARISON (Entry level)<BR> -# SQL_SP_EXISTS (Entry level)<BR> -# SQL_SP_IN (Entry level)<BR> -# SQL_SP_ISNOTNULL (Entry level)<BR> -# SQL_SP_ISNULL (Entry level)<BR> -# SQL_SP_LIKE (Entry level)<BR> -# SQL_SP_MATCH_FULL (Full level)<BR> -# SQL_SP_MATCH_PARTIAL(Full level)<BR> -# SQL_SP_MATCH_UNIQUE_FULL (Full level)<BR> -# SQL_SP_MATCH_UNIQUE_PARTIAL (Full level)<BR> -# SQL_SP_OVERLAPS (FIPS Transitional level)<BR> -# SQL_SP_QUANTIFIED_COMPARISON (Entry level)<BR> -# SQL_SP_UNIQUE (Entry level)</P> -# </TD> -# </TR> - SQL_SQL92_PREDICATES => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_RELATIONAL_JOIN_OPERATORS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the relational join operators supported in a <B>SELECT</B> statement, as defined in SQL-92. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which options are supported by the data source:</P> -# -# <P>SQL_SRJO_CORRESPONDING_CLAUSE (Intermediate level)<BR> -# SQL_SRJO_CROSS_JOIN (Full level)<BR> -# SQL_SRJO_EXCEPT_JOIN (Intermediate level)<BR> -# SQL_SRJO_FULL_OUTER_JOIN (Intermediate level) <BR> -# SQL_SRJO_INNER_JOIN (FIPS Transitional level)<BR> -# SQL_SRJO_INTERSECT_JOIN (Intermediate level)<BR> -# SQL_SRJO_LEFT_OUTER_JOIN (FIPS Transitional level)<BR> -# SQL_SRJO_NATURAL_JOIN (FIPS Transitional level)<BR> -# SQL_SRJO_RIGHT_OUTER_JOIN (FIPS Transitional level)<BR> -# SQL_SRJO_UNION_JOIN (Full level)</P> -# -# <P>SQL_SRJO_INNER_JOIN indicates support for the <B>INNER JOIN </B>syntax, not for the inner join capability. Support for the <B>INNER JOIN</B> syntax is FIPS TRANSITIONAL, while support for the inner join capability is <B>ENTRY</B>.</P> -# </TD> -# </TR> - SQL_SQL92_RELATIONAL_JOIN_OPERATORS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_REVOKE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the clauses supported in the <B>REVOKE</B> statement, as defined in SQL-92, supported by the data source. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which clauses are supported by the data source:</P> -# -# <P>SQL_SR_CASCADE (FIPS Transitional level) <BR> -# SQL_SR_DELETE_TABLE (Entry level)<BR> -# SQL_SR_GRANT_OPTION_FOR (Intermediate level) <BR> -# SQL_SR_INSERT_COLUMN (Intermediate level)<BR> -# SQL_SR_INSERT_TABLE (Entry level)<BR> -# SQL_SR_REFERENCES_COLUMN (Entry level)<BR> -# SQL_SR_REFERENCES_TABLE (Entry level)<BR> -# SQL_SR_RESTRICT (FIPS Transitional level)<BR> -# SQL_SR_SELECT_TABLE (Entry level)<BR> -# SQL_SR_UPDATE_COLUMN (Entry level)<BR> -# SQL_SR_UPDATE_TABLE (Entry level)<BR> -# SQL_SR_USAGE_ON_DOMAIN (FIPS Transitional level)<BR> -# SQL_SR_USAGE_ON_CHARACTER_SET (FIPS Transitional level)<BR> -# SQL_SR_USAGE_ON_COLLATION (FIPS Transitional level)<BR> -# SQL_SR_USAGE_ON_TRANSLATION (FIPS Transitional level)</P> -# </TD> -# </TR> - SQL_SQL92_REVOKE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_ROW_VALUE_CONSTRUCTOR<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the row value constructor expressions supported in a <B>SELECT</B> statement, as defined in SQL-92. The following bitmasks are used to determine which options are supported by the data source: -# <P>SQL_SRVC_VALUE_EXPRESSION <BR> -# SQL_SRVC_NULL <BR> -# SQL_SRVC_DEFAULT <BR> -# SQL_SRVC_ROW_SUBQUERY</P> -# </TD> -# </TR> - SQL_SQL92_ROW_VALUE_CONSTRUCTOR => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_STRING_FUNCTIONS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the string scalar functions that are supported by the driver and the associated data source, as defined in SQL-92. -# <P>The following bitmasks are used to determine which string functions are supported:</P> -# -# <P>SQL_SSF_CONVERT<BR> -# SQL_SSF_LOWER<BR> -# SQL_SSF_UPPER<BR> -# SQL_SSF_SUBSTRING<BR> -# SQL_SSF_TRANSLATE<BR> -# SQL_SSF_TRIM_BOTH<BR> -# SQL_SSF_TRIM_LEADING<BR> -# SQL_SSF_TRIM_TRAILING</P> -# </TD> -# </TR> - SQL_SQL92_STRING_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SQL92_VALUE_EXPRESSIONS<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the value expressions supported, as defined in SQL-92. -# <P>The SQL-92 or FIPS conformance level at which this feature needs to be supported is shown in parentheses next to each bitmask.</P> -# -# <P>The following bitmasks are used to determine which options are supported by the data source:</P> -# -# <P>SQL_SVE_CASE (Intermediate level)<BR> -# SQL_SVE_CAST (FIPS Transitional level)<BR> -# SQL_SVE_COALESCE (Intermediate level)<BR> -# SQL_SVE_NULLIF (Intermediate level)</P> -# </TD> -# </TR> - SQL_SQL92_VALUE_EXPRESSIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_STANDARD_CLI_CONFORMANCE<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the CLI standard or standards to which the driver conforms. The following bitmasks are used to determine which levels the driver conforms to: -# <P>SQL_SCC_XOPEN_CLI_VERSION1: The driver conforms to the X/Open CLI version 1.</P> -# -# <P>SQL_SCC_ISO92_CLI: The driver conforms to the ISO 92 CLI.</P> -# </TD> -# </TR> - SQL_STANDARD_CLI_CONFORMANCE => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_STATIC_CURSOR_ATTRIBUTES1<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a static cursor that are supported by the driver. This bitmask contains the first subset of attributes; for the second subset, see SQL_STATIC_CURSOR_ATTRIBUTES2. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA1_NEXT<BR> -# SQL_CA1_ABSOLUTE<BR> -# SQL_CA1_RELATIVE<BR> -# SQL_CA1_BOOKMARK<BR> -# SQL_CA1_LOCK_NO_CHANGE<BR> -# SQL_CA1_LOCK_EXCLUSIVE<BR> -# SQL_CA1_LOCK_UNLOCK<BR> -# SQL_CA1_POS_POSITION<BR> -# SQL_CA1_POS_UPDATE<BR> -# SQL_CA1_POS_DELETE<BR> -# SQL_CA1_POS_REFRESH<BR> -# SQL_CA1_POSITIONED_UPDATE<BR> -# SQL_CA1_POSITIONED_DELETE<BR> -# SQL_CA1_SELECT_FOR_UPDATE<BR> -# SQL_CA1_BULK_ADD<BR> -# SQL_CA1_BULK_UPDATE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_DELETE_BY_BOOKMARK<BR> -# SQL_CA1_BULK_FETCH_BY_BOOKMARK</P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES1 (and substitute "static cursor" for "dynamic cursor" in the descriptions).</P> -# -# <P>An SQL-92 Intermediate level–conformant driver will usually return the SQL_CA1_NEXT, SQL_CA1_ABSOLUTE, and SQL_CA1_RELATIVE options as supported, because the driver supports scrollable cursors through the embedded SQL FETCH statement. Because this does not directly determine the underlying SQL support, however, scrollable cursors may not be supported, even for an SQL-92 Intermediate level–conformant driver.</P> -# </TD> -# </TR> - SQL_STATIC_CURSOR_ATTRIBUTES1 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_STATIC_CURSOR_ATTRIBUTES2<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask that describes the attributes of a static cursor that are supported by the driver. This bitmask contains the second subset of attributes; for the first subset, see SQL_STATIC_CURSOR_ATTRIBUTES1. -# <P>The following bitmasks are used to determine which attributes are supported:</P> -# -# <P>SQL_CA2_READ_ONLY_CONCURRENCY<BR> -# SQL_CA2_LOCK_CONCURRENCY<BR> -# SQL_CA2_OPT_ROWVER_CONCURRENCY<BR> -# SQL_CA2_OPT_VALUES_CONCURRENCY<BR> -# SQL_CA2_SENSITIVITY_ADDITIONS<BR> -# SQL_CA2_SENSITIVITY_DELETIONS<BR> -# SQL_CA2_SENSITIVITY_UPDATES<BR> -# SQL_CA2_MAX_ROWS_SELECT<BR> -# SQL_CA2_MAX_ROWS_INSERT<BR> -# SQL_CA2_MAX_ROWS_DELETE<BR> -# SQL_CA2_MAX_ROWS_UPDATE<BR> -# SQL_CA2_MAX_ROWS_CATALOG<BR> -# SQL_CA2_MAX_ROWS_AFFECTS_ALL<BR> -# SQL_CA2_CRC_EXACT<BR> -# SQL_CA2_CRC_APPROXIMATE<BR> -# SQL_CA2_SIMULATE_NON_UNIQUE<BR> -# SQL_CA2_SIMULATE_TRY_UNIQUE<BR> -# SQL_CA2_SIMULATE_UNIQUE</P> -# -# <P>For descriptions of these bitmasks, see SQL_DYNAMIC_CURSOR_ATTRIBUTES2 (and substitute "static cursor" for "dynamic cursor" in the descriptions).</P> -# </TD> -# </TR> - SQL_STATIC_CURSOR_ATTRIBUTES2 => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_STRING_FUNCTIONS<BR> -# (ODBC 1.0) -# <P>The information type was introduced in ODBC 1.0; each bitmask is labeled with the version in which it was introduced.</P> -# </TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scalar string functions supported by the driver and associated data source. -# <P>The following bitmasks are used to determine which string functions are supported:</P> -# -# <P>SQL_FN_STR_ASCII (ODBC 1.0)<BR> -# SQL_FN_STR_BIT_LENGTH (ODBC 3.0)<BR> -# SQL_FN_STR_CHAR (ODBC 1.0)<BR> -# SQL_FN_STR_CHAR_<BR> -# LENGTH (ODBC 3.0)<BR> -# SQL_FN_STR_CHARACTER_<BR> -# LENGTH (ODBC 3.0)<BR> -# SQL_FN_STR_CONCAT (ODBC 1.0)<BR> -# SQL_FN_STR_DIFFERENCE (ODBC 2.0)<BR> -# SQL_FN_STR_INSERT (ODBC 1.0)<BR> -# SQL_FN_STR_LCASE (ODBC 1.0)<BR> -# SQL_FN_STR_LEFT (ODBC 1.0)<BR> -# SQL_FN_STR_LENGTH (ODBC 1.0)<BR> -# SQL_FN_STR_LOCATE (ODBC 1.0)<BR> -# SQL_FN_STR_LTRIM (ODBC 1.0) <BR> -# SQL_FN_STR_OCTET_<BR> -# LENGTH (ODBC 3.0) <BR> -# SQL_FN_STR_POSITION (ODBC 3.0)<BR> -# SQL_FN_STR_REPEAT (ODBC 1.0)<BR> -# SQL_FN_STR_REPLACE (ODBC 1.0)<BR> -# SQL_FN_STR_RIGHT (ODBC 1.0)<BR> -# SQL_FN_STR_RTRIM (ODBC 1.0)<BR> -# SQL_FN_STR_SOUNDEX (ODBC 2.0)<BR> -# SQL_FN_STR_SPACE (ODBC 2.0)<BR> -# SQL_FN_STR_SUBSTRING (ODBC 1.0)<BR> -# SQL_FN_STR_UCASE (ODBC 1.0)</P> -# -# <P>If an application can call the <B>LOCATE</B> scalar function with the <I>string_exp1</I>, <I>string_exp2</I>, and <I>start</I> arguments, the driver returns the SQL_FN_STR_LOCATE bitmask. If an application can call the LOCATE scalar function with only the <I>string_exp1</I> and <I>string_exp2</I> arguments, the driver returns the SQL_FN_STR_LOCATE_2 bitmask. Drivers that fully support the <B>LOCATE</B> scalar function return both bitmasks.</P> -# -# <P>(For more information, see <A HREF="odbcstring_functions.htm">String Functions</A> in Appendix E, "Scalar Functions.")</P> -# </TD> -# </TR> - SQL_STRING_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SUBQUERIES<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the predicates that support subqueries: -# <P>SQL_SQ_CORRELATED_SUBQUERIES<BR> -# SQL_SQ_COMPARISON<BR> -# SQL_SQ_EXISTS<BR> -# SQL_SQ_IN<BR> -# SQL_SQ_QUANTIFIED</P> -# -# <P>The SQL_SQ_CORRELATED_SUBQUERIES bitmask indicates that all predicates that support subqueries support correlated subqueries.</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return a bitmask in which all of these bits are set.</P> -# </TD> -# </TR> - SQL_SUBQUERIES => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_SYSTEM_FUNCTIONS<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scalar system functions supported by the driver and associated data source. -# <P>The following bitmasks are used to determine which system functions are supported:</P> -# -# <P>SQL_FN_SYS_DBNAME<BR> -# SQL_FN_SYS_IFNULL<BR> -# SQL_FN_SYS_USERNAME</P> -# </TD> -# </TR> - SQL_SYSTEM_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TABLE_TERM<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the data source vendor's name for a table; for example, "table" or "file". -# <P>This character string can be in upper, lower, or mixed case. </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return "table".</P> -# </TD> -# </TR> - SQL_TABLE_TERM => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TIMEDATE_ADD_INTERVALS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the timestamp intervals supported by the driver and associated data source for the TIMESTAMPADD scalar function. -# <P>The following bitmasks are used to determine which intervals are supported:</P> -# -# <P>SQL_FN_TSI_FRAC_SECOND<BR> -# SQL_FN_TSI_SECOND<BR> -# SQL_FN_TSI_MINUTE<BR> -# SQL_FN_TSI_HOUR<BR> -# SQL_FN_TSI_DAY<BR> -# SQL_FN_TSI_WEEK<BR> -# SQL_FN_TSI_MONTH<BR> -# SQL_FN_TSI_QUARTER<BR> -# SQL_FN_TSI_YEAR</P> -# -# <P>An FIPS Transitional level–conformant driver will always return a bitmask in which all of these bits are set.</P> -# </TD> -# </TR> - SQL_TIMEDATE_ADD_INTERVALS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TIMEDATE_DIFF_INTERVALS<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the timestamp intervals supported by the driver and associated data source for the TIMESTAMPDIFF scalar function. -# <P>The following bitmasks are used to determine which intervals are supported:</P> -# -# <P>SQL_FN_TSI_FRAC_SECOND<BR> -# SQL_FN_TSI_SECOND<BR> -# SQL_FN_TSI_MINUTE<BR> -# SQL_FN_TSI_HOUR<BR> -# SQL_FN_TSI_DAY<BR> -# SQL_FN_TSI_WEEK<BR> -# SQL_FN_TSI_MONTH<BR> -# SQL_FN_TSI_QUARTER<BR> -# SQL_FN_TSI_YEAR </P> -# -# <P>An FIPS Transitional level–conformant driver will always return a bitmask in which all of these bits are set.</P> -# </TD> -# </TR> - SQL_TIMEDATE_DIFF_INTERVALS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TIMEDATE_FUNCTIONS<BR> -# (ODBC 1.0) -# <P>The information type was introduced in ODBC 1.0; each bitmask is labeled with the version in which it was introduced.</P> -# </TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the scalar date and time functions supported by the driver and associated data source. -# <P>The following bitmasks are used to determine which date and time functions are supported:</P> -# -# <P>SQL_FN_TD_CURRENT_DATE ODBC 3.0)<BR> -# SQL_FN_TD_CURRENT_TIME (ODBC 3.0)<BR> -# SQL_FN_TD_CURRENT_TIMESTAMP (ODBC 3.0)<BR> -# SQL_FN_TD_CURDATE (ODBC 1.0)<BR> -# SQL_FN_TD_CURTIME (ODBC 1.0) <BR> -# SQL_FN_TD_DAYNAME (ODBC 2.0)<BR> -# SQL_FN_TD_DAYOFMONTH (ODBC 1.0)<BR> -# SQL_FN_TD_DAYOFWEEK (ODBC 1.0)<BR> -# SQL_FN_TD_DAYOFYEAR (ODBC 1.0) <BR> -# SQL_FN_TD_EXTRACT (ODBC 3.0)<BR> -# SQL_FN_TD_HOUR (ODBC 1.0)<BR> -# SQL_FN_TD_MINUTE (ODBC 1.0)<BR> -# SQL_FN_TD_MONTH (ODBC 1.0)<BR> -# SQL_FN_TD_MONTHNAME (ODBC 2.0)<BR> -# SQL_FN_TD_NOW (ODBC 1.0)<BR> -# SQL_FN_TD_QUARTER (ODBC 1.0)<BR> -# SQL_FN_TD_SECOND (ODBC 1.0)<BR> -# SQL_FN_TD_TIMESTAMPADD (ODBC 2.0)<BR> -# SQL_FN_TD_TIMESTAMPDIFF (ODBC 2.0)<BR> -# SQL_FN_TD_WEEK (ODBC 1.0)<BR> -# SQL_FN_TD_YEAR (ODBC 1.0)</P> -# </TD> -# </TR> - SQL_TIMEDATE_FUNCTIONS => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TXN_CAPABLE<BR> -# (ODBC 1.0) -# <P>The information type was introduced in ODBC 1.0; each return value is labeled with the version in which it was introduced.</P> -# </TD> -# <TD width=50%>An SQLUSMALLINT value describing the transaction support in the driver or data source: -# <P>SQL_TC_NONE = Transactions not supported. (ODBC 1.0)</P> -# -# <P>SQL_TC_DML = Transactions can contain only Data Manipulation Language (DML) statements (<B>SELECT</B>, <B>INSERT</B>, <B>UPDATE</B>, <B>DELETE</B>). Data Definition Language (DDL) statements encountered in a transaction cause an error. (ODBC 1.0)</P> -# -# <P>SQL_TC_DDL_COMMIT = Transactions can contain only DML statements. DDL statements (<B>CREATE TABLE</B>, <B>DROP INDEX</B>, and so on) encountered in a transaction cause the transaction to be committed. (ODBC 2.0)</P> -# -# <P>SQL_TC_DDL_IGNORE = Transactions can contain only DML statements. DDL statements encountered in a transaction are ignored. (ODBC 2.0)</P> -# -# <P>SQL_TC_ALL = Transactions can contain DDL statements and DML statements in any order. (ODBC 1.0) </P> -# -# <P>(Because support of transactions is mandatory in SQL-92, an SQL-92 conformant driver [any level] will never return SQL_TC_NONE.)</P> -# </TD> -# </TR> - SQL_TXN_CAPABLE => { - type => q(Short), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_TXN_ISOLATION_OPTION<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the transaction isolation levels available from the driver or data source. -# <P>The following bitmasks are used in conjunction with the flag to determine which options are supported:</P> -# -# <P>SQL_TXN_READ_UNCOMMITTED<BR> -# SQL_TXN_READ_COMMITTED<BR> -# SQL_TXN_REPEATABLE_READ<BR> -# SQL_TXN_SERIALIZABLE</P> -# -# <P>For descriptions of these isolation levels, see the description of SQL_DEFAULT_TXN_ISOLATION.</P> -# -# <P>To set the transaction isolation level, an application calls <B>SQLSetConnectAttr</B> to set the SQL_ATTR_TXN_ISOLATION attribute. For more information, see <B>SQLSetConnectAttr</B>. </P> -# -# <P>An SQL-92 Entry level–conformant driver will always return SQL_TXN_SERIALIZABLE as supported. A FIPS Transitional level–conformant driver will always return all of these options as supported.</P> -# </TD> -# </TR> - SQL_TXN_ISOLATION_OPTION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_UNION<BR> -# (ODBC 2.0)</TD> -# <TD width=50%>An SQLUINTEGER bitmask enumerating the support for the <B>UNION</B> clause: -# <P>SQL_U_UNION = The data source supports the <B>UNION</B> clause.</P> -# -# <P>SQL_U_UNION_ALL = The data source supports the <B>ALL</B> keyword in the <B>UNION</B> clause. (<B>SQLGetInfo</B> returns both SQL_U_UNION and SQL_U_UNION_ALL in this case.)</P> -# -# <P>An SQL-92 Entry level–conformant driver will always return both of these options as supported.</P> -# </TD> -# </TR> - SQL_UNION => { - type => q(Bitmask), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_USER_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=50%>A character string with the name used in a particular database, which can be different from the login name.</TD> -# </TR> - SQL_USER_NAME => { - type => q(Char), - }, -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_XOPEN_CLI_YEAR<BR> -# (ODBC 3.0)</TD> -# <TD width=50%>A character string that indicates the year of publication of the X/Open specification with which the version of the ODBC Driver Manager fully complies.</TD> -# </TR> - SQL_XOPEN_CLI_YEAR => { - type => q(Char), - }, -# </table></div> -# <!--TS:--> -# <P class="label"><B>Code Example</B></P> -# -# <P><B>SQLGetInfo</B> returns lists of supported options as an SQLUINTEGER bitmask in *<I>InfoValuePtr</I>. The bitmask for each option is used in conjunction with the flag to determine whether the option is supported.</P> -# -# <P>For example, an application could use the following code to determine whether the SUBSTRING scalar function is supported by the driver associated with the connection:</P> -# -# <PRE class="code">SQLUINTEGER fFuncs; -# -# SQLGetInfo(hdbc, -# SQL_STRING_FUNCTIONS, -# (SQLPOINTER)&fFuncs, -# sizeof(fFuncs), -# NULL); -# -# if (fFuncs & SQL_FN_STR_SUBSTRING) /* SUBSTRING supported */ -# ; -# else /* SUBSTRING not supported */ -# ;</PRE> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>For information about</TH> -# <TH width=50%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning the setting of a connection attribute</TD> -# <TD width=50%><A HREF="odbcsqlgetconnectattr.htm">SQLGetConnectAttr</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Determining whether a driver supports a function</TD> -# <TD width=50%><A HREF="odbcsqlgetfunctions.htm">SQLGetFunctions</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning the setting of a statement attribute</TD> -# <TD width=50%><A HREF="odbcsqlgetstmtattr.htm">SQLGetStmtAttr</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning information about a data source's data types</TD> -# <TD width=50%><A HREF="odbcsqlgettypeinfo.htm">SQLGetTypeInfo</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -}; - -print <<END; -#include "HandleDbc.hpp" - -HandleDbc::InfoTab -HandleDbc::m_infoTab[] = { -END - -my @name = sort keys %$info; -for my $name (@name) { - my $p = $info->{$name}; - my $type = $p->{type}; - $type =~ /^(Char|YesNo|Short|Long|Bitmask)$/ - or die "$name: bad type $type"; - my $defstr = $type eq "YesNo" ? q("N") : $type eq "Char" ? q("") : q(0); - my $s = <<END; - { $name, - InfoTab\::$type, - 0L, - $defstr - }, -END - if ($p->{omit}) { - $s ="#if 0\n" . $s . "#endif\n"; - } - print $s; -}; - -print <<END; - { 0, - InfoTab::End, - 0L, - 0 - } -}; -END - -# vim: set sw=4: diff --git a/storage/ndb/src/old_files/client/odbc/docs/gettypeinfo.pl b/storage/ndb/src/old_files/client/odbc/docs/gettypeinfo.pl deleted file mode 100644 index 0a999fd7249421985fb7d939bb897a22b0f0150d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/gettypeinfo.pl +++ /dev/null @@ -1,645 +0,0 @@ -# usage: perl TypeInfo.data -# prints template for typeinfo -use strict; -my $position = 0; - -# -# odbcsqlgettypeinfo.htm -# -my @typeinfo = ( - { name => "UNDEF", - type => q(Undef), - nullable => q(true), - position => 0, - }, -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLGetTypeInfo</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlgettypeinfo"></A>SQLGetTypeInfo</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLGetTypeInfo</B> returns information about data types supported by the data source. The driver returns the information in the form of an SQL result set. The data types are intended for use in Data Definition Language (DDL) statements.</P> -# -# <P class="indent"><b class="le">Important </b>Applications must use the type names returned in the TYPE_NAME column of the <B>SQLGetTypeInfo</B> result set in <B>ALTER TABLE</B> and <B>CREATE TABLE</B> statements. <B>SQLGetTypeInfo</B> may return more than one row with the same value in the DATA_TYPE column.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLGetTypeInfo</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLSMALLINT <I>DataType</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle for the result set.</dd> -# -# <DT><I>DataType</I></DT> -# -# <DD>[Input]<BR> -# The SQL data type. This must be one of the values in the "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" section of Appendix D: Data Types, or a driver-specific SQL data type. SQL_ALL_TYPES specifies that information about all data types should be returned.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLGetTypeInfo</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLGetTypeInfo </B>and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01S02</TD> -# <TD width=26%>Option value changed</TD> -# <TD width=52%>A specified statement attribute was invalid because of implementation working conditions, so a similar value was temporarily substituted. (Call <B>SQLGetStmtAttr</B> to determine the temporarily substituted value.) The substitute value is valid for the <I>StatementHandle</I> until the cursor is closed. The statement attributes that can be changed are: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT, and SQL_ATTR_SIMULATE_CURSOR. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>A cursor was open on the <I>StatementHandle,</I> and <B>SQLFetch</B> or <B>SQLFetchScroll</B> had been called. This error is returned by the Driver Manager if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has not returned SQL_NO_DATA, and is returned by the driver if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has returned SQL_NO_DATA. -# <P>A result set was open on the <I>StatementHandle</I>, but <B>SQLFetch</B> or <B>SQLFetchScroll</B> had not been called.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40001</TD> -# <TD width=26%>Serialization failure</TD> -# <TD width=52%>The transaction was rolled back due to a resource deadlock with another transaction.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40003</TD> -# <TD width=26%>Statement completion unknown</TD> -# <TD width=52%>The associated connection failed during the execution of this function and the state of the transaction cannot be determined.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause. </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY004</TD> -# <TD width=26%>Invalid SQL data type</TD> -# <TD width=52%>The value specified for the argument <I>DataType</I> was neither a valid ODBC SQL data type identifier nor a driver-specific data type identifier supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY008</TD> -# <TD width=26%>Operation canceled</TD> -# <TD width=52%>Asynchronous processing was enabled for the <I>StatementHandle</I>, then the function was called and, before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I>. Then the function was called again on the <I>StatementHandle</I>. -# <P>The function was called and, before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I> from a different thread in a multithread application.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function (not this one) was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>The combination of the current settings of the SQL_ATTR_CONCURRENCY and SQL_ATTR_CURSOR_TYPE statement attributes was not supported by the driver or data source. -# <P>The SQL_ATTR_USE_BOOKMARKS statement attribute was set to SQL_UB_VARIABLE, and the SQL_ATTR_CURSOR_TYPE statement attribute was set to a cursor type for which the driver does not support bookmarks.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT00</TD> -# <TD width=26%>Timeout expired</TD> -# <TD width=52%>The query timeout period expired before the data source returned the result set. The timeout period is set through <B>SQLSetStmtAttr</B>, SQL_ATTR_QUERY_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver corresponding to the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P><B>SQLGetTypeInfo</B> returns the results as a standard result set, ordered by DATA_TYPE and then by how closely the data type maps to the corresponding ODBC SQL data type. Data types defined by the data source take precedence over user-defined data types. Consequently, the sort order is not necessarily consistent but can be generalized as DATA_TYPE first, followed by TYPE_NAME, both ascending. For example, suppose that a data source defined INTEGER and COUNTER data types, where COUNTER is auto-incrementing, and that a user-defined data type WHOLENUM has also been defined. These would be returned in the order INTEGER, WHOLENUM, and COUNTER, because WHOLENUM maps closely to the ODBC SQL data type SQL_INTEGER, while the auto-incrementing data type, even though supported by the data source, does not map closely to an ODBC SQL data type. For information about how this information might be used, see "<A HREF="odbcddl_statements.htm">DDL Statements</A>" in Chapter 8: SQL Statements.</P> -# -# <P>If the <I>DataType</I> argument specifies a data type which is valid for the version of ODBC supported by the driver, but is not supported by the driver, then it will return an empty result set. </P> -# -# <P class="indent"><b class="le">Note </b>For more information about the general use, arguments, and returned data of ODBC catalog functions, see <A HREF="odbccatalog_functions.htm">Chapter 7: Catalog Functions</A>.</P> -# -# <P>The following columns have been renamed for ODBC 3.<I>x</I>. The column name changes do not affect backward compatibility because applications bind by column number.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>ODBC 2.0 column</TH> -# <TH width=52%>ODBC 3.<I>x</I> column</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>PRECISION</TD> -# <TD width=52%>COLUMN_SIZE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>MONEY</TD> -# <TD width=52%>FIXED_PREC_SCALE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>AUTO_INCREMENT</TD> -# <TD width=52%>AUTO_UNIQUE_VALUE</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>The following columns have been added to the results set returned by <B>SQLGetTypeInfo</B> for ODBC 3.<I>x</I>: -# -# <UL type=disc> -# <LI>SQL_DATA_TYPE</li> -# -# <LI>INTERVAL_PRECISION</li> -# -# <LI>SQL_DATETIME_SUB</li> -# -# <LI>NUM_PREC_RADIX</li> -# </UL> -# -# <P>The following table lists the columns in the result set. Additional columns beyond column 19 (INTERVAL_PRECISION) can be defined by the driver. An application should gain access to driver-specific columns by counting down from the end of the result set rather than specifying an explicit ordinal position. For more information, see "<A HREF="odbcdata_returned_by_catalog_functions.htm">Data Returned by Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# -# <P class="indent"><b class="le">Note</b> <B>SQLGetTypeInfo</B> might not return all data types. For example, a driver might not return user-defined data types. Applications can use any valid data type, regardless of whether it is returned by <B>SQLGetTypeInfo</B>.</P> -# -# <P class="indent">The data types returned by <B>SQLGetTypeInfo</B> are those supported by the data source. They are intended for use in Data Definition Language (DDL) statements. Drivers can return result-set data using data types other than the types returned by <B>SQLGetTypeInfo</B>. In creating the result set for a catalog function, the driver might use a data type that is not supported by the data source. </P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=33%><BR> -# Column name</TH> -# <TH width=14%>Column <BR> -# number</TH> -# <TH width=15%><BR> -# Data type</TH> -# <TH width=38%><BR> -# Comments</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=33%>TYPE_NAME<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>1</TD> -# <TD width=15%>Varchar<BR> -# not NULL</TD> -# <TD width=38%>Data source–dependent data-type name; for example, "CHAR()", "VARCHAR()", "MONEY", "LONG VARBINARY", or "CHAR ( ) FOR BIT DATA". Applications must use this name in <B>CREATE TABLE</B> and <B>ALTER TABLE</B> statements.</TD> -# </TR> - { name => "TYPE_NAME", - type => q(Varchar), - length => 20, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>DATA_TYPE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>2</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>SQL data type. This can be an ODBC SQL data type or a driver-specific SQL data type. For datetime or interval data types, this column returns the concise data type (such as SQL_TYPE_TIME or SQL_INTERVAL_YEAR_TO_MONTH). For a list of valid ODBC SQL data types, see "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" in Appendix D: Data Types. For information about driver-specific SQL data types, see the driver’s documentation.</TD> -# </TR> - { name => "DATA_TYPE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>COLUMN_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>3</TD> -# <TD width=15%>Integer</TD> -# <TD width=38%>The maximum column size that the server supports for this data type. For numeric data, this is the maximum precision. For string data, this is the length in characters. For datetime data types, this is the length in characters of the string representation (assuming the maximum allowed precision of the fractional seconds component). NULL is returned for data types where column size is not applicable. For interval data types, this is the number of characters in the character representation of the interval literal (as defined by the interval leading precision; see "<A HREF="odbcinterval_data_type_length.htm">Interval Data Type Length</A>" in Appendix D: Data Types). -# <P>For more information on column size, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</P> -# </TD> -# </TR> - { name => "COLUMN_SIZE", - type => q(Integer), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LITERAL_PREFIX<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>4</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Character or characters used to prefix a literal; for example, a single quotation mark (') for character data types or 0x for binary data types; NULL is returned for data types where a literal prefix is not applicable.</TD> -# </TR> - { name => "LITERAL_PREFIX", - type => q(Varchar), - length => 1, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LITERAL_SUFFIX<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>5</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Character or characters used to terminate a literal; for example, a single quotation mark (') for character data types; NULL is returned for data types where a literal suffix is not applicable.</TD> -# </TR> - { name => "LITERAL_SUFFIX", - type => q(Varchar), - length => 1, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>CREATE_PARAMS<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>6</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>A list of keywords, separated by commas, corresponding to each parameter that the application may specify in parentheses when using the name that is returned in the TYPE_NAME field. The keywords in the list can be any of the following: length, precision, or scale. They appear in the order that the syntax requires them to be used. For example, CREATE_PARAMS for DECIMAL would be "precision,scale"; CREATE_PARAMS for VARCHAR would equal "length." NULL is returned if there are no parameters for the data type definition; for example, INTEGER. -# <P>The driver supplies the CREATE_PARAMS text in the language of the country where it is used.</P> -# </TD> -# </TR> - { name => "CREATE_PARAMS", - type => q(Varchar), - length => 20, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>NULLABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>7</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether the data type accepts a NULL value: -# <P>SQL_NO_NULLS if the data type does not accept NULL values.</P> -# -# <P>SQL_NULLABLE if the data type accepts NULL values.</P> -# -# <P>SQL_NULLABLE_UNKNOWN if it is not known whether the column accepts NULL values.</P> -# </TD> -# </TR> - { name => "NULLABLE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>CASE_SENSITIVE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>8</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether a character data type is case-sensitive in collations and comparisons: -# <P>SQL_TRUE if the data type is a character data type and is case-sensitive.</P> -# -# <P>SQL_FALSE if the data type is not a character data type or is not case-sensitive.</P> -# </TD> -# </TR> - { name => "CASE_SENSITIVE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SEARCHABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>9</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>How the data type is used in a <B>WHERE</B> clause: -# <P>SQL_PRED_NONE if the column cannot be used in a <B>WHERE</B> clause. (This is the same as the SQL_UNSEARCHABLE value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_PRED_CHAR if the column can be used in a <B>WHERE</B> clause, but only with the <B>LIKE</B> predicate. (This is the same as the SQL_LIKE_ONLY value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_PRED_BASIC if the column can be used in a <B>WHERE</B> clause with all the comparison operators except <B>LIKE</B> (comparison, quantified comparison, <B>BETWEEN</B>, <B>DISTINCT</B>, <B>IN</B>, <B>MATCH</B>, and <B>UNIQUE</B>). (This is the same as the SQL_ALL_EXCEPT_LIKE value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_SEARCHABLE if the column can be used in a <B>WHERE</B> clause with any comparison operator.</P> -# </TD> -# </TR> - { name => "SEARCHABLE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>UNSIGNED_ATTRIBUTE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>10</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>Whether the data type is unsigned: -# <P>SQL_TRUE if the data type is unsigned.</P> -# -# <P>SQL_FALSE if the data type is signed.</P> -# -# <P>NULL is returned if the attribute is not applicable to the data type or the data type is not numeric.</P> -# </TD> -# </TR> - { name => "UNSIGNED_ATTRIBUTE", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>FIXED_PREC_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>11</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether the data type has predefined fixed precision and scale (which are data source–specific), such as a money data type: -# <P>SQL_TRUE if it has predefined fixed precision and scale.</P> -# -# <P>SQL_FALSE if it does not have predefined fixed precision and scale.</P> -# </TD> -# </TR> - { name => "FIXED_PREC_SCALE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>AUTO_UNIQUE_VALUE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>12</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>Whether the data type is autoincrementing: -# <P>SQL_TRUE if the data type is autoincrementing.</P> -# -# <P>SQL_FALSE if the data type is not autoincrementing.</P> -# -# <P>NULL is returned if the attribute is not applicable to the data type or the data type is not numeric.</P> -# -# <P>An application can insert values into a column having this attribute, but typically cannot update the values in the column. </P> -# -# <P>When an insert is made into an auto-increment column, a unique value is inserted into the column at insert time. The increment is not defined, but is data source–specific. An application should not assume that an auto-increment column starts at any particular point or increments by any particular value.</P> -# </TD> -# </TR> - { name => "AUTO_UNIQUE_VALUE", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LOCAL_TYPE_NAME<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>13</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Localized version of the data source–dependent name of the data type. NULL is returned if a localized name is not supported by the data source. This name is intended for display only, such as in dialog boxes.</TD> -# </TR> - { name => "LOCAL_TYPE_NAME", - type => q(Varchar), - length => 20, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>MINIMUM_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>14</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>The minimum scale of the data type on the data source. If a data type has a fixed scale, the MINIMUM_SCALE and MAXIMUM_SCALE columns both contain this value. For example, an SQL_TYPE_TIMESTAMP column might have a fixed scale for fractional seconds. NULL is returned where scale is not applicable. For more information, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "MINIMUM_SCALE", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>MAXIMUM_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>15</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>The maximum scale of the data type on the data source. NULL is returned where scale is not applicable. If the maximum scale is not defined separately on the data source, but is instead defined to be the same as the maximum precision, this column contains the same value as the COLUMN_SIZE column. For more information, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "MAXIMUM_SCALE", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SQL_DATA_TYPE<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>16</TD> -# <TD width=15%>Smallint NOT NULL</TD> -# <TD width=38%>The value of the SQL data type as it appears in the SQL_DESC_TYPE field of the descriptor. This column is the same as the DATA_TYPE column, except for interval and datetime data types. -# <P>For interval and datetime data types, the SQL_DATA_TYPE field in the result set will return SQL_INTERVAL or SQL_DATETIME, and the SQL_DATETIME_SUB field will return the subcode for the specific interval or datetime data type. (See <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>.) </P> -# </TD> -# </TR> - { name => "SQL_DATA_TYPE", - type => q(Smallint), - length => undef, - nullable => q(false), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SQL_DATETIME_SUB<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>17</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>When the value of SQL_DATA_TYPE is SQL_DATETIME or SQL_INTERVAL, this column contains the datetime/interval subcode. For data types other than datetime and interval, this field is NULL. -# <P>For interval or datetime data types, the SQL_DATA_TYPE field in the result set will return SQL_INTERVAL or SQL_DATETIME, and the SQL_DATETIME_SUB field will return the subcode for the specific interval or datetime data type. (See <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>.)</P> -# </TD> -# </TR> - { name => "SQL_DATETIME_SUB", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>NUM_PREC_RADIX<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>18</TD> -# <TD width=15%>Integer</TD> -# <TD width=38%>If the data type is an approximate numeric type, this column contains the value 2 to indicate that COLUMN_SIZE specifies a number of bits. For exact numeric types, this column contains the value 10 to indicate that COLUMN_SIZE specifies a number of decimal digits. Otherwise, this column is NULL.</TD> -# </TR> - { name => "NUM_PREC_RADIX", - type => q(Integer), - length => undef, - nullable => q(true), - position => ++$position, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>INTERVAL_PRECISION<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>19</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>If the data type is an interval data type, then this column contains the value of the interval leading precision. (See "<A HREF="odbcinterval_data_type_precision.htm">Interval Data Type Precision</A>" in Appendix D: Data Types.) Otherwise, this column is NULL.</TD> -# </TR> - { name => "INTERVAL_PRECISION", - type => q(Smallint), - length => undef, - nullable => q(true), - position => ++$position, - }, -# </table></div> -# <!--TS:--> -# <P>Attribute information can apply to data types or to specific columns in a result set. <B>SQLGetTypeInfo</B> returns information about attributes associated with data types; <B>SQLColAttribute</B> returns information about attributes associated with columns in a result set.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>For information about</TH> -# <TH width=50%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Binding a buffer to a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Canceling statement processing</TD> -# <TD width=50%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning information about a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlcolattribute.htm">SQLColAttribute</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a block of data or scrolling through a result set</TD> -# <TD width=50%><A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a single row or a block of data in a forward-only direction</TD> -# <TD width=50%><A HREF="odbcsqlfetch.htm">SQLFetch</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning information about a driver or data source</TD> -# <TD width=50%><A HREF="odbcsqlgetinfo.htm">SQLGetInfo</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -); - -my $i4 = " " x 4; -print "// template-begin\n"; -print "#define Varchar Char\n"; -print "#define Smallint Integer\n"; -print "const SqlTypeInfo::Column\nSqlTypeInfo::m_columnList[] = {\n"; -for my $p (@typeinfo) { - print "$i4\{\t$p->{position},\n"; - print "\t\"$p->{name}\",\n"; - my $type = $p->{type}; - if ($p->{position} == 0) { - print "\tSqlType()\n"; - } elsif (! $p->{length}) { - print "\tSqlType(SqlType::$type, $p->{nullable})\n"; - } else { - print "\tSqlType(SqlType::$type, $p->{length}, $p->{nullable})\n"; - } - my $c = $p == $typeinfo[-1] ? "" : ","; - print "$i4\}$c\n"; -} -print "};\n"; -print "#undef Varchar\n"; -print "#undef Smallint\n"; -print "const unsigned\nSqlTypeInfo::m_columnCount = $position;\n"; -print "// template-end\n"; - -# vim: set sw=4: diff --git a/storage/ndb/src/old_files/client/odbc/docs/handleattr.pl b/storage/ndb/src/old_files/client/odbc/docs/handleattr.pl deleted file mode 100644 index 892d34b105b19ae3133c8bd3ab7c00514759635e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/handleattr.pl +++ /dev/null @@ -1,2232 +0,0 @@ -# usage: perl Attr.data X (X = Env,Dbc,Stmt) -# prints template for AttrX.cpp -use strict; -my $type = shift; -my $order = 0; - -# -# odbcsqlsetenvattr.htm -# -my $attrEnv = { -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLSetEnvAttr</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlsetenvattr"></A>SQLSetEnvAttr</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 3.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLSetEnvAttr</B> sets attributes that govern aspects of environments.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLSetEnvAttr</B>( -# SQLHENV <I>EnvironmentHandle</I>, -# SQLINTEGER <I>Attribute</I>, -# SQLPOINTER <I>ValuePtr</I>, -# SQLINTEGER <I>StringLength</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>EnvironmentHandle</I></DT> -# -# <DD>[Input]<BR> -# Environment handle.</dd> -# -# <DT><I>Attribute</I></DT> -# -# <DD>[Input]<BR> -# Attribute to set, listed in "Comments."</dd> -# -# <DT><I>ValuePtr</I></DT> -# -# <DD>[Input]<BR> -# Pointer to the value to be associated with <I>Attribute</I>. Depending on the value of <I>Attribute</I>, <I>ValuePtr</I> will be a 32-bit integer value or point to a null-terminated character string.</dd> -# -# <DT><I>StringLength</I></DT> -# -# <DD>[Input] If <I>ValuePtr</I> points to a character string or a binary buffer, this argument should be the length of *<I>ValuePtr</I>. If <I>ValuePtr</I> is an integer, <I>StringLength</I> is ignored.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLSetEnvAttr</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_ENV and a <I>Handle</I> of <I>EnvironmentHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLSetEnvAttr</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise. If a driver does not support an environment attribute, the error can be returned only during connect time.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01S02</TD> -# <TD width=26%>Option value changed</TD> -# <TD width=52%>The driver did not support the value specified in <I>ValuePtr</I> and substituted a similar value. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation <BR> -# error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>The Attribute argument identified an environment attribute that required a string value, and the <I>ValuePtr</I> argument was a null pointer.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) A connection handle has been allocated on <I>EnvironmentHandle</I>. </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY024</TD> -# <TD width=26%>Invalid attribute value</TD> -# <TD width=52%>Given the specified <I>Attribute</I> value, an invalid value was specified in <I>ValuePtr</I>.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%>The <I>StringLength</I> argument was less than 0 but was not SQL_NTS.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY092</TD> -# <TD width=26%>Invalid attribute/option identifier</TD> -# <TD width=52%>(DM) The value specified for the argument <I>Attribute</I> was not valid for the version of ODBC supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>The value specified for the argument <I>Attribute</I> was a valid ODBC environment attribute for the version of ODBC supported by the driver, but was not supported by the driver. -# <P>(DM) The <I>Attribute</I> argument was SQL_ATTR_OUTPUT_NTS, and <I>ValuePtr</I> was SQL_FALSE.</P> -# </TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P>An application can call <B>SQLSetEnvAttr</B> only if no connection handle is allocated on the environment. All environment attributes successfully set by the application for the environment persist until <B>SQLFreeHandle</B> is called on the environment. More than one environment handle can be allocated simultaneously in ODBC 3<I>.x</I>.</P> -# -# <P>The format of information set through <I>ValuePtr</I> depends on the specified <I>Attribute</I>. <B>SQLSetEnvAttr</B> will accept attribute information in one of two different formats: a null-terminated character string or a 32-bit integer value. The format of each is noted in the attribute's description.</P> -# -# <P>There are no driver-specific environment attributes.</P> -# -# <P>Connection attributes cannot be set by a call to <B>SQLSetEnvAttr</B>. Attempting to do so will return SQLSTATE HY092 (Invalid attribute/option identifier).</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=35%><I>Attribute</I></TH> -# <TH width=65%><I>ValuePtr</I> contents</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=35%>SQL_ATTR_CONNECTION_POOLING<BR> -# (ODBC 3.0)</TD> -# <TD width=65%>A 32-bit SQLUINTEGER value that enables or disables connection pooling at the environment level. The following values are used: -# <P>SQL_CP_OFF = Connection pooling is turned off. This is the default.</P> -# -# <P>SQL_CP_ONE_PER_DRIVER = A single connection pool is supported for each driver. Every connection in a pool is associated with one driver.</P> -# -# <P>SQL_CP_ONE_PER_HENV = A single connection pool is supported for each environment. Every connection in a pool is associated with one environment.</P> -# -# <P>Connection pooling is enabled by calling <B>SQLSetEnvAttr</B> to set the SQL_ATTR_CONNECTION_POOLING attribute to SQL_CP_ONE_PER_DRIVER or SQL_CP_ONE_PER_HENV. This call must be made before the application allocates the shared environment for which connection pooling is to be enabled. The environment handle in the call to <B>SQLSetEnvAttr</B> is set to null, which makes SQL_ATTR_CONNECTION_POOLING a process-level attribute. After connection pooling is enabled, the application then allocates an implicit shared environment by calling <B>SQLAllocHandle</B> with the <I>InputHandle</I> argument set to SQL_HANDLE_ENV.</P> -# -# <P>After connection pooling has been enabled and a shared environment has been selected for an application, SQL_ATTR_CONNECTION_POOLING cannot be reset for that environment, because <B>SQLSetEnvAttr</B> is called with a null environment handle when setting this attribute. If this attribute is set while connection pooling is already enabled on a shared environment, the attribute affects only shared environments that are allocated subsequently.</P> -# -# <P>For more information, see "<A HREF="odbcodbc_connection_pooling.htm">ODBC Connection Pooling</A>" in Chapter 6: Connecting to a Data Source or Driver.</P> -# </TD> -# </TR> - SQL_ATTR_CONNECTION_POOLING => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_CP_OFF SQL_CP_ONE_PER_DRIVER SQL_CP_ONE_PER_HENV) ], - default => q(SQL_CP_OFF), - mode => 'rw', - order => ++$order, - }, -# <TR VALIGN="top"> -# <TD width=35%>SQL_ATTR_CP_MATCH<BR> -# (ODBC 3.0)</TD> -# <TD width=65%>A 32-bit SQLUINTEGER value that determines how a connection is chosen from a connection pool. When <B>SQLConnect</B> or <B>SQLDriverConnect</B> is called, the Driver Manager determines which connection is reused from the pool. The Driver Manager attempts to match the connection options in the call and the connection attributes set by the application to the keywords and connection attributes of the connections in the pool. The value of this attribute determines the level of precision of the matching criteria. -# <P>The following values are used to set the value of this attribute:</P> -# -# <P>SQL_CP_STRICT_MATCH = Only connections that exactly match the connection options in the call and the connection attributes set by the application are reused. This is the default.</P> -# -# <P>SQL_CP_RELAXED_MATCH = Connections with matching connection string keywords can be used. Keywords must match, but not all connection attributes must match.</P> -# -# <P>For more information on how the Driver Manager performs the match in connecting to a pooled connection, see <A HREF="odbcsqlconnect.htm">SQLConnect</A>. For more information on connection pooling, see "<A HREF="odbcodbc_connection_pooling.htm">ODBC Connection Pooling</A>" in Chapter 6: Connecting to a Data Source or Driver.</P> -# </TD> -# </TR> - SQL_ATTR_CP_MATCH => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_CP_STRICT_MATCH SQL_CP_RELAXED_MATCH) ], - default => q(SQL_CP_STRICT_MATCH), - mode => 'rw', - order => ++$order, - }, -# <TR VALIGN="top"> -# <TD width=35%>SQL_ATTR_ODBC_VERSION<BR> -# (ODBC 3.0)</TD> -# <TD width=65%>A 32-bit integer that determines whether certain functionality exhibits ODBC 2<I>.x</I> behavior or ODBC 3<I>.x</I> behavior. The following values are used to set the value of this attribute: -# <P>SQL_OV_ODBC3 = The Driver Manager and driver exhibit the following ODBC 3<I>.x</I> behavior: -# -# <UL type=disc> -# <LI>The driver returns and expects ODBC 3<I>.x</I> codes for date, time, and timestamp.</li> -# -# <LI>The driver returns ODBC 3<I>.x</I> SQLSTATE codes when <B>SQLError</B>, <B>SQLGetDiagField</B>, or <B>SQLGetDiagRec</B> is called.</li> -# -# <LI>The <I>CatalogName</I> argument in a call to <B>SQLTables</B> accepts a search pattern.</li> -# </UL> -# -# <P>SQL_OV_ODBC2 = The Driver Manager and driver exhibit the following ODBC 2<I>.x </I>behavior. This is especially useful for an ODBC 2<I>.x</I> application working with an ODBC 3<I>.x</I> driver. -# -# <UL type=disc> -# <LI>The driver returns and expects ODBC 2<I>.x</I> codes for date, time, and timestamp.</li> -# -# <LI>The driver returns ODBC 2<I>.x</I> SQLSTATE codes when <B>SQLError</B>, <B>SQLGetDiagField</B>, or <B>SQLGetDiagRec</B> is called.</li> -# -# <LI>The <I>CatalogName</I> argument in a call to <B>SQLTables</B> does not accept a search pattern.</li> -# </UL> -# -# <P>An application must set this environment attribute before calling any function that has an SQLHENV argument, or the call will return SQLSTATE HY010 (Function sequence error). It is driver-specific whether or not additional behaviors exist for these environmental flags. -# -# <UL type=disc> -# <LI>For more information, see "<A HREF="odbcdeclaring_the_application_s_odbc_version.htm">Declaring the Application's ODBC Version</A>" in Chapter 6: Connecting to a Data Source or Driver and "<A HREF="odbcbehavioral_changes.htm">Behavioral Changes</A>" in Chapter 17: Programming Considerations.</li> -# </UL> -# </TD> -# </TR> - SQL_ATTR_ODBC_VERSION => { - type => q(SQLINTEGER), - ptr => 0, - value => [ qw(SQL_OV_ODBC3 SQL_OV_ODBC2) ], - default => undef, - mode => 'rw', - order => ++$order, - }, -# <TR VALIGN="top"> -# <TD width=35%>SQL_ATTR_OUTPUT_NTS<BR> -# (ODBC 3.0)</TD> -# <TD width=65%>A 32-bit integer that determines how the driver returns string data. If SQL_TRUE, the driver returns string data null-terminated. If SQL_FALSE, the driver does not return string data null-terminated. -# <P>This attribute defaults to SQL_TRUE. A call to <B>SQLSetEnvAttr</B> to set it to SQL_TRUE returns SQL_SUCCESS. A call to <B>SQLSetEnvAttr</B> to set it to SQL_FALSE returns SQL_ERROR and SQLSTATE HYC00 (Optional feature not implemented).</P> -# </TD> -# </TR> - SQL_ATTR_OUTPUT_NTS => { - type => q(SQLINTEGER), - ptr => 0, - value => [ qw(SQL_FALSE SQL_TRUE) ], - default => q(SQL_TRUE), - mode => 'rw', - order => ++$order, - } -# </table></div> -# <!--TS:--> -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>For information about</TH> -# <TH width=52%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Allocating a handle</TD> -# <TD width=52%><A HREF="odbcsqlallochandle.htm">SQLAllocHandle</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Returning the setting of an environment attribute</TD> -# <TD width=52%><A HREF="odbcsqlgetenvattr.htm">SQLGetEnvAttr</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -}; - -# -# odbcsqlsetconnectattr.htm -# -my $attrDbc = { -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLSetConnectAttr</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlsetconnectattr"></A>SQLSetConnectAttr</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 3.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLSetConnectAttr</B> sets attributes that govern aspects of connections.</P> -# -# <P class="indent"><b class="le">Note</b> For more information about what the Driver Manager maps this function to when an ODBC 3<I>.x</I> application is working with an ODBC 2<I>.x</I> driver, see "<A HREF="odbcmapping_replacement_functions_for_backward_compatibility_of_applications.htm">Mapping Replacement Functions for Backward Compatibility of Applications</A>" in Chapter 17: Programming Considerations.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLSetConnectAttr</B>( -# SQLHDBC <I>ConnectionHandle</I>, -# SQLINTEGER <I>Attribute</I>, -# SQLPOINTER <I>ValuePtr</I>, -# SQLINTEGER <I>StringLength</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>ConnectionHandle</I></DT> -# -# <DD>[Input]<BR> -# Connection handle.</dd> -# -# <DT><I>Attribute</I></DT> -# -# <DD>[Input]<BR> -# Attribute to set, listed in "Comments."</dd> -# -# <DT><I>ValuePtr</I></DT> -# -# <DD>[Input]<BR> -# Pointer to the value to be associated with <I>Attribute</I>. Depending on the value of <I>Attribute</I>, <I>ValuePtr</I> will be a 32-bit unsigned integer value or will point to a null-terminated character string. Note that if the <I>Attribute</I> argument is a driver-specific value, the value in <I>ValuePtr</I> may be a signed integer.</dd> -# -# <DT><I>StringLength</I></DT> -# -# <DD>[Input]<BR> -# If <I>Attribute</I> is an ODBC-defined attribute and <I>ValuePtr</I> points to a character string or a binary buffer, this argument should be the length of *<I>ValuePtr</I>. If <I>Attribute</I> is an ODBC-defined attribute and <I>ValuePtr</I> is an integer, <I>StringLength</I> is ignored. -# -# <P>If <I>Attribute</I> is a driver-defined attribute, the application indicates the nature of the attribute to the Driver Manager by setting the <I>StringLength</I> argument. <I>StringLength</I> can have the following values: -# -# -# <UL type=disc> -# <LI>If <I>ValuePtr</I> is a pointer to a character string, then <I>StringLength</I> is the length of the string or SQL_NTS.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a binary buffer, then the application places the result of the SQL_LEN_BINARY_ATTR(<I>length</I>) macro in <I>StringLength</I>. This places a negative value in <I>StringLength</I>.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a value other than a character string or a binary string, then <I>StringLength</I> should have the value SQL_IS_POINTER.</li> -# -# <LI>If <I>ValuePtr</I> contains a fixed-length value, then <I>StringLength</I> is either SQL_IS_INTEGER or SQL_IS_UINTEGER, as appropriate.</li> -# </UL> -# </dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLSetConnectAttr</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_DBC and a <I>Handle</I> of <I>ConnectionHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLSetConnectAttr</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# -# <P>The driver can return SQL_SUCCESS_WITH_INFO to provide information about the result of setting an option.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01S02</TD> -# <TD width=26%>Option value changed</TD> -# <TD width=52%>The driver did not support the value specified in <I>ValuePtr</I> and substituted a similar value. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08002</TD> -# <TD width=26%>Connection name in use</TD> -# <TD width=52%>The <I>Attribute</I> argument was SQL_ATTR_ODBC_CURSORS, and the driver was already connected to the data source.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08003</TD> -# <TD width=26%>Connection does not exist</TD> -# <TD width=52%>(DM) An <I>Attribute</I> value was specified that required an open connection, but the <I>ConnectionHandle</I> was not in a connected state.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>The <I>Attribute</I> argument was SQL_ATTR_CURRENT_CATALOG, and a result set was pending.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>3D000</TD> -# <TD width=26%>Invalid catalog name</TD> -# <TD width=52%>The <I>Attribute</I> argument was SQL_CURRENT_CATALOG, and the specified catalog name was invalid.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>The <I>Attribute</I> argument identified a connection attribute that required a string value, and the <I>ValuePtr </I>argument was a null pointer.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function was called for a <I>StatementHandle</I> associated with the <I>ConnectionHandle</I> and was still executing when <B>SQLSetConnectAttr</B> was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for a <I>StatementHandle</I> associated with the <I>ConnectionHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# -# <P>(DM) <B>SQLBrowseConnect</B> was called for the <I>ConnectionHandle</I> and returned SQL_NEED_DATA. This function was called before <B>SQLBrowseConnect</B> returned SQL_SUCCESS_WITH_INFO or SQL_SUCCESS.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY011</TD> -# <TD width=26%>Attribute cannot be set now</TD> -# <TD width=52%>The <I>Attribute</I> argument was SQL_ATTR_TXN_ISOLATION, and a transaction was open.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY024</TD> -# <TD width=26%>Invalid attribute value</TD> -# <TD width=52%>Given the specified <I>Attribute</I> value, an invalid value was specified in <I>ValuePtr</I>. (The Driver Manager returns this SQLSTATE only for connection and statement attributes that accept a discrete set of values, such as SQL_ATTR_ACCESS_MODE or SQL_ATTR_ASYNC_ENABLE. For all other connection and statement attributes, the driver must verify the value specified in <I>ValuePtr</I>.) -# <P>The <I>Attribute</I> argument was SQL_ATTR_TRACEFILE or SQL_ATTR_TRANSLATE_LIB, and <I>ValuePtr</I> was an empty string.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%><I>(DM) *ValuePtr </I>is a character string, and the <I>StringLength</I> argument was less than 0 but was not SQL_NTS.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY092</TD> -# <TD width=26%>Invalid attribute/option identifier</TD> -# <TD width=52%>(DM) The value specified for the argument <I>Attribute</I> was not valid for the version of ODBC supported by the driver. -# <P>(DM) The value specified for the argument <I>Attribute</I> was a read-only attribute.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>The value specified for the argument <I>Attribute</I> was a valid ODBC connection or statement attribute for the version of ODBC supported by the driver but was not supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver associated with the <I>ConnectionHandle</I> does not support the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM009</TD> -# <TD width=26%>Unable to load translation DLL</TD> -# <TD width=52%>The driver was unable to load the translation DLL that was specified for the connection. This error can be returned only when <I>Attribute</I> is SQL_ATTR_TRANSLATE_LIB.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>When <I>Attribute</I> is a statement attribute, <B>SQLSetConnectAttr</B> can return any SQLSTATEs returned by <B>SQLSetStmtAttr</B>.</P> -# -# <P class="label"><B>Comments</B></P> -# -# <P>For general information about connection attributes, see "<A HREF="odbcconnection_attributes.htm">Connection Attributes</A>" in Chapter 6: Connecting to a Data Source or Driver.</P> -# -# <P>The currently defined attributes and the version of ODBC in which they were introduced are shown in the table later in this section; it is expected that more attributes will be defined to take advantage of different data sources. A range of attributes is reserved by ODBC; driver developers must reserve values for their own driver-specific use from X/Open.</P> -# -# <P class="indent"><b class="le">Note</b> The ability to set statement attributes at the connection level by calling <B>SQLSetConnectAttr</B> has been deprecated in ODBC 3<I>.x</I>. ODBC 3<I>.x</I> applications should never set statement attributes at the connection level. ODBC 3<I>.x</I> statement attributes cannot be set at the connection level, with the exception of the SQL_ATTR_METADATA_ID and SQL_ATTR_ASYNC_ENABLE attributes, which are both connection attributes and statement attributes and can be set at either the connection level or the statement level.</P> -# -# <P class="indent">ODBC 3<I>.x</I> drivers need only support this functionality if they should work with ODBC 2<I>.x</I> applications that set ODBC 2<I>.x</I> statement options at the connection level. For more information, see "<A HREF="odbcsqlsetconnectoption_mapping.htm">SQLSetConnectOption Mapping</A>" in Appendix G: Driver Guidelines for Backward Compatibility.</P> -# -# <P>An application can call <B>SQLSetConnectAttr</B> at any time between the time the connection is allocated and freed. All connection and statement attributes successfully set by the application for the connection persist until <B>SQLFreeHandle</B> is called on the connection. For example, if an application calls <B>SQLSetConnectAttr</B> before connecting to a data source, the attribute persists even if <B>SQLSetConnectAttr</B> fails in the driver when the application connects to the data source; if an application sets a driver-specific attribute, the attribute persists even if the application connects to a different driver on the connection.</P> -# -# <P>Some connection attributes can be set only before a connection has been made; others can be set only after a connection has been made. The following table indicates those connection attributes that must be set either before or after a connection has been made. <I>Either</I> indicates that the attribute can be set either before or after connection.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>Attribute</TH> -# <TH width=50%>Set before or after connection?</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_ACCESS_MODE</TD> -# <TD width=50%>Either<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_ASYNC_ENABLE</TD> -# <TD width=50%>Either<SUP>[2]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_AUTOCOMMIT</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_CONNECTION_TIMEOUT</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_CURRENT_CATALOG</TD> -# <TD width=50%>Either<SUP>[1]</SUP></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_LOGIN_TIMEOUT</TD> -# <TD width=50%>Before</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_METADATA_ID</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_ODBC_CURSORS</TD> -# <TD width=50%>Before</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_PACKET_SIZE</TD> -# <TD width=50%>Before</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_QUIET_MODE</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_TRACE</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_TRACEFILE</TD> -# <TD width=50%>Either</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_TRANSLATE_LIB</TD> -# <TD width=50%>After</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_TRANSLATE_OPTION</TD> -# <TD width=50%>After</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>SQL_ATTR_TXN_ISOLATION</TD> -# <TD width=50%>Either<SUP>[3]</SUP></TD> -# </TR> -# </table></div> -# -# <P class="fineprint">[1] SQL_ATTR_ACCESS_MODE and SQL_ATTR_CURRENT_CATALOG can be set before or after connecting, depending on the driver. However, interoperable applications set them before connecting because some drivers do not support changing these after connecting.</p> -# <P class="fineprint">[2] SQL_ATTR_ASYNC_ENABLE must be set before there is an active statement.</p> -# <P class="fineprint">[3] SQL_ATTR_TXN_ISOLATION can be set only if there are no open transactions on the connection. Some connection attributes support substitution of a similar value if the data source does not support the value specified in *<I>ValuePtr</I>. In such cases, the driver returns SQL_SUCCESS_WITH_INFO and SQLSTATE 01S02 (Option value changed). For example, if <I>Attribute</I> is SQL_ATTR_PACKET_SIZE and *<I>ValuePtr</I> exceeds the maximum packet size, the driver substitutes the maximum size. To determine the substituted value, an application calls <B>SQLGetConnectAttr</B>.</p> -# <P>The format of information set in the *<I>ValuePtr</I> buffer depends on the specified <I>Attribute</I>. <B>SQLSetConnectAttr</B> will accept attribute information in one of two different formats: a null-terminated character string or a 32-bit integer value. The format of each is noted in the attribute's description. Character strings pointed to by the <I>ValuePtr</I> argument of <B>SQLSetConnectAttr</B> have a length of <I>StringLength</I> bytes.</P> -# -# <P>The <I>StringLength</I> argument is ignored if the length is defined by the attribute, as is the case for all attributes introduced in ODBC 2<I>.x</I> or earlier.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=38%><I>Attribute</I></TH> -# <TH width=62%><I>ValuePtr</I> contents</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ACCESS_MODE<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value. SQL_MODE_READ_ONLY is used by the driver or data source as an indicator that the connection is not required to support SQL statements that cause updates to occur. This mode can be used to optimize locking strategies, transaction management, or other areas as appropriate to the driver or data source. The driver is not required to prevent such statements from being submitted to the data source. The behavior of the driver and data source when asked to process SQL statements that are not read-only during a read-only connection is implementation-defined. SQL_MODE_READ_WRITE is the default.</TD> -# </TR> - SQL_ATTR_ACCESS_MODE => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_MODE_READ_ONLY SQL_MODE_READ_WRITE) ], - default => q(SQL_MODE_READ_WRITE), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ASYNC_ENABLE<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether a function called with a statement on the specified connection is executed asynchronously: -# <P>SQL_ASYNC_ENABLE_OFF = Off (the default)<BR> -# SQL_ASYNC_ENABLE_ON = On</P> -# -# <P>Setting SQL_ASYNC_ENABLE_ON enables asynchronous execution for all future statement handles allocated on this connection. It is driver-defined whether this enables asynchronous execution for existing statement handles associated with this connection. An error is returned if asynchronous execution is enabled while there is an active statement on the connection.</P> -# -# <P>This attribute can be set whether <B>SQLGetInfo</B> with the SQL_ASYNC_MODE information type returns SQL_AM_CONNECTION or SQL_AM_STATEMENT.</P> -# -# <P>After a function has been called asynchronously, only the original function, <B>SQLAllocHandle</B>, <B>SQLCancel</B>, <B>SQLGetDiagField</B>, or <B>SQLGetDiagRec </B>can be called on the statement or the connection associated with <I>StatementHandle</I>, until the original function returns a code other than SQL_STILL_EXECUTING. Any other function called on <I>StatementHandle</I> or the connection associated with <I>StatementHandle</I> returns SQL_ERROR with an SQLSTATE of HY010 (Function sequence error). Functions can be called on other statements. For more information, see "<A HREF="odbcasynchronous_execution.htm">Asynchronous Execution</A>" in Chapter 9: Executing Statements.</P> -# -# <P>In general, applications should execute functions asynchronously only on single-thread operating systems. On multithread operating systems, applications should execute functions on separate threads rather than executing them asynchronously on the same thread. Drivers that operate only on multithread operating systems do not need to support asynchronous execution.</P> -# -# <P>The following functions can be executed asynchronously:</P> -# -# <P><B>SQLBulkOperations<BR> -# SQLColAttribute</B><BR> -# <B>SQLColumnPrivileges</B><BR> -# <B>SQLColumns</B><BR> -# <B>SQLCopyDesc</B><BR> -# <B>SQLDescribeCol</B><BR> -# <B>SQLDescribeParam</B><BR> -# <B>SQLExecDirect</B><BR> -# <B>SQLExecute</B><BR> -# <B>SQLFetch</B><BR> -# <B>SQLFetchScroll</B><BR> -# <B>SQLForeignKeys</B><BR> -# <B>SQLGetData</B><BR> -# <B>SQLGetDescField</B><SUP>[1]<BR> -# </SUP><B>SQLGetDescRec</B><SUP>[1]</SUP><B><BR> -# SQLGetDiagField</B><BR> -# <B>SQLGetDiagRec<BR> -# SQLGetTypeInfo</B><BR> -# <B>SQLMoreResults</B><BR> -# <B>SQLNumParams</B><BR> -# <B>SQLNumResultCols</B><BR> -# <B>SQLParamData</B><BR> -# <B>SQLPrepare</B><BR> -# <B>SQLPrimaryKeys</B><BR> -# <B>SQLProcedureColumns</B><BR> -# <B>SQLProcedures</B><BR> -# <B>SQLPutData</B><BR> -# <B>SQLSetPos</B><BR> -# <B>SQLSpecialColumns</B><BR> -# <B>SQLStatistics</B><BR> -# <B>SQLTablePrivileges</B><BR> -# <B>SQLTables</B></P> -# </TD> -# </TR> - SQL_ASYNC_ENABLE_ON => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_ASYNC_ENABLE_OFF SQL_ASYNC_ENABLE_ON) ], - default => q(SQL_ASYNC_ENABLE_OFF), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_AUTO_IPD<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>A read-only SQLUINTEGER value that specifies whether automatic population of the IPD after a call to <B>SQLPrepare </B>is supported: -# <P>SQL_TRUE = Automatic population of the IPD after a call to <B>SQLPrepare </B>is supported by the driver.</P> -# -# <P>SQL_FALSE = Automatic population of the IPD after a call to <B>SQLPrepare </B>is not supported by the driver. Servers that do not support prepared statements will not be able to populate the IPD automatically. </P> -# -# <P>If SQL_TRUE is returned for the SQL_ATTR_AUTO_IPD connection attribute, the statement attribute SQL_ATTR_ENABLE_AUTO_IPD can be set to turn automatic population of the IPD on or off. If SQL_ATTR_AUTO_IPD is SQL_FALSE, SQL_ATTR_ENABLE_AUTO_IPD cannot be set to SQL_TRUE. The default value of SQL_ATTR_ENABLE_AUTO_IPD is equal to the value of SQL_ATTR_AUTO_IPD.</P> -# -# <P>This connection attribute can be returned by <B>SQLGetConnectAttr</B> but cannot be set by <B>SQLSetConnectAttr</B>.</P> -# </TD> -# </TR> - SQL_ATTR_AUTO_IPD => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_FALSE SQL_TRUE) ], - default => undef, - mode => 'ro', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_AUTOCOMMIT<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether to use autocommit or manual-commit mode: -# <P>SQL_AUTOCOMMIT_OFF = The driver uses manual-commit mode, and the application must explicitly commit or roll back transactions with <B>SQLEndTran</B>.</P> -# -# <P>SQL_AUTOCOMMIT_ON = The driver uses autocommit mode. Each statement is committed immediately after it is executed. This is the default. Any open transactions on the connection are committed when SQL_ATTR_AUTOCOMMIT is set to SQL_AUTOCOMMIT_ON to change from manual-commit mode to autocommit mode.</P> -# -# <P>For more information, see "<A HREF="odbccommit_mode.htm">Commit Mode</A>" in Chapter 14: Transactions.</P> -# -# <P class="indent"><b class="le">Important </b>Some data sources delete the access plans and close the cursors for all statements on a connection each time a statement is committed; autocommit mode can cause this to happen after each nonquery statement is executed or when the cursor is closed for a query. For more information, see the SQL_CURSOR_COMMIT_BEHAVIOR and SQL_CURSOR_ROLLBACK_BEHAVIOR information types in <A HREF="odbcsqlgetinfo.htm">SQLGetInfo</A> and "<A HREF="odbceffect_of_transactions_on_cursors_and_prepared_statements.htm">Effect of Transactions on Cursors and Prepared Statements</A>" in Chapter 14: Transactions.</P> -# -# <P>When a batch is executed in autocommit mode, two things are possible. The entire batch can be treated as an autocommitable unit, or each statement in a batch is treated as an autocommitable unit. Certain data sources can support both these behaviors and may provide a way of choosing one or the other. It is driver-defined whether a batch is treated as an autocommitable unit or whether each individual statement within the batch is autocommitable.</P> -# </TD> -# </TR> - SQL_ATTR_AUTOCOMMIT => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_AUTOCOMMIT_OFF SQL_AUTOCOMMIT_ON) ], - default => q(SQL_AUTOCOMMIT_ON), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CONNECTION_DEAD -# <P>(ODBC 3.5)</P> -# </TD> -# <TD width=62%>An SQLUINTERGER value that indicates the state of the connection. If SQL_CD_TRUE, the connection has been lost. If SQL_CD_FALSE, the connection is still active.</TD> -# </TR> - SQL_ATTR_CONNECTION_DEAD => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_CD_FALSE SQL_CD_TRUE) ], - default => undef, - mode => 'ro', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CONNECTION_TIMEOUT<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value corresponding to the number of seconds to wait for any request on the connection to complete before returning to the application. The driver should return SQLSTATE HYT00 (Timeout expired) anytime that it is possible to time out in a situation not associated with query execution or login. -# <P>If <I>ValuePtr</I> is equal to 0 (the default), there is no timeout.</P> -# </TD> -# </TR> - SQL_ATTR_CONNECTION_TIMEOUT => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => 0, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CURRENT_CATALOG<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>A character string containing the name of the catalog to be used by the data source. For example, in SQL Server, the catalog is a database, so the driver sends a <B>USE</B> <I>database</I> statement to the data source, where <I>database</I> is the database specified in *<I>ValuePtr</I>. For a single-tier driver, the catalog might be a directory, so the driver changes its current directory to the directory specified in *<I>ValuePtr</I>.</TD> -# </TR> - SQL_ATTR_CURRENT_CATALOG => { - type => q(SQLCHAR), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_LOGIN_TIMEOUT<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value corresponding to the number of seconds to wait for a login request to complete before returning to the application. The default is driver-dependent. If <I>ValuePtr</I> is 0, the timeout is disabled and a connection attempt will wait indefinitely. -# <P>If the specified timeout exceeds the maximum login timeout in the data source, the driver substitutes that value and returns SQLSTATE 01S02 (Option value changed).</P> -# </TD> -# </TR> - SQL_ATTR_LOGIN_TIMEOUT => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => 0, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_METADATA_ID<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that determines how the string arguments of catalog functions are treated. -# <P>If SQL_TRUE, the string argument of catalog functions are treated as identifiers. The case is not significant. For nondelimited strings, the driver removes any trailing spaces and the string is folded to uppercase. For delimited strings, the driver removes any leading or trailing spaces and takes literally whatever is between the delimiters. If one of these arguments is set to a null pointer, the function returns SQL_ERROR and SQLSTATE HY009 (Invalid use of null pointer). </P> -# -# <P>If SQL_FALSE, the string arguments of catalog functions are not treated as identifiers. The case is significant. They can either contain a string search pattern or not, depending on the argument.</P> -# -# <P>The default value is SQL_FALSE.</P> -# -# <P>The <I>TableType</I> argument of <B>SQLTables</B>, which takes a list of values, is not affected by this attribute.</P> -# -# <P>SQL_ATTR_METADATA_ID can also be set on the statement level. (It is the only connection attribute that is also a statement attribute.)</P> -# -# <P>For more information, see "<A HREF="odbcarguments_in_catalog_functions.htm">Arguments in Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# </TD> -# </TR> - SQL_ATTR_METADATA_ID => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_FALSE SQL_TRUE) ], - default => q(SQL_FALSE), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ODBC_CURSORS<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value specifying how the Driver Manager uses the ODBC cursor library: -# <P>SQL_CUR_USE_IF_NEEDED = The Driver Manager uses the ODBC cursor library only if it is needed. If the driver supports the SQL_FETCH_PRIOR option in <B>SQLFetchScroll</B>, the Driver Manager uses the scrolling capabilities of the driver. Otherwise, it uses the ODBC cursor library.</P> -# -# <P>SQL_CUR_USE_ODBC = The Driver Manager uses the ODBC cursor library.</P> -# -# <P>SQL_CUR_USE_DRIVER = The Driver Manager uses the scrolling capabilities of the driver. This is the default setting.</P> -# -# <P>For more information about the ODBC cursor library, see <A HREF="odbcodbc_cursor_library.htm">Appendix F: ODBC Cursor Library</A>.</P> -# </TD> -# </TR> - SQL_ATTR_ODBC_CURSORS => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_CUR_USE_IF_NEEDED SQL_CUR_USE_ODBC SQL_CUR_USE_DRIVER) ], - default => q(SQL_CUR_USE_DRIVER), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PACKET_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value specifying the network packet size in bytes. -# <P class="indent"><B>Note</B> Many data sources either do not support this option or only can return but not set the network packet size.</P> -# -# <P>If the specified size exceeds the maximum packet size or is smaller than the minimum packet size, the driver substitutes that value and returns SQLSTATE 01S02 (Option value changed).</P> -# -# <P>If the application sets packet size after a connection has already been made, the driver will return SQLSTATE HY011 (Attribute cannot be set now).</P> -# </TD> -# </TR> - SQL_ATTR_PACKET_SIZE => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_QUIET_MODE<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>A 32-bit window handle (<I>hwnd</I>). -# <P>If the window handle is a null pointer, the driver does not display any dialog boxes.</P> -# -# <P>If the window handle is not a null pointer, it should be the parent window handle of the application. This is the default. The driver uses this handle to display dialog boxes.</P> -# -# <P class="indent"><b class="le">Note </b>The SQL_ATTR_QUIET_MODE connection attribute does not apply to dialog boxes displayed by <B>SQLDriverConnect</B>.</P> -# </TD> -# </TR> - SQL_ATTR_QUIET_MODE => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_TRACE<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value telling the Driver Manager whether to perform tracing: -# <P>SQL_OPT_TRACE_OFF = Tracing off (the default)</P> -# -# <P>SQL_OPT_TRACE_ON = Tracing on</P> -# -# <P>When tracing is on, the Driver Manager writes each ODBC function call to the trace file.</P> -# -# <P class="indent"><b class="le">Note </b>When tracing is on, the Driver Manager can return SQLSTATE IM013 (Trace file error) from any function.</P> -# -# <P>An application specifies a trace file with the SQL_ATTR_TRACEFILE option. If the file already exists, the Driver Manager appends to the file. Otherwise, it creates the file. If tracing is on and no trace file has been specified, the Driver Manager writes to the file SQL.LOG in the root directory. </P> -# -# <P>An application can set the variable <B>ODBCSharedTraceFlag</B> to enable tracing dynamically. Tracing is then enabled for all ODBC applications currently running. If an application turns tracing off, it is turned off only for that application.</P> -# -# <P>If the <B>Trace</B> keyword in the system information is set to 1 when an application calls <B>SQLAllocHandle</B> with a <I>HandleType</I> of SQL_HANDLE_ENV, tracing is enabled for all handles. It is enabled only for the application that called <B>SQLAllocHandle</B>.</P> -# -# <P>Calling <B>SQLSetConnectAttr</B> with an <I>Attribute</I> of SQL_ATTR_TRACE does not require that the <I>ConnectionHandle</I> argument be valid and will not return SQL_ERROR if <I>ConnectionHandle</I> is NULL. This attribute applies to all connections.</P> -# </TD> -# </TR> - SQL_ATTR_TRACE => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_OPT_TRACE_OFF SQL_OPT_TRACE_ON) ], - default => q(SQL_OPT_TRACE_OFF), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_TRACEFILE<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>A null-terminated character string containing the name of the trace file. -# <P>The default value of the SQL_ATTR_TRACEFILE attribute is specified with the <B>TraceFile</B> keyword in the system information. For more information, see "<A HREF="odbcodbc_subkey.htm">ODBC Subkey</A>" in Chapter 19: Configuring Data Sources.</P> -# -# <P>Calling <B>SQLSetConnectAttr</B> with an <I>Attribute</I> of SQL_ATTR_ TRACEFILE does not require the <I>ConnectionHandle</I> argument to be valid and will not return SQL_ERROR if <I>ConnectionHandle</I> is invalid. This attribute applies to all connections.</P> -# </TD> -# </TR> - SQL_ATTR_TRACEFILE => { - type => q(SQLCHAR), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_TRANSLATE_LIB<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>A null-terminated character string containing the name of a library containing the functions <B>SQLDriverToDataSource</B> and <B>SQLDataSourceToDriver</B> that the driver accesses to perform tasks such as character set translation. This option may be specified only if the driver has connected to the data source. The setting of this attribute will persist across connections. For more information about translating data, see "<A HREF="odbctranslation_dlls.htm">Translation DLLs</A>" in Chapter 17: Programming Considerations, and <A HREF="odbctranslation_dll_function_reference.htm">Chapter 24: Translation DLL Function Reference</A>.</TD> -# </TR> - SQL_ATTR_TRANSLATE_LIB => { - type => q(SQLCHAR), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_TRANSLATE_OPTION<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>A 32-bit flag value that is passed to the translation DLL. This attribute can be specified only if the driver has connected to the data source. For information about translating data, see "<A HREF="odbctranslation_dlls.htm">Translation DLLs</A>" in Chapter 17: Programming Considerations.</TD> -# </TR> - SQL_ATTR_TRANSLATE_OPTION => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_TXN_ISOLATION<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>A 32-bit bitmask that sets the transaction isolation level for the current connection. An application must call <B>SQLEndTran</B> to commit or roll back all open transactions on a connection, before calling <B>SQLSetConnectAttr</B> with this option. -# <P>The valid values for <I>ValuePtr</I> can be determined by calling <B>SQLGetInfo</B> with <I>InfoType</I> equal to SQL_TXN_ISOLATION_OPTIONS.</P> -# -# <P>For a description of transaction isolation levels, see the description of the SQL_DEFAULT_TXN_ISOLATION information type in <B>SQLGetInfo</B> and "<A HREF="odbctransaction_isolation_levels.htm">Transaction Isolation Levels</A>" in Chapter 14: Transactions.</P> -# </TD> -# </TR> - SQL_ATTR_TXN_ISOLATION => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# </table></div> -# -# <P class="fineprint">[1] These functions can be called asynchronously only if the descriptor is an implementation descriptor, not an application descriptor.</p> -# <P class="label"><B>Code Example</B></P> -# -# <P>See <A HREF="odbcsqlconnect.htm">SQLConnect</A>.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>For information about</TH> -# <TH width=52%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Allocating a handle</TD> -# <TD width=52%><A HREF="odbcsqlallochandle.htm">SQLAllocHandle</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>Returning the setting of a connection <BR> -# attribute</TD> -# <TD width=52%><A HREF="odbcsqlgetconnectattr.htm">SQLGetConnectAttr</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -}; - -# -# odbcsqlsetstmtattr.htm -# -my $attrStmt = { -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLSetStmtAttr</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlsetstmtattr"></A>SQLSetStmtAttr</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 3.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLSetStmtAttr</B> sets attributes related to a statement.</P> -# -# <P class="indent"><b class="le">Note</b> For more information about what the Driver Manager maps this function to when an ODBC 3<I>.x</I> application is working with an ODBC 2<I>.x</I> driver, see "<A HREF="odbcmapping_replacement_functions_for_backward_compatibility_of_applications.htm">Mapping Replacement Functions for Backward Compatibility of Applications</A>" in Chapter 17: Programming Considerations.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLSetStmtAttr</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLINTEGER <I>Attribute</I>, -# SQLPOINTER <I>ValuePtr</I>, -# SQLINTEGER <I>StringLength</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle.</dd> -# -# <DT><I>Attribute</I></DT> -# -# <DD>[Input]<BR> -# Option to set, listed in "Comments."</dd> -# -# <DT><I>ValuePtr</I></DT> -# -# <DD>[Input]<BR> -# Pointer to the value to be associated with <I>Attribute</I>. Depending on the value of <I>Attribute</I>, <I>ValuePtr</I> will be a 32-bit unsigned integer value or a pointer to a null-terminated character string, a binary buffer, or a driver-defined value. If the <I>Attribute</I> argument is a driver-specific value, <I>ValuePtr</I> may be a signed integer.</dd> -# -# <DT><I>StringLength</I></DT> -# -# <DD>[Input]<BR> -# If <I>Attribute</I> is an ODBC-defined attribute and <I>ValuePtr</I> points to a character string or a binary buffer, this argument should be the length of *<I>ValuePtr</I>. If <I>Attribute</I> is an ODBC-defined attribute and <I>ValuePtr</I> is an integer, <I>StringLength</I> is ignored. -# -# <P>If <I>Attribute</I> is a driver-defined attribute, the application indicates the nature of the attribute to the Driver Manager by setting the <I>StringLength</I> argument. <I>StringLength</I> can have the following values: -# </dd> -# </DL> -# -# <UL type=disc> -# <LI>If <I>ValuePtr</I> is a pointer to a character string, then <I>StringLength</I> is the length of the string or SQL_NTS.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a binary buffer, then the application places the result of the SQL_LEN_BINARY_ATTR(<I>length</I>) macro in <I>StringLength</I>. This places a negative value in <I>StringLength</I>.</li> -# -# <LI>If <I>ValuePtr</I> is a pointer to a value other than a character string or a binary string, then <I>StringLength</I> should have the value SQL_IS_POINTER. </li> -# -# <LI>If <I>ValuePtr</I> contains a fixed-length value, then <I>StringLength</I> is either SQL_IS_INTEGER or SQL_IS_UINTEGER, as appropriate.</li> -# </UL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLSetStmtAttr</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value may be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLSetStmtAttr</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01S02</TD> -# <TD width=26%>Option value changed</TD> -# <TD width=52%>The driver did not support the value specified in <I>ValuePtr</I>, or the value specified in <I>ValuePtr</I> was invalid because of implementation working conditions, so the driver substituted a similar value. (<B>SQLGetStmtAttr</B> can be called to determine the temporarily substituted value.) The substitute value is valid for the <I>StatementHandle</I> until the cursor is closed, at which point the statement attribute reverts to its previous value. The statement attributes that can be changed are: -# <P>SQL_ ATTR_CONCURRENCY<BR> -# SQL_ ATTR_CURSOR_TYPE<BR> -# SQL_ ATTR_KEYSET_SIZE<BR> -# SQL_ ATTR_MAX_LENGTH<BR> -# SQL_ ATTR_MAX_ROWS<BR> -# SQL_ ATTR_QUERY_TIMEOUT <BR> -# SQL_ATTR_ROW_ARRAY_SIZE<BR> -# SQL_ ATTR_SIMULATE_CURSOR </P> -# -# <P>(Function returns SQL_SUCCESS_WITH_INFO.)</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>The <I>Attribute</I> was SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR, or SQL_ATTR_USE_BOOKMARKS, and the cursor was open.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation <BR> -# error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>The <I>Attribute</I> argument identified a statement attribute that required a string attribute, and the <I>ValuePtr </I>argument was a null pointer.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY011</TD> -# <TD width=26%>Attribute cannot be set now</TD> -# <TD width=52%>The <I>Attribute</I> was SQL_ATTR_CONCURRENCY, SQL_ ATTR_CURSOR_TYPE, SQL_ ATTR_SIMULATE_CURSOR, or SQL_ ATTR_USE_BOOKMARKS, and the statement was prepared.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY017</TD> -# <TD width=26%>Invalid use of an automatically allocated descriptor handle</TD> -# <TD width=52%>(DM) The <I>Attribute</I> argument was SQL_ATTR_IMP_ROW_DESC or SQL_ATTR_IMP_PARAM_DESC. -# <P>(DM) The <I>Attribute</I> argument was SQL_ATTR_APP_ROW_DESC or SQL_ATTR_APP_PARAM_DESC, and the value in <I>ValuePtr</I> was an implicitly allocated descriptor handle other than the handle originally allocated for the ARD or APD.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY024</TD> -# <TD width=26%>Invalid attribute value</TD> -# <TD width=52%>Given the specified <I>Attribute</I> value, an invalid value was specified in <I>ValuePtr</I>. (The Driver Manager returns this SQLSTATE only for connection and statement attributes that accept a discrete set of values, such as SQL_ATTR_ACCESS_MODE or SQL_ ATTR_ASYNC_ENABLE. For all other connection and statement attributes, the driver must verify the value specified in <I>ValuePtr</I>.) -# <P>The <I>Attribute</I> argument was SQL_ATTR_APP_ROW_DESC or SQL_ATTR_APP_PARAM_DESC, and <I>ValuePtr</I> was an explicitly allocated descriptor handle that is not on the same connection as the <I>StatementHandle</I> argument.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%>(DM) <I>*ValuePtr</I> is a character string, and the <I>StringLength</I> argument was less than 0 but was not SQL_NTS.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY092</TD> -# <TD width=26%>Invalid attribute/option identifier</TD> -# <TD width=52%>(DM) The value specified for the argument <I>Attribute</I> was not valid for the version of ODBC supported by the driver. -# <P>(DM) The value specified for the argument <I>Attribute</I> was a read-only attribute.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>The value specified for the argument <I>Attribute</I> was a valid ODBC statement attribute for the version of ODBC supported by the driver but was not supported by the driver. -# <P>The <I>Attribute</I> argument was SQL_ATTR_ASYNC_ENABLE, and a call to <B>SQLGetInfo</B> with an <I>InfoType</I> of SQL_ASYNC_MODE returns SQL_AM_CONNECTION.</P> -# -# <P>The <I>Attribute</I> argument was SQL_ATTR_ENABLE_AUTO_IPD, and the value of the connection attribute SQL_ATTR_AUTO_IPD was SQL_FALSE.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver associated with the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P>Statement attributes for a statement remain in effect until they are changed by another call to <B>SQLSetStmtAttr</B> or until the statement is dropped by calling <B>SQLFreeHandle</B>. Calling <B>SQLFreeStmt</B> with the SQL_CLOSE, SQL_UNBIND, or SQL_RESET_PARAMS option does not reset statement attributes.</P> -# -# <P>Some statement attributes support substitution of a similar value if the data source does not support the value specified in <I>ValuePtr</I>. In such cases, the driver returns SQL_SUCCESS_WITH_INFO and SQLSTATE 01S02 (Option value changed). For example, if <I>Attribute</I> is SQL_ATTR_CONCURRENCY and <I>ValuePtr</I> is SQL_CONCUR_ROWVER, and if the data source does not support this, the driver substitutes SQL_CONCUR_VALUES and returns SQL_SUCCESS_WITH_INFO. To determine the substituted value, an application calls <B>SQLGetStmtAttr</B>.</P> -# -# <P>The format of information set with <I>ValuePtr</I> depends on the specified <I>Attribute</I>. <B>SQLSetStmtAttr</B> accepts attribute information in one of two different formats: a character string or a 32-bit integer value. The format of each is noted in the attribute's description. This format applies to the information returned for each attribute in <B>SQLGetStmtAttr</B>. Character strings pointed to by the <I>ValuePtr</I> argument of <B>SQLSetStmtAttr</B> have a length of <I>StringLength</I>.</P> -# -# <P class="indent"><b class="le">Note</b> The ability to set statement attributes at the connection level by calling <B>SQLSetConnectAttr</B> has been deprecated in ODBC 3<I>.x</I>. ODBC 3<I>.x</I> applications should never set statement attributes at the connection level. ODBC 3<I>.x</I> statement attributes cannot be set at the connection level, with the exception of the SQL_ATTR_METADATA_ID and SQL_ATTR_ASYNC_ENABLE attributes, which are both connection attributes and statement attributes, and can be set at either the connection level or the statement level.</P> -# -# <P class="indent">ODBC 3<I>.x</I> drivers need only support this functionality if they should work with ODBC 2<I>.x</I> applications that set ODBC 2<I>.x</I> statement options at the connection level. For more information, see "Setting Statement Options on the Connection Level" under "<A HREF="odbcsqlsetconnectoption_mapping.htm">SQLSetConnectOption Mapping</A>" in Appendix G: Driver Guidelines for Backward Compatibility.</P> -# -# <H1>Statement Attributes That Set Descriptor Fields</H1> -# -# <P>Many statement attributes correspond to a header field of a descriptor. Setting these attributes actually results in the setting of the descriptor fields. Setting fields by a call to <B>SQLSetStmtAttr</B> rather than to <B>SQLSetDescField</B> has the advantage that a descriptor handle does not have to be obtained for the function call.</P> -# -# <P class="indent"><b class="le">Caution</b> Calling <B>SQLSetStmtAttr</B> for one statement can affect other statements. This occurs when the APD or ARD associated with the statement is explicitly allocated and is also associated with other statements. Because <B>SQLSetStmtAttr</B> modifies the APD or ARD, the modifications apply to all statements with which this descriptor is associated. If this is not the required behavior, the application should dissociate this descriptor from the other statements (by calling <B>SQLSetStmtAttr</B> to set the SQL_ATTR_APP_ROW_DESC or SQL_ATTR_APP_PARAM_DESC field to a different descriptor handle) before calling <B>SQLSetStmtAttr</B> again.</P> -# -# <P>When a descriptor field is set as a result of the corresponding statement attribute being set, the field is set only for the applicable descriptors that are currently associated with the statement identified by the <I>StatementHandle</I> argument, and the attribute setting does not affect any descriptors that may be associated with that statement in the future. When a descriptor field that is also a statement attribute is set by a call to <B>SQLSetDescField</B>, the corresponding statement attribute is set. If an explicitly allocated descriptor is dissociated from a statement, a statement attribute that corresponds to a header field will revert to the value of the field in the implicitly allocated descriptor.</P> -# -# <P>When a statement is allocated (see <A HREF="odbcsqlallochandle.htm">SQLAllocHandle</A>), four descriptor handles are automatically allocated and associated with the statement. Explicitly allocated descriptor handles can be associated with the statement by calling <B>SQLAllocHandle</B> with an <I>fHandleType</I> of SQL_HANDLE_DESC to allocate a descriptor handle and then calling <B>SQLSetStmtAttr</B> to associate the descriptor handle with the statement. </P> -# -# <P>The statement attributes in the following table correspond to descriptor header fields.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=42%>Statement attribute</TH> -# <TH width=45%>Header field</TH> -# <TH width=13%>Desc.</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAM_BIND_OFFSET_PTR</TD> -# <TD width=45%>SQL_DESC_BIND_OFFSET_PTR</TD> -# <TD width=13%>APD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAM_BIND_TYPE</TD> -# <TD width=45%>SQL_DESC_BIND_TYPE</TD> -# <TD width=13%>APD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAM_OPERATION_PTR</TD> -# <TD width=45%>SQL_DESC_ARRAY_STATUS_PTR</TD> -# <TD width=13%>APD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAM_STATUS_PTR</TD> -# <TD width=45%>SQL_DESC_ARRAY_STATUS_PTR</TD> -# <TD width=13%>IPD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAMS_PROCESSED_PTR</TD> -# <TD width=45%>SQL_DESC_ROWS_PROCESSED_PTR</TD> -# <TD width=13%>IPD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_PARAMSET_SIZE</TD> -# <TD width=45%>SQL_DESC_ARRAY_SIZE</TD> -# <TD width=13%>APD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROW_ARRAY_SIZE</TD> -# <TD width=45%>SQL_DESC_ARRAY_SIZE</TD> -# <TD width=13%>ARD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROW_BIND_OFFSET_PTR</TD> -# <TD width=45%>SQL_DESC_BIND_OFFSET_PTR</TD> -# <TD width=13%>ARD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROW_BIND_TYPE</TD> -# <TD width=45%>SQL_DESC_BIND_TYPE</TD> -# <TD width=13%>ARD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROW_OPERATION_PTR</TD> -# <TD width=45%>SQL_DESC_ARRAY_STATUS_PTR</TD> -# <TD width=13%>ARD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROW_STATUS_PTR</TD> -# <TD width=45%>SQL_DESC_ARRAY_STATUS_PTR</TD> -# <TD width=13%>IRD</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=42%>SQL_ATTR_ROWS_FETCHED_PTR</TD> -# <TD width=45%>SQL_DESC_ROWS_PROCESSED_PTR</TD> -# <TD width=13%>IRD</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <H1>Statement Attributes</H1> -# -# <P>The currently defined attributes and the version of ODBC in which they were introduced are shown in the following table; it is expected that more attributes will be defined by drivers to take advantage of different data sources. A range of attributes is reserved by ODBC; driver developers must reserve values for their own driver-specific use from X/Open. For more information, see "<A HREF="odbcdriver_specific_data_types__descriptor_types__information_types.htm">Driver-Specific Data Types, Descriptor Types, Information Types, Diagnostic Types, and Attributes</A>" in Chapter 17: Programming Considerations.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=38%>Attribute</TH> -# <TH width=62%><I>ValuePtr</I> contents</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_APP_PARAM_DESC<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>The handle to the APD for subsequent calls to <B>SQLExecute</B> and <B>SQLExecDirect</B> on the statement handle. The initial value of this attribute is the descriptor implicitly allocated when the statement was initially allocated. If the value of this attribute is set to SQL_NULL_DESC or the handle originally allocated for the descriptor, an explicitly allocated APD handle that was previously associated with the statement handle is dissociated from it and the statement handle reverts to the implicitly allocated APD handle. -# <P>This attribute cannot be set to a descriptor handle that was implicitly allocated for another statement or to another descriptor handle that was implicitly set on the same statement; implicitly allocated descriptor handles cannot be associated with more than one statement or descriptor handle.</P> -# </TD> -# </TR> - SQL_ATTR_APP_PARAM_DESC => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_APP_ROW_DESC<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>The handle to the ARD for subsequent fetches on the statement handle. The initial value of this attribute is the descriptor implicitly allocated when the statement was initially allocated. If the value of this attribute is set to SQL_NULL_DESC or the handle originally allocated for the descriptor, an explicitly allocated ARD handle that was previously associated with the statement handle is dissociated from it and the statement handle reverts to the implicitly allocated ARD handle. -# <P>This attribute cannot be set to a descriptor handle that was implicitly allocated for another statement or to another descriptor handle that was implicitly set on the same statement; implicitly allocated descriptor handles cannot be associated with more than one statement or descriptor handle.</P> -# </TD> -# </TR> - SQL_ATTR_APP_ROW_DESC => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ASYNC_ENABLE<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether a function called with the specified statement is executed asynchronously: -# <P>SQL_ASYNC_ENABLE_OFF = Off (the default)<BR> -# SQL_ASYNC_ENABLE_ON = On</P> -# -# <P>Once a function has been called asynchronously, only the original function, <B>SQLCancel</B>, <B>SQLGetDiagField</B>, or <B>SQLGetDiagRec</B> can be called on the statement, and only the original function, <B>SQLAllocHandle </B>(with a <I>HandleType</I> of SQL_HANDLE_STMT), <B>SQLGetDiagField</B>, <B>SQLGetDiagRec</B>, or <B>SQLGetFunctions</B> can be called on the connection associated with the statement, until the original function returns a code other than SQL_STILL_EXECUTING. Any other function called on the statement or the connection associated with the statement returns SQL_ERROR with an SQLSTATE of HY010 (Function sequence error). Functions can be called on other statements. For more information, see "<A HREF="odbcasynchronous_execution.htm">Asynchronous Execution</A>" in Chapter 9: Executing Statements.</P> -# -# <P>For drivers with statement level asynchronous execution support, the statement attribute SQL_ATTR_ASYNC_ENABLE may be set. Its initial value is the same as the value of the connection level attribute with the same name at the time the statement handle was allocated. </P> -# -# <P>For drivers with connection-level, asynchronous-execution support, the statement attribute SQL_ATTR_ASYNC_ENABLE is read-only. Its value is the same as the value of the connection level attribute with the same name at the time the statement handle was allocated. Calling <B>SQLSetStmtAttr</B> to set SQL_ATTR_ASYNC_ENABLE when the SQL_ASYNC_MODE <I>InfoType</I> returns SQL_AM_CONNECTION returns SQLSTATE HYC00 (Optional feature not implemented). (See <B>SQLSetConnectAttr</B> for more information.)</P> -# -# <P>As a standard practice, applications should execute functions asynchronously only on single-thread operating systems. On multithread operating systems, applications should execute functions on separate threads rather than executing them asynchronously on the same thread. No functionality is lost if drivers that operate only on multithread operating systems do not need to support asynchronous execution. </P> -# -# <P>The following functions can be executed asynchronously:</P> -# -# <P><B>SQLBulkOperations<BR> -# SQLColAttribute</B><BR> -# <B>SQLColumnPrivileges</B><BR> -# <B>SQLColumns</B><BR> -# <B>SQLCopyDesc</B><BR> -# <B>SQLDescribeCol</B><BR> -# <B>SQLDescribeParam</B><BR> -# <B>SQLExecDirect</B><BR> -# <B>SQLExecute</B><BR> -# <B>SQLFetch</B><BR> -# <B>SQLFetchScroll</B><BR> -# <B>SQLForeignKeys</B><BR> -# <B>SQLGetData</B><BR> -# <B>SQLGetDescField</B><SUP>[1]</SUP><BR> -# <B>SQLGetDescRec</B><SUP>[1]</SUP><B><BR> -# SQLGetDiagField</B><BR> -# <B>SQLGetDiagRec<BR> -# SQLGetTypeInfo</B><BR> -# <B>SQLMoreResults</B><BR> -# <B>SQLNumParams</B><BR> -# <B>SQLNumResultCols</B><BR> -# <B>SQLParamData</B><BR> -# <B>SQLPrepare</B><BR> -# <B>SQLPrimaryKeys</B><BR> -# <B>SQLProcedureColumns</B><BR> -# <B>SQLProcedures</B><BR> -# <B>SQLPutData</B><BR> -# <B>SQLSetPos</B><BR> -# <B>SQLSpecialColumns</B><BR> -# <B>SQLStatistics</B><BR> -# <B>SQLTablePrivileges</B><BR> -# <B>SQLTables</B></P> -# </TD> -# </TR> - SQL_ATTR_ASYNC_ENABLE => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CONCURRENCY<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the cursor concurrency: -# <P>SQL_CONCUR_READ_ONLY = Cursor is read-only. No updates are allowed.</P> -# -# <P>SQL_CONCUR_LOCK = Cursor uses the lowest level of locking sufficient to ensure that the row can be updated.</P> -# -# <P>SQL_CONCUR_ROWVER = Cursor uses optimistic concurrency control, comparing row versions such as SQLBase ROWID or Sybase TIMESTAMP.</P> -# -# <P>SQL_CONCUR_VALUES = Cursor uses optimistic concurrency control, comparing values.</P> -# -# <P>The default value for SQL_ATTR_CONCURRENCY is SQL_CONCUR_READ_ONLY.</P> -# -# <P>This attribute cannot be specified for an open cursor. For more information, see "<A HREF="odbcconcurrency_types.htm">Concurrency Types</A>" in Chapter 14: Transactions.</P> -# -# <P>If the SQL_ATTR_CURSOR_TYPE <I>Attribute</I> is changed to a type that does not support the current value of SQL_ATTR_CONCURRENCY, the value of SQL_ATTR_CONCURRENCY will be changed at execution time, and a warning issued when <B>SQLExecDirect</B> or <B>SQLPrepare</B> is called.</P> -# -# <P>If the driver supports the <B>SELECT FOR UPDATE</B> statement and such a statement is executed while the value of SQL_ATTR_CONCURRENCY is set to SQL_CONCUR_READ_ONLY, an error will be returned. If the value of SQL_ATTR_CONCURRENCY is changed to a value that the driver supports for some value of SQL_ATTR_CURSOR_TYPE but not for the current value of SQL_ATTR_CURSOR_TYPE, the value of SQL_ATTR_CURSOR_TYPE will be changed at execution time and SQLSTATE 01S02 (Option value changed) is issued when <B>SQLExecDirect</B> or <B>SQLPrepare</B> is called.</P> -# -# <P>If the specified concurrency is not supported by the data source, the driver substitutes a different concurrency and returns SQLSTATE 01S02 (Option value changed). For SQL_CONCUR_VALUES, the driver substitutes SQL_CONCUR_ROWVER, and vice versa. For SQL_CONCUR_LOCK, the driver substitutes, in order, SQL_CONCUR_ROWVER or SQL_CONCUR_VALUES. The validity of the substituted value is not checked until execution time.</P> -# -# <P>For more information about the relationship between SQL_ATTR_CONCURRENCY and the other cursor attributes, see "<A HREF="odbccursor_characteristics_and_cursor_type.htm">Cursor Characteristics and Cursor Type</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_ATTR_CONCURRENCY => { - type => q(SQLUINTEGER), - ptr => undef, - value => [ qw(SQL_CONCUR_READ_ONLY SQL_CONCUR_LOCK SQL_CONCUR_ROWVER SQL_CONCUR_ROWVER) ], - default => q(SQL_CONCUR_READ_ONLY), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CURSOR_SCROLLABLE<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the level of support that the application requires. Setting this attribute affects subsequent calls to <B>SQLExecDirect</B> and <B>SQLExecute</B>. -# <P>SQL_NONSCROLLABLE = Scrollable cursors are not required on the statement handle. If the application calls <B>SQLFetchScroll</B> on this handle, the only valid value of <I>FetchOrientation</I> is SQL_FETCH_NEXT. This is the default.</P> -# -# <P>SQL_SCROLLABLE = Scrollable cursors are required on the statement handle. When calling <B>SQLFetchScroll</B>, the application may specify any valid value of <I>FetchOrientation</I>, achieving cursor positioning in modes other than the sequential mode. </P> -# -# <P>For more information about scrollable cursors, see "<A HREF="odbcscrollable_cursors.htm">Scrollable Cursors</A>" in Chapter 11: Retrieving Results (Advanced). For more information about the relationship between SQL_ATTR_CURSOR_SCROLLABLE and the other cursor attributes, see "<A HREF="odbccursor_characteristics_and_cursor_type.htm">Cursor Characteristics and Cursor Type</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_ATTR_CURSOR_SCROLLABLE => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_NONSCROLLABLE SQL_SCROLLABLE) ], - default => q(SQL_NONSCROLLABLE), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CURSOR_SENSITIVITY<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether cursors on the statement handle make visible the changes made to a result set by another cursor. Setting this attribute affects subsequent calls to <B>SQLExecDirect</B> and <B>SQLExecute</B>. An application can read back the value of this attribute to obtain its initial state or its state as most recently set by the application. -# <P>SQL_UNSPECIFIED = It is unspecified what the cursor type is and whether cursors on the statement handle make visible the changes made to a result set by another cursor. Cursors on the statement handle may make visible none, some, or all such changes. This is the default.</P> -# -# <P>SQL_INSENSITIVE = All cursors on the statement handle show the result set without reflecting any changes made to it by any other cursor. Insensitive cursors are read-only. This corresponds to a static cursor, which has a concurrency that is read-only.</P> -# -# <P>SQL_SENSITIVE = All cursors on the statement handle make visible all changes made to a result set by another cursor. </P> -# -# <P>For more information about the relationship between SQL_ATTR_CURSOR_SENSITIVITY and the other cursor attributes, see "<A HREF="odbccursor_characteristics_and_cursor_type.htm">Cursor Characteristics and Cursor Type</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_ATTR_CURSOR_SENSITIVITY => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_UNSPECIFIED SQL_INSENSITIVE SQL_SENSITIVE) ], - default => q(SQL_UNSPECIFIED), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_CURSOR_TYPE<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the cursor type: -# <P>SQL_CURSOR_FORWARD_ONLY = The cursor only scrolls forward.</P> -# -# <P>SQL_CURSOR_STATIC = The data in the result set is static.</P> -# -# <P>SQL_CURSOR_KEYSET_DRIVEN = The driver saves and uses the keys for the number of rows specified in the SQL_ATTR_KEYSET_SIZE statement attribute.</P> -# -# <P>SQL_CURSOR_DYNAMIC = The driver saves and uses only the keys for the rows in the rowset.</P> -# -# <P>The default value is SQL_CURSOR_FORWARD_ONLY. This attribute cannot be specified after the SQL statement has been prepared.</P> -# -# <P>If the specified cursor type is not supported by the data source, the driver substitutes a different cursor type and returns SQLSTATE 01S02 (Option value changed). For a mixed or dynamic cursor, the driver substitutes, in order, a keyset-driven or static cursor. For a keyset-driven cursor, the driver substitutes a static cursor. </P> -# -# <P>For more information about scrollable cursor types, see "<A HREF="odbcscrollable_cursor_types.htm">Scrollable Cursor Types</A>" in Chapter 11: Retrieving Results (Advanced). For more information about the relationship between SQL_ATTR_CURSOR_TYPE and the other cursor attributes, see "<A HREF="odbccursor_characteristics_and_cursor_type.htm">Cursor Characteristics and Cursor Type</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_ATTR_CURSOR_TYPE => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_CURSOR_FORWARD_ONLY SQL_CURSOR_STATIC SQL_CURSOR_KEYSET_DRIVEN SQL_CURSOR_DYNAMIC) ], - default => q(SQL_CURSOR_FORWARD_ONLY), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ENABLE_AUTO_IPD<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether automatic population of the IPD is performed: -# <P>SQL_TRUE = Turns on automatic population of the IPD after a call to <B>SQLPrepare</B>. SQL_FALSE = Turns off automatic population of the IPD after a call to <B>SQLPrepare</B>. (An application can still obtain IPD field information by calling <B>SQLDescribeParam</B>, if supported.) The default value of the statement attribute SQL_ATTR_ENABLE_AUTO_IPD is SQL_FALSE. For more information, see "<A HREF="odbcautomatic_population_of_the_ipd.htm">Automatic Population of the IPD</A>" in Chapter 13: Descriptors.</P> -# </TD> -# </TR> - SQL_ATTR_ENABLE_AUTO_IPD => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_FALSE SQL_TRUE) ], - default => q(SQL_FALSE), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_FETCH_BOOKMARK_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>A pointer that points to a binary bookmark value. When <B>SQLFetchScroll</B> is called with <I>fFetchOrientation</I> equal to SQL_FETCH_BOOKMARK, the driver picks up the bookmark value from this field. This field defaults to a null pointer. For more information, see "<A HREF="odbcscrolling_by_bookmark.htm">Scrolling by Bookmark</A>" in Chapter 11: Retrieving Results (Advanced). -# <P>The value pointed to by this field is not used for delete by bookmark, update by bookmark, or fetch by bookmark operations in <B>SQLBulkOperations</B>, which use bookmarks cached in rowset buffers.</P> -# </TD> -# </TR> - SQL_ATTR_FETCH_BOOKMARK_PTR => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_IMP_PARAM_DESC<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>The handle to the IPD. The value of this attribute is the descriptor allocated when the statement was initially allocated. The application cannot set this attribute. -# <P>This attribute can be retrieved by a call to <B>SQLGetStmtAttr</B> but not set by a call to <B>SQLSetStmtAttr</B>.</P> -# </TD> -# </TR> - SQL_ATTR_IMP_PARAM_DESC => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'ro', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_IMP_ROW_DESC<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>The handle to the IRD. The value of this attribute is the descriptor allocated when the statement was initially allocated. The application cannot set this attribute. -# <P>This attribute can be retrieved by a call to <B>SQLGetStmtAttr</B> but not set by a call to <B>SQLSetStmtAttr</B>.</P> -# </TD> -# </TR> - SQL_ATTR_IMP_ROW_DESC => { - type => q(SQLPOINTER), - ptr => undef, - value => undef, - default => undef, - mode => 'ro', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_KEYSET_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER that specifies the number of rows in the keyset for a keyset-driven cursor. If the keyset size is 0 (the default), the cursor is fully keyset-driven. If the keyset size is greater than 0, the cursor is mixed (keyset-driven within the keyset and dynamic outside of the keyset). The default keyset size is 0. For more information about keyset-driven cursors, see "<A HREF="odbckeyset_driven_cursors.htm">Keyset-Driven Cursors</A>" in Chapter 11: Retrieving Results (Advanced). -# <P>If the specified size exceeds the maximum keyset size, the driver substitutes that size and returns SQLSTATE 01S02 (Option value changed).</P> -# -# <P><B>SQLFetch</B> or <B>SQLFetchScroll</B> returns an error if the keyset size is greater than 0 and less than the rowset size.</P> -# </TD> -# </TR> - SQL_ATTR_KEYSET_SIZE => { - type => q(SQLUINTEGER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_MAX_LENGTH<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the maximum amount of data that the driver returns from a character or binary column. If <I>ValuePtr</I> is less than the length of the available data, <B>SQLFetch</B> or <B>SQLGetData</B> truncates the data and returns SQL_SUCCESS. If <I>ValuePtr</I> is 0 (the default), the driver attempts to return all available data. -# <P>If the specified length is less than the minimum amount of data that the data source can return or greater than the maximum amount of data that the data source can return, the driver substitutes that value and returns SQLSTATE 01S02 (Option value changed).</P> -# -# <P>The value of this attribute can be set on an open cursor; however, the setting might not take effect immediately, in which case the driver will return SQLSTATE 01S02 (Option value changed) and reset the attribute to its original value.</P> -# -# <P>This attribute is intended to reduce network traffic and should be supported only when the data source (as opposed to the driver) in a multiple-tier driver can implement it. This mechanism should not be used by applications to truncate data; to truncate data received, an application should specify the maximum buffer length in the <I>BufferLength </I>argument in <B>SQLBindCol</B> or <B>SQLGetData</B>.</P> -# </TD> -# </TR> - SQL_ATTR_MAX_LENGTH => { - type => q(SQLUINTEGER), - ptr => undef, - value => undef, - default => 0, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_MAX_ROWS<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value corresponding to the maximum number of rows to return to the application for a <B>SELECT</B> statement. If *<I>ValuePtr</I> equals 0 (the default), the driver returns all rows. -# <P>This attribute is intended to reduce network traffic. Conceptually, it is applied when the result set is created and limits the result set to the first <I>ValuePtr</I> rows. If the number of rows in the result set is greater than <I>ValuePtr</I>, the result set is truncated. </P> -# -# <P>SQL_ATTR_MAX_ROWS applies to all result sets on the <I>Statement</I>, including those returned by catalog functions. SQL_ATTR_MAX_ROWS establishes a maximum for the value of the cursor row count.</P> -# -# <P>A driver should not emulate SQL_ATTR_MAX_ROWS behavior for <B>SQLFetch</B> or <B>SQLFetchScroll</B> (if result set size limitations cannot be implemented at the data source) if it cannot guarantee that SQL_ATTR_MAX_ROWS will be implemented properly.</P> -# -# <P>It is driver-defined whether SQL_ATTR_MAX_ROWS applies to statements other than SELECT statements (such as catalog functions). </P> -# -# <P>The value of this attribute can be set on an open cursor; however, the setting might not take effect immediately, in which case the driver will return SQLSTATE 01S02 (Option value changed) and reset the attribute to its original value.</P> -# </TD> -# </TR> - SQL_ATTR_MAX_ROWS => { - type => q(SQLUINTEGER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_METADATA_ID<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that determines how the string arguments of catalog functions are treated. -# <P>If SQL_TRUE, the string argument of catalog functions are treated as identifiers. The case is not significant. For nondelimited strings, the driver removes any trailing spaces and the string is folded to uppercase. For delimited strings, the driver removes any leading or trailing spaces and takes whatever is between the delimiters literally. If one of these arguments is set to a null pointer, the function returns SQL_ERROR and SQLSTATE HY009 (Invalid use of null pointer). </P> -# -# <P>If SQL_FALSE, the string arguments of catalog functions are not treated as identifiers. The case is significant. They can either contain a string search pattern or not, depending on the argument.</P> -# -# <P>The default value is SQL_FALSE.</P> -# -# <P>The <I>TableType</I> argument of <B>SQLTables</B>, which takes a list of values, is not affected by this attribute.</P> -# -# <P>SQL_ATTR_METADATA_ID can also be set on the connection level. (It and SQL_ATTR_ASYNC_ENABLE are the only statement attributes that are also connection attributes.)</P> -# -# <P>For more information, see "<A HREF="odbcarguments_in_catalog_functions.htm">Arguments in Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# </TD> -# </TR> - SQL_ATTR_METADATA_ID => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_FALSE SQL_TRUE) ], - default => q(SQL_FALSE), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_NOSCAN<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value that indicates whether the driver should scan SQL strings for escape sequences: -# <P>SQL_NOSCAN_OFF = The driver scans SQL strings for escape sequences (the default).</P> -# -# <P>SQL_NOSCAN_ON = The driver does not scan SQL strings for escape sequences. Instead, the driver sends the statement directly to the data source.</P> -# -# <P>For more information, see "<A HREF="odbcescape_sequences_in_odbc.htm">Escape Sequences in ODBC</A>" in Chapter 8: SQL Statements.</P> -# </TD> -# </TR> - SQL_ATTR_NOSCAN => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_NOSCAN_OFF SQL_NOSCAN_ON) ], - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAM_BIND_OFFSET_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER * value that points to an offset added to pointers to change binding of dynamic parameters. If this field is non-null, the driver dereferences the pointer, adds the dereferenced value to each of the deferred fields in the descriptor record (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR), and uses the new pointer values when binding. It is set to null by default. -# <P>The bind offset is always added directly to the SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR fields. If the offset is changed to a different value, the new value is still added directly to the value in the descriptor field. The new offset is not added to the field value plus any earlier offsets.</P> -# </TD> -# </TR> - SQL_ATTR_PARAM_BIND_OFFSET_PTR => { - type => q(SQLUINTEGER), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAM_BIND_OFFSET_PTR<BR> -# (ODBC 3.0) (<I>continued</I>)</TD> -# <TD width=62%>For more information, see "<A HREF="odbcparameter_binding_offsets.htm">Parameter Binding Offsets</A>" in Chapter 9: Executing Statements. -# <P>Setting this statement attribute sets the SQL_DESC_BIND_OFFSET_PTR field in the APD header.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAM_BIND_TYPE<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that indicates the binding orientation to be used for dynamic parameters. -# <P>This field is set to SQL_PARAM_BIND_BY_COLUMN (the default) to select column-wise binding. </P> -# -# <P>To select row-wise binding, this field is set to the length of the structure or an instance of a buffer that will be bound to a set of dynamic parameters. This length must include space for all of the bound parameters and any padding of the structure or buffer to ensure that when the address of a bound parameter is incremented with the specified length, the result will point to the beginning of the same parameter in the next set of parameters. When using the <I>sizeof</I> operator in ANSI C, this behavior is guaranteed.</P> -# -# <P>For more information, see "<A HREF="odbcbinding_arrays_of_parameters.htm">Binding Arrays of Parameters</A>" in Chapter 9: Executing Statements.</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ BIND_TYPE field in the APD header.</P> -# </TD> -# </TR> - SQL_ATTR_PARAM_BIND_TYPE => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAM_OPERATION_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUSMALLINT * value that points to an array of SQLUSMALLINT values used to ignore a parameter during execution of an SQL statement. Each value is set to either SQL_PARAM_PROCEED (for the parameter to be executed) or SQL_PARAM_IGNORE (for the parameter to be ignored). -# <P>A set of parameters can be ignored during processing by setting the status value in the array pointed to by SQL_DESC_ARRAY_STATUS_PTR in the APD to SQL_PARAM_IGNORE. A set of parameters is processed if its status value is set to SQL_PARAM_PROCEED or if no elements in the array are set.</P> -# -# <P>This statement attribute can be set to a null pointer, in which case the driver does not return parameter status values. This attribute can be set at any time, but the new value is not used until the next time <B>SQLExecDirect</B> or <B>SQLExecute</B> is called.</P> -# -# <P>For more information, see "<A HREF="odbcusing_arrays_of_parameters.htm">Using Arrays of Parameters</A>" in Chapter 9: Executing Statements.</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_STATUS_PTR field in the APD header.</P> -# </TD> -# </TR> - SQL_ATTR_PARAM_OPERATION_PTR => { - type => q(SQLUSMALLINT), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAM_STATUS_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUSMALLINT * value that points to an array of SQLUSMALLINT values containing status information for each row of parameter values after a call to <B>SQLExecute</B> or <B>SQLExecDirect</B>. This field is required only if PARAMSET_SIZE is greater than 1. -# <P>The status values can contain the following values:</P> -# -# <P>SQL_PARAM_SUCCESS: The SQL statement was successfully executed for this set of parameters.</P> -# -# <P>SQL_PARAM_SUCCESS_WITH_INFO: The SQL statement was successfully executed for this set of parameters; however, warning information is available in the diagnostics data structure.</P> -# -# <P>SQL_PARAM_ERROR: There was an error in processing this set of parameters. Additional error information is available in the diagnostics data structure.</P> -# -# <P>SQL_PARAM_UNUSED: This parameter set was unused, possibly due to the fact that some previous parameter set caused an error that aborted further processing, or because SQL_PARAM_IGNORE was set for that set of parameters in the array specified by the SQL_ATTR_PARAM_OPERATION_PTR.</P> -# -# <P>SQL_PARAM_DIAG_UNAVAILABLE: The driver treats arrays of parameters as a monolithic unit and so does not generate this level of error information. </P> -# -# <P>This statement attribute can be set to a null pointer, in which case the driver does not return parameter status values. This attribute can be set at any time, but the new value is not used until the next time <B>SQLExecute</B> or <B>SQLExecDirect</B> is called. Note that setting this attribute can affect the output parameter behavior implemented by the driver.</P> -# -# <P>For more information, see "<A HREF="odbcusing_arrays_of_parameters.htm">Using Arrays of Parameters</A>" in Chapter 9: Executing Statements.</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_STATUS_PTR field in the IPD header.</P> -# </TD> -# </TR> - SQL_ATTR_PARAM_STATUS_PTR => { - type => q(SQLUSMALLINT), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAMS_PROCESSED_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER * record field that points to a buffer in which to return the number of sets of parameters that have been processed, including error sets. No number will be returned if this is a null pointer. -# <P>Setting this statement attribute sets the SQL_DESC_ROWS_PROCESSED_PTR field in the IPD header.</P> -# -# <P>If the call to <B>SQLExecDirect</B> or <B>SQLExecute</B> that fills in the buffer pointed to by this attribute does not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined.</P> -# -# <P>For more information, see "<A HREF="odbcusing_arrays_of_parameters.htm">Using Arrays of Parameters</A>" in Chapter 9: Executing Statements.</P> -# </TD> -# </TR> - SQL_ATTR_PARAMS_PROCESSED_PTR => { - type => q(SQLUINTEGER), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_PARAMSET_SIZE<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the number of values for each parameter. If SQL_ATTR_PARAMSET_SIZE is greater than 1, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR of the APD point to arrays. The cardinality of each array is equal to the value of this field. -# <P>For more information, see "<A HREF="odbcusing_arrays_of_parameters.htm">Using Arrays of Parameters</A>" in Chapter 9: Executing Statements.</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_SIZE field in the APD header.</P> -# </TD> -# </TR> - SQL_ATTR_PARAMSET_SIZE => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_QUERY_TIMEOUT<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value corresponding to the number of seconds to wait for an SQL statement to execute before returning to the application. If <I>ValuePtr</I> is equal to 0 (default), there is no timeout. -# <P>If the specified timeout exceeds the maximum timeout in the data source or is smaller than the minimum timeout, <B>SQLSetStmtAttr</B> substitutes that value and returns SQLSTATE 01S02 (Option value changed).</P> -# -# <P>Note that the application need not call <B>SQLCloseCursor</B> to reuse the statement if a <B>SELECT</B> statement timed out.</P> -# -# <P>The query timeout set in this statement attribute is valid in both synchronous and asynchronous modes.</P> -# </TD> -# </TR> - SQL_ATTR_QUERY_TIMEOUT => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_RETRIEVE_DATA<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value: -# <P>SQL_RD_ON = <B>SQLFetchScroll</B> and, in ODBC 3<I>.x</I>, <B>SQLFetch</B> retrieve data after it positions the cursor to the specified location. This is the default.</P> -# -# <P>SQL_RD_OFF = <B>SQLFetchScroll</B> and, in ODBC 3<I>.x</I>, <B>SQLFetch</B> do not retrieve data after it positions the cursor.</P> -# -# <P>By setting SQL_RETRIEVE_DATA to SQL_RD_OFF, an application can verify that a row exists or retrieve a bookmark for the row without incurring the overhead of retrieving rows. For more information, see "<A HREF="odbcscrolling_and_fetching_rows.htm">Scrolling and Fetching Rows</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P>The value of this attribute can be set on an open cursor; however, the setting might not take effect immediately, in which case the driver will return SQLSTATE 01S02 (Option value changed) and reset the attribute to its original value.</P> -# </TD> -# </TR> - SQL_ATTR_RETRIEVE_DATA => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_RD_ON SQL_RD_OFF) ], - default => q(SQL_RD_ON), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_ARRAY_SIZE<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies the number of rows returned by each call to <B>SQLFetch</B> or <B>SQLFetchScroll</B>. It is also the number of rows in a bookmark array used in a bulk bookmark operation in <B>SQLBulkOperations</B>. The default value is 1. -# <P>If the specified rowset size exceeds the maximum rowset size supported by the data source, the driver substitutes that value and returns SQLSTATE 01S02 (Option value changed).</P> -# -# <P>For more information, see "<A HREF="odbcrowset_size.htm">Rowset Size</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_SIZE field in the ARD header.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_ARRAY_SIZE => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_BIND_OFFSET_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER * value that points to an offset added to pointers to change binding of column data. If this field is non-null, the driver dereferences the pointer, adds the dereferenced value to each of the deferred fields in the descriptor record (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, and SQL_DESC_OCTET_LENGTH_PTR), and uses the new pointer values when binding. It is set to null by default. -# <P>Setting this statement attribute sets the SQL_DESC_BIND_OFFSET_PTR field in the ARD header.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_BIND_OFFSET_PTR => { - type => q(SQLUINTEGER), - ptr => undef, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_BIND_TYPE<BR> -# (ODBC 1.0)</TD> -# <TD width=62%>An SQLUINTEGER value that sets the binding orientation to be used when <B>SQLFetch</B> or <B>SQLFetchScroll</B> is called on the associated statement. Column-wise binding is selected by setting the value to SQL_BIND_BY_COLUMN. Row-wise binding is selected by setting the value to the length of a structure or an instance of a buffer into which result columns will be bound. -# <P>If a length is specified, it must include space for all of the bound columns and any padding of the structure or buffer to ensure that when the address of a bound column is incremented with the specified length, the result will point to the beginning of the same column in the next row. When using the <B>sizeof</B> operator with structures or unions in ANSI C, this behavior is guaranteed.</P> -# -# <P>Column-wise binding is the default binding orientation for <B>SQLFetch</B> and <B>SQLFetchScroll</B>.</P> -# -# <P>For more information, see "<A HREF="odbcbinding_columns_for_use_with_block_cursors.htm">Binding Columns for Use with Block Cursors</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_BIND_TYPE field in the ARD header.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_BIND_TYPE => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_BIND_BY_COLUMN etc) ], - default => q(SQL_BIND_BY_COLUMN), - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_NUMBER<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value that is the number of the current row in the entire result set. If the number of the current row cannot be determined or there is no current row, the driver returns 0. -# <P>This attribute can be retrieved by a call to <B>SQLGetStmtAttr</B> but not set by a call to <B>SQLSetStmtAttr</B>.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_NUMBER => { - type => q(SQLUINTEGER), - ptr => 0, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_OPERATION_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUSMALLINT * value that points to an array of SQLUSMALLINT values used to ignore a row during a bulk operation using <B>SQLSetPos</B>. Each value is set to either SQL_ROW_PROCEED (for the row to be included in the bulk operation) or SQL_ROW_IGNORE (for the row to be excluded from the bulk operation). (Rows cannot be ignored by using this array during calls to <B>SQLBulkOperations</B>.) -# <P>This statement attribute can be set to a null pointer, in which case the driver does not return row status values. This attribute can be set at any time, but the new value is not used until the next time <B>SQLSetPos</B> is called.</P> -# -# <P>For more information, see "<A HREF="odbcupdating_rows_in_the_rowset_with_sqlsetpos.htm">Updating Rows in the Rowset with SQLSetPos</A>" and "<A HREF="odbcdeleting_rows_in_the_rowset_with_sqlsetpos.htm">Deleting Rows in the Rowset with SQLSetPos</A>" in Chapter 12: Updating Data.</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_STATUS_PTR field in the ARD.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_OPERATION_PTR => { - type => q(SQLUSMALLINT), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROW_STATUS_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUSMALLINT * value that points to an array of SQLUSMALLINT values containing row status values after a call to <B>SQLFetch</B> or <B>SQLFetchScroll</B>. The array has as many elements as there are rows in the rowset. -# <P>This statement attribute can be set to a null pointer, in which case the driver does not return row status values. This attribute can be set at any time, but the new value is not used until the next time <B>SQLBulkOperations</B>, <B>SQLFetch</B>, <B>SQLFetchScroll</B>, or <B>SQLSetPos</B> is called.</P> -# -# <P>For more information, see "<A HREF="odbcnumber_of_rows_fetched_and_status.htm">Number of Rows Fetched and Status</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ARRAY_STATUS_PTR field in the IRD header.</P> -# -# <P>This attribute is mapped by an ODBC 2<I>.x</I> driver to the <I>rgbRowStatus</I> array in a call to <B>SQLExtendedFetch</B>.</P> -# </TD> -# </TR> - SQL_ATTR_ROW_STATUS_PTR => { - type => q(SQLUSMALLINT), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_ROWS_FETCHED_PTR<BR> -# (ODBC 3.0)</TD> -# <TD width=62%>An SQLUINTEGER * value that points to a buffer in which to return the number of rows fetched after a call to <B>SQLFetch</B> or <B>SQLFetchScroll</B>; the number of rows affected by a bulk operation performed by a call to <B>SQLSetPos</B> with an <I>Operation</I> argument of SQL_REFRESH; or the number of rows affected by a bulk operation performed by <B>SQLBulkOperations</B>. This number includes error rows. -# <P>For more information, see "<A HREF="odbcnumber_of_rows_fetched_and_status.htm">Number of Rows Fetched and Status</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P>Setting this statement attribute sets the SQL_DESC_ROWS_PROCESSED_PTR field in the IRD header. </P> -# -# <P>If the call to <B>SQLFetch</B> or <B>SQLFetchScroll</B> that fills in the buffer pointed to by this attribute does not return SQL_SUCCESS or SQL_SUCCESS_WITH_INFO, the contents of the buffer are undefined.</P> -# </TD> -# </TR> - SQL_ATTR_ROWS_FETCHED_PTR => { - type => q(SQLUINTEGER), - ptr => 1, - value => undef, - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_SIMULATE_CURSOR<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether drivers that simulate positioned update and delete statements guarantee that such statements affect only one single row. -# <P>To simulate positioned update and delete statements, most drivers construct a searched <B>UPDATE</B> or <B>DELETE</B> statement containing a <B>WHERE</B> clause that specifies the value of each column in the current row. Unless these columns make up a unique key, such a statement can affect more than one row.</P> -# -# <P>To guarantee that such statements affect only one row, the driver determines the columns in a unique key and adds these columns to the result set. If an application guarantees that the columns in the result set make up a unique key, the driver is not required to do so. This may reduce execution time.</P> -# -# <P>SQL_SC_NON_UNIQUE = The driver does not guarantee that simulated positioned update or delete statements will affect only one row; it is the application's responsibility to do so. If a statement affects more than one row, <B>SQLExecute</B>, <B>SQLExecDirect</B>, or <B>SQLSetPos</B> returns SQLSTATE 01001 (Cursor operation conflict).</P> -# -# <P>SQL_SC_TRY_UNIQUE = The driver attempts to guarantee that simulated positioned update or delete statements affect only one row. The driver always executes such statements, even if they might affect more than one row, such as when there is no unique key. If a statement affects more than one row, <B>SQLExecute</B>, <B>SQLExecDirect</B>, or <B>SQLSetPos</B> returns SQLSTATE 01001 (Cursor operation conflict).</P> -# -# <P>SQL_SC_UNIQUE = The driver guarantees that simulated positioned update or delete statements affect only one row. If the driver cannot guarantee this for a given statement, <B>SQLExecDirect</B> or <B>SQLPrepare</B> returns an error.</P> -# -# <P>If the data source provides native SQL support for positioned update and delete statements and the driver does not simulate cursors, SQL_SUCCESS is returned when SQL_SC_UNIQUE is requested for SQL_SIMULATE_CURSOR. SQL_SUCCESS_WITH_INFO is returned if SQL_SC_TRY_UNIQUE or SQL_SC_NON_UNIQUE is requested. If the data source provides the SQL_SC_TRY_UNIQUE level of support and the driver does not, SQL_SUCCESS is returned for SQL_SC_TRY_UNIQUE and SQL_SUCCESS_WITH_INFO is returned for SQL_SC_NON_UNIQUE.</P> -# -# <P>If the specified cursor simulation type is not supported by the data source, the driver substitutes a different simulation type and returns SQLSTATE 01S02 (Option value changed). For SQL_SC_UNIQUE, the driver substitutes, in order, SQL_SC_TRY_UNIQUE or SQL_SC_NON_UNIQUE. For SQL_SC_TRY_UNIQUE, the driver substitutes SQL_SC_NON_UNIQUE.</P> -# -# <P>For more information, see "<A HREF="odbcsimulating_positioned_update_and_delete_statements.htm">Simulating Positioned Update and Delete Statements</A>" in Chapter 12: Updating Data.</P> -# </TD> -# </TR> - SQL_ATTR_SIMULATE_CURSOR => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_SC_NON_UNIQUE SQL_SC_TRY_UNIQUE SQL_SC_UNIQUE) ], - default => undef, - mode => 'rw', - order => ++$order, - }, -# -# <TR VALIGN="top"> -# <TD width=38%>SQL_ATTR_USE_BOOKMARKS<BR> -# (ODBC 2.0)</TD> -# <TD width=62%>An SQLUINTEGER value that specifies whether an application will use bookmarks with a cursor: -# <P>SQL_UB_OFF = Off (the default)</P> -# -# <P>SQL_UB_VARIABLE = An application will use bookmarks with a cursor, and the driver will provide variable-length bookmarks if they are supported. SQL_UB_FIXED is deprecated in ODBC 3<I>.x</I>. ODBC 3<I>.x</I> applications should always use variable-length bookmarks, even when working with ODBC 2<I>.x</I> drivers (which supported only 4-byte, fixed-length bookmarks). This is because a fixed-length bookmark is just a special case of a variable-length bookmark. When working with an ODBC 2<I>.x</I> driver, the Driver Manager maps SQL_UB_VARIABLE to SQL_UB_FIXED.</P> -# -# <P>To use bookmarks with a cursor, the application must specify this attribute with the SQL_UB_VARIABLE value before opening the cursor.</P> -# -# <P>For more information, see "<A HREF="odbcretrieving_bookmarks.htm">Retrieving Bookmarks</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# </TD> -# </TR> - SQL_ATTR_USE_BOOKMARKS => { - type => q(SQLUINTEGER), - ptr => 0, - value => [ qw(SQL_UB_OFF SQL_UB_VARIABLE SQL_UB_FIXED) ], - default => undef, - mode => 'rw', - order => ++$order, - }, -# </table></div> -# -# <P class="fineprint">[1] These functions can be called asynchronously only if the descriptor is an implementation descriptor, not an application descriptor.</p> -# <P>See "<A HREF="odbccolumn_wise_binding.htm">Column-Wise Binding</A>" and "<A HREF="odbcrow_wise_binding.htm">Row-Wise Binding</A>" in Chapter 11: Retrieving Results (Advanced).</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=47%>For information about</TH> -# <TH width=53%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=47%>Canceling statement processing</TD> -# <TD width=53%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=47%>Returning the setting of a connection attribute</TD> -# <TD width=53%><A HREF="odbcsqlgetconnectattr.htm">SQLGetConnectAttr</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=47%>Returning the setting of a statement attribute</TD> -# <TD width=53%><A HREF="odbcsqlgetstmtattr.htm">SQLGetStmtAttr</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=47%>Setting a connection attribute</TD> -# <TD width=53%><A HREF="odbcsqlsetconnectattr.htm">SQLSetConnectAttr</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=47%>Setting a single field of the descriptor</TD> -# <TD width=53%><A HREF="odbcsqlsetdescfield.htm">SQLSetDescField</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -}; - -my $i3 = " " x 3; -my $i4 = " " x 4; -my $i8 = " " x 8; - -my $type2type = { - SQLSMALLINT => 'Smallint', - SQLUSMALLINT => 'Usmallint', - SQLINTEGER => 'Integer', - SQLUINTEGER => 'Uinteger', - SQLPOINTER => 'Pointer', - SQLCHAR => 'Sqlchar', -}; - -my $attr = - $type eq 'Env' ? $attrEnv : - $type eq 'Dbc' ? $attrDbc : - $type eq 'Stmt' ? $attrStmt : die "bad type $type"; - -my @name = sort { - $attr->{$a}{order} <=> $attr->{$b}{order} -} keys %$attr; - -print "#include \"Handle$type.hpp\"\n"; -my $class = "OdbcData"; - -for my $name (@name) { - my $p = $attr->{$name}; - my $odbctype = $type2type->{$p->{type}} or die $name; - $odbctype .= "Ptr" if $p->{ptr}; - print "\nstatic void\n"; - print "callback_${name}_set(Ctx& ctx, HandleBase* self, const $class& data)\n"; - print "{\n"; - print "${i4}Handle$type* p$type = dynamic_cast<Handle$type*>(self);\n"; - print "${i4}assert(p$type != 0 && data.type() == ${class}::$odbctype);\n"; - print "}\n"; - print "\nstatic void\n"; - print "callback_${name}_default(Ctx& ctx, HandleBase* self, $class& data)\n"; - print "{\n"; - print "${i4}Handle$type* p$type = dynamic_cast<Handle$type*>(self);\n"; - print "${i4}assert(p$type != 0);\n"; - print "${i4}data.set();\n"; - print "}\n"; -} - -print "\nAttrSpec Handle${type}::m_attrSpec\[\] = {\n"; -for my $name (@name) { - my $p = $attr->{$name}; - my $odbctype = $type2type->{$p->{type}} or die $name; - $odbctype .= "Ptr" if $p->{ptr}; - print "${i4}\{${i3}$name,\n"; - print "${i8}${class}::$odbctype,\n"; - my $attrmode = - $p->{mode} eq 'rw' ? 'Attr_mode_readwrite' : - $p->{mode} eq 'ro' ? 'Attr_mode_readonly' : die "bad mode $p->{mode}"; - print "${i8}$attrmode,\n"; - print "${i8}callback_${name}_set,\n"; - print "${i8}callback_${name}_default,\n"; - print "${i4}\},\n"; -} -print "${i4}\{${i3}0,\n"; -print "${i8}${class}::Undef,\n"; -print "${i8}Attr_mode_undef,\n"; -print "${i8}0,\n"; -print "${i8}0,\n"; -print "${i4}\},\n"; - -print "};\n"; diff --git a/storage/ndb/src/old_files/client/odbc/docs/main.hpp b/storage/ndb/src/old_files/client/odbc/docs/main.hpp deleted file mode 100644 index ebb5b1f235a30db54ecf3e2e66c9264c37ab330f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/main.hpp +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @mainpage NDB ODBC - - The ODBC Driver Frontend has: - -# HandleBase : Various ODBC handles - -# AttrArea : Attributes of handles - -# ConnArea : Communication area on connection level between driver parts - -# StmtArea : Communication area on statement level between driver parts - - and controls the following steps: - -# SQL_compiler : Compiles SQL into SQL_code_tree:s - -# Parser : Bison grammar - -# Analyzer : Syntactic and semantic checks (binds names) - -# PlanGen : Generate initial (execution) plan (PlanTree) - -# CodeGen : Generates CodeTree:s out of PlanTree:s - -# Optimizer : Optimizes PlanTree:s - -# Output : Outputs executable CodeTree:s - -# Executor : Executes CodeTree:s - -# CodeTree::allocRun : Allocates runtime data structures (RunTree:s) - -# Dataflow machine : Executes and evaluates statement and expressions - - The Dataflow machine works in four different ways: - -# Non-query statements - -# CodeStmt::execute : Executes (non-query) statement - -# Query statements - -# CodeQuery::execute : Execute Query statement - -# CodeQuery::fetch : Fetch row from CodeQuery node - -# Boolean expressions - -# CodePred::evaluate : Evaluates boolean expression - -# Arithmetical expressions - -# CodeExpr::evaluate : Evaluates arithmetic expression - - The following components are used throughout the NDB ODBC: - -# Context (Ctx) : Info regarding execution/evaluation - -# Diagnostic area (DiagArea) : Errors and warnings (for ODBC user) - -# DescArea : Description of ODBC user input/output bind varibles/columns - -# Dictionary (DictBase) : Lookup info stored in NDB Dictionary - and info regarding temporary - materialized results - -# ResultArea : Execution (temporary) results - - - @section secCompiler SQL_compiler : SQL to SQL_code_tree - - The SQL_compiler takes an <em>SQL statement</em> and translates - it into an SQL_code_tree. The compiler uses an SQL_code_tree - internally during the compilation and the result of the compilation - is a simlified SQL_code_tree. - - The compiler works in the following steps: - -# Parse SQL statments and create SQL_code_tree representing the - statement. - -# Apply Syntax Rules to the SQL_code_tree. Syntax rules are - rules which are <em>not</em> expressed in the SQL grammar, - but are expressed in natural language in the SQL specification. - -# Apply Access Rules to the SQL_code_tree - (this is not implemented, since NDB Cluster has no access control) - -# Apply General Rules to the SQL_code_tree - -# Apply Conformance Rules to the SQL_code_tree - - The resulting simplified SQL_code_tree is represented by a - tree of C++ objects. - - - @section secCodegen Codegen : SQL_code_tree to CodeTree - - CodeGen takes simplified SQL_code_tree:s and transforms them into - CodeTree:s. - - - @section secOptimizer Optimizer : CodeTree to CodeTree - - The implementation of the ODBC optimizer will uses the - PlanTree:s to represent statements and transforms them - into executable format (still PlanTree format). - - @note In the future, more optimizations can be implemented. - - - @section secExecutor Executor : Execute CodeTree - - The Executor uses the following data structures: - -# CodeTree : A read-only quary evaluation plan - -# RunTree : Runtime data structures containing ResultSet:s - - The execution mechanism is actually implemented as a - part of the CodeTree. -*/ diff --git a/storage/ndb/src/old_files/client/odbc/docs/ndbodbc.html b/storage/ndb/src/old_files/client/odbc/docs/ndbodbc.html deleted file mode 100644 index 6be624dfa1bc11f7482d789fd86610884e961ecb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/ndbodbc.html +++ /dev/null @@ -1,659 +0,0 @@ -<HTML> -<HEAD> -<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> -<TITLE>ODBC and SQL</TITLE> -</HEAD> -<BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff"> - -<h2>ODBC and SQL - NDB Cluster v2.11</h2> - -<p> -NDB Cluster v2.11 includes a version of ODBC and SQL. -<p> -This document has 4 sections. -<ol> -<li>PLATFORMS -<li>ODBC -<li>SQL -<li>DIAGNOSTICS -</ol> -<p> -Features which are currently incomplete or planned for next release -are marked with <b>v2.x</b>. - -<h3>1. PLATFORMS</h3> - -<h4>1.1 Linux / Unix</h4> -<p> -We use RedHat package names to describe supporting software. -Packages starting with <b>perl-</b> are perl modules. -If your installation does not include them you can get them -from a CPAN archive ( <tt><b>ftp://ftp.funet.fi/pub/languages/perl/CPAN</b></tt> ). -<p> -Version numbers are given only as examples. -Other versions will work. -<p> -An ODBC driver manager is required, one of: -<ul> -<li>unixODBC-2.2.3 (this is more common) -<li>libiodbc-3.0.5 -</ul> -<p> -Additional packages are convenient. -Following include perl scripting interface -and an "interactive SQL" tool <b>dbish</b>: -<ul> -<li>perl-DBI-1.30 -<li>perl-DBD-ODBC-0.43 -<li>readline-4.2 -<li>perl-Term-ReadLine-Gnu-1.11 -</ul> -<p> -The NDB ODBC driver is located under NDB Cluster installation -directory and is named <tt><b>libNDB_ODBC.so</b></tt>. -It includes NDB API. -To use it create a text file -<tt><b>/etc/odbc.ini</b></tt> or <tt><b>$HOME/.odbc.ini</b></tt> -containing at least: -<p> -<tt> -<b> -[ndb] -<br> -Driver = <path-to-your-NDB-installation>/lib/libNDB_ODBC.so -</b> -</tt> -<p> -Then try the shell command <tt><b>dbish dbi:ODBC:ndb</b></tt> -in an NDB API node directory. - -<h4>1.2 Windows</h4> - -[ TODO - documentation ] - -<h3>2. ODBC</h3> - -<h4>2.1 External data types</h4> - -Usual external data types are supported and converted to and from SQL -data types. -<p> -<table width="80%" border=1> -<tr align="left"><th width="40%">type</th> <th>description</th></tr> -<tr align="left"><td>SQL_C_CHAR</td><td>character buffers</tr> -<tr align="left"><td>SQL_C_SLONG, etc</td><td>integer types</tr> -<tr align="left"><td>SQL_C_DOUBLE, etc</td><td>floating types</tr> -<tr align="left"><td>SQL_C_TYPE_TIMESTAMP</td><td>timestamp</tr> -</table> - -<h4>2.2 ODBC functions</h4> -<p> -The driver implements basic ODBC functions. -Main exceptions are: -<ul> -<li>no named cursors -<li>no scrollable cursors -<li>no bulk operations -<li>no asynchronous execution -</ul> -<p> -Following lists main ODBC 3.0 functions and -their status in the driver. -<p> -<table width="80%" border=1> -<tr align="left"><th width="40%">function</th><th>supported</th></tr> -<tr align="left"><td>SQLAllocHandle</td><td> -yes -</td></tr> -<tr align="left"><td>SQLConnect</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetInfo</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetFunctions</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetTypeInfo</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetConnectAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetConnectAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetEnvAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetEnvAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetStmtAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetStmtAttr</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetDescField</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetDescRec</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetDescField</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetDescRec</td><td> -yes -</td></tr> -<tr align="left"><td>SQLPrepare</td><td> -yes -</td></tr> -<tr align="left"><td>SQLBindParameter</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetCursorName</td><td> -yes, but cursor names cannot be used in SQL -</td></tr> -<tr align="left"><td>SQLSetCursorName</td><td> -yes, but cursor names cannot be used in SQL -</td></tr> -<tr align="left"><td>SQLSetScrollOptions</td><td> -not implemented -</td></tr> -<tr align="left"><td>SQLExecute</td><td> -yes -</td></tr> -<tr align="left"><td>SQLExecDirect</td><td> -yes -</td></tr> -<tr align="left"><td>SQLNativeSql</td><td> -not implemented -</td></tr> -<tr align="left"><td>SQLDescribeParam</td><td> -not supported -</td></tr> -<tr align="left"><td>SQLNumParams</td><td> -yes -</td></tr> -<tr align="left"><td>SQLParamData</td><td> -yes -</td></tr> -<tr align="left"><td>SQLPutData</td><td> -yes -</td></tr> -<tr align="left"><td>SQLRowCount</td><td> -yes -</td></tr> -<tr align="left"><td>SQLNumResultCols</td><td> -yes -</td></tr> -<tr align="left"><td>SQLDescribeCol</td><td> -yes -</td></tr> -<tr align="left"><td>SQLColAttribute</td><td> -yes -</td></tr> -<tr align="left"><td>SQLBindCol</td><td> -yes -</td></tr> -<tr align="left"><td>SQLFetch</td><td> -yes -</td></tr> -<tr align="left"><td>SQLFetchScroll</td><td> -not implemented -</td></tr> -<tr align="left"><td>SQLGetData</td><td> -yes -</td></tr> -<tr align="left"><td>SQLSetPos</td><td> -not implemented -</td></tr> -<tr align="left"><td>SQLBulkOperations</td><td> -not implemented -</td></tr> -<tr align="left"><td>SQLMoreResults</td><td> -yes, but multiple result sets are not supported -</td></tr> -<tr align="left"><td>SQLGetDiagField</td><td> -yes -</td></tr> -<tr align="left"><td>SQLGetDiagRec</td><td> -yes -</td></tr> -<tr align="left"><td>SQLColumnPrivileges</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLColumns</td><td> -yes -</td></tr> -<tr align="left"><td>SQLForeignKeys</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLPrimaryKeys</td><td> -yes -</td></tr> -<tr align="left"><td>SQLProcedureColumns</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLProcedures</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLSpecialColumns</td><td> -yes <b>v2.x</b> -</td></tr> -<tr align="left"><td>SQLStatistics</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLTablePrivileges</td><td> -not applicable -</td></tr> -<tr align="left"><td>SQLTables</td><td> -yes -</td></tr> -<tr align="left"><td>SQLFreeStmt</td><td> -yes -</td></tr> -<tr align="left"><td>SQLCloseCursor</td><td> -yes -</td></tr> -<tr align="left"><td>SQLCancel</td><td> -yes -</td></tr> -<tr align="left"><td>SQLEndTran</td><td> -yes -</td></tr> -<tr align="left"><td>SQLDisconnect</td><td> -yes -</td></tr> -<tr align="left"><td>SQLFreeHandle</td><td> -yes -</td></tr> -</table> - -<h3>3. SQL</h3> - -<h4>3.1 Data types</h4> - -<table width="80%" border=1> -<tr align="left"><th width="40%">type</th> <th>description</th></tr> -<tr align="left"><td>CHAR(n)</td><td>fixed-width blank-padded string</tr> -<tr align="left"><td>VARCHAR(n)</td><td>variable length string</tr> -<tr align="left"><td>INT<br>INTEGER</td><td>integer 32 bits</tr> -<tr align="left"><td>BIGINT</td><td>integer 64 bits</tr> -<tr align="left"><td>DECIMAL(m,n)</td><td>exact number with precision and scale <b>v2.x</b></tr> -<tr align="left"><td>REAL</td><td>float 32 bits</tr> -<tr align="left"><td>FLOAT<br>DOUBLE PRECISION</td><td>float, at least 64 bits</tr> -<tr align="left"><td>DATE</td><td>date with precision 1 second <b>v2.x</b></tr> -<tr align="left"><td>DATETIME</td><td>date with precision 1 nanosecond (SQL_TYPE_TIMESTAMP)</tr> -</table> -<p> - -Integer types may be qualified as UNSIGNED. -<br><br> -Strings and numbers are not converted to each other automatically. -Following is an error (unlike in oracle). -<br> -<pre><tt>select 123 + '456' from tab</tt></pre> - -<h4>3.2 Expressions</h4> - -<table width="80%" border=1> -<tr align="left"><th width="40%">syntax</th> <th>description</th></tr> -<tr align="left"><td align="center"><b>NULL</b></td><td>null value</td></tr> -<tr align="left"><td align="center">12.34<b>e</b>5</td><td>integer or decimal or float constant</td></tr> -<tr align="left"><td align="center"><b>'</b>abc<b>'</b></td><td>string constant</td></tr> -<tr align="left"><td align="center"><b>+ - * / ( )</b></td><td>arithmetic operations</td></tr> -<tr align="left"><td align="center"><b>||</b></td><td>string concatenation <b>v2.x</b></td></tr> -</table> - -<br> -Integer and decimal arithmetic is done in BIGINT. -<br> -Floating arithmetic is done in DOUBLE PRECISION. -<br> -Numeric literals use largest applicable type. -<br> -String operations are done in CHAR or in VARCHAR (if any operand is VARCHAR). -<br> -String literals have type CHAR. - -<h4>3.3 Functions : non-aggregate</h4> - -<table width="80%" border=1> -<tr align="left"><th width="40%">syntax</th> <th>description</th></tr> -<tr align="left"><td align="center">SUBSTR() LEFT() RIGHT()</td><td>substring</td></tr> -<tr align="left"><td align="center">TO_NUMBER() TO_CHAR()</td><td>basic conversions <b>v2.x</b></td></tr> -<tr align="left"><td align="center">ROWNUM</td><td>row number in query</td></tr> -<tr align="left"><td align="center">SYSDATE</td><td>current date as DATETIME</td></tr> -</table> - -<h4>3.4 Functions : aggregate</h4> - -<table width="80%" border=1> -<tr align="left"><th width="40%">syntax</th> <th>description</th></tr> -<tr align="left"><td align="center">COUNT(*) COUNT(expr)</td><td>count rows or non-NULL values</td></tr> -<tr align="left"><td align="center">MIN(expr) MAX(expr)</td><td>min and max of strings and numbers</td></tr> -<tr align="left"><td align="center">SUM(expr) AVG(expr)</td><td>sum and average of numbers</td></tr> -</table> -<br> -GROUP BY and HAVING are supported. - -<h4>3.5 Predicates</h4> - -<table width="80%" border=1> -<tr align="left"><th width="40%">syntax</th> <th>description</th></tr> -<tr align="left"><td align="center">IS NULL / IS NOT NULL</td><td>test if value is null</td></tr> -<tr align="left"><td align="center"><b>< <= = != > >=</b></td><td>comparisons</td></tr> -<tr align="left"><td align="center">LIKE / NOT LIKE</td><td>string matching</td></tr> -<tr align="left"><td align="center">AND OR NOT <b>( )</b></td><td>boolean operators</td></tr> -</table> - -<h4>3.6 Tables</h4> - -An NDB table requires a primary key. -There are 2 ways to specify it. - -<p> -<h4>Case 1</h4> -<pre><tt>create table t ( - a integer not null, - b char(20) not null, - c float, - primary key(a, b) -) -</tt></pre> -<p> -<h4>Case 2</h4> -<p> -A column can be specified as AUTO_INCREMENT. -The column has following requirements. -<ul> -<li>it must be the primary key (not just part of one) -<li>its type must be one of the integer types -</ul> -<pre><tt>create table t ( - a int unsigned auto_increment primary key, - b char(20) not null, - c float -) -</tt></pre> -<p> -The values of an AUTO_INCREMENT column are unique (until wrap-around) -and form an ascending sequence. -Gaps in the sequence are possible. -<h4>Default values</h4> -Columns can be specified with DEFAULT value -which is used on insert if the column is not on the insert list. -<p> -<pre><tt>create table t ( - a int primary key, - b int default 100 -) -insert into t(a) values(1) -- inserts (1,100) -</tt></pre> -<p> -The value must evaluate to constant. -Using SYSDATE (if allowed at all) evaluates to table creation time. -<p> - -<h4>Logging / nologging</h4> - -By default tables are created in logging mode, meaning the data -is preserved across database restart. -The mode can be specified explicitly: -<p> -<tt>create table t1 (a int primary key, b int) logging</tt> -<br> -<tt>create table t1 (a int primary key, b int) nologging</tt> - -<h4>Schemas</h4> - -Schemas do not exist in current NDB Cluster. -As a convenience, a single period is allowed in table names: -<p> -<pre><tt>create table mydb.mytable (a int primary key)</tt></pre> -<p> - -<h4>Drop table</h4> - -Deletes a table, all of its indexes, and all data: -<p> -<tt>drop table t</tt> - -<h4>3.7 Indexes</h4> -Only unique non-ordered indexes exist currently. -The columns must be not nullable and are stored in same -order as underlying table columns. -<p> -<tt>create unique hash index x1 on t1(b, c) logging</tt> -<p> -Internally, a unique hash index is a table where index key is primary key. -If the index is <tt>nologging</tt>, it is rebuilt on database restart -before the database is opened. -<p> -Indexes can of course be dropped: -<p> -<tt>drop index x1</tt> - -<h4>3.8 Select</h4> - -Features: - -<ul> -<li>Expressions and predicates -<br><tt>select a + b * c from t where a < b + c and (b > c or c > 10)</tt> -<li>JOIN to any depth -<br><tt>select a.x, b.y, c.z from t1 a, t2 b, t2 c where a.x + b.y < c.z</tt> -<li>ORDER BY -<br><tt>select * from t1, t2 where a1 > 5 order by b1 + b2, c1 desc</tt> -<li>DISTINCT -<br><tt>select distinct a, b + c from t</tt> -<li>Aggregates without grouping. -<br><tt>select count(*), max(a), 1 + sum(b) + avg(c * d) from t</tt> -<li>Aggregates with grouping. -<br><tt>select a, sum(b) from t group by a having sum(c) > 0 order by a, sum(d)</tt> -</ul> - -Major omissions: -<ul> -<li>no OUTER JOIN -<li>no subqueries and no EXISTS clause -</ul> - -Queries are optimized to minimize scans, -by using primary keys and existing unique hash indexes. -Simple predicates in scans (column compared to constant) -are passed to an interpreter in NDB kernel. -Joins are done via <em>nested loops</em> only. -<p> -<ul> -<li>SCAN -<br><tt>select * from t where a < b</tt> -<li>INTERPRETED SCAN (much faster) -<br><tt>select * from t1, t2 where t1.a < 10 and t2.b > t1.c</tt> -<li>PRIMARY KEY lookup -<br><tt>select * from t where pk = 5 and b > 10</tt> -<li>NESTED LOOPS -<br><tt>select * from t1, t2, t3 where t1.pk = t2.x and t2.pk = t3.y</tt> -</ul> - -<h4>3.9 Insert and write</h4> - -Both VALUES and subquery variants can be used. -<p> -<pre><tt>insert into t(a, c) values (123, 'abc') -insert into t1(a, c) select a + 10 * b, c from t2 -</tt></pre> -<p> -For convenience, the non-standard <i>MySql</i> syntax is also supported. -<p> -<pre><tt>insert into t set a = 123, c = 'abc'</tt></pre> -<p> -The non-standard operation WRITE is used exactly like INSERT. -The record is updated if it exists. -Otherwise a new record is inserted. -<p> -<pre><tt>write into t(a, c) values (123, 'abc') -</tt></pre> - -<h4>3.10 Update</h4> - -Update allows no subqueries. -Update is optimized to minimize scans and reads, -by using primary keys and existing unique hash indexes. -<p> -<ul> -<li>SCAN -<br><tt>update t set a = b + 5, c = d where c > 10</tt> -<li>PRIMARY KEY or INDEX lookup -<br><tt>update t set a = b + 5, c = d where pk = 5 and c > 10</tt> -<li>PRIMARY KEY or INDEX direct -<br><tt>update t set a = 5, c = 7 where pk = 5</tt> -</ul> - -<h4>3.11 Delete</h4> - -Delete allows no subqueries. -Delete is optimized to minimize scans and reads, -by using primary keys and existing unique hash indexes. -<p> -<ul> -<li>SCAN -<br><tt>delete from t where c > 10</tt> -<li>PRIMARY KEY or INDEX lookup -<br><tt>delete from t where pk = 5 and c > 10</tt> -<li>PRIMARY KEY or INDEX direct -<br><tt>delete from t where pk = 5</tt> -</ul> - -<h4>3.12 Virtual tables</h4> - -The driver implements some virtual tables. -They can only be queried, not modified. -<p> -<ul> -<li>DUAL -<br>A 1-row table - example: select SYSDATE from DUAL. -<li>ODBC$TYPEINFO -<br>Corresponds to SQLGetTypeInfo. -<li>ODBC$TABLES -<br>Corresponds to SQLTables but shows all NDB kernel objects. -<li>ODBC$COLUMNS -<br>Corresponds to SQLColumns. -<li>ODBC$PRIMARYKEYS -<br>Corresponds to SQLPrimaryKeys. -</ul> - -<h3>4. DIAGNOSTICS</h3> - -<h4>4.1 Diagnostic records</h4> - -The driver manager and driver return 3 main diagnostics -(see <b><tt>SQLGetDiagRec</tt></b>). -<ul> -<li>SQLSTATE (a string of 5 characters) -<li>Native error code -<li>Message text -</ul> -<p> -Message text format is -<br><br> -<b><tt>[Alzato][ODBC driver][NDB Cluster] NDB-ssccnnn <i>error text</i> (in SQLXxx)</tt></b> -<br><br> -Here <b>ssccnnnn</b> is native error code (decimal number), with following parts: -<p> -<li><b><tt>ss</tt></b> - status -<li><b><tt>cc</tt></b> - classification -<li><b><tt>nnnn</tt></b> - error code -</ul> -<p> -See NDB API guide for further information. -<p> -For non-database errors the last prefix <b><tt>[NDB Cluster]</tt></b> is omitted -and native error code is always 02015001. - -<h4>4.2 Tracing</h4> - -Following environment variables may be useful. -<ul> -<li><b><tt>NDB_ODBC_TRACE</tt></b> -<br> -Values ≥ 2 cause SQL execution plan -to be printed on standard output. -<br> -Values ≥ 3 show the ODBC API functions -called by the driver manager. -<br><br> -<li><b><tt>NDB_ODBC_DEBUG</tt></b> -<br> -Non-zero value makes the driver abort -the application on unhandled conditions. -<br> -By default the ODBC API function is aborted gracefully. -</ul> - -<h4>4.3 Thread safety</h4> -<p> -The driver has same thread-safety model as NDB API. -In NDB API each thread must use its own <b><tt>Ndb</tt></b> object. -In NDB ODBC a <b><tt>SQLConnect</tt></b> corresponds to an <b><tt>Ndb</tt></b> object. -It is required that each thread allocates its -own ODBC handles (of all types). - -<h4>4.4 Data formats</h4> -<p> -SQL types are represented as (old) NDB types as follows. -<p> -<table width="80%" border=1> -<tr align="left"><th width="20%">SQL type</th> <th>NDB type</th></tr> -<tr align="left"><td align="left">CHAR(n)</td><td>String(n), blank-padded to n</td></tr> -<tr align="left"><td align="left">VARCHAR(n)</td><td>String(n+2), zero-padded to n, length in last 2 bytes (big-endian)</td></tr> -<tr align="left"><td align="left">integers</td><td>Signed(x) or UnSigned(x), x=16,32,64, native format</td></tr> -<tr align="left"><td align="left">floats</td><td>Float(x), x=32,64, native format</td></tr> -<tr align="left"><td align="left">DATETIME</td><td>String(12) = cc yy mm dd HH MM SS \0 ff ff ff ff (big-endian)</td></tr> -</table> -<p> -Note: SQL types exist now in NDB API in <b><tt>NdbDictionary</tt></b> class. -However they are not yet understood by NDB API operations. - -<h4>4.5 NDB Cluster limitations</h4> -<p> -<ul> -<li>Isolation level is READ COMMITTED. -A scan (non-primary-key select of several rows) does not see consistent data. -<br><br> -<li>Inserting into a table from itself is likely to cause a deadlock -or a random result. -<br><tt><b>no:</b> insert into t(a, b) select a*100, b+100 from t</tt> -<br><br> -<li>Number of uncommitted rows is limited by NDB configuration -parameter <b><tt>MaxNoOfConcurrentOperations</tt></b> (typical default 4096). -To delete all rows from a large table one may need to do repeatedly: -<br><tt>delete from t where rownum < 4000</tt> -</ul> - -<h4>4.6 Known problems v2.11</h4> -<p> -Following lists specific known problems. -<ul> -<li>ORDER BY works only with expressions, -not with column aliases or positions. -<br><tt><b>no:</b> select a+b x from t order by x</tt> -<br><tt><b>no:</b> select * from t order by 1, 2, 3</tt> -<br><br> -<li>Join optimizer does not always minimize number of scans. -Changing the order of tables in the statement may help. -</ul> - -<h4>4.7 Useful links</h4> -<p> -<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/dasdkodbcoverview_whatsnew.asp/">Microsoft ODBC page</a> -<br> -<a href="http://www.unixodbc.org/">unixODBC home page</a> -<br> -<a href="http://www.iodbc.org/">iODBC home page</a> - -</BODY> -</HTML> diff --git a/storage/ndb/src/old_files/client/odbc/docs/select.fig b/storage/ndb/src/old_files/client/odbc/docs/select.fig deleted file mode 100644 index 4f51a2085b4d15984171ada5a97983f728806fcb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/select.fig +++ /dev/null @@ -1,94 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -A4 -92.00 -Single --2 -1200 2 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 2700 2700 1500 3900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 3150 2700 3150 3900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 3600 4500 4800 5700 -2 1 1 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 3600 2700 4800 3900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 2775 4500 1200 5700 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 3150 4500 3150 5700 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 2100 4500 2100 3900 600 3900 600 4500 2100 4500 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 2100 6300 2100 5700 600 5700 600 6300 2100 6300 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 3900 4500 3900 3900 2400 3900 2400 4500 3900 4500 -2 4 1 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 - 5700 4500 5700 3900 4200 3900 4200 4500 5700 4500 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 3900 6300 3900 5700 2400 5700 2400 6300 3900 6300 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 5700 6300 5700 5700 4200 5700 4200 6300 5700 6300 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 8400 2700 8400 2100 6900 2100 6900 2700 8400 2700 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 8400 6300 8400 5700 6900 5700 6900 6300 8400 6300 -2 1 0 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 7650 2700 7650 5700 -2 1 0 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 7650 6300 7650 7500 -2 1 1 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 8100 6300 10575 6900 -2 1 0 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 8100 2700 10575 3300 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 11700 3900 11700 3300 10200 3300 10200 3900 11700 3900 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 9900 5400 9900 4800 8400 4800 8400 5400 9900 5400 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 11700 5400 11700 4800 10200 4800 10200 5400 11700 5400 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 13500 5400 13500 4800 12000 4800 12000 5400 13500 5400 -2 1 0 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 10500 3900 9300 4800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 7 1 0 2 - 0 0 1.00 60.00 120.00 - 11400 3900 12600 4800 -2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2 - 0 0 1.00 60.00 120.00 - 10950 3900 10950 4800 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 8400 8100 8400 7500 6900 7500 6900 8100 8400 8100 -2 4 0 1 0 7 50 0 -1 0.000 0 0 7 0 0 5 - 3900 2700 3900 2100 2400 2100 2400 2700 3900 2700 -2 4 1 1 0 7 50 0 -1 4.000 0 0 7 0 0 5 - 11700 7500 11700 6900 10200 6900 10200 7500 11700 7500 -4 0 0 50 0 14 12 0.0000 4 135 840 900 4275 table T1\001 -4 0 0 50 0 14 20 0.0000 4 240 4125 900 1125 select A, C, 123 from T1/\001 -4 0 0 50 0 14 12 0.0000 4 135 840 825 6075 column A\001 -4 0 0 50 0 14 12 0.0000 4 135 840 2775 6075 column C\001 -4 0 0 50 0 14 12 0.0000 4 135 945 4425 6075 const 123\001 -4 0 0 50 0 14 12 0.0000 4 135 630 4575 4275 clause\001 -4 0 0 50 0 14 12 0.0000 4 90 315 2925 4275 row\001 -4 0 0 50 0 14 12 0.0000 4 180 735 7200 2475 project\001 -4 0 0 50 0 14 12 0.0000 4 135 630 7200 6000 filter\001 -4 0 0 50 0 14 12 0.0000 4 135 840 8625 5100 column 1\001 -4 0 0 50 0 14 12 0.0000 4 135 840 10500 5100 column 2\001 -4 0 0 50 0 14 12 0.0000 4 135 945 12300 5100 const 123\001 -4 0 0 50 0 14 12 0.0000 4 90 315 10650 3600 row\001 -4 0 0 50 0 14 12 0.0000 4 150 840 7200 7800 scan 1,2\001 -4 0 0 50 0 14 12 0.0000 4 135 630 2850 2475 select\001 -4 0 0 50 0 14 12 0.0000 4 135 630 10500 7200 clause\001 diff --git a/storage/ndb/src/old_files/client/odbc/docs/systables.pl b/storage/ndb/src/old_files/client/odbc/docs/systables.pl deleted file mode 100644 index 728d966a7a4cccea9cd24f7501f75e0c9a5e9d29..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/systables.pl +++ /dev/null @@ -1,2192 +0,0 @@ -# usage: perl systables.pl {typeinfo|tables|columns|primarykeys} {-l|-c} -use strict; -my $what = shift; -my $opt = shift; -my $listWhat = {}; - -# -# odbcsqlgettypeinfo.htm -# -$listWhat->{typeinfo} = [ -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLGetTypeInfo</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlgettypeinfo"></A>SQLGetTypeInfo</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: ISO 92</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLGetTypeInfo</B> returns information about data types supported by the data source. The driver returns the information in the form of an SQL result set. The data types are intended for use in Data Definition Language (DDL) statements.</P> -# -# <P class="indent"><b class="le">Important </b>Applications must use the type names returned in the TYPE_NAME column of the <B>SQLGetTypeInfo</B> result set in <B>ALTER TABLE</B> and <B>CREATE TABLE</B> statements. <B>SQLGetTypeInfo</B> may return more than one row with the same value in the DATA_TYPE column.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLGetTypeInfo</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLSMALLINT <I>DataType</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle for the result set.</dd> -# -# <DT><I>DataType</I></DT> -# -# <DD>[Input]<BR> -# The SQL data type. This must be one of the values in the "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" section of Appendix D: Data Types, or a driver-specific SQL data type. SQL_ALL_TYPES specifies that information about all data types should be returned.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLGetTypeInfo</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLGetTypeInfo </B>and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01S02</TD> -# <TD width=26%>Option value changed</TD> -# <TD width=52%>A specified statement attribute was invalid because of implementation working conditions, so a similar value was temporarily substituted. (Call <B>SQLGetStmtAttr</B> to determine the temporarily substituted value.) The substitute value is valid for the <I>StatementHandle</I> until the cursor is closed. The statement attributes that can be changed are: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT, and SQL_ATTR_SIMULATE_CURSOR. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>A cursor was open on the <I>StatementHandle,</I> and <B>SQLFetch</B> or <B>SQLFetchScroll</B> had been called. This error is returned by the Driver Manager if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has not returned SQL_NO_DATA, and is returned by the driver if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has returned SQL_NO_DATA. -# <P>A result set was open on the <I>StatementHandle</I>, but <B>SQLFetch</B> or <B>SQLFetchScroll</B> had not been called.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40001</TD> -# <TD width=26%>Serialization failure</TD> -# <TD width=52%>The transaction was rolled back due to a resource deadlock with another transaction.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40003</TD> -# <TD width=26%>Statement completion unknown</TD> -# <TD width=52%>The associated connection failed during the execution of this function and the state of the transaction cannot be determined.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause. </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY004</TD> -# <TD width=26%>Invalid SQL data type</TD> -# <TD width=52%>The value specified for the argument <I>DataType</I> was neither a valid ODBC SQL data type identifier nor a driver-specific data type identifier supported by the driver.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY008</TD> -# <TD width=26%>Operation canceled</TD> -# <TD width=52%>Asynchronous processing was enabled for the <I>StatementHandle</I>, then the function was called and, before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I>. Then the function was called again on the <I>StatementHandle</I>. -# <P>The function was called and, before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I> from a different thread in a multithread application.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function (not this one) was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>The combination of the current settings of the SQL_ATTR_CONCURRENCY and SQL_ATTR_CURSOR_TYPE statement attributes was not supported by the driver or data source. -# <P>The SQL_ATTR_USE_BOOKMARKS statement attribute was set to SQL_UB_VARIABLE, and the SQL_ATTR_CURSOR_TYPE statement attribute was set to a cursor type for which the driver does not support bookmarks.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT00</TD> -# <TD width=26%>Timeout expired</TD> -# <TD width=52%>The query timeout period expired before the data source returned the result set. The timeout period is set through <B>SQLSetStmtAttr</B>, SQL_ATTR_QUERY_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver corresponding to the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P><B>SQLGetTypeInfo</B> returns the results as a standard result set, ordered by DATA_TYPE and then by how closely the data type maps to the corresponding ODBC SQL data type. Data types defined by the data source take precedence over user-defined data types. Consequently, the sort order is not necessarily consistent but can be generalized as DATA_TYPE first, followed by TYPE_NAME, both ascending. For example, suppose that a data source defined INTEGER and COUNTER data types, where COUNTER is auto-incrementing, and that a user-defined data type WHOLENUM has also been defined. These would be returned in the order INTEGER, WHOLENUM, and COUNTER, because WHOLENUM maps closely to the ODBC SQL data type SQL_INTEGER, while the auto-incrementing data type, even though supported by the data source, does not map closely to an ODBC SQL data type. For information about how this information might be used, see "<A HREF="odbcddl_statements.htm">DDL Statements</A>" in Chapter 8: SQL Statements.</P> -# -# <P>If the <I>DataType</I> argument specifies a data type which is valid for the version of ODBC supported by the driver, but is not supported by the driver, then it will return an empty result set. </P> -# -# <P class="indent"><b class="le">Note </b>For more information about the general use, arguments, and returned data of ODBC catalog functions, see <A HREF="odbccatalog_functions.htm">Chapter 7: Catalog Functions</A>.</P> -# -# <P>The following columns have been renamed for ODBC 3.<I>x</I>. The column name changes do not affect backward compatibility because applications bind by column number.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>ODBC 2.0 column</TH> -# <TH width=52%>ODBC 3.<I>x</I> column</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>PRECISION</TD> -# <TD width=52%>COLUMN_SIZE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>MONEY</TD> -# <TD width=52%>FIXED_PREC_SCALE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>AUTO_INCREMENT</TD> -# <TD width=52%>AUTO_UNIQUE_VALUE</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>The following columns have been added to the results set returned by <B>SQLGetTypeInfo</B> for ODBC 3.<I>x</I>: -# -# <UL type=disc> -# <LI>SQL_DATA_TYPE</li> -# -# <LI>INTERVAL_PRECISION</li> -# -# <LI>SQL_DATETIME_SUB</li> -# -# <LI>NUM_PREC_RADIX</li> -# </UL> -# -# <P>The following table lists the columns in the result set. Additional columns beyond column 19 (INTERVAL_PRECISION) can be defined by the driver. An application should gain access to driver-specific columns by counting down from the end of the result set rather than specifying an explicit ordinal position. For more information, see "<A HREF="odbcdata_returned_by_catalog_functions.htm">Data Returned by Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# -# <P class="indent"><b class="le">Note</b> <B>SQLGetTypeInfo</B> might not return all data types. For example, a driver might not return user-defined data types. Applications can use any valid data type, regardless of whether it is returned by <B>SQLGetTypeInfo</B>.</P> -# -# <P class="indent">The data types returned by <B>SQLGetTypeInfo</B> are those supported by the data source. They are intended for use in Data Definition Language (DDL) statements. Drivers can return result-set data using data types other than the types returned by <B>SQLGetTypeInfo</B>. In creating the result set for a catalog function, the driver might use a data type that is not supported by the data source. </P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=33%><BR> -# Column name</TH> -# <TH width=14%>Column <BR> -# number</TH> -# <TH width=15%><BR> -# Data type</TH> -# <TH width=38%><BR> -# Comments</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=33%>TYPE_NAME<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>1</TD> -# <TD width=15%>Varchar<BR> -# not NULL</TD> -# <TD width=38%>Data source–dependent data-type name; for example, "CHAR()", "VARCHAR()", "MONEY", "LONG VARBINARY", or "CHAR ( ) FOR BIT DATA". Applications must use this name in <B>CREATE TABLE</B> and <B>ALTER TABLE</B> statements.</TD> -# </TR> - { name => "type_name", - type => "varchar", - length => 20, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>DATA_TYPE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>2</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>SQL data type. This can be an ODBC SQL data type or a driver-specific SQL data type. For datetime or interval data types, this column returns the concise data type (such as SQL_TYPE_TIME or SQL_INTERVAL_YEAR_TO_MONTH). For a list of valid ODBC SQL data types, see "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" in Appendix D: Data Types. For information about driver-specific SQL data types, see the driver’s documentation.</TD> -# </TR> - { name => "data_type", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>COLUMN_SIZE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>3</TD> -# <TD width=15%>Integer</TD> -# <TD width=38%>The maximum column size that the server supports for this data type. For numeric data, this is the maximum precision. For string data, this is the length in characters. For datetime data types, this is the length in characters of the string representation (assuming the maximum allowed precision of the fractional seconds component). NULL is returned for data types where column size is not applicable. For interval data types, this is the number of characters in the character representation of the interval literal (as defined by the interval leading precision; see "<A HREF="odbcinterval_data_type_length.htm">Interval Data Type Length</A>" in Appendix D: Data Types). -# <P>For more information on column size, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</P> -# </TD> -# </TR> - { name => "column_size", - type => "integer", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LITERAL_PREFIX<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>4</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Character or characters used to prefix a literal; for example, a single quotation mark (') for character data types or 0x for binary data types; NULL is returned for data types where a literal prefix is not applicable.</TD> -# </TR> - { name => "literal_prefix", - type => "varchar", - length => 1, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LITERAL_SUFFIX<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>5</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Character or characters used to terminate a literal; for example, a single quotation mark (') for character data types; NULL is returned for data types where a literal suffix is not applicable.</TD> -# </TR> - { name => "literal_suffix", - type => "varchar", - length => 1, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>CREATE_PARAMS<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>6</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>A list of keywords, separated by commas, corresponding to each parameter that the application may specify in parentheses when using the name that is returned in the TYPE_NAME field. The keywords in the list can be any of the following: length, precision, or scale. They appear in the order that the syntax requires them to be used. For example, CREATE_PARAMS for DECIMAL would be "precision,scale"; CREATE_PARAMS for VARCHAR would equal "length." NULL is returned if there are no parameters for the data type definition; for example, INTEGER. -# <P>The driver supplies the CREATE_PARAMS text in the language of the country where it is used.</P> -# </TD> -# </TR> - { name => "create_params", - type => "varchar", - length => 20, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>NULLABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>7</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether the data type accepts a NULL value: -# <P>SQL_NO_NULLS if the data type does not accept NULL values.</P> -# -# <P>SQL_NULLABLE if the data type accepts NULL values.</P> -# -# <P>SQL_NULLABLE_UNKNOWN if it is not known whether the column accepts NULL values.</P> -# </TD> -# </TR> - { name => "nullable", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>CASE_SENSITIVE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>8</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether a character data type is case-sensitive in collations and comparisons: -# <P>SQL_TRUE if the data type is a character data type and is case-sensitive.</P> -# -# <P>SQL_FALSE if the data type is not a character data type or is not case-sensitive.</P> -# </TD> -# </TR> - { name => "case_sensitive", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SEARCHABLE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>9</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>How the data type is used in a <B>WHERE</B> clause: -# <P>SQL_PRED_NONE if the column cannot be used in a <B>WHERE</B> clause. (This is the same as the SQL_UNSEARCHABLE value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_PRED_CHAR if the column can be used in a <B>WHERE</B> clause, but only with the <B>LIKE</B> predicate. (This is the same as the SQL_LIKE_ONLY value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_PRED_BASIC if the column can be used in a <B>WHERE</B> clause with all the comparison operators except <B>LIKE</B> (comparison, quantified comparison, <B>BETWEEN</B>, <B>DISTINCT</B>, <B>IN</B>, <B>MATCH</B>, and <B>UNIQUE</B>). (This is the same as the SQL_ALL_EXCEPT_LIKE value in ODBC 2.<I>x</I>.)</P> -# -# <P>SQL_SEARCHABLE if the column can be used in a <B>WHERE</B> clause with any comparison operator.</P> -# </TD> -# </TR> - { name => "searchable", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>UNSIGNED_ATTRIBUTE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>10</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>Whether the data type is unsigned: -# <P>SQL_TRUE if the data type is unsigned.</P> -# -# <P>SQL_FALSE if the data type is signed.</P> -# -# <P>NULL is returned if the attribute is not applicable to the data type or the data type is not numeric.</P> -# </TD> -# </TR> - { name => "unsigned_attribute", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>FIXED_PREC_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>11</TD> -# <TD width=15%>Smallint<BR> -# not NULL</TD> -# <TD width=38%>Whether the data type has predefined fixed precision and scale (which are data source–specific), such as a money data type: -# <P>SQL_TRUE if it has predefined fixed precision and scale.</P> -# -# <P>SQL_FALSE if it does not have predefined fixed precision and scale.</P> -# </TD> -# </TR> - { name => "fixed_prec_scale", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>AUTO_UNIQUE_VALUE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>12</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>Whether the data type is autoincrementing: -# <P>SQL_TRUE if the data type is autoincrementing.</P> -# -# <P>SQL_FALSE if the data type is not autoincrementing.</P> -# -# <P>NULL is returned if the attribute is not applicable to the data type or the data type is not numeric.</P> -# -# <P>An application can insert values into a column having this attribute, but typically cannot update the values in the column. </P> -# -# <P>When an insert is made into an auto-increment column, a unique value is inserted into the column at insert time. The increment is not defined, but is data source–specific. An application should not assume that an auto-increment column starts at any particular point or increments by any particular value.</P> -# </TD> -# </TR> - { name => "auto_unique_value", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>LOCAL_TYPE_NAME<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>13</TD> -# <TD width=15%>Varchar</TD> -# <TD width=38%>Localized version of the data source–dependent name of the data type. NULL is returned if a localized name is not supported by the data source. This name is intended for display only, such as in dialog boxes.</TD> -# </TR> - { name => "local_type_name", - type => "varchar", - length => 20, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>MINIMUM_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>14</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>The minimum scale of the data type on the data source. If a data type has a fixed scale, the MINIMUM_SCALE and MAXIMUM_SCALE columns both contain this value. For example, an SQL_TYPE_TIMESTAMP column might have a fixed scale for fractional seconds. NULL is returned where scale is not applicable. For more information, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "minimum_scale", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>MAXIMUM_SCALE<BR> -# (ODBC 2.0)</TD> -# <TD width=14%>15</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>The maximum scale of the data type on the data source. NULL is returned where scale is not applicable. If the maximum scale is not defined separately on the data source, but is instead defined to be the same as the maximum precision, this column contains the same value as the COLUMN_SIZE column. For more information, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "maximum_scale", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SQL_DATA_TYPE<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>16</TD> -# <TD width=15%>Smallint NOT NULL</TD> -# <TD width=38%>The value of the SQL data type as it appears in the SQL_DESC_TYPE field of the descriptor. This column is the same as the DATA_TYPE column, except for interval and datetime data types. -# <P>For interval and datetime data types, the SQL_DATA_TYPE field in the result set will return SQL_INTERVAL or SQL_DATETIME, and the SQL_DATETIME_SUB field will return the subcode for the specific interval or datetime data type. (See <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>.) </P> -# </TD> -# </TR> - { name => "sql_data_type", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>SQL_DATETIME_SUB<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>17</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>When the value of SQL_DATA_TYPE is SQL_DATETIME or SQL_INTERVAL, this column contains the datetime/interval subcode. For data types other than datetime and interval, this field is NULL. -# <P>For interval or datetime data types, the SQL_DATA_TYPE field in the result set will return SQL_INTERVAL or SQL_DATETIME, and the SQL_DATETIME_SUB field will return the subcode for the specific interval or datetime data type. (See <A HREF="odbcdata_types.htm">Appendix D: Data Types</A>.)</P> -# </TD> -# </TR> - { name => "sql_datetime_sub", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>NUM_PREC_RADIX<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>18</TD> -# <TD width=15%>Integer</TD> -# <TD width=38%>If the data type is an approximate numeric type, this column contains the value 2 to indicate that COLUMN_SIZE specifies a number of bits. For exact numeric types, this column contains the value 10 to indicate that COLUMN_SIZE specifies a number of decimal digits. Otherwise, this column is NULL.</TD> -# </TR> - { name => "num_prec_radix", - type => "integer", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=33%>INTERVAL_PRECISION<BR> -# (ODBC 3.0)</TD> -# <TD width=14%>19</TD> -# <TD width=15%>Smallint</TD> -# <TD width=38%>If the data type is an interval data type, then this column contains the value of the interval leading precision. (See "<A HREF="odbcinterval_data_type_precision.htm">Interval Data Type Precision</A>" in Appendix D: Data Types.) Otherwise, this column is NULL.</TD> -# </TR> - { name => "interval_precision", - type => "smallint", - length => undef, - nullable => 1, - }, -# </table></div> -# <!--TS:--> -# <P>Attribute information can apply to data types or to specific columns in a result set. <B>SQLGetTypeInfo</B> returns information about attributes associated with data types; <B>SQLColAttribute</B> returns information about attributes associated with columns in a result set.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>For information about</TH> -# <TH width=50%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Binding a buffer to a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Canceling statement processing</TD> -# <TD width=50%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning information about a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlcolattribute.htm">SQLColAttribute</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a block of data or scrolling through a result set</TD> -# <TD width=50%><A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a single row or a block of data in a forward-only direction</TD> -# <TD width=50%><A HREF="odbcsqlfetch.htm">SQLFetch</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning information about a driver or data source</TD> -# <TD width=50%><A HREF="odbcsqlgetinfo.htm">SQLGetInfo</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -]; - -# -# odbcsqltables.htm -# -$listWhat->{tables} = [ -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLTables</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqltables"></A>SQLTables</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: X/Open</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLTables</B> returns the list of table, catalog, or schema names, and table types, stored in a specific data source. The driver returns the information as a result set.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLTables</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLCHAR * <I>CatalogName</I>, -# SQLSMALLINT <I>NameLength1</I>, -# SQLCHAR * <I>SchemaName</I>, -# SQLSMALLINT <I>NameLength2</I>, -# SQLCHAR * <I>TableName</I>, -# SQLSMALLINT <I>NameLength3</I>, -# SQLCHAR * <I>TableType</I>, -# SQLSMALLINT <I>NameLength4</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle for retrieved results.</dd> -# -# <DT><I>CatalogName</I></DT> -# -# <DD>[Input]<BR> -# Catalog name. The <I>CatalogName</I> argument accepts search patterns if the SQL_ODBC_VERSION environment attribute is SQL_OV_ODBC3; it does not accept search patterns if SQL_OV_ODBC2 is set. If a driver supports catalogs for some tables but not for others, such as when a driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have catalogs. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>CatalogName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>CatalogName</I> is a pattern value argument; it is treated literally, and its case is significant. For more information, see "<A HREF="odbcarguments_in_catalog_functions.htm">Arguments in Catalog Functions</A>" in Chapter 7: Catalog Functions. -# </dd> -# -# <DT><I>NameLength1</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>CatalogName</I>.</dd> -# -# <DT><I>SchemaName</I></DT> -# -# <DD>[Input]<BR> -# String search pattern for schema names. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have schemas. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>SchemaName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>SchemaName</I> is a pattern value argument; it is treated literally, and its case is significant. -# </dd> -# -# <DT><I>NameLength2</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>SchemaName</I>.</dd> -# -# <DT><I>TableName</I></DT> -# -# <DD>[Input]<BR> -# String search pattern for table names. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>TableName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>TableName</I> is a pattern value argument; it is treated literally, and its case is significant. -# </dd> -# -# <DT><I>NameLength3</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>TableName</I>.</dd> -# -# <DT><I>TableType</I></DT> -# -# <DD>[Input]<BR> -# List of table types to match. -# -# <P>Note that the SQL_ATTR_METADATA_ID statement attribute has no effect upon the <I>TableType</I> argument. <I>TableType</I> is a value list argument, no matter what the setting of SQL_ATTR_METADATA_ID. -# </dd> -# -# <DT><I>NameLength4</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>TableType</I>.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLTables</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value may be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLTables</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>A cursor was open on the <I>StatementHandle</I>, and <B>SQLFetch</B> or <B>SQLFetchScroll</B> had been called. This error is returned by the Driver Manager if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has not returned SQL_NO_DATA and is returned by the driver if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has returned SQL_NO_DATA. -# <P>A cursor was open on the <I>StatementHandle</I>, but <B>SQLFetch</B> or <B>SQLFetchScroll</B> had not been called.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40001</TD> -# <TD width=26%>Serialization failure</TD> -# <TD width=52%>The transaction was rolled back due to a resource deadlock with another transaction.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40003</TD> -# <TD width=26%>Statement completion unknown</TD> -# <TD width=52%>The associated connection failed during the execution of this function, and the state of the transaction cannot be determined.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation <BR> -# error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY008</TD> -# <TD width=26%>Operation canceled</TD> -# <TD width=52%>Asynchronous processing was enabled for the <I>StatementHandle</I>. The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I>. Then the function was called again on the <I>StatementHandle</I>. -# <P>The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I> from a different thread in a multithread application.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, the <I>CatalogName</I> argument was a null pointer, and the SQL_CATALOG_NAME <I>InfoType</I> returns that catalog names are supported. -# <P>(DM) The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, and the <I>SchemaName</I> or <I>TableName</I> argument was a null pointer.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function (not this one) was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%>(DM) The value of one of the length arguments was less than 0 but not equal to SQL_NTS. -# <P>The value of one of the name length arguments exceeded the maximum length value for the corresponding name.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>A catalog was specified, and the driver or data source does not support catalogs. -# <P>A schema was specified, and the driver or data source does not support schemas.</P> -# -# <P>A string search pattern was specified for the catalog name, table schema, or table name, and the data source does not support search patterns for one or more of those arguments.</P> -# -# <P>The combination of the current settings of the SQL_ATTR_CONCURRENCY and SQL_ATTR_CURSOR_TYPE statement attributes was not supported by the driver or data source. </P> -# -# <P>The SQL_ATTR_USE_BOOKMARKS statement attribute was set to SQL_UB_VARIABLE, and the SQL_ATTR_CURSOR_TYPE statement attribute was set to a cursor type for which the driver does not support bookmarks.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT00</TD> -# <TD width=26%>Timeout expired</TD> -# <TD width=52%>The query timeout period expired before the data source returned the requested result set. The timeout period is set through <B>SQLSetStmtAttr</B>, SQL_ATTR_QUERY_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver associated with the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P><B>SQLTables</B> lists all tables in the requested range. A user may or may not have SELECT privileges to any of these tables. To check accessibility, an application can: -# -# <UL type=disc> -# <LI>Call <B>SQLGetInfo</B> and check the SQL_ACCESSIBLE_TABLES information type.</li> -# -# <LI>Call <B>SQLTablePrivileges</B> to check the privileges for each table.</li> -# </UL> -# -# <P>Otherwise, the application must be able to handle a situation where the user selects a table for which <B>SELECT</B> privileges are not granted.</P> -# -# <P>The <I>SchemaName</I> and <I>TableName</I> arguments accept search patterns. The <I>CatalogName</I> argument accepts search patterns if the SQL_ODBC_VERSION environment attribute is SQL_OV_ODBC3; it does not accept search patterns if SQL_OV_ODBC2 is set. If SQL_OV_ODBC3 is set, an ODBC 3<I>.x</I> driver will require that wildcard characters in the <I>CatalogName</I> argument be escaped to be treated literally. For more information about valid search patterns, see "<A HREF="odbcpattern_value_arguments.htm">Pattern Value Arguments</A>" in Chapter 7: Catalog Functions.</P> -# -# <P class="indent"><b class="le">Note</b> For more information about the general use, arguments, and returned data of ODBC catalog functions, see <A HREF="odbccatalog_functions.htm">Chapter 7: Catalog Functions</A>.</P> -# -# <P>To support enumeration of catalogs, schemas, and table types, the following special semantics are defined for the <I>CatalogName</I>, <I>SchemaName</I>, <I>TableName</I>, and <I>TableType</I> arguments of <B>SQLTables</B>: -# -# <UL type=disc> -# <LI>If <I>CatalogName</I> is SQL_ALL_CATALOGS and <I>SchemaName</I> and <I>TableName</I> are empty strings, the result set contains a list of valid catalogs for the data source. (All columns except the TABLE_CAT column contain NULLs.)</li> -# -# <LI>If <I>SchemaName</I> is SQL_ALL_SCHEMAS and <I>CatalogName</I> and <I>TableName</I> are empty strings, the result set contains a list of valid schemas for the data source. (All columns except the TABLE_SCHEM column contain NULLs.)</li> -# -# <LI>If <I>TableType</I> is SQL_ALL_TABLE_TYPES and <I>CatalogName</I>, <I>SchemaName</I>, and <I>TableName</I> are empty strings, the result set contains a list of valid table types for the data source. (All columns except the TABLE_TYPE column contain NULLs.)</li> -# </UL> -# -# <P>If <I>TableType</I> is not an empty string, it must contain a list of comma-separated values for the types of interest; each value may be enclosed in single quotation marks (') or unquoted—for example, 'TABLE', 'VIEW' or TABLE, VIEW. An application should always specify the table type in uppercase; the driver should convert the table type to whatever case is needed by the data source. If the data source does not support a specified table type, <B>SQLTables</B> does not return any results for that type.</P> -# -# <P><B>SQLTables</B> returns the results as a standard result set, ordered by TABLE_TYPE, TABLE_CAT, TABLE_SCHEM, and TABLE_NAME. For information about how this information might be used, see "<A HREF="odbcuses_of_catalog_data.htm">Uses of Catalog Data</A>" in Chapter 7: Catalog Functions.</P> -# -# <P>To determine the actual lengths of the TABLE_CAT, TABLE_SCHEM, and TABLE_NAME columns, an application can call <B>SQLGetInfo</B> with the SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, and SQL_MAX_TABLE_NAME_LEN information types.</P> -# -# <P>The following columns have been renamed for ODBC 3<I>.x</I>. The column name changes do not affect backward compatibility because applications bind by column number.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>ODBC 2.0 column</TH> -# <TH width=52%>ODBC 3<I>.x</I> column</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_QUALIFIER</TD> -# <TD width=52%>TABLE_CAT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_OWNER</TD> -# <TD width=52%>TABLE_SCHEM</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>The following table lists the columns in the result set. Additional columns beyond column 5 (REMARKS) can be defined by the driver. An application should gain access to driver-specific columns by counting down from the end of the result set rather than specifying an explicit ordinal position. For more information, see "<A HREF="odbcdata_returned_by_catalog_functions.htm">Data Returned by Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=27%><BR> -# Column name</TH> -# <TH width=15%>Column number</TH> -# <TH width=16%><BR> -# Data type</TH> -# <TH width=42%><BR> -# Comments</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_CAT<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>1</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Catalog name; NULL if not applicable to the data source. If a driver supports catalogs for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have catalogs.</TD> -# </TR> - { name => "table_cat", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_SCHEM<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>2</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Schema name; NULL if not applicable to the data source. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have schemas.</TD> -# </TR> - { name => "table_schem", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>3</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Table name.</TD> -# </TR> - { name => "table_name", - type => "varchar", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_TYPE<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>4</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Table type name; one of the following: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM", or a data source–specific type name. -# <P>The meanings of "ALIAS" and "SYNONYM" are driver-specific.</P> -# </TD> -# </TR> - { name => "table_type", - type => "varchar", - length => 20, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>REMARKS<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>5</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>A description of the table.</TD> -# </TR> - { name => "remarks", - type => "varchar", - length => 200, - nullable => 1, - }, -# </table></div> -# <!--TS:--> -# <P class="label"><B>Code Example</B></P> -# -# <P>For a code example of a similar function, see <A HREF="odbcsqlcolumns.htm">SQLColumns</A>.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=43%>For information about</TH> -# <TH width=57%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Binding a buffer to a column in a result set</TD> -# <TD width=57%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Canceling statement processing</TD> -# <TD width=57%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Returning privileges for a column or columns</TD> -# <TD width=57%><A HREF="odbcsqlcolumnprivileges.htm">SQLColumnPrivileges</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Returning the columns in a table or tables</TD> -# <TD width=57%><A HREF="odbcsqlcolumns.htm">SQLColumns</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Fetching a single row or a block of data in a forward-only direction</TD> -# <TD width=57%><A HREF="odbcsqlfetch.htm">SQLFetch</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Fetching a block of data or scrolling through a result set</TD> -# <TD width=57%><A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Returning table statistics and indexes</TD> -# <TD width=57%><A HREF="odbcsqlstatistics.htm">SQLStatistics</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=43%>Returning privileges for a table or tables</TD> -# <TD width=57%><A HREF="odbcsqltableprivileges.htm">SQLTablePrivileges</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -]; - -# -# odbcsqlcolumns.htm -# -$listWhat->{columns} = [ -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLColumns</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlcolumns"></A>SQLColumns</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: X/Open</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLColumns</B> returns the list of column names in specified tables. The driver returns this information as a result set on the specified <I>StatementHandle</I>.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLColumns</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLCHAR * <I>CatalogName</I>, -# SQLSMALLINT <I>NameLength1</I>, -# SQLCHAR * <I>SchemaName</I>, -# SQLSMALLINT <I>NameLength2</I>, -# SQLCHAR * <I>TableName</I>, -# SQLSMALLINT <I>NameLength3</I>, -# SQLCHAR * <I>ColumnName</I>, -# SQLSMALLINT <I>NameLength4</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle.</dd> -# -# <DT><I>CatalogName</I></DT> -# -# <DD>[Input]<BR> -# Catalog name. If a driver supports catalogs for some tables but not for others, such as when the driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have catalogs. <I>CatalogName</I> cannot contain a string search pattern.</dd> -# </DL> -# -# <BLOCKQUOTE> -# If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>CatalogName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>CatalogName</I> is an ordinary argument; it is treated literally, and its case is significant. For more information, see "<A HREF="odbcarguments_in_catalog_functions.htm">Arguments in Catalog Functions</A>" in Chapter 7: Catalog Functions.</BLOCKQUOTE> -# -# <DL> -# <DT><I>NameLength1</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>CatalogName</I>.</dd> -# -# <DT><I>SchemaName</I></DT> -# -# <DD>[Input]<BR> -# String search pattern for schema names. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have schemas.</dd> -# </DL> -# -# <BLOCKQUOTE> -# If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>SchemaName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>SchemaName</I> is a pattern value argument; it is treated literally, and its case is significant.</BLOCKQUOTE> -# -# <DL> -# <DT><I>NameLength2</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>SchemaName</I>.</dd> -# -# <DT><I>TableName</I></DT> -# -# <DD>[Input]<BR> -# String search pattern for table names.</dd> -# </DL> -# -# <BLOCKQUOTE> -# If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>TableName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>TableName</I> is a pattern value argument; it is treated literally, and its case is significant.</BLOCKQUOTE> -# -# <DL> -# <DT><I>NameLength3</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>TableName</I>.</dd> -# -# <DT><I>ColumnName</I></DT> -# -# <DD>[Input]<BR> -# String search pattern for column names. </dd> -# </DL> -# -# <BLOCKQUOTE> -# If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>ColumnName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>ColumnName</I> is a pattern value argument; it is treated literally, and its case is significant.</BLOCKQUOTE> -# -# <DL> -# <DT><I>NameLength4</I></DT> -# -# <DD>[Input]<BR> -# Length of *<I>ColumnName</I>.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLColumns</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value may be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLColumns</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>A cursor was open on the <I>StatementHandle</I>, and <B>SQLFetch</B> or <B>SQLFetchScroll</B> had been called. This error is returned by the Driver Manager if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has not returned SQL_NO_DATA, and is returned by the driver if <B>SQLFetch</B> or <B>SQLFetchScroll</B> has returned SQL_NO_DATA. -# <P>A cursor was open on the <I>StatementHandle</I> but <B>SQLFetch</B> or <B>SQLFetchScroll</B> had not been called.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40001</TD> -# <TD width=26%>Serialization failure</TD> -# <TD width=52%>The transaction was rolled back due to a resource deadlock with another transaction.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40003</TD> -# <TD width=26%>Statement completion unknown</TD> -# <TD width=52%>The associated connection failed during the execution of this function, and the state of the transaction cannot be determined.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY008</TD> -# <TD width=26%>Operation canceled</TD> -# <TD width=52%>Asynchronous processing was enabled for the <I>StatementHandle</I>. The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I>. Then the function was called again on the <I>StatementHandle</I>. -# <P>The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I> from a different thread in a multithread application.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, the <I>CatalogName</I> argument was a null pointer, and the SQL_CATALOG_NAME <I>InfoType</I> returns that catalog names are supported. -# <P>(DM) The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, and the <I>SchemaName</I>, <I>TableName</I>, or <I>ColumnName</I> argument was a null pointer.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function (not this one) was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%>(DM) The value of one of the name length arguments was less than 0 but not equal to SQL_NTS.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%> </TD> -# <TD width=26%> </TD> -# <TD width=52%>The value of one of the name length arguments exceeded the maximum length value for the corresponding catalog or name. The maximum length of each catalog or name may be obtained by calling <B>SQLGetInfo</B> with the <I>InfoType</I> values. (See "Comments.")</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>A catalog name was specified, and the driver or data source does not support catalogs. -# <P>A schema name was specified, and the driver or data source does not support schemas.</P> -# -# <P>A string search pattern was specified for the schema name, table name, or column name, and the data source does not support search patterns for one or more of those arguments.</P> -# -# <P>The combination of the current settings of the SQL_ATTR_CONCURRENCY and SQL_ATTR_CURSOR_TYPE statement attributes was not supported by the driver or data source. </P> -# -# <P>The SQL_ATTR_USE_BOOKMARKS statement attribute was set to SQL_UB_VARIABLE, and the SQL_ATTR_CURSOR_TYPE statement attribute was set to a cursor type for which the driver does not support bookmarks.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT00</TD> -# <TD width=26%>Timeout expired</TD> -# <TD width=52%>The query timeout period expired before the data source returned the result set. The timeout period is set through <B>SQLSetStmtAttr</B>, SQL_ATTR_QUERY_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver associated with the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P>This function typically is used before statement execution to retrieve information about columns for a table or tables from the data source's catalog. <B>SQLColumns</B> can be used to retrieve data for all types of items returned by <B>SQLTables</B>. In addition to base tables, this may include (but is not limited to) views, synonyms, system tables, and so on. By contrast, the functions <B>SQLColAttribute</B> and <B>SQLDescribeCol</B> describe the columns in a result set and the function <B>SQLNumResultCols</B> returns the number of columns in a result set. For more information, see "<A HREF="odbcuses_of_catalog_data.htm">Uses of Catalog Data</A>" in Chapter 7: Catalog Functions.</P> -# -# <P class="indent"><b class="le">Note</b> For more information about the general use, arguments, and returned data of ODBC catalog functions, see <A HREF="odbccatalog_functions.htm">Chapter 7: Catalog Functions</A>.</P> -# -# <P><B>SQLColumns</B> returns the results as a standard result set, ordered by TABLE_CAT, TABLE_SCHEM, TABLE_NAME, and ORDINAL_POSITION. </P> -# -# <P class="indent"><b class="le">Note</b> When an application works with an ODBC 2.<I>x</I> driver, no ORDINAL_POSITION column is returned in the result set. As a result, when working with ODBC 2.<I>x</I> drivers, the order of the columns in the column list returned by <B>SQLColumns</B> is not necessarily the same as the order of the columns returned when the application performs a SELECT statement on all columns in that table.</P> -# -# <P class="indent"><b class="le">Note</b> <B>SQLColumns</B> might not return all columns. For example, a driver might not return information about pseudo-columns, such as Oracle ROWID. Applications can use any valid column, whether or not it is returned by <B>SQLColumns</B>. </P> -# -# <P class="indent">Some columns that can be returned by <B>SQLStatistics</B> are not returned by <B>SQLColumns</B>. For example, <B>SQLColumns</B> does not return the columns in an index created over an expression or filter, such as SALARY + BENEFITS or DEPT = 0012.</P> -# -# <P>The lengths of VARCHAR columns are not shown in the table; the actual lengths depend on the data source. To determine the actual lengths of the TABLE_CAT, TABLE_SCHEM, TABLE_NAME, and COLUMN_NAME columns, an application can call <B>SQLGetInfo</B> with the SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN, and SQL_MAX_COLUMN_NAME_LEN options.</P> -# -# <P>The following columns have been renamed for ODBC 3.<I>x</I>. The column name changes do not affect backward compatibility because applications bind by column number.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>ODBC 2.0 column</TH> -# <TH width=52%>ODBC 3.<I>x</I> column</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_QUALIFIER</TD> -# <TD width=52%>TABLE_CAT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_OWNER</TD> -# <TD width=52%>TABLE_SCHEM</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>PRECISION</TD> -# <TD width=52%>COLUMN_SIZE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>LENGTH</TD> -# <TD width=52%>BUFFER_LENGTH</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>SCALE</TD> -# <TD width=52%>DECIMAL_DIGITS</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>RADIX</TD> -# <TD width=52%>NUM_PREC_RADIX</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>The following columns have been added to the result set returned by <B>SQLColumns</B> for ODBC 3.<I>x</I>:</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TD width=50%> CHAR_OCTET_LENGTH </TD> -# <TD width=50%>ORDINAL_POSITION</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%> COLUMN_DEF</TD> -# <TD width=50%>SQL_DATA_TYPE</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%> IS_NULLABLE </TD> -# <TD width=50%>SQL_DATETIME_SUB</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>The following table lists the columns in the result set. Additional columns beyond column 18 (IS_NULLABLE) can be defined by the driver. An application should gain access to driver-specific columns by counting down from the end of the result set rather than specifying an explicit ordinal position. For more information, see "<A HREF="odbcdata_returned_by_catalog_functions.htm">Data Returned by Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=24%><BR> -# Column name</TH> -# <TH width=17%>Column<BR> -# number</TH> -# <TH width=16%><BR> -# Data type</TH> -# <TH width=43%><BR> -# Comments</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=24%>TABLE_CAT<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>1</TD> -# <TD width=16%>Varchar</TD> -# <TD width=43%>Catalog name; NULL if not applicable to the data source. If a driver supports catalogs for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have catalogs.</TD> -# </TR> - { name => "table_cat", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>TABLE_SCHEM<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>2</TD> -# <TD width=16%>Varchar </TD> -# <TD width=43%>Schema name; NULL if not applicable to the data source. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have schemas.</TD> -# </TR> - { name => "table_schem", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>TABLE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>3</TD> -# <TD width=16%>Varchar not NULL</TD> -# <TD width=43%>Table name.</TD> -# </TR> - { name => "table_name", - type => "varchar", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>COLUMN_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>4</TD> -# <TD width=16%>Varchar not NULL</TD> -# <TD width=43%>Column name. The driver returns an empty string for a column that does not have a name.</TD> -# </TR> - { name => "column_name", - type => "varchar", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>DATA_TYPE<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>5</TD> -# <TD width=16%>Smallint not NULL</TD> -# <TD width=43%>SQL data type. This can be an ODBC SQL data type or a driver-specific SQL data type. For datetime and interval data types, this column returns the concise data type (such as SQL_TYPE_DATE or SQL_INTERVAL_YEAR_TO_MONTH, rather than the nonconcise data type such as SQL_DATETIME or SQL_INTERVAL). For a list of valid ODBC SQL data types, see "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" in Appendix D: Data Types. For information about driver-specific SQL data types, see the driver's documentation. -# <P>The data types returned for ODBC 3.<I>x</I> and ODBC 2.<I>x</I> applications may be different. For more information, see "<A HREF="odbcbackward_compatibility_and_standards_compliance.htm">Backward Compatibility and Standards Compliance</A>" in Chapter 17: Programming Considerations.</P> -# </TD> -# </TR> - { name => "data_type", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>TYPE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>6</TD> -# <TD width=16%>Varchar not NULL</TD> -# <TD width=43%>Data source–dependent data type name; for example, "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR", or "CHAR ( ) FOR BIT DATA".</TD> -# </TR> - { name => "type_name", - type => "varchar", - length => 20, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>COLUMN_SIZE<BR> -# (ODBC 1.0) </TD> -# <TD width=17%>7</TD> -# <TD width=16%>Integer</TD> -# <TD width=43%>If DATA_TYPE is SQL_CHAR or SQL_VARCHAR, this column contains the maximum length in characters of the column. For datetime data types, this is the total number of characters required to display the value when converted to characters. For numeric data types, this is either the total number of digits or the total number of bits allowed in the column, according to the NUM_PREC_RADIX column. For interval data types, this is the number of characters in the character representation of the interval literal (as defined by the interval leading precision, see "<A HREF="odbcinterval_data_type_length.htm">Interval Data Type Length</A>" in Appendix D: Data Types). For more information, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "column_size", - type => "integer", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>BUFFER_LENGTH<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>8</TD> -# <TD width=16%>Integer</TD> -# <TD width=43%>The length in bytes of data transferred on an SQLGetData, SQLFetch, or SQLFetchScroll operation if SQL_C_DEFAULT is specified. For numeric data, this size may be different than the size of the data stored on the data source. This value might be different than COLUMN_SIZE column for character data. For more information about length, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types.</TD> -# </TR> - { name => "buffer_length", - type => "integer", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>DECIMAL_DIGITS<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>9</TD> -# <TD width=16%>Smallint</TD> -# <TD width=43%>The total number of significant digits to the right of the decimal point. For SQL_TYPE_TIME and SQL_TYPE_TIMESTAMP, this column contains the number of digits in the fractional seconds component. For the other data types, this is the decimal digits of the column on the data source. For interval data types that contain a time component, this column contains the number of digits to the right of the decimal point (fractional seconds). For interval data types that do not contain a time component, this column is 0. For more information about decimal digits, see "<A HREF="odbccolumn_size__decimal_digits__transfer_octet_length__and_display_size.htm">Column Size, Decimal Digits, Transfer Octet Length, and Display Size</A>" in Appendix D: Data Types. NULL is returned for data types where DECIMAL_DIGITS is not applicable.</TD> -# </TR> - { name => "decimal_digits", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>NUM_PREC_RADIX<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>10</TD> -# <TD width=16%>Smallint</TD> -# <TD width=43%>For numeric data types, either 10 or 2. If it is 10, the values in COLUMN_SIZE and DECIMAL_DIGITS give the number of decimal digits allowed for the column. For example, a DECIMAL(12,5) column would return a NUM_PREC_RADIX of 10, a COLUMN_SIZE of 12, and a DECIMAL_DIGITS of 5; a FLOAT column could return a NUM_PREC_RADIX of 10, a COLUMN_SIZE of 15, and a DECIMAL_DIGITS of NULL. -# <P>If it is 2, the values in COLUMN_SIZE and DECIMAL_DIGITS give the number of bits allowed in the column. For example, a FLOAT column could return a RADIX of 2, a COLUMN_SIZE of 53, and a DECIMAL_DIGITS of NULL.</P> -# -# <P>NULL is returned for data types where NUM_PREC_RADIX is not applicable.</P> -# </TD> -# </TR> - { name => "num_prec_radix", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>NULLABLE<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>11</TD> -# <TD width=16%>Smallint not NULL</TD> -# <TD width=43%>SQL_NO_NULLS if the column could not include NULL values. -# <P>SQL_NULLABLE if the column accepts NULL values.</P> -# -# <P>SQL_NULLABLE_UNKNOWN if it is not known whether the column accepts NULL values.</P> -# -# <P>The value returned for this column is different from the value returned for the IS_NULLABLE column. The NULLABLE column indicates with certainty that a column can accept NULLs, but cannot indicate with certainty that a column does not accept NULLs. The IS_NULLABLE column indicates with certainty that a column cannot accept NULLs, but cannot indicate with certainty that a column accepts NULLs.</P> -# </TD> -# </TR> - { name => "nullable", - type => "smallint", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>REMARKS<BR> -# (ODBC 1.0)</TD> -# <TD width=17%>12</TD> -# <TD width=16%>Varchar</TD> -# <TD width=43%>A description of the column.</TD> -# </TR> - { name => "remarks", - type => "varchar", - length => 200, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>COLUMN_DEF<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>13</TD> -# <TD width=16%>Varchar</TD> -# <TD width=43%>The default value of the column. The value in this column should be interpreted as a string if it is enclosed in quotation marks. -# <P>If NULL was specified as the default value, then this column is the word NULL, not enclosed in quotation marks. If the default value cannot be represented without truncation, then this column contains TRUNCATED, with no enclosing single quotation marks. If no default value was specified, then this column is NULL.</P> -# -# <P>The value of COLUMN_DEF can be used in generating a new column definition, except when it contains the value TRUNCATED.</P> -# </TD> -# </TR> - { name => "column_def", - type => "varchar", - length => 100, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>SQL_DATA_TYPE<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>14</TD> -# <TD width=16%>Smallint not NULL</TD> -# <TD width=43%>SQL data type, as it appears in the SQL_DESC_TYPE record field in the IRD. This can be an ODBC SQL data type or a driver-specific SQL data type. This column is the same as the DATA_TYPE column, with the exception of datetime and interval data types. This column returns the nonconcise data type (such as SQL_DATETIME or SQL_INTERVAL), rather than the concise data type (such as SQL_TYPE_DATE or SQL_INTERVAL_YEAR_TO_MONTH) for datetime and interval data types. If this column returns SQL_DATETIME or SQL_INTERVAL, the specific data type can be determined from the SQL_DATETIME_SUB column. For a list of valid ODBC SQL data types, see "<A HREF="odbcsql_data_types.htm">SQL Data Types</A>" in Appendix D: Data Types. For information about driver-specific SQL data types, see the driver's documentation. -# <P>The data types returned for ODBC 3.<I>x</I> and ODBC 2.<I>x</I> applications may be different. For more information, see "<A HREF="odbcbackward_compatibility_and_standards_compliance.htm">Backward Compatibility and Standards Compliance</A>" in Chapter 17: Programming Considerations.</P> -# </TD> -# </TR> - { name => "sql_data_type", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>SQL_DATETIME_SUB<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>15</TD> -# <TD width=16%>Smallint</TD> -# <TD width=43%>The subtype code for datetime and interval data types. For other data types, this column returns a NULL. For more information about datetime and interval subcodes, see "SQL_DESC_DATETIME_INTERVAL_CODE" in <A HREF="odbcsqlsetdescfield.htm">SQLSetDescField</A>.</TD> -# </TR> - { name => "sql_datetime_sub", - type => "smallint", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>CHAR_OCTET_LENGTH<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>16</TD> -# <TD width=16%>Integer</TD> -# <TD width=43%>The maximum length in bytes of a character or binary data type column. For all other data types, this column returns a NULL.</TD> -# </TR> - { name => "char_octet_length", - type => "integer", - length => undef, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>ORDINAL_POSITION<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>17</TD> -# <TD width=16%>Integer not NULL</TD> -# <TD width=43%>The ordinal position of the column in the table. The first column in the table is number 1.</TD> -# </TR> - { name => "ordinal_position", - type => "integer", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=24%>IS_NULLABLE<BR> -# (ODBC 3.0)</TD> -# <TD width=17%>18</TD> -# <TD width=16%>Varchar</TD> -# <TD width=43%>"NO" if the column does not include NULLs. -# <P>"YES" if the column could include NULLs.</P> -# -# <P>This column returns a zero-length string if nullability is unknown. </P> -# -# <P>ISO rules are followed to determine nullability. An ISO SQL–compliant DBMS cannot return an empty string. </P> -# -# <P>The value returned for this column is different from the value returned for the NULLABLE column. (See the description of the NULLABLE column.)</P> -# </TD> -# </TR> - { name => "is_nullable", - type => "varchar", - length => 3, - nullable => 1, - }, -# </table></div> -# <!--TS:--> -# <P class="label"><B>Code Example</B></P> -# -# <P>In the following example, an application declares buffers for the result set returned by <B>SQLColumns</B>. It calls <B>SQLColumns</B> to return a result set that describes each column in the EMPLOYEE table. It then calls <B>SQLBindCol</B> to bind the columns in the result set to the buffers. Finally, the application fetches each row of data with <B>SQLFetch</B> and processes it.</P> -# -# <PRE class="code">#define STR_LEN 128+1 -# #define REM_LEN 254+1 -# -# /* Declare buffers for result set data */ -# -# SQLCHAR szCatalog[STR_LEN], szSchema[STR_LEN]; -# SQLCHAR szTableName[STR_LEN], szColumnName[STR_LEN]; -# SQLCHAR szTypeName[STR_LEN], szRemarks[REM_LEN]; -# SQLCHAR szColumnDefault[STR_LEN], szIsNullable[STR_LEN]; -# SQLINTEGER ColumnSize, BufferLength, CharOctetLength, OrdinalPosition; -# SQLSMALLINT DataType, DecimalDigits, NumPrecRadix, Nullable; -# SQLSMALLINT SQLDataType, DatetimeSubtypeCode; -# SQLRETURN retcode; -# SQLHSTMT hstmt; -# -# /* Declare buffers for bytes available to return */ -# -# SQLINTEGER cbCatalog, cbSchema, cbTableName, cbColumnName; -# SQLINTEGER cbDataType, cbTypeName, cbColumnSize, cbBufferLength; -# SQLINTEGER cbDecimalDigits, cbNumPrecRadix, cbNullable, cbRemarks; -# SQLINTEGER cbColumnDefault, cbSQLDataType, cbDatetimeSubtypeCode, cbCharOctetLength; -# SQLINTEGER cbOrdinalPosition, cbIsNullable; -# -# retcode = SQLColumns(hstmt, -# NULL, 0, /* All catalogs */ -# NULL, 0, /* All schemas */ -# "CUSTOMERS", SQL_NTS, /* CUSTOMERS table */ -# NULL, 0); /* All columns */ -# -# if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { -# -# /* Bind columns in result set to buffers */ -# -# SQLBindCol(hstmt, 1, SQL_C_CHAR, szCatalog, STR_LEN,&cbCatalog); -# SQLBindCol(hstmt, 2, SQL_C_CHAR, szSchema, STR_LEN, &cbSchema); -# SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName); -# SQLBindCol(hstmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName); -# SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType); -# SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName); -# SQLBindCol(hstmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize); -# SQLBindCol(hstmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength); -# SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits); -# SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix); -# SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable); -# SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks); -# SQLBindCol(hstmt, 13, SQL_C_CHAR, szColumnDefault, STR_LEN, &cbColumnDefault); -# SQLBindCol(hstmt, 14, SQL_C_SSHORT, &SQLDataType, 0, &cbSQLDataType); -# SQLBindCol(hstmt, 15, SQL_C_SSHORT, &DatetimeSubtypeCode, 0, -# &cbDatetimeSubtypeCode); -# SQLBindCol(hstmt, 16, SQL_C_SLONG, &CharOctetLength, 0, &cbCharOctetLength); -# SQLBindCol(hstmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition); -# SQLBindCol(hstmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable); -# while(TRUE) { -# retcode = SQLFetch(hstmt); -# if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) { -# show_error( ); -# } -# if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ -# ; /* Process fetched data */ -# } else { -# break; -# } -# } -# }</PRE> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>For information about</TH> -# <TH width=50%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Binding a buffer to a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Canceling statement processing</TD> -# <TD width=50%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning privileges for a column or columns</TD> -# <TD width=50%><A HREF="odbcsqlcolumnprivileges.htm">SQLColumnPrivileges</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a block of data or scrolling through a result set</TD> -# <TD width=50%><A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching multiple rows of data</TD> -# <TD width=50%><A HREF="odbcsqlfetch.htm">SQLFetch</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning columns that uniquely identify a row, or columns automatically updated by a transaction</TD> -# <TD width=50%><A HREF="odbcsqlspecialcolumns.htm">SQLSpecialColumns</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning table statistics and indexes</TD> -# <TD width=50%><A HREF="odbcsqlstatistics.htm">SQLStatistics</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning a list of tables in a data source</TD> -# <TD width=50%><A HREF="odbcsqltables.htm">SQLTables</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning privileges for a table or tables</TD> -# <TD width=50%><A HREF="odbcsqltableprivileges.htm">SQLTablePrivileges</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -]; - -# -# odbcsqlprimarykeys.htm -# -$listWhat->{primarykeys} = [ -# <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -# <HTML DIR="LTR"><HEAD> -# <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -# <TITLE>SQLPrimaryKeys</TITLE> -# <SCRIPT SRC="/stylesheets/vs70link.js"></SCRIPT> -# <SCRIPT SRC="/stylesheets/vs70.js"></SCRIPT> -# <SCRIPT LANGUAGE="JScript" SRC="/stylesheets/odbc.js"></SCRIPT> -# </HEAD> -# <body topmargin=0 id="bodyID"> -# -# <div id="nsbanner"> -# <div id="bannertitle"> -# <TABLE CLASS="bannerparthead" CELLSPACING=0> -# <TR ID="hdr"> -# <TD CLASS="bannertitle" nowrap> -# ODBC Programmer's Reference -# </TD><TD valign=middle><a href="#Feedback"><IMG name="feedb" onclick=EMailStream(SDKFeedB) style="CURSOR: hand;" hspace=15 alt="" src="/stylesheets/mailto.gif" align=right></a></TD> -# </TR> -# </TABLE> -# </div> -# </div> -# <DIV id="nstext" valign="bottom"> -# -# <H1><A NAME="odbcsqlprimarykeys"></A>SQLPrimaryKeys</H1> -# -# <P class="label"><B>Conformance</B></P> -# -# <P>Version Introduced: ODBC 1.0<BR> -# Standards Compliance: ODBC</P> -# -# <P class="label"><B>Summary</B></P> -# -# <P><B>SQLPrimaryKeys</B> returns the column names that make up the primary key for a table. The driver returns the information as a result set. This function does not support returning primary keys from multiple tables in a single call.</P> -# -# <P class="label"><B>Syntax</B></P> -# -# <PRE class="syntax">SQLRETURN <B>SQLPrimaryKeys</B>( -# SQLHSTMT <I>StatementHandle</I>, -# SQLCHAR * <I>CatalogName</I>, -# SQLSMALLINT <I>NameLength1</I>, -# SQLCHAR * <I>SchemaName</I>, -# SQLSMALLINT <I>NameLength2</I>, -# SQLCHAR * <I>TableName</I>, -# SQLSMALLINT <I>NameLength3</I>);</PRE> -# -# <P class="label"><B>Arguments</B> -# -# <DL> -# <DT><I>StatementHandle</I></DT> -# -# <DD>[Input]<BR> -# Statement handle.</dd> -# -# <DT><I>CatalogName</I></DT> -# -# <DD>[Input]<BR> -# Catalog name. If a driver supports catalogs for some tables but not for others, such as when the driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have catalogs. <I>CatalogName </I>cannot contain a string search pattern. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>CatalogName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>CatalogName</I> is an ordinary argument; it is treated literally, and its case is significant. For more information, see "<A HREF="odbcarguments_in_catalog_functions.htm">Arguments in Catalog Functions</A>" in Chapter 7: Catalog Functions. -# </dd> -# -# <DT><I>NameLength1</I></DT> -# -# <DD>[Input]<BR> -# Length in bytes of *<I>CatalogName</I>.</dd> -# -# <DT><I>SchemaName</I></DT> -# -# <DD>[Input]<BR> -# Schema name. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, an empty string ("") denotes those tables that do not have schemas. <I>SchemaName </I>cannot contain a string search pattern. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>SchemaName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>SchemaName</I> is an ordinary argument; it is treated literally, and its case is not significant. -# </dd> -# -# <DT><I>NameLength2</I></DT> -# -# <DD>[Input]<BR> -# Length in bytes of *<I>SchemaName</I>.</dd> -# -# <DT><I>TableName</I></DT> -# -# <DD>[Input]<BR> -# Table name. This argument cannot be a null pointer. <I>TableName </I>cannot contain a string search pattern. -# -# <P>If the SQL_ATTR_METADATA_ID statement attribute is set to SQL_TRUE, <I>TableName</I> is treated as an identifier and its case is not significant. If it is SQL_FALSE, <I>TableName</I> is an ordinary argument; it is treated literally, and its case is not significant. -# </dd> -# -# <DT><I>NameLength3</I></DT> -# -# <DD>[Input]<BR> -# Length in bytes of *<I>TableName</I>.</dd> -# </DL> -# -# <P class="label"><B>Returns</B></P> -# -# <P>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.</P> -# -# <P class="label"><B>Diagnostics</B></P> -# -# <P>When <B>SQLPrimaryKeys</B> returns SQL_ERROR or SQL_SUCCESS_WITH_INFO, an associated SQLSTATE value can be obtained by calling <B>SQLGetDiagRec</B> with a <I>HandleType</I> of SQL_HANDLE_STMT and a <I>Handle</I> of <I>StatementHandle</I>. The following table lists the SQLSTATE values commonly returned by <B>SQLPrimaryKeys</B> and explains each one in the context of this function; the notation "(DM)" precedes the descriptions of SQLSTATEs returned by the Driver Manager. The return code associated with each SQLSTATE value is SQL_ERROR, unless noted otherwise.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=22%>SQLSTATE</TH> -# <TH width=26%>Error</TH> -# <TH width=52%>Description</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>01000</TD> -# <TD width=26%>General warning</TD> -# <TD width=52%>Driver-specific informational message. (Function returns SQL_SUCCESS_WITH_INFO.)</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>08S01</TD> -# <TD width=26%>Communication link failure</TD> -# <TD width=52%>The communication link between the driver and the data source to which the driver was connected failed before the function completed processing.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>24000</TD> -# <TD width=26%>Invalid cursor state</TD> -# <TD width=52%>(DM) A cursor was open on the <I>StatementHandle</I>, and <B>SQLFetch</B> or <B>SQLFetchScroll</B> had been called. -# <P>A cursor was open on the <I>StatementHandle</I>, but <B>SQLFetch</B> or <B>SQLFetchScroll</B> had not been called.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40001</TD> -# <TD width=26%>Serialization failure</TD> -# <TD width=52%>The transaction was rolled back due to a resource deadlock with another transaction.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>40003</TD> -# <TD width=26%>Statement completion unknown</TD> -# <TD width=52%>The associated connection failed during the execution of this function, and the state of the transaction cannot be determined.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY000</TD> -# <TD width=26%>General error</TD> -# <TD width=52%>An error occurred for which there was no specific SQLSTATE and for which no implementation-specific SQLSTATE was defined. The error message returned by <B>SQLGetDiagRec</B> in the <I>*MessageText</I> buffer describes the error and its cause.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY001</TD> -# <TD width=26%>Memory allocation error</TD> -# <TD width=52%>The driver was unable to allocate memory required to support execution or completion of the function.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY008</TD> -# <TD width=26%>Operation canceled</TD> -# <TD width=52%>Asynchronous processing was enabled for the <I>StatementHandle</I>. The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I>. Then the function was called again on the <I>StatementHandle</I>. -# <P>The function was called, and before it completed execution, <B>SQLCancel</B> was called on the <I>StatementHandle</I> from a different thread in a multithread application.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY009</TD> -# <TD width=26%>Invalid use of null pointer</TD> -# <TD width=52%>(DM) The <I>TableName</I> argument was a null pointer. -# <P>The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, the <I>CatalogName</I> argument was a null pointer, and <B>SQLGetInfo</B> with the SQL_CATALOG_NAME information type returns that catalog names are supported.</P> -# -# <P>(DM) The SQL_ATTR_METADATA_ID statement attribute was set to SQL_TRUE, and the <I>SchemaName</I> argument was a null pointer.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY010</TD> -# <TD width=26%>Function sequence error</TD> -# <TD width=52%>(DM) An asynchronously executing function (not this one) was called for the <I>StatementHandle</I> and was still executing when this function was called. -# <P>(DM) <B>SQLExecute</B>, <B>SQLExecDirect</B>, <B>SQLBulkOperations</B>, or <B>SQLSetPos</B> was called for the <I>StatementHandle</I> and returned SQL_NEED_DATA. This function was called before data was sent for all data-at-execution parameters or columns.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY013</TD> -# <TD width=26%>Memory management error</TD> -# <TD width=52%>The function call could not be processed because the underlying memory objects could not be accessed, possibly because of low memory conditions.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HY090</TD> -# <TD width=26%>Invalid string or buffer length</TD> -# <TD width=52%>(DM) The value of one of the name length arguments was less than 0 but not equal to SQL_NTS, and the associated name argument is not a null pointer. -# <P>The value of one of the name length arguments exceeded the maximum length value for the corresponding name.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYC00</TD> -# <TD width=26%>Optional feature not implemented</TD> -# <TD width=52%>A catalog was specified, and the driver or data source does not support catalogs. -# <P>A schema was specified and the driver or data source does not support schemas.</P> -# -# <P>The combination of the current settings of the SQL_ATTR_CONCURRENCY and SQL_ATTR_CURSOR_TYPE statement attributes was not supported by the driver or data source.</P> -# -# <P>The SQL_ATTR_USE_BOOKMARKS statement attribute was set to SQL_UB_VARIABLE, and the SQL_ATTR_CURSOR_TYPE statement attribute was set to a cursor type for which the driver does not support bookmarks.</P> -# </TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT00</TD> -# <TD width=26%>Timeout expired</TD> -# <TD width=52%>The timeout period expired before the data source returned the requested result set. The timeout period is set through <B>SQLSetStmtAttr</B>, SQL_ATTR_QUERY_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>HYT01</TD> -# <TD width=26%>Connection timeout expired</TD> -# <TD width=52%>The connection timeout period expired before the data source responded to the request. The connection timeout period is set through <B>SQLSetConnectAttr</B>, SQL_ATTR_CONNECTION_TIMEOUT.</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=22%>IM001</TD> -# <TD width=26%>Driver does not support this function</TD> -# <TD width=52%>(DM) The driver associated with the <I>StatementHandle</I> does not support the function.</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P class="label"><B>Comments</B></P> -# -# <P><B>SQLPrimaryKeys</B> returns the results as a standard result set, ordered by TABLE_CAT, TABLE_SCHEM, TABLE_NAME, and KEY_SEQ. For information about how this information might be used, see "<A HREF="odbcuses_of_catalog_data.htm">Uses of Catalog Data</A>" in Chapter 7: Catalog Functions.</P> -# -# <P>The following columns have been renamed for ODBC 3.<I>x</I>. The column name changes do not affect backward compatibility because applications bind by column number.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=48%>ODBC 2.0 column</TH> -# <TH width=52%>ODBC 3.<I>x</I> column</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_QUALIFIER</TD> -# <TD width=52%>TABLE_CAT</TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=48%>TABLE_OWNER</TD> -# <TD width=52%>TABLE_SCHEM</TD> -# </TR> -# </table></div> -# <!--TS:--> -# <P>To determine the actual lengths of the TABLE_CAT, TABLE_SCHEM, TABLE_NAME, and COLUMN_NAME columns, call <B>SQLGetInfo</B> with the SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN, and SQL_MAX_COLUMN_NAME_LEN options.</P> -# -# <P class="indent"><b class="le">Note</b> For more information about the general use, arguments, and returned data of ODBC catalog functions, see <A HREF="odbccatalog_functions.htm">Chapter 7: Catalog Functions</A>.</P> -# -# <P>The following table lists the columns in the result set. Additional columns beyond column 6 (PK_NAME) can be defined by the driver. An application should gain access to driver-specific columns by counting down from the end of the result set rather than specifying an explicit ordinal position. For more information, see "<A HREF="odbcdata_returned_by_catalog_functions.htm">Data Returned by Catalog Functions</A>" in Chapter 7: Catalog Functions.</P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=27%><BR> -# Column name</TH> -# <TH width=15%>Column number</TH> -# <TH width=16%><BR> -# Data type</TH> -# <TH width=42%><BR> -# Comments</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_CAT<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>1</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Primary key table catalog name; NULL if not applicable to the data source. If a driver supports catalogs for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have catalogs.</TD> -# </TR> - { name => "table_cat", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_SCHEM<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>2</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Primary key table schema name; NULL if not applicable to the data source. If a driver supports schemas for some tables but not for others, such as when the driver retrieves data from different DBMSs, it returns an empty string ("") for those tables that do not have schemas.</TD> -# </TR> - { name => "table_schem", - type => "varchar", - length => 16, - nullable => 1, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>TABLE_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>3</TD> -# <TD width=16%>Varchar<BR> -# not NULL</TD> -# <TD width=42%>Primary key table name.</TD> -# </TR> - { name => "table_name", - type => "varchar", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>COLUMN_NAME<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>4</TD> -# <TD width=16%>Varchar<BR> -# not NULL</TD> -# <TD width=42%>Primary key column name. The driver returns an empty string for a column that does not have a name.</TD> -# </TR> - { name => "column_name", - type => "varchar", - length => 16, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>KEY_SEQ<BR> -# (ODBC 1.0)</TD> -# <TD width=15%>5</TD> -# <TD width=16%>Smallint<BR> -# not NULL</TD> -# <TD width=42%>Column sequence number in key (starting with 1).</TD> -# </TR> - { name => "key_seq", - type => "smallint", - length => undef, - nullable => 0, - }, -# -# <TR VALIGN="top"> -# <TD width=27%>PK_NAME<BR> -# (ODBC 2.0)</TD> -# <TD width=15%>6</TD> -# <TD width=16%>Varchar</TD> -# <TD width=42%>Primary key name. NULL if not applicable to the data source.</TD> -# </TR> - { name => "pk_name", - type => "varchar", - length => 16, - nullable => 1, - }, -# </table></div> -# <!--TS:--> -# <P class="label"><B>Code Example</B></P> -# -# <P>See <A HREF="odbcsqlforeignkeys.htm">SQLForeignKeys</A>.</P> -# -# <P class="label"><B>Related Functions</B></P> -# <!--TS:--><div class="tablediv"><table> -# -# <TR VALIGN="top"> -# <TH width=50%>For information about</TH> -# <TH width=50%>See</TH> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Binding a buffer to a column in a result set</TD> -# <TD width=50%><A HREF="odbcsqlbindcol.htm">SQLBindCol</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Canceling statement processing</TD> -# <TD width=50%><A HREF="odbcsqlcancel.htm">SQLCancel</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a block of data or scrolling through a result set</TD> -# <TD width=50%><A HREF="odbcsqlfetchscroll.htm">SQLFetchScroll</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Fetching a single row or a block of data in a forward-only direction</TD> -# <TD width=50%><A HREF="odbcsqlfetch.htm">SQLFetch</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning the columns of foreign keys</TD> -# <TD width=50%><A HREF="odbcsqlforeignkeys.htm">SQLForeignKeys</A></TD> -# </TR> -# -# <TR VALIGN="top"> -# <TD width=50%>Returning table statistics and indexes</TD> -# <TD width=50%><A HREF="odbcsqlstatistics.htm">SQLStatistics</A></TD> -# </TR> -# </table></div> -# <!--TS:--><H4><A NAME="feedback"></A></H4> -# <SPAN id="SDKFeedB"></SPAN> -# </div> -# -# </BODY> -# </HTML> -]; - -my $list = $listWhat->{$what} or die "$what?"; -my $i4 = " " x 4; -if ($opt eq '-l') { - print join(", ", map($_->{name}, @$list)), "\n"; - exit; -} -if ($opt eq '-c') { - my $pos = 0; - for my $p (@$list) { - print "${i4}ConnSys::Column::Column(\n"; - $pos++; - print "\t$pos,\n"; - print "\t\"" . uc($p->{name}) . "\",\n"; - print "\tfalse,\n"; - print "\tNdbType(NdbType::"; - if ($p->{type} eq 'varchar') { - print "String, 8, $p->{length}"; - } else { - print "Signed, 32, 1"; - } - print ", " . ($p->{nullable} ? "true" : "false"); - print ")\n"; - print "${i4}),\n"; - } - exit; -} -print "$opt?\n"; - -# vim: set sw=4: diff --git a/storage/ndb/src/old_files/client/odbc/docs/type.txt b/storage/ndb/src/old_files/client/odbc/docs/type.txt deleted file mode 100644 index d7b391afc553122da2fc62427a00df29d0b3d0c6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/docs/type.txt +++ /dev/null @@ -1,333 +0,0 @@ -ODBC Programmer's Reference -****** SQL Data Types ****** -Each DBMS defines its own SQL types. Each ODBC driver exposes only those SQL -data types that the associated DBMS defines. How a driver maps DBMS SQL types -to the ODBC-defined SQL type identifiers and how a driver maps DBMS SQL types -to its own driver-specific SQL type identifiers are returned through a call to -SQLGetTypeInfo. A driver also returns the SQL data types when describing the -data types of columns and parameters through calls to SQLColAttribute, -SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns, and -SQLSpecialColumns. -Note The SQL data types are contained in the SQL_DESC_ CONCISE_TYPE, -SQL_DESC_TYPE, and SQL_DESC_DATETIME_INTERVAL_CODE fields of the implementation -descriptors. Characteristics of the SQL data types are contained in the -SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH, and SQL_DESC_OCTET_LENGTH -fields of the implementation descriptors. For more information, see "Data_Type -Identifiers_and_Descriptors" later in this appendix. -A given driver and data source do not necessarily support all of the SQL data -types defined in this appendix. A driver's support for SQL data types depends -on the level of SQL-92 that the driver conforms to. To determine the level of -SQL-92 grammar supported by the driver, an application calls SQLGetInfo with -the SQL_SQL_CONFORMANCE information type. Furthermore, a given driver and data -source may support additional, driver-specific SQL data types. To determine -which data types a driver supports, an application calls SQLGetTypeInfo. For -information about driver-specific SQL data types, see the driver's -documentation. For information about the data types in a specific data source, -see the documentation for that data source. -Important The tables throughout this appendix are only guidelines and show -commonly used names, ranges, and limits of SQL data types. A given data source -might support only some of the listed data types, and the characteristics of -the supported data types can differ from those listed. -The following table lists valid SQL type identifiers for all SQL data types. -The table also lists the name and description of the corresponding data type -from SQL-92 (if one exists). -SQL type identifier[1] Typical SQL data Typical type description - type[2] -SQL_CHAR CHAR(n) Character string of fixed - string length n. -SQL_VARCHAR VARCHAR(n) Variable-length character - string with a maximum - string length n. -SQL_LONGVARCHAR LONG VARCHAR Variable length character - data. Maximum length is - data source–dependent.[9] -SQL_WCHAR WCHAR(n) Unicode character string - of fixed string length n -SQL_WVARCHAR VARWCHAR(n) Unicode variable-length - character string with a - maximum string length n -SQL_WLONGVARCHAR LONGWVARCHAR Unicode variable-length - character data. Maximum - length is data - source–dependent -SQL_DECIMAL DECIMAL(p,s) Signed, exact, numeric - value with a precision of - at least p and scale s. - (The maximum precision is - driver-defined.) - (1 <= p <= 15; s <= p). - [4] -SQL_NUMERIC NUMERIC(p,s) Signed, exact, numeric - value with a precision p - and scale s - (1 <= p <= 15; s <= p). - [4] -SQL_SMALLINT SMALLINT Exact numeric value with - precision 5 and scale 0 - (signed: - –32,768 <= n <= 32,767, - unsigned: - 0 <= n <= 65,535)[3]. -SQL_INTEGER INTEGER Exact numeric value with - precision 10 and scale 0 - (signed: - –2[31] <= n <= 2[31] – 1, - unsigned: - 0 <= n <= 2[32] – 1)[3]. -SQL_REAL REAL Signed, approximate, - numeric value with a - binary precision 24 (zero - or absolute value 10[–38] - to 10[38]). -SQL_FLOAT FLOAT(p) Signed, approximate, - numeric value with a - binary precision of at - least p. (The maximum - precision is driver- - defined.)[5] -SQL_DOUBLE DOUBLE PRECISION Signed, approximate, - numeric value with a - binary precision 53 (zero - or absolute value 10 - [–308] to 10[308]). -SQL_BIT BIT Single bit binary data. - [8] -SQL_TINYINT TINYINT Exact numeric value with - precision 3 and scale 0 - (signed: - –128 <= n <= 127, - unsigned: - 0 <= n <= 255)[3]. -SQL_BIGINT BIGINT Exact numeric value with - precision 19 (if signed) - or 20 (if unsigned) and - scale 0 - (signed: - –2[63] <= n <= 2[63] – 1, - - unsigned: - 0 <= n <= 2[64] – 1)[3], - [9]. -SQL_BINARY BINARY(n) Binary data of fixed - length n.[9] -SQL_VARBINARY VARBINARY(n) Variable length binary - data of maximum length n. - The maximum is set by the - user.[9] -SQL_LONGVARBINARY LONG VARBINARY Variable length binary - data. Maximum length is - data source–dependent.[9] -SQL_TYPE_DATE[6] DATE Year, month, and day - fields, conforming to the - rules of the Gregorian - calendar. (See - "Constraints_of_the - Gregorian_Calendar," - later in this appendix.) -SQL_TYPE_TIME[6] TIME(p) Hour, minute, and second - fields, with valid values - for hours of 00 to 23, - valid values for minutes - of 00 to 59, and valid - values for seconds of 00 - to 61. Precision p - indicates the seconds - precision. -SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Year, month, day, hour, - minute, and second - fields, with valid values - as defined for the DATE - and TIME data types. -SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Number of months between - two dates; p is the - interval leading - precision. -SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Number of years between - two dates; p is the - interval leading - precision. -SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO Number of years and - MONTH months between two dates; - p is the interval leading - precision. -SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Number of days between - two dates; p is the - interval leading - precision. -SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Number of hours between - two date/times; p is the - interval leading - precision. -SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Number of minutes between - two date/times; p is the - interval leading - precision. -SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Number of seconds between - two date/times; p is the - interval leading - precision and q is the - interval seconds - precision. -SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR Number of days/hours - between two date/times; p - is the interval leading - precision. -SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO Number of days/hours/ - MINUTE minutes between two date/ - times; p is the interval - leading precision. -SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO Number of days/hours/ - SECOND(q) minutes/seconds between - two date/times; p is the - interval leading - precision and q is the - interval seconds - precision. -SQL_INTERVAL_HOUR_TO_MINUTE INTERVAL HOUR(p) TO Number of hours/minutes -[7] MINUTE between two date/times; p - is the interval leading - precision. -SQL_INTERVAL_HOUR_TO_SECOND INTERVAL HOUR(p) TO Number of hours/minutes/ -[7] SECOND(q) seconds between two date/ - times; p is the interval - leading precision and q - is the interval seconds - precision. -SQL_INTERVAL_MINUTE_TO_SECOND INTERVAL MINUTE(p) TO Number of minutes/seconds -[7] SECOND(q) between two date/times; p - is the interval leading - precision and q is the - interval seconds - precision. -SQL_GUID GUID Fixed length Globally - Unique Identifier. -[1] This is the value returned in the DATA_TYPE column by a call to -SQLGetTypeInfo. -[2] This is the value returned in the NAME and CREATE PARAMS column by a call -to SQLGetTypeInfo. The NAME column returns the designation—for example, -CHAR—while the CREATE PARAMS column returns a comma-separated list of creation -parameters such as precision, scale, and length. -[3] An application uses SQLGetTypeInfo or SQLColAttribute to determine if a -particular data type or a particular column in a result set is unsigned. -[4] SQL_DECIMAL and SQL_NUMERIC data types differ only in their precision. -The precision of a DECIMAL(p,s) is an implementation-defined decimal precision -that is no less than p, while the precision of a NUMERIC(p,s) is exactly equal -to p. -[5] Depending on the implementation, the precision of SQL_FLOAT can be either -24 or 53: if it is 24, the SQL_FLOAT data type is the same as SQL_REAL; if it -is 53, the SQL_FLOAT data type is the same as SQL_DOUBLE. -[6] In ODBC 3.x, the SQL date, time, and timestamp data types are -SQL_TYPE_DATE, SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP, respectively; in ODBC -2.x, the data types are SQL_DATE, SQL_TIME, and SQL_TIMESTAMP. -[7] For more information on the interval SQL data types, see the "Interval -Data_Types" section, later in this appendix. -[8] The SQL_BIT data type has different characteristics than the BIT type in -SQL-92. -[9] This data type has no corresponding data type in SQL-92. -ODBC Programmer's Reference -************ CC DDaattaa TTyyppeess ************ -ODBC C data types indicate the data type of C buffers used to store data in the -application. -All drivers must support all C data types. This is required because all drivers -must support all C types to which SQL types that they support can be converted, -and all drivers support at least one character SQL type. Because the character -SQL type can be converted to and from all C types, all drivers must support all -C types. -The C data type is specified in the SSQQLLBBiinnddCCoolland SSQQLLGGeettDDaattaa functions with the -TargetType argument and in the SSQQLLBBiinnddPPaarraammeetteerr function with the ValueType -argument. It can also be specified by calling SSQQLLSSeettDDeessccFFiieelldd to set the -SQL_DESC_CONCISE_TYPE field of an ARD or APD, or by calling SSQQLLSSeettDDeessccRReecc with -the Type argument (and the SubType argument if needed) and the DescriptorHandle -argument set to the handle of an ARD or APD. -The following table lists valid type identifiers for the C data types. The -table also lists the ODBC C data type that corresponds to each identifier and -the definition of this data type. -CC ttyyppee iiddeennttiiffiieerr OODDBBCC CC ttyyppeeddeeff CC ttyyppee -SQL_C_CHAR SQLCHAR * unsigned char * -SQL_C_SSHORT[j] SQLSMALLINT short int -SQL_C_USHORT[j] SQLUSMALLINT unsigned short int -SQL_C_SLONG[j] SQLINTEGER long int -SQL_C_ULONG[j] SQLUINTEGER unsigned long int -SQL_C_FLOAT SQLREAL float -SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT double -SQL_C_BIT SQLCHAR unsigned char -SQL_C_STINYINT[j] SQLSCHAR signed char -SQL_C_UTINYINT[j] SQLCHAR unsigned char -SQL_C_SBIGINT SQLBIGINT _int64[h] -SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h] -SQL_C_BINARY SQLCHAR * unsigned char * -SQL_C_BOOKMARK[i] BOOKMARK unsigned long int[d] -SQL_C_VARBOOKMARK SQLCHAR * unsigned char * -SQL_C_TYPE_DATE[c] SQL_DATE_STRUCT struct tagDATE_STRUCT { - SQLSMALLINT year; - SQLUSMALLINT month; - SQLUSMALLINT day; - } DATE_STRUCT;[a] -SQL_C_TYPE_TIME[c] SQL_TIME_STRUCT struct tagTIME_STRUCT { - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - } TIME_STRUCT;[a] -SQL_C_TYPE_TIMESTAMP[c] SQL_TIMESTAMP_STRUCT struct tagTIMESTAMP_STRUCT { - SQLSMALLINT year; - SQLUSMALLINT month; - SQLUSMALLINT day; - SQLUSMALLINT hour; - SQLUSMALLINT minute; - SQLUSMALLINT second; - SQLUINTEGER fraction;[b] - } TIMESTAMP_STRUCT;[a] -SQL_C_NUMERIC SQL_NUMERIC_STRUCT struct tagSQL_NUMERIC_STRUCT { - SQLCHAR precision; - SQLSCHAR scale; - SQLCHAR sign[g]; - SQLCHAR - val - [SQL_MAX_NUMERIC_L EN]; - [e], [f] - } SQL_NUMERIC_STRUCT; -SQL_C_GUID SQLGUID struct tagSQLGUID { - DWORD Data1; - WORD Data2; - WORD Data3; - BYTE Data4[8]; - } SQLGUID;[k] -All C interval data SQL_INTERVAL_STRUCT See the "_C_ _I_n_t_e_r_v_a_l_ _S_t_r_u_c_t_u_r_e" -types section, later in this appendix. -[a] The values of the year, month, day, hour, minute, and second fields in -the datetime C data types must conform to the constraints of the Gregorian -calendar. (See "_C_o_n_s_t_r_a_i_n_t_s_ _o_f_ _t_h_e_ _G_r_e_g_o_r_i_a_n_ _C_a_l_e_n_d_a_r" later in this appendix.) -[b] The value of the fraction field is the number of billionths of a second -and ranges from 0 through 999,999,999 (1 less than 1 billion). For example, the -value of the fraction field for a half-second is 500,000,000, for a thousandth -of a second (one millisecond) is 1,000,000, for a millionth of a second (one -microsecond) is 1,000, and for a billionth of a second (one nanosecond) is 1. -[c] In ODBC 2.x, the C date, time, and timestamp data types are SQL_C_DATE, -SQL_C_TIME, and SQL_C_TIMESTAMP. -[d] ODBC 3.x applications should use SQL_C_VARBOOKMARK, not SQL_C_BOOKMARK. -When an ODBC 3.x application works with an ODBC 2.x driver, the ODBC 3.x Driver -Manager will map SQL_C_VARBOOKMARK to SQL_C_BOOKMARK. -[e] A number is stored in the val field of the SQL_NUMERIC_STRUCT structure -as a scaled integer, in little endian mode (the leftmost byte being the least- -significant byte). For example, the number 10.001 base 10, with a scale of 4, -is scaled to an integer of 100010. Because this is 186AA in hexadecimal format, -the value in SQL_NUMERIC_STRUCT would be "AA 86 01 00 00 … 00", with the number -of bytes defined by the SQL_MAX_NUMERIC_LEN ##ddeeffiinnee. -[f] The precision and scale fields of the SQL_C_NUMERIC data type are never -used for input from an application, only for output from the driver to the -application. When the driver writes a numeric value into the -SQL_NUMERIC_STRUCT, it will use its own driver-specific default as the value -for the precision field, and it will use the value in the SQL_DESC_SCALE field -of the application descriptor (which defaults to 0) for the scale field. An -application can provide its own values for precision and scale by setting the -SQL_DESC_PRECISION and SQL_DESC_SCALE fields of the application descriptor. -[g] The sign field is 1 if positive, 0 if negative. -[h] _int64 might not be supplied by some compilers. -[i] _SQL_C_BOOKMARK has been deprecated in ODBC 3.x. -[j] _SQL_C_SHORT, SQL_C_LONG, and SQL_C_TINYINT have been replaced in ODBC by -signed and unsigned types: SQL_C_SSHORT and SQL_C_USHORT, SQL_C_SLONG and -SQL_C_ULONG, and SQL_C_STINYINT and SQL_C_UTINYINT. An ODBC 3.x driver that -should work with ODBC 2.x applications should support SQL_C_SHORT, SQL_C_LONG, -and SQL_C_TINYINT, because when they are called, the Driver Manager passes them -through to the driver. -[k] SQL_C_GUID can be converted only to SQL_CHAR or SQL_WCHAR. diff --git a/storage/ndb/src/old_files/client/odbc/driver/Func.data b/storage/ndb/src/old_files/client/odbc/driver/Func.data deleted file mode 100644 index c32671e1135cfeed460764a98d6743cddc4af88a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/Func.data +++ /dev/null @@ -1,2822 +0,0 @@ -$func = { - SQLAllocConnect => { - type => 'SQLRETURN', - name => 'SQLAllocConnect', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLHDBC', - ptr => 1, - name => 'ConnectionHandle', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLAllocEnv => { - type => 'SQLRETURN', - name => 'SQLAllocEnv', - param => [ - { - type => 'SQLHENV', - ptr => 1, - name => 'EnvironmentHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLAllocHandle => { - type => 'SQLRETURN', - name => 'SQLAllocHandle', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'HandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'InputHandle', - index => 1, - }, - { - type => 'SQLHANDLE', - ptr => 1, - name => 'OutputHandle', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLAllocHandleStd => { - type => 'SQLRETURN', - name => 'SQLAllocHandleStd', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'fHandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'hInput', - index => 1, - }, - { - type => 'SQLHANDLE', - ptr => 1, - name => 'phOutput', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLAllocStmt => { - type => 'SQLRETURN', - name => 'SQLAllocStmt', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLHSTMT', - ptr => 1, - name => 'StatementHandle', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLBindCol => { - type => 'SQLRETURN', - name => 'SQLBindCol', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ColumnNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'TargetType', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'TargetValue', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 4, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StrLen_or_Ind', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLBindParam => { - type => 'SQLRETURN', - name => 'SQLBindParam', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ParameterNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ValueType', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ParameterType', - index => 3, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'LengthPrecision', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ParameterScale', - index => 5, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'ParameterValue', - index => 6, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StrLen_or_Ind', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLBindParameter => { - type => 'SQLRETURN', - name => 'SQLBindParameter', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ipar', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'fParamType', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'fCType', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'fSqlType', - index => 4, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'cbColDef', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ibScale', - index => 6, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'rgbValue', - index => 7, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'cbValueMax', - index => 8, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'pcbValue', - index => 9, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLBrowseConnect => { - type => 'SQLRETURN', - name => 'SQLBrowseConnect', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'hdbc', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szConnStrIn', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbConnStrIn', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szConnStrOut', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbConnStrOutMax', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcbConnStrOut', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLBulkOperations => { - type => 'SQLRETURN', - name => 'SQLBulkOperations', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'Operation', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLCancel => { - type => 'SQLRETURN', - name => 'SQLCancel', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLCloseCursor => { - type => 'SQLRETURN', - name => 'SQLCloseCursor', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLColAttribute => { - type => 'SQLRETURN', - name => 'SQLColAttribute', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ColumnNumber', - index => 1, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'FieldIdentifier', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'CharacterAttribute', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'StringLength', - index => 5, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'NumericAttribute', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLColAttributes => { - type => 'SQLRETURN', - name => 'SQLColAttributes', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'icol', - index => 1, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fDescType', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'rgbDesc', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbDescMax', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcbDesc', - index => 5, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'pfDesc', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLColumnPrivileges => { - type => 'SQLRETURN', - name => 'SQLColumnPrivileges', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szTableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbTableName', - index => 6, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szColumnName', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbColumnName', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLColumns => { - type => 'SQLRETURN', - name => 'SQLColumns', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength1', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'SchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength2', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'TableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength3', - index => 6, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'ColumnName', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength4', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLConnect => { - type => 'SQLRETURN', - name => 'SQLConnect', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'ServerName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength1', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'UserName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength2', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'Authentication', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength3', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLCopyDesc => { - type => 'SQLRETURN', - name => 'SQLCopyDesc', - param => [ - { - type => 'SQLHDESC', - ptr => 0, - name => 'SourceDescHandle', - index => 0, - }, - { - type => 'SQLHDESC', - ptr => 0, - name => 'TargetDescHandle', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLDataSources => { - type => 'SQLRETURN', - name => 'SQLDataSources', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Direction', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'ServerName', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength1', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'NameLength1', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'Description', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength2', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'NameLength2', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLDescribeCol => { - type => 'SQLRETURN', - name => 'SQLDescribeCol', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ColumnNumber', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'ColumnName', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'NameLength', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'DataType', - index => 5, - }, - { - type => 'SQLUINTEGER', - ptr => 1, - name => 'ColumnSize', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'DecimalDigits', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'Nullable', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLDescribeParam => { - type => 'SQLRETURN', - name => 'SQLDescribeParam', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ipar', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pfSqlType', - index => 2, - }, - { - type => 'SQLUINTEGER', - ptr => 1, - name => 'pcbParamDef', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pibScale', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pfNullable', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLDisconnect => { - type => 'SQLRETURN', - name => 'SQLDisconnect', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLDriverConnect => { - type => 'SQLRETURN', - name => 'SQLDriverConnect', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'hdbc', - index => 0, - }, - { - type => 'SQLHWND', - ptr => 0, - name => 'hwnd', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szConnStrIn', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbConnStrIn', - index => 3, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szConnStrOut', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbConnStrOutMax', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcbConnStrOut', - index => 6, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fDriverCompletion', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLDrivers => { - type => 'SQLRETURN', - name => 'SQLDrivers', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'henv', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fDirection', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szDriverDesc', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbDriverDescMax', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcbDriverDesc', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szDriverAttributes', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbDrvrAttrMax', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcbDrvrAttr', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLEndTran => { - type => 'SQLRETURN', - name => 'SQLEndTran', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'HandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'Handle', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'CompletionType', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLError => { - type => 'SQLRETURN', - name => 'SQLError', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 1, - }, - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'Sqlstate', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'NativeError', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'MessageText', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'TextLength', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLExecDirect => { - type => 'SQLRETURN', - name => 'SQLExecDirect', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'StatementText', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'TextLength', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLExecute => { - type => 'SQLRETURN', - name => 'SQLExecute', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLExtendedFetch => { - type => 'SQLRETURN', - name => 'SQLExtendedFetch', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fFetchType', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'irow', - index => 2, - }, - { - type => 'SQLUINTEGER', - ptr => 1, - name => 'pcrow', - index => 3, - }, - { - type => 'SQLUSMALLINT', - ptr => 1, - name => 'rgfRowStatus', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLFetch => { - type => 'SQLRETURN', - name => 'SQLFetch', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLFetchScroll => { - type => 'SQLRETURN', - name => 'SQLFetchScroll', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'FetchOrientation', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'FetchOffset', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLForeignKeys => { - type => 'SQLRETURN', - name => 'SQLForeignKeys', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szPkCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbPkCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szPkSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbPkSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szPkTableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbPkTableName', - index => 6, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szFkCatalogName', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbFkCatalogName', - index => 8, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szFkSchemaName', - index => 9, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbFkSchemaName', - index => 10, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szFkTableName', - index => 11, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbFkTableName', - index => 12, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLFreeConnect => { - type => 'SQLRETURN', - name => 'SQLFreeConnect', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLFreeEnv => { - type => 'SQLRETURN', - name => 'SQLFreeEnv', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLFreeHandle => { - type => 'SQLRETURN', - name => 'SQLFreeHandle', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'HandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'Handle', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLFreeStmt => { - type => 'SQLRETURN', - name => 'SQLFreeStmt', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Option', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetConnectAttr => { - type => 'SQLRETURN', - name => 'SQLGetConnectAttr', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StringLength', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetConnectOption => { - type => 'SQLRETURN', - name => 'SQLGetConnectOption', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Option', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetCursorName => { - type => 'SQLRETURN', - name => 'SQLGetCursorName', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CursorName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'NameLength', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetData => { - type => 'SQLRETURN', - name => 'SQLGetData', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ColumnNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'TargetType', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'TargetValue', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 4, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StrLen_or_Ind', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetDescField => { - type => 'SQLRETURN', - name => 'SQLGetDescField', - param => [ - { - type => 'SQLHDESC', - ptr => 0, - name => 'DescriptorHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'FieldIdentifier', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 4, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StringLength', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetDescRec => { - type => 'SQLRETURN', - name => 'SQLGetDescRec', - param => [ - { - type => 'SQLHDESC', - ptr => 0, - name => 'DescriptorHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'Name', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'StringLength', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'Type', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'SubType', - index => 6, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'Length', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'Precision', - index => 8, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'Scale', - index => 9, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'Nullable', - index => 10, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetDiagField => { - type => 'SQLRETURN', - name => 'SQLGetDiagField', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'HandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'Handle', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'DiagIdentifier', - index => 3, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'DiagInfo', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'StringLength', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetDiagRec => { - type => 'SQLRETURN', - name => 'SQLGetDiagRec', - param => [ - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'HandleType', - index => 0, - }, - { - type => 'SQLHANDLE', - ptr => 0, - name => 'Handle', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'Sqlstate', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'NativeError', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'MessageText', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'TextLength', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetEnvAttr => { - type => 'SQLRETURN', - name => 'SQLGetEnvAttr', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StringLength', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetFunctions => { - type => 'SQLRETURN', - name => 'SQLGetFunctions', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'FunctionId', - index => 1, - }, - { - type => 'SQLUSMALLINT', - ptr => 1, - name => 'Supported', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetInfo => { - type => 'SQLRETURN', - name => 'SQLGetInfo', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'InfoType', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'InfoValue', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'StringLength', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetStmtAttr => { - type => 'SQLRETURN', - name => 'SQLGetStmtAttr', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StringLength', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLGetStmtOption => { - type => 'SQLRETURN', - name => 'SQLGetStmtOption', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Option', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLGetTypeInfo => { - type => 'SQLRETURN', - name => 'SQLGetTypeInfo', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'DataType', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLMoreResults => { - type => 'SQLRETURN', - name => 'SQLMoreResults', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLNativeSql => { - type => 'SQLRETURN', - name => 'SQLNativeSql', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'hdbc', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSqlStrIn', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'cbSqlStrIn', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSqlStr', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'cbSqlStrMax', - index => 4, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'pcbSqlStr', - index => 5, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLNumParams => { - type => 'SQLRETURN', - name => 'SQLNumParams', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'pcpar', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLNumResultCols => { - type => 'SQLRETURN', - name => 'SQLNumResultCols', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 1, - name => 'ColumnCount', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLParamData => { - type => 'SQLRETURN', - name => 'SQLParamData', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLPOINTER', - ptr => 1, - name => 'Value', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLParamOptions => { - type => 'SQLRETURN', - name => 'SQLParamOptions', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'crow', - index => 1, - }, - { - type => 'SQLUINTEGER', - ptr => 1, - name => 'pirow', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLPrepare => { - type => 'SQLRETURN', - name => 'SQLPrepare', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'StatementText', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'TextLength', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLPrimaryKeys => { - type => 'SQLRETURN', - name => 'SQLPrimaryKeys', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szTableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbTableName', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLProcedureColumns => { - type => 'SQLRETURN', - name => 'SQLProcedureColumns', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szProcName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbProcName', - index => 6, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szColumnName', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbColumnName', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLProcedures => { - type => 'SQLRETURN', - name => 'SQLProcedures', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szProcName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbProcName', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLPutData => { - type => 'SQLRETURN', - name => 'SQLPutData', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Data', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'StrLen_or_Ind', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLRowCount => { - type => 'SQLRETURN', - name => 'SQLRowCount', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'RowCount', - index => 1, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetConnectAttr => { - type => 'SQLRETURN', - name => 'SQLSetConnectAttr', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'StringLength', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLSetConnectOption => { - type => 'SQLRETURN', - name => 'SQLSetConnectOption', - param => [ - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Option', - index => 1, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'Value', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetCursorName => { - type => 'SQLRETURN', - name => 'SQLSetCursorName', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CursorName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetDescField => { - type => 'SQLRETURN', - name => 'SQLSetDescField', - param => [ - { - type => 'SQLHDESC', - ptr => 0, - name => 'DescriptorHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'FieldIdentifier', - index => 2, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'BufferLength', - index => 4, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLSetDescRec => { - type => 'SQLRETURN', - name => 'SQLSetDescRec', - param => [ - { - type => 'SQLHDESC', - ptr => 0, - name => 'DescriptorHandle', - index => 0, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'RecNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'Type', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'SubType', - index => 3, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Length', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'Precision', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'Scale', - index => 6, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Data', - index => 7, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StringLength', - index => 8, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'Indicator', - index => 9, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLSetEnvAttr => { - type => 'SQLRETURN', - name => 'SQLSetEnvAttr', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'StringLength', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLSetParam => { - type => 'SQLRETURN', - name => 'SQLSetParam', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'ParameterNumber', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ValueType', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ParameterType', - index => 3, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'LengthPrecision', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'ParameterScale', - index => 5, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'ParameterValue', - index => 6, - }, - { - type => 'SQLINTEGER', - ptr => 1, - name => 'StrLen_or_Ind', - index => 7, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetPos => { - type => 'SQLRETURN', - name => 'SQLSetPos', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'irow', - index => 1, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fOption', - index => 2, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fLock', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetScrollOptions => { - type => 'SQLRETURN', - name => 'SQLSetScrollOptions', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'fConcurrency', - index => 1, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'crowKeyset', - index => 2, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'crowRowset', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSetStmtAttr => { - type => 'SQLRETURN', - name => 'SQLSetStmtAttr', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'Attribute', - index => 1, - }, - { - type => 'SQLPOINTER', - ptr => 0, - name => 'Value', - index => 2, - }, - { - type => 'SQLINTEGER', - ptr => 0, - name => 'StringLength', - index => 3, - }, - ], - odbcver => 'ODBCVER >= 0x0300', - }, - SQLSetStmtOption => { - type => 'SQLRETURN', - name => 'SQLSetStmtOption', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Option', - index => 1, - }, - { - type => 'SQLUINTEGER', - ptr => 0, - name => 'Value', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLSpecialColumns => { - type => 'SQLRETURN', - name => 'SQLSpecialColumns', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'IdentifierType', - index => 1, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CatalogName', - index => 2, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength1', - index => 3, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'SchemaName', - index => 4, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength2', - index => 5, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'TableName', - index => 6, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength3', - index => 7, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Scope', - index => 8, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Nullable', - index => 9, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLStatistics => { - type => 'SQLRETURN', - name => 'SQLStatistics', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength1', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'SchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength2', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'TableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength3', - index => 6, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Unique', - index => 7, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'Reserved', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLTablePrivileges => { - type => 'SQLRETURN', - name => 'SQLTablePrivileges', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'hstmt', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szCatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbCatalogName', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szSchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbSchemaName', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'szTableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'cbTableName', - index => 6, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLTables => { - type => 'SQLRETURN', - name => 'SQLTables', - param => [ - { - type => 'SQLHSTMT', - ptr => 0, - name => 'StatementHandle', - index => 0, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'CatalogName', - index => 1, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength1', - index => 2, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'SchemaName', - index => 3, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength2', - index => 4, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'TableName', - index => 5, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength3', - index => 6, - }, - { - type => 'SQLCHAR', - ptr => 1, - name => 'TableType', - index => 7, - }, - { - type => 'SQLSMALLINT', - ptr => 0, - name => 'NameLength4', - index => 8, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, - SQLTransact => { - type => 'SQLRETURN', - name => 'SQLTransact', - param => [ - { - type => 'SQLHENV', - ptr => 0, - name => 'EnvironmentHandle', - index => 0, - }, - { - type => 'SQLHDBC', - ptr => 0, - name => 'ConnectionHandle', - index => 1, - }, - { - type => 'SQLUSMALLINT', - ptr => 0, - name => 'CompletionType', - index => 2, - }, - ], - odbcver => 'ODBCVER >= 0x0000', - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/driver/Func.pl b/storage/ndb/src/old_files/client/odbc/driver/Func.pl deleted file mode 100644 index 1064a6a6c6e8bd3d89cf25406d5e678dd3e45847..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/Func.pl +++ /dev/null @@ -1,352 +0,0 @@ -# - -use strict; -select(STDOUT); -$| = 1; -use vars qw($func); - -my $action = shift; -my @args = @ARGV; -if (! $action) { - print <<END; -usage: perl $0 <data|name|code|move> ... -data -unixodbc -- write new Func.data to stdout -name [-[no]auto -type] [suffix] -- list function names -code -- write auto/*.cpp -diff -- diff against auto/*.cpp -move -- move auto/*.cpp to . -functab -- write struct entiries for SQLGetFunctions -END - exit(0); -} - -# indents -my $i1 = " " x (1*4); -my $i2 = " " x (2*4); -my $i3 = " " x (3*4); -my $i4 = " " x (4*4); - -if ($action eq 'data') { - my @entry = (); - while (@args) { - my $file = shift(@args); - if ($file eq '-unixodbc') { - unshift(@args, </usr/local/include/{sql,sqlext}.h>); - next; - } - if ($file eq '-iodbc') { - unshift(@args, </usr/local/opt/iODBC/include/{sql,sqlext}.h>); - next; - } - warn "read $file\n"; - open(F, "<$file") || die "$file: $!"; - my $text = undef; - my $odbcver = undef; - while ($_ = <F>) { - chomp; - if (/^\s*$/) { - next; - } - if (/^\s*#\s*if\s+(.*\bODBCVER\b.*)$/) { - $odbcver = $1; - $odbcver =~ s/^\s+|\s+$//g; - $odbcver =~ s/^\(+|\)+$//g; - next; - } - if (/^\s*#\s*endif\b/) { - $odbcver = undef; - next; - } - if (/^\s*SQLRETURN\b/) { - $text = ""; - } - if (defined($text)) { - $text .= $_; - if (/;\s*$/) { - push(@entry, { - text => $text, - odbcver => $odbcver || 'ODBCVER >= 0x0000', - }); - $text = undef; - } - } - } - close(F); - } - warn "@{[ scalar @entry ]} entries\n"; - $func = {}; - for my $e (@entry) { - my $text = $e->{text}; - $text =~ s!/\*.+?\*/!!g; - $text =~ s/^\s+|\s+$//g; - $text =~ s/\s\s*/\040/g; - $text =~ /^(SQLRETURN)\s+(SQL_API\s+)?(\w+)\s*\((.*)\)\s*;/ - or warn "discard: $_\n", next; - my $type = $1; - my $name = $3; - my $body = $4; - my $f = {}; - $f->{type} = $type; - $f->{name} = $name; - my @body = split(/,/, $body); - my $param = []; - for my $s (@body) { - $s =~ s/^\s+|\s+$//g; - my($ptype, $pptr, $pname); - if ($s =~ /^(\w+)\s+(\w+)$/) { - $ptype = $1; - $pptr = 0; - $pname = $2; - } elsif ($s =~ /^(\w+)\s*\*\s*(\w+)$/) { - $ptype = $1; - $pptr = 1; - $pname = $2; - } else { - warn "discard: $name: param $s\n"; - $param = undef; - last; - } - my $pindex = scalar @$param; - push(@$param, { - type => $ptype, - ptr => $pptr, - name => $pname, - index => $pindex, - }); - } - $param or next; - $f->{param} = $param; - $f->{odbcver} = $e->{odbcver}; - $func->{$name} - and warn "duplicate: $name\n", next; - $func->{$name} = $f; - } - print "\$func = {\n"; - for my $name (sort keys %$func) { - my $f = $func->{$name}; - print "${i1}$name => {\n"; - print "${i2}type => '$f->{type}',\n"; - print "${i2}name => '$f->{name}',\n"; - print "${i2}param => [\n"; - for my $p (@{$f->{param}}) { - print "${i3}\{\n"; - print "${i4}type => '$p->{type}',\n"; - print "${i4}ptr => $p->{ptr},\n"; - print "${i4}name => '$p->{name}',\n"; - print "${i4}index => $p->{index},\n"; - print "${i3}\},\n"; - } - print "${i2}],\n"; - print "${i2}odbcver => '$f->{odbcver}',\n"; - print "${i1}},\n"; - } - printf "};\n"; - $action = undef; -} - -if ($action eq 'name') { - my %functab = (); # bit in FuncTab - my $functab = "../handles/FuncTab.cpp"; - if (! open(F, "<$functab")) { - warn "$functab: $!"; - } else { - while ($_ = <F>) { - if (/SQL_API_([A-Z]+)[\s,]*([01])/) { - defined $functab{$1} and die "$_"; - $functab{$1} = $2; - } - } - close(F); - } - require './Func.data'; - my $auto = 1; - my $noauto = 1; - my $type = 0; - while ($args[0] =~ /^-(\w+)$/) { - $noauto = 0 if $1 eq 'auto'; - $auto = 0 if $1 eq 'noauto'; - $type = 1 if $1 eq 'type'; - shift(@args); - } - my $suffix = shift(@args); - for my $name (sort keys %$func) { - my $f = $func->{$name}; - local $/ = undef; - my($x1); - if (open(F, "<$name.cpp")) { - $x1 = <F>; - close(F); - if ($x1 =~ /\bauto_$name\b/) { - $auto || next; - print "A " if $type; - } else { - $noauto || next; - print "- " if $type; - } - if ($type) { - my $y = $functab{uc $name}; - $y = "?" if $y !~ /^[01]$/; - print "$y "; - my $z = $f->{odbcver}; - $z =~ s/^.*(...)$/$1/; - print "$z "; - } - } - print "$name$suffix\n"; - } - $action = undef; -} - -if ($action eq 'code') { - require './Func.data'; - system("rm -rf auto; mkdir auto"); - for my $name (sort keys %$func) { - my $f = $func->{$name}; - my $file = "auto/$name.cpp"; - open(F, ">$file") || die "$file: $!\n"; - print F "#include \"driver.hpp\"\n"; - print F "\n"; - printf F "#if $f->{odbcver}\n"; - print F "$f->{type} SQL_API\n"; - print F "$f->{name}("; - for my $p (@{$f->{param}}) { - print F "," if $p->{index} > 0; - print F "\n${i1}$p->{type}"; - for (my $i = 0; $i < $p->{ptr}; $i++) { - print F "*"; - } - print F " $p->{name}"; - } - print F ")\n"; - print F "{\n"; - print F "${i1}const char* const sqlFunction = \"$f->{name}\";\n"; - print F "#ifndef auto_$name\n"; - print F "${i1}Ctx ctx;\n"; - print F "${i1}ctx.log(1, \"*** not implemented: %s\", sqlFunction);\n"; - print F "${i1}return SQL_ERROR;\n"; - print F "#else\n"; - my @ihandle = (); - my @ohandle = (); - for my $p (@{$f->{param}}) { - if ($p->{type} =~ /^SQLH(ENV|DBC|STMT|DESC)$/) { - $p->{btype} = lc $1; - my $h = ! $p->{ptr} ? \@ihandle : \@ohandle; - push(@$h, $p); - } - } - if (! @ihandle) { # use root handle instance - push(@ihandle, { - type => 'SQLHROOT', - name => '(SQLHANDLE*)0', - }); - } - for my $p (@ihandle, @ohandle) { - $p->{htype} = "Handle" . (ucfirst lc $p->{btype}); - $p->{hname} = "p" . (ucfirst lc $p->{btype}); - } - if (@ihandle) { - print F "${i1}HandleRoot* const pRoot = HandleRoot::instance();\n"; - } - for my $p (@ihandle) { - print F "${i1}$p->{htype}* $p->{hname} = "; - print F "pRoot->find" . ucfirst($p->{btype}). "($p->{name});\n"; - print F "${i1}if ($p->{hname} == 0)\n"; - print F "${i2}return SQL_INVALID_HANDLE;\n"; - } - { - my $p = $ihandle[0]; - print F "${i1}Ctx& ctx = $p->{hname}->initCtx();\n"; - print F "${i1}ctx.logSqlEnter(sqlFunction);\n"; - } - for my $p (@ohandle) { - print F "${i1}$p->{htype}* $p->{hname} = 0;\n"; - } - { - my $p = $ihandle[0]; - my $fname = $f->{name}; - $fname =~ s/^SQL/sql/; # keep sql prefix - print F "${i1}if (ctx.ok())\n"; - print F "${i2}$p->{hname}->$fname(\n"; - print F "${i3}ctx"; - } - for my $p (@{$f->{param}}) { - if ($p == $ihandle[0]) { - next; - } - print F ","; - print F "\n${i3}"; - if (grep($_ == $p, @ihandle)) { - print F "$p->{hname}"; - } elsif (grep($_ == $p, @ohandle)) { - print F "$p->{name} != 0 ? &$p->{hname} : 0"; - } else { - print F "&" if $p->{ptr} > 0; - print F "$p->{name}"; - } - } - print F "\n${i2});\n"; - for my $p (@ohandle) { - print F "${i1}if ($p->{name} != 0)\n"; - print F "${i2}*$p->{name} = "; - print F "pRoot->from" . ucfirst($p->{btype}) . "($p->{hname});\n"; - } - { - my $p = $ihandle[0]; - print F "${i1}$p->{hname}->saveCtx(ctx);\n"; - } - print F "${i1}ctx.logSqlExit();\n"; - print F "${i1}return ctx.getCode();\n"; - print F "#endif\n"; - print F "}\n"; - print F "#endif // $f->{odbcver}\n"; - close(F); - } - $action = undef; -} - -if ($action eq 'diff' || $action eq 'move') { - require './Func.data'; - for my $name (sort keys %$func) { - local $/ = undef; - my($x1, $x2); - if (open(F, "<$name.cpp")) { - $x1 = <F>; - close(F); - if ($x1 !~ /\bauto_$name\b/) { - warn "$name.cpp: not auto-generated\n" if $action eq 'move'; - next; - } - } - if (! open(F, "<auto/$name.cpp")) { - die "auto/$name.cpp: $!\n"; - } - $x2 = <F>; - close(F); - if ($x1 eq $x2) { - warn "$name: no changes\n" if $action eq 'move'; - next; - } - if ($action eq 'diff') { - print "=" x 40, "\n"; - print "diff $name.cpp auto/", "\n"; - system("diff $name.cpp auto/$name.cpp"); - } else { - rename("auto/$name.cpp", "$name.cpp") - or die "rename $name: $!\n"; - warn "$name: updated\n" if 0; - } - } - $action = undef; -} - -if ($action eq 'functab') { - require './Func.data'; - for my $name (sort keys %$func) { - printf "%4s{%3s%-30s, 0 },\n", "", "", uc "SQL_API_$name"; - } - $action = undef; -} - -$action && die "$action: undefined\n"; - -# vim: set sw=4: diff --git a/storage/ndb/src/old_files/client/odbc/driver/Makefile b/storage/ndb/src/old_files/client/odbc/driver/Makefile deleted file mode 100644 index 62f82371da40a7f4578e0588d8f9c9baaef017b2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbcdriver - -SOURCES = driver.cpp - -SOURCES_EXTRA = $(shell perl Func.pl name .cpp) - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocConnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLAllocConnect.cpp deleted file mode 100644 index a7ffd8c89d19336c4ade83316a6cf5b00b146c47..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocConnect.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLAllocConnect( - SQLHENV EnvironmentHandle, - SQLHDBC* ConnectionHandle) -{ - driver_enter(SQL_API_SQLALLOCCONNECT); - const char* const sqlFunction = "SQLAllocConnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLALLOCCONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleDbc* pDbc = 0; - HandleDbc** ppDbc = 0; - if (ConnectionHandle != 0) - ppDbc = &pDbc; - try { - pEnv->sqlAllocConnect(ctx, ppDbc); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (ConnectionHandle != 0) - *ConnectionHandle = static_cast<SQLHDBC>(pDbc); - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLALLOCCONNECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocEnv.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLAllocEnv.cpp deleted file mode 100644 index a62dae6100862ef5d940cda9630c160bc937b1fb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocEnv.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLAllocEnv( - SQLHENV* EnvironmentHandle) -{ - driver_enter(SQL_API_SQLALLOCENV); - const char* const sqlFunction = "SQLAllocEnv"; - HandleRoot* const pRoot = HandleRoot::instance(); - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleEnv* pEnv = 0; - HandleEnv** ppEnv = 0; - if (EnvironmentHandle != 0) - ppEnv = &pEnv; - try { - pRoot->sqlAllocEnv(ctx, ppEnv); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (EnvironmentHandle != 0) - *EnvironmentHandle = static_cast<SQLHENV>(pEnv); - pRoot->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLALLOCENV); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandle.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandle.cpp deleted file mode 100644 index 9daf6ead9461aa84a06a86079af740835c0a127d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandle.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLAllocHandle( - SQLSMALLINT HandleType, - SQLHANDLE InputHandle, - SQLHANDLE* OutputHandle) -{ - driver_enter(SQL_API_SQLALLOCHANDLE); - const char* const sqlFunction = "SQLAllocHandle"; - HandleRoot* const pRoot = HandleRoot::instance(); - SQLSMALLINT parentType = pRoot->findParentType(HandleType); - if (parentType == -1) { - driver_exit(SQL_API_SQLALLOCHANDLE); - return SQL_INVALID_HANDLE; - } - HandleBase* pParent = pRoot->findBase(parentType, InputHandle); - if (pParent == 0) { - driver_exit(SQL_API_SQLALLOCHANDLE); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleBase* pChild = 0; - HandleBase** ppChild = 0; - if (OutputHandle != 0) - ppChild = &pChild; - try { - pParent->sqlAllocHandle(ctx, HandleType, ppChild); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (OutputHandle != 0) - *OutputHandle = static_cast<SQLHANDLE>(pChild); - if (pRoot == pParent) - pRoot->lockHandle(); - pParent->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - if (pRoot == pParent) - pRoot->unlockHandle(); - driver_exit(SQL_API_SQLALLOCHANDLE); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandleStd.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandleStd.cpp deleted file mode 100644 index 61290e37b7bd015bccf73570df3d5b14c84a98bc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocHandleStd.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLAllocHandleStd( - SQLSMALLINT fHandleType, - SQLHANDLE hInput, - SQLHANDLE* phOutput) -{ -#ifndef auto_SQLAllocHandleStd - const char* const sqlFunction = "SQLAllocHandleStd"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLALLOCHANDLESTD); - const char* const sqlFunction = "SQLAllocHandleStd"; - HandleRoot* const pRoot = HandleRoot::instance(); - Handle* p = pRoot->find((SQLHANDLE*)0); - if (p == 0) { - driver_exit(SQL_API_SQLALLOCHANDLESTD); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - p->sqlAllocHandleStd( - ctx, - fHandleType, - hInput, - &phOutput - ); - p->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLALLOCHANDLESTD); - return ret; -#endif -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocStmt.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLAllocStmt.cpp deleted file mode 100644 index bf3f149f5de861156f35829118cf0edd50491eb1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLAllocStmt.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLAllocStmt( - SQLHDBC ConnectionHandle, - SQLHSTMT* StatementHandle) -{ - driver_enter(SQL_API_SQLALLOCSTMT); - const char* const sqlFunction = "SQLAllocStmt"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLALLOCSTMT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleStmt* pStmt = 0; - HandleStmt** ppStmt = 0; - if (StatementHandle != 0) - ppStmt = &pStmt; - try { - pDbc->sqlAllocStmt(ctx, ppStmt); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (StatementHandle != 0) - *StatementHandle = static_cast<SQLHSTMT>(pStmt); - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLALLOCSTMT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLBindCol.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLBindCol.cpp deleted file mode 100644 index 5562334e8ccbced93fdb56e9af81351a6ee1459d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLBindCol.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLBindCol( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLSMALLINT TargetType, - SQLPOINTER TargetValue, - SQLINTEGER BufferLength, - SQLINTEGER* StrLen_or_Ind) -{ - driver_enter(SQL_API_SQLBINDCOL); - const char* const sqlFunction = "SQLBindCol"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLBINDCOL); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlBindCol(ctx, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLBINDCOL); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLBindParam.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLBindParam.cpp deleted file mode 100644 index 2fcc17b872f515cf005f10352dc11b45650b6019..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLBindParam.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLBindParam( - SQLHSTMT StatementHandle, - SQLUSMALLINT ParameterNumber, - SQLSMALLINT ValueType, - SQLSMALLINT ParameterType, - SQLUINTEGER LengthPrecision, - SQLSMALLINT ParameterScale, - SQLPOINTER ParameterValue, - SQLINTEGER* StrLen_or_Ind) -{ - driver_enter(SQL_API_SQLBINDPARAM); - const char* const sqlFunction = "SQLBindParam"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLBINDPARAM); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlBindParam(ctx, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLBINDPARAM); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLBindParameter.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLBindParameter.cpp deleted file mode 100644 index e4ca5bbc73125baef3b11b6cb75961ef7a7ef085..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLBindParameter.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLBindParameter( - SQLHSTMT hstmt, - SQLUSMALLINT ipar, - SQLSMALLINT fParamType, - SQLSMALLINT fCType, - SQLSMALLINT fSqlType, - SQLUINTEGER cbColDef, - SQLSMALLINT ibScale, - SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER* pcbValue) -{ - driver_enter(SQL_API_SQLBINDPARAMETER); - const char* const sqlFunction = "SQLBindParameter"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLBINDPARAMETER); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlBindParameter(ctx, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLBINDPARAMETER); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLBrowseConnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLBrowseConnect.cpp deleted file mode 100644 index 7e629e199e5271835887ff68aea21ffc468c5a0f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLBrowseConnect.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLBrowseConnect( - SQLHDBC hdbc, - SQLCHAR* szConnStrIn, - SQLSMALLINT cbConnStrIn, - SQLCHAR* szConnStrOut, - SQLSMALLINT cbConnStrOutMax, - SQLSMALLINT* pcbConnStrOut) -{ -#ifndef auto_SQLBrowseConnect - const char* const sqlFunction = "SQLBrowseConnect"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLBROWSECONNECT); - const char* const sqlFunction = "SQLBrowseConnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(hdbc); - if (pDbc == 0) { - driver_exit(SQL_API_SQLBROWSECONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pDbc->sqlBrowseConnect( - ctx, - &szConnStrIn, - cbConnStrIn, - &szConnStrOut, - cbConnStrOutMax, - &pcbConnStrOut - ); - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLBROWSECONNECT); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLBulkOperations.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLBulkOperations.cpp deleted file mode 100644 index 7d256d66e3fba0a8e84d9b1be5014480166d8a47..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLBulkOperations.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLBulkOperations( - SQLHSTMT StatementHandle, - SQLSMALLINT Operation) -{ -#ifndef auto_SQLBulkOperations - const char* const sqlFunction = "SQLBulkOperations"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLBULKOPERATIONS); - const char* const sqlFunction = "SQLBulkOperations"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLBULKOPERATIONS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlBulkOperations( - ctx, - Operation - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLBULKOPERATIONS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLCancel.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLCancel.cpp deleted file mode 100644 index ac4e43c6e896d445369169e83fa787b7f69d3c66..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLCancel.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLCancel( - SQLHSTMT StatementHandle) -{ - driver_enter(SQL_API_SQLCANCEL); - const char* const sqlFunction = "SQLCancel"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCANCEL); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlCancel(ctx); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCANCEL); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLCloseCursor.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLCloseCursor.cpp deleted file mode 100644 index 26d88c91e3b1b46e42dc02d66b424c1c2e70c430..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLCloseCursor.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLCloseCursor( - SQLHSTMT StatementHandle) -{ - driver_enter(SQL_API_SQLCLOSECURSOR); - const char* const sqlFunction = "SQLCloseCursor"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCLOSECURSOR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlCloseCursor(ctx); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCLOSECURSOR); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLColAttribute.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLColAttribute.cpp deleted file mode 100644 index 0e7e54469321733a4060d93e7c462cd6497e15a8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLColAttribute.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLColAttribute( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLUSMALLINT FieldIdentifier, - SQLPOINTER CharacterAttribute, - SQLSMALLINT BufferLength, - SQLSMALLINT* StringLength, - SQLPOINTER NumericAttribute) -{ - driver_enter(SQL_API_SQLCOLATTRIBUTE); - const char* const sqlFunction = "SQLColAttribute"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCOLATTRIBUTE); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlColAttribute(ctx, ColumnNumber, FieldIdentifier, CharacterAttribute, BufferLength, StringLength, NumericAttribute); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCOLATTRIBUTE); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLColAttributes.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLColAttributes.cpp deleted file mode 100644 index 05a4c1d4d37fa3d2747e26f3be5b9a7f09ac563c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLColAttributes.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLColAttributes( - SQLHSTMT hstmt, - SQLUSMALLINT icol, - SQLUSMALLINT fDescType, - SQLPOINTER rgbDesc, - SQLSMALLINT cbDescMax, - SQLSMALLINT* pcbDesc, - SQLINTEGER* pfDesc) -{ - driver_enter(SQL_API_SQLCOLATTRIBUTES); - const char* const sqlFunction = "SQLColAttributes"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCOLATTRIBUTES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlColAttributes(ctx, icol, fDescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCOLATTRIBUTES); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLColumnPrivileges.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLColumnPrivileges.cpp deleted file mode 100644 index cfbc9c2bc57258e272a3ff26f83deef306f18829..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLColumnPrivileges.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLColumnPrivileges( - SQLHSTMT hstmt, - SQLCHAR* szCatalogName, - SQLSMALLINT cbCatalogName, - SQLCHAR* szSchemaName, - SQLSMALLINT cbSchemaName, - SQLCHAR* szTableName, - SQLSMALLINT cbTableName, - SQLCHAR* szColumnName, - SQLSMALLINT cbColumnName) -{ -#ifndef auto_SQLColumnPrivileges - const char* const sqlFunction = "SQLColumnPrivileges"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLCOLUMNPRIVILEGES); - const char* const sqlFunction = "SQLColumnPrivileges"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCOLUMNPRIVILEGES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlColumnPrivileges( - ctx, - &szCatalogName, - cbCatalogName, - &szSchemaName, - cbSchemaName, - &szTableName, - cbTableName, - &szColumnName, - cbColumnName - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCOLUMNPRIVILEGES); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLColumns.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLColumns.cpp deleted file mode 100644 index 4e0b646ee7d3973ebf51f151c1fdc7321cbb5908..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLColumns.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLColumns( - SQLHSTMT StatementHandle, - SQLCHAR* CatalogName, - SQLSMALLINT NameLength1, - SQLCHAR* SchemaName, - SQLSMALLINT NameLength2, - SQLCHAR* TableName, - SQLSMALLINT NameLength3, - SQLCHAR* ColumnName, - SQLSMALLINT NameLength4) -{ - driver_enter(SQL_API_SQLCOLUMNS); - const char* const sqlFunction = "SQLColumns"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLCOLUMNS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - pStmt->sqlColumns(ctx, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCOLUMNS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLConnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLConnect.cpp deleted file mode 100644 index d8f30ed47e7178d10030ac9bcbac4cbcf3192bd6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLConnect.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLConnect( - SQLHDBC ConnectionHandle, - SQLCHAR* ServerName, - SQLSMALLINT NameLength1, - SQLCHAR* UserName, - SQLSMALLINT NameLength2, - SQLCHAR* Authentication, - SQLSMALLINT NameLength3) -{ - driver_enter(SQL_API_SQLCONNECT); - const char* const sqlFunction = "SQLConnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLCONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlConnect(ctx, ServerName, NameLength1, UserName, NameLength2, Authentication, NameLength3); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCONNECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLCopyDesc.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLCopyDesc.cpp deleted file mode 100644 index b4d4b2e4122058f448c821b7c06e55c7a56c5da1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLCopyDesc.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLCopyDesc( - SQLHDESC SourceDescHandle, - SQLHDESC TargetDescHandle) -{ -#ifndef auto_SQLCopyDesc - const char* const sqlFunction = "SQLCopyDesc"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLCOPYDESC); - const char* const sqlFunction = "SQLCopyDesc"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDesc* pDesc = pRoot->findDesc(SourceDescHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLCOPYDESC); - return SQL_INVALID_HANDLE; - } - HandleDesc* pDesc = pRoot->findDesc(TargetDescHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLCOPYDESC); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pDesc->sqlCopyDesc( - ctx, - pDesc - ); - pDesc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLCOPYDESC); - return ret; -#endif -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDataSources.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDataSources.cpp deleted file mode 100644 index 6115e7175f90d43a99b8e60bb951c182bfd0632e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDataSources.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDataSources( - SQLHENV EnvironmentHandle, - SQLUSMALLINT Direction, - SQLCHAR* ServerName, - SQLSMALLINT BufferLength1, - SQLSMALLINT* NameLength1, - SQLCHAR* Description, - SQLSMALLINT BufferLength2, - SQLSMALLINT* NameLength2) -{ -#ifndef auto_SQLDataSources - const char* const sqlFunction = "SQLDataSources"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLDATASOURCES); - const char* const sqlFunction = "SQLDataSources"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLDATASOURCES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pEnv->sqlDataSources( - ctx, - Direction, - &ServerName, - BufferLength1, - &NameLength1, - &Description, - BufferLength2, - &NameLength2 - ); - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDATASOURCES); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeCol.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeCol.cpp deleted file mode 100644 index f15ce8962f188040848e8d66cbe2d9a2614eabce..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeCol.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDescribeCol( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLCHAR* ColumnName, - SQLSMALLINT BufferLength, - SQLSMALLINT* NameLength, - SQLSMALLINT* DataType, - SQLUINTEGER* ColumnSize, - SQLSMALLINT* DecimalDigits, - SQLSMALLINT* Nullable) -{ - driver_enter(SQL_API_SQLDESCRIBECOL); - const char* const sqlFunction = "SQLDescribeCol"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLDESCRIBECOL); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlDescribeCol(ctx, ColumnNumber, ColumnName, BufferLength, NameLength, DataType, ColumnSize, DecimalDigits, Nullable); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDESCRIBECOL); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeParam.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeParam.cpp deleted file mode 100644 index beff41396fe5e3d3d42d5d37131dc37e9827f06b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDescribeParam.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDescribeParam( - SQLHSTMT hstmt, - SQLUSMALLINT ipar, - SQLSMALLINT* pfSqlType, - SQLUINTEGER* pcbParamDef, - SQLSMALLINT* pibScale, - SQLSMALLINT* pfNullable) -{ - driver_enter(SQL_API_SQLDESCRIBEPARAM); - const char* const sqlFunction = "SQLDescribeParam"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLDESCRIBEPARAM); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlDescribeParam(ctx, ipar, pfSqlType, pcbParamDef, pibScale, pfNullable); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDESCRIBEPARAM); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDisconnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDisconnect.cpp deleted file mode 100644 index 75db5604da80e735e0ec5bae17afb62be16d5a9e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDisconnect.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDisconnect( - SQLHDBC ConnectionHandle) -{ - driver_enter(SQL_API_SQLDISCONNECT); - const char* const sqlFunction = "SQLDisconnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLDISCONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlDisconnect(ctx); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDISCONNECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDriverConnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDriverConnect.cpp deleted file mode 100644 index 340babd8523809af94112d6799d45618aeff6da3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDriverConnect.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDriverConnect( - SQLHDBC hdbc, - SQLHWND hwnd, - SQLCHAR* szConnStrIn, - SQLSMALLINT cbConnStrIn, - SQLCHAR* szConnStrOut, - SQLSMALLINT cbConnStrOutMax, - SQLSMALLINT* pcbConnStrOut, - SQLUSMALLINT fDriverCompletion) -{ - driver_enter(SQL_API_SQLDRIVERCONNECT); - const char* const sqlFunction = "SQLDriverConnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(hdbc); - if (pDbc == 0) { - driver_exit(SQL_API_SQLDRIVERCONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlDriverConnect(ctx, hwnd, szConnStrIn, cbConnStrIn, szConnStrOut, cbConnStrOutMax, pcbConnStrOut, fDriverCompletion); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDRIVERCONNECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLDrivers.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLDrivers.cpp deleted file mode 100644 index 9c52f90099286055b43418cdff5755cf9d782eb0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLDrivers.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLDrivers( - SQLHENV henv, - SQLUSMALLINT fDirection, - SQLCHAR* szDriverDesc, - SQLSMALLINT cbDriverDescMax, - SQLSMALLINT* pcbDriverDesc, - SQLCHAR* szDriverAttributes, - SQLSMALLINT cbDrvrAttrMax, - SQLSMALLINT* pcbDrvrAttr) -{ -#ifndef auto_SQLDrivers - const char* const sqlFunction = "SQLDrivers"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLDRIVERS); - const char* const sqlFunction = "SQLDrivers"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleEnv* pEnv = pRoot->findEnv(henv); - if (pEnv == 0) { - driver_exit(SQL_API_SQLDRIVERS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pEnv->sqlDrivers( - ctx, - fDirection, - &szDriverDesc, - cbDriverDescMax, - &pcbDriverDesc, - &szDriverAttributes, - cbDrvrAttrMax, - &pcbDrvrAttr - ); - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLDRIVERS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLEndTran.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLEndTran.cpp deleted file mode 100644 index 20b0b2203f5d5a379c40817dd4a38d5c5fbf3bb1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLEndTran.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLEndTran( - SQLSMALLINT HandleType, - SQLHANDLE Handle, - SQLSMALLINT CompletionType) -{ - driver_enter(SQL_API_SQLENDTRAN); - const char* const sqlFunction = "SQLEndTran"; - HandleRoot* const pRoot = HandleRoot::instance(); - if (HandleType == SQL_HANDLE_DBC) { - HandleDbc* pDbc = pRoot->findDbc(Handle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLENDTRAN); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlEndTran(ctx, CompletionType); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLENDTRAN); - return ret; - } - if (HandleType == SQL_HANDLE_ENV) { - HandleEnv* pEnv = pRoot->findEnv(Handle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLENDTRAN); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pEnv->sqlEndTran(ctx, CompletionType); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLENDTRAN); - return ret; - } - driver_exit(SQL_API_SQLENDTRAN); - return SQL_INVALID_HANDLE; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLError.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLError.cpp deleted file mode 100644 index af78c931d372bd124d0ecf562b390c85f3d0b5ab..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLError.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLError( - SQLHENV EnvironmentHandle, - SQLHDBC ConnectionHandle, - SQLHSTMT StatementHandle, - SQLCHAR* Sqlstate, - SQLINTEGER* NativeError, - SQLCHAR* MessageText, - SQLSMALLINT BufferLength, - SQLSMALLINT* TextLength) -{ - driver_enter(SQL_API_SQLERROR); - const char* const sqlFunction = "SQLError"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0 && pDbc == 0 && pEnv == 0) { - driver_exit(SQL_API_SQLERROR); - return SQL_INVALID_HANDLE; - } - Ctx ctx; // discard diagnostics - ctx.logSqlEnter(sqlFunction); - if (pStmt != 0) { - try { - pStmt->sqlError(ctx, Sqlstate, NativeError, MessageText, BufferLength, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - } else if (pDbc != 0) { - try { - pDbc->sqlError(ctx, Sqlstate, NativeError, MessageText, BufferLength, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - } else { - try { - pEnv->sqlError(ctx, Sqlstate, NativeError, MessageText, BufferLength, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLERROR); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLExecDirect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLExecDirect.cpp deleted file mode 100644 index 0ad99d29cd94d2b972202f60877d10a7c552741a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLExecDirect.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLExecDirect( - SQLHSTMT StatementHandle, - SQLCHAR* StatementText, - SQLINTEGER TextLength) -{ - driver_enter(SQL_API_SQLEXECDIRECT); - const char* const sqlFunction = "SQLExecDirect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLEXECDIRECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlExecDirect(ctx, StatementText, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLEXECDIRECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLExecute.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLExecute.cpp deleted file mode 100644 index 9c30d418f09adaf5a910337f292256e188a0f551..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLExecute.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLExecute( - SQLHSTMT StatementHandle) -{ - driver_enter(SQL_API_SQLEXECUTE); - const char* const sqlFunction = "SQLExecute"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLEXECUTE); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlExecute(ctx); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLEXECUTE); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLExtendedFetch.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLExtendedFetch.cpp deleted file mode 100644 index e0dd078b5d08836f376c9b61f76b489465f22ab2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLExtendedFetch.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLExtendedFetch( - SQLHSTMT hstmt, - SQLUSMALLINT fFetchType, - SQLINTEGER irow, - SQLUINTEGER* pcrow, - SQLUSMALLINT* rgfRowStatus) -{ -#ifndef auto_SQLExtendedFetch - const char* const sqlFunction = "SQLExtendedFetch"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLEXTENDEDFETCH); - const char* const sqlFunction = "SQLExtendedFetch"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLEXTENDEDFETCH); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlExtendedFetch( - ctx, - fFetchType, - irow, - &pcrow, - &rgfRowStatus - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLEXTENDEDFETCH); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFetch.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFetch.cpp deleted file mode 100644 index addba7b998c2608c65243335e0b508ffca45163a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFetch.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLFetch( - SQLHSTMT StatementHandle) -{ - driver_enter(SQL_API_SQLFETCH); - const char* const sqlFunction = "SQLFetch"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLFETCH); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlFetch(ctx); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFETCH); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFetchScroll.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFetchScroll.cpp deleted file mode 100644 index cfbfc813fca3ac4f9a7ecc81a1f5fd839393d5ff..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFetchScroll.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLFetchScroll( - SQLHSTMT StatementHandle, - SQLSMALLINT FetchOrientation, - SQLINTEGER FetchOffset) -{ -#ifndef auto_SQLFetchScroll - const char* const sqlFunction = "SQLFetchScroll"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLFETCHSCROLL); - const char* const sqlFunction = "SQLFetchScroll"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLFETCHSCROLL); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlFetchScroll( - ctx, - FetchOrientation, - FetchOffset - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFETCHSCROLL); - return ret; -#endif -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLForeignKeys.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLForeignKeys.cpp deleted file mode 100644 index 886ac6bdaa5caa9d7f93d90f20f56065d5d358bb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLForeignKeys.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLForeignKeys( - SQLHSTMT hstmt, - SQLCHAR* szPkCatalogName, - SQLSMALLINT cbPkCatalogName, - SQLCHAR* szPkSchemaName, - SQLSMALLINT cbPkSchemaName, - SQLCHAR* szPkTableName, - SQLSMALLINT cbPkTableName, - SQLCHAR* szFkCatalogName, - SQLSMALLINT cbFkCatalogName, - SQLCHAR* szFkSchemaName, - SQLSMALLINT cbFkSchemaName, - SQLCHAR* szFkTableName, - SQLSMALLINT cbFkTableName) -{ -#ifndef auto_SQLForeignKeys - const char* const sqlFunction = "SQLForeignKeys"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLFOREIGNKEYS); - const char* const sqlFunction = "SQLForeignKeys"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLFOREIGNKEYS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlForeignKeys( - ctx, - &szPkCatalogName, - cbPkCatalogName, - &szPkSchemaName, - cbPkSchemaName, - &szPkTableName, - cbPkTableName, - &szFkCatalogName, - cbFkCatalogName, - &szFkSchemaName, - cbFkSchemaName, - &szFkTableName, - cbFkTableName - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFOREIGNKEYS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeConnect.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFreeConnect.cpp deleted file mode 100644 index 9ac84710ccea70cc3a55167342cc53abd0b846ef..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeConnect.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLFreeConnect( - SQLHDBC ConnectionHandle) -{ - driver_enter(SQL_API_SQLFREECONNECT); - const char* const sqlFunction = "SQLFreeConnect"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLFREECONNECT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleEnv* pEnv = pDbc->getEnv(); - try { - pEnv->sqlFreeConnect(ctx, pDbc); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (! ctx.ok()) { - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFREECONNECT); - return ret; - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - delete &ctx; - driver_exit(SQL_API_SQLFREECONNECT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeEnv.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFreeEnv.cpp deleted file mode 100644 index 7e35056feb582eea5d48d3d3948adc72230dd0e4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeEnv.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLFreeEnv( - SQLHENV EnvironmentHandle) -{ - driver_enter(SQL_API_SQLFREEENV); - const char* const sqlFunction = "SQLFreeEnv"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLFREEENV); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pRoot->sqlFreeEnv(ctx, pEnv); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (! ctx.ok()) { - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFREEENV); - return ret; - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - delete &ctx; - driver_exit(SQL_API_SQLFREEENV); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeHandle.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFreeHandle.cpp deleted file mode 100644 index 284463cbb077d455a3552197008c367066ccdd7f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeHandle.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLFreeHandle( - SQLSMALLINT HandleType, - SQLHANDLE Handle) -{ - driver_enter(SQL_API_SQLFREEHANDLE); - const char* const sqlFunction = "SQLFreeHandle"; - HandleRoot* const pRoot = HandleRoot::instance(); - SQLSMALLINT parentType = pRoot->findParentType(HandleType); - if (parentType == -1) { - driver_exit(SQL_API_SQLFREEHANDLE); - return SQL_INVALID_HANDLE; - } - HandleBase* pChild = pRoot->findBase(HandleType, Handle); - if (pChild == 0) { - driver_exit(SQL_API_SQLFREEHANDLE); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleBase* pParent = pChild->getParent(); - ctx_assert(pParent != 0); - try { - pParent->sqlFreeHandle(ctx, HandleType, pChild); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (! ctx.ok()) { - pChild->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFREEHANDLE); - return ret; - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - delete &ctx; - driver_exit(SQL_API_SQLFREEHANDLE); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeStmt.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLFreeStmt.cpp deleted file mode 100644 index 7af6623a37a4b6f2be191dbe6aeb4bb45bebff37..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLFreeStmt.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLFreeStmt( - SQLHSTMT StatementHandle, - SQLUSMALLINT Option) -{ - driver_enter(SQL_API_SQLFREESTMT); - const char* const sqlFunction = "SQLFreeStmt"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLFREESTMT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - HandleDbc* pDbc = pStmt->getDbc(); - try { - pDbc->sqlFreeStmt(ctx, pStmt, Option); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - if (! ctx.ok() || Option != SQL_DROP) { - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLFREESTMT); - return ret; - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - delete &ctx; - driver_exit(SQL_API_SQLFREESTMT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectAttr.cpp deleted file mode 100644 index 66c1f3827e1ceb291826e637045933358c4a0a9f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectAttr.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetConnectAttr( - SQLHDBC ConnectionHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER BufferLength, - SQLINTEGER* StringLength) -{ - driver_enter(SQL_API_SQLGETCONNECTATTR); - const char* const sqlFunction = "SQLGetConnectAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLGETCONNECTATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlGetConnectAttr(ctx, Attribute, Value, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETCONNECTATTR); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectOption.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectOption.cpp deleted file mode 100644 index 514bedb12b9fd2982c2422da65a04b1a5b463bc0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetConnectOption.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetConnectOption( - SQLHDBC ConnectionHandle, - SQLUSMALLINT Option, - SQLPOINTER Value) -{ - driver_enter(SQL_API_SQLGETCONNECTOPTION); - const char* const sqlFunction = "SQLGetConnectOption"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLGETCONNECTOPTION); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlGetConnectOption(ctx, Option, Value); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETCONNECTOPTION); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetCursorName.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetCursorName.cpp deleted file mode 100644 index d54bdf42005a2388806eb1c9ebe81bd326699643..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetCursorName.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetCursorName( - SQLHSTMT StatementHandle, - SQLCHAR* CursorName, - SQLSMALLINT BufferLength, - SQLSMALLINT* NameLength) -{ - driver_enter(SQL_API_SQLGETCURSORNAME); - const char* const sqlFunction = "SQLGetCursorName"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLGETCURSORNAME); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlGetCursorName(ctx, CursorName, BufferLength, NameLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETCURSORNAME); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetData.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetData.cpp deleted file mode 100644 index 3b6987c515db1ae9c9d58897aa55d94e64ca6f03..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetData.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetData( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLSMALLINT TargetType, - SQLPOINTER TargetValue, - SQLINTEGER BufferLength, - SQLINTEGER* StrLen_or_Ind) -{ - driver_enter(SQL_API_SQLGETDATA); - const char* const sqlFunction = "SQLGetData"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLGETDATA); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlGetData(ctx, ColumnNumber, TargetType, TargetValue, BufferLength, StrLen_or_Ind); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETDATA); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescField.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescField.cpp deleted file mode 100644 index 6cc390a58ed6de6cf39891ed4b90326ce506744b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescField.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetDescField( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLSMALLINT FieldIdentifier, - SQLPOINTER Value, - SQLINTEGER BufferLength, - SQLINTEGER* StringLength) -{ - driver_enter(SQL_API_SQLGETDESCFIELD); - const char* const sqlFunction = "SQLGetDescField"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDesc* pDesc = pRoot->findDesc(DescriptorHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLGETDESCFIELD); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDesc->sqlGetDescField(ctx, RecNumber, FieldIdentifier, Value, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDesc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETDESCFIELD); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescRec.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescRec.cpp deleted file mode 100644 index c7e9631b0751bb5531f7b36dd48de6301430f835..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDescRec.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetDescRec( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLCHAR* Name, - SQLSMALLINT BufferLength, - SQLSMALLINT* StringLength, - SQLSMALLINT* Type, - SQLSMALLINT* SubType, - SQLINTEGER* Length, - SQLSMALLINT* Precision, - SQLSMALLINT* Scale, - SQLSMALLINT* Nullable) -{ - driver_enter(SQL_API_SQLGETDESCREC); - const char* const sqlFunction = "SQLGetDescRec"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDesc* pDesc = pRoot->findDesc(DescriptorHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLGETDESCREC); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDesc->sqlGetDescRec(ctx, RecNumber, Name, BufferLength, StringLength, Type, SubType, Length, Precision, Scale, Nullable); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDesc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETDESCREC); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagField.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagField.cpp deleted file mode 100644 index 3eb34f7ebf67eb2ea83c55a6e96f38e9f0b8eea4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagField.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetDiagField( - SQLSMALLINT HandleType, - SQLHANDLE Handle, - SQLSMALLINT RecNumber, - SQLSMALLINT DiagIdentifier, - SQLPOINTER DiagInfo, - SQLSMALLINT BufferLength, - SQLSMALLINT* StringLength) -{ - driver_enter(SQL_API_SQLGETDIAGFIELD); - const char* const sqlFunction = "SQLGetDiagField"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleBase* pBase = pRoot->findBase(HandleType, Handle); - if (pBase == 0) { - driver_exit(SQL_API_SQLGETDIAGFIELD); - return SQL_INVALID_HANDLE; - } - Ctx ctx; // discard diagnostics - ctx.logSqlEnter(sqlFunction); - try { - pBase->sqlGetDiagField(ctx, RecNumber, DiagIdentifier, DiagInfo, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETDIAGFIELD); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagRec.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagRec.cpp deleted file mode 100644 index 448c5206d76b499cad50f5fa2d7f3b3aa4825295..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetDiagRec.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetDiagRec( - SQLSMALLINT HandleType, - SQLHANDLE Handle, - SQLSMALLINT RecNumber, - SQLCHAR* Sqlstate, - SQLINTEGER* NativeError, - SQLCHAR* MessageText, - SQLSMALLINT BufferLength, - SQLSMALLINT* TextLength) -{ - driver_enter(SQL_API_SQLGETDIAGREC); - const char* const sqlFunction = "SQLGetDiagRec"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleBase* pBase = pRoot->findBase(HandleType, Handle); - if (pBase == 0) { - driver_exit(SQL_API_SQLGETDIAGREC); - return SQL_INVALID_HANDLE; - } - Ctx ctx; // discard diagnostics - ctx.logSqlEnter(sqlFunction); - try { - pBase->sqlGetDiagRec(ctx, RecNumber, Sqlstate, NativeError, MessageText, BufferLength, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETDIAGREC); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetEnvAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetEnvAttr.cpp deleted file mode 100644 index c93870326e453538ceb18ce702e7688a240dcf61..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetEnvAttr.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetEnvAttr( - SQLHENV EnvironmentHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER BufferLength, - SQLINTEGER* StringLength) -{ - driver_enter(SQL_API_SQLGETENVATTR); - const char* const sqlFunction = "SQLGetEnvAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - if (EnvironmentHandle == 0) { - // process-level attributes - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pRoot->sqlGetRootAttr(ctx, Attribute, Value, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pRoot->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETENVATTR); - return ret; - } else { - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLGETENVATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pEnv->sqlGetEnvAttr(ctx, Attribute, Value, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETENVATTR); - return ret; - } - return SQL_ERROR; // not reached -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetFunctions.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetFunctions.cpp deleted file mode 100644 index 68416fab1a6c0fc544423ab1ff9073c105162e10..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetFunctions.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetFunctions( - SQLHDBC ConnectionHandle, - SQLUSMALLINT FunctionId, - SQLUSMALLINT* Supported) -{ - driver_enter(SQL_API_SQLGETFUNCTIONS); - const char* const sqlFunction = "SQLGetFunctions"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLGETFUNCTIONS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlGetFunctions(ctx, FunctionId, Supported); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETFUNCTIONS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetInfo.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetInfo.cpp deleted file mode 100644 index 8f0a0d67cfa0fab22783c76be91343e588ef7e41..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetInfo.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetInfo( - SQLHDBC ConnectionHandle, - SQLUSMALLINT InfoType, - SQLPOINTER InfoValue, - SQLSMALLINT BufferLength, - SQLSMALLINT* StringLength) -{ - driver_enter(SQL_API_SQLGETINFO); - const char* const sqlFunction = "SQLGetInfo"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLGETINFO); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlGetInfo(ctx, InfoType, InfoValue, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETINFO); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtAttr.cpp deleted file mode 100644 index 990ab68808aa982d3f7820440d7ca8443a37561a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtAttr.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLGetStmtAttr( - SQLHSTMT StatementHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER BufferLength, - SQLINTEGER* StringLength) -{ - driver_enter(SQL_API_SQLGETSTMTATTR); - const char* const sqlFunction = "SQLGetStmtAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLGETSTMTATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlGetStmtAttr(ctx, Attribute, Value, BufferLength, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETSTMTATTR); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtOption.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtOption.cpp deleted file mode 100644 index 0b5758b12124f2a819bf8f0836c98bd9b6bf7352..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetStmtOption.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetStmtOption( - SQLHSTMT StatementHandle, - SQLUSMALLINT Option, - SQLPOINTER Value) -{ - driver_enter(SQL_API_SQLGETSTMTOPTION); - const char* const sqlFunction = "SQLGetStmtOption"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLGETSTMTOPTION); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlGetStmtOption(ctx, Option, Value); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETSTMTOPTION); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLGetTypeInfo.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLGetTypeInfo.cpp deleted file mode 100644 index e6a016cc40038080e4a41aac0b8ea72e81c7b29a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLGetTypeInfo.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLGetTypeInfo( - SQLHSTMT StatementHandle, - SQLSMALLINT DataType) -{ - driver_enter(SQL_API_SQLGETTYPEINFO); - const char* const sqlFunction = "SQLGetTypeInfo"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLGETTYPEINFO); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlGetTypeInfo(ctx, DataType); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLGETTYPEINFO); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLMoreResults.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLMoreResults.cpp deleted file mode 100644 index d23d653a3198d1389e6f9ef31ecae89c50b56ade..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLMoreResults.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLMoreResults( - SQLHSTMT hstmt) -{ - driver_enter(SQL_API_SQLMORERESULTS); - const char* const sqlFunction = "SQLMoreResults"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLMORERESULTS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlMoreResults(ctx); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLMORERESULTS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLNativeSql.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLNativeSql.cpp deleted file mode 100644 index fb8a9bbf3d9e1c1595508e364a2fa8b111afdcaf..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLNativeSql.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLNativeSql( - SQLHDBC hdbc, - SQLCHAR* szSqlStrIn, - SQLINTEGER cbSqlStrIn, - SQLCHAR* szSqlStr, - SQLINTEGER cbSqlStrMax, - SQLINTEGER* pcbSqlStr) -{ -#ifndef auto_SQLNativeSql - const char* const sqlFunction = "SQLNativeSql"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLNATIVESQL); - const char* const sqlFunction = "SQLNativeSql"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(hdbc); - if (pDbc == 0) { - driver_exit(SQL_API_SQLNATIVESQL); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pDbc->sqlNativeSql( - ctx, - &szSqlStrIn, - cbSqlStrIn, - &szSqlStr, - cbSqlStrMax, - &pcbSqlStr - ); - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLNATIVESQL); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLNumParams.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLNumParams.cpp deleted file mode 100644 index 7b1a6a07aec0b86d4d483a26903cef766e96bf07..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLNumParams.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLNumParams( - SQLHSTMT StatementHandle, - SQLSMALLINT* ParameterCountPtr) -{ - driver_enter(SQL_API_SQLNUMPARAMS); - const char* const sqlFunction = "SQLNumParams"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLNUMPARAMS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlNumParams(ctx, ParameterCountPtr); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLNUMPARAMS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLNumResultCols.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLNumResultCols.cpp deleted file mode 100644 index 2e70897a9a20870a2d17a2a6c11c2c4e84fcffe0..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLNumResultCols.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLNumResultCols( - SQLHSTMT StatementHandle, - SQLSMALLINT* ColumnCount) -{ - driver_enter(SQL_API_SQLNUMRESULTCOLS); - const char* const sqlFunction = "SQLNumResultCols"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLNUMRESULTCOLS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlNumResultCols(ctx, ColumnCount); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLNUMRESULTCOLS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLParamData.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLParamData.cpp deleted file mode 100644 index 4eb38a010f416ee2a9dc475c63679f73c0b29d2a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLParamData.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLParamData( - SQLHSTMT StatementHandle, - SQLPOINTER* Value) -{ - driver_enter(SQL_API_SQLPARAMDATA); - const char* const sqlFunction = "SQLParamData"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPARAMDATA); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlParamData(ctx, Value); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPARAMDATA); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLParamOptions.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLParamOptions.cpp deleted file mode 100644 index 59b7dcf7fa9c3f49e65952f7092dc2f5ac4e164a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLParamOptions.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLParamOptions( - SQLHSTMT hstmt, - SQLUINTEGER crow, - SQLUINTEGER* pirow) -{ -#ifndef auto_SQLParamOptions - const char* const sqlFunction = "SQLParamOptions"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLPARAMOPTIONS); - const char* const sqlFunction = "SQLParamOptions"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPARAMOPTIONS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlParamOptions( - ctx, - crow, - &pirow - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPARAMOPTIONS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLPrepare.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLPrepare.cpp deleted file mode 100644 index b1205fa6e3adbc8f423b6a5b25923a2f2c64b3d7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLPrepare.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLPrepare( - SQLHSTMT StatementHandle, - SQLCHAR* StatementText, - SQLINTEGER TextLength) -{ - driver_enter(SQL_API_SQLPREPARE); - const char* const sqlFunction = "SQLPrepare"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPREPARE); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlPrepare(ctx, StatementText, TextLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPREPARE); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLPrimaryKeys.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLPrimaryKeys.cpp deleted file mode 100644 index 2d562ae3e19178982e23c58e12a3cd65ee137c46..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLPrimaryKeys.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLPrimaryKeys( - SQLHSTMT hstmt, - SQLCHAR* szCatalogName, - SQLSMALLINT cbCatalogName, - SQLCHAR* szSchemaName, - SQLSMALLINT cbSchemaName, - SQLCHAR* szTableName, - SQLSMALLINT cbTableName) -{ - driver_enter(SQL_API_SQLPRIMARYKEYS); - const char* const sqlFunction = "SQLPrimaryKeys"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPRIMARYKEYS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - pStmt->sqlPrimaryKeys(ctx, szCatalogName, cbCatalogName, szSchemaName, cbSchemaName, szTableName, cbTableName); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPRIMARYKEYS); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLProcedureColumns.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLProcedureColumns.cpp deleted file mode 100644 index 2e42e428b87227a4212189417f4d8ff199629ccf..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLProcedureColumns.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLProcedureColumns( - SQLHSTMT hstmt, - SQLCHAR* szCatalogName, - SQLSMALLINT cbCatalogName, - SQLCHAR* szSchemaName, - SQLSMALLINT cbSchemaName, - SQLCHAR* szProcName, - SQLSMALLINT cbProcName, - SQLCHAR* szColumnName, - SQLSMALLINT cbColumnName) -{ -#ifndef auto_SQLProcedureColumns - const char* const sqlFunction = "SQLProcedureColumns"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLPROCEDURECOLUMNS); - const char* const sqlFunction = "SQLProcedureColumns"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPROCEDURECOLUMNS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlProcedureColumns( - ctx, - &szCatalogName, - cbCatalogName, - &szSchemaName, - cbSchemaName, - &szProcName, - cbProcName, - &szColumnName, - cbColumnName - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPROCEDURECOLUMNS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLProcedures.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLProcedures.cpp deleted file mode 100644 index 1f3a9f89073284af5baf5e2400a08c2620ded1c2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLProcedures.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLProcedures( - SQLHSTMT hstmt, - SQLCHAR* szCatalogName, - SQLSMALLINT cbCatalogName, - SQLCHAR* szSchemaName, - SQLSMALLINT cbSchemaName, - SQLCHAR* szProcName, - SQLSMALLINT cbProcName) -{ -#ifndef auto_SQLProcedures - const char* const sqlFunction = "SQLProcedures"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLPROCEDURES); - const char* const sqlFunction = "SQLProcedures"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPROCEDURES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlProcedures( - ctx, - &szCatalogName, - cbCatalogName, - &szSchemaName, - cbSchemaName, - &szProcName, - cbProcName - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPROCEDURES); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLPutData.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLPutData.cpp deleted file mode 100644 index a4715a836d2f020eb50244b91d822a0769886e73..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLPutData.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLPutData( - SQLHSTMT StatementHandle, - SQLPOINTER Data, - SQLINTEGER StrLen_or_Ind) -{ - driver_enter(SQL_API_SQLPUTDATA); - const char* const sqlFunction = "SQLPutData"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLPUTDATA); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlPutData(ctx, Data, StrLen_or_Ind); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLPUTDATA); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLRowCount.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLRowCount.cpp deleted file mode 100644 index d03f954386a050c6a3f33459248a12f25ff69625..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLRowCount.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLRowCount( - SQLHSTMT StatementHandle, - SQLINTEGER* RowCount) -{ - driver_enter(SQL_API_SQLROWCOUNT); - const char* const sqlFunction = "SQLRowCount"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLROWCOUNT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlRowCount(ctx, RowCount); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLROWCOUNT); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectAttr.cpp deleted file mode 100644 index 05bfce5e9cddc605320f07e1c3d30610a27a5c28..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectAttr.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLSetConnectAttr( - SQLHDBC ConnectionHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER StringLength) -{ - driver_enter(SQL_API_SQLSETCONNECTATTR); - const char* const sqlFunction = "SQLSetConnectAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLSETCONNECTATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlSetConnectAttr(ctx, Attribute, Value, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETCONNECTATTR); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectOption.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectOption.cpp deleted file mode 100644 index a4794316971459c377bd93c47d302212a5d1c7bd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetConnectOption.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetConnectOption( - SQLHDBC ConnectionHandle, - SQLUSMALLINT Option, - SQLUINTEGER Value) -{ - driver_enter(SQL_API_SQLSETCONNECTOPTION); - const char* const sqlFunction = "SQLSetConnectOption"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLSETCONNECTOPTION); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlSetConnectOption(ctx, Option, Value); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETCONNECTOPTION); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetCursorName.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetCursorName.cpp deleted file mode 100644 index 291ad817d421f14fdc627fd22fd04ade0281fb75..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetCursorName.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetCursorName( - SQLHSTMT StatementHandle, - SQLCHAR* CursorName, - SQLSMALLINT NameLength) -{ - driver_enter(SQL_API_SQLSETCURSORNAME); - const char* const sqlFunction = "SQLSetCursorName"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETCURSORNAME); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlSetCursorName(ctx, CursorName, NameLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETCURSORNAME); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescField.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescField.cpp deleted file mode 100644 index 19d34c2f46d2f994b291168a2e682e33c5b53501..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescField.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLSetDescField( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLSMALLINT FieldIdentifier, - SQLPOINTER Value, - SQLINTEGER BufferLength) -{ - driver_enter(SQL_API_SQLSETDESCFIELD); - const char* const sqlFunction = "SQLSetDescField"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDesc* pDesc = pRoot->findDesc(DescriptorHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLSETDESCFIELD); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDesc->sqlSetDescField(ctx, RecNumber, FieldIdentifier, Value, BufferLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDesc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETDESCFIELD); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescRec.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescRec.cpp deleted file mode 100644 index 80a00514a51e94de81401709471f095bc69472c9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetDescRec.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLSetDescRec( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLSMALLINT Type, - SQLSMALLINT SubType, - SQLINTEGER Length, - SQLSMALLINT Precision, - SQLSMALLINT Scale, - SQLPOINTER Data, - SQLINTEGER* StringLength, - SQLINTEGER* Indicator) -{ - driver_enter(SQL_API_SQLSETDESCREC); - const char* const sqlFunction = "SQLSetDescRec"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleDesc* pDesc = pRoot->findDesc(DescriptorHandle); - if (pDesc == 0) { - driver_exit(SQL_API_SQLSETDESCREC); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDesc->sqlSetDescRec(ctx, RecNumber, Type, SubType, Length, Precision, Scale, Data, StringLength, Indicator); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDesc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETDESCREC); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetEnvAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetEnvAttr.cpp deleted file mode 100644 index 86364eac5e8789af7a7600887a834895ad624e4b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetEnvAttr.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLSetEnvAttr( - SQLHENV EnvironmentHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER StringLength) -{ - driver_enter(SQL_API_SQLSETENVATTR); - const char* const sqlFunction = "SQLSetEnvAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - if (EnvironmentHandle == 0) { - // process-level attributes - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pRoot->sqlSetRootAttr(ctx, Attribute, Value, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pRoot->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETENVATTR); - return ret; - } else { - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLSETENVATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pEnv->sqlSetEnvAttr(ctx, Attribute, Value, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETENVATTR); - return ret; - } - return SQL_ERROR; // not reached -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetParam.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetParam.cpp deleted file mode 100644 index 03bde1076d8924ea3cf8f9c2da51795d35f3da9e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetParam.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetParam( - SQLHSTMT StatementHandle, - SQLUSMALLINT ParameterNumber, - SQLSMALLINT ValueType, - SQLSMALLINT ParameterType, - SQLUINTEGER LengthPrecision, - SQLSMALLINT ParameterScale, - SQLPOINTER ParameterValue, - SQLINTEGER* StrLen_or_Ind) -{ - driver_enter(SQL_API_SQLSETPARAM); - const char* const sqlFunction = "SQLSetParam"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETPARAM); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlSetParam(ctx, ParameterNumber, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, StrLen_or_Ind); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETPARAM); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetPos.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetPos.cpp deleted file mode 100644 index 653030f90bc7db95efd45b350e6b1372987133e9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetPos.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetPos( - SQLHSTMT hstmt, - SQLUSMALLINT irow, - SQLUSMALLINT fOption, - SQLUSMALLINT fLock) -{ -#ifndef auto_SQLSetPos - const char* const sqlFunction = "SQLSetPos"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLSETPOS); - const char* const sqlFunction = "SQLSetPos"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETPOS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlSetPos( - ctx, - irow, - fOption, - fLock - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETPOS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetScrollOptions.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetScrollOptions.cpp deleted file mode 100644 index a5e89d8568baf61cdea16aa07bf14ef584ed24a2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetScrollOptions.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetScrollOptions( - SQLHSTMT hstmt, - SQLUSMALLINT fConcurrency, - SQLINTEGER crowKeyset, - SQLUSMALLINT crowRowset) -{ -#ifndef auto_SQLSetScrollOptions - const char* const sqlFunction = "SQLSetScrollOptions"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLSETSCROLLOPTIONS); - const char* const sqlFunction = "SQLSetScrollOptions"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETSCROLLOPTIONS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlSetScrollOptions( - ctx, - fConcurrency, - crowKeyset, - crowRowset - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETSCROLLOPTIONS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtAttr.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtAttr.cpp deleted file mode 100644 index 9ed6a83b563b3a9feaba4e9e9ee1252939653de8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtAttr.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0300 -SQLRETURN SQL_API -SQLSetStmtAttr( - SQLHSTMT StatementHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER StringLength) -{ - driver_enter(SQL_API_SQLSETSTMTATTR); - const char* const sqlFunction = "SQLSetStmtAttr"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETSTMTATTR); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlSetStmtAttr(ctx, Attribute, Value, StringLength); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETSTMTATTR); - return ret; -} -#endif // ODBCVER >= 0x0300 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtOption.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtOption.cpp deleted file mode 100644 index b403fc8408cdea0ddd7f4753c2199b4e14163ce9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSetStmtOption.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSetStmtOption( - SQLHSTMT StatementHandle, - SQLUSMALLINT Option, - SQLUINTEGER Value) -{ - driver_enter(SQL_API_SQLSETSTMTOPTION); - const char* const sqlFunction = "SQLSetStmtOption"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSETSTMTOPTION); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pStmt->sqlSetStmtOption(ctx, Option, Value); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSETSTMTOPTION); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLSpecialColumns.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLSpecialColumns.cpp deleted file mode 100644 index 5dd92c86053690dd4a172cf22471515a499c16cc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLSpecialColumns.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLSpecialColumns( - SQLHSTMT StatementHandle, - SQLUSMALLINT IdentifierType, - SQLCHAR* CatalogName, - SQLSMALLINT NameLength1, - SQLCHAR* SchemaName, - SQLSMALLINT NameLength2, - SQLCHAR* TableName, - SQLSMALLINT NameLength3, - SQLUSMALLINT Scope, - SQLUSMALLINT Nullable) -{ -#ifndef auto_SQLSpecialColumns - const char* const sqlFunction = "SQLSpecialColumns"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLSPECIALCOLUMNS); - const char* const sqlFunction = "SQLSpecialColumns"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSPECIALCOLUMNS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlSpecialColumns( - ctx, - IdentifierType, - &CatalogName, - NameLength1, - &SchemaName, - NameLength2, - &TableName, - NameLength3, - Scope, - Nullable - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSPECIALCOLUMNS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLStatistics.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLStatistics.cpp deleted file mode 100644 index 941fb6249a50cd8ddd86f3499eeabd2361f5f62f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLStatistics.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLStatistics( - SQLHSTMT StatementHandle, - SQLCHAR* CatalogName, - SQLSMALLINT NameLength1, - SQLCHAR* SchemaName, - SQLSMALLINT NameLength2, - SQLCHAR* TableName, - SQLSMALLINT NameLength3, - SQLUSMALLINT Unique, - SQLUSMALLINT Reserved) -{ -#ifndef auto_SQLStatistics - const char* const sqlFunction = "SQLStatistics"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLSTATISTICS); - const char* const sqlFunction = "SQLStatistics"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLSTATISTICS); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlStatistics( - ctx, - &CatalogName, - NameLength1, - &SchemaName, - NameLength2, - &TableName, - NameLength3, - Unique, - Reserved - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLSTATISTICS); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLTablePrivileges.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLTablePrivileges.cpp deleted file mode 100644 index 23c6ad9fc4bc632f2a41bc0a6a6a92ecd4582170..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLTablePrivileges.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLTablePrivileges( - SQLHSTMT hstmt, - SQLCHAR* szCatalogName, - SQLSMALLINT cbCatalogName, - SQLCHAR* szSchemaName, - SQLSMALLINT cbSchemaName, - SQLCHAR* szTableName, - SQLSMALLINT cbTableName) -{ -#ifndef auto_SQLTablePrivileges - const char* const sqlFunction = "SQLTablePrivileges"; - Ctx ctx; - ctx_log1(("*** not implemented: %s", sqlFunction)); - return SQL_ERROR; -#else - driver_enter(SQL_API_SQLTABLEPRIVILEGES); - const char* const sqlFunction = "SQLTablePrivileges"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(hstmt); - if (pStmt == 0) { - driver_exit(SQL_API_SQLTABLEPRIVILEGES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - if (ctx.ok()) - pStmt->sqlTablePrivileges( - ctx, - &szCatalogName, - cbCatalogName, - &szSchemaName, - cbSchemaName, - &szTableName, - cbTableName - ); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLTABLEPRIVILEGES); - return ret; -#endif -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLTables.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLTables.cpp deleted file mode 100644 index b2496bfba87078bcf60770a485df89cdfb26461f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLTables.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLTables( - SQLHSTMT StatementHandle, - SQLCHAR* CatalogName, - SQLSMALLINT NameLength1, - SQLCHAR* SchemaName, - SQLSMALLINT NameLength2, - SQLCHAR* TableName, - SQLSMALLINT NameLength3, - SQLCHAR* TableType, - SQLSMALLINT NameLength4) -{ - driver_enter(SQL_API_SQLTABLES); - const char* const sqlFunction = "SQLTables"; - HandleRoot* const pRoot = HandleRoot::instance(); - HandleStmt* pStmt = pRoot->findStmt(StatementHandle); - if (pStmt == 0) { - driver_exit(SQL_API_SQLTABLES); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - pStmt->sqlTables(ctx, CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4); - pStmt->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLTABLES); - return ret; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/SQLTransact.cpp b/storage/ndb/src/old_files/client/odbc/driver/SQLTransact.cpp deleted file mode 100644 index da8b46b15962dedea4a45a3c62faee1d34e9f9fd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/SQLTransact.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" - -#if ODBCVER >= 0x0000 -SQLRETURN SQL_API -SQLTransact( - SQLHENV EnvironmentHandle, - SQLHDBC ConnectionHandle, - SQLUSMALLINT CompletionType) -{ - driver_enter(SQL_API_SQLTRANSACT); - const char* const sqlFunction = "SQLTransact"; - HandleRoot* const pRoot = HandleRoot::instance(); - // check connection first and ignore environment - if (ConnectionHandle != SQL_NULL_HANDLE) { - HandleDbc* pDbc = pRoot->findDbc(ConnectionHandle); - if (pDbc == 0) { - driver_exit(SQL_API_SQLTRANSACT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pDbc->sqlTransact(ctx, CompletionType); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pDbc->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLTRANSACT); - return ret; - } - if (EnvironmentHandle != SQL_NULL_HANDLE) { - HandleEnv* pEnv = pRoot->findEnv(EnvironmentHandle); - if (pEnv == 0) { - driver_exit(SQL_API_SQLTRANSACT); - return SQL_INVALID_HANDLE; - } - Ctx& ctx = *new Ctx; - ctx.logSqlEnter(sqlFunction); - try { - pEnv->sqlTransact(ctx, CompletionType); - } catch (CtxAssert& ctxAssert) { - ctx.handleEx(ctxAssert); - } - pEnv->saveCtx(ctx); - ctx.logSqlExit(); - SQLRETURN ret = ctx.getCode(); - driver_exit(SQL_API_SQLTRANSACT); - return ret; - } - driver_exit(SQL_API_SQLTRANSACT); - return SQL_INVALID_HANDLE; -} -#endif // ODBCVER >= 0x0000 diff --git a/storage/ndb/src/old_files/client/odbc/driver/driver.cpp b/storage/ndb/src/old_files/client/odbc/driver/driver.cpp deleted file mode 100644 index f992fa708781b9f5a6ede4b227c23db42b163dce..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/driver.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "driver.hpp" -#include <NdbMutex.h> - -#undef NDB_ODBC_SIG_DFL -#ifdef NDB_ODBC_SIG_DFL -#include <signal.h> -#endif - -// The big mutex (just in case). - -#ifdef NDB_WIN32 -static NdbMutex & driver_mutex = * NdbMutex_Create(); -#else -static NdbMutex driver_mutex = NDB_MUTEX_INITIALIZER; -#endif - -static void -driver_lock() -{ - NdbMutex_Lock(&driver_mutex); -} - -static void -driver_unlock() -{ - NdbMutex_Unlock(&driver_mutex); -} - -// Hooks for function entry and exit. - -static inline void -driver_enter(SQLUSMALLINT functionId) -{ - switch (functionId) { - default: - break; - } -#ifdef NDB_ODBC_SIG_DFL - // XXX need to restore old sig - for (int i = 1; i <= 30; i++) - signal(i, SIG_DFL); -#endif -} - -static inline void -driver_exit(SQLUSMALLINT functionId) -{ - switch (functionId) { - default: - break; - } -} - -// Some C++ compilers (like gcc) cannot merge template code -// in different files. So compile all in one file. - -#include "SQLAllocConnect.cpp" -#include "SQLAllocEnv.cpp" -#include "SQLAllocHandle.cpp" -#include "SQLAllocHandleStd.cpp" -#include "SQLAllocStmt.cpp" -#include "SQLBindCol.cpp" -#include "SQLBindParam.cpp" -#include "SQLBindParameter.cpp" -#include "SQLBrowseConnect.cpp" -#include "SQLBulkOperations.cpp" -#include "SQLCancel.cpp" -#include "SQLCloseCursor.cpp" -#include "SQLColAttribute.cpp" -#include "SQLColAttributes.cpp" -#include "SQLColumnPrivileges.cpp" -#include "SQLColumns.cpp" -#include "SQLConnect.cpp" -#include "SQLCopyDesc.cpp" -#include "SQLDataSources.cpp" -#include "SQLDescribeCol.cpp" -#include "SQLDescribeParam.cpp" -#include "SQLDisconnect.cpp" -#include "SQLDriverConnect.cpp" -#include "SQLDrivers.cpp" -#include "SQLEndTran.cpp" -#include "SQLError.cpp" -#include "SQLExecDirect.cpp" -#include "SQLExecute.cpp" -#include "SQLExtendedFetch.cpp" -#include "SQLFetch.cpp" -#include "SQLFetchScroll.cpp" -#include "SQLForeignKeys.cpp" -#include "SQLFreeConnect.cpp" -#include "SQLFreeEnv.cpp" -#include "SQLFreeHandle.cpp" -#include "SQLFreeStmt.cpp" -#include "SQLGetConnectAttr.cpp" -#include "SQLGetConnectOption.cpp" -#include "SQLGetCursorName.cpp" -#include "SQLGetData.cpp" -#include "SQLGetDescField.cpp" -#include "SQLGetDescRec.cpp" -#include "SQLGetDiagField.cpp" -#include "SQLGetDiagRec.cpp" -#include "SQLGetEnvAttr.cpp" -#include "SQLGetFunctions.cpp" -#include "SQLGetInfo.cpp" -#include "SQLGetStmtAttr.cpp" -#include "SQLGetStmtOption.cpp" -#include "SQLGetTypeInfo.cpp" -#include "SQLMoreResults.cpp" -#include "SQLNativeSql.cpp" -#include "SQLNumParams.cpp" -#include "SQLNumResultCols.cpp" -#include "SQLParamData.cpp" -#include "SQLParamOptions.cpp" -#include "SQLPrepare.cpp" -#include "SQLPrimaryKeys.cpp" -#include "SQLProcedureColumns.cpp" -#include "SQLProcedures.cpp" -#include "SQLPutData.cpp" -#include "SQLRowCount.cpp" -#include "SQLSetConnectAttr.cpp" -#include "SQLSetConnectOption.cpp" -#include "SQLSetCursorName.cpp" -#include "SQLSetDescField.cpp" -#include "SQLSetDescRec.cpp" -#include "SQLSetEnvAttr.cpp" -#include "SQLSetParam.cpp" -#include "SQLSetPos.cpp" -#include "SQLSetScrollOptions.cpp" -#include "SQLSetStmtAttr.cpp" -#include "SQLSetStmtOption.cpp" -#include "SQLSpecialColumns.cpp" -#include "SQLStatistics.cpp" -#include "SQLTablePrivileges.cpp" -#include "SQLTables.cpp" -#include "SQLTransact.cpp" diff --git a/storage/ndb/src/old_files/client/odbc/driver/driver.hpp b/storage/ndb/src/old_files/client/odbc/driver/driver.hpp deleted file mode 100644 index 96d2e052c0d4123670df3c1237d981fb64ccf669..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/driver/driver.hpp +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_DRIVER_driver_hpp -#define ODBC_DRIVER_driver_hpp - -#include <common/common.hpp> -#include <common/OdbcData.hpp> -#include <handles/handles.hpp> - -#ifndef NDB_WIN32 -#define SQL_API -#endif - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_comp_op.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_comp_op.cpp deleted file mode 100644 index 40d3950a5920a5f796c2f9c82e45bd54db98b6e8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_comp_op.cpp +++ /dev/null @@ -1,518 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbScanFilter.hpp> -#include <NdbSqlUtil.hpp> -#include <codegen/Code_comp_op.hpp> - -void -Exec_comp_op::execInterp(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - const unsigned arity = code.m_op.arity(); - const Comp_op::Opcode opcode = code.m_op.m_opcode; - Data& data = getData(); - ctx_assert(ctl.m_scanFilter != 0); - NdbScanFilter& scanFilter = *ctl.m_scanFilter; - if (code.m_interpColumn == 0) { - // args are constant on this level so evaluate entire predicate - evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (data.m_value == Pred_value_true) - scanFilter.istrue(); - else - scanFilter.isfalse(); - return; - } - const NdbAttrId interpAttrId = code.m_interpAttrId; - if (arity == 1) { - ctx_assert(m_expr[1] != 0); - const SqlType& t1 = m_expr[1]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = m_expr[1]->getData().sqlField(); - switch (code.m_op.m_opcode) { - case Comp_op::Isnull: - scanFilter.isnull(interpAttrId); - break; - case Comp_op::Isnotnull: - scanFilter.isnotnull(interpAttrId); - break; - default: - ctx_assert(false); - break; - } - } else if (arity == 2) { - ctx_assert(m_expr[1] != 0 && m_expr[2] != 0); - // one is column and the other is constant at this level - ctx_assert(code.m_interpColumn == 1 || code.m_interpColumn == 2); - const unsigned i = code.m_interpColumn; - const unsigned j = 3 - i; - // evaluate the constant - m_expr[j]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlType& t1 = m_expr[i]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = m_expr[i]->getData().sqlField(); - const SqlType& t2 = m_expr[j]->getCode().sqlSpec().sqlType(); - const SqlField& f2 = m_expr[j]->getData().sqlField(); - // handle null constant - if (f2.sqlNull()) { - scanFilter.isfalse(); - return; - } - // handle null in interpreter - scanFilter.begin(NdbScanFilter::AND); - scanFilter.isnotnull(interpAttrId); - if (t1.type() == SqlType::Char || t1.type() == SqlType::Varchar) { - const char* v2 = 0; - unsigned n2 = 0; - bool nopad = false; - if (t1.type() == SqlType::Char && t2.type() == SqlType::Char) { - v2 = reinterpret_cast<const char*>(f2.sqlChar()); - n2 = t2.length(); - nopad = false; - } else if (t1.type() == SqlType::Char && t2.type() == SqlType::Varchar) { - v2 = reinterpret_cast<const char*>(f2.sqlVarchar(&n2)); - nopad = true; - } else if (t1.type() == SqlType::Varchar && t2.type() == SqlType::Char) { - v2 = reinterpret_cast<const char*>(f2.sqlChar()); - n2 = t2.length(); - nopad = true; - } else if (t1.type() == SqlType::Varchar && t2.type() == SqlType::Varchar) { - v2 = reinterpret_cast<const char*>(f2.sqlVarchar(&n2)); - nopad = true; - } else { - ctx_assert(false); - } - switch (opcode) { - case Comp_op::Eq: - scanFilter.eq(interpAttrId, v2, n2, nopad); - break; - case Comp_op::Noteq: - scanFilter.ne(interpAttrId, v2, n2, nopad); - break; - case Comp_op::Lt: - if (i == 1) { - scanFilter.lt(interpAttrId, v2, n2, nopad); - } else { - scanFilter.gt(interpAttrId, v2, n2, nopad); - } - break; - case Comp_op::Lteq: - if (i == 1) { - scanFilter.le(interpAttrId, v2, n2, nopad); - } else { - scanFilter.ge(interpAttrId, v2, n2, nopad); - } - break; - case Comp_op::Gt: - if (i == 1) { - scanFilter.gt(interpAttrId, v2, n2, nopad); - } else { - scanFilter.lt(interpAttrId, v2, n2, nopad); - } - break; - case Comp_op::Gteq: - if (i == 1) { - scanFilter.ge(interpAttrId, v2, n2, nopad); - } else { - scanFilter.le(interpAttrId, v2, n2, nopad); - } - break; - case Comp_op::Like: - scanFilter.like(interpAttrId, v2, n2, nopad); - break; - case Comp_op::Notlike: - scanFilter.notlike(interpAttrId, v2, n2, nopad); - break; - default: - ctx_assert(false); - break; - } - } else if (t1.type() == SqlType::Smallint || t1.type() == SqlType::Integer || t1.type() == SqlType::Bigint) { - ctx_assert(t1.unSigned()); - bool s2 = ! t2.unSigned(); - SqlBigint v2; - SqlUbigint uv2; - if (s2) { - v2 = - t2.type() == SqlType::Smallint ? f2.sqlSmallint() : - t2.type() == SqlType::Integer ? f2.sqlInteger() : f2.sqlBigint(); - uv2 = v2; - } else { - uv2 = - t2.type() == SqlType::Smallint ? (SqlUsmallint)f2.sqlSmallint() : - t2.type() == SqlType::Integer ? (SqlUinteger)f2.sqlInteger() : (SqlUbigint)f2.sqlBigint(); - v2 = uv2; - } - switch (code.m_op.m_opcode) { - case Comp_op::Eq: - if (s2 && v2 < 0) - scanFilter.isfalse(); - else - scanFilter.eq(interpAttrId, uv2); - break; - case Comp_op::Noteq: - if (s2 && v2 < 0) - scanFilter.istrue(); - else - scanFilter.ne(interpAttrId, uv2); - break; - case Comp_op::Lt: - if (i == 1) { - if (s2 && v2 < 0) - scanFilter.isfalse(); - else - scanFilter.lt(interpAttrId, uv2); - } else { - if (s2 && v2 < 0) - scanFilter.istrue(); - else - scanFilter.gt(interpAttrId, uv2); - } - break; - case Comp_op::Lteq: - if (i == 1) { - if (s2 && v2 < 0) - scanFilter.isfalse(); - else - scanFilter.le(interpAttrId, uv2); - } else { - if (s2 && v2 < 0) - scanFilter.istrue(); - else - scanFilter.ge(interpAttrId, uv2); - } - break; - case Comp_op::Gt: - if (i == 1) { - if (s2 && v2 < 0) - scanFilter.istrue(); - else - scanFilter.gt(interpAttrId, uv2); - } else { - if (s2 && v2 < 0) - scanFilter.isfalse(); - else - scanFilter.lt(interpAttrId, uv2); - } - break; - case Comp_op::Gteq: - if (i == 1) { - if (s2 && v2 < 0) - scanFilter.istrue(); - else - scanFilter.ge(interpAttrId, uv2); - } else { - if (s2 && v2 < 0) - scanFilter.isfalse(); - else - scanFilter.le(interpAttrId, uv2); - } - break; - default: - ctx_assert(false); - break; - } - } else { - ctx_assert(false); - } - // end null guard - scanFilter.end(); - } else { - ctx_assert(false); - } -} - -static bool -do_sqlchar_comp(Comp_op::Opcode opcode, const SqlChar* s1, unsigned n1, const SqlChar* s2, unsigned n2, bool padded) -{ - int ret = NdbSqlUtil::char_compare(reinterpret_cast<const char*>(s1), n1, reinterpret_cast<const char *>(s2), n2, padded); - switch (opcode) { - case Comp_op::Eq: - return ret == 0; - case Comp_op::Noteq: - return ret != 0; - case Comp_op::Lt: - return ret < 0; - case Comp_op::Lteq: - return ret <= 0; - case Comp_op::Gt: - return ret > 0; - case Comp_op::Gteq: - return ret >= 0; - default: - break; - } - ctx_assert(false); - return false; -} - -static bool -do_sqlchar_like(const SqlChar* s1, unsigned n1, const SqlChar* s2, unsigned n2, bool padded) -{ - bool ret = NdbSqlUtil::char_like(reinterpret_cast<const char*>(s1), n1, reinterpret_cast<const char *>(s2), n2, padded); - return ret; -} - -static bool -do_datetime_comp(Comp_op::Opcode opcode, SqlDatetime v1, SqlDatetime v2) -{ - int k = v1.less(v2) ? -1 : v2.less(v1) ? 1 : 0; - switch (opcode) { - case Comp_op::Eq: - return k == 0; - case Comp_op::Noteq: - return k != 0; - case Comp_op::Lt: - return k < 0; - case Comp_op::Lteq: - return k <= 0; - case Comp_op::Gt: - return k > 0; - case Comp_op::Gteq: - return k >= 0; - default: - break; - } - ctx_assert(false); - return false; -} - -void -Exec_comp_op::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - const unsigned arity = code.m_op.arity(); - const Comp_op::Opcode opcode = code.m_op.m_opcode; - Data& data = getData(); - Pred_value v = Pred_value_unknown; - if (arity == 1) { - // evaluate sub-expression - ctx_assert(m_expr[1] != 0); - m_expr[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - // get type and value - const SqlType& t1 = m_expr[1]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = ctl.m_groupIndex == 0 ? m_expr[1]->getData().sqlField() : m_expr[1]->getData().groupField(ctl.m_groupIndex); - switch (code.m_op.m_opcode) { - case Comp_op::Isnull: - v = f1.sqlNull() ? Pred_value_true : Pred_value_false; - break; - case Comp_op::Isnotnull: - v = f1.sqlNull() ? Pred_value_false : Pred_value_true; - break; - default: - ctx_assert(false); - break; - } - } else if (arity == 2) { - // evaluate sub-expressions - ctx_assert(m_expr[1] != 0 && m_expr[2] != 0); - m_expr[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - m_expr[2]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - // get types and values - const SqlType& t1 = m_expr[1]->getCode().sqlSpec().sqlType(); - const SqlType& t2 = m_expr[2]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = ctl.m_groupIndex == 0 ? m_expr[1]->getData().sqlField() : m_expr[1]->getData().groupField(ctl.m_groupIndex); - const SqlField& f2 = ctl.m_groupIndex == 0 ? m_expr[2]->getData().sqlField() : m_expr[2]->getData().groupField(ctl.m_groupIndex); - // handle null - if (f1.sqlNull() || f2.sqlNull()) { - v = Pred_value_unknown; - } else if (t1.type() == SqlType::Char) { - const SqlChar* v1 = f1.sqlChar(); - unsigned n1 = t1.length(); - if (t2.type() == SqlType::Char) { - unsigned n2 = t2.length(); - const SqlChar* v2 = f2.sqlChar(); - bool b; - switch (opcode) { - case Comp_op::Like: - b = do_sqlchar_like(v1, n1, v2, n2, true); - break; - case Comp_op::Notlike: - b = ! do_sqlchar_like(v1, n1, v2, n2, true); - break; - default: - b = do_sqlchar_comp(opcode, v1, n1, v2, n2, true); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else if (t2.type() == SqlType::Varchar) { - unsigned n2 = 0; - const SqlChar* v2 = f2.sqlVarchar(&n2); - bool b; - switch (opcode) { - case Comp_op::Like: - b = do_sqlchar_like(v1, n1, v2, n2, true); - break; - case Comp_op::Notlike: - b = ! do_sqlchar_like(v1, n1, v2, n2, true); - break; - default: - b = do_sqlchar_comp(opcode, v1, n1, v2, n2, false); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else { - ctx_assert(false); - } - } else if (t1.type() == SqlType::Varchar) { - unsigned n1 = 0; - const SqlChar* v1 = f1.sqlVarchar(&n1); - if (t2.type() == SqlType::Char) { - unsigned n2 = t2.length(); - const SqlChar* v2 = f2.sqlChar(); - bool b; - switch (opcode) { - case Comp_op::Like: - b = do_sqlchar_like(v1, n1, v2, n2, false); - break; - case Comp_op::Notlike: - b = ! do_sqlchar_like(v1, n1, v2, n2, false); - break; - default: - b = do_sqlchar_comp(opcode, v1, n1, v2, n2, false); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else if (t2.type() == SqlType::Varchar) { - unsigned n2 = 0; - const SqlChar* v2 = f2.sqlVarchar(&n2); - bool b; - switch (opcode) { - case Comp_op::Like: - b = do_sqlchar_like(v1, n1, v2, n2, false); - break; - case Comp_op::Notlike: - b = ! do_sqlchar_like(v1, n1, v2, n2, false); - break; - default: - b = do_sqlchar_comp(opcode, v1, n1, v2, n2, false); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else { - ctx_assert(false); - } - } else if (t1.type() == SqlType::Smallint || t1.type() == SqlType::Integer || t1.type() == SqlType::Bigint) { - // convert to bigint - bool s1 = ! t1.unSigned(); - bool s2 = ! t2.unSigned(); - SqlBigint v1, v2; - SqlUbigint uv1, uv2; - if (s1) { - v1 = - t1.type() == SqlType::Smallint ? f1.sqlSmallint() : - t1.type() == SqlType::Integer ? f1.sqlInteger() : f1.sqlBigint(); - uv1 = v1; - } else { - uv1 = - t1.type() == SqlType::Smallint ? (SqlUsmallint)f1.sqlSmallint() : - t1.type() == SqlType::Integer ? (SqlUinteger)f1.sqlInteger() : (SqlUbigint)f1.sqlBigint(); - v1 = uv1; - } - if (s2) { - v2 = - t2.type() == SqlType::Smallint ? f2.sqlSmallint() : - t2.type() == SqlType::Integer ? f2.sqlInteger() : f2.sqlBigint(); - uv2 = v2; - } else { - uv2 = - t2.type() == SqlType::Smallint ? (SqlUsmallint)f2.sqlSmallint() : - t2.type() == SqlType::Integer ? (SqlUinteger)f2.sqlInteger() : (SqlUbigint)f2.sqlBigint(); - v2 = uv2; - } - bool b; - switch (opcode) { - case Comp_op::Eq: - b = s1 && s2 ? (v1 == v2) : s1 ? (v1 < 0 ? false : uv1 == uv2) : s2 ? (v2 < 0 ? false : uv1 == uv2) : (uv1 == uv2); - break; - case Comp_op::Noteq: - b = s1 && s2 ? (v1 == v2) : s1 ? (v1 < 0 ? true : uv1 != uv2) : s2 ? (v2 < 0 ? true : uv1 != uv2) : (uv1 != uv2); - break; - case Comp_op::Lt: - b = s1 && s2 ? (v1 < v2) : s1 ? (v1 < 0 ? true : uv1 < uv2) : s2 ? (v2 < 0 ? false : uv1 < uv2) : (uv1 < uv2); - break; - case Comp_op::Lteq: - b = s1 && s2 ? (v1 <= v2) : s1 ? (v1 < 0 ? true : uv1 <= uv2) : s2 ? (v2 < 0 ? false : uv1 <= uv2) : (uv1 <= uv2); - break; - case Comp_op::Gt: - b = s1 && s2 ? (v1 > v2) : s1 ? (v1 < 0 ? false : uv1 > uv2) : s2 ? (v2 < 0 ? true : uv1 > uv2) : (uv1 > uv2); - break; - case Comp_op::Gteq: - b = s1 && s2 ? (v1 >= v2) : s1 ? (v1 < 0 ? false : uv1 >= uv2) : s2 ? (v2 < 0 ? true : uv1 >= uv2) : (uv1 >= uv2); - break; - default: - ctx_assert(false); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else if (t1.type() == SqlType::Double) { - SqlDouble v1 = f1.sqlDouble(); - SqlDouble v2 = f2.sqlDouble(); - bool b; - switch (opcode) { - case Comp_op::Eq: - b = (v1 == v2); - break; - case Comp_op::Noteq: - b = (v1 != v2); - break; - case Comp_op::Lt: - b = (v1 < v2); - break; - case Comp_op::Lteq: - b = (v1 <= v2); - break; - case Comp_op::Gt: - b = (v1 > v2); - break; - case Comp_op::Gteq: - b = (v1 >= v2); - break; - default: - ctx_assert(false); - break; - } - v = b ? Pred_value_true : Pred_value_false; - } else if (t1.type() == SqlType::Datetime) { - SqlDatetime v1 = f1.sqlDatetime(); - SqlDatetime v2 = f2.sqlDatetime(); - bool b; - b = do_datetime_comp(opcode, v1, v2); - v = b ? Pred_value_true : Pred_value_false; - } else { - ctx_assert(false); - } - } else { - ctx_assert(false); - } - // set result - if (ctl.m_groupIndex == 0) - data.m_value = v; - else - data.groupValue(ctl.m_groupIndex, ctl.m_groupInit) = v; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_create_index.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_create_index.cpp deleted file mode 100644 index 3966c6d5db2678c2f126240826e89513dc48d59c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_create_index.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <dictionary/DictSchema.hpp> -#include <codegen/Code_create_index.hpp> - -void -Exec_create_index::execute(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return; - } - NdbDictionary::Index ndbIndex(code.m_indexName.c_str()); - ndbIndex.setTable(code.m_tableName.c_str()); - ndbIndex.setType((NdbDictionary::Index::Type)code.m_type); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - ndbIndex.addIndexColumn(code.m_attrList[i]); - } - // setting fragment type not supported in ndb api - ndbIndex.setLogging(code.m_logging); - dictSchema().deleteTable(ctx, code.m_tableName); - if (ndbDictionary->createIndex(ndbIndex) == -1) { - ctx.pushStatus(ndbDictionary->getNdbError(), "createIndex %s", ndbIndex.getName()); - return; - } - ctx_log1(("index %s on %s created", ndbIndex.getName(), ndbIndex.getTable())); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_create_table.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_create_table.cpp deleted file mode 100644 index d6274119371e4a1bdc1499c450bb4f80b5aaaba1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_create_table.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <dictionary/DictSchema.hpp> -#include <codegen/Code_create_table.hpp> - -void -Exec_create_table::execute(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return; - } - NdbDictionary::Table ndbTable(code.m_tableName.c_str()); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const Code::Attr& attr = code.m_attrList[i]; - NdbDictionary::Column ndbColumn(attr.m_attrName.c_str()); - if (i == code.m_tupleId) - ndbColumn.setTupleKey(true); // XXX setTupleId() - if (ctx.logLevel() >= 3) { - char buf[100]; - attr.m_sqlType.print(buf, sizeof(buf)); - ctx_log3(("attr %s type %s", ndbColumn.getName(), buf)); - } - if (attr.m_tupleKey) - ndbColumn.setPrimaryKey(true); - attr.m_sqlType.getType(ctx, &ndbColumn); - if (! ctx.ok()) - return; - if (attr.m_autoIncrement) - ndbColumn.setAutoIncrement(true); - char defaultValue[MAX_ATTR_DEFAULT_VALUE_SIZE]; - defaultValue[0] = 0; - if (attr.m_defaultValue != 0) { - // XXX obviously should evalute it at insert time too - attr.m_defaultValue->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& f = attr.m_defaultValue->getData().sqlField(); - const SqlType& t = f.sqlSpec().sqlType(); - // XXX use SqlField cast method instead - SQLINTEGER ind = 0; - ExtType extType(ExtType::Char); - ExtSpec extSpec(extType); - ExtField extField(extSpec, (SQLPOINTER)defaultValue, sizeof(defaultValue), &ind); - f.copyout(ctx, extField); - if (! ctx.ok()) - return; - if (ind == SQL_NULL_DATA) // do not store NULL default - defaultValue[0] = 0; - } - if (defaultValue[0] != 0) - ndbColumn.setDefaultValue(defaultValue); - ndbTable.addColumn(ndbColumn); - } - if (code.m_fragmentType != NdbDictionary::Object::FragUndefined) - ndbTable.setFragmentType(code.m_fragmentType); - ndbTable.setLogging(code.m_logging); - dictSchema().deleteTable(ctx, code.m_tableName); - if (ndbDictionary->createTable(ndbTable) == -1) { - ctx.pushStatus(ndbDictionary->getNdbError(), "createTable %s", ndbTable.getName()); - return; - } - ctx_log1(("table %s created", ndbTable.getName())); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_index.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_index.cpp deleted file mode 100644 index 10814654a58d5a91e5ab8420c9f4af1256cee537..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_index.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_delete_index.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_delete_index::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - // delete each row from the query - data.setCount(0); - while (m_query->fetch(ctx, ctl)) { - NdbOperation* op = tcon->getNdbIndexOperation(code.m_indexName, code.m_tableName); - if (op == 0) { - ctx.pushStatus(ndb, tcon, 0, "getIndexNdbOperation"); - return; - } - if (op->deleteTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "deleteTuple"); - return; - } - bool done = false; - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - done = true; // match is not possible - break; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - if (done) - continue; - if (tcon->execute(NoCommit) == -1) { - // XXX when did 626 move to connection level - if (tcon->getNdbError().code != 626 && op->getNdbError().code != 626) { - ctx.pushStatus(ndb, tcon, op, "execute without commit"); - return; - } - } else { - data.addCount(); - } - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_lookup.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_lookup.cpp deleted file mode 100644 index d0795286122e042bed04803e9daa9cf92efc1ee9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_lookup.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_delete_lookup.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_delete_lookup::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - // delete each row from the query - data.setCount(0); - while (m_query->fetch(ctx, ctl)) { - NdbOperation* op = tcon->getNdbOperation(code.m_tableName); - if (op == 0) { - ctx.pushStatus(ndb, tcon, 0, "getNdbOperation"); - return; - } - if (op->deleteTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "deleteTuple"); - return; - } - bool done = false; - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - done = true; // match is not possible - break; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - if (done) - continue; - if (tcon->execute(NoCommit) == -1) { - // XXX when did 626 move to connection level - if (tcon->getNdbError().code != 626 && op->getNdbError().code != 626) { - ctx.pushStatus(ndb, tcon, op, "execute without commit"); - return; - } - } else { - data.addCount(); - } - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_scan.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_scan.cpp deleted file mode 100644 index a0b3b8314b830c0554869599aae3c5f6da5ef940..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_delete_scan.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_delete_scan.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_delete_scan::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - ctx_assert(ctl.m_scanOp != 0); - // delete each row from the scan - data.setCount(0); - while (m_query->fetch(ctx, ctl)) { - NdbOperation* toOp = ctl.m_scanOp->takeOverForDelete(tcon); - if (toOp == 0) { - ctx.pushStatus(ndb, tcon, ctl.m_scanOp, "takeOverScanOp"); - return; - } - if (tcon->execute(NoCommit) == -1) { - if (toOp->getNdbError().code != 626) { - ctx.pushStatus(ndb, tcon, toOp, "execute without commit"); - return; - } - } else { - data.addCount(); - } - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_index.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_index.cpp deleted file mode 100644 index 6bf451f6911cb695927f64cd7ec1f42bbefd568d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_index.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <dictionary/DictSchema.hpp> -#include <codegen/Code_drop_index.hpp> - -void -Exec_drop_index::execute(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return; - } - dictSchema().deleteTableByIndex(ctx, code.m_indexName); - if (ndbDictionary->dropIndex(code.m_indexName.c_str(), code.m_tableName.c_str()) == -1) { - ctx.pushStatus(ndbDictionary->getNdbError(), "dropIndex %s on %s", code.m_indexName.c_str(), code.m_tableName.c_str()); - return; - } - ctx_log1(("index %s on %s dropped", code.m_indexName.c_str(), code.m_tableName.c_str())); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_table.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_table.cpp deleted file mode 100644 index 40d1d42fc61f2a87e8e1a25190bc5b84df658f6c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_drop_table.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <dictionary/DictSchema.hpp> -#include <codegen/Code_drop_table.hpp> - -void -Exec_drop_table::execute(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return; - } - dictSchema().deleteTable(ctx, code.m_tableName); - if (ndbDictionary->dropTable(code.m_tableName.c_str()) == -1) { - ctx.pushStatus(ndbDictionary->getNdbError(), "dropTable %s", code.m_tableName.c_str()); - return; - } - ctx_log1(("table %s dropped", code.m_tableName.c_str())); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_conv.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_conv.cpp deleted file mode 100644 index 636bfda7d59555c8ced7e686247a33cee53a2167..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_conv.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <codegen/Code_expr_conv.hpp> - -void -Exec_expr_conv::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - const SqlType& t1 = code.sqlSpec().sqlType(); - SqlField& f1 = ctl.m_groupIndex == 0 ? data.m_sqlField : data.groupField(code.sqlSpec().sqlType() , ctl.m_groupIndex, ctl.m_groupInit); - // evaluate the subexpression - ctx_assert(m_expr != 0); - m_expr->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - const SqlType& t2 = m_expr->getCode().sqlSpec().sqlType(); - const SqlField& f2 = ctl.m_groupIndex == 0 ? m_expr->getData().sqlField() : m_expr->getData().groupField(ctl.m_groupIndex); - // conversion to null type - if (t1.type() == SqlType::Null) { - f1.sqlNull(true); - return; - } - // conversion of null data - if (f2.sqlNull()) { - f1.sqlNull(true); - return; - } - // try to convert - if (! f2.cast(ctx, f1)) { - char b1[40], b2[40], b3[40]; - t1.print(b1, sizeof(b1)); - t2.print(b2, sizeof(b2)); - f2.print(b3, sizeof(b3)); - ctx.pushStatus(Sqlstate::_22003, Error::Gen, "cannot convert %s [%s] to %s", b2, b3, b1); - return; - } -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_func.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_func.cpp deleted file mode 100644 index 093d15c6e2b107d549d8af33b5a76fc6223be87d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_func.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <time.h> -#include <NdbTick.h> -#include <codegen/Code_expr_func.hpp> - -void -Exec_expr_func::init(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - const SqlType& t = code.sqlSpec().sqlType(); - SqlField& f = ctl.m_groupIndex == 0 ? data.m_sqlField : data.groupField(code.sqlSpec().sqlType(), ctl.m_groupIndex, ctl.m_groupInit); - if (ctl.m_groupIndex >= data.m_groupAcc.size()) - data.m_groupAcc.resize(1 + ctl.m_groupIndex); - Data::Acc& acc = data.m_groupAcc[ctl.m_groupIndex]; - acc.m_count = 0; - Expr_func::Code fc = code.m_func.m_code; - if (fc == Expr_func::Substr || fc == Expr_func::Left || fc == Expr_func::Right) { - } else if (fc == Expr_func::Count) { - f.sqlBigint(0); - } else if (fc == Expr_func::Min || fc == Expr_func::Max) { - f.sqlNull(true); - } else if (fc == Expr_func::Sum) { - f.sqlNull(true); - switch (t.type()) { - case SqlType::Bigint: - acc.m_bigint = 0; - break; - case SqlType::Double: - acc.m_double = 0; - break; - default: - ctx_assert(false); - break; - } - } else if (fc == Expr_func::Avg) { - f.sqlNull(true); - switch (t.type()) { - case SqlType::Double: - acc.m_double = 0.0; - break; - default: - ctx_assert(false); - break; - } - } else if (fc == Expr_func::Rownum) { - // uses only m_count - } else if (fc == Expr_func::Sysdate) { - // set time once - NDB_TICKS secs = 0; - Uint32 micros = 0; - NdbTick_CurrentMicrosecond(&secs, µs); - time_t clock = secs; - struct tm* t = gmtime(&clock); - SqlDatetime& d = acc.m_sysdate; - d.cc((1900 + t->tm_year) / 100); - d.yy((1900 + t->tm_year) % 100); - d.mm(1 + t->tm_mon); - d.dd(t->tm_mday); - d.HH(t->tm_hour); - d.MM(t->tm_min); - d.SS(t->tm_sec); - d.ff(1000 * micros); - } else { - ctx_assert(false); - } -} - -void -Exec_expr_func::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - const SqlType& t = code.sqlSpec().sqlType(); - if (ctl.m_groupInit) - init(ctx, ctl); - SqlField& f = ctl.m_groupIndex == 0 ? data.m_sqlField : data.groupField(code.sqlSpec().sqlType(), ctl.m_groupIndex, false); - Data::Acc& acc = data.m_groupAcc[ctl.m_groupIndex]; - Expr_func::Code fc = code.m_func.m_code; - const unsigned narg = code.m_narg; - Exec_expr** args = code.m_args; - ctx_assert(args != 0); - // evaluate arguments - for (unsigned i = 1; i <= narg; i++) { - ctx_assert(args[i] != 0); - unsigned save = ctl.m_groupIndex; - if (code.m_func.m_aggr) - ctl.m_groupIndex = 0; - args[i]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - ctl.m_groupIndex = save; - } - if (fc == Expr_func::Substr || fc == Expr_func::Left || fc == Expr_func::Right) { - ctx_assert((narg == (unsigned)2) || (narg == (unsigned)(fc == Expr_func::Substr ? 3 : 2))); - const SqlType& t1 = args[1]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = args[1]->getData().sqlField(); - int pos, len; - for (unsigned i = 2; i <= narg; i++) { - int& num = (fc == Expr_func::Substr ? (i == 2 ? pos : len) : len); - const SqlType& t2 = args[i]->getCode().sqlSpec().sqlType(); - const SqlField& f2 = args[i]->getData().sqlField(); - switch (t2.type()) { - case SqlType::Smallint: - num = static_cast<int>(f2.sqlSmallint()); - break; - case SqlType::Integer: - num = static_cast<int>(f2.sqlInteger()); - break; - case SqlType::Bigint: - num = static_cast<int>(f2.sqlBigint()); - break; - default: - ctx_assert(false); - break; - } - } - int length = 0; - const SqlChar* data = 0; - switch (t1.type()) { - case SqlType::Char: - length = t1.length(); - data = f1.sqlChar(); - break; - case SqlType::Varchar: - unsigned ulength; - data = f1.sqlVarchar(&ulength); - length = ulength; - break; - default: - ctx_assert(false); - break; - } - if (fc == Expr_func::Left) - pos = 1; - else if (fc == Expr_func::Right) - pos = len > length ? 1 : length - len + 1; - else if (pos < 0) - pos += length + 1; - if (pos <= 0 || pos > length || len <= 0) { - f.sqlNull(true); // oracle-ish - return; - } - if (len > length - pos + 1) - len = length - pos + 1; - switch (t1.type()) { - case SqlType::Char: - f.sqlChar(data + (pos - 1), len); - break; - case SqlType::Varchar: - f.sqlVarchar(data + (pos - 1), len); - break; - default: - ctx_assert(false); - break; - } - } else if (fc == Expr_func::Count) { - ctx_assert(narg == 0 || narg == 1); - if (ctl.m_postEval) - return; - if (narg == 1) { - const SqlField& f1 = args[1]->getData().sqlField(); - if (f1.sqlNull()) - return; - } - f.sqlBigint(++acc.m_count); - } else if (fc == Expr_func::Min) { - ctx_assert(narg == 1); - if (ctl.m_postEval) - return; - const SqlField& f1 = args[1]->getData().sqlField(); - if (f1.sqlNull()) - return; - if (f.sqlNull() || f1.less(f)) - f1.copy(ctx, f); - } else if (fc == Expr_func::Max) { - ctx_assert(narg == 1); - if (ctl.m_postEval) - return; - const SqlField& f1 = args[1]->getData().sqlField(); - if (f1.sqlNull()) - return; - if (f.sqlNull() || f.less(f1)) - f1.copy(ctx, f); - } else if (fc == Expr_func::Sum) { - ctx_assert(narg == 1); - if (ctl.m_postEval) - return; - const SqlType& t1 = args[1]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = args[1]->getData().sqlField(); - if (f1.sqlNull()) - return; - switch (t.type()) { - case SqlType::Bigint: - switch (t1.type()) { - case SqlType::Integer: - acc.m_bigint += f1.sqlInteger(); - break; - case SqlType::Bigint: - acc.m_bigint += f1.sqlBigint(); - break; - default: - ctx_assert(false); - break; - } - f.sqlBigint(acc.m_bigint); - break; - case SqlType::Double: - switch (t1.type()) { - case SqlType::Real: - acc.m_double += f1.sqlReal(); - break; - case SqlType::Double: - acc.m_double += f1.sqlDouble(); - break; - default: - ctx_assert(false); - break; - } - f.sqlDouble(acc.m_double); - break; - default: - ctx_assert(false); - break; - } - } else if (fc == Expr_func::Avg) { - ctx_assert(narg == 1); - if (ctl.m_postEval) - return; - const SqlType& t1 = args[1]->getCode().sqlSpec().sqlType(); - const SqlField& f1 = args[1]->getData().sqlField(); - if (f1.sqlNull()) - return; - switch (t1.type()) { - case SqlType::Smallint: - acc.m_bigint += f1.sqlSmallint(); - break; - case SqlType::Integer: - acc.m_bigint += f1.sqlInteger(); - break; - case SqlType::Bigint: - acc.m_bigint += f1.sqlBigint(); - break; - case SqlType::Real: - acc.m_double += f1.sqlReal(); - break; - case SqlType::Double: - acc.m_double += f1.sqlDouble(); - break; - default: - ctx_assert(false); - break; - } - f.sqlDouble(acc.m_double / (SqlDouble)++acc.m_count); - } else if (fc == Expr_func::Rownum) { - ctx_assert(narg == 0); - if (! ctl.m_postEval) - f.sqlBigint(1 + acc.m_count); - else - acc.m_count++; - } else if (fc == Expr_func::Sysdate) { - ctx_assert(narg == 0); - if (ctl.m_postEval) - return; - f.sqlDatetime(acc.m_sysdate); - } else { - ctx_assert(false); - } -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_op.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_op.cpp deleted file mode 100644 index fc8b6df9f5b9119d3d2ea7b5d287fcab0fb883a8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_expr_op.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <codegen/Code_expr_op.hpp> - -void -Exec_expr_op::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - const SqlType& t = code.sqlSpec().sqlType(); - SqlField& f = ctl.m_groupIndex == 0 ? data.m_sqlField : data.groupField(code.sqlSpec().sqlType(), ctl.m_groupIndex, ctl.m_groupInit); - if (code.m_op.arity() == 1) { - // evaluate sub-expression - ctx_assert(m_expr[1] != 0); - m_expr[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - const SqlField& f1 = ctl.m_groupIndex == 0 ? m_expr[1]->getData().sqlField() : m_expr[1]->getData().groupField(ctl.m_groupIndex); - // handle null - if (f1.sqlNull()) { - f.sqlNull(true); - return; - } - if (t.type() == SqlType::Bigint) { - SqlBigint v = 0; - SqlBigint v1 = f1.sqlBigint(); - switch (code.m_op.m_opcode) { - case Expr_op::Plus: - v = v1; - break; - case Expr_op::Minus: - v = - v1; - break; - default: - ctx_assert(false); - break; - } - f.sqlBigint(v); - } else if (t.type() == SqlType::Double) { - SqlDouble v = 0; - SqlDouble v1 = f1.sqlDouble(); - switch (code.m_op.m_opcode) { - case Expr_op::Plus: - v = v1; - break; - case Expr_op::Minus: - v = - v1; - break; - default: - ctx_assert(false); - break; - } - f.sqlDouble(v); - } else { - ctx_assert(false); - } - } else if (code.m_op.arity() == 2) { - // evaluate sub-expressions - ctx_assert(m_expr[1] != 0 && m_expr[2] != 0); - m_expr[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - m_expr[2]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - const SqlField& f1 = ctl.m_groupIndex == 0 ? m_expr[1]->getData().sqlField() : m_expr[1]->getData().groupField(ctl.m_groupIndex); - const SqlField& f2 = ctl.m_groupIndex == 0 ? m_expr[2]->getData().sqlField() : m_expr[2]->getData().groupField(ctl.m_groupIndex); - // handle null - if (f1.sqlNull() || f2.sqlNull()) { - f.sqlNull(true); - return; - } - if (t.type() == SqlType::Bigint) { - SqlBigint v = 0; - SqlBigint v1 = f1.sqlBigint(); - SqlBigint v2 = f2.sqlBigint(); - switch (code.m_op.m_opcode) { - case Expr_op::Add: - v = v1 + v2; - break; - case Expr_op::Subtract: - v = v1 - v2; - break; - case Expr_op::Multiply: - v = v1 * v2; - break; - case Expr_op::Divide: - if (v2 == 0) { - ctx.pushStatus(Sqlstate::_22012, Error::Gen, "integer division by zero"); - return; - } - v = v1 / v2; - break; - default: - ctx_assert(false); - break; - } - f.sqlBigint(v); - } else if (t.type() == SqlType::Double) { - SqlDouble v = 0; - SqlDouble v1 = f1.sqlDouble(); - SqlDouble v2 = f2.sqlDouble(); - switch (code.m_op.m_opcode) { - case Expr_op::Add: - v = v1 + v2; - break; - case Expr_op::Subtract: - v = v1 - v2; - break; - case Expr_op::Multiply: - v = v1 * v2; - break; - case Expr_op::Divide: - v = v1 / v2; - break; - default: - ctx_assert(false); - break; - } - f.sqlDouble(v); // XXX isnan() - } else { - ctx_assert(false); - } - } else { - ctx_assert(false); - } - // result is not null - f.sqlNull(false); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_insert.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_insert.cpp deleted file mode 100644 index c2612c6aaabe1c777751a56ffc6410f18aeee73a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_insert.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_insert.hpp> -#include <codegen/Code_query.hpp> - -#ifdef NDB_WIN32 -#define FMT_I64 "%I64d" -#else -#define FMT_I64 "%lld" -#endif - -void -Exec_insert::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - // insert each row from query - data.setCount(0); - while (m_query->fetch(ctx, ctl)) { - NdbOperation* op = tcon->getNdbOperation(code.m_tableName); - if (op == 0) { - ctx.pushStatus(ndb, tcon, 0, "getNdbOperation"); - return; - } - if (code.m_insertOp == Insert_op_insert) { - if (op->insertTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "insertTuple"); - return; - } - } else if (code.m_insertOp == Insert_op_write) { - if (op->writeTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "writeTuple"); - return; - } - } else { - ctx_assert(false); - } - const SqlRow& sqlRow = m_query->getData().sqlRow(); - if (code.m_tupleId != 0) { - Uint64 tid = op->setTupleId(); - if (tid == 0) { - ctx.pushStatus(ndb, tcon, op, "setTupleId attrId=%u", (unsigned)code.m_tupleId); - return; - } - ctx_log3(("generated TupleId " FMT_I64, tid)); - } else if (code.m_autoIncrement != 0) { - // XXX use cache size 1 for birdies and fishies - Uint64 tupleId = ndb->getAutoIncrementValue(code.m_tableName, 1); - if (tupleId == 0) { - ctx.pushStatus(ndb, "getTupleIdFromNdb"); - return; - } - NdbAttrId attrId = code.m_autoIncrement - 1; - SqlSmallint sqlSmallint = 0; - SqlInteger sqlInteger = 0; - SqlBigint sqlBigint = 0; - const char* value = 0; - if (code.m_idType.type() == SqlType::Smallint) { - sqlSmallint = tupleId; - value = (const char*)&sqlSmallint; - } else if (code.m_idType.type() == SqlType::Integer) { - sqlInteger = tupleId; - value = (const char*)&sqlInteger; - } else if (code.m_idType.type() == SqlType::Bigint) { - sqlBigint = tupleId; - value = (const char*)&sqlBigint; - } else { - ctx_assert(false); - } - if (op->equal(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)attrId); - return; - } - } else { - // normal key attributes - for (unsigned i = 1; i <= sqlRow.count(); i++) { - if (! code.m_isKey[i]) - continue; - NdbAttrId attrId = code.m_attrId[i]; - const SqlField& f = sqlRow.getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->equal(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)attrId); - return; - } - } - } - // non-key attributes - for (unsigned i = 1; i <= sqlRow.count(); i++) { - if (code.m_isKey[i]) - continue; - NdbAttrId attrId = code.m_attrId[i]; - const SqlField& f = sqlRow.getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->setValue(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "setValue attrId=%u", (unsigned)attrId); - return; - } - } - // default non-key values - for (unsigned i = 1; i <= code.m_defaultCount; i++) { - NdbAttrId attrId = code.m_defaultId[i]; - const SqlField& f = code.m_defaultValue->getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->setValue(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "setValue attrId=%u", (unsigned)attrId); - return; - } - } - if (tcon->execute(NoCommit) == -1) { - ctx.pushStatus(ndb, tcon, op, "execute without commit"); - return; - } - data.addCount(); - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_pred_op.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_pred_op.cpp deleted file mode 100644 index 7caa4656473daaace48861836b60e4308c162f98..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_pred_op.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <codegen/Code_pred_op.hpp> -#include <NdbScanFilter.hpp> - -struct TableUnary { - Pred_value value1; - Pred_value result; -}; - -struct TableBinary { - Pred_value value1; - Pred_value value2; - Pred_value result; -}; - -static TableUnary -tableNot[] = { - { Pred_value_unknown, Pred_value_unknown }, - { Pred_value_false, Pred_value_true }, - { Pred_value_true, Pred_value_false }, -}; - -static TableBinary -tableAnd[] = { - { Pred_value_unknown, Pred_value_unknown, Pred_value_unknown }, - { Pred_value_unknown, Pred_value_false, Pred_value_false }, - { Pred_value_unknown, Pred_value_true, Pred_value_unknown }, - { Pred_value_false, Pred_value_unknown, Pred_value_false }, - { Pred_value_false, Pred_value_false, Pred_value_false }, - { Pred_value_false, Pred_value_true, Pred_value_false }, - { Pred_value_true, Pred_value_unknown, Pred_value_unknown }, - { Pred_value_true, Pred_value_false, Pred_value_false }, - { Pred_value_true, Pred_value_true, Pred_value_true } -}; - -static TableBinary -tableOr[] = { - { Pred_value_unknown, Pred_value_unknown, Pred_value_unknown }, - { Pred_value_unknown, Pred_value_false, Pred_value_unknown }, - { Pred_value_unknown, Pred_value_true, Pred_value_true }, - { Pred_value_false, Pred_value_unknown, Pred_value_unknown }, - { Pred_value_false, Pred_value_false, Pred_value_false }, - { Pred_value_false, Pred_value_true, Pred_value_true }, - { Pred_value_true, Pred_value_unknown, Pred_value_true }, - { Pred_value_true, Pred_value_false, Pred_value_true }, - { Pred_value_true, Pred_value_true, Pred_value_true } -}; - -void -Exec_pred_op::execInterp(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - ctx_assert(ctl.m_scanFilter != 0); - NdbScanFilter& scanFilter = *ctl.m_scanFilter; - if (code.m_op.arity() == 1) { - ctx_assert(m_pred[1] != 0); - switch (code.m_op.m_opcode) { - case Pred_op::Not: - scanFilter.begin(NdbScanFilter::NAND); - m_pred[1]-> execInterp(ctx, ctl); - if (! ctx.ok()) - return; - scanFilter.end(); - break; - default: - ctx_assert(false); - break; - } - } else if (code.m_op.arity() == 2) { - ctx_assert(m_pred[1] != 0 && m_pred[2] != 0); - switch (code.m_op.m_opcode) { - case Pred_op::And: - scanFilter.begin(NdbScanFilter::AND); - m_pred[1]-> execInterp(ctx, ctl); - if (! ctx.ok()) - return; - m_pred[2]-> execInterp(ctx, ctl); - if (! ctx.ok()) - return; - scanFilter.end(); - break; - case Pred_op::Or: - scanFilter.begin(NdbScanFilter::OR); - m_pred[1]-> execInterp(ctx, ctl); - if (! ctx.ok()) - return; - m_pred[2]-> execInterp(ctx, ctl); - if (! ctx.ok()) - return; - scanFilter.end(); - break; - default: - ctx_assert(false); - break; - } - } else { - ctx_assert(false); - } -} - -void -Exec_pred_op::evaluate(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Pred_value v = Pred_value_unknown; - if (code.m_op.arity() == 1) { - // evaluate sub-expression - ctx_assert(m_pred[1] != 0); - m_pred[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - Pred_value v1 = ctl.m_groupIndex == 0 ? m_pred[1]->getData().getValue() : m_pred[1]->getData().groupValue(ctl.m_groupIndex); - // look up result - TableUnary* table = 0; - unsigned size = 0; - switch (code.m_op.m_opcode) { - case Pred_op::Not: - table = tableNot; - size = sizeof(tableNot) / sizeof(tableNot[0]); - break; - default: - ctx_assert(false); - break; - } - unsigned i; - for (i = 0; i < size; i++) { - if (table[i].value1 == v1) { - v = table[i].result; - break; - } - } - ctx_assert(i < size); - } else if (code.m_op.arity() == 2) { - // evaluate sub-expressions - ctx_assert(m_pred[1] != 0 && m_pred[2] != 0); - m_pred[1]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - m_pred[2]->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - if (ctl.m_postEval) - return; - Pred_value v1 = ctl.m_groupIndex == 0 ? m_pred[1]->getData().getValue() : m_pred[1]->getData().groupValue(ctl.m_groupIndex); - Pred_value v2 = ctl.m_groupIndex == 0 ? m_pred[2]->getData().getValue() : m_pred[2]->getData().groupValue(ctl.m_groupIndex); - // look up result - TableBinary* table = 0; - unsigned size = 0; - switch (code.m_op.m_opcode) { - case Pred_op::And: - table = tableAnd; - size = sizeof(tableAnd) / sizeof(tableAnd[0]); - break; - case Pred_op::Or: - table = tableOr; - size = sizeof(tableOr) / sizeof(tableOr[0]); - break; - default: - ctx_assert(false); - break; - } - unsigned i; - for (i = 0; i < size; i++) { - if (table[i].value1 == v1 && table[i].value2 == v2) { - v = table[i].result; - break; - } - } - ctx_assert(i < size); - } else { - ctx_assert(false); - } - // set result - if (ctl.m_groupIndex == 0) - data.m_value = v; - else - data.groupValue(ctl.m_groupIndex, ctl.m_groupInit) = v; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_index.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_query_index.cpp deleted file mode 100644 index 919743beac2afc618aa4ad500980834c3f2827b4..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_index.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_query_index.hpp> -#include <codegen/Code_table.hpp> - -void -Exec_query_index::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - data.m_done = false; - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - if (data.m_con != 0) { - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("lookup closed at re-execute")); - } - const bool unco = connArea().uncommitted(); - if (! unco) { - // use new transaction to not run out of operations - data.m_con = ndb->startTransaction(); - if (data.m_con == 0) { - ctx.pushStatus(ndb, "startTransaction"); - return; - } - } else { - ctx_log3(("lookup using main transaction")); - } - data.m_op = (unco ? tcon : data.m_con)->getNdbIndexOperation(code.m_indexName, code.m_tableName); - if (data.m_op == 0) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), 0, "getNdbIndexOperation"); - return; - } - if (data.m_op->readTuple() == -1) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "readTuple"); - return; - } - // key attributes - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - data.m_done = true; // match is not possible - return; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (data.m_op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - // queried attributes - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - SqlField& f = sqlRow.getEntry(i); - char* addr = static_cast<char*>(f.addr()); - NdbRecAttr* recAttr = data.m_op->getValue(attrId, addr); - if (recAttr == 0) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "getValue attrId=%u", (unsigned)attrId); - return; - } - data.m_recAttr[i] = recAttr; - } - if (code.m_attrCount == 0) { // NDB requires one - (void)data.m_op->getValue((NdbAttrId)0); - } - data.setCount(0); - if ((unco ? tcon : data.m_con)->execute(unco ? NoCommit : Commit) == -1) { - // XXX when did 626 move to connection level - if ((unco ? tcon : data.m_con)->getNdbError().code != 626 && data.m_op->getNdbError().code != 626) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "execute xxx"); - return; - } - data.m_done = true; - } else { - stmtArea().incTuplesFetched(); - data.m_done = false; - } - if (! unco) { - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log3(("index lookup closed at execute")); - } -} - -bool -Exec_query_index::fetchImpl(Ctx &ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - // returns at most one row - if (data.m_done) - return false; - // set null bits - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - NdbRecAttr* recAttr = data.m_recAttr[i]; - int isNULL = recAttr->isNULL(); - SqlField& f = sqlRow.getEntry(i); - ctx_assert(isNULL == 0 || isNULL == 1); - f.sqlNull(isNULL == 1); - } - data.m_done = true; - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_lookup.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_query_lookup.cpp deleted file mode 100644 index 599e1a36461ecb98cc29073b833be23917ae4ffc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_lookup.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_query_lookup.hpp> -#include <codegen/Code_table.hpp> - -void -Exec_query_lookup::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - data.m_done = false; - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - if (data.m_con != 0) { - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("lookup closed at re-execute")); - } - const bool unco = connArea().uncommitted(); - if (! unco) { - // use new transaction to not run out of operations - data.m_con = ndb->startTransaction(); - if (data.m_con == 0) { - ctx.pushStatus(ndb, "startTransaction"); - return; - } - } else { - ctx_log3(("lookup using main transaction")); - } - data.m_op = (unco ? tcon : data.m_con)->getNdbOperation(code.m_tableName); - if (data.m_op == 0) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), 0, "getNdbOperation"); - return; - } - if (data.m_op->readTuple() == -1) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "readTuple"); - return; - } - // key attributes - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - data.m_done = true; // match is not possible - return; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (data.m_op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - // queried attributes - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - SqlField& f = sqlRow.getEntry(i); - char* addr = static_cast<char*>(f.addr()); - NdbRecAttr* recAttr = data.m_op->getValue(attrId, addr); - if (recAttr == 0) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "getValue attrId=%u", (unsigned)attrId); - return; - } - data.m_recAttr[i] = recAttr; - } - if (code.m_attrCount == 0) { // NDB requires one - (void)data.m_op->getValue((NdbAttrId)0); - } - data.setCount(0); - if ((unco ? tcon : data.m_con)->execute(unco ? NoCommit : Commit) == -1) { - // XXX when did 626 move to connection level - if ((unco ? tcon : data.m_con)->getNdbError().code != 626 && data.m_op->getNdbError().code != 626) { - ctx.pushStatus(ndb, (unco ? tcon : data.m_con), data.m_op, "execute xxx"); - return; - } - data.m_done = true; - } else { - stmtArea().incTuplesFetched(); - data.m_done = false; - } - if (! unco) { - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log3(("lookup closed at execute")); - } -} - -bool -Exec_query_lookup::fetchImpl(Ctx &ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - // returns at most one row - if (data.m_done) - return false; - // set null bits - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - NdbRecAttr* recAttr = data.m_recAttr[i]; - int isNULL = recAttr->isNULL(); - SqlField& f = sqlRow.getEntry(i); - ctx_assert(isNULL == 0 || isNULL == 1); - f.sqlNull(isNULL == 1); - } - data.m_done = true; - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_range.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_query_range.cpp deleted file mode 100644 index 0bc878d760dfbb855327ea6b7c604500668cb91e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_range.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_query_range.hpp> -#include <codegen/Code_table.hpp> - -#define startBuddyTransaction(x) hupp(x) - -void -Exec_query_range::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - data.m_done = false; - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - if (data.m_con != 0) { - data.m_con->stopScan(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("range scan closed at re-execute")); - } - data.m_con = ndb->startBuddyTransaction(tcon); - if (data.m_con == 0) { - ctx.pushStatus(ndb, tcon, 0, "startBuddyTransaction"); - return; - } - data.m_op = data.m_con->getNdbOperation(code.m_indexName, code.m_tableName); - if (data.m_op == 0) { - ctx.pushStatus(ndb, data.m_con, 0, "getNdbOperation"); - return; - } - if (! code.m_exclusive) { - if (data.m_op->openScanReadCommitted(data.m_parallel) == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "openScanReadCommitted"); - return; - } - } else { - if (data.m_op->openScanExclusive(data.m_parallel) == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "openScanExclusive"); - return; - } - } - // set bounds - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - data.m_done = true; // match is not possible - return; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - const unsigned len = f.allocSize(); - if (data.m_op->setBound(keyId, NdbOperation::BoundEQ, value, len) == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "setBound attrId=%u", (unsigned)keyId); - return; - } - } - // queried attributes - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - SqlField& f = sqlRow.getEntry(i); - char* addr = static_cast<char*>(f.addr()); - NdbRecAttr* recAttr = data.m_op->getValue(attrId, addr); - if (recAttr == 0) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "getValue attrId=%u", (unsigned)attrId); - return; - } - data.m_recAttr[i] = recAttr; - } - if (code.m_attrCount == 0) { // NDB requires one - (void)data.m_op->getValue((NdbAttrId)0); - } - data.setCount(0); - if (data.m_con->executeScan() == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "executeScan"); - return; - } - ctx_log2(("range scan %s [%08x] started", ! code.m_exclusive ? "read" : "exclusive", (unsigned)this)); - ctl.m_scanOp = data.m_op; -} - -bool -Exec_query_range::fetchImpl(Ctx &ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - // if never started - if (data.m_done) - return false; - int ret = data.m_con->nextScanResult(); - if (ret != 0) { - if (ret == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "nextScanResult"); - } - data.m_con->stopScan(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("range scan [%08x] closed at last row", (unsigned)this)); - return false; - } - // set null bits - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - NdbRecAttr* recAttr = data.m_recAttr[i]; - int isNULL = recAttr->isNULL(); - SqlField& f = sqlRow.getEntry(i); - ctx_assert(isNULL == 0 || isNULL == 1); - f.sqlNull(isNULL == 1); - } - stmtArea().incTuplesFetched(); - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_scan.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_query_scan.cpp deleted file mode 100644 index 213dfdd616d4ffea8a0f10c3976c8c4b432b412f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_scan.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <NdbScanFilter.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_query_scan.hpp> -#include <codegen/Code_table.hpp> - -#define startBuddyTransaction(x) hupp(x) - -void -Exec_query_scan::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - if (data.m_con != 0) { - data.m_con->stopScan(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("scan closed at re-execute")); - } - data.m_con = ndb->startBuddyTransaction(tcon); - if (data.m_con == 0) { - ctx.pushStatus(ndb, tcon, 0, "startBuddyTransaction"); - return; - } - data.m_op = data.m_con->getNdbOperation(code.m_tableName); - if (data.m_op == 0) { - ctx.pushStatus(ndb, data.m_con, 0, "getNdbOperation"); - return; - } - if (! code.m_exclusive) { - if (data.m_op->openScanReadCommitted(data.m_parallel) == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "openScanReadCommitted"); - return; - } - } else { - if (data.m_op->openScanExclusive(data.m_parallel) == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "openScanExclusive"); - return; - } - } - if (m_interp == 0) { - // XXX unnecessary - if (data.m_op->interpret_exit_ok() == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "interpret_exit_ok"); - return; - } - } else { - NdbScanFilter scanFilter(data.m_op); - scanFilter.begin(NdbScanFilter::AND); - ctl.m_scanFilter = &scanFilter; - m_interp->execInterp(ctx, ctl); - if (! ctx.ok()) - return; - scanFilter.end(); - } - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - SqlField& sqlField = sqlRow.getEntry(i); - char* addr = static_cast<char*>(sqlField.addr()); - NdbRecAttr* recAttr = data.m_op->getValue(attrId, addr); - if (recAttr == 0) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "getValue attrId=%u", (unsigned)attrId); - return; - } - data.m_recAttr[i] = recAttr; - } - if (code.m_attrCount == 0) { // NDB requires one - (void)data.m_op->getValue((NdbAttrId)0); - } - if (data.m_con->executeScan() == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "executeScan"); - return; - } - ctx_log2(("scan %s [%08x] started", ! code.m_exclusive ? "read" : "exclusive", (unsigned)this)); - ctl.m_scanOp = data.m_op; -} - -bool -Exec_query_scan::fetchImpl(Ctx &ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - int ret = data.m_con->nextScanResult(); - if (ret != 0) { - if (ret == -1) { - ctx.pushStatus(ndb, data.m_con, data.m_op, "nextScanResult"); - } - data.m_con->stopScan(); - ndb->closeTransaction(data.m_con); - data.m_con = 0; - data.m_op = 0; - ctx_log2(("scan [%08x] closed at last row", (unsigned)this)); - return false; - } - // set null bits - const SqlRow& sqlRow = data.sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - NdbRecAttr* recAttr = data.m_recAttr[i]; - int isNULL = recAttr->isNULL(); - SqlField& sqlField = sqlRow.getEntry(i); - ctx_assert(isNULL == 0 || isNULL == 1); - sqlField.sqlNull(isNULL == 1); - } - stmtArea().incTuplesFetched(); - return true; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_sys.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_query_sys.cpp deleted file mode 100644 index acdc120e609cf85cb15760cb40f07996b21fba6e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_query_sys.cpp +++ /dev/null @@ -1,761 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_query_sys.hpp> -#include <codegen/Code_table.hpp> - -#define NULL_CHAR ((char*)0) -#define NULL_INT (-2147483647) - -struct Typeinfo { - const char* m_type_name; // 1 - int m_data_type; // 2 - int m_column_size; // 3 - const char* m_literal_prefix; // 4 - const char* m_literal_suffix; // 5 - const char* m_create_params; // 6 - int m_nullable; // 7 - int m_case_sensitive; // 8 - int m_searchable; // 9 - int m_unsigned_attribute; // 10 - int m_fixed_prec_scale; // 11 - int m_auto_unique_value; // 12 - const char* m_local_type_name; // 13 - int m_minimum_scale; // 14 - int m_maximum_scale; // 15 - int m_sql_data_type; // 16 - int m_sql_datetime_sub; // 17 - int m_num_prec_radix; // 18 - int m_interval_precision; // 19 -}; - -static const Typeinfo -typeinfoList[] = { - { "CHAR", // 1 - SQL_CHAR, // 2 - 8000, // 3 - "'", // 4 - "'", // 5 - "length", // 6 - SQL_NULLABLE, // 7 - SQL_TRUE, // 8 - SQL_SEARCHABLE, // 9 - NULL_INT, // 10 - SQL_FALSE, // 11 - NULL_INT, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_CHAR, // 16 - NULL_INT, // 17 - NULL_INT, // 18 - NULL_INT // 19 - }, - { "VARCHAR", // 1 - SQL_VARCHAR, // 2 - 8000, // 3 - "'", // 4 - "'", // 5 - "length", // 6 - SQL_NULLABLE, // 7 - SQL_TRUE, // 8 - SQL_SEARCHABLE, // 9 - NULL_INT, // 10 - SQL_FALSE, // 11 - NULL_INT, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_VARCHAR, // 16 - NULL_INT, // 17 - NULL_INT, // 18 - NULL_INT // 19 - }, - { "BINARY", // 1 - SQL_BINARY, // 2 - 8000, // 3 - "'", // 4 - "'", // 5 - "length", // 6 - SQL_NULLABLE, // 7 - SQL_TRUE, // 8 - SQL_SEARCHABLE, // 9 - NULL_INT, // 10 - SQL_FALSE, // 11 - NULL_INT, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_BINARY, // 16 - NULL_INT, // 17 - NULL_INT, // 18 - NULL_INT // 19 - }, - { "VARBINARY", // 1 - SQL_VARBINARY, // 2 - 8000, // 3 - "'", // 4 - "'", // 5 - "length", // 6 - SQL_NULLABLE, // 7 - SQL_TRUE, // 8 - SQL_SEARCHABLE, // 9 - NULL_INT, // 10 - SQL_FALSE, // 11 - NULL_INT, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_VARBINARY, // 16 - NULL_INT, // 17 - NULL_INT, // 18 - NULL_INT // 19 - }, - { "SMALLINT", // 1 - SQL_SMALLINT, // 2 - 4, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_SMALLINT, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "SMALLINT UNSIGNED", // 1 - SQL_SMALLINT, // 2 - 4, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_TRUE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_SMALLINT, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "INT", // 1 - SQL_INTEGER, // 2 - 9, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_INTEGER, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "INT UNSIGNED", // 1 - SQL_INTEGER, // 2 - 9, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_TRUE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_INTEGER, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "BIGINT", // 1 - SQL_BIGINT, // 2 - 19, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_BIGINT, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "BIGINT UNSIGNED", // 1 - SQL_BIGINT, // 2 - 19, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_TRUE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_BIGINT, // 16 - NULL_INT, // 17 - 10, // 18 - NULL_INT // 19 - }, - { "REAL", // 1 - SQL_REAL, // 2 - 31, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_REAL, // 16 - NULL_INT, // 17 - 2, // 18 - NULL_INT // 19 - }, - { "FLOAT", // 1 - SQL_DOUBLE, // 2 - 63, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_DOUBLE, // 16 - NULL_INT, // 17 - 2, // 18 - NULL_INT // 19 - }, - { "DATETIME", // 1 - SQL_TYPE_TIMESTAMP, // 2 - 30, // 3 - NULL_CHAR, // 4 - NULL_CHAR, // 5 - NULL_CHAR, // 6 - SQL_NULLABLE, // 7 - SQL_FALSE, // 8 - SQL_SEARCHABLE, // 9 - SQL_FALSE, // 10 - SQL_TRUE, // 11 - SQL_FALSE, // 12 - NULL_CHAR, // 13 - NULL_INT, // 14 - NULL_INT, // 15 - SQL_DATETIME, // 16 XXX - NULL_INT, // 17 - 2, // 18 - NULL_INT // 19 - } -}; - -const unsigned -typeinfoCount = sizeof(typeinfoList)/sizeof(typeinfoList[0]); - -void -Exec_query_sys::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return; - } - if (code.m_sysId == DictSys::OdbcTypeinfo || code.m_sysId == DictSys::Dual) { - data.m_rowPos = 0; // at first entry - return; - } - if (code.m_sysId == DictSys::OdbcTables || code.m_sysId == DictSys::OdbcColumns || code.m_sysId == DictSys::OdbcPrimarykeys) { - // take all objects - if (ndbDictionary->listObjects(data.m_objectList) == -1) { - ctx.pushStatus(ndb, "listObjects"); - return; - } - data.m_tablePos = 0; // at first entry - data.m_attrPos = 0; - data.m_keyPos = 0; - return; - } - ctx_assert(false); -} - -static bool -isNdbTable(const NdbDictionary::Dictionary::List::Element& element) -{ - switch (element.type) { - //case NdbDictionary::Object::SystemTable: - case NdbDictionary::Object::UserTable: - case NdbDictionary::Object::UniqueHashIndex: - case NdbDictionary::Object::HashIndex: - case NdbDictionary::Object::UniqueOrderedIndex: - case NdbDictionary::Object::OrderedIndex: - return true; - default: - break; - } - return false; -} - - -bool -Exec_query_sys::fetchImpl(Ctx &ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbDictionary::Dictionary* ndbDictionary = ndb->getDictionary(); - if (ndbDictionary == 0) { - ctx.pushStatus(ndb, "getDictionary"); - return false; - } - if (code.m_sysId == DictSys::OdbcTypeinfo) { - if (data.m_rowPos >= typeinfoCount) { - return false; - } - SqlRow& row = data.m_sqlRow; - const Typeinfo& typeinfo = typeinfoList[data.m_rowPos++]; - for (unsigned i = 1; i <= code.m_attrCount; i++) { - SqlField& f = data.m_sqlRow.getEntry(i); - switch (1 + code.m_attrId[i]) { - case 1: - if (typeinfo.m_type_name == NULL_CHAR) - f.sqlNull(true); - else - f.sqlVarchar(typeinfo.m_type_name, SQL_NTS); - break; - case 2: - if (typeinfo.m_data_type == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_data_type); - break; - case 3: - if (typeinfo.m_column_size == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_column_size); - break; - case 4: - if (typeinfo.m_literal_prefix == NULL_CHAR) - f.sqlNull(true); - else - f.sqlVarchar(typeinfo.m_literal_prefix, SQL_NTS); - break; - case 5: - if (typeinfo.m_literal_suffix == NULL_CHAR) - f.sqlNull(true); - else - f.sqlVarchar(typeinfo.m_literal_suffix, SQL_NTS); - break; - case 6: - if (typeinfo.m_create_params == NULL_CHAR) - f.sqlNull(true); - else - f.sqlVarchar(typeinfo.m_create_params, SQL_NTS); - break; - case 7: - if (typeinfo.m_nullable == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_nullable); - break; - case 8: - if (typeinfo.m_case_sensitive == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_case_sensitive); - break; - case 9: - if (typeinfo.m_searchable == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_searchable); - break; - case 10: - if (typeinfo.m_unsigned_attribute == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_unsigned_attribute); - break; - case 11: - if (typeinfo.m_fixed_prec_scale == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_fixed_prec_scale); - break; - case 12: - if (typeinfo.m_auto_unique_value == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_auto_unique_value); - break; - case 13: - if (typeinfo.m_local_type_name == NULL_CHAR) - f.sqlNull(true); - else - f.sqlVarchar(typeinfo.m_local_type_name, SQL_NTS); - break; - case 14: - if (typeinfo.m_minimum_scale == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_minimum_scale); - break; - case 15: - if (typeinfo.m_maximum_scale == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_maximum_scale); - break; - case 16: - if (typeinfo.m_sql_data_type == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_sql_data_type); - break; - case 17: - if (typeinfo.m_sql_datetime_sub == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_sql_datetime_sub); - break; - case 18: - if (typeinfo.m_sql_datetime_sub == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_sql_datetime_sub); - break; - case 19: - if (typeinfo.m_interval_precision == NULL_INT) - f.sqlNull(true); - else - f.sqlInteger(typeinfo.m_interval_precision); - break; - default: - ctx_assert(false); - break; - } - } - return true; - } - if (code.m_sysId == DictSys::OdbcTables) { - if (data.m_tablePos >= data.m_objectList.count) { - return false; - } - NdbDictionary::Dictionary::List::Element& element = data.m_objectList.elements[data.m_tablePos++]; - for (unsigned i = 1; i <= code.m_attrCount; i++) { - SqlField& f = data.m_sqlRow.getEntry(i); - switch (1 + code.m_attrId[i]) { - case 1: // TABLE_CAT - f.sqlNull(true); - break; - case 2: // TABLE_SCHEM - f.sqlNull(true); - break; - case 3: // TABLE_NAME - f.sqlVarchar(element.name, SQL_NTS); - break; - case 4: { // TABLE_TYPE - if (element.type == NdbDictionary::Object::SystemTable) - f.sqlVarchar("SYSTEM TABLE", SQL_NTS); - else if (element.type == NdbDictionary::Object::UserTable) - f.sqlVarchar("TABLE", SQL_NTS); - else if (element.type == NdbDictionary::Object::UniqueHashIndex) - f.sqlVarchar("UNIQUE HASH INDEX", SQL_NTS); - else if (element.type == NdbDictionary::Object::HashIndex) - f.sqlVarchar("HASH INDEX", SQL_NTS); - else if (element.type == NdbDictionary::Object::UniqueOrderedIndex) - f.sqlVarchar("UNIQUE INDEX", SQL_NTS); - else if (element.type == NdbDictionary::Object::OrderedIndex) - f.sqlVarchar("INDEX", SQL_NTS); - else if (element.type == NdbDictionary::Object::IndexTrigger) - f.sqlVarchar("INDEX TRIGGER", SQL_NTS); - else if (element.type == NdbDictionary::Object::SubscriptionTrigger) - f.sqlVarchar("SUBSCRIPTION TRIGGER", SQL_NTS); - else if (element.type == NdbDictionary::Object::ReadOnlyConstraint) - f.sqlVarchar("READ ONLY CONSTRAINT", SQL_NTS); - else - f.sqlVarchar("UNKNOWN", SQL_NTS); - } - break; - case 5: // REMARKS - f.sqlNull(true); - break; - default: - ctx_assert(false); - break; - } - } - return true; - } - if (code.m_sysId == DictSys::OdbcColumns) { - if (data.m_tablePos >= data.m_objectList.count) { - return false; - } - const NdbDictionary::Dictionary::List::Element& element = data.m_objectList.elements[data.m_tablePos]; - unsigned nattr; - const NdbDictionary::Table* ndbTable; - nattr = 0; - if (isNdbTable(element)) { - ndbTable = ndbDictionary->getTable(element.name); - if (ndbTable == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "getTable %s", element.name); - return false; - } - nattr = ndbTable->getNoOfColumns(); - } - while (data.m_attrPos >= nattr) { - if (++data.m_tablePos >= data.m_objectList.count) { - return false; - } - const NdbDictionary::Dictionary::List::Element& element = data.m_objectList.elements[data.m_tablePos]; - nattr = 0; - if (isNdbTable(element)) { - ndbTable = ndbDictionary->getTable(element.name); - if (ndbTable == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "getTable %s", element.name); - return false; - } - data.m_attrPos = 0; - nattr = ndbTable->getNoOfColumns(); - } - } - int attrId = data.m_attrPos++; - const NdbDictionary::Column* ndbColumn = ndbTable->getColumn(attrId); - if (ndbColumn == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "getColumn %s.%d", ndbTable->getName(), attrId); - return false; - } - SqlType sqlType(ctx, ndbColumn); - if (! ctx.ok()) - return false; - const char* p; - for (unsigned i = 1; i <= code.m_attrCount; i++) { - SqlField& f = data.m_sqlRow.getEntry(i); - switch (1 + code.m_attrId[i]) { - case 1: // TABLE_CAT - f.sqlNull(true); - break; - case 2: // TABLE_SCHEM - f.sqlNull(true); - break; - case 3: // TABLE_NAME - f.sqlVarchar(ndbTable->getName(), SQL_NTS); - break; - case 4: // COLUMN_NAME - f.sqlVarchar(ndbColumn->getName(), SQL_NTS); - break; - case 5: // DATA_TYPE - f.sqlInteger(sqlType.type()); - break; - case 6: // TYPE_NAME - f.sqlVarchar(sqlType.typeName(), SQL_NTS); - break; - case 7: // COLUMN_SIZE - f.sqlInteger(sqlType.displaySize()); - break; - case 8: // BUFFER_LENGTH - f.sqlInteger(sqlType.size()); - break; - case 9: // DECIMAL_DIGITS - if (sqlType.type() == SqlType::Char) - f.sqlNull(true); - else - f.sqlInteger(0); - break; - case 10: // NUM_PREC_RADIX - if (sqlType.type() == SqlType::Integer || sqlType.type() == SqlType::Bigint) - f.sqlInteger(10); - else - f.sqlNull(true); - break; - case 11: // NULLABLE - if (sqlType.nullable()) - f.sqlInteger(SQL_NULLABLE); - else - f.sqlInteger(SQL_NO_NULLS); - break; - case 12: // REMARKS - f.sqlNull(true); - break; - case 13: // COLUMN_DEF - if ((p = ndbColumn->getDefaultValue()) != 0) - f.sqlVarchar(p, SQL_NTS); - else - f.sqlNull(true); - break; - case 14: // SQL_DATA_TYPE - f.sqlInteger(sqlType.type()); - break; - case 15: // SQL_DATETIME_SUB - f.sqlNull(true); - break; - case 16: // CHAR_OCTET_LENGTH - if (sqlType.type() == SqlType::Char) - f.sqlInteger(sqlType.length()); - else - f.sqlNull(true); - break; - case 17: // ORDINAL_POSITION - f.sqlInteger(1 + attrId); - break; - case 18: // IS_NULLABLE - if (sqlType.nullable()) - f.sqlVarchar("YES", SQL_NTS); - else - f.sqlVarchar("NO", SQL_NTS); - break; - break; - default: - ctx_assert(false); - break; - } - } - return true; - } - if (code.m_sysId == DictSys::OdbcPrimarykeys) { - if (data.m_tablePos >= data.m_objectList.count) { - return false; - } - NdbDictionary::Dictionary::List::Element& element = data.m_objectList.elements[data.m_tablePos]; - unsigned nkeys; - const NdbDictionary::Table* ndbTable; - nkeys = 0; - if (isNdbTable(element)) { - ndbTable = ndbDictionary->getTable(element.name); - if (ndbTable == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "getTable %s", element.name); - return false; - } - nkeys = ndbTable->getNoOfPrimaryKeys(); - } - while (data.m_keyPos >= nkeys) { - if (++data.m_tablePos >= data.m_objectList.count) { - return false; - } - NdbDictionary::Dictionary::List::Element& element = data.m_objectList.elements[data.m_tablePos]; - nkeys = 0; - if (isNdbTable(element)) { - ndbTable = ndbDictionary->getTable(element.name); - if (ndbTable == 0) { - ctx.pushStatus(ndbDictionary->getNdbError(), "getTable %s", element.name); - return false; - } - data.m_keyPos = 0; - nkeys = ndbTable->getNoOfPrimaryKeys(); - } - } - unsigned keyPos = data.m_keyPos++; - const char* keyName = ndbTable->getPrimaryKey(keyPos); - if (keyName == 0) - keyName = "?"; - for (unsigned i = 1; i <= code.m_attrCount; i++) { - SqlField& f = data.m_sqlRow.getEntry(i); - switch (1 + code.m_attrId[i]) { - case 1: // TABLE_CAT - f.sqlNull(true); - break; - case 2: // TABLE_SCHEM - f.sqlNull(true); - break; - case 3: // TABLE_NAME - f.sqlVarchar(ndbTable->getName(), SQL_NTS); - break; - case 4: // COLUMN_NAME - f.sqlVarchar(keyName, SQL_NTS); - break; - case 5: // KEY_SEQ - f.sqlInteger(1 + keyPos); - break; - case 6: // PK_NAME - f.sqlNull(true); - break; - default: - ctx_assert(false); - break; - } - } - return true; - } - if (code.m_sysId == DictSys::Dual) { - if (data.m_rowPos > 0) { - return false; - } - data.m_rowPos++; - for (unsigned i = 1; i <= code.m_attrCount; i++) { - SqlField& f = data.m_sqlRow.getEntry(i); - switch (1 + code.m_attrId[i]) { - case 1: // DUMMY - f.sqlVarchar("X", 1); - break; - default: - ctx_assert(false); - break; - } - } - return true; - } - ctx_assert(false); - return false; -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_index.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_update_index.cpp deleted file mode 100644 index 35b6159d8ca1d79b899d553ec0771befb09de6bc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_index.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_update_index.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_update_index::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - // update each row from the query - while (m_query->fetch(ctx, ctl)) { - NdbOperation* op = tcon->getNdbIndexOperation(code.m_indexName, code.m_tableName); - if (op == 0) { - ctx.pushStatus(ndb, tcon, 0, "getNdbIndexOperation"); - return; - } - if (op->updateTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "updateTuple"); - return; - } - // key attributes - bool done = false; - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - done = true; // match is not possible - break; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - if (done) - continue; - // updated attributes - const SqlRow& sqlRow = m_query->getData().sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - const SqlField& f = sqlRow.getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->setValue(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "setValue attrId=%u", (unsigned)attrId); - return; - } - } - data.setCount(0); - if (tcon->execute(NoCommit) == -1) { - // XXX when did 626 move to connection level - if (tcon->getNdbError().code != 626 && op->getNdbError().code != 626) { - ctx.pushStatus(ndb, tcon, op, "execute without commit"); - return; - } - } else { - data.addCount(); - } - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_lookup.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_update_lookup.cpp deleted file mode 100644 index 2c801372de3de746d3df57fdf6f73716911ddaef..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_lookup.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_expr.hpp> -#include <codegen/Code_update_lookup.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_update_lookup::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - // update each row from the query - while (m_query->fetch(ctx, ctl)) { - NdbOperation* op = tcon->getNdbOperation(code.m_tableName); - if (op == 0) { - ctx.pushStatus(ndb, tcon, 0, "getNdbOperation"); - return; - } - if (op->updateTuple() == -1) { - ctx.pushStatus(ndb, tcon, op, "updateTuple"); - return; - } - // key attributes - bool done = false; - for (unsigned k = 1; k <= code.m_keyCount; k++) { - Exec_expr* exprMatch = code.m_keyMatch[k]; - ctx_assert(exprMatch != 0); - exprMatch->evaluate(ctx, ctl); - if (! ctx.ok()) - return; - const SqlField& keyMatch = exprMatch->getData().sqlField(); - SqlField f(code.m_keySpecs.getEntry(k)); - if (! keyMatch.cast(ctx, f)) { - done = true; // match is not possible - break; - } - const NdbAttrId keyId = code.m_keyId[k]; - const void* addr = f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->equal(keyId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "equal attrId=%u", (unsigned)keyId); - return; - } - } - if (done) - continue; - // updated attributes - const SqlRow& sqlRow = m_query->getData().sqlRow(); - ctx_assert(sqlRow.count() == code.m_attrCount); - for (unsigned i = 1; i <= code.m_attrCount; i++) { - const NdbAttrId attrId = code.m_attrId[i]; - const SqlField& f = sqlRow.getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (op->setValue(attrId, value) == -1) { - ctx.pushStatus(ndb, tcon, op, "setValue attrId=%u", (unsigned)attrId); - return; - } - } - data.setCount(0); - if (tcon->execute(NoCommit) == -1) { - // XXX when did 626 move to connection level - if (tcon->getNdbError().code != 626 && op->getNdbError().code != 626) { - ctx.pushStatus(ndb, tcon, op, "execute without commit"); - return; - } - } else { - data.addCount(); - } - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_scan.cpp b/storage/ndb/src/old_files/client/odbc/executor/Exec_update_scan.cpp deleted file mode 100644 index a36fdd2714237b5389c0f86b12afe75fb6e23cff..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Exec_update_scan.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <NdbApi.hpp> -#include <common/StmtArea.hpp> -#include <common/ResultArea.hpp> -#include <codegen/Code_update_scan.hpp> -#include <codegen/Code_query.hpp> - -void -Exec_update_scan::execImpl(Ctx& ctx, Ctl& ctl) -{ - const Code& code = getCode(); - Data& data = getData(); - Ndb* const ndb = ndbObject(); - NdbConnection* const tcon = ndbConnection(); - // execute subquery - ctx_assert(m_query != 0); - m_query->execute(ctx, ctl); - if (! ctx.ok()) - return; - ctx_assert(ctl.m_scanOp != 0); - // update each row from query - data.setCount(0); - while (m_query->fetch(ctx, ctl)) { - NdbOperation* toOp = ctl.m_scanOp->takeOverForUpdate(tcon); - if (toOp == 0) { - ctx.pushStatus(ndb, tcon, ctl.m_scanOp, "takeOverScanOp"); - return; - } - const SqlRow& sqlRow = m_query->getData().sqlRow(); - for (unsigned i = 1; i <= sqlRow.count(); i++) { - const SqlField& f = sqlRow.getEntry(i); - const void* addr = f.sqlNull() ? 0 : f.addr(); - const char* value = static_cast<const char*>(addr); - if (toOp->setValue(code.m_attrId[i], value) == -1) { - ctx.pushStatus(ndb, tcon, toOp, "setValue"); - return; - } - } - if (tcon->execute(NoCommit) == -1) { - ctx.pushStatus(ndb, tcon, toOp, "execute without commit"); - return; - } - data.addCount(); - } - stmtArea().setRowCount(ctx, data.getCount()); -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Executor.cpp b/storage/ndb/src/old_files/client/odbc/executor/Executor.cpp deleted file mode 100644 index adabb28a4a5efbfbd924e6599fe280cede6a53db..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Executor.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/common.hpp> -#include <common/CodeTree.hpp> -#include <common/StmtArea.hpp> -#include <codegen/Code_root.hpp> -#include "Executor.hpp" - -void -Executor::execute(Ctx& ctx) -{ - Exec_base::Ctl ctl(0); - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - rebind(ctx); - if (! ctx.ok()) - return; - execRoot->execute(ctx, ctl); - if (! ctx.ok()) - return; - ctx_log2(("Executor: execute done")); -} - -void -Executor::fetch(Ctx& ctx) -{ - Exec_base::Ctl ctl(0); - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - rebind(ctx); - if (! ctx.ok()) - return; - execRoot->fetch(ctx, ctl); - if (! ctx.ok()) - return; - ctx_log2(("Executor: fetch done")); -} - -void -Executor::rebind(Ctx& ctx) -{ - Exec_root* execRoot = static_cast<Exec_root*>(m_stmtArea.m_execTree); - ctx_assert(execRoot != 0); - DescArea& apd = m_stmtArea.descArea(Desc_usage_APD); - DescArea& ard = m_stmtArea.descArea(Desc_usage_ARD); - if (! apd.isBound() || ! ard.isBound()) { - ctx_log2(("Executor: rebind required")); - execRoot->bind(ctx); - if (! ctx.ok()) - return; - apd.setBound(true); - ard.setBound(true); - } -} diff --git a/storage/ndb/src/old_files/client/odbc/executor/Executor.hpp b/storage/ndb/src/old_files/client/odbc/executor/Executor.hpp deleted file mode 100644 index 5edb9d509acf1a0b3157d1b51073bfcf1b3e67d9..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Executor.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_EXECUTOR_Executor_hpp -#define ODBC_EXECUTOR_Executor_hpp - -#include <common/common.hpp> -class StmtArea; - -/** - * @class Executor - * @brief Executes an ExecTree - */ -class Executor { -public: - Executor(StmtArea& stmtArea); - ~Executor(); - // execute prepared statement - void execute(Ctx& ctx); - // fetch next row from query - void fetch(Ctx& ctx); -private: - // rebind if necessary - void rebind(Ctx& ctx); - StmtArea m_stmtArea; -}; - -inline -Executor::Executor(StmtArea& stmtArea) : - m_stmtArea(stmtArea) -{ -} - -inline -Executor::~Executor() -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/executor/Makefile b/storage/ndb/src/old_files/client/odbc/executor/Makefile deleted file mode 100644 index d86781e212c38cad0668b010040fde21a79e1ce5..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/executor/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbcexecutor - -SOURCES = \ - Executor.cpp \ - Exec_query_lookup.cpp \ - Exec_query_index.cpp \ - Exec_query_scan.cpp \ - Exec_query_range.cpp \ - Exec_query_sys.cpp \ - Exec_pred_op.cpp \ - Exec_comp_op.cpp \ - Exec_expr_op.cpp \ - Exec_expr_func.cpp \ - Exec_expr_conv.cpp \ - Exec_insert.cpp \ - Exec_update_lookup.cpp \ - Exec_update_index.cpp \ - Exec_update_scan.cpp \ - Exec_delete_lookup.cpp \ - Exec_delete_index.cpp \ - Exec_delete_scan.cpp \ - Exec_create_table.cpp \ - Exec_create_index.cpp \ - Exec_drop_table.cpp \ - Exec_drop_index.cpp - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/handles/AttrDbc.cpp b/storage/ndb/src/old_files/client/odbc/handles/AttrDbc.cpp deleted file mode 100644 index 4768a8995a2164a605b2ab4e1406f78931a8d3b3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/AttrDbc.cpp +++ /dev/null @@ -1,473 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleDbc.hpp" - -static void -callback_SQL_ATTR_ACCESS_MODE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_MODE_READ_ONLY: - break; - case SQL_MODE_READ_WRITE: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid access mode value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_ACCESS_MODE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_MODE_READ_WRITE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ASYNC_ENABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_ASYNC_ENABLE_OFF: - break; - case SQL_ASYNC_ENABLE_ON: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "async enable on not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid async enable value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_ASYNC_ENABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_ASYNC_ENABLE_OFF; - data.setValue(value); -} - -static void -callback_SQL_ATTR_AUTO_IPD_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_AUTO_IPD_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_FALSE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_AUTOCOMMIT_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_AUTOCOMMIT_OFF: - if (pDbc->autocommit()) { - pDbc->autocommit(false); - pDbc->useConnection(ctx, true); - } - break; - case SQL_AUTOCOMMIT_ON: - if (! pDbc->autocommit()) { - pDbc->autocommit(true); - pDbc->sqlEndTran(ctx, SQL_COMMIT); - pDbc->useConnection(ctx, false); - } - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid autocommit value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_AUTOCOMMIT_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = pDbc->autocommit() ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CONNECTION_DEAD_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_CONNECTION_DEAD_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = pDbc->getState() == HandleDbc::Free ? SQL_CD_TRUE : SQL_CD_FALSE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CONNECTION_TIMEOUT_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); -} - -static void -callback_SQL_ATTR_CONNECTION_TIMEOUT_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CURRENT_CATALOG_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_ATTR_CURRENT_CATALOG_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - const char* value = "DEFAULT"; - data.setValue(value); -} - -static void -callback_SQL_ATTR_LOGIN_TIMEOUT_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - callback_SQL_ATTR_CONNECTION_TIMEOUT_set(ctx, self, data); -} - -static void -callback_SQL_ATTR_LOGIN_TIMEOUT_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - callback_SQL_ATTR_CONNECTION_TIMEOUT_default(ctx, self, data); -} - -static void -callback_SQL_ATTR_METADATA_ID_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_FALSE: - break; - case SQL_TRUE: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid metadata id value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_METADATA_ID_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_FALSE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ODBC_CURSORS_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CUR_USE_DRIVER: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cur use driver not supported"); - break; - case SQL_CUR_USE_IF_NEEDED: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cur use if needed not supported"); - break; - case SQL_CUR_USE_ODBC: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid odbc cursors value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_ODBC_CURSORS_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_CUR_USE_ODBC; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PACKET_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "packet size (%u) not supported", (unsigned)value); -} - -static void -callback_SQL_ATTR_PACKET_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_QUIET_MODE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Pointer); -} - -static void -callback_SQL_ATTR_QUIET_MODE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - data.setValue(); -} - -static void -callback_SQL_ATTR_TRACE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); -} - -static void -callback_SQL_ATTR_TRACE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - data.setValue(); -} - -static void -callback_SQL_ATTR_TRACEFILE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_ATTR_TRACEFILE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - data.setValue(); -} - -static void -callback_SQL_ATTR_TRANSLATE_LIB_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_ATTR_TRANSLATE_LIB_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - data.setValue(); -} - -static void -callback_SQL_ATTR_TRANSLATE_OPTION_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); -} - -static void -callback_SQL_ATTR_TRANSLATE_OPTION_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - data.setValue(); -} - -static void -callback_SQL_ATTR_TXN_ISOLATION_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0 && data.type() == OdbcData::Uinteger); - if (pDbc->getState() == HandleDbc::Free) { - ctx.pushStatus(Sqlstate::_08003, Error::Gen, "not connected"); - return; - } - if (pDbc->getState() == HandleDbc::Transacting) { - ctx.pushStatus(Sqlstate::_HY011, Error::Gen, "transaction is open"); - return; - } - SQLUINTEGER value = data.uinteger(); - SQLUINTEGER mask = SQL_TXN_READ_COMMITTED; - if (! (value & mask)) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "txn isolation level %u not supported", (unsigned)value); - return; - } -} - -static void -callback_SQL_ATTR_TXN_ISOLATION_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDbc* pDbc = static_cast<HandleDbc*>(self); - ctx_assert(pDbc != 0); - SQLUINTEGER value = SQL_TXN_READ_COMMITTED; - data.setValue(value); -} - -AttrSpec HandleDbc::m_attrSpec[] = { - { SQL_ATTR_ACCESS_MODE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ACCESS_MODE_set, - callback_SQL_ATTR_ACCESS_MODE_default, - }, - { SQL_ATTR_ASYNC_ENABLE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ASYNC_ENABLE_set, - callback_SQL_ATTR_ASYNC_ENABLE_default, - }, - { SQL_ATTR_AUTO_IPD, - OdbcData::Uinteger, - Attr_mode_readonly, - callback_SQL_ATTR_AUTO_IPD_set, - callback_SQL_ATTR_AUTO_IPD_default, - }, - { SQL_ATTR_AUTOCOMMIT, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_AUTOCOMMIT_set, - callback_SQL_ATTR_AUTOCOMMIT_default, - }, - { SQL_ATTR_CONNECTION_DEAD, - OdbcData::Uinteger, - Attr_mode_readonly, - callback_SQL_ATTR_CONNECTION_DEAD_set, - callback_SQL_ATTR_CONNECTION_DEAD_default, - }, - { SQL_ATTR_CONNECTION_TIMEOUT, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CONNECTION_TIMEOUT_set, - callback_SQL_ATTR_CONNECTION_TIMEOUT_default, - }, - { SQL_ATTR_CURRENT_CATALOG, - OdbcData::Sqlchar, - Attr_mode_readwrite, - callback_SQL_ATTR_CURRENT_CATALOG_set, - callback_SQL_ATTR_CURRENT_CATALOG_default, - }, - { SQL_ATTR_LOGIN_TIMEOUT, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_LOGIN_TIMEOUT_set, - callback_SQL_ATTR_LOGIN_TIMEOUT_default, - }, - { SQL_ATTR_METADATA_ID, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_METADATA_ID_set, - callback_SQL_ATTR_METADATA_ID_default, - }, - { SQL_ATTR_ODBC_CURSORS, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ODBC_CURSORS_set, - callback_SQL_ATTR_ODBC_CURSORS_default, - }, - { SQL_ATTR_PACKET_SIZE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_PACKET_SIZE_set, - callback_SQL_ATTR_PACKET_SIZE_default, - }, - { SQL_ATTR_QUIET_MODE, - OdbcData::Pointer, - Attr_mode_readwrite, - callback_SQL_ATTR_QUIET_MODE_set, - callback_SQL_ATTR_QUIET_MODE_default, - }, - { SQL_ATTR_TRACE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_TRACE_set, - callback_SQL_ATTR_TRACE_default, - }, - { SQL_ATTR_TRACEFILE, - OdbcData::Sqlchar, - Attr_mode_readwrite, - callback_SQL_ATTR_TRACEFILE_set, - callback_SQL_ATTR_TRACEFILE_default, - }, - { SQL_ATTR_TRANSLATE_LIB, - OdbcData::Sqlchar, - Attr_mode_readwrite, - callback_SQL_ATTR_TRANSLATE_LIB_set, - callback_SQL_ATTR_TRANSLATE_LIB_default, - }, - { SQL_ATTR_TRANSLATE_OPTION, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_TRANSLATE_OPTION_set, - callback_SQL_ATTR_TRANSLATE_OPTION_default, - }, - { SQL_ATTR_TXN_ISOLATION, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_TXN_ISOLATION_set, - callback_SQL_ATTR_TXN_ISOLATION_default, - }, - { 0, - OdbcData::Undef, - Attr_mode_undef, - 0, - 0, - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/AttrEnv.cpp b/storage/ndb/src/old_files/client/odbc/handles/AttrEnv.cpp deleted file mode 100644 index 3d57fddeb57d78061c3b63b192c98b0d81171301..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/AttrEnv.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleEnv.hpp" - -static void -callback_SQL_ATTR_CP_MATCH_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CP_STRICT_MATCH: - break; - case SQL_CP_RELAXED_MATCH: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid cp match value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CP_MATCH_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0); - SQLUINTEGER value = SQL_CP_STRICT_MATCH; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ODBC_VERSION_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0 && data.type() == OdbcData::Integer); - int version = data.integer(); - switch (version) { - case SQL_OV_ODBC2: - case SQL_OV_ODBC3: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid ODBC version %d", version); - return; - } - ctx_log1(("odbc version set to %d", version)); -} - -static void -callback_SQL_ATTR_ODBC_VERSION_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0); - // no default - ctx_log1(("odbc version has not been set")); - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "odbc version has not been set"); -} - -static void -callback_SQL_ATTR_OUTPUT_NTS_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0 && data.type() == OdbcData::Integer); - SQLINTEGER value = data.integer(); - switch (value) { - case SQL_TRUE: - break; - case SQL_FALSE: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "output nts FALSE not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid output nts value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_OUTPUT_NTS_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleEnv* pEnv = static_cast<HandleEnv*>(self); - ctx_assert(pEnv != 0); - data.setValue(); -} - -AttrSpec HandleEnv::m_attrSpec[] = { - { SQL_ATTR_CP_MATCH, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CP_MATCH_set, - callback_SQL_ATTR_CP_MATCH_default, - }, - { SQL_ATTR_ODBC_VERSION, - OdbcData::Integer, - Attr_mode_readwrite, - callback_SQL_ATTR_ODBC_VERSION_set, - callback_SQL_ATTR_ODBC_VERSION_default, - }, - { SQL_ATTR_OUTPUT_NTS, - OdbcData::Integer, - Attr_mode_readwrite, - callback_SQL_ATTR_OUTPUT_NTS_set, - callback_SQL_ATTR_OUTPUT_NTS_default, - }, - { 0, - OdbcData::Undef, - Attr_mode_undef, - 0, - 0, - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/AttrRoot.cpp b/storage/ndb/src/old_files/client/odbc/handles/AttrRoot.cpp deleted file mode 100644 index d1b264835b63ece818b4d4865bd21b13b0f54c3e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/AttrRoot.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleRoot.hpp" - -static void -callback_SQL_ATTR_CONNECTION_POOLING_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleRoot* pRoot = static_cast<HandleRoot*>(self); - ctx_assert(pRoot != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CP_OFF: - break; - case SQL_CP_ONE_PER_DRIVER: - case SQL_CP_ONE_PER_HENV: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "connection pooling not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid connection pooling value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CONNECTION_POOLING_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleRoot* pRoot = static_cast<HandleRoot*>(self); - ctx_assert(pRoot != 0); - SQLUINTEGER value = SQL_CP_OFF; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CP_MATCH_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleRoot* pRoot = static_cast<HandleRoot*>(self); - ctx_assert(pRoot != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CP_STRICT_MATCH: - break; - case SQL_CP_RELAXED_MATCH: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid cp match value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CP_MATCH_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleRoot* pRoot = static_cast<HandleRoot*>(self); - ctx_assert(pRoot != 0); - SQLUINTEGER value = SQL_CP_STRICT_MATCH; - data.setValue(value); -} - -AttrSpec HandleRoot::m_attrSpec[] = { - { SQL_ATTR_CONNECTION_POOLING, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CONNECTION_POOLING_set, - callback_SQL_ATTR_CONNECTION_POOLING_default, - }, - { SQL_ATTR_CP_MATCH, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CP_MATCH_set, - callback_SQL_ATTR_CP_MATCH_default, - }, - { 0, - OdbcData::Undef, - Attr_mode_undef, - 0, - 0, - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/AttrStmt.cpp b/storage/ndb/src/old_files/client/odbc/handles/AttrStmt.cpp deleted file mode 100644 index ce9a9c03fd1d8f8bdde9f4aa4df361fbf18ce139..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/AttrStmt.cpp +++ /dev/null @@ -1,1005 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleDbc.hpp" -#include "HandleStmt.hpp" -#include "HandleDesc.hpp" - -static void -callback_SQL_ATTR_APP_PARAM_DESC_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Pointer); - pStmt->setHandleDesc(ctx, Desc_usage_APD, data.pointer()); -} - -static void -callback_SQL_ATTR_APP_PARAM_DESC_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - HandleDesc* apd = pStmt->getHandleDesc(ctx, Desc_usage_APD); - OdbcData value(reinterpret_cast<SQLPOINTER>(apd)); - data.setValue(value); -} - -static void -callback_SQL_ATTR_APP_ROW_DESC_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Pointer); - pStmt->setHandleDesc(ctx, Desc_usage_ARD, data.pointer()); -} - -static void -callback_SQL_ATTR_APP_ROW_DESC_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - HandleDesc* ard = pStmt->getHandleDesc(ctx, Desc_usage_ARD); - OdbcData value(reinterpret_cast<SQLPOINTER>(ard)); - data.setValue(value); -} - -static void -callback_SQL_ATTR_ASYNC_ENABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_ASYNC_ENABLE_OFF: - break; - case SQL_ASYNC_ENABLE_ON: -// ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "async enable ON not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid async enable value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_ASYNC_ENABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_ASYNC_ENABLE_OFF; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CONCURRENCY_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CONCUR_READ_ONLY: - break; - case SQL_CONCUR_LOCK: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "concur lock not supported"); - break; - case SQL_CONCUR_ROWVER: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "concur rowver not supported"); - break; - case SQL_CONCUR_VALUES: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "concur values not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid concurrency value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CONCURRENCY_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_CONCUR_READ_ONLY; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CURSOR_SCROLLABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_NONSCROLLABLE: - break; - case SQL_SCROLLABLE: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cursor scrollable not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid concurrency value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CURSOR_SCROLLABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_NONSCROLLABLE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CURSOR_SENSITIVITY_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_UNSPECIFIED: - case SQL_INSENSITIVE: - break; - case SQL_SENSITIVE: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cursor sensitive not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid cursor sensitivity value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CURSOR_SENSITIVITY_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_INSENSITIVE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_CURSOR_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_CURSOR_FORWARD_ONLY: - break; - case SQL_CURSOR_STATIC: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cursor static not supported"); - break; - case SQL_CURSOR_KEYSET_DRIVEN: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cursor keyset driven not supported"); - break; - case SQL_CURSOR_DYNAMIC: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "cursor dynamic not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid cursor type value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_CURSOR_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_CURSOR_FORWARD_ONLY; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ENABLE_AUTO_IPD_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_FALSE: - break; - case SQL_TRUE: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "enable auto IPD not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid enable auto IPD value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_ENABLE_AUTO_IPD_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_FALSE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_FETCH_BOOKMARK_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Pointer); - SQLPOINTER value = data.pointer(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "fetch bookmark ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_FETCH_BOOKMARK_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLPOINTER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_IMP_PARAM_DESC_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Pointer); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_IMP_PARAM_DESC_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - HandleDesc* ipd = pStmt->getHandleDesc(ctx, Desc_usage_IPD); - OdbcData value(reinterpret_cast<SQLPOINTER>(ipd)); - data.setValue(value); -} - -static void -callback_SQL_ATTR_IMP_ROW_DESC_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Pointer); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_IMP_ROW_DESC_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - HandleDesc* ird = pStmt->getHandleDesc(ctx, Desc_usage_IRD); - OdbcData value(reinterpret_cast<SQLPOINTER>(ird)); - data.setValue(value); -} - -static void -callback_SQL_ATTR_KEYSET_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "keyset size not supported"); - return; - } -} - -static void -callback_SQL_ATTR_KEYSET_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_MAX_LENGTH_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "max length not supported"); - return; - } -} - -static void -callback_SQL_ATTR_MAX_LENGTH_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_MAX_ROWS_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "max rows not supported"); - return; - } -} - -static void -callback_SQL_ATTR_MAX_ROWS_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_METADATA_ID_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_FALSE: - break; - case SQL_TRUE: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid metadata id value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_METADATA_ID_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_FALSE; - data.setValue(value); -} - -static void -callback_SQL_ATTR_NOSCAN_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_NOSCAN_OFF: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "noscan OFF not supported"); - break; - case SQL_NOSCAN_ON: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid no scan value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_NOSCAN_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_NOSCAN_ON; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAM_BIND_OFFSET_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UintegerPtr); - SQLUINTEGER* value = data.uintegerPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "param bind offset ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_PARAM_BIND_OFFSET_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAM_BIND_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != SQL_PARAM_BIND_BY_COLUMN) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row-wise param binding not supported"); - return; - } -} - -static void -callback_SQL_ATTR_PARAM_BIND_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_PARAM_BIND_BY_COLUMN; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAM_OPERATION_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UsmallintPtr); - SQLUSMALLINT* value = data.usmallintPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "param operation ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_PARAM_OPERATION_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUSMALLINT* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAM_STATUS_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UsmallintPtr); - SQLUSMALLINT* value = data.usmallintPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "param status ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_PARAM_STATUS_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUSMALLINT* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAMS_PROCESSED_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UintegerPtr); - SQLUINTEGER* value = data.uintegerPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "params processed ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_PARAMS_PROCESSED_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_PARAMSET_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 1) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "paramset size %u not supported", (unsigned)value); - return; - } -} - -static void -callback_SQL_ATTR_PARAMSET_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 1; - data.setValue(value); -} - -static void -callback_SQL_ATTR_QUERY_TIMEOUT_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_01S02, Error::Gen, "query timeout %u replaced by 0", (unsigned)value); - return; - } -} - -static void -callback_SQL_ATTR_QUERY_TIMEOUT_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_RETRIEVE_DATA_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_RD_ON: - break; - case SQL_RD_OFF: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "retrieve data OFF not supported"); - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid retrieve data value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_RETRIEVE_DATA_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_RD_ON; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_ARRAY_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != 1) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row array size %u != 1 not supported", (unsigned)value); - return; - } -} - -static void -callback_SQL_ATTR_ROW_ARRAY_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = 1; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_BIND_OFFSET_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UintegerPtr); - SQLUINTEGER* value = data.uintegerPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row bind offset ptr != 0 not supported"); - return; - } -} - -static void -callback_SQL_ATTR_ROW_BIND_OFFSET_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_BIND_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - if (value != SQL_BIND_BY_COLUMN) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row-wise binding not supported"); - return; - } -} - -static void -callback_SQL_ATTR_ROW_BIND_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_BIND_BY_COLUMN; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_NUMBER_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_ROW_NUMBER_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = pStmt->getRowCount(); - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_OPERATION_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UsmallintPtr); - SQLUSMALLINT* value = data.usmallintPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row operation ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_ROW_OPERATION_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUSMALLINT* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROW_STATUS_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UsmallintPtr); - SQLUSMALLINT* value = data.usmallintPtr(); - if (value != 0) { - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "row status ptr not supported"); - return; - } -} - -static void -callback_SQL_ATTR_ROW_STATUS_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUSMALLINT* value = 0; - data.setValue(value); -} - -static void -callback_SQL_ATTR_ROWS_FETCHED_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::UintegerPtr); - SQLUINTEGER* value = data.uintegerPtr(); - HandleDesc* ird = pStmt->getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlSetDescField(ctx, 0, SQL_DESC_ROWS_PROCESSED_PTR, static_cast<SQLPOINTER>(value), SQL_IS_POINTER); -} - -static void -callback_SQL_ATTR_ROWS_FETCHED_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER* value = 0; - HandleDesc* ird = pStmt->getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlGetDescField(ctx, 0, SQL_DESC_ROWS_PROCESSED_PTR, &value, SQL_IS_POINTER, 0); - data.setValue(value); -} - -static void -callback_SQL_ATTR_SIMULATE_CURSOR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_SC_NON_UNIQUE: - break; - case SQL_SC_TRY_UNIQUE: - break; - case SQL_SC_UNIQUE: - break; - default: - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid simulate cursor value %u", (unsigned)value); - break; - } -} - -static void -callback_SQL_ATTR_SIMULATE_CURSOR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_SC_UNIQUE; // XXX if we did - data.setValue(value); -} - -static void -callback_SQL_ATTR_USE_BOOKMARKS_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - SQLUINTEGER value = data.uinteger(); - switch (value) { - case SQL_UB_OFF: - break; - case SQL_UB_VARIABLE: - case SQL_UB_FIXED: - ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "bookmarks not supported"); - return; - } -} - -static void -callback_SQL_ATTR_USE_BOOKMARKS_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = SQL_UB_OFF; - data.setValue(value); -} - -// driver specific - -static void -callback_SQL_ATTR_NDB_TUPLES_FETCHED_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0 && data.type() == OdbcData::Uinteger); - ctx_assert(false); // read-only -} - -static void -callback_SQL_ATTR_NDB_TUPLES_FETCHED_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleStmt* pStmt = static_cast<HandleStmt*>(self); - ctx_assert(pStmt != 0); - SQLUINTEGER value = pStmt->getTuplesFetched(); - data.setValue(value); -} - -AttrSpec HandleStmt::m_attrSpec[] = { - { SQL_ATTR_APP_PARAM_DESC, - OdbcData::Pointer, - Attr_mode_readwrite, - callback_SQL_ATTR_APP_PARAM_DESC_set, - callback_SQL_ATTR_APP_PARAM_DESC_default, - }, - { SQL_ATTR_APP_ROW_DESC, - OdbcData::Pointer, - Attr_mode_readwrite, - callback_SQL_ATTR_APP_ROW_DESC_set, - callback_SQL_ATTR_APP_ROW_DESC_default, - }, - { SQL_ATTR_ASYNC_ENABLE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ASYNC_ENABLE_set, - callback_SQL_ATTR_ASYNC_ENABLE_default, - }, - { SQL_ATTR_CONCURRENCY, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CONCURRENCY_set, - callback_SQL_ATTR_CONCURRENCY_default, - }, - { SQL_ATTR_CURSOR_SCROLLABLE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CURSOR_SCROLLABLE_set, - callback_SQL_ATTR_CURSOR_SCROLLABLE_default, - }, - { SQL_ATTR_CURSOR_SENSITIVITY, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CURSOR_SENSITIVITY_set, - callback_SQL_ATTR_CURSOR_SENSITIVITY_default, - }, - { SQL_ATTR_CURSOR_TYPE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_CURSOR_TYPE_set, - callback_SQL_ATTR_CURSOR_TYPE_default, - }, - { SQL_ATTR_ENABLE_AUTO_IPD, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ENABLE_AUTO_IPD_set, - callback_SQL_ATTR_ENABLE_AUTO_IPD_default, - }, - { SQL_ATTR_FETCH_BOOKMARK_PTR, - OdbcData::Pointer, - Attr_mode_readwrite, - callback_SQL_ATTR_FETCH_BOOKMARK_PTR_set, - callback_SQL_ATTR_FETCH_BOOKMARK_PTR_default, - }, - { SQL_ATTR_IMP_PARAM_DESC, - OdbcData::Pointer, - Attr_mode_readonly, - callback_SQL_ATTR_IMP_PARAM_DESC_set, - callback_SQL_ATTR_IMP_PARAM_DESC_default, - }, - { SQL_ATTR_IMP_ROW_DESC, - OdbcData::Pointer, - Attr_mode_readonly, - callback_SQL_ATTR_IMP_ROW_DESC_set, - callback_SQL_ATTR_IMP_ROW_DESC_default, - }, - { SQL_ATTR_KEYSET_SIZE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_KEYSET_SIZE_set, - callback_SQL_ATTR_KEYSET_SIZE_default, - }, - { SQL_ATTR_MAX_LENGTH, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_MAX_LENGTH_set, - callback_SQL_ATTR_MAX_LENGTH_default, - }, - { SQL_ATTR_MAX_ROWS, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_MAX_ROWS_set, - callback_SQL_ATTR_MAX_ROWS_default, - }, - { SQL_ATTR_METADATA_ID, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_METADATA_ID_set, - callback_SQL_ATTR_METADATA_ID_default, - }, - { SQL_ATTR_NOSCAN, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_NOSCAN_set, - callback_SQL_ATTR_NOSCAN_default, - }, - { SQL_ATTR_PARAM_BIND_OFFSET_PTR, - OdbcData::UintegerPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAM_BIND_OFFSET_PTR_set, - callback_SQL_ATTR_PARAM_BIND_OFFSET_PTR_default, - }, - { SQL_ATTR_PARAM_BIND_TYPE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAM_BIND_TYPE_set, - callback_SQL_ATTR_PARAM_BIND_TYPE_default, - }, - { SQL_ATTR_PARAM_OPERATION_PTR, - OdbcData::UsmallintPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAM_OPERATION_PTR_set, - callback_SQL_ATTR_PARAM_OPERATION_PTR_default, - }, - { SQL_ATTR_PARAM_STATUS_PTR, - OdbcData::UsmallintPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAM_STATUS_PTR_set, - callback_SQL_ATTR_PARAM_STATUS_PTR_default, - }, - { SQL_ATTR_PARAMS_PROCESSED_PTR, - OdbcData::UintegerPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAMS_PROCESSED_PTR_set, - callback_SQL_ATTR_PARAMS_PROCESSED_PTR_default, - }, - { SQL_ATTR_PARAMSET_SIZE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_PARAMSET_SIZE_set, - callback_SQL_ATTR_PARAMSET_SIZE_default, - }, - { SQL_ATTR_QUERY_TIMEOUT, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_QUERY_TIMEOUT_set, - callback_SQL_ATTR_QUERY_TIMEOUT_default, - }, - { SQL_ATTR_RETRIEVE_DATA, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_RETRIEVE_DATA_set, - callback_SQL_ATTR_RETRIEVE_DATA_default, - }, - { SQL_ATTR_ROW_ARRAY_SIZE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ROW_ARRAY_SIZE_set, - callback_SQL_ATTR_ROW_ARRAY_SIZE_default, - }, - { SQL_ATTR_ROW_BIND_OFFSET_PTR, - OdbcData::UintegerPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_ROW_BIND_OFFSET_PTR_set, - callback_SQL_ATTR_ROW_BIND_OFFSET_PTR_default, - }, - { SQL_ATTR_ROW_BIND_TYPE, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_ROW_BIND_TYPE_set, - callback_SQL_ATTR_ROW_BIND_TYPE_default, - }, - { SQL_ATTR_ROW_NUMBER, - OdbcData::Uinteger, - Attr_mode_readonly, - callback_SQL_ATTR_ROW_NUMBER_set, - callback_SQL_ATTR_ROW_NUMBER_default, - }, - { SQL_ATTR_ROW_OPERATION_PTR, - OdbcData::UsmallintPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_ROW_OPERATION_PTR_set, - callback_SQL_ATTR_ROW_OPERATION_PTR_default, - }, - { SQL_ATTR_ROW_STATUS_PTR, - OdbcData::UsmallintPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_ROW_STATUS_PTR_set, - callback_SQL_ATTR_ROW_STATUS_PTR_default, - }, - { SQL_ATTR_ROWS_FETCHED_PTR, - OdbcData::UintegerPtr, - Attr_mode_readwrite, - callback_SQL_ATTR_ROWS_FETCHED_PTR_set, - callback_SQL_ATTR_ROWS_FETCHED_PTR_default, - }, - { SQL_ATTR_SIMULATE_CURSOR, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_SIMULATE_CURSOR_set, - callback_SQL_ATTR_SIMULATE_CURSOR_default, - }, - { SQL_ATTR_USE_BOOKMARKS, - OdbcData::Uinteger, - Attr_mode_readwrite, - callback_SQL_ATTR_USE_BOOKMARKS_set, - callback_SQL_ATTR_USE_BOOKMARKS_default, - }, - // driver specific - { SQL_ATTR_NDB_TUPLES_FETCHED, - OdbcData::Uinteger, - Attr_mode_readonly, - callback_SQL_ATTR_NDB_TUPLES_FETCHED_set, - callback_SQL_ATTR_NDB_TUPLES_FETCHED_default, - }, - { 0, - OdbcData::Undef, - Attr_mode_undef, - 0, - 0, - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/DescSpec.cpp b/storage/ndb/src/old_files/client/odbc/handles/DescSpec.cpp deleted file mode 100644 index 83905cf9822b9e29f70f4cc292a84be6a3b327f7..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/DescSpec.cpp +++ /dev/null @@ -1,1140 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleDbc.hpp" -#include "HandleDesc.hpp" - -static void -callback_SQL_DESC_ALLOC_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_ALLOC_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_ARRAY_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Uinteger); -} - -static void -callback_SQL_DESC_ARRAY_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_ARRAY_STATUS_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::UsmallintPtr); -} - -static void -callback_SQL_DESC_ARRAY_STATUS_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_BIND_OFFSET_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::IntegerPtr); -} - -static void -callback_SQL_DESC_BIND_OFFSET_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_BIND_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_BIND_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_COUNT_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_COUNT_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_ROWS_PROCESSED_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::UintegerPtr); -} - -static void -callback_SQL_DESC_ROWS_PROCESSED_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_AUTO_UNIQUE_VALUE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_AUTO_UNIQUE_VALUE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_BASE_COLUMN_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_BASE_COLUMN_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_BASE_TABLE_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_BASE_TABLE_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_CASE_SENSITIVE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_CASE_SENSITIVE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_CATALOG_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_CATALOG_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_CONCISE_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_CONCISE_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_DATA_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Pointer); -} - -static void -callback_SQL_DESC_DATA_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_DATETIME_INTERVAL_CODE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_DATETIME_INTERVAL_CODE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_DATETIME_INTERVAL_PRECISION_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_DATETIME_INTERVAL_PRECISION_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_DISPLAY_SIZE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_DISPLAY_SIZE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_FIXED_PREC_SCALE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_FIXED_PREC_SCALE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_INDICATOR_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::IntegerPtr); -} - -static void -callback_SQL_DESC_INDICATOR_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_LABEL_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_LABEL_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_LENGTH_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Uinteger); -} - -static void -callback_SQL_DESC_LENGTH_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_LITERAL_PREFIX_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_LITERAL_PREFIX_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_LITERAL_SUFFIX_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_LITERAL_SUFFIX_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_LOCAL_TYPE_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_LOCAL_TYPE_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_NULLABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_NULLABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_NUM_PREC_RADIX_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_NUM_PREC_RADIX_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_OCTET_LENGTH_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Integer); -} - -static void -callback_SQL_DESC_OCTET_LENGTH_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_OCTET_LENGTH_PTR_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::IntegerPtr); -} - -static void -callback_SQL_DESC_OCTET_LENGTH_PTR_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_PARAMETER_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_PARAMETER_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_PRECISION_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_PRECISION_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_ROWVER_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_ROWVER_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_SCALE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_SCALE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_SCHEMA_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_SCHEMA_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_SEARCHABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_SEARCHABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_TABLE_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_TABLE_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_TYPE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_TYPE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_TYPE_NAME_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Sqlchar); -} - -static void -callback_SQL_DESC_TYPE_NAME_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_UNNAMED_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_UNNAMED_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_UNSIGNED_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_UNSIGNED_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -static void -callback_SQL_DESC_UPDATABLE_set(Ctx& ctx, HandleBase* self, const OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0 && data.type() == OdbcData::Smallint); -} - -static void -callback_SQL_DESC_UPDATABLE_default(Ctx& ctx, HandleBase* self, OdbcData& data) -{ - HandleDesc* pDesc = static_cast<HandleDesc*>(self); - ctx_assert(pDesc != 0); - data.setValue(); -} - -DescSpec HandleDesc::m_descSpec[] = { - { Desc_pos_header, - SQL_DESC_ALLOC_TYPE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_readonly, - Desc_mode_readonly, - Desc_mode_readonly, - }, - callback_SQL_DESC_ALLOC_TYPE_set, - callback_SQL_DESC_ALLOC_TYPE_default, - }, - { Desc_pos_header, - SQL_DESC_ARRAY_SIZE, - OdbcData::Uinteger, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_ARRAY_SIZE_set, - callback_SQL_DESC_ARRAY_SIZE_default, - }, - { Desc_pos_header, - SQL_DESC_ARRAY_STATUS_PTR, - OdbcData::UsmallintPtr, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readwrite - }, - callback_SQL_DESC_ARRAY_STATUS_PTR_set, - callback_SQL_DESC_ARRAY_STATUS_PTR_default, - }, - { Desc_pos_header, - SQL_DESC_BIND_OFFSET_PTR, - OdbcData::IntegerPtr, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_BIND_OFFSET_PTR_set, - callback_SQL_DESC_BIND_OFFSET_PTR_default, - }, - { Desc_pos_header, - SQL_DESC_BIND_TYPE, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_BIND_TYPE_set, - callback_SQL_DESC_BIND_TYPE_default, - }, - { Desc_pos_header, - SQL_DESC_COUNT, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_COUNT_set, - callback_SQL_DESC_COUNT_default, - }, - { Desc_pos_header, - SQL_DESC_ROWS_PROCESSED_PTR, - OdbcData::UintegerPtr, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused - }, - callback_SQL_DESC_ROWS_PROCESSED_PTR_set, - callback_SQL_DESC_ROWS_PROCESSED_PTR_default, - }, - { Desc_pos_record, - SQL_DESC_AUTO_UNIQUE_VALUE, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_AUTO_UNIQUE_VALUE_set, - callback_SQL_DESC_AUTO_UNIQUE_VALUE_default, - }, - { Desc_pos_record, - SQL_DESC_BASE_COLUMN_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_BASE_COLUMN_NAME_set, - callback_SQL_DESC_BASE_COLUMN_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_BASE_TABLE_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_BASE_TABLE_NAME_set, - callback_SQL_DESC_BASE_TABLE_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_CASE_SENSITIVE, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_CASE_SENSITIVE_set, - callback_SQL_DESC_CASE_SENSITIVE_default, - }, - { Desc_pos_record, - SQL_DESC_CATALOG_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_CATALOG_NAME_set, - callback_SQL_DESC_CATALOG_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_CONCISE_TYPE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_CONCISE_TYPE_set, - callback_SQL_DESC_CONCISE_TYPE_default, - }, - { Desc_pos_record, - SQL_DESC_DATA_PTR, - OdbcData::Pointer, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_DATA_PTR_set, - callback_SQL_DESC_DATA_PTR_default, - }, - { Desc_pos_record, - SQL_DESC_DATETIME_INTERVAL_CODE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_DATETIME_INTERVAL_CODE_set, - callback_SQL_DESC_DATETIME_INTERVAL_CODE_default, - }, - { Desc_pos_record, - SQL_DESC_DATETIME_INTERVAL_PRECISION, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_DATETIME_INTERVAL_PRECISION_set, - callback_SQL_DESC_DATETIME_INTERVAL_PRECISION_default, - }, - { Desc_pos_record, - SQL_DESC_DISPLAY_SIZE, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_DISPLAY_SIZE_set, - callback_SQL_DESC_DISPLAY_SIZE_default, - }, - { Desc_pos_record, - SQL_DESC_FIXED_PREC_SCALE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_FIXED_PREC_SCALE_set, - callback_SQL_DESC_FIXED_PREC_SCALE_default, - }, - { Desc_pos_record, - SQL_DESC_INDICATOR_PTR, - OdbcData::IntegerPtr, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_INDICATOR_PTR_set, - callback_SQL_DESC_INDICATOR_PTR_default, - }, - { Desc_pos_record, - SQL_DESC_LABEL, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_LABEL_set, - callback_SQL_DESC_LABEL_default, - }, - { Desc_pos_record, - SQL_DESC_LENGTH, - OdbcData::Uinteger, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_LENGTH_set, - callback_SQL_DESC_LENGTH_default, - }, - { Desc_pos_record, - SQL_DESC_LITERAL_PREFIX, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_LITERAL_PREFIX_set, - callback_SQL_DESC_LITERAL_PREFIX_default, - }, - { Desc_pos_record, - SQL_DESC_LITERAL_SUFFIX, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_LITERAL_SUFFIX_set, - callback_SQL_DESC_LITERAL_SUFFIX_default, - }, - { Desc_pos_record, - SQL_DESC_LOCAL_TYPE_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_LOCAL_TYPE_NAME_set, - callback_SQL_DESC_LOCAL_TYPE_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_NAME_set, - callback_SQL_DESC_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_NULLABLE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_NULLABLE_set, - callback_SQL_DESC_NULLABLE_default, - }, - { Desc_pos_record, - SQL_DESC_NUM_PREC_RADIX, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_NUM_PREC_RADIX_set, - callback_SQL_DESC_NUM_PREC_RADIX_default, - }, - { Desc_pos_record, - SQL_DESC_OCTET_LENGTH, - OdbcData::Integer, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_OCTET_LENGTH_set, - callback_SQL_DESC_OCTET_LENGTH_default, - }, - { Desc_pos_record, - SQL_DESC_OCTET_LENGTH_PTR, - OdbcData::IntegerPtr, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readwrite - }, - callback_SQL_DESC_OCTET_LENGTH_PTR_set, - callback_SQL_DESC_OCTET_LENGTH_PTR_default, - }, - { Desc_pos_record, - SQL_DESC_PARAMETER_TYPE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_unused - }, - callback_SQL_DESC_PARAMETER_TYPE_set, - callback_SQL_DESC_PARAMETER_TYPE_default, - }, - { Desc_pos_record, - SQL_DESC_PRECISION, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_PRECISION_set, - callback_SQL_DESC_PRECISION_default, - }, - { Desc_pos_record, - SQL_DESC_ROWVER, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_ROWVER_set, - callback_SQL_DESC_ROWVER_default, - }, - { Desc_pos_record, - SQL_DESC_SCALE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_SCALE_set, - callback_SQL_DESC_SCALE_default, - }, - { Desc_pos_record, - SQL_DESC_SCHEMA_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_SCHEMA_NAME_set, - callback_SQL_DESC_SCHEMA_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_SEARCHABLE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_SEARCHABLE_set, - callback_SQL_DESC_SEARCHABLE_default, - }, - { Desc_pos_record, - SQL_DESC_TABLE_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_TABLE_NAME_set, - callback_SQL_DESC_TABLE_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_TYPE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_readwrite, - Desc_mode_readonly, - Desc_mode_readwrite - }, - callback_SQL_DESC_TYPE_set, - callback_SQL_DESC_TYPE_default, - }, - { Desc_pos_record, - SQL_DESC_TYPE_NAME, - OdbcData::Sqlchar, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_TYPE_NAME_set, - callback_SQL_DESC_TYPE_NAME_default, - }, - { Desc_pos_record, - SQL_DESC_UNNAMED, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readwrite, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_UNNAMED_set, - callback_SQL_DESC_UNNAMED_default, - }, - { Desc_pos_record, - SQL_DESC_UNSIGNED, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_readonly, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_UNSIGNED_set, - callback_SQL_DESC_UNSIGNED_default, - }, - { Desc_pos_record, - SQL_DESC_UPDATABLE, - OdbcData::Smallint, - { Desc_mode_undef, - Desc_mode_unused, - Desc_mode_unused, - Desc_mode_readonly, - Desc_mode_unused - }, - callback_SQL_DESC_UPDATABLE_set, - callback_SQL_DESC_UPDATABLE_default, - }, - { Desc_pos_end, - 0, - OdbcData::Undef, - { Desc_mode_undef, - Desc_mode_undef, - Desc_mode_undef, - Desc_mode_undef, - Desc_mode_undef - }, - 0, - 0 - }, -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/FuncTab.cpp b/storage/ndb/src/old_files/client/odbc/handles/FuncTab.cpp deleted file mode 100644 index 6bd744d7a7f3f4cb73e3111112c246f92e51337f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/FuncTab.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleDbc.hpp" - -HandleDbc::FuncTab -HandleDbc::m_funcTab[] = { - { SQL_API_SQLALLOCCONNECT , 1 }, - { SQL_API_SQLALLOCENV , 1 }, - { SQL_API_SQLALLOCHANDLE , 1 }, - { SQL_API_SQLALLOCHANDLESTD , 0 }, - { SQL_API_SQLALLOCSTMT , 1 }, - { SQL_API_SQLBINDCOL , 1 }, - { SQL_API_SQLBINDPARAM , 1 }, - { SQL_API_SQLBINDPARAMETER , 1 }, - { SQL_API_SQLBROWSECONNECT , 0 }, - { SQL_API_SQLBULKOPERATIONS , 0 }, - { SQL_API_SQLCANCEL , 1 }, - { SQL_API_SQLCLOSECURSOR , 1 }, - { SQL_API_SQLCOLATTRIBUTE , 1 }, - { SQL_API_SQLCOLATTRIBUTES , 1 }, - { SQL_API_SQLCOLUMNPRIVILEGES , 0 }, - { SQL_API_SQLCOLUMNS , 1 }, - { SQL_API_SQLCONNECT , 1 }, - { SQL_API_SQLCOPYDESC , 0 }, - { SQL_API_SQLDATASOURCES , 0 }, - { SQL_API_SQLDESCRIBECOL , 1 }, - { SQL_API_SQLDESCRIBEPARAM , 0 }, - { SQL_API_SQLDISCONNECT , 1 }, - { SQL_API_SQLDRIVERCONNECT , 1 }, - { SQL_API_SQLDRIVERS , 0 }, - { SQL_API_SQLENDTRAN , 1 }, - { SQL_API_SQLERROR , 1 }, - { SQL_API_SQLEXECDIRECT , 1 }, - { SQL_API_SQLEXECUTE , 1 }, - { SQL_API_SQLEXTENDEDFETCH , 0 }, - { SQL_API_SQLFETCH , 1 }, - { SQL_API_SQLFETCHSCROLL , 0 }, - { SQL_API_SQLFOREIGNKEYS , 0 }, - { SQL_API_SQLFREECONNECT , 1 }, - { SQL_API_SQLFREEENV , 1 }, - { SQL_API_SQLFREEHANDLE , 1 }, - { SQL_API_SQLFREESTMT , 1 }, - { SQL_API_SQLGETCONNECTATTR , 1 }, - { SQL_API_SQLGETCONNECTOPTION , 1 }, - { SQL_API_SQLGETCURSORNAME , 1 }, - { SQL_API_SQLGETDATA , 1 }, - { SQL_API_SQLGETDESCFIELD , 1 }, - { SQL_API_SQLGETDESCREC , 1 }, - { SQL_API_SQLGETDIAGFIELD , 1 }, - { SQL_API_SQLGETDIAGREC , 1 }, - { SQL_API_SQLGETENVATTR , 1 }, - { SQL_API_SQLGETFUNCTIONS , 1 }, - { SQL_API_SQLGETINFO , 1 }, - { SQL_API_SQLGETSTMTATTR , 1 }, - { SQL_API_SQLGETSTMTOPTION , 1 }, - { SQL_API_SQLGETTYPEINFO , 1 }, - { SQL_API_SQLMORERESULTS , 1 }, - { SQL_API_SQLNATIVESQL , 0 }, - { SQL_API_SQLNUMPARAMS , 1 }, - { SQL_API_SQLNUMRESULTCOLS , 1 }, - { SQL_API_SQLPARAMDATA , 1 }, - { SQL_API_SQLPARAMOPTIONS , 0 }, - { SQL_API_SQLPREPARE , 1 }, - { SQL_API_SQLPRIMARYKEYS , 1 }, - { SQL_API_SQLPROCEDURECOLUMNS , 0 }, - { SQL_API_SQLPROCEDURES , 0 }, - { SQL_API_SQLPUTDATA , 1 }, - { SQL_API_SQLROWCOUNT , 1 }, - { SQL_API_SQLSETCONNECTATTR , 1 }, - { SQL_API_SQLSETCONNECTOPTION , 1 }, - { SQL_API_SQLSETCURSORNAME , 1 }, - { SQL_API_SQLSETDESCFIELD , 1 }, - { SQL_API_SQLSETDESCREC , 1 }, - { SQL_API_SQLSETENVATTR , 1 }, - { SQL_API_SQLSETPARAM , 1 }, - { SQL_API_SQLSETPOS , 0 }, - { SQL_API_SQLSETSCROLLOPTIONS , 0 }, - { SQL_API_SQLSETSTMTATTR , 1 }, - { SQL_API_SQLSETSTMTOPTION , 1 }, - { SQL_API_SQLSPECIALCOLUMNS , 0 }, - { SQL_API_SQLSTATISTICS , 0 }, - { SQL_API_SQLTABLEPRIVILEGES , 0 }, - { SQL_API_SQLTABLES , 1 }, - { SQL_API_SQLTRANSACT , 1 }, - { 0 , -1 } -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleBase.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleBase.cpp deleted file mode 100644 index 27379cdc3f855fef16e8a19508e46eb1813e9321..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleBase.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleBase.hpp" - -HandleBase::~HandleBase() -{ - delete m_ctx; - m_ctx = 0; -} - -void -HandleBase::saveCtx(Ctx& ctx) -{ - delete m_ctx; - m_ctx = &ctx; -} - -// get diagnostics - -void -HandleBase::sqlGetDiagField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT diagIdentifier, SQLPOINTER diagInfo, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength) -{ - const DiagSpec& spec = DiagSpec::find(diagIdentifier); - if (spec.m_pos == Diag_pos_end) { - ctx.setCode(SQL_ERROR); - return; - } - const bool header = (spec.m_pos == Diag_pos_header); - const bool status = (spec.m_pos == Diag_pos_status); - ctx_assert(header || status); - if (! (spec.m_handles & odbcHandle())) { - ctx.setCode(SQL_ERROR); - return; - } - if (header) { - recNumber = 0; // ignored for header fields, so fix it - if (m_ctx == 0) { - if (diagIdentifier == SQL_DIAG_NUMBER) { - SQLINTEGER n = 0; - OdbcData data(n); - data.copyout(ctx, diagInfo, bufferLength, 0, stringLength); - return; - } - if (diagIdentifier == SQL_DIAG_RETURNCODE) { - SQLSMALLINT n = 0; - OdbcData data(n); - data.copyout(ctx, diagInfo, bufferLength, 0, stringLength); - return; - } - return; - } - } - if (status) { - if (recNumber <= 0) { - ctx.setCode(SQL_ERROR); - return; - } - if (m_ctx == 0) { - if ((unsigned)recNumber > 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - return; - } - if ((unsigned)recNumber > m_ctx->diagArea().numStatus()) { - ctx.setCode(SQL_NO_DATA); - return; - } - } - OdbcData data; - ctx_assert(m_ctx != 0); - m_ctx->diagArea().getRecord(ctx, recNumber, diagIdentifier, data); - if (data.type() != OdbcData::Undef) - data.copyout(ctx, diagInfo, bufferLength, 0, stringLength); -} - -void -HandleBase::sqlGetDiagRec(Ctx& ctx, SQLSMALLINT recNumber, SQLCHAR* sqlstate, SQLINTEGER* nativeError, SQLCHAR* messageText, SQLSMALLINT bufferLength, SQLSMALLINT* textLength) -{ - sqlGetDiagField(ctx, recNumber, SQL_DIAG_SQLSTATE, static_cast<SQLPOINTER>(sqlstate), 5 + 1, 0); - sqlGetDiagField(ctx, recNumber, SQL_DIAG_NATIVE, static_cast<SQLPOINTER>(nativeError), -1, 0); - sqlGetDiagField(ctx, recNumber, SQL_DIAG_MESSAGE_TEXT, static_cast<SQLPOINTER>(messageText), bufferLength, textLength); -} - -void -HandleBase::sqlError(Ctx& ctx, SQLCHAR* sqlstate, SQLINTEGER* nativeError, SQLCHAR* messageText, SQLSMALLINT bufferLength, SQLSMALLINT* textLength) -{ - if (m_ctx == 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - const SQLSMALLINT recNumber = m_ctx->diagArea().nextRecNumber(); - if (recNumber == 0) { - ctx.setCode(SQL_NO_DATA); - return; - } - sqlGetDiagField(ctx, recNumber, SQL_DIAG_SQLSTATE, static_cast<SQLPOINTER>(sqlstate), 5 + 1, 0); - sqlGetDiagField(ctx, recNumber, SQL_DIAG_NATIVE, static_cast<SQLPOINTER>(nativeError), -1, 0); - sqlGetDiagField(ctx, recNumber, SQL_DIAG_MESSAGE_TEXT, static_cast<SQLPOINTER>(messageText), bufferLength, textLength); -} - -// common code for attributes - -void -HandleBase::baseSetHandleAttr(Ctx& ctx, AttrArea& attrArea, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength) -{ - const AttrSpec& spec = attrArea.findSpec(attribute); - if (spec.m_mode == Attr_mode_undef) { // not found - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "undefined attribute id %d", (int)attribute); - return; - } - if (spec.m_mode == Attr_mode_readonly) { // read only - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "read-only attribute id %d", (int)attribute); - return; - } - OdbcData data; - data.copyin(ctx, spec.m_type, value, stringLength); - if (! ctx.ok()) - return; - attrArea.setAttr(ctx, attribute, data); -} - -void -HandleBase::baseGetHandleAttr(Ctx& ctx, AttrArea& attrArea, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength) -{ - const AttrSpec& spec = attrArea.findSpec(attribute); - if (spec.m_mode == Attr_mode_undef) { // not found - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "undefined attribute id %d", (int)attribute); - return; - } - OdbcData data; - attrArea.getAttr(ctx, attribute, data); - if (! ctx.ok()) - return; - data.copyout(ctx, value, bufferLength, stringLength); -} - -void -HandleBase::baseSetHandleOption(Ctx& ctx, AttrArea& attrArea, SQLUSMALLINT option, SQLUINTEGER value) -{ - baseSetHandleAttr(ctx, attrArea, static_cast<SQLINTEGER>(option), reinterpret_cast<SQLPOINTER>(value), 0); -} - -void -HandleBase::baseGetHandleOption(Ctx& ctx, AttrArea& attrArea, SQLUSMALLINT option, SQLPOINTER value) -{ - baseGetHandleAttr(ctx, attrArea, static_cast<SQLINTEGER>(option), value, SQL_NTS, 0); -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleBase.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleBase.hpp deleted file mode 100644 index fc35c2b559b4f4e34f8ce4aff0a0f4f4bb990a40..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleBase.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleBase_hpp -#define ODBC_HANDLES_HandleBase_hpp - -#include <common/common.hpp> -#include <common/OdbcData.hpp> -#include <common/DiagArea.hpp> -#include <common/AttrArea.hpp> - -/** - * @class HandleBase - * @brief Base class for handles - * - * Following types of handles exist: - * - HandleRoot : root node - * - HandleEnv : environment handle (SQLHENV) - * - HandleDbc : connection handle (SQLHDBC) - * - HandleStmt : statement handle (SQLHSTMT) - * - HandleDesc : descriptor handle (SQLHDESC) - */ -class HandleRoot; -class HandleBase { -public: - HandleBase(); - virtual ~HandleBase() = 0; - virtual HandleBase* getParent() = 0; - virtual HandleRoot* getRoot() = 0; - virtual OdbcHandle odbcHandle() = 0; - void saveCtx(Ctx& ctx); - // allocate and free handles - virtual void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) = 0; - virtual void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild) = 0; - // get diagnostics - void sqlGetDiagField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT diagIdentifier, SQLPOINTER diagInfo, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength); - void sqlGetDiagRec(Ctx& ctx, SQLSMALLINT recNumber, SQLCHAR* sqlstate, SQLINTEGER* nativeError, SQLCHAR* messageText, SQLSMALLINT bufferLength, SQLSMALLINT* textLength); - void sqlError(Ctx& ctx, SQLCHAR* sqlstate, SQLINTEGER* nativeError, SQLCHAR* messageText, SQLSMALLINT bufferLength, SQLSMALLINT* textLength); // odbc2.0 - // common code for attributes - void baseSetHandleAttr(Ctx& ctx, AttrArea& attrArea, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength); - void baseGetHandleAttr(Ctx& ctx, AttrArea& attrArea, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength); - void baseSetHandleOption(Ctx& ctx, AttrArea& attrArea, SQLUSMALLINT option, SQLUINTEGER value); // odbc2.0 - void baseGetHandleOption(Ctx& ctx, AttrArea& attrArea, SQLUSMALLINT option, SQLPOINTER value); // odbc2.0 -protected: - Ctx* m_ctx; // saved from last ODBC function -}; - -inline -HandleBase::HandleBase() : - m_ctx(0) -{ -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.cpp deleted file mode 100644 index 2d5ded2cc2186acaec425c08749b4ce4f5871172..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <limits.h> -#include <NdbApi.hpp> -#include <common/common.hpp> -#include <common/DiagArea.hpp> -#include <common/StmtArea.hpp> -#include "HandleRoot.hpp" -#include "HandleEnv.hpp" -#include "HandleDbc.hpp" -#include "HandleStmt.hpp" -#include "HandleDesc.hpp" -#include "PoolNdb.hpp" - -#ifndef INT_MAX -#define INT_MAX 2147483647 -#endif - -HandleDbc::HandleDbc(HandleEnv* pEnv) : - m_env(pEnv), - m_attrArea(m_attrSpec) -{ - m_attrArea.setHandle(this); -} - -HandleDbc::~HandleDbc() -{ -} - -void -HandleDbc::ctor(Ctx& ctx) -{ -} - -void -HandleDbc::dtor(Ctx& ctx) -{ - if (m_state == Connected) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "cannot delete connection handle - connection is open"); - return; - } - if (m_state == Transacting) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "cannot delete connection handle - transaction is active"); - return; - } -} - -// allocate and free handles - -void -HandleDbc::sqlAllocStmt(Ctx& ctx, HandleStmt** ppStmt) -{ - if (ppStmt == 0) { - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "cannot allocate statement handle - null return address"); - return; - } - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_08003, Error::Gen, "cannot allocate statement handle - not connected to database"); - return; - } - HandleStmt* pStmt = new HandleStmt(this); - pStmt->ctor(ctx); - if (! ctx.ok()) { - pStmt->dtor(ctx); - delete pStmt; - return; - } - m_listStmt.push_back(pStmt); - getRoot()->record(SQL_HANDLE_STMT, pStmt, true); - *ppStmt = pStmt; -} - -void -HandleDbc::sqlAllocDesc(Ctx& ctx, HandleDesc** ppDesc) -{ - if (ppDesc == 0) { - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "cannot allocate descriptor handle - null return address"); - return; - } - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_08003, Error::Gen, "cannot allocate descriptor handle - not connected to database"); - return; - } - HandleDesc* pDesc = new HandleDesc(this); - pDesc->ctor(ctx); - if (! ctx.ok()) { - pDesc->dtor(ctx); - delete pDesc; - return; - } - m_listDesc.push_back(pDesc); - getRoot()->record(SQL_HANDLE_DESC, pDesc, true); - *ppDesc = pDesc; -} - -void -HandleDbc::sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) -{ - switch (childType) { - case SQL_HANDLE_STMT: - sqlAllocStmt(ctx, (HandleStmt**)ppChild); - return; - case SQL_HANDLE_DESC: - sqlAllocDesc(ctx, (HandleDesc**)ppChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -void -HandleDbc::sqlFreeStmt(Ctx& ctx, HandleStmt* pStmt, SQLUSMALLINT iOption) -{ - switch (iOption) { - case SQL_CLOSE: - // no error if not open - if (pStmt->getState() == HandleStmt::Open) - pStmt->sqlCloseCursor(ctx); - return; - case SQL_DROP: - pStmt->dtor(ctx); - if (! ctx.ok()) - return; - m_listStmt.remove(pStmt); - getRoot()->record(SQL_HANDLE_STMT, pStmt, false); - delete pStmt; - return; - case SQL_UNBIND: { - DescArea& ard = pStmt->getHandleDesc(ctx, Desc_usage_ARD)->descArea(); - ard.setCount(ctx, 0); - return; - } - case SQL_RESET_PARAMS: { - DescArea& apd = pStmt->getHandleDesc(ctx, Desc_usage_APD)->descArea(); - apd.setCount(ctx, 0); - // SQLFreeStmt doc misses this part - DescArea& ipd = pStmt->getHandleDesc(ctx, Desc_usage_IPD)->descArea(); - ipd.setCount(ctx, 0); - return; - } - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid free statement option %u", (unsigned)iOption); -} - -void -HandleDbc::sqlFreeDesc(Ctx& ctx, HandleDesc* pDesc) -{ - pDesc->dtor(ctx); - if (! ctx.ok()) - return; - m_listDesc.remove(pDesc); - getRoot()->record(SQL_HANDLE_DESC, pDesc, false); - delete pDesc; -} - -void -HandleDbc::sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild) -{ - switch (childType) { - case SQL_HANDLE_STMT: - sqlFreeStmt(ctx, (HandleStmt*)pChild, SQL_DROP); - return; - case SQL_HANDLE_DESC: - sqlFreeDesc(ctx, (HandleDesc*)pChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -// attributes and info functions - -static bool -ignore_attr(Ctx& ctx, SQLINTEGER attribute) -{ - switch (attribute) { - case 1246: - ctx_log2(("ignore unknown ADO.NET connect attribute %d", (int)attribute)); - return true; - } - return false; -} - -void -HandleDbc::sqlSetConnectAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength) -{ - if (ignore_attr(ctx, attribute)) - return; - baseSetHandleAttr(ctx, m_attrArea, attribute, value, stringLength); -} - -void -HandleDbc::sqlGetConnectAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength) -{ - if (ignore_attr(ctx, attribute)) - return; - baseGetHandleAttr(ctx, m_attrArea, attribute, value, bufferLength, stringLength); -} - -void -HandleDbc::sqlSetConnectOption(Ctx& ctx, SQLUSMALLINT option, SQLUINTEGER value) -{ - if (ignore_attr(ctx, option)) - return; - baseSetHandleOption(ctx, m_attrArea, option, value); -} - -void -HandleDbc::sqlGetConnectOption(Ctx& ctx, SQLUSMALLINT option, SQLPOINTER value) -{ - if (ignore_attr(ctx, option)) - return; - baseGetHandleOption(ctx, m_attrArea, option, value); -} - -void -HandleDbc::sqlGetFunctions(Ctx& ctx, SQLUSMALLINT functionId, SQLUSMALLINT* supported) -{ - if (functionId == SQL_API_ALL_FUNCTIONS) { - for (int i = 0; i < 100; i++) - supported[i] = SQL_FALSE; - FuncTab* f; - for (f = m_funcTab; f->m_supported != -1; f++) { - SQLUSMALLINT id = f->m_functionId; - if (id < 100 && f->m_supported) - supported[id] = SQL_TRUE; - } - } else if (functionId == SQL_API_ODBC3_ALL_FUNCTIONS) { - for (int i = 0; i < SQL_API_ODBC3_ALL_FUNCTIONS_SIZE; i++) - supported[i] = 0; - FuncTab* f; - for (f = m_funcTab; f->m_supported != -1; f++) { - SQLUSMALLINT id = f->m_functionId; - ctx_assert((id >> 4) < SQL_API_ODBC3_ALL_FUNCTIONS_SIZE); - if (f->m_supported) - supported[id >> 4] |= (1 << (id & 0xf)); - } - } else { - FuncTab* f; - for (f = m_funcTab; f->m_supported != -1; f++) { - if (f->m_functionId == functionId) - break; - } - if (f->m_supported != -1) - supported[0] = f->m_supported ? SQL_TRUE : SQL_FALSE; - else - ctx.pushStatus(Sqlstate::_HY095, Error::Gen, "invalid function id %u", (unsigned)functionId); - } -} - -void -HandleDbc::sqlGetInfo(Ctx& ctx, SQLUSMALLINT infoType, SQLPOINTER infoValue, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength) -{ - InfoTab* f; - for (f = m_infoTab; f->m_format != InfoTab::End; f++) { - if (f->m_id == infoType) - break; - } - if (f->m_format == InfoTab::End) { - ctx.pushStatus(Sqlstate::_HY096, Error::Gen, "invalid info type %u", (unsigned)infoType); - return; - } - if (f->m_format == InfoTab::Char || f->m_format == InfoTab::YesNo) { - ctx_log3(("SQLGetInfo: type=%u value='%s'", (unsigned)infoType, f->m_str)); - OdbcData data(f->m_str); - data.copyout(ctx, infoValue, bufferLength, 0, stringLength); - return; - } - if (f->m_format == InfoTab::Short) { - ctx_log3(("SQLGetInfo: type=%u value=%d", (unsigned)infoType, (int)f->m_int)); - OdbcData data((SQLUSMALLINT)f->m_int); - data.copyout(ctx, infoValue, 0, 0); - return; - } - if (f->m_format == InfoTab::Long || f->m_format == InfoTab::Bitmask) { - ctx_log3(("SQLGetInfo: type=%u value=0x%x", (unsigned)infoType, (int)f->m_int)); - OdbcData data((SQLUINTEGER)f->m_int); - data.copyout(ctx, infoValue, 0, 0); - return; - } - ctx_assert(false); -} - -int -HandleDbc::getOdbcVersion(Ctx& ctx) -{ - return m_env->getOdbcVersion(ctx); -} - -// connect and transactions - -void -HandleDbc::sqlConnect(Ctx& ctx, SQLCHAR* serverName, SQLSMALLINT nameLength1, SQLCHAR* userName, SQLSMALLINT nameLength2, SQLCHAR* authentication, SQLSMALLINT nameLength3) -{ - if (m_state != Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "already connected"); - return; - } - OdbcData data; - m_attrArea.getAttr(ctx, SQL_ATTR_CONNECTION_TIMEOUT, data); - int timeout = data.uinteger(); - if (timeout <= 0) - timeout = INT_MAX; - PoolNdb* poolNdb = getRoot()->getPoolNdb(); - Ndb* pNdb = poolNdb->allocate(ctx, timeout); - if (pNdb == 0) { - return; - } - m_ndbObject = pNdb; - m_state = Connected; - m_autocommit = true; -} - -void -HandleDbc::sqlDriverConnect(Ctx& ctx, SQLHWND hwnd, SQLCHAR* szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR* szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT* pcbConnStrOut, SQLUSMALLINT fDriverCompletion) -{ - ctx_log2(("driver connect %.*s", cbConnStrIn, szConnStrIn == 0 ? "" : (char*)szConnStrIn)); - sqlConnect(ctx, (SQLCHAR*)"", 0, (SQLCHAR*)"", 0, (SQLCHAR*)"", 0); - if (! ctx.ok()) - return; - OdbcData data("DNS=DEFAULT"); - if (szConnStrOut != 0) // ADO NET - data.copyout(ctx, static_cast<SQLPOINTER>(szConnStrOut), cbConnStrOutMax, 0, pcbConnStrOut); -} - -void -HandleDbc::sqlDisconnect(Ctx& ctx) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "already disconnected"); - return; - } - // XXX missing check for uncommited changes - ListStmt::iterator i = m_listStmt.begin(); - while (i != m_listStmt.end()) { - HandleStmt* pStmt = *i; - ListStmt::iterator j = i++; - pStmt->dtor(ctx); - getRoot()->record(SQL_HANDLE_STMT, pStmt, false); - delete pStmt; - m_listStmt.erase(j); - } - PoolNdb* poolNdb = getRoot()->getPoolNdb(); - poolNdb->release(ctx, m_ndbObject); - m_ndbObject = 0; - m_state = Free; - m_autocommit = true; -} - -void -HandleDbc::sqlEndTran(Ctx& ctx, SQLSMALLINT completionType) -{ - if (completionType != SQL_COMMIT && completionType != SQL_ROLLBACK) { - ctx.pushStatus(Sqlstate::_HY012, Error::Gen, "invalid completion type %d", (int)completionType); - return; - } - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_08003, Error::Gen, "not connected"); - return; - } - Ndb* ndb = m_ndbObject; - ctx_assert(ndb != 0); - if (m_state == Connected) { - ctx_log2(("sqlEndTran: no transaction active")); - return; - } - NdbConnection* tcon = m_ndbConnection; - ctx_assert(tcon != 0); - if (completionType == SQL_COMMIT) { - if (tcon->execute(Commit) == -1) { - if (tcon->getNdbError().code != 626) - ctx.pushStatus(ndb, tcon, 0, "execute commit"); - else - ctx_log1(("ignore no data (626) at execute commit")); - } else { - ctx_log2(("sqlEndTran: transaction commit done")); - m_uncommitted = false; - } - } else { - if (tcon->execute(Rollback) == -1) { - if (tcon->getNdbError().code != 626) - ctx.pushStatus(ndb, tcon, 0, "execute rollback"); - else - ctx_log1(("ignore no data (626) at execute rollback")); - } else { - ctx_log2(("sqlEndTran: transaction rollback done")); - m_uncommitted = false; - } - } - for (ListStmt::iterator i = m_listStmt.begin(); i != m_listStmt.end(); i++) { - HandleStmt* pStmt = *i; - if (pStmt->getState() == HandleStmt::Open) { - pStmt->sqlCloseCursor(ctx); // SQL_CB_CLOSE behaviour - } - pStmt->useConnection(ctx, false); - } - if (! m_autocommit) { - useConnection(ctx, false); - useConnection(ctx, true); - } -} - -void -HandleDbc::sqlTransact(Ctx& ctx, SQLUSMALLINT completionType) -{ - sqlEndTran(ctx, completionType); -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.hpp deleted file mode 100644 index 130df08d02ca079efcb5ee70a1c18d47cd7bca56..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleDbc.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleDbc_hpp -#define ODBC_HANDLES_HandleDbc_hpp - -#include <list> -#include <common/common.hpp> -#include <common/ConnArea.hpp> -#include "HandleBase.hpp" - -class HandleRoot; -class HandleEnv; -class HandleStmt; -class HandleDesc; - -/** - * @class HandleDbc - * @brief Connection handle (SQLHDBC). - */ -class HandleDbc : public HandleBase, public ConnArea { -public: - HandleDbc(HandleEnv* pEnv); - ~HandleDbc(); - void ctor(Ctx& ctx); - void dtor(Ctx& ctx); - HandleEnv* getEnv(); - HandleBase* getParent(); - HandleRoot* getRoot(); - OdbcHandle odbcHandle(); - // allocate and free handles - void sqlAllocStmt(Ctx& ctx, HandleStmt** ppStmt); - void sqlAllocDesc(Ctx& ctx, HandleDesc** ppDesc); - void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild); - void sqlFreeStmt(Ctx& ctx, HandleStmt* pStmt, SQLUSMALLINT iOption); - void sqlFreeDesc(Ctx& ctx, HandleDesc* pDesc); - void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild); - // attributes and info functions - void sqlSetConnectAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength); - void sqlGetConnectAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength); - void sqlSetConnectOption(Ctx& ctx, SQLUSMALLINT option, SQLUINTEGER value); // odbc2.0 - void sqlGetConnectOption(Ctx& ctx, SQLUSMALLINT option, SQLPOINTER value); // odbc2.0 - void sqlGetFunctions(Ctx& ctx, SQLUSMALLINT functionId, SQLUSMALLINT* supported); - void sqlGetInfo(Ctx& ctx, SQLUSMALLINT infoType, SQLPOINTER infoValue, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength); - int getOdbcVersion(Ctx& ctx); - // connect and transactions - void sqlConnect(Ctx& ctx, SQLCHAR* serverName, SQLSMALLINT nameLength1, SQLCHAR* userName, SQLSMALLINT nameLength2, SQLCHAR* authentication, SQLSMALLINT nameLength3); - void sqlDriverConnect(Ctx& ctx, SQLHWND hwnd, SQLCHAR* szConnStrIn, SQLSMALLINT cbConnStrIn, SQLCHAR* szConnStrOut, SQLSMALLINT cbConnStrOutMax, SQLSMALLINT* pcbConnStrOut, SQLUSMALLINT fDriverCompletion); - void sqlDisconnect(Ctx& ctx); - void sqlEndTran(Ctx& ctx, SQLSMALLINT completionType); - void sqlTransact(Ctx& ctx, SQLUSMALLINT completionType); // odbc2.0 -private: - HandleEnv* const m_env; - typedef std::list<HandleStmt*> ListStmt; - ListStmt m_listStmt; - typedef std::list<HandleDesc*> ListDesc; - ListDesc m_listDesc; - static AttrSpec m_attrSpec[]; - AttrArea m_attrArea; - struct FuncTab { - SQLUSMALLINT m_functionId; - int m_supported; - }; - static FuncTab m_funcTab[]; - struct InfoTab { - SQLUSMALLINT m_id; - enum { Char, YesNo, Short, Long, Bitmask, End } m_format; - SQLUINTEGER m_int; - const char* m_str; - }; - static InfoTab m_infoTab[]; -}; - -inline HandleEnv* -HandleDbc::getEnv() -{ - return m_env; -} - -inline HandleBase* -HandleDbc::getParent() -{ - return (HandleBase*)getEnv(); -} - -inline HandleRoot* -HandleDbc::getRoot() -{ - return getParent()->getRoot(); -} - -inline OdbcHandle -HandleDbc::odbcHandle() -{ - return Odbc_handle_dbc; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.cpp deleted file mode 100644 index 4cff1bb88927b125aa5c8400ff535d5be3965cd1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.cpp +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/OdbcData.hpp> -#include <common/DiagArea.hpp> -#include <common/DataType.hpp> -#include "HandleRoot.hpp" -#include "HandleDbc.hpp" -#include "HandleDesc.hpp" - -HandleDesc::HandleDesc(HandleDbc* pDbc) : - m_dbc(pDbc), - m_descArea(this, m_descSpec) -{ -} - -HandleDesc::~HandleDesc() -{ -} - -void -HandleDesc::ctor(Ctx& ctx) -{ -} - -void -HandleDesc::dtor(Ctx& ctx) -{ -} - -// allocate and free handles (no valid case) - -void -HandleDesc::sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) -{ - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "inappropriate handle type"); -} - -void -HandleDesc::sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* ppChild) -{ - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "inappropriate handle type"); -} - -// set and get descriptor values - -void -HandleDesc::sqlSetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength) -{ - const DescSpec& spec = m_descArea.findSpec(fieldIdentifier); - if (spec.m_pos == Desc_pos_end) { - ctx.pushStatus(Sqlstate::_HY091, Error::Gen, "invalid descriptor id %d", (int)fieldIdentifier); - return; - } - OdbcData data; - data.copyin(ctx, spec.m_type, value, bufferLength); - if (! ctx.ok()) - return; - const bool header = (spec.m_pos == Desc_pos_header); - const bool record = (spec.m_pos == Desc_pos_record); - ctx_assert(header || record); - DescArea& area = m_descArea; - if (header) { - area.getHeader().setField(ctx, fieldIdentifier, data); - } - if (record) { - if (recNumber < 0) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "invalid record number %d", (int)recNumber); - return; - } - if (recNumber == 0) { // bookmark record - if (area.getUsage() == Desc_usage_IPD) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "cannot set bookmark IPD"); - return; - } - if (area.getUsage() == Desc_usage_APD) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "cannot set bookmark APD"); - return; - } - } - area.getRecord(recNumber).setField(ctx, fieldIdentifier, data); - } -} - -void -HandleDesc::sqlGetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength, SQLSMALLINT* stringLength2) -{ - const DescSpec& spec = m_descArea.findSpec(fieldIdentifier); - if (spec.m_pos == Desc_pos_end) { - ctx.pushStatus(Sqlstate::_HY091, Error::Gen, "invalid descriptor id %d", (int)fieldIdentifier); - return; - } - const bool header = (spec.m_pos == Desc_pos_header); - const bool record = (spec.m_pos == Desc_pos_record); - ctx_assert(header || record); - DescArea& area = m_descArea; - OdbcData data; - if (header) { - area.getHeader().getField(ctx, fieldIdentifier, data); - if (! ctx.ok()) - return; - } - if (record) { - if (recNumber < 0) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "invalid record number %d", (int)recNumber); - return; - } - if (recNumber == 0) { // bookmark record - if (area.getUsage() == Desc_usage_IPD) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "cannot get bookmark IPD"); - return; - } - if (area.getUsage() == Desc_usage_IRD) { - // XXX check SQL_ATTR_USE_BOOKMARK != SQL_UB_OFF - } - } - if ((unsigned)recNumber > area.getCount()) { - ctx.setCode(SQL_NO_DATA); - return; - } - area.getRecord(recNumber).getField(ctx, fieldIdentifier, data); - if (! ctx.ok()) - return; - } - // if no data, return success and undefined value - if (data.type() == OdbcData::Undef) - return; - data.copyout(ctx, value, bufferLength, stringLength, stringLength2); -} - -void -HandleDesc::sqlColAttribute(Ctx& ctx, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttribute, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLPOINTER numericAttribute) -{ - ctx_log3(("sqlColAttribute col=%d id=%d", columnNumber, fieldIdentifier)); - if (fieldIdentifier == SQL_COLUMN_LENGTH) { // XXX iODBC workaround - fieldIdentifier = SQL_DESC_LENGTH; - } - if (fieldIdentifier == 1205 || fieldIdentifier == 1206) { - ctx_log2(("ignore unknown OSQL fieldIdentifier %d", (int)fieldIdentifier)); - if (characterAttribute != 0) - *(char*)characterAttribute = 0; - if (stringLength != 0) - *stringLength = 0; - return; - } - const DescSpec& spec = m_descArea.findSpec(fieldIdentifier); - if (spec.m_pos == Desc_pos_end) { - ctx.pushStatus(Sqlstate::_HY091, Error::Gen, "invalid descriptor id %d", (int)fieldIdentifier); - return; - } - if (spec.m_type == OdbcData::Sqlchar || spec.m_type == OdbcData::Sqlstate) - sqlGetDescField(ctx, columnNumber, fieldIdentifier, characterAttribute, bufferLength, 0, stringLength); - else { - sqlGetDescField(ctx, columnNumber, fieldIdentifier, numericAttribute, -1, 0); - } - if (ctx.getCode() == SQL_NO_DATA) { - ctx.setCode(SQL_SUCCESS); - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "invalid column number %d", (int)columnNumber); - } -} - -void -HandleDesc::sqlColAttributes(Ctx& ctx, SQLUSMALLINT icol, SQLUSMALLINT fdescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT* pcbDesc, SQLINTEGER* pfDesc) -{ - ctx_log3(("sqlColAttributes col=%hu id=%hu", icol, fdescType)); - SQLUSMALLINT columnNumber = icol; - SQLUSMALLINT fieldIdentifier; - // XXX incomplete - if (fdescType == SQL_COLUMN_TYPE) { - fieldIdentifier = SQL_DESC_TYPE; - } else if (fdescType == SQL_COLUMN_PRECISION) { - SQLSMALLINT type; - sqlGetDescField(ctx, columnNumber, SQL_DESC_TYPE, static_cast<SQLPOINTER>(&type), -1, 0); - if (! ctx.ok()) - return; - switch (type) { - case SQL_CHAR: - case SQL_VARCHAR: - case SQL_BINARY: - case SQL_VARBINARY: - case SQL_LONGVARCHAR: - case SQL_LONGVARBINARY: - case SQL_DATE: - fieldIdentifier = SQL_DESC_LENGTH; - break; - default: - fieldIdentifier = SQL_DESC_PRECISION; - break; - } - } else if (fdescType == SQL_COLUMN_SCALE) { - SQLSMALLINT type; - sqlGetDescField(ctx, columnNumber, SQL_DESC_TYPE, static_cast<SQLPOINTER>(&type), -1, 0); - if (! ctx.ok()) - return; - switch (type) { - default: - fieldIdentifier = SQL_DESC_SCALE; - break; - } - } else if (fdescType == SQL_COLUMN_LENGTH) { - SQLSMALLINT type; - sqlGetDescField(ctx, columnNumber, SQL_DESC_TYPE, static_cast<SQLPOINTER>(&type), -1, 0); - if (! ctx.ok()) - return; - switch (type) { - default: - fieldIdentifier = SQL_DESC_LENGTH; - break; - } - } else { - fieldIdentifier = fdescType; - } - sqlColAttribute(ctx, columnNumber, fieldIdentifier, rgbDesc, cbDescMax, pcbDesc, pfDesc); -} - -// set and get several common descriptor values - -void -HandleDesc::sqlSetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT type, SQLSMALLINT subType, SQLINTEGER length, SQLSMALLINT precision, SQLSMALLINT scale, SQLPOINTER data, SQLINTEGER* stringLength, SQLINTEGER* indicator) -{ - sqlSetDescField(ctx, recNumber, SQL_DESC_TYPE, reinterpret_cast<SQLPOINTER>(type), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_DATETIME_INTERVAL_CODE, reinterpret_cast<SQLPOINTER>(subType), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_OCTET_LENGTH, reinterpret_cast<SQLPOINTER>(length), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_PRECISION, reinterpret_cast<SQLPOINTER>(precision), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_SCALE, reinterpret_cast<SQLPOINTER>(scale), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_DATA_PTR, data, -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_OCTET_LENGTH_PTR, reinterpret_cast<SQLPOINTER>(stringLength), -1); - sqlSetDescField(ctx, recNumber, SQL_DESC_INDICATOR_PTR, reinterpret_cast<SQLPOINTER>(indicator), -1); -} - -void -HandleDesc::sqlGetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLCHAR* name, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLSMALLINT* type, SQLSMALLINT* subType, SQLINTEGER* length, SQLSMALLINT* precision, SQLSMALLINT* scale, SQLSMALLINT* nullable) -{ - sqlGetDescField(ctx, recNumber, SQL_DESC_NAME, reinterpret_cast<SQLPOINTER>(name), bufferLength, 0, stringLength); - sqlGetDescField(ctx, recNumber, SQL_DESC_TYPE, reinterpret_cast<SQLPOINTER>(type), -1, 0); - sqlGetDescField(ctx, recNumber, SQL_DESC_DATETIME_INTERVAL_CODE, reinterpret_cast<SQLPOINTER>(subType), -1, 0); - sqlGetDescField(ctx, recNumber, SQL_DESC_OCTET_LENGTH, reinterpret_cast<SQLPOINTER>(length), -1, 0); - sqlGetDescField(ctx, recNumber, SQL_DESC_PRECISION, reinterpret_cast<SQLPOINTER>(precision), -1, 0); - sqlGetDescField(ctx, recNumber, SQL_DESC_SCALE, reinterpret_cast<SQLPOINTER>(scale), -1, 0); - sqlGetDescField(ctx, recNumber, SQL_DESC_NULLABLE, reinterpret_cast<SQLPOINTER>(nullable), -1, 0); -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.hpp deleted file mode 100644 index 9419697f134c4541c45eaca82ab4b5e13a6d991c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleDesc.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleDesc_hpp -#define ODBC_HANDLES_HandleDesc_hpp - -#include <common/common.hpp> -#include <common/DescArea.hpp> -#include "HandleBase.hpp" - -class HandleRoot; -class HandleDbc; - -/** - * @class HandleDesc - * @brief Descriptor handle (SQLHDESC). - */ -class HandleDesc : public HandleBase { -public: - HandleDesc(HandleDbc* pDbc); - ~HandleDesc(); - void ctor(Ctx& ctx); - void dtor(Ctx& ctx); - HandleDbc* getDbc(); - HandleBase* getParent(); - HandleRoot* getRoot(); - OdbcHandle odbcHandle(); - DescArea& descArea(); - // allocate and free handles (no valid case) - void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild); - void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild); - // set and get descriptor values (internal use) - void sqlSetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength); - void sqlGetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength, SQLSMALLINT* stringLength2 = 0); - void sqlColAttribute(Ctx& ctx, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttribute, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLPOINTER numericAttribute); - void sqlColAttributes(Ctx& ctx, SQLUSMALLINT icol, SQLUSMALLINT fdescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT* pcbDesc, SQLINTEGER* pfDesc); - // set and get several common descriptor values - void sqlSetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLINTEGER Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLINTEGER* StringLength, SQLINTEGER* Indicator); - void sqlGetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLCHAR* Name, SQLSMALLINT BufferLength, SQLSMALLINT* StringLength, SQLSMALLINT* Type, SQLSMALLINT* SubType, SQLINTEGER* Length, SQLSMALLINT* Precision, SQLSMALLINT* Scale, SQLSMALLINT* Nullable); -private: - HandleDbc* const m_dbc; - static DescSpec m_descSpec[]; - DescArea m_descArea; -}; - -inline HandleDbc* -HandleDesc::getDbc() -{ - return m_dbc; -} - -inline HandleBase* -HandleDesc::getParent() -{ - return (HandleDbc*)getDbc(); -} - -inline HandleRoot* -HandleDesc::getRoot() -{ - return getParent()->getRoot(); -} - -inline OdbcHandle -HandleDesc::odbcHandle() -{ - return Odbc_handle_desc; -} - -inline DescArea& -HandleDesc::descArea() -{ - return m_descArea; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.cpp deleted file mode 100644 index bc9d8b420a6659795d69a5f26258d9e9e3b00b03..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/DiagArea.hpp> -#include "HandleRoot.hpp" -#include "HandleEnv.hpp" -#include "HandleDbc.hpp" - -HandleEnv::HandleEnv(HandleRoot* pRoot) : - m_root(pRoot), - m_attrArea(m_attrSpec) -{ - m_attrArea.setHandle(this); -} - -HandleEnv::~HandleEnv() { -} - -void -HandleEnv::ctor(Ctx& ctx) -{ -} - -void -HandleEnv::dtor(Ctx& ctx) -{ - if (! m_listDbc.empty()) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "cannot delete environment handle - has %u associated connection handles", (unsigned)m_listDbc.size()); - return; - } -} - -// allocate and free handles - -void -HandleEnv::sqlAllocConnect(Ctx& ctx, HandleDbc** ppDbc) -{ - if (getOdbcVersion(ctx) == -1) - return; - if (ppDbc == 0) { - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "cannot allocate connection handle - null return address"); - return; - } - HandleDbc* pDbc = new HandleDbc(this); - pDbc->ctor(ctx); - if (! ctx.ok()) { - pDbc->dtor(ctx); - delete pDbc; - return; - } - m_listDbc.push_back(pDbc); - getRoot()->record(SQL_HANDLE_DBC, pDbc, true); - *ppDbc = pDbc; -} - -void -HandleEnv::sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) -{ - if (getOdbcVersion(ctx) == -1) - return; - switch (childType) { - case SQL_HANDLE_DBC: - sqlAllocConnect(ctx, (HandleDbc**)ppChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -void -HandleEnv::sqlFreeConnect(Ctx& ctx, HandleDbc* pDbc) -{ - if (getOdbcVersion(ctx) == -1) - return; - pDbc->dtor(ctx); - if (! ctx.ok()) - return; - m_listDbc.remove(pDbc); - getRoot()->record(SQL_HANDLE_DBC, pDbc, false); - delete pDbc; -} - -void -HandleEnv::sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild) -{ - if (getOdbcVersion(ctx) == -1) - return; - switch (childType) { - case SQL_HANDLE_DBC: - sqlFreeConnect(ctx, (HandleDbc*)pChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -// attributes - -void -HandleEnv::sqlSetEnvAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength) -{ - baseSetHandleAttr(ctx, m_attrArea, attribute, value, stringLength); -} - -void -HandleEnv::sqlGetEnvAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength) -{ - baseGetHandleAttr(ctx, m_attrArea, attribute, value, bufferLength, stringLength); -} - -int -HandleEnv::getOdbcVersion(Ctx& ctx) -{ - OdbcData data; - m_attrArea.getAttr(ctx, SQL_ATTR_ODBC_VERSION, data); - if (! ctx.ok()) - return -1; - return data.integer(); -} - -// transactions - -void -HandleEnv::sqlEndTran(Ctx& ctx, SQLSMALLINT completionType) -{ - ctx_assert(false); // XXX -} - -void -HandleEnv::sqlTransact(Ctx& ctx, SQLUSMALLINT completionType) -{ - ctx_assert(false); // XXX -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.hpp deleted file mode 100644 index 2b13b0256bcd7db3709d1a701b7f7d7a22fddad2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleEnv.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleEnv_hpp -#define ODBC_HANDLES_HandleEnv_hpp - -#include <list> -#include <common/common.hpp> -#include "HandleBase.hpp" - -class HandleRoot; -class HandleDbc; - -/** - * @class HandleEnv - * @brief Environment handle (SQLHENV). - */ -class HandleEnv : public HandleBase { -public: - HandleEnv(HandleRoot* pRoot); - ~HandleEnv(); - void ctor(Ctx& ctx); - void dtor(Ctx& ctx); - HandleRoot* getRoot(); - HandleBase* getParent(); - OdbcHandle odbcHandle(); - // allocate and free handles - void sqlAllocConnect(Ctx& ctx, HandleDbc** ppDbc); - void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild); - void sqlFreeConnect(Ctx& ctx, HandleDbc* pDbc); - void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild); - // attributes - void sqlSetEnvAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength); - void sqlGetEnvAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength); - int getOdbcVersion(Ctx& ctx); // returns -1 if not set - // transactions - void sqlEndTran(Ctx& ctx, SQLSMALLINT completionType); - void sqlTransact(Ctx& ctx, SQLUSMALLINT completionType); // odbc2.0 -private: - HandleRoot* const m_root; - std::list<HandleDbc*> m_listDbc; - static AttrSpec m_attrSpec[]; - AttrArea m_attrArea; -}; - -inline HandleRoot* -HandleEnv::getRoot() -{ - return m_root; -} - -inline HandleBase* -HandleEnv::getParent() -{ - return (HandleBase*)getRoot(); -} - -inline OdbcHandle -HandleEnv::odbcHandle() -{ - return Odbc_handle_env; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.cpp deleted file mode 100644 index 13560d550289d91e49f137b5debda5060e9ec968..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.cpp +++ /dev/null @@ -1,271 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/common.hpp> -#include <NdbMutex.h> -#include <common/DiagArea.hpp> -#include "HandleRoot.hpp" -#include "HandleEnv.hpp" -#include "HandleDbc.hpp" -#include "HandleStmt.hpp" -#include "HandleDesc.hpp" -#include "PoolNdb.hpp" - -HandleRoot::HandleRoot() : - m_attrArea(m_attrSpec) -{ - m_attrArea.setHandle(this); - m_poolNdb = new PoolNdb(); -} - -HandleRoot::~HandleRoot() -{ -} - -#ifdef NDB_WIN32 -static NdbMutex & root_mutex = * NdbMutex_Create(); -#else -static NdbMutex root_mutex = NDB_MUTEX_INITIALIZER; -#endif - -HandleRoot* -HandleRoot::instance() -{ - NdbMutex_Lock(&root_mutex); - if (m_instance == 0) - m_instance = new HandleRoot(); - NdbMutex_Unlock(&root_mutex); - return m_instance; -} - -void -HandleRoot::lockHandle() -{ - NdbMutex_Lock(&root_mutex); -} - -void -HandleRoot::unlockHandle() -{ - NdbMutex_Unlock(&root_mutex); -} - -// check and find handle types and handles - -SQLSMALLINT -HandleRoot::findParentType(SQLSMALLINT childType) -{ - switch (childType) { - case SQL_HANDLE_ENV: - return SQL_HANDLE_ROOT; - case SQL_HANDLE_DBC: - return SQL_HANDLE_ENV; - case SQL_HANDLE_STMT: - return SQL_HANDLE_DBC; - case SQL_HANDLE_DESC: - return SQL_HANDLE_DBC; - } - return -1; -} - -HandleBase* -HandleRoot::findBase(SQLSMALLINT handleType, void* pHandle) -{ - switch (handleType) { - case SQL_HANDLE_ROOT: - return getRoot(); - case SQL_HANDLE_ENV: - return findEnv(pHandle); - case SQL_HANDLE_DBC: - return findDbc(pHandle); - case SQL_HANDLE_STMT: - return findStmt(pHandle); - case SQL_HANDLE_DESC: - return findDesc(pHandle); - } - return 0; -} - -HandleEnv* -HandleRoot::findEnv(void* pHandle) -{ - lockHandle(); - ValidList::iterator i = m_validList.find(pHandle); - if (i == m_validList.end() || (*i).second != SQL_HANDLE_ENV) { - unlockHandle(); - return 0; - } - unlockHandle(); - ctx_assert(pHandle != 0); - return static_cast<HandleEnv*>(pHandle); -} - -HandleDbc* -HandleRoot::findDbc(void* pHandle) -{ - lockHandle(); - ValidList::iterator i = m_validList.find(pHandle); - if (i == m_validList.end() || (*i).second != SQL_HANDLE_DBC) { - unlockHandle(); - return 0; - } - unlockHandle(); - ctx_assert(pHandle != 0); - return static_cast<HandleDbc*>(pHandle); -} - -HandleStmt* -HandleRoot::findStmt(void* pHandle) -{ - lockHandle(); - ValidList::iterator i = m_validList.find(pHandle); - if (i == m_validList.end() || (*i).second != SQL_HANDLE_STMT) { - unlockHandle(); - return 0; - } - unlockHandle(); - ctx_assert(pHandle != 0); - return static_cast<HandleStmt*>(pHandle); -} - -HandleDesc* -HandleRoot::findDesc(void* pHandle) -{ - lockHandle(); - ValidList::iterator i = m_validList.find(pHandle); - if (i == m_validList.end() || (*i).second != SQL_HANDLE_DESC) { - unlockHandle(); - return 0; - } - unlockHandle(); - ctx_assert(pHandle != 0); - return static_cast<HandleDesc*>(pHandle); -} - -// add or remove handle from validation list - -void -HandleRoot::record(SQLSMALLINT handleType, HandleBase* pHandle, bool add) -{ - switch (handleType) { - case SQL_HANDLE_ENV: - case SQL_HANDLE_DBC: - case SQL_HANDLE_STMT: - case SQL_HANDLE_DESC: - break; - default: - ctx_assert(false); - break; - } - ctx_assert(pHandle != 0); - lockHandle(); - ValidList::iterator i = m_validList.find(pHandle); - if (add) { - if (i != m_validList.end()) { - unlockHandle(); - ctx_assert(false); - } - m_validList.insert(ValidList::value_type(pHandle, handleType)); - } else { - if (i == m_validList.end() || (*i).second != handleType) { - unlockHandle(); - ctx_assert(false); - } - m_validList.erase(i); - } - unlockHandle(); -} - -// allocate and free handles - -void -HandleRoot::sqlAllocEnv(Ctx& ctx, HandleEnv** ppEnv) -{ - if (ppEnv == 0) { - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "cannot allocate environment handle - null return address"); - return; - } - HandleEnv* pEnv = new HandleEnv(this); - pEnv->ctor(ctx); - if (! ctx.ok()) { - pEnv->dtor(ctx); - delete pEnv; - return; - } - lockHandle(); - m_listEnv.push_back(pEnv); - unlockHandle(); - getRoot()->record(SQL_HANDLE_ENV, pEnv, true); - *ppEnv = pEnv; -} - -void -HandleRoot::sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) -{ - switch (childType) { - case SQL_HANDLE_ENV: - sqlAllocEnv(ctx, (HandleEnv**)ppChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -void -HandleRoot::sqlFreeEnv(Ctx& ctx, HandleEnv* pEnv) -{ - pEnv->dtor(ctx); - if (! ctx.ok()) { - return; - } - lockHandle(); - m_listEnv.remove(pEnv); - unlockHandle(); - getRoot()->record(SQL_HANDLE_ENV, pEnv, false); - delete pEnv; -} - -void -HandleRoot::sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild) -{ - switch (childType) { - case SQL_HANDLE_ENV: - sqlFreeEnv(ctx, (HandleEnv*)pChild); - return; - } - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "invalid child handle type %d", (int)childType); -} - -// process-level attributes - -void -HandleRoot::sqlSetRootAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength) -{ - lockHandle(); - baseSetHandleAttr(ctx, m_attrArea, attribute, value, stringLength); - unlockHandle(); -} - -void -HandleRoot::sqlGetRootAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength) -{ - lockHandle(); - baseGetHandleAttr(ctx, m_attrArea, attribute, value, bufferLength, stringLength); - unlockHandle(); -} - -// the instance - -HandleRoot* HandleRoot::m_instance = 0; diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.hpp deleted file mode 100644 index 08a22b3e400202fdda0c50d1efdda3ce74fc0e66..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleRoot.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleRoot_hpp -#define ODBC_HANDLES_HandleRoot_hpp - -#include <list> -#include <map> -#include <common/common.hpp> -#include "HandleBase.hpp" - -class HandleEnv; -class HandleDbc; -class HandleStmt; -class HandleDesc; -class PoolNdb; - -/** - * @class HandleRoot - * @brief The singleton root handle. - * - * This class is the level above HandleEnv. It has a single - * instance. The instance is the root node of dynamically - * allocated handles. The instance is also used to call methods - * not tied to any handle. - */ -class HandleRoot : public HandleBase { -protected: - HandleRoot(); - ~HandleRoot(); -public: - static HandleRoot* instance(); - HandleRoot* getRoot(); - HandleBase* getParent(); - PoolNdb* getPoolNdb(); - OdbcHandle odbcHandle(); - void lockHandle(); - void unlockHandle(); - // check and find handle types and handles - SQLSMALLINT findParentType(SQLSMALLINT childType); - HandleBase* findBase(SQLSMALLINT handleType, void* pHandle); - HandleEnv* findEnv(void* pHandle); - HandleDbc* findDbc(void* pHandle); - HandleStmt* findStmt(void* pHandle); - HandleDesc* findDesc(void* pHandle); - // add or remove handle from validation list - void record(SQLSMALLINT handleType, HandleBase* pHandle, bool add); - // allocate and free handles - void sqlAllocEnv(Ctx& ctx, HandleEnv** ppEnv); - void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild); - void sqlFreeEnv(Ctx& ctx, HandleEnv* pEnv); - void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild); - // process-level attributes - void sqlSetRootAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength); - void sqlGetRootAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength); -private: - static HandleRoot* m_instance; // the instance - std::list<HandleEnv*> m_listEnv; - PoolNdb* m_poolNdb; - typedef std::map<void*, SQLSMALLINT> ValidList; - ValidList m_validList; - static AttrSpec m_attrSpec[]; - AttrArea m_attrArea; -}; - -inline HandleRoot* -HandleRoot::getRoot() -{ - return this; -} - -inline HandleBase* -HandleRoot::getParent() -{ - return 0; -} - -inline PoolNdb* -HandleRoot::getPoolNdb() -{ - return m_poolNdb; -} - -inline OdbcHandle -HandleRoot::odbcHandle() -{ - return Odbc_handle_root; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.cpp b/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.cpp deleted file mode 100644 index d33d33dbd5b2735b48603ca2282a13acb18c254d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.cpp +++ /dev/null @@ -1,823 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/OdbcData.hpp> -#include <codegen/CodeGen.hpp> -#include "HandleRoot.hpp" -#include "HandleDbc.hpp" -#include "HandleStmt.hpp" -#include "HandleDesc.hpp" - -HandleStmt::HandleStmt(HandleDbc* pDbc) : - StmtArea(*pDbc), - m_dbc(pDbc), - m_attrArea(m_attrSpec) -{ - m_attrArea.setHandle(this); - for (unsigned i = 0; i <= 1; i++) { - for (unsigned u = 0; u <= 4; u++) { - m_handleDesc[i][u] = 0; - } - } -} - -HandleStmt::~HandleStmt() -{ -} - -void -HandleStmt::ctor(Ctx& ctx) -{ - for (unsigned u = 1; u <= 4; u++) { - HandleDesc** ppDesc = &m_handleDesc[0][u]; - m_dbc->sqlAllocDesc(ctx, ppDesc); - if (! ctx.ok()) - return; - m_descArea[u] = &(*ppDesc)->descArea(); - m_descArea[u]->setAlloc(Desc_alloc_auto); - m_descArea[u]->setUsage((DescUsage)u); - } -} - -void -HandleStmt::dtor(Ctx& ctx) -{ - free(ctx); - for (unsigned u = 1; u <= 4; u++) { - HandleDesc** ppDesc = &m_handleDesc[0][u]; - if (*ppDesc != 0) - m_dbc->sqlFreeDesc(ctx, *ppDesc); - *ppDesc = 0; - } -} - -// descriptor handles - -HandleDesc* -HandleStmt::getHandleDesc(Ctx& ctx, DescUsage u) const -{ - ctx_assert(1 <= u && u <= 4); - if (m_handleDesc[1][u] != 0) - return m_handleDesc[1][u]; - return m_handleDesc[0][u]; -} - -void -HandleStmt::setHandleDesc(Ctx& ctx, DescUsage u, SQLPOINTER handle) -{ - ctx_assert(1 <= u && u <= 4); - if (handle == SQL_NULL_HDESC) { - m_handleDesc[1][u] = 0; // revert to implicit - m_descArea[u] = &m_handleDesc[0][u]->descArea(); - return; - } - HandleDesc* pDesc = getRoot()->findDesc(handle); - if (pDesc == 0) { - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "cannot set %s handle to invalid descriptor handle %x", DescArea::nameUsage(u), (unsigned)handle); - return; - } - if (pDesc == m_handleDesc[0][u]) { - m_handleDesc[1][u] = 0; // revert to implicit - m_descArea[u] = &m_handleDesc[0][u]->descArea(); - return; - } - // XXX should check implicit handles on all statements - for (unsigned v = 1; v <= 4; v++) { - if (pDesc == m_handleDesc[0][v]) { - ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "cannot set %s handle to implicitly allocated %s handle", DescArea::nameUsage(u), DescArea::nameUsage((DescUsage)v)); - return; - } - } - m_handleDesc[1][u] = pDesc; - m_descArea[u] = &m_handleDesc[1][u]->descArea(); -} - -// allocate and free handles (no valid case) - -void -HandleStmt::sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild) -{ - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "inappropriate handle type"); -} - -void -HandleStmt::sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* ppChild) -{ - ctx.pushStatus(Sqlstate::_HY092, Error::Gen, "inappropriate handle type"); -} - -// attributes and info - -static bool -ignore_attr(Ctx& ctx, SQLINTEGER attribute) -{ - switch (attribute) { - case 1211: - case 1227: - case 1228: - ctx_log2(("ignore unknown ADO.NET stmt attribute %d", (int)attribute)); - return true; - } - return false; -} - -void -HandleStmt::sqlSetStmtAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength) -{ - if (ignore_attr(ctx, attribute)) - return; - baseSetHandleAttr(ctx, m_attrArea, attribute, value, stringLength); -} - -void -HandleStmt::sqlGetStmtAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength) -{ - if (ignore_attr(ctx, attribute)) - return; - baseGetHandleAttr(ctx, m_attrArea, attribute, value, bufferLength, stringLength); -} - -void -HandleStmt::sqlSetStmtOption(Ctx& ctx, SQLUSMALLINT option, SQLUINTEGER value) -{ - if (ignore_attr(ctx, option)) - return; - baseSetHandleOption(ctx, m_attrArea, option, value); -} - -void -HandleStmt::sqlGetStmtOption(Ctx& ctx, SQLUSMALLINT option, SQLPOINTER value) -{ - if (ignore_attr(ctx, option)) - return; - baseGetHandleOption(ctx, m_attrArea, option, value); -} - -void -HandleStmt::sqlGetTypeInfo(Ctx& ctx, SQLSMALLINT dataType) -{ - BaseString text; - // odbc$typeinfo is a (possible unordered) view matching SQLGetTypeInfo result set - text.append("SELECT * FROM odbc$typeinfo"); - if (dataType != SQL_ALL_TYPES) { - switch (dataType) { - case SQL_CHAR: - case SQL_VARCHAR: - case SQL_BINARY: - case SQL_VARBINARY: - case SQL_SMALLINT: - case SQL_INTEGER: - case SQL_BIGINT: - case SQL_REAL: - case SQL_DOUBLE: - break; - default: - // XXX unsupported vs illegal - ctx_log1(("sqlGetTypeInfo: unknown data type %d", (int)dataType)); - break; - } - text.appfmt(" WHERE data_type = %d", (int)dataType); - } - // sort signed before unsigned - text.append(" ORDER BY data_type, unsigned_attribute, type_name"); - sqlExecDirect(ctx, (SQLCHAR*)text.c_str(), text.length()); -} - -void -HandleStmt::sqlTables(Ctx& ctx, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* tableType, SQLSMALLINT nameLength4) -{ - BaseString text; - // odbc$tables is a (possibly unordered) view matching SQLTables result set - text.append("SELECT * FROM odbc$tables"); - SQLUINTEGER metadata_id = SQL_FALSE; - sqlGetStmtAttr(ctx, SQL_ATTR_METADATA_ID, (SQLPOINTER)&metadata_id, SQL_IS_POINTER, 0); - if (! ctx.ok()) - return; - unsigned count = 0; - if (catalogName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)catalogName, nameLength1); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (getOdbcVersion(ctx) == 2) - text.appfmt(" table_cat = '%s'", data.sqlchar()); - else if (metadata_id == SQL_TRUE) - text.appfmt(" table_cat = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_cat LIKE '%s'", data.sqlchar()); - } - if (schemaName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)schemaName, nameLength2); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_schem = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_schem LIKE '%s'", data.sqlchar()); - } - if (tableName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)tableName, nameLength3); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_name = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_name LIKE '%s'", data.sqlchar()); - } - if (tableType != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)tableType, nameLength4); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - text.appfmt(" table_type IN (%s)", data.sqlchar()); // XXX UPPER, quotes - } - text.append(" ORDER BY table_type, table_cat, table_schem, table_name"); - sqlExecDirect(ctx, (SQLCHAR*)text.c_str(), text.length()); -} - -void -HandleStmt::sqlColumns(Ctx& ctx, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* columnName, SQLSMALLINT nameLength4) -{ - BaseString text; - // odbc$columns is a (possibly unordered) view matching SQLColumns result set - text.append("SELECT * FROM odbc$columns"); - SQLUINTEGER metadata_id = SQL_FALSE; - sqlGetStmtAttr(ctx, SQL_ATTR_METADATA_ID, (SQLPOINTER)&metadata_id, SQL_IS_POINTER, 0); - if (! ctx.ok()) - return; - unsigned count = 0; - if (catalogName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)catalogName, nameLength1); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (getOdbcVersion(ctx) == 2) - text.appfmt(" table_cat = '%s'", data.sqlchar()); - else if (metadata_id == SQL_TRUE) - text.appfmt(" table_cat = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_cat LIKE '%s'", data.sqlchar()); - } - if (schemaName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)schemaName, nameLength2); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_schem = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_schem LIKE '%s'", data.sqlchar()); - } - if (tableName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)tableName, nameLength3); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_name = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_name LIKE '%s'", data.sqlchar()); - } - if (columnName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)columnName, nameLength4); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" column_name = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" column_name LIKE '%s'", data.sqlchar()); - } - text.append(" ORDER BY table_cat, table_schem, table_name, ordinal_position"); - sqlExecDirect(ctx, (SQLCHAR*)text.c_str(), text.length()); -} - -void -HandleStmt::sqlPrimaryKeys(Ctx& ctx, SQLCHAR* szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR* szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR* szTableName, SQLSMALLINT cbTableName) -{ - BaseString text; - // odbc$primarykeys is a (possible unordered) view matching SQLPrimaryKeys result set - text.append("SELECT * FROM odbc$primarykeys"); - SQLUINTEGER metadata_id = SQL_FALSE; - sqlGetStmtAttr(ctx, SQL_ATTR_METADATA_ID, (SQLPOINTER)&metadata_id, SQL_IS_POINTER, 0); - if (! ctx.ok()) - return; - unsigned count = 0; - if (szCatalogName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)szCatalogName, cbCatalogName); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (getOdbcVersion(ctx) == 2) - text.appfmt(" table_cat = '%s'", data.sqlchar()); - else if (metadata_id == SQL_TRUE) - text.appfmt(" table_cat = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_cat = '%s'", data.sqlchar()); // no pattern - } - if (szSchemaName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)szSchemaName, cbSchemaName); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_schem = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_schem = '%s'", data.sqlchar()); // no pattern - } - if (szTableName != 0) { - OdbcData data; - data.copyin(ctx, OdbcData::Sqlchar, (SQLPOINTER)szTableName, cbTableName); - if (! ctx.ok()) - return; - text.append(++count == 1 ? " WHERE" : " AND"); - if (metadata_id == SQL_TRUE) - text.appfmt(" table_name = '%s'", data.sqlchar()); // XXX UPPER - else - text.appfmt(" table_name = '%s'", data.sqlchar()); // no pattern - } else { // no null - ctx.pushStatus(Sqlstate::_HY009, Error::Gen, "null table name"); - return; - } - text.append(" ORDER BY table_cat, table_schem, table_name, key_seq"); - sqlExecDirect(ctx, (SQLCHAR*)text.c_str(), text.length()); -} - -int -HandleStmt::getOdbcVersion(Ctx& ctx) -{ - return m_dbc->getOdbcVersion(ctx); -} - -// prepare and execute - -void -HandleStmt::sqlPrepare(Ctx& ctx, SQLCHAR* statementText, SQLINTEGER textLength) -{ - if (m_state == Open) { - ctx.pushStatus(Sqlstate::_24000, Error::Gen, "cursor is open"); - return; - } - free(ctx); - const char* text = reinterpret_cast<char*>(statementText); - if (textLength == SQL_NTS) { - m_sqlText.assign(text); - } else if (textLength >= 0) { - m_sqlText.assign(text, textLength); - } else { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "missing SQL text"); - return; - } - if (! useSchemaCon(ctx, true)) - return; - CodeGen codegen(*this); - codegen.prepare(ctx); - useSchemaCon(ctx, false); - if (! ctx.ok()) { - free(ctx); - return; - } - ctx_log2(("prepared %s statement", m_stmtInfo.getDesc())); - m_state = Prepared; -} - -void -HandleStmt::sqlExecute(Ctx& ctx) -{ - if (m_state == Open) { - ctx.pushStatus(Sqlstate::_24000, Error::Gen, "cursor is open"); - return; - } - StmtType stmtType = m_stmtInfo.getType(); - switch (stmtType) { - case Stmt_type_DDL: - if (! useSchemaCon(ctx, true)) - return; - break; - case Stmt_type_query: - case Stmt_type_DML: - if (! useConnection(ctx, true)) - return; - break; - default: - ctx_assert(false); - break; - } - CodeGen codegen(*this); - codegen.execute(ctx); - // valid only after execute says M$ XXX create this diag only on demand - setFunction(ctx); - if (ctx.getCode() == SQL_NEED_DATA) { - m_state = NeedData; - return; - } - ctx_log2(("execute: fetched %u tuples from NDB", (unsigned)m_tuplesFetched)); - switch (stmtType) { - case Stmt_type_DDL: - codegen.close(ctx); - useSchemaCon(ctx, false); - m_state = Prepared; - break; - case Stmt_type_query: - if (! ctx.ok()) { - codegen.close(ctx); - useConnection(ctx, false); - m_state = Prepared; - } else { - m_state = Open; - } - break; - case Stmt_type_DML: - codegen.close(ctx); - if (m_dbc->autocommit()) { - // even if error - m_dbc->sqlEndTran(ctx, SQL_COMMIT); - } else { - m_dbc->uncommitted(true); // uncommitted changes possible - } - useConnection(ctx, false); - m_state = Prepared; - break; - default: - ctx_assert(false); - break; - } -} - -void -HandleStmt::sqlExecDirect(Ctx& ctx, SQLCHAR* statementText, SQLINTEGER textLength) -{ - sqlPrepare(ctx, statementText, textLength); - if (! ctx.ok()) - return; - sqlExecute(ctx); -} - -void -HandleStmt::sqlFetch(Ctx& ctx) -{ - if (m_state != Open) { - ctx.pushStatus(Sqlstate::_24000, Error::Gen, "cursor is not open"); - return; - } - StmtType stmtType = m_stmtInfo.getType(); - switch (stmtType) { - case Stmt_type_query: { - CodeGen codegen(*this); - codegen.fetch(ctx); - if (! ctx.ok()) { - codegen.close(ctx); - useConnection(ctx, false); - } - break; - } - default: - ctx_assert(false); - break; - } -} - -void -HandleStmt::sqlRowCount(Ctx& ctx, SQLINTEGER* rowCount) -{ - *rowCount = m_rowCount; -} - -void -HandleStmt::sqlMoreResults(Ctx& ctx) -{ - if (m_state == Open) { - sqlCloseCursor(ctx); - if (! ctx.ok()) - return; - } - ctx.setCode(SQL_NO_DATA); -} - -void -HandleStmt::sqlCancel(Ctx& ctx) -{ - if (m_state == NeedData) { - CodeGen codegen(*this); - codegen.close(ctx); - m_state = Prepared; - } -} - -void -HandleStmt::sqlCloseCursor(Ctx& ctx) -{ - if (m_state != Open) { - ctx.pushStatus(Sqlstate::_24000, Error::Gen, "cursor is not open"); - return; - } - ctx_log2(("execute: fetched %u tuples from NDB", (unsigned)m_tuplesFetched)); - StmtType stmtType = m_stmtInfo.getType(); - switch (stmtType) { - case Stmt_type_query: { - CodeGen codegen(*this); - codegen.close(ctx); - useConnection(ctx, false); - m_state = Prepared; - m_rowCount = 0; - m_tuplesFetched = 0; - break; - } - default: - ctx_assert(false); - break; - } -} - -void -HandleStmt::sqlGetCursorName(Ctx& ctx, SQLCHAR* cursorName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLength) -{ - OdbcData name("SQL_CUR_DUMMY"); - name.copyout(ctx, cursorName, bufferLength, 0, nameLength); -} - -void -HandleStmt::sqlSetCursorName(Ctx& ctx, SQLCHAR* cursorName, SQLSMALLINT nameLength) -{ -} - -// special data access - -void -HandleStmt::sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind) -{ - if (m_state != Open) { - ctx.pushStatus(Sqlstate::_24000, Error::Gen, "cursor is not open"); - return; - } - if (bufferLength < 0) { - ctx.pushStatus(Sqlstate::_HY090, Error::Gen, "invalid buffer length %d", (int)bufferLength); - return; - } - CodeGen codegen(*this); - codegen.sqlGetData(ctx, columnNumber, targetType, targetValue, bufferLength, strlen_or_Ind); -} - -void -HandleStmt::sqlParamData(Ctx& ctx, SQLPOINTER* value) -{ - if (m_state != NeedData) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "not expecting data-at-exec"); - return; - } - CodeGen codegen(*this); - codegen.sqlParamData(ctx, value); - if (! ctx.ok()) - return; - sqlExecute(ctx); -} - -void -HandleStmt::sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind) -{ - if (m_state != NeedData) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "not expecting data-at-exec"); - return; - } - CodeGen codegen(*this); - codegen.sqlPutData(ctx, data, strlen_or_Ind); -} - -// describe statement - -void -HandleStmt::sqlNumParams(Ctx& ctx, SQLSMALLINT* parameterCountPtr) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is not prepared"); - return; - } - HandleDesc* ipd = getHandleDesc(ctx, Desc_usage_IPD); - ipd->sqlGetDescField(ctx, 0, SQL_DESC_COUNT, static_cast<SQLPOINTER>(parameterCountPtr), -1, 0); -} - -void -HandleStmt::sqlDescribeParam(Ctx& ctx, SQLUSMALLINT ipar, SQLSMALLINT* pfSqlType, SQLUINTEGER* pcbParamDef, SQLSMALLINT* pibScale, SQLSMALLINT* pfNullable) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is not prepared"); - return; - } - HandleDesc* ipd = getHandleDesc(ctx, Desc_usage_IPD); - ipd->sqlGetDescField(ctx, ipar, SQL_DESC_CONCISE_TYPE, static_cast<SQLPOINTER>(pfSqlType), -1, 0); - { // XXX fix it - OdbcData data((SQLUINTEGER)0); - data.copyout(ctx, (SQLPOINTER)pcbParamDef, -1, 0); - } - { // XXX fix it - OdbcData data((SQLSMALLINT)0); - data.copyout(ctx, (SQLPOINTER)pibScale, -1, 0); - } - ipd->sqlGetDescField(ctx, ipar, SQL_DESC_NULLABLE, static_cast<SQLPOINTER>(pfNullable), -1, 0); -} - -void -HandleStmt::sqlNumResultCols(Ctx& ctx, SQLSMALLINT* columnCount) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is not prepared"); - return; - } - HandleDesc* const ird = getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlGetDescField(ctx, 0, SQL_DESC_COUNT, static_cast<SQLPOINTER>(columnCount), -1, 0); - setFunction(ctx); // unixODBC workaround -} - -void -HandleStmt::sqlDescribeCol(Ctx& ctx, SQLUSMALLINT columnNumber, SQLCHAR* columnName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLength, SQLSMALLINT* dataType, SQLUINTEGER* columnSize, SQLSMALLINT* decimalDigits, SQLSMALLINT* nullable) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is not prepared"); - return; - } - HandleDesc* const ird = getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlGetDescField(ctx, columnNumber, SQL_DESC_NAME, static_cast<SQLPOINTER>(columnName), bufferLength, 0, nameLength); - ird->sqlGetDescField(ctx, columnNumber, SQL_DESC_CONCISE_TYPE, static_cast<SQLPOINTER>(dataType), -1, 0); - if (! ctx.ok()) - return; - if (columnSize != 0) { - switch (*dataType) { - case SQL_CHAR: - case SQL_VARCHAR: - case SQL_BINARY: - case SQL_VARBINARY: - ird->sqlGetDescField(ctx, columnNumber, SQL_DESC_LENGTH, static_cast<SQLPOINTER>(columnSize), -1, 0); - break; - case SQL_SMALLINT: - *columnSize = 5; - break; - case SQL_INTEGER: - *columnSize = 10; - break; - case SQL_BIGINT: - *columnSize = 20; // XXX 19 for signed - break; - case SQL_REAL: - *columnSize = 7; - break; - case SQL_DOUBLE: - *columnSize = 15; - break; - case SQL_TYPE_TIMESTAMP: - *columnSize = 30; - break; - default: - *columnSize = 0; - break; - } - } - if (decimalDigits != 0) { - switch (*dataType) { - case SQL_SMALLINT: - case SQL_INTEGER: - case SQL_BIGINT: - *decimalDigits = 0; - break; - case SQL_TYPE_TIMESTAMP: - *decimalDigits = 10; - break; - default: - *decimalDigits = 0; - break; - } - } - ird->sqlGetDescField(ctx, columnNumber, SQL_DESC_NULLABLE, static_cast<SQLPOINTER>(nullable), -1, 0); -} - -void -HandleStmt::sqlColAttribute(Ctx& ctx, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttribute, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLPOINTER numericAttribute) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is not prepared"); - return; - } - HandleDesc* const ird = getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlColAttribute(ctx, columnNumber, fieldIdentifier, characterAttribute, bufferLength, stringLength, numericAttribute); -} - -void -HandleStmt::sqlColAttributes(Ctx& ctx, SQLUSMALLINT icol, SQLUSMALLINT fdescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT* pcbDesc, SQLINTEGER* pfDesc) -{ - if (m_state == Free) { - ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "statement is nor prepared"); - return; - } - HandleDesc* const ird = getHandleDesc(ctx, Desc_usage_IRD); - ird->sqlColAttributes(ctx, icol, fdescType, rgbDesc, cbDescMax, pcbDesc, pfDesc); -} - -// descriptor manipulation - -void -HandleStmt::sqlBindCol(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind) -{ - HandleDesc* const ard = getHandleDesc(ctx, Desc_usage_ARD); - DescArea& desc = ard->descArea(); - if (desc.getCount() < columnNumber) { - desc.setCount(ctx, columnNumber); - } - DescRec& rec = desc.getRecord(columnNumber); - rec.setField(ctx, SQL_DESC_TYPE, targetType); - rec.setField(ctx, SQL_DESC_CONCISE_TYPE, targetType); - rec.setField(ctx, SQL_DESC_DATA_PTR, targetValue); - rec.setField(ctx, SQL_DESC_OCTET_LENGTH, bufferLength); - rec.setField(ctx, SQL_DESC_OCTET_LENGTH_PTR, strlen_or_Ind); - rec.setField(ctx, SQL_DESC_INDICATOR_PTR, strlen_or_Ind); -} - -void -HandleStmt::sqlBindParameter(Ctx& ctx, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLUINTEGER cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER* pcbValue) -{ - HandleDesc* const ipd = getHandleDesc(ctx, Desc_usage_IPD); - HandleDesc* const apd = getHandleDesc(ctx, Desc_usage_APD); - DescArea& descIPD = ipd->descArea(); - DescArea& descAPD = apd->descArea(); - if (ipar < 1) { - ctx.pushStatus(Sqlstate::_07009, Error::Gen, "invalid parameter index %u", (unsigned)ipar); - return; - } - if (descIPD.getCount() < ipar) { - descIPD.setCount(ctx, ipar); - } - if (descAPD.getCount() < ipar) { - descAPD.setCount(ctx, ipar); - } - DescRec& recIPD = descIPD.getRecord(ipar); - DescRec& recAPD = descAPD.getRecord(ipar); - recIPD.setField(ctx, SQL_DESC_PARAMETER_TYPE, fParamType); - recAPD.setField(ctx, SQL_DESC_TYPE, fCType); - recAPD.setField(ctx, SQL_DESC_CONCISE_TYPE, fCType); - recIPD.setField(ctx, SQL_DESC_TYPE, fSqlType); - recIPD.setField(ctx, SQL_DESC_CONCISE_TYPE, fSqlType); - switch (fSqlType) { - case SQL_CHAR: // XXX not complete - case SQL_VARCHAR: - case SQL_BINARY: - case SQL_VARBINARY: - recIPD.setField(ctx, SQL_DESC_LENGTH, cbColDef); - break; - case SQL_DECIMAL: - case SQL_NUMERIC: - case SQL_FLOAT: - case SQL_REAL: - case SQL_DOUBLE: - recIPD.setField(ctx, SQL_DESC_PRECISION, cbColDef); - break; - } - switch (fSqlType) { - case SQL_TYPE_TIME: // XXX not complete - case SQL_TYPE_TIMESTAMP: - recIPD.setField(ctx, SQL_DESC_PRECISION, ibScale); - break; - case SQL_NUMERIC: - case SQL_DECIMAL: - recIPD.setField(ctx, SQL_DESC_SCALE, ibScale); - break; - } - recAPD.setField(ctx, SQL_DESC_DATA_PTR, rgbValue); - recAPD.setField(ctx, SQL_DESC_OCTET_LENGTH, cbValueMax); - recAPD.setField(ctx, SQL_DESC_OCTET_LENGTH_PTR, pcbValue); - recAPD.setField(ctx, SQL_DESC_INDICATOR_PTR, pcbValue); -} - -void -HandleStmt::sqlBindParam(Ctx& ctx, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValue, SQLINTEGER* strLen_or_Ind) -{ - sqlBindParameter(ctx, parameterNumber, SQL_PARAM_INPUT_OUTPUT, valueType, parameterType, lengthPrecision, parameterScale, parameterValue, SQL_SETPARAM_VALUE_MAX, strLen_or_Ind); -} - -void -HandleStmt::sqlSetParam(Ctx& ctx, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValue, SQLINTEGER* strLen_or_Ind) -{ - sqlBindParameter(ctx, parameterNumber, SQL_PARAM_INPUT_OUTPUT, valueType, parameterType, lengthPrecision, parameterScale, parameterValue, SQL_SETPARAM_VALUE_MAX, strLen_or_Ind); -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.hpp b/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.hpp deleted file mode 100644 index 0bee138bfc6f4d86813f4b8460fde89ae848aca8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/HandleStmt.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_HandleStmt_hpp -#define ODBC_HANDLES_HandleStmt_hpp - -#include <common/common.hpp> -#include <common/DescArea.hpp> -#include <common/StmtArea.hpp> -#include "HandleBase.hpp" - -class HandleDbc; -class HandleDesc; - -/** - * @class HandleStmt - * @brief Statement handle (SQLHSTMT). - */ -class HandleStmt : public HandleBase, public StmtArea { -public: - HandleStmt(HandleDbc* pDbc); - ~HandleStmt(); - void ctor(Ctx& ctx); - void dtor(Ctx& ctx); - HandleDbc* getDbc(); - HandleBase* getParent(); - HandleRoot* getRoot(); - OdbcHandle odbcHandle(); - // descriptor handles - HandleDesc* getHandleDesc(Ctx& ctx, DescUsage u) const; - void setHandleDesc(Ctx& ctx, DescUsage u, SQLPOINTER handle); - // allocate and free handles (no valid case) - void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild); - void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild); - // attributes and info - void sqlSetStmtAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER stringLength); - void sqlGetStmtAttr(Ctx& ctx, SQLINTEGER attribute, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength); - void sqlSetStmtOption(Ctx& ctx, SQLUSMALLINT option, SQLUINTEGER value); // odbc2.0 - void sqlGetStmtOption(Ctx& ctx, SQLUSMALLINT option, SQLPOINTER value); // odbc2.0 - void sqlGetTypeInfo(Ctx& ctx, SQLSMALLINT dataType); - void sqlTables(Ctx& ctx, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* tableType, SQLSMALLINT nameLength4); - void sqlColumns(Ctx& ctx, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* columnName, SQLSMALLINT nameLength4); - void sqlPrimaryKeys(Ctx& ctx, SQLCHAR* szCatalogName, SQLSMALLINT cbCatalogName, SQLCHAR* szSchemaName, SQLSMALLINT cbSchemaName, SQLCHAR* szTableName, SQLSMALLINT cbTableName); - int getOdbcVersion(Ctx& ctx); - // prepare and execute - void sqlPrepare(Ctx& ctx, SQLCHAR* statementText, SQLINTEGER textLength); - void sqlExecute(Ctx& ctx); - void sqlExecDirect(Ctx& ctx, SQLCHAR* statementText, SQLINTEGER textLength); - void sqlFetch(Ctx& ctx); - void sqlRowCount(Ctx& ctx, SQLINTEGER* rowCount); - void sqlMoreResults(Ctx& ctx); - void sqlCancel(Ctx& ctx); - void sqlCloseCursor(Ctx& ctx); - void sqlGetCursorName(Ctx& ctx, SQLCHAR* cursorName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLength); - void sqlSetCursorName(Ctx& ctx, SQLCHAR* cursorName, SQLSMALLINT nameLength); - // special data access - void sqlGetData(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind); - void sqlParamData(Ctx& ctx, SQLPOINTER* value); - void sqlPutData(Ctx& ctx, SQLPOINTER data, SQLINTEGER strlen_or_Ind); - // describe statement - void sqlNumParams(Ctx& ctx, SQLSMALLINT* ParameterCountPtr); - void sqlDescribeParam(Ctx& ctx, SQLUSMALLINT ipar, SQLSMALLINT* pfSqlType, SQLUINTEGER* pcbParamDef, SQLSMALLINT* pibScale, SQLSMALLINT* pfNullable); - void sqlNumResultCols(Ctx& ctx, SQLSMALLINT* columnCount); - void sqlDescribeCol(Ctx& ctx, SQLUSMALLINT columnNumber, SQLCHAR* columnName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLength, SQLSMALLINT* dataType, SQLUINTEGER* columnSize, SQLSMALLINT* decimalDigits, SQLSMALLINT* nullable); - void sqlColAttribute(Ctx& ctx, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttribute, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLPOINTER numericAttribute); - void sqlColAttributes(Ctx& ctx, SQLUSMALLINT icol, SQLUSMALLINT fdescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT* pcbDesc, SQLINTEGER* pfDesc); // odbc2.0 - // descriptor manipulation - void sqlBindCol(Ctx& ctx, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValue, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_Ind); - void sqlBindParameter(Ctx& ctx, SQLUSMALLINT ipar, SQLSMALLINT fParamType, SQLSMALLINT fCType, SQLSMALLINT fSqlType, SQLUINTEGER cbColDef, SQLSMALLINT ibScale, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER* pcbValue); - void sqlBindParam(Ctx& ctx, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValue, SQLINTEGER* strLen_or_Ind); - void sqlSetParam(Ctx& ctx, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValue, SQLINTEGER* strLen_or_Ind); -private: - HandleDbc* const m_dbc; - static AttrSpec m_attrSpec[]; - AttrArea m_attrArea; - // descriptor handles (0-automatic 1-application) - HandleDesc* m_handleDesc[2][1+4]; -}; - -inline HandleDbc* -HandleStmt::getDbc() -{ - return m_dbc; -} - -inline HandleBase* -HandleStmt::getParent() -{ - return (HandleBase*)getDbc(); -} - -inline HandleRoot* -HandleStmt::getRoot() -{ - return getParent()->getRoot(); -} - -inline OdbcHandle -HandleStmt::odbcHandle() -{ - return Odbc_handle_stmt; -} - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/InfoTab.cpp b/storage/ndb/src/old_files/client/odbc/handles/InfoTab.cpp deleted file mode 100644 index 1a93c4da26453612f8545c9aa3fa725cb3529f6a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/InfoTab.cpp +++ /dev/null @@ -1,878 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "HandleDbc.hpp" - -HandleDbc::InfoTab -HandleDbc::m_infoTab[] = { - { SQL_ACCESSIBLE_PROCEDURES, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_ACCESSIBLE_TABLES, - InfoTab::YesNo, - 0L, - "Y" - }, - { SQL_ACTIVE_ENVIRONMENTS, - InfoTab::Short, - 0L, - 0 - }, - { SQL_AGGREGATE_FUNCTIONS, - InfoTab::Bitmask, - SQL_AF_AVG | SQL_AF_COUNT | SQL_AF_MAX | SQL_AF_MIN | SQL_AF_SUM, - 0 - }, - { SQL_ALTER_DOMAIN, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_ALTER_TABLE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_ASYNC_MODE, - InfoTab::Long, - SQL_AM_NONE, - 0 - }, - { SQL_BATCH_ROW_COUNT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_BATCH_SUPPORT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_BOOKMARK_PERSISTENCE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CATALOG_LOCATION, - InfoTab::Short, - 0L, - 0 - }, - { SQL_CATALOG_NAME, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_CATALOG_NAME_SEPARATOR, - InfoTab::Char, - 0L, - "" - }, - { SQL_CATALOG_TERM, - InfoTab::Char, - 0L, - "" - }, - { SQL_CATALOG_USAGE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_COLLATION_SEQ, - InfoTab::Char, - 0L, - "ISO 8859-1" - }, - { SQL_COLUMN_ALIAS, - InfoTab::YesNo, - 0L, - "Y" - }, - { SQL_CONCAT_NULL_BEHAVIOR, - InfoTab::Short, - 0L, - 0 - }, - { SQL_CONVERT_BIGINT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_BINARY, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_BIT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_CHAR, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_DATE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_DECIMAL, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_DOUBLE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_FLOAT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, -#if 0 - { SQL_CONVERT_GUID, - InfoTab::Bitmask, - 0L, - 0 - }, -#endif - { SQL_CONVERT_INTEGER, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_INTERVAL_DAY_TIME, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_INTERVAL_YEAR_MONTH, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_LONGVARBINARY, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_LONGVARCHAR, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_NUMERIC, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_REAL, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_SMALLINT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_TIME, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_TIMESTAMP, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_TINYINT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_VARBINARY, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CONVERT_VARCHAR, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CORRELATION_NAME, - InfoTab::Bitmask, - SQL_CN_ANY, - 0 - }, - { SQL_CREATE_ASSERTION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_CHARACTER_SET, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_COLLATION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_DOMAIN, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_SCHEMA, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_TABLE, - InfoTab::Bitmask, - SQL_CT_CREATE_TABLE, - 0 - }, - { SQL_CREATE_TRANSLATION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CREATE_VIEW, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_CURSOR_COMMIT_BEHAVIOR, - InfoTab::Short, - SQL_CB_CLOSE, - 0 - }, - { SQL_CURSOR_ROLLBACK_BEHAVIOR, - InfoTab::Short, - SQL_CB_CLOSE, - 0 - }, - { SQL_CURSOR_SENSITIVITY, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DATABASE_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_DATA_SOURCE_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_DATA_SOURCE_READ_ONLY, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_DATETIME_LITERALS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DBMS_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_DBMS_VER, - InfoTab::Char, - 0L, - "01.43.0000" - }, - { SQL_DDL_INDEX, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DEFAULT_TXN_ISOLATION, - InfoTab::Long, - SQL_TXN_READ_COMMITTED, - 0 - }, - { SQL_DESCRIBE_PARAMETER, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_DM_VER, - InfoTab::Char, - 0L, - "" - }, - { SQL_DRIVER_HDBC, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DRIVER_HDESC, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DRIVER_HLIB, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DRIVER_HSTMT, - InfoTab::Long, - 0L, - 0 - }, - { SQL_DRIVER_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_DRIVER_ODBC_VER, - InfoTab::Char, - 0L, - "03.00" - }, - { SQL_DRIVER_VER, - InfoTab::Char, - 0L, - "00.10.0000" - }, - { SQL_DROP_ASSERTION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_CHARACTER_SET, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_COLLATION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_DOMAIN, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_SCHEMA, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_TABLE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_TRANSLATION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DROP_VIEW, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DTC_TRANSITION_COST, // not in older MS docs - InfoTab::Bitmask, - 0L, - 0 // SQL_DTC_ENLIST_EXPENSIVE | SQL_DTC_UNENLIST_EXPENSIVE - }, - { SQL_DYNAMIC_CURSOR_ATTRIBUTES1, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_DYNAMIC_CURSOR_ATTRIBUTES2, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_EXPRESSIONS_IN_ORDERBY, - InfoTab::Char, - 0L, - "Y" - }, - { SQL_FILE_USAGE, - InfoTab::Short, - 0L, - 0 - }, - { SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_GETDATA_EXTENSIONS, - InfoTab::Bitmask, - SQL_GD_ANY_COLUMN | SQL_GD_ANY_ORDER | SQL_GD_BOUND, - 0 - }, - { SQL_GROUP_BY, - InfoTab::Short, - SQL_GB_NOT_SUPPORTED, - 0 - }, - { SQL_IDENTIFIER_CASE, - InfoTab::Short, - SQL_IC_UPPER, - 0 - }, - { SQL_IDENTIFIER_QUOTE_CHAR, - InfoTab::Char, - 0L, - "\"" - }, - { SQL_INDEX_KEYWORDS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_INFO_SCHEMA_VIEWS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_INSERT_STATEMENT, - InfoTab::Bitmask, - SQL_IS_INSERT_LITERALS | SQL_IS_SELECT_INTO, - 0 - }, - { SQL_INTEGRITY, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_KEYSET_CURSOR_ATTRIBUTES1, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_KEYSET_CURSOR_ATTRIBUTES2, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_KEYWORDS, - InfoTab::Char, - 0L, - "" - }, - { SQL_LIKE_ESCAPE_CLAUSE, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_MAX_ASYNC_CONCURRENT_STATEMENTS, - InfoTab::Long, - 0L, - 0 - }, - { SQL_MAX_BINARY_LITERAL_LEN, - InfoTab::Long, - 0L, - 0 - }, - { SQL_MAX_CATALOG_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_CHAR_LITERAL_LEN, - InfoTab::Long, - 0L, - 0 - }, - { SQL_MAX_COLUMN_NAME_LEN, - InfoTab::Short, - 16, - 0 - }, - { SQL_MAX_COLUMNS_IN_GROUP_BY, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_COLUMNS_IN_INDEX, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_COLUMNS_IN_ORDER_BY, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_COLUMNS_IN_SELECT, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_COLUMNS_IN_TABLE, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_CONCURRENT_ACTIVITIES, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_CURSOR_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_DRIVER_CONNECTIONS, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_IDENTIFIER_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_INDEX_SIZE, - InfoTab::Long, - 0L, - 0 - }, - { SQL_MAX_PROCEDURE_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_ROW_SIZE, - InfoTab::Long, - 8000, - 0 - }, - { SQL_MAX_ROW_SIZE_INCLUDES_LONG, - InfoTab::YesNo, - 0L, - "Y" - }, - { SQL_MAX_SCHEMA_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_STATEMENT_LEN, - InfoTab::Long, - 0L, - 0 - }, - { SQL_MAX_TABLE_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_TABLES_IN_SELECT, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MAX_USER_NAME_LEN, - InfoTab::Short, - 0L, - 0 - }, - { SQL_MULTIPLE_ACTIVE_TXN, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_MULT_RESULT_SETS, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_NEED_LONG_DATA_LEN, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_NON_NULLABLE_COLUMNS, - InfoTab::Short, - SQL_NNC_NON_NULL, - 0 - }, - { SQL_NULL_COLLATION, - InfoTab::Short, - SQL_NC_HIGH, - 0 - }, - { SQL_NUMERIC_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_ODBC_INTERFACE_CONFORMANCE, - InfoTab::Long, - SQL_OIC_CORE, - 0 - }, - { SQL_ODBC_VER, - InfoTab::Char, - 0L, - "" - }, - { SQL_OJ_CAPABILITIES, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_ORDER_BY_COLUMNS_IN_SELECT, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_PARAM_ARRAY_ROW_COUNTS, - InfoTab::Long, - 0L, - 0 - }, - { SQL_PARAM_ARRAY_SELECTS, - InfoTab::Long, - 0L, - 0 - }, - { SQL_POS_OPERATIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_PROCEDURES, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_PROCEDURE_TERM, - InfoTab::Char, - 0L, - "" - }, - { SQL_QUOTED_IDENTIFIER_CASE, - InfoTab::Short, - SQL_IC_SENSITIVE, - 0 - }, - { SQL_ROW_UPDATES, - InfoTab::YesNo, - 0L, - "N" - }, - { SQL_SCHEMA_TERM, - InfoTab::Char, - 0L, - "" - }, - { SQL_SCHEMA_USAGE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SCROLL_OPTIONS, - InfoTab::Bitmask, - SQL_SO_FORWARD_ONLY, - 0 - }, - { SQL_SEARCH_PATTERN_ESCAPE, - InfoTab::Char, - 0L, - "" - }, - { SQL_SERVER_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_SPECIAL_CHARACTERS, - InfoTab::Char, - 0L, - "" - }, - { SQL_SQL92_DATETIME_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_FOREIGN_KEY_DELETE_RULE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_FOREIGN_KEY_UPDATE_RULE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_GRANT, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_NUMERIC_VALUE_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_PREDICATES, - InfoTab::Bitmask, - SQL_SP_COMPARISON | SQL_SP_IN | SQL_SP_ISNOTNULL | SQL_SP_ISNULL | SQL_SP_LIKE, - 0 - }, - { SQL_SQL92_RELATIONAL_JOIN_OPERATORS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_REVOKE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_ROW_VALUE_CONSTRUCTOR, - InfoTab::Bitmask, - SQL_SRVC_VALUE_EXPRESSION, - 0 - }, - { SQL_SQL92_STRING_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL92_VALUE_EXPRESSIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SQL_CONFORMANCE, - InfoTab::Long, - 0L, - 0 - }, - { SQL_STANDARD_CLI_CONFORMANCE, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_STATIC_CURSOR_ATTRIBUTES1, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_STATIC_CURSOR_ATTRIBUTES2, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_STRING_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SUBQUERIES, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_SYSTEM_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_TABLE_TERM, - InfoTab::Char, - 0L, - "TABLE" - }, - { SQL_TIMEDATE_ADD_INTERVALS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_TIMEDATE_DIFF_INTERVALS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_TIMEDATE_FUNCTIONS, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_TXN_CAPABLE, - InfoTab::Short, - SQL_TC_DDL_COMMIT, // XXX do it - 0 - }, - { SQL_TXN_ISOLATION_OPTION, - InfoTab::Bitmask, - SQL_TXN_READ_COMMITTED, - 0 - }, - { SQL_UNION, - InfoTab::Bitmask, - 0L, - 0 - }, - { SQL_USER_NAME, - InfoTab::Char, - 0L, - "" - }, - { SQL_XOPEN_CLI_YEAR, - InfoTab::Char, - 0L, - "" - }, - { 0, - InfoTab::End, - 0L, - 0 - } -}; diff --git a/storage/ndb/src/old_files/client/odbc/handles/Makefile b/storage/ndb/src/old_files/client/odbc/handles/Makefile deleted file mode 100644 index d37e7d286ba72ab9cfad21ff28ee554f21034f62..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -include .defs.mk - -TYPE = * - -NONPIC_ARCHIVE = N - -PIC_ARCHIVE = Y - -ARCHIVE_TARGET = odbchandles - -SOURCES = \ - HandleBase.cpp \ - HandleRoot.cpp \ - HandleEnv.cpp \ - HandleDbc.cpp \ - HandleStmt.cpp \ - HandleDesc.cpp \ - AttrRoot.cpp \ - AttrEnv.cpp \ - AttrDbc.cpp \ - AttrStmt.cpp \ - PoolNdb.cpp \ - DescSpec.cpp \ - FuncTab.cpp \ - InfoTab.cpp - -include ../Extra.mk -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.cpp b/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.cpp deleted file mode 100644 index 45d3c67ec774f246aeb6757c4dab9f0ff2116017..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <common/common.hpp> -#include <NdbMutex.h> -#include <NdbApi.hpp> -#include "PoolNdb.hpp" - -#ifdef NDB_WIN32 -static NdbMutex & ndb_mutex = * NdbMutex_Create(); -#else -static NdbMutex ndb_mutex = NDB_MUTEX_INITIALIZER; -#endif - -PoolNdb::PoolNdb() : - m_cntUsed(0), - m_cntFree(0) -{ -} - -PoolNdb::~PoolNdb() -{ -} - -Ndb* -PoolNdb::allocate(Ctx& ctx, int timeout) -{ - NdbMutex_Lock(&ndb_mutex); - Ndb* pNdb; - if (m_cntFree == 0) { - pNdb = new Ndb("TEST_DB"); - pNdb->useFullyQualifiedNames(true); - if (pNdb->init(64) < 0) { - ctx.pushStatus(pNdb, "init"); - delete pNdb; - NdbMutex_Unlock(&ndb_mutex); - return 0; - } - if (pNdb->waitUntilReady(timeout) < 0) { - ctx.pushStatus(Sqlstate::_HYT00, Error::Gen, "connection timeout after %d seconds", timeout); - ctx.pushStatus(pNdb, "waitUntilReady"); - delete pNdb; - NdbMutex_Unlock(&ndb_mutex); - return 0; - } - m_listFree.push_back(pNdb); - m_cntFree++; - } - pNdb = m_listFree.front(); - m_listFree.pop_front(); - m_cntFree--; - m_cntUsed++; - ctx_log1(("alloc Ndb: used=%u free=%u", m_cntUsed, m_cntFree)); - NdbMutex_Unlock(&ndb_mutex); - return pNdb; -} - -void -PoolNdb::release(Ctx& ctx, Ndb* pNdb) -{ - NdbMutex_Lock(&ndb_mutex); - m_listUsed.remove(pNdb); - m_listFree.push_back(pNdb); - m_cntFree++; - m_cntUsed--; - ctx_log1(("free Ndb: used=%u free=%u", m_cntUsed, m_cntFree)); - NdbMutex_Unlock(&ndb_mutex); -} diff --git a/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.hpp b/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.hpp deleted file mode 100644 index 35eac055c3099eb9ee9f8f066129511846a3c168..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/PoolNdb.hpp +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef ODBC_HANDLES_PoolNdb_hpp -#define ODBC_HANDLES_PoolNdb_hpp - -#include <common/common.hpp> -#include <list> - -class Ndb; - -/** - * @class PoolNdb - * @brief Pool of Ndb objects. - * - * A class implementing pool of Ndb objects. - */ -class PoolNdb { -public: - PoolNdb(); - ~PoolNdb(); - Ndb* allocate(Ctx& ctx, int timeout); - void release(Ctx& ctx, Ndb* pNdb); -private: - std::list<Ndb*> m_listUsed; - std::list<Ndb*> m_listFree; - unsigned m_cntUsed; - unsigned m_cntFree; -}; - -#endif diff --git a/storage/ndb/src/old_files/client/odbc/handles/handles.hpp b/storage/ndb/src/old_files/client/odbc/handles/handles.hpp deleted file mode 100644 index a9f0fcae88807b178dcd0b6d19ff54f68f1a4a95..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/client/odbc/handles/handles.hpp +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef OBDC_HANDLES_handles_hpp -#define OBDC_HANDLES_handles_hpp - -#include <common/common.hpp> -#include "HandleBase.hpp" -#include "HandleRoot.hpp" -#include "HandleEnv.hpp" -#include "HandleDbc.hpp" -#include "HandleStmt.hpp" -#include "HandleDesc.hpp" - -#endif diff --git a/storage/ndb/src/old_files/ndbbaseclient/Makefile b/storage/ndb/src/old_files/ndbbaseclient/Makefile deleted file mode 100644 index f4c49a95ffa455c04bde3c2f24e074d18cce6598..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/ndbbaseclient/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -include .defs.mk - -TYPE := * - -PIC_ARCHIVE := Y -NONPIC_ARCHIVE := Y -ARCHIVE_TARGET := ndbbaseclient - -A_LIB := Y -SO_LIB := Y -PIC_LIB := Y -LIB_TARGET := ndbclient - -LIB_TARGET_ARCHIVES := $(ARCHIVE_TARGET) \ - ndbapi \ - mgmapi \ - newtonapi \ - transporter \ - general \ - signaldataprint \ - mgmsrvcommon \ - portlib \ - logger \ - trace - -SOURCES = ndbbaseclient_dummy.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/src/old_files/ndbbaseclient/ndbbaseclient_dummy.cpp b/storage/ndb/src/old_files/ndbbaseclient/ndbbaseclient_dummy.cpp deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/storage/ndb/src/old_files/ndbclient/Makefile b/storage/ndb/src/old_files/ndbclient/Makefile deleted file mode 100644 index 2c597eccfa16d0bae887708b35d0742cae09b848..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/ndbclient/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -include .defs.mk - -TYPE := * - -PIC_ARCHIVE := Y -NONPIC_ARCHIVE := Y -ARCHIVE_TARGET := ndbclient - -A_LIB := N -SO_LIB := Y -PIC_LIB := Y -LIB_TARGET := ndbclient_extra - -LDFLAGS_LAST = -lstdc++ -lm - -LIB_TARGET_ARCHIVES := $(ARCHIVE_TARGET) \ - ndbapi \ - mgmapi \ - newtonapi \ - transporter \ - general \ - signaldataprint \ - mgmsrvcommon \ - portlib \ - logger \ - trace \ - odbcdriver \ - odbchandles \ - odbcdictionary \ - odbccodegen \ - odbcexecutor \ - odbccommon - -SOURCES = ndbclient_dummy.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/src/old_files/ndbclient/ndbclient_dummy.cpp b/storage/ndb/src/old_files/ndbclient/ndbclient_dummy.cpp deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/storage/ndb/src/old_files/newtonapi/Makefile b/storage/ndb/src/old_files/newtonapi/Makefile deleted file mode 100644 index bed179046a5a3d4aed5227b86029f2c522a651b8..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -include .defs.mk - -TYPE := ndbapiclient - -PIC_ARCHIVE := Y -ARCHIVE_TARGET := newtonapi - -A_LIB := Y -SO_LIB := Y -PIC_LIB := Y - -LIB_TARGET := NEWTON_API -LIB_TARGET_ARCHIVES := $(ARCHIVE_TARGET) NDB_API - -SOURCES = \ - dba_binding.cpp \ - dba_process.cpp \ - dba_dac.cpp \ - dba_init.cpp \ - dba_schema.cpp \ - dba_bulkread.cpp \ - dba_error.cpp \ - dba_config.cpp - -CCFLAGS_LOC += -I../include -I$(call fixpath,$(NDB_TOP)/include/portlib) -I$(call fixpath,$(NDB_TOP)/include/util) -I$(call fixpath,$(NDB_TOP)/include/newtonapi) -DDEBUG - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/newtonapi/dba_binding.cpp b/storage/ndb/src/old_files/newtonapi/dba_binding.cpp deleted file mode 100644 index 63e48110b1d8c898c0cd3d91673c1253949413a1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_binding.cpp +++ /dev/null @@ -1,439 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_internal.hpp" - -static bool matchType(NdbDictionary::Column::Type, DBA_DataTypes_t); -static bool matchSize(NdbDictionary::Column::Type, unsigned, Size_t); -static int computeChecksum(const DBA_Binding_t * bindings); - -struct DBA__Array { - int count; - int data[1]; - - bool exists(int value) const { - for(int i = 0; i<count; i++) - if(data[i] == value) - return true; - return false; - } - - void insert(int value){ - data[count] = value; - count++; - } -}; - -/** - * createBindings - */ -static -DBA_Binding_t * -createBinding(const char* TableName, - int NbCol, - const DBA_ColumnBinding_t ColsBindings[], - Size_t StructSz, - const NdbDictionary::Table * theTable, - struct DBA__Array * keys, - struct DBA__Array * columns); - -extern "C" -DBA_Binding_t * -DBA_CreateBinding( const char* TableName, - int NbCol, - const DBA_ColumnBinding_t ColsBindings[], - Size_t StructSz ){ - - NdbDictionary::Dictionary * dict = DBA__TheNdb->getDictionary(); - if(dict == 0){ - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: No dictionary"); - return 0; - } - - const NdbDictionary::Table * table = dict->getTable(TableName); - if(table == 0){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "No such table: %s", TableName); - return 0; - } - - /** - * Keys/Columns in table - */ - const int tabColumns = table->getNoOfColumns(); - const int tabKeys = table->getNoOfPrimaryKeys(); - - /** - * Ok, ok... I alloc four bytes extra so what... - */ - struct DBA__Array * keys = (struct DBA__Array *)malloc - (sizeof(struct DBA__Array)+tabKeys*sizeof(int)); - - if(keys == 0){ - DBA__SetLatestError(DBA_ERROR, 0, - "malloc(%d) failed", - sizeof(struct DBA__Array)+tabKeys*sizeof(int)); - return 0; - } - - struct DBA__Array * columns = (struct DBA__Array *)malloc - (sizeof(struct DBA__Array)+tabColumns*sizeof(int)); - - if(columns == 0){ - DBA__SetLatestError(DBA_ERROR, 0, - "malloc(%d) failed", - sizeof(struct DBA__Array)+tabColumns*sizeof(int)); - free(keys); - return 0; - } - - columns->count = 0; - keys->count = 0; - - DBA_Binding_t * bindings = createBinding(TableName, - NbCol, - ColsBindings, - StructSz, - table, - keys, - columns); - - for(int i = 0; i<tabColumns; i++){ - const NdbDictionary::Column * col = table->getColumn(i); - if(col->getPrimaryKey()){ - if(!keys->exists(i)){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Key column: %s not specified in binding", - col->getName()); - - free(keys); free(columns); - DBA_DestroyBinding(bindings); - return 0; - } - } - } - - free(keys); free(columns); - - DBA__ValidBinding(bindings); - - return bindings; -} - -DBA_Binding_t * -createBinding(const char* TableName, - int NbCol, - const DBA_ColumnBinding_t ColsBindings[], - Size_t StructSz, - const NdbDictionary::Table * table, - struct DBA__Array * keys, - struct DBA__Array * columns){ - /** - * Counters for this part of binding - */ - int noOfKeys = 0; - int noOfColumns = 0; - int noOfSubBindings = 0; - - /** - * Check names and types and sizes - */ - for(int i = 0; i<NbCol; i++){ - if(ColsBindings[i].Ptr){ - /** - * Pointer binding - */ - noOfSubBindings ++; - - DBA_Binding_t * tmp = createBinding(TableName, - ColsBindings[i].Size, - ColsBindings[i].SubBinding, - StructSz, - table, - keys, - columns); - DBA__ValidBinding(tmp); - - if(tmp == 0){ - // createBindings have already set latestError - return 0; - } - - DBA_DestroyBinding(tmp); - } else { - const NdbDictionary::Column * col = - table->getColumn(ColsBindings[i].Name); - const Uint32 attrId = col->getColumnNo(); - - if(col == 0){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Unknown column: %s", ColsBindings[i].Name); - return 0; - } - const NdbDictionary::Column::Type type = col->getType(); - if(!matchType(type, ColsBindings[i].DataType)){ - DBA_DEBUG("Incorrect type for: " << ColsBindings[i].Name); - DBA_DEBUG("type: " << type); - DBA_DEBUG("ColsBindings[i].DataType: " << ColsBindings[i].DataType); - - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Incorrect type for column: %s", - ColsBindings[i].Name); - - return 0; - } - - if(!matchSize(type, col->getLength(), ColsBindings[i].Size)){ - DBA_DEBUG("Incorrect size for: " << ColsBindings[i].Name); - DBA_DEBUG("type: " << type); - DBA_DEBUG("length: " << col->getLength()); - DBA_DEBUG("ColsBindings[i].Size" << (Uint64)ColsBindings[i].Size); - - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Incorrect size for column: %s", - ColsBindings[i].Name); - return 0; - } - - if(col->getPrimaryKey()){ - noOfKeys++; - } else { - noOfColumns++; - } - - /** - * Check only in "validate" phase - */ - if(columns != 0 && keys != 0){ - if(columns->exists(attrId) || keys->exists(attrId)){ - DBA_DEBUG("Column bound multiple times: " << ColsBindings[i].Name); - - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Column bound multiple times: %s", - ColsBindings[i].Name); - return 0; - } - - if(col->getPrimaryKey()){ - keys->insert(attrId); - } else { - columns->insert(attrId); - } - } - } - } - - /** - * Validation is all set - */ - - /** - * Allocate memory - */ - const int szOfStruct = - sizeof(DBA_Binding_t) - + strlen(TableName) + 4 - + (2 * sizeof(int) * noOfKeys) - + (2 * sizeof(int) * noOfColumns) - + ((sizeof(struct DBA_Binding *) + sizeof(int)) * noOfSubBindings) - - 4; - - DBA_Binding * ret = (DBA_Binding *)malloc(szOfStruct); - if(ret == 0){ - DBA__SetLatestError(DBA_ERROR, 0, - "malloc(%d) failed", szOfStruct); - return 0; - } - - for(int i = 0; i<DBA__MagicLength; i++) - ret->magic[i] = DBA__TheMagic[i]; - - ret->noOfKeys = noOfKeys; - ret->noOfColumns = noOfColumns; - ret->noOfSubBindings = noOfSubBindings; - - ret->keyIds = (int *)&(ret->data[0]); - ret->keyOffsets = ret->keyIds + noOfKeys; - - ret->columnIds = ret->keyOffsets + noOfKeys; - ret->columnOffsets = ret->columnIds + noOfColumns; - - ret->subBindingOffsets = ret->columnOffsets + noOfColumns; - ret->subBindings = (DBA_Binding **) - (ret->subBindingOffsets + noOfSubBindings); - - ret->tableName = (char *)(ret->subBindings + noOfSubBindings); - ret->structSz = StructSz; - ret->checkSum = computeChecksum(ret); - - /** - * Populate arrays - */ - strcpy(ret->tableName, TableName); - - int k = 0; - int c = 0; - int p = 0; - - for(int i = 0; i<NbCol; i++){ - if(ColsBindings[i].Ptr){ - ret->subBindings[p] = createBinding(TableName, - ColsBindings[i].Size, - ColsBindings[i].SubBinding, - StructSz, - table, - 0, - 0); - - DBA__ValidBinding(ret->subBindings[p]); - - ret->subBindingOffsets[p] = ColsBindings[i].Offset; - p++; - } else { - const NdbDictionary::Column * col = - table->getColumn(ColsBindings[i].Name); - - if(col->getPrimaryKey()){ - ret->keyIds[k] = col->getColumnNo(); - ret->keyOffsets[k] = ColsBindings[i].Offset; - k++; - } else { - ret->columnIds[c] = col->getColumnNo(); - ret->columnOffsets[c] = ColsBindings[i].Offset; - c++; - } - } - } - - return ret; -} - - -extern "C" -DBA_Error_t -DBA_DestroyBinding( DBA_Binding_t* Binding ){ - - for(int i = 0; i<Binding->noOfSubBindings; i++) - DBA_DestroyBinding(Binding->subBindings[i]); - - free(Binding); - - return DBA_NO_ERROR; -} - -static -bool -matchType(NdbDictionary::Column::Type t1, DBA_DataTypes_t t2){ - for(int i = 0; i<DBA__NoOfMappings; i++) - if(DBA__DataTypesMappings[i].newtonType == t2 && - DBA__DataTypesMappings[i].ndbType == t1) - return true; - return false; -} - -static -bool -matchSize(NdbDictionary::Column::Type t, unsigned b, Size_t s) { - switch(t){ - case NdbDictionary::Column::Int: - case NdbDictionary::Column::Unsigned: - case NdbDictionary::Column::Float: - return (4 * b) == s; - case NdbDictionary::Column::Bigint: - case NdbDictionary::Column::Bigunsigned: - case NdbDictionary::Column::Double: - return (8 * b) == s; - case NdbDictionary::Column::Decimal: - case NdbDictionary::Column::Char: - case NdbDictionary::Column::Binary: - return (1 * b) == s; - case NdbDictionary::Column::Varchar: - case NdbDictionary::Column::Varbinary: - case NdbDictionary::Column::Datetime: - case NdbDictionary::Column::Timespec: - case NdbDictionary::Column::Blob: - case NdbDictionary::Column::Tinyint: - case NdbDictionary::Column::Tinyunsigned: - case NdbDictionary::Column::Smallint: - case NdbDictionary::Column::Smallunsigned: - case NdbDictionary::Column::Mediumint: - case NdbDictionary::Column::Mediumunsigned: - case NdbDictionary::Column::Undefined: - return false; - } - return false; -} - -bool -DBA__ValidBinding(const DBA_Binding_t * bindings){ - if(bindings == 0){ - DBA_DEBUG("Null pointer passed to validBinding"); - return false; - } - - for(int i = 0; i<DBA__MagicLength; i++) - if(bindings->magic[i] != DBA__TheMagic[i]){ - DBA_DEBUG("Invalid magic in validBinding"); - return false; - } - - const int cs = computeChecksum(bindings); - if(cs != bindings->checkSum){ - DBA_DEBUG("Invalid checksum in validBinding"); - DBA_DEBUG("cs = " << cs << " b->cs= " << bindings->checkSum); - return false; - } - - return true; -} - -bool -DBA__ValidBindings(const DBA_Binding_t * const * pBindings, int n){ - for(int i = 0; i<n; i++) - if(!DBA__ValidBinding(pBindings[i])) - return false; - return true; -} - -/** - * Note: currently only checksum "static" part of struct - */ -static -int -computeChecksum(const DBA_Binding_t * bindings){ - int sum = 0; - int pos = 0; - const char * ptr = ((const char *)bindings)+DBA__MagicLength+sizeof(int); - const int sz = sizeof(DBA_Binding_t) - DBA__MagicLength - sizeof(int) - 4; - - for(int i = 0; i<sz; i++){ - sum += ((int)ptr[i]) << pos; - pos += 8; - if(pos == 32) - pos = 0; - } - - return sum; -} - -int -DBA__GetStructSize(const DBA_Binding_t * bind){ - if(!DBA__ValidBinding(bind)) - return 0; - return bind->structSz; -} diff --git a/storage/ndb/src/old_files/newtonapi/dba_bulkread.cpp b/storage/ndb/src/old_files/newtonapi/dba_bulkread.cpp deleted file mode 100644 index 1f75037046b35dee5aaee39c83ed1dbedf0dfd89..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_bulkread.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_internal.hpp" - -struct DBA__BulkReadData { - const DBA_Binding_t * const * pBindings; // The bindings - DBA_BulkReadResultSet_t * pData; // The data - - int NbRows; // NbRows per binding - int NbBindings; // NbBindings - int TotalRows; // Total rows (NbRows*NbBindings) - - DBA_AsyncCallbackFn_t CbFunc; // Users callback - DBA_ReqId_t RequestId; // Users request id - DBA_Error_t Status; // Request status - DBA_ErrorCode_t ErrorCode; /**< Request error - Only valid if request is - aborted */ - - int RowsSubmitted; // No of read sent to NDB - int RowsAcknowledged; // No of read responses - int OpPerTrans; // Operations per transaction - - struct Index { - int binding; - int row; - int datarow; - - void init() { row = binding = datarow = 0;} - void next(int rows) { - datarow++; row++; - if(row == rows){ row = 0; binding++; } - } - }; - Index lastSend; - Index nextSend; - - /** - * If "simple" bulkread - * use this storage - */ - const DBA_Binding_t * bindings[1]; - - DBA__BulkReadData() { - RequestId = DBA_INVALID_REQID; - } - void ProcessBulkRead(); - bool ProcessCallback(int errorCode, NdbConnection * connection); -}; - -static -void -NewtonCallback(int errorCode, - NdbConnection * connection, - void * anyObject){ - - DBA__BulkReadData * brd = (DBA__BulkReadData*)anyObject; - - brd->ProcessCallback(errorCode, connection); - - DBA__TheNdb->closeTransaction(connection); - - if(brd->RowsSubmitted == brd->TotalRows){ - - /** - * The entire bulk read is finished, - * call users callback - */ - DBA_ReqId_t reqId = brd->RequestId; - - // Invalidate BulkReadData - brd->RequestId = DBA_INVALID_REQID; - - brd->CbFunc(reqId, brd->Status, brd->ErrorCode); - return; - } - - brd->ProcessBulkRead(); -} - -/** - * A BulkReadData structure - */ -static DBA__BulkReadData theBRD; - -#define CHECK_BINDINGS(Bindings) \ - if(!DBA__ValidBinding(Bindings)){ \ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid bindings"); \ - return DBA_INVALID_REQID; \ - } - -#define CHECK_BINDINGS2(Bindings, NbBindings) \ - if(!DBA__ValidBindings(Bindings, NbBindings)){ \ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid bindings"); \ - return DBA_INVALID_REQID; \ - } - -DBA_ReqId_t -DBA_BulkReadRows(const DBA_Binding_t * pBindings, - DBA_BulkReadResultSet_t pData[], - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - - CHECK_BINDINGS(pBindings); - - DBA__BulkReadData * brd = &theBRD; - - NdbMutex_Lock(DBA__TheNewtonMutex); - - if(brd->RequestId != DBA_INVALID_REQID){ - DBA__SetLatestError(DBA_ERROR, 0, - "DBA only permits 1 concurrent bulkread"); - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return DBA_ERROR; - } - - theBRD.RequestId = 1; - - /** - * - */ - brd->bindings[0] = pBindings; - brd->pBindings = brd->bindings; - brd->pData = pData; - - /** - * Control data - */ - brd->NbRows = NbRows; - brd->NbBindings = 1; - brd->TotalRows = NbRows; - brd->CbFunc = CbFunc; - brd->Status = DBA_NO_ERROR; - brd->ErrorCode = 0; - brd->OpPerTrans = DBA__BulkReadCount; - - brd->RowsSubmitted = 0; - brd->RowsAcknowledged = 0; - - brd->lastSend.init(); - brd->nextSend.init(); - - brd->ProcessBulkRead(); - NdbMutex_Unlock(DBA__TheNewtonMutex); - - return brd->RequestId; -} - -DBA_ReqId_t -DBA_BulkMultiReadRows(const DBA_Binding_t * const * pBindings, - DBA_BulkReadResultSet_t pData[], - int NbBindings, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - - CHECK_BINDINGS2(pBindings, NbBindings); - - DBA__BulkReadData * brd = &theBRD; - - NdbMutex_Lock(DBA__TheNewtonMutex); - - if(brd->RequestId != DBA_INVALID_REQID){ - DBA__SetLatestError(DBA_ERROR, 0, - "DBA only permits 1 concurrent bulkread"); - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return DBA_ERROR; - } - - brd->RequestId = 1; - - /** - * - */ - brd->pBindings = pBindings; - brd->pData = pData; - - /** - * Control data - */ - brd->NbRows = NbRows; - brd->NbBindings = NbBindings; - brd->TotalRows = (NbRows * NbBindings); - brd->CbFunc = CbFunc; - brd->Status = DBA_NO_ERROR; - brd->ErrorCode = 0; - brd->OpPerTrans = DBA__BulkReadCount; - - brd->RowsSubmitted = 0; - brd->RowsAcknowledged = 0; - - brd->lastSend.init(); - brd->nextSend.init(); - - brd->ProcessBulkRead(); - - NdbMutex_Unlock(DBA__TheNewtonMutex); - - return brd->RequestId; -} - -bool -DBA__BulkReadData::ProcessCallback(int errorCode, NdbConnection * con){ - - Index tmp = lastSend; - const NdbOperation * op = con->getNextCompletedOperation(0); - - for(int i = 0; i<OpPerTrans && RowsAcknowledged < RowsSubmitted; i++){ - require(op != 0); - if(op->getNdbError().code == 0) - pData[tmp.datarow].RowFoundIndicator = 1; - else - pData[tmp.datarow].RowFoundIndicator = 0; - - RowsAcknowledged++; - tmp.next(NbRows); - op = con->getNextCompletedOperation(op); - } - return true; -} - -void -DBA__BulkReadData::ProcessBulkRead(){ - - NdbConnection * con = DBA__TheNdb->startTransaction(); - - Index tmp = nextSend; - - for(int i = 0; i<OpPerTrans && RowsSubmitted < TotalRows; i++){ - - const DBA_Binding_t * binding = pBindings[tmp.binding]; - void * data = pData[tmp.datarow].DataPtr; - - NdbOperation * op = con->getNdbOperation(binding->tableName); - - op->simpleRead(); - - require(DBA__EqualGetValue(op, binding, data)); - - RowsSubmitted++; - tmp.next(NbRows); - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)this, - CommitAsMuchAsPossible); - - lastSend = nextSend; - nextSend = tmp; -} diff --git a/storage/ndb/src/old_files/newtonapi/dba_config.cpp b/storage/ndb/src/old_files/newtonapi/dba_config.cpp deleted file mode 100644 index d84386a9438c37b00a6822ce7bb585ada7c95f6e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_config.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_internal.hpp" - -int DBA__NBP_Intervall = 10; -int DBA__BulkReadCount = 1000; -int DBA__StartTransactionTimout = 0; -int DBA__NBP_Force = 1; - -struct DBA__Config { - int ParamId; - int * Param; - int min; - int max; - const char * Description; -}; - -static -DBA__Config Parameters[] = { - { 0, &DBA__NBP_Intervall, 4, INT_MAX, - "Newton Batch Process Interval(ms)" }, - { 1, &DBA__BulkReadCount, 1, 5000, - "Operations per transaction during bulkread" }, - { 2, &DBA__StartTransactionTimout, 0, INT_MAX, - "Start transaction timeout(ms)" }, - { 3, &DBA__NBP_Force, 0, 2, - "Newton Batch Process Force send algorithm" } -}; - -static const int Params = sizeof(Parameters)/sizeof(DBA__Config); - -static -DBA__Config * -getParam(int id){ - for(int i = 0; i<Params; i++) - if(Parameters[i].ParamId == id) - return &Parameters[i]; - return 0; -} - - -extern "C" -DBA_Error_t -DBA_SetParameter(int ParameterId, int Value){ - if(Value == -1){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Node id is not modifyable"); - return DBA_APPLICATION_ERROR; - } - - DBA__Config * p = getParam(ParameterId); - - if(p == 0){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid parameter id: %d", - ParameterId); - return DBA_APPLICATION_ERROR; - } - - if(Value < p->min){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Value too small for parameter %d (min = %d)", - Value, p->min); - return DBA_APPLICATION_ERROR; - } - - if(Value > p->max){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Value too big for parameter %d (max = %d)", - Value, p->max); - return DBA_APPLICATION_ERROR; - } - - * p->Param = Value; - return DBA_NO_ERROR; -} - -extern "C" -DBA_Error_t -DBA_GetParameter(int ParameterId, int * Value){ - if(ParameterId == -1){ - if(DBA__TheNdb == 0){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "DBA_Open() is not called" - ); - return DBA_APPLICATION_ERROR; - } - * Value = DBA__TheNdb->getNodeId(); - return DBA_NO_ERROR; - } - - DBA__Config * p = getParam(ParameterId); - if(p == 0){ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid parameter id: %d", - ParameterId); - return DBA_APPLICATION_ERROR; - } - - * Value = * p->Param; - - return DBA_NO_ERROR; -} - diff --git a/storage/ndb/src/old_files/newtonapi/dba_dac.cpp b/storage/ndb/src/old_files/newtonapi/dba_dac.cpp deleted file mode 100644 index fcb4e676e46e6ee7243ca235710ee30bff69eb90..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_dac.cpp +++ /dev/null @@ -1,842 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_internal.hpp" -#include <NdbSleep.h> - -static void -DBA__ErrorMapping(const NdbError & err, DBA_Error_t * status){ - switch(err.classification){ - case NdbError::ConstraintViolation: - * status = DBA_CONSTRAINT_VIOLATION; - break; - - case NdbError::NoDataFound: - * status = DBA_NO_DATA; - break; - - case NdbError::TemporaryResourceError: - case NdbError::NodeRecoveryError: - * status = DBA_TEMPORARY_ERROR; - break; - - case NdbError::InsufficientSpace: - * status = DBA_INSUFFICIENT_SPACE; - break; - - case NdbError::UnknownResultError: - * status = DBA_UNKNOWN_RESULT; - break; - - case NdbError::OverloadError: - * status = DBA_OVERLOAD; - break; - - case NdbError::TimeoutExpired: - * status = DBA_TIMEOUT; - break; - - case NdbError::SchemaError: - * status = DBA_SCHEMA_ERROR; - break; - - case NdbError::ApplicationError: - * status = DBA_APPLICATION_ERROR; - break; - - case NdbError::InternalError: - default: - * status = DBA_NDB_ERROR; - break; - } -} - -/** - * Map between NDB error codes and DBA error codes - */ -static -void -DBA__CallbackErrorCodeMapping(int errorCode, - NdbConnection * connection, - DBA_Error_t * status, - DBA_ErrorCode_t * errCode) { - if(errorCode == 0){ - * status = DBA_NO_ERROR; - * errCode = 0; - return; - } - const NdbError & err = connection->getNdbError(); - DBA__ErrorMapping(err, status); - * errCode = err.code; -} - -/** - * When startTransaction fails - */ -static -void -DBA__ConnectionErrorMapping(Ndb * theNdb){ - const NdbError & err = theNdb->getNdbError(); - - DBA_Error_t status; - DBA__ErrorMapping(err, &status); - - DBA__SetLatestError(status, err.code, - err.message); -} - -/** - * When getNdbOperation fails - */ -static -void -DBA__OperationErrorMapping(Ndb * theNdb, NdbConnection * con){ - const NdbError & err = theNdb->getNdbError(); - - DBA_Error_t status; - DBA__ErrorMapping(err, &status); - - DBA__SetLatestError(status, err.code, - err.message); -} - -/** - * When equal/get/set value fails - */ -static -void -DBA__EqualErrorMapping(Ndb * theNdb, NdbConnection * con, NdbOperation * op){ - const NdbError & err = theNdb->getNdbError(); - - DBA_Error_t status; - DBA__ErrorMapping(err, &status); - - DBA__SetLatestError(status, err.code, - err.message); -} - -static -void -NewtonCallback(int errorCode, - NdbConnection * connection, - void * anyObject){ - - DBA_AsyncCallbackFn_t CbFunc = (DBA_AsyncCallbackFn_t)anyObject; - DBA_ReqId_t ReqId = (DBA_ReqId_t) connection; - - DBA_Error_t Status = (DBA_Error_t) errorCode; - DBA_ErrorCode_t Impl_Status ; - - DBA__CallbackErrorCodeMapping(errorCode, connection, &Status, &Impl_Status); - - DBA__TheNdb->closeTransaction(connection); - - DBA__RecvTransactions++; - - CbFunc(ReqId, Status, Impl_Status); -} - -/** - * Start transaction - */ -NdbConnection * -startTransaction(){ - NdbConnection * con = DBA__TheNdb->startTransaction(); - if(con != 0) - return con; - - const int _t = (DBA__SentTransactions - DBA__RecvTransactions); - const int t = (_t>0?_t:-_t); - - if(!(DBA__TheNdb->getNdbError().code == 4006 && t > 1000)){ - DBA_DEBUG("DBA__TheNdb->getNdbError() = " << - DBA__TheNdb->getNdbError()); - } - - int sum = 0; - int sleepTime = 10; - for(; con == 0 && sum < DBA__StartTransactionTimout; ){ - NdbMutex_Unlock(DBA__TheNewtonMutex); - NdbSleep_MilliSleep(sleepTime); - NdbMutex_Lock(DBA__TheNewtonMutex); - con = DBA__TheNdb->startTransaction(); - - sum += sleepTime; - sleepTime += 10; - } - - return con; -} - -#define CHECK_BINDINGS(Bindings) \ - if(!DBA__ValidBinding(Bindings)){ \ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid bindings"); \ - return DBA_INVALID_REQID; \ - } - -#define CHECK_BINDINGS2(Bindings, NbBindings) \ - if(!DBA__ValidBindings(Bindings, NbBindings)){ \ - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, "Invalid bindings"); \ - return DBA_INVALID_REQID; \ - } - -#define CHECK_CONNECTION(Connection) \ - if(Connection == 0){ \ - DBA__ConnectionErrorMapping(DBA__TheNdb); \ - NdbMutex_Unlock(DBA__TheNewtonMutex); \ - return DBA_INVALID_REQID; \ - } - -#define CHECK_OPERATION(Connection, Operation) \ - if(Operation == 0){ \ - DBA__OperationErrorMapping(DBA__TheNdb, Connection); \ - DBA__TheNdb->closeTransaction(Connection); \ - NdbMutex_Unlock(DBA__TheNewtonMutex); \ - return DBA_INVALID_REQID; \ - } - -#define EQUAL_ERROR(Connection, Operation) { \ - DBA__EqualErrorMapping(DBA__TheNdb, Connection, Operation); \ - DBA__TheNdb->closeTransaction(Connection); \ - NdbMutex_Unlock(DBA__TheNewtonMutex); \ - return DBA_INVALID_REQID; \ - } - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -extern "C" -DBA_ReqId_t -DBA_ReadRows( const DBA_Binding_t* pBindings, void* const * _pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ) { - - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->simpleRead(); - - void * pData = _pData[i]; - - if(!DBA__EqualGetValue(op, pBindings, pData)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_ArrayReadRows( const DBA_Binding_t* pBindings, void * pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->simpleRead(); - - if(!DBA__EqualGetValue(op, pBindings, - ((char*)pData)+i*pBindings->structSz)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_MultiReadRow(const DBA_Binding_t * const * pBindings, - void * const * pData, - int NbBindings, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS2(pBindings, NbBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbBindings; i++){ - NdbOperation * op = con->getNdbOperation(pBindings[i]->tableName); - - CHECK_OPERATION(con, op); - - op->simpleRead(); - - if(!DBA__EqualGetValue(op, pBindings[i], pData[i])){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -extern "C" -DBA_ReqId_t -DBA_InsertRows( const DBA_Binding_t* pBindings, const void * const * _pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->insertTuple(); - - const void * pData = _pData[i]; - - if(!DBA__EqualSetValue(op, pBindings, pData)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_ArrayInsertRows( const DBA_Binding_t* pBindings, const void * pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->insertTuple(); - - if(!DBA__EqualSetValue(op, pBindings, - ((char*)pData)+i*pBindings->structSz)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_MultiInsertRow(const DBA_Binding_t * const * pBindings, - const void * const * pData, - int NbBindings, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS2(pBindings, NbBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbBindings; i++){ - NdbOperation * op = con->getNdbOperation(pBindings[i]->tableName); - - CHECK_OPERATION(con, op); - - op->insertTuple(); - - if(!DBA__EqualSetValue(op, pBindings[i], pData[i])){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -extern "C" -DBA_ReqId_t -DBA_UpdateRows( const DBA_Binding_t* pBindings, const void * const * _pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->updateTuple(); - - const void * pData = _pData[i]; - - if(!DBA__EqualSetValue(op, pBindings, pData)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_ArrayUpdateRows( const DBA_Binding_t* pBindings, const void * pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->updateTuple(); - - if(!DBA__EqualSetValue(op, pBindings, - ((char*)pData)+i*pBindings->structSz)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_MultiUpdateRow(const DBA_Binding_t * const * pBindings, - const void * const * pData, - int NbBindings, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS2(pBindings, NbBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbBindings; i++){ - NdbOperation * op = con->getNdbOperation(pBindings[i]->tableName); - - CHECK_OPERATION(con, op); - - op->updateTuple(); - - if(!DBA__EqualSetValue(op, pBindings[i], pData[i])){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -extern "C" -DBA_ReqId_t -DBA_WriteRows( const DBA_Binding_t* pBindings, const void * const * _pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->writeTuple(); - - const void * pData = _pData[i]; - - if(!DBA__EqualSetValue(op, pBindings, pData)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_ArrayWriteRows( const DBA_Binding_t* pBindings, const void * pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->writeTuple(); - - if(!DBA__EqualSetValue(op, pBindings, - ((char*)pData)+i*pBindings->structSz)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_MultiWriteRow(const DBA_Binding_t * const * pBindings, - const void * const * pData, - int NbBindings, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS2(pBindings, NbBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbBindings; i++){ - NdbOperation * op = con->getNdbOperation(pBindings[i]->tableName); - - CHECK_OPERATION(con, op); - - op->writeTuple(); - - if(!DBA__EqualSetValue(op, pBindings[i], pData[i])){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -extern "C" -DBA_ReqId_t -DBA_DeleteRows( const DBA_Binding_t* pBindings, const void * const * _pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->deleteTuple(); - - const void * pData = _pData[i]; - - if(!DBA__Equal(op, pBindings, pData)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_ArrayDeleteRows( const DBA_Binding_t* pBindings, const void * pData, - int NbRows, - DBA_AsyncCallbackFn_t CbFunc ){ - CHECK_BINDINGS(pBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbRows; i++){ - NdbOperation * op = con->getNdbOperation(pBindings->tableName); - - CHECK_OPERATION(con, op); - - op->deleteTuple(); - - if(!DBA__Equal(op, pBindings, - ((char*)pData)+i*pBindings->structSz)){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -extern "C" -DBA_ReqId_t -DBA_MultiDeleteRow(const DBA_Binding_t * const * pBindings, - const void * const * pData, - int NbBindings, - DBA_AsyncCallbackFn_t CbFunc ) { - CHECK_BINDINGS2(pBindings, NbBindings); - - NdbMutex_Lock(DBA__TheNewtonMutex); - NdbConnection * con = startTransaction(); - - CHECK_CONNECTION(con); - - for(int i = 0; i<NbBindings; i++){ - NdbOperation * op = con->getNdbOperation(pBindings[i]->tableName); - - CHECK_OPERATION(con, op); - - op->deleteTuple(); - - if(!DBA__Equal(op, pBindings[i], pData[i])){ - EQUAL_ERROR(con, op); - } - } - - con->executeAsynchPrepare(Commit, - NewtonCallback, - (void*)CbFunc); - - DBA__SentTransactions++; - - NdbMutex_Unlock(DBA__TheNewtonMutex); - return (DBA_ReqId_t) con; -} - -/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/ - -bool -DBA__EqualGetValue(NdbOperation * op, - const DBA_Binding_t* pBindings, - void * pData){ - for(int i = 0; i<pBindings->noOfKeys; i++){ - if(op->equal(pBindings->keyIds[i], - (const char*)pData+pBindings->keyOffsets[i]) == -1){ - return false; - } - } - - for(int i = 0; i<pBindings->noOfColumns; i++){ - if(op->getValue(pBindings->columnIds[i], - (char*)pData+pBindings->columnOffsets[i]) == 0){ - return false; - } - } - - for(int i = 0; i<pBindings->noOfSubBindings; i++){ - void * tData = *(void**)((char *)pData+pBindings->subBindingOffsets[i]); - const DBA_Binding_t * tBinding = pBindings->subBindings[i]; - if(!DBA__EqualGetValue(op, tBinding, tData)) - return false; - } - - return true; -} - -bool -DBA__EqualSetValue(NdbOperation * op, - const DBA_Binding_t* pBindings, - const void * pData){ - - for(int i = 0; i<pBindings->noOfKeys; i++){ - if(op->equal(pBindings->keyIds[i], - (const char*)pData+pBindings->keyOffsets[i]) == -1){ - return false; - } - } - - for(int i = 0; i<pBindings->noOfColumns; i++){ - if(op->setValue(pBindings->columnIds[i], - (char*)pData+pBindings->columnOffsets[i]) == -1){ - return false; - } - } - - for(int i = 0; i<pBindings->noOfSubBindings; i++){ - void * tData = * (void**)((char *)pData+pBindings->subBindingOffsets[i]); - const DBA_Binding_t * tBinding = pBindings->subBindings[i]; - if(!DBA__EqualSetValue(op, tBinding, tData)) - return false; - } - - return true; -} - -bool -DBA__Equal(NdbOperation * op, - const DBA_Binding_t* pBindings, - const void * pData){ - - for(int i = 0; i<pBindings->noOfKeys; i++) - if(op->equal(pBindings->keyIds[i], - (const char*)pData+pBindings->keyOffsets[i]) == -1){ - return false; - } - - for(int i = 0; i<pBindings->noOfSubBindings; i++){ - void * tData = *(void**)((char *)pData+pBindings->subBindingOffsets[i]); - const DBA_Binding_t * tBinding = pBindings->subBindings[i]; - if(!DBA__Equal(op, tBinding, tData)) - return false; - } - - return true; -} - diff --git a/storage/ndb/src/old_files/newtonapi/dba_error.cpp b/storage/ndb/src/old_files/newtonapi/dba_error.cpp deleted file mode 100644 index f05446522b03c2fc4d5c0372b89f7f41066cc136..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_error.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <ndb_global.h> - -#include "dba_internal.hpp" - -static DBA_Error_t latestError = DBA_NO_ERROR; -static DBA_ErrorCode_t latestNdbError = 0; -static char latestMsg[1024]; - -/** - * Private - */ -void -DBA__SetLatestError(DBA_Error_t le, - DBA_ErrorCode_t lnb, - const char * msg, ...){ - - require(msg != 0); - - latestError = le; - latestNdbError = lnb; - - va_list ap; - - va_start(ap, msg); - vsnprintf(latestMsg, sizeof(latestMsg)-1, msg, ap); - va_end(ap); -} - -/** - * Get latest DBA error - */ -extern "C" -DBA_Error_t -DBA_GetLatestError(){ - return latestError; -} - -/** - * Get latest error string associated with GetLatestError - * - * String must not be free by caller of this method - */ -extern "C" -const char * -DBA_GetLatestErrorMsg(){ - return latestMsg; -} - -/** - * Get the latest NDB error - * - * Note only applicable to synchronous methods - */ -extern "C" -DBA_ErrorCode_t -DBA_GetLatestNdbError(){ - return latestNdbError; -} - -extern "C" -const -char * -DBA_GetNdbErrorMsg(DBA_ErrorCode_t code){ - return DBA__TheNdb->getNdbError(code).message; -} - -struct DBA_ErrorTxtMap { - DBA_Error_t Error; - const char * Msg; -}; - -static -const DBA_ErrorTxtMap errMap[] = { - { DBA_NO_ERROR, "No error" }, - { DBA_NOT_IMPLEMENTED, "Function Not Implemented" }, - { DBA_NDB_ERROR, "Uncategorised NDB error" }, - { DBA_ERROR, "Uncategorised DBA implementation error" }, - { DBA_APPLICATION_ERROR, - "Function called with invalid argument(s)/invalid sequence(s)" }, - { DBA_NO_DATA, "No row with specified PK existed" }, - { DBA_CONSTRAINT_VIOLATION, "There already existed a row with that PK" }, - - { DBA_TEMPORARY_ERROR, "Request failed due to temporary reasons" }, - { DBA_INSUFFICIENT_SPACE, - "The DB is full" }, - { DBA_OVERLOAD, "Request was rejected in NDB due to high load situation" }, - { DBA_TIMEOUT, "The request timed out, probably due to dead-lock" } -}; - -static const int ErrMsgs = sizeof(errMap)/sizeof(DBA_ErrorTxtMap); - -extern "C" -const -char * -DBA_GetErrorMsg(DBA_Error_t e){ - for(int i = 0; i<ErrMsgs; i++) - if(errMap[i].Error == e) - return errMap[i].Msg; - return "Invalid error code"; -} - diff --git a/storage/ndb/src/old_files/newtonapi/dba_init.cpp b/storage/ndb/src/old_files/newtonapi/dba_init.cpp deleted file mode 100644 index aa5fef1171cbb4d50b7c8965bb5aee5bf660cadb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_init.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_internal.hpp" -#include "dba_process.hpp" -#include <NdbOut.hpp> - - -#ifdef NDB_WIN32 -static NdbMutex & DBA__InitMutex = * NdbMutex_Create(); -#else -static NdbMutex DBA__InitMutex = NDB_MUTEX_INITIALIZER; -#endif - -Ndb * DBA__TheNdb = 0; -NdbMutex * DBA__TheNewtonMutex = 0; -unsigned DBA__SentTransactions = 0; -unsigned DBA__RecvTransactions = 0; -NewtonBatchProcess * DBA__TheNBP = 0; - -extern "C" -DBA_Error_t -DBA_Open( ) { - NdbMutex_Lock(&DBA__InitMutex); - - if(DBA__TheNdb != 0){ - NdbMutex_Unlock(&DBA__InitMutex); - return DBA_NO_ERROR; - } - - DBA__TheNdb = new Ndb("Newton"); - DBA__TheNdb->init(1024); - if(DBA__TheNdb->waitUntilReady() != 0){ - delete DBA__TheNdb; DBA__TheNdb = 0; - NdbMutex_Unlock(&DBA__InitMutex); - return DBA_NDB_ERROR; - } - DBA__TheNewtonMutex = NdbMutex_Create(); - DBA__TheNBP = new NewtonBatchProcess(* DBA__TheNdb, * DBA__TheNewtonMutex); - DBA__TheNBP->doStart(); - NdbMutex_Unlock(&DBA__InitMutex); - return DBA_NO_ERROR; -} - - -/** - * Closes the database. - * - * @return Error status - */ -extern "C" -DBA_Error_t -DBA_Close(void){ - - NdbMutex_Lock(&DBA__InitMutex); - - if(DBA__TheNBP != 0) - DBA__TheNBP->doStop(true); - delete DBA__TheNBP; - DBA__TheNBP = 0; - - if(DBA__TheNdb != 0) - delete DBA__TheNdb; - DBA__TheNdb = 0; - - if(DBA__TheNewtonMutex != 0) - NdbMutex_Destroy(DBA__TheNewtonMutex); - DBA__TheNewtonMutex = 0; - - NdbMutex_Unlock(&DBA__InitMutex); - return DBA_NO_ERROR; -} diff --git a/storage/ndb/src/old_files/newtonapi/dba_internal.hpp b/storage/ndb/src/old_files/newtonapi/dba_internal.hpp deleted file mode 100644 index 84ae7ba222b27791c373703ddf320adac6a8423e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_internal.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBA_INTERNAL_HPP -#define DBA_INTERNAL_HPP - -#include <ndb_global.h> - -extern "C" { -#include "dba.h" -} - -#include <NdbApi.hpp> -#include <NdbMutex.h> -#include <NdbOut.hpp> - -#ifndef INT_MAX -#define INT_MAX 2147483647 -#endif - -#ifdef DEBUG -#define DBA_DEBUG(x) ndbout << x << endl -#else -#define DBA_DEBUG(x) -#endif - -extern Ndb * DBA__TheNdb; -extern NdbMutex * DBA__TheNewtonMutex; - -extern unsigned DBA__SentTransactions; -extern unsigned DBA__RecvTransactions; - -/** - * Configuration - */ -extern int DBA__NBP_Intervall; // Param 0 -extern int DBA__BulkReadCount; // Param 1 -extern int DBA__StartTransactionTimout; // Param 2 -extern int DBA__NBP_Force; // Param 3 - -/** - * Error handling - */ -void DBA__SetLatestError(DBA_Error_t, DBA_ErrorCode_t, const char *, ...); - -/** - * Magic string - * - * Used to make sure that user passes correct pointers - */ -const int DBA__MagicLength = 4; -const char DBA__TheMagic[DBA__MagicLength] = { 'K', 'E', 'S', 'O' }; - -struct DBA_Binding { - char magic[DBA__MagicLength]; - int checkSum; - - char * tableName; - int structSz; - - int noOfKeys; - int *keyIds; - int *keyOffsets; - - int noOfColumns; - int *columnIds; - int *columnOffsets; - - int noOfSubBindings; - struct DBA_Binding **subBindings; - int * subBindingOffsets; - - int data[1]; -}; - -struct DBA__DataTypesMapping { - DBA_DataTypes_t newtonType; - NdbDictionary::Column::Type ndbType; -}; - -const DBA__DataTypesMapping DBA__DataTypesMappings[] = { - { DBA_CHAR, NdbDictionary::Column::Char }, - { DBA_INT, NdbDictionary::Column::Int } -}; - -const int DBA__NoOfMappings = sizeof(DBA__DataTypesMappings)/ - sizeof(DBA__DataTypesMapping); - -/** - * Validate magic string and checksum of a binding - */ -bool DBA__ValidBinding(const DBA_Binding_t * bindings); -bool DBA__ValidBindings(const DBA_Binding_t * const * pBindings, int n); - -/** - * Recursive equalGetValue (used for read) - * equalSetValue (used for write) - * equal (used for delete) - */ -bool DBA__EqualGetValue(NdbOperation *, const DBA_Binding_t *, void *); -bool DBA__EqualSetValue(NdbOperation *, const DBA_Binding_t *, const void *); -bool DBA__Equal (NdbOperation *, const DBA_Binding_t *, const void *); - -inline void require(bool test){ - if(!test) - abort(); -} - -#endif diff --git a/storage/ndb/src/old_files/newtonapi/dba_process.cpp b/storage/ndb/src/old_files/newtonapi/dba_process.cpp deleted file mode 100644 index ddb6e62f180cccef2193b33099d786d5a60ab7e1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_process.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "dba_process.hpp" - -NewtonBatchProcess::NewtonBatchProcess(Ndb & ndb, NdbMutex & mutex) : - theNdb(ndb), - theMutex(mutex) -{ - theThread = 0; - startStopMutex = NdbMutex_Create(); - - _running = false; - _stop = false; -} - -NewtonBatchProcess::~NewtonBatchProcess(){ - doStop(true); - - if(theThread != 0) - NdbThread_Destroy(&theThread); - - if(startStopMutex != 0) - NdbMutex_Destroy(startStopMutex); - startStopMutex = 0; -} - -extern "C" -void* -runNDB_C(void * _nbp){ - NewtonBatchProcess * nbp = (NewtonBatchProcess*)_nbp; - nbp->_running = true; - nbp->run(); - nbp->_running = false; - - /** - * This sleep is to make sure that the transporter - * send thread will come in and send any - * signal buffers that this thread may have allocated. - * If that doesn't happen an error will occur in OSE - * when trying to restore a signal buffer allocated by a thread - * that have been killed. - */ - NdbSleep_MilliSleep(50); - NdbThread_Exit(0); - return 0; -} - -void -NewtonBatchProcess::doStart(){ - NdbMutex_Lock(startStopMutex); - if(_running && !_stop){ - NdbMutex_Unlock(startStopMutex); - return ; - } - - while(_running){ - NdbMutex_Unlock(startStopMutex); - NdbSleep_MilliSleep(200); - NdbMutex_Lock(startStopMutex); - } - - require(!_running); - _stop = false; - - if(theThread != 0) - NdbThread_Destroy(&theThread); - - theThread = NdbThread_Create(runNDB_C, - (void**)this, - 65535, - "Newton_BP", - NDB_THREAD_PRIO_LOWEST); - - NdbMutex_Unlock(startStopMutex); -} - -void -NewtonBatchProcess::doStop(bool wait){ - NdbMutex_Lock(startStopMutex); - _stop = true; - - if(wait){ - while(_running){ - NdbSleep_MilliSleep(200); - } - } - NdbMutex_Unlock(startStopMutex); -} - -bool -NewtonBatchProcess::isRunning() const { - return _running; -} - -bool -NewtonBatchProcess::isStopping() const { - return _stop; -} - -void -NewtonBatchProcess::run(){ - while(!_stop){ - NdbMutex_Lock(&theMutex); - theNdb.sendPollNdb(0, 1, DBA__NBP_Force); - NdbMutex_Unlock(&theMutex); - NdbSleep_MilliSleep(DBA__NBP_Intervall); - } -} diff --git a/storage/ndb/src/old_files/newtonapi/dba_process.hpp b/storage/ndb/src/old_files/newtonapi/dba_process.hpp deleted file mode 100644 index ef24fbd9142df2409ca2a8827faa380ac519928c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_process.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NEWTON_BP_HPP -#define NEWTON_BP_HPP - -#include "dba_internal.hpp" - -#include <NdbThread.h> -#include <NdbMutex.h> -#include <NdbSleep.h> - -extern "C" void* runNDB_C(void * nbp); - -/** - * This class implements the NewtonBatchProcess - */ -class NewtonBatchProcess { - friend void* runNDB_C(void * nbp); -public: - NewtonBatchProcess(Ndb &, NdbMutex &); - ~NewtonBatchProcess(); - - void doStart(); - void doStop(bool wait); - - bool isRunning() const ; - bool isStopping() const ; - -private: - void run(); - - bool _running; - bool _stop; - - Ndb & theNdb; - NdbMutex & theMutex; - - NdbThread * theThread; - NdbMutex * startStopMutex; -}; - -#endif diff --git a/storage/ndb/src/old_files/newtonapi/dba_schema.cpp b/storage/ndb/src/old_files/newtonapi/dba_schema.cpp deleted file mode 100644 index 1bf21f1fe80daded39923d2ff3ef3a0b79d15b35..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/newtonapi/dba_schema.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "dba_internal.hpp" -#include "NdbSchemaCon.hpp" - -static bool getNdbAttr(DBA_DataTypes_t, - Size_t, - int * attrSize, - int * arraySize, - AttrType * attrType); - -extern "C" -DBA_Error_t -DBA_CreateTable(const char* TableName, - int NbColumns, - const DBA_ColumnDesc_t Columns[] ){ - - if(DBA_TableExists(TableName)) - return DBA_NO_ERROR; - - NdbSchemaCon * schemaCon = NdbSchemaCon::startSchemaTrans(DBA__TheNdb); - if(schemaCon == 0){ - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: No schema transaction"); - return DBA_NDB_ERROR; - } - - NdbSchemaOp * schemaOp = schemaCon->getNdbSchemaOp(); - if(schemaOp == 0){ - NdbSchemaCon::closeSchemaTrans(schemaCon); - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: No schema op"); - return DBA_NDB_ERROR; - } - - if(schemaOp->createTable( TableName, - 8, // Data Size - TupleKey, - 2, // Index size - All, - 6, - 78, - 80, - 1, - false) == -1){ - NdbSchemaCon::closeSchemaTrans(schemaCon); - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: Create table failed"); - return DBA_NDB_ERROR; - } - - for (int i = 0; i < NbColumns; i++){ - int attrSize; - int arraySize; - AttrType attrType; - - if(!getNdbAttr(Columns[i].DataType, Columns[i].Size, - &attrSize, - &arraySize, - &attrType)){ - NdbSchemaCon::closeSchemaTrans(schemaCon); - DBA__SetLatestError(DBA_APPLICATION_ERROR, 0, - "Invalid datatype/size combination"); - return DBA_APPLICATION_ERROR; - } - - if(schemaOp->createAttribute( Columns[i].Name, - Columns[i].IsKey ? TupleKey : NoKey, - attrSize, - arraySize, - attrType) == -1){ - NdbSchemaCon::closeSchemaTrans(schemaCon); - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: Create attribute failed"); - return DBA_NDB_ERROR; - } - } - - if(schemaCon->execute() == -1){ - NdbSchemaCon::closeSchemaTrans(schemaCon); - DBA__SetLatestError(DBA_NDB_ERROR, 0, - "Internal NDB error: Execute schema failed"); - return DBA_NDB_ERROR; - } - - NdbSchemaCon::closeSchemaTrans(schemaCon); - - return DBA_NO_ERROR; -} - -DBA_Error_t -DBA_DropTable( char* TableName ){ - return DBA_NOT_IMPLEMENTED; -} - -Boolean_t -DBA_TableExists( const char* TableName ){ - NdbDictionary::Dictionary * dict = DBA__TheNdb->getDictionary(); - if(dict == 0){ - return 0; - } - - const NdbDictionary::Table * tab = dict->getTable(TableName); - if(tab == 0){ - return 0; - } - return 1; -} - -static -bool -getNdbAttr(DBA_DataTypes_t type, - Size_t size, - int * attrSize, - int * arraySize, - AttrType * attrType) { - - if(type == DBA_CHAR){ - * attrType = String; - * attrSize = 8; - * arraySize = size; - return true; - } - - * attrType = Signed; - if((size % 4) == 0){ - * attrSize = 32; - * arraySize = size / 4; - return true; - } - - * attrSize = 8; - * arraySize = size; - - return true; -} diff --git a/storage/ndb/src/old_files/rep/ExtSender.cpp b/storage/ndb/src/old_files/rep/ExtSender.cpp deleted file mode 100644 index cf31001a85f16c46646dba32542757fd89a20fc3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/ExtSender.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "ExtSender.hpp" - -/***************************************************************************** - * Constructor / Destructor / Init / Get / Set - *****************************************************************************/ - -/** - * @todo: signalErrorHandler is not finished. Just infrastructure. - */ - -ExtSender::ExtSender() { - m_tf = NULL; - m_nodeId = 0; - m_ownRef = 0; -} - -ExtSender::~ExtSender() { - if (m_tf) delete m_tf; -} - -void -ExtSender::setNodeId(Uint32 nodeId) -{ -#if 0 - ndbout_c("ExtSender: Set nodeid to %d", nodeId); -#endif - - m_nodeId = nodeId; -} - -Uint32 -ExtSender::getOwnRef() const -{ - if(!m_ownRef) REPABORT("No m_ownRef set"); - - return m_ownRef; -} - -void -ExtSender::setOwnRef(Uint32 ref) -{ - // Can only be set once - if (m_ownRef != 0) REPABORT("Trying to change m_ownRef"); - - m_ownRef = ref; -} - -/***************************************************************************** - * Usage - *****************************************************************************/ - -int -ExtSender::sendSignal(class NdbApiSignal * s) { -#if 0 - ndbout_c("ExtSender: Sending signal %d to %d", - s->readSignalNumber(), m_nodeId); -#endif - - if (m_tf == NULL || m_nodeId == 0 || s==0) abort(); - m_tf->lock_mutex(); - int retvalue = m_tf->sendSignal(s, m_nodeId); - if (retvalue) { - RLOG(("sendSignal returned %d for send to node %d", retvalue, m_nodeId)); - } -#if 0 - ndbout_c("ExtSender: Sent signal to %d", m_nodeId); -#endif - m_tf->unlock_mutex(); - return retvalue; -} - -int -ExtSender::sendFragmentedSignal(NdbApiSignal * s, - LinearSectionPtr ptr[3], - Uint32 sections) { - if (m_tf == NULL || m_nodeId == 0) abort(); - m_tf->lock_mutex(); - int retvalue = m_tf->sendFragmentedSignal(s, m_nodeId, ptr, sections); - if (retvalue) { - RLOG(("sendFragmentedSignal returned %d for send to node %d", - retvalue, m_nodeId)); - } - m_tf->unlock_mutex(); - return retvalue; -} - -/** - * Check that TransporterFacade is connected to at least one DB node - */ -bool -ExtSender::connected(Uint32 timeOutMillis){ -#if 0 - ndbout_c("ExtSender: Waiting for remote component to be ready!"); -#endif - - NDB_TICKS start = NdbTick_CurrentMillisecond(); - NDB_TICKS now = start; - // while(m_tf->theClusterMgr->getNoOfConnectedNodes() == 0 && - while((m_tf->get_an_alive_node() == 0) && - (timeOutMillis == 0 || (now - start) < timeOutMillis)){ - NdbSleep_MilliSleep(100); - now = NdbTick_CurrentMillisecond(); - } - return m_tf->theClusterMgr->getNoOfConnectedNodes() > 0; -} - -bool -ExtSender::connected(Uint32 timeOutMillis, Uint32 nodeId){ - NDB_TICKS start = NdbTick_CurrentMillisecond(); - NDB_TICKS now = start; - - // while(m_tf->theClusterMgr->getNoOfConnectedNodes() == 0 && - while((m_tf->get_node_alive(nodeId) != 0) && - (timeOutMillis == 0 || (now - start) < timeOutMillis)){ - NdbSleep_MilliSleep(100); - now = NdbTick_CurrentMillisecond(); - } - return m_tf->theClusterMgr->getNoOfConnectedNodes() > 0; -} - -NdbApiSignal * -ExtSender::getSignal() -{ - /** - * @todo This should use some kind of list of NdbApiSignals, - * similar to the NDBAPI and the MGRSRVR. - * The best thing would be to have set of code - * shared between the programs. - * Thus the NDBAPI and MGMSRVR should be refactored. - * /Lars - */ - return new NdbApiSignal(getOwnRef()); -} diff --git a/storage/ndb/src/old_files/rep/ExtSender.hpp b/storage/ndb/src/old_files/rep/ExtSender.hpp deleted file mode 100644 index 0bdabd68f3795cd8422bbb9c29dd75d1290192cb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/ExtSender.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef EXT_SENDER_HPP -#define EXT_SENDER_HPP - -#include <NdbSleep.h> -#include <TransporterFacade.hpp> -#include <NdbApiSignal.hpp> -#include <rep/rep_version.hpp> - -/** - * @todo Johan comment: - * - * ext->sendSignal should return something if send failed. - * I.e., i think all methods sending a signal should return int - * so that we can take care of errors. ALternatively take care of - * the error like this: - * if(ext->sendSignal(..) < 0 ) - * handleSignalError(...) - * - * or a combination.... - * - * Should go through all places that sends signals and check that - * they do correct error handling. - */ - -/** - * @class ExtSender - * @brief Manages connection to a transporter facade - */ -class ExtSender { -public: - /*************************************************************************** - * Constructor / Destructor / Init / Get / Set (Only set once!) - ***************************************************************************/ - ExtSender(); - ~ExtSender(); - - void setTransporterFacade(TransporterFacade * tf) { m_tf = tf; } - void setNodeId(Uint32 nodeId); - Uint32 getOwnRef() const; - void setOwnRef(Uint32 ref); - - /*************************************************************************** - * Usage - ***************************************************************************/ - int sendSignal(NdbApiSignal * s); - int sendFragmentedSignal(NdbApiSignal * s, LinearSectionPtr ptr[3], - Uint32 sections); - - bool connected(Uint32 TimeOutInMilliSeconds); - bool connected(Uint32 TimeOutInMilliSeconds, Uint32 nodeId); - - NdbApiSignal * getSignal(); - -private: - TransporterFacade * m_tf; - Uint32 m_nodeId; - Uint32 m_ownRef; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/Makefile b/storage/ndb/src/old_files/rep/Makefile deleted file mode 100644 index 9688a68ec74264a3ea4e8b6677bb5352b5568c15..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -include .defs.mk - -# -# This "kernel" type should be removed (only need types) -# -TYPE := repserver kernel - -DIRS := adapters storage state transfer repapi - -BIN_TARGET := ndb_rep - -BIN_TARGET_LIBS := -BIN_TARGET_ARCHIVES += editline repstorage repadapters reprequestor reptransfer mgmapi NDB_API mgmsrvcommon - -SOURCES = \ - RepMain.cpp \ - Requestor.cpp \ - RequestorSubscriptions.cpp \ - \ - RepComponents.cpp \ - RepCommandInterpreter.cpp \ - RepApiService.cpp \ - RepApiInterpreter.cpp \ - SignalQueue.cpp \ - ExtSender.cpp \ - dbug_hack.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/NodeConnectInfo.hpp b/storage/ndb/src/old_files/rep/NodeConnectInfo.hpp deleted file mode 100644 index 403f92a59994471e42f2b61161a85cb6accc996f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/NodeConnectInfo.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NODE_CONNECTINFO_HPP -#define NODE_CONNECTINFO_HPP - -#include <ndb_types.h> - -struct NodeConnectInfo { - NodeConnectInfo(Uint16 n, bool c): nodeId(n), connected(c) {}; - Uint32 nodeId; - bool connected; -}; - - -#endif diff --git a/storage/ndb/src/old_files/rep/README b/storage/ndb/src/old_files/rep/README deleted file mode 100644 index 7be5e230eb3f27a4669a05295fd33874ee5dcd5d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/README +++ /dev/null @@ -1,147 +0,0 @@ - =========================================== - MySQL Replication Servers - Lars Thalmann and Johan Andersson - 2003 MySQL AB - =========================================== - -------------------------------------------------------------------------------- - - PRIMARY SYSTEM STANDBY SYSTEM - REPLICATION SERVER REPLICATION SERVER - (PS or SOURCE SYSTEM) (SS or DESTINATION SYSTEM) - +------------------+ +-------------------------+ - | RepMain | | RepMain [Requests] | - | | +-------------------------+ - | | | Requestor [Executes] | - +------------------+ +-------------------------+ - PS --- | ExtNDB | TransPS | --- | TransSS | AppNDB | --- SS - +------------------+ +-------------------------+ - (GCIContainer) (GCIContainer) - (RepState) - - Figure 1: Replication Server Threads - -Component List --------------- -RepMain - Main thread that runs command-line interpreter [Requests] - -Requestor - Thread that runs RepState::execute [Executes] - -ExtNDB - Extracts transaction epochs from NDB Cluster - -TransPS, TransSS - Transfers information (control and epoch buffers) between - Replication Servers. - -AppNDB - Applies transaction epochs to NDB Cluster - -------------------------------------------------------------------------------- - - RepState Control - Object - +------------------+ - | RepState | - | [Requests] | - | [Executes] | - +------------------+ - | RepStateRequest | --- ExtSender - +------------------+ - - Figure 2: RepState Object - - -The RepState object is shared by all components. - - -------------------------------------------------------------------------------- - -Dependent Directories ---------------------- -rep/adapters Appliers and Extractors - All code dependent on the database system - -rep/transfer - Depends on NDB transporters - -rep/state - Shared resources for all components - -Independent Directories ------------------------ -rep/storage Storage of epochs - Should not depend on any transporters/NDB specific - -rep/repstate - Should only have a reference to an ExtSender for the external PS REP node - - -------------------------------------------------------------------------------- - -Replication Teminology ----------------------- -GLOBAL CHECKPOINT <global checkpoint id - gci> -A global checkpoint is a point in time when all database server -are synchronized. - -NODE -A database server with information. - -NODE GROUP <node group id> -A set of database servers, all storing the same information. - -SUBSCRIPTION <subscription id>. -A "subscription" is a collection of services that a source system -provides. The main to services belonging to a subscription are -"log" and "scan". Log provides the replication servers with -log entries (epochs) and scan provides the replication servers -with scanned data (also stored in epochs). - -EPOCH <subscription id, gci> -An "epoch" is a log of all database changes between two time points. -(An epoch can have redundant log entries.) An epoch is named by the -number of the time slice between the two time points. - -EPOCH BUFFER <subscription id, gci, node group id> -An "epoch buffer" is a part of the log belonging to an epoch. An -epoch buffer does not contain any redundancy. - -Two epoch buffers with the same subscription id and gci can be -"complements" or "duplicates" to each other. If they are complements, -they store different information, if they are duplicates then they -store equivalent information (the information need not be identical, -but it is equivalent for the purpose of restoring the original -information). If they are duplicates then they have the same name, -i.e. same subscription id, gci, and node group id. - -CHANNEL <subscription id> -A "channel" is a collection of epoch buffers belonging to -a specific subscription. (The channel can exist before it is -assigned to a subscription.) - -SUBSCRIPTION CONSISTENT -A database is "subscription consistent" or "consistent with respect -to a subscription" if ... - -Architectural Terminology -------------------------- -ADAPTER -An "adapter" is either an applier or an extractor. - -APPLIER -An "applier" is a a collection of threads in the replication server -that applies epochs to a destination database system. - -EXTRACTOR -An "extractor" is a collection of theads in the replication server -that receives epochs from a source database system. - -TRANSFER COMPONENT -A "transfer component" is a thread in the replication server that is -responsible for the connection with another replication server. - -REQUESTOR -A thread in the replication server that controls replication. diff --git a/storage/ndb/src/old_files/rep/RepApiInterpreter.cpp b/storage/ndb/src/old_files/rep/RepApiInterpreter.cpp deleted file mode 100644 index 6e6f150713a3835628064db2c52f2daefb004c4e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepApiInterpreter.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepApiInterpreter.hpp" -#include <signaldata/GrepImpl.hpp> - -RepApiInterpreter::RepApiInterpreter(RepComponents * comps, int port) -{ - m_repComponents = comps; - m_repState = comps->getRepState(); - m_port = port; - ss = new SocketServer(); - serv = new RepApiService(*this); -} - - -RepApiInterpreter::~RepApiInterpreter() -{ -} - -void -RepApiInterpreter::startInterpreter() -{ - if(!ss->setup(serv, m_port)){ - sleep(1); - delete ss; - delete serv; - } - ss->startServer(); -} - - -void -RepApiInterpreter::stopInterpreter() -{ - delete ss; -} - - -Properties * -RepApiInterpreter::execCommand(const Properties & props) -{ - Properties * result = new Properties(); - Uint32 req = 0; - Uint32 epoch = 0; - props.get("request", &req); - props.get("epoch", &epoch); - GrepError::Code err = m_repState->protectedRequest((GrepReq::Request)req, - epoch); - result->put("err", err); - return result; -} - -Properties * -RepApiInterpreter::getStatus() -{ - - return m_repState->getStatus(); -} - - -Properties * -RepApiInterpreter::query(Uint32 counter, Uint32 replicationId) -{ - return m_repState->query((QueryCounter)counter, replicationId); -} - diff --git a/storage/ndb/src/old_files/rep/RepApiInterpreter.hpp b/storage/ndb/src/old_files/rep/RepApiInterpreter.hpp deleted file mode 100644 index 78f190156b3e2cee9dd3760cc3fb97901fba3164..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepApiInterpreter.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REP_API_INTERPRETER_HPP -#define REP_API_INTERPRETER_HPP - -#include <editline/editline.h> - -#include <rep/RepComponents.hpp> -#include <rep/state/RepState.hpp> -#include <rep/RepApiService.hpp> -#include <signaldata/GrepImpl.hpp> -#include <Properties.hpp> - -/** - * @class RepCommandInterpreter - * @brief - */ - -class RepApiInterpreter { -public: - RepApiInterpreter(class RepComponents * comps, int port); - ~RepApiInterpreter(); - void startInterpreter(); - void stopInterpreter(); - Properties * execCommand(const Properties & props); - Properties * getStatus(); - Properties * query(Uint32 counter, Uint32 replicationId); - bool readAndExecute(); - -private: - char * readline_gets() const; - void request(Uint32 request); - int m_port; - class RepComponents * m_repComponents; - class RepState * m_repState; - SocketServer * ss; - RepApiService * serv; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/RepApiService.cpp b/storage/ndb/src/old_files/rep/RepApiService.cpp deleted file mode 100644 index d07f7a5937526bd3f297916562bef0093b73ebf2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepApiService.cpp +++ /dev/null @@ -1,318 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include <Parser.hpp> -#include <NdbOut.hpp> -#include <Properties.hpp> -#include <socket_io.h> -#include "RepApiService.hpp" -#include "RepApiInterpreter.hpp" -#include "repapi/repapi.h" -#include <NdbMutex.h> -#include <OutputStream.hpp> - -/** - const char * name; - const char * realName; - const Type type; - const ArgType argType; - const ArgRequired argRequired; - const ArgMinMax argMinMax; - const int minVal; - const int maxVal; - void (T::* function)(const class Properties & args); - const char * description; -*/ - -#define REP_CMD(name, fun, desc) \ - { name, \ - 0, \ - ParserRow<RepApiSession>::Cmd, \ - ParserRow<RepApiSession>::String, \ - ParserRow<RepApiSession>::Optional, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - 0, 0, \ - fun, \ - desc } - -#define REP_ARG(name, type, opt, desc) \ - { name, \ - 0, \ - ParserRow<RepApiSession>::Arg, \ - ParserRow<RepApiSession>::type, \ - ParserRow<RepApiSession>::opt, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - desc } - -#define REP_ARG2(name, type, opt, min, max, desc) \ - { name, \ - 0, \ - ParserRow<RepApiSession>::Arg, \ - ParserRow<RepApiSession>::type, \ - ParserRow<RepApiSession>::opt, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - min, max, \ - 0, \ - desc } - -#define REP_END() \ - { 0, \ - 0, \ - ParserRow<RepApiSession>::Arg, \ - ParserRow<RepApiSession>::Int, \ - ParserRow<RepApiSession>::Optional, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - 0 } - -#define REP_CMD_ALIAS(name, realName, fun) \ - { name, \ - realName, \ - ParserRow<RepApiSession>::CmdAlias, \ - ParserRow<RepApiSession>::Int, \ - ParserRow<RepApiSession>::Optional, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - 0 } - -#define REP_ARG_ALIAS(name, realName, fun) \ - { name, \ - realName, \ - ParserRow<RepApiSession>::ArgAlias, \ - ParserRow<RepApiSession>::Int, \ - ParserRow<RepApiSession>::Optional, \ - ParserRow<RepApiSession>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - 0 } - - -const -ParserRow<RepApiSession> commands[] = -{ - - REP_CMD("rep" , &RepApiSession::execCommand, ""), - REP_ARG("request", Int, Mandatory, "Grep::Request."), - REP_ARG("id", Int, Mandatory, "Replication id "), - REP_ARG("epoch", Int, Optional, "Epoch. Used by stop epoch ..."), - - REP_CMD("rep status" , &RepApiSession::getStatus, ""), - REP_ARG("request", Int, Optional, "Grep::Request."), - - REP_CMD("rep query" , &RepApiSession::query, ""), - REP_ARG("id", Int, Mandatory, "Replication Id"), - REP_ARG("counter", Int, Mandatory, "QueryCounter."), - REP_ARG("request", Int, Mandatory, "Grep::Request."), - - REP_END() -}; -RepApiSession::RepApiSession(NDB_SOCKET_TYPE sock, - class RepApiInterpreter & rep) - : SocketServer::Session(sock) - , m_rep(rep) -{ - m_input = new SocketInputStream(sock); - m_output = new SocketOutputStream(sock); - m_parser = new Parser<RepApiSession>(commands, *m_input, true, true, true); -} - -RepApiSession::RepApiSession(FILE * f, class RepApiInterpreter & rep) - : SocketServer::Session(1) - , m_rep(rep) -{ - m_input = new FileInputStream(f); - m_parser = new Parser<RepApiSession>(commands, *m_input, true, true, true); -} - -RepApiSession::~RepApiSession() -{ - delete m_input; - delete m_parser; -} - -void -RepApiSession::runSession() -{ - Parser_t::Context ctx; - while(!m_stop){ - m_parser->run(ctx, * this); - if(ctx.m_currentToken == 0) - break; - - switch(ctx.m_status){ - case Parser_t::Ok: - for(size_t i = 0; i<ctx.m_aliasUsed.size(); i++) - ndbout_c("Used alias: %s -> %s", - ctx.m_aliasUsed[i]->name, ctx.m_aliasUsed[i]->realName); - break; - case Parser_t::NoLine: - case Parser_t::EmptyLine: - break; - default: - break; - } - } - NDB_CLOSE_SOCKET(m_socket); -} - -void -RepApiSession::execCommand(Parser_t::Context & /* unused */, - const class Properties & args) -{ - Uint32 err; - Uint32 replicationId; - args.get("id", &replicationId); - Properties * result = m_rep.execCommand(args); - if(result == NULL) { - m_output->println("global replication reply"); - m_output->println("result: %d", -1); - m_output->println("id: %d",replicationId); - m_output->println(""); - return; - } - result->get("err", &err); - m_output->println("global replication reply"); - m_output->println("result: %d", err); - m_output->println("id: %d", 0); - m_output->println(""); - delete result; -} - - -void -RepApiSession::getStatus(Parser_t::Context & /* unused */, - const class Properties & args) -{ - Uint32 err; - Properties * result = m_rep.getStatus(); - result->get("err", &err); - Uint32 subId; - result->get("subid", &subId); - Uint32 subKey; - result->get("subkey", &subKey); - Uint32 connected_rep; - result->get("connected_rep", &connected_rep); - Uint32 connected_db; - result->get("connected_db", &connected_db); - Uint32 state; - result->get("state", &state); - Uint32 state_sub; - result->get("state", &state_sub); - - m_output->println("global replication status reply"); - m_output->println("result: %d",0); - m_output->println("id: %d",0); - m_output->println("subid: %d", subId); - m_output->println("subkey: %d", subKey); - m_output->println("connected_rep: %d", connected_rep); - m_output->println("connected_db: %d", connected_db); - m_output->println("state_sub: %d", state_sub); - m_output->println("state: %d", state); - m_output->println(""); - delete result; -} - - -void -RepApiSession::query(Parser_t::Context & /* unused */, - const class Properties & args) -{ - Uint32 err; - Uint32 counter, replicationId; - args.get("counter", &counter); - args.get("id", &replicationId); - Properties * result = m_rep.query(counter, replicationId); - if(result == NULL) { - m_output->println("global replication query reply"); - m_output->println("result: %s","Failed"); - m_output->println("id: %d",replicationId); - m_output->println(""); - return; - } - - BaseString first; - BaseString last; - Uint32 subid = 0, subkey = 0, no_of_nodegroups = 0; - Uint32 connected_rep = 0, connected_db = 0; - Uint32 state = 0 , state_sub = 0; - result->get("err", &err); - result->get("no_of_nodegroups", &no_of_nodegroups); - result->get("subid", &subid); - result->get("subkey", &subkey); - result->get("connected_rep", &connected_rep); - result->get("connected_db", &connected_db); - result->get("first", first); - result->get("last", last); - result->get("state", &state); - result->get("state_sub", &state_sub); - m_output->println("global replication query reply"); - m_output->println("result: %s","Ok"); - m_output->println("id: %d",replicationId); - m_output->println("no_of_nodegroups: %d",no_of_nodegroups); - m_output->println("subid: %d", subid); - m_output->println("subkey: %d", subkey); - m_output->println("connected_rep: %d", connected_rep); - m_output->println("connected_db: %d", connected_db); - m_output->println("state_sub: %d", state_sub); - m_output->println("state: %d", state); - m_output->println("first: %s", first.c_str()); - m_output->println("last: %s", last.c_str()); - m_output->println(""); - delete result; -} - - - -static const char * -propToString(Properties *prop, const char *key) { - static char buf[32]; - const char *retval = NULL; - PropertiesType pt; - - prop->getTypeOf(key, &pt); - switch(pt) { - case PropertiesType_Uint32: - Uint32 val; - prop->get(key, &val); - snprintf(buf, sizeof buf, "%d", val); - retval = buf; - break; - case PropertiesType_char: - const char *str; - prop->get(key, &str); - retval = str; - break; - default: - snprintf(buf, sizeof buf, "(unknown)"); - retval = buf; - } - return retval; -} - -void -RepApiSession::printProperty(Properties *prop, const char *key) { - m_output->println("%s: %s", key, propToString(prop, key)); -} - -void -RepApiSession::stopSession(){ - -} diff --git a/storage/ndb/src/old_files/rep/RepApiService.hpp b/storage/ndb/src/old_files/rep/RepApiService.hpp deleted file mode 100644 index e1137e53258550273e2b92fb8117a6855d068fbe..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepApiService.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REP_APISERVICE_HPP -#define REP_APISERVICE_HPP - -#include <Parser.hpp> -#include <InputStream.hpp> -#include <SocketServer.hpp> - -class RepApiInterpreter; - -class RepApiSession : public SocketServer::Session { - typedef Parser<RepApiSession> Parser_t; - - class RepApiInterpreter & m_rep; - InputStream *m_input; - OutputStream *m_output; - Parser_t *m_parser; - -void printProperty(Properties *prop, const char *key); -public: - RepApiSession(NDB_SOCKET_TYPE, class RepApiInterpreter &); - RepApiSession(FILE * f, class RepApiInterpreter & rep); - ~RepApiSession(); - - virtual void runSession(); - virtual void stopSession(); - - void execCommand(Parser_t::Context & ctx, const class Properties & args); - void getStatus(Parser_t::Context & ctx, const class Properties & args); - void query(Parser_t::Context & ctx, const class Properties & args); - -}; - -class RepApiService : public SocketServer::Service { - class RepApiInterpreter & m_rep; -public: - RepApiService(class RepApiInterpreter & rep) : m_rep(rep) {} - - RepApiSession * newSession(NDB_SOCKET_TYPE theSock){ - return new RepApiSession(theSock, m_rep); - } -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/RepCommandInterpreter.cpp b/storage/ndb/src/old_files/rep/RepCommandInterpreter.cpp deleted file mode 100644 index a0daf9529ab18f169f7cad1e0bc510b443607786..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepCommandInterpreter.cpp +++ /dev/null @@ -1,456 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepCommandInterpreter.hpp" - -static const char* -helpTextRep = -"+-------------------------------------------------------------------------+\n" -"| MySQL Replication Server |\n" -"| Commands should be executed on the standby Replication Server |\n" -"+-------------------------------------------------------------------------+\n" -"| Simple Commands |\n" -"+-------------------------------------------------------------------------+\n" -"| START Start replication |\n" -"| STATUS Show replication status |\n" -"+-------------------------------------------------------------------------+\n" -"| Advanced Commands |\n" -"+-------------------------------------------------------------------------+\n" -"| STOP <epoch no> Stop replication after epoch number <epoch no> |\n" -"| STOP IMMEDIATELY Stop replication after applying the current epoch |\n" -"| ADD TABLE <db>/<schema>/<tablename> |\n" -"| Note: <db>/<schema>/<tablename> is case sensitive! |\n" -"| Use 'STATUS' to see added tables. |\n" -"| REMOVE TABLE <db>/<schema>/<tablename> |\n" -"| Note: <db>/<schema>/<tablename> is case sensitive! |\n" -"| ENABLE <protocol> Starts protocol |\n" -"| DISABLE <protocol> Stops protocol |\n" -"| DEBUG Toggle logging of replication messages on console |\n" -"| |\n" -"| <protocol> ::= REQUESTOR | TRANSFER | APPLY | DELETE |\n" -"+-------------------------------------------------------------------------+\n" -; - -/** - * @todo -"| <protocol> ::= SUBID | SUBSCRIPTION |\n" -"| <protocol> ::= METALOG | METASCAN | DATALOG | DATASCAN |\n" -"| <system> ::= PRIMARY | STANDBY | TWOWAY |\n" -"| CONNECT <system> Connects to NDB Cluster and other replication server |\n" -"| DELETE Removes all epochs stored in replication servers |\n" -"| DROP <tableid> Drops table in standby system identified by table id |\n" -"| <epoch> ::= Any integer (naming the last epoch to be applied) |\n" -*/ - -RepCommandInterpreter::RepCommandInterpreter(RepComponents * comps) -{ - m_repComponents = comps; - m_repState = comps->getRepState(); -} - -RepCommandInterpreter::~RepCommandInterpreter() -{ -} - -/** - * Read a string, and return a pointer to it. - * - * @return NULL on EOF. - */ -char * -RepCommandInterpreter::readline_gets() const -{ - static char *line_read = (char *)NULL; - - // Disable the default file-name completion action of TAB - // rl_bind_key ('\t', rl_insert); - - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - NdbMem_Free(line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline ("REP> "); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); -} - -bool emptyString(const char* s) -{ - if (s == NULL) { - return true; - } - - for (unsigned int i = 0; i < strlen(s); ++i) { - if (! isspace(s[i])) { - return false; - } - } - - return true; -} - -/** - * Converts a string to a Uint32 pointed value! - */ -bool convert(const char* s, Uint32 * val) -{ - if (s == NULL) { - return false; - } - - if (strlen(s) == 0) { - return false; - } - - errno = 0; - char* p; - long v = strtol(s, &p, 10); - if (errno != 0) { - return false; - } - if (p != &s[strlen(s)]) { - return false; - } - - *val = v; - return true; -} - -void -printError(GrepError::Code err) -{ - if (err == GrepError::NO_ERROR) { ndbout << "Ok" << endl; } - else { ndbout << GrepError::getErrorDesc(err) << endl; } -} - -bool -RepCommandInterpreter::readAndExecute() -{ - GrepError::Code err; - - char* _line = readline_gets(); - char * line; - if(_line == NULL) { - ndbout << endl; - return true; - } - - line = strdup(_line); - - if (emptyString(line)) { - return true; - } - - /* I have to uncomment this, since otherwise <db>/<schema>/<table> - is converted to capitals, but it is case sensitive! - for (unsigned int i = 0; i < strlen(line); ++i) { - line[i] = toupper(line[i]); - } - */ - // if there is anything in the line proceed - char* firstToken = strtok(line, " "); - for (unsigned int i = 0; i < strlen(firstToken); ++i) { - firstToken[i] = toupper(firstToken[i]); - } - char* allAfterFirstToken = strtok(NULL, "\0"); - - /** - * Commands for REP Client only - */ - if (strcmp(firstToken, "ADD") == 0) { - if (m_repState->m_channel.getStateSub() != - Channel::NO_SUBSCRIPTION_EXISTS) { - ndbout_c("Subscription already exists"); - ndbout_c("Tables must be added before subscription exists"); - return true; - } - char * secondToken = strtok(allAfterFirstToken, " "); - char * fullTableName = strtok(NULL, "\0"); - if(fullTableName == NULL) { - ndbout_c("Table name not specified"); - return true; - } - for (unsigned int i = 0; i < strlen(secondToken); ++i) { - secondToken[i] = toupper(secondToken[i]); - } - - if (strcmp(secondToken, "TABLE") == 0) { - err = m_repState->protectedAddTable(fullTableName); - printError(err); - return true; - } - return true; - } - if (strcmp(firstToken, "REMOVE") == 0) { - if (m_repState->m_channel.getStateSub() != - Channel::NO_SUBSCRIPTION_EXISTS) { - ndbout_c("Subscription already exists"); - ndbout_c("Tables can not be removed after subscription is created"); - return true; - } - char * secondToken = strtok(allAfterFirstToken, " "); - char * fullTableName = strtok(NULL, "\0"); - if(fullTableName == NULL) { - ndbout_c("Table name not specified"); - return true; - } - for (unsigned int i = 0; i < strlen(secondToken); ++i) { - secondToken[i] = toupper(secondToken[i]); - } - - if (strcmp(secondToken, "TABLE") == 0) { - err = m_repState->protectedRemoveTable(fullTableName); - printError(err); - return true; - } - return true; - } - /** - * now, we can convert allAfterFirstToken to capitals - */ - if(allAfterFirstToken != 0) { - for (unsigned int i = 0; i < strlen(allAfterFirstToken); ++i) { - allAfterFirstToken[i] = toupper(allAfterFirstToken[i]); - } - } - if (strcmp(firstToken, "CONNECT") == 0) { - - if (strcmp(allAfterFirstToken, "PRIMARY") == 0) { - m_repComponents->connectPS(); - return true; - } - if (strcmp(allAfterFirstToken, "STANDBY") == 0) { - m_repComponents->connectPS(); - return true; - } - if (strcmp(allAfterFirstToken, "TWOWAY") == 0) { - m_repComponents->connectPS(); - return true; - } - ndbout_c("Unknown argument: %s to command: %s", - allAfterFirstToken, firstToken); - return true; - } - - if (strcmp(firstToken, "HELP") == 0) { - ndbout << helpTextRep; - return true; - } - - if (strcmp(firstToken, "QUIT") == 0 || - strcmp(firstToken, "BYE") == 0 || - strcmp(firstToken, "EXIT") == 0) { - return false; - } - - /** - * Commands for REP Server API - */ - if (strcmp(firstToken, "STATUS") == 0 || - strcmp(firstToken, "INFO") == 0 || - strcmp(firstToken, "I") == 0) { - m_repState->protectedRequest(GrepReq::STATUS, 0); - return true; - } - - if (strcmp(firstToken, "DEBUG") == 0) { - if (replogEnabled) - { - ndbout_c("Debugging disabled."); - replogEnabled = false; - } - else - { - ndbout_c("Debugging enabled."); - replogEnabled = true; - } - return true; - } - - if (strcmp(firstToken, "ENABLE") == 0) { - if (strcmp(allAfterFirstToken, "REQUESTOR") == 0) { - err = m_repState->protectedRequest(GrepReq::START_REQUESTOR, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "TRANSFER") == 0) { - err = m_repState->protectedRequest(GrepReq::START_TRANSFER, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "APPLY") == 0) { - err = m_repState->protectedRequest(GrepReq::START_APPLY, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DELETE") == 0) { - err = m_repState->protectedRequest(GrepReq::START_DELETE, 0); - printError(err); - return true; - } - ndbout_c("Unknown argument: %s to command: %s", - allAfterFirstToken, firstToken); - return true; - } - - if (strcmp(firstToken, "DISABLE") == 0) { - if (strcmp(allAfterFirstToken, "REQUESTOR") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_REQUESTOR, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "TRANSFER") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_TRANSFER, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "APPLY") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_APPLY, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DELETE") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_DELETE, 0); - printError(err); - return true; - } - ndbout_c("Unknown argument: %s to command: %s", - allAfterFirstToken, firstToken); - return true; - } - - if (strcmp(firstToken, "START") == 0) { - if (allAfterFirstToken == NULL) { - err = m_repState->protectedRequest(GrepReq::START, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "SUBID") == 0) { - err = m_repState->protectedRequest(GrepReq::CREATE_SUBSCR, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "SUBSCR") == 0 || - strcmp(allAfterFirstToken, "SUBSCRIPTION") == 0) { - err = m_repState->protectedRequest(GrepReq::START_SUBSCR, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "METALOG") == 0) { - err = m_repState->protectedRequest(GrepReq::START_METALOG, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "METASCAN") == 0) { - err = m_repState->protectedRequest(GrepReq::START_METASCAN, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DATALOG") == 0) { - err = m_repState->protectedRequest(GrepReq::START_DATALOG, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DATASCAN") == 0) { - err = m_repState->protectedRequest(GrepReq::START_DATASCAN, 0); - printError(err); - return true; - } - ndbout_c("Unknown argument: %s to command: %s", - allAfterFirstToken, firstToken); - return true; - } - - if (strcmp(firstToken, "STOP") == 0) { - if (allAfterFirstToken == NULL) { - ndbout_c("Please use either 'STOP IMMEDIATELY' or 'STOP <epoch no>', " - "where\n<epoch no> is greater than or equal to " - "the last applied epoch."); - return true; - } - - char * secondToken = strtok(allAfterFirstToken, " "); - char * subscription = strtok(NULL, "\0"); - if (strcmp(secondToken, "SUBSCR") == 0 || - strcmp(secondToken, "SUBSCRIPTION") == 0) { - char * sSubId = strtok(subscription," "); - char * sSubKey = strtok(NULL, "\0"); - int subId = atoi(sSubId); - int subKey = atoi(sSubKey); - err = m_repState->protectedRequest(GrepReq::STOP_SUBSCR, subId, subKey ); - printError(err); - return true; - } - - if (strcmp(allAfterFirstToken, "SUBID") == 0) { - ndbout_c("Not implemented"); - return true; - } - - - if (strcmp(allAfterFirstToken, "METALOG") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_METALOG, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "METASCAN") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_METASCAN, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DATALOG") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_DATALOG, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "DATASCAN") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP_DATASCAN, 0); - printError(err); - return true; - } - if (strcmp(allAfterFirstToken, "IM") == 0 || - strcmp(allAfterFirstToken, "IMM") == 0 || - strcmp(allAfterFirstToken, "IMMEDIATELY") == 0) { - err = m_repState->protectedRequest(GrepReq::STOP, 0); - printError(err); - return true; - } - Uint32 stopEpoch; - if (convert(allAfterFirstToken, &stopEpoch)) { - err = m_repState->protectedRequest(GrepReq::STOP, stopEpoch); - printError(err); - return true; - } - - ndbout_c("Unknown argument: %s to command: %s", - allAfterFirstToken, firstToken); - return true; - } - - ndbout_c("Unknown Command: %s", firstToken); - ndbout_c("Type HELP for help."); - ndbout << endl; - return true; -} diff --git a/storage/ndb/src/old_files/rep/RepCommandInterpreter.hpp b/storage/ndb/src/old_files/rep/RepCommandInterpreter.hpp deleted file mode 100644 index 398a7c0318cfde693da8bf87c1259ec92796576a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepCommandInterpreter.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REP_COMMAND_INTERPRETER_HPP -#define REP_COMMAND_INTERPRETER_HPP - -#include <editline/editline.h> - -#include <rep/RepComponents.hpp> -#include <rep/state/RepState.hpp> - -/** - * @class RepCommandInterpreter - * @brief - */ - -class RepCommandInterpreter { -public: - RepCommandInterpreter(class RepComponents * comps); - ~RepCommandInterpreter(); - - bool readAndExecute(); - -private: - char * readline_gets() const; - void request(Uint32 request); - - class RepComponents * m_repComponents; - class RepState * m_repState; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/RepComponents.cpp b/storage/ndb/src/old_files/rep/RepComponents.cpp deleted file mode 100644 index 04b2e0e5fa5031f0e36db393d882bf482a121b35..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepComponents.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepComponents.hpp" - -RepComponents::RepComponents() -{ - /** - * @todo Fix proper reporting of errors - */ - m_connectStringPS = NULL; - m_connectStringSS = NULL; - - /** - * Phase 1: Containers, RepState - */ - m_gciContainer = new GCIContainer(MAX_NODE_GROUPS); - if (!m_gciContainer) REPABORT("Could not allocate object"); - m_gciContainerPS = new GCIContainerPS(MAX_NODE_GROUPS); - if (!m_gciContainerPS) REPABORT("Could not allocate object"); - m_repState = new RepState(); - if (!m_repState) REPABORT("Could not allocate object"); - - /** - * Phase 2: PS - */ - m_transPS = new TransPS(m_gciContainerPS); - if (!m_transPS) REPABORT("Could not allocate object"); - - - m_extAPI = new ExtAPI(); - if (!m_extAPI) REPABORT("Could not allocate object"); - - m_extNDB = new ExtNDB(m_gciContainerPS, m_extAPI); - if (!m_extNDB) REPABORT("Could not allocate object"); - - /** - * Phase 3: SS - */ - m_transSS = new TransSS(m_gciContainer, m_repState); - if (!m_transSS) REPABORT("Could not allocate object"); - m_appNDB = new AppNDB(m_gciContainer, m_repState); - if (!m_appNDB) REPABORT("Could not allocate object"); - - /** - * Phase 4: Requestor - */ - m_requestor = new Requestor(m_gciContainer, m_appNDB, m_repState); - if (!m_requestor) REPABORT("Could not allocate object"); - - /** - * Phase 5 - */ - m_repState->init(m_transSS->getRepSender()); - m_repState->setApplier(m_appNDB); - m_repState->setGCIContainer(m_gciContainer); - - m_requestor->setRepSender(m_transSS->getRepSender()); - - m_extNDB->setRepSender(m_transPS->getRepSender()); - - m_transPS->setGrepSender(m_extNDB->getGrepSender()); -} - -RepComponents::~RepComponents() -{ - if (m_requestor) delete m_requestor; - - if (m_appNDB) delete m_appNDB; - if (m_extNDB) delete m_extNDB; - if (m_extAPI) delete m_extAPI; - - if (m_repState) delete m_repState; - - if (m_transPS) delete m_transPS; - if (m_transSS) delete m_transSS; - - if (m_gciContainer) delete m_gciContainer; - if (m_gciContainerPS) delete m_gciContainerPS; -} - -int -RepComponents::connectPS() -{ - /** - * @todo Fix return values of this function - */ - - /** - * Phase 1: TransporterFacade 1, Block number: 2 (PS) - */ - if (!m_extNDB->init(m_connectStringPS)) return -1; - - /** - * Phase 2: TransporterFacade 2, Block number: 2 (PS) - */ - m_transPS->init(m_transSS->getTransporterFacade(), m_connectStringPS); - - return 0; -} - -int -RepComponents::connectSS() -{ - /** - * @todo Fix return values of this function - */ - - /** - * Phase 1: TransporterFacade 1, Block number: 1 (SS) - */ - m_appNDB->init(m_connectStringSS); - - /** - * Phase 2: TransporterFacade 2, Block number: 1 (SS) - */ - m_transSS->init(m_connectStringSS); - - /** - * Phase 3: Has no TransporterFacade, just starts thread - */ - m_requestor->init(); - - return 0; -} diff --git a/storage/ndb/src/old_files/rep/RepComponents.hpp b/storage/ndb/src/old_files/rep/RepComponents.hpp deleted file mode 100644 index ff0f29e21284b9a252441635eaa18174ad5d8593..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepComponents.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REPCOMPONENTS_HPP -#define REPCOMPONENTS_HPP - -#include <rep/adapters/ExtNDB.hpp> -#include <rep/adapters/AppNDB.hpp> -#include <rep/transfer/TransPS.hpp> -#include <rep/transfer/TransSS.hpp> -#include <rep/Requestor.hpp> -#include <rep/state/RepState.hpp> - -#include <rep/rep_version.hpp> - -/** - * Connection data - */ -class RepComponents { -public: - RepComponents(); - ~RepComponents(); - - int connectPS(); - int connectSS(); - - ExtNDB * m_extNDB; - ExtAPI * m_extAPI; - TransPS * m_transPS; - - TransSS * m_transSS; - AppNDB * m_appNDB; - - Requestor * m_requestor; - - GCIContainer * m_gciContainer; - GCIContainerPS * m_gciContainerPS; - - char * m_connectStringPS; - char * m_connectStringSS; - - RepState * getRepState() { return m_repState; } -private: - RepState * m_repState; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/RepMain.cpp b/storage/ndb/src/old_files/rep/RepMain.cpp deleted file mode 100644 index d9f057be9a19e525de3d1f14ab67ea7921eca895..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RepMain.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include <NdbApiSignal.hpp> -#include <getarg.h> - -#include <rep/RepComponents.hpp> - -#include "rep_version.hpp" -#include <rep/RepCommandInterpreter.hpp> -#include <rep/RepApiInterpreter.hpp> - - -int -main(int argc, const char **argv) -{ - RepComponents comps; - RepCommandInterpreter cmd(&comps); - - - int helpFlag = false; - int noConnectFlag = false; - int onlyPrimaryFlag = false; - int onlyStandbyFlag = false; - int port = 18000; - replogEnabled = false; - - struct getargs args[] = { - { "psc", '1', arg_string, &comps.m_connectStringPS, - "Connect string", "connectstring" }, - { "ssc", '2', arg_string, &comps.m_connectStringSS, - "Connect string", "connectstring" }, - { "port", 'p', arg_integer, &port, - "port for rep api. Default 18000", "" }, - { "usage", '?', arg_flag, &helpFlag, - "Print help", "" }, -/* @todo - { "noConnect", 'n', arg_flag, &noConnectFlag, - "Do not connect adapters", "" }, -*/ - { "debug", 'd', arg_flag, &replogEnabled, - "Enable debug printouts on console", "" }, - { "onlyStandby", 's', arg_flag, &onlyStandbyFlag, - "Let Replication Server view DBMS as standby (destination) system only", - "" } - }; - int num_args = sizeof(args) / sizeof(args[0]); - int optind = 0; - char desc[] = - "\nWhen working as a primary system node, this program receives\n"\ - "records from the primary NDB Cluster and forwards them to\n"\ - "the standby system.\n\n"\ - "When working as a standby system node, this program receives\n"\ - "records from another replication node and inserts them into\n"\ - "the standby NDB Cluster.\n\n"\ - "Example: ndb_rep --psc=\"nodeid=3;host=localhost:10000\"\n"; - - if(getarg(args, num_args, argc, argv, &optind) || - //argv[optind] == NULL || - helpFlag) - { - arg_printusage(args, num_args, argv[0], desc); - return -1; //NDBT_ProgramExit(NDBT_WRONGARGS); - } - - RepApiInterpreter api(&comps,port); - api.startInterpreter(); - - /************************** - * Command-line interface * - **************************/ - if (!noConnectFlag && !onlyPrimaryFlag) comps.connectSS(); - if (!noConnectFlag && !onlyStandbyFlag) comps.connectPS(); - - - while (true) { - if(!cmd.readAndExecute()) { - api.stopInterpreter(); - exit(1); - } - } -} diff --git a/storage/ndb/src/old_files/rep/Requestor.cpp b/storage/ndb/src/old_files/rep/Requestor.cpp deleted file mode 100644 index 3c93a6394a457050fe13338dcbe26a1ea7129945..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/Requestor.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Requestor.hpp" -#include "ConfigRetriever.hpp" - -#include <NdbApiSignal.hpp> - -#include <signaldata/RepImpl.hpp> -#include <signaldata/GrepImpl.hpp> -#include <signaldata/DictTabInfo.hpp> -#include <signaldata/GetTabInfo.hpp> -#include <signaldata/SumaImpl.hpp> - -#include <AttributeHeader.hpp> -#include <rep/rep_version.hpp> - -#define TIME_BETWEEN_EXECUTES_MS 250 - -/* - * @todo The requestor still has a TF, but this is not used... - * (We will need a (set of) TF(s) for REP-REP - * on the same system though....) - */ - - -/***************************************************************************** - * Constructor / Destructor / Init - *****************************************************************************/ -Requestor::Requestor(GCIContainer * gciContainer, - AppNDB * appNDB, - RepState * repState) -{ - m_gciContainer = gciContainer; - m_applier = appNDB; - m_repState = repState; - - //m_grepSender = new ExtSender(); - //if (!m_grepSender) REPABORT(""); - - m_repState->setSubscriptionRequests(&requestCreateSubscriptionId, - &requestCreateSubscription, - &requestRemoveSubscription); - m_repState->setIntervalRequests(&requestTransfer, - &requestApply, - &requestDeleteSS, - &requestDeletePS); - m_repState->setStartRequests(&requestStartMetaLog, - &requestStartDataLog, - &requestStartMetaScan, - &requestStartDataScan, - &requestEpochInfo); -} - -Requestor::~Requestor() { - //delete m_grepSender; -} - -bool -Requestor::init(const char * connectString) -{ - m_signalExecThread = NdbThread_Create(signalExecThread_C, - (void **)this, - 32768, - "Requestor_Service", - NDB_THREAD_PRIO_LOW); - - if (m_signalExecThread == NULL) - return false; - - return true; -} - -/***************************************************************************** - * Signal Queue Executor - *****************************************************************************/ - -void * -Requestor::signalExecThread_C(void *g) { - - Requestor *requestor = (Requestor*)g; - requestor->signalExecThreadRun(); - NdbThread_Exit(0); - - /* NOTREACHED */ - return 0; -} - -class SigMatch -{ -public: - int gsn; - void (Requestor::* function)(NdbApiSignal *signal); - - SigMatch() { gsn = 0; function = NULL; }; - - SigMatch(int _gsn, void (Requestor::* _function)(NdbApiSignal *signal)) { - gsn = _gsn; - function = _function; - }; - - bool check(NdbApiSignal *signal) { - if(signal->readSignalNumber() == gsn) - return true; - return false; - }; -}; - -void -Requestor::signalExecThreadRun() -{ - while(1) - { - /** - * @todo Here we would like to measure the usage size of the - * receive buffer of TransSS. If the buffer contains - * more than X signals (maybe 1k or 10k), then we should - * not do a protectedExecute. - * By having the usage size measure thingy, - * we avoid having the Requestor requesting more - * things than the TransSS can handle. - * /Lars - * - * @todo A different implementation of this functionality - * would be to send a signal to myself when the protected - * execute is finished. This solution could be - * discussed. - * /Lars - */ - m_repState->protectedExecute(); - NdbSleep_MilliSleep(TIME_BETWEEN_EXECUTES_MS); - } -} - -void -Requestor::sendSignalRep(NdbApiSignal * s) { - m_repSender->sendSignal(s); -} - -void -Requestor::execSignal(void* executorObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]){ - - Requestor * executor = (Requestor*)executorObj; - - const Uint32 gsn = signal->readSignalNumber(); - const Uint32 len = signal->getLength(); - - NdbApiSignal * s = new NdbApiSignal(executor->m_ownRef); - switch (gsn) { - case GSN_REP_GET_GCI_CONF: - case GSN_REP_GET_GCI_REQ: - case GSN_REP_GET_GCIBUFFER_REQ: - case GSN_REP_INSERT_GCIBUFFER_REQ: - case GSN_REP_CLEAR_SS_GCIBUFFER_REQ: - case GSN_REP_CLEAR_PS_GCIBUFFER_REQ: - case GSN_REP_DROP_TABLE_REQ: - case GSN_GREP_SUB_CREATE_REQ: - case GSN_GREP_SUB_START_REQ: - case GSN_GREP_SUB_SYNC_REQ: - case GSN_GREP_SUB_REMOVE_REQ: - case GSN_GREP_CREATE_SUBID_REQ: - s->set(0, PSREPBLOCKNO, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - default: - REPABORT1("Illegal signal received in execSignal", gsn); - } -#if 0 - ndbout_c("Requestor: Inserted signal into queue (GSN: %d, Len: %d)", - signal->readSignalNumber(), len); -#endif -} - -void -Requestor::execNodeStatus(void* obj, Uint16 nodeId, - bool alive, bool nfCompleted) -{ - //Requestor * thisObj = (Requestor*)obj; - - RLOG(("Node changed status (NodeId %d, Alive %d, nfCompleted %d)", - nodeId, alive, nfCompleted)); - - if(alive) { - /** - * Connected - set node as connected - * - * @todo Make it possible to have multiple External REP nodes - */ -#if 0 - for(Uint32 i=0; i<thisObj->m_nodeConnectList.size(); i++) { - if(thisObj->m_nodeConnectList[i]->nodeId == nodeId) - thisObj->m_nodeConnectList[i]->connected = true; - } - thisObj->m_grepSender->setNodeId(thisObj->m_nodeConnectList[0]->nodeId); -#endif - } - - if(!alive && !nfCompleted){ - /** - * ??? - */ - } - - if(!alive && nfCompleted){ - /** - * Re-connect - */ - } -} diff --git a/storage/ndb/src/old_files/rep/Requestor.hpp b/storage/ndb/src/old_files/rep/Requestor.hpp deleted file mode 100644 index 735d2094bde1cab503a53f14abbc99fd9b07b051..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/Requestor.hpp +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REQUESTOR_HPP -#define REQUESTOR_HPP - -#include <ndb_global.h> - -#include <TransporterDefinitions.hpp> -#include <TransporterFacade.hpp> -#include <ClusterMgr.hpp> -#include <API.hpp> -#include <Vector.hpp> -#include <GrepError.hpp> - -#include <rep/storage/GCIContainer.hpp> - -/** - * @todo Remove this dependency - */ -#include <rep/adapters/AppNDB.hpp> - -#include <rep/SignalQueue.hpp> -#include <rep/ExtSender.hpp> - - -/** - * @class Requestor - * @brief Connects to GREP Coordinator on the standby system - */ -class Requestor { -public: - /*************************************************************************** - * Constructor / Destructor / Init - ***************************************************************************/ - Requestor(GCIContainer * gciContainer, AppNDB * applier, RepState * repSt); - ~Requestor(); - bool init(const char * connectString = NULL); - - /*************************************************************************** - * Public Methods - ***************************************************************************/ - void setRepSender(ExtSender * es) { m_repSender = es; }; - -private: - static void * signalExecThread_C(void *); ///< SignalQueue executor thread - void signalExecThreadRun(); - - static void execSignal(void* executorObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]); - static void execNodeStatus(void* executorObj, NodeId, bool alive, - bool nfCompleted); - - void sendSignalRep(NdbApiSignal *); - void sendSignalGrep(NdbApiSignal *); - - void connectToNdb(); - - /*************************************************************************** - * Signal Executors - ***************************************************************************/ - void execREP_GET_GCIBUFFER_CONF(NdbApiSignal*); - void execREP_CLEAR_GCIBUFFER_REP(NdbApiSignal*); - void execREP_INSERT_GCIBUFFER_REQ(NdbApiSignal*); - void execREP_CLEAR_SS_GCIBUFFER_REQ(NdbApiSignal*); - void execREP_DROP_TABLE_REQ(NdbApiSignal*); - - /*************************************************************************** - * Signal Executors 2 - ***************************************************************************/ - void execGREP_CREATE_SUBID_CONF(NdbApiSignal*); - void execGREP_CREATE_SUBID_REF(NdbApiSignal*); - void createSubscription(NdbApiSignal*); - void createSubscriptionId(NdbApiSignal*); - void execGREP_SUB_CREATE_CONF(NdbApiSignal*); - void execGREP_SUB_CREATE_REF(NdbApiSignal*); - void execGREP_SUB_START_CONF(NdbApiSignal*); - void execGREP_SUB_START_REF(NdbApiSignal*); - void removeSubscription(NdbApiSignal*); - void execGREP_SUB_REMOVE_REF(NdbApiSignal*); - void execGREP_SUB_SYNC_CONF(NdbApiSignal*); - void execGREP_SUB_SYNC_REF(NdbApiSignal*); - void execREP_CLEAR_SS_GCIBUFFER_CONF(NdbApiSignal*); - void execREP_CLEAR_SS_GCIBUFFER_REF(NdbApiSignal*); - void execREP_GET_GCIBUFFER_REF(NdbApiSignal*); - void execREP_DISCONNECT_REP(NdbApiSignal*); - - /*************************************************************************** - * Ref signal senders - ***************************************************************************/ - void sendREP_INSERT_GCIBUFFER_REF(NdbApiSignal * signal, - Uint32 gci, - Uint32 nodeGrp, - GrepError::Code err); - - void sendREP_CLEAR_SS_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, - Uint32 lastGCI, - Uint32 currentGCI, - Uint32 nodeGrp, - GrepError::Code err); - - /*************************************************************************** - * Private Variables - ***************************************************************************/ - class SignalQueue m_signalRecvQueue; - struct NdbThread * m_signalExecThread; - - RepState * m_repState; - - Uint32 m_ownNodeId; ///< NodeId of this node - Uint32 m_ownBlockNo; ///< BlockNo of this "block" - BlockReference m_ownRef; ///< Reference to this - - TransporterFacade * m_transporterFacade; - - GCIContainer * m_gciContainer; - - AppNDB * m_applier; - ExtSender * m_repSender; - - friend void startSubscription(void * cbObj, NdbApiSignal* signal, int type); - friend void scanSubscription(void * cbObj, NdbApiSignal* signal, int type); - - friend RepState::FuncRequestCreateSubscriptionId requestCreateSubscriptionId; - friend RepState::FuncRequestCreateSubscription requestCreateSubscription; - friend RepState::FuncRequestRemoveSubscription requestRemoveSubscription; - - friend RepState::FuncRequestTransfer requestTransfer; - friend RepState::FuncRequestApply requestApply; - friend RepState::FuncRequestDeleteSS requestDeleteSS; - friend RepState::FuncRequestDeletePS requestDeletePS; - - friend RepState::FuncRequestStartMetaLog requestStartMetaLog; - friend RepState::FuncRequestStartDataLog requestStartDataLog; - friend RepState::FuncRequestStartMetaScan requestStartMetaScan; - friend RepState::FuncRequestStartDataScan requestStartDataScan; - friend RepState::FuncRequestEpochInfo requestEpochInfo; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/RequestorSubscriptions.cpp b/storage/ndb/src/old_files/rep/RequestorSubscriptions.cpp deleted file mode 100644 index 75b41fae037f44935cbb0b45ca15ccebb6648581..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/RequestorSubscriptions.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Requestor.hpp" - -#include <signaldata/GrepImpl.hpp> -#include <signaldata/SumaImpl.hpp> - -#include <rep/rep_version.hpp> - -/***************************************************************************** - * Create Subscription Id - *****************************************************************************/ - - -/***************************************************************************** - * Create Subscription - *****************************************************************************/ - - -/***************************************************************************** - * Start Subscription - *****************************************************************************/ - -/***************************************************************************** - * Remove Subscription - *****************************************************************************/ - -void -Requestor::execGREP_SUB_REMOVE_REF(NdbApiSignal* signal) -{ -#if 0 - GrepSubRemoveRef * const ref = (GrepSubRemoveRef *)signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - Uint32 err = ref->err; - - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubRemoveRef; - signal->theData[2] = subId; - signal->theData[3] = subKey; - signal->theData[4] = (Uint32)err; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 5, JBB); -#endif -} - - diff --git a/storage/ndb/src/old_files/rep/SignalQueue.cpp b/storage/ndb/src/old_files/rep/SignalQueue.cpp deleted file mode 100644 index 9b356a14b7dc59342e20399d48c969f731d2928b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/SignalQueue.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <string.h> - -#include "SignalQueue.hpp" - -SignalQueue::SignalQueue() { - m_mutex = NdbMutex_Create(); - m_cond = NdbCondition_Create(); - m_signalQueueHead = NULL; - m_queueSize = 0; -} - -SignalQueue::~SignalQueue() { - { - Guard g(m_mutex); - while(m_signalQueueHead != NULL) - delete pop(); - } - NdbMutex_Destroy(m_mutex); - m_mutex = NULL; - NdbCondition_Destroy(m_cond); - m_cond = NULL; -} - -NdbApiSignal * -SignalQueue::pop() { - NdbApiSignal *ret; - - if(m_signalQueueHead == NULL) - return NULL; - - ret = m_signalQueueHead->signal; - - QueueEntry *old = m_signalQueueHead; - m_signalQueueHead = m_signalQueueHead->next; - - delete old; - m_queueSize--; - return ret; -} - -void -SignalQueue::receive(void *me, NdbApiSignal *signal) { - SignalQueue *q = (SignalQueue *)me; - q->receive(signal); -} - -void -SignalQueue::receive(NdbApiSignal *signal) { - QueueEntry *n = new QueueEntry(); - n->signal = signal; - n->next = NULL; - - Guard guard(m_mutex); - - if(m_signalQueueHead == NULL) { - m_signalQueueHead = n; - m_queueSize++; - NdbCondition_Broadcast(m_cond); - return; - } - - QueueEntry *cur = m_signalQueueHead; - - while(cur->next != NULL) - cur = cur->next; - - cur->next = n; - m_queueSize++; - NdbCondition_Broadcast(m_cond); -} - -NdbApiSignal * -SignalQueue::waitFor(int gsn, NodeId nodeid, Uint32 timeout) { - Guard g(m_mutex); - - if(m_signalQueueHead == NULL) - NdbCondition_WaitTimeout(m_cond, m_mutex, timeout); - - if(m_signalQueueHead == NULL) - return NULL; - - if(gsn != 0 && m_signalQueueHead->signal->readSignalNumber() != gsn) - return NULL; - - if(nodeid != 0 && - refToNode(m_signalQueueHead->signal->theSendersBlockRef) != nodeid) - return NULL; - - return pop(); -} diff --git a/storage/ndb/src/old_files/rep/SignalQueue.hpp b/storage/ndb/src/old_files/rep/SignalQueue.hpp deleted file mode 100644 index 697bca85893e33588f9b50eddb512c4a677036fd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/SignalQueue.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef __SIGNALQUEUE_HPP_INCLUDED__ -#define __SIGNALQUEUE_HPP_INCLUDED__ - -#include <NdbApiSignal.hpp> -#include <NdbMutex.h> -#include <NdbCondition.h> -#include <Vector.hpp> - -/* XXX Look for an already existing definition */ -#define DEFAULT_TIMEOUT 10000 - -/** - * @class SignalQueue - * @brief - */ -class SignalQueue { -public: - typedef void (* SignalHandler)(void *obj, int gsn, NdbApiSignal *signal); - - SignalQueue(); - ~SignalQueue(); - - /** - * Static wrapper making it possible to call receive without knowing the - * type of the receiver - */ - static void receive(void *me, NdbApiSignal *signal); - - /** - * Enqueues a signal, and notifies any thread waiting for signals. - */ - void receive(NdbApiSignal *signal); - - NdbApiSignal *waitFor(int gsn, - NodeId nodeid = 0, - Uint32 timeout = DEFAULT_TIMEOUT); - template<class T> bool waitFor(Vector<T> &t, - T *&handler, - NdbApiSignal *&signal, - Uint32 timeout); - - /** - * size() - */ - - Uint32 size() {return m_queueSize;}; - -private: - NdbMutex *m_mutex; /* Locks all data in SignalQueue */ - NdbCondition *m_cond; /* Notifies about new signal in the queue */ - - /** - * Returns the last recently received signal. - * Must be called with m_mutex locked. - * - * The caller takes responsibility for deleting the returned object. - * - * @returns NULL if failed, or a received signal - */ - NdbApiSignal *pop(); - - class QueueEntry { - public: - NdbApiSignal *signal; - QueueEntry *next; - }; - QueueEntry *m_signalQueueHead; /** Head of the queue. - * New entries added on the tail - */ - Uint32 m_queueSize; -}; - -template<class T> bool -SignalQueue::waitFor(Vector<T> &t, - T *&handler, - NdbApiSignal *&signal, - Uint32 timeout) { - Guard g(m_mutex); - - if(m_signalQueueHead == NULL) - NdbCondition_WaitTimeout(m_cond, m_mutex, timeout); - - if(m_signalQueueHead == NULL) - return false; - - for(size_t i = 0; i < t.size(); i++) { - if(t[i].check(m_signalQueueHead->signal)) { - handler = &t[i]; - signal = pop(); - return true; - } - } - - ndbout_c("SignalQueue: Queued signal without true check function (GSN: %d)", - m_signalQueueHead->signal->theVerId_signalNumber); - abort(); - - return false; -} - -#endif /* !__SIGNALQUEUE_HPP_INCLUDED__ */ diff --git a/storage/ndb/src/old_files/rep/TODO b/storage/ndb/src/old_files/rep/TODO deleted file mode 100644 index a2462fae6cd9f20e3e1e2b010a529d105b345f3a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/TODO +++ /dev/null @@ -1,119 +0,0 @@ -REQUIREMENTS ------------- -- It should be possible to run two systems with replication using the - same configuration file on both systems. - -FEATURES TO IMPLEMENT ---------------------- -- Fix so that execute and command uses ExtSender. - None of them should have their own signals, this should - instead by abstacted to the RepStateRequest layer. -- Delete signals - GSN_REP_INSERT_GCIBUFFER_CONF - GSN_REP_INSERT_GCIBUFFER_REF -- Fix so that all ExtSenders are set at one point in the code only. -- Verify the following signals: - GSN_REP_INSERT_GCIBUFFER_REQ - GSN_REP_CLEAR_SS_GCIBUFFER_REQ - GSN_REP_DROP_TABLE_REQ -- Fix all @todo's in the code -- Remove all #if 1, #if 0 etc. -- Fix correct usage of dbug package used in MySQL source code. -- System table storing all info about channels -- Think about how channels, subscriptions etc map to SUMA Subscriptions -- TableInfoPS must be secured if SS REP is restarted and PS REP still - has all log records needed to sync. (This could be saved in a system - table instead of using the struct.) - -KNOWN BUGS AND LIMITATIONS --------------------------- -- REP#1: Non-consistency due to non-logging stop [LIMITATION] - Problem: - - Stopping replication in state other than "Logging" can - lead to a non-consistent state of the destination database - Suggested solution: - - Implement a cleanData flag (= false) that indicates that - this has happend. - -- REP#2: PS REP uses epochs from old subscription [BUG] - The following scenario can lead to a non-correct replication: - - Start replication X - - Wait until replication is in "Logging" state - - Kill SS REP - - Let PS REP be alive - - Start new replication Y - - Replication Y can use old PS REP epochs from replication X. - Suggested solution: - - Mark PS buffers with channel ids - - Make sure that all epoch requests use channel number in the requests. - -- REP#3: When having two node groups, there is sometimes 626 [FIXED] - Problem: - - Sometimes (when doing updated) there is 626 error code when - using 2 node groups. - - 626 = Tuple does not exists. - - Current code in RepState.cpp is: - if(s == Channel::App && - m_channel.getState() == Channel::DATASCAN_COMPLETED && - i.last() >= m_channel.getDataScanEpochs().last() && - i.last() >= m_channel.getMetaScanEpochs().last()) - { - m_channel.setState(Channel::LOG); - disableAutoStart(); - } - When the system gets into LOG state, force flag is turned off - Suggested solution: - - During DATASCAN, force=true (i.e. updates are treated as writes, - deletes error due to non-existing tuple are ignored) - - The code above must take ALL node groups into account. - -- REP#4: User requests sometime vanish when DB node is down [LIMITATION] - Problem: - - PS REP node does not always REF when no connection to GREP exists - Suggested solution: - - All REP->GREP signalsends should be checked. If they return <0, - then a REF signal should be returned. - -- REP#5: User requests sometime vanish when PS REP is down [BUG] - Scenario: - - Execute "Start" with PS REP node down - Solution: - - When start is executed, the connect flag should be checked - -- REP#6: No warning if table exists [Lars, BUG!] - Problem: - - There is no warning if a replicated table already exists in the - database. - Suggested solution: - - Print warning - - Set cleanData = false - -- REP#7: Starting 2nd subscription crashes DB node (Grep.cpp:994) [FIXED] - Scenario: - - Start replication - - Wait until replication is in "Logging" state - - Kill SS REP - - Let PS REP be alive - - Start new replication - - Now GREP crashes in Grep.cpp:994. - Suggested fix: - - If a new subscription is requested with same subscriberData - as already exists, then SUMA (or GREP) sends a REF signal - indicating that SUMA does not allow a new subscription to be - created. [Now no senderData is sent from REP.] - -- REP#8: Dangling subscriptions in GREP/SUMA [Johan,LIMITATION] - Problem: - - If both REP nodes die, then there is no possibility to remove - subscriptions from GREP/SUMA - Suggested solution 1: - - Fix so that GREP/SUMA can receive a subscription removal - signal with subid 0. This means that ALL subscriptions are - removed. This meaning should be documented in the - signaldata class. - - A new user command "STOP ALL" is implemented that sends - a request to delete all subscriptions. - Suggested solution 2: - - When GREP detects that ALL PS REP nodes associated with a s - subscription are killed, then that subscription should be - deleted. diff --git a/storage/ndb/src/old_files/rep/adapters/AppNDB.cpp b/storage/ndb/src/old_files/rep/adapters/AppNDB.cpp deleted file mode 100644 index 05f6d52807fa758d46e888c78d83b3334934cbdd..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/AppNDB.cpp +++ /dev/null @@ -1,583 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "AppNDB.hpp" -#include <ConfigRetriever.hpp> -#include <AttributeHeader.hpp> -#include <NdbOperation.hpp> -#include <NdbDictionaryImpl.hpp> - -#include <signaldata/RepImpl.hpp> -#include <TransporterFacade.hpp> -#include <trigger_definitions.h> -#include <rep/storage/GCIPage.hpp> -#include <rep/storage/GCIBuffer.hpp> -#include <rep/rep_version.hpp> - -/***************************************************************************** - * Constructor / Destructor / Init - *****************************************************************************/ - -AppNDB::~AppNDB() -{ - delete m_tableInfoPs; - delete m_ndb; - m_tableInfoPs = 0; -} - -AppNDB::AppNDB(GCIContainer * gciContainer, RepState * repState) -{ - m_gciContainer = gciContainer; - m_repState = repState; - m_cond = NdbCondition_Create(); - m_started = true; -} - -void -AppNDB::init(const char* connectString) { - - // NdbThread_SetConcurrencyLevel(1+ 2); - m_ndb = new Ndb(""); - - m_ndb->useFullyQualifiedNames(false); - - m_ndb->setConnectString(connectString); - /** - * @todo Set proper max no of transactions?? needed?? Default 12?? - */ - m_ndb->init(2048); - m_dict = m_ndb->getDictionary(); - - m_ownNodeId = m_ndb->getNodeId(); - - ndbout << "-- NDB Cluster -- REP node " << m_ownNodeId << " -- Version " - << REP_VERSION_ID << " --" << endl; - ndbout_c("Connecting to NDB Cluster..."); - if (m_ndb->waitUntilReady() != 0){ - REPABORT("NDB Cluster not ready for connections"); - } - ndbout_c("Phase 1 (AppNDB): Connection 1 to NDB Cluster opened (Applier)"); - - m_tableInfoPs = new TableInfoPs(); - - m_applierThread = NdbThread_Create(runAppNDB_C, - (void**)this, - 32768, - "AppNDBThread", - NDB_THREAD_PRIO_LOW); -} - - -/***************************************************************************** - * Threads - *****************************************************************************/ - -extern "C" -void* -runAppNDB_C(void * me) -{ - ((AppNDB *) me)->threadMainAppNDB(); - NdbThread_Exit(0); - return me; -} - -void -AppNDB::threadMainAppNDB() { - MetaRecord * mr; - LogRecord * lr; - GCIBuffer::iterator * itBuffer; - GCIPage::iterator * itPage; - GCIBuffer * buffer; - GCIPage * page; - Uint32 gci=0; - - bool force; - while(true){ - - m_gciBufferList.lock(); - if(m_gciBufferList.size()==0) - NdbCondition_Wait(m_cond, m_gciBufferList.getMutex()); - m_gciBufferList.unlock(); - - /** - * Do nothing if we are not started! - */ - if(!m_started) - continue; - - if(m_gciBufferList.size()>0) { - m_gciBufferList.lock(); - buffer = m_gciBufferList[0]; - assert(buffer!=0); - if(buffer==0) { - m_gciBufferList.unlock(); -// stopApplier(GrepError::REP_APPLY_NULL_GCIBUFFER); - return; - } - m_gciBufferList.unlock(); - - RLOG(("Applying %d:[%d]", buffer->getId(), buffer->getGCI())); - gci = buffer->getGCI(); - /** - * Do stuff with buffer - */ - - force = buffer->m_force; - itBuffer = new GCIBuffer::iterator(buffer); - page = itBuffer->first(); - - Record * record; - while(page!=0 && m_started) { - - itPage = new GCIPage::iterator(page); - record = itPage->first(); - - while(record!=0 && m_started) { - switch(Record::RecordType(record->recordType)) { - case Record::META: - mr = (MetaRecord*)record; - if(applyMetaRecord(mr, gci) < 0){ - /** - * If we fail with a meta record then - * we should fail the replication! - */ - //stopApplier(GrepError::REP_APPLY_METARECORD_FAILED); - } - break; - case Record::LOG: - lr = (LogRecord*)record; - if(applyLogRecord(lr, force, gci) < 0) { - /** - * If we fail to apply a log record AND - * we have sent a ref to repstate event, - * then we should not try to apply another one! - */ -// stopApplier(GrepError::REP_APPLY_LOGRECORD_FAILED); - } - break; - default: - REPABORT("Illegal record type"); - }; - record = itPage->next(); - } - delete itPage; - itPage = 0; - page = itBuffer->next(); - } - - m_gciBufferList.erase(0, true); - /** - * "callback" to RepState to send REP_INSERT_GCIBUFFER_CONF - */ - m_repState->eventInsertConf(buffer->getGCI(), buffer->getId()); - delete itBuffer; - itBuffer = 0; - mr = 0; - lr = 0; - page = 0; - buffer = 0; - } - } - - -} - -void AppNDB::startApplier(){ - m_started = true; -} - - -void AppNDB::stopApplier(GrepError::Code err){ - m_started = false; - m_repState->eventInsertRef(0,0,0, err); -} - - -GrepError::Code -AppNDB::applyBuffer(Uint32 nodeGrp, Uint32 epoch, Uint32 force) -{ - m_gciBufferList.lock(); - - GCIBuffer * buffer = m_gciContainer->getGCIBuffer(epoch, nodeGrp); - if (buffer == NULL) { - RLOG(("WARNING! Request to apply NULL buffer %d[%d]. Force %d", - nodeGrp, epoch, force)); - return GrepError::NO_ERROR; - } - if (!buffer->isComplete()) { - RLOG(("WARNING! Request to apply non-complete buffer %d[%d]. Force %d", - nodeGrp, epoch, force)); - return GrepError::REP_APPLY_NONCOMPLETE_GCIBUFFER; - } - buffer->m_force = force; - - assert(buffer!=0); - m_gciBufferList.push_back(buffer, false); - NdbCondition_Broadcast(m_cond); - m_gciBufferList.unlock(); - return GrepError::NO_ERROR; -} - -int -AppNDB::applyLogRecord(LogRecord* lr, bool force, Uint32 gci) -{ -#if 0 - RLOG(("Applying log record (force %d, Op %d, GCI %d)", - force, lr->operation, gci)); -#endif - - int retries =0; - retry: - if(retries == 10) { - m_repState->eventInsertRef(gci, 0, lr->tableId, - GrepError::REP_APPLIER_EXECUTE_TRANSACTION); - return -1; - } - NdbConnection * trans = m_ndb->startTransaction(); - if (trans == NULL) { - /** - * Transaction could not be started - * @todo Handle the error by: - * 1. Return error code - * 2. Print log message - * 3. On higher level indicate that DB has been tainted - */ - ndbout_c("AppNDB: Send the following error msg to NDB Cluster support"); - reportNdbError("Cannot start transaction!", trans->getNdbError()); - m_repState->eventInsertRef(gci, 0, 0, - GrepError::REP_APPLIER_START_TRANSACTION); - REPABORT("Can not start transaction"); - } - - /** - * Resolve table name based on table id - */ - const Uint32 tableId = lr->tableId; - const char * tableName = m_tableInfoPs->getTableName(tableId); - - /** - * Close trans and return if it is systab_0. - */ - if (tableId == 0) { - RLOG(("WARNING! System table log record received")); - m_ndb->closeTransaction(trans); - return -1; - } - - if (tableName==0) { - /** - * Table probably does not exist - * (Under normal operation this should not happen - * since log records should not appear unless the - * table has been created.) - * - * @todo Perhaps the table is not cached due to a restart, - * so let's check in the dictionary if it exists. - */ - m_ndb->closeTransaction(trans); - m_repState->eventInsertRef(gci, 0, tableId, - GrepError::REP_APPLIER_NO_TABLE); - return -1; - } - - const NdbDictionary::Table * table = m_dict->getTable(tableName); - - NdbOperation * op = trans->getNdbOperation(tableName); - if (op == NULL) { - ndbout_c("AppNDB: Send the following error msg to NDB Cluster support"); - reportNdbError("Cannot get NdbOperation record", - trans->getNdbError()); - m_repState->eventInsertRef(gci,0,tableId, - GrepError::REP_APPLIER_NO_OPERATION); - REPABORT("Can not get NdbOperation record"); - } - - int check=0; - switch(lr->operation) { - case TriggerEvent::TE_INSERT: // INSERT - check = op->insertTuple(); - break; - case TriggerEvent::TE_DELETE: // DELETE - check = op->deleteTuple(); - break; - case TriggerEvent::TE_UPDATE: // UPDATE - if (force) { - check = op->writeTuple(); - } else { - check = op->updateTuple(); - } - break; - case TriggerEvent::TE_CUSTOM: //SCAN - check = op->writeTuple(); - break; - default: - m_ndb->closeTransaction(trans); - return -1; - }; - - if (check<0) { - ndbout_c("AppNDB: Something is weird"); - } - - /** - * @todo index inside LogRecord struct somewhat prettier - * Now it 4 (sizeof(Uint32)), and 9 the position inside the struct - * where the data starts. - */ - AttributeHeader * ah=(AttributeHeader *)((char *)lr + sizeof(Uint32) * 9); - AttributeHeader *end = (AttributeHeader *)(ah + lr->attributeHeaderWSize); - Uint32 * dataPtr = (Uint32 *)(end); - - /** - * @note attributeheader for operaration insert includes a duplicate - * p.k. The quick fix for this problem/bug is to skip the first set of - * of p.k, and start from the other set of P.Ks. Data is duplicated for - * the p.k. - */ - if (lr->operation == 0) { - for(int i = 0; i< table->getNoOfPrimaryKeys(); i++) { - ah+=ah->getHeaderSize(); - dataPtr = dataPtr + ah->getDataSize(); - } - } - - while (ah < end) { - const NdbDictionary::Column * column = - table->getColumn(ah->getAttributeId()); - /** - * @todo: Here is a limitation. I don't care if it is a tuplekey - * that is autogenerated or an ordinary pk. I just whack it in. - * However, this must be examined. - */ - if(column->getPrimaryKey()) { - if(op->equal(ah->getAttributeId(), (const char *)dataPtr) < 0) { - ndbout_c("AppNDB: Equal failed id %d op %d name %s, gci %d force %d", - ah->getAttributeId(), - lr->operation, - column->getName(), gci, force); - reportNdbError("Equal!", trans->getNdbError()); - } - - } else { - if(op->setValue(ah->getAttributeId(), (const char *)dataPtr) < 0) - ndbout_c("AppNDB: setvalue failed id %d op %d name %s, gci %d force %d", - ah->getAttributeId(), - lr->operation, - column->getName(), gci, force); - } - - dataPtr = dataPtr + ah->getDataSize(); - ah = ah + ah->getHeaderSize() ; - } - - if(trans->execute(Commit) != 0) { - /** - * Transaction commit failure - */ - const NdbError err = trans->getNdbError(); - m_ndb->closeTransaction(trans); - switch(err.status){ - case NdbError::Success: - { - m_repState->eventInsertRef(gci, 0, tableId, - GrepError::REP_APPLIER_EXECUTE_TRANSACTION); - return -1; - } - break; - case NdbError::TemporaryError: - { - NdbSleep_MilliSleep(50); - retries++; - goto retry; - } - break; - case NdbError::UnknownResult: - { - ndbout_c("AppNDB: Send the following error msg to NDB Cluster support"); - reportNdbError("Execute transaction failed!", - trans->getNdbError()); - m_repState->eventInsertRef(gci, 0, tableId, - GrepError::REP_APPLIER_EXECUTE_TRANSACTION); - return -1; - } - break; - case NdbError::PermanentError: - { - if(err.code == 626) { - if(force && lr->operation == TriggerEvent::TE_DELETE) /**delete*/ { - /**tuple was not found. Ignore this, since - * we are trying to apply a "delete a tuple"-log record before - * having applied the scan data. - */ - return -1; - } - } - - ndbout_c("AppNDB: Send the following error msg to NDB Cluster support"); reportNdbError("Execute transaction failed!", - trans->getNdbError()); - ndbout_c("\n\nAppNDB: RepNode will now crash."); - m_ndb->closeTransaction(trans); - m_repState->eventInsertRef(gci, 0, tableId, - GrepError::REP_APPLIER_EXECUTE_TRANSACTION); - return -1; - } - break; - } - } - - /** - * No errors. Close transaction and continue in applierThread. - */ - m_ndb->closeTransaction(trans); - return 1; -} - - -int -AppNDB::applyMetaRecord(MetaRecord* mr, Uint32 gci) -{ - /** - * Validate table id - */ - Uint32 tableId = mr->tableId; - if (tableId==0) { - RLOG(("WARNING! Meta record contained record with tableId 0")); - return 0; - } - - /** - * Prepare meta record - */ - NdbDictionary::Table * table = prepareMetaRecord(mr); - if(table == 0) { - RLOG(("WARNING! Prepare table meta record failed for table %d", tableId)); - m_dict->getNdbError(); - m_repState->eventInsertRef(gci,0,tableId, - GrepError::REP_APPLIER_PREPARE_TABLE); - return -1; - } - - /** - * Table does not exist in TableInfoPs -> add it - */ - if(m_tableInfoPs->getTableName(tableId)==0) { - RLOG(("Table %d:%s added to m_tableInfoPs", tableId, table->getName())); - m_tableInfoPs->insert(tableId,table->getName()); - } - - /** - * Validate that table does not exist in Dict - */ - - const NdbDictionary::Table * tmpTable = m_dict->getTable(table->getName()); - if(tmpTable !=0) { - /** - * Oops, a table with the same name exists - */ - if(tmpTable->getObjectVersion()!=table->getObjectVersion()) { - char buf[100]; - sprintf(buf,"WARNING! Another version of table %d:%s already exists." - "Currently, we dont support versions, so will abort now!", - tableId, table->getName()); - - REPABORT(buf); - - } - RLOG(("WARNING! An identical table %d:%s already exists.", - tableId, table->getName())); - return -1; - } - - - /** - * @todo WARNING! Should scan table MR for columns that are not supported - */ - /* - NdbDictionary::Column * column; - - for(int i=0; i<table->getNoOfColumns(); i++) { - column = table->getColumn(i); - if(column->getAutoIncrement()) { - reportWarning(table->getName(), column->getName(), - "Uses AUTOINCREMENT of PK"); - } - } - */ - - - /** - * Create table - */ - if(m_dict->createTable(*table)<0) { - ndbout_c("AppNDB: Send the following error msg to NDB Cluster support"); - reportNdbError("Create table failed!", m_dict->getNdbError()); - m_repState->eventCreateTableRef(gci, - tableId, - table->getName(), - GrepError::REP_APPLIER_CREATE_TABLE); - return -1; - } - - RLOG(("Table %d:%s created", tableId, table->getName())); - return 0; -} - -NdbDictionary::Table* -AppNDB::prepareMetaRecord(MetaRecord* mr) { - NdbTableImpl * tmp = 0; - NdbDictionary::Table * table =0; - Uint32 * data =(Uint32*)( ((char*)mr + sizeof(Uint32)*6)); - int res = NdbDictInterface::parseTableInfo(&tmp, data, mr->dataLen, - m_ndb->usingFullyQualifiedNames()); - if(res == 0) { - table = tmp; - return table; - } else{ - return 0; - } -} - -void -AppNDB::reportNdbError(const char * msg, const NdbError & err) { - ndbout_c("%s : Error code %d , error message %s", - msg, err.code, - (err.message ? err.message : "")); -} - -void -AppNDB::reportWarning(const char * tableName, const char * message) { - ndbout_c("WARNING: Table %s, %s", tableName, message); -} - -void -AppNDB::reportWarning(const char * tableName, const char * columnName, - const char * message) { - ndbout_c("WARNING: Table %s, column %s, %s", tableName, columnName,message); -} - -int -AppNDB::dropTable(Uint32 tableId) -{ - char * tableName = m_tableInfoPs->getTableName(tableId); - if(tableName == 0) return -1; - ndbout_c("AppNDB: Dropping table "); - if(m_dict->dropTable(tableName) != 0) { - reportNdbError("Failed dropping table",m_dict->getNdbError()); - return -1; - } - m_tableInfoPs->del(tableId); - return 1; -} diff --git a/storage/ndb/src/old_files/rep/adapters/AppNDB.hpp b/storage/ndb/src/old_files/rep/adapters/AppNDB.hpp deleted file mode 100644 index 9563a1e41ab5a3ec86e0e1c6ad5965854eb8834f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/AppNDB.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef APPNDB_HPP -#define APPNDB_HPP -#include "NdbApi.hpp" - -#include <NdbMain.h> -#include <NdbOut.hpp> -#include <NdbSleep.h> -#include <NdbTick.h> - -#include <NdbThread.h> -#include <Vector.hpp> - -#include "TableInfoPs.hpp" -#include <rep/storage/GCIContainer.hpp> -#include <rep/storage/GCIBuffer.hpp> - -#include <rep/state/RepState.hpp> - -extern "C" { - void * runAppNDB_C(void *); -} - -/** - * @class AppNDB - * @brief Connects to NDB and appliers log records into standby system - */ -class AppNDB { -public: - /*************************************************************************** - * Constructor / Destructor / Init - ***************************************************************************/ - AppNDB(class GCIContainer * gciContainer, class RepState * repState); - ~AppNDB(); - - void init(const char * connectString); - - GrepError::Code - applyBuffer(Uint32 nodeGrp, Uint32 first, Uint32 force); - - /** - * Takes a table id and drops it. - * @param tableId Name of table to be dropped - * @return Returns 1 = ok, -1 failed - * - * @todo Fix: 0 usually means ok... - */ - int dropTable(Uint32 tableId); - void startApplier(); - void stopApplier(GrepError::Code err); -private: - /*************************************************************************** - * Methods - ***************************************************************************/ - friend void* runAppNDB_C(void*); - - void threadMainAppNDB(void); - - /** - * Takes a log records and does the operation specified in the log record - * on NDB. - * @param - lr (LogRecord) - * @param - force true if GREP:SSCoord is in phase STARTING. - * Ignore "Execute" errors if true. - */ - int applyLogRecord(LogRecord * lr, bool force, Uint32 gci); - - /** - * Applies a table based on a meta record and creates the table - * in NDB. - * @param - meta record - * @return - 0 on success, -1 if something went wrong - */ - int applyMetaRecord(MetaRecord * mr, Uint32 gci); - - /** - * Takes a meta record and uses NdbDictionaryXXX::parseInfoTable - * and returns a table - * @param mr - MetaRecord - * @return - a table based on the meta record - */ - NdbDictionary::Table* prepareMetaRecord(MetaRecord * mr); - - /** - * Prints out an NDB error message if a ndb operation went wrong. - * @param msg - text explaining the error - * @param err - NDB error type - */ - void reportNdbError(const char * msg, const NdbError & err); - - /** - * Prints out a warning message. Used if support for something - * is not implemented. - * @param tableName - the name of the table this warning occured on - * @param message - warning message - */ - void reportWarning(const char * tableName, const char * message); - - /** - * Prints out a warning message. Used if support for something - * is not implemented. - * @param tableName - the name of the table this warning occured on - * @param columnName - the name of the column this warning occured on - * @param message - warning message - */ - void reportWarning(const char * tableName, const char * columnName, - const char * message); - - - /*************************************************************************** - * Variables - ***************************************************************************/ - GCIContainer * m_gciContainer; - RepState * m_repState; - - Ndb* m_ndb; - NdbDictionary::Dictionary * m_dict; - NodeId m_ownNodeId; - bool m_started; - TableInfoPs * m_tableInfoPs; - NdbThread* m_applierThread; - NdbCondition * m_cond; - MutexVector<GCIBuffer*> m_gciBufferList; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/adapters/ExtAPI.cpp b/storage/ndb/src/old_files/rep/adapters/ExtAPI.cpp deleted file mode 100644 index 0dcd1e85465a2733f15572c01f50dccf978b4c77..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/ExtAPI.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "ExtAPI.hpp" - -GrepError::Code -ExtAPI::eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey) -{ - NdbApiSignal* signal = m_repSender->getSignal(); - CreateSubscriptionIdConf * conf = - (CreateSubscriptionIdConf *)signal->getDataPtrSend(); - conf->subscriptionId = subId; - conf->subscriptionKey = subKey; - signal->set(0, SSREPBLOCKNO, GSN_GREP_CREATE_SUBID_CONF, - CreateSubscriptionIdConf::SignalLength); - m_repSender->sendSignal(signal); - return GrepError::NO_ERROR; -} diff --git a/storage/ndb/src/old_files/rep/adapters/ExtAPI.hpp b/storage/ndb/src/old_files/rep/adapters/ExtAPI.hpp deleted file mode 100644 index f10b6c7d68244fcf251c6b9de3ab25eb56b318d2..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/ExtAPI.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef EXTAPI_HPP -#define EXTAPI_HPP - -#include <signaldata/RepImpl.hpp> -#include <signaldata/GrepImpl.hpp> -#include <signaldata/SumaImpl.hpp> - -#include <rep/ExtSender.hpp> - -/** - * The abstract class for all extractors - */ -class ExtAPI -{ -public: - /*************************************************************************** - * Constructor / Destructor - ***************************************************************************/ -#if 0 - bool init(const char * connectString = NULL); - - GrepError::Code dataLogStarted(Uint32 epoch, - Uint32 subId, Uint32 subKey) = 0; - GrepError::Code metaLogStarted(Uint32 epoch, - Uint32 subId, Uint32 subKey) = 0; - GrepError::Code epochComleted() = 0; - GrepError::Code subscriptionCreated() = 0; - GrepError::Code subscriptionRemoved() = 0; - GrepError::Code metaScanCompleted() = 0; - GrepError::Code dataScanCompleted() = 0; - GrepError::Code subscriptionRemoveFailed() = 0; - GrepError::Code metaScanFailed() = 0; - GrepError::Code dataScanFailed() = 0; - GrepError::Code subscriptiodIdCreateFailed() = 0; - GrepError::Code dataLogFailed() = 0; - GrepError::Code metaLogFailed() = 0; - GrepError::Code subscriptionCreateFailed() = 0; - - /**Above to be deleted*/ -#endif - - virtual GrepError::Code - eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey) ; - -#if 0 - GrepError::Code - eventSubscriptionDeleted(Uint32 subId, Uint32 subKey); - - GrepError::Code - eventMetaLogStarted(NdbApiSignal*, Uint32 subId, Uint32 subKey); - - GrepError::Code - eventDataLogStarted(NdbApiSignal*, Uint32 subId, Uint32 subKey); - - GrepError::Code - eventMetaScanCompleted(NdbApiSignal*, Uint32 subId, Uint32 subKey, - Interval epochs); - - GrepError::Code - eventDataScanCompleted(NdbApiSignal*, Uint32 subId, Uint32 subKey, - Interval epochs); - - GrepError::Code - eventMetaScanFailed(Uint32 subId, Uint32 subKey, GrepError::Code error); - - GrepError::Code - eventDataScanFailed(Uint32 subId, Uint32 subKey, GrepError::Code error); -#endif - - /*************************************************************************** - * Public Methods - ***************************************************************************/ - void setRepSender(ExtSender * es) { m_repSender = es; }; - //void signalErrorHandler(NdbApiSignal * s, Uint32 nodeId); - -protected: - ExtSender * m_repSender; -}; - - -#if 0 -class TestExtAPI : public ExtAPI -{ - GrepError::Code - eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey) { - ndbout_c("Received subscription:%d-%d"); - }; -}; -#endif - -#endif // EXTAPI_HPP diff --git a/storage/ndb/src/old_files/rep/adapters/ExtNDB.cpp b/storage/ndb/src/old_files/rep/adapters/ExtNDB.cpp deleted file mode 100644 index 6642b750b57f6788dc4c12a62bf1ae852abdfb28..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/ExtNDB.cpp +++ /dev/null @@ -1,559 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "ExtNDB.hpp" -#include "ConfigRetriever.hpp" -#include <NdbSleep.h> - -#include <NdbApiSignal.hpp> - -#include <signaldata/DictTabInfo.hpp> -#include <signaldata/GetTabInfo.hpp> -#include <signaldata/SumaImpl.hpp> -#include <AttributeHeader.hpp> -#include <rep/rep_version.hpp> -#include <ndb_limits.h> - -/***************************************************************************** - * Constructor / Destructor / Init - *****************************************************************************/ -ExtNDB::ExtNDB(GCIContainerPS * gciContainer, ExtAPI * extAPI) -{ - m_grepSender = new ExtSender(); - if (!m_grepSender) REPABORT("Could not allocate object"); - m_gciContainerPS = gciContainer; - - m_nodeGroupInfo = new NodeGroupInfo(); - m_gciContainerPS->setNodeGroupInfo(m_nodeGroupInfo); - - m_doneSetGrepSender = false; - m_subId = 0; - m_subKey = 0; - m_firstGCI = 0; - m_dataLogStarted = false; - - m_extAPI = extAPI; - if (!m_extAPI) REPABORT("Could not allocate object"); -} - -ExtNDB::~ExtNDB() -{ - delete m_grepSender; - delete m_nodeGroupInfo; -} - -void -ExtNDB::signalErrorHandler(NdbApiSignal * signal, Uint32 nodeId) -{ - //const Uint32 gsn = signal->readSignalNumber(); - //const Uint32 len = signal->getLength(); - RLOG(("Send signal failed. Signal %p", signal)); -} - -bool -ExtNDB::init(const char * connectString) -{ - m_signalExecThread = NdbThread_Create(signalExecThread_C, - (void **)this, - 32768, - "ExtNDB_Service", - NDB_THREAD_PRIO_LOW); - -#if 0 - /** - * I don't see that this does anything - * - * Jonas 13/2-04 - */ - ConfigRetriever cr; cr.setConnectString(connectString); - - ndb_mgm_configuration * config = cr.getConfig(NDB_VERSION, NODE_TYPE_REP); - if (config == 0) { - ndbout << "ExtNDB: Configuration error: "; - const char* erString = cr.getErrorString(); - if (erString == 0) { - erString = "No error specified!"; - } - ndbout << erString << endl; - return false; - } - NdbAutoPtr autoPtr(config); - m_ownNodeId = r.getOwnNodeId(); - - /** - * Check which GREPs to connect to (in configuration) - * - * @note SYSTEM LIMITATION: Only connects to one GREP - */ - Uint32 noOfConnections=0; - NodeId grepNodeId=0; - const Properties * connection; - - config->get("NoOfConnections", &noOfConnections); - for (Uint32 i=0; i<noOfConnections; i++) { - Uint32 nodeId1, nodeId2; - config->get("Connection", i, &connection); - connection->get("NodeId1", &nodeId1); - connection->get("NodeId2", &nodeId2); - if (!connection->contains("System1") && - !connection->contains("System2") && - (nodeId1 == m_ownNodeId || nodeId2 == m_ownNodeId)) { - /** - * Found connection - */ - if (nodeId1 == m_ownNodeId) { - grepNodeId = nodeId2; - } else { - grepNodeId = nodeId1; - } - } - } -#endif - - m_transporterFacade = TransporterFacade::instance(); - - assert(m_transporterFacade != 0); - - m_ownBlockNo = m_transporterFacade->open(this, execSignal, execNodeStatus); - assert(m_ownBlockNo > 0); - m_ownRef = numberToRef(m_ownBlockNo, m_ownNodeId); - ndbout_c("EXTNDB blockno %d ownref %d ", m_ownBlockNo, m_ownRef); - assert(m_ownNodeId == m_transporterFacade->ownId()); - - m_grepSender->setOwnRef(m_ownRef); - m_grepSender->setTransporterFacade(m_transporterFacade); - - if(!m_grepSender->connected(50000)){ - ndbout_c("ExtNDB: Failed to connect to DB nodes!"); - ndbout_c("ExtNDB: Tried to create transporter as (node %d, block %d).", - m_ownNodeId, m_ownBlockNo); - ndbout_c("ExtNDB: Check that DB nodes are started."); - return false; - } - ndbout_c("Phase 3 (ExtNDB): Connection %d to NDB Cluster opened (Extractor)", - m_ownBlockNo); - - for (Uint32 i=1; i<MAX_NDB_NODES; i++) { - if (m_transporterFacade->getIsDbNode(i) && - m_transporterFacade->getIsNodeSendable(i)) - { - Uint32 nodeGrp = m_transporterFacade->getNodeGrp(i); - m_nodeGroupInfo->addNodeToNodeGrp(i, true, nodeGrp); - Uint32 nodeId = m_nodeGroupInfo->getFirstConnectedNode(nodeGrp); - m_grepSender->setNodeId(nodeId); - if(m_nodeGroupInfo->getPrimaryNode(nodeGrp) == 0) { - m_nodeGroupInfo->setPrimaryNode(nodeGrp, nodeId); - } - m_doneSetGrepSender = true; -#if 0 - RLOG(("Added node %d to node group %d", i, nodeGrp)); -#endif - } - } - - return true; -} - -/***************************************************************************** - * Signal Queue Executor - *****************************************************************************/ - -class SigMatch -{ -public: - int gsn; - void (ExtNDB::* function)(NdbApiSignal *signal); - - SigMatch() { gsn = 0; function = NULL; }; - - SigMatch(int _gsn, void (ExtNDB::* _function)(NdbApiSignal *signal)) { - gsn = _gsn; - function = _function; - }; - - bool check(NdbApiSignal *signal) { - if(signal->readSignalNumber() == gsn) - return true; - return false; - }; -}; - -extern "C" -void *signalExecThread_C(void *r) -{ - ExtNDB *grepps = (ExtNDB*)r; - - grepps->signalExecThreadRun(); - - NdbThread_Exit(0); - /* NOTREACHED */ - return 0; -} - - -void -ExtNDB::signalExecThreadRun() -{ - Vector<SigMatch> sl; - - /** - * Signals to be executed - */ - sl.push_back(SigMatch(GSN_SUB_GCP_COMPLETE_REP, - &ExtNDB::execSUB_GCP_COMPLETE_REP)); - - /** - * Is also forwarded to SSCoord - */ - sl.push_back(SigMatch(GSN_GREP_SUB_START_CONF, - &ExtNDB::execGREP_SUB_START_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_CREATE_CONF, - &ExtNDB::execGREP_SUB_CREATE_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_REMOVE_CONF, - &ExtNDB::execGREP_SUB_REMOVE_CONF)); - /** - * Signals to be forwarded - */ - sl.push_back(SigMatch(GSN_GREP_CREATE_SUBID_CONF, - &ExtNDB::execGREP_CREATE_SUBID_CONF)); - - sl.push_back(SigMatch(GSN_GREP_SUB_SYNC_CONF, &ExtNDB::sendSignalRep)); - - sl.push_back(SigMatch(GSN_GREP_SUB_REMOVE_REF, &ExtNDB::sendSignalRep)); - sl.push_back(SigMatch(GSN_GREP_SUB_SYNC_REF, &ExtNDB::sendSignalRep)); - sl.push_back(SigMatch(GSN_GREP_CREATE_SUBID_REF, &ExtNDB::sendSignalRep)); - - sl.push_back(SigMatch(GSN_GREP_SUB_START_REF, &ExtNDB::sendSignalRep)); - sl.push_back(SigMatch(GSN_GREP_SUB_CREATE_REF, &ExtNDB::sendSignalRep)); - - - while(1) { - SigMatch *handler = NULL; - NdbApiSignal *signal = NULL; - - if(m_signalRecvQueue.waitFor(sl, handler, signal, DEFAULT_TIMEOUT)) { -#if 0 - RLOG(("Removed signal from queue (GSN: %d, QSize: %d)", - signal->readSignalNumber(), m_signalRecvQueue.size())); -#endif - if(handler->function != 0) { - (this->*handler->function)(signal); - delete signal; signal = 0; - } else { - REPABORT("Illegal handler for signal"); - } - } - } -} - -void -ExtNDB::sendSignalRep(NdbApiSignal * s) -{ - if(m_repSender->sendSignal(s) == -1) - { - signalErrorHandler(s, 0); - } -} - -void -ExtNDB::execSignal(void* executorObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]) -{ - ExtNDB * executor = (ExtNDB*)executorObj; - - const Uint32 gsn = signal->readSignalNumber(); - const Uint32 len = signal->getLength(); - - NdbApiSignal * s = new NdbApiSignal(executor->m_ownRef); - switch(gsn){ - case GSN_SUB_GCP_COMPLETE_REP: - case GSN_GREP_CREATE_SUBID_CONF: - case GSN_GREP_SUB_CREATE_CONF: - case GSN_GREP_SUB_START_CONF: - case GSN_GREP_SUB_SYNC_CONF: - case GSN_GREP_SUB_REMOVE_CONF: - case GSN_GREP_CREATE_SUBID_REF: - case GSN_GREP_SUB_CREATE_REF: - case GSN_GREP_SUB_START_REF: - case GSN_GREP_SUB_SYNC_REF: - case GSN_GREP_SUB_REMOVE_REF: - s->set(0, SSREPBLOCKNO, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - case GSN_SUB_TABLE_DATA: - executor->execSUB_TABLE_DATA(signal, ptr); - delete s; s=0; - break; - case GSN_SUB_META_DATA: - executor->execSUB_META_DATA(signal, ptr); - delete s; s=0; - break; - default: - REPABORT1("Illegal signal received in execSignal", gsn); - } - s=0; -#if 0 - ndbout_c("ExtNDB: Inserted signal into queue (GSN: %d, Len: %d)", - signal->readSignalNumber(), len); -#endif -} - -void -ExtNDB::execNodeStatus(void* obj, Uint16 nodeId, bool alive, bool nfCompleted) -{ - ExtNDB * thisObj = (ExtNDB*)obj; - - RLOG(("Changed node status (Id %d, Alive %d, nfCompleted %d)", - nodeId, alive, nfCompleted)); - - if(alive) { - /** - * Connected - */ - Uint32 nodeGrp = thisObj->m_transporterFacade->getNodeGrp(nodeId); - RLOG(("DB node %d of node group %d connected", nodeId, nodeGrp)); - - thisObj->m_nodeGroupInfo->addNodeToNodeGrp(nodeId, true, nodeGrp); - Uint32 firstNode = thisObj->m_nodeGroupInfo->getPrimaryNode(nodeGrp); - - if(firstNode == 0) - thisObj->m_nodeGroupInfo->setPrimaryNode(nodeGrp, nodeId); - - if (!thisObj->m_doneSetGrepSender) { - thisObj->m_grepSender->setNodeId(firstNode); - thisObj->m_doneSetGrepSender = true; - } - - RLOG(("Connect: First connected node in nodegroup: %d", - thisObj->m_nodeGroupInfo->getPrimaryNode(nodeGrp))); - - } else if (!nfCompleted) { - - /** - * Set node as "disconnected" in m_nodeGroupInfo until - * node comes up again. - */ - Uint32 nodeGrp = thisObj->m_transporterFacade->getNodeGrp(nodeId); - RLOG(("DB node %d of node group %d disconnected", - nodeId, nodeGrp)); - thisObj->m_nodeGroupInfo->setConnectStatus(nodeId, false); - /** - * The node that crashed was also the primary node, the we must change - * primary node - */ - if(nodeId == thisObj->m_nodeGroupInfo->getPrimaryNode(nodeGrp)) { - Uint32 node = thisObj->m_nodeGroupInfo->getFirstConnectedNode(nodeGrp); - if(node > 0) { - thisObj->m_grepSender->setNodeId(node); - thisObj->m_nodeGroupInfo->setPrimaryNode(nodeGrp, node); - } - else { - thisObj->sendDisconnectRep(nodeGrp); - } - } - RLOG(("Disconnect: First connected node in nodegroup: %d", - thisObj->m_nodeGroupInfo->getPrimaryNode(nodeGrp))); - - } else if(nfCompleted) { - } else { - REPABORT("Function execNodeStatus with wrong parameters"); - } -} - -/***************************************************************************** - * Signal Receivers for LOG and SCAN - *****************************************************************************/ - -/** - * Receive datalog/datascan from GREP/SUMA - */ -void -ExtNDB::execSUB_TABLE_DATA(NdbApiSignal * signal, LinearSectionPtr ptr[3]) -{ - SubTableData * const data = (SubTableData*)signal->getDataPtr(); - Uint32 tableId = data->tableId; - Uint32 operation = data->operation; - Uint32 gci = data->gci; - Uint32 nodeId = refToNode(signal->theSendersBlockRef); - - if((SubTableData::LogType)data->logType == SubTableData::SCAN) - { - Uint32 nodeGrp = m_nodeGroupInfo->findNodeGroup(nodeId); - - NodeGroupInfo::iterator * it; - it = new NodeGroupInfo::iterator(nodeGrp, m_nodeGroupInfo); - for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) { - m_gciContainerPS->insertLogRecord(nci->nodeId, tableId, - operation, ptr, gci); - } - delete it; it = 0; - } else { - m_gciContainerPS->insertLogRecord(nodeId, tableId, operation, ptr, gci); - } -} - -/** - * Receive metalog/metascan from GREP/SUMA - */ -void -ExtNDB::execSUB_META_DATA(NdbApiSignal * signal, LinearSectionPtr ptr[3]) -{ - Uint32 nodeId = refToNode(signal->theSendersBlockRef); - SubMetaData * const data = (SubMetaData*)signal->getDataPtr(); - Uint32 tableId = data->tableId; - Uint32 gci = data->gci; - - Uint32 nodeGrp = m_nodeGroupInfo->findNodeGroup(nodeId); - - NodeGroupInfo::iterator * it; - it = new NodeGroupInfo::iterator(nodeGrp, m_nodeGroupInfo); - for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) { - m_gciContainerPS->insertMetaRecord(nci->nodeId, tableId, ptr, gci); - RLOG(("Received meta record in %d[%d]", nci->nodeId, gci)); - } - - delete it; it = 0; -} - - -/***************************************************************************** - * Signal Receivers (Signals that are actually just forwarded to SS REP) - *****************************************************************************/ - -void -ExtNDB::execGREP_CREATE_SUBID_CONF(NdbApiSignal * signal) -{ - CreateSubscriptionIdConf const * conf = - (CreateSubscriptionIdConf *)signal->getDataPtr(); - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - ndbout_c("GREP_CREATE_SUBID_CONF m_extAPI=%p\n", m_extAPI); - m_extAPI->eventSubscriptionIdCreated(subId, subKey); -} - -/***************************************************************************** - * Signal Receivers - *****************************************************************************/ - -/** - * Receive information about completed GCI from GREP/SUMA - * - * GCI completed, i.e. no more unsent log records exists in SUMA - * @todo use node id to identify buffers? - */ -void -ExtNDB::execSUB_GCP_COMPLETE_REP(NdbApiSignal * signal) -{ - SubGcpCompleteRep * const rep = (SubGcpCompleteRep*)signal->getDataPtr(); - const Uint32 gci = rep->gci; - Uint32 nodeId = refToNode(rep->senderRef); - - RLOG(("Epoch %d completed at node %d", gci, nodeId)); - m_gciContainerPS->setCompleted(gci, nodeId); - - if(m_firstGCI == gci && !m_dataLogStarted) { - sendGREP_SUB_START_CONF(signal, m_firstGCI); - m_dataLogStarted = true; - } -} - -/** - * Send info that scan is competed to SS REP - * - * @todo Use node id to identify buffers? - */ -void -ExtNDB::sendGREP_SUB_START_CONF(NdbApiSignal * signal, Uint32 gci) -{ - RLOG(("Datalog started (Epoch %d)", gci)); - GrepSubStartConf * conf = (GrepSubStartConf *)signal->getDataPtrSend(); - conf->firstGCI = gci; - conf->subscriptionId = m_subId; - conf->subscriptionKey = m_subKey; - conf->part = SubscriptionData::TableData; - signal->m_noOfSections = 0; - signal->set(0, SSREPBLOCKNO, GSN_GREP_SUB_START_CONF, - GrepSubStartConf::SignalLength); - sendSignalRep(signal); -} - -/** - * Scan is completed... says SUMA/GREP - * - * @todo Use node id to identify buffers? - */ -void -ExtNDB::execGREP_SUB_START_CONF(NdbApiSignal * signal) -{ - GrepSubStartConf * const conf = (GrepSubStartConf *)signal->getDataPtr(); - Uint32 part = conf->part; - //Uint32 nodeId = refToNode(conf->senderRef); - m_firstGCI = conf->firstGCI; - - if (part == SubscriptionData::TableData) { - RLOG(("Datalog started (Epoch %d)", m_firstGCI)); - return; - } - RLOG(("Metalog started (Epoch %d)", m_firstGCI)); - - signal->set(0, SSREPBLOCKNO, GSN_GREP_SUB_START_CONF, - GrepSubStartConf::SignalLength); - sendSignalRep(signal); -} - -/** - * Receive no of node groups that PS has and pass signal on to SS - */ -void -ExtNDB::execGREP_SUB_CREATE_CONF(NdbApiSignal * signal) -{ - GrepSubCreateConf * conf = (GrepSubCreateConf *)signal->getDataPtrSend(); - m_subId = conf->subscriptionId; - m_subKey = conf->subscriptionKey; - - conf->noOfNodeGroups = m_nodeGroupInfo->getNoOfNodeGroups(); - sendSignalRep(signal); -} - -/** - * Receive conf that subscription has been remove in GREP/SUMA - * - * Pass signal on to TransPS - */ -void -ExtNDB::execGREP_SUB_REMOVE_CONF(NdbApiSignal * signal) -{ - m_gciContainerPS->reset(); - sendSignalRep(signal); -} - -/** - * If all PS nodes has disconnected, then remove all epochs - * for this subscription. - */ -void -ExtNDB::sendDisconnectRep(Uint32 nodeId) -{ - NdbApiSignal * signal = new NdbApiSignal(m_ownRef); - signal->set(0, SSREPBLOCKNO, GSN_REP_DISCONNECT_REP, - RepDisconnectRep::SignalLength); - RepDisconnectRep * rep = (RepDisconnectRep*) signal->getDataPtrSend(); - rep->nodeId = nodeId; - rep->subId = m_subId; - rep->subKey = m_subKey; - sendSignalRep(signal); -} diff --git a/storage/ndb/src/old_files/rep/adapters/ExtNDB.hpp b/storage/ndb/src/old_files/rep/adapters/ExtNDB.hpp deleted file mode 100644 index 228c980fd06021c0a9b9c916cbf26e22acdaff6b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/ExtNDB.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef EXTNDB_HPP -#define EXTNDB_HPP - -#include <ndb_global.h> - -#include <TransporterDefinitions.hpp> -#include <TransporterFacade.hpp> -#include <ClusterMgr.hpp> -#include <API.hpp> -#include <Vector.hpp> - -#include <signaldata/RepImpl.hpp> -#include <signaldata/GrepImpl.hpp> - -#include <rep/SignalQueue.hpp> -#include <rep/ExtSender.hpp> - -#include <rep/storage/GCIContainerPS.hpp> -#include "ExtAPI.hpp" - -extern "C" { -static void * signalExecThread_C(void *); -} - -/** - * @class ExtNDB - * @brief Class responsible for connection to primary system GREP - */ -class ExtNDB -{ -public: - /*************************************************************************** - * Constructor / Destructor - ***************************************************************************/ - ExtNDB(GCIContainerPS * gciContainer, ExtAPI * extAPI); - ~ExtNDB(); - bool init(const char * connectString = NULL); - - /*************************************************************************** - * Public Methods - ***************************************************************************/ - void setGrepSender(ExtSender * es) { m_grepSender = es; }; - ExtSender * getGrepSender() { return m_grepSender; }; - void setRepSender(ExtSender * es) { - m_extAPI->setRepSender(es); m_repSender = es; }; - void signalErrorHandler(NdbApiSignal * s, Uint32 nodeId); - -private: - friend void * signalExecThread_C(void *); - void signalExecThreadRun(); - - static void execSignal(void* signalSender, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]); - - static void execNodeStatus(void* signalSender, NodeId, - bool alive, bool nfCompleted); - - void sendSignalRep(NdbApiSignal *); - void sendDisconnectRep(Uint32 nodeId); - - /*************************************************************************** - * Signal Executors - ***************************************************************************/ - void execSUB_GCP_COMPLETE_REP(NdbApiSignal*); - void execGREP_SUB_CREATE_CONF(NdbApiSignal * signal); - void execGREP_SUB_REMOVE_CONF(NdbApiSignal * signal); - void execGREP_SUB_START_CONF(NdbApiSignal * signal); - void sendGREP_SUB_START_CONF(NdbApiSignal * signal, Uint32 gci); - void execSUB_TABLE_DATA(NdbApiSignal * signal,LinearSectionPtr ptr[3]); - void execSUB_META_DATA(NdbApiSignal * signal,LinearSectionPtr ptr[3]); - - // Signals that are actually just fowarded to REP - void execGREP_CREATE_SUBID_CONF(NdbApiSignal *); - - /*************************************************************************** - * Private Variables - ***************************************************************************/ - struct NdbThread * m_signalExecThread; - class SignalQueue m_signalRecvQueue; - - Uint32 m_ownNodeId; ///< NodeId of this node - Uint32 m_ownBlockNo; ///< BlockNo of this "block" - BlockReference m_ownRef; ///< Reference to this - - ExtSender * m_grepSender; ///< Responsible send to GREP - ExtSender * m_repSender; ///< Responsible send to SS REP - - NodeGroupInfo * m_nodeGroupInfo; - GCIContainerPS * m_gciContainerPS; ///< Interface to GCICotainer - ///< seen by PS - TransporterFacade * m_transporterFacade; - - bool m_doneSetGrepSender; ///< Only done once - bool m_dataLogStarted; - Uint32 m_subId; - Uint32 m_subKey; - Uint32 m_firstGCI; - - ExtAPI * m_extAPI; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/adapters/Makefile b/storage/ndb/src/old_files/rep/adapters/Makefile deleted file mode 100644 index bdd711510c37b21da18125f98bea55a04848a348..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapi repserver kernel - -ARCHIVE_TARGET := repadapters - -SOURCES = ExtNDB.cpp \ - AppNDB.cpp \ - ExtAPI.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/adapters/TableInfoPs.hpp b/storage/ndb/src/old_files/rep/adapters/TableInfoPs.hpp deleted file mode 100644 index 3fa25979255bdfd78a7d2ec664a5ca630a9bb012..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/adapters/TableInfoPs.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TABLEINFO_PS_HPP -#define TABLEINFO_PS_HPP - -#include <Vector.hpp> -#include <ndb_types.h> -#include <string.h> -#include <NdbMem.h> - -struct TableInfo { - Uint32 tableId; - char* tableName; -}; - -/** - * @class TableInfoPS - * @brief Meta information about tables stored on PS - */ -class TableInfoPs { -public: - inline void insert(const Uint32 tableId, const char * tableName); - - inline bool del(const Uint32 tableId); - - inline char * getTableName(const Uint32 tableId) const; - -private: - Vector<struct TableInfo*> tableInfo; - - inline TableInfo * lookup(const Uint32 tableId) const; - inline TableInfo * lookup(const Uint32 tableId , Uint32 * pos) const; -}; - -inline -TableInfo * -TableInfoPs::lookup(const Uint32 tableId) const{ - TableInfo * table; - Uint32 i=0; - - while(i<tableInfo.size()) { - table=tableInfo[i]; - if(table->tableId == tableId) - return table; - i++; - } - return 0; -} - -inline -TableInfo * -TableInfoPs::lookup(const Uint32 tableId, Uint32 * pos ) const{ - TableInfo * table; - Uint32 i=0; - while(i<tableInfo.size()) { - table=tableInfo[i]; - if(table->tableId == tableId) { - *pos=i; - return table; - } - i++; - } - return 0; -} - - -inline -char * -TableInfoPs::getTableName(const Uint32 tableId) const{ - TableInfo * table; - table=lookup(tableId); - if(table!=0) - return table->tableName; - return 0; -} - - -inline -void -TableInfoPs::insert(const Uint32 tableId, const char * tableName) { - TableInfo * table = new TableInfo; - table->tableId=tableId; - table->tableName=strdup(tableName); - tableInfo.push_back(table); -} - -inline -bool -TableInfoPs::del(const Uint32 tableId) { - - TableInfo * table; - Uint32 i=0; - table = lookup(tableId, &i); - - if(table!=0) { - NdbMem_Free(table->tableName); - delete table; - tableInfo.erase(i); - return true; - } - return false; -} - -#endif diff --git a/storage/ndb/src/old_files/rep/dbug_hack.cpp b/storage/ndb/src/old_files/rep/dbug_hack.cpp deleted file mode 100644 index 74e5f0807776578def3bb13856dc07c8180a8886..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/dbug_hack.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include <OutputStream.hpp> -#include "NdbOut.hpp" -#include "rep_version.hpp" - -int replogEnabled; - -/** - * @todo This should be implemented using MySQLs dbug library - */ -#if 0 -extern "C" -void -DBUG_PRINT(const char * fmt, ...) -{ -#ifdef DBUG - va_list ap; - char buf[1000]; - - va_start(ap, fmt); - if (fmt != 0) - vsnprintf(buf, sizeof(buf)-1, fmt, ap); - ndbout << buf << endl; - va_end(ap); -#endif -} -#endif - -extern "C" -void -replog(const char * fmt, ...) -{ - if (replogEnabled) - { - va_list ap; - char buf[1000]; - - va_start(ap, fmt); - if (fmt != 0) - vsnprintf(buf, sizeof(buf)-1, fmt, ap); - ndbout << buf << endl; - va_end(ap); - } -} - -extern "C" -void -rlog(const char * fmt, ...) -{ - va_list ap; - char buf[1000]; - - va_start(ap, fmt); - if (fmt != 0) - vsnprintf(buf, sizeof(buf)-1, fmt, ap); - ndbout << buf; - va_end(ap); -} diff --git a/storage/ndb/src/old_files/rep/rep_version.hpp b/storage/ndb/src/old_files/rep/rep_version.hpp deleted file mode 100644 index 3830f9c351c9db7bcca015f5952b1987c9670c9d..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/rep_version.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REP_VERSION_HPP -#define REP_VERSION_HPP - -/** - * Block number for REP - */ -#define SSREPBLOCKNO 1 -#define PSREPBLOCKNO 2 - -#define DBUG - -#include <ndb_version.h> - -extern "C" -void -DBUG_PRINT__(const char * fmt, ...); - -extern "C" -void -replog(const char * fmt, ...); - -extern "C" -void -rlog(const char * fmt, ...); - -#define RLOG(ARGS) \ - do { if (replogEnabled) { \ - rlog ARGS; \ - ndbout << " (" << __FILE__ << ":" << __LINE__ << ")" << endl; \ - } \ - } while (0) - -/** - * Replication logging on or off - */ -extern int replogEnabled; - -/** - * Used for config id - */ -#define REP_VERSION_ID NDB_VERSION - -#define MAX_NODE_GROUPS 6 - -#define REPABORT(string) \ - { \ - ndbout_c("\nInternal error in %s:%d: %s", __FILE__, __LINE__, string); \ - abort(); \ - } -#define REPABORT1(string, data1) \ - { \ - ndbout_c("\nInternal error in %s:%d: %s" \ - "\n (data1: %d)", \ - __FILE__, __LINE__, string, data1); \ - abort(); \ - } -#define REPABORT2(string, data1, data2) \ - { \ - ndbout_c("\nInternal error in %s:%d: %s" \ - "\n (data1: %d, data2: %d)", \ - __FILE__, __LINE__, string, data1, data2); \ - abort(); \ - } -#define REPABORT3(string, data1, data2, data3) \ - { \ - ndbout_c("\nInternal error in %s:%d: %s" \ - "\n (data1: %d, data2: %d data3: %d)", \ - __FILE__, __LINE__, string, data1, data2, data3); \ - abort(); \ - } - -#endif diff --git a/storage/ndb/src/old_files/rep/repapi/Makefile b/storage/ndb/src/old_files/rep/repapi/Makefile deleted file mode 100644 index fdd153f10605de7a8646d4d7544a303b76821367..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/repapi/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -include .defs.mk - -TYPE := util - -PIC_ARCHIVE := Y -ARCHIVE_TARGET := repapi - -A_LIB := Y -SO_LIB := Y -PIC_LIB := Y - -#DIRS := test - -LIB_TARGET := REP_API -LIB_TARGET_ARCHIVES := $(ARCHIVE_TARGET) general portlib - -# Source files of non-templated classes (.C files) -SOURCES = repapi.cpp - -CCFLAGS_LOC += -I$(call fixpath,$(NDB_TOP)/include/mgmapi) \ - -I$(call fixpath,$(NDB_TOP)/src/common/mgmcommon) - -CCFLAGS += -DNO_DEBUG_MESSAGES - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/repapi/repapi.cpp b/storage/ndb/src/old_files/rep/repapi/repapi.cpp deleted file mode 100644 index d34ab098c9c6a4a727ef3cf6e46e42c891f42baa..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/repapi/repapi.cpp +++ /dev/null @@ -1,598 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> -#include <NdbTCP.h> -#include "repapi.h" -//#include "mgmapi_debug.h" -#include <socket_io.h> - -#include <NdbOut.hpp> -#include <SocketServer.hpp> -#include <Parser.hpp> -#include <OutputStream.hpp> -#include <InputStream.hpp> - -#if defined VM_TRACE && !defined NO_DEBUG_MESSAGES -#define DEBUG(x) ndbout << x << endl; -#elif defined NO_DEBUG_MESSAGES -#define DEBUG(x) -#endif - -#ifdef NDB_WIN32 -#define EBADMSG EFAULT -#endif - - - -class ParserDummy2 : SocketServer::Session { -public: - ParserDummy2(NDB_SOCKET_TYPE sock); -}; - -ParserDummy2::ParserDummy2(NDB_SOCKET_TYPE sock) : SocketServer::Session(sock) { - -} - -typedef Parser<ParserDummy2> Parser_t; - - -#define REP_CMD(name, fun, desc) \ - { name, \ - 0, \ - ParserRow<ParserDummy2>::Cmd, \ - ParserRow<ParserDummy2>::String, \ - ParserRow<ParserDummy2>::Optional, \ - ParserRow<ParserDummy2>::IgnoreMinMax, \ - 0, 0, \ - fun, \ - desc, 0 } - -#define REP_ARG(name, type, opt, desc) \ - { name, \ - 0, \ - ParserRow<ParserDummy2>::Arg, \ - ParserRow<ParserDummy2>::type, \ - ParserRow<ParserDummy2>::opt, \ - ParserRow<ParserDummy2>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - desc, 0 } - -#define REP_END() \ - { 0, \ - 0, \ - ParserRow<ParserDummy2>::Arg, \ - ParserRow<ParserDummy2>::Int, \ - ParserRow<ParserDummy2>::Optional, \ - ParserRow<ParserDummy2>::IgnoreMinMax, \ - 0, 0, \ - 0, \ - 0, 0 } - -struct ndb_rep_handle { - char * hostname; - unsigned short port; - - int connected; - int last_error; - int last_error_line; - int read_timeout; - int write_timeout; - - NDB_SOCKET_TYPE socket; - -#ifdef REPAPI_LOG - FILE* logfile; -#endif -}; - -#define SET_ERROR(h, e) \ - h->last_error = e; \ - h->last_error_line = __LINE__; - -extern "C" -NdbRepHandle -ndb_rep_create_handle(){ - NdbRepHandle h = (NdbRepHandle)malloc(sizeof(ndb_rep_handle)); - h->connected = 0; - h->last_error = 0; - h->last_error_line = 0; - h->hostname = 0; - h->socket = -1; - h->read_timeout = 50000; - h->write_timeout = 100; - -#ifdef REPAPI_LOG - h->logfile = 0; -#endif - - return h; -} - -/** - * Destroy a handle - */ -extern "C" -void -ndb_rep_destroy_handle(NdbRepHandle * handle){ - if(!handle) - return; - if((* handle)->connected){ - ndb_rep_disconnect(* handle); - } - if((* handle)->hostname != 0){ - free((* handle)->hostname); - } -#ifdef REPAPI_LOG - if ((* handle)->logfile != 0){ - fclose((* handle)->logfile); - (* handle)->logfile = 0; - } -#endif - free(* handle); - * handle = 0; -} - -/** - * Get latest error associated with a handle - */ -extern "C" -int -ndb_rep_get_latest_error(const NdbRepHandle h){ - return h->last_error; -} - -/** - * Get latest error line associated with a handle - */ -extern "C" -int -ndb_rep_get_latest_error_line(const NdbRepHandle h){ - return h->last_error_line; -} - -static -int -parse_connect_string(const char * connect_string, - NdbRepHandle handle){ - - if(connect_string == 0){ - DEBUG("connect_string == 0"); - SET_ERROR(handle, EINVAL); - return -1; - } - - char * line = strdup(connect_string); - if(line == 0){ - DEBUG("line == 0"); - SET_ERROR(handle, ENOMEM); - return -1; - } - - char * tmp = strchr(line, ':'); - if(tmp == 0){ - DEBUG("tmp == 0"); - free(line); - SET_ERROR(handle, EINVAL); - return -1; - } - * tmp = 0; tmp++; - - int port = 0; - if(sscanf(tmp, "%d", &port) != 1){ - DEBUG("sscanf() != 1"); - free(line); - SET_ERROR(handle, EINVAL); - return -1; - } - - if(handle->hostname != 0) - free(handle->hostname); - - handle->hostname = strdup(line); - handle->port = port; - free(line); - return 0; -} - -/* - * Call an operation, and return the reply - */ -static const Properties * -ndb_rep_call(NdbRepHandle handle, - const ParserRow<ParserDummy2> *command_reply, - const char *cmd, - const Properties *cmd_args) { - SocketOutputStream out(handle->socket); - SocketInputStream in(handle->socket, handle->read_timeout); - - out.println(cmd); -#ifdef REPAPI_LOG - /** - * Print command to log file - */ - FileOutputStream f(handle->logfile); - f.println("OUT: %s", cmd); -#endif - - if(cmd_args != NULL) { - Properties::Iterator iter(cmd_args); - const char *name; - while((name = iter.next()) != NULL) { - PropertiesType t; - Uint32 val_i; - BaseString val_s; - - cmd_args->getTypeOf(name, &t); - switch(t) { - case PropertiesType_Uint32: - cmd_args->get(name, &val_i); - out.println("%s: %d", name, val_i); - break; - case PropertiesType_char: - cmd_args->get(name, val_s); - out.println("%s: %s", name, val_s.c_str()); - break; - default: - /* Ignore */ - break; - } - } -#ifdef REPAPI_LOG - /** - * Print arguments to log file - */ - cmd_args->print(handle->logfile, "OUT: "); -#endif - } - out.println(""); - - Parser_t::Context ctx; - ParserDummy2 session(handle->socket); - Parser_t parser(command_reply, in, true, true, true); - -#if 1 - const Properties* p = parser.parse(ctx, session); - if (p == NULL){ - /** - * Print some info about why the parser returns NULL - */ - ndbout << " status=" << ctx.m_status << ", curr="<<ctx.m_currentToken << endl; - } -#ifdef REPAPI_LOG - else { - /** - * Print reply to log file - */ - p->print(handle->logfile, "IN: "); - } -#endif - return p; -#else - return parser.parse(ctx, session); -#endif -} - -/** - * Connect to a rep server - * - * Returns 0 if OK, sets ndb_rep_handle->last_error otherwise - */ -extern "C" -int -ndb_rep_connect(NdbRepHandle handle, const char * repsrv){ - - if(handle == 0) - return -1; - - if(parse_connect_string(repsrv, handle) != 0) - return -1; - - -#ifdef REPAPI_LOG - /** - * Open the log file - */ - char logname[64]; - snprintf(logname, 64, "repapi.log"); - handle->logfile = fopen(logname, "w"); -#endif - - /** - * Do connect - */ - const NDB_SOCKET_TYPE sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd == NDB_INVALID_SOCKET) { - DEBUG("socket() == INVALID_SOCKET"); - return -1; - } - - struct sockaddr_in servaddr; - memset(&servaddr, 0, sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons(handle->port); - // Convert ip address presentation format to numeric format - const int res1 = Ndb_getInAddr(&servaddr.sin_addr, handle->hostname); - if (res1 != 0) { - DEBUG("Ndb_getInAddr(...) == -1"); - return -1; - } - - const int res2 = connect(sockfd, (struct sockaddr*) &servaddr, - sizeof(servaddr)); - if (res2 == -1) { - DEBUG("connect() == -1"); - NDB_CLOSE_SOCKET(sockfd); - return -1; - } - - handle->socket = sockfd; - handle->connected = 1; - - return 0; -} - -/** - * Disconnect from a rep server - */ -extern "C" -void -ndb_rep_disconnect(NdbRepHandle handle){ - if(handle == 0) - return; - - if(handle->connected != 1){ - return; - } - - NDB_CLOSE_SOCKET(handle->socket); - handle->socket = -1; - handle->connected = 0; - - return; -} - - - -/****************************************************************************** - * Global Replication - ******************************************************************************/ -extern "C" -int ndb_rep_command(NdbRepHandle handle, - unsigned int request, - unsigned int* replication_id, - struct ndb_rep_reply* /*reply*/, - unsigned int epoch) { - - *replication_id = 0; - - const ParserRow<ParserDummy2> replication_reply[] = { - REP_CMD("global replication reply", NULL, ""), - REP_ARG("result", Int, Mandatory, "Error message"), - REP_ARG("id", Int, Optional, "Id of global replication"), - REP_END() - }; - - if (handle == 0) { - return -1; - } - - if (handle->connected != 1) { - handle->last_error = EINVAL; - return -1; - } - - Properties args; - args.put("request", request); - args.put("id", *replication_id); - if(epoch > 0) - args.put("epoch",epoch); - else - args.put("epoch",(unsigned int)0); - - const Properties *reply; - reply = ndb_rep_call(handle, replication_reply, "rep", &args); - - if(reply == NULL) { - handle->last_error = EIO; - return -1; - } - - reply->get("id", replication_id); - Uint32 result; - reply->get("result", &result); - delete reply; - return result; -} - -extern "C" -int convert2int(char * first, char * last, unsigned int f[], unsigned int l[]) -{ - char * ftok = strtok(first, ","); - char * ltok = strtok(last, ","); - Uint32 i=0; - while(ftok!=NULL && ltok!=NULL) - { - f[i] = atoi(ftok); - l[i] = atoi(ltok); - ftok = strtok(NULL, ","); - ltok = strtok(NULL, ","); - i++; - } - - return 0; -} - - -int ndb_rep_query(NdbRepHandle handle, - QueryCounter counter, - unsigned int* replicationId, - struct ndb_rep_reply* /*reply*/, - struct rep_state * state) -{ - *replicationId = 0; // not used currently. - - if(state == 0) - return -1; - - const ParserRow<ParserDummy2> replication_reply[] = { - REP_CMD("global replication query reply", NULL, ""), - REP_ARG("result", String, Mandatory, "Error message"), - REP_ARG("id", Int, Mandatory, "replicationId"), - REP_ARG("no_of_nodegroups", Int, Optional, "number of nodegroups"), - REP_ARG("subid", Int, Optional, "Id of subscription"), - REP_ARG("subkey", Int, Optional, "Key of subscription"), - REP_ARG("connected_rep", Int, Optional, "connected to rep"), - REP_ARG("connected_db", Int, Optional, "connected to db"), - REP_ARG("first", String, Optional, ""), - REP_ARG("last", String, Optional, ""), - REP_ARG("state_sub", Int, Optional, "state of subsription"), - REP_ARG("state", Int, Optional, "state"), - REP_END() - }; - - if (handle == 0) { - return -1; - } - - if (handle->connected != 1) { - handle->last_error = EINVAL; - return -1; - } - - const Properties *props; - Properties args; - Uint32 request = 0; - args.put("request", request); - args.put("id", *replicationId); - args.put("counter" , (Uint32)counter); - props = ndb_rep_call(handle, replication_reply, "rep query", &args); - - BaseString result; - props->get("result", result); - if(strcmp(result.c_str(), "Ok") != 0) - { - delete props; - return 1; - } - state->queryCounter = counter; - unsigned int no_of_nodegroups; - props->get("no_of_nodegroups", &no_of_nodegroups); - state->no_of_nodegroups = no_of_nodegroups; - - if(counter >= 0) - { - BaseString first, last; - props->get("first", first); - props->get("last", last); - convert2int((char*)first.c_str(), (char*)last.c_str(), - state->first , state->last ); - } else - { - for(Uint32 i = 0; i<REPAPI_MAX_NODE_GROUPS; i++) { - state->first[i] = 0; - state->last[i] = 0; - } - } - - unsigned int connected_rep = 0; - props->get("connected_rep", &connected_rep); - state->connected_rep = connected_rep; - - unsigned int connected_db = 0; - props->get("connected_rep", &connected_db); - state->connected_db = connected_db; - - unsigned int subid; - props->get("subid", &subid); - state->subid = subid; - - unsigned int subkey; - props->get("subkey", &subkey); - state->subkey = subkey; - - unsigned int _state; - props->get("state", &_state); - state->state = _state; - - unsigned int state_sub; - props->get("state_sub", &state_sub); - state->state_sub = state_sub; - - if(props == NULL) { - handle->last_error = EIO; - return -1; - } - delete props; - - return 0; -} - - -extern "C" -int -ndb_rep_get_status(NdbRepHandle handle, - unsigned int* replication_id, - struct ndb_rep_reply* /*reply*/, - struct rep_state * repstate) { - - const ParserRow<ParserDummy2> replication_reply[] = { - REP_CMD("global replication status reply", NULL, ""), - REP_ARG("result", String, Mandatory, "Error message"), - REP_ARG("id", Int, Optional, "Error message"), - REP_ARG("subid", Int, Optional, "Id of subscription"), - REP_ARG("subkey", Int, Optional, "Key of subscription"), - REP_ARG("connected_rep", Int, Optional, "connected to rep"), - REP_ARG("connected_db", Int, Optional, "connected to db"), - REP_ARG("state_sub", Int, Optional, "state of subsription"), - REP_ARG("state", Int, Optional, "state"), - REP_END() - }; - - if (handle == 0) { - return -1; - } - - if (handle->connected != 1) { - handle->last_error = EINVAL; - return -1; - } - - const Properties *reply; - Properties args; - Uint32 request = 0; - args.put("request", request); - reply = ndb_rep_call(handle, replication_reply, "rep status", &args); - - if(reply == NULL) { - handle->last_error = EIO; - return -1; - } - - Uint32 result; - reply->get("result", &result); - reply->get("id", replication_id); - reply->get("subid", (Uint32*)&repstate->subid); - reply->get("subkey", (Uint32*)&repstate->subkey); - reply->get("connected_rep", (Uint32*)&repstate->connected_rep); - reply->get("connected_db", (Uint32*)&repstate->connected_db); - reply->get("state", (Uint32*)&repstate->state); - reply->get("state_sub", (Uint32*)&repstate->state_sub); - - delete reply; - return result; -} diff --git a/storage/ndb/src/old_files/rep/repapi/repapi.h b/storage/ndb/src/old_files/rep/repapi/repapi.h deleted file mode 100644 index 170e493cd864dff2c63f79cddaf06d69cff877dc..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/repapi/repapi.h +++ /dev/null @@ -1,216 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REPAPI_H -#define REPAPI_H - -/** - * @mainpage NDB Cluster REP API - * - * The NDB Cluster Replication API (REP API) consists of a C API - * which is used to: - * - Start and stop replication - * - Other administrative tasks - * - * The functions use simple ASCII based - * commands to interact with thw Replication Server. - * - * - * @section General Concepts - * - * Each REP API function call needs an rep_C_Api::NdbRepHandle - * which initally is created by - * calling the function ndb_rep_create_handle(). - * - * A function can return: - * -# An integer value. If it returns 0 then this indicates success. - * -# A pointer value. If it returns NULL then check the latest error. - * If it didn't return NULL, then "something" is returned. - * This "something" has to be free:ed by the user of the REP API. - */ - -/** @addtogroup REP_C_API - * @{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#define REPAPI_MAX_NODE_GROUPS 4 - /** - * The NdbRepHandle. - */ - typedef struct ndb_rep_handle * NdbRepHandle; - - - /** - * Default reply from the server - */ - struct ndb_rep_reply { - int return_code; ///< 0 if successful, - ///< otherwise error code - char message[256]; ///< Error or reply message. - }; - - enum QueryCounter { - PS = 0, ///< Stored on Primary System REP - SSReq = 1, ///< Requested for transfer to Standby System - SS = 2, ///< Stored on Standby System REP - AppReq = 3, ///< Requested to be applied to Standby System - App = 4, ///< Has been applied to Standby System - DelReq = 5, ///< Has been requested to be deleted on PS REP & SS REP - Subscription = 6, - ConnectionRep = 7, - ConnectionDb = 8 - }; - - - struct rep_state { - QueryCounter queryCounter; - unsigned int no_of_nodegroups; - unsigned int connected_rep; - unsigned int connected_db; - unsigned int subid; - unsigned int subkey; - unsigned int state; - unsigned int state_sub; - unsigned int first[REPAPI_MAX_NODE_GROUPS]; //4 = max no of nodegroups - unsigned int last[REPAPI_MAX_NODE_GROUPS]; //4 = max no of nodegroups - }; - - - - - - - /*************************************************************************** - * FUNCTIONS - ***************************************************************************/ - /** - * Create a handle - * - * @return A handle != 0 - * or 0 if failed to create one. (Check errno then). - */ - NdbRepHandle ndb_rep_create_handle(); - - /** - * Destroy a handle - * - * @param handle Rep server handle - */ - void ndb_rep_destroy_handle(NdbRepHandle * handle); - - /** - * Get latest error associated with a handle - * - * @param handle Rep server handle - * @return Latest error. - */ - int ndb_rep_get_latest_error(const NdbRepHandle handle); - - /** - * Get latest error line associated with a handle - * - * @param handle Rep server handle. - * @return Latest error line. - */ - int ndb_rep_get_latest_error_line(const NdbRepHandle handle); - - /** - * Connect to a REP server - * - * @param handle Rep server handle. - * @param repsrv Hostname and port of the REP server, - * "hostname:port". - * @return 0 if OK, sets ndb_rep_handle->last_error otherwise. - */ - int ndb_rep_connect(NdbRepHandle handle, const char * repsrv); - - /** - * Disconnect from a REP server - * - * @param handle Rep server handle. - */ - void ndb_rep_disconnect(NdbRepHandle handle); - - - /** - * Global Replication Command - * - * @param handle NDB REP handle. - * @param request Type of request - * @param replicationId Replication id is returned from function. - * @param reply Reply message. - * @param epoch Currenty used to STOP at a certain EPOCH - * @return 0 if successful, error code otherwise. - */ - int ndb_rep_command(NdbRepHandle handle, - unsigned int request, - unsigned int* replicationId, - struct ndb_rep_reply* reply, - unsigned int epoch = 0); - - - /** - * Global Replication Command - * - * @param handle NDB REP handle. - * @param counter Type of request. If <0, then - "first" and "last" in repstate - is set to 0;x - * @param replicationId Replication id is returned from function. - * @param reply Reply message. - * @param repstate Struct containing queried data. (Note! - * All values are set in the struct, regardless - which QueryCounter that has been set - * @return 0 if successful, error code otherwise. - */ - int ndb_rep_query(NdbRepHandle handle, - QueryCounter counter, - unsigned int* replicationId, - struct ndb_rep_reply* reply, - struct rep_state * repstate); - - -/** - * @deprecated (will probably be). Can use ndb_rep_query instead. - */ - int ndb_rep_get_status(NdbRepHandle handle, - unsigned int* replication_id, - struct ndb_rep_reply* /*reply*/, - struct rep_state * repstate); - - - - enum RequestStatusCode { - OK = 0, ///< Everything OK - Error = 1, ///< Generic error - AlreadyExists = 2, ///< Entry already exists in list - NotExists = 3, ///< Entry does not exist in list - AlreadyStopped = 4 - }; - - - -#ifdef __cplusplus -} -#endif - -/** @} */ - -#endif diff --git a/storage/ndb/src/old_files/rep/state/Channel.cpp b/storage/ndb/src/old_files/rep/state/Channel.cpp deleted file mode 100644 index a7f7b90d3fe7f06420e8282bc5e85cb4e046bf16..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/Channel.cpp +++ /dev/null @@ -1,487 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Channel.hpp" - -Channel::Channel() -{ - reset(); -} - -Channel::~Channel() -{ - /** - * Destroy list of selected tables - */ - for(Uint32 i=0; i < m_selectedTables.size(); i++) { - delete m_selectedTables[i]; - m_selectedTables[i] = 0; - } - m_selectedTables=0; -} - -void -Channel::reset() -{ - for (Uint32 i=0; i<MAX_NO_OF_NODE_GROUPS; i++) { - for (Uint32 j=0; j<NO_OF_POSITIONS; j++) { - state[i][j].set(1,0); - } - } - m_noOfNodeGroups = 0; - m_requestorEnabled = true; - m_transferEnabled = true; - m_applyEnabled = true; - m_deleteEnabled = true; - m_autoStartEnabled = false; - m_stopEpochId = intervalMax; - setSubKey(0); - setSubId(0); - m_stateSub = NO_SUBSCRIPTION_EXISTS; - m_stateRep = CONSISTENT; - m_metaScanEpochs = emptyInterval; - m_dataScanEpochs = emptyInterval; -} - -bool -Channel::requestTransfer(Uint32 nodeGrp, Interval * i) -{ - invariant(); - Interval tmp1, tmp2; - - // i = PS - SSReq - SS - App - intervalLeftMinus(state[nodeGrp][PS], state[nodeGrp][SSReq], &tmp1); - intervalLeftMinus(tmp1, state[nodeGrp][SS], &tmp2); - intervalLeftMinus(tmp2, state[nodeGrp][App], i); - - i->onlyLeft(GREP_SYSTEM_TABLE_MAX_RANGE); - i->onlyUpToValue(m_stopEpochId); - if (i->isEmpty()) return false; - - add(SSReq, nodeGrp, *i); - invariant(); - return true; -} - -bool -Channel::requestApply(Uint32 nodeGrp, Uint32 * epoch) -{ - invariant(); - Interval tmp1, tmp2; - - // tmp2 = SS - AppReq - App - intervalLeftMinus(state[nodeGrp][SS], state[nodeGrp][AppReq], &tmp1); - intervalLeftMinus(tmp1, state[nodeGrp][App], &tmp2); - - tmp2.onlyUpToValue(m_stopEpochId); - if (tmp2.isEmpty()) return false; - tmp2.onlyLeft(1); - - // Check that all GCI Buffers for epoch exists in SS - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - if (!state[nodeGrp][SS].inInterval(tmp2.first())) - return false; - } - - invariant(); - add(AppReq, nodeGrp, tmp2); - invariant(); - *epoch = tmp2.first(); - return true; -} - -bool -Channel::requestDelete(Uint32 nodeGrp, Interval * i) -{ - invariant(); - Interval tmp1; - - // i = (App cut PS) - DelReq - intervalCut(state[nodeGrp][App], state[nodeGrp][PS], &tmp1); - intervalLeftMinus(tmp1, state[nodeGrp][DelReq], i); - - if (i->isEmpty()) return false; - i->onlyLeft(GREP_SYSTEM_TABLE_MAX_RANGE); - - invariant(); - add(DelReq, nodeGrp, *i); - invariant(); - return true; -} - -void -Channel::add(Position pos, Uint32 nodeGrp, const Interval i) -{ - Interval r; - intervalAdd(state[nodeGrp][pos], i, &r); - state[nodeGrp][pos].set(r); -} - -void -Channel::clear(Position p, Uint32 nodeGrp, const Interval i) -{ - Interval r; - intervalLeftMinus(state[nodeGrp][p], i, &r); - state[nodeGrp][p].set(r); -} - -bool -Channel::isSynchable(Uint32 nodeGrp) -{ - return true; - /* - @todo This should be implemented... - - Interval tmp1, tmp2; - intervalAdd(state[nodeGrp][PS], state[nodeGrp][SSReq], &tmp1); - intervalAdd(tmp1, state[nodeGrp][SSReq], &tmp2); - intervalAdd(tmp2, state[nodeGrp][SS], &tmp1); - intervalAdd(tmp1, state[nodeGrp][AppReq], &tmp2); - intervalAdd(tmp2, state[nodeGrp][App], &tmp1); - if (intervalInclude(state[nodeGrp][PS], tmp1.right())) - return true; - else - return false; - */ -} - -/** - * Return the cut of all App:s. - */ -void -Channel::getFullyAppliedEpochs(Interval * interval) -{ - if (m_noOfNodeGroups < 1) { - *interval = emptyInterval; - return; - } - - *interval = universeInterval; - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - if (state[i][App].isEmpty()) { - *interval = emptyInterval; - return; - } - - if (interval->first() < state[i][App].first()) { - interval->setFirst(state[i][App].first()); - } - if (state[i][App].last() < interval->last()) { - interval->setLast(state[i][App].last()); - } - } - interval->normalize(); - return; -} - -/** - * Return true if it is ok to remove the subscription and then stop channel - */ -bool -Channel::isStoppable() -{ - /** - * Check that AppReq are empty for all nodegrps - */ - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - if (!state[i][AppReq].isEmpty()) { - RLOG(("Stop disallowed. AppReq is non-empty")); - return false; - } - } - - /** - * If stop immediately, then it is ok to stop now - */ - if (m_stopEpochId == 0) { - RLOG(("Stop allowed. AppReq empty and immediate stop requested")); - return true; - } - - /** - * If stop on a certain epoch, then - * check that stopEpochId is equal to the last applied epoch - */ - Interval interval; - getFullyAppliedEpochs(&interval); - if (m_stopEpochId > interval.last()) { - RLOG(("Stop disallowed. AppReq empty. Stop %d, LastApplied %d", - m_stopEpochId, interval.last())); - return false; - } - - return true; -} - -GrepError::Code -Channel::setStopEpochId(Uint32 n) -{ - /** - * If n equal to zero, use next possible epoch (max(App, AppReq)) - */ - if (n == 0) { - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - n = (state[i][App].last() > n) ? state[i][App].last() : n; - n = (state[i][AppReq].last() > n) ? state[i][AppReq].last() : n; - } - } - - /** - * If n >= max(App, AppReq) then set value, else return error code - */ - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - if (n < state[i][App].last()) return GrepError::ILLEGAL_STOP_EPOCH_ID; - if (n < state[i][AppReq].last()) return GrepError::ILLEGAL_STOP_EPOCH_ID; - } - - m_stopEpochId = n; - return GrepError::NO_ERROR; -}; - -bool -Channel::shouldStop() -{ - /** - * If (m_stopEpochId == App) then channel should stop - */ - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - if(m_stopEpochId != state[i][App].last()) return false; - } - return true; -} - -/***************************************************************************** - * SELECTIVE TABLE INTERFACE - *****************************************************************************/ - -GrepError::Code -Channel::addTable(const char * tableName) -{ - if(strlen(tableName)>MAX_TAB_NAME_SIZE) - return GrepError::REP_NOT_PROPER_TABLE; - /** - * No of separators are the number of table_name_separator found in tableName - * since a table is defined as <db>/<schema>/tablename. - * if noOfSeparators is not equal to 2, then it is not a valid - * table name. - */ - Uint32 noOfSeps = 0; - if(strlen(tableName) < 5) - return GrepError::REP_NOT_PROPER_TABLE; - for(Uint32 i =0; i < strlen(tableName); i++) - if(tableName[i]==table_name_separator) - noOfSeps++; - if(noOfSeps!=2) - return GrepError::REP_NOT_PROPER_TABLE; - table * t= new table(tableName); - for(Uint32 i=0; i<m_selectedTables.size(); i++) { - if(strcmp(tableName, m_selectedTables[i]->tableName)==0) - return GrepError::REP_TABLE_ALREADY_SELECTED; - } - m_selectedTables.push_back(t); - return GrepError::NO_ERROR; -} - -GrepError::Code -Channel::removeTable(const char * tableName) -{ - if(strlen(tableName)>MAX_TAB_NAME_SIZE) - return GrepError::REP_NOT_PROPER_TABLE; - /** - * No of separators are the number of table_name_separator found in tableName - * since a table is defined as <db>/<schema>/tablename. - * If noOfSeparators is not equal to 2, - * then it is not a valid table name. - */ - Uint32 noOfSeps = 0; - if(strlen(tableName) < 5) - return GrepError::REP_NOT_PROPER_TABLE; - for(Uint32 i =0; i < strlen(tableName); i++) - if(tableName[i]==table_name_separator) - noOfSeps++; - if(noOfSeps!=2) - return GrepError::REP_NOT_PROPER_TABLE; - for(Uint32 i=0; i<m_selectedTables.size(); i++) { - if(strcmp(tableName, m_selectedTables[i]->tableName)==0) { - delete m_selectedTables[i]; - m_selectedTables.erase(i); - return GrepError::NO_ERROR; - } - } - return GrepError::REP_TABLE_NOT_FOUND; -} - -void -Channel::printTables() -{ - if(m_selectedTables.size() == 0) - ndbout_c("| ALL TABLES " - " |"); - else { - for(Uint32 i=0; i<m_selectedTables.size(); i++) - ndbout_c("| %-69s |", m_selectedTables[i]->tableName); - } -} - -Vector<struct table *> * -Channel::getSelectedTables() -{ - if(m_selectedTables.size() == 0) return 0; - return &m_selectedTables; -} - -/***************************************************************************** - * PRINT - *****************************************************************************/ - -void -Channel::print(Position pos) -{ - switch(pos){ - case PS: ndbout << "PS Rep"; break; - case SSReq: ndbout << "Tra-Req"; break; - case SS: ndbout << "SS Rep"; break; - case AppReq: ndbout << "App-Req"; break; - case App: ndbout << "Applied"; break; - case DelReq: ndbout << "Del-Req"; break; - default: REPABORT("Unknown replication position"); - } -} - -void -Channel::print() -{ - for (Uint32 i=0; i<m_noOfNodeGroups; i++) { - print(i); - } -} - -void -Channel::print(Position pos, Uint32 nodeGrp) -{ - print(pos); - if (state[nodeGrp][pos].first() == 1 && state[nodeGrp][pos].last() == 0) { - ndbout << " EMPTY"; - } else { - ndbout << " [" << state[nodeGrp][pos].first() << "-" - << state[nodeGrp][pos].last() << "]"; - } -} - -static const char* -channelline = -"+-------------------------------------------------------------------------+\n" -; - -void -Channel::getEpochState(Position p, - Uint32 nodeGrp, - Uint32 * first, - Uint32 * last) { - if(state[nodeGrp][p].isEmpty()) { - *first = 1; - *last = 0; - return; - } - *first = state[nodeGrp][p].first(); - *last = state[nodeGrp][p].last(); -} - - -void -Channel::print(Uint32 nodeGrp) -{ - ndbout << channelline; - ndbout_c("| | Meta scan |" - " Data scan |"); - ndbout.print("| "); - if (m_metaScanEpochs.isEmpty()) { - ndbout.print("| "); - } else { - ndbout.print("| %10u-%-10u ", - m_metaScanEpochs.first(), m_metaScanEpochs.last()); - } - if (m_dataScanEpochs.isEmpty()) { - ndbout_c("| |"); - } else { - ndbout_c("| %10u-%-10u |", - m_dataScanEpochs.first(), m_dataScanEpochs.last()); - } - - /* --- */ - - ndbout << channelline; - ndbout_c("| Source Rep Server | Being Transfered |" - " Destination Rep Server |"); - if (state[nodeGrp][PS].isEmpty()) { - ndbout.print("| "); - } else { - ndbout.print("| %10u-%-10u ", - state[nodeGrp][PS].first(), state[nodeGrp][PS].last()); - } - if (state[nodeGrp][SSReq].isEmpty()) { - ndbout.print("| "); - } else { - ndbout.print("| %10u-%-10u ", - state[nodeGrp][SSReq].first(), state[nodeGrp][SSReq].last()); - } - if (state[nodeGrp][SS].isEmpty()) { - ndbout_c("| |"); - } else { - ndbout_c("| %10u-%-10u |", - state[nodeGrp][SS].first(), state[nodeGrp][SS].last()); - } - - /* --- */ - - ndbout << channelline; - ndbout_c("| Being Applied | Applied |" - " Being Deleted |"); - if (state[nodeGrp][AppReq].isEmpty()) { - ndbout.print("| "); - } else { - ndbout.print("| %10u-%-10u ", state[nodeGrp][AppReq].first(), - state[nodeGrp][AppReq].last()); - } - if (state[nodeGrp][App].isEmpty()) { - ndbout.print("| "); - } else { - ndbout.print("| %10u-%-10u ", - state[nodeGrp][App].first(), state[nodeGrp][App].last()); - } - if (state[nodeGrp][DelReq].isEmpty()) { - ndbout_c("| |"); - } else { - ndbout_c("| %10u-%-10u |", - state[nodeGrp][DelReq].first(), state[nodeGrp][DelReq].last()); - } -} - -/***************************************************************************** - * Private Methods - *****************************************************************************/ - -void -Channel::invariant() -{ - for (Uint32 j=0; j<MAX_NO_OF_NODE_GROUPS; j++) - { - if (!intervalDisjoint(state[j][SSReq], state[j][SS])) - REPABORT("Invariant 1 violated"); - if (!intervalDisjoint(state[j][AppReq], state[j][App])) - REPABORT("Invariant 2 violated"); - } -} diff --git a/storage/ndb/src/old_files/rep/state/Channel.hpp b/storage/ndb/src/old_files/rep/state/Channel.hpp deleted file mode 100644 index cdf4eecca636736fd577e2af5daf52feafd2651a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/Channel.hpp +++ /dev/null @@ -1,206 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef CHANNEL_HPP -#define CHANNEL_HPP - -#include "Interval.hpp" -#include <rep/rep_version.hpp> -#include <Vector.hpp> -#include <ndb_limits.h> -#include <GrepError.hpp> - - -/** - * Max number of requested epochs from PS - */ -#define GREP_SYSTEM_TABLE_MAX_RANGE 20 - -#define MAX_NO_OF_NODE_GROUPS 32 - -/** - * This table struct is used in m_selectedTables - */ -struct table{ - table(const char * n) {strncpy(tableName, n, MAX_TAB_NAME_SIZE);} - char tableName[MAX_TAB_NAME_SIZE]; -}; - -/** - * @class Channel - * @brief Represents location of various epochs belonging to a subscription - */ -class Channel { -public: - enum StateSub - { - NO_SUBSCRIPTION_EXISTS, - - CREATING_SUBSCRIPTION_ID, - SUBSCRIPTION_ID_CREATED, - - STARTING_SUBSCRIPTION, - SUBSCRIPTION_STARTED - }; - - enum StateRep - { - CONSISTENT, ///< Consistent database. Grep not running. - METALOG_STARTING, ///< Starting. Starting METALOG subscription - METALOG_STARTED, - METASCAN_STARTING, ///< Starting. Starting METASCAN subscription - METASCAN_COMPLETED, - DATALOG_STARTING, ///< Starting. Starting DATALOG subscription - DATALOG_STARTED, - DATASCAN_STARTING, ///< Starting. Starting DATASCAN subscription - DATASCAN_COMPLETED, - LOG, ///< Started. Cons/Inconsistent. Grep running. - ///< All scan records have been applied. - STOPPING ///< Channel is stopping - }; - - /** - * Storage "positions" of Epochs - */ - enum Position { - PS = 0, ///< Stored on Primary System REP - SSReq = 1, ///< Requested for transfer to Standby System - SS = 2, ///< Stored on Standby System REP - AppReq = 3, ///< Requested to be applied to Standby System - App = 4, ///< Has been applied to Standby System - DelReq = 5, ///< Has been requested to be deleted on PS REP & SS REP - NO_OF_POSITIONS = 6 - }; //DONT FORGET TO ADD STUFF in position2Name if u add somehting here, - - /*************************************************************************** - * CONSTRUCTOR / DESTRUCTOR - ***************************************************************************/ - Channel(); - ~Channel(); - - /** - * Get and set no of nodegroups that actually exists on PS - */ - void setNoOfNodeGroups(Uint32 n) { m_noOfNodeGroups = n; }; - Uint32 getNoOfNodeGroups() { return m_noOfNodeGroups; }; - void getEpochState(Position p, - Uint32 nodeGrp, - Uint32 * first, - Uint32 * last); - Uint32 getEpochState(Position p, Uint32 nodegroup); - bool m_requestorEnabled; - bool m_transferEnabled; - bool m_applyEnabled; - bool m_deleteEnabled; - bool m_autoStartEnabled; - - /*************************************************************************** - * GETTERS and SETTERS - ***************************************************************************/ - bool requestTransfer(Uint32 nodeGrp, Interval * i); - bool requestApply(Uint32 nodeGrp, Uint32 * epoch); - bool requestDelete(Uint32 nodeGrp, Interval * i); - - void add(Position pos, Uint32 nodeGrp, const Interval i); - void clear(Position pos, Uint32 nodeGrp, const Interval i); - - void setSubId(Uint32 subId) { m_subId=subId; }; - Uint32 getSubId() { return m_subId; }; - - Uint32 getSubKey() { return m_subKey; }; - void setSubKey(Uint32 subKey) { m_subKey=subKey; }; - - bool isSynchable(Uint32 nodeGrp); - GrepError::Code addTable(const char * tableName); - GrepError::Code removeTable(const char * tableName); - void printTables(); - bool isSelective() {return m_selectedTables.size()>0;}; - Vector<struct table *> * getSelectedTables(); - - void reset(); - - StateRep getState() { return m_stateRep; } - void setState(StateRep sr) { m_stateRep = sr; } - - StateSub getStateSub() { return m_stateSub; } - void setStateSub(StateSub ss) { m_stateSub = ss; } - - Interval getMetaScanEpochs() { return m_metaScanEpochs; } - void setMetaScanEpochs(Interval i) { m_metaScanEpochs = i; } - Interval getDataScanEpochs() { return m_dataScanEpochs; } - void setDataScanEpochs(Interval i) { m_dataScanEpochs = i; } - - GrepError::Code setStopEpochId(Uint32 n); - Uint32 getStopEpochId() { return m_stopEpochId; }; - - bool isStoppable(); - bool shouldStop(); - - bool subscriptionExists() { return (m_subId != 0 && m_subKey != 0); } - - /*************************************************************************** - * GETTERS - ***************************************************************************/ - Uint32 getFirst(Position pos, Uint32 nodeGrp) { - return state[nodeGrp][pos].first(); - } - - Uint32 getLast(Position pos, Uint32 nodeGrp) { - return state[nodeGrp][pos].last(); - } - - void getFullyAppliedEpochs(Interval * i); - - /*************************************************************************** - * PRINT METHODS - ***************************************************************************/ - void print(); - void print(Position pos); - void print(Position pos, Uint32 nodeGrp); - void print(Uint32 nodeGrp); - - /*************************************************************************** - * PUBLIC ATTRIBUTES - ***************************************************************************/ - -private: - /*************************************************************************** - * PRIVATE ATTRIBUTES - ***************************************************************************/ - StateRep m_stateRep; // Replication state - StateSub m_stateSub; // Subscription state - - Uint32 m_subId; - Uint32 m_subKey; - - Uint32 m_noOfNodeGroups; // Number of node grps in this channel - Uint32 m_stopEpochId; // Epoch id to stop subscription - - Interval state[MAX_NO_OF_NODE_GROUPS][NO_OF_POSITIONS]; - - Interval m_metaScanEpochs; - Interval m_dataScanEpochs; - - - Vector<struct table *> m_selectedTables; - void invariant(); // Abort if channel metadata is inconsistent - char * position2Name(Position p); -public: - bool copy(Position from, Position to, Uint32 range, - Uint32 * f, Uint32 * l, Uint32 nodeGrp); -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/state/Interval.cpp b/storage/ndb/src/old_files/rep/state/Interval.cpp deleted file mode 100644 index 8266f19c58daf426c00788d2e971b337a783e369..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/Interval.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "Interval.hpp" - -#undef min -#undef max -Uint32 max(Uint32 a, Uint32 b) { return a > b ? a : b; } -Uint32 min(Uint32 a, Uint32 b) { return a < b ? a : b; } - -Interval::Interval() -{ - set(1, 0); // EmptyInterval -} - -Interval::Interval(Uint32 f, Uint32 l) -{ - set(f, l); -} - -bool -Interval::isEmpty() const -{ - return (m_first > m_last) ? true : false; -} - -bool -Interval::isEqual(Uint32 a, Uint32 b) const -{ - return (a==m_first && b==m_last); -} - -bool -Interval::inInterval(Uint32 a) const -{ - return (m_first <= a && a <= m_last); -} - -void -Interval::set(Uint32 first, Uint32 last) -{ - m_first = first; - m_last = last; - normalize(); -} - -void -Interval::set(const Interval i) -{ - m_first = i.first(); - m_last = i.last(); - normalize(); -} - -void -Interval::setFirst(Uint32 first) -{ - m_first = first; -} - -void -Interval::setLast(Uint32 last) -{ - m_last = last; -} - -void -Interval::onlyLeft(Uint32 n) -{ - if (size() > n) m_last = m_first + n - 1; -} - -void -Interval::onlyUpToValue(Uint32 n) -{ - m_last = min(n, m_last); - normalize(); -} - -/*****************************************************************************/ - -void -Interval::normalize() -{ - if (isEmpty()) { - m_first = 1; - m_last = 0; - } -} - - -/*****************************************************************************/ - -bool -intervalAdd(const Interval a, const Interval b, Interval * r) -{ - /** - * Non-empty disjoint intervals - */ - if (!a.isEmpty() && - !b.isEmpty() && - (a.last() + 1 < b.first() || - b.last() + 1 < a.first()) ) { - return false; // Illegal add - } - - /** - * Interval A empty -> return B - */ - if (a.isEmpty()) { - r->set(b); - return true; - } - - /** - * Interval B empty -> return A - */ - if (b.isEmpty()) { - r->set(a); - return true; - } - - r->set(min(a.first(), b.first()), - max(a.last(), b.last())); - return true; -} - -/** - * Subtract the left part of interval 'a' up to last of 'b'. - * - * @note This is NOT ordinary arithmetic interval minus. - * In ordinary arithmetic, [11-25] - [12-15] would be undefined, - * but here it is [11-25] - [12-15] = [16-25]. - */ -void -intervalLeftMinus(const Interval a, const Interval b, Interval * r) -{ - if(b.last() != intervalMax) - r->set(max(a.first(), b.last()+1), a.last()); - else - r->set(max(a.first(), intervalMax), a.last()); -} - -void -intervalCut(const Interval a, const Interval b, Interval * r) -{ - r->set(max(a.first(), b.first()), min(a.last(), b.last())); - r->normalize(); -} - -bool -intervalDisjoint(const Interval a, const Interval b) -{ - return (a.isEmpty() || - b.isEmpty() || - a.last() < b.first() || - b.last() < a.first()); -} diff --git a/storage/ndb/src/old_files/rep/state/Interval.hpp b/storage/ndb/src/old_files/rep/state/Interval.hpp deleted file mode 100644 index 935adaf26b1baf5516ad146051ed72d60b1603eb..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/Interval.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef INTERVAL_HPP -#define INTERVAL_HPP - -#include <NdbOut.hpp> -#include <ndb_types.h> - -/** - * @class Interval - * @brief Represents an interval - */ -class Interval { -public: - Interval(); - Interval(Uint32, Uint32); - - /** - * Getters of first and last - */ - inline Uint32 first() const { return m_first; } - inline Uint32 last() const { return m_last; } - - /** - * Check if interval is empty - */ - bool isEmpty() const; - bool isEqual(Uint32 a, Uint32 b) const; - bool inInterval(Uint32 a) const; - - /** - * Size of interval - */ - Uint32 size() const { - return (!isEmpty()) ? m_last - m_first + 1 : 0; - } - - /** - * Set interval - */ - void set(Uint32 first, Uint32 last); - void set(const Interval i); - - void setFirst(Uint32 first); - void setLast(Uint32 last); - - /** - * Reduce the interval to only the n left elements of the - * interval. If the interval is shorter than n, then - * interval is not changed. - */ - void onlyLeft(Uint32 n); - - /** - * Reduce the interval to have at most the value n - * as the last value. - * This method can make the interval empty. - */ - void onlyUpToValue(Uint32 n); - - /** - * Print - */ - void print() { - ndbout << "[" << m_first << "," << m_last << "]"; - } - - void normalize(); -private: - Uint32 m_first; - Uint32 m_last; -}; - -const Uint32 intervalMin = 0; -const Uint32 intervalMax = 0xffffffff; -const Interval emptyInterval(1, 0); -const Interval universeInterval(intervalMin, intervalMax); - -/** - * @return true if intervals could be added - */ -bool intervalAdd(const Interval a, const Interval b, Interval * c); - -void intervalLeftMinus(const Interval a, const Interval b, Interval * c); - -void intervalCut(const Interval a, const Interval b, Interval * c); - -/** - * @return true if intervals are disjoint - */ -bool intervalDisjoint(const Interval a, const Interval b); - -#endif diff --git a/storage/ndb/src/old_files/rep/state/Makefile b/storage/ndb/src/old_files/rep/state/Makefile deleted file mode 100644 index 3eed69a97ddab13272306a860f2af509d7d70076..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -include .defs.mk - -TYPE := repserver kernel - -ARCHIVE_TARGET := reprequestor - -DIR := testRepState \ - testInterval - -SOURCES = RepState.cpp \ - RepStateEvent.cpp \ - RepStateRequests.cpp \ - \ - Channel.cpp \ - Interval.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/state/RepState.cpp b/storage/ndb/src/old_files/rep/state/RepState.cpp deleted file mode 100644 index d8a50961a3c9774b0bea0e5222a303886f04e0f3..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/RepState.cpp +++ /dev/null @@ -1,869 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepState.hpp" - -#include <signaldata/SumaImpl.hpp> -#include <NdbApiSignal.hpp> -#include <Properties.hpp> -//#define DBUG_REQUESTOR - -#ifdef DBUG_REQUESTOR -#define DBUG_REQUESTOR_PRINT(X) ndbout_c(X); -#else -#define DBUG_REQUESTOR_PRINT(X) -#endif - -/**************************************************************************** - * Constructor / Destructor / Init - ****************************************************************************/ -RepState::RepState() -{ - m_connected = UNKNOWN; - m_repConnected = UNKNOWN; - m_mutex = NdbMutex_Create(); - m_stopEpoch = 0; - m_subIdToRemove = 0; - m_subKeyToRemove = 0; -} - -RepState::~RepState() -{ - NdbMutex_Destroy(m_mutex); -} - -void -RepState::setSubscriptionRequests(FuncRequestCreateSubscriptionId f1, - FuncRequestCreateSubscription f2, - FuncRequestRemoveSubscription f3) -{ - m_funcRequestCreateSubscriptionId = f1; - m_funcRequestCreateSubscription = f2; - m_funcRequestRemoveSubscription = f3; -} - -void -RepState::setIntervalRequests(FuncRequestTransfer f1, - FuncRequestApply f2, - FuncRequestDeleteSS f3, - FuncRequestDeletePS f4) -{ - m_funcRequestTransfer = f1; - m_funcRequestApply = f2; - m_funcRequestDeleteSS = f3; - m_funcRequestDeletePS = f4; -} - -void -RepState::setStartRequests(FuncRequestStartMetaLog * f5, - FuncRequestStartDataLog * f6, - FuncRequestStartMetaScan * f7, - FuncRequestStartDataScan * f8, - FuncRequestEpochInfo * f9) -{ - m_funcRequestStartMetaLog = f5; - m_funcRequestStartDataLog = f6; - m_funcRequestStartMetaScan = f7; - m_funcRequestStartDataScan = f8; - m_funcRequestEpochInfo = f9; -} - - -/**************************************************************************** - * Private Helper functions - ****************************************************************************/ - -void -RepState::requestTransfer(NdbApiSignal * signal) -{ - DBUG_REQUESTOR_PRINT("RepState: Transfer calculations started"); - for(Uint32 nodeGrp=0; nodeGrp<m_channel.getNoOfNodeGroups(); nodeGrp++) { - DBUG_REQUESTOR_PRINT("RepState: Transfer calc for node grp"); - Interval i; - if (m_channel.requestTransfer(nodeGrp, &i)) { - m_funcRequestTransfer(m_extSender, signal, nodeGrp, i.first(), i.last()); - } - } -} - -void -RepState::requestApply(NdbApiSignal * signal) -{ - DBUG_REQUESTOR_PRINT("RepState: Apply calculations started"); - for(Uint32 nodeGrp=0; nodeGrp<m_channel.getNoOfNodeGroups(); nodeGrp++) { - DBUG_REQUESTOR_PRINT("RepState: Apply calc for node grp"); - Uint32 gci; - if (m_channel.requestApply(nodeGrp, &gci)) { - Uint32 force = (m_channel.getState() == Channel::LOG) ? 0 : 1; - m_funcRequestApply(m_applier, signal, nodeGrp, gci, gci, force); - } - } -} - -void -RepState::requestDelete(NdbApiSignal * signal) -{ - DBUG_REQUESTOR_PRINT("RepState: Delete calculations started"); - for(Uint32 nodeGrp=0; nodeGrp<m_channel.getNoOfNodeGroups(); nodeGrp++) { - DBUG_REQUESTOR_PRINT("RepState: Delete calc for node grp"); - Interval i; - if (m_channel.requestDelete(nodeGrp, &i)){ - m_funcRequestDeleteSS(m_gciContainer, signal, nodeGrp, - i.first(), i.last()); - m_funcRequestDeletePS(m_extSender, signal, nodeGrp, i.first(), i.last()); - } - } -} - -void -RepState::requestEpochInfo(NdbApiSignal * signal) -{ - DBUG_REQUESTOR_PRINT("RepState: Epoch Info calculations"); - for(Uint32 nodeGrp=0; nodeGrp<m_channel.getNoOfNodeGroups(); nodeGrp++) { - m_funcRequestEpochInfo(m_extSender, signal, nodeGrp); - } -} - -/**************************************************************************** - * Public - ****************************************************************************/ - -GrepError::Code -RepState::add(Channel::Position s, Uint32 nodeGrp, const Interval i) -{ - m_channel.add(s, nodeGrp, i); - - if(s == Channel::PS) - { - m_connected = CONNECTED; - m_connected_counter = 0; - } - - Interval fullEpochs; - m_channel.getFullyAppliedEpochs(&fullEpochs); - if(s == Channel::App && - m_channel.getState() == Channel::DATASCAN_COMPLETED && - fullEpochs.last() >= m_channel.getDataScanEpochs().last() && - fullEpochs.last() >= m_channel.getMetaScanEpochs().last()) - { - RLOG(("[%d-%d] fully applied. Channel state changed to LOG", - fullEpochs.first(), fullEpochs.last())); - m_channel.setState(Channel::LOG); - disableAutoStart(); - } - - return GrepError::NO_ERROR; -} - -GrepError::Code -RepState::clear(Channel::Position s, Uint32 nodeGrp, const Interval i) -{ - m_channel.clear(s, nodeGrp, i); - return GrepError::NO_ERROR; -} - -/**************************************************************************** - * Execute - * - * This method should only be called from Requestor! - ****************************************************************************/ - -GrepError::Code -RepState::protectedExecute() -{ - GrepError::Code err; - - NdbMutex_Lock(m_mutex); - - NdbApiSignal* signal = m_extSender->getSignal(); - if (signal == NULL) { - err = GrepError::COULD_NOT_ALLOCATE_MEM_FOR_SIGNAL; - } else { - err = execute(signal); - } - NdbMutex_Unlock(m_mutex); - return err; -} - -GrepError::Code -RepState::execute(NdbApiSignal* signal) -{ - Uint32 subId = m_channel.getSubId(); - Uint32 subKey = m_channel.getSubKey(); - - if (!m_channel.m_requestorEnabled) - return GrepError::NO_ERROR; - - /** - * @todo Should have subscriptions in here - */ - requestEpochInfo(signal); - - /** - * Update connected counter (Silence time) - */ - m_connected_counter++; - if (m_connected_counter > REQUESTOR_EXECUTES_NEEDED_FOR_UNKNOWN_CONNECTION) { - m_connected = UNKNOWN; - } - - switch (m_channel.getState()) - { - case Channel::CONSISTENT: - if (isAutoStartEnabled()) { - switch (m_channel.getStateSub()) - { - case Channel::NO_SUBSCRIPTION_EXISTS: - m_funcRequestCreateSubscriptionId(m_extSender, signal); - m_channel.setStateSub(Channel::CREATING_SUBSCRIPTION_ID); - break; - - case Channel::CREATING_SUBSCRIPTION_ID: - break; - - case Channel::SUBSCRIPTION_ID_CREATED: - if(m_channel.isSelective()) - m_funcRequestCreateSubscription(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey(), - m_channel.getSelectedTables()); - else - m_funcRequestCreateSubscription(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey(), - 0); - m_channel.setStateSub(Channel::STARTING_SUBSCRIPTION); - break; - - case Channel::STARTING_SUBSCRIPTION: - break; - - case Channel::SUBSCRIPTION_STARTED: - m_funcRequestStartMetaLog(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - m_channel.setState(Channel::METALOG_STARTING); - break; - } - } - break; - - case Channel::METALOG_STARTING: - break; - - case Channel::METALOG_STARTED: - if (isAutoStartEnabled()) { - m_funcRequestStartMetaScan(m_extSender, signal, subId, subKey); - m_channel.setState(Channel::METASCAN_STARTING); - } - break; - - case Channel::METASCAN_STARTING: - break; - - case Channel::METASCAN_COMPLETED: - if (isAutoStartEnabled()) { - m_funcRequestStartDataLog(m_extSender, signal, subId, subKey); - m_channel.setState(Channel::DATALOG_STARTING); - } - break; - - case Channel::DATALOG_STARTING: - break; - - case Channel::DATALOG_STARTED: - if (isAutoStartEnabled()) { - m_funcRequestStartDataScan(m_extSender, signal, subId, subKey); - m_channel.setState(Channel::DATASCAN_STARTING); - } - break; - - case Channel::DATASCAN_STARTING: - break; - - case Channel::DATASCAN_COMPLETED: - break; - - case Channel::LOG: - if (m_channel.shouldStop()) { - disableTransfer(); - m_channel.setState(Channel::STOPPING); - } - break; - - case Channel::STOPPING: - if (m_channel.m_transferEnabled) - { - REPABORT("Illegal stopping state while transfer is still enabled"); - } - /** - * check if channel has a subscription, if not, - * check if we have marked a subscription that we want to remove - * and remove it. This is used to clean up "dangling subscriptions" - * after various crashes - */ - if(!m_channel.subscriptionExists()) - { - if(m_subIdToRemove && m_subKeyToRemove) - { - m_funcRequestRemoveSubscription(m_extSender, signal, - m_subIdToRemove, - m_subKeyToRemove); - eventSubscriptionDeleted( m_subIdToRemove, - m_subKeyToRemove); - return GrepError::NO_ERROR; - } - else { - return GrepError::SUBSCRIPTION_ID_NOT_FOUND; - } - } else { - if (m_channel.isStoppable()) - { - - m_funcRequestRemoveSubscription(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - eventSubscriptionDeleted(m_channel.getSubId(), - m_channel.getSubKey()); - } - else - return GrepError::CHANNEL_NOT_STOPPABLE; - - } - break; - - default: - REPABORT("Illegal replication state"); - } - if (m_channel.m_transferEnabled) requestTransfer(signal); - if (m_channel.m_applyEnabled) requestApply(signal); - if (m_channel.m_deleteEnabled) requestDelete(signal); - return GrepError::NO_ERROR; -} - -/**************************************************************************** - * Request - * - * This method should only be called from Main Thread! - ****************************************************************************/ - -GrepError::Code -RepState::protectedRequest(GrepReq::Request req, Uint32 arg) -{ - return protectedRequest(req, arg, 0); -} - -GrepError::Code -RepState::protectedRequest(GrepReq::Request req, Uint32 arg1, Uint32 arg2) -{ - GrepError::Code code; - NdbMutex_Lock(m_mutex); - - NdbApiSignal* signal = m_extSender->getSignal(); - if (signal == NULL) { - code = GrepError::COULD_NOT_ALLOCATE_MEM_FOR_SIGNAL; - } else { - code = request(req, arg1, arg2, signal); - } - - NdbMutex_Unlock(m_mutex); - return code; -} - -GrepError::Code -RepState::protectedAddTable(const char * fullTableName) -{ - GrepError::Code code; - NdbMutex_Lock(m_mutex); - code = m_channel.addTable(fullTableName); - NdbMutex_Unlock(m_mutex); - return code; -} - -GrepError::Code -RepState::protectedRemoveTable(const char * fullTableName) -{ - GrepError::Code code; - if(m_channel.getStateSub() != Channel::NO_SUBSCRIPTION_EXISTS) - return GrepError::START_ALREADY_IN_PROGRESS; - NdbMutex_Lock(m_mutex); - code = m_channel.removeTable(fullTableName); - NdbMutex_Unlock(m_mutex); - return code; -} - -GrepError::Code -RepState::request(GrepReq::Request request, Uint32 arg1, Uint32 arg2, - NdbApiSignal* signal) -{ - switch (request) - { - /************************************************************************* - * STATUS etc - *************************************************************************/ - - case GrepReq::STATUS: - printStatus(); - break; - - case GrepReq::REMOVE_BUFFERS: - return GrepError::NOT_YET_IMPLEMENTED; - - /************************************************************************* - * START - *************************************************************************/ - - case GrepReq::CREATE_SUBSCR: - if (m_channel.getStateSub() != Channel::NO_SUBSCRIPTION_EXISTS) - return GrepError::SUBSCRIPTION_ID_ALREADY_EXIST; - - m_funcRequestCreateSubscriptionId(m_extSender, signal); - m_channel.setStateSub(Channel::CREATING_SUBSCRIPTION_ID); - return GrepError::NO_ERROR; - - case GrepReq::START_SUBSCR: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - if (m_channel.getStateSub() != Channel::SUBSCRIPTION_ID_CREATED) - return GrepError::SUBSCRIPTION_ID_NOT_FOUND; - if(m_channel.isSelective()) - m_funcRequestCreateSubscription(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey(), - m_channel.getSelectedTables()); - else - m_funcRequestCreateSubscription(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey(), - 0); - m_channel.setStateSub(Channel::STARTING_SUBSCRIPTION); - return GrepError::NO_ERROR; - - case GrepReq::START_METALOG: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - if (m_channel.getStateSub() != Channel::SUBSCRIPTION_STARTED) - return GrepError::SUBSCRIPTION_NOT_STARTED; - if (m_channel.getState() != Channel::CONSISTENT) - return GrepError::START_OF_COMPONENT_IN_WRONG_STATE; - - m_funcRequestStartMetaLog(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - m_channel.setState(Channel::METALOG_STARTING); - return GrepError::NO_ERROR; - - case GrepReq::START_METASCAN: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - if (m_channel.getStateSub() != Channel::SUBSCRIPTION_STARTED) - return GrepError::SUBSCRIPTION_NOT_STARTED; - if (m_channel.getState() != Channel::METALOG_STARTED) - return GrepError::START_OF_COMPONENT_IN_WRONG_STATE; - - m_funcRequestStartMetaScan(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - m_channel.setState(Channel::METASCAN_STARTING); - return GrepError::NO_ERROR; - - case GrepReq::START_DATALOG: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - if (m_channel.getStateSub() != Channel::SUBSCRIPTION_STARTED) - return GrepError::SUBSCRIPTION_NOT_STARTED; - if (m_channel.getState() != Channel::METASCAN_COMPLETED) - return GrepError::START_OF_COMPONENT_IN_WRONG_STATE; - - m_funcRequestStartDataLog(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - m_channel.setState(Channel::DATALOG_STARTING); - return GrepError::NO_ERROR; - - case GrepReq::START_DATASCAN: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - if (m_channel.getStateSub() != Channel::SUBSCRIPTION_STARTED) - return GrepError::SUBSCRIPTION_NOT_STARTED; - if (m_channel.getState() != Channel::DATALOG_STARTED) - return GrepError::START_OF_COMPONENT_IN_WRONG_STATE; - - m_funcRequestStartDataScan(m_extSender, signal, - m_channel.getSubId(), - m_channel.getSubKey()); - m_channel.setState(Channel::DATASCAN_STARTING); - return GrepError::NO_ERROR; - - case GrepReq::START_REQUESTOR: - enable(); - return GrepError::NO_ERROR; - - case GrepReq::START_TRANSFER: - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - enableTransfer(); - return GrepError::NO_ERROR; - - case GrepReq::START_APPLY: - enableApply(); - return GrepError::NO_ERROR; - - case GrepReq::START_DELETE: - enableDelete(); - return GrepError::NO_ERROR; - - case GrepReq::START: - if (isAutoStartEnabled()) - return GrepError::START_ALREADY_IN_PROGRESS; - - enableAutoStart(); - return GrepError::NO_ERROR; - - /************************************************************************* - * STOP - *************************************************************************/ - - case GrepReq::STOP: - if (m_channel.getStateSub() == Channel::NO_SUBSCRIPTION_EXISTS) - return GrepError::SUBSCRIPTION_NOT_STARTED; - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - - if (arg1 == 0) { - /** - * Stop immediately - */ - disableTransfer(); - m_channel.setState(Channel::STOPPING); - m_channel.setStopEpochId(0); - return GrepError::NO_ERROR; - } else { - /** - * Set future stop epoch - */ - return m_channel.setStopEpochId(arg1); - } - - case GrepReq::STOP_SUBSCR: - { - if(m_subIdToRemove == 0 && m_subKeyToRemove == 0) { - m_subIdToRemove = arg1; - m_subKeyToRemove = arg2; - } else { - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - } - - if(m_channel.getSubId() != 0 && m_channel.getSubKey() != 0) - return GrepError::ILLEGAL_USE_OF_COMMAND; - if (m_channel.getState() == Channel::STOPPING) - return GrepError::ILLEGAL_ACTION_WHEN_STOPPING; - disableTransfer(); - m_channel.setState(Channel::STOPPING); - return GrepError::NO_ERROR; - } - case GrepReq::STOP_METALOG: - case GrepReq::STOP_METASCAN: - case GrepReq::STOP_DATALOG: - case GrepReq::STOP_DATASCAN: - return GrepError::NOT_YET_IMPLEMENTED; - - case GrepReq::STOP_REQUESTOR: - disable(); - return GrepError::NO_ERROR; - - case GrepReq::STOP_TRANSFER: - disableTransfer(); - return GrepError::NO_ERROR; - - case GrepReq::STOP_APPLY: - disableApply(); - return GrepError::NO_ERROR; - - case GrepReq::STOP_DELETE: - disableDelete(); - return GrepError::NO_ERROR; - - default: - ndbout_c("RepCommandInterpreter: Illegal request received"); - return GrepError::NOT_YET_IMPLEMENTED; - } - return GrepError::NOT_YET_IMPLEMENTED; -} - -/**************************************************************************** - * - ****************************************************************************/ - -/* -GrepError::Code -RepState::slowStop() -{ - switch(m_channel.getState()) - { - case Channel::LOG: - m_channel.setState(Channel::LOG_SLOW_STOP); - return GrepError::NO_ERROR; - default: - return GrepError::REQUESTOR_ILLEGAL_STATE_FOR_SLOWSTOP; - } -} - -GrepError::Code -RepState::fastStop() -{ - switch(m_channel.getState()) - { - case Channel::LOG: - m_channel.setState(Channel::LOG_FAST_STOP); - return GrepError::NO_ERROR; - default: - return GrepError::REQUESTOR_ILLEGAL_STATE_FOR_FASTSTOP; - } -} -*/ - -/**************************************************************************** - * Print Status - ****************************************************************************/ - -static const char* -headerText = -"+-------------------------------------------------------------------------+\n" -"| MySQL Replication Server |\n" -"+-------------------------------------------------------------------------+\n" -; - -static const char* -channelHeaderText = -"+-------------------------------------------------------------------------+\n" -"| Applier Channel 1 Replication Status |\n" -"+-------------------------------------------------------------------------+\n" -; - -static const char* -line = -"+-------------------------------------------------------------------------+\n" -; - - -Properties * -RepState::getStatus() -{ - Properties * prop = new Properties(); - if(prop == NULL) - return NULL; - NdbMutex_Lock(m_mutex); - - prop->put("nodegroups", (int)m_channel.getNoOfNodeGroups()); -// prop->put("epoch_state", m_channel.getEpochState()); - NdbMutex_Unlock(m_mutex); - return prop; -} - - -Properties * RepState::query(QueryCounter counter, Uint32 replicationId) -{ - Properties * prop = new Properties(); - if(prop == NULL) - return NULL; - NdbMutex_Lock(m_mutex); - if(counter != ~(Uint32)0) - getEpochState((Channel::Position)counter, prop ); - prop->put("no_of_nodegroups", m_channel.getNoOfNodeGroups()); - prop->put("subid", m_channel.getNoOfNodeGroups()); - prop->put("subkey", m_channel.getSubKey()); - prop->put("connected_db", m_connected); - prop->put("connected_rep", m_repConnected); - prop->put("state_sub", (int)m_channel.getStateSub()); - prop->put("state", (int)m_channel.getState()); - - NdbMutex_Unlock(m_mutex); - return prop; - -} - -void -RepState::getEpochState(Channel::Position pos, Properties * p) -{ - char first_buf[20]; - char last_buf[20]; - int pos_first = 0, pos_last = 0; - Uint32 first = 0, last = 0; - for(Uint32 i = 0; i < m_channel.getNoOfNodeGroups() ; i++) - { - m_channel.getEpochState(pos, i, &first, &last); - pos_first += sprintf(first_buf+pos_first,"%d%s",first,","); - pos_last += sprintf(last_buf+pos_last,"%d%s",last,","); - } -/** - * remove trailing comma - */ - pos_first--; - pos_last--; - first_buf[pos_first]= '\0'; - last_buf[pos_last]= '\0'; -#if 0 - sprintf(first_buf+pos_first,"",""); - sprintf(last_buf + pos_last,"",""); -#endif - - p->put("first", first_buf); - p->put("last", last_buf); - -} - - -void -RepState::printStatus() -{ - /*************************************************************************** - * Global Status - ***************************************************************************/ - ndbout << headerText; - switch (m_connected) - { - case CONNECTED: - ndbout << "| Source: Connected "; break; - case DISCONNECTED: - ndbout << "| Source: Disconnected "; break; - case CONNECTABLE: - ndbout << "| Source: Disconnected "; break; - default: - ndbout << "| Source: Unknown "; break; - } - switch (m_repConnected) - { - case CONNECTED: - ndbout << "(Rep: Connected) "; break; - case DISCONNECTED: - ndbout << "(Rep: Disconnected) "; break; - case CONNECTABLE: - ndbout << "(Rep: Disconnected) "; break; - default: - ndbout << "(Rep: Unknown) "; break; - } - ndbout << " |" << endl; - ndbout << "| Autostart: " << (isAutoStartEnabled() ? "On " : "Off") - << " "; - ndbout_c(" Silence time: %10u |", m_connected_counter); - - /*************************************************************************** - * Channel Status - ***************************************************************************/ - ndbout << channelHeaderText; - switch(m_channel.getStateSub()) { - case Channel::NO_SUBSCRIPTION_EXISTS: - ndbout_c("| Subscription: Non-existing " - " |"); - break; - case Channel::CREATING_SUBSCRIPTION_ID: - ndbout_c("| Subscription: Non-existing (Id is being created)" - " |"); - break; - case Channel::SUBSCRIPTION_ID_CREATED: - ndbout_c("| Subscription: %-3d-%-6d in state: Not yet started " - " |", - m_channel.getSubId(), m_channel.getSubKey()); - break; - case Channel::STARTING_SUBSCRIPTION: - ndbout_c("| Subscription: %-3d-%-6d in state: Being started " - " |", - m_channel.getSubId(), m_channel.getSubKey()); - break; - case Channel::SUBSCRIPTION_STARTED: - ndbout_c("| Subscription: %-3d-%-6d in state: Started " - " |", - m_channel.getSubId(), m_channel.getSubKey()); - break; - default: - REPABORT("Illegal subscription state"); - } - ndbout << "| Stop epoch: "; - if (m_channel.getStopEpochId() == intervalMax) { - ndbout << "No stop defined "; - } else { - ndbout.print("%-10d ", - m_channel.getStopEpochId()); - } - ndbout << " |" << endl; - - ndbout << "| State: "; - switch(m_channel.getState()) - { - case Channel::CONSISTENT: - ndbout << "Local database is subscription consistent "; - break; - case Channel::METALOG_STARTING: - ndbout << "Starting (Phase 1: Metalog starting) "; - break; - case Channel::METALOG_STARTED: - ndbout << "Starting (Phase 2: Metalog started) "; - break; - case Channel::METASCAN_STARTING: - ndbout << "Starting (Phase 3: Metascan starting) "; - break; - case Channel::METASCAN_COMPLETED: - ndbout << "Starting (Phase 4: Metascan completed) "; - break; - case Channel::DATALOG_STARTING: - ndbout << "Starting (Phase 5: Datalog starting) "; - break; - case Channel::DATALOG_STARTED: - ndbout << "Starting (Phase 6: Datalog started) "; - break; - case Channel::DATASCAN_STARTING: - ndbout << "Starting (Phase 7: Datascan completed) "; - break; - case Channel::DATASCAN_COMPLETED: - ndbout << "Starting (Phase 8: Datascan completed) "; - break; - case Channel::LOG: - ndbout << "Logging "; - break; - case Channel::STOPPING: - ndbout << "Stopping (Stopped when all epochs applied) "; - break; - } - ndbout << " |" << endl; - -/* @todo - ndbout_c("| Syncable: Yes/Scan/No/Unknown (Not implemented)" - " |"); -*/ - ndbout << "| Requestor: " << (isEnabled() ? "On " : "Off") - << " (Transfer: " << (isTransferEnabled() ? "On, " : "Off, ") - << "Apply: " << (isApplyEnabled() ? "On, " : "Off, ") - << "Delete: " << (isDeleteEnabled() ? "On) " : "Off)") - << " |" << endl; - ndbout_c("| Tables being replicated using this channel: " - " |"); - m_channel.printTables(); - - /** - * Print node groups - */ - if (getNoOfNodeGroups() == 0) - { - ndbout_c("| No node groups are known. " - " |"); - } - else - { - m_channel.print(); - } - ndbout << line; -} diff --git a/storage/ndb/src/old_files/rep/state/RepState.hpp b/storage/ndb/src/old_files/rep/state/RepState.hpp deleted file mode 100644 index 06bbca19f7ef3794eae5907e9691252cae8abbc6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/RepState.hpp +++ /dev/null @@ -1,276 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef REP_STATE_HPP -#define REP_STATE_HPP - -#include <GrepError.hpp> -#include <signaldata/GrepImpl.hpp> -#include <rep/repapi/repapi.h> -#include <rep/ExtSender.hpp> -#include <rep/adapters/AppNDB.hpp> -#include <Properties.hpp> - -#include "Channel.hpp" -#include "Interval.hpp" - -#define REQUESTOR_EXECUTES_NEEDED_FOR_UNKNOWN_CONNECTION 5 - -class NdbApiSignal; - - -/** - * @class RepState - * @brief The main information about the replication - */ -class RepState -{ -public: - RepState(); - ~RepState(); - void init(ExtSender * extSender) { m_extSender = extSender; } - - /*************************************************************************** - * Callback functions - * - * These are used when RepState wants to do something - ***************************************************************************/ - - typedef void (FuncRequestCreateSubscriptionId) - (void * cbObj, NdbApiSignal* signal); - - typedef void (FuncRequestCreateSubscription) - (void * cbObj, NdbApiSignal* signal, Uint32 subId, - Uint32 subKey , - Vector <struct table *> * selectedTables); - - typedef void (FuncRequestRemoveSubscription) - (void * cbObj, NdbApiSignal* signal, Uint32 subId, Uint32 subKey); - - typedef void (FuncRequestTransfer) - (void * cbObj, NdbApiSignal* signal, - Uint32 nodeGrp, Uint32 first, Uint32 last); - - typedef void (FuncRequestApply) - (void * cbObj, NdbApiSignal* signal, - Uint32 nodeGrp, Uint32 first, Uint32 last, Uint32 force); - - typedef void (FuncRequestDeleteSS) - (void * cbObj, NdbApiSignal* signal, - Uint32 nodeGrp, Uint32 first, Uint32 last); - - typedef void (FuncRequestDeletePS) - (void * cbObj, NdbApiSignal* signal, - Uint32 nodeGrp, Uint32 first, Uint32 last); - - typedef void (FuncRequestStartMetaLog) - (void * cbObj, NdbApiSignal * signal, Uint32 subId, Uint32 subKey); - - typedef void (FuncRequestStartDataLog) - (void * cbObj, NdbApiSignal * signal, Uint32 subId, Uint32 subKey); - - typedef void (FuncRequestStartMetaScan) - (void * cbObj, NdbApiSignal * signal, Uint32 subId, Uint32 subKey); - - typedef void (FuncRequestStartDataScan) - (void * cbObj, NdbApiSignal * signal, Uint32 subId, Uint32 subKey); - - typedef void (FuncRequestEpochInfo) - (void * cbObj, NdbApiSignal * signal, Uint32 nodeGrp); - - /*************************************************************************** - * - ***************************************************************************/ - void setSubscriptionRequests(FuncRequestCreateSubscriptionId f1, - FuncRequestCreateSubscription f2, - FuncRequestRemoveSubscription f3); - void setIntervalRequests(FuncRequestTransfer * f1, - FuncRequestApply * f2, - FuncRequestDeleteSS * f3, - FuncRequestDeletePS * f4); - void setStartRequests(FuncRequestStartMetaLog * f5, - FuncRequestStartDataLog * f6, - FuncRequestStartMetaScan * f7, - FuncRequestStartDataScan * f8, - FuncRequestEpochInfo * f9); - - /*************************************************************************** - * Enablings - ***************************************************************************/ - bool isEnabled() { return m_channel.m_requestorEnabled; } - bool isTransferEnabled() { return m_channel.m_transferEnabled; } - bool isApplyEnabled() { return m_channel.m_applyEnabled; } - bool isDeleteEnabled() { return m_channel.m_deleteEnabled; } - bool isAutoStartEnabled() { return m_channel.m_autoStartEnabled; } - - void enable() { m_channel.m_requestorEnabled = true; } - void enableTransfer() { m_channel.m_transferEnabled = true; } - void enableApply() { m_channel.m_applyEnabled = true; } - void enableDelete() { m_channel.m_deleteEnabled = true; } - void enableAutoStart() { m_channel.m_autoStartEnabled = true; } - - void disable() { m_channel.m_requestorEnabled = false; } - void disableTransfer() { m_channel.m_transferEnabled = false; } - void disableApply() { m_channel.m_applyEnabled = false;} - void disableDelete() { m_channel.m_deleteEnabled = false; } - void disableAutoStart() { m_channel.m_autoStartEnabled = false; } - - /*************************************************************************** - * Node groups - ***************************************************************************/ - void setNoOfNodeGroups(Uint32 n) { m_channel.setNoOfNodeGroups(n); } - Uint32 getNoOfNodeGroups() { return m_channel.getNoOfNodeGroups(); } - - /*************************************************************************** - * Event reporting to RepState - * - * These are used to update the state of the Requestor when something - * has happend. - ***************************************************************************/ - void request(GrepReq::Request request); - - //GrepError::Code createSubscription(Uint32 subId, Uint32 subKey); - GrepError::Code protectedExecute(); - GrepError::Code protectedRequest(GrepReq::Request request, Uint32 arg); - GrepError::Code protectedRequest(GrepReq::Request request, - Uint32 arg1, - Uint32 arg2); - GrepError::Code protectedAddTable(const char * fullTableName); - GrepError::Code protectedRemoveTable(const char * fullTableName); - GrepError::Code add(Channel::Position s, Uint32 nodeGrp, const Interval i); - GrepError::Code clear(Channel::Position s, Uint32 nodeGrp, const Interval i); - - void eventSubscriptionDeleted(Uint32 subId, Uint32 subKey); - - void eventMetaLogStarted(NdbApiSignal*, Uint32 subId, Uint32 subKey); - void eventDataLogStarted(NdbApiSignal*, Uint32 subId, Uint32 subKey); - void eventMetaScanCompleted(NdbApiSignal*, Uint32 subId, Uint32 subKey, - Interval epochs); - void eventDataScanCompleted(NdbApiSignal*, Uint32 subId, Uint32 subKey, - Interval epochs); - void eventMetaScanFailed(Uint32 subId, Uint32 subKey, GrepError::Code error); - void eventDataScanFailed(Uint32 subId, Uint32 subKey, GrepError::Code error); - - /** - * @fn sendInsertConf - * @param gci - the gci of the applied GCIBuffer. - * @param nodeGrp - the nodeGrp of the applied GCIBuffer. - */ - void eventInsertConf(Uint32 gci, Uint32 nodeGrp); - - /** - * @fn sendInsertRef - * @param gci - the gci of the applied GCIBuffer. - * @param nodeGrp - the nodeGrp of the applied GCIBuffer. - * @param tableId - the table of the applied GCIBuffer. - */ - void eventInsertRef(Uint32 gci, Uint32 nodeGrp, Uint32 tableId, - GrepError::Code err); - void eventCreateTableRef(Uint32 gci, - Uint32 tableId, - const char * tableName, - GrepError::Code err) ; - - void eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey); - void eventSubscriptionIdCreateFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error); - - void eventSubscriptionCreated(Uint32 subId, Uint32 subKey); - void eventSubscriptionCreateFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error); - - void eventMetaLogStartFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error); - void eventDataLogStartFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error); - - void eventNodeConnected(Uint32 nodeId); - void eventNodeDisconnected(Uint32 nodeId); - void eventNodeConnectable(Uint32 nodeId); - - void printStatus(); - Properties * getStatus(); - Properties * query(QueryCounter counter, Uint32 replicationId); - Uint32 getSubId() { return m_channel.getSubId(); } - Uint32 getSubKey () { return m_channel.getSubKey(); } - - void setApplier(class AppNDB * app) { m_applier = app; } - void setGCIContainer(class GCIContainer * c) { m_gciContainer = c; } - - /* @todo should be private */ - Channel m_channel; - -private: - /*************************************************************************** - * PRIVATE ATTRIBUTES - ***************************************************************************/ - ExtSender * m_extSender; - AppNDB * m_applier; - GCIContainer * m_gciContainer; - - Uint32 m_subIdToRemove; - Uint32 m_subKeyToRemove; - - - enum Connected - { - UNKNOWN, ///< - CONNECTED, ///< Recently received info from (all needed) PS REP - DISCONNECTED, ///< Received disconnect info from (some needed) PS REP - CONNECTABLE ///< Received disconnect info from (some needed) PS REP - }; - Connected m_connected; - Connected m_repConnected; - Uint32 m_connected_counter; - - NdbMutex * m_mutex; - - /** @todo Should be channel-specific */ - Uint32 m_stopEpoch; - - /*************************************************************************** - * PRIVATE METHODS - ***************************************************************************/ - GrepError::Code execute(NdbApiSignal*); - GrepError::Code request(GrepReq::Request req, - Uint32 arg1, - Uint32 arg2, - NdbApiSignal*); - - FuncRequestCreateSubscriptionId * m_funcRequestCreateSubscriptionId; - FuncRequestCreateSubscription * m_funcRequestCreateSubscription; - FuncRequestRemoveSubscription * m_funcRequestRemoveSubscription; - - FuncRequestTransfer * m_funcRequestTransfer; - FuncRequestApply * m_funcRequestApply; - FuncRequestDeleteSS * m_funcRequestDeleteSS; - FuncRequestDeletePS * m_funcRequestDeletePS; - - FuncRequestStartMetaLog * m_funcRequestStartMetaLog; - FuncRequestStartDataLog * m_funcRequestStartDataLog; - FuncRequestStartMetaScan * m_funcRequestStartMetaScan; - FuncRequestStartDataScan * m_funcRequestStartDataScan; - FuncRequestEpochInfo * m_funcRequestEpochInfo; - - void requestTransfer(NdbApiSignal * signal); - void requestApply(NdbApiSignal * signal); - void requestDelete(NdbApiSignal * signal); - void requestEpochInfo(NdbApiSignal * signal); - void getEpochState(Channel::Position pos, Properties * p); - friend void testRepState(); -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/state/RepStateEvent.cpp b/storage/ndb/src/old_files/rep/state/RepStateEvent.cpp deleted file mode 100644 index 9be304c8bfa42882ee58dcfe5e2f67ed0fe58027..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/RepStateEvent.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepState.hpp" - -/**************************************************************************** - * Public Event Handlers : CREATE SUBSCRIPTION ID - ****************************************************************************/ - -void -RepState::eventSubscriptionIdCreated(Uint32 subId, Uint32 subKey) -{ - if (m_channel.getStateSub() == Channel::CREATING_SUBSCRIPTION_ID) - { - m_channel.setSubId(subId); - m_channel.setSubKey(subKey); - m_channel.setStateSub(Channel::SUBSCRIPTION_ID_CREATED); - } - else - { - REPABORT("Illegal state for create subscription id conf"); - } -} - -void -RepState::eventSubscriptionIdCreateFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nSubscription id creation failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - -/**************************************************************************** - * Public Event Handlers : CREATE SUBSCRIPTION - ****************************************************************************/ - -void -RepState::eventSubscriptionCreated(Uint32 subId, Uint32 subKey) -{ - if (m_channel.getStateSub() == Channel::STARTING_SUBSCRIPTION) - { - m_channel.setStateSub(Channel::SUBSCRIPTION_STARTED); - } - else - { - REPABORT("Illegal state for create subscription conf"); - } -} - -void -RepState::eventSubscriptionCreateFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nSubscription creation failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - - -/**************************************************************************** - * Public Event Handlers : META LOG - ****************************************************************************/ - -void -RepState::eventMetaLogStarted(NdbApiSignal* signal, - Uint32 subId, Uint32 subKey) -{ - if (m_channel.getState() != Channel::METALOG_STARTING) - { - RLOG(("WARNING! Metalog started in state %d, should be %d", - m_channel.getState(), Channel::METALOG_STARTING)); - } - - if (!isAutoStartEnabled()) - { - m_channel.setState(Channel::METALOG_STARTED); - } - else - { - m_channel.setState(Channel::METALOG_STARTED); - m_channel.setState(Channel::METASCAN_STARTING); - m_funcRequestStartMetaScan(m_extSender, signal, subId, subKey); - } -} - -void -RepState::eventMetaLogStartFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nMetalog start failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - -/**************************************************************************** - * Public Event Handlers : META SCAN - ****************************************************************************/ - -void -RepState::eventMetaScanCompleted(NdbApiSignal* signal, - Uint32 subId, Uint32 subKey, Interval epochs) -{ - if (m_channel.getState() != Channel::METASCAN_STARTING) - { - RLOG(("WARNING! Metascan completed in state %d, should be %d", - m_channel.getState(), Channel::METASCAN_STARTING)); - } - RLOG(("Metascan completed. Subscription %d-%d, Epochs [%d-%d]", - subId, subKey, epochs.first(), epochs.last())); - - m_channel.setState(Channel::METASCAN_COMPLETED); - - if (isAutoStartEnabled()) - { - m_channel.setState(Channel::DATALOG_STARTING); - m_funcRequestStartDataLog(m_extSender, signal, subId, subKey); - } - m_channel.setMetaScanEpochs(epochs); -} - -/**************************************************************************** - * Public Event Handlers : DATA LOG - ****************************************************************************/ - -void -RepState::eventDataLogStarted(NdbApiSignal* signal, - Uint32 subId, Uint32 subKey) -{ - if (m_channel.getState() != Channel::DATALOG_STARTING) - { - RLOG(("WARNING! Datalog started in state %d, should be %d", - m_channel.getState(), Channel::DATALOG_STARTING)); - } - - m_channel.setState(Channel::DATALOG_STARTED); - - if (isAutoStartEnabled()) - { - m_channel.setState(Channel::DATASCAN_STARTING); - m_funcRequestStartDataScan(m_extSender, signal, subId, subKey); - } -} - -void -RepState::eventDataLogStartFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nDatalog start failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - -/**************************************************************************** - * Public Event Handlers : DATA SCAN - ****************************************************************************/ - -void -RepState::eventDataScanCompleted(NdbApiSignal* signal, - Uint32 subId, Uint32 subKey, - Interval epochs) -{ - if (m_channel.getState() != Channel::DATASCAN_STARTING) - { - RLOG(("WARNING! Datascan completed in state %d, should be %d", - m_channel.getState(), Channel::DATASCAN_STARTING)); - } - RLOG(("Datascan completed. Subscription %d-%d, Epochs [%d-%d]", - subId, subKey, epochs.first(), epochs.last())); - - m_channel.setState(Channel::DATASCAN_COMPLETED); - m_channel.setDataScanEpochs(epochs); -} - -/**************************************************************************** - * Public Event Handlers : FAILURES - ****************************************************************************/ - -void -RepState::eventMetaScanFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nMetascan failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - -void -RepState::eventDataScanFailed(Uint32 subId, Uint32 subKey, - GrepError::Code error) -{ - ndbout_c("\nDatascan failed"); - ndbout_c("Error %d: %s", error, GrepError::getErrorDesc(error)); - ndbout_c("Subscription Id: %d, Key: %d", subId, subKey); -} - -/**************************************************************************** - * Public Event Handlers : APPLY - ****************************************************************************/ - -void -RepState::eventInsertConf(Uint32 gci, Uint32 nodeGrp) -{ - Interval app(gci, gci); - add(Channel::App, nodeGrp, app); - clear(Channel::AppReq, nodeGrp, app); - -#ifdef DEBUG_GREP - ndbout_c("RepState: GCI Buffer %d:[%d] applied", nodeGrp, gci); -#endif -} - -void -RepState::eventInsertRef(Uint32 gci, Uint32 nodeGrp, Uint32 tableId, - GrepError::Code err) -{ - ndbout_c("\nTable %d, used in replication, did not exist"); - RLOG(("ERROR %d:%s. Apply failed (%d[%d] in table %d)", - err, GrepError::getErrorDesc(err), nodeGrp, gci, tableId)); -} - - -void -RepState::eventCreateTableRef(Uint32 gci, - Uint32 tableId, - const char * tableName, - GrepError::Code err) -{ - ndbout_c("\nFailed to create table %s with source site table id %d", - tableName, - tableId); - - RLOG(("ERROR %d:%s. Failed to create table %s with source site table id %d!", - err, GrepError::getErrorDesc(err), tableName, tableId)); -} - -/**************************************************************************** - * Public Event Handlers : Connected/Disconnected - ****************************************************************************/ - -void -RepState::eventNodeConnected(Uint32 nodeId) -{ - m_repConnected = CONNECTED; -} - -void -RepState::eventNodeDisconnected(Uint32 nodeId) -{ - m_repConnected = DISCONNECTED; -} - -void -RepState::eventNodeConnectable(Uint32 nodeId) -{ - m_repConnected = CONNECTABLE; -} - -/**************************************************************************** - * Public Event Handlers : Connected/Disconnected - ****************************************************************************/ - -void -RepState::eventSubscriptionDeleted(Uint32 subId, Uint32 subKey) -{ - m_gciContainer->reset(); - m_channel.setState(Channel::CONSISTENT); - m_channel.reset(); - m_subIdToRemove = 0; - m_subKeyToRemove = 0; -} diff --git a/storage/ndb/src/old_files/rep/state/RepStateRequests.cpp b/storage/ndb/src/old_files/rep/state/RepStateRequests.cpp deleted file mode 100644 index 02677e141f6268633ff6d51adaad47603586b561..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/RepStateRequests.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "RepState.hpp" - -#include <NdbApiSignal.hpp> -#include <SimpleProperties.hpp> -#include <UtilBuffer.hpp> - -#include <signaldata/GrepImpl.hpp> -#include <signaldata/RepImpl.hpp> -#include <signaldata/SumaImpl.hpp> - -#include <rep/rep_version.hpp> -#include "Channel.hpp" - -/***************************************************************************** - * Helper functions - *****************************************************************************/ - -void -startSubscription(void * cbObj, NdbApiSignal* signal, - SubscriptionData::Part part, - Uint32 subId, Uint32 subKey) -{ - ExtSender * ext = (ExtSender *) cbObj; - - GrepSubStartReq * req = (GrepSubStartReq *)signal->getDataPtrSend(); - req->subscriptionId = subId; - req->subscriptionKey = subKey; - req->part = (Uint32) part; - signal->set(0, PSREPBLOCKNO, GSN_GREP_SUB_START_REQ, - GrepSubStartReq::SignalLength); - ext->sendSignal(signal); -} - -void -scanSubscription(void * cbObj, NdbApiSignal* signal, - SubscriptionData::Part part, - Uint32 subId, Uint32 subKey) -{ - ExtSender * ext = (ExtSender *) cbObj; - - GrepSubSyncReq * req = (GrepSubSyncReq *)signal->getDataPtrSend(); - req->subscriptionId = subId; - req->subscriptionKey = subKey; - req->part = part; - signal->set(0, PSREPBLOCKNO, GSN_GREP_SUB_SYNC_REQ, - GrepSubSyncReq::SignalLength); - ext->sendSignal(signal); -} - -/***************************************************************************** - * RepState registered functions - * - * These registered functions are executed by RepState when - * RepState needs to have stuff done. - *****************************************************************************/ - -void -requestCreateSubscriptionId(void * cbObj, NdbApiSignal* signal) -{ - ExtSender * ext = (ExtSender *) cbObj; - - CreateSubscriptionIdReq * req = - (CreateSubscriptionIdReq *)signal->getDataPtrSend(); - req->senderData = ext->getOwnRef(); - signal->set(0, PSREPBLOCKNO, GSN_GREP_CREATE_SUBID_REQ, - CreateSubscriptionIdReq::SignalLength); - ext->sendSignal(signal); - -#ifdef DEBUG_GREP_SUBSCRIPTION - ndbout_c("Sent request for creation of subscription id to PS"); -#endif -} - -void -requestCreateSubscription(void * cbObj, - NdbApiSignal* signal, - Uint32 subId, - Uint32 subKey, - Vector<struct table *> * selectedTables) -{ - ExtSender * ext = (ExtSender *) cbObj; - - GrepSubCreateReq * req = (GrepSubCreateReq *)signal->getDataPtrSend(); - req->senderRef = ext->getOwnRef(); - req->subscriptionId = subId; - req->subscriptionKey = subKey; - if(selectedTables!=0) { - UtilBuffer m_buffer; - UtilBufferWriter w(m_buffer); - LinearSectionPtr tablePtr[3]; - req->subscriptionType = SubCreateReq::SelectiveTableSnapshot; - - for(Uint32 i=0; i< selectedTables->size(); i++) { - w.add(SimpleProperties::StringValue, (*selectedTables)[i]->tableName); - } - - tablePtr[0].p = (Uint32*)m_buffer.get_data(); - tablePtr[0].sz = m_buffer.length() >> 2; - - signal->set(0, PSREPBLOCKNO, GSN_GREP_SUB_CREATE_REQ, - GrepSubCreateReq::SignalLength); - ext->sendFragmentedSignal(signal, tablePtr, 1); - } - else { - req->subscriptionType = SubCreateReq::DatabaseSnapshot; - signal->set(0, PSREPBLOCKNO, GSN_GREP_SUB_CREATE_REQ, - GrepSubCreateReq::SignalLength); - ext->sendFragmentedSignal(signal, 0, 0); - } - - - -#ifdef DEBUG_GREP_SUBSCRIPTION - ndbout_c("Requestor: Sent request for creation of subscription"); -#endif -} - -void -requestRemoveSubscription(void * cbObj, NdbApiSignal* signal, - Uint32 subId, Uint32 subKey) -{ - ExtSender * ext = (ExtSender *) cbObj; - - GrepSubRemoveReq * req = (GrepSubRemoveReq *)signal->getDataPtrSend(); - req->subscriptionId = subId; - req->subscriptionKey = subKey; - signal->set(0, PSREPBLOCKNO, GSN_GREP_SUB_REMOVE_REQ, - GrepSubRemoveReq::SignalLength); - ext->sendSignal(signal); -} - -void -requestTransfer(void * cbObj, NdbApiSignal * signal, - Uint32 nodeGrp, Uint32 first, Uint32 last) -{ - ExtSender * ext = (ExtSender *) cbObj; - - RepGetGciBufferReq * req = (RepGetGciBufferReq*)signal->getDataPtrSend(); - req->firstGCI = first; - req->lastGCI = last; - req->nodeGrp = nodeGrp; - req->senderRef = ext->getOwnRef(); - signal->set(0, PSREPBLOCKNO, GSN_REP_GET_GCIBUFFER_REQ, - RepGetGciBufferReq::SignalLength); - ext->sendSignal(signal); - -#ifdef DEBUG_GREP_TRANSFER - ndbout_c("Requestor: Requested PS GCI buffers %d:[%d-%d]", - nodeGrp, first, last); -#endif -} - -void -requestApply(void * applyObj, NdbApiSignal * signal, - Uint32 nodeGrp, Uint32 first, Uint32 last, Uint32 force) -{ - AppNDB * applier = (AppNDB *) applyObj; - - if (first != last) { - RLOG(("WARNING! Trying to apply range [%d-%d]. This is not implemeted", - first, last)); - } - /** - * Apply GCIBuffer even if it is empty. - */ - applier->applyBuffer(nodeGrp, first, force); - /** - * @todo Handle return value from the method above - */ -} - -void -requestDeleteSS(void * cbObj, NdbApiSignal * signal, - Uint32 nodeGrp, Uint32 firstGCI, Uint32 lastGCI) -{ - GCIContainer * container = (GCIContainer *) cbObj; - - RLOG(("Deleting SS:%d:[%d-%d]", nodeGrp, firstGCI, lastGCI)); - - if(firstGCI < 0 || lastGCI<=0 || nodeGrp < 0) { - REPABORT("Illegal interval or wrong node group"); - //return GrepError::REP_DELETE_NEGATIVE_EPOCH; - } - - /********************************************* - * All buffers : Modify to the available ones - *********************************************/ - if(firstGCI==0 && lastGCI==(Uint32)0xFFFF) { - container->getAvailableGCIBuffers(nodeGrp, &firstGCI, &lastGCI); - } - - if(firstGCI == 0) { - Uint32 f, l; - container->getAvailableGCIBuffers(nodeGrp, &f, &l); - RLOG(("Deleting SS:[%d-%d]", f, l)); - if(f > firstGCI) firstGCI = f; - } - - /** - * Delete buffers - */ - for(Uint32 i=firstGCI; i<=lastGCI; i++) { - if(!container->destroyGCIBuffer(i, nodeGrp)) { - RLOG(("WARNING! Delete non-existing epoch SS:%d:[%d]", nodeGrp, i)); - } - //RLOG(("RepStateRequests: Deleting buffer SS:%d:[%d]", nodeGrp, i)); - } -} - -void -requestDeletePS(void * cbObj, NdbApiSignal * signal, - Uint32 nodeGrp, Uint32 firstGCI, Uint32 lastGCI) -{ - ExtSender * ext = (ExtSender *) cbObj; - - RepClearPSGciBufferReq * psReq = - (RepClearPSGciBufferReq*)signal->getDataPtrSend(); - /** - * @todo Should have better senderData /Lars - */ - psReq->senderData = 4711; - psReq->senderRef = ext->getOwnRef(); - psReq->firstGCI = firstGCI; - psReq->lastGCI = lastGCI; - psReq->nodeGrp = nodeGrp; - signal->set(0, PSREPBLOCKNO, GSN_REP_CLEAR_PS_GCIBUFFER_REQ, - RepClearPSGciBufferReq::SignalLength); - ext->sendSignal(signal); - - RLOG(("Requesting deletion of PS:%d:[%d-%d]", nodeGrp, firstGCI, lastGCI)); -} - -/** - * Function that requests information from REP PS about stored GCI Buffers - */ -void -requestEpochInfo(void * cbObj, NdbApiSignal* signal, Uint32 nodeGrp) -{ - ExtSender * ext = (ExtSender *) cbObj; - - RepGetGciReq * req = (RepGetGciReq *) signal->getDataPtrSend(); - req->nodeGrp = nodeGrp; - signal->set(0, PSREPBLOCKNO, GSN_REP_GET_GCI_REQ, - RepGetGciReq::SignalLength); - ext->sendSignal(signal); -} - -void -requestStartMetaLog(void * cbObj, NdbApiSignal * signal, - Uint32 subId, Uint32 subKey) -{ - RLOG(("Metalog starting. Subscription %d-%d", subId, subKey)); - startSubscription(cbObj, signal, SubscriptionData::MetaData, subId, subKey); -} - -void -requestStartDataLog(void * cbObj, NdbApiSignal * signal, - Uint32 subId, Uint32 subKey) -{ - RLOG(("Datalog starting. Subscription %d-%d", subId, subKey)); - startSubscription(cbObj, signal, SubscriptionData::TableData, subId, subKey); -} - -void -requestStartMetaScan(void * cbObj, NdbApiSignal* signal, - Uint32 subId, Uint32 subKey) -{ - RLOG(("Metascan starting. Subscription %d-%d", subId, subKey)); - scanSubscription(cbObj, signal, SubscriptionData::MetaData, subId, subKey); -} - -void -requestStartDataScan(void * cbObj, NdbApiSignal* signal, - Uint32 subId, Uint32 subKey) -{ - RLOG(("Datascan starting. Subscription %d-%d", subId, subKey)); - scanSubscription(cbObj, signal, SubscriptionData::TableData, subId, subKey); -} diff --git a/storage/ndb/src/old_files/rep/state/testInterval/Makefile b/storage/ndb/src/old_files/rep/state/testInterval/Makefile deleted file mode 100644 index fbb0b48c28085934749f306f36fd4fb518c8a896..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/testInterval/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include .defs.mk - -TYPE := kernel ndbapitest - -BIN_TARGET := testInterval -BIN_TARGET_ARCHIVES := portlib general - -CCFLAGS_LOC += -I.. - -SOURCES = testInterval.cpp ../Interval.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/state/testInterval/testInterval.cpp b/storage/ndb/src/old_files/rep/state/testInterval/testInterval.cpp deleted file mode 100644 index 463e4adffb7c212ec44bbf00ed52ea43b00f2baa..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/testInterval/testInterval.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "../Interval.hpp" - -#define TEST_REQUIRE(X); if (!(X)) { \ - ndbout_c("Test failed in line %d", __LINE__); testPassed = false; } - - -int -main () { - bool testPassed = true; - - Interval a, b, c; - - /** - * isEmpty - */ - TEST_REQUIRE(a.isEmpty()); - - a.set(3,1); - TEST_REQUIRE(a.isEmpty()); - - /** - * isEqual - */ - a.set(1,2); - TEST_REQUIRE(a.isEqual(1,2)); - - a.set(3,1); - TEST_REQUIRE(a.isEqual(1,0)); // The result should be normalized - - /** - * intervalAdd -- non-disjoint - */ - a.set(1,3); - b.set(3,10); - TEST_REQUIRE(intervalAdd(a, b, &c)); - TEST_REQUIRE(c.isEqual(1,10)); - - a.set(3,10); - b.set(1,3); - TEST_REQUIRE(intervalAdd(a, b, &c)); - TEST_REQUIRE(c.isEqual(1,10)); - - /** - * intervalAdd -- consequtive - */ - a.set(1,3); - b.set(4,10); - TEST_REQUIRE(intervalAdd(a, b, &c)); - TEST_REQUIRE(c.isEqual(1,10)); - - a.set(4,10); - b.set(1,3); - TEST_REQUIRE(intervalAdd(a, b, &c)); - TEST_REQUIRE(c.isEqual(1,10)); - - /** - * intervalAdd -- disjoint - */ - a.set(1,3); - b.set(5,10); - c.set(4711,4711); - TEST_REQUIRE(!intervalAdd(a, b, &c)); // This should not work - TEST_REQUIRE(c.isEqual(4711,4711)); - - a.set(5,10); - b.set(1,3); - c.set(4711,4711); - TEST_REQUIRE(!intervalAdd(a, b, &c)); // This should not work - TEST_REQUIRE(c.isEqual(4711,4711)); - - /** - * intervalLeftMinus -- non-disjoint - */ - a.set(1,3); - b.set(5,10); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEmpty()); - - a.set(5,10); - b.set(1,3); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEqual(5,10)); - - /** - * intervalLeftMinus -- consequtive - */ - a.set(1,3); - b.set(4,10); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEmpty()); - - a.set(4,10); - b.set(1,3); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEqual(4,10)); - - /** - * intervalLeftMinus -- disjoint - */ - a.set(1,3); - b.set(5,10); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEmpty()); - - a.set(5,10); - b.set(1,3); - intervalLeftMinus(a, b, &c); - TEST_REQUIRE(c.isEqual(5,10)); - - ndbout << "Test " << (testPassed ? "passed" : "failed") << "." << endl; -} diff --git a/storage/ndb/src/old_files/rep/state/testRepState/Makefile b/storage/ndb/src/old_files/rep/state/testRepState/Makefile deleted file mode 100644 index 33c6076eff3369e37b31b6a1f5b0c0ddd8f43a4f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/testRepState/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include .defs.mk - -TYPE := kernel - -BIN_TARGET := testRequestor -BIN_TARGET_ARCHIVES := portlib general - -CCFLAGS_LOC += -I.. - -SOURCES = testRequestor.cpp \ - ../Requestor.cpp \ - ../RepState.cpp \ - ../Interval.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.cpp b/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.cpp deleted file mode 100644 index 8989f7098b80c119314eb56db95c175bbb162e10..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "testRequestor.hpp" - -#define TEST_REQUIRE(X); if (!(X)) { \ - ndbout_c("Test failed in line %d", __LINE__); testPassed = false; } - - -struct Result { - Uint32 nodeGrp; - Uint32 first; - Uint32 last; - Uint32 force; -}; -Result result; - -/** Callbacks ****************************************************************/ - -void -f_transfer(void *, Signal* signal, Uint32 nodeGrp, Uint32 first, Uint32 last) -{ - result.nodeGrp = nodeGrp; - result.first = first; - result.last = last; - result.force = 0; - ndbout_c("Transfer: %d:[%d-%d] ", nodeGrp, first, last); -} - -void -f_apply(void *, Signal* signal, Uint32 nodeGrp, - Uint32 first, Uint32 last, Uint32 force) -{ - result.nodeGrp = nodeGrp; - result.first = first; - result.last = last; - result.force = force; - ndbout_c("Apply: %d:[%d-%d] (Force:%d)", nodeGrp, first, last, force); -} - -void -f_deletePS(void *, Signal* signal, Uint32 nodeGrp, Uint32 first, Uint32 last) -{ - result.nodeGrp = nodeGrp; - result.first = first; - result.last = last; - result.force = 0; - ndbout_c("DeletePS: %d:[%d-%d] ", nodeGrp, first, last); -} - -void -f_deleteSS(void *, Signal* signal, Uint32 nodeGrp, Uint32 first, Uint32 last) -{ - result.nodeGrp = nodeGrp; - result.first = first; - result.last = last; - result.force = 0; - ndbout_c("DeleteSS: %d:[%d-%d] ", nodeGrp, first, last); -} - -void -requestStartMetaLog(void * cbObj, Signal * signal) -{ - ndbout_c("StartMetaLog:"); -} - -void -requestStartDataLog(void * cbObj, Signal * signal) -{ - ndbout_c("StartDataLog:"); -} - -void -requestStartMetaScan(void * cbObj, Signal* signal) -{ - ndbout_c("StartMetaScan:"); -} - -void -requestStartDataScan(void * cbObj, Signal* signal) -{ - ndbout_c("StartDataScan:"); -} - - -/** Compare ****************************************************************/ - -bool compare(Uint32 nodeGrp, Uint32 first, Uint32 last, Uint32 force) -{ - return (result.nodeGrp == nodeGrp && result.first == first && - result.last == last && result.force == force); -} - - -/** Main *******************************************************************/ - -void -testRequestor() -{ - Signal * signal; - bool testPassed = true; - - Requestor requestor; - requestor.setObject(0); - requestor.setIntervalRequests(&f_transfer, - &f_apply, - &f_deletePS, - &f_deleteSS); - requestor.setStartRequests(&requestStartMetaLog, - &requestStartDataLog, - &requestStartMetaScan, - &requestStartDataScan); - requestor.setNoOfNodeGroups(1); - requestor.enable(); - requestor.enableTransfer(); - requestor.enableDelete(); - requestor.enableApply(); - requestor.m_state = Requestor::LOG; - - requestor.printStatus(); - - /** - * First transfer - */ - Interval i(12,13); - requestor.add(RepState::PS, 0, i); - requestor.execute(signal); - TEST_REQUIRE(compare(0, 12, 13, 0)); - - requestor.printStatus(); - - /** - * State transtion test - */ - - /** - * First apply - */ - - /** - * Test end - */ - if (testPassed) { - ndbout << "Test passed!" << endl; - } else { - ndbout << "Test FAILED!" << endl; - } -} - -int -main () { - testRequestor(); -} diff --git a/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.hpp b/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.hpp deleted file mode 100644 index 726b289114db24caecdf504b4d78b59dfe586d37..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/state/testRepState/testRequestor.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TEST_REQUESTOR_HPP -#define TEST_REQUESTOR_HPP - -#include "../Requestor.hpp" - -void testRequestor(); - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/GCIBuffer.cpp b/storage/ndb/src/old_files/rep/storage/GCIBuffer.cpp deleted file mode 100644 index 013600b30a50a3abd7102f1ec5d370a29bf195c1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIBuffer.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> -#include "GCIBuffer.hpp" - -/***************************************************************************** - * Constructor / Destructor - *****************************************************************************/ - -GCIBuffer::GCIBuffer(Uint32 gci, Uint32 id) -{ - m_gci = gci; - m_id = id; - m_complete = false; - m_receivedBytes = 0; -} - -GCIBuffer::~GCIBuffer() -{ - /** - * Loop through all pages and delete them - */ - for(Uint32 i=0; i<m_pageList.size(); i++) { - delete m_pageList[i]; - m_pageList[i] = 0; - } - m_pageList.clear(); - // m_pageList = 0; -} - -/***************************************************************************** - * Inserts - *****************************************************************************/ - -void -GCIBuffer::insertLogRecord(Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3]) -{ - GCIPage * p; - if(m_pageList.size() == 0) { - p = new GCIPage(m_gci); - assert(p != NULL); - m_pageList.push_back(p); - } - - p = m_pageList.back(); - if (!p->insertLogRecord(tableId, operation, ptr)) { - /** - * GCIPage is full. - */ - GCIPage * newPage = new GCIPage(m_gci); - assert(newPage != NULL); - m_pageList.push_back(newPage); - bool res = newPage->insertLogRecord(tableId, operation, ptr); - - if(!res) { - ndbout << "GCIBuffer: gci : " << m_gci << endl; - assert(res); - } - } -} - -/** - * @todo: We must be able to distinguish between Scan meta - * data and log meta data. - * Currently only scan meta data is considered. - */ -void -GCIBuffer::insertMetaRecord(Uint32 tableId, class LinearSectionPtr ptr[3]) -{ - GCIPage * p; - if(m_pageList.size()==0) { - p = new GCIPage(m_gci); - assert(p != NULL); - m_pageList.push_back(p); - } - - p = m_pageList.back(); - - if (!p->insertMetaRecord(tableId, ptr)) { - /** - * Page is full. - */ - GCIPage * newPage = new GCIPage(m_gci); - assert(newPage != NULL); - m_pageList.push_back(newPage); - - bool res = newPage->insertMetaRecord(tableId, ptr); - assert(res); - } -} - -void -GCIBuffer::insertPage(Uint32 gci, char * dataPtr, Uint32 dataBLen) -{ - /** - * allocate a new GCIPage - */ - GCIPage * page = new GCIPage(gci); - assert(page != 0); - - /** - * copy data into page - */ - page->copyDataToPage(dataPtr, dataBLen); - - /** - * put page on pagelist. - */ - m_pageList.push_back(page); - - /** - * Update GCI Buffer received bytes - */ - m_receivedBytes += dataBLen; -} - - -/***************************************************************************** - * Iterator - *****************************************************************************/ - -GCIBuffer::iterator::iterator(const GCIBuffer* gciBuffer) -{ - m_gciBuffer = gciBuffer; - m_iterator=0; - -} - -GCIPage * -GCIBuffer::iterator::first() -{ - m_iterator = 0; - if(m_gciBuffer->m_pageList.size() == 0) return NULL; - return (m_gciBuffer->m_pageList)[m_iterator]; -} - - -GCIPage * -GCIBuffer::iterator::next() -{ - m_iterator++; - if(m_gciBuffer->m_pageList.size() == 0) return NULL; - - if((m_iterator<m_gciBuffer->m_pageList.size())) - return (m_gciBuffer->m_pageList)[m_iterator]; - else - return NULL; -} - - -bool -GCIBuffer::iterator::exists() -{ - return (m_iterator < m_gciBuffer->m_pageList.size()); -} - - - diff --git a/storage/ndb/src/old_files/rep/storage/GCIBuffer.hpp b/storage/ndb/src/old_files/rep/storage/GCIBuffer.hpp deleted file mode 100644 index 8a8473d1d49d56d0d7a17a9d7201980874b2c37a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIBuffer.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef GCI_BUFFER_HPP -#define GCI_BUFFER_HPP - -#include "GCIPage.hpp" -#include <Vector.hpp> -#include <TransporterDefinitions.hpp> - -#include <signaldata/RepImpl.hpp> - -/** - * @class GCIBuffer - * @brief A GCIBuffer contains pages containing log records for ONE gci. - * - * @todo Load and save to disk - */ - -class GCIBuffer -{ -public: - GCIBuffer(Uint32 gci, Uint32 id); - ~GCIBuffer(); - - /** - * @fn insertLogRecord - * @param tableId Table this will be LogRecord applies to. - * @param operation Operation this LogRecord represents - * @param ptr Ptr of type LinearSectionPtr that contains the data. - * @return A full page or 0, if the insert didn't generate a full page. - */ - void insertLogRecord(Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3]); - - void insertMetaRecord(Uint32 tableId, class LinearSectionPtr ptr[3]); - - /** - * @fn inserts a page, containing Records into a GCI Buffer. - * @param gci - the gci of the page. - * @param dataPtr - Pointer originating from Page::m_page. - * @param dataBLen - length of dataptr in bytes - * @note Page must NOT be deallocated after being inserted! - */ - void insertPage(Uint32 gci, char * dataPtr, Uint32 dataBLen); - - /** - * @fn isComplete - * @return True if this GCI Buffer is done (gci is completed). - */ - bool isComplete() { return m_complete; }; - void setComplete() { m_complete = true; }; - - /** - * @fn getReceivedBytes - * @returns the total number of bytes that this buffer has received. - */ - Uint32 getReceivedBytes() const { return m_receivedBytes;} ; - - /** - * Iterator for pages - */ - class iterator { - public: - iterator(const GCIBuffer* gciBuffer); - GCIPage * first(); ///< @return First page (or NULL if no page exists) - GCIPage * next(); ///< @return Next page (or NULL if no more page exists) - bool exists(); ///< @return true if another page exists (for next()) - private: - Uint32 m_iterator; - const GCIBuffer * m_gciBuffer; - }; - friend class GCIBuffer::iterator; - - /*************************************************************************** - * GCI Buffer meta information - ***************************************************************************/ - void setGCI(Uint32 gci) { m_gci = gci; }; - Uint32 getGCI() { return m_gci; }; - - void setId(Uint32 id) { m_id = id; }; - Uint32 getId() { return m_id; }; - - bool m_force; // if true, ignore "execute" errors when - // restoring buffer (PUBLIC) during phase - // starting. -private: - /*************************************************************************** - * Private Variables - ***************************************************************************/ - Uint32 m_gci; ///< GCI of this buffer - Uint32 m_id; ///< <m_gci, id> names GCIBuffer - bool m_complete; ///< GCI complete; buffer contains - ///< everything - Vector <GCIPage *> m_pageList; ///< Storage for data/log record pages. - Uint32 m_receivedBytes; ///< Received bytes in this buffer -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/GCIContainer.cpp b/storage/ndb/src/old_files/rep/storage/GCIContainer.cpp deleted file mode 100644 index c161db0769b6080a2f82bc1c3dc83ed880430622..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIContainer.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "GCIContainer.hpp" -#include <NdbOut.hpp> -#include <NdbMem.h> -#include <new> - -#include <rep/rep_version.hpp> - -//#define GCICONTAINER_DEBUG - -/***************************************************************************** - * Constructors / Destructors - *****************************************************************************/ - -GCIContainer::GCIContainer(Uint32 maxNoOfIds) -{ - m_maxNoOfIds = maxNoOfIds; - - gciRange = new GCIRange[maxNoOfIds * sizeof(GCIRange)]; - - for(Uint32 i = 0; i < maxNoOfIds; i++) { - gciRange[i].m_firstGCI = 1; // The empty interval = [1,0] - gciRange[i].m_lastGCI = 0; - } - theMutexPtr = NdbMutex_Create(); -} - -GCIContainer::~GCIContainer() -{ - for(Uint32 i=0; i < m_bufferList.size(); i++) { - delete m_bufferList[i]; - m_bufferList[i] = 0; - } - - m_bufferList=0; - delete [] gciRange; - NdbMutex_Destroy(theMutexPtr); -} - -/***************************************************************************** - * GCIBuffer Create / Destroy - *****************************************************************************/ - -GCIBuffer * -GCIContainer::createGCIBuffer(Uint32 gci, Uint32 id) -{ - GCIBuffer * buf = new GCIBuffer(gci, id); - if (buf == NULL) REPABORT("Could not allocate new buffer"); - - m_bufferList.push_back(buf, true); - -#ifdef GCICONTAINER_DEBUG - ndbout_c("GCIContainer: New buffer created (GCI: %d, Id: %d)", gci, id); -#endif - return buf; -} - -/** - * Delete all GCI buffers strictly less than "gci" - */ -void -GCIContainer::destroyGCIBuffersBeforeGCI(Uint32 gci, Uint32 id) -{ - for(Uint32 i = 0 ; i < m_bufferList.size(); i++) { - if(m_bufferList[i]->getGCI() < gci) { -#ifdef GCICONTAINER_DEBUG - ndbout_c("GCIContainer: Destroying buffer (GCI: %d, id: %d)", - m_bufferList[i]->getGCI(), id); -#endif - destroyGCIBuffer(i, id); - } - } -} - -/** - * Delete one GCI Buffer - */ -bool -GCIContainer::destroyGCIBuffer(Uint32 gci, Uint32 id) -{ - m_bufferList.lock(); - for(Uint32 i = 0 ; i < m_bufferList.size(); i++) { - if((m_bufferList[i]->getGCI() == gci) && - (m_bufferList[i]->getId() == id)) { - - /** - * Delete the GCI Buffer - */ - delete m_bufferList[i]; - m_bufferList[i] = 0; - - /** - * Remove from the list of buffers stored in GCIContainer - */ - m_bufferList.erase(i,false); - m_bufferList.unlock(); - - /** - * Set info - */ - NdbMutex_Lock(theMutexPtr); - if(gciRange[id].m_firstGCI != gci) - RLOG(("WARNING! Buffer %d deleted from [%d-%d]", - gci, gciRange[id].m_firstGCI, gciRange[id].m_lastGCI)); - - gciRange[id].m_firstGCI++; - - /** - * Normalize empty interval to [1,0] - */ - if (gciRange[id].m_firstGCI > gciRange[id].m_lastGCI){ - gciRange[id].m_firstGCI = 1; - gciRange[id].m_lastGCI = 0; - } - NdbMutex_Unlock(theMutexPtr); - return true; - } - } - m_bufferList.unlock(); - return false; -} - -/***************************************************************************** - * GCIBuffer interface - *****************************************************************************/ - -GCIBuffer * -GCIContainer::getGCIBuffer(Uint32 gci, Uint32 id) -{ - GCIBuffer * gciBuffer = 0; - - m_bufferList.lock(); - for(Uint32 i=0; i < m_bufferList.size(); i++) { - gciBuffer = m_bufferList[i]; - if((gciBuffer->getGCI() == gci) && (gciBuffer->getId() == id)) { - m_bufferList.unlock(); - return gciBuffer; - } - } - m_bufferList.unlock(); - return 0; -} - -void -GCIContainer::setCompleted(Uint32 gci, Uint32 id) -{ - GCIBuffer * gciBuffer = getGCIBuffer(gci, id); - if(gciBuffer == 0) gciBuffer = createGCIBuffer(gci, id); - - gciBuffer->setComplete(); - -#ifdef GCICONTAINER_DEBUG - ndbout_c("GCIContainer: Buffer completely stored in GCIContainer (GCI: %d)", - gci); -#endif - - NdbMutex_Lock(theMutexPtr); - - /** - * If this is the first GCI Buffer to be completed - * then both first and last must be updated. - * Subsequently, only the last value must be updated. - */ - if(gciRange[id].m_firstGCI == 1 && gciRange[id].m_lastGCI == 0) { - gciRange[id].m_firstGCI = gci; - gciRange[id].m_lastGCI = gci; - } else { - if (gci != gciRange[id].m_lastGCI + 1) { - RLOG(("WARNING! Non-consequtive buffer %u completed [%u-%u])", - gci, gciRange[id].m_firstGCI, gciRange[id].m_lastGCI)); - } - gciRange[id].m_lastGCI = gci; - } - NdbMutex_Unlock(theMutexPtr); -} - -void -GCIContainer::getAvailableGCIBuffers(Uint32 id, Uint32 * first, Uint32 * last) -{ - NdbMutex_Lock(theMutexPtr); - *first = gciRange[id].m_firstGCI; - *last = gciRange[id].m_lastGCI; - NdbMutex_Unlock(theMutexPtr); -} - -/***************************************************************************** - * Inserts - *****************************************************************************/ -void -GCIContainer::insertMetaRecord(Uint32 id, Uint32 tableId, - class LinearSectionPtr ptr[3], Uint32 gci) -{ - /********************************************************** - * 1. Find correct GCI Buffer (Doesn't exist? Create one) - **********************************************************/ - GCIBuffer * gciBuffer = getGCIBuffer(gci, id); - if(gciBuffer == 0) gciBuffer = createGCIBuffer(gci, id); - - /********************************** - * 2. Insert record into GCIBuffer - **********************************/ - gciBuffer->insertMetaRecord(tableId, ptr); -} - -void -GCIContainer::insertLogRecord(Uint32 id, Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3], Uint32 gci) -{ - /********************************************************* - * 1. Find correct GCI Buffer (doesn't exist? create one) - *********************************************************/ - GCIBuffer * gciBuffer = getGCIBuffer(gci, id); - if(gciBuffer == 0) gciBuffer = createGCIBuffer(gci, id); - /********************************** - * 2. Insert record into GCIBuffer - **********************************/ - gciBuffer->insertLogRecord(tableId, operation, ptr); -} - -void -GCIContainer::insertPage(Uint32 gci, Uint32 id, - char * dataPtr, Uint32 dataBLen) -{ - /********************************************************* - * 1. Find correct GCI Buffer (doesn't exist? create one) - *********************************************************/ - GCIBuffer * gciBuffer = getGCIBuffer(gci, id); - if(gciBuffer == 0) gciBuffer = createGCIBuffer(gci, id); - - /******************************** - * 2. Insert page into GCIBuffer - ********************************/ - gciBuffer->insertPage(gci, dataPtr, dataBLen); -} - -bool -GCIContainer::reset() -{ - /** - * Clear the intervals - */ - for(Uint32 i = 0; i < m_maxNoOfIds; i++) { - gciRange[i].m_firstGCI = 1; // The empty interval = [1,0] - gciRange[i].m_lastGCI = 0; - } - - /** - * Destroy ALL gci buffers for ALL ids - */ - for(Uint32 i=0; i < m_bufferList.size(); i++) { - delete m_bufferList[i]; - m_bufferList[i] = 0; - } - m_bufferList.clear(); - - return true; -} diff --git a/storage/ndb/src/old_files/rep/storage/GCIContainer.hpp b/storage/ndb/src/old_files/rep/storage/GCIContainer.hpp deleted file mode 100644 index 48cbc66bfbd0162db860d33a984b582c67005e09..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIContainer.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef GCI_CONTAINER_HPP -#define GCI_CONTAINER_HPP - -#include <Vector.hpp> - -#include "LogRecord.hpp" -#include "GCIBuffer.hpp" - -#undef swap -#include <list> -#include <iterator> - -/** - * @class GCIContainer - * @brief Responsible for storing LogRecord:s in GCIBuffer:s - * - * Each GCIBuffer stored in the GCIContainer is named by a pair <GCI, id>. - * (On PS REP the id is the nodeId, on SS REP the id is the node group). - */ -class GCIContainer { -public: - GCIContainer(Uint32 maxNoOfIds); - ~GCIContainer(); - - /*************************************************************************** - * GCIBuffer interface - ***************************************************************************/ - /** - * @return GCIBuffer if success, NULL otherwise - */ - GCIBuffer * createGCIBuffer(Uint32 gci, Uint32 id); - - /** - * Destroy all buffers with GCI strictly less than gci. - */ - void destroyGCIBuffersBeforeGCI(Uint32 gci, Uint32 id); - - /** - * Destroy all buffers with GCI gci. - * @return true if buffer was deleted, false if no buffer exists - */ - bool destroyGCIBuffer(Uint32 gci, Uint32 id); - - /** - * Fetch buffer - * @return GCIBuffer for gci, or NULL if no buffer found - */ - GCIBuffer * getGCIBuffer(Uint32 gci, Uint32 id); - - /** - * Set that buffer is completed, i.e. no more records are to be inserted - */ - void setCompleted(Uint32 gci, Uint32 id); - - - /** - * @fn insertPage - * @param gci GCI this page belongs to. - * @param id Id this page belongs to. - * @param dataPtr Pointer originating from Page::m_page - * @param dataBLen Length in bytes of data following dataptr. - */ - void insertPage(Uint32 gci, Uint32 id, char * dataPtr, Uint32 dataBLen); - - - /*************************************************************************** - * Record interface - ***************************************************************************/ - void insertLogRecord(Uint32 id, Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3], Uint32 gci); - - void insertMetaRecord(Uint32 id, Uint32 tableId, - class LinearSectionPtr ptr[3], Uint32 gci); - - /** - * Get available (complete) GCI Buffers that exists in the container. - * first == last means that there is one complete buffer - * @param id Id for which to as for available gci buffers. - * @param first First complete gci buffer - * @param last Last complete gci buffer - */ - void getAvailableGCIBuffers(Uint32 id, Uint32 * first, Uint32 * last); - - /** - * Resets the gcicontainer to its original state (initial state and empty) - * I.e., same state as when the object was first constructed. - * @return true if reset was ok - */ - bool reset(); - -private: - NdbMutex* theMutexPtr; - MutexVector <GCIBuffer *> m_bufferList; ///< All GCIBuffers stored - - typedef struct GCIRange { - Uint32 m_firstGCI; - Uint32 m_lastGCI; - }; - - Uint32 m_maxNoOfIds; - - GCIRange * gciRange; ///< Array of GCI ranges for each id -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp b/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp deleted file mode 100644 index 5adb53f965c195ab472682855cc9a01c5729572a..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "GCIContainerPS.hpp" -#include <NdbOut.hpp> -#include <NdbMem.h> -#include <new> - -GCIContainerPS::GCIContainerPS(Uint32 maxNoOfNodeGrps) -{ - m_container = new GCIContainer(maxNoOfNodeGrps); - if (!m_container) REPABORT("Could not allocate new GCIContainer"); -} - -GCIContainerPS::~GCIContainerPS() -{ - delete m_container; -} - -void -GCIContainerPS::setNodeGroupInfo(NodeGroupInfo * info) -{ - m_nodeGroupInfo=info; -}; - -void -GCIContainerPS::createGCIBuffer(Uint32 gci, Uint32 id) -{ - m_container->createGCIBuffer(gci, id); -} - -void -GCIContainerPS::getAvailableGCIBuffers(Uint32 id /*nodegrp */, - Uint32 * first, Uint32 * last) { - - Uint32 nodeId = m_nodeGroupInfo->getPrimaryNode(id); - if(!nodeId) { - *first = 1; - *last = 0; - return; - } - - /** - *@todo do smart stuff with this! - */ - m_container->getAvailableGCIBuffers(nodeId, first, last); - -} - -void -GCIContainerPS::destroyGCIBuffersBeforeGCI(Uint32 gci) -{ - //for each node in every nodeGrp do: - NodeGroupInfo::iterator * it; - for(Uint32 i=0; i<m_nodeGroupInfo->getNoOfNodeGroups(); i++) { - it = new NodeGroupInfo::iterator(i, m_nodeGroupInfo); - for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) { - m_container->destroyGCIBuffersBeforeGCI(gci, nci->nodeId); - } - delete it; - } -} - -void -GCIContainerPS::insertLogRecord(Uint32 id, Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3], Uint32 gci) -{ - m_container->insertLogRecord(id, tableId, operation, ptr, gci); -} - -void -GCIContainerPS::insertMetaRecord(Uint32 id, Uint32 tableId, - class LinearSectionPtr ptr[3], Uint32 gci) -{ - m_container->insertMetaRecord(id, tableId, ptr, gci); -} - -void -GCIContainerPS::setCompleted(Uint32 gci, Uint32 id) -{ - m_container->setCompleted(gci, id); -} - -GCIBuffer * -GCIContainerPS::getGCIBuffer(Uint32 gci, Uint32 id) -{ - return m_container->getGCIBuffer(gci, id); -} - -/** - * @todo: fix return value - */ -bool -GCIContainerPS::destroyGCIBuffer(Uint32 gci, Uint32 id) -{ - //for each node in nodeGrp id do: - NodeGroupInfo::iterator * it; - it = new NodeGroupInfo::iterator(id, m_nodeGroupInfo); - for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) - { - if(!m_container->destroyGCIBuffer(gci, nci->nodeId)) - { - delete it; - return false; - } - } - delete it; - return true; -} - -bool -GCIContainerPS::reset() -{ - return m_container->reset(); -} diff --git a/storage/ndb/src/old_files/rep/storage/GCIContainerPS.hpp b/storage/ndb/src/old_files/rep/storage/GCIContainerPS.hpp deleted file mode 100644 index 7f5aaac48407dd0d54b2aef3a46b58bb77c51c30..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIContainerPS.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef GCI_CONTAINER_PS_HPP -#define GCI_CONTAINER_PS_HPP - -#include <Vector.hpp> -#include <TransporterDefinitions.hpp> - -#include "NodeGroupInfo.hpp" -#include <rep/storage/GCIContainer.hpp> - -#include <list> -#include <iterator> - -/** - * @class GCIContainerPS - * @brief Interface to GCIContainer that takes node groups into account - */ -class GCIContainerPS -{ -public: - GCIContainerPS(Uint32 maxNoOfNodeGrps); - ~GCIContainerPS(); - - void setNodeGroupInfo(NodeGroupInfo * info); - NodeGroupInfo * getNodeGroupInfo() {return m_nodeGroupInfo;}; - - void createGCIBuffer(Uint32 gci, Uint32 id); - void getAvailableGCIBuffers(Uint32 id /*nodegrp */, - Uint32 * first, Uint32 * last); - - /*************************************************************************** - * Record interface - ***************************************************************************/ - void insertLogRecord(Uint32 grpId, Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3], Uint32 gci); - - void insertMetaRecord(Uint32 grpId, Uint32 tableId, - class LinearSectionPtr ptr[3], Uint32 gci); - - /** - * Destroy all buffers with GCI strictly less than gci. - */ - void destroyGCIBuffersBeforeGCI(Uint32 gci); - - /** - * Set that buffer is completed, i.e. no more records are to be inserted - */ - void setCompleted(Uint32 gci, Uint32 id); - - /** - * Fetch buffer - * @return GCIBuffer for gci, or NULL if no buffer found - */ - GCIBuffer * getGCIBuffer(Uint32 gci, Uint32 id); - - /** - * Destroy all buffers with GCI gci. - * @return true if buffer was deleted, false if no buffer exists - */ - bool destroyGCIBuffer(Uint32 gci, Uint32 id); - - - /** - * Resets the gcicontainer to its original state (initial state and empty) - * @return true if reset was ok - */ - bool reset(); - -private: - GCIContainer * m_container; - NodeGroupInfo * m_nodeGroupInfo; -}; - - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/GCIPage.cpp b/storage/ndb/src/old_files/rep/storage/GCIPage.cpp deleted file mode 100644 index 05ecde2fee1aad5ea26e6578a8c44c63fc0c085c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIPage.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "GCIPage.hpp" -#include "assert.h" -#include <new> - -GCIPage::GCIPage(Uint32 gci) -{ - m_first = NULL; - m_last = NULL; - m_gci = gci; - m_full = false; - m_currentPagePos=m_page; - m_usedBytes = 0; -} - -/***************************************************************************** - * Insert - *****************************************************************************/ - -/** - * Store a new log record on this page. - * @return True if success, false otherwise - */ -bool -GCIPage::insertLogRecord(Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3]) -{ - /** - * Calculate size of new logrecord in bytes - */ - assert(m_page!=NULL); - Uint32 size = 4*ptr[0].sz + 4*ptr[1].sz + sizeof(LogRecord); - - if(!((m_currentPagePos + size ) < (m_page + m_pageBSize))) { - m_full = true; - return false; // No free space. GCIBuffer must allocate a new page - } - LogRecord * lr = new(m_currentPagePos) LogRecord(); - if (lr==0) REPABORT("Could not allocate new log record"); - - lr->recordType = Record::LOG; - lr->recordLen = size; - lr->operation = operation; - lr->tableId = tableId; - lr->attributeHeaderWSize = ptr[0].sz; - lr->attributeDataWSize = ptr[1].sz; - - m_currentPagePos += sizeof(LogRecord); - - lr->attributeHeader = (Uint32*)m_currentPagePos; - memcpy(lr->attributeHeader, ptr[0].p, lr->attributeHeaderWSize * 4); - - m_currentPagePos += lr->attributeHeaderWSize * 4; - - lr->attributeData = (Uint32*)m_currentPagePos; - memcpy(lr->attributeData, ptr[1].p, lr->attributeDataWSize * 4); - - m_currentPagePos += lr->attributeDataWSize * 4; - - m_usedBytes+=size; - return true; -} - -/** - * Store a new log record on this page. - * @return True if sucessful, false otherwise. - */ -bool -GCIPage::insertMetaRecord(Uint32 tableId, class LinearSectionPtr ptr[3]) -{ - /** - * Calculate size of new logrecord in bytes - */ - Uint32 size = 4*ptr[0].sz + sizeof(MetaRecord); - - if(!((m_currentPagePos + size ) < (m_page + m_pageBSize))) { - m_full = true; - return false; // No free space. GCIBuffer must allocate a new page - } - MetaRecord * mr = new(m_currentPagePos) MetaRecord(); - if (mr==0) REPABORT("Could not allocate new meta record"); - - // mr->operation = operation; - mr->recordType = Record::META; - mr->recordLen = size; - - mr->tableId = tableId; - mr->dataLen = ptr[0].sz; - - - m_currentPagePos += sizeof(MetaRecord); - - mr->data = (Uint32*)m_currentPagePos; - memcpy(mr->data, ptr[0].p, mr->dataLen * 4); - - m_currentPagePos += mr->dataLen * 4; - - m_usedBytes+=size; - return true; -} - -/** - * copy function - */ -void -GCIPage::copyDataToPage(char * dataPtr, Uint32 dataBLen) -{ - assert (dataBLen < m_pageBSize); - memcpy(m_page, dataPtr, dataBLen); - m_currentPagePos=m_page + dataBLen; - m_usedBytes = dataBLen; - m_full = true; - m_first = (Record * )m_page; - dataPtr = 0; -} - -/***************************************************************************** - * Iterator - *****************************************************************************/ - -GCIPage::iterator::iterator(const GCIPage* page) -{ - m_gciPage = page; - m_data = m_gciPage->m_page; - m_currentRecord = (Record*)m_data; -} - -Record * -GCIPage::iterator::first() -{ - return m_currentRecord; -} - -Record * -GCIPage::iterator::next() -{ - m_currentRecord = (Record*) - ((char*)(m_currentRecord)+ m_currentRecord->recordLen); - if((char*)m_currentRecord < (char*)(m_data + m_gciPage->m_usedBytes)) - return m_currentRecord; - else { - return 0; - } -} - -bool -GCIPage::iterator::exists() -{ - return ((char*)m_currentRecord < (m_data + m_gciPage->m_usedBytes)); -} diff --git a/storage/ndb/src/old_files/rep/storage/GCIPage.hpp b/storage/ndb/src/old_files/rep/storage/GCIPage.hpp deleted file mode 100644 index 50c5ab0cfba0bf57debdcc3aab0a9872bcd6197b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/GCIPage.hpp +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef GCI_PAGE_HPP -#define GCI_PAGE_HPP - -#include "LogRecord.hpp" -#include <TransporterDefinitions.hpp> - -#include <rep/rep_version.hpp> - -/** - * @class GCIPage - * @brief A GCIPage contains a number of LogRecords for a certain GCI. - */ -class GCIPage -{ -public: - GCIPage(Uint32 gci); - GCIPage(Uint32 gci, char * dataPtr, Uint32 szBytes); - - /** - * @fn insertLogRecord - * @param tableId the table this will be LogRecord applies to. - * @param operation the operation this LogRecord represents - * @param ptr A LinearSectionPtr p'tr that contains the data. - * @return PAGE_FULL if the page is full, otherwise "true" - */ - bool insertLogRecord(Uint32 tableId, Uint32 operation, - class LinearSectionPtr ptr[3]); - - /** - * @fn insertMetaRecord - */ - bool insertMetaRecord(Uint32 tableId, class LinearSectionPtr ptr[3]); - - /** - * @fn getFirstRecord - * @return First record (or NULL if no record is stored on page) - */ - Record * getFirstRecord() { return m_first; }; - - /** - * @fn getStorage - */ - Uint32 * getStoragePtr() const {return (Uint32*)m_page;} ; - Uint32 getStorageByteSize() const {return m_usedBytes;} ; - Uint32 getStorageWordSize() const {return m_usedBytes >> 2;}; - - /** - * @fn copyDataToPage - * @info copy dataPtr to Page - * @param dataPtr - data to copy - * @param dataBLen - size in bytes to copy. - */ - void copyDataToPage(char * dataPtr, Uint32 szBytes); - - /** - * Iterator for records (Not yet used! Maybe should not be used.) - */ - class iterator { - public: - iterator(const GCIPage* page); - Record * first(); ///< @return First record (or NULL if no page exists) - Record * next(); ///< @return Next record (or NULL if no more records) - bool exists(); ///< @return true if another record exists-for next() - private: - Record * m_currentRecord; - const char * m_data; - const GCIPage * m_gciPage; - }; - friend class GCIPage::iterator; - - /** - * @fn getGCI - * Get the GCI of all log records stored on this page. - */ - Uint32 getGCI() { return m_gci; }; - - /** - * @fn isFull - * @return true if page is full, i.e. is one attempt to add a record - * has failed, false otherwise. - */ - bool isFull() { return m_full; }; - -private: - Uint32 m_gci; ///< GCI for this page - - Record * m_first; ///< Pointer to first log record - Record * m_last; ///< Pointer to last log record - - bool m_full; - - static const Uint32 m_pageBSize = 8192; ///< Page size in bytes - char m_page[m_pageBSize]; ///< Storage for pages - char * m_currentPagePos; - Uint32 m_usedBytes; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/LogRecord.hpp b/storage/ndb/src/old_files/rep/storage/LogRecord.hpp deleted file mode 100644 index a0bf3d52372d358894210d127a9a54da9760f82e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/LogRecord.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef LOG_RECORD_HPP -#define LOG_RECORD_HPP - -#include <ndb_global.h> -#include <portlib/NdbMem.h> - -/** - * @class Record - * @brief - */ -class Record { -public: - enum RecordType { META = 1, LOG = 2 }; - RecordType recordType; - Uint32 recordLen; ///< Size in bytes of entire log record, incl payload -}; - - -/** - * @class LogRecord - * @brief - */ -class LogRecord : public Record { -public: - ~LogRecord() { - NdbMem_Free(attributeHeader); - NdbMem_Free(attributeData); - } - -public: - Uint32 gci; //0 - Uint32 operation; //4 - Uint32 tableId; //8 - - Uint32 attributeHeaderWSize; //12 - Uint32 attributeDataWSize; //16 - Uint32 * attributeHeader; //20 - Uint32 * attributeData; //24 - - /** - * Next pointer - */ -}; - - -/** - * @class MetaRecord - * @brief - */ -class MetaRecord : public Record { -public: - ~MetaRecord() { - NdbMem_Free(data); - } - -public: - Uint32 gci; - Uint32 tableId; - Uint32 dataLen; //in words of the data (below) - Uint32 *data; -}; - - -#endif - diff --git a/storage/ndb/src/old_files/rep/storage/Makefile b/storage/ndb/src/old_files/rep/storage/Makefile deleted file mode 100644 index 89b3af455e8c11e13fbcef371d7f671b89db662e..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -include .defs.mk - -TYPE := repserver - -ARCHIVE_TARGET := repstorage - -SOURCES = GCIContainer.cpp \ - GCIContainerPS.cpp \ - GCIBuffer.cpp \ - GCIPage.cpp \ - NodeGroupInfo.cpp \ - NodeGroup.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/storage/NodeConnectInfo.hpp b/storage/ndb/src/old_files/rep/storage/NodeConnectInfo.hpp deleted file mode 100644 index 403f92a59994471e42f2b61161a85cb6accc996f..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/NodeConnectInfo.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NODE_CONNECTINFO_HPP -#define NODE_CONNECTINFO_HPP - -#include <ndb_types.h> - -struct NodeConnectInfo { - NodeConnectInfo(Uint16 n, bool c): nodeId(n), connected(c) {}; - Uint32 nodeId; - bool connected; -}; - - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/NodeGroup.cpp b/storage/ndb/src/old_files/rep/storage/NodeGroup.cpp deleted file mode 100644 index 33451efb1045f08cc55b75f864b063fda66ac676..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/NodeGroup.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "NodeGroup.hpp" -#include <NdbOut.hpp> - -//#define NODE_GROUP_DEBUG - -NodeGroup::NodeGroup(Uint32 nodeGrp) { - m_nodeGrp = nodeGrp; - m_primaryNode = 0; -} - -NodeGroup::~NodeGroup() { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++) { - delete m_nodeConnectList[i]; - m_nodeConnectList.erase(i); - } -} - -void -NodeGroup::addNode(Uint32 nodeId, bool connected) { -#ifdef NODE_GROUP_DEBUG - ndbout_c("NodeGroup: addNode(nodeId=%d, connected=%d), nodegrp=%d", - nodeId, connected, m_nodeGrp); -#endif - - /** - * If node already in node group, then do nothing except - * setting the connect statusflag for the node (in case it - * has changed). - */ - for(Uint32 i=0; i < m_nodeConnectList.size(); i++) - if(m_nodeConnectList[i]->nodeId == nodeId) { - m_nodeConnectList[i]->connected = connected; - return; - } - - /** - * If node not already in node group, then add node - */ - m_nodeConnectList.push_back(new NodeConnectInfo(nodeId, connected)); - sort(); - -#ifdef NODE_GROUP_DEBUG - for(Uint32 i=0; i < m_nodeConnectList.size(); i++) - ndbout_c("NodeGroup: NodeId=%d", m_nodeConnectList[i]->nodeId); -#endif -} - -/** - * crappy sort - */ -void NodeGroup::sort() { - NodeConnectInfo * tmp; - if(m_nodeConnectList.size()<2) - return; - for(Uint32 i=0; i < m_nodeConnectList.size()-1; i++) { - for(Uint32 j=m_nodeConnectList.size()-1;j>i+1; j--) { - if(m_nodeConnectList[j]->nodeId < m_nodeConnectList[j-1]->nodeId) { - tmp=m_nodeConnectList[j]; - m_nodeConnectList[j]=m_nodeConnectList[j-1]; - m_nodeConnectList[j-1]=tmp; - } - } - } -} - -Uint32 -NodeGroup::getFirstConnectedNode() { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++){ - if(m_nodeConnectList[i]->connected) - return m_nodeConnectList[i]->nodeId; - } - return 0; -} - -Uint32 -NodeGroup::getNodeGrp() { - return m_nodeGrp; -} - -Vector <NodeConnectInfo *> * -NodeGroup::getNodeConnectList(){ - return &m_nodeConnectList; -} - -void -NodeGroup::setNodeConnectStatus(Uint32 nodeId, bool connected) { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++){ - if(m_nodeConnectList[i]->nodeId==nodeId) { - m_nodeConnectList[i]->connected=connected; - break; - } - } -} - -bool -NodeGroup::isConnected(Uint32 nodeId) { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++){ - if(m_nodeConnectList[i]->nodeId == nodeId) { - return m_nodeConnectList[i]->connected; - } - } - REPABORT1("Check for non-existing node to be connected", nodeId); -} - - -bool -NodeGroup::fullyConnected() { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++){ - if(!(m_nodeConnectList[i]->connected)) - return false; - } - return true; -} - -bool -NodeGroup::connectedNodeGrp() { - for(Uint32 i=0; i<m_nodeConnectList.size(); i++){ - if(m_nodeConnectList[i]->connected) { - return true; - } - } - return false; -} - - -bool -NodeGroup::exists(Uint32 nodeId) { - for(Uint32 i=0;i<m_nodeConnectList.size();i++) { - if(m_nodeConnectList[i]->nodeId==nodeId) - return true; - } - return false; -} diff --git a/storage/ndb/src/old_files/rep/storage/NodeGroup.hpp b/storage/ndb/src/old_files/rep/storage/NodeGroup.hpp deleted file mode 100644 index 1f515e02a233823471feb783f57d0a2b89c33d41..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/NodeGroup.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NODE_GROUP_HPP -#define NODE_GROUP_HPP - -#include "NodeConnectInfo.hpp" -#include <Vector.hpp> -#include <ndb_types.h> - -#include <rep/rep_version.hpp> - -/** - * @class NodeGroup - * @brief Contains info about all nodes belonging to one node group - */ -class NodeGroup { -public: - NodeGroup(Uint32 nodeGrp); - ~NodeGroup(); - /** - * Add node to node group - * @param nodeId Node id of node to add - * @param connected Status of this node (true==connected) - */ - void addNode(Uint32 nodeId, bool connected); - - /** - * get first connected node in this node group - * @returns nodeId, 0 if there is no connected node... - */ - Uint32 getFirstConnectedNode(); - - /** - * get the primary node id - * @returns nodeId, the primary node id - */ - Uint32 getPrimaryNode() {return m_primaryNode;}; - - - /** - * sets a node in this nodegroup as the primary node - */ - void setPrimaryNode(Uint32 nodeId) {m_primaryNode=nodeId;}; - - - /** - * get the node group - * @returns the nodegroup number (m_nodeGrp) - */ - Uint32 getNodeGrp(); - - /** - * set the connection status for a particular node - * @param nodeId - the nodeId to set the connect status on - * @param connected - the status of this node (true==connected) - */ - void setNodeConnectStatus(Uint32 nodeId, bool connected); - - /** - * Get the connection status for a particular node - * @param nodeId - the nodeId to check the connect status on - * @returns true if node is connected, otherwise false - */ - bool isConnected(Uint32 nodeId); - - /** - * gives the status of this nodegroup. - * @returns true if atleast one node in the node group is connected - */ - bool connectedNodeGrp(); - - /** - * @returns true if ALL nodes are connected - */ - bool fullyConnected(); - - /** - * - * @returns true if node exists in nodegroup - */ - bool exists(Uint32 nodeId); - - Vector <NodeConnectInfo *> * getNodeConnectList(); - -private: - /** - * Sort list (bubble sort) - */ - void sort(); - Uint32 m_primaryNode; - Uint32 m_nodeGrp; - Vector<NodeConnectInfo *> m_nodeConnectList; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.cpp b/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.cpp deleted file mode 100644 index 8c250268997a3520545be4adbd9ba036b13c6bdf..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "NodeGroupInfo.hpp" - -NodeGroupInfo::NodeGroupInfo() -{ -} - -NodeGroupInfo::~NodeGroupInfo() -{ - for(Uint32 i=0; i<m_nodeGroupList.size(); i++) { - delete m_nodeGroupList[i]; - } - m_nodeGroupList.clear(); -} - - -void -NodeGroupInfo::setPrimaryNode(Uint32 nodeGrp, Uint32 nodeId) { - Uint32 pos; - /** - * Validation check to find out that the nodegroup really exists. - * The list is not sorted, so the index of the nodegroup is returned - * in pos. - */ - if(existsNodeGroup(nodeGrp, &pos)) { - m_nodeGroupList[pos]->setPrimaryNode(nodeId); - } else { - /** - * could not find node group - */ - RLOG(("Node group not found")); - REPABORT("Node group not found"); - } -} - -Uint32 -NodeGroupInfo::getPrimaryNode(Uint32 nodeGrp) { - Uint32 pos; - /** - * Validation check to find out that the nodegroup really exists. - * The list is not sorted, so the index of the nodegroup is returned - * in pos. - */ - if(existsNodeGroup(nodeGrp, &pos)) { - return m_nodeGroupList[pos]->getPrimaryNode(); - } else { - /** - * could not find node group - */ - RLOG(("Node group not found")); - REPABORT("Node group not found"); - } -} - -void -NodeGroupInfo::addNodeToNodeGrp(Uint32 nodeId, bool connected, Uint32 nodeGrp) -{ - Uint32 pos; - if(existsNodeGroup(nodeGrp, &pos)) { - /** - * NG exists -> just add the node - */ - m_nodeGroupList[pos]->addNode(nodeId, connected); - - } else { - /** - * NG do not exist -> create a new nodeGrp and add the node - */ - m_nodeGroupList.push_back(new NodeGroup(nodeGrp)); - - /** - * paranoia - */ - if(existsNodeGroup(nodeGrp, &pos)) { - m_nodeGroupList[pos]->addNode(nodeId, connected); - } else { - REPABORT(""); - } - } -} - -Uint32 -NodeGroupInfo::findNodeGroup(Uint32 nodeId) -{ - /** - * Check for existance in each nodegroup - */ - for(Uint32 i=0; i<m_nodeGroupList.size(); i++) { - if(m_nodeGroupList[i]->exists(nodeId)) return i; - } - - REPABORT1("No node group known for node", nodeId); -} - -Uint32 -NodeGroupInfo::getFirstConnectedNode(Uint32 nodeGrp) -{ - Uint32 pos; - /** - * Validation check to find out that the nodegroup really exists. - * The list is not sorted, so the index of the nodegroup is returned - * in pos. - */ - if(existsNodeGroup(nodeGrp, &pos)) { - return m_nodeGroupList[pos]->getFirstConnectedNode(); - } else { - /** - * could not find node group - */ - REPABORT(""); - } -} - -bool -NodeGroupInfo::connectedNodeGrp(Uint32 nodeGrp) -{ - return m_nodeGroupList[nodeGrp]->connectedNodeGrp(); -} - -bool -NodeGroupInfo::isConnected(Uint32 nodeId) -{ - Uint32 nodeGrp = findNodeGroup(nodeId); - return m_nodeGroupList[nodeGrp]->isConnected(nodeId); - -} - -bool -NodeGroupInfo::fullyConnected() -{ - for(Uint32 i=0; i<m_nodeGroupList.size(); i++) { - if(!(m_nodeGroupList[i]->fullyConnected())) - return false; - } - return true; -} - - -void -NodeGroupInfo::setConnectStatus(Uint32 nodeId, bool connected) -{ - Uint32 nodeGrp = findNodeGroup(nodeId); - m_nodeGroupList[nodeGrp]->setNodeConnectStatus(nodeId,connected); -} - - -bool -NodeGroupInfo::existsNodeGroup(Uint32 nodeGrp, Uint32 * pos) -{ - for(Uint32 i=0; i<m_nodeGroupList.size(); i++) { - if(m_nodeGroupList[i]->getNodeGrp()==nodeGrp) { - *pos=i; - return true; - } - } - return false; -} - - -/***************************************************************************** - * Iterator - *****************************************************************************/ - -NodeGroupInfo::iterator::iterator(Uint32 nodeGrp, NodeGroupInfo * ngi) -{ - m_iterator = 0; - for(Uint32 i=0; i < ngi->m_nodeGroupList.size(); i++) { - if(ngi->m_nodeGroupList[i]->getNodeGrp()==nodeGrp) { - m_nodeList = ngi->m_nodeGroupList[i]->getNodeConnectList(); - return; - } - } - m_nodeList=0; -} - -bool -NodeGroupInfo::iterator::exists() -{ - if(m_nodeList==0) return 0; - return (m_iterator < m_nodeList->size()); -} - -NodeConnectInfo * -NodeGroupInfo::iterator::first() -{ - m_iterator=0; - if(m_nodeList==0) return 0; - if(m_nodeList->size() == 0) return 0; - return (*m_nodeList)[m_iterator]; -} - -NodeConnectInfo * -NodeGroupInfo::iterator::next() -{ - m_iterator++; - if(m_nodeList==0) return 0; - if(m_nodeList->size() == 0) return 0; - if(m_iterator<m_nodeList->size()) - return (*m_nodeList)[m_iterator]; - else - return 0; -} - diff --git a/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.hpp b/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.hpp deleted file mode 100644 index 3d0499d44254861dd06fc0602d717645984eb11b..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/storage/NodeGroupInfo.hpp +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NODE_GROUPINFO_HPP -#define NODE_GROUPINFO_HPP - -#include <Vector.hpp> -#include <NdbTick.h> -#include <NdbMain.h> -#include <NdbOut.hpp> -//#include <NdbSleep.h> - -#include "NodeGroup.hpp" -#include <rep/rep_version.hpp> - -/** - * @class NodeGroupInfo - * @brief Contains info about all node groups and their connectivity status - */ -class NodeGroupInfo { -public: - NodeGroupInfo(); - ~NodeGroupInfo(); - - /** - * Add a node to a nodegroup together with the status of the node - * @param nodeId - the nodeId to add - * @param connected - true/false - * @param nodeGrp - the nodegroup to add this node to - */ - void addNodeToNodeGrp(Uint32 nodeId, bool connected, Uint32 nodeGrp); - - /** - * Get the nodegroup that a node belongs to. - * @param nodeId - the nodeId to check wich nodegroup it belongs to - * @return the nodegroup - */ - Uint32 findNodeGroup(Uint32 nodeId); - - /** - * Get the first connected node in a node group - * @param nodegroup - the node group to get the node in. - * @return nodeId, 0 if there is no connected node in the nodegroup - */ - Uint32 getFirstConnectedNode(Uint32 nodeGrp); - - - /** - * sets a nodeId in a nodeGroup as the primary node. If the - * primary node fails, then a new node in the node group is chosen - * @param nodegroup - the node group to get the node in. - * @param nodeId, 0 if there is no connected node in the nodegroup - */ - void setPrimaryNode(Uint32 nodeGrp, Uint32 nodeId); - - /** - * gets the nodeId in the nodegroup of the primary node. - * @param nodegroup - the node group to get the node in. - * @return nodeId, 0 if there is no connected node in the nodegroup - */ - Uint32 getPrimaryNode(Uint32 nodeGrp); - - - /** - * Checks if at least one node in the nodegroup is connected. - * @param nodeGrp - the nodegrp to check - * @return true if >0 nodes are connected in the nodegroup - */ - bool connectedNodeGrp(Uint32 nodeGrp); - - /** - * Checks if a node is connected or not - * @param nodeId - the nodeId to check connectivity - * @return true if node is connected - */ - bool isConnected(Uint32 nodeId); - - /** - * Set if a node is connected or not - * @param nodeId - the nodeId to set the connect flag fory - * @param connected - true if connect false if disconnect - */ - void setConnectStatus(Uint32 nodeId, bool connected); - - /** - * Check if all nodes are connected in all nodegroups - * @return return true if ALL nodes are connected in ALL nodeGroups - */ - bool fullyConnected(); - - /** - * Get the number of nodegroups - * @return the number of nodegroups. - */ - Uint32 getNoOfNodeGroups() { return m_nodeGroupList.size();}; - - /** - * @class iterator - * The iterator class iterates over a nodegroup, returning nodeIds - * in that node group. - * - * @code - * NodeGroupInfo::iterator * it; - * for(Uint32 i=0;i < m_nodeGroupInfo->getNoOfNodeGroups();i++) { - * it = new NodeGroupInfo::iterator(i,m_nodeGroupInfo); - * for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) - * ndbout_c("Iterating: %d", nci->nodeId); - * - * } - * @end code - */ - class iterator { - public: - iterator(Uint32 nodeGrp, NodeGroupInfo * ngi); - NodeConnectInfo * first(); ///< @return nodeConnectInfo* if exists. - ///< (NULL if no more nodes exists) - NodeConnectInfo * next(); ///< @return nodeConnectInfo* if exists. - ///< (NULL if no more nodes exists) - bool exists(); ///< @return true if another nodeId exists (for next()) - private: - Uint32 m_iterator; - const Vector<NodeConnectInfo *> * m_nodeList; - }; - friend class NodeGroupInfo::iterator; - -private: - bool existsNodeGroup(Uint32 nodeGrp, Uint32 * pos); - - Vector<NodeGroup *> m_nodeGroupList; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/transfer/Makefile b/storage/ndb/src/old_files/rep/transfer/Makefile deleted file mode 100644 index 0d8851e287acbd327d49680706aefe50ef8c5090..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapi repserver kernel - -ARCHIVE_TARGET := reptransfer - -SOURCES = TransPS.cpp \ - TransSS.cpp \ - TransSSSubscriptions.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/src/old_files/rep/transfer/TransPS.cpp b/storage/ndb/src/old_files/rep/transfer/TransPS.cpp deleted file mode 100644 index 11fb0203cbc35123f11cef79fb7c2be34b49e967..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/TransPS.cpp +++ /dev/null @@ -1,553 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "ConfigRetriever.hpp" -#include <NdbSleep.h> - -#include <NdbApiSignal.hpp> -#include <AttributeHeader.hpp> - -#include <signaldata/DictTabInfo.hpp> -#include <signaldata/GetTabInfo.hpp> -#include <signaldata/SumaImpl.hpp> -#include <GrepError.hpp> -#include <SimpleProperties.hpp> - -#include "TransPS.hpp" -#include <rep/storage/NodeGroupInfo.hpp> - -/***************************************************************************** - * Constructor / Destructor / Init - *****************************************************************************/ -TransPS::TransPS(GCIContainerPS* gciContainer) -{ - m_repSender = new ExtSender(); - m_gciContainerPS = gciContainer; -} - -TransPS::~TransPS() -{ - delete m_repSender; -} - -void -TransPS::init(TransporterFacade * tf, const char * connectString) -{ - abort(); -#ifdef NOT_FUNCTIONAL - m_signalExecThread = NdbThread_Create(signalExecThread_C, - (void **)this, - 32768, - "TransPS_Service", - NDB_THREAD_PRIO_LOW); - - ConfigRetriever configRetriever; - // configRetriever.setConnectString(connectString); - Properties* config = configRetriever.getConfig("REP", REP_VERSION_ID); - if (config == 0) { - ndbout << "TransPS: Configuration error: "; - const char* erString = configRetriever.getErrorString(); - if (erString == 0) { - erString = "No error specified!"; - } - ndbout << erString << endl; - exit(-1); - } - - Properties * extConfig; - /** - * @todo Hardcoded primary system name - */ - if (!config->getCopy("EXTERNAL SYSTEM_External", &extConfig)) { - ndbout << "External System \"External\" not found in configuration. " - << "Check config.ini." << endl; - config->print(); - exit(-1); - } - - m_ownNodeId = configRetriever.getOwnNodeId(); - extConfig->put("LocalNodeId", m_ownNodeId); - extConfig->put("LocalNodeType", "REP"); - Uint32 noOfConnections; - extConfig->get("NoOfConnections", &noOfConnections); - /* if (noOfConnections != 1) { - ndbout << "TransPS: There are " << noOfConnections << " connections " - << "defined in configuration" - << endl - << " There should be exactly one!" << endl; - exit(-1); - } - */ - /****************************** - * Set node id of external REP - ******************************/ - const Properties * connection; - const char * extSystem; - Uint32 extRepNodeId, tmpOwnNodeId; - - for(Uint32 i=0; i < noOfConnections; i++) { - extConfig->get("Connection", i, &connection); - if(connection == 0) REPABORT("No connection found"); - - if(connection->get("System1", &extSystem)) { - connection->get("NodeId1", &extRepNodeId); - connection->get("NodeId2", &tmpOwnNodeId); - } else { - connection->get("System2", &extSystem); - connection->get("NodeId1", &tmpOwnNodeId); - connection->get("NodeId2", &extRepNodeId); - } - if(m_ownNodeId == tmpOwnNodeId) - break; - } - - if(extRepNodeId==0) REPABORT("External replication server not found"); - if(extSystem==0) REPABORT("External system not found"); - - m_ownBlockNo = tf->open(this, execSignal, execNodeStatus); - assert(m_ownBlockNo > 0); - - m_ownRef = numberToRef(m_ownBlockNo, m_ownNodeId); - assert(m_ownNodeId == tf->ownId()); - - ndbout_c("Phase 4 (TransPS): Connection %d to external REP node %d opened", - m_ownBlockNo, extRepNodeId); - - m_repSender->setNodeId(extRepNodeId); - m_repSender->setOwnRef(m_ownRef); - m_repSender->setTransporterFacade(tf); -#endif -} - -/***************************************************************************** - * Signal Queue Executor - *****************************************************************************/ - -class SigMatch -{ -public: - int gsn; - void (TransPS::* function)(NdbApiSignal *signal); - - SigMatch() { gsn = 0; function = NULL; }; - - SigMatch(int _gsn, void (TransPS::* _function)(NdbApiSignal *signal)) { - gsn = _gsn; - function = _function; - }; - - bool check(NdbApiSignal *signal) { - if(signal->readSignalNumber() == gsn) return true; - return false; - }; -}; - -extern "C" -void * -signalExecThread_C(void *r) -{ - TransPS *repps = (TransPS*)r; - - repps->signalExecThreadRun(); - - NdbThread_Exit(0); - /* NOTREACHED */ - return 0; -} - -void -TransPS::signalExecThreadRun() -{ - Vector<SigMatch> sl; - - /** - * Signals executed here - */ - sl.push_back(SigMatch(GSN_REP_GET_GCI_REQ, - &TransPS::execREP_GET_GCI_REQ)); - sl.push_back(SigMatch(GSN_REP_GET_GCIBUFFER_REQ, - &TransPS::execREP_GET_GCIBUFFER_REQ)); - sl.push_back(SigMatch(GSN_REP_CLEAR_PS_GCIBUFFER_REQ, - &TransPS::execREP_CLEAR_PS_GCIBUFFER_REQ)); - - /** - * Signals to be forwarded to GREP::PSCoord - */ - sl.push_back(SigMatch(GSN_GREP_SUB_CREATE_REQ, &TransPS::sendSignalGrep)); - - /** - * Signals to be forwarded to GREP::PSCoord - */ - sl.push_back(SigMatch(GSN_GREP_CREATE_SUBID_REQ, &TransPS::sendSignalGrep)); - sl.push_back(SigMatch(GSN_GREP_SUB_START_REQ, &TransPS::sendSignalGrep)); - sl.push_back(SigMatch(GSN_GREP_SUB_SYNC_REQ, &TransPS::sendSignalGrep)); - sl.push_back(SigMatch(GSN_GREP_SUB_REMOVE_REQ, &TransPS::sendSignalGrep)); - - while(1) { - SigMatch *handler = NULL; - NdbApiSignal *signal = NULL; - if(m_signalRecvQueue.waitFor(sl, handler, signal, DEFAULT_TIMEOUT)) { -#if 0 - ndbout_c("TransPS: Removed signal from queue (GSN: %d, QSize: %d)", - signal->readSignalNumber(), m_signalRecvQueue.size()); -#endif - if(handler->function != 0) { - (this->*handler->function)(signal); - delete signal; - signal = 0; - } else { - REPABORT("Illegal handler for signal"); - } - } - } -} - -void -TransPS::sendSignalRep(NdbApiSignal * s) -{ - m_repSender->sendSignal(s); -} - -void -TransPS::sendSignalGrep(NdbApiSignal * s) -{ - m_grepSender->sendSignal(s); -} - -void -TransPS::sendFragmentedSignalRep(NdbApiSignal * s, - LinearSectionPtr ptr[3], - Uint32 sections) -{ - m_repSender->sendFragmentedSignal(s, ptr, sections); -} - -void -TransPS::sendFragmentedSignalGrep(NdbApiSignal * s, - LinearSectionPtr ptr[3], - Uint32 sections) -{ - m_grepSender->sendFragmentedSignal(s, ptr, sections); -} - - -void -TransPS::execNodeStatus(void* obj, Uint16 nodeId, bool alive, bool nfCompleted) -{ -// TransPS * thisObj = (TransPS*)obj; - - RLOG(("Node changed state (NodeId %d, Alive %d, nfCompleted %d)", - nodeId, alive, nfCompleted)); - - if(!alive && !nfCompleted) { } - - if(!alive && nfCompleted) { } -} - -void -TransPS::execSignal(void* executeObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]){ - - TransPS * executor = (TransPS *) executeObj; - - const Uint32 gsn = signal->readSignalNumber(); - const Uint32 len = signal->getLength(); - - NdbApiSignal * s = new NdbApiSignal(executor->m_ownRef); - switch(gsn){ - case GSN_REP_GET_GCI_REQ: - case GSN_REP_GET_GCIBUFFER_REQ: - case GSN_REP_CLEAR_PS_GCIBUFFER_REQ: - s->set(0, SSREPBLOCKNO, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - case GSN_GREP_SUB_CREATE_REQ: - { - if(signal->m_noOfSections > 0) { - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - s->set(0, GREP, gsn, - len); - executor->sendFragmentedSignalGrep(s,ptr,1); - delete s; - } else { - s->set(0, GREP, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - } - } - break; - case GSN_GREP_SUB_START_REQ: - case GSN_GREP_SUB_SYNC_REQ: - case GSN_GREP_SUB_REMOVE_REQ: - case GSN_GREP_CREATE_SUBID_REQ: - s->set(0, GREP, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - default: - REPABORT1("Illegal signal received in execSignal", gsn); - } -#if 0 - ndbout_c("TransPS: Inserted signal into queue (GSN: %d, Len: %d)", - signal->readSignalNumber(), len); -#endif -} - -/***************************************************************************** - * Signal Receivers - *****************************************************************************/ - -void -TransPS::execREP_GET_GCIBUFFER_REQ(NdbApiSignal* signal) -{ - RepGetGciBufferReq * req = (RepGetGciBufferReq*)signal->getDataPtr(); - Uint32 firstGCI = req->firstGCI; - Uint32 lastGCI = req->lastGCI; - Uint32 nodeGrp = req->nodeGrp; - - RLOG(("Received request for %d:[%d-%d]", nodeGrp, firstGCI, lastGCI)); - - NodeGroupInfo * tmp = m_gciContainerPS->getNodeGroupInfo(); - Uint32 nodeId = tmp->getPrimaryNode(nodeGrp); - /** - * If there is no connected node in the nodegroup -> abort. - * @todo: Handle error when a nodegroup is "dead" - */ - if(!nodeId) { - RLOG(("There are no connected nodes in node group %d", nodeGrp)); - sendREP_GET_GCIBUFFER_REF(signal, firstGCI, lastGCI, nodeGrp, - GrepError::REP_NO_CONNECTED_NODES); - return; - } - - transferPages(firstGCI, lastGCI, nodeId, nodeGrp, signal); - - /** - * Done tfxing pages, sending GCIBuffer conf. - */ - Uint32 first, last; - m_gciContainerPS->getAvailableGCIBuffers(nodeGrp, &first, &last); - - RepGetGciBufferConf * conf = (RepGetGciBufferConf*)req; - conf->senderRef = m_ownRef; - conf->firstPSGCI = first; // Buffers found on REP PS (piggy-back info) - conf->lastPSGCI = last; - conf->firstSSGCI = firstGCI; // Now been transferred to REP SS - conf->lastSSGCI = lastGCI; - conf->nodeGrp = nodeGrp; - signal->set(0, SSREPBLOCKNO, GSN_REP_GET_GCIBUFFER_CONF, - RepGetGciBufferConf::SignalLength); - sendSignalRep(signal); - - RLOG(("Sent %d:[%d-%d] (Stored PS:%d:[%d-%d])", - nodeGrp, firstGCI, lastGCI, nodeGrp, first, last)); -} - -void -TransPS::transferPages(Uint32 firstGCI, Uint32 lastGCI, - Uint32 nodeId, Uint32 nodeGrp, - NdbApiSignal * signal) -{ - /** - * Transfer pages in GCI Buffer to SS - * When buffer is sent, send accounting information. - */ - RepDataPage * pageData = (RepDataPage*)signal->getDataPtr(); - LinearSectionPtr ptr[1]; - GCIPage * page; - for(Uint32 i=firstGCI; i<=lastGCI; i++) { - Uint32 totalSizeSent = 0; - GCIBuffer * buffer = m_gciContainerPS->getGCIBuffer(i, nodeId); - - if(buffer != 0) { - GCIBuffer::iterator it(buffer); - /** - * Send all pages to SS - */ - for (page = it.first(); page != 0; page = it.next()) { - ptr[0].p = page->getStoragePtr(); - ptr[0].sz = page->getStorageWordSize(); - totalSizeSent += ptr[0].sz; - pageData->gci = i; - pageData->nodeGrp = nodeGrp; - signal->set(0, SSREPBLOCKNO, GSN_REP_DATA_PAGE, - RepDataPage::SignalLength); - sendFragmentedSignalRep(signal, ptr, 1); - } - - /** - * Send accounting information to SS - */ - RepGciBufferAccRep * rep = (RepGciBufferAccRep *)pageData; - rep->gci = i; - rep->nodeGrp = nodeGrp; - rep->totalSentBytes = (4 * totalSizeSent); //words to bytes - signal->set(0, SSREPBLOCKNO, GSN_REP_GCIBUFFER_ACC_REP, - RepGciBufferAccRep::SignalLength); - sendSignalRep(signal); - - RLOG(("Sending %d:[%d] (%d bytes) to external REP (nodeId %d)", - nodeGrp, i, 4*totalSizeSent, nodeId)); - } - } - page = 0; -} - -void -TransPS::execREP_GET_GCI_REQ(NdbApiSignal* signal) -{ - RepGetGciReq * req = (RepGetGciReq*)signal->getDataPtr(); - Uint32 nodeGrp = req->nodeGrp; - - Uint32 first, last; - m_gciContainerPS->getAvailableGCIBuffers(nodeGrp, &first, &last); - - RepGetGciConf * conf = (RepGetGciConf*) req; - conf->firstPSGCI = first; - conf->lastPSGCI = last; - conf->senderRef = m_ownRef; - conf->nodeGrp = nodeGrp; - signal->set(0, SSREPBLOCKNO, GSN_REP_GET_GCI_CONF, - RepGetGciConf::SignalLength); - sendSignalRep(signal); -} - -/** - * REP_CLEAR_PS_GCIBUFFER_REQ - * destroy the GCI buffer in the GCI Container - * and send a CONF to Grep::SSCoord - */ -void -TransPS::execREP_CLEAR_PS_GCIBUFFER_REQ(NdbApiSignal * signal) -{ - RepClearPSGciBufferReq * const req = - (RepClearPSGciBufferReq*)signal->getDataPtr(); - Uint32 firstGCI = req->firstGCI; - Uint32 lastGCI = req->lastGCI; - Uint32 nodeGrp = req->nodeGrp; - - assert(firstGCI >= 0 && lastGCI > 0); - if(firstGCI<0 && lastGCI <= 0) - { - RLOG(("WARNING! Illegal delete request ignored")); - sendREP_CLEAR_PS_GCIBUFFER_REF(signal, firstGCI, lastGCI, - 0, nodeGrp, - GrepError::REP_DELETE_NEGATIVE_EPOCH); - } - - if(firstGCI==0 && lastGCI==(Uint32)0xFFFF) { - m_gciContainerPS->getAvailableGCIBuffers(nodeGrp, &firstGCI, &lastGCI); - RLOG(("Deleting PS:[%d-%d]", firstGCI, lastGCI)); - } - - if(firstGCI == 0) { - Uint32 f, l; - m_gciContainerPS->getAvailableGCIBuffers(nodeGrp, &f, &l); - - RLOG(("Deleting PS:[%d-%d]", f, l)); - - if(f>firstGCI) - firstGCI = f; - } - - /** - * Delete buffer - * Abort if we try to destroy a buffer that does not exist - * Deleting buffer from every node in the nodegroup - */ - for(Uint32 i=firstGCI; i<=lastGCI; i++) { - if(!m_gciContainerPS->destroyGCIBuffer(i, nodeGrp)) { - sendREP_CLEAR_PS_GCIBUFFER_REF(signal, firstGCI, lastGCI, i, nodeGrp, - GrepError::REP_DELETE_NONEXISTING_EPOCH); - return; - } - - RLOG(("Deleted PS:%d:[%d]", nodeGrp, i)); - } - - /** - * Send reply to Grep::SSCoord - */ - RepClearPSGciBufferConf * conf = (RepClearPSGciBufferConf*)req; - conf->firstGCI = firstGCI; - conf->lastGCI = lastGCI; - conf->nodeGrp = nodeGrp; - signal->set(0, SSREPBLOCKNO, GSN_REP_CLEAR_PS_GCIBUFFER_CONF, - RepClearPSGciBufferConf::SignalLength); - sendSignalRep(signal); -} - -/***************************************************************************** - * Signal Senders - *****************************************************************************/ - -void -TransPS::sendREP_GET_GCI_REF(NdbApiSignal* signal, - Uint32 nodeGrp, - Uint32 firstPSGCI, Uint32 lastPSGCI, - GrepError::Code err) -{ - RepGetGciRef * ref = (RepGetGciRef *)signal->getDataPtrSend(); - ref->firstPSGCI = firstPSGCI; - ref->lastPSGCI = lastPSGCI; - ref->firstSSGCI = 0; - ref->lastSSGCI = 0; - ref->nodeGrp = nodeGrp; - ref->err = err; - signal->set(0, SSREPBLOCKNO, GSN_REP_GET_GCI_REF, - RepGetGciRef::SignalLength); - sendSignalRep(signal); -} - -void -TransPS::sendREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, Uint32 lastGCI, - Uint32 currentGCI, - Uint32 nodeGrp, - GrepError::Code err) -{ - RepClearPSGciBufferRef * ref = - (RepClearPSGciBufferRef *)signal->getDataPtrSend(); - ref->firstGCI = firstGCI; - ref->lastGCI = lastGCI; - ref->currentGCI = currentGCI; - ref->nodeGrp = nodeGrp; - ref->err = err; - signal->set(0, SSREPBLOCKNO, GSN_REP_CLEAR_PS_GCIBUFFER_REF, - RepClearPSGciBufferRef::SignalLength); - sendSignalRep(signal); -} - -void -TransPS::sendREP_GET_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, Uint32 lastGCI, - Uint32 nodeGrp, - GrepError::Code err) -{ - RepGetGciBufferRef * ref = - (RepGetGciBufferRef *)signal->getDataPtrSend(); - ref->firstPSGCI = firstGCI; - ref->lastPSGCI = lastGCI; - ref->firstSSGCI = 0; - ref->lastSSGCI = 0; - ref->nodeGrp = nodeGrp; - ref->err = err; - signal->set(0, SSREPBLOCKNO, GSN_REP_GET_GCIBUFFER_REF, - RepGetGciBufferRef::SignalLength); - sendSignalRep(signal); -} diff --git a/storage/ndb/src/old_files/rep/transfer/TransPS.hpp b/storage/ndb/src/old_files/rep/transfer/TransPS.hpp deleted file mode 100644 index 0464b9e47c03844670fafd1f9c2830b1019164a6..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/TransPS.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TransPS_HPP -#define TransPS_HPP - -#include <NdbTick.h> -#include <NdbMain.h> -#include <NdbOut.hpp> -#include <NdbSleep.h> - -#include <TransporterDefinitions.hpp> -#include <TransporterFacade.hpp> -#include <ClusterMgr.hpp> - -#include <rep/storage/GCIContainerPS.hpp> - -#include <signaldata/RepImpl.hpp> - -#include <rep/SignalQueue.hpp> -#include <rep/ExtSender.hpp> - -#include <rep/rep_version.hpp> - -extern "C" { -static void * signalExecThread_C(void *); -} - -/** - * @class TransPS - * @brief Responsible for REP-REP interface in Primary System role - */ -class TransPS { -public: - /*************************************************************************** - * Constructor / Destructor - ***************************************************************************/ - TransPS(GCIContainerPS * gciContainer); - ~TransPS(); - - void init(TransporterFacade * tf, const char * connectString = NULL); - - /*************************************************************************** - * Public Methods - ***************************************************************************/ - ExtSender * getRepSender() { return m_repSender; }; - void setGrepSender(ExtSender * es) { m_grepSender = es; }; - -private: - /*************************************************************************** - * Private Methods - ***************************************************************************/ - /** - * SignalQueue executor thread - */ - - friend void * signalExecThread_C(void *); - - void signalExecThreadRun(); - - static void execSignal(void* signalSender, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]); - - static void execNodeStatus(void* signalSender, NodeId, - bool alive, bool nfCompleted); - - void sendSignalRep(NdbApiSignal * s); - void sendSignalGrep(NdbApiSignal * s); - - void sendFragmentedSignalRep(NdbApiSignal * s, LinearSectionPtr ptr[3], - Uint32 sections ); - void sendFragmentedSignalGrep(NdbApiSignal * s, LinearSectionPtr ptr[3], - Uint32 sections ); - - /*************************************************************************** - * Signal executors - ***************************************************************************/ - void execREP_CLEAR_PS_GCIBUFFER_REQ(NdbApiSignal*); - void execREP_GET_GCI_REQ(NdbApiSignal*); - void execREP_GET_GCIBUFFER_REQ(NdbApiSignal*); - - /*************************************************************************** - * Ref signal senders - ***************************************************************************/ - void sendREP_GET_GCI_REF(NdbApiSignal* signal, Uint32 nodeGrp, - Uint32 firstPSGCI, Uint32 lastPSGCI, - GrepError::Code err); - - void sendREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, Uint32 lastGCI, - Uint32 currentGCI, Uint32 nodeGrp, - GrepError::Code err); - - void sendREP_GET_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, Uint32 lastGCI, - Uint32 nodeGrp, - GrepError::Code err); - - /*************************************************************************** - * Other Methods - ***************************************************************************/ - void transferPages(Uint32 firstGCI, Uint32 lastGCI, Uint32 id, - Uint32 nodeGrp, NdbApiSignal* signal); - - /************* - * Variables - *************/ - Uint32 m_ownNodeId; ///< NodeId of this node - Uint32 m_ownBlockNo; ///< BlockNo of this "block" - BlockReference m_ownRef; ///< Reference to this - - BlockReference m_extRepRef; ///< Node ref of REP at SS - - ExtSender * m_grepSender; ///< Responsible send to GREP - ExtSender * m_repSender; ///< Responsible send to REP - - struct NdbThread * m_signalExecThread; - class SignalQueue m_signalRecvQueue; - - GCIContainerPS * m_gciContainerPS; ///< Ref to gci container. -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/transfer/TransSS.cpp b/storage/ndb/src/old_files/rep/transfer/TransSS.cpp deleted file mode 100644 index 376c6375bc47bead3f035c7484ba7435634b54e1..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/TransSS.cpp +++ /dev/null @@ -1,653 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "ConfigRetriever.hpp" - -#include <NdbApiSignal.hpp> -#include <AttributeHeader.hpp> - -#include <signaldata/RepImpl.hpp> -#include <signaldata/DictTabInfo.hpp> -#include <signaldata/GetTabInfo.hpp> -#include <signaldata/SumaImpl.hpp> -#include <signaldata/GrepImpl.hpp> - -#include <SimpleProperties.hpp> -#include <rep/rep_version.hpp> - -#include "TransSS.hpp" - -//#define DEBUG_REP_GET_GCI_CONF - -/***************************************************************************** - * Constructor / Destructor / Init - *****************************************************************************/ -TransSS::TransSS(GCIContainer * gciContainer, RepState * repState) -{ - m_repSender = new ExtSender(); - if (!m_repSender) REPABORT("Could not allocate new ExtSender"); - m_gciContainer = gciContainer; - m_repState = repState; -} - -TransSS::~TransSS() -{ - delete m_repSender; -} - -void -TransSS::init(const char * connectString) -{ - abort(); -#ifdef NOT_FUNCTIONAL - m_signalExecThread = NdbThread_Create(signalExecThread_C, - (void **)this, - 32768, - "TransSS_Service", - NDB_THREAD_PRIO_LOW); - ConfigRetriever configRetriever; - configRetriever.setConnectString(connectString); - - Properties* config = configRetriever.getConfig("REP", REP_VERSION_ID); - if (config == 0) { - ndbout << "Configuration error: "; - const char* erString = configRetriever.getErrorString(); - if (erString == 0) { - erString = "No error specified!"; - } - ndbout << erString << endl; - exit(-1); - } - Properties * extConfig; - - /** - * @todo Hardcoded standby system name - */ - if (!config->getCopy("EXTERNAL SYSTEM_External", &extConfig)) { - ndbout << "External System \"External\" not found in configuration. " - << "Check config.ini." << endl; - config->print(); - exit(-1); - } - m_ownNodeId = configRetriever.getOwnNodeId(); - extConfig->put("LocalNodeId", m_ownNodeId); - extConfig->put("LocalNodeType", "REP"); - Uint32 noOfConnections; - extConfig->get("NoOfConnections", &noOfConnections); - /* if (noOfConnections != 1) { - ndbout << "TransSS: There are " << noOfConnections << " connections " - << "defined in configuration" - << endl - << " There should be exactly one!" << endl; - exit(-1); - }*/ - - /****************************** - * Set node id of external REP - ******************************/ - const Properties * connection; - const char * extSystem; - - Uint32 extRepNodeId, tmpOwnNodeId; - - for(Uint32 i=0; i < noOfConnections; i++) { - extConfig->get("Connection", i, &connection); - if(connection == 0) REPABORT("Connection not found"); - - if(connection->get("System1", &extSystem)) { - connection->get("NodeId1", &extRepNodeId); - connection->get("NodeId2", &tmpOwnNodeId); - } else { - connection->get("System2", &extSystem); - connection->get("NodeId1", &tmpOwnNodeId); - connection->get("NodeId2", &extRepNodeId); - } - if(m_ownNodeId == tmpOwnNodeId) - break; - } - - if(extRepNodeId==0) REPABORT("External replication server not found"); - if(extSystem==0) REPABORT("External system not found"); - - m_transporterFacade = new TransporterFacade(); - if (!m_transporterFacade->init(extConfig)) - { - ndbout << "TransSS: Failed to initialize transporter facade" << endl; - exit(-1); - } - - m_ownBlockNo = m_transporterFacade->open(this, execSignal, execNodeStatus); - assert(m_ownBlockNo > 0); - m_ownRef = numberToRef(m_ownBlockNo, m_ownNodeId); - assert(m_ownNodeId == m_transporterFacade->ownId()); - - ndbout_c("Phase 2 (TransSS): Connection %d to external REP node %d opened", - m_ownBlockNo, extRepNodeId); - - m_repSender->setNodeId(extRepNodeId); - m_repSender->setOwnRef(m_ownRef); - m_repSender->setTransporterFacade(m_transporterFacade); -#endif -} - -/***************************************************************************** - * Signal Queue Executor - *****************************************************************************/ - -class SigMatch -{ -public: - int gsn; - void (TransSS::* function)(NdbApiSignal *signal); - - SigMatch() { gsn = 0; function = NULL; }; - - SigMatch(int _gsn, void (TransSS::* _function)(NdbApiSignal *signal)) { - gsn = _gsn; - function = _function; - }; - - bool check(NdbApiSignal *signal) { - if(signal->readSignalNumber() == gsn) - return true; - return false; - }; -}; - -extern "C" -void * -signalExecThread_C(void *r) -{ - TransSS *transss = (TransSS*)r; - - transss->signalExecThreadRun(); - NdbThread_Exit(0); - /* NOTREACHED */ - return 0; -} - -void -TransSS::signalExecThreadRun() -{ - Vector<SigMatch> sl; - /** - * Signals to be forwarded to TransPS - */ - sl.push_back(SigMatch(GSN_REP_GET_GCI_REQ, - &TransSS::sendSignalRep)); - sl.push_back(SigMatch(GSN_REP_GET_GCIBUFFER_REQ, - &TransSS::sendSignalRep)); - /** - * Signals to be executed - */ - sl.push_back(SigMatch(GSN_REP_GCIBUFFER_ACC_REP, - &TransSS::execREP_GCIBUFFER_ACC_REP)); - sl.push_back(SigMatch(GSN_REP_DISCONNECT_REP, - &TransSS::execREP_DISCONNECT_REP)); - sl.push_back(SigMatch(GSN_GREP_SUB_REMOVE_CONF, - &TransSS::execGREP_SUB_REMOVE_CONF)); - sl.push_back(SigMatch(GSN_REP_GET_GCIBUFFER_CONF, - &TransSS::execREP_GET_GCIBUFFER_CONF)); - - sl.push_back(SigMatch(GSN_REP_CLEAR_PS_GCIBUFFER_CONF, - &TransSS::execREP_CLEAR_PS_GCIBUFFER_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_SYNC_CONF, - &TransSS::execGREP_SUB_SYNC_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_SYNC_REF, - &TransSS::execGREP_SUB_SYNC_REF)); - sl.push_back(SigMatch(GSN_REP_GET_GCIBUFFER_REF, - &TransSS::execREP_GET_GCIBUFFER_REF)); - - /** - * Signals to be executed : Subscriptions - */ - sl.push_back(SigMatch(GSN_GREP_CREATE_SUBID_CONF, - &TransSS::execGREP_CREATE_SUBID_CONF)); - sl.push_back(SigMatch(GSN_GREP_CREATE_SUBID_REF, - &TransSS::execGREP_CREATE_SUBID_REF)); - sl.push_back(SigMatch(GSN_GREP_SUB_CREATE_CONF, - &TransSS::execGREP_SUB_CREATE_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_CREATE_REF, - &TransSS::execGREP_SUB_CREATE_REF)); - sl.push_back(SigMatch(GSN_GREP_SUB_START_CONF, - &TransSS::execGREP_SUB_START_CONF)); - sl.push_back(SigMatch(GSN_GREP_SUB_START_REF, - &TransSS::execGREP_SUB_START_REF)); - - /** - * Signals to be executed and forwarded - */ - sl.push_back(SigMatch(GSN_REP_GET_GCI_CONF, - &TransSS::execREP_GET_GCI_CONF)); - - /** - * Signals to be forwarded - */ - sl.push_back(SigMatch(GSN_GREP_SUB_REMOVE_REF, - &TransSS::execGREP_SUB_REMOVE_REF)); - sl.push_back(SigMatch(GSN_REP_CLEAR_PS_GCIBUFFER_REF, - &TransSS::execREP_CLEAR_PS_GCIBUFFER_REF)); - sl.push_back(SigMatch(GSN_REP_GET_GCI_REF, - &TransSS::execREP_GET_GCI_REF)); - - while(1) { - SigMatch *handler = NULL; - NdbApiSignal *signal = NULL; - if(m_signalRecvQueue.waitFor(sl, handler, signal, DEFAULT_TIMEOUT)) - { -#if 0 - ndbout_c("TransSS: Removed signal from queue (GSN: %d, QSize: %d)", - signal->readSignalNumber(), m_signalRecvQueue.size()); -#endif - if(handler->function != 0) - { - (this->*handler->function)(signal); - delete signal; - signal = 0; - } else { - REPABORT("Illegal handler for signal"); - } - } - } -} - -void -TransSS::sendSignalRep(NdbApiSignal * s) -{ - m_repSender->sendSignal(s); -} - -void -TransSS::execNodeStatus(void* obj, Uint16 nodeId, - bool alive, bool nfCompleted) -{ - TransSS * thisObj = (TransSS*)obj; - - if (alive) { - thisObj->m_repState->eventNodeConnected(nodeId); - - } else if (!nfCompleted) { - thisObj->m_repState->eventNodeDisconnected(nodeId); - - } else if (nfCompleted) { - thisObj->m_repState->eventNodeConnectable(nodeId); - - } else { - REPABORT("Illegal state for execNodeStatus"); - } -} - -void -TransSS::execSignal(void* executorObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]) -{ - TransSS * executor = (TransSS *) executorObj; - - const Uint32 gsn = signal->readSignalNumber(); - const Uint32 len = signal->getLength(); - - NdbApiSignal * s = new NdbApiSignal(executor->m_ownRef); - switch (gsn) { - case GSN_REP_GET_GCI_REQ: - case GSN_REP_GET_GCIBUFFER_REQ: - case GSN_REP_GET_GCIBUFFER_CONF: - case GSN_GREP_SUB_REMOVE_CONF: - case GSN_REP_DISCONNECT_REP: - case GSN_REP_GCIBUFFER_ACC_REP: - s->set(0, PSREPBLOCKNO, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - case GSN_GREP_CREATE_SUBID_CONF: - case GSN_GREP_SUB_CREATE_CONF: - case GSN_GREP_SUB_START_CONF: - case GSN_GREP_SUB_SYNC_CONF: - case GSN_REP_GET_GCI_CONF: - case GSN_REP_CLEAR_PS_GCIBUFFER_CONF: - case GSN_GREP_CREATE_SUBID_REF: - case GSN_GREP_SUB_CREATE_REF: - case GSN_GREP_SUB_START_REF: - case GSN_GREP_SUB_SYNC_REF: - case GSN_GREP_SUB_REMOVE_REF: - case GSN_REP_GET_GCI_REF: - case GSN_REP_GET_GCIBUFFER_REF: - case GSN_REP_CLEAR_PS_GCIBUFFER_REF: - s->set(0, GREP, gsn, len); - memcpy(s->getDataPtrSend(), signal->getDataPtr(), 4 * len); - executor->m_signalRecvQueue.receive(s); - break; - case GSN_REP_DATA_PAGE: - executor->execREP_DATA_PAGE(signal, ptr); - delete s; s = 0; - break; - default: - REPABORT1("Illegal signal received in execSignal %d", gsn); - } - -#if 0 - ndbout_c("TransSS: Inserted signal into queue (GSN: %d, Len: %d)", - signal->readSignalNumber(), len); -#endif -} - -/***************************************************************************** - * Signal Executors - *****************************************************************************/ - -void -TransSS::execREP_DATA_PAGE(NdbApiSignal * signal, LinearSectionPtr ptr[3]) -{ - RepDataPage * const page = (RepDataPage*)signal->getDataPtr(); - m_gciContainer->insertPage(page->gci, page->nodeGrp, - (char*)(ptr[0].p), 4 * ptr[0].sz); -} - -/** - * Recd from TransPS - */ -void -TransSS::execREP_GCIBUFFER_ACC_REP(NdbApiSignal * signal) -{ - RepGciBufferAccRep * const rep = - (RepGciBufferAccRep * )signal->getDataPtr(); - - Uint32 gci = rep->gci; - Uint32 nodeGrp = rep->nodeGrp; - Uint32 totalSize = rep->totalSentBytes; - GCIBuffer * buffer = m_gciContainer->getGCIBuffer(gci, nodeGrp); - Uint32 getReceivedBytes = 0; - if (buffer != 0) - getReceivedBytes = buffer->getReceivedBytes(); - - RLOG(("TransSS: Received %d:[%d] (%d of %d bytes)", - nodeGrp, gci, getReceivedBytes, totalSize)); - - if(getReceivedBytes != totalSize) { - REPABORT("Did not receive correct number of bytes"); - } -} - -/** - * Received from primary system - */ -void -TransSS::execREP_GET_GCIBUFFER_CONF(NdbApiSignal * signal) -{ - RepGetGciBufferConf * conf = (RepGetGciBufferConf*)signal->getDataPtr(); - conf->senderRef = m_ownRef; - Uint32 first = conf->firstSSGCI; - Uint32 last = conf->lastSSGCI; - for(Uint32 i = first; i <= last; i++) { - m_gciContainer->setCompleted(i, conf->nodeGrp); - } - - /** - * Buffers @ PS - */ - Interval ps(conf->firstPSGCI, conf->lastPSGCI); - m_repState->add(Channel::PS, conf->nodeGrp, ps); - - /** - * Buffers @ SS - */ - Uint32 ssfirst, sslast; - m_gciContainer->getAvailableGCIBuffers(conf->nodeGrp, &ssfirst, &sslast); - Interval ss(ssfirst, sslast); - m_repState->clear(Channel::SS, conf->nodeGrp, universeInterval); - m_repState->add(Channel::SS, conf->nodeGrp, ss); - m_repState->clear(Channel::SSReq, conf->nodeGrp, ss); - - RLOG(("Transfered epochs (PS:%d[%d-%d], SS:%d[%d-%d])", - conf->nodeGrp, conf->firstPSGCI, conf->lastPSGCI, - conf->nodeGrp, conf->firstSSGCI, conf->lastSSGCI)); -} - -/** - * Received from primary system - */ -void -TransSS::execGREP_SUB_REMOVE_CONF(NdbApiSignal * signal) -{ - GrepSubRemoveConf * conf = (GrepSubRemoveConf* )signal->getDataPtr(); - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - - /** - * @todo Fix this sending - */ -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubRemoveConf; - signal->theData[2] = subId; - signal->theData[3] = subKey; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 4, JBB); -#endif - - m_repState->eventSubscriptionDeleted(subId, subKey); - RLOG(("Subscription deleted (SubId: %d, SubKey: %d)", subId, subKey)); -} - -void -TransSS::execGREP_SUB_REMOVE_REF(NdbApiSignal * signal) -{ - GrepSubRemoveRef * ref = (GrepSubRemoveRef* )signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - - /** @todo: Add repevent for this */ - RLOG(("TransSS: Warning: Grep sub remove ref (SubId: %d, SubKey: %d)", - subId, subKey)); -} - -/** - * Received from primary system - */ -void -TransSS::execREP_GET_GCI_CONF(NdbApiSignal * signal) -{ - RepGetGciConf * conf = (RepGetGciConf*)signal->getDataPtr(); - Uint32 nodeGrp = conf->nodeGrp; - Interval i(conf->firstPSGCI, conf->lastPSGCI); - m_repState->add(Channel::PS, nodeGrp, i); - - Uint32 first, last; - m_gciContainer->getAvailableGCIBuffers(nodeGrp, &first, &last); - Interval j(first, last); - m_repState->clear(Channel::SS, nodeGrp, universeInterval); - m_repState->add(Channel::SS, nodeGrp, j); - -#ifdef DEBUG_REP_GET_GCI_CONF - RLOG(("TransSS: Requestor info received " - "(PS: %d:[%d-%d], SS: %d:[%d-%d])", - conf->nodeGrp, conf->firstPSGCI, conf->lastPSGCI, - conf->nodeGrp, conf->firstSSGCI, conf->lastSSGCI)); -#endif -} - -void -TransSS::execREP_GET_GCI_REF(NdbApiSignal * signal) -{ - RepGetGciRef * ref = (RepGetGciRef*)signal->getDataPtr(); - Uint32 nodeGrp = ref->nodeGrp; - - RLOG(("WARNING! Requestor info request failed (Nodegrp: %d)", nodeGrp)); -} - -/** - * Recd from GrepPS - * This signal means that a DB node has disconnected. - * @todo Do we need to know that a DB node disconnected? - * - * A node has disconnected (REP or PS DB) - * @todo let the requestor respond to this event - * in a proper way. - */ -void -TransSS::execREP_DISCONNECT_REP(NdbApiSignal * signal) -{ - RepDisconnectRep * const rep = - (RepDisconnectRep*)signal->getDataPtr(); - - //Uint32 nodeId = rep->nodeId; - Uint32 nodeType = rep->nodeType; - - if((RepDisconnectRep::NodeType)nodeType == RepDisconnectRep::REP) - { - m_repState->disable(); - } -} - -/** - * The buffer is now deleted on REP PS. We can now clear it from PS. - */ -void -TransSS::execREP_CLEAR_PS_GCIBUFFER_CONF(NdbApiSignal * signal) -{ - RepClearPSGciBufferConf * const conf = - (RepClearPSGciBufferConf*)signal->getDataPtr(); - Uint32 firstGCI = conf->firstGCI; - Uint32 lastGCI = conf->lastGCI; - Uint32 nodeGrp = conf->nodeGrp; - Interval i(firstGCI, lastGCI); - m_repState->clear(Channel::PS, nodeGrp, i); - m_repState->clear(Channel::DelReq, nodeGrp, i); - - RLOG(("Deleted PS:%d:[%d-%d]", nodeGrp, firstGCI, lastGCI)); -} - -/** - * Something went wrong when deleting buffer on REP PS - */ -void -TransSS::execREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal * signal) -{ - RepClearPSGciBufferRef * const ref = - (RepClearPSGciBufferRef*)signal->getDataPtr(); - Uint32 firstGCI = ref->firstGCI; - Uint32 lastGCI = ref->lastGCI; - Uint32 nodeGrp = ref->nodeGrp; - - RLOG(("WARNING! Could not delete PS:%d:[%d-%d]", nodeGrp, firstGCI, lastGCI)); -} - -/***************************************************************************** - * Signal Executors : SCAN - *****************************************************************************/ - -/** - * Scan has started on PS side... (says PS REP) - */ -void -TransSS::execGREP_SUB_SYNC_CONF(NdbApiSignal* signal) -{ - GrepSubSyncConf * const conf = (GrepSubSyncConf * ) signal->getDataPtr(); - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - Interval epochs(conf->firstGCI, conf->lastGCI); - SubscriptionData::Part part = (SubscriptionData::Part) conf->part; - - switch(part) { - case SubscriptionData::MetaData: - RLOG(("Metascan completed. Subcription %d-%d, Epochs [%d-%d]", - subId, subKey, epochs.first(), epochs.last())); - m_repState->eventMetaScanCompleted(signal, subId, subKey, epochs); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubSyncMetaConf; - signal->theData[2] = subId; - signal->theData[3] = subKey; - signal->theData[4] = gci; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 5, JBB); -#endif - break; - case SubscriptionData::TableData: - RLOG(("Datascan completed. Subcription %d-%d, Epochs [%d-%d]", - subId, subKey, epochs.first(), epochs.last())); - m_repState->eventDataScanCompleted(signal, subId, subKey, epochs); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubSyncDataConf; - signal->theData[2] = subId; - signal->theData[3] = subKey; - signal->theData[4] = gci; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 5, JBB); -#endif - break; - default: - REPABORT3("Wrong subscription part", part, subId, subKey); - } -} - -void -TransSS::execGREP_SUB_SYNC_REF(NdbApiSignal* signal) -{ - GrepSubSyncRef * const ref = (GrepSubSyncRef * ) signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - SubscriptionData::Part part = (SubscriptionData::Part) ref->part; - GrepError::Code error = (GrepError::Code) ref->err; - - switch(part) { - case SubscriptionData::MetaData: - m_repState->eventMetaScanFailed(subId, subKey, error); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubSyncMetaRef; - signal->theData[2] = subId; - signal->theData[3] = subKey; - // signal->theData[4] = gci; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 5, JBB); -#endif - break; - case SubscriptionData::TableData: - m_repState->eventDataScanFailed(subId, subKey, error); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubSyncDataRef; - signal->theData[2] = subId; - signal->theData[3] = subKey; - //signal->theData[4] = m_lastScanGCI; - sendSignal(CMVMI_REF,GSN_EVENT_REP,signal, 5, JBB); -#endif - break; - default: - REPABORT3("Wrong subscription part", part, subId, subKey); - } -} - -/** - * Something went wrong says REP PS - */ -void -TransSS::execREP_GET_GCIBUFFER_REF(NdbApiSignal* signal) -{ - RepGetGciBufferRef * const ref = (RepGetGciBufferRef*)signal->getDataPtr(); - /* - Uint32 senderData = ref->senderData; - Uint32 senderRef = ref->senderRef; - Uint32 firstPSGCI = ref->firstPSGCI; - Uint32 lastPSGCI = ref->lastPSGCI; - Uint32 firstSSGCI = ref->firstSSGCI; - Uint32 lastSSGCI = ref->lastSSGCI; - Uint32 currentGCIBuffer = ref->currentGCIBuffer; - Uint32 nodeGrp = ref->nodeGrp; - */ - GrepError::Code err = ref->err; - - RLOG(("WARNING! Request to get buffer failed. Error %d:%s", - err, GrepError::getErrorDesc(err))); -} diff --git a/storage/ndb/src/old_files/rep/transfer/TransSS.hpp b/storage/ndb/src/old_files/rep/transfer/TransSS.hpp deleted file mode 100644 index 3340038c8d161a1a6791b9e8c5df1a80198d972c..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/TransSS.hpp +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TransSS_HPP -#define TransSS_HPP - -#include <NdbTick.h> -#include <NdbMain.h> -#include <NdbOut.hpp> -#include <NdbSleep.h> - -#include <TransporterDefinitions.hpp> -#include <TransporterFacade.hpp> -#include <ClusterMgr.hpp> -#include <API.hpp> - -#include <rep/storage/GCIContainer.hpp> - -#include <rep/SignalQueue.hpp> -#include <rep/ExtSender.hpp> - -#include <rep/state/RepState.hpp> - -extern "C" { -static void * signalExecThread_C(void *); -} - -/** - * @class TransSS - * @brief Responsible for REP-REP interface in Standby System role - */ -class TransSS { -public: - /*************************************************************************** - * Constructor / Destructor / Init - ***************************************************************************/ - TransSS(GCIContainer * gciContainer, RepState * repState); - ~TransSS(); - void init(const char * connectString = NULL); - - /*************************************************************************** - * Public Methods - ***************************************************************************/ - ExtSender * getRepSender() { return m_repSender; }; - TransporterFacade * getTransporterFacade() { return m_transporterFacade; }; - -private: - /*************************************************************************** - * Private Methods - ***************************************************************************/ - friend void * signalExecThread_C(void *); - void signalExecThreadRun(); ///< SignalQueue executor thread - - static void execSignal(void* executorObj, NdbApiSignal* signal, - class LinearSectionPtr ptr[3]); - static void execNodeStatus(void* executorObj, NodeId, bool alive, - bool nfCompleted); - - void sendSignalRep(NdbApiSignal * s); - - /*************************************************************************** - * Signal receivers - ***************************************************************************/ - void execREP_GET_GCI_REQ(NdbApiSignal*); - void execREP_GET_GCI_CONF(NdbApiSignal*); - void execREP_GET_GCI_REF(NdbApiSignal*); - - void execREP_GET_GCIBUFFER_REQ(NdbApiSignal*); - void execREP_GET_GCIBUFFER_CONF(NdbApiSignal*); - void execREP_GET_GCIBUFFER_REF(NdbApiSignal*); - - void execGREP_SUB_REMOVE_CONF(NdbApiSignal *); - void execGREP_SUB_REMOVE_REF(NdbApiSignal *); - - void execREP_INSERT_GCIBUFFER_REQ(NdbApiSignal*); - void execREP_INSERT_GCIBUFFER_CONF(NdbApiSignal*); - void execREP_INSERT_GCIBUFFER_REF(NdbApiSignal*); - - void execREP_DATA_PAGE(NdbApiSignal* signal, LinearSectionPtr ptr[3]); - - void execREP_GCIBUFFER_ACC_REP(NdbApiSignal*); - void execREP_DISCONNECT_REP(NdbApiSignal*); - - - void execREP_CLEAR_PS_GCIBUFFER_CONF(NdbApiSignal*); - void execREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal*); - - void execGREP_SUB_SYNC_CONF(NdbApiSignal*); - void execGREP_SUB_SYNC_REF(NdbApiSignal*); - - /*************************************************************************** - * Signal receivers : Subscriptions - ***************************************************************************/ - void execGREP_CREATE_SUBID_CONF(NdbApiSignal*); - void execGREP_CREATE_SUBID_REF(NdbApiSignal*); - void execGREP_SUB_CREATE_CONF(NdbApiSignal*); - void execGREP_SUB_CREATE_REF(NdbApiSignal*); - void execGREP_SUB_START_CONF(NdbApiSignal*); - void execGREP_SUB_START_REF(NdbApiSignal*); - - /*************************************************************************** - * Ref signal senders - ***************************************************************************/ - - void sendREP_GET_GCI_REF(NdbApiSignal* signal, Uint32 nodeGrp, - Uint32 firstSSGCI, Uint32 lastSSGCI, - GrepError::Code err); - - void sendREP_GET_GCIBUFFER_REF(NdbApiSignal* signal, - Uint32 firstGCI, Uint32 lastGCI, - Uint32 nodeGrp, GrepError::Code err); - - /*************************************************************************** - * Private Variables - ***************************************************************************/ - RepState * m_repState; - - struct NdbThread * m_signalExecThread; ///< Signal Queue executor - class SignalQueue m_signalRecvQueue; - - ExtSender * m_repSender; ///< Obj responsible send to REP - - Uint32 m_ownNodeId; ///< NodeId of this node - Uint32 m_ownBlockNo; ///< BlockNo of this "block" - BlockReference m_ownRef; ///< Reference to this - - GCIContainer * m_gciContainer; ///< Ref to gci container. - - TransporterFacade * m_transporterFacade; -}; - -#endif diff --git a/storage/ndb/src/old_files/rep/transfer/TransSSSubscriptions.cpp b/storage/ndb/src/old_files/rep/transfer/TransSSSubscriptions.cpp deleted file mode 100644 index 582ba8040a68c1bb9908be0b5ed802b2738604fe..0000000000000000000000000000000000000000 --- a/storage/ndb/src/old_files/rep/transfer/TransSSSubscriptions.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include "TransSS.hpp" - -#include <signaldata/SumaImpl.hpp> -#include <GrepError.hpp> - -/***************************************************************************** - * CREATE SUBSCRIPTION ID - *****************************************************************************/ - -void -TransSS::execGREP_CREATE_SUBID_CONF(NdbApiSignal* signal) -{ - CreateSubscriptionIdConf const * conf = - (CreateSubscriptionIdConf *)signal->getDataPtr(); - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - - /** @todo Fix this */ -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_CreateSubIdConf; - signal->theData[2] = subId; - signal->theData[3] = subKey; - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4 ,JBB); -#endif - m_repState->eventSubscriptionIdCreated(subId, subKey); -} - -void -TransSS::execGREP_CREATE_SUBID_REF(NdbApiSignal* signal) -{ - CreateSubscriptionIdRef const * ref = - (CreateSubscriptionIdRef *)signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - GrepError::Code err = (GrepError::Code) ref->err; - -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_CreateSubIdRef; - signal->theData[2] = subId; - signal->theData[3] = subKey; - signal->theData[4] = err; - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 5 ,JBB); -#endif - m_repState->eventSubscriptionIdCreateFailed(subId, subKey, err); -} - -/***************************************************************************** - * CREATE SUBSCRIPTION - *****************************************************************************/ - -void -TransSS::execGREP_SUB_CREATE_CONF(NdbApiSignal* signal) -{ - GrepSubCreateConf * const conf = (GrepSubCreateConf *)signal->getDataPtr(); - Uint32 noOfNodeGroups = conf->noOfNodeGroups; - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - - m_repState->setNoOfNodeGroups(noOfNodeGroups); - -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubCreateConf; - signal->theData[2] = subId; - signal->theData[3] = subKey; - signal->theData[4] = noOfNodeGroups; - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 5, JBB); -#endif - - m_repState->eventSubscriptionCreated(subId, subKey); -} - -void -TransSS::execGREP_SUB_CREATE_REF(NdbApiSignal* signal) -{ - GrepSubCreateRef * const ref = (GrepSubCreateRef *)signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - GrepError::Code err = (GrepError::Code)ref->err; -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubCreateRef; - signal->theData[2] = subId; - signal->theData[3] = subKey; - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); -#endif - - m_repState->eventSubscriptionCreateFailed(subId, subKey, err); -} - -/***************************************************************************** - * START SUBSCRIPTION - *****************************************************************************/ - -void -TransSS::execGREP_SUB_START_CONF(NdbApiSignal* signal) -{ - GrepSubStartConf * const conf = (GrepSubStartConf *)signal->getDataPtr(); - Uint32 subId = conf->subscriptionId; - Uint32 subKey = conf->subscriptionKey; - SubscriptionData::Part part = (SubscriptionData::Part) conf->part; - - switch(part) { - case SubscriptionData::MetaData: - RLOG(("Metalog started. Subscription %d-%d", subId, subKey)); - m_repState->eventMetaLogStarted(signal, subId, subKey); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubStartMetaConf; - signal->theData[2] = m_requestor.getSubId(); - signal->theData[3] = m_requestor.getSubKey(); - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); -#endif - break; - case SubscriptionData::TableData: - RLOG(("Datalog started. Subscription %d-%d", subId, subKey)); - m_repState->eventDataLogStarted(signal, subId, subKey); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionInfo; - signal->theData[1] = GrepEvent::GrepSS_SubStartDataConf; - signal->theData[2] = m_requestor.getSubId(); - signal->theData[3] = m_requestor.getSubKey(); - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); -#endif - break; - default: - REPABORT("Illegal type of subscription"); - } -} - -void -TransSS::execGREP_SUB_START_REF(NdbApiSignal* signal) -{ - GrepSubStartRef * const ref = (GrepSubStartRef *)signal->getDataPtr(); - Uint32 subId = ref->subscriptionId; - Uint32 subKey = ref->subscriptionKey; - GrepError::Code err = (GrepError::Code)ref->err; - SubscriptionData::Part part = (SubscriptionData::Part) ref->part; - - switch(part) { - case SubscriptionData::MetaData: - m_repState->eventMetaLogStartFailed(subId, subKey, err); -#if 1 - ndbout_c("Requestor: Subscription FAILED to start on Meta Data"); - ndbout_c("Error code : %d. Error message: %s", - err, GrepError::getErrorDesc(err)); -#endif -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubStartMetaRef; - signal->theData[2] = subId; //@todo. manage subscriptions. - signal->theData[3] = subKey; //@todo. manage subscriptions. - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); -#endif - break; - case SubscriptionData::TableData: - m_repState->eventDataLogStartFailed(subId, subKey, err); -#if 0 - signal->theData[0] = EventReport::GrepSubscriptionAlert; - signal->theData[1] = GrepEvent::GrepSS_SubStartDataRef; - signal->theData[2] = subId; //@todo. manage subscriptions. - signal->theData[3] = subKey; //@todo. manage subscriptions. - sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB); -#endif -#if 1 - ndbout_c("Requestor: Subscription FAILED to start on Table Data"); -#endif - ndbout_c("Error code : %d. Error message: %s", - err, GrepError::getErrorDesc(err)); - - break; - default: - REPABORT("Illegal type of subscription"); - } -} diff --git a/storage/ndb/test/ndbapi/old_dirs/acid/Makefile b/storage/ndb/test/ndbapi/old_dirs/acid/Makefile deleted file mode 100644 index 33dc49fcdeaadaf32e821dfea86bddaeefa893d9..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/acid/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := acid - -# Source files of non-templated classes (.C files) -SOURCES = acid.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/acid2/Makefile b/storage/ndb/test/ndbapi/old_dirs/acid2/Makefile deleted file mode 100644 index 69c9d409b9e7fe0a493639d5b20654f5ab113fdf..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/acid2/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := acid2 - -# Source files of non-templated classes (.C files) -SOURCES = acid2.cpp TraceNdbApi.cpp VerifyNdbApi.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/acid2/TraceNdbApi.hpp b/storage/ndb/test/ndbapi/old_dirs/acid2/TraceNdbApi.hpp deleted file mode 100644 index 2bd4eab6b70c30a57e53f86ca3882b458defae1c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/acid2/TraceNdbApi.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef TraceNdbApi_hpp -#define TraceNdbApi_hpp - - -class CTraceNdbSchemaOp : public NdbSchemaOp -{ -public: - int createTable(const char* aTableName); - int createAttribute(const char* aAttrName, KeyType aTupleyKey); -}; - - - -class CTraceNdbSchemaCon : public NdbSchemaCon -{ -public: - CTraceNdbSchemaOp* getNdbSchemaOp(); - int execute(); -}; - - - -class CTraceNdbRecAttr : public NdbRecAttr -{ -public: - Uint32 u_32_value(); -}; - - -class CTraceNdbOperation : public NdbOperation -{ -public: - int insertTuple(); - int updateTuple(); - int interpretedUpdateTuple(); - int readTuple(); - int readTupleExclusive(); - int deleteTuple(); - int equal(const char* anAttrName, Uint32 aValue); - int setValue(const char* anAttrName, Uint32 aValue); - int incValue(const char* anAttrName, Uint32 aValue); - CTraceNdbRecAttr* getValue(const char* anAttrName); - -}; - - -class CTraceNdbIndexOperation : public NdbIndexOperation -{ -public: - int insertTuple(); - int updateTuple(); - int interpretedUpdateTuple(); - int readTuple(); - int readTupleExclusive(); - int deleteTuple(); - int equal(const char* anAttrName, Uint32 aValue); - int setValue(const char* anAttrName, Uint32 aValue); - int incValue(const char* anAttrName, Uint32 aValue); - CTraceNdbRecAttr* getValue(const char* anAttrName); -}; - - - -class CTraceNdbConnection : public NdbConnection -{ -public: - CTraceNdbOperation* getNdbOperation(const char* aTableName); - CTraceNdbIndexOperation* getNdbIndexOperation(const char* anIndexName, const char* aTableName); - - int execute(ExecType aTypeOfExec); - - int execute_ok(ExecType aTypeOfExec) - { - return execute(aTypeOfExec); - }; - - const NdbError & getNdbError(void) const; -}; - - - -class CTraceNdbDictionary : public NdbDictionary -{ -public: - class CTraceTable : public Table - { - }; - - class CTraceIndex : public Index - { - }; - - class CTraceColumn : public Column - { - }; - - int createTable(const CTraceTable &); - int createIndex(const CTraceIndex &); -}; - - - -class CTraceNdb : public Ndb -{ -public: - CTraceNdb(const char* aDataBase); - CTraceNdbSchemaCon* startSchemaTransaction(); - void closeSchemaTransaction(CTraceNdbSchemaCon* aSchemaCon); - CTraceNdbConnection* startTransaction(); - void closeTransaction(CTraceNdbConnection* aConnection); -}; - - - -#endif // TraceNdbApi_hpp diff --git a/storage/ndb/test/ndbapi/old_dirs/acid2/VerifyNdbApi.hpp b/storage/ndb/test/ndbapi/old_dirs/acid2/VerifyNdbApi.hpp deleted file mode 100644 index 4a5b8cc81114d73bce8ae5c6e095f47279d1ad23..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/acid2/VerifyNdbApi.hpp +++ /dev/null @@ -1,466 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef VerifyNdbApi_hpp -#define VerifyNdbApi_hpp - - -class CVerifyNdbSchemaOp : public NdbSchemaOp -{ -public: - int createTable(const char* aTableName) - { - int i = NdbSchemaOp::createTable(aTableName); - VerifyInt(i, "createTable"); - return i; - }; - - int createAttribute(const char* aAttrName, KeyType aTupleyKey) - { - int i = NdbSchemaOp::createAttribute(aAttrName, aTupleyKey); - VerifyInt(i, "createAttribute"); - return i; - }; - -private: - void VerifyInt(const int i, const char* szMethod) - { - if(i) - { - VerifyIntError(i, szMethod); - } - } - - void VerifyIntError(const int i, const char* szMethod); -}; - - - -class CVerifyNdbSchemaCon : public NdbSchemaCon -{ -public: - CVerifyNdbSchemaOp* getNdbSchemaOp() - { - NdbSchemaOp* p = NdbSchemaCon::getNdbSchemaOp(); - VerifyPtr(p, "getNdbSchemaOp"); - return (CVerifyNdbSchemaOp*)p; - }; - - int execute() - { - int i = NdbSchemaCon::execute(); - VerifyInt(i, "execute"); - return i; - }; - -private: - void VerifyInt(const int i, const char* szMethod) - { - if(i) - { - VerifyIntError(i, szMethod); - } - } - - void VerifyPtr(void* p, const char* szMethod) - { - if(!p) - { - VerifyPtrError(p, szMethod); - } - } - - void VerifyIntError(const int i, const char* szMethod); - void VerifyPtrError(void* p, const char* szMethod); -}; - - - -class CVerifyNdbRecAttr : public NdbRecAttr -{ -public: - Uint32 u_32_value() - { - Uint32 n = NdbRecAttr::u_32_value(); - VerifyValue("u_32_value"); - return n; - }; - -private: - void VerifyValue(const char* szMethod) - { - int iNull = NdbRecAttr::isNULL(); - if(iNull) - { - VerifyValueError(iNull, szMethod); - } - }; - - void VerifyValueError(const int iNull, const char* szMethod); -}; - - -class CVerifyNdbOperation : public NdbOperation -{ -public: - int insertTuple() - { - int i = NdbOperation::insertTuple(); - VerifyInt(i, "insertTuple"); - return i; - }; - - int updateTuple() - { - int i = NdbOperation::updateTuple(); - VerifyInt(i, "updateTuple"); - return i; - }; - - int interpretedUpdateTuple() - { - int i = NdbOperation::interpretedUpdateTuple(); - VerifyInt(i, "interpretedUpdateTuple"); - return i; - } - - int readTuple() - { - int i = NdbOperation::readTuple(); - VerifyInt(i, "readTuple"); - return i; - } - - int readTupleExclusive() - { - int i = NdbOperation::readTupleExclusive(); - VerifyInt(i, "readTupleExclusive"); - return i; - } - - int deleteTuple() - { - int i = NdbOperation::deleteTuple(); - VerifyInt(i, "deleteTuple"); - return i; - } - - int equal(const char* anAttrName, Uint32 aValue) - { - int i = NdbOperation::equal(anAttrName, aValue); - VerifyInt(i, "equal"); - return i; - } - - int setValue(const char* anAttrName, Uint32 aValue) - { - int i = NdbOperation::setValue(anAttrName, aValue); - VerifyInt(i, "setValue"); - return i; - } - - int incValue(const char* anAttrName, Uint32 aValue) - { - int i = NdbOperation::incValue(anAttrName, aValue); - VerifyInt(i, "incValue"); - return i; - } - - CVerifyNdbRecAttr* getValue(const char* anAttrName) - { - NdbRecAttr* p = NdbOperation::getValue(anAttrName); - VerifyPtr(p, "getValue"); - return (CVerifyNdbRecAttr*)p; - } - - -private: - void VerifyInt(const int i, const char* szMethod) - { - if(i) - { - VerifyIntError(i, szMethod); - } - } - - void VerifyPtr(void* p, const char* szMethod) - { - if(!p) - { - VerifyPtrError(p, szMethod); - } - } - - void VerifyIntError(const int i, const char* szMethod); - void VerifyPtrError(void* p, const char* szMethod); -}; - - -class CVerifyNdbIndexOperation : public NdbIndexOperation -{ -public: - int insertTuple() - { - int i = NdbIndexOperation::insertTuple(); - VerifyInt(i, "insertTuple"); - return i; - }; - - int updateTuple() - { - int i = NdbIndexOperation::updateTuple(); - VerifyInt(i, "updateTuple"); - return i; - }; - - int interpretedUpdateTuple() - { - int i = NdbIndexOperation::interpretedUpdateTuple(); - VerifyInt(i, "interpretedUpdateTuple"); - return i; - } - - int readTuple() - { - int i = NdbIndexOperation::readTuple(); - VerifyInt(i, "readTuple"); - return i; - } - - int readTupleExclusive() - { - int i = NdbIndexOperation::readTupleExclusive(); - VerifyInt(i, "readTupleExclusive"); - return i; - } - - int deleteTuple() - { - int i = NdbIndexOperation::deleteTuple(); - VerifyInt(i, "deleteTuple"); - return i; - } - - int equal(const char* anAttrName, Uint32 aValue) - { - int i = NdbIndexOperation::equal(anAttrName, aValue); - VerifyInt(i, "equal"); - return i; - } - - int setValue(const char* anAttrName, Uint32 aValue) - { - int i = NdbIndexOperation::setValue(anAttrName, aValue); - VerifyInt(i, "setValue"); - return i; - } - - int incValue(const char* anAttrName, Uint32 aValue) - { - int i = NdbIndexOperation::incValue(anAttrName, aValue); - VerifyInt(i, "incValue"); - return i; - } - - CVerifyNdbRecAttr* getValue(const char* anAttrName) - { - NdbRecAttr* p = NdbIndexOperation::getValue(anAttrName); - VerifyPtr(p, "getValue"); - return (CVerifyNdbRecAttr*)p; - } - - -private: - void VerifyInt(const int i, const char* szMethod) - { - if(i) - { - VerifyIntError(i, szMethod); - } - } - - void VerifyPtr(void* p, const char* szMethod) - { - if(!p) - { - VerifyPtrError(p, szMethod); - } - } - - void VerifyIntError(const int i, const char* szMethod); - void VerifyPtrError(void* p, const char* szMethod); -}; - - -class CVerifyNdbConnection : public NdbConnection -{ -public: - CVerifyNdbOperation* getNdbOperation(const char* aTableName) - { - NdbOperation* p = NdbConnection::getNdbOperation(aTableName); - VerifyPtr(p, "getNdbOperation"); - return (CVerifyNdbOperation*)p; - } - - CVerifyNdbIndexOperation* getNdbIndexOperation(const char* anIndexName, const char* aTableName) - { - NdbIndexOperation* p = NdbConnection::getNdbIndexOperation(anIndexName, aTableName); - VerifyPtr(p, "getNdbIndexOperation"); - return (CVerifyNdbIndexOperation*)p; - } - - int execute(ExecType aTypeOfExec) - { - int i = NdbConnection::execute(aTypeOfExec); - VerifyInt(i, "execute"); - return i; - } - - int execute_ok(ExecType aTypeOfExec) - { - int iExec = NdbConnection::execute(aTypeOfExec); - NdbError err = NdbConnection::getNdbError(); - int iCode = err.code; - if(iExec - && ((aTypeOfExec==NoCommit && iCode!=0) - || (aTypeOfExec==Commit && iCode!=626 && iCode!=630))) - { - VerifyInt(iExec, "execute"); - } - return iExec; - } - - -private: - void VerifyInt(const int i, const char* szMethod) - { - if(i) - { - VerifyIntError(i, szMethod); - } - } - - void VerifyPtr(void* p, const char* szMethod) - { - if(!p) - { - VerifyPtrError(p, szMethod); - } - } - - void VerifyIntError(const int i, const char* szMethod); - void VerifyPtrError(void* p, const char* szMethod); -}; - - -//class CVerifyTable : public NdbDictionary::Table -//{ -//public: -//}; - - -class CVerifyNdbDictionary : public NdbDictionary -{ -public: - class CVerifyTable : public Table - { - public: - private: - }; - - class CVerifyIndex : public Index - { - public: - private: - }; - - class CVerifyColumn : public Column - { - public: - private: - }; - - int createTable(const CVerifyTable &); - int createIndex(const CVerifyIndex &); - - -private: -}; - - -class CVerifyNdb : public Ndb -{ -public: - CVerifyNdb(const char* aDataBase) - : Ndb(aDataBase) - { - VerifyVoid("Ndb"); - }; - - CVerifyNdbSchemaCon* startSchemaTransaction() - { - NdbSchemaCon* p = Ndb::startSchemaTransaction(); - VerifyPtr(p, "startSchemaTransaction"); - return (CVerifyNdbSchemaCon*)p; - }; - - void closeSchemaTransaction(CVerifyNdbSchemaCon* aSchemaCon) - { - Ndb::closeSchemaTransaction(aSchemaCon); - VerifyVoid("closeSchemaTransaction"); - }; - - CVerifyNdbConnection* startTransaction() - { - NdbConnection* p = Ndb::startTransaction(); - VerifyPtr(p, "startTransaction"); - return (CVerifyNdbConnection*)p; - }; - - void closeTransaction(CVerifyNdbConnection* aConnection) - { - Ndb::closeTransaction(aConnection); - VerifyVoid("closeTransaction"); - }; - - -private: - void VerifyPtr(void* p, const char* szMethod) - { - if(!p) - { - VerifyPtrError(p, szMethod); - } - } - - void VerifyVoid(const char* szMethod) - { - NdbError err = Ndb::getNdbError(); - int iCode = err.code; - if(iCode) - { - VerifyVoidError(iCode, szMethod); - } - } - - void VerifyPtrError(void* p, const char* szMethod); - void VerifyVoidError(const int iCode, const char* szMethod); -}; - - - -#endif // VerifyNdbApi_hpp diff --git a/storage/ndb/test/ndbapi/old_dirs/basicAsynch/Makefile b/storage/ndb/test/ndbapi/old_dirs/basicAsynch/Makefile deleted file mode 100755 index 802c5e5a2bd08e21bac39025822fae78510425c9..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/basicAsynch/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := testBasicAsynch - -SOURCES := testBasicAsynch.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/bulk_copy/Makefile b/storage/ndb/test/ndbapi/old_dirs/bulk_copy/Makefile deleted file mode 100644 index 22c05b138b745ed36c199c79556fed6a9c029657..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/bulk_copy/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := bulk_copy - -SOURCES := bulk_copy.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/create_all_tabs/Makefile b/storage/ndb/test/ndbapi/old_dirs/create_all_tabs/Makefile deleted file mode 100644 index 5830980768288d8e222d4ca325bf338a102969d1..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/create_all_tabs/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := create_all_tabs - -# Source files of non-templated classes (.C files) -SOURCES = create_all_tabs.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/create_tab/Makefile b/storage/ndb/test/ndbapi/old_dirs/create_tab/Makefile deleted file mode 100644 index c2ea0b52b15a942b8ed9d2b8ed468060848ba692..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/create_tab/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := create_tab - -# Source files of non-templated classes (.C files) -SOURCES = create_tab.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/drop_all_tabs/Makefile b/storage/ndb/test/ndbapi/old_dirs/drop_all_tabs/Makefile deleted file mode 100644 index 96db0781417d3b2a26a520eb437d826924b81b82..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/drop_all_tabs/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := drop_all_tabs - -# Source files of non-templated classes (.C files) -SOURCES = drop_all_tabs.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/flexAsynch/Makefile b/storage/ndb/test/ndbapi/old_dirs/flexAsynch/Makefile deleted file mode 100644 index 2c77c8e21df44c5866ad73b709886b4dc35a6f9a..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexAsynch/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flexAsynch - -# Source files of non-templated classes (.C files) -SOURCES = flexAsynch.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/flexBench/Makefile.am b/storage/ndb/test/ndbapi/old_dirs/flexBench/Makefile.am deleted file mode 100644 index d4de4b92b604d7184b8837679811cb59f05ab82d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexBench/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ - -bin_PROGRAMS = flexBench - -flexBench_SOURCES = flexBench.cpp - -include $(top_srcdir)/ndb/config/common.mk.am -include $(top_srcdir)/ndb/config/type_ndbapitest.mk.am - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/storage/ndb/test/ndbapi/old_dirs/flexBench/ndbplot.pl b/storage/ndb/test/ndbapi/old_dirs/flexBench/ndbplot.pl deleted file mode 100755 index b16f6d5897da0a319f782e96199714c596d945e8..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexBench/ndbplot.pl +++ /dev/null @@ -1,305 +0,0 @@ -#! /usr/bin/perl - -use strict; -use Getopt::Long; -use Symbol; -use Socket; - -my $progname = $0; -$progname =~ s!^.*/|\.pl$!!g; -my $defaultport = 27127; -my $defaulttotal = 120; -my $defaultsample = 5; -my $defaultrange = 5000; - -sub printhelp { - print <<END; -$progname -- plot ndb operation counts in X11 window -usage: $progname [options] ---help print this summary and exit ---debug print lots of debug information ---port N port number to listen on, default $defaultport ---total N total time interval shown, default $defaulttotal seconds ---sample N sample interval, default $defaultsample seconds ---range N range (max ops per second), default $defaultrange ---nopct show no percentages in graph titles ---z "..." add X11/gnuplot options, for example: - --z "-bg grey80 -geometry 500x300" --z "-persist" -END - exit(0); -} - -# get options -use vars qw( - $helpflag $debug $serverport $totaltime $sampletime $range $nopct - @zopts -); -$helpflag = 0; -$debug = 0; -$serverport = $defaultport; -$totaltime = $defaulttotal; -$sampletime = $defaultsample; -$range = $defaultrange; -$nopct = 0; -@zopts = (); -GetOptions( - 'help' => \$helpflag, - 'debug' => \$debug, - 'port=i' => \$serverport, - 'total=i' => \$totaltime, - 'sample=i' => \$sampletime, - 'range=i' => \$range, - 'nopct' => \$nopct, - 'z=s' => \@zopts, -) or die "try: $progname -h\n"; -$helpflag && printhelp(); - -# calculate number of data points -my $samplecnt; -$samplecnt = int($totaltime / $sampletime) + 1; -$totaltime = ($samplecnt - 1) * $sampletime; -warn "total time = $totaltime sec, sample time = $sampletime sec\n"; - -# open gnuplot -my $plotfile; -sub openplot { - $plotfile = gensym(); - if (! open($plotfile, "| gnuplot @zopts")) { - die "open plot: $!\n"; - } - my $sav = select($plotfile); - $| = 1; - select($sav); - print $plotfile "clear\n"; -} - -# samples -my @sample; # samples 0..$samplecnt in time order -my $sampleready = 0; # samples 1..$samplecnt are ready (true/false) - -@sample = map({ start => 0 }, 0..$samplecnt); - -sub adddata { - my($node, $type, $value) = @_; - my $now = time; - my $s = $sample[0]; - if ($now - $s->{start} >= $sampletime) { - unshift(@sample, { - start => $now, - total => 0, - }); - $s = $sample[0]; - pop(@sample); # delete oldest - $sampleready = 1; - } - # if no type then this is just a time tick - if ($type) { - $s->{$type} += $value; - $s->{total} += $value; - } -} - -# data file name -my $datadir; -if ($ENV{NDB_BASE}) { - $datadir = "$ENV{NDB_BASE}/var/plot"; -} else { - $datadir = "/var/tmp"; -} -(-d $datadir || mkdir($datadir, 0777)) - or die "mkdir $datadir failed: $!\n"; -my $datafile = "$datadir/plot$$.dat"; -warn "writing plot data to $datafile\n"; - -# refresh the plot -sub plotsample { - my $fh = gensym(); - if (! open($fh, ">$datafile")) { - die "$datafile: $!\n"; - } - # sample 0 is never ready - my $currops = ""; - my $currpct = {}; - for (my $i = @sample; $i >= 1; $i--) { - my $s = $sample[$i]; - if (! $s->{start}) { # initial empty sample - next; - } - printf $fh "%d", -($i - 1) * $sampletime; - printf $fh " %.0f", 1.01 * $s->{"total"} / $sampletime; - for my $k (qw(insert update select delete)) { - printf $fh " %.0f", $s->{$k} / $sampletime; - } - printf $fh "\n"; - if ($i == 1) { - $currops = sprintf("%.0f", $s->{"total"} / $sampletime); - if (! $nopct && $currops > 0) { - $currpct->{"total"} = sprintf("%5s", ""); - for my $k (qw(insert update select delete)) { - $currpct->{$k} = sprintf(" %3.0f%%", - 100.0 * $s->{$k} / $s->{"total"}); - } - } - } - } - close($fh); - print $plotfile <<END; -clear -set title "ops/sec [ $currops ]" -set xrange [@{[ -($totaltime-1) ]}:0] -set yrange [0:$range] -plot \\ - '$datafile' \\ - using 1:3 \\ - title "insert$currpct->{insert}" \\ - with lines lt 2, \\ - '$datafile' \\ - using 1:4 \\ - title "update$currpct->{update}" \\ - with lines lt 3, \\ - '$datafile' \\ - using 1:5 \\ - title "select$currpct->{select}" \\ - with lines lt 4, \\ - '$datafile' \\ - using 1:6 \\ - title "delete$currpct->{delete}" \\ - with lines lt 5, \\ - '$datafile' \\ - using 1:2 \\ - title "total$currpct->{total}" \\ - with lines lt 1 lw 2 -END -} - -# set up server socket -my $sock = gensym(); -if (! socket($sock, PF_INET, SOCK_STREAM, getprotobyname("tcp"))) { - die "socket: $!\n"; -} -if (! setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack("l*", 1))) { - die "setsockopt: $!\n"; -} -if (! bind($sock, pack_sockaddr_in($serverport, INADDR_ANY))) { - die "bind: $!\n"; -} -if (! listen($sock, SOMAXCONN)) { - die "listen: $!\n"; -} - -# bit vectors for select on server socket and clients -my $readin = ''; -vec($readin, fileno($sock), 1) = 1; - -# clients -my @client = (); -my $clientid = 0; -sub addclient { - my($conn) = @_; - my $c = { - conn => $conn, - data => "", - name => "client " . ++$clientid, - }; - push(@client, $c); - vec($readin, fileno($c->{conn}), 1) = 1; - if (1 || $debug) { - warn "added $c->{name}\n"; - } -} -sub deleteclient { - my($c) = @_; - @client = grep($_ ne $c, @client); - vec($readin, fileno($c->{conn}), 1) = 0; - shutdown($c->{conn}, 2); - if (1 || $debug) { - warn "deleted $c->{name}\n"; - } -} -sub readclient { - my($c) = @_; - my $data; - my $n; - eval { - local $SIG{ALRM} = sub { die "timeout\n" }; - alarm(5); - $n = sysread($c->{conn}, $data, 512); - alarm(0); - }; - if ($@) { - chomp($@); - warn "$c->{name}: read: $@\n"; - return undef; - } - if (!defined($n)) { - warn "$c->{name}: read: $!\n"; - return undef; - } - $c->{data} .= $data; - if ($debug) { - warn "$c->{name}: read @{[ length($data) ]} bytes\n"; - } - return $n; -} -sub processclient { - my($c) = @_; - my $i; - while (($i = index($c->{data}, "\n")) >= 0) { - my $line = substr($c->{data}, 0, $i); - $c->{data} = substr($c->{data}, $i+1); - my($node, $type, $value) = split(' ', $line); - if ($node !~ /^\d+$/) { - warn "$c->{name}: $line: bad node id\n"; - next; - } - if ($type !~ /^(insert|update|read|delete|verify|verifydelete)$/) { - warn "$c->{name}: $line: bad type\n"; - next; - } - if ($value !~ /^\d+$/) { - warn "$c->{name}: $line: bad value\n"; - next; - } - if ($type eq "read") { - $type = "select"; - } - adddata($node, $type, $value); - } -} - -# main loop -openplot(); -while (1) { - my $readout = ''; - my $ret = select($readout = $readin, undef, undef, 1.0); - if (vec($readout, fileno($sock), 1)) { - my $conn = gensym(); - if (! accept($conn, $sock)) { - warn "accept failed: $!\n"; - } else { - addclient($conn); - } - } - for my $c (@client) { - if (vec($readout, fileno($c->{conn}), 1)) { - my $n = readclient($c); - if (! defined($n)) { - deleteclient($c); - } else { - processclient($c); - if ($n == 0) { # end of file - deleteclient($c); - } - } - } - } - adddata(); # keep clock ticking - if ($sampleready) { - if ($debug) { - warn "sample ready\n"; - } - plotsample(); - $sampleready = 0; - } -} -# vim: set sw=4: diff --git a/storage/ndb/test/ndbapi/old_dirs/flexHammer/Makefile b/storage/ndb/test/ndbapi/old_dirs/flexHammer/Makefile deleted file mode 100644 index c8e436fb7f5d1fb7c06d00bf1e3d7bf674a569f1..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexHammer/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flexHammer - -SOURCES := flexHammer.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/flexHammer/README b/storage/ndb/test/ndbapi/old_dirs/flexHammer/README deleted file mode 100644 index 556582aab96f8ccc58437acecb8866229b1a2cdf..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexHammer/README +++ /dev/null @@ -1,67 +0,0 @@ - -Executing flexHammer-tests automatically -======================================== - - -It is possible to execute almost al the flexHammer-tests -automatically. The procedure contains three steps: -- increase the number of tabels (flexHammer -c number) -- increase the number of threads (flexHammer -t number) -- increase the number of records (flexHammer -r number) -- increase the number of tabels and threads alternately - -Each of these steps are performed by the scripts test1.sh, -test2.sh, test3.sh and test4.sh. Each test will start Ndb, -execute the test and close Ndb again in order to execute -each test in a 'clean' Ndb-environment. So make sure that -there is no Ndb running when you start the test. - - -1. Setup - -To perform the tests automatically, the following issues -have to be taken care of: - -- be sure that you have a directory bin in your home-directory. - In this directory, you need to have a link 'runndb' to the - ndb executable. You can do this by executing a shell-command like: - ln -s ndb/Emulator/Main/ndb runndb - The script is not yet so far that it performs checks, so if - you forget about this, things will get messy. -- In this directory you need a Ndb.cfg for a server-configuration. - - -2. Command - -I assume you have Ndb and the API compiled or you use the -'released' version. Compile flexHammer as usual with 'make'. -Now you can start the tests by typing 'make test'. The -execution of the test will take a while. - - -3. Results - -The scripts will write their results in the file report.txt. -The scripts will start with a short summary on the test. Then -it will add 1 line documenting each run of flexHammer that is -ececuted. Finally, it will print highest 'score'. The file -report.txt is probably good enough to check in directly as -testprotocol in ndb/test/docs/testprotocols. - - -4. Log files. - -To make it possible to investigate errors, the output from -the flexScan-run where the error occurred is stored in -test1.log, test2.log, test3.log or test4.log respectively. -They are overwritten each time you start 'make test'. - - -HINT - -The number of iterations in each test-script is not directly -limited by the number of attributes or the size of the -attributes but by the number of tables that you are allowed -to create. Probably this will be the error that occurs if -you execute the test. You migh adjust the begin-values and -the step-size in the individual scripts if you want. diff --git a/storage/ndb/test/ndbapi/old_dirs/flexScan/Makefile b/storage/ndb/test/ndbapi/old_dirs/flexScan/Makefile deleted file mode 100644 index 78f9d4810638bc9a70bca919c0011d0e1d3f76d8..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexScan/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flexScan - -SOURCES := flexScan.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/flexScan/README b/storage/ndb/test/ndbapi/old_dirs/flexScan/README deleted file mode 100644 index cddbdea53367ab306283fcc66e25ee31c457492d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexScan/README +++ /dev/null @@ -1,66 +0,0 @@ - -Executing flexScan-tests automatically -====================================== - - -It is possible to execute almost al the flexBench-tests -automatically. The procedure contains three steps: -- increase the number of attributes (flexScan -a number) -- increase the size of attributes (flexScan -s number) -- increase the number of threads (flexScan -t number) - -Each of these steps are performed by the scripts test1.sh -test2.sh and test3.sh. Each test will start Ndb, execute -the test and close Ndb again in order to execute each test -in a 'clean' Ndb-environment. So make sure that there is -no Ndb running when you start the test. - - -1. Setup - -To perform the tests automatically, the following issues -have to be taken care of: - -- be sure that you have a directory bin in your home-directory. - In this directory, you need to have a link 'runndb' to the - ndb executable. You can do this by executing a shell-command like: - ln -s ndb/Emulator/Main/ndb runndb - The script is not yet so far that it performs checks, so if - you forget about this, things will get messy. -- In this directory you need a Ndb.cfg for a server-configuration. - - -2. Command - -I assume you have Ndb and the API compiled or you use the -'released' version. Compile flexScan as usual with 'make'. -Now you can start the tests by typing 'make test'. The -execution of the test will take a while. - - -3. Results - -The scripts will write their results in the file report.txt. -The scripts will start with a short summary on the test. Then -it will add 1 line documenting each run of flexScan that is -ececuted. Finally, it will print highest 'score'. The file -report.txt is probably good enough to check in directly as -testprotocol in ndb/test/docs/testprotocols. - - -4. Log files. - -To make it possible to investigate errors, the output from -the flexScan-run where the error occurred is stored in -test1.log, test2.log or test3.log respectively. They are -overwritten each time you start 'make test'. - - -HINT - -The number of iterations in each test-script is not directly -limited by the number of attributes or the size of the -attributes but by the number of tables that you are allowed -to create. Probably this will be the error that occurs if -you execute the test. You migh adjust the begin-values and -the step-size in the individual scripts if you want. diff --git a/storage/ndb/test/ndbapi/old_dirs/flexTT/Makefile b/storage/ndb/test/ndbapi/old_dirs/flexTT/Makefile deleted file mode 100644 index a63bd803d954dde03dcce1aebe15436e5e60d4ab..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexTT/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flexTT - -# Source files of non-templated classes (.C files) -SOURCES = flexTT.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/flexTimedAsynch/Makefile b/storage/ndb/test/ndbapi/old_dirs/flexTimedAsynch/Makefile deleted file mode 100644 index e9995dbd16f3870c23120e0622a79da159dd9187..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flexTimedAsynch/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flexTimedAsynch - -# Source files of non-templated classes (.C files) -SOURCES = flexTimedAsynch.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/flex_bench_mysql/Makefile b/storage/ndb/test/ndbapi/old_dirs/flex_bench_mysql/Makefile deleted file mode 100644 index d2608526cae323b9e97426e82a1733ca956fcfda..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/flex_bench_mysql/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := flex_bench_mysql - -# Source files of non-templated classes (.C files) -SOURCES = flex_bench_mysql.cpp - -CCFLAGS_LOC += -I$(call fixpath,$(NDB_TOP)/../include) -BIN_TARGET_LIBS_DIRS += $(NDB_TOP)/../libmysql_r/.libs -BIN_TARGET_LIBS += z mysqlclient_r - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/indexTest/Makefile b/storage/ndb/test/ndbapi/old_dirs/indexTest/Makefile deleted file mode 100644 index d842e487ee59f520021c87330b3b198719a7b644..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/indexTest/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := index - -SOURCES := index.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/indexTest2/Makefile b/storage/ndb/test/ndbapi/old_dirs/indexTest2/Makefile deleted file mode 100644 index ad78fd519863f3b692882a53cff249b47ae8c9c3..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/indexTest2/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := index2 - -SOURCES := index2.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/interpreterInTup/Makefile b/storage/ndb/test/ndbapi/old_dirs/interpreterInTup/Makefile deleted file mode 100644 index 074adbf674ab6f4d75c4e01d6f9622ce3956eb94..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/interpreterInTup/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - - -BIN_TARGET := interpreterInTup - -SOURCES := interpreterInTup.cc - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/Makefile deleted file mode 100644 index af472b1589f7f3103c2e33d0d38c0b629cd4af4e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include .defs.mk - -DIRS := src async-src script - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/Makefile deleted file mode 100644 index 744d6171139752c2376ae04d45e3f73fb10fdfa2..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include .defs.mk - -DIRS = \ - user \ - generator - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/generator/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/generator/Makefile deleted file mode 100644 index c1f84a3ef705deee60c0e035b7bee06a8c637b9d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/generator/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -SOURCES = mainAsyncGenerator.cpp asyncGenerator.cpp - -CCFLAGS_LOC := -I../include -I../../include - -BIN_TARGET := DbAsyncGenerator -BIN_TARGET_ARCHIVES := lmc_AsyncUser - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/dbGenerator.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/dbGenerator.h deleted file mode 100644 index 2256498e15181183d66a0843f70177cfccc26523..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/dbGenerator.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBGENERATOR_H -#define DBGENERATOR_H - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include "testData.h" -#include "userInterface.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void asyncGenerator(ThreadData *d, int parallellism, - int millisSendPoll, - int minEventSendPoll, - int forceSendPoll); - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - - -#endif /* DBGENERATOR_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/testData.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/testData.h deleted file mode 100644 index 3db85e7342e3ac7f61c3f49345a1abb73c5e2610..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/testData.h +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TESTDATA_H -#define TESTDATA_H - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ -#include <NdbTick.h> -#include <NdbThread.h> -#include <NDBT_Stats.hpp> -#include <random.h> -#include "testDefinitions.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -#define NUM_TRANSACTION_TYPES 5 -#define SESSION_LIST_LENGTH 1000 - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -typedef struct { - SubscriberNumber subscriberNumber; - ServerId serverId; -} SessionElement; - -typedef struct { - SessionElement list[SESSION_LIST_LENGTH]; - unsigned int readIndex; - unsigned int writeIndex; - unsigned int numberInList; -} SessionList; - -typedef struct { - unsigned int count; - unsigned int branchExecuted; - unsigned int rollbackExecuted; - - /** - * Latency measures - */ - NDB_TICKS startTime; - NDBT_Stats latency; - unsigned int latencyCounter; - - inline void startLatency(){ - if((latencyCounter & 127) == 127) - startTime = NdbTick_CurrentMillisecond(); - } - - inline void stopLatency(){ - if((latencyCounter & 127) == 127){ - const NDB_TICKS tmp = NdbTick_CurrentMillisecond() - startTime; - latency.addObservation(tmp); - } - latencyCounter++; - } -} TransactionDefinition; - -typedef struct { - RandomSequence transactionSequence; - RandomSequence rollbackSequenceT4; - RandomSequence rollbackSequenceT5; - - TransactionDefinition transactions[NUM_TRANSACTION_TYPES]; - - unsigned int totalTransactions; - - double outerLoopTime; - double outerTps; - - SessionList activeSessions; - -} GeneratorStatistics; - -typedef enum{ - Runnable, - Running -} RunState ; - -typedef struct { - SubscriberNumber number; - SubscriberSuffix suffix; - SubscriberName name; - Location location; - ChangedBy changed_by; - ChangedTime changed_time; - ServerId server_id; - ServerBit server_bit; - SessionDetails session_details; - - GroupId group_id; - ActiveSessions sessions; - Permission permission; - - unsigned int do_rollback; - - unsigned int branchExecuted; - unsigned int sessionElement; -} TransactionData ; - -typedef struct { - struct NdbThread* pThread; - - unsigned long randomSeed; - unsigned long changedTime; - - unsigned int warmUpSeconds; - unsigned int testSeconds; - unsigned int coolDownSeconds; - - GeneratorStatistics generator; - - /** - * For async execution - */ - RunState runState; - double startTime; - TransactionData transactionData; - struct Ndb * pNDB; -} ThreadData; - -/*************************************************************** - * P U B L I C F U N C T I O N S * - ***************************************************************/ - -/*************************************************************** - * E X T E R N A L D A T A * - ***************************************************************/ - - - -#endif /* TESTDATA_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/userInterface.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/userInterface.h deleted file mode 100644 index 94bd1e80ab31918dfa14af6a27d34f0db6196ae5..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/include/userInterface.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBINTERFACE_H -#define DBINTERFACE_H - -/***************************************************************/ -/* I N C L U D E D F I L E S */ -/***************************************************************/ - -#include "testDefinitions.h" -#include "testData.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*-----------------------*/ -/* Default Database Name */ -/*-----------------------*/ -#define DEFAULTDB "TestDbClient" - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -typedef struct Ndb Ndb; - -#ifdef __cplusplus -extern "C" { -#endif - extern void showTime(); - extern double userGetTime(void); - extern Ndb *asyncDbConnect(int parallellism); - extern void asyncDbDisconnect(Ndb* pNDB); - - extern void start_T1(Ndb * uh, ThreadData * data, int async); - extern void start_T2(Ndb * uh, ThreadData * data, int async); - extern void start_T3(Ndb * uh, ThreadData * data, int async); - extern void start_T4(Ndb * uh, ThreadData * data, int async); - extern void start_T5(Ndb * uh, ThreadData * data, int async); - - extern void complete_T1(ThreadData * data); - extern void complete_T2(ThreadData * data); - extern void complete_T3(ThreadData * data); - extern void complete_T4(ThreadData * data); - extern void complete_T5(ThreadData * data); - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - -#endif /* DBINTERFACE_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/Makefile deleted file mode 100644 index c0b532a8359806976f0d05149e4e876822bc863c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -ARCHIVE_TARGET := lmc_AsyncUser - -SOURCES := userInterface.C ndb_async2.C - -CCFLAGS_LOC = -I../include -I../../include - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/macros.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/macros.h deleted file mode 100644 index 22b7f5644909db0a8a9214ac4ec4330e36000617..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/macros.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef MACROS_H -#define MACROS_H - -#include <ndb_global.h> -#include <NdbOut.hpp> - -#define ERROR(x) {ndbout_c((x));} -#define ERROR1(x,y) {ndbout_c((x), (y));} -#define ERROR2(x,y,z) {ndbout_c((x), (y), (z));} -#define ERROR3(x,y,z,u) {ndbout_c((x), (y), (z), (u));} -#define ERROR4(x,y,z,u,w) {ndbout_c((x), (y), (z), (u), (w));} - -#define INIT_RANDOM(x) srand48((x)) -#define UI_RANDOM(x) ((unsigned int)(lrand48()%(x))) - -#define ASSERT(cond, message) \ - { if(!(cond)) { ERROR(message); exit(-1); }} - -#ifdef DEBUG_ON -#define DEBUG(x) {ndbout_c((x));} -#define DEBUG1(x,y) {ndbout_c((x), (y));} -#define DEBUG2(x,y,z) {ndbout_c((x), (y), (z));} -#define DEBUG3(x,y,z,u) {ndbout_c((x), (y), (z), (u));} -#define DEBUG4(x,y,z,u,w) {ndbout_c((x), (y), (z), (u), (w));} -#define DEBUG5(x,y,z,u,w, v) {ndbout_c((x), (y), (z), (u), (w), (v));} -#else -#define DEBUG(x) -#define DEBUG1(x,y) -#define DEBUG2(x,y,z) -#define DEBUG3(x,y,z,u) -#define DEBUG4(x,y,z,u,w) -#define DEBUG5(x,y,z,u,w, v) -#endif - -#endif diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/ndb_error.hpp b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/ndb_error.hpp deleted file mode 100644 index 9e6c5e55e731eeecde1cab73ad46126774297e51..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/async-src/user/ndb_error.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NDB_ERROR_H -#define NDB_ERROR_H - -#include <ndb_global.h> -#include <NdbOut.hpp> -#include "userInterface.h" -#include <NdbError.hpp> - -inline -void -CHECK_ALLOWED_ERROR(const char * str, - const ThreadData * td, - const struct NdbError & error){ - - char buf[100]; - snprintf(buf, sizeof(buf), "subscriber = %.*s ", - SUBSCRIBER_NUMBER_LENGTH, - td->transactionData.number); - ndbout << str << " " << error << endl - << buf; - showTime(); - - switch(error.classification) { - case NdbError::TimeoutExpired: - case NdbError::OverloadError: - case NdbError::TemporaryResourceError: - case NdbError::NodeRecoveryError: - break; - default: - if(error.status != NdbError::TemporaryError) - exit(-1); - } -} - -inline -void -CHECK_NULL(void * null, - const char * str, - const ThreadData * td, - const struct NdbError & err){ - if(null == 0){ - CHECK_ALLOWED_ERROR(str, td, err); - exit(-1); - } -} - -#endif diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/bin/.empty b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/bin/.empty deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/ndb_schema.hpp b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/ndb_schema.hpp deleted file mode 100644 index af08bc2eecd261b9bed56065847a15a7ab143e0b..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/ndb_schema.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NDB_SCHEMA_H -#define NDB_SCHEMA_H - -#include "testDefinitions.h" - -#define SUBSCRIBER_TABLE "SUBSCRIBER" -#define SUBSCRIBER_NUMBER "NUMBER" -#define SUBSCRIBER_LOCATION "LOCATION" -#define SUBSCRIBER_NAME "NAME" -#define SUBSCRIBER_GROUP "GROUP_ID" -#define SUBSCRIBER_SESSIONS "SESSIONS" -#define SUBSCRIBER_CHANGED_BY "CHANGED_BY" -#define SUBSCRIBER_CHANGED_TIME "CHANGED_TIME" - -#define SERVER_TABLE "SERVER" -#define SERVER_ID "SERVER_ID" -#define SERVER_SUBSCRIBER_SUFFIX "SUFFIX" -#define SERVER_NAME "NAME" -#define SERVER_READS "NO_OF_READ" -#define SERVER_INSERTS "NO_OF_INSERT" -#define SERVER_DELETES "NO_OF_DELETE" - -#define GROUP_TABLE "GROUP" -#define GROUP_ID "GROUP_ID" -#define GROUP_NAME "GROUP_NAME" -#define GROUP_ALLOW_READ "ALLOW_READ" -#define GROUP_ALLOW_INSERT "ALLOW_INSERT" -#define GROUP_ALLOW_DELETE "ALLOW_DELETE" - -#define SESSION_TABLE "SESSION" -#define SESSION_SERVER "SERVER_ID" -#define SESSION_SUBSCRIBER "NUMBER" -#define SESSION_DATA "DATA" - -/** Numbers */ - -#define IND_SUBSCRIBER_NUMBER (unsigned)0 -#define IND_SUBSCRIBER_NAME (unsigned)1 -#define IND_SUBSCRIBER_GROUP (unsigned)2 -#define IND_SUBSCRIBER_LOCATION (unsigned)3 -#define IND_SUBSCRIBER_SESSIONS (unsigned)4 -#define IND_SUBSCRIBER_CHANGED_BY (unsigned)5 -#define IND_SUBSCRIBER_CHANGED_TIME (unsigned)6 - -#define IND_SERVER_SUBSCRIBER_SUFFIX (unsigned)0 -#define IND_SERVER_ID (unsigned)1 -#define IND_SERVER_NAME (unsigned)2 -#define IND_SERVER_READS (unsigned)3 -#define IND_SERVER_INSERTS (unsigned)4 -#define IND_SERVER_DELETES (unsigned)5 - -#define IND_GROUP_ID (unsigned)0 -#define IND_GROUP_NAME (unsigned)1 -#define IND_GROUP_ALLOW_READ (unsigned)2 -#define IND_GROUP_ALLOW_INSERT (unsigned)3 -#define IND_GROUP_ALLOW_DELETE (unsigned)4 - -#define IND_SESSION_SUBSCRIBER (unsigned)0 -#define IND_SESSION_SERVER (unsigned)1 -#define IND_SESSION_DATA (unsigned)2 - -#endif diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/testDefinitions.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/testDefinitions.h deleted file mode 100644 index 2f4aeb309756e8b50060a62353e2bed0ee2cd9aa..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/include/testDefinitions.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TESTDEFINITIONS_H -#define TESTDEFINITIONS_H - -/***************************************************************/ -/* I N C L U D E D F I L E S */ -/***************************************************************/ - -#include <ndb_types.h> - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -#define OP_PER_TRANS 200 -#define NO_OF_SUBSCRIBERS 500000 -#define NO_OF_GROUPS 100 -#define NO_OF_SERVERS 20 - -#define SUBSCRIBER_NUMBER_LENGTH 12 -#define SUBSCRIBER_NUMBER_SUFFIX_LENGTH 2 - -#define SUBSCRIBER_NAME_LENGTH 32 -#define CHANGED_BY_LENGTH 32 -#define CHANGED_TIME_LENGTH 32 -#define SESSION_DETAILS_LENGTH 2000 -#define SERVER_NAME_LENGTH 32 -#define GROUP_NAME_LENGTH 32 - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -#define PADDING 4 - -typedef char SubscriberNumber[SUBSCRIBER_NUMBER_LENGTH]; -typedef char SubscriberSuffix[SUBSCRIBER_NUMBER_SUFFIX_LENGTH + 2]; -typedef char SubscriberName[SUBSCRIBER_NAME_LENGTH]; -typedef char ServerName[SERVER_NAME_LENGTH]; -typedef char GroupName[GROUP_NAME_LENGTH]; -typedef char ChangedBy[CHANGED_BY_LENGTH]; -typedef char ChangedTime[CHANGED_TIME_LENGTH]; -typedef char SessionDetails[SESSION_DETAILS_LENGTH]; -typedef Uint32 ServerId; -typedef Uint32 ServerBit; -typedef Uint32 GroupId; -typedef Uint32 Location; -typedef Uint32 Permission; - -typedef Uint32 Counter; -typedef Uint32 ActiveSessions; -typedef unsigned int BranchExecuted; -typedef unsigned int DoRollback; - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - - -#endif /* TESTDEFINITIONS_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/lib/.empty b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/lib/.empty deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/Makefile deleted file mode 100644 index 240b595757360bcb1c5ea9fc915ad6ecd807b9e1..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include .defs.mk - -SOURCES.sh := async-lmc-bench.sh async-lmc-bench-l.sh async-lmc-bench-p10.sh async-lmc-bench-l-p10.sh - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l-p10.sh b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l-p10.sh deleted file mode 100755 index 1ce3969f9fbd2dc255a5f1db099a500aea704b2b..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l-p10.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -DbCreate -l -ret=$? -if [ $ret -ne 0 ] -then - echo "DbCreate failed" - exit $ret -fi - -DbAsyncGenerator -time 300 -p 10 $* -ret=$? -exit $ret - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l.sh b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l.sh deleted file mode 100755 index a5de71395c42cc967cfedb27f7a773b400ac48b3..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-l.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -DbCreate -l -ret=$? -if [ $ret -ne 0 ] -then - echo "DbCreate failed" - exit $ret -fi - -DbAsyncGenerator -time 300 $* -ret=$? -exit $ret - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-p10.sh b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-p10.sh deleted file mode 100755 index 92c853cdd862c4636691235f504ca636f6695fbb..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench-p10.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -DbCreate -ret=$? -if [ $ret -ne 0 ] -then - echo "DbCreate failed" - exit $ret -fi - -DbAsyncGenerator -time 300 -p 10 $* -ret=$? -exit $ret - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench.sh b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench.sh deleted file mode 100755 index da8e9d9bf42d793d0f228c4a1e72c172381518a6..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/script/async-lmc-bench.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -DbCreate -ret=$? -if [ $ret -ne 0 ] -then - echo "DbCreate failed" - exit $ret -fi - -DbAsyncGenerator -time 300 $* -ret=$? -exit $ret - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/Makefile deleted file mode 100644 index ae7fac9c49b484c1f4bbc66dec35f938c97dcd94..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include .defs.mk - -DIRS = \ - user \ - populator \ - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/README b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/README deleted file mode 100644 index e81c8ba005131fd1cd67fc9fe06e67c027d07339..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/README +++ /dev/null @@ -1,8 +0,0 @@ - -Note that you have to use gnumake to build - -On ndbs05: -use 'gmake' instead of 'make' - -On hfXXX: -do 'module add make' diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/Makefile deleted file mode 100644 index 143d9ba655e091f4329ef4a063de61dfa439f83c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -SOURCES = mainGenerator.c dbGenerator.c - -CCFLAGS_LOC := -I../include -I../../include - -OBJECTS = \ - mainGenerator.o\ - dbGenerator.o - -BIN_TARGET := DbGenerator -BIN_TARGET_ARCHIVES := lmc_User - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.c deleted file mode 100644 index 7484c7647f5e663e43743f937113c78ed91a236c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.c +++ /dev/null @@ -1,543 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> -#include "dbGenerator.h" - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -static void getRandomSubscriberNumber(SubscriberNumber number); -static void getRandomServerId(ServerId *serverId); -static void getRandomChangedBy(ChangedBy changedBy); -static void getRandomChangedTime(ChangedTime changedTime); - -static void clearTransaction(TransactionDefinition *trans); -static void initGeneratorStatistics(GeneratorStatistics *gen); - -static void doOneTransaction(UserHandle *uh, GeneratorStatistics *gen); -static void doTransaction_T1(UserHandle *uh, GeneratorStatistics *gen); -static void doTransaction_T2(UserHandle *uh, GeneratorStatistics *gen); -static void doTransaction_T3(UserHandle *uh, GeneratorStatistics *gen); -static void doTransaction_T4(UserHandle *uh, GeneratorStatistics *gen); -static void doTransaction_T5(UserHandle *uh, GeneratorStatistics *gen); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -static SequenceValues transactionDefinition[] = { - {25, 1}, - {25, 2}, - {20, 3}, - {15, 4}, - {15, 5}, - {0, 0} -}; - -static SequenceValues rollbackDefinition[] = { - {98, 0}, - {2 , 1}, - {0, 0} -}; - -static int maxsize = 0; - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -static void getRandomSubscriberNumber(SubscriberNumber number) -{ - uint32 tmp; - char sbuf[SUBSCRIBER_NUMBER_LENGTH + 1]; - tmp = myRandom48(NO_OF_SUBSCRIBERS); - sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_LENGTH, tmp); - memcpy(number, sbuf, SUBSCRIBER_NUMBER_LENGTH); -} - -static void getRandomServerId(ServerId *serverId) -{ - *serverId = myRandom48(NO_OF_SERVERS); -} - -static void getRandomChangedBy(ChangedBy changedBy) -{ - memset(changedBy, myRandom48(26)+'A', CHANGED_BY_LENGTH); - changedBy[CHANGED_BY_LENGTH] = 0; -} - -static void getRandomChangedTime(ChangedTime changedTime) -{ - memset(changedTime, myRandom48(26)+'A', CHANGED_TIME_LENGTH); - changedTime[CHANGED_TIME_LENGTH] = 0; -} - -static void clearTransaction(TransactionDefinition *trans) -{ - trans->benchTime = 0.0; - trans->count = 0; - trans->branchExecuted = 0; - trans->rollbackExecuted = 0; -} - -static int listFull(SessionList *list) -{ - return(list->numberInList == SESSION_LIST_LENGTH); -} - -static int listEmpty(SessionList *list) -{ - return(list->numberInList == 0); -} - -static void insertSession(SessionList *list, - SubscriberNumber number, - ServerId serverId) -{ - SessionElement *e; - if( listFull(list) ) return; - - e = &list->list[list->writeIndex]; - - strcpy(e->subscriberNumber, number); - e->serverId = serverId; - - list->writeIndex = (list->writeIndex + 1) % SESSION_LIST_LENGTH; - list->numberInList++; - -if( list->numberInList > maxsize ) -maxsize = list->numberInList; -} - -static SessionElement *getNextSession(SessionList *list) -{ - if( listEmpty(list) ) return(0); - - return(&list->list[list->readIndex]); -} - -static void deleteSession(SessionList *list) -{ - if( listEmpty(list) ) return; - - list->readIndex = (list->readIndex + 1) % SESSION_LIST_LENGTH; - list->numberInList--; -} - -static void initGeneratorStatistics(GeneratorStatistics *gen) -{ - int i; - - if( initSequence(&gen->transactionSequence, - transactionDefinition) != 0 ) { - printf("could not set the transaction types\n"); - exit(0); - } - - if( initSequence(&gen->rollbackSequenceT4, - rollbackDefinition) != 0 ) { - printf("could not set the rollback sequence\n"); - exit(0); - } - - if( initSequence(&gen->rollbackSequenceT5, - rollbackDefinition) != 0 ) { - printf("could not set the rollback sequence\n"); - exit(0); - } - - for(i = 0; i < NUM_TRANSACTION_TYPES; i++ ) - clearTransaction(&gen->transactions[i]); - - gen->totalTransactions = 0; - - gen->activeSessions.numberInList = 0; - gen->activeSessions.readIndex = 0; - gen->activeSessions.writeIndex = 0; -} - - -static void doOneTransaction(UserHandle *uh, GeneratorStatistics *gen) -{ - unsigned int transactionType; - - transactionType = getNextRandom(&gen->transactionSequence); - - switch(transactionType) { - case 1: - doTransaction_T1(uh, gen); - break; - case 2: - doTransaction_T2(uh, gen); - break; - case 3: - doTransaction_T3(uh, gen); - break; - case 4: - doTransaction_T4(uh, gen); - break; - case 5: - doTransaction_T5(uh, gen); - break; - default: - printf("Unknown transaction type: %d\n", transactionType); - } - - gen->totalTransactions++; -} - -static void doTransaction_T1(UserHandle *uh, GeneratorStatistics *gen) -{ - SubscriberNumber number; - Location new_location; - ChangedBy changed_by; - ChangedTime changed_time; - - double start_time; - double end_time; - double transaction_time; - - unsigned int tid = 0; - - /*----------------*/ - /* Init arguments */ - /*----------------*/ - getRandomSubscriberNumber(number); - getRandomChangedBy(changed_by); - getRandomChangedTime(changed_time); - new_location = changed_by[0]; - - /*-----------------*/ - /* Run transaction */ - /*-----------------*/ - start_time = userGetTimeSync(); - userTransaction_T1(uh, - number, - new_location, - changed_by, - changed_time); - end_time = userGetTimeSync(); - - /*-------------------*/ - /* Update Statistics */ - /*-------------------*/ - transaction_time = end_time - start_time; - gen->transactions[tid].benchTime += transaction_time; - gen->transactions[tid].count++; -} - -static void doTransaction_T2(UserHandle *uh, GeneratorStatistics *gen) -{ - SubscriberNumber number; - Location new_location; - ChangedBy changed_by; - ChangedTime changed_time; - SubscriberName subscriberName; - - double start_time; - double end_time; - double transaction_time; - - unsigned int tid = 1; - - /*----------------*/ - /* Init arguments */ - /*----------------*/ - getRandomSubscriberNumber(number); - - /*-----------------*/ - /* Run transaction */ - /*-----------------*/ - start_time = userGetTimeSync(); - userTransaction_T2(uh, - number, - &new_location, - changed_by, - changed_time, - subscriberName); - end_time = userGetTimeSync(); - - /*-------------------*/ - /* Update Statistics */ - /*-------------------*/ - transaction_time = end_time - start_time; - gen->transactions[tid].benchTime += transaction_time; - gen->transactions[tid].count++; -} - -static void doTransaction_T3(UserHandle *uh, GeneratorStatistics *gen) -{ - SubscriberNumber number; - ServerId serverId; - ServerBit serverBit; - SessionDetails sessionDetails; - unsigned int branchExecuted; - SessionElement *se; - - double start_time; - double end_time; - double transaction_time; - - unsigned int tid = 2; - - /*----------------*/ - /* Init arguments */ - /*----------------*/ - se = getNextSession(&gen->activeSessions); - if( se ) { - strcpy(number, se->subscriberNumber); - serverId = se->serverId; - } - else { - getRandomSubscriberNumber(number); - getRandomServerId(&serverId); - } - - serverBit = 1 << serverId; - - /*-----------------*/ - /* Run transaction */ - /*-----------------*/ - start_time = userGetTimeSync(); - userTransaction_T3(uh, - number, - serverId, - serverBit, - sessionDetails, - &branchExecuted); - end_time = userGetTimeSync(); - - /*-------------------*/ - /* Update Statistics */ - /*-------------------*/ - transaction_time = end_time - start_time; - gen->transactions[tid].benchTime += transaction_time; - gen->transactions[tid].count++; - - if(branchExecuted) - gen->transactions[tid].branchExecuted++; -} - -static void doTransaction_T4(UserHandle *uh, GeneratorStatistics *gen) -{ - SubscriberNumber number; - ServerId serverId; - ServerBit serverBit; - SessionDetails sessionDetails; - unsigned int branchExecuted; - unsigned int rollback; - - double start_time; - double end_time; - double transaction_time; - - unsigned int tid = 3; - - /*----------------*/ - /* Init arguments */ - /*----------------*/ - getRandomSubscriberNumber(number); - getRandomServerId(&serverId); - - serverBit = 1 << serverId; - rollback = getNextRandom(&gen->rollbackSequenceT4); - - memset(sessionDetails, myRandom48(26)+'A', SESSION_DETAILS_LENGTH); - sessionDetails[SESSION_DETAILS_LENGTH] = 0; - - /*-----------------*/ - /* Run transaction */ - /*-----------------*/ - start_time = userGetTimeSync(); - userTransaction_T4(uh, - number, - serverId, - serverBit, - sessionDetails, - rollback, - &branchExecuted); - end_time = userGetTimeSync(); - - /*-------------------*/ - /* Update Statistics */ - /*-------------------*/ - transaction_time = end_time - start_time; - gen->transactions[tid].benchTime += transaction_time; - gen->transactions[tid].count++; - - if(branchExecuted) - gen->transactions[tid].branchExecuted++; - if(rollback) - gen->transactions[tid].rollbackExecuted++; - - if( branchExecuted && !rollback ) { - insertSession(&gen->activeSessions, number, serverId); - } -} - -static void doTransaction_T5(UserHandle *uh, GeneratorStatistics *gen) -{ - SubscriberNumber number; - ServerId serverId; - ServerBit serverBit; - unsigned int branchExecuted; - unsigned int rollback; - SessionElement *se; - - double start_time; - double end_time; - double transaction_time; - - unsigned int tid = 4; - - /*----------------*/ - /* Init arguments */ - /*----------------*/ - se = getNextSession(&gen->activeSessions); - if( se ) { - strcpy(number, se->subscriberNumber); - serverId = se->serverId; - } - else { - getRandomSubscriberNumber(number); - getRandomServerId(&serverId); - } - - serverBit = 1 << serverId; - rollback = getNextRandom(&gen->rollbackSequenceT5); - - /*-----------------*/ - /* Run transaction */ - /*-----------------*/ - start_time = userGetTimeSync(); - userTransaction_T5(uh, - number, - serverId, - serverBit, - rollback, - &branchExecuted); - end_time = userGetTimeSync(); - - /*-------------------*/ - /* Update Statistics */ - /*-------------------*/ - transaction_time = end_time - start_time; - gen->transactions[tid].benchTime += transaction_time; - gen->transactions[tid].count++; - - if(branchExecuted) - gen->transactions[tid].branchExecuted++; - if(rollback) - gen->transactions[tid].rollbackExecuted++; - - if( se && !rollback) { - deleteSession(&gen->activeSessions); - } -} - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - - -void dbGenerator(UserHandle *uh, ThreadData *data) -{ - GeneratorStatistics rg_warmUp; - GeneratorStatistics rg_coolDown; - GeneratorStatistics *st; - double periodStop; - double benchTimeStart; - double benchTimeEnd; - int i; - - myRandom48Init(data->randomSeed); - - initGeneratorStatistics(&rg_warmUp); - initGeneratorStatistics(&data->generator); - initGeneratorStatistics(&rg_coolDown); - - /*----------------*/ - /* warm up period */ - /*----------------*/ - periodStop = userGetTimeSync() + (double)data->warmUpSeconds; - while(userGetTimeSync() < periodStop){ - doOneTransaction(uh, &rg_warmUp); - } - - /*-------------------------*/ - /* normal benchmark period */ - /*-------------------------*/ - benchTimeStart = userGetTimeSync(); - - if( data->numTransactions > 0 ) { - for(i = 0; i < data->numTransactions; i++) - doOneTransaction(uh, &data->generator); - } - else { - periodStop = benchTimeStart + (double)data->testSeconds; - while(userGetTimeSync() < periodStop) - doOneTransaction(uh, &data->generator); - } - - benchTimeEnd = userGetTimeSync(); - - /*------------------*/ - /* cool down period */ - /*------------------*/ - periodStop = benchTimeEnd + data->coolDownSeconds; - while(userGetTimeSync() < periodStop){ - doOneTransaction(uh, &rg_coolDown); - } - - /*---------------------------------------------------------*/ - /* add the times for all transaction for inner loop timing */ - /*---------------------------------------------------------*/ - st = &data->generator; - st->innerLoopTime = 0.0; - for(i = 0 ; i < NUM_TRANSACTION_TYPES; i++) { - st->innerLoopTime += st->transactions[i].benchTime; - st->transactions[i].tps = getTps(st->transactions[i].count, - st->transactions[i].benchTime); - } - - st->outerLoopTime = benchTimeEnd - benchTimeStart; - st->outerTps = getTps(st->totalTransactions, st->outerLoopTime); - st->innerTps = getTps(st->totalTransactions, st->innerLoopTime); - - /* printf("maxsize = %d\n",maxsize); */ -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.h deleted file mode 100644 index 824688b6cf99e97176ed491f0f64ba0bf19d0e10..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/dbGenerator.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBGENERATOR_H -#define DBGENERATOR_H - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include "testData.h" -#include "userInterface.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void dbGenerator(UserHandle *uh, ThreadData *data); - - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - - -#endif /* DBGENERATOR_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/mainGenerator.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/mainGenerator.c deleted file mode 100644 index 4a31db0b4e92ab971cafc6407af95537a7ef4c07..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/generator/mainGenerator.c +++ /dev/null @@ -1,323 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include <NdbHost.h> -#include <NdbSleep.h> -#include <NdbThread.h> -#include <NdbMain.h> - -#include "userInterface.h" -#include "dbGenerator.h" - - -static int numProcesses; -static int numTransactions; -static int numSeconds; -static int numWarmSeconds; -static char *testDbName; - -static ThreadData data[100]; - -typedef struct { - pthread_t threadId; - int waitSeconds; - int toExit; -}CheckpointData; - -static void usage(char *prog) -{ - char *progname; - - /*--------------------------------------------*/ - /* Get the name of the program (without path) */ - /*--------------------------------------------*/ - progname = strrchr(prog, '/'); - - if (progname == 0) - progname = prog; - else - ++progname; - - fprintf(stderr, - "Usage: %s [-db <name>] [-proc <num>] [-transactions <num>] [-time <num>]\n" - " -db <name> Specifies the database name\n" - " default = '%s'\n" - " -proc <num> Specifies that <num> is the number of\n" - " concurrent processes. The default is 1.\n" - " -transactions <num> Specifies that <num> transactions will be\n" - " performed. The default is to do a specific time interval\n" - " -time <num> Specifies that the test will run for <num> sec.\n" - " The default is 10 sec\n" - " -warm <num> Specifies the warm-up/cooldown period of <num> sec.\n" - " The default is 10 sec\n", - progname, DEFAULTDB); - exit(1); -} - -static void parse_args(int argc,char **argv) -{ - int i; - - testDbName = DEFAULTDB; - numProcesses = 1; - numTransactions = 0; - numSeconds = 10; - numWarmSeconds = 10; - - i = 1; - while (i < argc){ - if (strcmp("-db",argv[i]) == 0) { - if (i + 1 >= argc) { - usage(argv[0]); - exit(1); - } - testDbName = argv[i + 1]; - i += 2; - } - else if (strcmp("-proc",argv[i]) == 0) { - if (i + 1 >= argc) { - usage(argv[0]); - exit(1); - } - if (sscanf(argv[i+1], "%d", &numProcesses) == -1 || - numProcesses <= 0 || numProcesses > 99) { - fprintf(stderr, "-proc flag requires a positive integer argument [1..99]\n"); - usage(argv[0]); - exit(1); - } - i += 2; - } - else if (strcmp("-transactions",argv[i]) == 0) { - if (i + 1 >= argc) { - usage(argv[0]); - exit(1); - } - if (sscanf(argv[i+1], "%d", &numTransactions) == -1 || - numTransactions < 0) { - fprintf(stderr, "-transactions flag requires a positive integer argument\n"); - usage(argv[0]); - exit(1); - } - i += 2; - } - else if (strcmp("-time",argv[i]) == 0) { - if (i + 1 >= argc) { - usage(argv[0]); - exit(1); - } - if (sscanf(argv[i+1], "%d", &numSeconds) == -1 || - numSeconds < 0) { - fprintf(stderr, "-time flag requires a positive integer argument\n"); - usage(argv[0]); - exit(1); - } - i += 2; - } - else if (strcmp("-warm",argv[i]) == 0) { - if (i + 1 >= argc) { - usage(argv[0]); - exit(1); - } - if (sscanf(argv[i+1], "%d", &numWarmSeconds) == -1 || - numWarmSeconds < 0) { - fprintf(stderr, "-warm flag requires a positive integer argument\n"); - usage(argv[0]); - exit(1); - } - i += 2; - } - else - usage(argv[0]); - } -} - -static void print_transaction(const char *header, - unsigned long totalCount, - TransactionDefinition *trans, - unsigned int printBranch, - unsigned int printRollback) -{ - double f; - - printf(" %s: %d (%.2f%%) Time: %.4f sec TPS = %.0f\n", - header, - trans->count, - (double)trans->count / (double)totalCount * 100.0, - trans->benchTime, - trans->tps); - - if( printBranch ){ - if( trans->count == 0 ) - f = 0.0; - else - f = (double)trans->branchExecuted / (double)trans->count * 100.0; - printf(" Branches Executed: %d (%.2f%%)\n", trans->branchExecuted, f); - } - - if( printRollback ){ - if( trans->count == 0 ) - f = 0.0; - else - f = (double)trans->rollbackExecuted / (double)trans->count * 100.0; - printf(" Rollback Executed: %d (%.2f%%)\n", trans->rollbackExecuted, f); - } -} - -void print_stats_sync(const char *title, - unsigned int length, - unsigned int transactionFlag, - GeneratorStatistics *gen, - int numProc) -{ - int i; - char buf[10]; - char name[100]; - - name[0] = 0; - NdbHost_GetHostName(name); - - printf("\n------ %s ------\n",title); - printf("Length : %d %s\n", - length, - transactionFlag ? "Transactions" : "sec"); - printf("Processor : %s\n", name); - printf("Number of Proc: %d\n",numProc); - printf("\n"); - - if( gen->totalTransactions == 0 ) { - printf(" No Transactions for this test\n"); - } - else { - for(i = 0; i < 5; i++) { - sprintf(buf, "T%d",i+1); - print_transaction(buf, - gen->totalTransactions, - &gen->transactions[i], - i >= 2, - i >= 3 ); - } - - printf("\n"); - printf(" Overall Statistics:\n"); - printf(" Transactions: %d\n", gen->totalTransactions); - printf(" Inner : %.0f TPS\n",gen->innerTps); - printf(" Outer : %.0f TPS\n",gen->outerTps); - printf("\n"); - } -} - -static void *threadRoutine(void *arg) -{ - UserHandle *uh; - ThreadData *data = (ThreadData *)arg; - - uh = userDbConnect(0, testDbName); - NdbSleep_MilliSleep(data->threadId); - dbGenerator(uh,data); - userDbDisconnect(uh); - - pthread_exit(0); - return(0); -} - -NDB_COMMAND(DbGenerator, "DbGenerator", "DbGenerator", "DbGenerator", 16384) -{ - int i; - int j; - GeneratorStatistics stats; - GeneratorStatistics *p; - CheckpointData cd; - - parse_args(argc,argv); - - printf("\nStarting Test with %d process(es) for %d %s\n", - numProcesses, - numTransactions ? numTransactions : numSeconds, - numTransactions ? "Transactions" : "sec"); - printf(" WarmUp/coolDown = %d sec\n", numWarmSeconds); - - /* - cd.waitSeconds = 300; - cd.toExit = 0; - pthread_create(&cd.threadId, 0, checkpointRoutine, &cd); - */ - - for(i = 0; i < numProcesses; i++) { - data[i].warmUpSeconds = numWarmSeconds; - data[i].testSeconds = numSeconds; - data[i].coolDownSeconds = numWarmSeconds; - data[i].numTransactions = numTransactions; - data[i].randomSeed = time(0)+i; - j = pthread_create(&data[i].threadId, 0, threadRoutine, &data[i]); - if(j != 0){ - perror("Failed to create thread"); - } - } - - /*--------------------------------*/ - /* Wait for all processes to exit */ - /*--------------------------------*/ - for(i = 0; i < numProcesses; i++) - pthread_join(data[i].threadId, 0); - - printf("All threads have finished\n"); - - cd.toExit = 1; - - /*-------------------------------------------*/ - /* Clear all structures for total statistics */ - /*-------------------------------------------*/ - stats.totalTransactions = 0; - stats.outerTps = 0.0; - stats.innerTps = 0.0; - - for(i = 0; i < NUM_TRANSACTION_TYPES; i++ ) { - stats.transactions[i].benchTime = 0.0; - stats.transactions[i].count = 0; - stats.transactions[i].tps = 0.0; - stats.transactions[i].branchExecuted = 0; - stats.transactions[i].rollbackExecuted = 0; - } - - /*--------------------------------*/ - /* Add the values for all Threads */ - /*--------------------------------*/ - for(i = 0; i < numProcesses; i++) { - p = &data[i].generator; - - stats.totalTransactions += p->totalTransactions; - stats.outerTps += p->outerTps; - stats.innerTps += p->innerTps; - - for(j = 0; j < NUM_TRANSACTION_TYPES; j++ ) { - stats.transactions[j].benchTime += p->transactions[j].benchTime; - stats.transactions[j].count += p->transactions[j].count; - stats.transactions[j].tps += p->transactions[j].tps; - stats.transactions[j].branchExecuted += p->transactions[j].branchExecuted; - stats.transactions[j].rollbackExecuted += p->transactions[j].rollbackExecuted; - } - } - - print_stats_sync("Test Results", - numTransactions ? numTransactions : numSeconds, - numTransactions ? 1 : 0, - &stats, - numProcesses); - - return(0); -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/testData.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/testData.h deleted file mode 100644 index 863c230502bfa5cf87e65c644c1efb7d58446bad..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/testData.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef TESTDATA_H -#define TESTDATA_H - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include "testDefinitions.h" -#include <random.h> - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -#define NUM_TRANSACTION_TYPES 5 -#define SESSION_LIST_LENGTH 1000 - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -typedef struct { - SubscriberNumber subscriberNumber; - ServerId serverId; -} SessionElement; - -typedef struct { - SessionElement list[SESSION_LIST_LENGTH]; - unsigned int readIndex; - unsigned int writeIndex; - unsigned int numberInList; -} SessionList; - -typedef struct { - double benchTime; - unsigned int count; - double tps; - unsigned int branchExecuted; - unsigned int rollbackExecuted; -}TransactionDefinition; - -typedef struct { - RandomSequence transactionSequence; - RandomSequence rollbackSequenceT4; - RandomSequence rollbackSequenceT5; - - TransactionDefinition transactions[NUM_TRANSACTION_TYPES]; - - unsigned int totalTransactions; - - double innerLoopTime; - double innerTps; - - double outerLoopTime; - double outerTps; - - SessionList activeSessions; -} GeneratorStatistics; - -typedef struct { - unsigned long threadId; - unsigned long randomSeed; - - unsigned int warmUpSeconds; - unsigned int testSeconds; - unsigned int coolDownSeconds; - unsigned int numTransactions; - - GeneratorStatistics generator; -}ThreadData; - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - - -#endif /* TESTDATA_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/userInterface.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/userInterface.h deleted file mode 100644 index b70ded87756f138f8d7ff048dea059fb11c58d98..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/include/userInterface.h +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBINTERFACE_H -#define DBINTERFACE_H - -/***************************************************************/ -/* I N C L U D E D F I L E S */ -/***************************************************************/ - -#include "testDefinitions.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*-----------------------*/ -/* Default Database Name */ -/*-----------------------*/ -#define DEFAULTDB "TestDbClient" - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -typedef struct { - struct Ndb * pNDB; - struct NdbConnection * pCurrTrans; -} UserHandle; - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern double userGetTimeSync(void); - -extern void userCheckpoint(UserHandle *uh); - -extern UserHandle *userDbConnect(uint32 createDb, char *dbName); -extern void userDbDisconnect(UserHandle *uh); - -extern int userDbInsertServer(UserHandle *uh, - ServerId serverId, - SubscriberSuffix suffix, - ServerName name); - -extern int userDbInsertSubscriber(UserHandle *uh, - SubscriberNumber number, - uint32 groupId, - SubscriberName name); - -extern int userDbInsertGroup(UserHandle *uh, - GroupId groupId, - GroupName name, - Permission allowRead, - Permission allowInsert, - Permission allowDelete); - -extern int userDbCommit(UserHandle *uh); -extern int userDbRollback(UserHandle *uh); - -extern void userTransaction_T1(UserHandle *uh, - SubscriberNumber number, - Location new_location, - ChangedBy changed_by, - ChangedTime changed_time); - -extern void userTransaction_T2(UserHandle *uh, - SubscriberNumber number, - Location *new_location, - ChangedBy changed_by, - ChangedTime changed_time, - SubscriberName subscriberName); - -extern void userTransaction_T3(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int *branch_executed); - -extern void userTransaction_T4(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int do_rollback, - unsigned int *branch_executed); - -extern void userTransaction_T5(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - unsigned int do_rollback, - unsigned int *branch_executed); - - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - -#endif /* DBINTERFACE_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.linux b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.linux deleted file mode 100644 index a933669cfe7727f59e19cdeb11eeeddd91757145..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.linux +++ /dev/null @@ -1,6 +0,0 @@ -PROJECT_TOP = /home/lmcritr/ecurlmc/users/lmcritr/dbBenchmark - -CFLAGS = -Wall -Wstrict-prototypes -O2 -I/opt/TimesTen4.1/32/include/ -I../include -LDFLAGS = -L/opt/TimesTen4.1/32/lib -Wl,-rpath,/opt/TimesTen4.1/32/lib -LIBS = -ltten -ldl -LIBSCS = -lttclient -ldl diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.sparc b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.sparc deleted file mode 100644 index 57ab8bf982fcdf0479ed0dcb442d6a9313cf8eed..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/makevars.sparc +++ /dev/null @@ -1,15 +0,0 @@ - -include $(UAS_TOP)/Defs.mk - -LINK.CC = CC -CC := /opt/as/forte6/SUNWspro/bin/cc -export CC - -NDB_LIB = -L$(UAS_TOP)/API -lNDB_API \ - -L$(UAS_OSPACE_LOC)/lib -lospace \ - -lrt - -CFLAGS = -xO3 -I../include -mt -LDFLAGS = $(NDB_LIB) -lpthread -LIBS = -LIBSCS = diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/Makefile deleted file mode 100644 index 2107c948843dc594d78848fb04984f855a3b28ca..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := DbCreate -BIN_TARGET_ARCHIVES := lmc_User - -CCFLAGS_LOC:= -I../include -I../../include - -SOURCES := \ - mainPopulate.c\ - dbPopulate.c - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.c deleted file mode 100644 index 42fbb52f3b2a594eec3c2a29b6c03f4b3c40c716..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.c +++ /dev/null @@ -1,244 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> - -#include "userInterface.h" - -#include "dbPopulate.h" -#include <NdbOut.hpp> -#include <random.h> - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -static void getRandomSubscriberData(int subscriberNo, - SubscriberNumber number, - SubscriberName name); - -static void populate(char *title, - int count, - void (*func)(UserHandle*,int), - UserHandle *uh); - -static void populateServers(UserHandle *uh, int count); -static void populateSubscribers(UserHandle *uh, int count); -static void populateGroups(UserHandle *uh, int count); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -static SequenceValues permissionsDefinition[] = { - {90, 1}, - {10, 0}, - {0, 0} -}; - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -static void getRandomSubscriberData(int subscriberNo, - SubscriberNumber number, - SubscriberName name) -{ - char sbuf[SUBSCRIBER_NUMBER_LENGTH + 1]; - sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_LENGTH, subscriberNo); - memcpy(number, sbuf, SUBSCRIBER_NUMBER_LENGTH); - - memset(name, myRandom48(26)+'A', SUBSCRIBER_NAME_LENGTH); -} - -static void populate(char *title, - int count, - void (*func)(UserHandle*, int), - UserHandle *uh) -{ - ndbout_c("Populating %d '%s' ... ",count, title); - /* fflush(stdout); */ - func(uh,count); - ndbout_c("done"); -} - -static void populateServers(UserHandle *uh, int count) -{ - int i, j; - int len; - char tmp[80]; - int suffix_length = 1; - ServerName serverName; - SubscriberSuffix suffix; - - int commitCount = 0; - - for(i = 0; i < SUBSCRIBER_NUMBER_SUFFIX_LENGTH; i++) - suffix_length *= 10; - - for(i = 0; i < count; i++) { - sprintf(tmp, "-Server %d-", i); - - len = strlen(tmp); - for(j = 0; j < SERVER_NAME_LENGTH; j++){ - serverName[j] = tmp[j % len]; - } - /* serverName[j] = 0; not null-terminated */ - - for(j = 0; j < suffix_length; j++){ - char sbuf[SUBSCRIBER_NUMBER_SUFFIX_LENGTH + 1]; - sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_SUFFIX_LENGTH, j); - memcpy(suffix, sbuf, SUBSCRIBER_NUMBER_SUFFIX_LENGTH); - userDbInsertServer(uh, i, suffix, serverName); - commitCount ++; - if((commitCount % OP_PER_TRANS) == 0) - userDbCommit(uh); - } - } - if((commitCount % OP_PER_TRANS) != 0) - userDbCommit(uh); -} - -static void populateSubscribers(UserHandle *uh, int count) -{ - SubscriberNumber number; - SubscriberName name; - int i, j, k; - int res; - - SequenceValues values[NO_OF_GROUPS+1]; - RandomSequence seq; - - for(i = 0; i < NO_OF_GROUPS; i++) { - values[i].length = 1; - values[i].value = i; - } - - values[i].length = 0; - values[i].value = 0; - - if( initSequence(&seq, values) != 0 ) { - ndbout_c("could not set the sequence of random groups"); - exit(0); - } - -#define RETRIES 25 - - for(i = 0; i < count; i+= OP_PER_TRANS) { - for(j = 0; j<RETRIES; j++){ - for(k = 0; k<OP_PER_TRANS && i+k < count; k++){ - getRandomSubscriberData(i+k, number, name); - userDbInsertSubscriber(uh, number, getNextRandom(&seq), name); - } - res = userDbCommit(uh); - if(res == 0) - break; - if(res != 1){ - ndbout_c("Terminating"); - exit(0); - } - } - if(j == RETRIES){ - ndbout_c("Terminating"); - exit(0); - } - } -} - -static void populateGroups(UserHandle *uh, int count) -{ - int i; - int j; - int len; - RandomSequence seq; - Permission allow[NO_OF_GROUPS]; - ServerBit serverBit; - GroupName groupName; - char tmp[80]; - int commitCount = 0; - - if( initSequence(&seq, permissionsDefinition) != 0 ) { - ndbout_c("could not set the sequence of random permissions"); - exit(0); - } - - for(i = 0; i < NO_OF_GROUPS; i++) - allow[i] = 0; - - for(i = 0; i < NO_OF_SERVERS; i++) { - serverBit = 1 << i; - - for(j = 0; j < NO_OF_GROUPS; j++ ) { - if( getNextRandom(&seq) ) - allow[j] |= serverBit; - } - } - - for(i = 0; i < NO_OF_GROUPS; i++) { - sprintf(tmp, "-Group %d-", i); - - len = strlen(tmp); - - for(j = 0; j < GROUP_NAME_LENGTH; j++) { - groupName[j] = tmp[j % len]; - } - /* groupName[j] = 0; not null-terminated */ - - userDbInsertGroup(uh, - i, - groupName, - allow[i], - allow[i], - allow[i]); - commitCount ++; - if((commitCount % OP_PER_TRANS) == 0) - userDbCommit(uh); - } - if((commitCount % OP_PER_TRANS) != 0) - userDbCommit(uh); -} - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -void dbPopulate(UserHandle *uh) -{ - populate("servers", NO_OF_SERVERS, populateServers, uh); - populate("subscribers", NO_OF_SUBSCRIBERS, populateSubscribers, uh); - populate("groups", NO_OF_GROUPS, populateGroups, uh); -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.h deleted file mode 100644 index 1916720e141e5a4c2badbc24e68c820d5128c103..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/dbPopulate.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef DBPOPULATE_H -#define DBPOPULATE_H - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include "userInterface.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void dbPopulate(UserHandle *uh); - -#ifdef __cplusplus -} -#endif - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - - -#endif /* DBPOPULATE_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/mainPopulate.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/mainPopulate.c deleted file mode 100644 index 838ac8a71962ca74d5345f5ee464d7b24ae79ba2..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/populator/mainPopulate.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -#include "userInterface.h" -#include "dbPopulate.h" -#include <NdbMain.h> -#include <NdbOut.hpp> -#include <random.h> - -#ifdef __cplusplus -extern "C" { -#endif -int useTableLogging; -int useIndexTables; -#ifdef __cplusplus -} -#endif - - -static -void usage(const char *prog) -{ - - ndbout_c( - "Usage: %s [-l]\n" - " -l Use logging and checkpointing on tables\n", - " -i Use index tables\n", - prog); - - exit(1); -} - -NDB_COMMAND(DbCreate, "DbCreate", "DbCreate", "DbCreate", 16384) -{ - int i; - UserHandle *uh; - - useTableLogging = useIndexTables = 0; - - for(i = 1; i<argc; i++){ - if(strcmp(argv[i], "-l") == 0){ - useTableLogging = 1; - } else if(strcmp(argv[i], "-i") == 0){ - useIndexTables = 1; - } else { - usage(argv[0]); - return 0; - } - } - - ndbout_c("Using %s tables and %s key storage", - useTableLogging ? "logging" : "temporary", - useIndexTables ? "index" : "normal"); - - myRandom48Init(0x3e6f); - - uh = userDbConnect(1, 0); - dbPopulate(uh); - userDbDisconnect(uh); - return(0); -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/Makefile deleted file mode 100644 index 9bf229ac84c93254f4b0101ab2f97511a7b47bcd..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -ARCHIVE_TARGET := lmc_User - -SOURCES := userInterface.C - -CCFLAGS_LOC = -I../include -I../../include - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/localDbPrepare.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/localDbPrepare.c deleted file mode 100644 index dd1005070161b363f832a9b6bb5c13dabca2f69f..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/localDbPrepare.c +++ /dev/null @@ -1,648 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> - -#include "userInterface.h" -#include "userHandle.h" - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -/*----------------*/ -/* Transaction T1 */ -/*----------------*/ -static char *update_subscriber_stmnt = "update subscriber set \ -location = ?,changedBy = ?, changedTime = ? where subscriberNumber = ?"; - -/*----------------*/ -/* Transaction T2 */ -/*----------------*/ -static char *read_subscriber_stmnt = "select subscriberName,location,\ -changedBy,changedTime from subscriber where subscriberNumber = ? for update"; - -/*----------------*/ -/* Transaction T3 */ -/*----------------*/ -static char *read_subscriber_session_stmnt = "select activeSessions,groupId,\ -changedBy,changedTime from subscriber where subscriberNumber = ? for update"; - -static char *read_group_allowRead_stmnt = "select allowRead from userGroup \ -where groupId = ?"; -static char *read_group_allowInsert_stmnt = "select allowInsert from userGroup \ -where groupId = ?"; -static char *read_group_allowDelete_stmnt = "select allowDelete from userGroup \ -where groupId = ?"; - -static char *read_session_details_stmnt = "select sessionData from userSession \ -where subscriberNumber = ? and serverId = ? for update"; - -static char *update_noOfRead_stmnt = "update server \ -set noOfRead = noOfRead + 1 where serverId = ? and subscriberSuffix = ?"; -static char *update_noOfInsert_stmnt = "update server \ -set noOfInsert = noOfInsert + 1 where serverId = ? and subscriberSuffix = ?"; -static char *update_noOfDelete_stmnt = "update server \ -set noOfDelete = noOfDelete + 1 where serverId = ? and subscriberSuffix = ?"; - -static char *insert_session_stmnt = "insert into userSession values (?,?,?)"; - -static char *delete_session_stmnt = "delete from userSession \ -where subscriberNumber = ? and serverId = ?"; - -static char *update_subscriber_session_stmnt = "update subscriber set \ -activeSessions = ? where subscriberNumber = ?"; - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -extern void handle_error(SQLHDBC hdbc, - SQLHENV henv, - SQLHSTMT hstmt, - SQLRETURN rc, - char *filename, - int lineno); - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -int localDbPrepare(UserHandle *uh) -{ - SQLRETURN rc; - - if(!uh) return(-1); - - /*-----------------------------*/ - /* Update Subscriber Statement */ - /*-----------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->updateSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate insert group statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->updateSubscriber.stmt,(SQLCHAR *) update_subscriber_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { -/* -handle_error(uh->hdbc, uh->henv, uh->updateSubscriber.stmt, rc, __FILE__, __LINE__); -*/ - printf("Unable to prepare update subscriber statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriber.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->updateSubscriber.values.location,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update subscriber statement param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriber.stmt, - 2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - CHANGED_BY_LENGTH+1,0, - uh->updateSubscriber.values.changedBy,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update subscriber statement param 2\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriber.stmt, - 3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - CHANGED_TIME_LENGTH+1,0, - uh->updateSubscriber.values.changedTime,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update subscriber statement param 3\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriber.stmt, - 4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->updateSubscriber.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update subscriber statement param 3\n"); - return(-1); - } - - /*---------------------------*/ - /* Read Subscriber Statement */ - /*---------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read subscriber statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readSubscriber.stmt,(SQLCHAR *) read_subscriber_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read subscriber statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readSubscriber.stmt, - 1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->readSubscriber.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read subscriber statement param 1\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriber.stmt, 1, - SQL_C_CHAR, - uh->readSubscriber.values.name, SUBSCRIBER_NAME_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read subscriber statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriber.stmt, 2, - SQL_C_DEFAULT, - &uh->readSubscriber.values.location, 1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 2 to read subscriber statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriber.stmt, 3, - SQL_C_CHAR, - uh->readSubscriber.values.changedBy, CHANGED_BY_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 3 to read subscriber statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriber.stmt, 4, - SQL_C_CHAR, - uh->readSubscriber.values.changedTime, CHANGED_TIME_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 4 to read subscriber statement\n"); - return(-1); - } - - /*------------------------------------*/ - /* Read Subscriber Sessions Statement */ - /*------------------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read subscriber session statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readSubscriberSession.stmt,(SQLCHAR *) read_subscriber_session_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read subscriber sessions statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readSubscriberSession.stmt, - 1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->readSubscriberSession.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read subscriber statement param 1\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriberSession.stmt, 1, - SQL_C_DEFAULT, - &uh->readSubscriberSession.values.activeSessions, 0, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read subscriber sessions statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriberSession.stmt, 2, - SQL_C_DEFAULT, - &uh->readSubscriberSession.values.groupId, 0, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 2 to read subscriber sessions statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriberSession.stmt, 3, - SQL_C_CHAR, - uh->readSubscriberSession.values.changedBy, CHANGED_BY_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 3 to read subscriber sessions statement\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSubscriberSession.stmt, 4, - SQL_C_CHAR, - uh->readSubscriberSession.values.changedTime, CHANGED_TIME_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 4 to read subscriber sessions statement\n"); - return(-1); - } - - /*--------------------------------*/ - /* Read Group AllowRead Statement */ - /*--------------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readGroupAllowRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read subscriber session statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readGroupAllowRead.stmt,(SQLCHAR *) read_group_allowRead_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read group allow read statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readGroupAllowRead.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->readGroupAllowRead.values.groupId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read allow read statement param 1\n"); - return(-1); - } - - rc = SQLBindCol(uh->readGroupAllowRead.stmt, 1, - SQL_C_DEFAULT, - &uh->readGroupAllowRead.values.allowRead, 0, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read group allow read statement\n"); - return(-1); - } - - /*----------------------------------*/ - /* Read Group AllowInsert Statement */ - /*----------------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readGroupAllowInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read subscriber session statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readGroupAllowInsert.stmt,(SQLCHAR *) read_group_allowInsert_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read group allow read statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readGroupAllowInsert.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->readGroupAllowInsert.values.groupId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read allow read statement param 1\n"); - return(-1); - } - - rc = SQLBindCol(uh->readGroupAllowInsert.stmt, 1, - SQL_C_DEFAULT, - &uh->readGroupAllowInsert.values.allowInsert, 0, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read group allow read statement\n"); - return(-1); - } - - /*----------------------------------*/ - /* Read Group AllowDelete Statement */ - /*----------------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readGroupAllowDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read subscriber session statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readGroupAllowDelete.stmt,(SQLCHAR *) read_group_allowDelete_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read group allow read statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readGroupAllowDelete.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->readGroupAllowDelete.values.groupId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read allow read statement param 1\n"); - return(-1); - } - - rc = SQLBindCol(uh->readGroupAllowDelete.stmt, 1, - SQL_C_DEFAULT, - &uh->readGroupAllowDelete.values.allowDelete, 0, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read group allow read statement\n"); - return(-1); - } - - /*----------------------*/ - /* read session details */ - /*----------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->readSessionDetails.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate read session details statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->readSessionDetails.stmt,(SQLCHAR *) read_session_details_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read session details statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readSessionDetails.stmt, - 1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->readSessionDetails.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->readSessionDetails.stmt, - 2,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->readSessionDetails.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 2\n"); - return(-1); - } - - rc = SQLBindCol(uh->readSessionDetails.stmt, 1, - SQL_C_CHAR, - uh->readSessionDetails.values.details, SESSION_DETAILS_LENGTH+1, - NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to bind column 1 to read group allow read statement\n"); - return(-1); - } - - /*-------------------*/ - /* Update no of Read */ - /*-------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->updateServerNoOfRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->updateServerNoOfRead.stmt,(SQLCHAR *) update_noOfRead_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update noOfRead statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfRead.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->updateServerNoOfRead.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfRead.stmt, - 2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_SUFFIX_LENGTH+1,0, - uh->updateServerNoOfRead.values.suffix,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - /*----------------*/ - /* Insert Session */ - /*----------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->insertSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->insertSession.stmt,(SQLCHAR *) insert_session_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare insert session statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->insertSession.stmt, - 1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->insertSession.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->insertSession.stmt, - 2,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->insertSession.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - rc = SQLBindParameter(uh->insertSession.stmt, - 3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SESSION_DETAILS_LENGTH+1,0, - uh->insertSession.values.details,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 1\n"); - return(-1); - } - - /*----------------------------*/ - /* Update subscriber sessions */ - /*----------------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->updateSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->updateSubscriberSession.stmt,(SQLCHAR *) update_subscriber_session_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update subscriber session statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriberSession.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->updateSubscriberSession.values.activeSessions,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateSubscriberSession.stmt, - 2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->updateSubscriberSession.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 1\n"); - return(-1); - } - - /*---------------------*/ - /* Update no of Insert */ - /*---------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->updateServerNoOfInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->updateServerNoOfInsert.stmt,(SQLCHAR *) update_noOfInsert_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update noOfRead statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfInsert.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->updateServerNoOfInsert.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfInsert.stmt, - 2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_SUFFIX_LENGTH+1,0, - uh->updateServerNoOfInsert.values.suffix,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - /*----------------*/ - /* Delete Session */ - /*----------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->deleteSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->deleteSession.stmt,(SQLCHAR *) delete_session_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare insert session statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->deleteSession.stmt, - 1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_LENGTH+1,0, - uh->deleteSession.values.number,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read sessions param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->deleteSession.stmt, - 2,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->deleteSession.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - /*---------------------*/ - /* Update no of Delete */ - /*---------------------*/ - rc = SQLAllocStmt(uh->hdbc, &uh->updateServerNoOfDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate update noOfRead statement\n"); - return(-1); - } - - rc = SQLPrepare(uh->updateServerNoOfDelete.stmt,(SQLCHAR *) update_noOfDelete_stmnt, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare update noOfRead statement\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfDelete.stmt, - 1,SQL_PARAM_INPUT,SQL_C_DEFAULT,SQL_INTEGER, - 0,0, - &uh->updateServerNoOfDelete.values.serverId,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 1\n"); - return(-1); - } - - rc = SQLBindParameter(uh->updateServerNoOfDelete.stmt, - 2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, - SUBSCRIBER_NUMBER_SUFFIX_LENGTH+1,0, - uh->updateServerNoOfInsert.values.suffix,0,NULL); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to prepare read noOfRead param 2\n"); - return(-1); - } - - /*-------------------------------*/ - /* Commit all prepare statements */ - /*-------------------------------*/ - rc = SQLTransact(uh->henv, uh->hdbc, SQL_COMMIT); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to commit all prepare insert statement\n"); - return(-1); - } - - return(0); -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/macros.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/macros.h deleted file mode 100644 index 363f247b93fa5019ecf07fc284e2898bde27f43e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/macros.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef MACROS_H -#define MACROS_H - -#include <ndb_global.h> -#include <NdbOut.hpp> - -#define ERROR(x) {ndbout_c((x)); } -#define ERROR1(x,y) {ndbout_c((x), (y)); } -#define ERROR2(x,y,z) {ndbout_c((x), (y), (z)); } -#define ERROR3(x,y,z,u) {ndbout_c((x), (y), (z), (u)); } -#define ERROR4(x,y,z,u,w) {ndbout_c((x), (y), (z), (u), (w)); } - -#define INIT_RANDOM(x) srand48((x)) -#define UI_RANDOM(x) ((unsigned int)(lrand48()%(x))) - -#define ASSERT(cond, message) \ - { if(!(cond)) { ERROR(message); exit(-1); }} - -#ifdef DEBUG_ON -#define DEBUG(x) {ndbout_c((x)); } -#define DEBUG1(x,y) {ndbout_c((x), (y)); } -#define DEBUG2(x,y,z) {ndbout_c((x), (y), (z)); } -#define DEBUG3(x,y,z,u) {ndbout_c((x), (y), (z), (u)); } -#define DEBUG4(x,y,z,u,w) {ndbout_c((x), (y), (z), (u), (w)); } -#define DEBUG5(x,y,z,u,w, v) {ndbout_c((x), (y), (z), (u), (w), (v)); } -#else -#define DEBUG(x) -#define DEBUG1(x,y) -#define DEBUG2(x,y,z) -#define DEBUG3(x,y,z,u) -#define DEBUG4(x,y,z,u,w) -#define DEBUG5(x,y,z,u,w, v) -#endif - -#endif diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/ndb_error.hpp b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/ndb_error.hpp deleted file mode 100644 index b3aaeac822e0e7731223b789a99336fcad7076af..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/ndb_error.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef NDB_ERROR_H -#define NDB_ERROR_H - -#include <NdbOut.hpp> - -#define error_handler(x,y, z) { \ - ndbout << x << " " << y << endl; \ - exit(-1); } - -#define CHECK_NULL(x,y, z) if(x == 0) \ - error_handler(y,(z->getNdbError()), 0) -#define CHECK_MINUS_ONE(x, y, z) if(x == -1) \ - error_handler(y,(z->getNdbError()), 0) - -#endif diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/Makefile b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/Makefile deleted file mode 100644 index 9b1247d44af3ed360fde7c219f8229b941d27212..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../makevars.$(ARCH) - -LIBRARY = ../../lib/libUser.so - -OBJECTS = \ - $(LIBRARY)(localDbPrepare.o)\ - $(LIBRARY)(userInterface.o)\ - $(LIBRARY)(userTransaction.o) - -$(LIBRARY): $(OBJECTS) diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userHandle.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userHandle.h deleted file mode 100644 index 1de468d4dad6d7799cf81a2ad8a6687099711bb9..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userHandle.h +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef USERHANDLE_H -#define USERHANDLE_H - -/***************************************************************/ -/* I N C L U D E D F I L E S */ -/***************************************************************/ - -#include "sql.h" -#include "sqlext.h" -#include "sqltypes.h" - -#include "testDefinitions.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -struct userHandle{ - SQLHENV henv; - SQLHDBC hdbc; - SQLHSTMT stmt; - - /*----------------*/ - /* Transaction T1 */ - /*----------------*/ - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - Location location; - ChangedBy changedBy; - ChangedTime changedTime; - }values; - }updateSubscriber; - - /*----------------*/ - /* Transaction T2 */ - /*----------------*/ - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - SubscriberName name; - Location location; - ChangedBy changedBy; - ChangedTime changedTime; - }values; - }readSubscriber; - - /*----------------*/ - /* Transaction T3 */ - /*----------------*/ - struct { - SQLHSTMT stmt; - struct { - GroupId groupId; - Permission allowRead; - }values; - }readGroupAllowRead; - - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - ServerId serverId; - SessionDetails details; - }values; - }readSessionDetails; - - struct { - SQLHSTMT stmt; - struct { - ServerId serverId; - SubscriberSuffix suffix; - }values; - }updateServerNoOfRead; - - /*----------------*/ - /* Transaction T4 */ - /*----------------*/ - struct { - SQLHSTMT stmt; - struct { - GroupId groupId; - Permission allowInsert; - }values; - }readGroupAllowInsert; - - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - ServerId serverId; - SessionDetails details; - }values; - }insertSession; - - struct { - SQLHSTMT stmt; - struct { - ServerId serverId; - SubscriberSuffix suffix; - }values; - }updateServerNoOfInsert; - - /*----------------*/ - /* Transaction T5 */ - /*----------------*/ - struct { - SQLHSTMT stmt; - struct { - GroupId groupId; - Permission allowDelete; - }values; - }readGroupAllowDelete; - - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - ServerId serverId; - }values; - }deleteSession; - - struct { - SQLHSTMT stmt; - struct { - ServerId serverId; - SubscriberSuffix suffix; - }values; - }updateServerNoOfDelete; - - /*--------------------------*/ - /* Transaction T3 + T4 + T5 */ - /*--------------------------*/ - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - uint32 activeSessions; - GroupId groupId; - ChangedBy changedBy; - ChangedTime changedTime; - }values; - }readSubscriberSession; - - struct { - SQLHSTMT stmt; - struct { - SubscriberNumber number; - uint32 activeSessions; - }values; - }updateSubscriberSession; -}; - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - -#endif /* USERHANDLE_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userInterface.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userInterface.c deleted file mode 100644 index bacf1861ddeb0440c13f91618e1b5d65e07722b7..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userInterface.c +++ /dev/null @@ -1,453 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> - -#include "userInterface.h" -#include "userHandle.h" - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -extern int localDbPrepare(UserHandle *uh); - -static int dbCreate(UserHandle *uh); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -static char *create_subscriber_table = -"CREATE TABLE subscriber(\ -subscriberNumber CHAR(12) NOT NULL primary key,\ -subscriberName CHAR(32) NOT NULL,\ -groupId INT NOT NULL,\ -location INT NOT NULL,\ -activeSessions INT NOT NULL,\ -changedBy CHAR(32) NOT NULL,\ -changedTime CHAR(32) NOT NULL)"; - -static char *create_group_table = -"CREATE TABLE userGroup(\ -groupId INT NOT NULL primary key,\ -groupName CHAR(32) NOT NULL,\ -allowRead INT NOT NULL,\ -allowInsert INT NOT NULL,\ -allowDelete INT NOT NULL)"; - -static char *create_server_table = "CREATE TABLE server(\ -serverId INT NOT NULL,\ -subscriberSuffix CHAR(2) NOT NULL,\ -serverName CHAR(32) NOT NULL,\ -noOfRead INT NOT NULL,\ -noOfInsert INT NOT NULL,\ -noOfDelete INT NOT NULL,\ -PRIMARY KEY(serverId,subscriberSuffix))"; - -static char *create_session_table = -"CREATE TABLE userSession(\ -subscriberNumber CHAR(12) NOT NULL,\ -serverId INT NOT NULL,\ -sessionData CHAR(2000) NOT NULL,\ -PRIMARY KEY(subscriberNumber,serverId))"; - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -/*-----------------------------------*/ -/* Time related Functions */ -/* */ -/* Returns a double value in seconds */ -/*-----------------------------------*/ -double userGetTime(void) -{ - static int initialized = 0; - static struct timeval initTime; - double timeValue; - - if( !initialized ) { - initialized = 1; - gettimeofday(&initTime, 0); - timeValue = 0.0; - } - else { - struct timeval tv; - double s; - double us; - - gettimeofday(&tv, 0); - s = (double)tv.tv_sec - (double)initTime.tv_sec; - us = (double)tv.tv_usec - (double)initTime.tv_usec; - - timeValue = s + (us / 1000000.0); - } - - return(timeValue); -} - - -void handle_error(SQLHDBC hdbc, - SQLHENV henv, - SQLHSTMT hstmt, - SQLRETURN rc, - char *filename, - int lineno) -{ -#define MSG_LNG 512 - - int isError = 0; - SQLRETURN ret = SQL_SUCCESS; - SQLCHAR szSqlState[MSG_LNG]; /* SQL state string */ - SQLCHAR szErrorMsg[MSG_LNG]; /* Error msg text buffer pointer */ - SQLINTEGER pfNativeError; /* Native error code */ - SQLSMALLINT pcbErrorMsg; /* Error msg text Available bytes */ - - if ( rc == SQL_SUCCESS || rc == SQL_NO_DATA_FOUND ) - return; - else if ( rc == SQL_INVALID_HANDLE ) { - printf("ERROR in %s, line %d: invalid handle\n", - filename, lineno); - isError = 1; - } - else if ( rc == SQL_SUCCESS_WITH_INFO ) { - printf("WARNING in %s, line %d\n", - filename, lineno); - isError = 0; - } - else if ( rc == SQL_ERROR ) { - printf("ERROR in %s, line %d\n", - filename, lineno); - isError = 1; - } - - fflush(stdout); - - while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) { - ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError, szErrorMsg, - MSG_LNG, &pcbErrorMsg); - - switch (ret) { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - printf("%s\n*** ODBC Error/Warning = %s, " - "Additional Error/Warning = %d\n", - szErrorMsg, szSqlState, pfNativeError); - - if(ret == SQL_SUCCESS_WITH_INFO) - printf("(Note: error message was truncated.\n"); - break; - - case SQL_INVALID_HANDLE: - printf("Call to SQLError failed with return code of " - "SQL_INVALID_HANDLE.\n"); - break; - - case SQL_ERROR: - printf("Call to SQLError failed with return code of SQL_ERROR.\n"); - break; - - case SQL_NO_DATA_FOUND: - break; - - default: - printf("Call to SQLError failed with return code of %d.\n", ret); - } - } - - if ( isError ) - exit(1); -} - -static int dbCreate(UserHandle *uh) -{ - SQLRETURN rc; - SQLHSTMT creatstmt; - - if(!uh) return(-1); - - rc = SQLAllocStmt(uh->hdbc, &creatstmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate create statement\n"); - return(-1); - } - - rc = SQLExecDirect(creatstmt,(SQLCHAR *)create_subscriber_table, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to create subscriber table\n"); - return(-1); - } - - rc = SQLExecDirect(creatstmt,(SQLCHAR *)create_group_table, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to create group table\n"); - return(-1); - } - - rc = SQLExecDirect(creatstmt,(SQLCHAR *)create_server_table, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to create server table\n"); - return(-1); - } - - rc = SQLExecDirect(creatstmt,(SQLCHAR *)create_session_table, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to create session table\n"); - return(-1); - } - - rc = SQLTransact(uh->henv, uh->hdbc, SQL_COMMIT); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to commit all create table\n"); - return(-1); - } - - rc = SQLFreeStmt(creatstmt, SQL_DROP); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to free create statement\n"); - return(-1); - } - - return(0); -} - -UserHandle *userDbConnect(uint32 createDb, char *dbName) -{ - char connStrIn[512]; /* ODBC Connection String */ - char connStrOut[2048]; - SQLRETURN rc; - UserHandle *uh; - - /*--------------------------*/ - /* Build the Connect string */ - /*--------------------------*/ - sprintf(connStrIn, - "AutoCreate=%d;OverWrite=%d;DSN=%s", - createDb ? 1 : 0, - createDb ? 1 : 0, - dbName); - - uh = calloc(1, sizeof(UserHandle)); - if( !uh ) { - printf("Unable to allocate memory for Handle\n"); - return(0); - } - - /*---------------------------------*/ - /* Allocate the Environment Handle */ - /*---------------------------------*/ - rc = SQLAllocEnv(&uh->henv); - - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate Environment Handle\n"); - return(0); - } - - /*--------------------------------*/ - /* Allocate the DB Connect Handle */ - /*--------------------------------*/ - rc = SQLAllocConnect(uh->henv, &uh->hdbc); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate a connection handle\n"); - return(0); - } - - /*-------------------------*/ - /* Connect to the Database */ - /*-------------------------*/ - rc = SQLDriverConnect(uh->hdbc, NULL, - (SQLCHAR *)connStrIn, SQL_NTS, - (SQLCHAR *)connStrOut, sizeof (connStrOut), - NULL, SQL_DRIVER_NOPROMPT); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { -handle_error(uh->hdbc, uh->henv, NULL, rc, __FILE__, __LINE__); - printf("Unable to connect to database server\n"); - return(0); - } - - rc = SQLSetConnectOption(uh->hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to set connection option\n"); - return(0); - } - - rc = SQLAllocStmt(uh->hdbc, &uh->stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to allocate immediate statement\n"); - return(0); - } - - if( createDb ) - dbCreate(uh); - - if( localDbPrepare(uh) < 0 ) - return(0); - - return(uh); -} - -void userDbDisconnect(UserHandle *uh) -{ - SQLRETURN rc; - - if(!uh) return; - - rc = SQLDisconnect(uh->hdbc); - - SQLFreeConnect(uh->hdbc); - SQLFreeEnv(uh->henv); - free(uh); -} - -int userDbInsertServer(UserHandle *uh, - ServerId serverId, - SubscriberSuffix suffix, - ServerName name) -{ - SQLRETURN rc; - char buf[1000]; - - if(!uh) return(-1); - - sprintf(buf, "insert into server values (%d,'%.*s','%s',0,0,0)", - serverId, - SUBSCRIBER_NUMBER_SUFFIX_LENGTH, suffix, - name); - - rc = SQLExecDirect(uh->stmt, (unsigned char *)buf, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to execute insert server\n"); - return(-1); - } - - return( userDbCommit(uh) ); -} - -int userDbInsertSubscriber(UserHandle *uh, - SubscriberNumber number, - uint32 groupId, - SubscriberName name) -{ - SQLRETURN rc; - char buf[1000]; - - if(!uh) return(-1); - - sprintf(buf, "insert into subscriber values ('%s','%s',%d,0,0,'','')", - number, - name, - groupId); - - rc = SQLExecDirect(uh->stmt, (unsigned char*)buf, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to execute insert subscriber\n"); - return(-1); - } - - return( userDbCommit(uh) ); -} - -int userDbInsertGroup(UserHandle *uh, - GroupId groupId, - GroupName name, - Permission allowRead, - Permission allowInsert, - Permission allowDelete) -{ - SQLRETURN rc; - char buf[1000]; - - if(!uh) return(-1); - - sprintf(buf, "insert into usergroup values (%d,'%s',%d,%d,%d)", - groupId, - name, - allowRead, - allowInsert, - allowDelete); - - rc = SQLExecDirect(uh->stmt, (unsigned char*)buf, SQL_NTS); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to execute insert group\n"); - return(-1); - } - - return( userDbCommit(uh) ); -} - -int userDbCommit(UserHandle *uh) -{ - SQLRETURN rc; - if(!uh) return(-1); - - rc = SQLTransact(uh->henv, uh->hdbc, SQL_COMMIT); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { -handle_error(uh->hdbc, uh->henv, 0, rc, __FILE__, __LINE__); - printf("Unable to commit Transaction\n"); - return(-1); - } - - return(0); -} - -int userDbRollback(UserHandle *uh) -{ - SQLRETURN rc; - if(!uh) return(-1); - - rc = SQLTransact(uh->henv, uh->hdbc, SQL_ROLLBACK); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("Unable to rollback Transaction\n"); - return(-1); - } - - return(0); -} - -void userCheckpoint(UserHandle *uh) -{ - SQLRETURN rc; - if(!uh) return; - - rc = SQLExecDirect(uh->stmt, (SQLCHAR *)"call ttCheckpointFuzzy", SQL_NTS); - userDbCommit(uh); -} diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userTransaction.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userTransaction.c deleted file mode 100644 index a2f4787bb0ca6ef4c58aff66952c2b72048ee4aa..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/old/userTransaction.c +++ /dev/null @@ -1,473 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> -#include <time.h> - -#include "sql.h" -#include "sqlext.h" - - -#include "userInterface.h" -#include "userHandle.h" - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -static int readSubscriberSessions(UserHandle *uh, - SubscriberNumber number, - char *transactionType); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -extern void handle_error(SQLHDBC hdbc, - SQLHENV henv, - SQLHSTMT hstmt, - SQLRETURN rc, - char *filename, - int lineno); - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -static int readSubscriberSessions(UserHandle *uh, - SubscriberNumber number, - char *transactionType) -{ - SQLRETURN rc; - - /*-----------------------------------------------------*/ - /* SELECT activeSessions,groupId,changedBy,changedTime */ - /* FROM SUBSCRIBER */ - /* WHERE subscriberNumber=x; */ - /*-----------------------------------------------------*/ - strcpy(uh->readSubscriberSession.values.number,number); - - rc = SQLExecute(uh->readSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("%s %s\n", - transactionType, - "Unable to execute read subscriber session"); - return(-1); - } - - rc = SQLFetch(uh->readSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("%s %s\n", - transactionType, - "Unable to fetch read subscriber session"); - return(-1); - } - - return(0); -} - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -void userTransaction_T1(UserHandle *uh, - SubscriberNumber number, - Location new_location, - ChangedBy changed_by, - ChangedTime changed_time) -{ - SQLRETURN rc; - - if(!uh) return; - - /*---------------------------------------------*/ - /* Update the subscriber information */ - /* */ - /* UPDATE SUBSCRIBER */ - /* SET location=x, changedBy=x, changedTime=x */ - /* WHERE subscriberNumber=x; */ - /*---------------------------------------------*/ - strcpy(uh->updateSubscriber.values.number, number); - uh->updateSubscriber.values.location = new_location; - strcpy(uh->updateSubscriber.values.changedBy, changed_by); - strcpy(uh->updateSubscriber.values.changedTime, changed_time); - - rc = SQLExecute(uh->updateSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T1 Unable to execute update subscriber\n"); - return; - } - - userDbCommit(uh); -} - -void userTransaction_T2(UserHandle *uh, - SubscriberNumber number, - Location *new_location, - ChangedBy changed_by, - ChangedTime changed_time, - SubscriberName subscriberName) -{ - SQLRETURN rc; - - if(!uh) return; - - /*------------------------------------------------------*/ - /* Read the information from the subscriber table */ - /* */ - /* SELECT location,subscriberName,changedBy,changedTime */ - /* FROM SUBSCRIBER */ - /* WHERE subscriberNumber=x; */ - /*------------------------------------------------------*/ - strcpy(uh->readSubscriber.values.number,number); - - rc = SQLExecute(uh->readSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T2 Unable to execute read subscriber\n"); - return; - } - - rc = SQLFetch(uh->readSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T2 Unable to fetch read subscriber\n"); - return; - } - - userDbCommit(uh); - - strcpy(subscriberName, uh->readSubscriber.values.name); - *new_location = uh->readSubscriber.values.location; - strcpy(changed_by, uh->readSubscriber.values.changedBy); - strcpy(changed_time, uh->readSubscriber.values.changedTime); -} - -void userTransaction_T3(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T3") < 0 ) - return; - - /*-----------------------------------------------*/ - /* Read the 'read' Permissions for the userGroup */ - /* */ - /* SELECT allowRead */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-----------------------------------------------*/ - uh->readGroupAllowRead.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read group allow read\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to fetch read group allow read\n"); - return; - } - - if( uh->readGroupAllowRead.values.allowRead & server_bit && - uh->readSubscriberSession.values.activeSessions & server_bit ) { - - /*----------------------------------------------------*/ - /* Read the sessionDetails from the userSession table */ - /* */ - /* SELECT sessionData */ - /* FROM userSession */ - /* WHERE subscriberNumber=x, serverId=x */ - /*----------------------------------------------------*/ - strcpy(uh->readSessionDetails.values.number,number); - uh->readSessionDetails.values.serverId = server_id; - - rc = SQLExecute(uh->readSessionDetails.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read session details\n"); - return; - } - - rc = SQLFetch(uh->readSessionDetails.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to fetch read session details\n"); - return; - } - - strcpy(session_details, uh->readSessionDetails.values.details); - - /*----------------------------------------*/ - /* Increment noOfRead field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfRead=noOfRead+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*----------------------------------------*/ - uh->updateServerNoOfRead.values.serverId = server_id; - strcpy(uh->updateServerNoOfRead.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read no of read\n"); - return; - } - - *branch_executed = 1; - } - - userDbCommit(uh); -} - -void userTransaction_T4(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int do_rollback, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T4") < 0 ) - return; - - /*-------------------------------------------------*/ - /* Read the 'insert' Permissions for the userGroup */ - /* */ - /* SELECT allowInsert */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-------------------------------------------------*/ - uh->readGroupAllowInsert.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute read group allow insert\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to fetch read group allow insert\n"); - return; - } - - if( uh->readGroupAllowInsert.values.allowInsert & server_bit && - !(uh->readSubscriberSession.values.activeSessions & server_bit) ) { - - /*---------------------------------------------*/ - /* Insert the session to the userSession table */ - /* */ - /* INSERT INTO userSession */ - /* VALUES (x,x,x) */ - /*---------------------------------------------*/ - strcpy(uh->insertSession.values.number, number); - uh->insertSession.values.serverId = server_id; - strcpy(uh->insertSession.values.details, session_details); - - rc = SQLExecute(uh->insertSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { -handle_error(uh->hdbc, uh->henv, uh->insertSession.stmt, rc, __FILE__, __LINE__); - printf("T4 Unable to execute insert session \n"); - return; - } - - /*----------------------------------------*/ - /* Update subscriber activeSessions field */ - /* */ - /* UPDATE subscriber */ - /* SET activeSessions=x */ - /* WHERE subscriberNumber=x */ - /*----------------------------------------*/ - strcpy(uh->updateSubscriberSession.values.number, number); - uh->updateSubscriberSession.values.activeSessions = - uh->readSubscriberSession.values.activeSessions | server_bit; - - rc = SQLExecute(uh->updateSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute update session \n"); - return; - } - - /*------------------------------------------*/ - /* Increment noOfInsert field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfInsert=noOfInsert+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*------------------------------------------*/ - uh->updateServerNoOfInsert.values.serverId = server_id; - strcpy(uh->updateServerNoOfInsert.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute update no of read\n"); - return; - } - - *branch_executed = 1; - } - - if(do_rollback) - userDbRollback(uh); - else - userDbCommit(uh); -} - -void userTransaction_T5(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - unsigned int do_rollback, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T5") < 0 ) - return; - - /*-------------------------------------------------*/ - /* Read the 'delete' Permissions for the userGroup */ - /* */ - /* SELECT allowDelete */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-------------------------------------------------*/ - uh->readGroupAllowDelete.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute read group allow delete\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to fetch read group allow delete\n"); - return; - } - - if( uh->readGroupAllowDelete.values.allowDelete & server_bit && - uh->readSubscriberSession.values.activeSessions & server_bit ) { - - /*-----------------------------------------------*/ - /* Delete the session from the userSession table */ - /* */ - /* DELETE FROM userSession */ - /* WHERE subscriberNumber=x,serverId=x */ - /*-----------------------------------------------*/ - strcpy(uh->deleteSession.values.number,number); - uh->deleteSession.values.serverId = server_id; - - rc = SQLExecute(uh->deleteSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute delete session\n"); - return; - } - - /*----------------------------------------*/ - /* Update subscriber activeSessions field */ - /* */ - /* UPDATE subscriber */ - /* SET activeSessions=x */ - /* WHERE subscriberNumber=x */ - /*----------------------------------------*/ - strcpy(uh->updateSubscriberSession.values.number, number); - uh->updateSubscriberSession.values.activeSessions = - uh->readSubscriberSession.values.activeSessions & ~server_bit; - - rc = SQLExecute(uh->updateSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute update subscriber session \n"); - return; - } - - /*------------------------------------------*/ - /* Increment noOfDelete field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfDelete=noOfDelete+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*------------------------------------------*/ - uh->updateServerNoOfDelete.values.serverId = server_id; - strcpy(uh->updateServerNoOfDelete.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute update no of delete\n"); - return; - } - - *branch_executed = 1; - } - - if(do_rollback) - userDbRollback(uh); - else - userDbCommit(uh); -} - - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userHandle.h b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userHandle.h deleted file mode 100644 index 6da76fc2bff404e870411d89306e50925dc1eea5..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userHandle.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef USERHANDLE_H -#define USERHANDLE_H - -/***************************************************************/ -/* I N C L U D E D F I L E S */ -/***************************************************************/ - -#include <NdbApi.hpp> -#include "testDefinitions.h" - -/*************************************************************** -* M A C R O S * -***************************************************************/ - -/***************************************************************/ -/* C O N S T A N T S */ -/***************************************************************/ - -/*************************************************************** -* D A T A S T R U C T U R E S * -***************************************************************/ - -typedef Ndb userHandle; - -/*************************************************************** -* P U B L I C F U N C T I O N S * -***************************************************************/ - -/*************************************************************** -* E X T E R N A L D A T A * -***************************************************************/ - - -#endif /* USERHANDLE_H */ - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userInterface.cpp b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userInterface.cpp deleted file mode 100644 index fe3c17acbf553c9dfabd9bc099ca675c01050649..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userInterface.cpp +++ /dev/null @@ -1,739 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> -#ifndef NDB_WIN32 -#include <sys/time.h> -#endif - -#include "ndb_error.hpp" -#include "userHandle.h" -#include "userInterface.h" -#include <NdbThread.h> -#include <NdbTick.h> -#include <NdbMutex.h> -#include <NdbSleep.h> -#include "ndb_schema.hpp" -#include <NDBT.hpp> -#include <NdbSchemaCon.hpp> - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -extern int localDbPrepare(UserHandle *uh); - -static int dbCreate(UserHandle *uh); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -/*-----------------------------------*/ -/* Time related Functions */ -/* */ -/* Returns a double value in seconds */ -/*-----------------------------------*/ -double userGetTimeSync(void) -{ - static int initialized = 0; - static NDB_TICKS initSecs = 0; - static Uint32 initMicros = 0; - double timeValue = 0; - - if ( !initialized ) { - initialized = 1; - NdbTick_CurrentMicrosecond(&initSecs, &initMicros); - timeValue = 0.0; - } else { - NDB_TICKS secs = 0; - Uint32 micros = 0; - - NdbTick_CurrentMicrosecond(&secs, µs); - - double s = (double)secs - (double)initSecs; - double us = (double)secs - (double)initMicros; - - timeValue = s + (us / 1000000.0); - } - - return timeValue; -} - -// 0 - OK -// 1 - Retry transaction -// 2 - Permanent -int -userDbCommit(UserHandle *uh){ - if(uh->pCurrTrans != 0){ - int check = uh->pCurrTrans->execute( Commit ); - NdbError err = uh->pCurrTrans->getNdbError(); - uh->pNDB->closeTransaction(uh->pCurrTrans); - uh->pCurrTrans = 0; - - if(err.status != NdbError::Success) - ndbout << err << endl; - - if(err.status == NdbError::TemporaryError && - err.classification == NdbError::OverloadError){ - NdbSleep_SecSleep(3); - } - - return err.status; - } - return 2; -} - -/** - * TRUE - Normal table - * FALSE - Table w.o. checkpoing and logging - */ - -#ifdef __cplusplus -extern "C" { -#endif -extern int useTableLogging; -extern int useIndexTables; -#ifdef __cplusplus -} -#endif - - -int -create_table_server(Ndb * pNdb){ - int check; - NdbSchemaCon * MySchemaTransaction = NdbSchemaCon::startSchemaTrans(pNdb); - if( MySchemaTransaction == NULL ) - error_handler("startSchemaTransaction", pNdb->getNdbError(), 0); - - NdbSchemaOp * MySchemaOp = MySchemaTransaction->getNdbSchemaOp(); - if( MySchemaOp == NULL ) - error_handler("getNdbSchemaOp", MySchemaTransaction->getNdbError(), 0); - - // Create table - check = MySchemaOp->createTable( SERVER_TABLE, - 8, // Table size - TupleKey, // Key Type - 1 // Nr of Pages - ,DistributionGroup, - 6, - 78, - 80, - 1, - useTableLogging - ); - if( check == -1 ) - error_handler("createTable", MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute - ( SERVER_SUBSCRIBER_SUFFIX, - TupleKey, - sizeof(char) << 3, - SUBSCRIBER_NUMBER_SUFFIX_LENGTH, - String, - MMBased, - NotNullAttribute, - NormalStorageAttribute, - 0, - 1, - 16); - if( check == -1 ) - error_handler("createAttribute (subscriber suffix)", - MySchemaTransaction->getNdbError(), 0); - - // Create first column, primary key - check = MySchemaOp->createAttribute( SERVER_ID, - TupleKey, - sizeof(ServerId) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (serverid)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( SERVER_NAME, - NoKey, - sizeof(char) << 3, - SERVER_NAME_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (server name)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( SERVER_READS, - NoKey, - sizeof(Counter) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (server reads)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SERVER_INSERTS, - NoKey, - sizeof(Counter) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (server inserts)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SERVER_DELETES, - NoKey, - sizeof(Counter) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (server deletes)", - MySchemaTransaction->getNdbError(), 0); - - if( MySchemaTransaction->execute() == -1 ) { - error_handler("schemaTransaction->execute()", - MySchemaTransaction->getNdbError(), 0); - } - NdbSchemaCon::closeSchemaTrans(MySchemaTransaction); - return 0; -} - -int -create_table_group(Ndb * pNdb){ - int check; - - NdbSchemaCon * MySchemaTransaction = NdbSchemaCon::startSchemaTrans(pNdb); - if( MySchemaTransaction == NULL ) - error_handler("startSchemaTransaction", pNdb->getNdbError(), 0); - - NdbSchemaOp * MySchemaOp = MySchemaTransaction->getNdbSchemaOp(); - if( MySchemaOp == NULL ) - error_handler("getNdbSchemaOp", MySchemaTransaction->getNdbError(), 0); - - // Create table - check = MySchemaOp->createTable( GROUP_TABLE, - 8, // Table size - TupleKey, // Key Type - 1 // Nr of Pages - ,All, - 6, - 78, - 80, - 1, - useTableLogging - ); - - if( check == -1 ) - error_handler("createTable", MySchemaTransaction->getNdbError(), 0); - - // Create first column, primary key - check = MySchemaOp->createAttribute( GROUP_ID, - TupleKey, - sizeof(GroupId) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (group id)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( GROUP_NAME, - NoKey, - sizeof(char) << 3, - GROUP_NAME_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (group name)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( GROUP_ALLOW_READ, - NoKey, - sizeof(Permission) << 3, - 1, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (group read)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( GROUP_ALLOW_INSERT, - NoKey, - sizeof(Permission) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (group insert)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( GROUP_ALLOW_DELETE, - NoKey, - sizeof(Permission) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (group delete)", - MySchemaTransaction->getNdbError(), 0); - - if( MySchemaTransaction->execute() == -1 ) { - error_handler("schemaTransaction->execute()", - MySchemaTransaction->getNdbError(), 0); - } - NdbSchemaCon::closeSchemaTrans(MySchemaTransaction); - return 0; -} - -int -create_table_subscriber(Ndb * pNdb){ - int check; - NdbSchemaCon * MySchemaTransaction = NdbSchemaCon::startSchemaTrans(pNdb); - if( MySchemaTransaction == NULL ) - error_handler("startSchemaTransaction", pNdb->getNdbError(), 0); - - NdbSchemaOp * MySchemaOp = MySchemaTransaction->getNdbSchemaOp(); - if( MySchemaOp == NULL ) - error_handler("getNdbSchemaOp", MySchemaTransaction->getNdbError(), 0); - - // Create table - check = MySchemaOp->createTable( SUBSCRIBER_TABLE, - 8, // Table size - TupleKey, // Key Type - 1 // Nr of Pages - ,DistributionGroup, - 6, - 78, - 80, - 1, - useTableLogging - ); - if( check == -1 ) - error_handler("createTable", MySchemaTransaction->getNdbError(), 0); - - // Create first column, primary key - check = MySchemaOp->createAttribute - ( SUBSCRIBER_NUMBER, - TupleKey, - sizeof(char) << 3, - SUBSCRIBER_NUMBER_LENGTH, - String, - MMBased, - NotNullAttribute, - (useIndexTables ? IndexStorageAttribute : NormalStorageAttribute), - 0, - 1, - 16); - if( check == -1 ) - error_handler("createAttribute (subscriber number)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SUBSCRIBER_NAME, - NoKey, - sizeof(char) << 3, - SUBSCRIBER_NAME_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (subscriber name)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( SUBSCRIBER_GROUP, - NoKey, - sizeof(GroupId) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (subscriber_group)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( SUBSCRIBER_LOCATION, - NoKey, - sizeof(Location) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (server reads)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SUBSCRIBER_SESSIONS, - NoKey, - sizeof(ActiveSessions) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (subscriber_sessions)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SUBSCRIBER_CHANGED_BY, - NoKey, - sizeof(char) << 3, - CHANGED_BY_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (subscriber_changed_by)", - MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SUBSCRIBER_CHANGED_TIME, - NoKey, - sizeof(char) << 3, - CHANGED_TIME_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (subscriber_changed_time)", - MySchemaTransaction->getNdbError(), 0); - - if( MySchemaTransaction->execute() == -1 ) { - error_handler("schemaTransaction->execute()", - MySchemaTransaction->getNdbError(), 0); - } - NdbSchemaCon::closeSchemaTrans(MySchemaTransaction); - return 0; -} - -int -create_table_session(Ndb * pNdb){ - int check; - NdbSchemaCon * MySchemaTransaction = NdbSchemaCon::startSchemaTrans(pNdb); - if( MySchemaTransaction == NULL ) - error_handler("startSchemaTransaction", pNdb->getNdbError(), 0); - - NdbSchemaOp * MySchemaOp = MySchemaTransaction->getNdbSchemaOp(); - if( MySchemaOp == NULL ) - error_handler("getNdbSchemaOp", - MySchemaTransaction->getNdbError(), 0); - - // Create table - check = MySchemaOp->createTable( SESSION_TABLE, - 8, // Table size - TupleKey, // Key Type - 1 // Nr of Pages - ,DistributionGroup, - 6, - 78, - 80, - 1, - useTableLogging - ); - if( check == -1 ) - error_handler("createTable", MySchemaTransaction->getNdbError(), 0); - - check = MySchemaOp->createAttribute( SESSION_SUBSCRIBER, - TupleKey, - sizeof(char) << 3, - SUBSCRIBER_NUMBER_LENGTH, - String, - MMBased, - NotNullAttribute, - NormalStorageAttribute, - 0, - 1, - 16); - if( check == -1 ) - error_handler("createAttribute (session_subscriber)", - MySchemaTransaction->getNdbError(), 0); - - // Create first column, primary key - check = MySchemaOp->createAttribute( SESSION_SERVER, - TupleKey, - sizeof(ServerId) << 3, - 1, - UnSigned, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (session_server)", - MySchemaTransaction->getNdbError(), 0); - - - check = MySchemaOp->createAttribute( SESSION_DATA, - NoKey, - sizeof(char) << 3, - SESSION_DETAILS_LENGTH, - String, - MMBased, - NotNullAttribute ); - if( check == -1 ) - error_handler("createAttribute (session_data)", - MySchemaTransaction->getNdbError(), 0); - - if( MySchemaTransaction->execute() == -1 ) { - error_handler("schemaTransaction->execute()", - MySchemaTransaction->getNdbError(), 0); - } - NdbSchemaCon::closeSchemaTrans(MySchemaTransaction); - return 0; -} - -void -create_table(const char * name, int (* function)(Ndb * pNdb), Ndb* pNdb){ - printf("creating table %s...", name); - if(pNdb->getDictionary()->getTable(name) != 0){ - printf(" it already exists\n"); - return; - } else { - printf("\n"); - } - function(pNdb); - printf("creating table %s... done\n", name); -} - -static int dbCreate(Ndb * pNdb) -{ - create_table(SUBSCRIBER_TABLE, create_table_subscriber, pNdb); - create_table(GROUP_TABLE , create_table_group, pNdb); - create_table(SESSION_TABLE , create_table_session, pNdb); - create_table(SERVER_TABLE , create_table_server, pNdb); - return 0; -} - -#ifndef NDB_WIN32 -#include <unistd.h> -#endif - -static NdbMutex* startupMutex = NdbMutex_Create(); - -UserHandle* -userDbConnect(uint32 createDb, char *dbName) -{ - NdbMutex_Lock(startupMutex); - - Ndb * pNdb = new Ndb(""); - - //printf("Initializing...\n"); - pNdb->init(); - - //printf("Waiting..."); - while(pNdb->waitUntilReady() != 0){ - //printf("..."); - } - // printf("done\n"); - - if( createDb ) - dbCreate(pNdb); - - - UserHandle * uh = new UserHandle; - uh->pNDB = pNdb; - uh->pCurrTrans = 0; - - NdbMutex_Unlock(startupMutex); - - return uh; -} - -void userDbDisconnect(UserHandle *uh) -{ - delete uh; -} - -int userDbInsertServer(UserHandle *uh, - ServerId serverId, - SubscriberSuffix suffix, - ServerName name) -{ - int check; - - uint32 noOfRead = 0; - uint32 noOfInsert = 0; - uint32 noOfDelete = 0; - - NdbConnection * MyTransaction = 0; - if(uh->pCurrTrans != 0){ - MyTransaction = uh->pCurrTrans; - } else { - uh->pCurrTrans = MyTransaction = uh->pNDB->startTransaction(); - } - if (MyTransaction == NULL) - error_handler("startTranscation", uh->pNDB->getNdbError(), 0); - - NdbOperation *MyOperation = MyTransaction->getNdbOperation(SERVER_TABLE); - CHECK_NULL(MyOperation, "getNdbOperation", MyTransaction); - - check = MyOperation->insertTuple(); - CHECK_MINUS_ONE(check, "insert tuple", MyTransaction); - - check = MyOperation->equal(SERVER_ID, (char*)&serverId); - CHECK_MINUS_ONE(check, "setValue id", MyTransaction); - - check = MyOperation->setValue(SERVER_SUBSCRIBER_SUFFIX, suffix); - CHECK_MINUS_ONE(check, "setValue suffix", MyTransaction); - - check = MyOperation->setValue(SERVER_NAME, name); - CHECK_MINUS_ONE(check, "setValue name", MyTransaction); - - check = MyOperation->setValue(SERVER_READS, (char*)&noOfRead); - CHECK_MINUS_ONE(check, "setValue reads", MyTransaction); - - check = MyOperation->setValue(SERVER_INSERTS, (char*)&noOfInsert); - CHECK_MINUS_ONE(check, "setValue inserts", MyTransaction); - - check = MyOperation->setValue(SERVER_DELETES, (char*)&noOfDelete); - CHECK_MINUS_ONE(check, "setValue deletes", MyTransaction); - - return 0; -} - -int userDbInsertSubscriber(UserHandle *uh, - SubscriberNumber number, - uint32 groupId, - SubscriberName name) -{ - int check; - uint32 activeSessions = 0; - Location l = 0; - ChangedBy changedBy; snprintf(changedBy, sizeof(changedBy), "ChangedBy"); - ChangedTime changedTime; snprintf(changedTime, sizeof(changedTime), "ChangedTime"); - - NdbConnection * MyTransaction = 0; - if(uh->pCurrTrans != 0){ - MyTransaction = uh->pCurrTrans; - } else { - uh->pCurrTrans = MyTransaction = uh->pNDB->startTransaction(); - } - if (MyTransaction == NULL) - error_handler("startTranscation", uh->pNDB->getNdbError(), 0); - - NdbOperation *MyOperation = MyTransaction->getNdbOperation(SUBSCRIBER_TABLE); - CHECK_NULL(MyOperation, "getNdbOperation", MyTransaction); - - check = MyOperation->insertTuple(); - CHECK_MINUS_ONE(check, "insertTuple", MyTransaction); - - check = MyOperation->equal(SUBSCRIBER_NUMBER, number); - CHECK_MINUS_ONE(check, "equal", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_NAME, name); - CHECK_MINUS_ONE(check, "setValue name", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_GROUP, (char*)&groupId); - CHECK_MINUS_ONE(check, "setValue group", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_LOCATION, (char*)&l); - CHECK_MINUS_ONE(check, "setValue location", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_SESSIONS, (char*)&activeSessions); - CHECK_MINUS_ONE(check, "setValue sessions", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_CHANGED_BY, changedBy); - CHECK_MINUS_ONE(check, "setValue changedBy", MyTransaction); - - check = MyOperation->setValue(SUBSCRIBER_CHANGED_TIME, changedTime); - CHECK_MINUS_ONE(check, "setValue changedTime", MyTransaction); - - return 0; -} - -int userDbInsertGroup(UserHandle *uh, - GroupId groupId, - GroupName name, - Permission allowRead, - Permission allowInsert, - Permission allowDelete) -{ - int check; - - NdbConnection * MyTransaction = 0; - if(uh->pCurrTrans != 0){ - MyTransaction = uh->pCurrTrans; - } else { - uh->pCurrTrans = MyTransaction = uh->pNDB->startTransaction(); - } - if (MyTransaction == NULL) - error_handler("startTranscation", uh->pNDB->getNdbError(), 0); - - NdbOperation *MyOperation = MyTransaction->getNdbOperation(GROUP_TABLE); - CHECK_NULL(MyOperation, "getNdbOperation", MyTransaction); - - check = MyOperation->insertTuple(); - CHECK_MINUS_ONE(check, "insertTuple", MyTransaction); - - check = MyOperation->equal(GROUP_ID, (char*)&groupId); - CHECK_MINUS_ONE(check, "equal", MyTransaction); - - check = MyOperation->setValue(GROUP_NAME, name); - CHECK_MINUS_ONE(check, "setValue name", MyTransaction); - - check = MyOperation->setValue(GROUP_ALLOW_READ, (char*)&allowRead); - CHECK_MINUS_ONE(check, "setValue allowRead", MyTransaction); - - check = MyOperation->setValue(GROUP_ALLOW_INSERT, (char*)&allowInsert); - CHECK_MINUS_ONE(check, "setValue allowInsert", MyTransaction); - - check = MyOperation->setValue(GROUP_ALLOW_DELETE, (char*)&allowDelete); - CHECK_MINUS_ONE(check, "setValue allowDelete", MyTransaction); - - return 0; -} - diff --git a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userTransaction.c b/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userTransaction.c deleted file mode 100644 index a2f4787bb0ca6ef4c58aff66952c2b72048ee4aa..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/lmc-bench/src/user/userTransaction.c +++ /dev/null @@ -1,473 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/*************************************************************** -* I N C L U D E D F I L E S * -***************************************************************/ - -#include <ndb_global.h> -#include <time.h> - -#include "sql.h" -#include "sqlext.h" - - -#include "userInterface.h" -#include "userHandle.h" - -/*************************************************************** -* L O C A L C O N S T A N T S * -***************************************************************/ - -/*************************************************************** -* L O C A L D A T A S T R U C T U R E S * -***************************************************************/ - -/*************************************************************** -* L O C A L F U N C T I O N S * -***************************************************************/ - -static int readSubscriberSessions(UserHandle *uh, - SubscriberNumber number, - char *transactionType); - -/*************************************************************** -* L O C A L D A T A * -***************************************************************/ - -extern void handle_error(SQLHDBC hdbc, - SQLHENV henv, - SQLHSTMT hstmt, - SQLRETURN rc, - char *filename, - int lineno); - -/*************************************************************** -* P U B L I C D A T A * -***************************************************************/ - - -/*************************************************************** -**************************************************************** -* L O C A L F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -static int readSubscriberSessions(UserHandle *uh, - SubscriberNumber number, - char *transactionType) -{ - SQLRETURN rc; - - /*-----------------------------------------------------*/ - /* SELECT activeSessions,groupId,changedBy,changedTime */ - /* FROM SUBSCRIBER */ - /* WHERE subscriberNumber=x; */ - /*-----------------------------------------------------*/ - strcpy(uh->readSubscriberSession.values.number,number); - - rc = SQLExecute(uh->readSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("%s %s\n", - transactionType, - "Unable to execute read subscriber session"); - return(-1); - } - - rc = SQLFetch(uh->readSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("%s %s\n", - transactionType, - "Unable to fetch read subscriber session"); - return(-1); - } - - return(0); -} - -/*************************************************************** -**************************************************************** -* P U B L I C F U N C T I O N S C O D E S E C T I O N * -**************************************************************** -***************************************************************/ - -void userTransaction_T1(UserHandle *uh, - SubscriberNumber number, - Location new_location, - ChangedBy changed_by, - ChangedTime changed_time) -{ - SQLRETURN rc; - - if(!uh) return; - - /*---------------------------------------------*/ - /* Update the subscriber information */ - /* */ - /* UPDATE SUBSCRIBER */ - /* SET location=x, changedBy=x, changedTime=x */ - /* WHERE subscriberNumber=x; */ - /*---------------------------------------------*/ - strcpy(uh->updateSubscriber.values.number, number); - uh->updateSubscriber.values.location = new_location; - strcpy(uh->updateSubscriber.values.changedBy, changed_by); - strcpy(uh->updateSubscriber.values.changedTime, changed_time); - - rc = SQLExecute(uh->updateSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T1 Unable to execute update subscriber\n"); - return; - } - - userDbCommit(uh); -} - -void userTransaction_T2(UserHandle *uh, - SubscriberNumber number, - Location *new_location, - ChangedBy changed_by, - ChangedTime changed_time, - SubscriberName subscriberName) -{ - SQLRETURN rc; - - if(!uh) return; - - /*------------------------------------------------------*/ - /* Read the information from the subscriber table */ - /* */ - /* SELECT location,subscriberName,changedBy,changedTime */ - /* FROM SUBSCRIBER */ - /* WHERE subscriberNumber=x; */ - /*------------------------------------------------------*/ - strcpy(uh->readSubscriber.values.number,number); - - rc = SQLExecute(uh->readSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T2 Unable to execute read subscriber\n"); - return; - } - - rc = SQLFetch(uh->readSubscriber.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T2 Unable to fetch read subscriber\n"); - return; - } - - userDbCommit(uh); - - strcpy(subscriberName, uh->readSubscriber.values.name); - *new_location = uh->readSubscriber.values.location; - strcpy(changed_by, uh->readSubscriber.values.changedBy); - strcpy(changed_time, uh->readSubscriber.values.changedTime); -} - -void userTransaction_T3(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T3") < 0 ) - return; - - /*-----------------------------------------------*/ - /* Read the 'read' Permissions for the userGroup */ - /* */ - /* SELECT allowRead */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-----------------------------------------------*/ - uh->readGroupAllowRead.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read group allow read\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to fetch read group allow read\n"); - return; - } - - if( uh->readGroupAllowRead.values.allowRead & server_bit && - uh->readSubscriberSession.values.activeSessions & server_bit ) { - - /*----------------------------------------------------*/ - /* Read the sessionDetails from the userSession table */ - /* */ - /* SELECT sessionData */ - /* FROM userSession */ - /* WHERE subscriberNumber=x, serverId=x */ - /*----------------------------------------------------*/ - strcpy(uh->readSessionDetails.values.number,number); - uh->readSessionDetails.values.serverId = server_id; - - rc = SQLExecute(uh->readSessionDetails.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read session details\n"); - return; - } - - rc = SQLFetch(uh->readSessionDetails.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to fetch read session details\n"); - return; - } - - strcpy(session_details, uh->readSessionDetails.values.details); - - /*----------------------------------------*/ - /* Increment noOfRead field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfRead=noOfRead+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*----------------------------------------*/ - uh->updateServerNoOfRead.values.serverId = server_id; - strcpy(uh->updateServerNoOfRead.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfRead.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T3 Unable to execute read no of read\n"); - return; - } - - *branch_executed = 1; - } - - userDbCommit(uh); -} - -void userTransaction_T4(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - SessionDetails session_details, - unsigned int do_rollback, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T4") < 0 ) - return; - - /*-------------------------------------------------*/ - /* Read the 'insert' Permissions for the userGroup */ - /* */ - /* SELECT allowInsert */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-------------------------------------------------*/ - uh->readGroupAllowInsert.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute read group allow insert\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to fetch read group allow insert\n"); - return; - } - - if( uh->readGroupAllowInsert.values.allowInsert & server_bit && - !(uh->readSubscriberSession.values.activeSessions & server_bit) ) { - - /*---------------------------------------------*/ - /* Insert the session to the userSession table */ - /* */ - /* INSERT INTO userSession */ - /* VALUES (x,x,x) */ - /*---------------------------------------------*/ - strcpy(uh->insertSession.values.number, number); - uh->insertSession.values.serverId = server_id; - strcpy(uh->insertSession.values.details, session_details); - - rc = SQLExecute(uh->insertSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { -handle_error(uh->hdbc, uh->henv, uh->insertSession.stmt, rc, __FILE__, __LINE__); - printf("T4 Unable to execute insert session \n"); - return; - } - - /*----------------------------------------*/ - /* Update subscriber activeSessions field */ - /* */ - /* UPDATE subscriber */ - /* SET activeSessions=x */ - /* WHERE subscriberNumber=x */ - /*----------------------------------------*/ - strcpy(uh->updateSubscriberSession.values.number, number); - uh->updateSubscriberSession.values.activeSessions = - uh->readSubscriberSession.values.activeSessions | server_bit; - - rc = SQLExecute(uh->updateSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute update session \n"); - return; - } - - /*------------------------------------------*/ - /* Increment noOfInsert field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfInsert=noOfInsert+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*------------------------------------------*/ - uh->updateServerNoOfInsert.values.serverId = server_id; - strcpy(uh->updateServerNoOfInsert.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfInsert.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T4 Unable to execute update no of read\n"); - return; - } - - *branch_executed = 1; - } - - if(do_rollback) - userDbRollback(uh); - else - userDbCommit(uh); -} - -void userTransaction_T5(UserHandle *uh, - SubscriberNumber number, - ServerId server_id, - ServerBit server_bit, - unsigned int do_rollback, - unsigned int *branch_executed) -{ - SQLRETURN rc; - - if(!uh) return; - - *branch_executed = 0; - - /*--------------------------------------*/ - /* Read active sessions from subscriber */ - /*--------------------------------------*/ - if( readSubscriberSessions(uh, number, "T5") < 0 ) - return; - - /*-------------------------------------------------*/ - /* Read the 'delete' Permissions for the userGroup */ - /* */ - /* SELECT allowDelete */ - /* FROM USERGROUP */ - /* WHERE groupId=x */ - /*-------------------------------------------------*/ - uh->readGroupAllowDelete.values.groupId = uh->readSubscriberSession.values.groupId; - - rc = SQLExecute(uh->readGroupAllowDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute read group allow delete\n"); - return; - } - - rc = SQLFetch(uh->readGroupAllowDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to fetch read group allow delete\n"); - return; - } - - if( uh->readGroupAllowDelete.values.allowDelete & server_bit && - uh->readSubscriberSession.values.activeSessions & server_bit ) { - - /*-----------------------------------------------*/ - /* Delete the session from the userSession table */ - /* */ - /* DELETE FROM userSession */ - /* WHERE subscriberNumber=x,serverId=x */ - /*-----------------------------------------------*/ - strcpy(uh->deleteSession.values.number,number); - uh->deleteSession.values.serverId = server_id; - - rc = SQLExecute(uh->deleteSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute delete session\n"); - return; - } - - /*----------------------------------------*/ - /* Update subscriber activeSessions field */ - /* */ - /* UPDATE subscriber */ - /* SET activeSessions=x */ - /* WHERE subscriberNumber=x */ - /*----------------------------------------*/ - strcpy(uh->updateSubscriberSession.values.number, number); - uh->updateSubscriberSession.values.activeSessions = - uh->readSubscriberSession.values.activeSessions & ~server_bit; - - rc = SQLExecute(uh->updateSubscriberSession.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute update subscriber session \n"); - return; - } - - /*------------------------------------------*/ - /* Increment noOfDelete field in the server */ - /* */ - /* UPDATE server */ - /* SET noOfDelete=noOfDelete+1 */ - /* WHERE serverId=x,subscriberSuffix=x */ - /*------------------------------------------*/ - uh->updateServerNoOfDelete.values.serverId = server_id; - strcpy(uh->updateServerNoOfDelete.values.suffix, - &number[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH]); - - rc = SQLExecute(uh->updateServerNoOfDelete.stmt); - if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - printf("T5 Unable to execute update no of delete\n"); - return; - } - - *branch_executed = 1; - } - - if(do_rollback) - userDbRollback(uh); - else - userDbCommit(uh); -} - - diff --git a/storage/ndb/test/ndbapi/old_dirs/restarter/Makefile b/storage/ndb/test/ndbapi/old_dirs/restarter/Makefile deleted file mode 100644 index 041fbfd82ba2efcf1f84cd0bc31c8e1e17e8573a..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/restarter/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := restarter - -# Source files of non-templated classes (.C files) -SOURCES = restarter.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/restarter2/Makefile b/storage/ndb/test/ndbapi/old_dirs/restarter2/Makefile deleted file mode 100644 index ba33a2e21dc004a5f985fde91bfda2ac16d3713e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/restarter2/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := restarter2 - -# Source files of non-templated classes (.C files) -SOURCES = restarter2.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/restarts/Makefile b/storage/ndb/test/ndbapi/old_dirs/restarts/Makefile deleted file mode 100644 index 9f14b81fae579545eaa47e1d31b379ddf273047d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/restarts/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := restarts - -# Source files of non-templated classes (.C files) -SOURCES = restarts.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/ronja/Makefile b/storage/ndb/test/ndbapi/old_dirs/ronja/Makefile deleted file mode 100644 index a11a27c5fd75586dff5bad6b93e999464b85ef22..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/ronja/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include .defs.mk - -DIRS = initronja \ - benchronja - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/ronja/benchronja/Makefile b/storage/ndb/test/ndbapi/old_dirs/ronja/benchronja/Makefile deleted file mode 100644 index f0521c3ba77cdfdb812f2cfbf6d17bfdcb23849e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/ronja/benchronja/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - - -BIN_TARGET := benchronja - -SOURCES := benchronja.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/ronja/initronja/Makefile b/storage/ndb/test/ndbapi/old_dirs/ronja/initronja/Makefile deleted file mode 100644 index dd66dd813d1dbb61c67abbd10da01687b2f93e43..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/ronja/initronja/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := initronja - -SOURCES := initronja.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/telco/Makefile b/storage/ndb/test/ndbapi/old_dirs/telco/Makefile deleted file mode 100644 index 8f82c7141192b7c7242f1a2b5aca2b0271dc7796..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/telco/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := telco - -# Source files of non-templated classes (.C files) -SOURCES = msa.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/telco/readme b/storage/ndb/test/ndbapi/old_dirs/telco/readme deleted file mode 100644 index 627b4256eef09b6476fbfbacaff20d3819841d0d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/telco/readme +++ /dev/null @@ -1,9 +0,0 @@ - -adoInsertRecs.cpp - the original evaluation program - -InsertRecs.cpp - replaced ado with ndb api, still windows only - -msa.cpp - removed windows and exceptions, portable - - - diff --git a/storage/ndb/test/ndbapi/old_dirs/testBackup/Makefile b/storage/ndb/test/ndbapi/old_dirs/testBackup/Makefile deleted file mode 100644 index abf47dcfb2d8e63d24581a31320ec6d4bdae8f7a..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testBackup/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testBackup -SOURCES = testBackup.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testBasic/Makefile b/storage/ndb/test/ndbapi/old_dirs/testBasic/Makefile deleted file mode 100644 index 755b19939cb5cedc53fa3e88bf5a94bcac458f89..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testBasic/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := testBasic - -SOURCES := testBasic.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testBlobs/Makefile b/storage/ndb/test/ndbapi/old_dirs/testBlobs/Makefile deleted file mode 100644 index cc5bb629c1731b6ecea7b2efb89c12afc863b07d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testBlobs/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testBlobs - -SOURCES = testBlobs.cpp - -include $(NDB_TOP)/Epilogue.mk - -CCFLAGS_LOC += -I$(NDB_TOP)/include/kernel diff --git a/storage/ndb/test/ndbapi/old_dirs/testDataBuffers/Makefile b/storage/ndb/test/ndbapi/old_dirs/testDataBuffers/Makefile deleted file mode 100644 index 181fbc829d482269f825974f3f7915eb76b42560..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testDataBuffers/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testDataBuffers - -SOURCES = testDataBuffers.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testDict/Makefile b/storage/ndb/test/ndbapi/old_dirs/testDict/Makefile deleted file mode 100644 index 75d493c34242a497e8d2fdf165d2a231a9561f12..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testDict/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testDict - -SOURCES = testDict.cpp - -CFLAGS_testDict.cpp := -I$(call fixpath,$(NDB_TOP)/include/kernel) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testGrep/Makefile b/storage/ndb/test/ndbapi/old_dirs/testGrep/Makefile deleted file mode 100644 index 6bad3d56a00ca3c07e72efdb52aac27d223f27d0..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testGrep/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest -DIRS = verify -BIN_TARGET = testGrep -SOURCES = testGrep.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/ndbapi/old_dirs/testGrep/verify/Makefile b/storage/ndb/test/ndbapi/old_dirs/testGrep/verify/Makefile deleted file mode 100644 index 256e3c98f36f056667130921601275be5d1fca6e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testGrep/verify/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testGrepVerify -SOURCES = testGrepVerify.cpp - -CFLAGS_testGrepVerify.cpp += -I$(call fixpath,$(NDB_TOP)/include/kernel) -I$(call fixpath,$(NDB_TOP)/include/mgmcommon) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testIndex/Makefile b/storage/ndb/test/ndbapi/old_dirs/testIndex/Makefile deleted file mode 100644 index e5cd4542c9c4ce71e918c7e36ce81c89fa58d65b..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testIndex/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testIndex - -SOURCES = testIndex.cpp - -CFLAGS_testIndex.cpp := -I$(call fixpath,$(NDB_TOP)/include/kernel) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testInterpreter/Makefile b/storage/ndb/test/ndbapi/old_dirs/testInterpreter/Makefile deleted file mode 100644 index e84287a1b1669cad884ccfebda0ea1bb0245c6b7..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testInterpreter/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testInterpreter - -SOURCES = testInterpreter.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testMgm/Makefile b/storage/ndb/test/ndbapi/old_dirs/testMgm/Makefile deleted file mode 100644 index be50d3dae7e8715245ae877e3eb163aed7986bce..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testMgm/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testMgm - -SOURCES = testMgm.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testNdbApi/Makefile b/storage/ndb/test/ndbapi/old_dirs/testNdbApi/Makefile deleted file mode 100644 index 3bb3cba427ef53793d77279c7b3557a9ed55d90d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testNdbApi/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testNdbApi - -SOURCES = testNdbApi.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testNodeRestart/Makefile b/storage/ndb/test/ndbapi/old_dirs/testNodeRestart/Makefile deleted file mode 100644 index 8c13ab3beb48163ab6c869ef6e50d7c4e1123f60..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testNodeRestart/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testNodeRestart - -SOURCES = testNodeRestart.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testOIBasic/Makefile b/storage/ndb/test/ndbapi/old_dirs/testOIBasic/Makefile deleted file mode 100644 index 1bbbcf1d17e3fe0714c633fb2e9146e40751187d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testOIBasic/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testOIBasic - -SOURCES = testOIBasic.cpp - -ifeq ($(NDB_COMPILER),GCC) -CCFLAGS_WARNINGS += -Wno-unused -Wformat -endif - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testOIBasic/times.txt b/storage/ndb/test/ndbapi/old_dirs/testOIBasic/times.txt deleted file mode 100644 index 641e9ddb4bf98a3c794a3146ad71cdc7e2403f4c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testOIBasic/times.txt +++ /dev/null @@ -1,8 +0,0 @@ -one db-node -testOIBasic -case t -table 1 -index 1 -fragtype small -threads 10 -rows 5000 -subloop 1 ------------------------------------------------------------- -040331 -build index - 5769 ms per 50000 ( 115 ms per 1000 ) -update - 5962 ms per 50000 ( 119 ms per 1000 ) -update indexed - 14851 ms per 50000 ( 297 ms per 1000 ) -overhead - 149 pct diff --git a/storage/ndb/test/ndbapi/old_dirs/testOperations/Makefile b/storage/ndb/test/ndbapi/old_dirs/testOperations/Makefile deleted file mode 100644 index 25546ade6391d4812fcc8e917503bccd3d33c131..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testOperations/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := testOperations - -SOURCES := testOperations.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testOrderedIndex/Makefile b/storage/ndb/test/ndbapi/old_dirs/testOrderedIndex/Makefile deleted file mode 100644 index d8899a37895efd285a9e40cbb2a7ff0de283b541..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testOrderedIndex/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testOrderedIndex - -SOURCES = testOrderedIndex.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testRestartGci/Makefile b/storage/ndb/test/ndbapi/old_dirs/testRestartGci/Makefile deleted file mode 100644 index 24f449b747dd5d2b1d659ffdb5f981b2eea2e903..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testRestartGci/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := testRestartGci - -SOURCES := testRestartGci.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testScan/Makefile b/storage/ndb/test/ndbapi/old_dirs/testScan/Makefile deleted file mode 100644 index fe48f5bc9261d011f1be65390f9e2125d08d3615..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testScan/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testScan - -SOURCES = testScan.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testScanInterpreter/Makefile b/storage/ndb/test/ndbapi/old_dirs/testScanInterpreter/Makefile deleted file mode 100644 index c7d964941482e6b0cf5ac70e4d2ddbd9e978d769..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testScanInterpreter/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testScanInterpreter - -SOURCES = testScanInterpreter.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testSystemRestart/Makefile b/storage/ndb/test/ndbapi/old_dirs/testSystemRestart/Makefile deleted file mode 100644 index 7a306eb313da3cfd9c2f4e481782a3b05cbe4da4..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testSystemRestart/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testSystemRestart - -SOURCES = testSystemRestart.cpp - -CFLAGS_testSystemRestart.cpp := -I$(call fixpath,$(NDB_TOP)/include/kernel) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testTimeout/Makefile b/storage/ndb/test/ndbapi/old_dirs/testTimeout/Makefile deleted file mode 100644 index 01a9df9887f66d2b042cf68b791a5a3cd43163af..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testTimeout/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = testTimeout - -SOURCES = testTimeout.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/testTransactions/Makefile b/storage/ndb/test/ndbapi/old_dirs/testTransactions/Makefile deleted file mode 100644 index 0279a52692376ea3da8963261f4bafd5522313c1..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/testTransactions/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := testTransactions - -SOURCES := testTransactions.cpp -CFLAGS_testTransactions.cpp := -I$(call fixpath,$(NDB_TOP)/include/kernel) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/test_event/Makefile b/storage/ndb/test/ndbapi/old_dirs/test_event/Makefile deleted file mode 100644 index 6299fa47845b9b2981d7728d6c2b50e0edbc741a..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/test_event/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := test_event - -SOURCES := test_event.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/vw_test/Makefile b/storage/ndb/test/ndbapi/old_dirs/vw_test/Makefile deleted file mode 100644 index 144873dcc698025b443390e2722ffb9c288cc812..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/vw_test/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := vw_test -BIN_TARGET_LIBS := orafunctr decode cirk inifunc -BIN_TARGET_LIBS_DIRS := /home/ndb/junk/vw/ndb/lib - -SOURCES := cdrserver.C - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/ndbapi/old_dirs/vw_test/bcd.h b/storage/ndb/test/ndbapi/old_dirs/vw_test/bcd.h deleted file mode 100644 index d0aaffbd8b7c4fa1cee6a17d6e297120fcc777d8..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/vw_test/bcd.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> - -struct bcdtab { - char tab[3]; -}; - -int dec2hex(int dec,int last); -int bcd_code (char *bcd_in,char *bcd_out); -int bcd_decode (int bcd_len,char *bcd_in,char *bcd_out); -int bcd_decode2 (int bcd_len,char *bcd_in,char *bcd_out); diff --git a/storage/ndb/test/ndbapi/old_dirs/vw_test/script/client_start b/storage/ndb/test/ndbapi/old_dirs/vw_test/script/client_start deleted file mode 100644 index 2965be6fbb5153228a45a63c81e33ec13a474ce5..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/vw_test/script/client_start +++ /dev/null @@ -1,10 +0,0 @@ -# Argument to the client program is: -# 1. ip-adress to the server -# 2. location to the raw cdr-file -# 3. nanoseconds (0-1000) between writing the buffer to the port -# 4. how many writes to the buffer before the sleep command should accur -# Argument 3 and 4 controlls the flow of the raw cdr-file to the cdrserver - -cd $VCDRPATH/bin -# ./client stat181.xxx.com /ext06/data/indata_fraud1/port2file.data.-2089540139 1000 0 & -./client xxx.xxx.xxx.xxx.xxx /export2/home/ndb/vw/data/port2file_data_-2089540139 0 100000 & diff --git a/storage/ndb/test/ndbapi/old_dirs/vw_test/utv.h b/storage/ndb/test/ndbapi/old_dirs/vw_test/utv.h deleted file mode 100644 index 6f378e5595b21038860f57ed857feecb20f05cad..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/vw_test/utv.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <semaphore.h> -#include <thread.h> -#include <limits.h> - -#define TESTLEV - -#define ASubscriberNumber_SIZE 16 -#define BSubscriberNumber_SIZE 29 -#define TRUE 1 -#define FALSE 0 -#define WRITE_LIMIT 100000 -#define EVER ;; -#define CONNINFO "/" -#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) - -#define BIT_1 0x1 -#define BIT_2 0x2 -#define BIT_3 0x4 -#define BIT_4 0x8 -#define BIT_5 0x10 -#define BIT_6 0x20 -#define BIT_7 0x40 -#define BIT_8 0x80 - -/*------------------------------------------------------*/ -/* record defines structure over an alarm thresholds */ -/* CallAttemptState Beskriver status på samtal */ -/* 0 - Subscriber is calling */ -/* 1 - Called part answer call */ -/* 2 - Release of call */ -/* 3-255 reserved for furter use */ -/* USED_FILEDS Indicates active fields within call */ -/* bit 1 - START_TIME */ -/* 2 - TimeForStartOfCharge */ -/* 3 - TimeForStopOfCharge */ -/* 4 - ReroutingIndicator */ -/* 5 - RINParameter */ -/* 6 - ACategory */ -/* 7 - EndOfSelectionInformation */ -/* 8 - UserToUserIndicatior */ -/* 9 - UserToUserInformation */ -/* 10 - CauseCode */ -/* 11 - ASubscriberNumber */ -/* 12 - BSubscriberNumber */ -/* 13 - RedirectingNumber */ -/* 14 - OriginalCalledNumber */ -/* 15 - LocationCode */ -/* 16 - OriginatingPointCode */ -/* 17 - DestinationPointCode */ -/* 18 - CircuitIdentificationCode */ -/* 19 - NetworkIndicator */ -/*------------------------------------------------------*/ - -struct cdr_record -{ - unsigned int USED_FIELDS; - unsigned long ClientId; - unsigned int CallIdentificationNumber; - unsigned int START_TIME; - unsigned int OurSTART_TIME; - unsigned int TimeForStartOfCharge; - unsigned int TimeForStopOfCharge; - time_t OurTimeForStartOfCharge; - time_t OurTimeForStopOfCharge; - unsigned short DestinationPointCode; - unsigned short CircuitIdentificationCode; - unsigned short OriginatingPointCode; - unsigned short ReroutingIndicator; - unsigned short RINParameter; - char NetworkIndicator; - char CallAttemptState; - char ACategory; - char EndOfSelectionInformation; - char UserToUserInformation; - char UserToUserIndicatior; - char CauseCode; - char ASubscriberNumber[ASubscriberNumber_SIZE]; - char ASubscriberNumberLength; - char TonASubscriberNumber; - char BSubscriberNumber[BSubscriberNumber_SIZE]; - char BSubscriberNumberLength; - char TonBSubscriberNumber; - char RedirectingNumber[16]; - char TonRedirectingNumber; - char OriginalCalledNumber[16]; - char TonOriginalCalledNumber; - char LocationCode[16]; - char TonLocationCode; -}; - -/*------------------------------------------------------*/ -/* Define switches for each tag */ -/*------------------------------------------------------*/ - -#define B_START_TIME 0x1 -#define B_TimeForStartOfCharge 0x2 -#define B_TimeForStopOfCharge 0x4 -#define B_ReroutingIndicator 0x8 -#define B_RINParameter 0x10 -#define B_ACategory 0x20 -#define B_EndOfSelectionInformation 0x40 -#define B_UserToUserIndicatior 0x80 -#define B_UserToUserInformation 0x100 -#define B_CauseCode 0x200 -#define B_ASubscriberNumber 0x400 -#define B_BSubscriberNumber 0x800 -#define B_RedirectingNumber 0x1000 -#define B_OriginalCalledNumber 0x2000 -#define B_LocationCode 0x4000 -#define B_OriginatingPointCode 0x8000 -#define B_DestinationPointCode 0x10000 -#define B_CircuitIdentificationCode 0x20000 - -#define B_NetworkIndicator 0x40000 -#define B_TonASubscriberNumber 0x80000 -#define B_TonBSubscriberNumber 0x100000 -#define B_TonRedirectingNumber 0x200000 -#define B_TonOriginalCalledNumber 0x4000000 -#define B_TonLocationCode 0x8000000 - -#define K_START_TIME 0xFF01 -#define K_TimeForStartOfCharge 0xFF02 -#define K_TimeForStopOfCharge 0xFF03 -#define K_ReroutingIndicator 0x13 -#define K_RINParameter 0xFC -#define K_ACategory 0x09 -#define K_EndOfSelectionInformation 0x11 -#define K_UserToUserIndicatior 0x2A -#define K_UserToUserInformation 0x20 -#define K_CauseCode 0x12 -#define K_ASubscriberNumber 0x0A -#define K_BSubscriberNumber 0x04 -#define K_RedirectingNumber 0x0B -#define K_OriginalCalledNumber 0x28 -#define K_LocationCode 0x3F -#define K_OriginatingPointCode 0xFD -#define K_DestinationPointCode 0xFE -#define K_CircuitIdentificationCode 0xFF - -#define K_NetworkIndicator 0xF0 -#define K_TonASubscriberNumber 0xF1 -#define K_TonBSubscriberNumber 0xF2 -#define K_TonRedirectingNumber 0xF3 -#define K_TonOriginalCalledNumber 0xF4 -#define K_TonLocationCode 0xF5 diff --git a/storage/ndb/test/ndbapi/old_dirs/vw_test/vcdrfunc.h b/storage/ndb/test/ndbapi/old_dirs/vw_test/vcdrfunc.h deleted file mode 100644 index 3c5444d733b2238ae48b4431da3e2dc766484d59..0000000000000000000000000000000000000000 --- a/storage/ndb/test/ndbapi/old_dirs/vw_test/vcdrfunc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/********************************************************/ -/* Common functions */ -/* unix_ps checks if a process is running with a */ -/* name and pid rc 0=not running */ -/* 1=Running */ -/* logname create a log filename */ -/* Parm */ -/* 1 lvl1 name */ -/* 2 lvl2 name */ -/* 3 lvl3 name */ -/* m2log Skriv log rader som moder */ -/* Parm */ -/* 1 pointer to filehandler */ -/* 2 Log text max 600 tecken */ -/* c2log Skriv log rader som barn */ -/* Parm */ -/* 1 pointer to filehandler */ -/* 2 Log text max 600 tecken */ -/* n2log Skriv log rader utan relation */ -/* Parm */ -/* 1 pointer to filehandler */ -/* 2 Log text max 600 tecken */ -/********************************************************/ - -int n2log(FILE *fi,char *text); -int m2log(FILE *fi,char *text); -int c2log(FILE *fi,char *text); -int checkchangelog(FILE* fp,char *filename); -void logname(char *filename, char *lvl1, char *lvl2, char *lvl3); -void logname_unique_day(char *filename, char *lvl1, char *lvl2, char *lvl3); -int unix_ps(char *proc_name,char *pid); -/* -int unix_ps2(char *proc_name,char *pid); -*/ -int unix_ps3(char *proc_name); -int replacetoken(const char* instring,char token,char replace); -int CompAsciiNum(char *, char *); -int CompareIt(char *,char *); -int CompCdrNum(const void *,const void *,void *); diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp index ba195290e9ede29fc1eb6dfe4d58031c15240137..aed0b39f196b03a19c201c86cd8672fb5a72b393 100644 --- a/storage/ndb/test/ndbapi/testNodeRestart.cpp +++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp @@ -22,7 +22,7 @@ #include <NdbRestarts.hpp> #include <Vector.hpp> #include <signaldata/DumpStateOrd.hpp> - +#include <Bitmask.hpp> int runLoadTable(NDBT_Context* ctx, NDBT_Step* step){ @@ -669,6 +669,206 @@ err: return NDBT_FAILED; } +int +runBug18612(NDBT_Context* ctx, NDBT_Step* step){ + + // Assume two replicas + NdbRestarter restarter; + if (restarter.getNumDbNodes() < 2) + { + ctx->stopTest(); + return NDBT_OK; + } + + Uint32 cnt = restarter.getNumDbNodes(); + + for(int loop = 0; loop < ctx->getNumLoops(); loop++) + { + int partition0[256]; + int partition1[256]; + bzero(partition0, sizeof(partition0)); + bzero(partition1, sizeof(partition1)); + Bitmask<4> nodesmask; + + Uint32 node1 = restarter.getDbNodeId(rand()%cnt); + for (Uint32 i = 0; i<cnt/2; i++) + { + do { + int tmp = restarter.getRandomNodeOtherNodeGroup(node1, rand()); + if (tmp == -1) + break; + node1 = tmp; + } while(nodesmask.get(node1)); + + partition0[i] = node1; + partition1[i] = restarter.getRandomNodeSameNodeGroup(node1, rand()); + + ndbout_c("nodes %d %d", node1, partition1[i]); + + assert(!nodesmask.get(node1)); + assert(!nodesmask.get(partition1[i])); + nodesmask.set(node1); + nodesmask.set(partition1[i]); + } + + ndbout_c("done"); + + int dump[255]; + dump[0] = DumpStateOrd::NdbcntrStopNodes; + memcpy(dump + 1, partition0, sizeof(int)*cnt/2); + + Uint32 master = restarter.getMasterNodeId(); + + if (restarter.dumpStateOneNode(master, dump, 1+cnt/2)) + return NDBT_FAILED; + + if (restarter.waitNodesNoStart(partition0, cnt/2)) + return NDBT_FAILED; + + int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; + + if (restarter.dumpStateAllNodes(val2, 2)) + return NDBT_FAILED; + + if (restarter.insertErrorInAllNodes(932)) + return NDBT_FAILED; + + dump[0] = 9000; + memcpy(dump + 1, partition0, sizeof(int)*cnt/2); + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateOneNode(partition1[i], dump, 1+cnt/2)) + return NDBT_FAILED; + + dump[0] = 9000; + memcpy(dump + 1, partition1, sizeof(int)*cnt/2); + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateOneNode(partition0[i], dump, 1+cnt/2)) + return NDBT_FAILED; + + if (restarter.startNodes(partition0, cnt/2)) + return NDBT_FAILED; + + if (restarter.waitNodesStartPhase(partition0, cnt/2, 2)) + return NDBT_FAILED; + + dump[0] = 9001; + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateAllNodes(dump, 2)) + return NDBT_FAILED; + + if (restarter.waitNodesNoStart(partition0, cnt/2)) + return NDBT_FAILED; + + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.restartOneDbNode(partition0[i], true, true, true)) + return NDBT_FAILED; + + if (restarter.waitNodesNoStart(partition0, cnt/2)) + return NDBT_FAILED; + + if (restarter.startAll()) + return NDBT_FAILED; + + if (restarter.waitClusterStarted()) + return NDBT_FAILED; + } + return NDBT_OK; +} + +int +runBug18612SR(NDBT_Context* ctx, NDBT_Step* step){ + + // Assume two replicas + NdbRestarter restarter; + if (restarter.getNumDbNodes() < 2) + { + ctx->stopTest(); + return NDBT_OK; + } + + Uint32 cnt = restarter.getNumDbNodes(); + + for(int loop = 0; loop < ctx->getNumLoops(); loop++) + { + int partition0[256]; + int partition1[256]; + bzero(partition0, sizeof(partition0)); + bzero(partition1, sizeof(partition1)); + Bitmask<4> nodesmask; + + Uint32 node1 = restarter.getDbNodeId(rand()%cnt); + for (Uint32 i = 0; i<cnt/2; i++) + { + do { + int tmp = restarter.getRandomNodeOtherNodeGroup(node1, rand()); + if (tmp == -1) + break; + node1 = tmp; + } while(nodesmask.get(node1)); + + partition0[i] = node1; + partition1[i] = restarter.getRandomNodeSameNodeGroup(node1, rand()); + + ndbout_c("nodes %d %d", node1, partition1[i]); + + assert(!nodesmask.get(node1)); + assert(!nodesmask.get(partition1[i])); + nodesmask.set(node1); + nodesmask.set(partition1[i]); + } + + ndbout_c("done"); + + if (restarter.restartAll(false, true, false)) + return NDBT_FAILED; + + int dump[255]; + dump[0] = 9000; + memcpy(dump + 1, partition0, sizeof(int)*cnt/2); + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateOneNode(partition1[i], dump, 1+cnt/2)) + return NDBT_FAILED; + + dump[0] = 9000; + memcpy(dump + 1, partition1, sizeof(int)*cnt/2); + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateOneNode(partition0[i], dump, 1+cnt/2)) + return NDBT_FAILED; + + int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; + + if (restarter.dumpStateAllNodes(val2, 2)) + return NDBT_FAILED; + + if (restarter.insertErrorInAllNodes(932)) + return NDBT_FAILED; + + if (restarter.startAll()) + return NDBT_FAILED; + + if (restarter.waitClusterStartPhase(2)) + return NDBT_FAILED; + + dump[0] = 9001; + for (Uint32 i = 0; i<cnt/2; i++) + if (restarter.dumpStateAllNodes(dump, 2)) + return NDBT_FAILED; + + if (restarter.waitClusterNoStart(30)) + if (restarter.waitNodesNoStart(partition0, cnt/2, 10)) + if (restarter.waitNodesNoStart(partition1, cnt/2, 10)) + return NDBT_FAILED; + + if (restarter.startAll()) + return NDBT_FAILED; + + if (restarter.waitClusterStarted()) + return NDBT_FAILED; + } + return NDBT_OK; +} + + NDBT_TESTSUITE(testNodeRestart); TESTCASE("NoLoad", "Test that one node at a time can be stopped and then restarted "\ @@ -963,6 +1163,18 @@ TESTCASE("Bug18414", STEP(runBug18414); FINALIZER(runClearTable); } +TESTCASE("Bug18612", + "Test bug with partitioned clusters"){ + INITIALIZER(runLoadTable); + STEP(runBug18612); + FINALIZER(runClearTable); +} +TESTCASE("Bug18612SR", + "Test bug with partitioned clusters"){ + INITIALIZER(runLoadTable); + STEP(runBug18612SR); + FINALIZER(runClearTable); +} NDBT_TESTSUITE_END(testNodeRestart); int main(int argc, const char** argv){ diff --git a/storage/ndb/test/run-test/daily-basic-tests.txt b/storage/ndb/test/run-test/daily-basic-tests.txt index 5d5e70f71842efc62c54ede18ebdecfa5afabcfd..08467a652f079567e8f202cf2b5b9481ab35de8e 100644 --- a/storage/ndb/test/run-test/daily-basic-tests.txt +++ b/storage/ndb/test/run-test/daily-basic-tests.txt @@ -453,10 +453,18 @@ args: -n Bug16772 T1 #cmd: testSystemRestart #args: -n Bug18385 T1 # -max-time: 500 +max-time: 1000 cmd: testNodeRestart args: -n Bug18414 T1 +max-time: 1000 +cmd: testNodeRestart +args: -n Bug18612 T1 + +max-time: 1000 +cmd: testNodeRestart +args: -n Bug18612SR T1 + # # DICT TESTS max-time: 1500 diff --git a/storage/ndb/test/src/NdbRestarts.cpp b/storage/ndb/test/src/NdbRestarts.cpp index eea4af437c4bd8b358e8319492b86586ea068215..8465caaab48f5af0699b74d8121032ad9d6e390c 100644 --- a/storage/ndb/test/src/NdbRestarts.cpp +++ b/storage/ndb/test/src/NdbRestarts.cpp @@ -445,8 +445,7 @@ int twoNodeFailure(NdbRestarter& _restarter, << ") secs " << endl; NdbSleep_SecSleep(seconds); - randomId = (rand() % _restarter.getNumDbNodes()); - nodeId = _restarter.getDbNodeId(randomId); + nodeId = _restarter.getRandomNodeOtherNodeGroup(nodeId, rand()); g_info << _restart->m_name << ": node = "<< nodeId << endl; CHECK(_restarter.insertErrorInNode(nodeId, 9999) == 0, diff --git a/storage/ndb/test/tools/old_dirs/hugoCalculator/Makefile b/storage/ndb/test/tools/old_dirs/hugoCalculator/Makefile deleted file mode 100644 index a29deeaacd3bb4503aec14ffd321e27990676d19..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoCalculator/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoCalculator - -# Source files of non-templated classes (.C files) -SOURCES = hugoCalculator.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/tools/old_dirs/hugoFill/Makefile b/storage/ndb/test/tools/old_dirs/hugoFill/Makefile deleted file mode 100644 index 3da745810b68fde0eb45dcf689a132fd92f298e8..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoFill/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoFill - -# Source files of non-templated classes (.C files) -SOURCES = hugoFill.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/tools/old_dirs/hugoLoad/Makefile b/storage/ndb/test/tools/old_dirs/hugoLoad/Makefile deleted file mode 100644 index 7c5756d0d41af02b0ffa3d1a31c2453fa17ed39a..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoLoad/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoLoad - -# Source files of non-templated classes (.C files) -SOURCES = hugoLoad.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/tools/old_dirs/hugoLockRecords/Makefile b/storage/ndb/test/tools/old_dirs/hugoLockRecords/Makefile deleted file mode 100644 index 3235750cbf82598c3063a43283bd76449a9bcf6b..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoLockRecords/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoLockRecords - -SOURCES := hugoLockRecords.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/hugoPkDelete/Makefile b/storage/ndb/test/tools/old_dirs/hugoPkDelete/Makefile deleted file mode 100644 index e6d53611c54b2ec32108454c3c807bf5758a5c86..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoPkDelete/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoPkDelete - -SOURCES := hugoPkDel.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/hugoPkRead/Makefile b/storage/ndb/test/tools/old_dirs/hugoPkRead/Makefile deleted file mode 100644 index 03580dc0d18ec824244a5a773c2abba623f19a9e..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoPkRead/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoPkRead - -SOURCES := hugoPkRead.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/hugoPkReadRecord/Makefile b/storage/ndb/test/tools/old_dirs/hugoPkReadRecord/Makefile deleted file mode 100644 index 158a79a5666e5cd7d48490a394595093bbbfc614..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoPkReadRecord/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoPkReadRecord - -# Source files of non-templated classes (.C files) -SOURCES = hugoPkReadRecord.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/tools/old_dirs/hugoPkUpdate/Makefile b/storage/ndb/test/tools/old_dirs/hugoPkUpdate/Makefile deleted file mode 100644 index 48795b62206d5ee07c7ee0b5849e58ede560fa70..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoPkUpdate/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoPkUpdate - -SOURCES := hugoPkUpd.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/hugoScanRead/Makefile b/storage/ndb/test/tools/old_dirs/hugoScanRead/Makefile deleted file mode 100644 index b88377c299eff49f900b1ddd95f51cdf3c77b73b..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoScanRead/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoScanRead - -SOURCES := hugoScanRead.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/hugoScanUpdate/Makefile b/storage/ndb/test/tools/old_dirs/hugoScanUpdate/Makefile deleted file mode 100644 index ec0e07bfd842139c02967789729fbbd2e4545463..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/hugoScanUpdate/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := hugoScanUpdate - -SOURCES := hugoScanUpd.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/restart/Makefile b/storage/ndb/test/tools/old_dirs/restart/Makefile deleted file mode 100644 index 05d9e98c5bc0d1c5aabc518af8c5a6dad27e8a0c..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/restart/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := restart - -# Source files of non-templated classes (.C files) -SOURCES = restart.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/test/tools/old_dirs/transproxy/Makefile b/storage/ndb/test/tools/old_dirs/transproxy/Makefile deleted file mode 100644 index d6a76ed2e3df2266d6e7c82c2814bb9a2ffdbf49..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/transproxy/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -include .defs.mk - -TYPE = - -BIN_TARGET = transproxy - -SOURCES = transproxy.cpp - -CCFLAGS_LOC +=\ - -I$(NDB_TOP)/include/kernel \ - -I$(NDB_TOP)/include/mgmcommon \ - -I$(NDB_TOP)/src/common/mgmcommon \ - -I$(NDB_TOP)/src/mgmsrv - -LIBS_LOC +=\ - -L$(NDB_TOP)/lib - -LIBS_SPEC +=\ - $(NDB_TOP)/src/mgmsrv/InitConfigFileParser.o \ - $(NDB_TOP)/src/mgmsrv/Config.o \ - $(NDB_TOP)/src/mgmsrv/Container.o \ - $(NDB_TOP)/src/mgmsrv/Str.o \ - $(NDB_TOP)/src/mgmsrv/convertStrToInt.o \ - -lNDB_API \ - -leventlogger \ - -llogger \ - -lportlib - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/verify_index/Makefile b/storage/ndb/test/tools/old_dirs/verify_index/Makefile deleted file mode 100644 index f6b31e4dc8e4c4eaaa22182206686810b5e7dca5..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/verify_index/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := verify_index - -SOURCES := verify_index.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/test/tools/old_dirs/waiter/waiter.cpp b/storage/ndb/test/tools/old_dirs/waiter/waiter.cpp deleted file mode 100644 index d57daff3aea7aa4673a254a6309e8f26e54d140d..0000000000000000000000000000000000000000 --- a/storage/ndb/test/tools/old_dirs/waiter/waiter.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#include "mgmapi.h" -#include <string.h> -#include <NdbMain.h> -#include <NdbOut.hpp> -#include <NdbSleep.h> -#include <getarg.h> - - -#include <NdbRestarter.hpp> -#include <NDBT.hpp> - -int main(int argc, const char** argv){ - - const char* _hostName = NULL; - int _help = 0; - - struct getargs args[] = { - { "usage", '?', arg_flag, &_help, "Print help", "" } - }; - int num_args = sizeof(args) / sizeof(args[0]); - int optind = 0; - char desc[] = - "hostname:port\n"\ - "This program will connect to the mgmsrv of a NDB cluster.\n"\ - "It will then wait for all nodes to be started\n"; - - if(getarg(args, num_args, argc, argv, &optind) || _help) { - arg_printusage(args, num_args, argv[0], desc); - return NDBT_ProgramExit(NDBT_WRONGARGS); - } - _hostName = argv[optind]; - - NdbRestarter restarter(_hostName); - - if (restarter.waitClusterStarted() != 0) - return NDBT_ProgramExit(NDBT_FAILED); - - return NDBT_ProgramExit(NDBT_OK); -} diff --git a/storage/ndb/tools/listTables.cpp b/storage/ndb/tools/listTables.cpp index 49a58122c61e388d41861c080a31c9b6ffcdbf91..ef51b66bb10116e84f5f6c1580804047af23a3d3 100644 --- a/storage/ndb/tools/listTables.cpp +++ b/storage/ndb/tools/listTables.cpp @@ -31,6 +31,7 @@ static Ndb_cluster_connection *ndb_cluster_connection= 0; static Ndb* ndb = 0; static const NdbDictionary::Dictionary * dic = 0; static int _unqualified = 0; +static int _parsable = 0; static void fatal(char const* fmt, ...) @@ -76,10 +77,13 @@ list(const char * tabname, if (dic->listIndexes(list, tabname) == -1) fatal_dict("listIndexes"); } - if (ndb->usingFullyQualifiedNames()) - ndbout_c("%-5s %-20s %-8s %-7s %-12s %-8s %s", "id", "type", "state", "logging", "database", "schema", "name"); - else - ndbout_c("%-5s %-20s %-8s %-7s %s", "id", "type", "state", "logging", "name"); + if (!_parsable) + { + if (ndb->usingFullyQualifiedNames()) + ndbout_c("%-5s %-20s %-8s %-7s %-12s %-8s %s", "id", "type", "state", "logging", "database", "schema", "name"); + else + ndbout_c("%-5s %-20s %-8s %-7s %s", "id", "type", "state", "logging", "name"); + } for (unsigned i = 0; i < list.count; i++) { NdbDictionary::Dictionary::List::Element& elt = list.elements[i]; char type[100]; @@ -170,9 +174,19 @@ list(const char * tabname, } } if (ndb->usingFullyQualifiedNames()) - ndbout_c("%-5d %-20s %-8s %-7s %-12s %-8s %s", elt.id, type, state, store, (elt.database)?elt.database:"", (elt.schema)?elt.schema:"", elt.name); - else - ndbout_c("%-5d %-20s %-8s %-7s %s", elt.id, type, state, store, elt.name); + { + if (_parsable) + ndbout_c("%d\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'", elt.id, type, state, store, (elt.database)?elt.database:"", (elt.schema)?elt.schema:"", elt.name); + else + ndbout_c("%-5d %-20s %-8s %-7s %-12s %-8s %s", elt.id, type, state, store, (elt.database)?elt.database:"", (elt.schema)?elt.schema:"", elt.name); + } + else + { + if (_parsable) + ndbout_c("%d\t'%s'\t'%s'\t'%s'\t'%s'", elt.id, type, state, store, elt.name); + else + ndbout_c("%-5d %-20s %-8s %-7s %s", elt.id, type, state, store, elt.name); + } } } @@ -196,6 +210,9 @@ static struct my_option my_long_options[] = { "unqualified", 'u', "Use unqualified table names", (gptr*) &_unqualified, (gptr*) &_unqualified, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, + { "parsable", 'p', "Return output suitable for mysql LOAD DATA INFILE", + (gptr*) &_parsable, (gptr*) &_parsable, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; static void usage() diff --git a/storage/ndb/tools/old_dirs/copy_tab/Makefile b/storage/ndb/tools/old_dirs/copy_tab/Makefile deleted file mode 100644 index 4ad33a26652aff2e3f35fec2057ee9dc0758e704..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/copy_tab/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := copy_tab - -SOURCES := copy_tab.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/cpcc/Makefile b/storage/ndb/tools/old_dirs/cpcc/Makefile deleted file mode 100644 index 78f8c61e464516a88d880b79f21793415463584c..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/cpcc/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include .defs.mk - -TYPE = util - -BIN_TARGET = ndb_cpcc - -SOURCES = cpcc.cpp -OBJECTS_LOC = $(call fixpath,$(NDB_TOP)/src/mgmclient/CpcClient.o) - -CFLAGS_cpcc.cpp := -I$(call fixpath,$(NDB_TOP)/src/mgmclient) - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/create_index/Makefile b/storage/ndb/tools/old_dirs/create_index/Makefile deleted file mode 100644 index 38f2df970c4ee4060a48f5bdd09e1075ff9e6e27..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/create_index/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := create_index - -# Source files of non-templated classes (.C files) -SOURCES = create_index.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/tools/old_dirs/delete_all/Makefile b/storage/ndb/tools/old_dirs/delete_all/Makefile deleted file mode 100644 index 1cae240eb8fe4f7ed796ae8eb5d940024751b39c..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/delete_all/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := delete_all - -SOURCES := delete_all.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/desc/Makefile b/storage/ndb/tools/old_dirs/desc/Makefile deleted file mode 100644 index 614984cfd35ce4c71cc52c85f69e10e6cfd12a8a..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/desc/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := desc - -SOURCES := desc.C - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/drop_index/Makefile b/storage/ndb/tools/old_dirs/drop_index/Makefile deleted file mode 100644 index 969bee51064ce2a5e96b2918d5b26107fcbc9cdb..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/drop_index/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := drop_index - -# Source files of non-templated classes (.C files) -SOURCES = drop_index.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/tools/old_dirs/drop_tab/Makefile b/storage/ndb/tools/old_dirs/drop_tab/Makefile deleted file mode 100644 index d7b21fe982cd8ccca88c0da2ac74819921490966..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/drop_tab/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := drop_tab - -# Source files of non-templated classes (.C files) -SOURCES = drop_tab.cpp - -include $(NDB_TOP)/Epilogue.mk - diff --git a/storage/ndb/tools/old_dirs/list_tables/Makefile b/storage/ndb/tools/old_dirs/list_tables/Makefile deleted file mode 100644 index b60f161ee68e5e26347640f205cb0ae736ba4c95..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/list_tables/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE = ndbapitest - -BIN_TARGET = list_tables - -SOURCES = listTables.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/ndbnet/Makefile.PL b/storage/ndb/tools/old_dirs/ndbnet/Makefile.PL deleted file mode 100644 index 4b27a17de154671ff5c3984a1c179e8dfee62013..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/Makefile.PL +++ /dev/null @@ -1,158 +0,0 @@ -# -*- perl -*- - -use strict; -use Config; -use ExtUtils::MakeMaker qw(WriteMakefile); -use Test::Harness; - -require 5.005; - -my $base; -if ($base ||= $ENV{NDB_BASE}) { - warn "Using NDB_BASE=$base\n"; -} -$base or die "FATAL: need env.variable NDB_BASE\n"; - -my $top; -if ($top ||= $ENV{NDB_TOP}) { - warn "Using NDB_TOP=$top\n"; -} -$top or die "FATAL: need env.variable NDB_TOP\n"; - -my @scripts = qw(ndbnet.pl ndbnetd.pl); - -for my $f (@scripts) { - my $p = $f; - $p =~ s/\.pl$//; - unlink("$p.sh"); - open(G, ">$p.sh") or die "$p.sh: $!"; - if ($Config{osname} ne 'MSWin32') { - print G <<END; -#! /bin/sh - -# installed in \$NDB_BASE -# selects which $p to run (normally from latest release) -# created in source directory by "make install-base" - -NDB_BASE=$base -export NDB_BASE - -PATH=\$NDB_BASE/bin:\$PATH -export PATH - -LD_LIBRARY_PATH=\$NDB_BASE/lib:\$LD_LIBRARY_PATH -export LD_LIBRARY_PATH - -PERL5LIB=\$NDB_BASE/lib/perl5:\$PERL5LIB -export PERL5LIB - -NDB_TOP=$top -export NDB_TOP - -PATH=\$NDB_TOP/bin:\$PATH -export PATH - -LD_LIBRARY_PATH=\$NDB_TOP/lib:\$LD_LIBRARY_PATH -export LD_LIBRARY_PATH - -PERL5LIB=\$NDB_TOP/lib/perl5:\$PERL5LIB -export PERL5LIB - -exec perl \$NDB_TOP/lib/perl5/$p.pl "\$@" -END - } else { - print G <<END; -rem installed in \$NDB_BASE -rem selects which $p to run (normally from latest release) -rem created in source directory by "make install-base" - -set NDB_BASE=$base -set PATH=%NDB_BASE%\\bin;%PATH% -set PERL5LIB=%NDB_BASE%\\lib\\perl5;%PERL5LIB% -set NDB_TOP=$top -set PATH=%NDB_TOP%\\bin;%PATH% -set PERL5LIB=%NDB_TOP%\\lib\\perl5;%PERL5LIB% -perl %NDB_TOP%\\lib\\perl5\\$p.pl %1 %2 %3 %4 %5 %6 %7 %8 %9 -END - } - close G; -} - -unshift(@INC, 'lib'); -$main::onlymodules = 1; -require lib::NDB::Util; -require lib::NDB::Net; -require lib::NDB::Run; - -my @modules = ( - q(NDB::Util), - @NDB::Util::modules, - q(NDB::Net), - @NDB::Net::modules, - q(NDB::Run), - @NDB::Run::modules, -); - -my @modulepaths = map { s!::!/!g; s!$!.pm!; $_ } @modules; - -my %pm = (); -for my $pl (@scripts) { - $pm{"$pl"} = "\$(INST_LIBDIR)/$pl"; -} -for my $pm (@modulepaths) { - $pm{"lib/$pm"} = "\$(INST_LIBDIR)/$pm"; -} - -WriteMakefile( - NAME=> 'NDB', - PM=> \%pm, - EXE_FILES=> [ qw(ndbrun) ], -# install - PREFIX=> $top, - LIB=> "$top/lib/perl5", -); - -sub MY::postamble { - my $mk = ""; - $mk .= "\n" . <<END; -# NDB make targets -libs: all install -bins: -links: -depend: -clean_dep: -#clean: -cleanall: -tidy: -#distclean: -check: - perl -Ilib -cw -e "use NDB::Util" - perl -Ilib -cw -e "use NDB::Net" - perl -Ilib -cw -e "use NDB::Run" - perl -Ilib -cw ndbnetd.pl - perl -Ilib -cw ndbnet.pl -END - if ($Config{osname} ne 'MSWin32') { - $mk .= "\n" . <<END; -# install startup scripts to \$NDB_BASE -install-base: - test "\$\$NDB_BASE" - mkdir -p \$\$NDB_BASE/bin - rm -f \$\$NDB_BASE/bin/ndbnet - cp -p ndbnet.sh \$\$NDB_BASE/bin/ndbnet - chmod +x \$\$NDB_BASE/bin/ndbnet - rm -f \$\$NDB_BASE/bin/ndbnetd - cp -p ndbnetd.sh \$\$NDB_BASE/bin/ndbnetd - chmod +x \$\$NDB_BASE/bin/ndbnetd -END - } else { - $mk .= "\n" . <<END; -install-base: - copy ndbnet.sh $base\\bin\\ndbnet.bat - copy ndbnetd.sh $base\\bin\\ndbnetd.bat -END - } - return $mk; -} - -1; diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net.pm deleted file mode 100644 index 3b7b16bb3cf913a2d440d6d4fb731923de13440b..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net.pm +++ /dev/null @@ -1,42 +0,0 @@ -package NDB::Net; - -use strict; -use Carp; -require Exporter; - -use NDB::Util; - -use vars qw(@ISA @EXPORT @EXPORT_OK); -@ISA = qw(Exporter); - -use vars qw(@modules); -@modules = qw( - NDB::Net::Base - NDB::Net::Client - NDB::Net::Command - NDB::Net::Config - NDB::Net::Database - NDB::Net::Env - NDB::Net::Node - NDB::Net::NodeApi - NDB::Net::NodeDb - NDB::Net::NodeMgmt - NDB::Net::Server - NDB::Net::ServerINET - NDB::Net::ServerUNIX -); - -return 1 if $main::onlymodules; - -for my $module (@modules) { - eval "require $module"; - $@ and confess "$module $@"; -} - -for my $module (@modules) { - eval "$module->initmodule"; - $@ and confess "$module $@"; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Base.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Base.pm deleted file mode 100644 index 900446138e889478692491c8785951bcd0af1cd1..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Base.pm +++ /dev/null @@ -1,12 +0,0 @@ -package NDB::Net::Base; - -use strict; -use Carp; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Client.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Client.pm deleted file mode 100644 index d34a18d63af59db5655f4234b5ecd1ad3f0aa146..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Client.pm +++ /dev/null @@ -1,252 +0,0 @@ -package NDB::Net::Client; - -use strict; -use Carp; -use POSIX(); -use Socket; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -my %clientcache = (); -my $clientid = 0; - -NDB::Net::Client->attributes( - id => sub { /^\d+$/ }, - addtime => sub { /^\d+$/ }, - state => sub { /^(new|input|cmd)$/ }, - socket => sub { ref && $_->isa('NDB::Util::Socket') }, - serversocket => sub { ref && $_->isa('NDB::Util::Socket') }, - serverlock => sub { ref && $_->isa('NDB::Util::Lock') }, - event => sub { ref && $_->isa('NDB::Util::Event') }, - context => sub { defined }, - cmd => sub { ref && $_->isa('NDB::Net::Command') }, -); - -sub desc { - my $client = shift; - my $id = $client->getid; - my $fileno = fileno($client->getsocket->getfh); - return "client $id fd=$fileno"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $client = $class->SUPER::new(%attr); - $client->setid(++$clientid) - or $log->push, return undef; - $client->setaddtime(time) - or $log->push, return undef; - $client->setstate(q(new)) - or $log->push, return undef; - $client->setsocket($attr{socket}) - or $log->push, return undef; - $client->setserversocket($attr{serversocket}) - or $log->push, return undef; - $client->setserverlock($attr{serverlock}) - or $log->push, return undef; - $client->setevent($attr{event}) - or $log->push, return undef; - $client->setcontext($attr{context}) - or $log->push, return undef; - $log->put("add")->push($client)->info; - $clientcache{$client->getid} = $client; - return $client; -} - -sub listall { - my $class = shift; - my $list = []; - for my $id (sort { $a <=> $b } keys %clientcache) { - my $client = $clientcache{$id}; - push(@$list, $client); - } - return $list; -} - -sub exists { - my $client = shift; - return exists($clientcache{$client->getid}); -} - -sub delete { - my $client = shift; - $log->put("delete")->push($client)->info; - $client->getevent->clear($client->getsocket, 'r'); - $client->getsocket->close; - delete $clientcache{$client->getid} or confess 'oops'; -} - -sub deleteother { - my $thisclient = shift; - for my $id (sort { $a <=> $b } keys %clientcache) { - my $client = $clientcache{$id}; - if ($client ne $thisclient) { - $client->delete; - } - } -} - -sub deleteall { - my $class = shift; - for my $id (sort { $a <=> $b } keys %clientcache) { - my $client = $clientcache{$id}; - $client->delete; - } -} - -# processing - -sub processnew { - my $client = shift; - @_ == 0 or confess 0+@_; - $log->put("process new")->push($client)->debug; - $client->getevent->set($client->getsocket, 'r'); - $log->attachuser(io => $client->getsocket); - $client->setstate(q(input)) - or $log->push, return undef; - return 1; -} - -sub processinput { - my $client = shift; - @_ == 0 or confess 0+@_; - $log->put("process input")->push($client)->debug; - my $line = $client->getsocket->readline; - if (! defined($line)) { - $log->push; - return undef; - } - if (length($line) == 0) { - if ($client->getsocket->getreadend) { - $log->put("no command")->push($client); - return undef; - } - $log->put("wait for input")->push($client)->debug; - return 1; - } - $log->put("got line: $line")->push($client)->info; - $client->getevent->clear($client->getsocket, 'r'); - my $cmd = NDB::Net::Command->new(line => $line) - or $log->push, return undef; - $log->put("command received")->push($cmd)->push($client)->debug; - $client->setcmd($cmd) - or $log->push, return undef; - $client->setstate(q(cmd)) - or $log->push, return undef; - return 1; -} - -sub processcmd { - my $client = shift; - @_ == 0 or confess 0+@_; - $log->put("process cmd")->push($client)->debug; - my $cmd = $client->getcmd; - my $context = $client->getcontext; - my $name_fg = "cmd_" . $cmd->getname . "_fg"; - my $name_bg = "cmd_" . $cmd->getname . "_bg"; - my $fg = $context->can($name_fg); - my $bg = $context->can($name_bg); - unless ($fg || $bg) { - $log->put("%s: unimplemented", $cmd->getname); - return undef; - } - my $ret; - if ($fg) { - $log->put($name_fg)->push($cmd)->push($client)->info; - if (! ref($context)) { - $ret = &$fg($cmd); - } - else { - $ret = &$fg($context, $cmd); - } - defined($ret) - or $log->push, return undef; - if (! $bg) { - $log->push($name_fg)->putvalue($ret)->user; - return 1; - } - } - if ($bg) { - $log->put($name_bg)->push($cmd)->push($client)->info; - my $pid = fork; - if (! defined($pid)) { - $log->put("fork failed: $!"); - return undef; - } - if ($pid == 0) { - $client->getserversocket->close; - $client->getserverlock->close; - $client->deleteother; - if (! ref($context)) { - $ret = &$bg($cmd); - } - else { - $ret = &$bg($context, $cmd); - } - if (! $ret) { - $log->push($client)->error; - $log->push($name_bg)->putvalue(undef)->user; - exit(1); - } - $log->push($name_bg)->putvalue($ret)->user; - exit(0); - } - } - return 1; -} - -sub process { - my $client = shift; - @_ == 0 or confess 0+@_; - try: { - if ($client->getstate eq q(new)) { - $client->processnew - or $log->push, last try; - } - if ($client->getstate eq q(input)) { - $client->processinput - or $log->push, last try; - } - if ($client->getstate eq q(cmd)) { - $client->processcmd - or $log->push, last try; - $log->detachuser; - $client->delete; - return 1; - } - return 1; - } - $log->push($client)->error; - $log->putvalue(undef)->user; - $log->detachuser; - $client->delete; - return undef; -} - -sub processall { - my $class = shift; - @_ == 0 or confess 0+@_; - my $list = $class->listall; - for my $client (@$list) { - $client->process; - } - while ((my $pid = waitpid(-1, &POSIX::WNOHANG)) > 0) { - $log->put("harvested pid=$pid")->info; - } -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Command.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Command.pm deleted file mode 100644 index 30145d09fa937d11bddf7d8a00bab7d3f53d80ed..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Command.pm +++ /dev/null @@ -1,641 +0,0 @@ -package NDB::Net::Command; - -use strict; -use Carp; -use Getopt::Long; -use Text::ParseWords (); -use Text::Tabs (); - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -my($cmdtab, $aliastab); - -NDB::Net::Command->attributes( - name => sub { /^\s*\w+\b/ }, - argv => sub { ref eq 'ARRAY' }, - optspec => sub { ref eq 'ARRAY' }, - argspec => sub { /^\d+$/ || ref eq 'CODE' }, - short => sub { defined && ! ref }, - help => sub { defined && ! ref }, - opts => sub { ref eq 'HASH' }, - args => sub { ref eq 'ARRAY' }, -); - -sub desc { - my $cmd = shift; - return "command " . $cmd->getname("?"); -}; - -sub processname { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my $cmdargv = $cmd->getargv; - my $name = shift(@$cmdargv); - my %seen = (); - while ((my $entry) = grep($name eq $_->{name}, @$aliastab)) { - $seen{$name}++ && last; - unshift(@$cmdargv, split(' ', $entry->{value})); - $name = shift(@$cmdargv); - } - if ((my $entry) = grep($_->{name} eq $name, @$cmdtab)) { - $cmd->setname($entry->{name}) - or $log->push, return undef; - $cmd->setoptspec($entry->{optspec}) - or $log->push, return undef; - $cmd->setargspec($entry->{argspec}) - or $log->push, return undef; - } - else { - $log->put("$name: undefined")->push($cmd); - return undef; - } - return 1; -} - -sub getopttype { - my $cmd = shift; - my($key) = @_; - if (grep(/^$key$/, @{$cmd->getoptspec})) { - return 1; - } - if (grep(/^$key=/, @{$cmd->getoptspec})) { - return 2; - } - return undef; -} - -sub processargv { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my $cmdargv = $cmd->getargv; - my @newargv = (); - while (@$cmdargv) { - my $v = shift(@$cmdargv); - if (! defined($v)) { - next; - } - if (ref($v) eq 'ARRAY') { - unshift(@$cmdargv, @$v); # push back - next; - } - if (ref($v) eq 'HASH') { - for my $k (sort keys %$v) { - if ($cmd->getopttype($k) == 1) { - push(@newargv, "--$k"); - next; - } - if ($cmd->getopttype($k) == 2) { - push(@newargv, "--$k", $v->{$k}); - next; - } - $log->put("$k: undefined option")->push($cmd); - return undef; - } - next; - } - if (ref($v)) { - confess 'oops'; - } - push(@newargv, $v); - } - push(@$cmdargv, @newargv); - return 1; -} - -sub processopts { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my $cmdargv = $cmd->getargv; - local(@ARGV) = @$cmdargv; - try: { - local $SIG{__WARN__} = sub { - my $errstr = "@_"; - while (chomp($errstr)) {} - $log->put($errstr)->push($cmd); - }; - $cmd->setopts({}) - or $log->push, return undef; - Getopt::Long::Configure(qw( - default no_getopt_compat no_ignore_case - )); - GetOptions($cmd->getopts, @{$cmd->getoptspec}) - or return undef; - } - $cmd->setargs([ @ARGV ]) - or $log->push, return undef; - return 1; -} - -sub processargs { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my $cmdargs = $cmd->getargs; - if ($cmd->getargspec =~ /^\d+$/) { - if (@$cmdargs != $cmd->getargspec) { - $log->put("invalid arg count %d != %d", - scalar(@$cmdargs), $cmd->getargspec)->push($cmd); - return undef; - } - } - if (ref($cmd->getargspec) eq 'CODE') { - local $_ = scalar(@$cmdargs); - if (! &{$cmd->getargspec}()) { - $log->put("invalid arg count %d", - scalar(@$cmdargs))->push($cmd); - return undef; - } - } - return 1; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my %attr = @_; - my $cmd = $class->SUPER::new(%attr); - my $cmdargv = []; - $cmd->setargv($cmdargv) - or $log->push, return undef; - my $line = $attr{line}; - my $argv = $attr{argv}; - defined($line) != defined($argv) # exactly one - or confess 'oops'; - if (defined($line)) { - ! ref($line) or confess 'oops'; - push(@$cmdargv, Text::ParseWords::shellwords($line)); - } - if (defined($argv)) { - ref($argv) eq 'ARRAY' or confess 'oops'; - push(@$cmdargv, @$argv); - } - if (! @$cmdargv) { - $log->put("empty command"); - return undef; - } - $cmd->processname - or $log->push, return undef; - $cmd->processargv - or $log->push, return undef; - $cmd->processopts - or $log->push, return undef; - $cmd->processargs - or $log->push, return undef; - return $cmd; -} - -sub getline { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my @text = ($cmd->getname); - for my $k (sort keys %{$cmd->getopts}) { - if ($cmd->getopttype($k) == 1) { - push(@text, "--$k"); - next; - } - if ($cmd->getopttype($k) == 2) { - push(@text, "--$k", quotemeta($cmd->getopts->{$k})); - next; - } - confess 'oops'; - } - for my $s (@{$cmd->getargs}) { - push(@text, quotemeta($s)); - } - return "@text"; -} - -sub setopt { - my $cmd = shift; - my($key, $value) = @_; - if ($cmd->getopttype($key) == 1) { - @_ == 1 or confess 0+@_; - $cmd->getopts->{$key} = 1; - } - elsif ($cmd->getopttype($key) == 2) { - @_ == 2 or confess 0+@_; - $cmd->getopts->{$key} = $value; - } - else { - confess 'oops'; - } -} - -sub getopt { - my $cmd = shift; - @_ == 1 or confess 0+@_; - my($key) = @_; - $cmd->getopttype($key) or confess 'oops'; - return $cmd->getopts->{$key}; -} - -sub setarg { - my $cmd = shift; - @_ == 2 or confess 0+@_; - my($idx, $value) = @_; - $cmd->getargs->[$idx] = $value; -} - -sub getarg { - my $cmd = shift; - @_ == 1 or confess 0+@_; - my($idx) = @_; - return $cmd->getargs->[$idx]; -} - -sub getarglist { - my $cmd = shift; - @_ == 1 or confess 0+@_; - my($idx) = @_; - my @args = @{$cmd->getargs}; - @args = @args[$idx..$#args]; - return \@args; -} - -sub helptext { - my $cmd = shift; - @_ <= 1 or confess 0+@_; - my $name = $cmd->getargs->[0]; - my $text = ""; - my $indent = " "x4; - if (defined($name)) { - for my $entry (@$aliastab) { - if ($entry->{name} eq $name) { - $text .= "alias $name=\"$entry->{value}\"\n"; - ($name) = split(' ', $entry->{value}); - last; - } - } - } - else { - $text .= "COMMANDS\n"; - } - for my $entry (@$cmdtab) { - if (defined($name)) { - if ($entry->{name} eq $name) { - $text .= uc($name) . "\n"; - for my $t (split(/\n/, $entry->{help})) { - $text .= $indent; - $text .= Text::Tabs::expand($t) . "\n"; - } - last; - } - } - else { - $text .= $indent; - $text .= sprintf("%-16s%s\n", $entry->{name}, $entry->{short}); - } - } - if (! $text) { - $log->put("$name: undefined"); - return undef; - } - return $text; -} - -sub aliastext { - my $cmd = shift; - @_ == 0 or confess 0+@_; - my $text = ""; - my $indent = " "x4; - $text .= "ALIASES\n"; - for my $entry (@$aliastab) { - $text .= $indent; - $text .= sprintf("%-16s%s\n", $entry->{name}, $entry->{value}); - } - return $text; -} - -# commands -# name command name (unique) -# optspec option spec in Getopt::Long style -# argspec arg count (number or sub) -# short one line summary -# help long help text -# opts options HASH (after parse) -# args arguments ARRAY (after parse) - -$cmdtab = [ - { - name => "help", - optspec => [ qw() ], - argspec => sub { $_[0] <= 1 }, - short => "print help (try: h h)", - help => <<END, -help [name] -name command name or alias - -Print help summary or longer help text for one command. - -General: - -Options can be placed anywhere on command line and can be abbreviated. -Example: "start db11 -i" instead of "start --init_rm db11". - -Several commands have internal option --local which makes current server -do the work, instead of passing it to other servers. This option should -not be used explicitly, except for testing. -END - }, - { - name => "alias", - optspec => [ qw() ], - argspec => 0, - short => "list aliases", - help => <<END, -alias - -List built-in aliases. New ones cannot be defined (yet). -END - }, - { - name => "quit", - optspec => [ qw() ], - argspec => 0, - short => "exit ndbnet", - help => <<END, -quit - -Exit ndbnet client. -END - }, - { - name => "server", - optspec => [ qw(all direct pass parallel script=s local) ], - argspec => sub { $_ >= 1 }, - short => "net server commands", - help => <<END, -server action id... [options] -action start restart stop ping -id net server id from net config ---all do all servers listed in net config ---direct do not use a server ---pass pass current ndb environment to remote command ---parallel run in parallel when possible ---script path remote script instead of "ndbnetd" ---local for internal use by servers - -Each host needs one net server (ndbnetd). It should be started -from latest ndb installation, for example at system boot time. -A "server ping" is used to check that all servers are up (option ---all is added if no server ids are given). - -Other actions are mainly for testing. A "server start" tries to -start servers via "ssh". This does not work if "ssh" is not allowed -or if the remote command does not get right environment. - -Option --direct makes this ndbnet client do the work. It is assumed -for "server start" and it requires that a local net config exists. -Option --pass is useful in a homogeneous (NFS) environment. - -There are aliases "startserver" for "server start", etc. -END - }, - { - name => "start", - optspec => [ qw(init_rm nostart stop kill config old home=s clean proxy=s) ], - argspec => 1, - short => "start database", - help => <<END, -start dbname [options] -dbname database name ---init_rm destroy existing database files on each node ---nostart for DB nodes only do "ndb -n" ---stop do "stop dbname" first ---kill do "kill dbname" first ---config create run config but start no processes ---old use existing config files ---home dir override home (product dir) from config ---clean passed to startnode ---proxy list generate proxy ports (read the source) - -Start a database as follows: - -- start mgmt servers on all mgmt nodes -- start ndb processes on all db nodes -- send "all start" to first mgmt server (redundant) -- start processes on all api nodes (if runtype!="manual") - -Older database versions (v1.0) are started similarly except that there -are no management servers. - -The --proxy option is used for testing network problems. -END - }, - { - name => "startnode", - optspec => [ qw(init_rm nostart config old run=s home=s local clean proxy=s) ], - argspec => 2, - short => "start database node", - help => <<END, -startnode dbname nodeid [options] -dbname database name -nodeid node number ---init_rm destroy existing database files (if db node) ---nostart if DB node only do "ndb -n" ---config create run config but start no processes ---old use existing config files ---run cmd run this shell command, default from config file ---home dir override home (product dir) from config ---local node must be local to this ndbnet server ---clean remove old node dir first ---proxy list processed by mgmt nodes, see "start" command - -Start the process on one database node. The node can be of any type -(mgmt/db/api). If already running, does nothing. - -The --run option specifies a simple shell command (not pipeline etc). -Defaults: - -- mgmt node => mgmtsrvr -p port -l Ndb.cfg -i config.txt -c config.bin - where port comes from ndbnet.xml -- db node => ndb -- api node => based on ndbnet config, default empty - -The node server exits when the command exits (unless runtype is set to -auto). Command exit status is not available. - -Used internally by db "start" command. -END - }, - { - name => "stop", - optspec => [ qw() ], - argspec => 1, - short => "stop database", - help => <<END, -stop dbname [options] -dbname database name - -Stop a database as follows (see also "stopnode" command): - -- send SIGTERM to api processes, wait for them to exit -- send "all stop" command to first mgmt server -- wait for db processes to exit -- send "quit" to mgmt servers, wait for them to exit -END - }, - { - name => "stopnode", - optspec => [ qw(local) ], - argspec => 2, - short => "stop process on one node", - help => <<END, -stopnode dbname nodeid [options] -dbname database name -nodeid node number ---local node must be local to this server - -Stop process on one database node. Action depends on node type: - -- api node: send SIGTERM to the process, wait for it to exit -- db node: no action, wait for the ndb process to exit -- mgmt node: send "quit" command to mgmt server, wait for it to exit - -Used internally by db "stop" command. -END - }, - { - name => "kill", - optspec => [ qw() ], - argspec => 1, - short => "kill processes on all nodes", - help => <<END, -kill dbname [options] -dbname database name - -Send SIGKILL to processes on all nodes and wait for them to exit. -END - }, - { - name => "killnode", - optspec => [ qw(local) ], - argspec => 2, - short => "kill process on one node", - help => <<END, -killnode dbname nodeid [options] -dbname database name -nodeid node number ---local node must be local to this server - -Send SIGKILL to the process on the node and wait for it to exit. - -Used internally by db "kill" command. -END - }, - { - name => "statnode", - optspec => [ qw(local) ], - argspec => 2, - short => "get node run status (internal)", - help => <<END, -statnode dbname nodeid [options] -dbname database name -nodeid node number ---local node must be local to this server - -Get node run status (up/down) as a process. Used internally -and may not produce any output in ndbnet command. -END - }, - { - name => "list", - optspec => [ qw(quick short) ], - argspec => sub { 1 }, - short => "list databases", - help => <<END, -list [dbname] [options] -dbname database name, default is to list all ---quick only output config, do not query status ---short do list nodes - -List databases and nodes. Internally returns a data structure -of process and mgmt server status values for each node. Externally -(in ndbnet command) this is formatted as a listing. -END - }, - { - name => "writenode", - optspec => [ qw(wait=i local) ], - argspec => 3, - short => "write line of text to the process on a node", - help => <<END, -writenode dbname nodeid "some text" -dbname database name -nodeid node number -"some text" arbitrary text (quote if spaces) ---wait n wait n seconds for any response ---local node must be local to this server - -Write the text and a newline to the standard input of the process -running on the node. If wait > 0 is specified, prints whatever -the process wrote to stdout/stderr during that time. - -Used internally by "start" and other commands. -END - }, -]; - -# aliases -# name alias -# value expansion - -$aliastab = [ - { - name => "h", - value => "help", - }, - { - name => "q", - value => "quit", - }, - { - name => "EOF", - value => "quit", - }, - { - name => "startserver", - value => "server start", - }, - { - name => "ss", - value => "server start", - }, - { - name => "restartserver", - value => "server restart", - }, - { - name => "rss", - value => "server restart", - }, - { - name => "stopserver", - value => "server stop", - }, - { - name => "pingserver", - value => "server ping", - }, - { - name => "ps", - value => "server ping", - }, - { - name => "l", - value => "list", - }, -]; - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Config.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Config.pm deleted file mode 100644 index 4c5db3cd3f5d252713322b444ace3e4df16e76f1..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Config.pm +++ /dev/null @@ -1,235 +0,0 @@ -package NDB::Net::Config; - -use strict; -use Carp; -use Symbol; -use Socket; -use Errno; -use XML::Parser; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::Config->attributes( - file => sub { /^\S+$/ }, - loadtime => sub { /^\d+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $netcfg = $class->SUPER::new(%attr); - $netcfg->setfile($attr{file}) - or $log->put, return undef; - return $netcfg; -} - -sub desc { - my $netcfg = shift; - return $netcfg->getfile; -} - -use vars qw(@context); - -sub handle_start { - my($parser, $tag, %attr) = @_; - my $p = $context[-1]; - my $q = {}; - $p->{$tag} ||= []; - push(@{$p->{$tag}}, $q); - for my $k (keys %attr) { - $q->{$k} = $attr{$k}; - } - push(@context, $q); - return 1; -} - -sub handle_end { - my($parser, $tag, %attr) = @_; - pop(@context); - return 1; -} - -sub load { - my $netcfg = shift; - my $file = $netcfg->getfile; - my @s; - while (1) { - if (@s = stat($file)) { - last; - } - $log->put("$file: stat failed: $!"); - if (! $!{ESTALE}) { - return undef; - } - $log->put("(retry)")->info; - sleep 1; - } - if ($s[9] <= $netcfg->getloadtime(0)) { - return 1; - } - my $fh = gensym(); - if (! open($fh, "<$file")) { - $log->put("$file: open for read failed: $!"); - return undef; - } - my $text = ""; - my $line; - while (defined($line = <$fh>)) { - $text .= $line; - } - close($fh); - my $parser = XML::Parser->new( - ParseParamEnt => 1, - Handlers => { - Start => \&handle_start, - End => \&handle_end, - }, - ); - delete $netcfg->{config}; - local @context = ($netcfg); - $parser->parse($text); - $netcfg->{text} = $text; - $netcfg->{config} = $netcfg->{config}[0]; - $netcfg->setloadtime(time) - or $log->push, return undef; - NDB::Net::Server->deleteall; - NDB::Net::Database->deleteall; - NDB::Net::Node->deleteall; - return 1; -} - -sub getservers { - my $netcfg = shift; - @_ == 0 or confess 0+@_; - my $servers = []; - my $slist = $netcfg->{config}{server} || []; - for my $s (@$slist) { - my $server; - $server = NDB::Net::ServerINET->get($s->{id}); - if (! $server) { - $server = NDB::Net::ServerINET->new(%$s); - if (! $server) { - $log->push($netcfg)->warn; - next; - } - } - push(@$servers, $server); - } - return $servers; -} - -sub getdatabases { - my $netcfg = shift; - @_ == 0 or confess 0+@_; - my $databases = []; - my $dlist = $netcfg->{config}{database} || []; - for my $d (@$dlist) { - if ($d->{isproto} eq "y") { - next; - } - if ($d->{name} !~ /^\w(\w|-)*$/) { - $log->put("$d->{name}: invalid db name")->push($netcfg)->warn; - next; - } - my $db = $netcfg->getdatabase($d->{name}); - if (! $db) { - $log->push->warn; - next; - } - push(@$databases, $db); - } - return $databases; -} - -sub getdatabase { - my $netcfg = shift; - @_ == 1 or confess 0+@_; - my($name) = @_; - $netcfg->getservers or return undef; # cache them - my $default = $netcfg->{config}{default}[0] || {}; - my $db; - my $dlist = $netcfg->{config}{database} || []; - my $nlist; - for my $d (@$dlist) { - ($d->{name} ne $name) && next; - if ($d->{isproto} eq "y") { - next; - } - my %attr = (%$default, %$d); - $db = NDB::Net::Database->new(%attr); - if (! $db) { - $log->push($netcfg); - return undef; - } - if ($d->{proto}) { - if ($d->{isproto} eq "y") { - $log->put("$name: prototypes cannot be recursive"); - return undef; - } - for my $d2 (@$dlist) { - ($d2->{name} ne $d->{proto}) && next; - if ($d2->{isproto} ne "y") { - $log->put("$name: $d2->{name} is not a prototype"); - return undef; - } - if (! $d->{node}) { - $d->{node} = $d2->{node}; - } - last; - } - } - $nlist = $d->{node} || []; - last; - } - if (! $db) { - $log->put("$name: no such db")->push($netcfg); - return undef; - } - if (! @$nlist) { - $log->put("$name: empty node list")->push($netcfg); - return undef; - } - for my $n (@$nlist) { - my $node; - try: { - my $server = NDB::Net::Server->get($n->{server}) - or last try; - my %attr = (%$n, db => $db, server => $server); - my $type = $attr{type}; - if ($type eq 'db') { - $node = NDB::Net::NodeDb->new(%attr) - or last try; - } - if ($type eq 'mgmt') { - $node = NDB::Net::NodeMgmt->new(%attr) - or last try; - } - if ($type eq 'api') { - $node = NDB::Net::NodeApi->new(%attr) - or last try; - } - $log->put("bad node type '$type'"); - } - if (! $node) { - $log->push($netcfg); - $db->delete; - return undef; - } - } - return $db; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Database.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Database.pm deleted file mode 100644 index 7ea15be06502a819e038bf9475656c0c3b0d9cf0..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Database.pm +++ /dev/null @@ -1,321 +0,0 @@ -package NDB::Net::Database; - -use strict; -use Carp; -use Symbol; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -my %dbcache = (); - -NDB::Net::Database->attributes( - name => sub { s/^\s+|\s+$//g; /^\S+$/ && ! m!/! }, - comment => sub { defined }, - version => sub { /^\d+(\.\d+)*$/ }, - base => sub { $^O eq 'MSWin32' || m!^/\S+$! }, - home => sub { $^O eq 'MSWin32' || m!^/\S+$! }, - nodeport => sub { $_ > 0 }, -); - -sub desc { - my $db = shift; - return $db->getname; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $db = $class->SUPER::new(%attr); - $db->setname($attr{name}) - or $log->push, return undef; - if ($dbcache{$db->getname}) { - $log->put("duplicate db")->push($db); - return undef; - } - $db->setcomment($attr{comment}); - $db->setversion($attr{version}) - or $log->push, return undef; - if (defined($attr{base})) { - $db->setbase($attr{base}) - or $log->push, return undef; - } - if (defined($attr{home})) { - if ($^O ne 'MSWin32' && $attr{home} !~ m!^/! && $db->hasbase) { - $attr{home} = $db->getbase . "/$attr{home}"; - } - $db->sethome($attr{home}) - or $log->push, return undef; - } - if (defined($attr{nodeport})) { - $db->setnodeport($attr{nodeport}) - or $log->push, return undef; - } - if ($^O eq 'MSWin32' && ! $db->hasnodeport) { - $log->put("nodeport required on windows")->push($db), return undef; - } - $db->{nodehash} = {}; - $dbcache{$db->getname} = $db; - return $db; -} - -sub delete { - my $db = shift; - my $nodelist = $db->getnodelist('all'); - for my $node (@$nodelist) { - $node->delete; - } - delete $dbcache{$db->getname}; -} - -sub deleteall { - my $class = shift; - for my $name (sort keys %dbcache) { - my $db = $dbcache{$name}; - $db->delete; - } -} - -# assume numerical dot separated version numbers like 1.1.2 -sub cmpversion { - my $db = shift; - my $version = shift; - my @x = split(/\./, $db->getversion); - my @y = split(/\./, $version); - while (@x || @y) { - return -1 if $x[0] < $y[0]; - return +1 if $x[0] > $y[0]; - shift(@x); - shift(@y); - } - return 0; -} - -# nodes - -sub addnode { - my $db = shift; - @_ == 1 or confess 0+@_; - my($node) = @_; - unless (ref($node) && $node->isa('NDB::Net::Node')) { - confess 'oops'; - } - my $id = $node->getid; - if ($db->{nodehash}{$id}) { - $log->put("$id: duplicate node id")->push($db); - return undef; - } - $db->{nodehash}{$id} = $node; - return 1; -} - -sub getnode { - my $db = shift; - @_ == 1 or confess 0+@_; - my($id) = @_; - $id += 0; - my $node = $db->{nodehash}{$id}; - if (! $node) { - $log->put("$id: no such node id")->push($db); - return undef; - } - return $node; -} - -sub getnodelist { - my $db = shift; - @_ == 1 or confess 0+@_; - my($type) = @_; - $type =~ /^(all|mgmt|db|api)$/ or confess 'oops'; - my @nodes = (); - for my $id (sort { $a <=> $b } keys %{$db->{nodehash}}) { - my $node = $db->{nodehash}{$id}; - if ($type eq 'all' or $type eq $node->gettype) { - push(@nodes, $node); - } - } - return \@nodes; -} - -# start /stop - -sub start { - my $db = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - if ($opts->{stop} || $opts->{kill}) { - my $method = $opts->{stop} ? "stop" : "kill"; - my %opts = (); - $db->$method(\%opts) - or $log->push, return undef; - } - $log->put("start")->push($db)->info; - my $nodesmgmt = $db->getnodelist('mgmt'); - my $nodesdb = $db->getnodelist('db'); - my $nodesapi = $db->getnodelist('api'); - my $ret; - try: { - my %startopts = (); - for my $k (qw(local init_rm nostart config old home clean proxy)) { - $startopts{$k} = $opts->{$k} if defined($opts->{$k}); - } - my %writeopts = (); - for my $k (qw(local)) { - $writeopts{$k} = $opts->{$k} if defined($opts->{$k}); - } - if ($db->cmpversion("1.0") > 0) { - for my $node (@$nodesmgmt) { - $node->start(\%startopts) or last try; - } - for my $node (@$nodesdb) { - $node->start(\%startopts) or last try; - } - if (! $opts->{config}) { - for my $node (@$nodesmgmt) { # probably redundant - $node->write(\%writeopts, "all start") or last try; - last; - } - } - } - else { - for my $node (@$nodesdb) { - $node->start(\%startopts) or last try; - } - if (! $opts->{config}) { - for my $node (@$nodesdb) { # probably redundant - $node->write(\%writeopts, "start") or last try; - } - } - } - for my $node (@$nodesapi) { - my %apiopts = %startopts; - if ($node->getruntype eq 'manual') { - $apiopts{config} = 1; - } - $node->start(\%apiopts) or last try; - } - $ret = 1; - } - if (! $ret) { - $log->push("start failed")->push($db); - return undef; - } - my $msg = ! $opts->{config} ? "start done" : "config created"; - $log->put($msg)->push($db)->user; - return 1; -} - -sub stop { - my $db = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("stop")->push($db)->info; - my $nodesmgmt = $db->getnodelist('mgmt'); - my $nodesdb = $db->getnodelist('db'); - my $nodesapi = $db->getnodelist('api'); - my $ret; - try: { - for my $node (@$nodesapi) { - $node->stop($opts) or last try; - } - if ($db->cmpversion("1.0") > 0) { - for my $node (@$nodesmgmt) { - $node->write($opts, "all stop") or last try; - last; - } - for my $node (@$nodesdb) { - $node->stop($opts) or last try; - } - for my $node (@$nodesmgmt) { - $node->stop($opts) or last try; - } - } - else { - for my $node (@$nodesdb) { - $node->write($opts, "stop") or last try; - } - for my $node (@$nodesdb) { - $node->stop($opts) or last try; - } - } - $ret = 1; - } - if (! $ret) { - $log->push("stop failed")->push($db); - return undef; - } - $log->put("stop done")->push($db)->user; - return 1; -} - -sub kill { - my $db = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("kill")->push($db)->info; - my $nodesmgmt = $db->getnodelist('mgmt'); - my $nodesdb = $db->getnodelist('db'); - my $nodesapi = $db->getnodelist('api'); - my $ret = 1; - try: { - for my $node (@$nodesapi) { - $node->kill($opts) || ($ret = undef); - } - for my $node (@$nodesdb) { - $node->kill($opts) || ($ret = undef); - } - for my $node (@$nodesmgmt) { - $node->kill($opts) || ($ret = undef); - } - } - if (! $ret) { - $log->push("kill failed")->push($db); - return undef; - } - $log->put("kill done")->push($db)->user; - return 1; -} - -sub list { - my $db = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - my $dbsts = {}; - $dbsts->{comment} = $db->getcomment(""); - $dbsts->{home} = $db->gethome; - $log->put("status")->push($db)->info; - my $mgmsts; - for my $node (@{$db->getnodelist('mgmt')}) { - $mgmsts = $node->get_status or - $log->push->error; - last; - } - $mgmsts ||= {}; - for my $node (@{$db->getnodelist('all')}) { - my $id = $node->getid; - my $nodests = $dbsts->{node}{$id} ||= {}; - my $stat = $node->stat($opts) or - $log->push->error; - $nodests->{id} = $id; - $nodests->{type} = $node->gettype; - $nodests->{comment} = $node->getcomment(""); - $nodests->{host} = $node->getserver->gethost; - $nodests->{run} = $stat || "error"; - $nodests->{status} = $mgmsts->{node}{$id}; - } - return $dbsts; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm deleted file mode 100644 index d79e72f2bb35b88ddfbcd828e2a3c3811dd1453a..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm +++ /dev/null @@ -1,94 +0,0 @@ -package NDB::Net::Env; - -use strict; -use File::Spec; -use Carp; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# environment variables -# -# NDB_TOP source dir or installation dir -# NDB_BASE base dir not tied to any release or database -# NDB_NETCFG ndbnet config file, default $NDB_BASE/etc/ndbnet.xml -# -# ndbnet explicitly unsets NDB_TOP and NDB_HOME because they are -# specific to each database or database node - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::Env->attributes( - base => sub { /^\S+$/ }, - netcfg => sub { /^\S+$/ }, - hostname => sub { /^\S+$/ }, -); - -my $instance; - -sub desc { - my $netenv = shift; - return "net environment";; -} - -sub instance { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - if ($instance) { - return $instance; - } - for my $var (qw(NDB_TOP NDB_HOME)) { - my $top = delete $ENV{$var}; - if (defined($top)) { - if ($^O ne 'MSWin32') { - $ENV{PATH} =~ s!(^|:)$top/bin($|:)!$1$2!g; - $ENV{LD_LIBRARY_PATH} =~ s!(^|:)$top/lib($|:)!$1$2!g; - $ENV{PERL5LIB} =~ s!(^|:)$top/lib/perl5($|:)!$1$2!g; - } - } - } - my $netenv = $class->SUPER::new(%attr); - for my $base ($attr{base}, $ENV{NDB_BASE}) { - if (defined($base)) { - $netenv->setbase($base) - or $log->push, return undef; - } - } - for my $netcfg ($attr{netcfg}, $ENV{NDB_NETCFG}) { - if (defined($netcfg)) { - $netenv->setnetcfg($netcfg) - or $log->push, return undef; - } - } - if ($netenv->hasbase && ! $netenv->hasnetcfg) { - $netenv->setnetcfg(File::Spec->catfile($netenv->getbase, "etc", "ndbnet.xml")) - or $log->push, return undef; - } - my $uname; - if ($^O ne 'MSWin32') { - chomp($uname = `uname -n`); - } else { - chomp($uname = `hostname`); - } - my($hostname) = gethostbyname($uname); - if (! defined($hostname)) { - $uname =~ s!\..*$!!; - ($hostname) = gethostbyname($uname); - } - $netenv->sethostname($hostname) - or $log->push, return undef; - $instance = $netenv; - return $instance; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Node.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Node.pm deleted file mode 100644 index f41bf51168db9aa2c1c52b126bfd4f1ad58750bb..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Node.pm +++ /dev/null @@ -1,747 +0,0 @@ -package NDB::Net::Node; - -use strict; -use Carp; -use Symbol; -use Socket; -use IPC::Open3; -use POSIX(); -use Errno; -use File::Spec; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -my %nodecache = (); - -NDB::Net::Node->attributes( - db => sub { ref && $_->isa('NDB::Net::Database') }, - comment => sub { defined }, - id => sub { s/^\s+|\s+$//g; s/^0+(\d+)$/$1/; /^\d+$/ && $_ > 0 }, - type => sub { s/^\s+|\s+$//g; /^(mgmt|db|api)$/ }, - server => sub { ref && $_->isa('NDB::Net::Server') }, - base => sub { File::Spec->file_name_is_absolute($_) }, - home => sub { File::Spec->file_name_is_absolute($_) }, - state => sub { /^(new|run|stop)$/ }, - run => sub { defined }, - runenv => sub { defined }, - runtype => sub { m!(auto|once|manual)$! }, - lockpid => sub { $_ != 0 }, - iow => sub { ref && $_->isa('NDB::Util::IO') }, - ior => sub { ref && $_->isa('NDB::Util::IO') }, - pid => sub { $_ > 1 }, - event => sub { ref && $_->isa('NDB::Util::Event') }, -); - -sub desc { - my $node = shift; - my $dbname = $node->getdb->getname; - my $id = $node->getid; - my $type = $node->gettype; - return "$dbname.$id-$type"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $node = $class->SUPER::new(%attr); - $node->setdb($attr{db}) - or $log->push, return undef; - $node->setid($attr{id}) - or $log->push, return undef; - if ($nodecache{$node->getdb->getname,$node->getid}) { - $log->put("duplicate node")->push($node); - return undef; - } - $node->setcomment($attr{comment}); - $node->settype($attr{type}) - or $log->push, return undef; - if ($node->getdb->cmpversion("1.0") <= 0 && $node->gettype eq 'mgmt') { - $log->put("no mgmt nodes in db version <= 1.0")->push($node); - return undef; - } - $node->setserver($attr{server}) - or $log->push, return undef; - for my $base ($attr{base}, $node->getdb->getbase(undef)) { - if (defined($base)) { - $node->setbase($base) - or $log->push, return undef; - } - } - for my $home ($attr{home}, $node->getdb->gethome(undef)) { - if (defined($home)) { - if ($^O ne 'MSWin32' && $home !~ m!^/! && $node->hasbase) { - $home = $node->getbase . "/$home"; - } - $node->sethome($home) - or $log->push, return undef; - } - } - if (! $node->hashome) { - $log->put("home not defined")->push($node); - return undef; - } - $node->setstate('new') - or $log->push, return undef; - if (defined($attr{run})) { - $node->setrun($attr{run}) - or $log->push, return undef; - } - if (defined($attr{runenv})) { - $node->setrunenv($attr{runenv}) - or $log->push, return undef; - } - if (defined($attr{runtype})) { - $node->setruntype($attr{runtype}) - or $log->push, return undef; - } - if (! $node->hasruntype) { - my $runtype = "manual"; - $runtype = "once" - if $node->gettype =~ /^(mgmt|db)$/ || $node->hasrun; - $node->setruntype($runtype) - or $log->push, return undef; - } - if (! $node->getdb->addnode($node)) { - $log->push; - return undef; - } - $nodecache{$node->getdb->getname,$node->getid} = $node; - return $node; -} - -sub delete { - my $node = shift; - delete $nodecache{$node->getdb->getname,$node->getid} or - confess 'oops'; -} - -sub deleteall { - my $class = shift; - for my $k (sort keys %nodecache) { - my $node = $nodecache{$k}; - $node->delete; - } -} - -# node startup - -sub getconfdir { - my $node = shift; - @_ == 0 or confess 0+@_; - my $netenv = NDB::Net::Env->instance; - my $name = File::Spec->catfile($netenv->getbase, "etc"); - my $dir = NDB::Util::Dir->new(path => $name); - return $dir; -} - -sub getdbdir { - my $node = shift; - @_ == 0 or confess 0+@_; - my $netenv = NDB::Net::Env->instance; - my $name = File::Spec->catfile($netenv->getbase, "db", $node->getdb->getname); - my $dir = NDB::Util::Dir->new(path => $name); - return $dir; -} - -sub getnodedir { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("%s-%s", $node->getid, $node->gettype); - my $dir = $node->getdbdir->getdir($name); - return $dir; -} - -sub getrundir { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("run"); - my $dir = $node->getdbdir->getdir($name); - return $dir; -} - -sub getlogdir { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("log"); - my $dir = $node->getdbdir->getdir($name); - return $dir; -} - -sub getlock { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("%s-%s.pid", $node->getid, $node->gettype); - my $lock = $node->getrundir->getfile($name)->getlock; - return $lock; -} - -sub getsocketfile { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("%s-%s.socket", $node->getid, $node->gettype); - my $file = $node->getrundir->getfile($name); - return $file; -} - -sub getlogfile { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("%s-%s.log", $node->getid, $node->gettype); - my $file = $node->getlogdir->getfile($name); - return $file; -} - -sub getshellfile { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("run.sh"); - my $file = $node->getnodedir->getfile($name); - return $file; -} - -sub getlocalcfg { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = "Ndb.cfg"; - my $file = $node->getnodedir->getfile($name); - return $file; -} - -sub writelocalcfg { - my $node = shift; - @_ == 0 or confess 0+@_; - my $db = $node->getdb; - my $file = $node->getlocalcfg; - $file->mkdir or $log->push, return undef; - if ($db->cmpversion("1.0") <= 0) { - my $section = ""; - my $edit = sub { - chomp; - if (/^\s*\[\s*(\S+)\s*\]/) { - $section = uc($1); - } - if ($section eq 'OWN_HOST') { - if (/^\s*ThisHostId\b/i) { - $_ = "ThisHostId " . $node->getid; - } - } - if ($section eq 'CM') { - if (/^\s*ThisNodeId\b/i) { - $_ = "ThisNodeId " . $node->getid; - } - } - if (0 and $section eq 'PROCESS_ID') { - if (/^\s*Host(\d+)\s+(\S+)(.*)/) { - my $id2 = $1; - my $host2 = $2; - my $rest2 = $3; - my $node2 = $db->getnode($id2) - or $log->push, return undef; - $_ = "Host$id2 "; - $_ .= $node2->getserver->getcanon; - $_ .= " $rest2"; - } - } - $_ .= "\n"; - return 1; - }; - $node->getinifile->copyedit($file, $edit) - or $log->push, return undef; - } - else { - my @text = (); - push(@text, sprintf("OwnProcessId %s", $node->getid)); - my $nodesmgmt = $db->getnodelist('mgmt'); - for my $mnode (@$nodesmgmt) { - my $host = $mnode->getserver->getcanon; - my $port = $mnode->getport; - push(@text, "$host $port"); - } - $file->putlines(\@text) or $log->push, return undef; - } - return 1; -} - -sub getinifile { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("%s.ini", $node->getdb->getname); - my $file = $node->getconfdir->getfile($name); - return $file; -} - -sub getbincfg { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = sprintf("config.bin"); - my $file = $node->getnodedir->getfile($name); - return $file; -} - -sub getenvdefs { - my $node = shift; - @_ == 1 or confess 0+@_; - my $opts = shift; - my $home = $opts->{home} || $node->gethome; - my $netenv = NDB::Net::Env->instance; - if (! File::Spec->file_name_is_absolute($home)) { - $netenv->hasbase - or $log->put("no base and home=$home not absolute"), return undef; - $home = File::Spec->catfile($netenv->getbase, $home); - } - (-d $home) - or $log->put("$home: no such directory"), return undef; - my $defs; - if ($^O ne 'MSWin32') { - $defs = <<END; -# @{[ $node->desc ]} @{[ $node->getcomment("") ]} -# @{[ $node->getserver->desc ]} @{[ $node->getserver->getcanon ]} -# -debugger=\$1 -# -NDB_TOP=$home -export NDB_TOP -PATH=\$NDB_TOP/bin:\$PATH -export PATH -LD_LIBRARY_PATH=\$NDB_TOP/lib:\$LD_LIBRARY_PATH -export LD_LIBRARY_PATH -PERL5LIB=\$NDB_TOP/lib/perl5:\$PERL5LIB -export PERL5LIB -NDB_NODEID=@{[ $node->getid ]} -export NDB_NODEID -NDB_NODETYPE=@{[ $node->gettype ]} -export NDB_NODETYPE -ulimit -Sc unlimited -END - if ($node->hasrunenv) { - $defs .= <<END; -# -cd @{[ $node->getnodedir->getpath ]} || exit 1 -@{[ $node->getrunenv ]} -END - } - $defs .= <<END; -# -unset NDB_HOME # current NdbConfig.c would look here -# -END - } else { - $defs = <<END; -rem @{[ $node->desc ]} @{[ $node->getcomment("") ]} -rem @{[ $node->getserver->desc ]} @{[ $node->getserver->getcanon ]} -rem -set NDB_TOP=$home -set PATH=%NDB_TOP%\\bin;%PATH% -set PERL5LIB=%NDB_TOP%\\lib\\perl5;%PERL5LIB% -set NDB_NODEID=@{[ $node->getid ]} -set NDB_NODETYPE=@{[ $node->gettype ]} -END - if ($node->hasrunenv) { - $defs .= <<END; -rem -@{[ $node->getrunenv ]} -END - } - $defs .= <<END; -rem -rem current NdbConfig.c would look here -set NDB_HOME= -rem -END - } - chomp($defs); - return $defs; -} - -sub startlocal { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("start local")->push($node)->info; - my $lock = $node->getlock; - $lock->mkdir or $log->push, return undef; - anon: { - my $ret = $lock->test; - defined($ret) or $log->push, return undef; - if ($ret) { - $log->put("already running under serverpid=%s", - $lock->getpid)->push($node)->user; - return 1; - } - $lock->set or $log->push, return undef; - } - if ($opts->{clean}) { - $node->getnodedir->rmdir(1); - $node->getlogfile->unlink; - } - if (! $opts->{old}) { - $node->writelocalcfg or $log->push, return undef; - $node->handleprepare($opts) or $log->push, return undef; - } - anon: { - $lock->close; - if ($opts->{config}) { - return 1; - } - my $file = $node->getlogfile; - $file->mkdir or $log->push, return undef; - my $pid = fork(); - defined($pid) or $log->put("fork failed: $!"), return undef; - if ($pid) { - exit(0); - } - $lock->set or $log->push->fatal; - $node->setlockpid($$) or $log->push->fatal; - if ($^O ne 'MSWin32') { - POSIX::setsid() or $log->put("setsid failed: $!")->fatal; - } - $log->setfile($file->getpath) or $log->push->fatal; - } - my $socket; - anon: { - my $file = $node->getsocketfile; - $file->mkdir or $log->push($node)->fatal; - unlink($file->getpath); - if ($^O ne 'MSWin32') { - $socket = NDB::Util::SocketUNIX->new - or $log->push($node)->fatal; - } else { - $socket = NDB::Util::SocketINET->new - or $log->push($node)->fatal; - } - $socket->setopt(SOL_SOCKET, SO_REUSEADDR, 1) - or $log->push($node)->fatal; - if ($^O ne 'MSWin32') { - $socket->bind($file->getpath) - or $log->push($node)->fatal; - } else { - $socket->bind($node->getdb->getnodeport + $node->getid) - or $log->push($node)->fatal; - } - $socket->listen - or $log->push($node)->fatal; - } - START: { - my $w = gensym(); - my $r = gensym(); - my @arg = ('/bin/sh', $node->getshellfile->getpath); - my $pid = open3($w, $r, undef, @arg); - $node->setiow(NDB::Util::IO->new(fh => $w)) - or $log->push->fatal; - $node->setior(NDB::Util::IO->new(fh => $r)) - or $log->push->fatal; - $node->setpid($pid) - or $log->push->fatal; - } - $node->setstate('run') - or $log->push($node)->fatal; - $log->put("started host=%s pid=%s", - $node->getserver->gethost, $node->getpid)->push($node)->user; - $log->push("started")->push($node)->putvalue(1)->user; - $log->detachuser; - NDB::Net::Client->deleteall; - my $event = NDB::Util::Event->new; - $event->set($socket, 'r'); - $event->set($node->getior, 'r'); - loop: { - try: { - my $n = $event->poll(10); - if (! defined($n)) { - $log->push->error; - sleep 1; - last try; - } - if (! $n) { - $log->push->debug; - last try; - } - if ($node->hasior && $event->test($node->getior, 'r')) { - my $data = $node->getior->read; - if (! defined($data)) { - $log->push->fatal; - } - if (length($data) > 0) { - $node->handleoutput($opts, $data); - } - if ($node->getior->getreadend) { - $log->put("input closed")->warn; - $event->clear($node->getior, 'r'); - $node->getior->close; - $node->delior; - $node->handleeof($opts); - last loop; - } - } - if (! $event->test($socket, 'r')) { - last try; - } - my $csocket = $socket->accept(10); - if (! defined($csocket)) { - $log->push->error; - last try; - } - if (! $csocket) { - $log->push->warn; - last try; - } - my $client = NDB::Net::Client->new( - socket => $csocket, - serversocket => $socket, - serverlock => $lock, - event => $event, - context => $node, - ); - $client or $log->push->fatal; - } - NDB::Net::Client->processall; - redo loop; - } - if ($node->getruntype eq "auto") { - if ($node->getstate eq "run") { - $log->put("restart in 5 seconds...")->info; - sleep 5; - goto START; - } - $log->put("stopping, skip restart")->info; - } - $lock->close; - $node->getsocketfile->unlink; - while (wait() != -1) {} - $log->put("exit")->push->info; - exit(0); -} - -# handlers can be overridden in subclass - -sub handleprepare { confess 'oops'; } - -sub handleoutput { - my $node = shift; - @_ == 2 or confess 0+@_; - my($opts, $data) = @_; - $data =~ s/\015//g; - $data = $node->{savedata} . $data; - while ((my $i = index($data, "\n")) >= 0) { - my $line = substr($data, 0, $i); - $data = substr($data, $i+1); - $log->put($line)->info; - if ($opts->{user} && $line !~ /^\s*$/) { - $log->put($line)->user; - } - } - $node->{savedata} = $data; - if (1 && length $node->{savedata}) { # XXX partial line - my $line = $node->{savedata}; - $log->put($line)->info; - if ($opts->{user} && $line !~ /^\s*$/) { - $log->put($line)->user; - } - $node->{savedata} = ""; - } -} - -sub handleeof { -} - -# command subs can be overridden by subclass - -sub waitforexit { - my $node = shift; - my $lock = $node->getlock; - my $lockpid = $node->getlockpid; - my $n1 = 0; - my $n2 = 10; - while (1) { - my $ret = $lock->test; - defined($ret) or $log->push, return undef; - if (! $ret) { - $log->put("exit done")->push($node)->user; - last; - } - if ($lockpid != $lock->getpid) { - $log->put("restarted: lock pid changed %s->%s", - $lockpid, $lock->getpid)->push($node); - return undef; - } - if (++$n1 >= $n2) { - $n2 *= 2; - $log->put("wait for exit")->push($node)->user; - } - select(undef, undef, undef, 0.1); - } - return 1; -} - -sub cmd_stopnode_bg { - my($node, $cmd) = @_; - return $node->waitforexit; -} - -sub cmd_killnode_fg { - my($node, $cmd) = @_; - my $pid = $node->getpid; - $log->put("kill -9 $pid")->push($node)->user; - kill(9, $pid); - $node->setstate('stop') - or $log->push($node), return undef; - return 1; -} - -sub cmd_killnode_bg { - my($node, $cmd) = @_; - return $node->waitforexit; -} - -sub cmd_statnode_bg { - my($node, $cmd) = @_; - return "up"; -} - -sub cmd_writenode_fg { - my($node, $cmd) = @_; - my $text = $cmd->getarg(2); - while(chomp($text)) {}; - $log->put("write: $text")->push($node)->user; - $node->getiow->write("$text\n"); - my $output = ""; - if ((my $num = $cmd->getopt("wait")) > 0) { - my $lim = time + $num; - $node->getior->settimeout(1); - loop: { - my $data = $node->getior->read; - if (length($data) > 0) { - $node->handleoutput({user => 1}, $data); - $output .= $data; - } - redo loop if time < $lim; - } - $node->getior->settimeout(0); - } - return { output => $output }; -} - -# commands - -sub doremote { - my $node = shift; - my($cmdname, $opts, @args) = @_; - my $server = $node->getserver; - $log->put("$cmdname remote")->push($server)->push($node)->info; - my $argv = [ - $cmdname, q(--local), - $opts, $node->getdb->getname, $node->getid, @args ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $server->request($cmd) - or $log->push, return undef; - return $ret; -} - -sub dolocal { - my $node = shift; - my($cmdname, $opts, @args) = @_; - $log->put("$cmdname local")->push($node)->info; - if (! $node->getserver->islocal) { - $log->put("not local")->push($node->getserver)->push($node); - return undef; - } - if ($cmdname eq "startnode") { - return $node->startlocal($opts); - } - my $lock = $node->getlock; - anon: { - my $ret = $lock->test; - defined($ret) or $log->push, return undef; - if (! $ret) { - if ($cmdname eq "statnode") { - return "down"; - } - $log->put("not running")->push($node)->user; - return $cmdname eq "writenode" ? undef : 1; - } - } - my $server; - anon: { - my $path = $node->getsocketfile->getpath; - if (! -e $path) { - $log->put("$path: no socket")->push($node); - return undef; - } - if ($^O ne 'MSWin32') { - $server = NDB::Net::ServerUNIX->new(id => 0, path => $path) - or $log->push, return undef; - } else { - $server = NDB::Net::ServerINET->new(id => 0, host => $node->getserver->getcanon, port => $node->getdb->getnodeport + $node->getid) - or $log->push, return undef; - } - } - my $argv = [ - $cmdname, - $opts, $node->getdb->getname, $node->getid, @args ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $server->request($cmd) - or $log->push, return undef; - $log->put("$cmdname done")->push($node)->info; - return $ret; -} - -sub start { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("start")->push($node)->info; - my $do = $opts->{local} ? "dolocal" : "doremote"; - return $node->$do("startnode", $opts); -} - -sub stop { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("stop")->push($node)->info; - my $do = $opts->{local} ? "dolocal" : "doremote"; - return $node->$do("stopnode", $opts); -} - -sub kill { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("kill")->push($node)->info; - my $do = $opts->{local} ? "dolocal" : "doremote"; - return $node->$do("killnode", $opts); -} - -sub stat { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - $log->put("stat")->push($node)->info; - my $do = $opts->{local} ? "dolocal" : "doremote"; - return $node->$do("statnode", $opts); -} - -sub write { - my $node = shift; - @_ == 2 or confess 0+@_; - my($opts, $text) = @_; - $log->put("write: $text")->push($node)->info; - my $do = $opts->{local} ? "dolocal" : "doremote"; - return $node->$do("writenode", $opts, $text); -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeApi.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeApi.pm deleted file mode 100644 index 08f5f85577d4627273432077bb88720995dcfd29..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeApi.pm +++ /dev/null @@ -1,84 +0,0 @@ -package NDB::Net::NodeApi; - -use strict; -use Carp; -use Symbol; - -require NDB::Net::Node; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Node); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::NodeApi->attributes(); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $node = $class->SUPER::new(%attr, type => 'api') - or $log->push, return undef; - return 1; -} - -# run methods - -sub handleprepare { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - my $netenv = NDB::Net::Env->instance; - my $envdefs = $node->getenvdefs($opts); - defined($envdefs) or return undef; - my $nodedir = $node->getnodedir; - my $shellfile = $node->getshellfile; - my $run; - if ($node->hasrun) { - $run = $node->getrun; - } - if (defined($opts->{run})) { - $run = $opts->{run}; - } - if (defined($run)) { - $log->put("run: $run")->push($node)->user; - } - if ($^O ne 'MSWin32') { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -cd @{[ $nodedir->getpath ]} || exit 1 -set -x -exec \$DEBUGGER $run -END - } else { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -cd @{[ $nodedir->getpath ]} -call $run -END - } - return 1; -} - -sub cmd_stopnode_fg { - my($node, $cmd) = @_; - my $pid = $node->getpid; - unless ($pid > 1) { - $log->put("bad pid=$pid")->push($node); - return undef; - } - $log->put("kill -15 $pid")->push($node)->user; - kill(15, $pid); - $node->setstate('stop') - or log->push($node), return undef; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeDb.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeDb.pm deleted file mode 100644 index 88a35ba4f8d4d32fc136edb089b6258b99a7de97..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeDb.pm +++ /dev/null @@ -1,116 +0,0 @@ -package NDB::Net::NodeDb; - -use strict; -use Carp; -use Symbol; - -require NDB::Net::Node; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Node); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::NodeDb->attributes( - fsdir => sub { s/^\s+|\s+$//g; /^\S+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $node = $class->SUPER::new(%attr, type => 'db') - or $log->push, return undef; - $node->setfsdir($attr{fsdir}) - or $log->push, return undef; - return 1; -} - -# run methods - -sub handleprepare { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - my $netenv = NDB::Net::Env->instance; - my $envdefs = $node->getenvdefs($opts); - defined($envdefs) or return undef; - my $nodedir = $node->getnodedir; - my $shellfile = $node->getshellfile; - my $fsdir = NDB::Util::Dir->new( - path => sprintf("%s/%s/%s-%s.fs", - $node->getfsdir, $node->getdb->getname, $node->getid, $node->gettype)); - $fsdir->mkdir or $log->push, return undef; - my $init_rm; - my $run; - if ($^O ne 'MSWin32') { - $init_rm = "# no -i"; - if ($opts->{init_rm}) { - $init_rm = 'rm -f $NDB_FILESYSTEM/*/DBDIH/P0.sysfile'; - } - $run = "\$NDB_TOP/bin/ndb"; - } else { - $init_rm = "rem no -i"; - if ($opts->{init_rm}) { - $init_rm = - 'del/f %NDB_FILESYSTEM%\D1\DBDIH\P0.sysfile' . "\n" . - 'del/f %NDB_FILESYSTEM%\D2\DBDIH\P0.sysfile'; - } - $run = "ndb"; - } - if ($node->getdb->cmpversion("1.0") <= 0) { - $run .= " -s"; - } - if ($opts->{nostart}) { - $run .= " -n"; - } - if ($node->hasrun) { - $run = $node->getrun; - } - if (defined($opts->{run})) { - $run = $opts->{run}; - } - $log->put("run: $run")->push($node)->user; - if ($^O ne 'MSWin32') { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -NDB_FILESYSTEM=@{[ $fsdir->getpath ]} -export NDB_FILESYSTEM -# v1.0 compat -UAS_FILESYSTEM=\$NDB_FILESYSTEM -export UAS_FILESYSTEM -mkdir -p \$NDB_FILESYSTEM -$init_rm -cd @{[ $nodedir->getpath ]} || exit 1 -exec \$debugger $run -END - } else { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -set NDB_FILESYSTEM=@{[ $fsdir->getpath ]} -rem v1.0 compat -set UAS_FILESYSTEM=%NDB_FILESYSTEM% -mkdir %NDB_FILESYSTEM% -$init_rm -cd @{[ $nodedir->getpath ]} -call $run -END - } - return 1; -} - -sub cmd_stopnode_fg { - my($node, $cmd) = @_; - $node->setstate('stop') - or log->push($node), return undef; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeMgmt.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeMgmt.pm deleted file mode 100644 index 1056e3df6231aa0371f6bb74a477ee2385e2ee0d..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/NodeMgmt.pm +++ /dev/null @@ -1,318 +0,0 @@ -package NDB::Net::NodeMgmt; - -use strict; -use Carp; -use Symbol; - -require NDB::Net::Node; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Node); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::NodeMgmt->attributes( - port => sub { s/^\s+|\s+$//g; /^\d+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $node = $class->SUPER::new(%attr, type => 'mgmt') - or $log->push, return undef; - $node->setport($attr{port}) - or $log->push, return undef; - return 1; -} - -# socket parser methods - -sub socketcommand { - my $node = shift; - my $socket; - $socket = NDB::Util::SocketINET->new or - $log->push($node), return undef; - $socket->settimeout(10); - $socket->connect($node->getserver->getcanon, $node->getport) or - $log->push($node), return undef; - $socket->write("GET STATUS\r\nBYE\r\n") or - $log->push($node), return undef; - my $out = ""; - my $data; - while ($data = $socket->read) { - $out .= $data; - } - $socket->close; - $out =~ s/\015//g; - return $out; -} - -sub get_status { - my $node = shift; - my $out = $node->socketcommand or - $log->push, return undef; - my @out = split(/\n/, $out); - $out[0] =~ /^get\s+status\s+(\d+)/i or - $log->put("bad line 0: $out[0]"), return undef; - my $cnt = $1; - my $ret = {}; - for (my $i = 1; $i <= $cnt; $i++) { - $out[$i] =~ /^$i\s+(.*)/ or - $log->put("bad line $i: $out[$i]"), return undef; - my $text = $1; - $text =~ s/^\s+|\s+$//g; - if ($text =~ /^ndb\s+(no_contact)\s+(\d+)$/i) { - $text = lc "$1"; - } elsif ($text =~ /^ndb\s+(starting)\s+(\d+)$/i) { - $text = lc "$1/$2"; - } elsif ($text =~ /^ndb\s+(started)\s+(\d+)$/i) { - $text = lc "$1"; - } elsif ($text =~ /^ndb\s+(shutting_down)\s+(\d+)$/i) { - $text = lc "$1"; - } elsif ($text =~ /^ndb\s+(restarting)\s+(\d+)$/i) { - $text = lc "$1"; - } elsif ($text =~ /^ndb\s+(unknown)\s+(\d+)$/i) { - $text = lc "$1"; - } - $ret->{node}{$i} = $text; - } - return $ret; -} - -# run methods - -sub getautoinifile { - my $node = shift; - @_ == 0 or confess 0+@_; - my $name = "config.txt"; - my $file = $node->getnodedir->getfile($name); - return $file; -} - -sub writeautoinifile { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - my $db = $node->getdb; - my $nodelist = $db->getnodelist('all'); - my $computers = {}; - for my $n (@$nodelist) { - $computers->{$n->getserver->getid} ||= { - id => $n->getserver->getid, - hostname => $n->getserver->getcanon, - }; - } - my $section = ""; # e.g. PROCESSES - my $auto; - my $edit = sub { - chomp; - s/^\s+|\s+$//g; - if (/^(\w+)$/) { - $section = uc($1); - } - elsif (/^\@loop$/i) { - $_ = "#$_"; - if ($auto) { - $log->put("nested \@loop"); - return undef; - } - $auto = {}; - } - elsif (/^\@base\s+(\S+)\s*$/) { - my $arg = $1; - $_ = "#$_"; - if (! $auto) { - $log->put("unexpected \@base"); - return undef; - } - if ($arg !~ /^\d+$/) { - $log->put("non-numerical \@base"); - return undef; - } - $auto->{base} = $arg; - } - elsif (/^\@end$/i) { - $_ = "#$_"; - if (! $auto) { - $log->put("unmatched \@end"); - return undef; - } - if ($section eq 'COMPUTERS') { - for my $id (sort { $a <=> $b } keys %$computers) { - my $computer = $computers->{$id}; - $_ .= "\n"; - $_ .= "\nId: " . $computer->{id}; - $_ .= "\nHostName: " . $computer->{hostname}; - if ($auto->{list}) { - $_ .= "\n#defaults"; - for my $s (@{$auto->{list}}) { - $_ .= "\n$s"; - } - } - } - } - elsif ($section eq 'PROCESSES') { - for my $n (@$nodelist) { - if ($auto->{type} && $n->gettype ne lc($auto->{type})) { - next; - } - $_ .= "\n"; - $_ .= "\nType: " . uc($n->gettype); - $_ .= "\nId: " . $n->getid; - $_ .= "\nExecuteOnComputer: " . $n->getserver->getid; - if ($auto->{list}) { - $_ .= "\n#defaults"; - for my $s (@{$auto->{list}}) { - $_ .= "\n$s"; - } - } - } - } - elsif ($section eq 'CONNECTIONS') { - if (! $auto->{type}) { - $log->put("cannot generate CONNECTIONS without type"); - return undef; - } - if (! defined($auto->{base})) { - $log->put("need \@base for CONNECTIONS"); - return undef; - } - my $key = $auto->{base}; - for (my $i1 = 0; $i1 <= $#$nodelist; $i1++) { - for (my $i2 = $i1+1; $i2 <= $#$nodelist; $i2++) { - my $n1 = $nodelist->[$i1]; - my $n2 = $nodelist->[$i2]; - if ($n1->gettype ne 'db' && $n2->gettype ne 'db') { - next; - } - $_ .= "\n"; - $_ .= "\nType: $auto->{type}"; - $_ .= "\nProcessId1: " . $n1->getid; - $_ .= "\nProcessId2: " . $n2->getid; - $key++; - if ($auto->{type} eq 'TCP') { - $_ .= "\nPortNumber: $key"; - if (my $list = $opts->{proxy}) { - my $id1 = $n1->getid; - my $id2 = $n2->getid; - if ($list =~ /\b$id1\b.*-.*\b$id2\b/) { - $key++; - $_ .= "\nProxy: $key"; - } elsif ($list =~ /\b$id2\b.*-.*\b$id1\b/) { - $key++; - $_ .= "\nProxy: $key"; - } - } - } - elsif ($auto->{type} eq 'SHM') { - $_ .= "\nShmKey: $key"; - } - else { - $log->put("cannot handle CONNECTIONS type $auto->{type}"); - return undef; - } - if ($auto->{list}) { - $_ .= "\n#defaults"; - for my $s (@{$auto->{list}}) { - $_ .= "\n$s"; - } - } - } - } - } - else { - $log->put("found \@end in unknown section '$section'"); - return undef; - } - undef $auto; - } - elsif (/^$/) { - } - elsif ($auto) { - if (/^Type:\s*(\w+)$/i) { - $auto->{type} = uc($1); - } - else { - $auto->{list} ||= []; - push(@{$auto->{list}}, $_); - } - $_ = ""; - return 1; # no output - } - $_ .= "\n"; - return 1; - }; - $node->getautoinifile->mkdir - or $log->push, return undef; - $node->getinifile->copyedit($node->getautoinifile, $edit) - or $log->push, return undef; - return 1; -} - -sub handleprepare { - my $node = shift; - @_ == 1 or confess 0+@_; - my($opts) = @_; - my $envdefs = $node->getenvdefs($opts); - defined($envdefs) or return undef; - my $nodedir = $node->getnodedir; - my $shellfile = $node->getshellfile; - my $port = $node->getport; - my $lpath = $node->getlocalcfg->getbasename; - $node->writeautoinifile($opts) - or $log->push, return undef; - my $ipath = $node->getautoinifile->getbasename; - $node->getbincfg->mkdir or $log->push, return undef; - my $cpath = $node->getbincfg->getbasename; - my $run; - if ($^O ne 'MSWin32') { - $run = "\$NDB_TOP/bin/mgmtsrvr"; - } else { - $run = "mgmtsrvr"; - } - my $statport = $port + 1; - $run .= " -l $lpath -c $ipath"; - if ($node->hasrun) { - $run = $node->getrun; - } - if (defined($opts->{run})) { - $run = $opts->{run}; - } - $log->put("run: $run")->push($node)->user; - if ($^O ne 'MSWin32') { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -cd @{[ $nodedir->getpath ]} || exit 1 -set -x -exec \$DEBUGGER $run -END - } else { - $shellfile->puttext(<<END) or $log->push, return undef; -$envdefs -cd @{[ $nodedir->getpath ]} -call $run -END - } - return 1; -} - -sub cmd_stopnode_fg { - my $node = shift; - @_ == 1 or confess 0+@_; - my($cmd) = @_; - $log->put("write: quit")->push($node)->user; - $node->getiow->write("quit\n"); - $node->setstate('stop') - or log->push($node), return undef; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Server.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Server.pm deleted file mode 100644 index 5d2118f0ffee292062a8763b41701e77d0cdfe4e..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Server.pm +++ /dev/null @@ -1,149 +0,0 @@ -package NDB::Net::Server; - -use strict; -use Carp; -use Socket; - -require NDB::Net::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -my %servercache = (); - -NDB::Net::Server->attributes( - id => sub { s/^\s+|\s+$//g; m/^\S+$/ && ! m!/! }, - domain => sub { $_ == PF_UNIX || $_ == PF_INET }, -); - -sub desc { - my $server = shift; - my $id = $server->getid; - return "server $id"; -} - -sub add { - my $server = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - if ($servercache{$server->getid}) { - $log->put("duplicate server")->push($server); - return undef; - } - $servercache{$server->getid} = $server; - return 1; -} - -sub get { - my $class = shift; - @_ == 1 or confess 0+@_; - my($id) = @_; - $id =~ s/^\s+|\s+$//g; - my $server = $servercache{$id}; - if (! $server) { - $log->put("$id: undefined server"); - return undef; - } - $log->put("found")->push($server)->debug; - return $server; -} - -sub delete { - my $server = shift; - delete $servercache{$server->getid}; -} - -sub deleteall { - my $class = shift; - for my $id (sort keys %servercache) { - my $server = $servercache{$id}; - $server->delete; - } -} - -# local server is this server process - -my $localserver; - -sub setlocal { - my $server = shift; - @_ == 0 or confess 0+@_; - $localserver = $server; -} - -sub islocal { - my $server = shift; - @_ == 0 or confess 0+@_; - return $localserver eq $server; -} - -# client side - -sub testconnect { - my $server = shift; - @_ == 0 or confess 0+@_; - my $socket = $server->connect or - $log->push($server), return undef; - $socket->close; - return 1; -} - -sub request { - my $server = shift; - @_ == 1 or confess 0+@_; - my($cmd) = @_; - unless (ref($cmd) && $cmd->isa('NDB::Net::Command')) { - confess 'oops'; - } - my $socket = $server->connect - or $log->push($server), return undef; - anon: { - my $line = $cmd->getline; - my $n = $socket->write("$line\n"); - defined($n) && $n == length("$line\n") - or $log->push($server), return undef; - shutdown($socket->{fh}, 1); - } - my $value; - try: { - my $last; - loop: { - my $line = $socket->readline; - defined($line) - or $log->push($server), last try; - if ($socket->getreadend) { - last loop; - } - while (chomp($line)) {} - $log->put($line)->user - unless $log->hasvalue($line); - $last = $line; - redo loop; - } - if (! $log->hasvalue($last)) { - $log->put("missing return value in \"$last\"")->push($server); - last try; - } - $value = $log->getvalue($last); - defined($value) - or $log->push, last try; - $value = $value->[0]; - if (! defined($value)) { - $log->put("failed")->push($cmd); - last try; - } - } - $socket->close; - return $value; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerINET.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerINET.pm deleted file mode 100644 index a065c1868558dc7fb504065ac430d27743d6e51f..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerINET.pm +++ /dev/null @@ -1,116 +0,0 @@ -package NDB::Net::ServerINET; - -use strict; -use Carp; -use Socket; - -require NDB::Net::Server; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Server); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::ServerINET->attributes( - host => sub { s/^\s+|\s+$//g; /^\S+$/ }, - port => sub { s/^\s+|\s+$//g; /^\d+$/ }, - canon => sub { s/^\s+|\s+$//g; /^\S+$/ }, - aliases => sub { ref($_) eq 'ARRAY' }, -); - - -sub desc { - my $server = shift; - my $id = $server->getid; - my $host = $server->gethost; - return "server $id at $host"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $server = $class->SUPER::new(%attr); - $server->setid($attr{id}) - or $log->push, return undef; - $server->setdomain(PF_INET) - or $log->push, return undef; - $server->sethost($attr{host}) - or $log->push, return undef; - $server->setport($attr{port}) - or $log->push, return undef; - my($canon, $aliases) = gethostbyname($server->gethost); - if (! defined($canon)) { - $log->put("%s: unknown host", $server->gethost); - return undef; - } - $server->setcanon($canon) - or $log->push, return undef; - $server->setaliases([ split(' ', $aliases) ]) - or $log->push, return undef; - $server->add or - $log->push, return undef; - $log->put("added")->push($server)->debug; - return $server; -} - -# find matching servers - -sub match { - my $class = shift; - @_ == 3 or confess 0+@_; - my($host, $port, $servers) = @_; - if (! defined($port) && $host =~ /:/) { - ($host, $port) = split(/:/, $host, 2); - } - $host =~ s/^\s+|\s+$//g; - my($canon) = gethostbyname($host); - unless (defined($canon)) { - $log->put("$host: unknown host"); - return undef; - } - my $hostport = $host; - if (defined($port)) { - $port =~ s/^\s+|\s+$//g; - $port =~ /\d+$/ - or $log->put("$port: non-numeric port"), return undef; - $hostport .= ":$port"; - } - my @server = (); - for my $s (@$servers) { - ($s->getdomain == PF_INET) || next; - ($s->getcanon eq $canon) || next; - ($port && $s->getport != $port) && next; - push(@server, $s); - } - if (! @server) { - $log->put("$hostport: no server found"); - } - if (@server > 1) { - $log->put("$hostport: multiple servers at ports ", - join(' ', map($_->getport, @server))); - } - return \@server; -} - -# client side - -sub connect { - my $server = shift; - @_ == 0 or confess 0+@_; - my $socket; - $socket = NDB::Util::SocketINET->new or - $log->push, return undef; - $socket->connect($server->gethost, $server->getport) or - $log->push, return undef; - return $socket; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerUNIX.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerUNIX.pm deleted file mode 100644 index b3fa245d5ee47c351b9681209555739f1d3718c9..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/ServerUNIX.pm +++ /dev/null @@ -1,54 +0,0 @@ -package NDB::Net::ServerUNIX; - -use strict; -use Carp; -use Socket; - -require NDB::Net::Server; - -use vars qw(@ISA); -@ISA = qw(NDB::Net::Server); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Net::ServerUNIX->attributes( - path => sub { s/^\s+|\s+$//g; /^\S+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $server = $class->SUPER::new(%attr); - $server->setid($attr{id}) - or $log->push, return undef; - $server->setdomain(PF_UNIX) - or $log->push, return undef; - $server->setpath($attr{path}) - or $log->push, return undef; - $server->add or - $log->push, return undef; - return $server; -} - -# client side - -sub connect { - my $server = shift; - @_ == 0 or confess 0+@_; - my $socket; - $socket = NDB::Util::SocketUNIX->new or - $log->push, return undef; - $socket->connect($server->getpath) or - $log->push, return undef; - return $socket; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run.pm deleted file mode 100644 index a8cabde544ca11e3a505addd7e3dac011046888c..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run.pm +++ /dev/null @@ -1,40 +0,0 @@ -package NDB::Run; - -use strict; -use Carp; -require Exporter; - -use NDB::Net; - -use vars qw(@ISA @EXPORT @EXPORT_OK); -@ISA = qw(Exporter); - -use vars qw(@modules); -@modules = qw( - NDB::Run::Base - NDB::Run::Database - NDB::Run::Env - NDB::Run::Node -); - -return 1 if $main::onlymodules; - -for my $module (@modules) { - eval "require $module"; - $@ and confess "$module $@"; -} - -for my $module (@modules) { - eval "$module->initmodule"; - $@ and confess "$module $@"; -} - -# methods - -sub getenv { - my $class = shift; - return NDB::Run::Env->new(@_); -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Base.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Base.pm deleted file mode 100644 index 4769f2c444106d89978a14dad135c917e1045957..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Base.pm +++ /dev/null @@ -1,12 +0,0 @@ -package NDB::Run::Base; - -use strict; -use Carp; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Database.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Database.pm deleted file mode 100644 index 9a12ddb20b3b369bea1c96226cc7a00ee66c6a0b..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Database.pm +++ /dev/null @@ -1,89 +0,0 @@ -package NDB::Run::Database; - -use strict; -use Carp; - -require NDB::Run::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Run::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Run::Database->attributes( - name => sub { s/^\s+|\s+$//g; /^\S+$/ && ! m!/! }, - env => sub { ref && $_->isa('NDB::Run::Env') }, -); - -sub desc { - my $db = shift; - return $db->getname; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $db = $class->SUPER::new(%attr); - $db->setname($attr{name}) - or $log->push, return undef; - $db->setenv($attr{env}) - or $log->push, return undef; - return $db; -} - -sub getnode { - my $db = shift; - @_ == 1 or croak q(usage: $node = $db->getnode($id)); - my($id) = @_; - my $node = NDB::Run::Node->new(db => $db, id => $id) - or $log->push, return undef; - return $node; -} - -# commands - -sub start { - my $db = shift; - my $opts = shift; - my $argv = [ 'start', $db->getname, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $db->getenv->docmd($cmd); - defined($ret) - or $log->push, return undef; - return $ret; -} - -sub stop { - my $db = shift; - my $opts = shift; - my $argv = [ 'stop', $db->getname, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $db->getenv->docmd($cmd); - defined($ret) - or $log->push, return undef; - return $ret; -} - -sub kill { - my $db = shift; - my $opts = shift; - my $argv = [ 'kill', $db->getname, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $db->getenv->docmd($cmd); - defined($ret) - or $log->push, return undef; - return $ret; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Env.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Env.pm deleted file mode 100644 index e851a82636bd72f70143bd40c79e555b81e8c4ca..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Env.pm +++ /dev/null @@ -1,84 +0,0 @@ -package NDB::Run::Env; - -use strict; -use Carp; - -require NDB::Run::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Run::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Run::Env->attributes( - server => sub { ref && $_->isa('NDB::Net::Server') }, -); - -sub desc { - "env"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $env = $class->SUPER::new(%attr); - return $env; -} - -sub getdb { - my $env = shift; - @_ == 1 or croak q(usage: $db = $env->getdb($name)); - my($name) = @_; - my $db = NDB::Run::Database->new(env => $env, name => $name) - or $log->push, return undef; - return $db; -} - -# commands - -sub init { - my $env = shift; - my $netenv = NDB::Net::Env->instance; - my $netcfg = NDB::Net::Config->new(file => $netenv->getnetcfg) - or $log->push, return undef; - $netcfg->load - or $log->push, return undef; - my $servers = $netcfg->getservers - or $log->push, return undef; - my $server; - for my $s (@$servers) { - if (! $s->testconnect) { - $log->push->warn; - next; - } - $server = $s; - last; - } - if (! $server) { - $log->put("no available server")->push($netcfg); - return undef; - } - $env->setserver($server) - or $log->push, return undef; - $log->put("selected")->push($server)->info; - return 1; -} - -sub docmd { - my $env = shift; - my $cmd = shift; - my $ret = $env->getserver->request($cmd); - defined($ret) - or $log->push, return undef; - return $ret; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Node.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Node.pm deleted file mode 100644 index e657021b229b7060e92cdbd13d4e82a41b8242b0..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Run/Node.pm +++ /dev/null @@ -1,114 +0,0 @@ -package NDB::Run::Node; - -use strict; -use Carp; - -require NDB::Run::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Run::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Run::Node->attributes( - env => sub { ref && $_->isa('NDB::Run::Env') }, - db => sub { ref && $_->isa('NDB::Run::Database') }, - dbname => sub { s/^\s+|\s+$//g; /^\S+$/ && ! m!/! }, - id => sub { s/^\s+|\s+$//g; s/^0+(\d+)$/$1/; /^\d+$/ && $_ > 0 }, - type => sub { s/^\s+|\s+$//g; /^(mgmt|db|api)$/ }, -); - -sub desc { - my $node = shift; - my $dbname = $node->getdb->getname; - my $id = $node->getid; - my $type = "?"; # $node->gettype; - return "$dbname.$id-$type"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $node = $class->SUPER::new(%attr); - $node->setdb($attr{db}) - or $log->push, return undef; - $node->setenv($node->getdb->getenv) - or $log->push, return undef; - $node->setdbname($node->getdb->getname) - or $log->push, return undef; - $node->setid($attr{id}) - or $log->push, return undef; -# $node->settype($attr{type}) -# or $log->push, return undef; - return $node; -} - -# commands - -sub start { - my $node = shift; - my $opts = shift; - my $argv = [ 'startnode', $node->getdb->getname, $node->getid, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $node->getenv->docmd($cmd) - or $log->push, return undef; - return $ret; -} - -sub stop { - my $node = shift; - my $opts = shift; - my $argv = [ 'stopnode', $node->getdb->getname, $node->getid, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $node->getenv->docmd($cmd) - or $log->push, return undef; - return $ret; -} - -sub kill { - my $node = shift; - my $opts = shift; - my $argv = [ 'killnode', $node->getdb->getname, $node->getid, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $node->getenv->docmd($cmd) - or $log->push, return undef; - return $ret; -} - -sub stat { - my $node = shift; - my $opts = shift; - my $argv = [ 'statnode', $node->getdb->getname, $node->getid, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $node->getenv->docmd($cmd) - or $log->push, return undef; - return $ret; -} - -sub write { - my $node = shift; - my $text = shift; - my $opts = shift; - my $argv = [ 'writenode', $node->getdb->getname, $node->getid, $text, $opts ]; - my $cmd = NDB::Net::Command->new(argv => $argv) - or $log->push, return undef; - my $ret = $node->getenv->docmd($cmd) - or $log->push, return undef; - ref($ret) eq 'HASH' && defined($ret->{output}) - or confess 'oops'; - return $ret; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util.pm deleted file mode 100644 index d5db35cbf13accaf83126731c6931e63e9c3929e..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util.pm +++ /dev/null @@ -1,37 +0,0 @@ -package NDB::Util; - -use strict; -use Carp; -require Exporter; - -use vars qw(@ISA @EXPORT @EXPORT_OK); -@ISA = qw(Exporter); - -use vars qw(@modules); -@modules = qw( - NDB::Util::Base - NDB::Util::Dir - NDB::Util::Event - NDB::Util::File - NDB::Util::IO - NDB::Util::Lock - NDB::Util::Log - NDB::Util::Socket - NDB::Util::SocketINET - NDB::Util::SocketUNIX -); - -return 1 if $main::onlymodules; - -for my $module (@modules) { - eval "require $module"; - $@ and confess "$module $@"; -} - -for my $module (@modules) { - eval "$module->initmodule"; - $@ and confess "$module $@"; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Base.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Base.pm deleted file mode 100644 index 20df78a3b9bb4d1becafb30f37f98a14a359f491..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Base.pm +++ /dev/null @@ -1,113 +0,0 @@ -package NDB::Util::Base; - -use strict; -use Carp; - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -sub new { - my $class = shift; - my $this = bless {}, $class; - return $this; -} - -sub getlog { - my $this = shift; - return NDB::Util::Log->instance; -} - -# clone an object -# extra attributes override or delete (if value is undef) -sub clone { - my $this = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $that = bless {}, ref($this); - for my $attr (sort keys %$this) { - if (! exists($attr{$attr})) { - my $get = "get$attr"; - $attr{$attr} = $this->$get(); - } - } - for my $attr (sort keys %attr) { - if (defined($attr{$attr})) { - my $set = "set$attr"; - $that->$set($attr{$attr}); - } - } - return $that; -} - -# methods for member variables: -# - set returns 1 on success and undef on undefined or invalid value -# - get aborts unless value exists or a default (maybe undef) is given -# - has tests existence of value -# - del deletes the value and returns it (maybe undef) - -sub attributes { - @_ % 2 == 1 or confess 0+@_; - my $class = shift; - my @attr = @_; - while (@attr) { - my $attr = shift @attr; - my $filter = shift @attr; - $attr =~ /^\w+$/ or confess $attr; - ref($filter) eq 'CODE' or confess $attr; - my $set = sub { - @_ == 2 or confess "set$attr: arg count: @_"; - my $this = shift; - my $value = shift; - if (! defined($value)) { - $log->put("set$attr: undefined value")->push($this); - return undef; - } - local $_ = $value; - if (! &$filter($this)) { - $log->put("set$attr: invalid value: $value")->push($this); - return undef; - } - $value = $_; - if (! defined($value)) { - confess "set$attr: changed to undef"; - } - $this->{$attr} = $value; - return 1; - }; - my $get = sub { - @_ == 1 || @_ == 2 or confess "get$attr: arg count: @_"; - my $this = shift; - my $value = $this->{$attr}; - if (! defined($value)) { - @_ == 0 and confess "get$attr: no value"; - $value = shift; - } - return $value; - }; - my $has = sub { - @_ == 1 or confess "has$attr: arg count: @_"; - my $this = shift; - my $value = $this->{$attr}; - return defined($value); - }; - my $del = sub { - @_ == 1 or confess "del$attr: arg count: @_"; - my $this = shift; - my $value = delete $this->{$attr}; - return $value; - }; - no strict 'refs'; - *{"${class}::set$attr"} = $set; - *{"${class}::get$attr"} = $get; - *{"${class}::has$attr"} = $has; - *{"${class}::del$attr"} = $del; - } -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Dir.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Dir.pm deleted file mode 100644 index 90609b971c754c8b1943a7b4c3fec9181aaa6d43..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Dir.pm +++ /dev/null @@ -1,170 +0,0 @@ -package NDB::Util::Dir; - -use strict; -use Carp; -use Symbol; -use Errno; -use File::Basename; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::Dir->attributes( - path => sub { length > 0 }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $dir = $class->SUPER::new(%attr); - $dir->setpath($attr{path}) - or $log->push, return undef; - return $dir; -} - -sub desc { - my $dir = shift; - return $dir->getpath; -} - -sub getparent { - my $dir = shift; - @_ == 0 or confess 0+@_; - my $ppath = dirname($dir->getpath); - my $pdir = NDB::Util::Dir->new(path => $ppath); - return $pdir; -} - -sub getdir { - my $dir = shift; - @_ == 1 or confess 0+@_; - my($name) = @_; - my $dirpath = $dir->getpath; - my $path = $dirpath eq '.' ? $name : File::Spec->catfile($dirpath, $name); - my $entry = NDB::Util::Dir->new(path => $path); - return $entry; -} - -sub getfile { - my $dir = shift; - @_ == 1 or confess 0+@_; - my($name) = @_; - my $dirpath = $dir->getpath; - my $path = $dirpath eq '.' ? $name : File::Spec->catfile($dirpath, $name); - my $entry = NDB::Util::File->new(path => $path); - return $entry; -} - -# list - -sub listdirs { - my $dir = shift; - @_ == 0 or confess 0+@_; - my @list = (); - my $dirpath = $dir->getpath; - my $dh = gensym(); - if (! opendir($dh, $dirpath)) { - $log->put("opendir failed: $!")->push($dir); - return undef; - } - while (defined(my $name = readdir($dh))) { - if ($name eq '.' || $name eq '..') { - next; - } - my $path = $dirpath eq '.' ? $name : "$dirpath/$name"; - if (! -l $path && -d $path) { - my $dir2 = NDB::Util::Dir->new(path => $path) - or $log->push, return undef; - push(@list, $dir2); - } - } - close($dh); - return \@list; -} - -sub listfiles { - my $dir = shift; - @_ == 0 or confess 0+@_; - my @list = (); - my $dirpath = $dir->getpath; - my $dh = gensym(); - if (! opendir($dh, $dirpath)) { - $log->put("opendir failed: $!")->push($dir); - return undef; - } - while (defined(my $name = readdir($dh))) { - if ($name eq '.' || $name eq '..') { - next; - } - my $path = $dirpath eq '.' ? $name : "$dirpath/$name"; - if (! -d $path && -e $path) { - my $file2 = NDB::Util::File->new(path => $path) - or $log->push, return undef; - push(@list, $file2); - } - } - close($dh); - return \@list; -} - -# create / remove - -sub mkdir { - my $dir = shift; - @_ == 0 or confess 0+@_; - if (! -d $dir->getpath) { - my $pdir = $dir->getparent; - if (length($pdir->getpath) >= length($dir->getpath)) { - $log->put("mkdir looping")->push($dir); - return undef; - } - $pdir->mkdir or return undef; - if (! mkdir($dir->getpath, 0777)) { - my $errstr = "$!"; - if (-d $dir->getpath) { - return 1; - } - $log->put("mkdir failed: $errstr")->push($dir); - return undef; - } - } - return 1; -} - -sub rmdir { - my $dir = shift; - my $keep = shift; # keep top level - $log->put("remove")->push($dir)->info; - my $list; - $list = $dir->listdirs or $log->push, return undef; - for my $d (@$list) { - $d->rmdir or $log->push, return undef; - } - $list = $dir->listfiles or $log->push, return undef; - for my $f (@$list) { - $f->unlink or $log->push, return undef; - } - if (! $keep && ! rmdir($dir->getpath)) { - my $errstr = "$!"; - if (! -e $dir->getpath) { - return 1; - } - $log->put("rmdir failed: $errstr")->push($dir); - return undef; - } - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Event.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Event.pm deleted file mode 100644 index a3ad32cd7fb8c628abad29da0ca1e2c5527bde00..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Event.pm +++ /dev/null @@ -1,103 +0,0 @@ -package NDB::Util::Event; - -use strict; -use Carp; -use Errno; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::Event->attributes(); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $event = $class->SUPER::new(%attr); - return $event; -} - -# set and test bits - -sub check { - my $event = shift; - my($file, $type) = @_; - my $fileno; - if (ref($file) eq 'GLOB') { - $fileno = fileno($file); - } - elsif (ref($file)) { - $file->can("getfh") or confess 'oops'; - $fileno = fileno($file->getfh); - } - else { - $fileno = $file; - } - defined($fileno) or confess 'oops'; - $fileno =~ s/^\s+|\s+$//g; - $fileno =~ /^\d+$/ or confess 'oops'; - $type =~ /^[rwe]$/ or confess 'oops'; - return ($fileno, $type); -} - -sub set { - my $event = shift; - @_ == 2 or confess 0+@_; - my($fileno, $type) = $event->check(@_); - vec($event->{"i_$type"}, $fileno, 1) = 1; -} - -sub clear { - my $event = shift; - @_ == 2 or confess 0+@_; - my($fileno, $type) = $event->check(@_); - vec($event->{"i_$type"}, $fileno, 1) = 0; -} - -sub test { - my $event = shift; - @_ == 2 or confess 0+@_; - my($fileno, $type) = $event->check(@_); - return vec($event->{"o_$type"}, $fileno, 1); -} - -# poll - -sub poll { - my $event = shift; - @_ <= 1 or confess 'oops'; - my $timeout = shift; - if (defined($timeout)) { - $timeout =~ /^\d+$/ or confess 'oops'; - } - $event->{o_r} = $event->{i_r}; - $event->{o_w} = $event->{i_w}; - $event->{o_e} = $event->{i_e}; - my $n; - $n = select($event->{o_r}, $event->{o_w}, $event->{o_e}, $timeout); - if ($n < 0 || ! defined($n)) { - if ($! == Errno::EINTR) { - $log->put("select interrupted"); - return 0; - } - $log->put("select failed: $!"); - return undef; - } - if (! $n) { - $log->put("select timed out"); - } - return $n; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/File.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/File.pm deleted file mode 100644 index 4b3cb38191cfc7996b4b69a82634249630e805e6..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/File.pm +++ /dev/null @@ -1,163 +0,0 @@ -package NDB::Util::File; - -use strict; -use Carp; -use Symbol; -use Errno; -use File::Basename; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::File->attributes( - path => sub { length > 0 }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $file = $class->SUPER::new(%attr); - $file->setpath($attr{path}) - or $log->push, return undef; - return $file; -} - -sub desc { - my $file = shift; - return $file->getpath; -} - -sub getdir { - my $file = shift; - @_ == 0 or confess 0+@_; - my $dirpath = dirname($file->getpath); - my $dir = NDB::Util::Dir->new(path => $dirpath); - return $dir; -} - -sub getlock { - my $file = shift; - @_ == 0 or confess 0+@_; - my $lock = NDB::Util::Lock->new(path => $file->getpath); - return $lock; -} - -sub getbasename { - my $file = shift; - @_ == 0 or confess 0+@_; - return basename($file->getpath); -} - -# make dir, unlink - -sub mkdir { - my $file = shift; - @_ == 0 or confess 0+@_; - return $file->getdir->mkdir; -} - -sub unlink { - my $file = shift; - @_ == 0 or confess 0+@_; - $log->put("remove")->push($file)->debug; - if (-e $file->getpath) { - if (! unlink($file->getpath)) { - my $errstr = "$!"; - if (! -e $file->getpath) { - return 1; - } - $log->put("unlink failed: $errstr")->push($file); - return undef; - } - } - return 1; -} - -# read /write - -sub open { - my $file = shift; - @_ == 1 or confess 0+@_; - my($mode) = @_; - my $fh = gensym(); - if (! open($fh, $mode.$file->getpath)) { - $log->put("open$mode failed")->push($file); - return undef; - } - my $io = NDB::Util::IO->new; - $io->setfh($fh) - or $log->push, return undef; - return $io; -} - -sub puttext { - my $file = shift; - @_ == 1 or confess 0+@_; - my($text) = @_; - ref($text) and confess 'oops'; - $file->mkdir - or $log->push, return undef; - $file->unlink - or $log->push, return undef; - my $io = $file->open(">") - or $log->push, return undef; - if (! $io->write($text)) { - $log->push($file); - $io->close; - return undef; - } - if (! $io->close) { - $log->push($file); - return undef; - } - return 1; -} - -sub putlines { - my $file = shift; - @_ == 1 or confess 0+@_; - my($lines) = @_; - ref($lines) eq 'ARRAY' or confess 'oops'; - my $text = join("\n", @$lines) . "\n"; - $file->puttext($text) or $log->push, return undef; - return 1; -} - -sub copyedit { - my $file1 = shift; - @_ == 2 or confess 0+@_; - my($file2, $edit) = @_; - my $io1 = $file1->open("<") - or $log->push, return undef; - my $io2 = $file2->open(">") - or $log->push, return undef; - local $_; - my $fh1 = $io1->getfh; - my $fh2 = $io2->getfh; - my $line = 0; - while (defined($_ = <$fh1>)) { - $line++; - if (! &$edit()) { - $log->push("line $line")->push($file1); - return undef; - } - print $fh2 $_; - } - $io1->close; - $io2->close; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/IO.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/IO.pm deleted file mode 100644 index 34f4d0a150d7440688dbf485b3a49be465b8cfd1..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/IO.pm +++ /dev/null @@ -1,213 +0,0 @@ -package NDB::Util::IO; - -use strict; -use Carp; - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::IO->attributes( - readbuf => sub { defined }, - readend => sub { defined }, - writebuf => sub { defined }, - writeend => sub { defined }, - iosize => sub { $_ > 0 }, - timeout => sub { /^\d+$/ }, - fh => sub { ref($_) eq 'GLOB' && defined(fileno($_)) }, -); - -sub desc { - my $io = shift; - my $fileno = $io->hasfh ? fileno($io->getfh) : -1; - return "fd=$fileno"; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $io = $class->SUPER::new(%attr); - $io->setreadbuf("") - or $log->push, return undef; - $io->setreadend(0) - or $log->push, return undef; - $io->setwritebuf("") - or $log->push, return undef; - $io->setwriteend(0) - or $log->push, return undef; - $io->setiosize(1024) - or $log->push, return undef; - $io->settimeout(0) - or $log->push, return undef; - if (defined($attr{fh})) { - $io->setfh($attr{fh}) - or $log->push, return undef; - } - return $io; -} - -# input / output - -sub read { - my $io = shift; - @_ == 0 or confess 0+@_; - if ($io->getreadend) { - return ""; - } - my $size = $io->getiosize; - my $timeout = $io->hastimeout ? $io->gettimeout : 0; - my $fh = $io->getfh; - my $n; - my $data; - eval { - if ($^O ne 'MSWin32' && $timeout > 0) { - local $SIG{ALRM} = sub { die("timed out\n") }; - alarm($timeout); - $n = sysread($fh, $data, $size); - alarm(0); - } - else { - $n = sysread($fh, $data, $size); - } - }; - if ($@) { - $log->put("read error: $@")->push($io); - return undef; - } - if (! defined($n)) { - $log->put("read failed: $!")->push($io); - return undef; - } - if ($n == 0) { - $io->setreadend(1) - or $log->push, return undef; - $log->put("read EOF")->push($io)->debug; - return ""; - } - (my $show = $data) =~ s!\n!\\n!g; - $log->put("read: $show")->push($io)->debug; - return $data; -} - -sub readbuf { - my $io = shift; - @_ == 0 or confess 0+@_; - my $data = $io->read; - defined($data) or - $log->push, return undef; - if (length($data) == 0) { - return 0; - } - $io->setreadbuf($io->getreadbuf . $data) - or $log->push, return undef; - return 1; -} - -sub readupto { - my $io = shift; - @_ == 1 or confess 0+@_; - my($code) = @_; - ref($code) eq 'CODE' or confess 'oops'; - my $k = &$code($io->getreadbuf); - if (! defined($k)) { - $log->push($io); - return undef; - } - if ($k == 0) { - my $n = $io->readbuf; - defined($n) or - $log->push, return undef; - if ($n == 0) { - if ($io->getreadbuf eq "") { - return ""; - } - $log->put("incomplete input: %s", $io->getreadbuf)->push($io); - return undef; - } - $k = &$code($io->getreadbuf); - if (! defined($k)) { - $log->push($io); - return undef; - } - if ($k == 0) { - return ""; - } - } - my $head = substr($io->getreadbuf, 0, $k); - my $tail = substr($io->getreadbuf, $k); - $io->setreadbuf($tail) - or $log->push, return undef; - return $head; -} - -sub readline { - my $io = shift; - @_ == 0 or confess 0+@_; - my $code = sub { - my $i = index($_[0], "\n"); - return $i < 0 ? 0 : $i + 1; - }; - return $io->readupto($code); -} - -sub write { - my $io = shift; - @_ == 1 or confess 0+@_; - my($data) = @_; - my $timeout = $io->hastimeout ? $io->gettimeout : 0; - my $fh = $io->getfh; - (my $show = $data) =~ s!\n!\\n!g; - $log->put("write: $show")->push($io)->debug; - my $n; - my $size = length($data); - eval { - local $SIG{PIPE} = sub { die("broken pipe\n") }; - if ($^O ne 'MSWin32' && $timeout > 0) { - local $SIG{ALRM} = sub { die("timed out\n") }; - alarm($timeout); - $n = syswrite($fh, $data, $size); - alarm(0); - } - else { - $n = syswrite($fh, $data, $size); - } - }; - if ($@) { - $log->put("write error: $@")->push($io); - return undef; - } - if (! defined($n)) { - $log->put("write failed: $!")->push($io); - return undef; - } - if ($n > $size) { - $log->put("impossible write: $n > $size")->push($io); - return undef; - } - if ($n != $size) { # need not be error - $log->put("short write: $n < $size")->push($io); - } - return $n; -} - -sub close { - my $io = shift; - @_ == 0 or confess 0+@_; - if (! close($io->delfh)) { - $log->put("close failed: $!")->push($io); - return undef; - } - return 1; -} - -1; diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Lock.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Lock.pm deleted file mode 100644 index b515e63305974858402c1602c24a26622db1643f..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Lock.pm +++ /dev/null @@ -1,136 +0,0 @@ -package NDB::Util::Lock; - -use strict; -use Carp; -use Symbol; -use Fcntl qw(:flock); -use Errno; -use File::Basename; - -require NDB::Util::File; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::File); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::Lock->attributes( - pid => sub { $_ != 0 }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $lock = $class->SUPER::new(%attr); - return $lock; -} - -sub desc { - my $lock = shift; - return $lock->getpath; -} - -# test / set - -sub test { - my $lock = shift; - @_ == 0 or confess 0+@_; - my $fh = gensym(); - if (! open($fh, "+<$lock->{path}")) { - if ($! != Errno::ENOENT) { - $log->put("$lock->{path}: open failed: $!"); - return undef; - } - return 0; # file does not exist - } - if (flock($fh, LOCK_EX|LOCK_NB)) { - close($fh); - return 0; # file was not locked - } - if ($^O eq 'MSWin32') { - close($fh); - if (! open($fh, "<$lock->{path}x")) { - $log->put("$lock->{path}x: open failed: $!"); - return undef; - } - } - my $pid = <$fh>; - close($fh); - ($pid) = split(' ', $pid); - if ($pid+0 == 0) { - $log->put("$lock->{path}: locked but pid='$pid' is zero"); - return undef; - } - $lock->{pid} = $pid; - return 1; # file was locked -} - -sub set { - my $lock = shift; - @_ == 0 or confess 0+@_; - my $fh = gensym(); - if (! open($fh, "+<$lock->{path}")) { - if ($! != Errno::ENOENT) { - $log->put("$lock->{path}: open failed: $!"); - return undef; - } - close($fh); - if (! open($fh, ">$lock->{path}")) { - $log->put("$lock->{path}: create failed: $!"); - return undef; - } - } - if (! flock($fh, LOCK_EX|LOCK_NB)) { - $log->put("$lock->{path}: flock failed: $!"); - close($fh); - return 0; # file was probably locked - } - my $line = "$$\n"; - if ($^O eq 'MSWin32') { - my $gh = gensym(); - if (! open($gh, ">$lock->{path}x")) { - $log->put("$lock->{path}x: open for write failed: $!"); - close($fh); - return undef; - } - if (! syswrite($gh, $line)) { - close($fh); - close($gh); - $log->put("$lock->{path}x: write failed: $!"); - return undef; - } - close($gh); - } else { - if (! truncate($fh, 0)) { - close($fh); - $log->put("$lock->{path}: truncate failed: $!"); - return undef; - } - if (! syswrite($fh, $line)) { - close($fh); - $log->put("$lock->{path}: write failed: $!"); - return undef; - } - } - $lock->{fh} = $fh; - return 1; # file is now locked by us -} - -sub close { - my $lock = shift; - @_ == 0 or confess 0+@_; - my $fh = delete $lock->{fh}; - if ($fh) { - close($fh); - } -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Log.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Log.pm deleted file mode 100644 index 44b39df84e6158460be001ace5365c904e2ea2a1..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Log.pm +++ /dev/null @@ -1,367 +0,0 @@ -package NDB::Util::Log; - -use strict; -use Carp; -use Symbol; -use Data::Dumper (); - -require NDB::Util::Base; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Base); - -# constructors - -my $instance = undef; -my %attached = (); - -my %priolevel = qw(user 0 fatal 1 error 2 warn 3 notice 4 info 5 debug 6); -my %partlist = qw(time 1 pid 2 prio 3 text 4 line 5); - -NDB::Util::Log->attributes( - prio => sub { defined($priolevel{$_}) }, - parts => sub { ref eq 'HASH' }, - stack => sub { ref eq 'ARRAY' }, - io => sub { ref && $_->isa('NDB::Util::IO') }, - active => sub { defined }, - censor => sub { ref eq 'ARRAY' }, -); - -sub setpart { - my $log = shift; - @_ % 2 == 0 or confess 0+@_; - while (@_) { - my $part = shift; - my $onoff = shift; - $partlist{$part} or confess 'oops'; - $log->getparts->{$part} = $onoff; - } -} - -sub getpart { - my $log = shift; - @_ == 1 or confess 0+@_; - my($part) = @_; - $partlist{$part} or confess 'oops'; - return $log->getparts->{$part}; -} - -sub instance { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - if (! $instance) { - $instance = $class->SUPER::new(%attr); - $instance->setprio(q(info)); - $instance->setparts({ text => 1 }); - $instance->setstack([]); - $instance->setcensor([]); - my $io = NDB::Util::IO->new(fh => \*STDERR, %attr) - or confess 'oops'; - $instance->setio($io); - } - return $instance; -} - -# attached logs are written in parallel to main log -# user log is a special server-to-client log - -sub attach { - my $log = shift; - @_ % 2 == 1 or confess 0+@_; - my($key, %attr) = @_; - $attached{$key} and confess 'oops'; - my $alog = $attached{$key} = $log->clone(%attr); - return $alog; -} - -sub detach { - my $log = shift; - @_ == 1 or confess 0+@_; - my($key) = @_; - $attached{$key} or return undef; - my $alog = delete $attached{$key}; - return $alog; -} - -sub attachuser { - my $log = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - %attr = ( - prio => q(user), - parts => { text => 1 }, - censor => [ qw(NDB::Net::Client NDB::Util::IO) ], - %attr); - my $alog = $log->attach(q(user), %attr); - return $alog; -} - -sub detachuser { - my $log = shift; - @_ == 0 or confess 0+@_; - my $alog = $log->detach(q(user)); - return $alog; -} - -# input / output - -sub setfile { - my $log = shift; - @_ == 1 or confess 0+@_; - my $file = shift; - if (! open(STDOUT, ">>$file")) { - $log->put("$file: open for append failed: $!"); - return undef; - } - select(STDOUT); - $| = 1; - open(STDERR, ">&STDOUT"); - select(STDERR); - $| = 1; - return 1; -} - -sub close { - my $log = shift; - $log->getio->close; -} - -sub closeall { - my $class = shift; - for my $key (sort keys %attached) { - my $log = $attached{$key}; - $log->close; - } - $instance->close; -} - -# private - -sub entry { - my $log = shift; - my($clear, $file, $line, @args) = @_; - $file =~ s!^.*\bNDB/!!; - $file =~ s!^.*/bin/([^/]+)$!$1!; - my $text = undef; - if (@args) { - $text = shift(@args); - if (! ref($text)) { - if (@args) { - $text = sprintf($text, @args); - } - while (chomp($text)) {} - } - } - if ($clear) { - $#{$log->getstack} = -1; - } - push(@{$log->getstack}, { - line => "$file($line)", - text => $text, - }); -} - -sub matchlevel { - my $log = shift; - my $msgprio = shift; - my $logprio = $log->getprio; - my $msglevel = $priolevel{$msgprio}; - my $loglevel = $priolevel{$logprio}; - defined($msglevel) && defined($loglevel) - or confess 'oops'; - if ($msglevel == 0 && $loglevel == 0) { - return $msgprio eq $logprio; - } - if ($msglevel == 0 && $loglevel != 0) { - return $loglevel >= $priolevel{q(info)}; - } - if ($msglevel != 0 && $loglevel == 0) { - return $msglevel <= $priolevel{q(notice)}; - } - if ($msglevel != 0 && $loglevel != 0) { - return $msglevel <= $loglevel; - } - confess 'oops'; -} - -sub print { - my $log = shift; - @_ == 2 or confess 0+@_; - my($prio, $tmpstack) = @_; - if ($log->hasactive) { # avoid recursion - return; - } - if (! $log->matchlevel($prio)) { - return; - } - $log->setactive(1); - my @text = (); - if ($log->getpart(q(time))) { - my @t = localtime(time); - push(@text, sprintf("%02d-%02d/%02d:%02d:%02d", - 1+$t[4], $t[3], $t[2], $t[1], $t[0])); - } - if ($log->getpart(q(pid))) { - push(@text, "[$$]"); - } - if ($log->getpart(q(prio)) && - (0 == $priolevel{$prio} || $priolevel{$prio} <= $priolevel{notice})) - { - push(@text, "[$prio]"); - } - if ($log->getpart(q(text))) { - my @stack = @$tmpstack; - while (@stack) { - my $s = pop(@stack); - my $text = $s->{text}; - if (ref($text)) { - if (grep($text->isa($_), @{$log->getcensor})) { - next; - } - $text = $text->desc; - } - push(@text, $text) if length($text) > 0; - } - } - if ($log->getpart(q(line)) && - (0 < $priolevel{$prio} && $priolevel{$prio} <= $priolevel{warn})) - { - push(@text, "at"); - my @stack = @$tmpstack; - while (@stack) { - my $s = shift(@stack); - defined($s->{line}) or confess 'oops'; - if ($text[-1] ne $s->{line}) { - push(@text, $s->{line}); - } - } - } - $log->getio->write("@text\n"); - $log->delactive; -} - -sub printall { - my $log = shift; - @_ == 1 or confess 0+@_; - my($prio) = @_; - my $logstack = $log->getstack; - if (! @$logstack) { - $log->put("[missing log message]"); - } - my @tmpstack = (); - while (@$logstack) { - push(@tmpstack, shift(@$logstack)); - } - for my $key (sort keys %attached) { - my $alog = $attached{$key}; - $alog->print($prio, \@tmpstack); - } - $instance->print($prio, \@tmpstack); -} - -# public - -sub push { - my $log = shift; - my(@args) = @_; - my($pkg, $file, $line) = caller; - $log->entry(0, $file, $line, @args); - return $log; -} - -sub put { - my $log = shift; - my(@args) = @_; - my($pkg, $file, $line) = caller; - $log->entry(1, $file, $line, @args); - return $log; -} - -sub fatal { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(fatal)); - exit(1); -} - -sub error { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(error)); - return $log; -} - -sub warn { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(warn)); - return $log; -} - -sub notice { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(notice)); - return $log; -} - -sub info { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(info)); - return $log; -} - -sub debug { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(debug)); - return $log; -} - -sub user { - my $log = shift; - @_ == 0 or confess 0+@_; - $log->printall(q(user)); - return $log; -} - -# return values from server to client - -sub putvalue { - my $log = shift; - @_ == 1 or confess 0+@_; - my($value) = @_; - my $d = Data::Dumper->new([$value], [qw($value)]); - $d->Indent(0); - $d->Useqq(1); - my $dump = $d->Dump; - $dump =~ /^\s*\$value\s*=\s*(.*);\s*$/ or confess $dump; - $log->push("[value $1]"); -} - -sub hasvalue { - my $log = shift; - @_ == 1 or confess 0+@_; - my($line) = @_; - return $line =~ /\[value\s+(.*)\]/; -} - -sub getvalue { - my $log = shift; - @_ == 1 or confess 0+@_; - my($line) = @_; - $line =~ /\[value\s+(.*)\]/ or confess $line; - my $expr = $1; - my($value); - eval "\$value = $expr"; - if ($@) { - $log->put("$line: eval error: $@"); - return undef; - } - return [$value]; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Socket.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Socket.pm deleted file mode 100644 index 00e8b6eca5185e3bd9d45b5dd6ecaab56811cb79..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/Socket.pm +++ /dev/null @@ -1,158 +0,0 @@ -package NDB::Util::Socket; - -use strict; -use Carp; -use Symbol; -use Socket; -use Errno; - -require NDB::Util::IO; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::IO); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::Socket->attributes( - domain => sub { $_ == PF_INET || $_ == PF_UNIX }, - type => sub { $_ == SOCK_STREAM }, - proto => sub { /^(0|tcp)$/ }, -); - -sub desc { - my $socket = shift; - return $socket->SUPER::desc; -} - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $socket = $class->SUPER::new(%attr); - $socket->setdomain($attr{domain}) - or $log->push, return undef; - $socket->settype($attr{type}) - or $log->push, return undef; - $socket->setproto($attr{proto}) - or $log->push, return undef; - my $nproto; - if ($socket->getproto =~ /^\d+/) { - $nproto = $socket->getproto; - } - else { - $nproto = getprotobyname($socket->getproto); - unless (defined($nproto)) { - $log->put("%s: getprotobyname failed", $socket->getproto); - return undef; - } - } - my $fh = gensym(); - if (! socket($fh, $socket->getdomain, $socket->gettype, $nproto)) { - $log->put("create socket failed: $!"); - return undef; - } - $socket->setfh($fh) - or $log->push, return undef; - return $socket; -} - -sub setopt { - my $socket = shift; - @_ >= 2 or confess 'oops'; - my $level = shift; - my $optname = shift; - my $optval = @_ ? pack("l*", @_) : undef; - my $fh = $socket->getfh; - if (! setsockopt($fh, $level, $optname, $optval)) { - $log->put("setsockopt failed: $!")->push($socket); - return undef; - } - return 1; -} - -sub connect { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($paddr) = @_; - my $fh = $socket->getfh; - if (! connect($fh, $paddr)) { - $log->put("connect failed: $!")->push($socket); - return undef; - } - $log->put("connect done")->push($socket)->debug; - return 1; -} - -sub bind { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($paddr) = @_; - my $fh = $socket->getfh; - if (! bind($fh, $paddr)) { - $log->put("bind failed: $!")->push($socket); - return undef; - } - return 1; -} - -sub listen { - my $socket = shift; - @_ == 0 or confess 0+@_; - my $fh = $socket->getfh; - if (! listen($fh, SOMAXCONN)) { - $log->put("listen failed: $!")->push($socket); - return undef; - } - return 1; -} - -sub accept { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($timeout) = @_; - $timeout =~ /^\d+$/ or confess 'oops'; - my $fh = $socket->getfh; - my $gh = gensym(); - my $paddr; - eval { - if ($^O ne 'MSWin32' && $timeout > 0) { - local $SIG{ALRM} = sub { die("timed out\n") }; - alarm($timeout); - $paddr = accept($gh, $fh); - alarm(0); - } - else { - $paddr = accept($gh, $fh); - } - }; - if ($@) { - $log->put("accept failed: $@")->push($socket); - return undef; - } - if (! $paddr) { - my $errno = 0+$!; - if ($errno == Errno::EINTR) { - $log->put("accept interrupted")->push($socket); - return 0; - } - $log->put("accept failed: $!")->push($socket); - return undef; - } - my $csocket = $socket->clone(fh => $gh); - $csocket->acceptaddr($paddr); - return $csocket; -} - -sub DESTROY { - my $socket = shift; - $socket->close; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketINET.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketINET.pm deleted file mode 100644 index faaa568a08e54b05e48a4cd6d97e01fd5843ecd3..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketINET.pm +++ /dev/null @@ -1,86 +0,0 @@ -package NDB::Util::SocketINET; - -use strict; -use Carp; -use Symbol; -use Socket; -use Errno; - -require NDB::Util::Socket; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Socket); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::SocketINET->attributes( - host => sub { /^\S+$/ }, - port => sub { /^\d+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $socket = $class->SUPER::new(%attr, - domain => PF_INET, type => SOCK_STREAM, proto => 'tcp') - or $log->push, return undef; - return $socket; -} - -sub connect { - my $socket = shift; - @_ == 2 or confess 0+@_; - my($host, $port) = @_; - $port =~ /^\d+$/ or confess 'oops'; - my $iaddr = inet_aton($host); - if (! $iaddr) { - $log->put("host $host not found")->push($socket); - return undef; - } - my $paddr = pack_sockaddr_in($port, $iaddr); - $socket->SUPER::connect($paddr) - or $log->push, return undef; - $socket->sethost($host) - or $log->push, return undef; - $socket->setport($port) - or $log->push, return undef; - return 1; -} - -sub bind { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($port) = @_; - $port =~ /^\d+$/ or confess 'oops'; - my $paddr = pack_sockaddr_in($port, INADDR_ANY); - $socket->SUPER::bind($paddr) - or $log->push, return undef; - $socket->setport($port) - or $log->push, return undef; - return 1; -} - -sub acceptaddr { - my $csocket = shift; - @_ == 1 or confess 0+@_; - my($paddr) = @_; - my($port, $iaddr) = unpack_sockaddr_in($paddr); - my $host = gethostbyaddr($iaddr, AF_INET); - $csocket->sethost($host) - or $log->push, return undef; - $csocket->setport($port) - or $log->push, return undef; - $log->put("accept: host=%s port=%d", - $csocket->gethost, $csocket->getport)->push($csocket)->debug; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketUNIX.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketUNIX.pm deleted file mode 100644 index 9c6b3115f6a1b56c866b665d218b23b3ca7ff951..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Util/SocketUNIX.pm +++ /dev/null @@ -1,76 +0,0 @@ -package NDB::Util::SocketUNIX; - -use strict; -use Carp; -use Symbol; -use Socket; -use Errno; - -require NDB::Util::Socket; - -use vars qw(@ISA); -@ISA = qw(NDB::Util::Socket); - -# constructors - -my $log; - -sub initmodule { - $log = NDB::Util::Log->instance; -} - -NDB::Util::SocketUNIX->attributes( - path => sub { /^\S+$/ }, -); - -sub new { - my $class = shift; - @_ % 2 == 0 or confess 0+@_; - my(%attr) = @_; - my $socket = $class->SUPER::new(%attr, - domain => PF_UNIX, type => SOCK_STREAM, proto => 0) - or $log->push, return undef; - return $socket; -} - -sub connect { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($path) = @_; - $path =~ /^\S+$/ or confess 'oops'; - my $paddr = pack_sockaddr_un($path); - $socket->SUPER::connect($paddr) - or $log->push, return undef; - $socket->setpath($path) - or $log->push, return undef; - return 1; -} - -sub bind { - my $socket = shift; - @_ == 1 or confess 0+@_; - my($path) = @_; - $path =~ /^\S+$/ or confess 'oops'; - my $paddr = pack_sockaddr_un($path); - $socket->SUPER::bind($paddr) - or $log->push, return undef; - $socket->setpath($path) - or $log->push, return undef; - return 1; -} - -sub acceptaddr { - my $csocket = shift; - @_ == 1 or confess 0+@_; - my($paddr) = @_; - return 1; # crash - my $path = unpack_sockaddr_un($paddr); - $csocket->setpath($path) - or $log->push, return undef; - $log->put("%s accept: path=%s", - $csocket->getpath)->push($csocket)->debug; - return 1; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/ndbnet.pl b/storage/ndb/tools/old_dirs/ndbnet/ndbnet.pl deleted file mode 100644 index 5f6648da46de78471217eef7a9524b753aee4b2b..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/ndbnet.pl +++ /dev/null @@ -1,339 +0,0 @@ -#! /usr/local/bin/perl - -use strict; -use POSIX(); -use Socket; -use Getopt::Long; -use File::Basename; -use Term::ReadLine; - -use NDB::Net; - -select(STDOUT); -$| = 1; - -# get options and environment - -my $log = NDB::Util::Log->instance; -$log->setpart(); - -sub printhelp { - print <<END; -ndbnet -- ndbnet client -usage: ndbnet [options] [command...] ---help print this text and exit ---base dir ndb installation, default \$NDB_BASE ---netcfg file net config, default \$NDB_BASE/etc/ndbnet.xml ---server id ndbnetd server id, or host:port if no config ---noterm no prompting and no input editing ---log prio debug/info/notice/warn/error/fatal, default info -command... command (by default becomes interactive) -END - exit(0); -} - -my $progopts = {}; -my @progargv; - -anon: { - local $SIG{__WARN__} = sub { - my $errstr = "@_"; - while (chomp($errstr)) {} - $log->put("$errstr (try --help)")->fatal; - }; - Getopt::Long::Configure(qw( - default no_getopt_compat no_ignore_case require_order - )); - GetOptions($progopts, qw( - help base=s netcfg=s server=s noterm log=s - )); -} - -$progopts->{help} && printhelp(); -if (defined(my $prio = $progopts->{log})) { - $log->setprio($prio); -} -@progargv = @ARGV; - -my $netenv = NDB::Net::Env->instance( - base => $progopts->{base}, - netcfg => $progopts->{netcfg}, -); -$netenv or $log->fatal; - -# get servers from command line or from net config - -my @servers = (); -my $netcfg; -if ($netenv->hasnetcfg) { - $netcfg = NDB::Net::Config->new(file => $netenv->getnetcfg); -} - -if (defined(my $id = $progopts->{server})) { - if ($id !~ /:/) { - $netcfg or $log->put("need net config to find server $id")->fatal; - $netcfg->load or $log->push->fatal; - $netcfg->getservers or $log->push->fatal; - my $s = NDB::Net::Server->get($id) or $log->fatal; - push(@servers, $s); - } else { - my($host, $port) = split(/:/, $id, 2); - my $s = NDB::Net::ServerINET->new(id => "?", host => $host, port => $port) - or $log->fatal; - push(@servers, $s); - } -} else { - $netcfg or $log->put("need net config to find servers")->fatal; - $netcfg->load or $log->push->fatal; - my $list = $netcfg->getservers or $log->fatal; - @servers= @$list; - @servers or $log->put("no servers")->push($netcfg)->fatal; -} - -# server commands - -my $server; -sub doserver { - my($cmd) = @_; - my $ret; - my $found; - for my $s (@servers) { - if (! $s->testconnect) { - $log->warn; - next; - } - $found = 1; - if ($server ne $s) { - $server = $s; - $log->put("selected")->push($server)->debug; - } - $ret = $server->request($cmd); - last; - } - if (! $found) { - $log->put("no available server"); - return undef; - } - my %seen = (); - @servers = grep(! $seen{$_}++, $server, @servers); - defined($ret) or $log->push, return undef; - return $ret; -} - -# local commands - -sub cmd_help { - my($cmd) = @_; - my $text = $cmd->helptext; - defined($text) or return undef; - while(chomp($text)) {} - print $text, "\n"; - return 1; -} - -sub cmd_alias { - my($cmd) = @_; - my $text = $cmd->aliastext; - while(chomp($text)) {} - print $text, "\n"; -} - -sub cmd_quit { - my($cmd) = @_; - $log->put("bye-bye")->info; - exit(0); -} - -sub cmd_server { - my($cmd) = @_; - my $action = $cmd->getarg(0); - if ($action !~ /^(start|restart|stop|ping)$/) { - $log->put("$action: undefined action"); - return undef; - } - if ($action eq 'start') { - $cmd->setopt('direct') - or $log->push, return undef; - } - if ($action eq 'ping' && ! @{$cmd->getarglist(1)}) { - $cmd->setopt('all') - or $log->push, return undef; - } - if (! $cmd->getopt('direct')) { - return doserver($cmd); - } - $netcfg->load - or return undef; - my $servers = $netcfg->getservers - or return undef; - my $list; - if ($cmd->getopt('all')) { - $list = $servers; - } - else { - $list = []; - for my $id (@{$cmd->getarglist(1)}) { - if (my $s = NDB::Net::ServerINET->get($id)) { - push(@$list, $s); - next; - } - if (my $s = NDB::Net::ServerINET->match($id, undef, $servers)) { - if (@$s) { - push(@$list, @$s); - next; - } - } - $log->push; - return undef; - } - } - if (! @$list) { - $log->put("no servers specified, use --all for all")->info; - return 1; - } - for my $s (@$list) { - if ($action eq 'ping') { - if ($s->testconnect) { - $log->put("is alive")->push($s); - } - $log->info; - next; - } - if ($action eq 'start') { - if ($s->testconnect) { - $log->put("already running")->push($s)->info; - next; - } - } - my $script = $cmd->getopt('script') || "ndbnetd"; - my @cmd = ($script); - if ($action eq 'restart') { - push(@cmd, "--restart"); - } - if ($action eq 'stop') { - push(@cmd, "--stop"); - } - if ($cmd->getopt('pass')) { - my $base = $netenv->getbase; - $cmd[0] = "$base/bin/$cmd[0]"; - } - if ($cmd->getopt('parallel')) { - my $pid = fork; - defined($pid) or - $log->push("fork failed: $!"), return undef; - $pid > 0 && next; - } - $log->put("$action via ssh")->push($s->getcanon)->push($s)->info; - $log->put("run: @cmd")->push($s)->debug; - system 'ssh', '-n', $s->getcanon, "@cmd"; - if ($cmd->getopt('parallel')) { - exit(0); - } - } - if ($cmd->getopt('parallel')) { - while ((my $pid = waitpid(-1, &POSIX::WNOHANG)) > 0) { - ; - } - } - return 1; -} - -sub cmd_list { - my($cmd) = @_; - my $ret = doserver($cmd) or - $log->push, return undef; - my @out = (); - my @o = qw(NAME NODES PROCESS STATUS COMMENT); - push(@out, [ @o ]); - for my $name (sort keys %$ret) { - $#o = -1; - $o[0] = $name; - my $dbsts = $ret->{$name}; - my @tmp = sort { $a->{id} <=> $b->{id} } values %{$dbsts->{node}}; - my @nodesmgmt = grep($_->{type} eq 'mgmt', @tmp); - my @nodesdb = grep($_->{type} eq 'db', @tmp); - my @nodesapi = grep($_->{type} eq 'api', @tmp); - my @nodes = (@nodesmgmt, @nodesdb, @nodesapi); - $o[1] = sprintf("%d/%d/%d", 0+@nodesmgmt, 0+@nodesdb, 0+@nodesapi); - $o[2] = "-"; - $o[3] = "-"; - $o[4] = $dbsts->{comment}; - $o[4] .= " - " if length $o[4]; - $o[4] .= basename($dbsts->{home}); - push(@out, [ @o ]); - for my $nodests (@nodes) { - $#o = -1; - $o[0] = $nodests->{id} . "-" . $nodests->{type}; - $o[1] = $nodests->{host}; - $o[1] =~ s/\..*//; - $o[2] = $nodests->{run}; - $o[3] = $nodests->{status} || "-"; - $o[4] = $nodests->{comment} || "-"; - push(@out, [ @o ]); - } - } - my @len = ( 8, 8, 8, 8 ); - for my $o (@out) { - for my $i (0..$#len) { - $len[$i] = length($o->[$i]) if $len[$i] < length($o->[$i]); - } - } - for my $o (@out) { - my @t = (); - for my $i (0..$#{$out[0]}) { - my $f = $len[$i] ? "%-$len[$i].$len[$i]s" : "%s"; - push(@t, sprintf($f, $o->[$i])); - } - print "@t\n"; - } - return 1; -} - -# main program - -sub docmd { - my(@args) = @_; - my $cmd = NDB::Net::Command->new(@args) - or return undef; - my $name = $cmd->getname; - my $doit; - { - no strict 'refs'; - $doit = *{"cmd_$name"}; - } - if (! defined(&$doit)) { - $doit = \&doserver; - } - my $ret = &$doit($cmd); - defined($ret) or $log->push, return undef; - return $ret; -} - -if (@progargv) { - docmd(argv => \@progargv) or $log->push->fatal; - exit(0); -} - -my $term; -if ((-t STDIN) && (-t STDOUT) && ! $progopts->{noterm}) { - $term = Term::ReadLine->new("ndbnet"); - $term->ornaments(0); -} - -print "type 'h' for help\n" if $term; -while (1) { - my($line); - while (! $line) { - $line = $term ? $term->readline("> ") : <STDIN>; - if (! defined($line)) { - print("\n") if $term; - $line = 'EOF'; - } - } - my $ret = docmd(line => $line); - $ret or $log->error; - ($line eq 'EOF') && last; -} - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/ndbnetd.pl b/storage/ndb/tools/old_dirs/ndbnet/ndbnetd.pl deleted file mode 100644 index 95fa5322abc6b6c546e58b7db2ee1c216a046660..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/ndbnetd.pl +++ /dev/null @@ -1,400 +0,0 @@ -#! /usr/local/bin/perl - -use strict; -use POSIX(); -use Socket; -use Getopt::Long; -use File::Basename; -use File::Spec; - -use NDB::Net; - -# save argv for restart via client -my @origargv = @ARGV; - -# get options and environment - -my $log = NDB::Util::Log->instance; - -sub printhelp { - print <<END; -ndbnetd -- ndbnet daemon -usage: ndbnetd [options] ---help print this text and exit ---base dir ndb installation, default \$NDB_BASE ---netcfg file net config, default \$NDB_BASE/etc/ndbnet.xml ---port num port number (if more than 1 server on this host) ---stop kill any existing server ---restart kill any existing server and start a new one ---fg run in foreground (test option) ---log prio debug/info/notice/warn/error/fatal, default info -END - exit(0); -} - -my $progopts = {}; -anon: { - local $SIG{__WARN__} = sub { - my $errstr = "@_"; - while (chomp($errstr)) {} - $log->put("$errstr (try --help)")->fatal; - }; - Getopt::Long::Configure(qw( - default no_getopt_compat no_ignore_case no_require_order - )); - GetOptions($progopts, qw( - help base=s netcfg=s port=i stop restart fg log=s - )); -} -$progopts->{help} && printhelp(); -if (defined(my $prio = $progopts->{log})) { - $log->setprio($prio); -} -@ARGV and $log->put("extra args on command line")->fatal; - -my $netenv = NDB::Net::Env->instance( - base => $progopts->{base}, - netcfg => $progopts->{netcfg}, -); -$netenv or $log->fatal; -$netenv->hasbase or $log->put("need NDB_BASE")->fatal; - -# load net config and find our entry - -my $netcfg = NDB::Net::Config->new(file => $netenv->getnetcfg) - or $log->push->fatal; -my $server; - -sub loadnetcfg { - $netcfg->load or $log->push->fatal; - my $servers = $netcfg->getservers or $log->fatal; - my $host = $netenv->gethostname; - my $port = $progopts->{port} || 0; - my $list = NDB::Net::ServerINET->match($host, $port, $servers) - or $log->push->fatal; - @$list == 1 - or $log->push->fatal; - $server = $list->[0]; - $server->setlocal; -} -loadnetcfg(); -$log->put("this server")->push($server)->debug; - -# check if server already running - -my $lock; -anon: { - my $dir = NDB::Util::Dir->new(path => File::Spec->catfile($netenv->getbase, "run")); - $dir->mkdir or $log->fatal; - my $name = sprintf("ndbnet%s.pid", $server->getid); - $lock = $dir->getfile($name)->getlock; - my $ret; - $ret = $lock->test; - defined($ret) or $log->fatal; - if ($ret) { - if ($progopts->{stop} || $progopts->{restart}) { - $log->put("stopping server %s pid=%s", $netenv->gethostname, $lock->getpid)->info; - if ($^O ne 'MSWin32') { - kill -15, $lock->getpid; - } else { - kill 15, $lock->getpid; - } - while (1) { - sleep 1; - $ret = $lock->test; - defined($ret) or $log->fatal; - if ($ret) { - if (! kill(0, $lock->getpid) && $! == Errno::ESRCH) { - $log->put("locked but gone (linux bug?)")->info; - $lock->unlink; - $ret = 0; - } - } - if (! $ret) { - if ($progopts->{stop}) { - $log->put("stopped")->info; - exit(0); - } - $log->put("restarting server %s", $netenv->gethostname)->info; - last; - } - } - } - else { - $log->put("already running pid=%s", $lock->getpid)->fatal; - } - } - else { - if ($progopts->{stop}) { - $log->put("not running")->info; - exit(0); - } - } - $lock->set or $log->fatal; -} - -# become daemon, re-obtain the lock, direct log to file - -anon: { - $log->setpart(time => 1, pid => 1, prio => 1, line => 1); - $progopts->{fg} && last anon; - $lock->close; - my $dir = NDB::Util::Dir->new(path => $netenv->getbase . "/log"); - $dir->mkdir or $log->fatal; - my $pid = fork(); - defined($pid) or $log->put("fork failed: $!")->fatal; - if ($pid) { - exit(0); - } - $lock->set or $log->fatal; - if ($^O ne 'MSWin32') { - POSIX::setsid() or $log->put("setsid failed: $!")->fatal; - } - open(STDIN, "</dev/null"); - my $name = sprintf("ndbnet%s.log", $server->getid); - $log->setfile($dir->getfile($name)->getpath) or $log->fatal; -} -$log->put("ndbnetd started pid=$$ port=%s", $server->getport)->info; - -# create server socket and event - -my $socket = NDB::Util::SocketINET->new or $log->fatal; -my $event = NDB::Util::Event->new; - -# commands - -sub cmd_server_fg { - my($cmd) = @_; - my $action = $cmd->getarg(0); - if (! $cmd->getopt('local')) { - return 1; - } - if ($action eq 'restart') { - my $prog = $netenv->getbase . "/bin/ndbnetd"; - my @argv = @origargv; - if (! grep(/^--restart$/, @argv)) { - push(@argv, "--restart"); - } - unshift(@argv, basename($prog)); - $lock->close; - $socket->close; - $log->put("restart: @argv")->push($server)->user; - $log->put("server restart")->putvalue(1)->user; - exec $prog @argv; - die "restart failed: $!"; - } - if ($action eq 'stop') { - $log->put("stop by request")->push($server)->user; - $log->put("server stop")->putvalue(1)->user; - exit(0); - } - if ($action eq 'ping') { - return 1; - } - $log->put("$action: unimplemented"); - return undef; -} - -sub cmd_server_bg { - my($cmd) = @_; - loadnetcfg() or return undef; - my $action = $cmd->getarg(0); - if (! $cmd->getopt('local')) { - $cmd->setopt('local') - or $log->push, return undef; - my $servers = $netcfg->getservers or $log->fatal; - my $list; - if ($cmd->getopt('all')) { - $list = $servers; - } - else { - $list = []; - for my $id (@{$cmd->getarglist(1)}) { - if (my $s = NDB::Net::ServerINET->get($id)) { - push(@$list, $s); - next; - } - if (my $s = NDB::Net::ServerINET->match($id, undef, $servers)) { - if (@$s) { - push(@$list, @$s); - next; - } - } - $log->push; - return undef; - } - } - my $fail = 0; - for my $s (@$list) { - if (! $s->request($cmd)) { - $log->push->user; - $fail++; - } - } - if ($fail) { - $log->put("failed %d/%d", $fail, scalar(@$list)); - return undef; - } - return 1; - } - if ($action eq 'restart') { - return 1; - } - if ($action eq 'stop') { - return 1; - } - if ($action eq 'ping') { - $log->put("is alive")->push($server)->user; - return 1; - } - $log->put("$action: unimplemented"); - return undef; -} - -sub cmd_start_bg { - my($cmd) = @_; - loadnetcfg() or return undef; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - $db->start($cmd->getopts) or return undef; - return 1; -} - -sub cmd_startnode_bg { - my($cmd) = @_; - loadnetcfg() or return undef; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - my $node = $db->getnode($cmd->getarg(1)) or return undef; - $node->start($cmd->getopts) or return undef; - return 1; -} - -sub cmd_stop_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - $db->stop($cmd->getopts) or return undef; - return 1; -} - -sub cmd_stopnode_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - my $node = $db->getnode($cmd->getarg(1)) or return undef; - $node->stop($cmd->getopts) or return undef; - return 1; -} - -sub cmd_kill_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - $db->kill($cmd->getopts) or return undef; - return 1; -} - -sub cmd_killnode_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - my $node = $db->getnode($cmd->getarg(1)) or return undef; - $node->kill($cmd->getopts) or return undef; - return 1; -} - -sub cmd_statnode_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - my $node = $db->getnode($cmd->getarg(1)) or return undef; - my $ret = $node->stat($cmd->getopts) or return undef; - return $ret; -} - -sub cmd_list_bg { - my($cmd) = @_; - loadnetcfg() or return undef; - my $dblist; - if ($cmd->getarg(0)) { - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - $dblist = [ $db ]; - } else { - $dblist = $netcfg->getdatabases or return undef; - } - my $ret = {}; - for my $db (@$dblist) { - my $status = $db->list($cmd->getopts) || "error"; - $ret->{$db->getname} = $status; - } - return $ret; -} - -sub cmd_writenode_bg { - my($cmd) = @_; - my $db = $netcfg->getdatabase($cmd->getarg(0)) or return undef; - my $node = $db->getnode($cmd->getarg(1)) or return undef; - my $ret = $node->write($cmd->getopts, $cmd->getarg(2)) or return undef; - return $ret; -} - -# main program - -sub checkchild { - while ((my $pid = waitpid(-1, &POSIX::WNOHANG)) > 0) { - $log->put("harvested pid=$pid")->info; - } -} - -my $gotterm = 0; -$SIG{INT} = sub { $gotterm = 1 }; -$SIG{TERM} = sub { $gotterm = 1 }; - -$socket->setopt(SOL_SOCKET, SO_REUSEADDR, 1) or $log->fatal; -$socket->bind($server->getport) or $log->fatal; -$socket->listen or $log->fatal; -$event->set($socket, 'r'); - -loop: { - try: { - my $n = $event->poll(10); - if ($gotterm) { - $log->put("terminate on signal")->info; - last try; - } - if (! defined($n)) { - $log->error; - sleep 1; - last try; - } - if (! $n) { - $log->debug; - last try; - } - if (! $event->test($socket, 'r')) { - last try; - } - my $csocket = $socket->accept(10); - if (! defined($csocket)) { - $log->error; - last try; - } - if (! $csocket) { - $log->warn; - last try; - } - my $client = NDB::Net::Client->new( - socket => $csocket, - serversocket => $socket, - serverlock => $lock, - event => $event, - context => 'main', - ); - $client or $log->fatal; - } - loadnetcfg() or $log->fatal; - NDB::Net::Client->processall; - if ($gotterm) { - last loop; - } - redo loop; -} - -$log->put("ndbnetd done")->info; - -1; -# vim:set sw=4: diff --git a/storage/ndb/tools/old_dirs/ndbnet/ndbrun b/storage/ndb/tools/old_dirs/ndbnet/ndbrun deleted file mode 100644 index 99121276d99fa968ae01fa2d945622247d72d2e9..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbnet/ndbrun +++ /dev/null @@ -1,33 +0,0 @@ -#! /bin/sh - -# just for autotest for now - -case $# in -1) script=$1 ;; -*) echo "usage: $0 script"; exit 1 ;; -esac - -case $NDB_TOP in -/*) ;; -*) echo "$0: NDB_TOP not defined" >&2; exit 1 ;; -esac - -case $script in -/*) ;; -*) for d in $NDB_TOP $NDB_TOP/test $NDB_TOP/test/ndbnet; do - if [ -f $d/$script ]; then - script=$d/$script - break - fi - done ;; -esac - -if [ ! -f $script ]; then - echo "$0: $script: script not found" >&2; exit 1 -fi - -PERL5LIB=$NDB_TOP/lib/perl5:$PERL5LIB; export PERL5LIB - -perl -cw $script || exit 1 -perl $script -exit $? diff --git a/storage/ndb/tools/old_dirs/ndbsql/Makefile b/storage/ndb/tools/old_dirs/ndbsql/Makefile deleted file mode 100644 index 81ca87b041424f4fe73802279f2ac8c758ca926b..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/ndbsql/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -include .defs.mk - -TYPE := util - -BIN_TARGET := ndbsql - -# -# If BIN_TARGET_LIBS include NDB_ODBC then the ODBC lib is -# linked into the program and the user does not need to -# set up any ODBC stuff to make it work. -# -# If you want to use this program together with some -# other DBMS (e.g. MySQL or Oracle), then comment the line below. -# -BIN_TARGET_LIBS = NDB_ODBC - -#BIN_TARGET_ARCHIVES := mgmapi NDB_API - -ifneq ($(USE_EDITLINE), N) -BIN_TARGET_ARCHIVES += editline -#DIRS := mkconfig -endif - -BIN_FLAGS += $(TERMCAP_LIB) - -#ifneq ($(USE_TERMCAP), N) -#LDFLAGS_LOC = -ltermcap -#endif - - -# Source files of non-templated classes (.cpp files) -SOURCES = \ - ndbsql.cpp - -CCFLAGS_LOC += -I$(call fixpath,$(NDB_TOP)/src/ndbapi) \ - -I$(call fixpath,$(NDB_TOP)/include/mgmapi) \ - -I$(call fixpath,$(NDB_TOP)/include/util) \ - -I$(call fixpath,$(NDB_TOP)/src/common/mgmcommon) - - -include $(NDB_TOP)/Epilogue.mk - -_bins_mkconfig : $(NDB_TOP)/bin/$(BIN_TARGET) - diff --git a/storage/ndb/tools/old_dirs/select_all/Makefile b/storage/ndb/tools/old_dirs/select_all/Makefile deleted file mode 100644 index e14e411b3a53450416d8e18814f9018ec59a1269..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/select_all/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := select_all - -SOURCES := select_all.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/select_count/Makefile b/storage/ndb/tools/old_dirs/select_count/Makefile deleted file mode 100644 index 35a53c6b046d7a52fac6dc772aac29b4df34d360..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/select_count/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include .defs.mk - -TYPE := ndbapitest - -BIN_TARGET := select_count - -SOURCES := select_count.cpp - -include $(NDB_TOP)/Epilogue.mk diff --git a/storage/ndb/tools/old_dirs/src/counterviewer/CounterViewer.java b/storage/ndb/tools/old_dirs/src/counterviewer/CounterViewer.java deleted file mode 100644 index 317c1c75e2867e0fd08a5e19b4bb6ef34672b4c5..0000000000000000000000000000000000000000 --- a/storage/ndb/tools/old_dirs/src/counterviewer/CounterViewer.java +++ /dev/null @@ -1,725 +0,0 @@ - -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.io.*; -import java.net.*; -import javax.swing.*; - -class Node extends Observable { - public final static int UNDEFINED = -1; - public final static int NDB_NODE = 0; - public final static int MGM_NODE = 1; - public final static int API_NODE = 2; - - public int getNodeType() { return m_nodeType;} - public static int getNodeType(String str) { - if(str.equals("NDB")) - return NDB_NODE; - if(str.equals("API")) - return API_NODE; - if(str.equals("MGM")) - return MGM_NODE; - return UNDEFINED; - } - - protected int m_nodeType; -} - -class NdbNode extends Node { - public NdbNode(){ - m_nodeType = NDB_NODE; - } - - public Counters getCounters() { return counters; } - - public void setCounters(Counters _c) { - - if(_c == null){ - counters = null; - setChanged(); - notifyObservers(); - return; - } - - int old_tps = 0; - int old_ops = 0; - int old_aps = 0; - int diff = 5; - if(counters != null){ - old_tps = counters.tps; - old_ops = counters.ops; - old_aps = counters.aps; - diff = 5; //_c.epochsecs - counters.epochsecs; - } - - switch(_c.type){ - case Counters.TRANSACTIONS: - _c.tps = (_c.transactions -_c.aborts)/ diff; - _c.aps = _c.aborts / diff; - _c.ops = old_ops; - break; - case Counters.OPERATIONS: - _c.tps = old_tps; - _c.aps = old_aps; - _c.ops = _c.operations / diff; - break; - } - - counters = _c; - setChanged(); - notifyObservers(); - } - - public int getNodeState(){ - return nodeState; - } - - public static int getNodeState(String state){ - if(state.equals("NOT_STARTED") || - state.equals("NO_CONTACT")) - return 0; - return 1; - } - - public void setState(int nodeState){ - this.nodeState = nodeState; - if(nodeState == 0) - counters = null; - } - - private int nodeState; - private Counters counters; -} - -class MgmNode extends Node { public MgmNode(){ m_nodeType = MGM_NODE; } } -class ApiNode extends Node { public ApiNode(){ m_nodeType = API_NODE; } } - -class Counters { - - public static final int TRANSACTIONS = 0; - public static final int OPERATIONS = 1; - - public Counters(){ - transactions = operations = -1; - } - - public int type; - public int transactions; - public int operations; - public int aborts; - public int tps; - public int ops; - public int aps; - public int epochsecs; - - public String toString(){ - return "[Counters"+ - " transactions="+transactions+ - " operations="+operations+ - " tps="+tps+ - " ops="+ops+ - " ]"; - } -} - -class NdbCluster extends Observable { - - NdbCluster(int node_types[], int num_nodes, int maxNodeId){ - - nodes = new Node[maxNodeId+1]; - maxCounters = new Counters(); - - for(int i = 0; i<maxNodeId; i++) - nodes[i] = null; - - for(int i = 1; i<num_nodes; i++) - switch(node_types[i]){ - case Node.NDB_NODE: - nodes[i] = new NdbNode(); - break; - case Node.API_NODE: - nodes[i] = new ApiNode(); - break; - case Node.MGM_NODE: - nodes[i] = new MgmNode(); - default: - } - } - - public int getNoOfNdbNodes(){ - if(nodes == null) - return 0; - int retVal = 0; - for(int i = 1; i<nodes.length; i++) - if(getNodeType(i) == Node.NDB_NODE) - retVal++; - return retVal; - } - - public int getNodeType(int nodeId){ - if(nodes == null || nodeId > nodes.length || nodes[nodeId] == null) - return Node.UNDEFINED; - return nodes[nodeId].getNodeType(); - } - - public Counters getCounters(int nodeId){ - if(nodes == null || nodeId > nodes.length || nodes[nodeId] == null || - nodes[nodeId].getNodeType() != Node.NDB_NODE) - return null; - return ((NdbNode)nodes[nodeId]).getCounters(); - } - - public void setCounters(int nodeId, Counters _c){ - if(nodes == null || nodeId > nodes.length || nodes[nodeId] == null) - return; - ((NdbNode)nodes[nodeId]).setCounters(_c); - - int maxSum = 0; - for(int i = 1; i<nodes.length; i++){ - Counters c = getCounters(i); - if(c != null){ - int sum = c.tps + c.ops + c.aps; - if(sum > maxSum){ - maxCounters = c; - maxSum = sum; - } - } - } - setChanged(); - notifyObservers(); - } - - public void setState(int nodeId, int nodeType, int nodeState){ - if(nodes == null || nodeId > nodes.length || nodes[nodeId] == null || - nodes[nodeId].getNodeType() != nodeType) - return; - - if(nodeType != Node.NDB_NODE) - return; - - ((NdbNode)nodes[nodeId]).setState(nodeState); - } - - public void setNoConnection(){ - for(int i = 1; i<nodes.length; i++){ - Counters c = getCounters(i); - if(c != null){ - setCounters(i, null); - } - } - } - - public Counters getMaxCounters(){ - return maxCounters; - } - - private Node nodes[]; - private Counters maxCounters; -} - -class CountersPanel extends JPanel implements Observer -{ - public CountersPanel(Dimension dim, NdbCluster _cluster, int maxInRow) - { - cluster = _cluster; - cluster.addObserver(this); - maxRow = maxInRow; - reSize(dim); - } - - private void showCounters(Graphics g, int node, int x, int y, boolean p) - { - Counters counters = cluster.getCounters(node); - - if (counters == null || p){ - // Mark processor as not available - g.setColor(Color.black); - g.fillRect(x, y, width, height); - } else { - int red = (counters.aps * height) / scale; - int green = (counters.tps * height) / scale; - int yellow = (counters.ops * height) / scale; - - System.out.println("tps="+counters.tps+" ops="+counters.ops+" scale="+scale+" green="+green+" yellow="+yellow); - - g.setColor(Color.white); - g.fillRect(x, y, width, height); - if (yellow + green + red <= height){ // Max 100% load - int yellow_scaled = yellow; - int green_scaled = green; - int red_scaled = red; - if (red_scaled > 0){ - g.setColor(Color.red); - g.fillRect(x, - height + y - red_scaled, - width, - red_scaled); - } - if (green_scaled > 0){ - g.setColor(Color.green); - g.fillRect(x, - height + y - red_scaled - green_scaled, - width, - green_scaled); - } - if (yellow_scaled > 0){ - g.setColor(Color.yellow); - g.fillRect(x, - height + y - red_scaled - green_scaled - yellow_scaled, - width, - yellow_scaled); - } - } - // Draw box - g.setColor(Color.black); - g.drawRect(x, y, width, height); - - float f = ((float)height)/((float)(lines+1)); - - for(int i = 0; i<lines; i++){ - int ytmp = (int)(y+height-(i+1)*f); - g.drawLine(x, ytmp, x+width, ytmp); - } - } - } - - public void paintComponent(Graphics g) - { - super.paintComponent(g); - - Counters maxCounters = cluster.getMaxCounters(); - final int sum = maxCounters.tps+maxCounters.ops+maxCounters.aps; - boolean skipDraw = false; - if(sum == 0){ - skipDraw = true; - } else { - lines = (sum / 1000) + 1; - scale = (lines+1) * 1000; - } - - int nodeId = 0; - int nodeNo = 0; - final int noOfNdbNodes = cluster.getNoOfNdbNodes(); - for(int row = 0; row <= noOfNdbNodes / maxRow; row++) { - int end = Math.min(noOfNdbNodes, (row + 1) * maxRow); - for (int pos = 0; (nodeNo < noOfNdbNodes) && (pos < maxRow); pos++){ - while(cluster.getNodeType(nodeId) != Node.NDB_NODE) - nodeId++; - showCounters(g, - nodeId, - xindent + (xgap + width) * pos, - yindent + row * (height + ygap), - skipDraw); - nodeNo++; - nodeId++; - } - } - } - - public void setWidth(int maxInRow) - { - maxRow = maxInRow; - } - - public void reSize(Dimension dim) - { - final int noOfNdbNodes = cluster.getNoOfNdbNodes(); - - // System.out.println(dim); - int noRows = (int) Math.ceil((double) noOfNdbNodes / (double) maxRow); - xgap = (noOfNdbNodes > 1) ? Math.max(2, dim.width / 50) : 0; - ygap = (noOfNdbNodes > 1) ? Math.max(2, dim.height / 20) : 0; - xindent = 10; - yindent = 10; - int heightOfScroll = 20; - Insets insets = getInsets(); - width = (dim.width - (insets.left + insets.right) - 2*xindent + xgap)/maxRow - xgap; - height = (dim.height - (insets.top + insets.bottom) - 2*yindent + ygap - heightOfScroll)/noRows - ygap; - } - - - public void update(Observable o, Object arg){ - repaint(); - } - - private int width, height, maxRow, xgap, ygap, xindent, yindent; - private int scale; - private int lines; - private NdbCluster cluster; -} - -class CountersFrame extends JFrame - implements ComponentListener, AdjustmentListener -{ - - public CountersFrame(NdbCluster cluster) - { - setTitle("CountersViewer"); - - final int noOfNdbNodes = cluster.getNoOfNdbNodes(); - - processorWidth = Math.min(noOfNdbNodes, 10); - setSize(Math.max(50, processorWidth*20), - Math.max(100, 200*noOfNdbNodes/processorWidth)); - JPanel p = new JPanel(); - addComponentListener(this); - p.addComponentListener(this); - getContentPane().add(p, "Center"); - myPanel = new CountersPanel(getContentPane().getSize(), - cluster, - processorWidth); - getContentPane().add(myPanel, "Center"); - JPanel labelAndScroll = new JPanel(); - labelAndScroll.setLayout(new GridLayout (1, 2)); - myWidthLabel = new JLabel("Width: " + processorWidth); - labelAndScroll.add(myWidthLabel); - myWidthScroll = new JScrollBar(Adjustable.HORIZONTAL, - Math.min(noOfNdbNodes, 10), 0, 1, - noOfNdbNodes); - myWidthScroll.addAdjustmentListener(this); - labelAndScroll.add(myWidthScroll); - if (noOfNdbNodes > 1) - getContentPane().add(labelAndScroll, "South"); - } - - public void componentHidden(ComponentEvent e) { - } - - public void componentMoved(ComponentEvent e) { - } - - public void componentResized(ComponentEvent e) { - myPanel.reSize(getContentPane().getSize()); - repaint(); - } - - public void componentShown(ComponentEvent e) { - } - - public void adjustmentValueChanged(AdjustmentEvent evt) - { - myPanel.setWidth(myWidthScroll.getValue()); - myPanel.reSize(getContentPane().getSize()); - myWidthLabel.setText("Width: " + myWidthScroll.getValue()); - repaint(); - } - - private JScrollBar myWidthScroll; - private JLabel myWidthLabel; - private CountersPanel myPanel; - private int processorWidth = 10; -} - -class CountersConnection { - - public CountersConnection(String host, int port){ - this.host = host; - this.port = port; - } - - public boolean connect(){ - if(br == null){ - try { - InetAddress target = InetAddress.getByName(host); - sock = new Socket(target, port); - - br = new BufferedReader(new InputStreamReader - (sock.getInputStream())); - } catch (Exception e){ - System.out.println("connect: " + e); - } - } - - if (br == null) - return false; - return true; - } - - public void disconnect(){ - try { - sock.close(); - } catch (Exception e){ - System.out.println("disconnect: " + e); - } - sock = null; - br = null; - } - - public boolean readCounters(NdbCluster cluster) { - if(!connect()){ - cluster.setNoConnection(); - return false; - } - String str = null; - - try { - str = br.readLine(); - } catch (Exception e){ - System.out.println("readLine: " + e); - } - if(str == null){ - disconnect(); - return false; - } - StringTokenizer st = new StringTokenizer(str, " "); - - int nodeId = 0; - Counters c = new Counters(); - - while(st.hasMoreTokens()){ - String tmp = st.nextToken(); - int ind = 0; - if(tmp.startsWith("nodeid=")){ - nodeId = Integer.valueOf(tmp.substring(7)).intValue(); - } else if(tmp.startsWith("trans=")){ - c.transactions = Integer.valueOf(tmp.substring(6)).intValue(); - c.type = Counters.TRANSACTIONS; - } else if(tmp.startsWith("abort=")){ - c.aborts = Integer.valueOf(tmp.substring(6)).intValue(); - c.type = Counters.TRANSACTIONS; - } else if(tmp.startsWith("epochsecs=")){ - c.epochsecs = Integer.valueOf(tmp.substring(11)).intValue(); - } else if(tmp.startsWith("operations=")){ - c.operations = Integer.valueOf(tmp.substring(11)).intValue(); - c.type = Counters.OPERATIONS; - } - } - - if(nodeId != 0) - cluster.setCounters(nodeId, c); - - return true; - } - - private Socket sock; - private BufferedReader br; - private String host; - private int port; -} - -class MgmConnection { - - public MgmConnection(String host, int port){ - this.host = host; - this.port = port; - } - - public NdbCluster getClusterInfo(){ - NdbCluster cluster = null; - if(!connect()) - return cluster; - - out.println("get info cluster"); - String str = null; - try { - str = br.readLine(); - if(str.startsWith("GET INFO 0")){ - StringTokenizer st = new StringTokenizer - (str.substring(11)); - int nodes[] = new int[255]; - - int type = Node.UNDEFINED; - int num_nodes = 0; - int maxNodeId = 0; - while(st.hasMoreTokens()){ - String tmp = st.nextToken(); - final int t = Node.getNodeType(tmp); - if(t != Node.UNDEFINED) - type = t; - - int nodeId = 0; - try { - nodeId = Integer.parseInt(tmp); - } catch (Exception e) {} - if(nodeId != 0){ - num_nodes ++; - nodes[nodeId] = type; - if(nodeId > maxNodeId) - maxNodeId = nodeId; - } - } - cluster = new NdbCluster(nodes, num_nodes, - maxNodeId); - } - - } catch(Exception e){ - System.out.println("readLine: "+e); - } - return cluster; - } - - public boolean connect(){ - if(br == null || out == null){ - try { - InetAddress target = InetAddress.getByName(host); - sock = new Socket(target, port); - - br = new BufferedReader(new InputStreamReader - (sock.getInputStream())); - out = new PrintWriter(sock.getOutputStream(), true); - } catch (Exception e){ - System.out.println("connect: " + e); - } - } - - if (br == null || out == null) - return false; - return true; - } - - public void disconnect(){ - try { - sock.close(); - } catch (Exception e){ - System.out.println("disconnect: " + e); - } - sock = null; - br = null; - out = null; - } - - public boolean readStatus(NdbCluster cluster){ - - if(!connect()){ - cluster.setNoConnection(); - return false; - } - - String str = null; - try { - out.println("get status"); - str = br.readLine(); - } catch (Exception e){ - System.out.println("readLine: " + e); - } - if(str == null){ - disconnect(); - return false; - } - - if(!str.startsWith("GET STATUS")){ - disconnect(); - return false; - } - - int nodes = 0; - try { - nodes = Integer.parseInt(str.substring(11)); - } catch(Exception e){ - System.out.println("parseInt "+e); - } - if(nodes == 0){ - disconnect(); - return false; - } - - try { - for(; nodes > 0 ; nodes --){ - str = br.readLine(); - StringTokenizer st = new StringTokenizer(str); - - String s_nodeId = st.nextToken(); - final int nodeId = Integer.parseInt(s_nodeId); - - String s_type = st.nextToken(); - String s_state = st.nextToken(); - String s_phase = st.nextToken(); - int type = Node.getNodeType(s_type); - int state = NdbNode.getNodeState(s_state); - - cluster.setState(nodeId, type, state); - } - } catch (Exception e){ - disconnect(); - return false; - } - - return true; - } - - public int getStatisticsPort(){ - if(!connect()) - return -1; - - String str = null; - try { - out.println("stat port"); - str = br.readLine(); - } catch (Exception e){ - System.out.println("readLine: " + e); - } - if(str == null){ - disconnect(); - return -1; - } - - if(!str.startsWith("STAT PORT 0")){ - disconnect(); - return -1; - } - - try { - return Integer.parseInt(str.substring(12)); - } catch (Exception e){ - System.out.println("parseInt "+e); - } - return -1; - } - - private Socket sock; - private BufferedReader br; - private PrintWriter out; - private String host; - private int port; -} - -class CounterViewer { - - public static void usage(){ - System.out.println("java CounterViewer <mgm host> <mgm port>"); - } - - public static void main(String args[]){ - try { - String host = args[0]; - int port = Integer.parseInt(args[1]); - new CounterViewer(host, port).run(); - return; - } catch (Exception e){ - } - usage(); - } - - MgmConnection mgmConnection; - CountersConnection countersConnection; - - NdbCluster cluster; - boolean ok; - - CounterViewer(String host, int port){ - ok = false; - - mgmConnection = new MgmConnection(host, port); - int statPort = mgmConnection.getStatisticsPort(); - if(statPort < 0) - return; - - countersConnection = new CountersConnection(host, statPort); - cluster = mgmConnection.getClusterInfo(); - - CountersFrame f = new CountersFrame(cluster); - f.setSize (300, 200); - f.show(); - - ok = true; - } - - void run(){ - while(ok){ - mgmConnection.readStatus(cluster); - countersConnection.readCounters(cluster); - } - } -} - diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 7dd3dfca29a978798281bcbd0995be9cc5d8e731..a9fd5b8852e21bd0a4d3374528fe61d42ea26242 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -1362,7 +1362,7 @@ int my_mb_ctype_8bit(CHARSET_INFO *cs, int *ctype, *ctype= 0; return MY_CS_TOOSMALL; } - *ctype= cs->ctype[*s]; + *ctype= cs->ctype[*s + 1]; return 1; } diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index e3bba3ee1e3a4d6b58cbc744ede05ce3fbff5ea0..1a952a0704211ece67c18b8ddfe6c9814f4fba2c 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -3943,6 +3943,11 @@ my_mb_wc_filename(CHARSET_INFO *cs __attribute__((unused)), *pwc= touni[code]; return 3; } + if (byte1 == '@' && byte2 == '@') + { + *pwc= 0; + return 3; + } } if (s + 4 > e) diff --git a/strings/xml.c b/strings/xml.c index 705da5922576f81a16452c5b646825ba8c59c611..4c09e85604d2ac7fc27da4fb9440646cc2ada243 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -30,6 +30,7 @@ #define MY_XML_TEXT 'T' #define MY_XML_QUESTION '?' #define MY_XML_EXCLAM '!' +#define MY_XML_CDATA 'D' typedef struct xml_attr_st { @@ -45,6 +46,7 @@ static const char *lex2str(int lex) case MY_XML_EOF: return "EOF"; case MY_XML_STRING: return "STRING"; case MY_XML_IDENT: return "IDENT"; + case MY_XML_CDATA: return "CDATA"; case MY_XML_EQ: return "'='"; case MY_XML_LT: return "'<'"; case MY_XML_GT: return "'>'"; @@ -90,6 +92,20 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) a->end=p->cur; lex=MY_XML_COMMENT; } + else if (!bcmp(p->cur, "<![CDATA[",9)) + { + p->cur+= 9; + for (; p->cur < p->end - 2 ; p->cur++) + { + if (p->cur[0] == ']' && p->cur[1] == ']' && p->cur[2] == '>') + { + p->cur+= 3; + a->end= p->cur; + break; + } + } + lex= MY_XML_CDATA; + } else if (strchr("?=/<>!",p->cur[0])) { p->cur++; @@ -215,7 +231,13 @@ int my_xml_parse(MY_XML_PARSER *p,const char *str, uint len) lex=my_xml_scan(p,&a); if (MY_XML_COMMENT == lex) + continue; + + if (lex == MY_XML_CDATA) { + a.beg+= 9; + a.end-= 3; + my_xml_value(p, a.beg, (uint) (a.end-a.beg)); continue; } diff --git a/support-files/debian/README.debian b/support-files/debian/README.debian deleted file mode 100644 index 9a990585854f654d07d8b203bc84e1e41d1ce165..0000000000000000000000000000000000000000 --- a/support-files/debian/README.debian +++ /dev/null @@ -1,47 +0,0 @@ -mysql for DEBIAN ----------------------- - -Comments regarding the Package - -* about patch files - if you want to make new patch, - write patch file and put it into debian/patches/. - debian/rules do patch debian/patches/* automatically. - -* about server packages - I use Debian alternative system, to switch next 3 type MySQL server. - - mysql-server : - this is static linked MySQL server(/usr/sbin/mysqld-static) and share/mysql/ files. - mysql-server-shared: - this is dynamic linked MySQL server only. (/usr/sbin/mysqld-shared) - mysql-server-debug: - --with-debug flag. mysqld only. (/usr/sbin/mysqld-debug) - -* about MySQL-Max packages: - - mysql-max : - this is static linked MySQL-Max server only. (/usr/sbin/mysqld-max-static). - mysql-max-shared: - this is dynamic linked MySQL server only. (/usr/sbin/mysqld-max-shared) - mysql-max-debug: - --with-debug flag. mysqld only. (/usr/sbin/mysqld-max-debug) - -* about charset - I build MySQL server --with-extra-charsets=all - -* about location - server programs ...... /usr/sbin/ - share files .......... /usr/share/mysql/ - client programs ...... /usr/bin/ - MySQL data directory . /var/mysql/data/ - benchmark directory .. /var/mysql/sql-bench/ - socket file ......... /tmp/mysql.sock - include files ........ /usr/include/mysql/ - libraries ........... /usr/lib/ , /usr/lib/mysql/ - put libmysqlclient* into /usr/lib/ , - others, put /usr/lib/mysql/ . - - -takeshi@SoftAgency.co.jp - diff --git a/support-files/debian/changelog b/support-files/debian/changelog deleted file mode 100644 index e52589d70258707c7c3b69629b0b65ab88754917..0000000000000000000000000000000000000000 --- a/support-files/debian/changelog +++ /dev/null @@ -1,543 +0,0 @@ -mysql (3.23.39-1) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sat, 12 May 2001 05:07:35 +0900 - -mysql (3.23.38-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sat, 12 May 2001 05:07:35 +0900 - -mysql (3.23.37-1potato.2) unstable; urgency=low - - * new - * add mysql-max multi packages. - - -- takeshi <takeshi@softagency.co.jp> Thr, 26 Apr 2001 05:07:35 +0900 - -mysql (3.23.37-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Thr, 26 Apr 2001 05:07:35 +0900 - -mysql (3.23.36-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Thr, 29 Mar 2001 05:07:35 +0900 - -mysql (3.23.35-1potato.1) unstable; urgency=low - - * sql fix patch - - -- takeshi <takeshi@softagency.co.jp> Thr, 22 Mar 2001 05:07:35 +0900 - -mysql (3.23.35-1potato) unstable; urgency=low - - * new - * --with-innobase - - -- takeshi <takeshi@softagency.co.jp> Sat, 17 Mar 2001 05:07:35 +0900 - -mysql (3.23.34a-1potato) unstable; urgency=low - - * new - * --with-innobase - - -- takeshi <takeshi@softagency.co.jp> Wed, 14 Mar 2001 05:07:35 +0900 - -mysql (3.23.33-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Tue, 13 Feb 2001 05:07:35 +0900 - -mysql (3.23.32-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Tue, 23 Jan 2001 05:07:35 +0900 - -mysql (3.23.31-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Fri, 19 Jan 2001 05:07:35 +0900 - -mysql (3.23.30-gamma-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sat, 6 Jan 2001 05:07:35 +0900 - -mysql (3.23.29a-gamma-1potato.3) unstable; urgency=low - - * server:/usr/sbin/{mysql_config, mysqltest} -> client:/usr/bin/ - * server:/usr/bin/my_print_defaults -> client:/usr/bin/ - * /usr/mysql-test -> mysql-bench /var/mysql/mysql-test - - -- takeshi <takeshi@softagency.co.jp> Fri, 29 Dec 2000 05:07:35 +0900 - -mysql (3.23.29a-gamma-1potato.2) unstable; urgency=low - - * /usr/mysql-test -> mysql-bench /var/mysql/mysql-test - - -- takeshi <takeshi@softagency.co.jp> Sun, 17 Dec 2000 05:07:35 +0900 - -mysql (3.23.29a-gamma-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sun, 17 Dec 2000 05:07:35 +0900 - -mysql (3.23.28-gamma-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Fri, 24 Nov 2000 05:07:35 +0900 - -mysql (3.23.27-beta-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Fri, 28 Oct 2000 05:07:35 +0900 - -mysql (3.23.26-beta-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sun, 22 Oct 2000 05:07:35 +0900 - -mysql (3.23.25-beta-1potato) unstable; urgency=low - - * new , libmysqlclient10 - * change debian/control file. remove Provides keyword - - -- takeshi <takeshi@softagency.co.jp> Fri, 29 Sep 2000 05:07:35 +0900 - -mysql (3.23.24-1potato.2) unstable; urgency=low - - * fix debian/control file - * move patch into debian/patches/ - if you want to make new patch, - write patch file and put it into debian/patches/. - debian/rules do patch debian/patches/* automatically. - * change debian/rules , debian/move - * back mysql_resolveip -> resolveip , mysql_perror -> perror - - -- takeshi <takeshi@softagency.co.jp> Thr, 14 Sep 2000 05:07:35 +0900 - -mysql (3.23.24-1potato) unstable; urgency=low - - * move patch into debian/patches/ - if you want to make new patch, - write patch file and put it into debian/patches/. - debian/rules do patch debian/patches/* automatically. - * change debian/rules , debian/move - * back mysql_resolveip -> resolveip , mysql_perror -> perror - - -- takeshi <takeshi@softagency.co.jp> Sat, 9 Sep 2000 05:07:35 +0900 - -mysql (3.23.23-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Sat, 2 Sep 2000 05:07:35 +0900 - -mysql (3.23.22-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Tue, 1 Aug 2000 05:07:35 +0900 - -mysql (3.23.21-1potato.2) unstable; urgency=low - - * MYI patch - * /usr/lib/mysql/libmysqlclient.a -> /usr/lib/ - * libmysqlclient patch - * fix mysql-dev conflicts libmysqlclient6 - - -- takeshi <takeshi@softagency.co.jp> Sun, 30 Jul 2000 05:07:35 +0900 - -mysql (3.23.21-1potato.1) unstable; urgency=low - - * MYI patch - * /usr/lib/mysql/libmysqlclient.a -> /usr/lib/ - - -- takeshi <takeshi@softagency.co.jp> Tue, 25 Jul 2000 05:07:35 +0900 - -mysql (3.23.21-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Thr, 6 Jul 2000 05:07:35 +0900 - -mysql (3.23.20-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Thr, 29 Jun 2000 05:07:35 +0900 - -mysql (3.23.19-1potato) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Thr, 29 Jun 2000 05:07:35 +0900 - -mysql (3.23.18-1) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Tue, 13 May 2000 05:07:35 +0900 - -mysql (3.23.17-1) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Wed, 31 May 2000 05:07:35 +0900 - -mysql (3.23.16-1) unstable; urgency=low - - * new - * branch static mysqld & shared mysqld - * no need ujis,sjis branch. 3.23 support dynamic charset - * add conf file /etc/my.cnf - - -- takeshi <takeshi@softagency.co.jp> Wed, 31 May 2000 05:07:35 +0900 - -mysql (3.22.32-2) unstable; urgency=low - - * fix mysqldump - * fix sjis - - -- takeshi <takeshi@softagency.co.jp> Thr, 6 Apr 2000 05:07:35 +0900 - -mysql (3.22.32-1) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Tue, 15 Feb 2000 05:07:35 +0900 - -mysql (3.22.30-2) unstable; urgency=low - - * fix perl path - * with system readline - - -- takeshi <takeshi@softagency.co.jp> Tue, 8 Feb 2000 05:07:35 +0900 - -mysql (3.22.30-1) unstable; urgency=low - - * new - * OOP! debian remove libreadlineg2-dev! - --without-readline => --with-readline - - -- takeshi <takeshi@softagency.co.jp> Fri, 14 Jan 2000 05:07:35 +0900 - -mysql (3.22.29-1) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Mon, 3 Jan 2000 05:07:35 +0900 - -mysql (3.22.29-0bo) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Mon, 3 Jan 2000 05:07:35 +0900 - -mysql (3.22.27-0bo.2) unstable; urgency=low - - * with linuxthread-0.71 - - -- takeshi <takeshi@softagency.co.jp> Thr, 9 Dec 1999 05:07:35 +0900 - -mysql (3.22.27-0bo.1) unstable; urgency=low - - * fix: mysqlaccess incorrect path - - -- takeshi <takeshi@softagency.co.jp> Sat, 13 Nov 1999 05:07:35 +0900 - -mysql (3.22.27-0bo) unstable; urgency=low - - * sql/sql_parse.cc patch - - -- takeshi <takeshi@softagency.co.jp> Wed, 13 Oct 1999 05:07:35 +0900 - -mysql (3.22.26a-0bo.1) unstable; urgency=low - - * BLOB SELECT DISTINCT patch - * all static linked - * fix: @sbindir@ was not changed - * mysql_find_rows -> /usr/bin/ - - -- takeshi <takeshi@softagency.co.jp> Mon, 20 Sep 1999 05:07:35 +0900 - -mysql (3.22.26a-0bo) unstable; urgency=low - - * new upstream - * fix incorrect path: init.d/mysql (= mysql.server.sh), msql2mysql, mysql_install_db - * change daemon user -> mysql - - -- takeshi <takeshi@softagency.co.jp> Mon, 13 Sep 1999 05:07:35 +0900 - -mysql (3.22.25-0bo) unstable; urgency=low - - * new - * change : libmysql6 -> libmysqlclient6 - - -- takeshi <takeshi@softagency.co.jp> Tue, 3 Aug 1999 05:07:35 +0900 - -mysql (3.22.24-0bo) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Mon, 25 Jul 1999 05:07:35 +0900 - -mysql (3.22.23b-0bo.1) unstable; urgency=low - - * new - * gcc patch + sql_load patch - - -- takeshi <takeshi@softagency.co.jp> Thr, 24 Jun 1999 05:07:35 +0900 - -mysql (3.22.23b-0bo) unstable; urgency=low - - * new - * gcc patch - - -- takeshi <takeshi@softagency.co.jp> Tue, 15 Jun 1999 05:07:35 +0900 - -mysql (3.22.22-0bo) unstable; urgency=low - - * new - - -- takeshi <takeshi@softagency.co.jp> Mon, 3 May 1999 05:07:35 +0900 - -mysql (3.22.21-0bo.1) unstable; urgency=low - - * re-compile - - -- takeshi <takeshi@softagency.co.jp> Fri, 30 Apr 1999 05:07:35 +0900 - -mysql (3.22.21-0bo) unstable; urgency=low - - * New up stream - - -- takeshi <takeshi@softagency.co.jp> Tue, 6 Apr 1999 05:07:35 +0900 - -mysql (3.22.20a-0bo) unstable; urgency=low - - * New up stream - - -- takeshi <takeshi@softagency.co.jp> Fri, 19 Mar 1999 05:07:35 +0900 - -mysql (3.22.19a-0bo) unstable; urgency=low - - * New up stream - - -- takeshi <takeshi@softagency.co.jp> Wed, 3 Mar 1999 05:07:35 +0900 - -mysql (3.22.18-0bo) unstable; urgency=low - - * New up stream - - -- takeshi <takeshi@softagency.co.jp> Sun, 28 Feb 1999 05:07:35 +0900 - -mysql (3.22.16a-gamma-0bo.1) unstable; urgency=low - - * fix libmysqlclient5 -> libmysqlclient6 - - -- takeshi <takeshi@softagency.co.jp> Thr, 11 Feb 1999 05:07:35 +0900 - -mysql (3.22.16a-gamma-0bo) unstable; urgency=low - - * new upstream - - -- takeshi <takeshi@softagency.co.jp> Sun, 7 Feb 1999 05:07:35 +0900 - -mysql (3.22.15-gamma-0bo) unstable; urgency=low - - * new upstream - - -- takeshi <takeshi@softagency.co.jp> Fri, 29 Jan 1999 05:07:35 +0900 - -mysql (3.22.14b-gamma-0bo) unstable; urgency=low - - * new upstream - * apply mb problem patch - - -- takeshi <takeshi@softagency.co.jp> Tue, 26 Jan 1999 05:07:35 +0900 - -mysql (3.22.14-gamma-0bo.1) unstable; urgency=low - - * egcs -all-static - - -- takeshi <takeshi@softagency.co.jp> Sun, 3 Jan 1999 05:07:35 +0900 - -mysql (3.22.14-gamma-0bo) unstable; urgency=low - - * New upstream - - -- takeshi <takeshi@softagency.co.jp> Sun, 3 Jan 1999 05:07:35 +0900 - -mysql (3.22.13-beta-0bo) unstable; urgency=low - - * New upstream - - -- takeshi <takeshi@softagency.co.jp> Fri, 11 Nov 1998 00:29:14 +0900 - -mysql (3.22.12-beta-0bo) unstable; urgency=low - - * New upstream - - -- takeshi <takeshi@softagency.co.jp> Fri, 11 Nov 1998 00:29:14 +0900 - -mysql (3.22.11-beta-0bo) unstable; urgency=low - - * New upstream - * !!! CHANGE PACKAGE NAME !!! - libmysql5 <- only libmysqlclinet.so.5 - mysql-client <- client commands - mysql-server <- server - mysql-dev <- .h & .a - mysql-doc <- Docs - mysql-bench <- benchmark suite. - - -- takeshi <takeshi@softagency.co.jp> Wed, 25 Nov 1998 15:03:45 +0900 - -mysql (3.22.10-beta-0bo.2) unstable; urgency=low - - * fix debian/rules , debian/*.dirs - * gcc-2.7.2.3, g++-2.7.2.1 compiled - * remove /usr/bin/mysql-sub/ - * rename /usr/bin/mysql-sub/replace -> /usr/bin/mysql_replace - * mv mysql-base:/usr/bin/mysql-sub/{perror,resolveip} -> mysql-server:/usr/bin/ - perror -> mysql_perror - resolveip-> mysql_resolveip - * mv add_*, make_binary_distribution -> /usr/share/mysql/ - * add japanese errmsg (/usr/share/mysql/japanese) - - -- takeshi <takeshi@softagency.co.jp> Fri, 13 Nov 1998 15:03:45 +0900 - -mysql (3.22.10-beta-0bo.1) unstable; urgency=low - - * fix debian/rules - * egcs compiled - * link libstdc++2.8.a (mysqld), so, you don't need libstdc++2.8 for running mysqld. - (not client programs.) - - -- takeshi <takeshi@softagency.co.jp> Wed, 11 Nov 1998 15:03:45 +0900 - -mysql (3.22.10-beta-0bo) unstable; urgency=low - - * New upstream - * egcs compiled - * fix: mysql-base-{char}/usr/bin/comp_err -> mysql-server-{char}/usr/sbin/comp_err - - -- takeshi <takeshi@softagency.co.jp> Thr, 5 Nov 1998 15:03:45 +0900 - -mysql (3.22.9-beta-0bo.1) unstable; urgency=low - - * new patch to sql_string.cc ('%' bug) - - -- takeshi <takeshi@softagency.co.jp> Tue, 27 Oct 1998 15:03:45 +0900 - -mysql (3.22.9-beta-0bo) unstable; urgency=low - - * fix cflags - * fix diff files - * fix & change categorize of client or server - mysql-server: - /usr/sbin/mysql_install_db - safe_mysqld mysqld - isamchk isamlog - - mysql-base: - /usr/bin/ - comp_err msql2mysql mysql mysql_zap - mysqlaccess mysqladmin mysqlbug - mysqldump mysqlimport mysqlshow - - /usr/bin/mysql-sub/ - add_file_priv add_func_table - add_long_password make_binary_distribution - perror replace resolveip - - * patch to sql_string.cc ('%' bug) - - -- takeshi <takeshi@softagency.co.jp> Wed, 7 Oct 1998 15:03:45 +0900 - -mysql (3.22.8-beta-0bo) unstable; urgency=low - - * New up stream - - -- takeshi <takeshi@softagency.co.jp> Wed, 7 Oct 1998 15:03:45 +0900 - -mysql (3.22.7b-0bo.1) unstable; urgency=low - - * left join patch - - -- takeshi <takeshi@softagency.co.jp> Thr, 24 Sep 1998 15:03:45 +0900 - -mysql (3.22.7b-0bo) unstable; urgency=low - - * New upstream version (bo) - * mb patch - * *.a -> /usr/lib/mysql/ - * add_file_priv add_func_table make_binary_distribution - add_long_password perror replace resolveip - -> /usr/bin/mysql-sub/ - * mysqld, safe_mysqld, mysql_install_db -> mysql-server /usr/sbin/ - * add '-lm -lz -ldl' when building libmysqlclient.so.4.0.0 - - -- takeshi <takeshi@softagency.co.jp> Sat, 15 Aug 1998 15:03:45 +0900 - -mysql (3.22.4a-0bo) unstable; urgency=low - - * New upstream version (bo) - * use system libreadline - - -- takeshi <takeshi@softagency.co.jp> Sat, 15 Aug 1998 15:03:45 +0900 - -mysql (3.21.33-0bo) unstable; urgency=low - - * New upstream version - - -- takeshi <takeshi@softagency.co.jp> Wed, 22 Jul 1998 12:51:45 +0900 - -mysql (3.21.30-1) unstable; urgency=low - - * New upstream version - * fix conffile setting - - -- takeshi <takeshi@softagency.co.jp> Tue, 12 May 1998 20:24:45 +0900 - -mysql (3.21.29.gamma-2) unstable; urgency=low - - * charset=ujis,sjis packages - * branch mysql-base-* (lib*.so) - * /usr/local/mysql/lib/mysql/lib* -> /usr/lib/ - * /usr/local/mysql/include -> /usr/include - * /usr/local/mysql/info -> /usr/info - * /usr/local/mysql/man -> /usr/man - * /usr/local/mysql/share -> /usr/share - * /usr/local/mysql/bin -> /usr/bin - * /usr/local/mysql/libexec -> /usr/sbin - * /usr/local/mysql/var -> /var/mysql/data - * /usr/local/mysql/sql-bench -> /var/mysql/sql-bench - - -- takeshi <takeshi@softagency.co.jp> Fri, 8 May 1998 00:04:45 +0900 - -mysql (3.21.29.gamma-1) unstable; urgency=low - - * Initial Release. - - -- takeshi <takeshi@softagency.co.jp> Sat, 2 May 1998 03:42:24 +0900 - -Local variables: -mode: debian-changelog -add-log-mailing-address: "takeshi@softagency.co.jp" -End: diff --git a/support-files/debian/control b/support-files/debian/control deleted file mode 100644 index 3ccc1d097c837c6e80a6db9758b4edbba296e567..0000000000000000000000000000000000000000 --- a/support-files/debian/control +++ /dev/null @@ -1,112 +0,0 @@ -Source: mysql -Section: devel -Priority: extra -Maintainer: takeshi <takeshi@softagency.co.jp> -Standards-Version: 2.1.2.2 - -Package: mysql -Architecture: all -Description: mysql - Missing - -Package: mysql-doc -Architecture: all -Section: doc -Priority: extra -Replaces: mysql-gpl-doc -Description: mysql Documentation (html) - MySQL Doc. - -Package: libmysqlclient10 -Architecture: any -Section: libs -Priority: extra -Description: libmysqlclient.so.10 - libmysqlclient.so.10 - -Package: mysql-client -Architecture: any -Depends: ${shlibs:Depends} -Section: misc -Priority: extra -Conflicts: mysql-client-ujis, mysql-client-sjis -Replaces: mysql-gpl-client, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-client-ujis, mysql-client-sjis -Description: mysql clients. - MySQL clients programs. - -Package: mysql-server -Architecture: any -Section: misc -Priority: extra -Depends: ${shlibs:Depends} -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0), mysql-common -Description: MySQL server (static linked) - MySQL server. static linked. - -Package: mysql-server-shared -Architecture: any -Section: misc -Priority: extra -Depends: mysql-server, ${shlibs:Depends} -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Description: MySQL server (dynamic linked) - MySQL server. dynamic linked. - -Package: mysql-server-debug -Architecture: any -Section: misc -Priority: extra -Depends: mysql-server, ${shlibs:Depends} -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Description: MySQL server debug - MySQL server. debug - -Package: mysql-max -Architecture: any -Section: misc -Priority: extra -Depends: mysql-server -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Description: MySQL-MAX server (static linked) - MySQL-Max server. (static linked) - -Package: mysql-max-shared -Architecture: any -Section: misc -Priority: extra -Depends: mysql-server, ${shlibs:Depends} -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Description: MySQL-MAX server (shared linked) - MySQL-Max server. (shared linked) - -Package: mysql-max-debug -Architecture: any -Section: misc -Priority: extra -Depends: mysql-server, ${shlibs:Depends} -Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Description: MySQL-MAX server (with debug shared linked) - MySQL-Max server. (with debug and shared linked) - -Package: mysql-dev -Architecture: any -Section: devel -Priority: extra -Depends: ${shlibs:Depends} -Conflicts: mysql-dev-sjis, mysql-dev-ujis -Replaces: mysql-devel, libmysqlclient10-dev, libmysqlclient9-dev, libmysqlclient6-dev, mysql-gpl-dev, mysql-dev-sjis, mysql-dev-ujis, libmysqlclient6-ujis, libmysqlclient6-sjis -Description: MySQL develop suite - MySQL develop. - -Package: mysql-bench -Architecture: all -Section: misc -Priority: extra -Description: mysql benchmark suite. - MySQL sql-bench files. diff --git a/support-files/debian/copyright b/support-files/debian/copyright deleted file mode 100644 index 3e97dbf8358d8a5df87e41c5be654c3e8f0bc7db..0000000000000000000000000000000000000000 --- a/support-files/debian/copyright +++ /dev/null @@ -1,8 +0,0 @@ -This package was debianized by takeshi@softagency.co.jp on -Sat, 2 May 1998 03:42:24 +0900. - -It was downloaded from -http://www.mysql.com/ - -Copyright: -GPL diff --git a/support-files/debian/gomi b/support-files/debian/gomi deleted file mode 100644 index 70251058af010858ef6d3ad874c2efc4da31d9d7..0000000000000000000000000000000000000000 --- a/support-files/debian/gomi +++ /dev/null @@ -1,24 +0,0 @@ -Docs/Makefile -dbug/Makefile -extra/Makefile -heap/Makefile -mysys/Makefile -readline/Makefile -regex/Makefile -sql/Makefile -sql/share/Makefile -strings/Makefile -support-files/binary-configure -support-files/my-example.cnf -support-files/mysql-log-rotate -scripts/add_func_table -scripts/mysql_setpermisson -scripts/mysqlbug -scripts/mysqlhotcopy -client/my_static.h -client/mysys_priv.h -include/my_config.h -sql/lex_hash.h -sql-bench/Makefile -scripts/mysql_config -libmysql_r/Makefile diff --git a/support-files/debian/libmysqlclient10.dirs b/support-files/debian/libmysqlclient10.dirs deleted file mode 100644 index 68457717bd8efb8ba6291fca9d862dd5eb0d3b1e..0000000000000000000000000000000000000000 --- a/support-files/debian/libmysqlclient10.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib diff --git a/support-files/debian/libmysqlclient10.postinst b/support-files/debian/libmysqlclient10.postinst deleted file mode 100644 index 2d1871b1df6cd7a5f1cc7a49f25071f47433f432..0000000000000000000000000000000000000000 --- a/support-files/debian/libmysqlclient10.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -ldconfig diff --git a/support-files/debian/libmysqlclient9.dirs b/support-files/debian/libmysqlclient9.dirs deleted file mode 100644 index 68457717bd8efb8ba6291fca9d862dd5eb0d3b1e..0000000000000000000000000000000000000000 --- a/support-files/debian/libmysqlclient9.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib diff --git a/support-files/debian/libmysqlclient9.postinst b/support-files/debian/libmysqlclient9.postinst deleted file mode 100644 index 2d1871b1df6cd7a5f1cc7a49f25071f47433f432..0000000000000000000000000000000000000000 --- a/support-files/debian/libmysqlclient9.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -ldconfig diff --git a/support-files/debian/move b/support-files/debian/move deleted file mode 100644 index 36f250fcfb31bd5aa8e51764d4cd89c66726f56d..0000000000000000000000000000000000000000 --- a/support-files/debian/move +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/sh - -STAMPFILE="debian/stamp-move" - -if [ -e $STAMPFILE ]; then - exit -fi - -#---------- -CLIENT1="msql2mysql mysql mysql_convert_table_format mysql_find_rows mysql_fix_privilege_tables mysql_setpermission mysql_zap mysqlaccess mysqladmin mysqlbug mysqldump mysqlhotcopy mysqlimport mysqlshow mysql_config mysqltest my_print_defaults" - -# CLIENT2="add_file_priv add_func_table add_long_password make_binary_distribution" - - - -P=`pwd` - -#---------- -for CHAR in build -do - #----- - cp -Rpd debian/${CHAR}/usr debian/mysql-server/ - cp -Rpd debian/${CHAR}-shared/usr/lib/mysql/libmysqlclient.so.* debian/libmysqlclient10/usr/lib/ - - #----- mysql-server-shared --- - cp -Rpd debian/${CHAR}-shared/usr/sbin/mysqld debian/mysql-server-shared/usr/sbin/mysqld-shared - - #----- mysql-server-debug --- - cp -Rpd debian/${CHAR}-debug/usr/sbin/mysqld debian/mysql-server-debug/usr/sbin/mysqld-debug - - #----- mysql-server --- - mv debian/mysql-server/usr/sbin/mysqld debian/mysql-server/usr/sbin/mysqld-static - - #----- mysql-max-shared --- - cp -Rpd debian/${CHAR}-max-shared/usr/sbin/mysqld debian/mysql-max-shared/usr/sbin/mysqld-max-shared - - #----- mysql-max-debug --- - cp -Rpd debian/${CHAR}-max-debug/usr/sbin/mysqld debian/mysql-max-debug/usr/sbin/mysqld-max-debug - - #----- mysql-max --- - mv debian/${CHAR}-max/usr/sbin/mysqld debian/mysql-max/usr/sbin/mysqld-max-static - - #----- mysql-client ---- - cd ${P}/debian/mysql-server/usr/bin/ && mv $CLIENT1 ../../../mysql-client/usr/bin/ - cd ${P} - - mv -f debian/mysql-server/usr/{man,info} debian/mysql-client/usr/share/ -# mv debian/mysql-server/usr/share/mysql/my-*.cnf debian/mysql-client/usr/share/mysql/ - mv -f debian/mysql-server/usr/bin/replace debian/mysql-client/usr/bin/mysql_replace - - #----- mysql-server --- - mv debian/mysql-server/usr/bin/* debian/mysql-server/usr/sbin/ - mv debian/mysql-server/usr/sbin/comp_err debian/mysql-server/usr/bin/ - mv debian/mysql-server/usr/sbin/perror debian/mysql-server/usr/bin/ - mv debian/mysql-server/usr/sbin/resolveip debian/mysql-server/usr/bin/ - - #----- mysql-dev ---- - cp -Rpd debian/${CHAR}-shared/usr/lib/mysql/libmysqlclient.so debian/mysql-dev/usr/lib/ - mv debian/mysql-server/usr/include debian/mysql-dev/usr/ - mv debian/mysql-server/usr/lib/mysql debian/mysql-dev/usr/lib/ - - mv debian/mysql-dev/usr/lib/mysql/libmysqlclient.a debian/mysql-dev/usr/lib/ - (cd debian/mysql-dev/usr/lib/mysql ; ln -sf "../libmysqlclient.a" ) - - #----- - cp debian/README.debian debian/copyright debian/changelog \ - debian/mysql-client/usr/share/doc/mysql/ - -done - - -#################### -### doc -cp -r COPYING* MIRRORS README* Docs/* debian/mysql-doc/usr/share/doc/mysql/ - -#### sql-bench -mv debian/mysql-server/usr/sql-bench \ - debian/mysql-server/usr/mysql-test \ - debian/mysql-bench/var/mysql/ - -touch $STAMPFILE diff --git a/support-files/debian/my.cnf b/support-files/debian/my.cnf deleted file mode 100644 index 0c9856ec5a700ca9a0937fe5ab2fe26739054c4a..0000000000000000000000000000000000000000 --- a/support-files/debian/my.cnf +++ /dev/null @@ -1,42 +0,0 @@ -# Example mysql config file. -# You can copy this to one of: -# /etc/my.cnf to set global options, -# mysql-data-dir/my.cnf to set server-specific options (in this -# installation this directory is @localstatedir@) or -# ~/.my.cnf to set user-specific options. -# -# One can use all long options that the program supports. -# Run the program with --help to get a list of available options - -# This will be passed to all mysql clients -[client] -#password = my_password -#port = 3306 -#socket = /tmp/mysql.sock - -# Here is entries for some specific programs -# The following values assume you have at least 32M ram - -# The MySQL server -[mysqld] -default-character-set = ujis -#port = 3306 -#socket = /tmp/mysql.sock -#skip-locking -#set-variable = key_buffer=16M -#set-variable = max_allowed_packet=1M -#set-variable = thread_stack=128K -## Start logging -#log - -[mysqldump] -default-character-set = ujis -#quick -#set-variable = max_allowed_packet=16M - -[mysql] -default-character-set = ujis -#no-auto-rehash - -[isamchk] -#set-variable = key_buffer=16M diff --git a/support-files/debian/mysql-bench.dirs b/support-files/debian/mysql-bench.dirs deleted file mode 100644 index 0ba3faa84f9cf8c707bacec5001e83d10e3d8283..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-bench.dirs +++ /dev/null @@ -1 +0,0 @@ -var/mysql diff --git a/support-files/debian/mysql-client.dirs b/support-files/debian/mysql-client.dirs deleted file mode 100644 index 0ade9d76f6593c3d8489c9234a8b49ff55dfe920..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-client.dirs +++ /dev/null @@ -1,3 +0,0 @@ -usr/bin -usr/share/mysql -usr/share/doc/mysql diff --git a/support-files/debian/mysql-dev.dirs b/support-files/debian/mysql-dev.dirs deleted file mode 100644 index 68457717bd8efb8ba6291fca9d862dd5eb0d3b1e..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-dev.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib diff --git a/support-files/debian/mysql-doc.dirs b/support-files/debian/mysql-doc.dirs deleted file mode 100644 index b8aa0f769f99f696413f181f8b57797b3a8a05b9..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-doc.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/share/doc/mysql diff --git a/support-files/debian/mysql-max-debug.dirs b/support-files/debian/mysql-max-debug.dirs deleted file mode 100644 index 236670a2d0f482de71df55c13f785fadb3cd13df..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-debug.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/sbin diff --git a/support-files/debian/mysql-max-debug.postinst b/support-files/debian/mysql-max-debug.postinst deleted file mode 100644 index e9d8b628c2ebfa4869f05aaad5c561ac06c9f9fd..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-debug.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-debug 40 diff --git a/support-files/debian/mysql-max-debug.postrm b/support-files/debian/mysql-max-debug.postrm deleted file mode 100644 index 25c7aadf494782b7b2158759a1db2dd67f76b403..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-debug.postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-max-shared.dirs b/support-files/debian/mysql-max-shared.dirs deleted file mode 100644 index 236670a2d0f482de71df55c13f785fadb3cd13df..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-shared.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/sbin diff --git a/support-files/debian/mysql-max-shared.postinst b/support-files/debian/mysql-max-shared.postinst deleted file mode 100644 index d47d85c73eb249d68dc60e2383e65e9139597890..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-shared.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-shared 35 diff --git a/support-files/debian/mysql-max-shared.postrm b/support-files/debian/mysql-max-shared.postrm deleted file mode 100644 index 25c7aadf494782b7b2158759a1db2dd67f76b403..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max-shared.postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-max.dirs b/support-files/debian/mysql-max.dirs deleted file mode 100644 index 236670a2d0f482de71df55c13f785fadb3cd13df..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/sbin diff --git a/support-files/debian/mysql-max.postinst b/support-files/debian/mysql-max.postinst deleted file mode 100644 index a65ccd5b6c778d2cada3238a9849122e45194ca9..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-static 30 diff --git a/support-files/debian/mysql-max.postrm b/support-files/debian/mysql-max.postrm deleted file mode 100644 index 25c7aadf494782b7b2158759a1db2dd67f76b403..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-max.postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-server-debug.dirs b/support-files/debian/mysql-server-debug.dirs deleted file mode 100644 index 236670a2d0f482de71df55c13f785fadb3cd13df..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-debug.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/sbin diff --git a/support-files/debian/mysql-server-debug.postinst b/support-files/debian/mysql-server-debug.postinst deleted file mode 100644 index d48c21be9a7b8d0f0dfe5bdb50ec7f62ae9ceadf..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-debug.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-debug 20 diff --git a/support-files/debian/mysql-server-debug.postrm b/support-files/debian/mysql-server-debug.postrm deleted file mode 100644 index 25c7aadf494782b7b2158759a1db2dd67f76b403..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-debug.postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-server-shared.dirs b/support-files/debian/mysql-server-shared.dirs deleted file mode 100644 index 236670a2d0f482de71df55c13f785fadb3cd13df..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-shared.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/sbin diff --git a/support-files/debian/mysql-server-shared.postinst b/support-files/debian/mysql-server-shared.postinst deleted file mode 100644 index 00c7248327ad84273ad8b93bc268cfc11cd91206..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-shared.postinst +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-shared 15 diff --git a/support-files/debian/mysql-server-shared.postrm b/support-files/debian/mysql-server-shared.postrm deleted file mode 100644 index 25c7aadf494782b7b2158759a1db2dd67f76b403..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server-shared.postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-server.conffiles b/support-files/debian/mysql-server.conffiles deleted file mode 100644 index 5f4599b273cad428eccdfd6cb8a3fc06859991f0..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server.conffiles +++ /dev/null @@ -1,2 +0,0 @@ -/etc/init.d/mysql -/etc/my.cnf diff --git a/support-files/debian/mysql-server.dirs b/support-files/debian/mysql-server.dirs deleted file mode 100644 index 067eddeefad96a34b812251088e630740ebdb8fd..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server.dirs +++ /dev/null @@ -1,2 +0,0 @@ -etc/init.d -var/mysql diff --git a/support-files/debian/mysql-server.postinst b/support-files/debian/mysql-server.postinst deleted file mode 100644 index ef2f32dac1902aec6bbad54848f893744cd9c305..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server.postinst +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -update-rc.d mysql defaults 50 >/dev/null - -#-------- -update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-static 10 - -#-------- - -DOFIX=0 -if [ ! -e /var/mysql/data/mysql/tables_priv.frm -a -d /var/mysql/data/mysql ]; then - DOFIX=1 -fi - -#-------- -i=`grep '^mysql:' /etc/group` -if [ "x${i}" == "x" ]; then - groupadd mysql || true -fi - -i=`grep '^mysql:' /etc/passwd` -if [ "x${i}" == "x" ]; then - useradd -g mysql -d /var/mysql/data -s /noexists mysql || true -fi - -#-------- - -if [ ! -d /var/mysql/data/mysql ]; then - install -d /var/mysql/data || true - /usr/sbin/mysql_install_db || true - chown -R mysql.mysql /var/mysql -fi - -#-------- -/etc/init.d/mysql start || true - -if [ $DOFIX -eq 1 ]; then - echo "***************************************" - echo " Now, fix tables for MySQL 3.22.11...." - echo " if you set root passwd, please in..." - echo -n " ? MySQL root passwd ? : " - read pass dumy - /usr/sbin/mysql_fix_privilege_tables $pass -fi diff --git a/support-files/debian/mysql-server.postrm b/support-files/debian/mysql-server.postrm deleted file mode 100644 index d493a73a04a30fe09380a05d4ab35d6bc794a48d..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server.postrm +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -update-alternatives --auto mysqld - -if [ "$1" = "purge" ] -then - update-rc.d mysql remove >/dev/null - - echo -n " Shall I also remove all of the databases (y/N)?"; read ans - if [ "$ans" = "y" -o "$ans" = "Y" ]; then - rm -rf /var/mysql - fi -fi diff --git a/support-files/debian/mysql-server.prerm b/support-files/debian/mysql-server.prerm deleted file mode 100644 index 569739ca00ddd66acf1d09a1fd632cc6c6412cb6..0000000000000000000000000000000000000000 --- a/support-files/debian/mysql-server.prerm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -/etc/init.d/mysql stop || true diff --git a/support-files/debian/patches/aa b/support-files/debian/patches/aa deleted file mode 100644 index 288197370be5b678b6f9afeb2a3939c5aac1a5fd..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/aa +++ /dev/null @@ -1,11 +0,0 @@ ---- mysql-3.23.23.orig/sql/Makefile.in -+++ mysql-3.23.23/sql/Makefile.in -@@ -366,7 +366,7 @@ - - mysqlbinlog: $(mysqlbinlog_OBJECTS) $(mysqlbinlog_DEPENDENCIES) - @rm -f mysqlbinlog -- $(CXXLINK) $(mysqlbinlog_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqlbinlog_LDADD) $(LIBS) -+ $(CXXLINK) $(mysqld_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqld_LDADD) $(LIBS) - - mysqld: $(mysqld_OBJECTS) $(mysqld_DEPENDENCIES) - @rm -f mysqld diff --git a/support-files/debian/patches/ab b/support-files/debian/patches/ab deleted file mode 100644 index e169ee381880dd9cf6253de3fe4facc74818c2d6..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/ab +++ /dev/null @@ -1,11 +0,0 @@ ---- mysql-3.23.34a/sql/Makefile.in.orig Mon Mar 12 08:27:39 2001 -+++ mysql-3.23.34a/sql/Makefile.in Thu Mar 15 04:11:14 2001 -@@ -373,7 +373,7 @@ - - mysqlbinlog: $(mysqlbinlog_OBJECTS) $(mysqlbinlog_DEPENDENCIES) - @rm -f mysqlbinlog -- $(CXXLINK) $(mysqlbinlog_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqlbinlog_LDADD) $(LIBS) -+ $(CXXLINK) $(mysqld_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqld_LDADD) $(LIBS) - - mysqld: $(mysqld_OBJECTS) $(mysqld_DEPENDENCIES) - @rm -f mysqld diff --git a/support-files/debian/patches/ac b/support-files/debian/patches/ac deleted file mode 100644 index 8cc2cd5dff15165f110107d1ac4c28a0b0903da7..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/ac +++ /dev/null @@ -1,8 +0,0 @@ ---- mysql-3.23.23.orig/scripts/msql2mysql.sh -+++ mysql-3.23.23/scripts/msql2mysql.sh -@@ -13,4 +13,4 @@ - # described in the License. Among other things, the License requires that - # the copyright notice and this notice be preserved on all copies. - --@bindir@/replace msqlConnect mysql_connect msqlListDBs mysql_list_dbs msqlNumRows mysql_num_rows msqlFetchRow mysql_fetch_row msqlFetchField mysql_fetch_field msqlFreeResult mysql_free_result msqlListFields mysql_list_fields msqlListTables mysql_list_tables msqlErrMsg 'mysql_error(mysql)' msqlStoreResult mysql_store_result msqlQuery mysql_query msqlField mysql_field msqlSelect mysql_select msqlSelectDB mysql_select_db msqlNumFields mysql_num_fields msqlClose mysql_close msqlDataSeek mysql_data_seek m_field MYSQL_FIELD m_result MYSQL_RES m_row MYSQL_ROW msql mysql mSQL mySQL MSQL MYSQL msqlCreateDB mysql_create_db msqlDropDB mysql_drop_db msqlFieldSeek mysql_field_seek -- $* -+@bindir@/mysql_replace msqlConnect mysql_connect msqlListDBs mysql_list_dbs msqlNumRows mysql_num_rows msqlFetchRow mysql_fetch_row msqlFetchField mysql_fetch_field msqlFreeResult mysql_free_result msqlListFields mysql_list_fields msqlListTables mysql_list_tables msqlErrMsg 'mysql_error(mysql)' msqlStoreResult mysql_store_result msqlQuery mysql_query msqlField mysql_field msqlSelect mysql_select msqlSelectDB mysql_select_db msqlNumFields mysql_num_fields msqlClose mysql_close msqlDataSeek mysql_data_seek m_field MYSQL_FIELD m_result MYSQL_RES m_row MYSQL_ROW msql mysql mSQL mySQL MSQL MYSQL msqlCreateDB mysql_create_db msqlDropDB mysql_drop_db msqlFieldSeek mysql_field_seek -- $* diff --git a/support-files/debian/patches/ad b/support-files/debian/patches/ad deleted file mode 100644 index 25394116ad9f962c2faf182cfa0dba9a8aecea71..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/ad +++ /dev/null @@ -1,11 +0,0 @@ ---- mysql-3.23.34a/scripts/mysql_install_db.sh.orig Mon Mar 12 08:18:27 2001 -+++ mysql-3.23.34a/scripts/mysql_install_db.sh Thu Mar 15 04:12:28 2001 -@@ -325,7 +325,7 @@ - if test "$IN_RPM" -eq 0 - then - echo "You can start the MySQL daemon with:" -- echo "cd @prefix@ ; $bindir/safe_mysqld &" -+ echo "cd @prefix@ ; $sbindir/safe_mysqld &" - echo - echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:" - echo "cd sql-bench ; run-all-tests" diff --git a/support-files/debian/patches/ae b/support-files/debian/patches/ae deleted file mode 100644 index 7ea5733147f8be4c460c76d1125456339053ba58..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/ae +++ /dev/null @@ -1,35 +0,0 @@ ---- mysql-3.23.30-gamma/support-files/mysql.server.sh.orig Thu Jan 4 11:03:57 2001 -+++ mysql-3.23.30-gamma/support-files/mysql.server.sh Sat Jan 6 12:18:50 2001 -@@ -28,8 +28,10 @@ - then - basedir=@prefix@ - bindir=@bindir@ -+ sbindir=@sbindir@ - else - bindir="$basedir/bin" -+ sbindir="$basedir/sbin" - fi - if test -z "$pid_file" - then -@@ -100,18 +102,18 @@ - 'start') - # Start daemon - -- if test -x $bindir/safe_mysqld -+ if test -x $sbindir/safe_mysqld - then - # Give extra arguments to mysqld with the my.cnf file. This script may - # be overwritten at next upgrade. -- $bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file & -+ $sbindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file & - # Make lock for RedHat / SuSE - if test -w /var/lock/subsys - then - touch /var/lock/subsys/mysql - fi - else -- echo "Can't execute $bindir/safe_mysqld" -+ echo "Can't execute $sbindir/safe_mysqld" - fi - ;; - diff --git a/support-files/debian/patches/az b/support-files/debian/patches/az deleted file mode 100644 index 0795946de329406cb2748ed325052fbc80a100a6..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/az +++ /dev/null @@ -1,39 +0,0 @@ ---- mysql-3.23.23.orig/configure -+++ mysql-3.23.23/configure -@@ -202,7 +202,7 @@ - --with-charset=CHARSET use CHARSET by default (one of: big5 cp1251 cp1257 - croat czech danish dec8 dos estonia euc_kr gb2312 gbk - german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr -- latin1 latin2 swe7 usa7 win1250 win1251 win1251ukr -+ latin1 latin2 swe7 usa7 win1250 win1251ukr - ujis sjis tis620; default is latin1)" - ac_help="$ac_help - --with-extra-charsets=cs1,cs2 -@@ -8843,7 +8843,7 @@ - - # Choose a character set - --CHARSETS_AVAILABLE="big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1250 win1251 win1251ukr ujis sjis tis620" -+CHARSETS_AVAILABLE="big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1250 win1251ukr ujis sjis tis620" - DEFAULT_CHARSET=latin1 - - # Check whether --with-charset or --without-charset was given. ---- mysql-3.23.23.orig/configure.in -+++ mysql-3.23.23/configure.in -@@ -1517,14 +1517,14 @@ - dnl or other special handling, you must also create - dnl strings/ctype-$charset_name.c - --CHARSETS_AVAILABLE="big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1250 win1251 win1251ukr ujis sjis tis620" -+CHARSETS_AVAILABLE="big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1250 win1251ukr ujis sjis tis620" - DEFAULT_CHARSET=latin1 - - AC_ARG_WITH(charset, - [ --with-charset=CHARSET use CHARSET by default (one of: big5 cp1251 cp1257 - croat czech danish dec8 dos estonia euc_kr gb2312 gbk - german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr -- latin1 latin2 swe7 usa7 win1250 win1251 win1251ukr -+ latin1 latin2 swe7 usa7 win1250 win1251ukr - ujis sjis tis620; default is latin1)], - [default_charset="$withval"], - [default_charset="$DEFAULT_CHARSET"]) diff --git a/support-files/debian/patches/ta b/support-files/debian/patches/ta deleted file mode 100644 index b27259f4473f6c8459ed65cab285cb6933f69dd4..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/ta +++ /dev/null @@ -1,68 +0,0 @@ ---- mysql-3.23.34a/mysql-test/install_test_db.sh.orig Mon Mar 12 08:18:24 2001 -+++ mysql-3.23.34a/mysql-test/install_test_db.sh Thu Mar 15 04:11:14 2001 -@@ -5,6 +5,15 @@ - # This scripts creates the privilege tables db, host, user, tables_priv, - # columns_priv in the mysql database, as well as the func table. - -+if [ x$1 = x"-debian" ]; then -+ DEBIAN=1 -+ shift 1 -+ execdir=/usr/sbin -+ bindir=/usr/bin -+ BINARY_DIST=1 -+ fix_bin=/var/mysql/mysql-test -+else -+ - if [ x$1 = x"-bin" ]; then - shift 1 - execdir=../bin -@@ -17,6 +26,10 @@ - fix_bin=. - fi - -+fi -+ -+ -+ - vardir=var - logdir=$vardir/log - if [ x$1 = x"-slave" ] -@@ -47,12 +60,17 @@ - #create the directories - [ -d $vardir ] || mkdir $vardir - [ -d $logdir ] || mkdir $logdir -+[ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $logdir - - # Create database directories mysql & test - if [ -d $data ] ; then rm -rf $data ; fi - mkdir $data $data/mysql $data/test - - #for error messages -+if [ "x$DEBIAN" = "x1" ]; then -+ basedir=/usr -+else -+ - if [ x$BINARY_DIST = x1 ] ; then - basedir=.. - else -@@ -62,6 +80,10 @@ - ln -sf ../../sql/share share/mysql - fi - -+fi -+ -+ -+ - # Initialize variables - c_d="" i_d="" - c_h="" i_h="" -@@ -211,7 +233,9 @@ - $c_c - END_OF_DATA - then -+ [ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $ldata - exit 0 - else -+ [ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $ldata - exit 1 - fi diff --git a/support-files/debian/patches/tb b/support-files/debian/patches/tb deleted file mode 100644 index c3890dcab62ef4cb1a0a82a4b2f7ea27981dd0a8..0000000000000000000000000000000000000000 --- a/support-files/debian/patches/tb +++ /dev/null @@ -1,86 +0,0 @@ ---- mysql-3.23.34a/mysql-test/mysql-test-run.sh.orig Mon Mar 12 08:18:27 2001 -+++ mysql-3.23.34a/mysql-test/mysql-test-run.sh Thu Mar 15 04:11:14 2001 -@@ -37,9 +37,23 @@ - XARGS=`which xargs | head -1` - SED=sed - -+if [ $USER = root ]; then -+ RUN_USER="mysql" -+ RUN_USER_OPT="--user=$RUN_USER" -+ export RUN_USER -+fi -+ -+ - # Are we using a source or a binary distribution? - - testdir=@testdir@ -+ -+if [ -d /var/mysql/mysql-test ]; then -+ DEBIAN=1 -+ cd /var/mysql/mysql-test -+ testdir=/var/mysql -+fi -+ - if [ -d bin/mysqld ] && [ -d mysql-test ] ; then - cd mysql-test - else -@@ -56,6 +70,10 @@ - exit 1 - fi - -+if [ x$DEBIAN = x1 ]; then -+ MY_BASEDIR=/usr -+fi -+ - #++ - # Misc. Definitions - #-- -@@ -184,12 +202,21 @@ - [ -d $MYSQL_TEST_DIR/var ] || mkdir $MYSQL_TEST_DIR/var - [ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp - [ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run -+[ -d $MYSQL_TEST_DIR -a "x$RUN_USER" != "x" ] && chown -R $RUN_USER $MYSQL_TEST_DIR - - [ -z "$COLUMNS" ] && COLUMNS=80 - E=`$EXPR $COLUMNS - 8` - #DASH72=`expr substr '------------------------------------------------------------------------' 1 $E` - DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E` - -+if [ "x$DEBIAN" = "x1" ]; then -+ MYSQLD="/usr/sbin/mysqld" -+ MYSQL_TEST="/usr/sbin/mysqltest" -+ MYSQLADMIN="/usr/bin/mysqladmin" -+ INSTALL_DB="/var/mysql/mysql-test/install_test_db -debian" -+ -+else -+ - # on source dist, we pick up freshly build executables - # on binary, use what is installed - if [ x$SOURCE_DIST = x1 ] ; then -@@ -250,6 +277,8 @@ - read unused - } - -+fi -+ - - error () { - $ECHO "Error: $1" -@@ -365,7 +394,7 @@ - --language=english \ - --innobase_data_file_path=ibdata1:50M \ - $SMALL_SERVER \ -- $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT" -+ $RUN_USER_OPT $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT" - if [ x$DO_DDD = x1 ] - then - $ECHO "set args $master_args" > $GDB_MASTER_INIT -@@ -420,7 +449,7 @@ - --language=english \ - --skip-innobase \ - $SMALL_SERVER \ -- $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" -+ $RUN_USER_OPT $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" - if [ x$DO_DDD = x1 ] - then - $ECHO "set args $master_args" > $GDB_SLAVE_INIT diff --git a/support-files/debian/rules b/support-files/debian/rules deleted file mode 100755 index c03e7fd1742ef38b1ad58bc383f3b17a4088864f..0000000000000000000000000000000000000000 --- a/support-files/debian/rules +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/make -f -# Made with the aid of debmake, by Christoph Lameter, -# based on the sample debian/rules file for GNU hello by Ian Jackson. - -package=mysql -CHARSET=ujis -SYSNAME= - -TEMPINST=build - -# CFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static - -CC=gcc -CFLAGS=-O6 -fomit-frame-pointer -CXX=gcc -CXXFLAGS=-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -# CXXFLAGS=-O6 -fomit-frame-pointer -felide-constructors -fno-rtti - -COMMONCONF= --prefix=/usr --libexecdir=/usr/sbin \ - --localstatedir=/var/mysql/data \ - --enable-shared \ - --without-perl --without-readline \ - --without-docs --without-bench \ - --with-mysqld-user=mysql \ - --with-extra-charsets=all - -SERVERCONF=$(COMMONCONF) --enable-assembler \ - --with-raid - -MYSQLMAXCONF= --with-server-suffix=-Max \ - --with-innodb \ - --with-berkeley-db - -# --with-gemini \ - -# --with-berkeley-db-includes=/usr/include/db3 \ -# --with-berkeley-db-libs=/usr/lib - -STATICCONF=--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static - -CLIENTCONF=$(COMMONCONF) --without-server - -################################################## -patches debian/stamp-patches: - -test -e debian/stamp-patches || \ - for i in `find debian/patches -type f -print` ; do \ - echo "==== $$i ====" ; \ - patch -p1 < $$i ; \ - done - touch debian/stamp-patches - -################################################## -premkdir debian/stamp-premkdir: - $(checkdir) - -rm -rf debian/tmp debian/$(TEMPINST)* - dh_installdirs - - for i in '' -shared -debug -max -max-shared -max-debug ; do \ - install -d debian/$(TEMPINST)$${i}/usr/{bin,sbin,share,man,include,info} ; \ - done - -# -install -d debian/$(TEMPINST)$${i}/usr/{bin,sbin,share,man,include,info} -# -install -d debian/$(TEMPINST)-shared/usr/{bin,sbin,share,man,include,info} -# -install -d debian/$(TEMPINST)-debug/usr/{bin,sbin,share,man,include,info} - - touch debian/stamp-premkdir - -################################################## -config debian/stamp-config: debian/stamp-premkdir debian/stamp-patches - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - LDFLAGS="-static" \ - ./configure $(SERVERCONF) $(STATICCONF) \ - --with-charset=$(CHARSET) \ - --with-bench \ - $(SYSNAME) - -# sed 's/-fno-implicit-templates//g' sql/Makefile > .m -# mv .m sql/Makefile - touch debian/stamp-config - -################################################## -build: debian/stamp-config - make LDFLAGS="-static" - make install DESTDIR=`pwd`/debian/$(TEMPINST) - cp include/m_ctype.h `pwd`/debian/$(TEMPINST)/usr/include/mysql/ - touch build - -################################################## -build-shared debian/stamp-build-shared: debian/stamp-patches - -make distclean - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - ./configure $(SERVERCONF) \ - --with-charset=$(CHARSET) \ - $(SYSNAME) - -# ./configure $(CLIENTCONF) - - make - make install DESTDIR=`pwd`/debian/$(TEMPINST)-shared - - touch debian/stamp-build-shared - -################################################## -build-debug debian/stamp-build-debug: debian/stamp-patches - -make distclean - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - ./configure $(SERVERCONF) \ - --with-charset=$(CHARSET) \ - --with-debug \ - $(SYSNAME) - -# ./configure $(CLIENTCONF) - - make - make install DESTDIR=`pwd`/debian/$(TEMPINST)-debug - - touch debian/stamp-build-debug - -################################################## -debian/stamp-mysql-max: debian/stamp-mysql-max-static debian/stamp-mysql-max-shared debian/stamp-mysql-max-debug - -debian/stamp-mysql-max-static: debian/stamp-premkdir debian/stamp-patches - -make distclean - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - ./configure $(SERVERCONF) $(STATICCONF) \ - $(MYSQLMAXCONF) \ - --with-charset=$(CHARSET) \ - $(SYSNAME) - - make LDFLAGS="-static" - make install DESTDIR=`pwd`/debian/$(TEMPINST)-max - - touch debian/stamp-mysql-max-static - -debian/stamp-mysql-max-shared: debian/stamp-premkdir debian/stamp-patches - -make distclean - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - ./configure $(SERVERCONF) \ - $(MYSQLMAXCONF) \ - --with-charset=$(CHARSET) \ - $(SYSNAME) - - make - make install DESTDIR=`pwd`/debian/$(TEMPINST)-max-shared - - touch debian/stamp-mysql-max-shared - - -debian/stamp-mysql-max-debug: debian/stamp-premkdir debian/stamp-patches - -make distclean - CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ - ./configure $(SERVERCONF) \ - $(MYSQLMAXCONF) \ - --with-charset=$(CHARSET) \ - --with-debug \ - $(SYSNAME) - - make - make install DESTDIR=`pwd`/debian/$(TEMPINST)-max-debug - - touch debian/stamp-mysql-max-debug - - -################################################## -clean: - $(checkdir) - -make distclean - -test -e debian/stamp-patches && \ - for i in `find debian/patches -type f -print` ; do \ - patch -R -p1 < $$i ; \ - done - -rm -rf build debian/stamp-* debian/$(TEMPINST)* - -dh_clean - -rm -f `find . -name "*~"` - -rm -rf debian/tmp debian/files* core - -rm -f debian/*substvars - -rm -f `cat debian/gomi` - -################################################## -binary-indep: checkroot build - $(checkdir) -# There are no architecture-independent files to be uploaded -# generated by this package. If there were any they would be -# made here. - -binary-arch: checkroot build debian/stamp-build-shared debian/stamp-build-debug debian/stamp-mysql-max - sh debian/move - -### init, post* - dh_installdeb - cp debian/shlibs debian/libmysqlclient10/DEBIAN/ - - cp debian/my.cnf debian/mysql-server/etc/ - cp support-files/mysql.server debian/mysql-server/etc/init.d/mysql ; chmod +x debian/mysql-server/etc/init.d/mysql - -### dpkg-xxx - dh_compress - - dh_fixperms - - dh_strip - - dh_shlibdeps - dh_gencontrol - - dpkg --build debian/libmysqlclient10 .. - dpkg --build debian/mysql-client .. - dpkg --build debian/mysql-server .. - dpkg --build debian/mysql-server-shared .. - dpkg --build debian/mysql-server-debug .. - dpkg --build debian/mysql-dev .. - dpkg --build debian/mysql-bench .. - dpkg --build debian/mysql-doc .. - dpkg --build debian/mysql-max .. - dpkg --build debian/mysql-max-shared .. - dpkg --build debian/mysql-max-debug .. - -define checkdir - test -f debian/rules -endef - -# Below here is fairly generic really - -binary: binary-indep binary-arch - -################################################## -checkroot: - $(checkdir) - test root = "`whoami`" - -################################################## -.PHONY: binary binary-arch binary-indep clean checkroot diff --git a/support-files/debian/shlibs b/support-files/debian/shlibs deleted file mode 100644 index 5500d337df96e5d5927346a98593a28061221e01..0000000000000000000000000000000000000000 --- a/support-files/debian/shlibs +++ /dev/null @@ -1 +0,0 @@ -libmysqlclient 10 libmysqlclient10 diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 3e765affa4b31b3215fc345d10e664e37aab04a1..4bff95b29fa623f95d53d0b752abf4eb8418b1a6 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -148,18 +148,6 @@ They should be used with caution. %{see_base} -%package bench -Requires: %{name}-client perl-DBI perl -Summary: MySQL - Benchmarks and test system -Group: Applications/Databases -Provides: mysql-bench -Obsoletes: mysql-bench - -%description bench -This package contains MySQL benchmark scripts and data. - -%{see_base} - %package devel Summary: MySQL - Development header files and libraries Group: Applications/Databases @@ -246,9 +234,6 @@ sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \ --enable-thread-safe-client \ --with-readline \ " - - # benchdir does not fit in above model. Maybe a separate bench distribution - make benchdir_root=$RPM_BUILD_ROOT/usr/share/ } # Use our own copy of glibc @@ -389,7 +374,7 @@ MBD=$RPM_BUILD_DIR/mysql-%{mysql_version}/mysql-release-%{mysql_version} # Ensure that needed directories exists install -d $RBR%{_sysconfdir}/{logrotate.d,init.d} install -d $RBR%{mysqldatadir}/mysql -install -d $RBR%{_datadir}/{sql-bench,mysql-test} +install -d $RBR%{_datadir}/mysql-test install -d $RBR%{_includedir} install -d $RBR%{_libdir} install -d $RBR%{_mandir} @@ -397,7 +382,7 @@ install -d $RBR%{_sbindir} # Install all binaries -(cd $MBD && make install DESTDIR=$RBR benchdir_root=%{_datadir}) +(cd $MBD && make install DESTDIR=$RBR) # Old packages put shared libs in %{_libdir}/ (not %{_libdir}/mysql), so do # the same here. mv $RBR/%{_libdir}/mysql/*.so* $RBR/%{_libdir}/ @@ -694,23 +679,24 @@ fi %{_libdir}/libmysql*.so* %{_libdir}/libndb*.so* -%files bench -%defattr(-, root, root, 0755) -%attr(-, root, root) %{_datadir}/sql-bench -%attr(-, root, root) %{_datadir}/mysql-test -%attr(755, root, root) %{_bindir}/mysql_client_test -%attr(755, root, root) %{_bindir}/mysqltestmanager -%attr(755, root, root) %{_bindir}/mysqltestmanager-pwgen -%attr(755, root, root) %{_bindir}/mysqltestmanagerc - %files embedded -%defattr(-, root, root, 0755) +%defattr(-, root, root, 0755) %attr(644, root, root) %{_libdir}/mysql/libmysqld.a # The spec file changelog only includes changes made to the spec file # itself - note that they must be ordered by date (important when # merging BK trees) %changelog + +* Wed Apr 12 2006 Jim Winstead <jimw@mysql.com> + +- Remove sql-bench, and MySQL-bench RPM (will be built as an independent + project from the mysql-bench repository) + +* Tue Apr 11 2006 Jim Winstead <jimw@mysql.com> + +- Remove old mysqltestmanager and related programs + * Sat Apr 01 2006 Kent Boortz <kent@mysql.com> - Set $LDFLAGS from $MYSQL_BUILD_LDFLAGS diff --git a/tools/Makefile.am b/tools/Makefile.am deleted file mode 100644 index 0f726bd5fc3c7c42003f3d85cd54bc9144a2d191..0000000000000000000000000000000000000000 --- a/tools/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2004 MySQL AB -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# Process this file with automake to create Makefile.in - -if HAVE_YASSL - yassl_dummy_link_fix= $(top_srcdir)/extra/yassl/src/dummy.cpp -else - yassl_dummy_link_fix= -endif -INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include \ - $(openssl_includes) -LDADD= @CLIENT_EXTRA_LDFLAGS@ \ - $(top_builddir)/libmysql_r/libmysqlclient_r.la \ - @openssl_libs@ @ZLIB_LIBS@ -bin_PROGRAMS= mysqltestmanager -mysqltestmanager_SOURCES= mysqlmanager.c $(yassl_dummy_link_fix) -mysqltestmanager_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) -DEF= -DUNDEF_THREADS_HACK - -# Don't update the files from bitkeeper -%::SCCS/s.% diff --git a/tools/managertest1.nc b/tools/managertest1.nc deleted file mode 100644 index bf1b82ed4067f863ed555191e7074b45a84c3aba..0000000000000000000000000000000000000000 --- a/tools/managertest1.nc +++ /dev/null @@ -1,16 +0,0 @@ -def_exec server /usr/sbin/mysqld --socket=/tmp/temp.sock --skip-grant --skip-net --datadir=/tmp -set_exec_con server root localhost /tmp/temp.sock -set_exec_stdout server /tmp/mysqld.err -set_exec_stderr server /tmp/mysqld.err -start_exec server 3 -show_exec -query server show variables like '%max_heap%'; -stop_exec server 3 -def_exec server /usr/sbin/mysqld --socket=/tmp/temp.sock --skip-grant --skip-net --datadir=/tmp -O max_heap_table_size=5000 -show_exec -start_exec server 3 -query server show variables like '%max_heap%'; -show_exec -stop_exec server 3 -show_exec -quit diff --git a/tools/mysqlmanager-sample.pwd b/tools/mysqlmanager-sample.pwd deleted file mode 100644 index 51c1ade1b77b3fca2cc89763278d61da344c0127..0000000000000000000000000000000000000000 --- a/tools/mysqlmanager-sample.pwd +++ /dev/null @@ -1 +0,0 @@ -root:5ebe2294ecd0e0f08eab7690d2a6ee69 diff --git a/tools/mysqlmanager.c b/tools/mysqlmanager.c deleted file mode 100644 index 4d507fc3d32bf3ce7da9e1c738b82aaeed199d60..0000000000000000000000000000000000000000 --- a/tools/mysqlmanager.c +++ /dev/null @@ -1,1866 +0,0 @@ -/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - MySQL server management daemon - - Written by: - Sasha Pachev <sasha@mysql.com> -*/ - -#ifndef __NETWARE__ - -#include <my_global.h> -#include <my_pthread.h> -#include <mysql.h> -#include <mysql_version.h> -#include <mysqld_error.h> -#include <my_sys.h> -#include <my_dir.h> -#include <m_string.h> -#include <m_ctype.h> -#include <hash.h> -#include <my_getopt.h> -#include <stdarg.h> -#include <sys/stat.h> -#include <errno.h> -#include <violite.h> -#include <md5.h> -#include <signal.h> -#ifdef HAVE_SYS_WAIT_H -#include <sys/wait.h> -#endif - -#define MANAGER_VERSION "1.2" -#define MANAGER_GREETING "MySQL Server Management Daemon v. 1.2" - -#define LOG_ERR 1 -#define LOG_WARN 2 -#define LOG_INFO 3 -#define LOG_DEBUG 4 - -#define CHILD_START 1 -#define CHILD_STOP 2 - -#ifndef MANAGER_PORT -#define MANAGER_PORT 23546 -#endif - -#ifndef MANAGER_CONNECT_RETRIES -#define MANAGER_CONNECT_RETRIES 5 -#endif - -#ifndef MANAGER_MAX_CMD_LEN -#define MANAGER_MAX_CMD_LEN 16384 -#endif - -#ifndef MANAGER_LOG_FILE -#define MANAGER_LOG_FILE "/var/log/mysqlmanager.log" -#endif - -#ifndef MANAGER_BACK_LOG -#define MANAGER_BACK_LOG 50 -#endif - -#ifndef MAX_USER_NAME -#define MAX_USER_NAME 16 -#endif - -#ifndef MANAGER_PW_FILE -#define MANAGER_PW_FILE "/etc/mysqlmanager.passwd" -#endif - -#ifndef MAX_HOST -#define MAX_HOST 128 -#endif - -#ifndef MAX_LAUNCHER_MSG -#define MAX_LAUNCHER_MSG 256 -#endif - -static CHARSET_INFO *cs= &my_charset_latin1; - -#define MAX_RETRY_COUNT 100 - -/* - Variable naming convention - if starts with manager_, either is set - directly by the user, or used closely in ocnjunction with a variable - set by the user -*/ - -#if defined(__i386__) && defined(TARGET_OS_LINUX) -#define DO_STACKTRACE 1 -#endif - -uint manager_port; -FILE* errfp; -const char* manager_log_file = MANAGER_LOG_FILE; -pthread_mutex_t lock_log,lock_shutdown,lock_exec_hash,lock_launch_thd; -pthread_cond_t cond_launch_thd; -pthread_t loop_th,launch_msg_th; -int manager_sock = -1; -uchar* stack_bottom=0; -struct sockaddr_in manager_addr; -ulong manager_bind_addr; -int manager_back_log; -int in_shutdown = 0, shutdown_requested=0; -int manager_connect_retries; -const char* manager_greeting = MANAGER_GREETING; -uint manager_max_cmd_len; -const char* manager_pw_file=MANAGER_PW_FILE; -my_bool one_thread; /* for debugging */ - -typedef enum {PARAM_STDOUT,PARAM_STDERR} PARAM_TYPE; - -/* messages */ - -#define MAX_CLIENT_MSG_LEN 256 -#define NET_BLOCK 2048 -#define MD5_LEN 16 -#define ESCAPE_CHAR '\\' -#define EOL_CHAR '\n' - -/* access flags */ - -#define PRIV_SHUTDOWN 1 - -struct manager_thd -{ - NET net; - char user[MAX_USER_NAME+1]; - int priv_flags; - char* cmd_buf; - int fatal,finished; -}; - -struct manager_user -{ - char user[MAX_USER_NAME+1]; - char md5_pass[MD5_LEN]; - int user_len; - const char* error; -}; - -HASH exec_hash,user_hash; -struct manager_exec* cur_launch_exec=0; - -static struct manager_thd* manager_thd_new(Vio* vio); - -static struct manager_exec* manager_exec_new(char* arg_start,char* arg_end); -static void manager_exec_print(NET* net,struct manager_exec* e); -static void manager_thd_free(struct manager_thd* thd); -static void manager_exec_free(void* e); -static void manager_exec_connect(struct manager_exec* e); -static int manager_exec_launch(struct manager_exec* e); -static struct manager_exec* manager_exec_by_pid(pid_t pid); - -static struct manager_user* manager_user_new(char* buf); -static void manager_user_free(void* u); - -static char* arg_strmov(char* dest, const char* src, int n); -static byte* get_exec_key(const byte* e, uint* len, - my_bool __attribute__((unused)) t); -static byte* get_user_key(const byte* u, uint* len, - my_bool __attribute__((unused)) t); -static uint tokenize_args(char* arg_start,char** arg_end); -static void init_arg_array(char* arg_str,char** args,uint arg_count); -static int hex_val(char c); -static int open_and_dup(int fd,char* path); -static void update_req_len(struct manager_exec* e); - -typedef int (*manager_cmd_handler)(struct manager_thd*,char*,char*); - -static void handle_child(int __attribute__((unused)) sig); -static void handle_sigpipe(int __attribute__((unused)) sig); - -/* - exec() in a threaded application is full of problems. - To solve this, we fork off a launcher at the very start - and communicate with it through a pipe -*/ - -static void fork_launcher(); -static void run_launcher_loop(); -int to_launcher_pipe[2],from_launcher_pipe[2]; -pid_t launcher_pid; -int in_segfault=0; -const char* pid_file = "/var/run/mysqlmanager.pid"; -int created_pid_file = 0; - -struct manager_cmd -{ - const char* name; - const char* help; - manager_cmd_handler handler_func; - int len; -}; - -struct manager_exec -{ - char* ident; - int ident_len; - const char* error; - char* bin_path; - char** args; - char con_user[16]; - char con_pass[16]; - int con_port; - pid_t pid; - int exit_code; - pthread_mutex_t lock; - pthread_cond_t cond; - pthread_t th; - char con_sock[FN_REFLEN]; - char con_host[MAX_HOST]; - char stderr_path[FN_REFLEN]; - char stdout_path[FN_REFLEN]; - MYSQL mysql; - char* data_buf; - int req_len; - int start_wait_timeout; - int stderr_path_size,stdout_path_size,data_buf_size; - int num_args; -}; - -static int set_exec_param(struct manager_thd* thd, char* args_start, - char* args_end, PARAM_TYPE param_type); - -#define HANDLE_DECL(com) \ -static int com(struct manager_thd* thd, char* args_start,char* args_end) -#define HANDLE_NOARG_DECL(com) \ -static int com(struct manager_thd *thd,\ - char *args_start __attribute__((unused)),\ - char* args_end __attribute__((unused))) - -HANDLE_NOARG_DECL(handle_ping); -HANDLE_NOARG_DECL(handle_quit); -HANDLE_NOARG_DECL(handle_help); -HANDLE_NOARG_DECL(handle_shutdown); -HANDLE_DECL(handle_def_exec); -HANDLE_DECL(handle_start_exec); -HANDLE_DECL(handle_stop_exec); -HANDLE_DECL(handle_set_exec_con); -HANDLE_DECL(handle_set_exec_stdout); -HANDLE_DECL(handle_set_exec_stderr); -HANDLE_NOARG_DECL(handle_show_exec); -HANDLE_DECL(handle_query); - - -struct manager_cmd commands[] = -{ - {"ping", "Check if this server is alive", handle_ping,4}, - {"quit", "Finish session", handle_quit,4}, - {"shutdown", "Shutdown this server", handle_shutdown,8}, - {"def_exec", "Define executable entry", handle_def_exec,8}, - {"start_exec", "Launch process defined by executable entry", - handle_start_exec,10}, - {"stop_exec", "Stop process defined by executable entry", - handle_stop_exec,9}, - {"set_exec_con", "Set connection parameters for executable entry", - handle_set_exec_con,12}, - {"set_exec_stdout", "Set stdout path for executable entry", - handle_set_exec_stdout,15}, - {"set_exec_stderr", "Set stderr path for executable entry", - handle_set_exec_stderr,15}, - {"query","Run query against MySQL server",handle_query,5}, - {"show_exec","Show defined executable entries",handle_show_exec,9}, - {"help", "Print this message", handle_help,4}, - {0,0,0,0} -}; - - -static struct my_option my_long_options[] = -{ -#ifndef DBUG_OFF - {"debug", '#', "Output debug log. Often this is 'd:t:o,filename'.", - 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, -#endif - {"help", '?', "Display this help and exit.", - 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"port", 'P', "Port number to listen on.", (gptr*) &manager_port, - (gptr*) &manager_port, 0, GET_UINT, REQUIRED_ARG, MANAGER_PORT, 0, 0, 0, - 0, 0}, - {"log", 'l', "Path to log file.", (gptr*) &manager_log_file, - (gptr*) &manager_log_file, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"bind-address", 'b', "Address to listen on.", (gptr*) &manager_bind_addr, - (gptr*) &manager_bind_addr, 0, GET_ULONG, REQUIRED_ARG, INADDR_ANY, 0, - 0, 0, 0, 0}, - {"tcp-backlog", 'B', "Size of TCP/IP listen queue.", - (gptr*) &manager_back_log, (gptr*) &manager_back_log, 0, GET_INT, - REQUIRED_ARG, MANAGER_BACK_LOG, 0, 0, 0, 0, 0}, - {"greeting", 'g', "Set greeting on connect.", (gptr*) &manager_greeting, - (gptr*) &manager_greeting, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"max-command-len", 'm', "Maximum command length.", - (gptr*) &manager_max_cmd_len, (gptr*) &manager_max_cmd_len, 0, GET_UINT, - REQUIRED_ARG, MANAGER_MAX_CMD_LEN, 0, 0, 0, 0, 0}, - {"one-thread", 'd', "Use one thread ( for debugging).", (gptr*) &one_thread, - (gptr*) &one_thread, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"connect-retries", 'C', "Number of attempts to establish MySQL connection.", - (gptr*) &manager_connect_retries, (gptr*) &manager_connect_retries, 0, - GET_INT, REQUIRED_ARG, MANAGER_CONNECT_RETRIES, 0, 0, 0, 0, 0}, - {"password-file", 'p', "Password file for manager.", - (gptr*) &manager_pw_file, (gptr*) &manager_pw_file, 0, GET_STR, - REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"pid-file", 'f', "Pid file to use.", (gptr*) &pid_file, (gptr*) &pid_file, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"version", 'V', "Output version information and exit.", 0, 0, 0, - GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} -}; - -static void die(const char* fmt,...); -static void print_time(FILE* fp); -static void clean_up(); -static struct manager_cmd* lookup_cmd(char* s,int len); -static int client_msg(NET* net,int err_code,const char* fmt,...); -static int client_msg_pre(NET* net,int err_code,const char* fmt,...); -static int client_msg_raw(NET* net,int err_code,int pre,const char* fmt, - va_list args); -static int authenticate(struct manager_thd* thd); -/* returns pointer to end of line */ -static char* read_line(struct manager_thd* thd); -pthread_handler_t process_connection(void *arg); -pthread_handler_t process_launcher_messages(void *arg); -static int exec_line(struct manager_thd* thd,char* buf,char* buf_end); - -#ifdef DO_STACKTRACE -void print_stacktrace(); -#endif - -static void log_msg(const char* fmt, int msg_type, va_list args); - -/* No 'inline' here becasue functions with ... can't do that portable */ -#define LOG_MSG_FUNC(type,TYPE) static void type \ - (const char* fmt,...) { \ - va_list args; \ - va_start(args,fmt); \ - log_msg(fmt,TYPE,args);\ - } - -LOG_MSG_FUNC(log_err,LOG_ERR) -LOG_MSG_FUNC(log_warn,LOG_WARN) -LOG_MSG_FUNC(log_info,LOG_INFO) - -#ifndef DBUG_OFF -LOG_MSG_FUNC(log_debug,LOG_DEBUG) -#else -void log_debug(const char* fmt __attribute__((unused)),...) {} -#endif - -static void handle_sigterm(int sig __attribute__((unused))) -{ - log_info("Got SIGTERM"); - if (!one_thread) - { - kill(launcher_pid,SIGTERM); - pthread_kill(loop_th,SIGTERM); - } - clean_up(); - exit(0); -} - -#ifdef DO_STACKTRACE -static void handle_segfault(int sig) -{ - if (in_segfault) - exit(1); - in_segfault=1; - fprintf(errfp,"Got fatal signal %d\n",sig); - print_stacktrace(); - exit(1); -} -#endif - -static void handle_sigpipe(int __attribute__((unused)) sig) -{ - signal(SIGPIPE,handle_sigpipe); -} - -#ifdef DO_STACKTRACE - -#define MAX_DEPTH 25 -#define SIGRETURN_FRAME_COUNT 1 - -void print_stacktrace() -{ - uchar** fp; - int i; - LINT_INIT(fp); - fprintf(errfp,"Fatal errror, stacktrace follows:\n"); -#ifdef __i386__ - __asm__ __volatile__("movl %%ebp,%0" :"=r"(fp) :"r"(fp)); -#endif - if (!fp) - { - fprintf(errfp,"frame points is NULL, cannot trace stack\n"); - return; - } - for (i=0;i<MAX_DEPTH && fp<(uchar**)stack_bottom;i++) - { -#ifdef __i386__ - uchar** new_fp = (uchar**)*fp; - fprintf(errfp, "%p\n", i == SIGRETURN_FRAME_COUNT ? - *(fp+17) : *(fp+1)); -#endif /* __386__ */ - if (new_fp <= fp ) - { - fprintf(errfp, "New value of fp=%p failed sanity check,\ - terminating stack trace!\n", new_fp); - return; - } - fp = new_fp; - } - fprintf(errfp,"Stack trace successful\n"); - fflush(errfp); -} -#endif - -static int exec_line(struct manager_thd* thd,char* buf,char* buf_end) -{ - char* p=buf; - struct manager_cmd* cmd; - for (;p<buf_end && !my_isspace(cs,*p);p++) - *p=my_tolower(cs,*p); - log_info("Command '%s'", buf); - if (!(cmd=lookup_cmd(buf,(int)(p-buf)))) - { - if (client_msg(&thd->net,MANAGER_CLIENT_ERR, - "Unrecognized command '%s', type help to see list of supported\ - commands", buf)) - thd->fatal=1; - return 1; - } - for (;p<buf_end && my_isspace(cs,*p);p++); - return cmd->handler_func(thd,p,buf_end); -} - -static struct manager_cmd* lookup_cmd(char* s,int len) -{ - struct manager_cmd* cmd = commands; - for (;cmd->name;cmd++) - { - if (cmd->len == len && !memcmp(cmd->name,s,len)) - return cmd; - } - return 0; -} - -HANDLE_NOARG_DECL(handle_ping) -{ - client_msg(&thd->net,MANAGER_OK,"Server management daemon is alive"); - return 0; -} - -HANDLE_NOARG_DECL(handle_quit) -{ - client_msg(&thd->net,MANAGER_OK,"Goodbye"); - thd->finished=1; - return 0; -} - -HANDLE_NOARG_DECL(handle_help) -{ - struct manager_cmd* cmd = commands; - NET* net = &thd->net; - client_msg_pre(net,MANAGER_INFO,"Available commands:"); - for (;cmd->name;cmd++) - { - client_msg_pre(net,MANAGER_INFO,"%s - %s", cmd->name, cmd->help); - } - client_msg_pre(net,MANAGER_INFO,"End of help"); - return 0; -} - -HANDLE_NOARG_DECL(handle_shutdown) -{ - client_msg(&thd->net,MANAGER_OK,"Shutdown started, goodbye"); - thd->finished=1; - shutdown_requested = 1; - if (!one_thread) - { - kill(launcher_pid,SIGTERM); - pthread_kill(loop_th,SIGTERM); - } - return 0; -} - -HANDLE_DECL(handle_set_exec_con) -{ - int num_args; - const char* error=0; - struct manager_exec* e; - char* arg_p; - if ((num_args=tokenize_args(args_start,&args_end))<2) - { - error="Too few arguments"; - goto err; - } - arg_p=args_start; - pthread_mutex_lock(&lock_exec_hash); - if (!(e=(struct manager_exec*)hash_search(&exec_hash,arg_p, - strlen(arg_p)))) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Exec definition entry does not exist"; - goto err; - } - arg_p+=strlen(arg_p)+1; - arg_p+=(strnmov(e->con_user,arg_p,sizeof(e->con_user))-e->con_user)+1; - if (num_args >= 3) - { - arg_p+=(strnmov(e->con_host,arg_p,sizeof(e->con_host))-e->con_host)+1; - if (num_args == 4) - { - if (!(e->con_port=atoi(arg_p))) - strnmov(e->con_sock,arg_p,sizeof(e->con_sock)); - else - e->con_sock[0]=0; - } - else if (num_args > 4) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Too many arguments"; - goto err; - } - } - pthread_mutex_unlock(&lock_exec_hash); - client_msg(&thd->net,MANAGER_OK,"Entry updated"); - return 0; -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - return 1; -} - -HANDLE_DECL(handle_set_exec_stdout) -{ - return set_exec_param(thd,args_start,args_end,PARAM_STDOUT); -} - -HANDLE_DECL(handle_set_exec_stderr) -{ - return set_exec_param(thd,args_start,args_end,PARAM_STDERR); -} - -static int set_exec_param(struct manager_thd* thd, char* args_start, - char* args_end, PARAM_TYPE param_type) -{ - const char* error=0; - struct manager_exec* e; - char* arg_p; - char* param; - int param_size; - - if (tokenize_args(args_start,&args_end) < 2) - { - error="Too few arguments"; - goto err; - } - arg_p=args_start; - pthread_mutex_lock(&lock_exec_hash); - if (!(e=(struct manager_exec*)hash_search(&exec_hash,arg_p, - strlen(arg_p)))) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Exec definition entry does not exist"; - goto err; - } - arg_p+=strlen(arg_p)+1; - param_size=strlen(arg_p)+1; - switch (param_type) { - case PARAM_STDOUT: - param=e->stdout_path; - e->req_len+=(param_size-e->stdout_path_size); - e->stdout_path_size=param_size; - break; - case PARAM_STDERR: - param=e->stderr_path; - e->req_len+=(param_size-e->stderr_path_size); - e->stderr_path_size=param_size; - break; - default: - error="Internal error"; - goto err; - } - strnmov(param,arg_p,FN_REFLEN); - pthread_mutex_unlock(&lock_exec_hash); - client_msg(&thd->net,MANAGER_OK,"Entry updated"); - return 0; -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - return 1; -} - - -HANDLE_DECL(handle_start_exec) -{ - struct manager_exec* e; - int ident_len; - const char* error=0; - struct timespec t; - if (tokenize_args(args_start,&args_end) < 1) - { - error="Too few arguments"; - goto err; - } - ident_len=strlen(args_start); - pthread_mutex_lock(&lock_exec_hash); - if (!(e=(struct manager_exec*)hash_search(&exec_hash,args_start, - ident_len))) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Exec definition entry does not exist"; - goto err; - } - pthread_mutex_unlock(&lock_exec_hash); - manager_exec_launch(e); - if ((error=e->error)) - goto err; - pthread_mutex_lock(&e->lock); - t.tv_sec=time(0)+(e->start_wait_timeout=atoi(args_start+ident_len+1)); - t.tv_nsec=0; - if (!e->pid) - pthread_cond_timedwait(&e->cond,&e->lock,&t); - if (!e->pid) - { - pthread_mutex_unlock(&e->lock); - error="Process failed to start withing alotted time"; - goto err; - } - mysql_close(&e->mysql); - manager_exec_connect(e); - error=e->error; - pthread_mutex_unlock(&e->lock); - if (error) - goto err; - client_msg(&thd->net,MANAGER_OK,"'%s' started",e->ident); - return 0; -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - return 1; -} - -HANDLE_DECL(handle_stop_exec) -{ - struct timespec abstime; - struct manager_exec* e; - int ident_len; - const char* error=0; - if (tokenize_args(args_start,&args_end) <2) - { - error="Too few arguments"; - goto err; - } - ident_len=strlen(args_start); - abstime.tv_sec=time(0)+atoi(args_start+1+ident_len); - abstime.tv_nsec=0; - pthread_mutex_lock(&lock_exec_hash); - if (!(e=(struct manager_exec*)hash_search(&exec_hash,args_start, - ident_len))) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Exec definition entry does not exist"; - goto err; - } - pthread_mutex_unlock(&lock_exec_hash); - pthread_mutex_lock(&e->lock); - e->th=pthread_self(); - if (!e->pid) - { - /* e->th=0; */ /* th may be a struct */ - pthread_mutex_unlock(&e->lock); - error="Process not running"; - goto err; - } - if (mysql_shutdown(&e->mysql, SHUTDOWN_DEFAULT)) - { - /* e->th=0; */ /* th may be a struct */ - pthread_mutex_unlock(&e->lock); - error="Could not send shutdown command"; - goto err; - } - if (e->pid) - pthread_cond_timedwait(&e->cond,&e->lock,&abstime); - if (e->pid) - error="Process failed to terminate within alotted time"; - /* e->th=0; */ /* th may be a struct */ - pthread_mutex_unlock(&e->lock); - if (!error) - { - client_msg(&thd->net,MANAGER_OK,"'%s' terminated",e->ident); - return 0; - } -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - return 1; -} - -HANDLE_DECL(handle_query) -{ - const char* error=0; - struct manager_exec* e; - MYSQL_RES* res=0; - MYSQL_ROW row; - MYSQL_FIELD* fields; - int num_fields,i,ident_len; - char* ident,*query; - query=ident=args_start; - while (!my_isspace(cs,*query)) - query++; - if (query == ident) - { - error="Missing server identifier"; - goto err; - } - ident_len=(int)(query-ident); - while (query<args_end && my_isspace(cs,*query)) - query++; - if (query == args_end) - { - error="Missing query"; - goto err; - } - pthread_mutex_lock(&lock_exec_hash); - if (!(e=(struct manager_exec*)hash_search(&exec_hash,ident, - ident_len))) - { - pthread_mutex_unlock(&lock_exec_hash); - error="Exec definition entry does not exist"; - goto err; - } - pthread_mutex_unlock(&lock_exec_hash); - pthread_mutex_lock(&e->lock); - if (!e->pid) - { - error="Process is not running"; - pthread_mutex_unlock(&e->lock); - goto err; - } - - if (mysql_query(&e->mysql,query)) - { - error=mysql_error(&e->mysql); - pthread_mutex_unlock(&e->lock); - goto err; - } - if ((res=mysql_store_result(&e->mysql))) - { - char buf[MAX_CLIENT_MSG_LEN],*p,*buf_end; - fields=mysql_fetch_fields(res); - num_fields=mysql_num_fields(res); - p=buf; - buf_end=buf+sizeof(buf); - for (i=0;i<num_fields && p<buf_end-2;i++) - { - p=arg_strmov(p,fields[i].name,buf_end-p-2); - *p++='\t'; - } - *p=0; - client_msg_pre(&thd->net,MANAGER_OK,buf); - - while ((row=mysql_fetch_row(res))) - { - p=buf; - for (i=0;i<num_fields && p<buf_end-2;i++) - { - p=arg_strmov(p,row[i],buf_end-p-2); - *p++='\t'; - } - *p=0; - client_msg_pre(&thd->net,MANAGER_OK,buf); - } - } - pthread_mutex_unlock(&e->lock); - client_msg(&thd->net,MANAGER_OK,"End"); - return 0; -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - return 1; -} - -HANDLE_DECL(handle_def_exec) -{ - struct manager_exec* e=0,*old_e; - const char* error=0; - if (!(e=manager_exec_new(args_start,args_end))) - { - error="Out of memory"; - goto err; - } - if (e->error) - { - error=e->error; - goto err; - } - pthread_mutex_lock(&lock_exec_hash); - if ((old_e=(struct manager_exec*)hash_search(&exec_hash,(byte*)e->ident, - e->ident_len))) - { - strnmov(e->stdout_path,old_e->stdout_path,sizeof(e->stdout_path)); - strnmov(e->stderr_path,old_e->stderr_path,sizeof(e->stderr_path)); - strnmov(e->con_user,old_e->con_user,sizeof(e->con_user)); - strnmov(e->con_host,old_e->con_host,sizeof(e->con_host)); - strnmov(e->con_sock,old_e->con_sock,sizeof(e->con_sock)); - e->con_port=old_e->con_port; - update_req_len(e); - hash_delete(&exec_hash,(byte*)old_e); - } - my_hash_insert(&exec_hash,(byte*)e); - pthread_mutex_unlock(&lock_exec_hash); - client_msg(&thd->net,MANAGER_OK,"Exec definition created"); - return 0; -err: - client_msg(&thd->net,MANAGER_CLIENT_ERR,error); - if (e) - manager_exec_free(e); - return 1; -} - -HANDLE_NOARG_DECL(handle_show_exec) -{ - uint i; - client_msg_pre(&thd->net,MANAGER_INFO,"Exec_def\tPid\tExit_status\tCon_info\ -\tStdout\tStderr\tArguments"); - pthread_mutex_lock(&lock_exec_hash); - for (i=0;i<exec_hash.records;i++) - { - struct manager_exec* e=(struct manager_exec*)hash_element(&exec_hash,i); - manager_exec_print(&thd->net,e); - } - pthread_mutex_unlock(&lock_exec_hash); - client_msg(&thd->net,MANAGER_INFO,"End"); - return 0; -} - -static struct manager_exec* manager_exec_by_pid(pid_t pid) -{ - struct manager_exec* e; - uint i; - pthread_mutex_lock(&lock_exec_hash); - for (i=0;i<exec_hash.records;i++) - { - e=(struct manager_exec*)hash_element(&exec_hash,i); - if (e->pid==pid) - { - pthread_mutex_unlock(&lock_exec_hash); - return e; - } - } - pthread_mutex_unlock(&lock_exec_hash); - return 0; -} - -static void manager_exec_connect(struct manager_exec* e) -{ - int i; - int connect_retries; - - if (!(connect_retries=e->start_wait_timeout)) - connect_retries=manager_connect_retries; - - for (i=0;i<connect_retries;i++) - { - if (mysql_real_connect(&e->mysql,e->con_host,e->con_user,e->con_pass,0, - e->con_port,e->con_sock,0)) - { - e->mysql.reconnect= 1; - return; - } - sleep(1); - } - e->error="Could not connect to MySQL server withing the number of tries"; -} - -static int manager_exec_launch(struct manager_exec* e) -{ - if (one_thread) - { - pid_t tmp_pid; - switch ((tmp_pid=fork())) { - case -1: - e->error="Cannot fork"; - return 1; - case 0: - { - int err_code; - close(manager_sock); - err_code=execv(e->bin_path,e->args); - exit(err_code); - } - default: - e->pid=tmp_pid; - manager_exec_connect(e); - return 0; - } - } - else - { - if (my_write(to_launcher_pipe[1],(byte*)&e->req_len, - sizeof(int),MYF(MY_NABP))|| - my_write(to_launcher_pipe[1],(byte*)&e->num_args, - sizeof(int),MYF(MY_NABP)) || - my_write(to_launcher_pipe[1],e->stdout_path,e->stdout_path_size, - MYF(MY_NABP)) || - my_write(to_launcher_pipe[1],e->stderr_path,e->stderr_path_size, - MYF(MY_NABP)) || - my_write(to_launcher_pipe[1],e->data_buf,e->data_buf_size, - MYF(MY_NABP))) - { - e->error="Failed write request to launcher"; - return 1; - } - } - return 0; -} - -static char* arg_strmov(char* dest, const char* src, int n) -{ - char* dest_end = dest+n-1; - char c; - for (;dest<dest_end && (c=*src++);) - { - if (c=='%') - *dest++='%'; - *dest++=c; - } - return dest; -} - -static void manager_exec_print(NET* net,struct manager_exec* e) -{ - char buf[MAX_MYSQL_MANAGER_MSG]; - char* p=buf,*buf_end=buf+sizeof(buf)-1; - char** args=e->args; - - p=arg_strmov(p,e->ident,(int)(buf_end-p)-1); - *p++='\t'; - if (p>buf_end-15) - goto end; - p=int10_to_str(e->pid,p,10); - *p++='\t'; - p=int10_to_str(e->exit_code,p,10); - *p++='\t'; - - p=arg_strmov(p,e->con_user,(int)(buf_end-p)-1); - *p++='@'; - if (p==buf_end) - goto end; - p=arg_strmov(p,e->con_host,(int)(buf_end-p)-11); - *p++=':'; - if (p==buf_end-10) - goto end; - if (e->con_sock[0]) - { - p=arg_strmov(p,e->con_sock,(int)(buf_end-p)-1); - } - else - { - p=int10_to_str(e->con_port,p,10); - } - *p++='\t'; - p=arg_strmov(p,e->stdout_path,(int)(buf_end-p)-1); - if (p==buf_end-1) - goto end; - *p++='\t'; - p=arg_strmov(p,e->stderr_path,(int)(buf_end-p)-1); - if (p==buf_end-1) - goto end; - *p++='\t'; - - for (;p<buf_end && *args;args++) - { - p=arg_strmov(p,*args,(int)(buf_end-p)-1); - *p++='\t'; - } -end: - *p=0; - client_msg_pre(net,MANAGER_INFO,buf); - return; -} - -static int authenticate(struct manager_thd* thd) -{ - char* buf_end,*buf,*p,*p_end; - my_MD5_CTX context; - uchar digest[MD5_LEN]; - struct manager_user* u; - char c; - - client_msg(&thd->net,MANAGER_INFO, manager_greeting); - if (!(buf_end=read_line(thd))) - return -1; - for (buf=thd->cmd_buf,p=thd->user,p_end=p+MAX_USER_NAME; - buf<buf_end && (c=*buf) && p<p_end; buf++,p++) - { - if (my_isspace(cs,c)) - { - *p=0; - break; - } - else - *p=c; - } - if (p==p_end || buf==buf_end) - return 1; - if (!(u=(struct manager_user*)hash_search(&user_hash,thd->user, - (uint)(p-thd->user)))) - return 1; - for (;my_isspace(cs,*buf) && buf<buf_end;buf++) /* empty */; - - my_MD5Init(&context); - my_MD5Update(&context,(uchar*) buf,(uint)(buf_end-buf)); - my_MD5Final(digest,&context); - if (memcmp(u->md5_pass,digest,MD5_LEN)) - return 1; - client_msg(&thd->net,MANAGER_OK,"OK"); - return 0; -} - -static void print_time(FILE* fp) -{ - struct tm now; - time_t t; - time(&t); - localtime_r(&t,&now); - fprintf(fp,"[%d-%02d-%02d %02d:%02d:%02d] ", now.tm_year+1900, - now.tm_mon+1,now.tm_mday,now.tm_hour,now.tm_min, - now.tm_sec); -} - -static void die(const char* fmt, ...) -{ - va_list args; - va_start(args,fmt); - if (fmt) - { - if (errfp==stderr) - fprintf(errfp, "%s: ", my_progname); - else - { - print_time(errfp); - fprintf(errfp,"Fatal error: "); - } - vfprintf(errfp, fmt, args); - if (errno) - fprintf(errfp, " errno=%d", errno); - fprintf(errfp, "\n"); - fflush(errfp); - } - va_end(args); - clean_up(); - exit(1); -} - -void print_msg_type(int msg_type) -{ - const char* msg; - switch (msg_type) { - case LOG_ERR: msg = "ERROR"; break; - case LOG_WARN: msg = "WARNING"; break; - case LOG_INFO: msg = "INFO"; break; -#ifndef DBUG_OFF - case LOG_DEBUG: msg = "DEBUG"; break; -#endif - default: msg = "UNKNOWN TYPE"; break; - } - fprintf(errfp," %s: ", msg); -} - -static void log_msg(const char* fmt, int msg_type, va_list args) -{ - pthread_mutex_lock(&lock_log); - print_time(errfp); - print_msg_type(msg_type); - vfprintf(errfp,fmt,args); - fputc('\n',errfp); - fflush(errfp); - pthread_mutex_unlock(&lock_log); -} - -pthread_handler_t process_launcher_messages(void *arg __attribute__((unused))) -{ - my_thread_init(); - for (;!in_shutdown;) - { - pid_t pid; - struct manager_exec* e; - char buf[MAX_LAUNCHER_MSG]; - if (read(from_launcher_pipe[0],buf,MAX_LAUNCHER_MSG)<0) - { - log_err("error reading launcher message"); - sleep(1); - continue; - } - switch (buf[0]) { - case CHILD_START: - { - char* ident=buf+1; - int ident_len=strlen(ident); - memcpy(&pid,ident+ident_len+1,sizeof(pid)); - log_debug("process message - ident=%s ident_len=%d pid=%d",ident, - ident_len,pid); - pthread_mutex_lock(&lock_exec_hash); - log_debug("hash has %d records",exec_hash.records); - e=(struct manager_exec*)hash_search(&exec_hash,ident,ident_len); - if (e) - { - pthread_mutex_lock(&e->lock); - e->pid=pid; - pthread_cond_broadcast(&e->cond); - pthread_mutex_unlock(&e->lock); - } - pthread_mutex_unlock(&lock_exec_hash); - log_debug("unlocked mutex"); - break; - } - case CHILD_STOP: - memcpy(&pid,buf+1,sizeof(pid)); - e=manager_exec_by_pid(pid); - if (e) - { - pthread_mutex_lock(&e->lock); - e->pid=0; - memcpy(&e->exit_code,buf+1+sizeof(pid),sizeof(int)); - pthread_cond_broadcast(&e->cond); - pthread_mutex_unlock(&e->lock); - } - break; - default: - log_err("Got invalid launcher message"); - break; - } - } - return 0; -} - -pthread_handler_t process_connection(void *arg) -{ - struct manager_thd* thd = (struct manager_thd*)arg; - my_thread_init(); - pthread_detach_this_thread(); - for (;!thd->finished;) - { - char* buf_end; - if ((!(buf_end=read_line(thd)) || exec_line(thd,thd->cmd_buf,buf_end)) - && thd->fatal) - { - log_err("Thread aborted"); - break; - } - } - manager_thd_free(thd); - pthread_exit(0); - return 0; /* Don't get cc warning */ -} - -static int client_msg_raw(NET* net, int err_code, int pre, const char* fmt, - va_list args) -{ - char buf[MAX_CLIENT_MSG_LEN],*p,*buf_end; - p=buf; - buf_end=buf+sizeof(buf); - p=int10_to_str(err_code,p,10); - if (pre) - *p++='-'; - *p++=' '; - p+=my_vsnprintf(p,buf_end-p,fmt,args); - if (p>buf_end-2) - p=buf_end - 2; - *p++='\r'; - *p++='\n'; - log_debug("message to client: %-.*s",p-buf-2,buf); - if (my_net_write(net,buf,(uint)(p-buf)) || net_flush(net)) - { - p[-2]=0; - log_err("Failed writing '%s' to client: errno=%d",buf,errno); - net_end(net); - return 1; - } - return 0; -} - -static int client_msg(NET* net, int err_code, const char* fmt, ...) -{ - va_list args; - va_start(args,fmt); - return client_msg_raw(net,err_code,0,fmt,args); -} - -static int client_msg_pre(NET* net, int err_code, const char* fmt, ...) -{ - va_list args; - va_start(args,fmt); - return client_msg_raw(net,err_code,1,fmt,args); -} - -static char* read_line(struct manager_thd* thd) -{ - int len; - char* p, *buf_end; - if ((len=my_net_read(&thd->net)) == (int)packet_error || !len) - { - log_err("Error reading command from client (Error: %d)", - errno); - thd->fatal=1; - return 0; - } - buf_end=thd->cmd_buf+len; - for (p=thd->cmd_buf;p<buf_end;p++) - if (*p == '\r' || *p == '\n') - { - *p=0; - break; - } - - return p; -} - -static void handle_child(int __attribute__((unused)) sig) -{ - pid_t child; - int child_status; - - for (;(child=waitpid(-1,&child_status,WNOHANG))>0;) - { - char msg_buf[1+sizeof(int)+sizeof(int)]; - msg_buf[0]=CHILD_STOP; - memcpy(msg_buf+1,&child,sizeof(int)); - memcpy(msg_buf+1+sizeof(int),&child_status,sizeof(int)); - if (write(from_launcher_pipe[1],msg_buf,sizeof(msg_buf))!=sizeof(msg_buf)) - log_err("launcher: error writing message on child exit"); - } - signal(SIGCHLD,handle_child); -} - -static struct manager_thd* manager_thd_new(Vio* vio) -{ - struct manager_thd* tmp; - if (!(tmp=(struct manager_thd*)my_malloc(sizeof(*tmp), - MYF(0)))) - { - log_err("Out of memory in manager_thd_new"); - return 0; - } - my_net_init(&tmp->net,vio); - tmp->user[0]=0; - tmp->priv_flags=0; - tmp->fatal=tmp->finished=0; - tmp->cmd_buf= (char*) tmp->net.read_pos; - return tmp; -} - -static void manager_thd_free(struct manager_thd* thd) -{ - NET* net=&thd->net; - if (net->vio) - { - vio_delete(net->vio); - net->vio=0; - } - net_end(&thd->net); -} - -static void clean_up() -{ - pthread_mutex_lock(&lock_shutdown); - if (in_shutdown) - { - pthread_mutex_unlock(&lock_shutdown); - return; - } - in_shutdown = 1; - pthread_mutex_unlock(&lock_shutdown); - log_info("Shutdown started"); - if (manager_sock) - close(manager_sock); - log_info("Ended"); - if (errfp != stderr) - my_fclose(errfp, MYF(0)); - hash_free(&exec_hash); - if (created_pid_file) - my_delete(pid_file, MYF(0)); -} - -static void print_version(void) -{ - printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname,MANAGER_VERSION, - MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE); -} - -static void usage() -{ - print_version(); - printf("MySQL AB, by Sasha\n"); - printf("This software comes with ABSOLUTELY NO WARRANTY\n\n"); - printf("Manages instances of MySQL server.\n\n"); - printf("Usage: %s [OPTIONS]\n\n", my_progname); - my_print_help(my_long_options); - my_print_variables(my_long_options); -} - - -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - switch (optid) { - case '#': - DBUG_PUSH(argument ? argument : "d:t:O,/tmp/mysqlmgrd.trace"); - break; - case 'V': - print_version(); - exit(0); - case '?': - usage(); - exit(0); - } - return 0; -} - - -static int parse_args(int argc, char **argv) -{ - int ho_error; - - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) - exit(ho_error); - - return 0; -} - -static int init_server() -{ - int arg=1; - log_info("Started"); - if ((manager_sock=socket(PF_INET,SOCK_STREAM,0)) < 0) - die("Could not create socket"); - bzero((char*) &manager_addr, sizeof(manager_addr)); - manager_addr.sin_family = AF_INET; - manager_addr.sin_addr.s_addr = manager_bind_addr; - manager_addr.sin_port = htons(manager_port); - setsockopt(manager_sock,SOL_SOCKET, SO_REUSEADDR,(char*)&arg,sizeof(arg)); - if (bind(manager_sock,(struct sockaddr*)&manager_addr, sizeof(manager_addr)) - < 0) - die("Could not bind"); - if (listen(manager_sock,manager_back_log) < 0) - die("Could not listen"); - - return 0; -} - -static int run_server_loop() -{ - pthread_t th; - struct manager_thd *thd; - int client_sock; - Vio* vio; - pthread_attr_t thr_attr; - (void) pthread_attr_init(&thr_attr); -#if !defined(HAVE_DEC_3_2_THREADS) - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_SYSTEM); - (void) pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); -#endif - - for (;!shutdown_requested;) - { - size_socket len=sizeof(struct sockaddr_in); - if ((client_sock=accept(manager_sock,(struct sockaddr*)&manager_addr, - &len)) <0) - { - if (shutdown_requested) - break; - if (errno != EAGAIN) - { - log_warn("Error in accept, errno=%d", errno); - sleep(1); /* avoid tying up CPU if accept is broken */ - } - continue; - } - if (shutdown_requested) - break; - if (!(vio=vio_new(client_sock,VIO_TYPE_TCPIP,FALSE))) - { - log_err("Could not create I/O object"); - close(client_sock); - continue; - } - if (!(thd=manager_thd_new(vio))) - { - log_err("Could not create thread object"); - vio_close(vio); - continue; - } - if (authenticate(thd)) - { - client_msg(&thd->net,MANAGER_ACCESS, "Access denied"); - manager_thd_free(thd); - log_info("Client failed to authenticate"); - continue; - } - if (shutdown_requested) - { - manager_thd_free(thd); - break; - } - if (one_thread) - { - process_connection((void*)thd); - manager_thd_free(thd); - continue; - } - else if (pthread_create(&th,&thr_attr,process_connection,(void*)thd)) - { - client_msg(&thd->net,MANAGER_INTERNAL_ERR, - "Could not create thread, errno=%d", - errno); - manager_thd_free(thd); - continue; - } - } - (void) pthread_attr_destroy(&thr_attr); - return 0; -} - -static FILE* open_log_stream() -{ - FILE* fp; - if (!(fp=my_fopen(manager_log_file, O_APPEND | FILE_BINARY, MYF(MY_WME)))) - { - clean_up(); - exit(1); - } - return fp; -} - -static byte* get_user_key(const byte* u, uint* len, - my_bool __attribute__((unused)) t) -{ - register const char* key; - key = ((struct manager_user*)u)->user; - *len = ((struct manager_user*)u)->user_len; - return (byte*)key; -} - -static byte* get_exec_key(const byte* e, uint* len, - my_bool __attribute__((unused)) t) -{ - register const char* key; - key = ((struct manager_exec*)e)->ident; - *len = ((struct manager_exec*)e)->ident_len; - return (byte*)key; -} - -static void init_arg_array(char* arg_str,char** args,uint arg_count) -{ - char* p = arg_str; - for (;arg_count>0;arg_count--) - { - *args++=p; - p += strlen(p)+1; - } - *args=0; -} - -static uint tokenize_args(char* arg_start,char** arg_end) -{ - char* p, *p_write,*p_end; - uint arg_count=0; - int quoted=0,escaped=0,last_space=0; - p_end=*arg_end; - p_write=p=arg_start; - for (; p < p_end ; p++) - { - char c = *p; - switch (c) { - case ' ': - case '\r': - case '\n': - if (!quoted) - { - if (!last_space) - { - *p_write++=0; - arg_count++; - last_space=1; - } - } - else - *p_write++=c; - escaped=0; - break; - case '"': - if (!escaped) - quoted=!quoted; - else - *p_write++=c; - last_space=0; - escaped=0; - break; - case '\\': - if (!escaped) - escaped=1; - else - { - *p_write++=c; - escaped=0; - } - last_space=0; - break; - default: - escaped=last_space=0; - *p_write++=c; - break; - } - } - if (!last_space && p_write>arg_start) - arg_count++; - *p_write=0; - *arg_end=p_write; - log_debug("arg_count: %d arg_start: '%s'",arg_count,arg_start); - return arg_count; -} - -static void update_req_len(struct manager_exec* e) -{ - e->req_len=(e->data_buf_size+ - (e->stdout_path_size=strlen(e->stdout_path)+1)+ - (e->stderr_path_size=strlen(e->stderr_path)+1)); -} - -static struct manager_exec* manager_exec_new(char* arg_start,char* arg_end) -{ - struct manager_exec* tmp; - char* first_arg; - uint arg_len,num_args; - num_args=tokenize_args(arg_start,&arg_end); - arg_len=(uint)(arg_end-arg_start)+1; /* include \0 terminator*/ - if (!(tmp=(struct manager_exec*)my_malloc(sizeof(*tmp)+arg_len+ - sizeof(char*)*num_args, - MYF(MY_ZEROFILL)))) - return 0; - if (num_args<2) - { - tmp->error="Too few arguments"; - return tmp; - } - /* We have to allocate 'args' first as this must be alligned */ - tmp->args=(char**)(tmp +1); - tmp->data_buf= (char*) (tmp->args + num_args); - memcpy(tmp->data_buf,arg_start,arg_len); - tmp->data_buf_size=arg_len; - tmp->num_args=num_args; - tmp->ident=tmp->data_buf; - tmp->ident_len=strlen(tmp->ident); - first_arg=tmp->ident+tmp->ident_len+1; - init_arg_array(first_arg,tmp->args,num_args-1); - strmov(tmp->con_user,"root"); - tmp->con_port=MYSQL_PORT; - memcpy(tmp->con_host,"localhost",10); - tmp->bin_path=tmp->args[0]; - tmp->stdout_path_size=tmp->stderr_path_size=1; - tmp->req_len=tmp->data_buf_size+2; - pthread_mutex_init(&tmp->lock,0); - pthread_cond_init(&tmp->cond,0); - mysql_init(&tmp->mysql); - return tmp; -} - -static void manager_exec_free(void* e) -{ - mysql_close(&((struct manager_exec*)e)->mysql); - my_free(e,MYF(0)); -} - -static int hex_val(char c) -{ - if (my_isdigit(cs,c)) - return c-'0'; - c=my_tolower(cs,c); - return c-'a'+10; -} - -static struct manager_user* manager_user_new(char* buf) -{ - struct manager_user* tmp; - char* p,*user_end,*p_end; - char c; - if (!(tmp=(struct manager_user*)my_malloc(sizeof(*tmp),MYF(0)))) - return 0; - p=tmp->user; - tmp->error=0; - user_end=p+MAX_USER_NAME; - for (;(c=*buf) && p<user_end;buf++) - { - if (c == ':') - { - *p=0; - tmp->user_len=p-tmp->user; - buf++; - break; - } - else - *p++=c; - } - if (!c) - tmp->error="Missing ':'"; - if (p == user_end) - tmp->error="Username too long"; - if (tmp->error) - return tmp; - if (strlen(buf) < 2*MD5_LEN) - { - tmp->error="Invalid MD5 sum, too short"; - return tmp; - } - p=tmp->md5_pass; - p_end=p+MD5_LEN; - for (; p<p_end;p++,buf+=2) - { - *p=hex_val(*buf)*16+hex_val(buf[1]); - } - - return tmp; -} - -static void manager_user_free(void* u) -{ - my_free((gptr)u,MYF(0)); -} - -static void init_user_hash() -{ - FILE* f; - char buf[80]; - int line_num=1; - if (hash_init(&user_hash,cs,1024,0,0, - get_user_key,manager_user_free,MYF(0))) - die("Could not initialize user hash"); - if (!(f=my_fopen(manager_pw_file, O_RDONLY | O_BINARY, MYF(MY_WME)))) - { - clean_up(); - exit(1); - } - for (;;line_num++) - { - struct manager_user* u; - if (!fgets(buf,sizeof(buf),f) || feof(f)) - break; - if (buf[0] == '#') - continue; - if (!(u=manager_user_new(buf))) - die("Out of memory while reading user line"); - if (u->error) - { - die("Error on line %d of '%s': %s",line_num,manager_pw_file, u->error); - } - else - { - my_hash_insert(&user_hash,(gptr)u); - } - } - my_fclose(f, MYF(0)); -} - - -static void init_pid_file() -{ - FILE* fp = my_fopen(pid_file, O_WRONLY | O_BINARY, MYF(MY_WME)); - if (!fp) - { - clean_up(); - exit(1); - } - created_pid_file=1; - fprintf(fp, "%d\n", (int) getpid()); - my_fclose(fp, MYF(0)); -} - - -static void init_globals() -{ - pthread_attr_t thr_attr; - if (hash_init(&exec_hash,cs,1024,0,0, - get_exec_key,manager_exec_free,MYF(0))) - die("Exec hash initialization failed"); - if (!one_thread) - { - (void) pthread_attr_init(&thr_attr); -#if !defined(HAVE_DEC_3_2_THREADS) - pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_SYSTEM); - (void) pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); -#endif - fork_launcher(); - if (pthread_create(&launch_msg_th,&thr_attr,process_launcher_messages,0)) - die("Could not start launcher message handler thread"); - /* (void) pthread_attr_destroy(&thr_attr); */ - } - init_user_hash(); - init_pid_file(); - loop_th=pthread_self(); - signal(SIGPIPE,handle_sigpipe); - signal(SIGTERM,handle_sigterm); -} - -static int open_and_dup(int fd,char* path) -{ - int old_fd; - if ((old_fd=my_open(path,O_WRONLY|O_APPEND|O_CREAT,MYF(0)))<0) - { - log_err("Could not open '%s' for append, errno=%d",path,errno); - return 1; - } - if (dup2(old_fd,fd)<0) - { - log_err("Failed in dup2(), errno=%d",errno); - return 1; - } - my_close(old_fd,MYF(0)); - return 0; -} - -static void run_launcher_loop() -{ - for (;;) - { - int req_len,ident_len,num_args; - char* request_buf=0; - pid_t pid; - char* exec_path,*ident,*stdout_path,*stderr_path; - char** args=0; - - if (my_read(to_launcher_pipe[0],(byte*)&req_len, - sizeof(int),MYF(MY_NABP|MY_FULL_IO)) || - my_read(to_launcher_pipe[0],(byte*)&num_args, - sizeof(int),MYF(MY_NABP|MY_FULL_IO)) || - !(request_buf=(char*)my_malloc(req_len+sizeof(pid)+2,MYF(0))) || - !(args=(char**)my_malloc(num_args*sizeof(char*),MYF(0))) || - my_read(to_launcher_pipe[0],request_buf,req_len, - MYF(MY_NABP|MY_FULL_IO))) - { - log_err("launcher: Error reading request"); - my_free((gptr)request_buf,MYF(MY_ALLOW_ZERO_PTR)); - my_free((gptr)args,MYF(MY_ALLOW_ZERO_PTR)); - sleep(1); - continue; - } - stdout_path=request_buf; - stderr_path=stdout_path+strlen(stdout_path)+1; - request_buf=stderr_path+strlen(stderr_path); /* black magic */ - ident=request_buf+1; - ident_len=strlen(ident); - exec_path=ident+ident_len+1; - log_debug("num_args=%d,req_len=%d,ident=%s,ident_len=%d,exec_path=%s,\ -stdout_path=%s,stderr_path=%s", - num_args, - req_len,ident,ident_len,exec_path,stdout_path,stderr_path); - init_arg_array(exec_path,args,num_args-1); - - switch ((pid=fork())) { - case -1: - log_err("launcher: cannot fork"); - sleep(1); - break; - case 0: - if (open_and_dup(1,stdout_path) || open_and_dup(2,stderr_path)) - exit(1); - if (execv(exec_path,args)) - log_err("launcher: cannot exec %s",exec_path); - exit(1); - default: - request_buf[0]=CHILD_START; - memcpy(request_buf+ident_len+2,&pid,sizeof(pid)); - if (write(from_launcher_pipe[1],request_buf,ident_len+2+sizeof(pid))<0) - log_err("launcher: error sending launch status report"); - break; - } - my_free((gptr)(stdout_path),MYF(0)); - my_free((gptr)args,MYF(0)); - } -} - -static void fork_launcher() -{ - if (pipe(to_launcher_pipe) || pipe(from_launcher_pipe)) - die("Could not create launcher pipes"); - switch ((launcher_pid=fork())) { - case 0: - signal(SIGCHLD,handle_child); - run_launcher_loop(); - exit(0); - case -1: die("Could not fork the launcher"); - default: return; - } -} - -static int daemonize() -{ - switch (fork()) { - case -1: - die("Cannot fork"); - case 0: - errfp = open_log_stream(); - init_globals(); - close(0); - close(1); - close(2); - init_server(); - run_server_loop(); - clean_up(); - break; - default: - break; - } - return 0; -} - -int main(int argc, char** argv) -{ - char c; - stack_bottom= (uchar *) &c; - MY_INIT(argv[0]); - errfp = stderr; - parse_args(argc,argv); - pthread_mutex_init(&lock_log,0); - pthread_mutex_init(&lock_shutdown,0); - pthread_mutex_init(&lock_exec_hash,0); - pthread_mutex_init(&lock_launch_thd,0); - pthread_cond_init(&cond_launch_thd,0); -#ifdef DO_STACKTRACE - signal(SIGSEGV,handle_segfault); -#endif - if (one_thread) - { - init_globals(); - init_server(); - run_server_loop(); - clean_up(); - return 0; - } - else - return daemonize(); -} - -#else - -#include <stdio.h> - -int main(void) -{ - fprintf(stderr,"This tool has not been ported to NetWare\n"); - return 0; -} - -#endif /* __NETWARE__ */ - diff --git a/unittest/Makefile.am b/unittest/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..fd7530ee262a7e31677a25a1cf00e788aabbe89a --- /dev/null +++ b/unittest/Makefile.am @@ -0,0 +1,27 @@ +SUBDIRS = mytap . mysys examples + +noinst_SCRIPTS = unit + +EXTRA_DIST = unit.pl + +DISTCLEANFILES = unit + +unittests = mysys examples + +.PHONY: all mytap mysys examples test + +test: unit all + @./unit run $(unittests) + +mytap: + cd mytap && $(MAKE) + +mysys: + cd mysys && $(MAKE) + +examples: + cd examples && $(MAKE) + +unit: $(srcdir)/unit.pl + cp $< $@ + chmod +x $@ diff --git a/unittest/README.txt b/unittest/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..fd9641665c7c5be48c9dca477ec27c1838d93138 --- /dev/null +++ b/unittest/README.txt @@ -0,0 +1,36 @@ + +Unit tests directory structure +------------------------------ + +This is the current structure of the unit tests. More directories +will be added over time. + +mytap Source for the MyTAP library +mysys Tests for mysys components + bitmap.t.c Unit test for MY_BITMAP + base64.t.c Unit test for base64 encoding functions +examples Example unit tests + simple.t.c Example of a standard TAP unit test + skip.t.c Example where some test points are skipped + skip_all.t.c Example of a test where the entire test is skipped + todo.t.c Example where test contain test points that are TODO + no_plan.t.c Example of a test with no plan (avoid this) + + +Executing unit tests +-------------------- + +To make and execute all unit tests in the directory: + + make test + + +Adding unit tests +----------------- + +Add a file with a name of the format "foo.t.c" to the appropriate +directory and add the following to the Makefile.am in that directory +(where ... denotes stuff already there): + + noinst_PROGRAMS = ... foo.t + foo_t_c_SOURCES = foo.t.c diff --git a/unittest/examples/Makefile.am b/unittest/examples/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..94a67927d121e165b340a4e0136466b5772f6797 --- /dev/null +++ b/unittest/examples/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = -I$(srcdir) -I$(top_builddir)/include \ + -I$(top_srcdir)/unittest/mytap -I$(top_srcdir)/include + +AM_LDFLAGS = -L$(top_builddir)/unittest/mytap + +LDADD = -lmytap + +noinst_PROGRAMS = simple.t skip.t todo.t skip_all.t no_plan.t + +simple_t_SOURCES = simple.t.c + +skip_t_SOURCES = skip.t.c + +todo_t_SOURCES = todo.t.c + +skip_all_t_SOURCES = skip_all.t.c + +no_plan_t_SOURCES = no_plan.t.c diff --git a/unittest/examples/no_plan.t.c b/unittest/examples/no_plan.t.c new file mode 100644 index 0000000000000000000000000000000000000000..67029c7962fe68f3adc28c833ecb55e4f9b74f9c --- /dev/null +++ b/unittest/examples/no_plan.t.c @@ -0,0 +1,19 @@ + +#include <stdlib.h> +#include <tap.h> + +/* + Sometimes, the number of tests is not known beforehand. In those + cases, the plan can be omitted and will instead be written at the + end of the test (inside exit_status()). + + Use this sparingly, it is a last resort: planning how many tests you + are going to run will help you catch that offending case when some + tests are skipped for an unknown reason. +*/ +int main() { + ok(1, NULL); + ok(1, NULL); + ok(1, NULL); + return exit_status(); +} diff --git a/unittest/examples/simple.t.c b/unittest/examples/simple.t.c new file mode 100644 index 0000000000000000000000000000000000000000..866af86532728ab92ede18f06c0b885368a30cc5 --- /dev/null +++ b/unittest/examples/simple.t.c @@ -0,0 +1,38 @@ + +#include <tap.h> + +unsigned int gcs(unsigned int a, unsigned int b) +{ + if (b > a) { + unsigned int t = a; + a = b; + b = t; + } + + while (b != 0) { + unsigned int m = a % b; + a = b; + b = m; + } + return a; +} + +int main() { + unsigned int a,b; + unsigned int failed; + plan(1); + diag("Testing basic functions"); + failed = 0; + for (a = 1 ; a < 2000 ; ++a) + for (b = 1 ; b < 2000 ; ++b) + { + unsigned int d = gcs(a, b); + if (a % d != 0 || b % d != 0) { + ++failed; + diag("Failed for gcs(%4u,%4u)", a, b); + } + } + ok(failed == 0, "Testing gcs()"); + return exit_status(); +} + diff --git a/unittest/examples/skip.t.c b/unittest/examples/skip.t.c new file mode 100644 index 0000000000000000000000000000000000000000..ef7176917002b3283222a5d1a47933f63fa1fb5c --- /dev/null +++ b/unittest/examples/skip.t.c @@ -0,0 +1,14 @@ + +#include <tap.h> +#include <stdlib.h> + +int main() { + plan(4); + ok(1, NULL); + ok(1, NULL); + SKIP_BLOCK_IF(1, 2, "Example of skipping a few test points in a test") { + ok(1, NULL); + ok(1, NULL); + } + return exit_status(); +} diff --git a/unittest/examples/skip_all.t.c b/unittest/examples/skip_all.t.c new file mode 100644 index 0000000000000000000000000000000000000000..bbde6b63f1cd6fa23b15a894c4afb00b3a995241 --- /dev/null +++ b/unittest/examples/skip_all.t.c @@ -0,0 +1,23 @@ + +#include <stdlib.h> +#include <tap.h> + +int has_feature() { + return 0; +} + +/* + In some cases, an entire test file does not make sense because there + some feature is missing. In that case, the entire test case can be + skipped in the following manner. + */ +int main() { + if (!has_feature()) + skip_all("Example of skipping an entire test"); + plan(4); + ok(1, NULL); + ok(1, NULL); + ok(1, NULL); + ok(1, NULL); + return exit_status(); +} diff --git a/unittest/examples/todo.t.c b/unittest/examples/todo.t.c new file mode 100644 index 0000000000000000000000000000000000000000..13a0c950b541be9471895320924cf238a7398260 --- /dev/null +++ b/unittest/examples/todo.t.c @@ -0,0 +1,19 @@ + +#include <stdlib.h> +#include <tap.h> + +int main() +{ + plan(4); + ok(1, NULL); + ok(1, NULL); + /* + Tests in the todo region is expected to fail. If they don't, + something is strange. + */ + todo_start("Need to fix these"); + ok(0, NULL); + ok(0, NULL); + todo_end(); + return exit_status(); +} diff --git a/unittest/mysys/Makefile.am b/unittest/mysys/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..010a7845339f8fee580fce6efd095c32d7c3af52 --- /dev/null +++ b/unittest/mysys/Makefile.am @@ -0,0 +1,15 @@ + +AM_CPPFLAGS = @ZLIB_INCLUDES@ -I$(top_builddir)/include +AM_CPPFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/unittest/mytap + +AM_LDFLAGS = -L$(top_builddir)/unittest/mytap -L$(top_builddir)/mysys +AM_LDFLAGS += -L$(top_builddir)/strings -L$(top_builddir)/dbug + +LDADD = -lmytap -lmysys -ldbug -lmystrings + +noinst_PROGRAMS = bitmap.t base64.t + +bitmap_t_SOURCES = bitmap.t.c + +base64_t_SOURCES = base64.t.c + diff --git a/unittest/mysys/base64.t.c b/unittest/mysys/base64.t.c new file mode 100644 index 0000000000000000000000000000000000000000..1b4f2eb2356ee945450abefffe05bb3ea30e83b5 --- /dev/null +++ b/unittest/mysys/base64.t.c @@ -0,0 +1,89 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA */ + +#include <base64.h> +#include <tap.h> +#include <stdlib.h> +#include <string.h> + +int +main(void) +{ + int i, cmp; + size_t j, k, l, dst_len, needed_length; + + for (i= 0; i < 500; i++) + { + /* Create source data */ + const size_t src_len= rand() % 1000 + 1; + + char * src= (char *) malloc(src_len); + char * s= src; + char * str; + char * dst; + + for (j= 0; j<src_len; j++) + { + char c= rand(); + *s++= c; + } + + /* Encode */ + needed_length= base64_needed_encoded_length(src_len); + str= (char *) malloc(needed_length); + for (k= 0; k < needed_length; k++) + str[k]= 0xff; /* Fill memory to check correct NUL termination */ + ok(base64_encode(src, src_len, str) == 0, + "base64_encode: size %d", i); + ok(needed_length == strlen(str) + 1, + "base64_needed_encoded_length: size %d", i); + + /* Decode */ + dst= (char *) malloc(base64_needed_decoded_length(strlen(str))); + dst_len= base64_decode(str, strlen(str), dst); + ok(dst_len == src_len, "Comparing lengths"); + + cmp= memcmp(src, dst, src_len); + ok(cmp == 0, "Comparing encode-decode result"); + if (cmp != 0) + { + char buf[80]; + diag(" --------- src --------- --------- dst ---------"); + for (k= 0; k<src_len; k+=8) + { + sprintf(buf, "%.4x ", (uint) k); + for (l=0; l<8 && k+l<src_len; l++) + { + unsigned char c= src[k+l]; + sprintf(buf, "%.2x ", (unsigned)c); + } + + sprintf(buf, " "); + + for (l=0; l<8 && k+l<dst_len; l++) + { + unsigned char c= dst[k+l]; + sprintf(buf, "%.2x ", (unsigned)c); + } + diag(buf); + } + diag("src length: %.8x, dst length: %.8x\n", + (uint) src_len, (uint) dst_len); + } + } + return exit_status(); +} diff --git a/unittest/mysys/bitmap.t.c b/unittest/mysys/bitmap.t.c new file mode 100644 index 0000000000000000000000000000000000000000..d5683baff66916ffef3a242a63e62a25d6c6e289 --- /dev/null +++ b/unittest/mysys/bitmap.t.c @@ -0,0 +1,387 @@ +/* Copyright (C) 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + This test was copied from the unit test inside the + mysys/my_bitmap.c file and adapted by Mats Kindahl to use the mytap + library. +*/ + +#include <tap.h> + +#include <my_global.h> +#include <my_bitmap.h> + +#include <string.h> + +uint get_rand_bit(uint bitsize) +{ + return (rand() % bitsize); +} + +bool test_set_get_clear_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit= get_rand_bit(bitsize); + bitmap_set_bit(map, test_bit); + if (!bitmap_is_set(map, test_bit)) + goto error1; + bitmap_clear_bit(map, test_bit); + if (bitmap_is_set(map, test_bit)) + goto error2; + } + return FALSE; +error1: + printf("Error in set bit, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +error2: + printf("Error in clear bit, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +} + +bool test_flip_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit= get_rand_bit(bitsize); + bitmap_flip_bit(map, test_bit); + if (!bitmap_is_set(map, test_bit)) + goto error1; + bitmap_flip_bit(map, test_bit); + if (bitmap_is_set(map, test_bit)) + goto error2; + } + return FALSE; +error1: + printf("Error in flip bit 1, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +error2: + printf("Error in flip bit 2, bit %u, bitsize = %u", test_bit, bitsize); + return TRUE; +} + +bool test_operators(MY_BITMAP *map __attribute__((unused)), + uint bitsize __attribute__((unused))) +{ + return FALSE; +} + +bool test_get_all_bits(MY_BITMAP *map, uint bitsize) +{ + uint i; + bitmap_set_all(map); + if (!bitmap_is_set_all(map)) + goto error1; + if (!bitmap_is_prefix(map, bitsize)) + goto error5; + bitmap_clear_all(map); + if (!bitmap_is_clear_all(map)) + goto error2; + if (!bitmap_is_prefix(map, 0)) + goto error6; + for (i=0; i<bitsize;i++) + bitmap_set_bit(map, i); + if (!bitmap_is_set_all(map)) + goto error3; + for (i=0; i<bitsize;i++) + bitmap_clear_bit(map, i); + if (!bitmap_is_clear_all(map)) + goto error4; + return FALSE; +error1: + diag("Error in set_all, bitsize = %u", bitsize); + return TRUE; +error2: + diag("Error in clear_all, bitsize = %u", bitsize); + return TRUE; +error3: + diag("Error in bitmap_is_set_all, bitsize = %u", bitsize); + return TRUE; +error4: + diag("Error in bitmap_is_clear_all, bitsize = %u", bitsize); + return TRUE; +error5: + diag("Error in set_all through set_prefix, bitsize = %u", bitsize); + return TRUE; +error6: + diag("Error in clear_all through set_prefix, bitsize = %u", bitsize); + return TRUE; +} + +bool test_compare_operators(MY_BITMAP *map, uint bitsize) +{ + uint i, j, test_bit1, test_bit2, test_bit3,test_bit4; + uint no_loops= bitsize > 128 ? 128 : bitsize; + MY_BITMAP map2_obj, map3_obj; + MY_BITMAP *map2= &map2_obj, *map3= &map3_obj; + uint32 map2buf[1024]; + uint32 map3buf[1024]; + bitmap_init(&map2_obj, map2buf, bitsize, FALSE); + bitmap_init(&map3_obj, map3buf, bitsize, FALSE); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + for (i=0; i < no_loops; i++) + { + test_bit1=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + test_bit2=get_rand_bit(bitsize); + bitmap_set_prefix(map2, test_bit2); + bitmap_intersect(map, map2); + test_bit3= test_bit2 < test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + if (!bitmap_cmp(map, map3)) + goto error1; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + bitmap_union(map, map2); + if (!bitmap_cmp(map, map3)) + goto error2; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + bitmap_xor(map, map2); + test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1; + test_bit4= test_bit2 < test_bit1 ? test_bit2 : test_bit1; + bitmap_set_prefix(map3, test_bit3); + for (j=0; j < test_bit4; j++) + bitmap_clear_bit(map3, j); + if (!bitmap_cmp(map, map3)) + goto error3; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + test_bit2=get_rand_bit(bitsize); + test_bit3=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_set_prefix(map2, test_bit2); + bitmap_subtract(map, map2); + if (test_bit2 < test_bit1) + { + bitmap_set_prefix(map3, test_bit1); + for (j=0; j < test_bit2; j++) + bitmap_clear_bit(map3, j); + } + if (!bitmap_cmp(map, map3)) + goto error4; + bitmap_clear_all(map); + bitmap_clear_all(map2); + bitmap_clear_all(map3); + test_bit1=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit1); + bitmap_invert(map); + bitmap_set_all(map3); + for (j=0; j < test_bit1; j++) + bitmap_clear_bit(map3, j); + if (!bitmap_cmp(map, map3)) + goto error5; + bitmap_clear_all(map); + bitmap_clear_all(map3); + } + return FALSE; +error1: + diag("intersect error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error2: + diag("union error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error3: + diag("xor error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error4: + diag("subtract error bitsize=%u,size1=%u,size2=%u", bitsize, + test_bit1,test_bit2); + return TRUE; +error5: + diag("invert error bitsize=%u,size=%u", bitsize, + test_bit1); + return TRUE; +} + +bool test_count_bits_set(MY_BITMAP *map, uint bitsize) +{ + uint i, bit_count=0, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + if (!bitmap_is_set(map, test_bit)) + { + bitmap_set_bit(map, test_bit); + bit_count++; + } + } + if (bit_count==0 && bitsize > 0) + goto error1; + if (bitmap_bits_set(map) != bit_count) + goto error2; + return FALSE; +error1: + diag("No bits set bitsize = %u", bitsize); + return TRUE; +error2: + diag("Wrong count of bits set, bitsize = %u", bitsize); + return TRUE; +} + +bool test_get_first_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + bitmap_set_bit(map, test_bit); + if (bitmap_get_first_set(map) != test_bit) + goto error1; + bitmap_set_all(map); + bitmap_clear_bit(map, test_bit); + if (bitmap_get_first(map) != test_bit) + goto error2; + bitmap_clear_all(map); + } + return FALSE; +error1: + diag("get_first_set error bitsize=%u,prefix_size=%u",bitsize,test_bit); + return TRUE; +error2: + diag("get_first error bitsize= %u, prefix_size= %u",bitsize,test_bit); + return TRUE; +} + +bool test_get_next_bit(MY_BITMAP *map, uint bitsize) +{ + uint i, j, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + for (j=0; j < test_bit; j++) + bitmap_set_next(map); + if (!bitmap_is_prefix(map, test_bit)) + goto error1; + bitmap_clear_all(map); + } + return FALSE; +error1: + diag("get_next error bitsize= %u, prefix_size= %u", bitsize,test_bit); + return TRUE; +} + +bool test_prefix(MY_BITMAP *map, uint bitsize) +{ + uint i, j, test_bit; + uint no_loops= bitsize > 128 ? 128 : bitsize; + for (i=0; i < no_loops; i++) + { + test_bit=get_rand_bit(bitsize); + bitmap_set_prefix(map, test_bit); + if (!bitmap_is_prefix(map, test_bit)) + goto error1; + bitmap_clear_all(map); + for (j=0; j < test_bit; j++) + bitmap_set_bit(map, j); + if (!bitmap_is_prefix(map, test_bit)) + goto error2; + bitmap_set_all(map); + for (j=bitsize - 1; ~(j-test_bit); j--) + bitmap_clear_bit(map, j); + if (!bitmap_is_prefix(map, test_bit)) + goto error3; + bitmap_clear_all(map); + } + return FALSE; +error1: + diag("prefix1 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +error2: + diag("prefix2 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +error3: + diag("prefix3 error bitsize = %u, prefix_size = %u", bitsize,test_bit); + return TRUE; +} + + +bool do_test(uint bitsize) +{ + MY_BITMAP map; + uint32 buf[1024]; + if (bitmap_init(&map, buf, bitsize, FALSE)) + { + diag("init error for bitsize %d", bitsize); + goto error; + } + if (test_set_get_clear_bit(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_flip_bit(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_operators(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_get_all_bits(&map, bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_compare_operators(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_count_bits_set(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_get_first_bit(&map,bitsize)) + goto error; + bitmap_clear_all(&map); + if (test_get_next_bit(&map,bitsize)) + goto error; + if (test_prefix(&map,bitsize)) + goto error; + return FALSE; +error: + return TRUE; +} + +int main() +{ + int i; + int const min_size = 1; + int const max_size = 1024; + plan(max_size - min_size); + for (i= min_size; i < max_size; i++) + ok(do_test(i) == 0, "bitmap size %d", i); + return exit_status(); +} diff --git a/unittest/mytap/Doxyfile b/unittest/mytap/Doxyfile new file mode 100644 index 0000000000000000000000000000000000000000..8c23703e925f79ff3c6a9b02472289a869a9402f --- /dev/null +++ b/unittest/mytap/Doxyfile @@ -0,0 +1,1155 @@ +# Doxyfile 1.3.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of source +# files, where putting all generated files in the same directory would otherwise +# cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is used +# as the annotated text. Otherwise, the brief description is used as-is. If left +# blank, the following values are used ("$name" is automatically replaced with the +# name of the entity): "The $name class" "The $name widget" "The $name file" +# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories +# that contain documented source files. You may enter file names like +# "myfile.cpp" or directories like "/usr/src/myproject". Separate the +# files or directories with spaces. + +INPUT = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like +# *.cpp and *.h) to filter out the source-files in the directories. If +# left blank the following patterns are tested: *.c *.cc *.cxx *.cpp +# *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ +# *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not +# subdirectories should be searched for input files as well. Possible +# values are YES and NO. If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that +# should excluded from the INPUT source files. This way you can easily +# exclude a subdirectory from a directory tree whose root is specified +# with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are +# excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to +# exclude certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/unittest/mytap/Makefile.am b/unittest/mytap/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..2e9fe87709dca401770c11254b616d8a6f0317d8 --- /dev/null +++ b/unittest/mytap/Makefile.am @@ -0,0 +1,9 @@ + +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) + +noinst_LIBRARIES = libmytap.a +noinst_HEADERS = tap.h + +libmytap_a_SOURCES = tap.c + +SUBDIRS = . t diff --git a/unittest/mytap/t/Makefile.am b/unittest/mytap/t/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..88c31cfeb7f681b9fee67cf0b82d6843643a8568 --- /dev/null +++ b/unittest/mytap/t/Makefile.am @@ -0,0 +1,12 @@ + +AM_CPPFLAGS = -I$(srcdir) -I$(top_builddir)/include -I$(srcdir)/.. -I$(top_srcdir)/include + +AM_LDFLAGS = -L$(top_builddir)/unittest/mytap + +LDADD = -lmytap + +noinst_PROGRAMS = basic.t + +basic_t_SOURCES = basic.t.c + +all: $(noinst_PROGRAMS) diff --git a/unittest/mytap/t/basic.t.c b/unittest/mytap/t/basic.t.c new file mode 100644 index 0000000000000000000000000000000000000000..eb820d6c651ba6294c524659d6a30257bcb0b6da --- /dev/null +++ b/unittest/mytap/t/basic.t.c @@ -0,0 +1,17 @@ + +#include <stdlib.h> +#include <tap.h> + +int main() { + plan(5); + ok(1 == 1, "testing basic functions"); + ok(2 == 2, ""); + ok(3 == 3, NULL); + if (1 == 1) + skip(2, "Sensa fragoli"); + else { + ok(1 == 2, "Should not be run at all"); + ok(1, "This one neither"); + } + return exit_status(); +} diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c new file mode 100644 index 0000000000000000000000000000000000000000..2b728670cea1f7bd8e84345aeb80d7206d26d3cb --- /dev/null +++ b/unittest/mytap/tap.c @@ -0,0 +1,299 @@ +/* Copyright (C) 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Library for providing TAP support for testing C and C++ was written + by Mats Kindahl <mats@mysql.com>. +*/ + +#include "tap.h" + +#include <stdlib.h> +#include <stdarg.h> +#include <stdio.h> +#include <string.h> + +/** + Test data structure. + + Data structure containing all information about the test suite. + + @ingroup MyTAP + */ +static TEST_DATA g_test = { 0, 0, 0, "" }; + +/** + Output stream for test report message. + + The macro is just a temporary solution. + */ +#define tapout stdout + +/** + Emit the beginning of a test line, that is: "(not) ok", test number, + and description. + + To emit the directive, use the emit_dir() function + + @ingroup MyTAP + + @see emit_dir + + @param pass 'true' if test passed, 'false' otherwise + @param fmt Description of test in printf() format. + @param ap Vararg list for the description string above. + */ +static void +emit_tap(int pass, char const *fmt, va_list ap) +{ + fprintf(tapout, "%sok %d%s", + pass ? "" : "not ", + ++g_test.last, + (fmt && *fmt) ? " - " : ""); + if (fmt && *fmt) + vfprintf(tapout, fmt, ap); +} + + +/** + Emit a TAP directive. + + TAP directives are comments after a have the form + + @code + ok 1 # skip reason for skipping + not ok 2 # todo some text explaining what remains + @endcode + + @param dir Directive as a string + @param exp Explanation string + */ +static void +emit_dir(const char *dir, const char *exp) +{ + fprintf(tapout, " # %s %s", dir, exp); +} + + +/** + Emit a newline to the TAP output stream. + */ +static void +emit_endl() +{ + fprintf(tapout, "\n"); +} + +void +diag(char const *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(tapout, "# "); + vfprintf(tapout, fmt, ap); + fprintf(tapout, "\n"); + va_end(ap); +} + + +void +plan(int const count) +{ + g_test.plan= count; + switch (count) + { + case NO_PLAN: + break; + default: + if (count > 0) + fprintf(tapout, "1..%d\n", count); + break; + } +} + + +void +skip_all(char const *reason, ...) +{ + va_list ap; + va_start(ap, reason); + fprintf(tapout, "1..0 # skip "); + vfprintf(tapout, reason, ap); + va_end(ap); + exit(0); +} + +void +ok(int const pass, char const *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + + if (!pass && *g_test.todo == '\0') + ++g_test.failed; + + emit_tap(pass, fmt, ap); + va_end(ap); + if (*g_test.todo != '\0') + emit_dir("todo", g_test.todo); + emit_endl(); +} + + +void +skip(int how_many, char const *const fmt, ...) +{ + char reason[80]; + if (fmt && *fmt) + { + va_list ap; + va_start(ap, fmt); + vsnprintf(reason, sizeof(reason), fmt, ap); + va_end(ap); + } + else + reason[0] = '\0'; + + while (how_many-- > 0) + { + va_list ap; + emit_tap(1, NULL, ap); + emit_dir("skip", reason); + emit_endl(); + } +} + +void +todo_start(char const *message, ...) +{ + va_list ap; + va_start(ap, message); + vsnprintf(g_test.todo, sizeof(g_test.todo), message, ap); + va_end(ap); +} + +void +todo_end() +{ + *g_test.todo = '\0'; +} + +int exit_status() { + /* + If there were no plan, we write one last instead. + */ + if (g_test.plan == NO_PLAN) + plan(g_test.last); + + if (g_test.plan != g_test.last) + { + diag("%d tests planned but only %d executed", + g_test.plan, g_test.last); + return EXIT_FAILURE; + } + + if (g_test.failed > 0) + { + diag("Failed %d tests!", g_test.failed); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +/** + @mainpage Testing C and C++ using MyTAP + + @section IntroSec Introduction + + Unit tests are used to test individual components of a system. In + contrast, functional tests usually test the entire system. The + rationale is that each component should be correct if the system is + to be correct. Unit tests are usually small pieces of code that + tests an individual function, class, a module, or other unit of the + code. + + Observe that a correctly functioning system can be built from + "faulty" components. The problem with this approach is that as the + system evolves, the bugs surface in unexpected ways, making + maintenance harder. + + The advantages of using unit tests to test components of the system + are several: + + - The unit tests can make a more thorough testing than the + functional tests by testing correctness even for pathological use + (which shouldn't be present in the system). This increases the + overall robustness of the system and makes maintenance easier. + + - It is easier and faster to find problems with a malfunctioning + component than to find problems in a malfunctioning system. This + shortens the compile-run-edit cycle and therefore improves the + overall performance of development. + + - The component has to support at least two uses: in the system and + in a unit test. This leads to more generic and stable interfaces + and in addition promotes the development of reusable components. + + For example, the following are typical functional tests: + - Does transactions work according to specifications? + - Can we connect a client to the server and execute statements? + + In contrast, the following are typical unit tests: + + - Can the 'String' class handle a specified list of character sets? + - Does all operations for 'my_bitmap' produce the correct result? + - Does all the NIST test vectors for the AES implementation encrypt + correctly? + + + @section UnitTest Writing unit tests + + The purpose of writing unit tests is to use them to drive component + development towards a solution that the tests. This means that the + unit tests has to be as complete as possible, testing at least: + + - Normal input + - Borderline cases + - Faulty input + - Error handling + - Bad environment + + We will go over each case and explain it in more detail. + + @subsection NormalSSec Normal input + + @subsection BorderlineSSec Borderline cases + + @subsection FaultySSec Faulty input + + @subsection ErrorSSec Error handling + + @subsection EnvironmentSSec Environment + + Sometimes, modules has to behave well even when the environment + fails to work correctly. Typical examples are: out of dynamic + memory, disk is full, + + @section UnitTestSec How to structure a unit test + + In this section we will give some advice on how to structure the + unit tests to make the development run smoothly. + + @subsection PieceSec Test each piece separately + + Don't test all functions using size 1, then all functions using + size 2, etc. + */ diff --git a/unittest/mytap/tap.h b/unittest/mytap/tap.h new file mode 100644 index 0000000000000000000000000000000000000000..cc1d0926012781d724a06b7d0bad750a0ba5e051 --- /dev/null +++ b/unittest/mytap/tap.h @@ -0,0 +1,209 @@ +/* Copyright (C) 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Library for providing TAP support for testing C and C++ was written + by Mats Kindahl <mats@mysql.com>. +*/ + +#ifndef TAP_H +#define TAP_H + +#include "my_global.h" + +/* + @defgroup MyTAP MySQL support for performing unit tests according to TAP. + +*/ + +#define NO_PLAN (0) + +/** + Data about test plan. + + @internal We are using the "typedef struct X { ... } X" idiom to + create class/struct X both in C and C++. + */ +typedef struct TEST_DATA { + /** + Number of tests that is planned to execute. + + Can be zero (<code>NO_PLAN</code>) meaning that the plan string + will be printed at the end of test instead. + */ + int plan; + + /** Number of last test that was done or skipped. */ + int last; + + /** Number of tests that failed. */ + int failed; + + /** Todo reason. */ + char todo[128]; +} TEST_DATA; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Set number of tests that is planned to execute. + + The function also accepts the predefined constant + <code>NO_PLAN</code>. If the function is not called, it is as if + it was called with <code>NO_PLAN</code>, i.e., the test plan will + be printed after all the test lines. + + @param count The planned number of tests to run. +*/ +void plan(int count); + + +/** + Report test result as a TAP line. + + Function used to write status of an individual test. Call this + function in the following manner: + + @code + ok(ducks == paddling, + "%d ducks did not paddle", ducks - paddling); + @endcode + + @param pass Zero if the test failed, non-zero if it passed. + @param fmt Format string in printf() format. NULL is allowed, in + which case nothing is printed. +*/ +void ok(int pass, char const *fmt, ...) + __attribute__((format(printf,2,3))); + +/** + Skip a determined number of tests. + + Function to print that <em>how_many</em> tests have been + skipped. The reason is printed for each skipped test. Observe + that this function does not do the actual skipping for you, it just + prints information that tests have been skipped. It shall be used + in the following manner: + + @code + if (ducks == 0) { + skip(2, "No ducks in the pond"); + } else { + int i; + for (i = 0 ; i < 2 ; ++i) + ok(duck[i] == paddling, "is duck %d paddling?", i); + } + @endcode + + @see SKIP_BLOCK_IF + + @param how_many Number of tests that are to be skipped. + @param reason A reason for skipping the tests + */ +void skip(int how_many, char const *reason, ...) + __attribute__((format(printf,2,3))); + + +/** + Helper macro to skip a block of code. The macro can be used to + simplify conditionally skipping a block of code. It is used in the + following manner: + + @code + SKIP_BLOCK_IF(ducks == 0, 2, "No ducks in the pond") + { + int i; + for (i = 0 ; i < 2 ; ++i) + ok(duck[i] == paddling, "is duck %d paddling?", i); + } + + @see skip + + @endcode + */ +#define SKIP_BLOCK_IF(SKIP_IF_TRUE, COUNT, REASON) \ + if (SKIP_IF_TRUE) skip((COUNT),(REASON)); else + +/** + Print a diagnostics message. + + @param fmt Diagnostics message in printf() format. + */ +void diag(char const *fmt, ...) + __attribute__((format(printf,1,2))); + +/** + Print summary report and return exit status. + + This function will print a summary report of how many tests passed, + how many were skipped, and how many remains to do. The function + should be called after all tests are executed in the following + manner: + + @code + return exit_status(); + @endcode + + @returns EXIT_SUCCESS if all tests passed, EXIT_FAILURE if one or + more tests failed. + */ +int exit_status(void); + + +/** + Skip entire test suite. + + To skip the entire test suite, use this function. It will + automatically call exit(), so there is no need to have checks + around it. + */ +void skip_all(char const *reason, ...) + __attribute__((noreturn, format(printf, 1, 2))); + +/** + Start section of tests that are not yet ready. + + To start a section of tests that are not ready and are expected to + fail, use this function and todo_end() in the following manner: + + @code + todo_start("Not ready yet"); + ok(is_rocketeering(duck), "Rocket-propelled ducks"); + ok(is_kamikaze(duck), "Kamikaze ducks"); + todo_end(); + @endcode + + @see todo_end + + @note + It is not possible to nest todo sections. + + @param message Message that will be printed before the todo tests. +*/ +void todo_start(char const *message, ...) + __attribute__((format (printf, 1, 2))); + +/** + End a section of tests that are not yet ready. +*/ +void todo_end(); + +#ifdef __cplusplus +} +#endif + +#endif /* TAP_H */ diff --git a/unittest/unit.pl b/unittest/unit.pl new file mode 100644 index 0000000000000000000000000000000000000000..cae394cf9b6d23776fead10e83191d845db60c73 --- /dev/null +++ b/unittest/unit.pl @@ -0,0 +1,109 @@ +#!/usr/bin/perl + +# Override _command_line in the standard Perl test harness to prevent +# it from using "perl" to run the test scripts. +package MySQL::Straps; + +use base qw(Test::Harness::Straps); + +use strict; + +sub _command_line { + return $_[1] +} + +package main; + +use Test::Harness qw(&runtests $verbose); +use File::Find; + +use strict; + +sub run_cmd (@); + +my %dispatch = ( + "run" => \&run_cmd, +); + +=head1 NAME + +unit - Run unit tests in directory + +=head1 SYNOPSIS + + unit run + +=cut + +my $cmd = shift; + +# $Test::Harness::Verbose = 1; +# $Test::Harness::Debug = 1; + +if (defined $cmd && exists $dispatch{$cmd}) { + $dispatch{$cmd}->(@ARGV); +} else { + print "Unknown command", (defined $cmd ? " $cmd" : ""), ".\n"; + print "Available commands are: ", join(", ", keys %dispatch), "\n"; +} + +=head2 run + +Run all unit tests in the current directory and all subdirectories. + +=cut + + +sub _find_test_files (@) { + my @dirs = @_; + my @files; + find sub { + $File::Find::prune = 1 if /^SCCS$/; + push(@files, $File::Find::name) if -x _ && /\.t\z/; + }, @dirs; + return @files; +} + +sub run_cmd (@) { + my @files; + + # If no directories were supplied, we add all directories in the + # current directory except 'mytap' since it is not part of the + # test suite. + if (@_ == 0) { + # Ignore these directories + my @ignore = qw(mytap SCCS); + + # Build an expression from the directories above that tests if a + # directory should be included in the list or not. + my $ignore = join(' && ', map { '$_ ne ' . "'$_'"} @ignore); + + # Open and read the directory. Filter out all files, hidden + # directories, and directories named above. + opendir(DIR, ".") or die "Cannot open '.': $!\n"; + @_ = grep { -d $_ && $_ !~ /^\..*/ && eval $ignore } readdir(DIR); + closedir(DIR); + } + + print "Running tests: @_\n"; + + foreach my $name (@_) { + push(@files, _find_test_files $name) if -d $name; + push(@files, $name) if -f $name; + } + + if (@files > 0) { + # Removing the first './' from the file names + foreach (@files) { s!^\./!! } + + # Install the strap above instead of the default strap. Since + # we are replacing the straps under the feet of Test::Harness, + # we need to do some basic initializations in the new straps. + $Test::Harness::Strap = MySQL::Straps->new; + $Test::Harness::Strap->{callback} = \&Test::Harness::strap_callback + if defined &Test::Harness::strap_callback; + + runtests @files; + } +} + diff --git a/vio/vio.c b/vio/vio.c index bc286b2d2bb2dded055673ce4c8c51c03c5fab92..9ace22e3780cef1d65c84d61d956454e64926942 100644 --- a/vio/vio.c +++ b/vio/vio.c @@ -147,7 +147,7 @@ Vio *vio_new(my_socket sd, enum enum_vio_type type, uint flags) sprintf(vio->desc, (vio->type == VIO_TYPE_SOCKET ? "socket (%d)" : "TCP/IP (%d)"), vio->sd); -#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) +#if !defined(__WIN__) #if !defined(NO_FCNTL_NONBLOCK) /* We call fcntl() to set the flags and then immediately read them back @@ -166,7 +166,7 @@ Vio *vio_new(my_socket sd, enum enum_vio_type type, uint flags) (void) ioctl(sd,FIOSNBIO,0); vio->fcntl_mode &= ~O_NONBLOCK; #endif -#else /* !defined(__WIN__) && !defined(__EMX__) */ +#else /* !defined(__WIN__) */ { /* set to blocking mode by default */ ulong arg=0, r; diff --git a/vio/viosocket.c b/vio/viosocket.c index 710f7a93607fd4a782b19b74c18c160116481e44..0ddceb72e91b727442d09d75b0db65d624119513 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -128,7 +128,7 @@ int vio_blocking(Vio * vio __attribute__((unused)), my_bool set_blocking_mode, DBUG_PRINT("enter", ("set_blocking_mode: %d old_mode: %d", (int) set_blocking_mode, (int) *old_mode)); -#if !defined(__WIN__) && !defined(__EMX__) +#if !defined(__WIN__) #if !defined(NO_FCNTL_NONBLOCK) if (vio->sd >= 0) { @@ -150,10 +150,8 @@ int vio_blocking(Vio * vio __attribute__((unused)), my_bool set_blocking_mode, #else r= set_blocking_mode ? 0 : 1; #endif /* !defined(NO_FCNTL_NONBLOCK) */ -#else /* !defined(__WIN__) && !defined(__EMX__) */ -#ifndef __EMX__ +#else /* !defined(__WIN__) */ if (vio->type != VIO_TYPE_NAMEDPIPE && vio->type != VIO_TYPE_SHARED_MEMORY) -#endif { ulong arg; int old_fcntl=vio->fcntl_mode; @@ -170,11 +168,9 @@ int vio_blocking(Vio * vio __attribute__((unused)), my_bool set_blocking_mode, if (old_fcntl != vio->fcntl_mode) r = ioctlsocket(vio->sd,FIONBIO,(void*) &arg); } -#ifndef __EMX__ else r= test(!(vio->fcntl_mode & O_NONBLOCK)) != set_blocking_mode; -#endif /* __EMX__ */ -#endif /* !defined(__WIN__) && !defined(__EMX__) */ +#endif /* !defined(__WIN__) */ DBUG_PRINT("exit", ("%d", r)); DBUG_RETURN(r); } @@ -195,12 +191,12 @@ int vio_fastsend(Vio * vio __attribute__((unused))) int r=0; DBUG_ENTER("vio_fastsend"); -#if defined(IPTOS_THROUGHPUT) && !defined(__EMX__) +#if defined(IPTOS_THROUGHPUT) { int tos = IPTOS_THROUGHPUT; r= setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)); } -#endif /* IPTOS_THROUGHPUT && !__EMX__ */ +#endif /* IPTOS_THROUGHPUT */ if (!r) { #ifdef __WIN__ diff --git a/vio/viossl.c b/vio/viossl.c index 1273814c551774867b3666962de5c2060b908def..a0262a79209cde14978c1cd2ebc1d5c5830b447a 100644 --- a/vio/viossl.c +++ b/vio/viossl.c @@ -112,12 +112,12 @@ int vio_ssl_fastsend(Vio * vio __attribute__((unused))) int r=0; DBUG_ENTER("vio_ssl_fastsend"); -#if defined(IPTOS_THROUGHPUT) && !defined(__EMX__) +#if defined(IPTOS_THROUGHPUT) { int tos= IPTOS_THROUGHPUT; r= setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)); } -#endif /* IPTOS_THROUGHPUT && !__EMX__ */ +#endif /* IPTOS_THROUGHPUT */ if (!r) { #ifdef __WIN__ diff --git a/win/README b/win/README index dcd65516abebb49426d93f22224cdee2d54c647f..4aab39575e0ec959e5e57d61ff82ecaf00c69c6e 100644 --- a/win/README +++ b/win/README @@ -75,3 +75,8 @@ Current issues -------------- 1. After changing configuration (eg. adding or removing a storage engine), it may be necessary to clean the build tree to remove any stale objects. + +2. To use Visual C++ Express Edition you also need to install the Platform SDK. +Please see this link: http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ +At step 4 you only need to add the libraries advapi32.lib and user32.lib to +the file "corewin_express.vsprops" in order to avoid link errors.