Commit d0e09ed8 authored by paul@teton.kitebird.com's avatar paul@teton.kitebird.com

Merge paul@work.mysql.com:/home/bk/mysql-4.0

into teton.kitebird.com:/home/paul/mysql-4.0
parents 2645d508 12f1cba0
%!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
#!/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";
}
#!/usr/bin/perl -w #!/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 { # Fix the output of `makeinfo --docbook` version 4.0c
$str = shift; # Convert the broken docbook output to well-formed XML that conforms to the O'Reilly idiom
$str =~ tr/_/-/; # See code for detailed comments
return $str; # Authors: Arjen Lentz and Zak Greant
};
sub strip_emph { use strict;
$str = shift;
$str =~ s{<emphasis>(.+?)</emphasis>}
{$1}gs;
return $str;
};
print STDERR "\n--Post-processing makeinfo output--\n"; my $data = '';
my @apx = ();
my $apx = '';
my @nodes = ();
my $nodes = '';
# 2002-02-15 zak@mysql.com msg ("\n-- Post-processing `makeinfo --docbook` output --");
print STDERR "Discard DTD - ORA can add the appropriate DTD for their flavour of DocBook\n"; msg ("** Written to work with makeinfo version 4.0c **\n");
<STDIN>;
print STDERR "Slurp! In comes the rest of the file. :)\n"; msg ("Discarding DTD - not required by subsequent scripts");
$data = join "", <STDIN>; # <> is a magic filehandle - either reading lines from stdin or from file(s) specified on the command line
<>;
# 2002-02-15 zak@mysql.com msg ("Create an XML PI with ISO-8859-1 character encoding");
print STDERR "Add an XML processing instruction with the right character encoding\n"; $data = "<?xml version='1.0' encoding='ISO-8859-1'?>";
$data = "<?xml version='1.0' encoding='ISO-8859-1'?>" . $data;
# 2002-02-15 zak@mysql.com msg ("Get the rest of the data");
# Less than optimal - should be fixed in makeinfo $data = $data . join "", <>;
print STDERR "Put in missing <bookinfo> and <abstract>\n";
$data =~ s/<book lang="en">/<book lang="en"><bookinfo><abstract>/gs;
# 2002-02-15 zak@mysql.com msg ("Add missing <bookinfo> and <abstract> opening tags");
print STDERR "Convert existing ampersands to escape sequences \n"; # Note the absence of the g (global) pattern modified. This situation can only happen once.
$data =~ s/&(?!\w+;)/&amp;/gs; # ...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 msg ("Removing mailto: from email addresses...");
# Need to talk to Arjen about what the <n> bits are for $data =~ s/mailto://g;
print STDERR "Rework references of the notation '<n>'\n";
$data =~ s/<(\d)>/[$1]/gs; msg ("Removing INFORMALFIGURE...");
$data =~ s{<informalfigure>.+?</informalfigure>}
{}gs;
msg ("Convert ampersands to XML escape sequences ");
$data =~ s/&(?!\w+;)/&amp;/g;
# 2002-02-15 zak@mysql.com msg ("Changing @@ to @...");
# We might need to encode the high-bit characters to ensure proper representation $data =~ s/@@/@/g;
# 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 :)
print STDERR "Changing @@ to @...\n"; msg ("Rework references of the notation '<n>'");
$data =~ s/@@/@/gs; # Need to talk to Arjen about what the <n> bits are for
$data =~ s/<(\d)>/[$1]/g;
print STDERR "Changing '_' to '-' in references...\n"; msg ("Changing '_' to '-' in references...");
$data =~ s{id=\"(.+?)\"} $data =~ s{((?:id|linkend)=\".+?\")}
{"id=\"".&fix_underscore($1)."\""}gsex; {&underscore2hyphen($1)}gex;
$data =~ s{linkend=\"(.+?)\"}
{"linkend=\"".&fix_underscore($1)."\""}gsex;
print STDERR "Changing ULINK to SYSTEMITEM...\n"; msg ("Changing ULINK to SYSTEMITEM...");
$data =~ s{<ulink url=\"(.+?)\"></ulink>} $data =~ s{<ulink url=\"(.+?)\">\s*</ulink>}
{<systemitem role=\"url\">$1</systemitem>}gs; {<systemitem role=\"url\">$1</systemitem>}gs;
print STDERR "Removing INFORMALFIGURE...\n"; msg ("Adding PARA inside ENTRY...");
$data =~ s{<informalfigure>(.+?)</informalfigure>}
{}gs;
print STDERR "Adding PARA inside ENTRY...\n";
$data =~ s{<entry>(.*?)</entry>} $data =~ s{<entry>(.*?)</entry>}
{<entry><para>$1</para></entry>}gs; {<entry><para>$1</para></entry>}gs;
print STDERR "Removing mailto: from email addresses...\n"; msg ("Fixing spacing problem with titles...");
$data =~ s{mailto:} $data =~ s{(</\w+>)(\w{2,})}
{}gs; {$1 $2}gs;
print STDERR "Fixing spacing problem with titles...\n"; msg ("Adding closing / to XREF and COLSPEC tags...");
$data =~ s{</(\w+)>(\w{2,})} $data =~ s{<(xref|colspec) (.+?)>}
{</$1> $2}gs; {<$1 $2 />}gs;
# 2002-02-15 arjen@mysql.com # Probably need to strip these
print STDERR "Adding closing / to XREF...\n"; msg ('Adding "See " to XREFs that used to be @xref...');
$data =~ s{<xref (.+?)>} $data =~ s{([.'!)])\s*<xref }
{<xref $1 />}gs; {$1 See <xref }gs;
# 2002-01-30 arjen@mysql.com msg ('Adding "see " to (XREFs) that used to be (@pxref)...');
print STDERR "Removing COLSPEC...\n"; $data =~ s{([([,;])(\s*)<xref }
$data =~ s{\n *<colspec colwidth=\"[0-9]+\*\">} {$1$2see <xref }gs;
{}gs;
# 2002-01-31 arjen@mysql.com msg ("Making first row in table THEAD...");
print STDERR "Making first row in table THEAD...\n"; $data =~ s{( *)<tbody>(\s*<row>.+?</row>)}
$data =~ s{([ ]*)<tbody>\n([ ]*<row>(.+?)</row>)} {$1<thead>$2\n$1</thead>\n$1<tbody>}gs;
{$1<thead>\n$2\n$1</thead>\n$1<tbody>}gs;
# 2002-01-31 arjen@mysql.com msg ("Removing EMPHASIS inside THEAD...");
print STDERR "Removing EMPHASIS inside THEAD...\n";
$data =~ s{<thead>(.+?)</thead>} $data =~ s{<thead>(.+?)</thead>}
{"<thead>".&strip_emph($1)."</thead>"}gsex; {"<thead>".&strip_tag($1, 'emphasis')."</thead>"}gsex;
# 2002-01-31 arjen@mysql.com msg ("Removing empty PARA...");
print STDERR "Removing lf before /PARA in ENTRY...\n"; $data =~ s{<para>\s*</para>}
$data =~ s{(<entry><para>(.+?))\n(</para></entry>)} {}gs;
{$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;
# 2002-01-31 arjen@mysql.com msg ("Removing lf before /PARA in ENTRY...");
print STDERR "Removing empty PARA in ENTRY...\n"; $data =~ s{\n(</para></entry>)}
$data =~ s{<entry><para></para></entry>} {$1}gs;
{<entry></entry>}gs;
# 2002-01-31 arjen@mysql.com msg ("Removing whitespace before /PARA if not on separate line...");
print STDERR "Removing PARA around INDEXENTRY if no text in PARA...\n"; $data =~ s{(\S+)[\t ]+</para>}
$data =~ s{<para>((<indexterm role=\"(cp|fn)\">(<(primary|secondary)>[^<]+?</(primary|secondary)>)+?</indexterm>)+?)[\n]*</para>[\n]*} {$1</para>}g;
{$1\n}gs;
# ----- 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", @apx = ("Users", "MySQL Testimonials", "News", "GPL-license", "LGPL-license");
"GPL-license", "LGPL-license");
foreach $apx (@apx) { foreach $apx (@apx) {
print STDERR "Removing appendix $apx...\n"; msg ("Removing appendix $apx...");
$data =~ s{<appendix id=\"$apx\">(.+?)</appendix>} $data =~ s{<appendix id=\"$apx\">(.+?)</appendix>}
{}gs; {}gs;
print STDERR " ... Building list of removed nodes ...\n"; # Skip to next appendix regex if the regex did not match anything
foreach(split "\n", $&) { next unless (defined $&);
push @nodes, $2 if(/<(\w+) id=\"(.+?)\">/)
}; msg ("...Building list of removed nodes...");
};
# Split the last bracketed regex match into an array
print STDERR "Fixing references to removed nodes...\n"; # Extract the node names from the tags and push them into an array
foreach $node (@nodes) { foreach (split "\n", $&) {
$web = $node; push @nodes, $1 if /<\w+ id=\"(.+?)\">/
$web =~ s/[ ]/_/; }
$web = "http://www.mysql.com/doc/" . }
(join "/", (split //, $web)[0..1])."/$web.html";
print STDERR "$node -> $web\n"; # 2002-02-22 arjen@mysql.com (added fix " /" to end of regex, to make it match)
$data =~ s{<(\w+) linkend=\"$node\">} msg ("Fixing references to removed nodes...");
{$web}gs; # 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; 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 :)
#! /usr/local/bin/perl #! /usr/bin/perl -w
# O'Reilly's Perl script to chop mysql.xml into separate ch/apps/index files. # 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. # 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. # Breaks the MySQL reference manual into chapters, appendices, and indexes.
my $input_file; use strict;
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";
}
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. mkdir $directory unless -d $directory;
exit if not defined $line;
if ($line =~ /(?:.*)(<chapter.*)/i ) { while (defined $line) {
if ($line =~ /(<chapter.+)/i ) {
$start_text = $1; $start_text = $1;
$output_name = &make_chapter_name($chap_num); $output_name = sprintf("ch%02d%s", $chap_num, $ext);
$chap_num++; ++$chap_num;
&process_file("chapter"); &process_file("chapter");
} }
elsif ($line =~ /(?:.*)(<appendix.*)/i ) { elsif ($line =~ /(<appendix.+)/i ) {
$start_text = $1 ; $start_text = $1 ;
$output_name = &make_appendix_name($app_letter); $output_name = "app$app_letter$ext";
$app_letter++; ++$app_letter;
&process_file("appendix"); &process_file("appendix");
} }
elsif ($line =~ /(?:.*)(<index\s+id=")(.*?)(">.*)/i ) { elsif ($line =~ /(<index\s+id=")(.*?)(">.*)/i ) {
$start_text = $1 . $2 . $3; $start_text = $1 . $2 . $3;
$output_name = lc($2) . ".xml"; $output_name = lc($2) . $ext;
&process_file("index"); &process_file("index");
} }
else { else {
# Automatically skips junk in between chapters, appendices, # Skip junk in between chapters, appendices and indexes.
# and indexes. $line = <>;
$line = <INPUT_FILE>;
} }
} }
sub make_chapter_name { sub process_file {
my $num = shift; my $marker = shift;
my $name = "ch" . sprintf("%02d", $num) . ".xml"; my $path = "$directory/$output_name";
return $name;
}
sub make_appendix_name { open (OUTPUT_FILE, ">$path") or die "Cannot open $path";
my $letter = shift;
my $name = "app" . sprintf("%s", $letter) . ".xml";
return $name;
}
sub process_file { print STDERR "Creating $path\n";
my $marker=shift;
open (OUTPUT_FILE, '>' . $directory . "/" . $output_name) or # Print out XML PI
die "Cannot open $output_name"; 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 whatever happened to appear at the end of the previous chapter.
print OUTPUT_FILE $start_text . "\n" if $start_text; print OUTPUT_FILE "$start_text\n" if $start_text;
while (1) {
$line = <INPUT_FILE>; while (defined $line) {
exit if not defined $line; $line = <>;
# Note: Anything after the terminating marker is lost, just like # Note: Anything after the terminating marker is lost, just like
# lines in between chapters. # lines in between chapters.
if ($line =~ /(.*<\/\s*$marker\s*>)/i ) { if ($line =~ /(.*<\/\s*$marker\s*>)/i ) {
print OUTPUT_FILE $1 . "\n" if $1; print OUTPUT_FILE "$1\n" if $1;
close OUTPUT_FILE; close OUTPUT_FILE;
return; return;
} }
......
...@@ -18,3 +18,7 @@ ...@@ -18,3 +18,7 @@
# See if the XML output is well-formed # See if the XML output is well-formed
xmlwf mysql.xml xmlwf mysql.xml
# If all is well, keep processing
cat mysql.xml | Support/colspec-fix.pl | Support/docbook-split;
@c This file is autogenerated by the Makefile
@set mysql_version 4.0.2
@set default_port 3306
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -757,10 +757,9 @@ Large server clusters using replication are in production use, with ...@@ -757,10 +757,9 @@ Large server clusters using replication are in production use, with
good results. Work on enhanced replication features is continuing good results. Work on enhanced replication features is continuing
in @code{MySQL} 4.0. 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 The @code{InnoDB} transactional table handler has now been declared
stable in the @code{MySQL} 3.23 development tree, starting from stable in the @code{MySQL} 3.23 tree, starting from version 3.23.49.
version 3.23.47.
@code{InnoDB} is being used in large, heavy load production systems. @code{InnoDB} is being used in large, heavy load production systems.
@item @code{BDB} tables -- Gamma @item @code{BDB} tables -- Gamma
...@@ -1707,7 +1706,7 @@ development of the @code{MySQL} database. ...@@ -1707,7 +1706,7 @@ development of the @code{MySQL} database.
@code{MySQL} partnership logos may only be used by companies and persons @code{MySQL} partnership logos may only be used by companies and persons
having a written partnership agreement with @code{MySQL AB}. Partnerships having a written partnership agreement with @code{MySQL AB}. Partnerships
include certification as a @code{MySQL} trainer or consultant. include certification as a @code{MySQL} trainer or consultant.
Please see @xref{Business Services Partnering,,Partnering}. Please see @ref{Business Services Partnering,,Partnering}.
@node Using MySQL word in presentations, Using MySQL word in company and product names, MySQL AB Partnership Logos, MySQL AB Logos and Trademarks @node Using MySQL word in presentations, Using MySQL word in company and product names, MySQL AB Partnership Logos, MySQL AB Logos and Trademarks
...@@ -2496,7 +2495,7 @@ perhaps solved) the problem. ...@@ -2496,7 +2495,7 @@ perhaps solved) the problem.
For information on reporting bugs in @strong{MyODBC}, see @ref{ODBC Problems}. For information on reporting bugs in @strong{MyODBC}, see @ref{ODBC Problems}.
For solutions to some common problems, see @xref{Problems}. For solutions to some common problems, see @ref{Problems}.
When answers are sent to you individually and not to the mailing list, When answers are sent to you individually and not to the mailing list,
it is considered good etiquette to summarise the answers and send the it is considered good etiquette to summarise the answers and send the
...@@ -5276,7 +5275,7 @@ isn't good at many things (it is!) or that it isn't faster than MySQL Server ...@@ -5276,7 +5275,7 @@ isn't good at many things (it is!) or that it isn't faster than MySQL Server
under certain conditions. We would just like to see a fair test where under certain conditions. We would just like to see a fair test where
they are very good so that we could get some friendly competition going! they are very good so that we could get some friendly competition going!
For more information about our benchmarks suite @xref{MySQL Benchmarks}. For more information about our benchmarks suite, see @ref{MySQL Benchmarks}.
We are working on an even better benchmark suite, including multi user We are working on an even better benchmark suite, including multi user
tests, and a better documentation of what the individual tests really tests, and a better documentation of what the individual tests really
...@@ -15347,7 +15346,7 @@ starts up. Changes to the grant tables take effect as indicated in ...@@ -15347,7 +15346,7 @@ starts up. Changes to the grant tables take effect as indicated in
When you modify the contents of the grant tables, it is a good idea to make When you modify the contents of the grant tables, it is a good idea to make
sure that your changes set up privileges the way you want. For help in sure that your changes set up privileges the way you want. For help in
diagnosing problems, see @ref{Access denied}. For advice on security issues, diagnosing problems, see @ref{Access denied}. For advice on security issues,
@pxref{Security}. see @ref{Security}.
A useful A useful
diagnostic tool is the @code{mysqlaccess} script, which Yves Carlier has diagnostic tool is the @code{mysqlaccess} script, which Yves Carlier has
...@@ -16594,7 +16593,7 @@ dropped only with explicit @code{REVOKE} commands or by manipulating the ...@@ -16594,7 +16593,7 @@ dropped only with explicit @code{REVOKE} commands or by manipulating the
MySQL grant tables. MySQL grant tables.
@end itemize @end itemize
For a description of using @code{REQUIRE}, see @xref{Secure connections}. For a description of using @code{REQUIRE}, see @ref{Secure connections}.
@node User names, Privilege changes, GRANT, User Account Management @node User names, Privilege changes, GRANT, User Account Management
@subsection MySQL User Names and Passwords @subsection MySQL User Names and Passwords
...@@ -17476,7 +17475,7 @@ minimum needed to restore it. Currenlty only works for @code{MyISAM} ...@@ -17476,7 +17475,7 @@ minimum needed to restore it. Currenlty only works for @code{MyISAM}
tables. For @code{MyISAM} table, copies @code{.frm} (definition) and tables. For @code{MyISAM} table, copies @code{.frm} (definition) and
@code{.MYD} (data) files. The index file can be rebuilt from those two. @code{.MYD} (data) files. The index file can be rebuilt from those two.
Before using this command, please see @xref{Backup}. Before using this command, please see @ref{Backup}.
During the backup, read lock will be held for each table, one at time, During the backup, read lock will be held for each table, one at time,
as they are being backed up. If you want to backup several tables as as they are being backed up. If you want to backup several tables as
...@@ -23257,11 +23256,11 @@ it is not the only one. For example, if you already have a snapshot ...@@ -23257,11 +23256,11 @@ it is not the only one. For example, if you already have a snapshot
of the master, and of the master, and
the master already has server id set and binary logging enabled, one can the master already has server id set and binary logging enabled, one can
set up a slave without shutting the master down or even blocking the updates. set up a slave without shutting the master down or even blocking the updates.
Please refer to @xref{Replication FAQ}. for more details. For more details, please see @ref{Replication FAQ}.
If you want to become a real MySQL replication guru, we suggest that you If you want to become a real MySQL replication guru, we suggest that you
begin with studing, pondering, and trying all commands begin with studing, pondering, and trying all commands
mentioned in @xref{Replication SQL}. You should also familiarize yourself mentioned in @ref{Replication SQL}. You should also familiarize yourself
with replication startup options in @code{my.cnf} in with replication startup options in @code{my.cnf} in
@xref{Replication Options}. @xref{Replication Options}.
...@@ -31054,7 +31053,7 @@ relevance - similarity measure between the text in columns ...@@ -31054,7 +31053,7 @@ relevance - similarity measure between the text in columns
positive floating-point number. Zero relevance means no similarity. positive floating-point number. Zero relevance means no similarity.
@code{MATCH ... AGAINST()} is available in MySQL version @code{MATCH ... AGAINST()} is available in MySQL version
3.23.23 or later. @code{IN BOOLEAN MODE} extension was added in version 3.23.23 or later. @code{IN BOOLEAN MODE} extension was added in version
4.0.1. For details and usage examples @pxref{Fulltext Search}. 4.0.1. For details and usage examples, see @ref{Fulltext Search}.
@end table @end table
@node Case Sensitivity Operators, , String comparison functions, String functions @node Case Sensitivity Operators, , String comparison functions, String functions
...@@ -44272,7 +44271,7 @@ This chapter describes a lot of things that you need to know when ...@@ -44272,7 +44271,7 @@ This chapter describes a lot of things that you need to know when
working on the MySQL code. If you plan to contribute to MySQL working on the MySQL code. If you plan to contribute to MySQL
development, want to have access to the bleeding-edge in-between development, want to have access to the bleeding-edge in-between
versions code, or just want to keep track of development, follow the versions code, or just want to keep track of development, follow the
instructions in @xref{Installing source tree}. instructions in @ref{Installing source tree}.
If you are interested in MySQL internals, you should also subscribe If you are interested in MySQL internals, you should also subscribe
to our @code{internals} mailing list. This list is relatively low to our @code{internals} mailing list. This list is relatively low
traffic. For details on how to subscribe, please see traffic. For details on how to subscribe, please see
...@@ -47600,6 +47599,10 @@ Utility from Artronic to stop MySQL on win9x. ...@@ -47600,6 +47599,10 @@ Utility from Artronic to stop MySQL on win9x.
@item @uref{http://bardo.hyperlink.cz/mysqlmon/} @item @uref{http://bardo.hyperlink.cz/mysqlmon/}
A light weight GUI client for Windows. A light weight GUI client for Windows.
@item @uref{http://www.mysqlfront.de/}
MySQLfront is a very nice Windows client with lots of useful features.
By Angsar Becker.
@item @uref{http://www.dbtools.com.br/} @item @uref{http://www.dbtools.com.br/}
Dbtools, a tool to manage MySQL databases. Currently only for Windows. Dbtools, a tool to manage MySQL databases. Currently only for Windows.
Some features: Some features:
...@@ -291,6 +291,11 @@ WWW (@uref{http://mysql.tecnoera.com/}) ...@@ -291,6 +291,11 @@ WWW (@uref{http://mysql.tecnoera.com/})
@image{Flags/chile} Chile [Vision] @@ @image{Flags/chile} Chile [Vision] @@
WWW (@uref{http://mysql.vision.cl/}) 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 @end itemize
@strong{Asia:} @strong{Asia:}
......
...@@ -2687,6 +2687,13 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user) ...@@ -2687,6 +2687,13 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user)
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
if (want_access & GRANT_ACL) if (want_access & GRANT_ACL)
global.append(" WITH GRANT OPTION",18); global.append(" WITH GRANT OPTION",18);
else if (acl_user->questions)
{
char buff[65], *p; // just as in int2str
global.append(" WITH MAX_QUERIES_PER_HOUR = ",29);
p=int2str(acl_user->questions,buff,10);
global.append(buff,p-buff);
}
thd->packet.length(0); thd->packet.length(0);
net_store_data(&thd->packet,global.ptr(),global.length()); net_store_data(&thd->packet,global.ptr(),global.length());
if (my_net_write(&thd->net,(char*) thd->packet.ptr(), if (my_net_write(&thd->net,(char*) thd->packet.ptr(),
......
...@@ -6963,13 +6963,16 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, ...@@ -6963,13 +6963,16 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{ {
List<Item> field_list; List<Item> field_list;
Item *item; Item *item;
List<Item> item_list;
THD *thd=join->thd; THD *thd=join->thd;
MYSQL_LOCK *save_lock;
SELECT_LEX *select_lex = &(join->thd->lex.select_lex); SELECT_LEX *select_lex = &(join->thd->lex.select_lex);
select_result *result=join->result;
DBUG_ENTER("select_describe"); DBUG_ENTER("select_describe");
/* Don't log this into the slow query log */ /* Don't log this into the slow query log */
select_lex->options&= ~(QUERY_NO_INDEX_USED | QUERY_NO_GOOD_INDEX_USED); 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("table",NAME_LEN));
field_list.push_back(new Item_empty_string("type",10)); field_list.push_back(new Item_empty_string("type",10));
...@@ -6985,24 +6988,22 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, ...@@ -6985,24 +6988,22 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
item->maybe_null=1; item->maybe_null=1;
field_list.push_back(new Item_real("rows",0.0,0,10)); field_list.push_back(new Item_real("rows",0.0,0,10));
field_list.push_back(new Item_empty_string("Extra",255)); 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; return;
} }
char buff[512],*buff_ptr;
String tmp(buff,sizeof(buff)),*packet= &thd->packet;
if (message) if (message)
{ {
packet->length(0); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_empty_string("",0));
net_store_null(packet); item_list.push_back(new Item_string(message,strlen(message)));
net_store_data(packet,message,strlen(message)); if (result->send_data(item_list))
if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length())) result->send_error(0,NullS);
DBUG_VOID_RETURN;
} }
else else
{ {
...@@ -7011,69 +7012,70 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, ...@@ -7011,69 +7012,70 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{ {
JOIN_TAB *tab=join->join_tab+i; JOIN_TAB *tab=join->join_tab+i;
TABLE *table=tab->table; 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) if (tab->type == JT_ALL && tab->select && tab->select->quick)
tab->type= JT_RANGE; tab->type= JT_RANGE;
packet->length(0); item_list.push_back(new Item_string(table->table_name,strlen(table->table_name)));
net_store_data(packet,table->table_name); item_list.push_back(new Item_string(join_type_str[tab->type],strlen(join_type_str[tab->type])));
net_store_data(packet,join_type_str[tab->type]); tmp1.length(0); tmp2.length(0);
tmp.length(0);
key_map bits; key_map bits;
uint j; uint j;
for (j=0,bits=tab->keys ; bits ; j++,bits>>=1) for (j=0,bits=tab->keys ; bits ; j++,bits>>=1)
{ {
if (bits & 1) if (bits & 1)
{ {
if (tmp.length()) if (tmp1.length())
tmp.append(','); tmp1.append(',');
tmp.append(table->key_info[j].name); tmp1.append(table->key_info[j].name);
} }
} }
if (tmp.length()) if (tmp1.length())
net_store_data(packet,tmp.ptr(),tmp.length()); item_list.push_back(new Item_string(tmp1.ptr(),tmp1.length()));
else else
net_store_null(packet); item_list.push_back(new Item_null());
if (tab->ref.key_parts) if (tab->ref.key_parts)
{ {
net_store_data(packet,table->key_info[tab->ref.key].name); item_list.push_back(new Item_string(table->key_info[tab->ref.key].name,strlen(table->key_info[tab->ref.key].name)));
net_store_data(packet,(uint32) tab->ref.key_length); item_list.push_back(new Item_int((int) tab->ref.key_length));
tmp.length(0);
for (store_key **ref=tab->ref.key_copy ; *ref ; ref++) for (store_key **ref=tab->ref.key_copy ; *ref ; ref++)
{ {
if (tmp.length()) if (tmp2.length())
tmp.append(','); tmp2.append(',');
tmp.append((*ref)->name()); 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) else if (tab->type == JT_NEXT)
{ {
net_store_data(packet,table->key_info[tab->index].name); item_list.push_back(new Item_string(table->key_info[tab->index].name,strlen(table->key_info[tab->index].name)));
net_store_data(packet,(uint32) table->key_info[tab->index].key_length); item_list.push_back(new Item_int((int) table->key_info[tab->index].key_length));
net_store_null(packet); item_list.push_back(new Item_null());
} }
else if (tab->select && tab->select->quick) else if (tab->select && tab->select->quick)
{ {
net_store_data(packet,table->key_info[tab->select->quick->index].name);; item_list.push_back(new Item_string(table->key_info[tab->select->quick->index].name,strlen(table->key_info[tab->select->quick->index].name)));
net_store_data(packet,(uint32) tab->select->quick->max_used_key_length); item_list.push_back(new Item_int((int) tab->select->quick->max_used_key_length));
net_store_null(packet); item_list.push_back(new Item_null());
} }
else else
{ {
net_store_null(packet); item_list.push_back(new Item_null());
net_store_null(packet); item_list.push_back(new Item_null());
net_store_null(packet); item_list.push_back(new Item_null());
} }
sprintf(buff,"%.0f",join->best_positions[i].records_read); sprintf(bufff,"%.0f",join->best_positions[i].records_read);
net_store_data(packet,buff); item_list.push_back(new Item_string(bufff,strlen(bufff)));
my_bool key_read=table->key_read; my_bool key_read=table->key_read;
if (tab->type == JT_NEXT && if (tab->type == JT_NEXT &&
((table->used_keys & ((key_map) 1 << tab->index)))) ((table->used_keys & ((key_map) 1 << tab->index))))
key_read=1; key_read=1;
buff_ptr=buff;
if (tab->info) 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) else if (tab->select)
{ {
if (tab->use_quick == 2) if (tab->use_quick == 2)
...@@ -7127,16 +7129,20 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, ...@@ -7127,16 +7129,20 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
} }
buff_ptr=strmov(buff_ptr,"Distinct"); buff_ptr=strmov(buff_ptr,"Distinct");
} }
net_store_data(packet,buff,(uint) (buff_ptr - buff)); item_list.push_back(new Item_string(buff,(uint) (buff_ptr - buff)));
if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
DBUG_VOID_RETURN; /* Purecov: Inspected */
// For next iteration // For next iteration
used_tables|=table->map; used_tables|=table->map;
if (result->send_data(item_list))
result->send_error(0,NullS);
} }
} }
if (!join->thd->lex.select->next) 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; DBUG_VOID_RETURN;
} }
......
...@@ -31,10 +31,11 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -31,10 +31,11 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
ORDER *order; ORDER *order;
List<Item> item_list; List<Item> item_list;
TABLE *table; TABLE *table;
int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0;
int res;
TABLE_LIST result_table_list; TABLE_LIST result_table_list;
TMP_TABLE_PARAM tmp_table_param; TMP_TABLE_PARAM tmp_table_param;
select_union *union_result; select_union *union_result;
int res;
DBUG_ENTER("mysql_union"); DBUG_ENTER("mysql_union");
/* Fix tables 'to-be-unioned-from' list to point at opened tables */ /* 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) ...@@ -70,33 +71,26 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
lex_sl=0; lex_sl=0;
order=0; order=0;
} }
if (lex->select_lex.options & SELECT_DESCRIBE) if (describe)
{ {
for (sl= &lex->select_lex; sl; sl=sl->next) Item *item;
{ item_list.push_back(new Item_empty_string("table",NAME_LEN));
lex->select=sl; item_list.push_back(new Item_empty_string("type",10));
thd->offset_limit=sl->offset_limit; item_list.push_back(item=new Item_empty_string("possible_keys",
thd->select_limit=sl->select_limit+sl->offset_limit; NAME_LEN*MAX_KEY));
if (thd->select_limit < sl->select_limit) item->maybe_null=1;
thd->select_limit= HA_POS_ERROR; // no limit item_list.push_back(item=new Item_empty_string("key",NAME_LEN));
if (thd->select_limit == HA_POS_ERROR) item->maybe_null=1;
sl->options&= ~OPTION_FOUND_ROWS; item_list.push_back(item=new Item_int("key_len",0,3));
res=mysql_select(thd, (TABLE_LIST*) sl->table_list.first, item->maybe_null=1;
sl->item_list, item_list.push_back(item=new Item_empty_string("ref",
sl->where, NAME_LEN*MAX_REF_PARTS));
((sl->braces) ? item->maybe_null=1;
(ORDER *) sl->order_list.first : (ORDER *) 0), item_list.push_back(new Item_real("rows",0.0,0,10));
(ORDER*) sl->group_list.first, item_list.push_back(new Item_empty_string("Extra",255));
sl->having,
(ORDER*) NULL,
(sl->options | thd->options | SELECT_NO_UNLOCK |
SELECT_DESCRIBE),
result);
}
DBUG_RETURN(0);
} }
else
{ {
Item *item; Item *item;
List_iterator<Item> it(lex->select_lex.item_list); List_iterator<Item> it(lex->select_lex.item_list);
...@@ -113,7 +107,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -113,7 +107,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
bzero((char*) &tmp_table_param,sizeof(tmp_table_param)); bzero((char*) &tmp_table_param,sizeof(tmp_table_param));
tmp_table_param.field_count=item_list.elements; tmp_table_param.field_count=item_list.elements;
if (!(table=create_tmp_table(thd, &tmp_table_param, item_list, if (!(table=create_tmp_table(thd, &tmp_table_param, item_list,
(ORDER*) 0, !lex->union_option, (ORDER*) 0, !describe & !lex->union_option,
1, 0, 1, 0,
(lex->select_lex.options | thd->options | (lex->select_lex.options | thd->options |
TMP_TABLE_ALL_COLUMNS)))) TMP_TABLE_ALL_COLUMNS))))
...@@ -130,7 +124,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -130,7 +124,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
res= -1; res= -1;
goto exit; 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->offset_limit=sl->offset_limit;
thd->select_limit=sl->select_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) ...@@ -146,7 +142,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
(ORDER*) sl->group_list.first, (ORDER*) sl->group_list.first,
sl->having, sl->having,
(ORDER*) NULL, (ORDER*) NULL,
sl->options | thd->options | SELECT_NO_UNLOCK, sl->options | thd->options | SELECT_NO_UNLOCK | ((describe) ? SELECT_DESCRIBE : 0),
union_result); union_result);
if (res) if (res)
goto exit; goto exit;
...@@ -187,6 +183,8 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -187,6 +183,8 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
if (thd->select_limit == HA_POS_ERROR) if (thd->select_limit == HA_POS_ERROR)
thd->options&= ~OPTION_FOUND_ROWS; thd->options&= ~OPTION_FOUND_ROWS;
} }
if (describe)
thd->select_limit= HA_POS_ERROR; // no limit
res=mysql_select(thd,&result_table_list, res=mysql_select(thd,&result_table_list,
item_list, NULL, /*ftfunc_list,*/ order, item_list, NULL, /*ftfunc_list,*/ order,
(ORDER*) NULL, NULL, (ORDER*) NULL, (ORDER*) NULL, NULL, (ORDER*) NULL,
...@@ -222,7 +220,7 @@ select_union::~select_union() ...@@ -222,7 +220,7 @@ select_union::~select_union()
int select_union::prepare(List<Item> &list) 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, my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT,
ER(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),MYF(0)); ER(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT),MYF(0));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment