diff options
author | serg@serg.mysql.com <> | 2002-03-01 16:58:06 +0000 |
---|---|---|
committer | serg@serg.mysql.com <> | 2002-03-01 16:58:06 +0000 |
commit | 863b5da02d8220ae03684c510af3436647755c87 (patch) | |
tree | ed959a0e186a55ad38b0b3e0cc9e022faf8eddb2 | |
parent | 4e6150d4c78c2565edb3f3a0f999f380a75ebde5 (diff) | |
parent | dbf2e812a8ba9ac4c26306d621334708f6aa36d3 (diff) | |
download | mariadb-git-863b5da02d8220ae03684c510af3436647755c87.tar.gz |
Merge work:/home/bk/mysql-4.0
into serg.mysql.com:/usr/home/serg/Abk/mysql-4.0
-rwxr-xr-x | Docs/Flags/costarica.eps | 358 | ||||
-rwxr-xr-x | Docs/Flags/costarica.gif | bin | 0 -> 200 bytes | |||
-rw-r--r-- | Docs/Flags/costarica.txt | 0 | ||||
-rwxr-xr-x | Docs/Support/colspec-fix.pl | 50 | ||||
-rwxr-xr-x | Docs/Support/docbook-fixup.pl | 247 | ||||
-rwxr-xr-x | Docs/Support/docbook-split | 98 | ||||
-rwxr-xr-x | Docs/Support/make-docbook | 4 | ||||
-rw-r--r-- | Docs/manual.texi | 5 | ||||
-rw-r--r-- | Docs/mirrors.texi | 5 | ||||
-rw-r--r-- | libmysql/libmysql.c | 2 | ||||
-rw-r--r-- | mysql-test/r/union.result | 15 | ||||
-rw-r--r-- | mysql-test/t/union.test | 6 | ||||
-rw-r--r-- | sql/sql_select.cc | 108 | ||||
-rw-r--r-- | sql/sql_union.cc | 58 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 8 |
15 files changed, 693 insertions, 271 deletions
diff --git a/Docs/Flags/costarica.eps b/Docs/Flags/costarica.eps new file mode 100755 index 00000000000..e85aef835ca --- /dev/null +++ b/Docs/Flags/costarica.eps @@ -0,0 +1,358 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Photoshop Version 5.5 +%%Title: costarica.eps +%%CreationDate: Thu Feb 28 2002 17:53:37 +%%BoundingBox: 0 0 32 22 +%%HiResBoundingBox: 0 0 32.0005 22.0004 +%%SuppressDotGainCompensation +%%EndComments +%%BeginProlog +%%EndProlog +%%BeginSetup +%%EndSetup +%ImageData: 32 22 8 3 1 32 2 "beginimage" +%BeginPhotoshop: 1322 +% 3842494D03ED0000000000100047FFB4000200020047FFB4000200023842494D +% 040D000000000004000000783842494D03F30000000000080000000000000000 +% 3842494D040A00000000000100003842494D271000000000000A000100000000 +% 000000023842494D03F5000000000048002F66660001006C6666000600000000 +% 0001002F6666000100A1999A0006000000000001003200000001005A00000006 +% 000000000001003500000001002D000000060000000000013842494D03F80000 +% 000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E80000 +% 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFF +% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFF +% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D0408000000000010 +% 000000010000024000000240000000003842494D041400000000000400000002 +% 3842494D040C0000000003AC0000000100000020000000160000006000000840 +% 0000039000180001FFD8FFE000104A46494600010201004800480000FFEE000E +% 41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11 +% 150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C +% 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E +% 14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C +% 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108001600200301220002 +% 1101031101FFDD00040002FFC4013F0000010501010101010100000000000000 +% 030001020405060708090A0B0100010501010101010100000000000000010002 +% 030405060708090A0B1000010401030204020507060805030C33010002110304 +% 211231054151611322718132061491A1B14223241552C16233347282D1430725 +% 9253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D3 +% 75E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637 +% 475767778797A7B7C7D7E7F71100020201020404030405060707060535010002 +% 1103213112044151617122130532819114A1B14223C152D1F0332462E1728292 +% 435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B3 +% 84C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6 +% F62737475767778797A7B7C7FFDA000C03010002110311003F005D1BFC53D1D4 +% 3A3E0E79CF630E5E3557961C60E23D4636DDBBFD76EFDBBBE92B9FF8CD51FF00 +% 9635FF00EC20FF00DE8593D27EA87D62C8E9585914E1EFAAEC7AACADDEA5425A +% E635CC743AD0EFA2AD7FCCAFACDFF707FF0005A7FF004AA6FF00A43981A0C7B6 +% 9F247FF55BA31F83F2728891E771824591634BFF00ABB73FF19AA3FF002C6BFF +% 00D841FF00BD0A9F59FF0014F474FE8F9D9E33D8F3898D6DE18318349F4D8EB7 +% 6EFF005DDB376DFA497FCCAFACDFF707FF0005A7FF004AAABD5BEA87D62C7E95 +% 9B91761ECAA9C7B6CB1DEA5461AD639CF7436D2EFA297FA43983A1C7BE9F247F +% F55AA5F07E4E31321CEE3240B02C6B5FF577FFD05D1ACFF1AA3A3E08C0A9E708 +% 6355F6523EC3FCD6C6FA3FCF3FD5FE6F6FF3BFA4577D5FF1C3FE85FF007F4FFF +% 00D28BC7525747150FF73EDD7DBB60357FE57FE73EC5EAFF008E1FF42FFBFA7F +% FE9454BACD9FE354F47CE19F53C611C6B7ED44FD87F9AD8EF5BF997FABFCDEEF +% E6BF48BCA9248F151FF73EDD3DBB50ABFF002BFF0039FFD93842494D03FD0000 +% 00000006000000000000 +%EndPhotoshop +%%BeginICCProfile: (Photoshop Profile) -1 Hex +% 00000C484C696E6F021000006D6E74725247422058595A2007CE000200090006 +% 00310000616373704D5346540000000049454320735247420000000000000000 +% 000000000000F6D6000100000000D32D48502020000000000000000000000000 +% 0000000000000000000000000000000000000000000000000000000000000000 +% 0000001163707274000001500000003364657363000001840000006C77747074 +% 000001F000000014626B707400000204000000147258595A0000021800000014 +% 6758595A0000022C000000146258595A0000024000000014646D6E6400000254 +% 00000070646D6464000002C400000088767565640000034C0000008676696577 +% 000003D4000000246C756D69000003F8000000146D6561730000040C00000024 +% 74656368000004300000000C725452430000043C0000080C675452430000043C +% 0000080C625452430000043C0000080C7465787400000000436F707972696768 +% 74202863292031393938204865776C6574742D5061636B61726420436F6D7061 +% 6E790000646573630000000000000012735247422049454336313936362D322E +% 31000000000000000000000012735247422049454336313936362D322E310000 +% 0000000000000000000000000000000000000000000000000000000000000000 +% 0000000000000000000000000000000058595A20000000000000F35100010000 +% 000116CC58595A200000000000000000000000000000000058595A2000000000 +% 00006FA2000038F50000039058595A2000000000000062990000B785000018DA +% 58595A2000000000000024A000000F840000B6CF646573630000000000000016 +% 49454320687474703A2F2F7777772E6965632E63680000000000000000000000 +% 1649454320687474703A2F2F7777772E6965632E636800000000000000000000 +% 0000000000000000000000000000000000000000000000000000000000000000 +% 0000000064657363000000000000002E4945432036313936362D322E31204465 +% 6661756C742052474220636F6C6F7572207370616365202D2073524742000000 +% 00000000000000002E4945432036313936362D322E312044656661756C742052 +% 474220636F6C6F7572207370616365202D207352474200000000000000000000 +% 00000000000000000000000064657363000000000000002C5265666572656E63 +% 652056696577696E6720436F6E646974696F6E20696E2049454336313936362D +% 322E3100000000000000000000002C5265666572656E63652056696577696E67 +% 20436F6E646974696F6E20696E2049454336313936362D322E31000000000000 +% 000000000000000000000000000000000000000076696577000000000013A4FE +% 00145F2E0010CF140003EDCC0004130B00035C9E0000000158595A2000000000 +% 004C09560050000000571FE76D65617300000000000000010000000000000000 +% 00000000000000000000028F0000000273696720000000004352542063757276 +% 000000000000040000000005000A000F00140019001E00230028002D00320037 +% 003B00400045004A004F00540059005E00630068006D00720077007C00810086 +% 008B00900095009A009F00A400A900AE00B200B700BC00C100C600CB00D000D5 +% 00DB00E000E500EB00F000F600FB01010107010D01130119011F0125012B0132 +% 0138013E0145014C0152015901600167016E0175017C0183018B0192019A01A1 +% 01A901B101B901C101C901D101D901E101E901F201FA0203020C0214021D0226 +% 022F02380241024B0254025D02670271027A0284028E029802A202AC02B602C1 +% 02CB02D502E002EB02F50300030B03160321032D03380343034F035A03660372 +% 037E038A039603A203AE03BA03C703D303E003EC03F9040604130420042D043B +% 0448045504630471047E048C049A04A804B604C404D304E104F004FE050D051C +% 052B053A05490558056705770586059605A605B505C505D505E505F606060616 +% 0627063706480659066A067B068C069D06AF06C006D106E306F507070719072B +% 073D074F076107740786079907AC07BF07D207E507F8080B081F08320846085A +% 086E0882089608AA08BE08D208E708FB09100925093A094F09640979098F09A4 +% 09BA09CF09E509FB0A110A270A3D0A540A6A0A810A980AAE0AC50ADC0AF30B0B +% 0B220B390B510B690B800B980BB00BC80BE10BF90C120C2A0C430C5C0C750C8E +% 0CA70CC00CD90CF30D0D0D260D400D5A0D740D8E0DA90DC30DDE0DF80E130E2E +% 0E490E640E7F0E9B0EB60ED20EEE0F090F250F410F5E0F7A0F960FB30FCF0FEC +% 1009102610431061107E109B10B910D710F511131131114F116D118C11AA11C9 +% 11E81207122612451264128412A312C312E31303132313431363138313A413C5 +% 13E5140614271449146A148B14AD14CE14F01512153415561578159B15BD15E0 +% 160316261649166C168F16B216D616FA171D17411765178917AE17D217F7181B +% 18401865188A18AF18D518FA19201945196B199119B719DD1A041A2A1A511A77 +% 1A9E1AC51AEC1B141B3B1B631B8A1BB21BDA1C021C2A1C521C7B1CA31CCC1CF5 +% 1D1E1D471D701D991DC31DEC1E161E401E6A1E941EBE1EE91F131F3E1F691F94 +% 1FBF1FEA20152041206C209820C420F0211C2148217521A121CE21FB22272255 +% 228222AF22DD230A23382366239423C223F0241F244D247C24AB24DA25092538 +% 2568259725C725F726272657268726B726E827182749277A27AB27DC280D283F +% 287128A228D429062938296B299D29D02A022A352A682A9B2ACF2B022B362B69 +% 2B9D2BD12C052C392C6E2CA22CD72D0C2D412D762DAB2DE12E162E4C2E822EB7 +% 2EEE2F242F5A2F912FC72FFE3035306C30A430DB3112314A318231BA31F2322A +% 3263329B32D4330D3346337F33B833F1342B3465349E34D83513354D358735C2 +% 35FD3637367236AE36E937243760379C37D738143850388C38C839053942397F +% 39BC39F93A363A743AB23AEF3B2D3B6B3BAA3BE83C273C653CA43CE33D223D61 +% 3DA13DE03E203E603EA03EE03F213F613FA23FE24023406440A640E74129416A +% 41AC41EE4230427242B542F7433A437D43C044034447448A44CE45124555459A +% 45DE4622466746AB46F04735477B47C04805484B489148D7491D496349A949F0 +% 4A374A7D4AC44B0C4B534B9A4BE24C2A4C724CBA4D024D4A4D934DDC4E254E6E +% 4EB74F004F494F934FDD5027507150BB51065150519B51E65231527C52C75313 +% 535F53AA53F65442548F54DB5528557555C2560F565C56A956F75744579257E0 +% 582F587D58CB591A596959B85A075A565AA65AF55B455B955BE55C355C865CD6 +% 5D275D785DC95E1A5E6C5EBD5F0F5F615FB36005605760AA60FC614F61A261F5 +% 6249629C62F06343639763EB6440649464E9653D659265E7663D669266E8673D +% 679367E9683F689668EC6943699A69F16A486A9F6AF76B4F6BA76BFF6C576CAF +% 6D086D606DB96E126E6B6EC46F1E6F786FD1702B708670E0713A719571F0724B +% 72A67301735D73B87414747074CC7528758575E1763E769B76F8775677B37811 +% 786E78CC792A798979E77A467AA57B047B637BC27C217C817CE17D417DA17E01 +% 7E627EC27F237F847FE5804780A8810A816B81CD8230829282F4835783BA841D +% 848084E3854785AB860E867286D7873B879F8804886988CE8933899989FE8A64 +% 8ACA8B308B968BFC8C638CCA8D318D988DFF8E668ECE8F368F9E9006906E90D6 +% 913F91A89211927A92E3934D93B69420948A94F4955F95C99634969F970A9775 +% 97E0984C98B89924999099FC9A689AD59B429BAF9C1C9C899CF79D649DD29E40 +% 9EAE9F1D9F8B9FFAA069A0D8A147A1B6A226A296A306A376A3E6A456A4C7A538 +% A5A9A61AA68BA6FDA76EA7E0A852A8C4A937A9A9AA1CAA8FAB02AB75ABE9AC5C +% ACD0AD44ADB8AE2DAEA1AF16AF8BB000B075B0EAB160B1D6B24BB2C2B338B3AE +% B425B49CB513B58AB601B679B6F0B768B7E0B859B8D1B94AB9C2BA3BBAB5BB2E +% BBA7BC21BC9BBD15BD8FBE0ABE84BEFFBF7ABFF5C070C0ECC167C1E3C25FC2DB +% C358C3D4C451C4CEC54BC5C8C646C6C3C741C7BFC83DC8BCC93AC9B9CA38CAB7 +% CB36CBB6CC35CCB5CD35CDB5CE36CEB6CF37CFB8D039D0BAD13CD1BED23FD2C1 +% D344D3C6D449D4CBD54ED5D1D655D6D8D75CD7E0D864D8E8D96CD9F1DA76DAFB +% DB80DC05DC8ADD10DD96DE1CDEA2DF29DFAFE036E0BDE144E1CCE253E2DBE363 +% E3EBE473E4FCE584E60DE696E71FE7A9E832E8BCE946E9D0EA5BEAE5EB70EBFB +% EC86ED11ED9CEE28EEB4EF40EFCCF058F0E5F172F1FFF28CF319F3A7F434F4C2 +% F550F5DEF66DF6FBF78AF819F8A8F938F9C7FA57FAE7FB77FC07FC98FD29FDBA +% FE4BFEDCFF6DFFFF +%%EndICCProfile +gsave % EPS gsave +/hascolor +/deviceinfo where +{pop deviceinfo /Colors known +{deviceinfo /Colors get exec 1 gt} +{false} ifelse} +{/statusdict where +{pop statusdict /processcolors known +{statusdict /processcolors get exec 1 gt} +{false} ifelse} +{false} ifelse} +ifelse +def +40 dict begin +/_image systemdict /image get def +/_setgray systemdict /setgray get def +/_currentgray systemdict /currentgray get def +/_settransfer systemdict /settransfer get def +/_currenttransfer systemdict /currenttransfer get def +/blank 0 _currenttransfer exec +1 _currenttransfer exec eq def +/negative blank +{0 _currenttransfer exec 0.5 lt} +{0 _currenttransfer exec 1 _currenttransfer exec gt} +ifelse def +/inverted? negative def +/level2 systemdict /languagelevel known +{languagelevel 2 ge} {false} ifelse def +/level3 systemdict /languagelevel known +{languagelevel 3 ge} {false} ifelse def +/foureq {4 index eq 8 1 roll +4 index eq 8 1 roll +4 index eq 8 1 roll +4 index eq 8 1 roll +pop pop pop pop and and and} def +hascolor {/band 0 def} {/band 5 def} ifelse +/setcmykcolor where {pop +1 0 0 0 setcmykcolor _currentgray 1 exch sub +0 1 0 0 setcmykcolor _currentgray 1 exch sub +0 0 1 0 setcmykcolor _currentgray 1 exch sub +0 0 0 1 setcmykcolor _currentgray 1 exch sub +4 {4 copy} repeat +1 0 0 0 foureq {/band 1 store} if +0 1 0 0 foureq {/band 2 store} if +0 0 1 0 foureq {/band 3 store} if +0 0 0 1 foureq {/band 4 store} if +0 0 0 0 foureq {/band 6 store} if} if +blank {/band 6 store} if +gsave % Image Header gsave +/rows 22 def +/cols 32 def +32.0005 22.0004 scale +level2 { +band 0 eq { +/DeviceRGB +} {/DeviceGray} ifelse +setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if +/picstr1 32 string def +/picstr2 32 string def +/picstr3 32 string def +/picstr4 32 string def +/readdata {currentfile exch readhexstring pop} def +/image2 level2 {/image load def} {{begin +Width Height BitsPerComponent ImageMatrix +Decode length 2 eq +{/DataSource load image} if +Decode length 6 eq +{DataSource 0 get DataSource 1 get DataSource 2 get +true 3 colorimage} if +Decode length 8 eq +{DataSource 0 get DataSource 1 get +DataSource 2 get DataSource 3 get +true 4 colorimage} if +end} def} ifelse +/_image2 level2 {/_image load def} {{begin +Width Height BitsPerComponent ImageMatrix +/DataSource load _image end} def} ifelse +/beginimage { +band 0 eq band 4 eq or band 5 eq or +{image2} +{negative {{pop 0}} {{pop 1}} ifelse +_settransfer _image2} ifelse +} def +12 dict begin +/ImageType 1 def +/Width cols def +/Height rows def +/ImageMatrix [cols 0 0 rows neg 0 rows] def +/BitsPerComponent 8 def +band 0 eq +{/Decode [0 1 0 1 0 1] def +/MultipleDataSources true def +/DataSource [ +{picstr1 readdata} +{picstr2 readdata} +{picstr3 readdata picstr4 readdata pop} +] def} +{/Decode [0 1] def +/DataSource { +picstr1 readdata pop +picstr2 readdata pop +picstr3 readdata pop +picstr4 readdata +} def} +ifelse +currentdict end +%%BeginBinary: 5821 +beginimage +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0008080808080808080808080808080808080808080808080808080808080800 +0039393939393939393939393939393939393939393939393939393939393900 +009C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C00 +0035353535353535353535353535353535353535353535353535353535353500 +0007070707070707070707070707070707070707070707070707070707070700 +0038383838383838383838383838383838383838383838383838383838383800 +009C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C00 +0034343434343434343434343434343434343434343434343434343434343400 +0000000000000000000000000000000000000000000000000000000000000000 +0030303030303030303030303030303030303030303030303030303030303000 +0098989898989898989898989898989898989898989898989898989898989800 +002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD00 +001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D00 +0014141414141414141414141414141414141414141414141414141414141400 +0056565656565656565656565656565656565656565656565656565656565600 +00DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE00 +001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F00 +0016161616161616161616161616161616161616161616161616161616161600 +0057575757575757575757575757575757575757575757575757575757575700 +00DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE00 +0021212121212121212121212121212121212121212121212121212121212100 +0018181818181818181818181818181818181818181818181818181818181800 +0059595959595959595959595959595959595959595959595959595959595900 +00DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE00 +0021212121212121212121212121212121212121212121212121212121212100 +0018181818181818181818181818181818181818181818181818181818181800 +0059595959595959595959595959595959595959595959595959595959595900 +00DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE00 +0020202020202020202020202020202020202020202020202020202020202000 +0017171717171717171717171717171717171717171717171717171717171700 +0058585858585858585858585858585858585858585858585858585858585800 +00DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD00 +0017171717171717171717171717171717171717171717171717171717171700 +000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00 +0051515151515151515151515151515151515151515151515151515151515100 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +0004040404040404040404040404040404040404040404040404040404040400 +0035353535353535353535353535353535353535353535353535353535353500 +009A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A00 +0031313131313131313131313131313131313131313131313131313131313100 +0006060606060606060606060606060606060606060606060606060606060600 +0038383838383838383838383838383838383838383838383838383838383800 +009B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B00 +0034343434343434343434343434343434343434343434343434343434343400 +0008080808080808080808080808080808080808080808080808080808080800 +0039393939393939393939393939393939393939393939393939393939393900 +009C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C00 +0035353535353535353535353535353535353535353535353535353535353500 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 + +%%EndBinary +grestore end % Image Trailer grestore +grestore % EPS grestore diff --git a/Docs/Flags/costarica.gif b/Docs/Flags/costarica.gif Binary files differnew file mode 100755 index 00000000000..c0a150c1288 --- /dev/null +++ b/Docs/Flags/costarica.gif diff --git a/Docs/Flags/costarica.txt b/Docs/Flags/costarica.txt new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Docs/Flags/costarica.txt diff --git a/Docs/Support/colspec-fix.pl b/Docs/Support/colspec-fix.pl new file mode 100755 index 00000000000..48913d6d638 --- /dev/null +++ b/Docs/Support/colspec-fix.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl -w + +# +# Script to rewrite colspecs from relative values to absolute values +# + +use strict; + +my $table_width = 12.75; # cm +my $gutter_width = 0.09; # cm + +my $str = join '', <>; + +$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 @widths = (); + my $total = 0; + my $output = ''; + + $str =~ /^(\s+)/; + my $ws = $1; + + while ($str =~ m/<colspec colwidth="(\d+)\*" \/>/g) { + $total += $1; + push @widths, $1; + } + + my $unit = ($table_width - ($#widths * $gutter_width)) / ($total); + + foreach (@widths) { + $output .= $ws . '<colspec colwidth="'. sprintf ("%0.2f", $_ * $unit) .'" />' . "\n"; + } + + return $output . "\n$ws"; +} diff --git a/Docs/Support/docbook-fixup.pl b/Docs/Support/docbook-fixup.pl index 3f329423279..e8477f58cdb 100755 --- a/Docs/Support/docbook-fixup.pl +++ b/Docs/Support/docbook-fixup.pl @@ -1,158 +1,165 @@ #!/usr/bin/perl -w -# 2002-02-15 zak@mysql.com -# Use -w to make perl print useful warnings about the script being run -sub fix_underscore { - $str = shift; - $str =~ tr/_/-/; - return $str; -}; +# 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 -sub strip_emph { - $str = shift; - $str =~ s{<emphasis>(.+?)</emphasis>} - {$1}gs; - return $str; -}; +use strict; -print STDERR "\n--Post-processing makeinfo output--\n"; +my $data = ''; +my @apx = (); +my $apx = ''; +my @nodes = (); +my $nodes = ''; -# 2002-02-15 zak@mysql.com -print STDERR "Discard DTD - ORA can add the appropriate DTD for their flavour of DocBook\n"; -<STDIN>; +msg ("\n-- Post-processing `makeinfo --docbook` output --"); +msg ("** Written to work with makeinfo version 4.0c **\n"); -print STDERR "Slurp! In comes the rest of the file. :)\n"; -$data = join "", <STDIN>; +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 +<>; -# 2002-02-15 zak@mysql.com -print STDERR "Add an XML processing instruction with the right character encoding\n"; -$data = "<?xml version='1.0' encoding='ISO-8859-1'?>" . $data; +msg ("Create an XML PI with ISO-8859-1 character encoding"); +$data = "<?xml version='1.0' encoding='ISO-8859-1'?>"; -# 2002-02-15 zak@mysql.com -# Less than optimal - should be fixed in makeinfo -print STDERR "Put in missing <bookinfo> and <abstract>\n"; -$data =~ s/<book lang="en">/<book lang="en"><bookinfo><abstract>/gs; +msg ("Get the rest of the data"); +$data = $data . join "", <>; -# 2002-02-15 zak@mysql.com -print STDERR "Convert existing ampersands to escape sequences \n"; -$data =~ s/&(?!\w+;)/&/gs; +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>/; -# 2002-02-15 zak@mysql.com -# Need to talk to Arjen about what the <n> bits are for -print STDERR "Rework references of the notation '<n>'\n"; -$data =~ s/<(\d)>/[$1]/gs; +msg ("Removing mailto: from email addresses..."); +$data =~ s/mailto://g; + +msg ("Removing INFORMALFIGURE..."); +$data =~ s{<informalfigure>.+?</informalfigure>} + {}gs; + +msg ("Convert ampersands to XML escape sequences "); +$data =~ s/&(?!\w+;)/&/g; -# 2002-02-15 zak@mysql.com -# We might need to encode the high-bit characters to ensure proper representation -# print STDERR "Converting high-bit characters to entities\n"; -# $data =~ s/([\200-\400])/&get_entity($1)>/gs; -# There is no get_entity function yet - no point writing it til we need it :) +msg ("Changing @@ to @..."); +$data =~ s/@@/@/g; -print STDERR "Changing @@ to @...\n"; -$data =~ s/@@/@/gs; +msg ("Rework references of the notation '<n>'"); +# Need to talk to Arjen about what the <n> bits are for +$data =~ s/<(\d)>/[$1]/g; -print STDERR "Changing '_' to '-' in references...\n"; -$data =~ s{id=\"(.+?)\"} - {"id=\"".&fix_underscore($1)."\""}gsex; -$data =~ s{linkend=\"(.+?)\"} - {"linkend=\"".&fix_underscore($1)."\""}gsex; +msg ("Changing '_' to '-' in references..."); +$data =~ s{((?:id|linkend)=\".+?\")} + {&underscore2hyphen($1)}gex; -print STDERR "Changing ULINK to SYSTEMITEM...\n"; -$data =~ s{<ulink url=\"(.+?)\"></ulink>} +msg ("Changing ULINK to SYSTEMITEM..."); +$data =~ s{<ulink url=\"(.+?)\">\s*</ulink>} {<systemitem role=\"url\">$1</systemitem>}gs; -print STDERR "Removing INFORMALFIGURE...\n"; -$data =~ s{<informalfigure>(.+?)</informalfigure>} - {}gs; - -print STDERR "Adding PARA inside ENTRY...\n"; +msg ("Adding PARA inside ENTRY..."); $data =~ s{<entry>(.*?)</entry>} {<entry><para>$1</para></entry>}gs; -print STDERR "Removing mailto: from email addresses...\n"; -$data =~ s{mailto:} - {}gs; - -print STDERR "Fixing spacing problem with titles...\n"; -$data =~ s{</(\w+)>(\w{2,})} - {</$1> $2}gs; +msg ("Fixing spacing problem with titles..."); +$data =~ s{(</\w+>)(\w{2,})} + {$1 $2}gs; -# 2002-02-15 arjen@mysql.com -print STDERR "Adding closing / to XREF...\n"; -$data =~ s{<xref (.+?)>} - {<xref $1 />}gs; +msg ("Adding closing / to XREF and COLSPEC tags..."); +$data =~ s{<(xref|colspec) (.+?)>} + {<$1 $2 />}gs; -# 2002-02-22 arjen@mysql.com -print STDERR "Adding \"See \" to XREFs that used to be \@xref...\n"; -$data =~ s{([\.\'\!\)])[\n ]*<xref } +# Probably need to strip these +msg ('Adding "See " to XREFs that used to be @xref...'); +$data =~ s{([.'!)])\s*<xref } {$1 See <xref }gs; -# 2002-02-22 arjen@mysql.com -print STDERR "Adding \"see \" to (XREFs) that used to be (\@pxref)...\n"; -$data =~ s{(\(|[[,;])([\n]*[ ]*)<xref } +msg ('Adding "see " to (XREFs) that used to be (@pxref)...'); +$data =~ s{([([,;])(\s*)<xref } {$1$2see <xref }gs; -# 2002-01-30 arjen@mysql.com -print STDERR "Removing COLSPEC...\n"; -$data =~ s{\n *<colspec colwidth=\"[0-9]+\*\">} - {}gs; - -# 2002-01-31 arjen@mysql.com -print STDERR "Making first row in table THEAD...\n"; -$data =~ s{([ ]*)<tbody>\n([ ]*<row>(.+?)</row>)} - {$1<thead>\n$2\n$1</thead>\n$1<tbody>}gs; +msg ("Making first row in table THEAD..."); +$data =~ s{( *)<tbody>(\s*<row>.+?</row>)} + {$1<thead>$2\n$1</thead>\n$1<tbody>}gs; -# 2002-01-31 arjen@mysql.com -print STDERR "Removing EMPHASIS inside THEAD...\n"; +msg ("Removing EMPHASIS inside THEAD..."); $data =~ s{<thead>(.+?)</thead>} - {"<thead>".&strip_emph($1)."</thead>"}gsex; + {"<thead>".&strip_tag($1, 'emphasis')."</thead>"}gsex; -# 2002-01-31 arjen@mysql.com -print STDERR "Removing lf before /PARA in ENTRY...\n"; -$data =~ s{(<entry><para>(.+?))\n(</para></entry>)} - {$1$3}gs; - -# 2002-01-31 arjen@mysql.com (2002-02-15 added \n stuff) -print STDERR "Removing whitespace before /PARA if not on separate line...\n"; -$data =~ s{([^\n ])[ ]+</para>} - {$1</para>}gs; +msg ("Removing empty PARA..."); +$data =~ s{<para>\s*</para>} + {}gs; -# 2002-01-31 arjen@mysql.com -print STDERR "Removing empty PARA in ENTRY...\n"; -$data =~ s{<entry><para></para></entry>} - {<entry></entry>}gs; +msg ("Removing lf before /PARA in ENTRY..."); +$data =~ s{\n(</para></entry>)} + {$1}gs; -# 2002-01-31 arjen@mysql.com -print STDERR "Removing PARA around INDEXENTRY if no text in PARA...\n"; -$data =~ s{<para>((<indexterm role=\"(cp|fn)\">(<(primary|secondary)>[^<]+?</(primary|secondary)>)+?</indexterm>)+?)[\n]*</para>[\n]*} - {$1\n}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=\"(?:cp|fn)\">(?:<(primary|secondary)>[^>]+</\2>)+?</indexterm>)+?)\s*</para>} + {$1}gs; -@apx = ("Users", "MySQL Testimonials", "News", - "GPL-license", "LGPL-license"); +@apx = ("Users", "MySQL Testimonials", "News", "GPL-license", "LGPL-license"); foreach $apx (@apx) { - print STDERR "Removing appendix $apx...\n"; - $data =~ s{<appendix id=\"$apx\">(.+?)</appendix>} - {}gs; - - print STDERR " ... Building list of removed nodes ...\n"; - foreach(split "\n", $&) { - push @nodes, $2 if(/<(\w+) id=\"(.+?)\">/) - }; -}; + 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) -print STDERR "Fixing references to removed nodes...\n"; -foreach $node (@nodes) { - $web = $node; - $web =~ s/[ ]/_/; - $web = "http://www.mysql.com/doc/" . - (join "/", (split //, $web)[0..1])."/$web.html"; - print STDERR "$node -> $web\n"; - $data =~ s{<(\w+) linkend=\"$node\" />} - {$web}gs; -}; +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 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-split b/Docs/Support/docbook-split index 62fcc866e04..eafb437efe4 100755 --- a/Docs/Support/docbook-split +++ b/Docs/Support/docbook-split @@ -1,91 +1,65 @@ -#! /usr/local/bin/perl +#! /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. - -use strict; - # Breaks the MySQL reference manual into chapters, appendices, and indexes. -my $input_file; -my $directory; -my $chap_num; -my $app_letter; -my $start_text; -my $line; -my $input_file; -my $output_name; - -$input_file = "mysql.xml"; -$directory="chaps_apps_index"; -$chap_num=1; # Start chapter numbers at one (there is no preface) -$app_letter="a"; # Start appendix letters at "a" -$start_text=""; -$line=""; - -open (INPUT_FILE, '<' . $input_file) or die "Cannot open $input_file"; - -if (-d $directory) { - my $unlinked = unlink <$directory/*>; - printf(Removed "%d files\n", $unlinked); -} -else { - mkdir $directory or die "Cannot make $directory subdirectory"; -} +use strict; -while (1) { +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 = ""; - # Terminating statement for loop. - exit if not defined $line; +mkdir $directory unless -d $directory; - if ($line =~ /(?:.*)(<chapter.*)/i ) { +while (defined $line) { + if ($line =~ /(<chapter.+)/i ) { $start_text = $1; - $output_name = &make_chapter_name($chap_num); - $chap_num++; + $output_name = sprintf("ch%02d%s", $chap_num, $ext); + ++$chap_num; &process_file("chapter"); } - elsif ($line =~ /(?:.*)(<appendix.*)/i ) { + elsif ($line =~ /(<appendix.+)/i ) { $start_text = $1 ; - $output_name = &make_appendix_name($app_letter); - $app_letter++; + $output_name = "app$app_letter$ext"; + ++$app_letter; &process_file("appendix"); } - elsif ($line =~ /(?:.*)(<index\s+id=")(.*?)(">.*)/i ) { + elsif ($line =~ /(<index\s+id=")(.*?)(">.*)/i ) { $start_text = $1 . $2 . $3; - $output_name = lc($2) . ".xml"; + $output_name = lc($2) . $ext; &process_file("index"); } else { - # Automatically skips junk in between chapters, appendices, - # and indexes. - $line = <INPUT_FILE>; + # Skip junk in between chapters, appendices and indexes. + $line = <>; } } -sub make_chapter_name { - my $num = shift; - my $name = "ch" . sprintf("%02d", $num) . ".xml"; - return $name; -} +sub process_file { + my $marker = shift; + my $path = "$directory/$output_name"; -sub make_appendix_name { - my $letter = shift; - my $name = "app" . sprintf("%s", $letter) . ".xml"; - return $name; -} + open (OUTPUT_FILE, ">$path") or die "Cannot open $path"; -sub process_file { - my $marker=shift; - open (OUTPUT_FILE, '>' . $directory . "/" . $output_name) or - die "Cannot open $output_name"; + 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 (1) { - $line = <INPUT_FILE>; - exit if not defined $line; + 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; + print OUTPUT_FILE "$1\n" if $1; close OUTPUT_FILE; return; } diff --git a/Docs/Support/make-docbook b/Docs/Support/make-docbook index ec811030af1..bdca812d7ab 100755 --- a/Docs/Support/make-docbook +++ b/Docs/Support/make-docbook @@ -18,3 +18,7 @@ # 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/manual.texi b/Docs/manual.texi index bbd2d9475dc..3a76a42d894 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -757,10 +757,9 @@ Large server clusters using replication are in production use, with good results. Work on enhanced replication features is continuing in @code{MySQL} 4.0. -@item @code{InnoDB} tables -- Stable (in 3.23 from 3.23.47) +@item @code{InnoDB} tables -- Stable (in 3.23 from 3.23.49) The @code{InnoDB} transactional table handler has now been declared -stable in the @code{MySQL} 3.23 development tree, starting from -version 3.23.47. +stable in the @code{MySQL} 3.23 tree, starting from version 3.23.49. @code{InnoDB} is being used in large, heavy load production systems. @item @code{BDB} tables -- Gamma diff --git a/Docs/mirrors.texi b/Docs/mirrors.texi index 3296b83ff37..43f74c1e858 100644 --- a/Docs/mirrors.texi +++ b/Docs/mirrors.texi @@ -291,6 +291,11 @@ WWW (@uref{http://mysql.tecnoera.com/}) @image{Flags/chile} Chile [Vision] @@ WWW (@uref{http://mysql.vision.cl/}) +@item +@image{Flags/costarica} Costa Rica [Ogmios Communications] @@ +WWW (@uref{http://mysql.ogmios.co.cr/}) +FTP (@uref{ftp://mysql.ogmios.co.cr/pub/mysql/}) + @end itemize @strong{Asia:} diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 32aa8e59888..4e4518bbe10 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -737,7 +737,7 @@ static void mysql_read_default_options(struct st_mysql_options *options, *end=0; /* Remove '=' */ } /* Change all '_' in variable name to '-' */ - for (end= *option ; (end= strcend(end,'_')) ; ) + for (end= *option ; (end= strcend(end,'_')) && *end ; ) *end= '-'; switch (find_type(*option+2,&option_types,2)) { case 1: /* port */ diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 6a27df648b5..e842bb3b447 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -86,6 +86,21 @@ explain select a,b from t1 union all select a,b from t2; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 t2 ALL NULL NULL NULL NULL 4 +explain select xx from t1 union select 1; +Unknown column 'xx' in 'field list' +explain select a,b from t1 union select 1; +table type possible_keys key key_len ref rows Extra +t1 ALL NULL NULL NULL NULL 4 + 0 0 No tables used +explain select 1 union select a,b from t1 union select 1; +table type possible_keys key key_len ref rows Extra + 0 0 No tables used +t1 ALL NULL NULL NULL NULL 4 + 0 0 No tables used +explain select a,b from t1 union select 1 limit 0; +table type possible_keys key key_len ref rows Extra +t1 ALL NULL NULL NULL NULL 4 + 0 0 Impossible WHERE select a,b from t1 into outfile 'skr' union select a,b from t2; Wrong usage of UNION and INTO select a,b from t1 order by a union select a,b from t2; diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 8d98e6e0389..f782c61d97a 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -24,6 +24,12 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g # Test some error conditions with UNION explain select a,b from t1 union all select a,b from t2; +--error 1054 +explain select xx from t1 union select 1; +explain select a,b from t1 union select 1; +explain select 1 union select a,b from t1 union select 1; +explain select a,b from t1 union select 1 limit 0; + --error 1221 select a,b from t1 into outfile 'skr' union select a,b from t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2078ffcf001..2808212f039 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -6964,13 +6964,16 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, { List<Item> field_list; Item *item; + List<Item> item_list; THD *thd=join->thd; + MYSQL_LOCK *save_lock; SELECT_LEX *select_lex = &(join->thd->lex.select_lex); + select_result *result=join->result; DBUG_ENTER("select_describe"); /* Don't log this into the slow query log */ select_lex->options&= ~(QUERY_NO_INDEX_USED | QUERY_NO_GOOD_INDEX_USED); - if (join->thd->lex.select == select_lex) + if (thd->lex.select == select_lex) { field_list.push_back(new Item_empty_string("table",NAME_LEN)); field_list.push_back(new Item_empty_string("type",10)); @@ -6986,24 +6989,22 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, item->maybe_null=1; field_list.push_back(new Item_real("rows",0.0,0,10)); field_list.push_back(new Item_empty_string("Extra",255)); - if (send_fields(thd,field_list,1)) + if (result->send_fields(field_list,1)) return; } - char buff[512],*buff_ptr; - String tmp(buff,sizeof(buff)),*packet= &thd->packet; + if (message) { - packet->length(0); - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); - net_store_data(packet,message,strlen(message)); - if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length())) - DBUG_VOID_RETURN; + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_empty_string("",0)); + item_list.push_back(new Item_string(message,strlen(message))); + if (result->send_data(item_list)) + result->send_error(0,NullS); } else { @@ -7012,69 +7013,70 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, { JOIN_TAB *tab=join->join_tab+i; TABLE *table=tab->table; - + char buff[512],*buff_ptr=buff; + char buff1[512], buff2[512], bufff[512]; + String tmp1(buff1,sizeof(buff1)); + String tmp2(buff2,sizeof(buff2)); + item_list.empty(); if (tab->type == JT_ALL && tab->select && tab->select->quick) tab->type= JT_RANGE; - packet->length(0); - net_store_data(packet,table->table_name); - net_store_data(packet,join_type_str[tab->type]); - tmp.length(0); + item_list.push_back(new Item_string(table->table_name,strlen(table->table_name))); + item_list.push_back(new Item_string(join_type_str[tab->type],strlen(join_type_str[tab->type]))); + tmp1.length(0); tmp2.length(0); key_map bits; uint j; for (j=0,bits=tab->keys ; bits ; j++,bits>>=1) { if (bits & 1) { - if (tmp.length()) - tmp.append(','); - tmp.append(table->key_info[j].name); + if (tmp1.length()) + tmp1.append(','); + tmp1.append(table->key_info[j].name); } } - if (tmp.length()) - net_store_data(packet,tmp.ptr(),tmp.length()); + if (tmp1.length()) + item_list.push_back(new Item_string(tmp1.ptr(),tmp1.length())); else - net_store_null(packet); + item_list.push_back(new Item_null()); if (tab->ref.key_parts) { - net_store_data(packet,table->key_info[tab->ref.key].name); - net_store_data(packet,(uint32) tab->ref.key_length); - tmp.length(0); + item_list.push_back(new Item_string(table->key_info[tab->ref.key].name,strlen(table->key_info[tab->ref.key].name))); + item_list.push_back(new Item_int((int) tab->ref.key_length)); for (store_key **ref=tab->ref.key_copy ; *ref ; ref++) { - if (tmp.length()) - tmp.append(','); - tmp.append((*ref)->name()); + if (tmp2.length()) + tmp2.append(','); + tmp2.append((*ref)->name()); } - net_store_data(packet,tmp.ptr(),tmp.length()); + item_list.push_back(new Item_string(tmp2.ptr(),tmp2.length())); } else if (tab->type == JT_NEXT) { - net_store_data(packet,table->key_info[tab->index].name); - net_store_data(packet,(uint32) table->key_info[tab->index].key_length); - net_store_null(packet); + item_list.push_back(new Item_string(table->key_info[tab->index].name,strlen(table->key_info[tab->index].name))); + item_list.push_back(new Item_int((int) table->key_info[tab->index].key_length)); + item_list.push_back(new Item_null()); } else if (tab->select && tab->select->quick) { - net_store_data(packet,table->key_info[tab->select->quick->index].name);; - net_store_data(packet,(uint32) tab->select->quick->max_used_key_length); - net_store_null(packet); + item_list.push_back(new Item_string(table->key_info[tab->select->quick->index].name,strlen(table->key_info[tab->select->quick->index].name))); + item_list.push_back(new Item_int((int) tab->select->quick->max_used_key_length)); + item_list.push_back(new Item_null()); } else { - net_store_null(packet); - net_store_null(packet); - net_store_null(packet); + item_list.push_back(new Item_null()); + item_list.push_back(new Item_null()); + item_list.push_back(new Item_null()); } - sprintf(buff,"%.0f",join->best_positions[i].records_read); - net_store_data(packet,buff); + sprintf(bufff,"%.0f",join->best_positions[i].records_read); + item_list.push_back(new Item_string(bufff,strlen(bufff))); my_bool key_read=table->key_read; if (tab->type == JT_NEXT && ((table->used_keys & ((key_map) 1 << tab->index)))) key_read=1; - buff_ptr=buff; if (tab->info) - net_store_data(packet,tab->info); + item_list.push_back(new Item_string(tab->info,strlen(tab->info))); else if (tab->select) { if (tab->use_quick == 2) @@ -7128,16 +7130,20 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, } buff_ptr=strmov(buff_ptr,"Distinct"); } - net_store_data(packet,buff,(uint) (buff_ptr - buff)); - if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length())) - DBUG_VOID_RETURN; /* Purecov: Inspected */ - + item_list.push_back(new Item_string(buff,(uint) (buff_ptr - buff))); // For next iteration used_tables|=table->map; + if (result->send_data(item_list)) + result->send_error(0,NullS); } } if (!join->thd->lex.select->next) - send_eof(&thd->net); + { + save_lock=thd->lock; + thd->lock=(MYSQL_LOCK *)0; + result->send_eof(); + thd->lock=save_lock; + } DBUG_VOID_RETURN; } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 51ad2425022..60155e0ce8d 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -31,10 +31,11 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ORDER *order; List<Item> item_list; TABLE *table; + int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0; + int res; TABLE_LIST result_table_list; TMP_TABLE_PARAM tmp_table_param; select_union *union_result; - int res; DBUG_ENTER("mysql_union"); /* Fix tables 'to-be-unioned-from' list to point at opened tables */ @@ -70,33 +71,26 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) lex_sl=0; order=0; } - - if (lex->select_lex.options & SELECT_DESCRIBE) + + if (describe) { - for (sl= &lex->select_lex; sl; sl=sl->next) - { - lex->select=sl; - thd->offset_limit=sl->offset_limit; - thd->select_limit=sl->select_limit+sl->offset_limit; - if (thd->select_limit < sl->select_limit) - thd->select_limit= HA_POS_ERROR; // no limit - if (thd->select_limit == HA_POS_ERROR) - sl->options&= ~OPTION_FOUND_ROWS; - res=mysql_select(thd, (TABLE_LIST*) sl->table_list.first, - sl->item_list, - sl->where, - ((sl->braces) ? - (ORDER *) sl->order_list.first : (ORDER *) 0), - (ORDER*) sl->group_list.first, - sl->having, - (ORDER*) NULL, - (sl->options | thd->options | SELECT_NO_UNLOCK | - SELECT_DESCRIBE), - result); - } - DBUG_RETURN(0); + Item *item; + item_list.push_back(new Item_empty_string("table",NAME_LEN)); + item_list.push_back(new Item_empty_string("type",10)); + item_list.push_back(item=new Item_empty_string("possible_keys", + NAME_LEN*MAX_KEY)); + item->maybe_null=1; + item_list.push_back(item=new Item_empty_string("key",NAME_LEN)); + item->maybe_null=1; + item_list.push_back(item=new Item_int("key_len",0,3)); + item->maybe_null=1; + item_list.push_back(item=new Item_empty_string("ref", + NAME_LEN*MAX_REF_PARTS)); + item->maybe_null=1; + item_list.push_back(new Item_real("rows",0.0,0,10)); + item_list.push_back(new Item_empty_string("Extra",255)); } - + else { Item *item; List_iterator<Item> it(lex->select_lex.item_list); @@ -113,7 +107,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) bzero((char*) &tmp_table_param,sizeof(tmp_table_param)); tmp_table_param.field_count=item_list.elements; if (!(table=create_tmp_table(thd, &tmp_table_param, item_list, - (ORDER*) 0, !lex->union_option, + (ORDER*) 0, !describe & !lex->union_option, 1, 0, (lex->select_lex.options | thd->options | TMP_TABLE_ALL_COLUMNS)))) @@ -130,7 +124,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) res= -1; goto exit; } - for (sl= &lex->select_lex; sl; sl=sl->next) + union_result->save_time_stamp=!describe; + + for (sl=&lex->select_lex;sl;sl=sl->next) { thd->offset_limit=sl->offset_limit; thd->select_limit=sl->select_limit+sl->offset_limit; @@ -146,7 +142,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) (ORDER*) sl->group_list.first, sl->having, (ORDER*) NULL, - sl->options | thd->options | SELECT_NO_UNLOCK, + sl->options | thd->options | SELECT_NO_UNLOCK | ((describe) ? SELECT_DESCRIBE : 0), union_result); if (res) goto exit; @@ -187,6 +183,8 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) if (thd->select_limit == HA_POS_ERROR) thd->options&= ~OPTION_FOUND_ROWS; } + if (describe) + thd->select_limit= HA_POS_ERROR; // no limit res=mysql_select(thd,&result_table_list, item_list, NULL, /*ftfunc_list,*/ order, (ORDER*) NULL, NULL, (ORDER*) NULL, @@ -222,7 +220,7 @@ select_union::~select_union() int select_union::prepare(List<Item> &list) { - if (list.elements != table->fields) + if (save_time_stamp && list.elements != table->fields) { my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, ER(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),MYF(0)); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 591000bc36a..b12dd07777f 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1928,7 +1928,7 @@ opt_else: | ELSE expr { $$= $2; } when_list: - { Select->when_list.push_front(new List<Item>) } + { Select->when_list.push_front(new List<Item>); } when_list2 { $$= Select->when_list.pop(); } @@ -2031,7 +2031,7 @@ opt_key_definition: } key_usage_list: - key_or_index { Select->interval_list.empty() } '(' key_usage_list2 ')' + key_or_index { Select->interval_list.empty(); } '(' key_usage_list2 ')' { $$= &Select->interval_list; } key_usage_list2: @@ -2637,7 +2637,7 @@ describe: YYABORT; } opt_describe_column - | describe_command select { Lex->select_lex.options|= SELECT_DESCRIBE }; + | describe_command select { Lex->select_lex.options|= SELECT_DESCRIBE; } describe_command: @@ -3077,7 +3077,7 @@ set: lex->select->select_limit=lex->thd->default_select_limit; lex->tx_isolation=lex->thd->tx_isolation; lex->option_type=0; - lex->option_list.empty() + lex->option_list.empty(); } option_value_list |