Commit 6e4eda35 authored by hf@bisonxp.(none)'s avatar hf@bisonxp.(none)

Merge abotchkov@work.mysql.com:/home/bk/mysql-4.1

into bisonxp.(none):/home/hf/work/mysql-4.1
parents 253c6419 6b20a480
...@@ -479,3 +479,4 @@ vio/test-sslclient ...@@ -479,3 +479,4 @@ vio/test-sslclient
vio/test-sslserver vio/test-sslserver
vio/viotest-ssl vio/viotest-ssl
tests/client_test tests/client_test
mysys/charset2html
...@@ -9,6 +9,7 @@ akishkin@work.mysql.com ...@@ -9,6 +9,7 @@ akishkin@work.mysql.com
arjen@co3064164-a.bitbike.com arjen@co3064164-a.bitbike.com
arjen@fred.bitbike.com arjen@fred.bitbike.com
arjen@george.bitbike.com arjen@george.bitbike.com
bar@bar.mysql.r18.ru
bar@bar.udmsearch.izhnet.ru bar@bar.udmsearch.izhnet.ru
bar@gw.udmsearch.izhnet.ru bar@gw.udmsearch.izhnet.ru
bell@sanja.is.com.ua bell@sanja.is.com.ua
......
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIDaDCCAtGgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCRkkx MIIDQjCCAqugAwIBAgIBADANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJSVTET
EzARBgNVBAgTClNvbWUtU3RhdGUxETAPBgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQK MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoT
ExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqG CE15U1FMIEFCMQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1
SIb3DQEJARYOdG9udUBteXNxbC5jb20wHhcNMDEwNjI0MTU0MzE4WhcNMDIwNjI0 c0BteXNxbC5jb20wHhcNMDIwODAyMjE1NTUzWhcNMDMwODAyMjE1NTUzWjB6MQsw
MTU0MzE4WjCBhTELMAkGA1UEBhMCRkkxEzARBgNVBAgTClNvbWUtU3RhdGUxETAP CQYDVQQGEwJSVTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1
BgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQKExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYD cmcxETAPBgNVBAoTCE15U1FMIEFCMQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG
VQQDEwtUb251IFNhbXVlbDEdMBsGCSqGSIb3DQEJARYOdG9udUBteXNxbC5jb20w 9w0BCQEWEHdhbHJ1c0BteXNxbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJz9FCvWX8c+Xr6mxzfZvPainIPT AoGBALFLPDNDeq213XvhBP3TxhC0NcGKJ/sWzaHkNmunQ8sTbV8AfdFafvP7cSHk
ODNsQ0f2kAs0epP+peUn4LHxLybp2dkUHTtJLXyUyk7cXfnUd+0fRazK2/Vz48bZ O3jh7smpVWnxmcIbq1dpsbb7X5vQVc8ru07Z8VhCJWx6H8kgI95Am6wbm2ho2Lok
swGwg9Rhg3P02Ku+CMWYulHzN6uVRzfrDUSkDoky2DGL3A6B8P4JRc2qcr+kjhh5 9ODG8f/lA4kLv8Vo0hqtfV5T1mnZpSzkh6G4b0yPzHu8gtObAgMBAAGjgdcwgdQw
6r1VJlXs9N3DqeEdAgMBAAGjgeUwgeIwHQYDVR0OBBYEFKUK1nK13+TCK3sHXtNN HQYDVR0OBBYEFNnYan2rzhBiGhb86Wr03PFmrNC5MIGkBgNVHSMEgZwwgZmAFNnY
Ugfhg2t/MIGyBgNVHSMEgaowgaeAFKUK1nK13+TCK3sHXtNNUgfhg2t/oYGLpIGI an2rzhBiGhb86Wr03PFmrNC5oX6kfDB6MQswCQYDVQQGEwJSVTETMBEGA1UECBMK
MIGFMQswCQYDVQQGEwJGSTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMI U29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoTCE15U1FMIEFC
SGVsc2lua2kxGTAXBgNVBAoTEE15U1FMIEZpbmxhbmQgQUIxFDASBgNVBAMTC1Rv MQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1c0BteXNxbC5j
bnUgU2FtdWVsMR0wGwYJKoZIhvcNAQkBFg50b251QG15c3FsLmNvbYIBADAMBgNV b22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQADeMZEA5Rh4PDq
HRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAI+YJKoa+IP3WYr8iLcVk5j7lZ9D DmS9cYyogjb9gkuLHeo/pqfU8iSZVsSaf6Uqh6TWKQOuK3I4R1K8iMo4cW6LhxxH
GS8reuALafnE7VX1xMlXP5EnJjT7YYYmtiB2tYj7+eQ+ajRXWWyY5NtO5ob+dm8z HLFrVIQn6xhLvfC0T6Zl7G0w6rAY2+QlbEhjnsgHtLGrB5xjSYLq6Uz3gAMbEsA4
OBX43v08C5vNSAFpwZWTutzb0nSd8kOABGJ04MBDJZk8QNkTfU6C7c3ZJ/gW8Guv rCpQJECDe2PzoUXZj9mE2sdljiGcvQ==
I+cxfz6oCYEfKLBN
-----END CERTIFICATE----- -----END CERTIFICATE-----
Certificate: Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 3 (0x3) Serial Number: 2 (0x2)
Signature Algorithm: md5WithRSAEncryption Signature Algorithm: md5WithRSAEncryption
Issuer: C=FI, ST=Some-State, L=Helsinki, O=MySQL Finland AB, CN=Tonu Samuel/Email=tonu@mysql.com Issuer: C=RU, ST=Some-State, L=Orenburg, O=MySQL AB, CN=Walrus/Email=walrus@mysql.com
Validity Validity
Not Before: Jun 24 16:03:20 2001 GMT Not Before: Aug 2 22:08:07 2002 GMT
Not After : Jun 24 16:03:20 2002 GMT Not After : Aug 2 22:08:07 2003 GMT
Subject: C=EE, ST=Some-State, L=Tallinn, O=MySQL demo client certificate, CN=Tonu Samuel/Email=tonu@mysql.com Subject: C=RU, L=orenburg, O=MySQL AB, OU=client, CN=walrus/Email=walrus@mysql.com
Subject Public Key Info: Subject Public Key Info:
Public Key Algorithm: rsaEncryption Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit) RSA Public Key: (1024 bit)
Modulus (1024 bit): Modulus (1024 bit):
00:e8:d4:52:cd:4e:bb:96:16:3a:f0:89:6b:90:4c: 00:ab:27:e4:1e:f0:34:8b:a9:50:df:0a:b0:55:20:
db:e0:30:75:5a:02:72:62:bf:ed:da:be:09:e8:80: b3:1f:0f:cf:f1:51:1e:66:48:a6:f8:4e:0d:d4:49:
db:80:54:30:d6:75:ed:e3:10:a5:15:44:5b:29:91: f4:ea:d3:41:6b:7e:06:78:3c:29:9d:8e:d3:33:4d:
12:fe:0c:b7:76:4d:e9:5f:56:5c:45:3c:ad:b2:71: 0b:fc:34:4d:18:88:48:61:af:11:da:db:84:c0:92:
2d:6a:7a:cb:bc:04:80:08:74:d6:7d:f6:7c:5c:76: 91:81:6a:b6:21:d5:8e:9b:f2:6f:d8:06:ad:d6:77:
db:35:c4:f6:f5:d8:d4:89:9f:9d:cc:3f:4e:3f:73: f6:8b:bd:07:d5:b7:fb:c6:f0:64:e6:3f:58:f0:6a:
c1:3e:41:7e:4e:09:bf:ea:1a:d9:a2:13:0d:d1:0c: 1e:81:73:97:6d:9d:c6:ec:b0:5e:1e:c6:57:82:b0:
da:d8:f4:9b:b8:54:21:17:ae:d7:b3:02:61:87:a9: 98:9c:ae:26:84:43:0d:98:6c:b4:d8:52:13:70:15:
01:ff:f4:fe:9c:7a:fc:67:43 79:61:40:84:19:ea:f6:63:3f
Exponent: 65537 (0x10001) Exponent: 65537 (0x10001)
X509v3 extensions: X509v3 extensions:
X509v3 Basic Constraints: X509v3 Basic Constraints:
...@@ -28,40 +28,39 @@ Certificate: ...@@ -28,40 +28,39 @@ Certificate:
Netscape Comment: Netscape Comment:
OpenSSL Generated Certificate OpenSSL Generated Certificate
X509v3 Subject Key Identifier: X509v3 Subject Key Identifier:
BC:FB:BB:8F:C4:85:BA:5F:A8:F2:C3:3D:C9:0F:DB:16:E7:13:BC:B2 A6:D9:70:92:AC:2B:F6:48:A5:FB:29:CF:78:4A:57:B5:3B:43:97:EE
X509v3 Authority Key Identifier: X509v3 Authority Key Identifier:
keyid:A5:0A:D6:72:B5:DF:E4:C2:2B:7B:07:5E:D3:4D:52:07:E1:83:6B:7F keyid:D9:D8:6A:7D:AB:CE:10:62:1A:16:FC:E9:6A:F4:DC:F1:66:AC:D0:B9
DirName:/C=FI/ST=Some-State/L=Helsinki/O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@mysql.com DirName:/C=RU/ST=Some-State/L=Orenburg/O=MySQL AB/CN=Walrus/Email=walrus@mysql.com
serial:00 serial:00
Signature Algorithm: md5WithRSAEncryption Signature Algorithm: md5WithRSAEncryption
1c:e0:87:2c:2f:b3:a4:39:44:7f:96:7b:2f:c9:1f:91:84:0b: 15:96:43:10:89:e0:a6:82:a4:91:0f:7e:2e:d8:80:54:ba:63:
9f:d0:0a:f8:40:70:d0:dd:bd:91:0a:c6:d5:ac:8f:51:77:9c: e2:8f:b0:aa:ea:be:35:2c:8f:0d:03:a9:86:2e:32:51:33:8a:
35:28:e8:b6:5f:57:9e:5c:b5:9b:ae:5d:3d:7c:05:45:2e:89: cc:b2:5e:b3:12:cb:b7:42:06:40:89:ce:92:87:40:f1:6a:79:
3a:03:e1:f2:00:cb:c1:ed:3e:48:3b:5f:4e:50:d2:b4:a5:36: 0c:3e:00:1d:06:bf:3c:c1:da:f6:3b:e1:42:e6:55:4c:31:e1:
0f:1a:dc:79:49:1e:03:2f:27:c1:e4:62:d6:ef:3f:ab:2e:ab: b9:79:f3:99:14:f6:68:9e:67:2b:e3:71:88:6b:2b:e2:08:bd:
dd:e5:bc:cb:20:a3:dd:ab:81:69:26:9c:03:42:1b:4c:b7:aa: 67:79:ea:0e:7d:34:0d:41:22:3a:f4:8f:4d:51:07:6f:5a:44:
57:6d:2a:de:c0:5e:6e:74:d0:83:90:ec:ad:bb:ba:f0:cc:cf: 34:05:d1:b3:ca:cf:09:2b:43:25:a1:7f:ac:f4:54:f1:e3:93:
41:3d 47:44
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCRkkx MIIDajCCAtOgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJSVTET
EzARBgNVBAgTClNvbWUtU3RhdGUxETAPBgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQK MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoT
ExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqG CE15U1FMIEFCMQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1
SIb3DQEJARYOdG9udUBteXNxbC5jb20wHhcNMDEwNjI0MTYwMzIwWhcNMDIwNjI0 c0BteXNxbC5jb20wHhcNMDIwODAyMjIwODA3WhcNMDMwODAyMjIwODA3WjB2MQsw
MTYwMzIwWjCBkTELMAkGA1UEBhMCRUUxEzARBgNVBAgTClNvbWUtU3RhdGUxEDAO CQYDVQQGEwJSVTERMA8GA1UEBxMIb3JlbmJ1cmcxETAPBgNVBAoTCE15U1FMIEFC
BgNVBAcTB1RhbGxpbm4xJjAkBgNVBAoTHU15U1FMIGRlbW8gY2xpZW50IGNlcnRp MQ8wDQYDVQQLEwZjbGllbnQxDzANBgNVBAMTBndhbHJ1czEfMB0GCSqGSIb3DQEJ
ZmljYXRlMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqGSIb3DQEJARYOdG9u ARYQd2FscnVzQG15c3FsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
dUBteXNxbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOjUUs1Ou5YW qyfkHvA0i6lQ3wqwVSCzHw/P8VEeZkim+E4N1En06tNBa34GeDwpnY7TM00L/DRN
OvCJa5BM2+AwdVoCcmK/7dq+CeiA24BUMNZ17eMQpRVEWymREv4Mt3ZN6V9WXEU8 GIhIYa8R2tuEwJKRgWq2IdWOm/Jv2Aat1nf2i70H1bf7xvBk5j9Y8GoegXOXbZ3G
rbJxLWp6y7wEgAh01n32fFx22zXE9vXY1Imfncw/Tj9zwT5Bfk4Jv+oa2aITDdEM 7LBeHsZXgrCYnK4mhEMNmGy02FITcBV5YUCEGer2Yz8CAwEAAaOCAQIwgf8wCQYD
2tj0m7hUIReu17MCYYepAf/0/px6/GdDAgMBAAGjggERMIIBDTAJBgNVHRMEAjAA VR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlm
MCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd aWNhdGUwHQYDVR0OBBYEFKbZcJKsK/ZIpfspz3hKV7U7Q5fuMIGkBgNVHSMEgZww
BgNVHQ4EFgQUvPu7j8SFul+o8sM9yQ/bFucTvLIwgbIGA1UdIwSBqjCBp4AUpQrW gZmAFNnYan2rzhBiGhb86Wr03PFmrNC5oX6kfDB6MQswCQYDVQQGEwJSVTETMBEG
crXf5MIrewde001SB+GDa3+hgYukgYgwgYUxCzAJBgNVBAYTAkZJMRMwEQYDVQQI A1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoTCE15
EwpTb21lLVN0YXRlMREwDwYDVQQHEwhIZWxzaW5raTEZMBcGA1UEChMQTXlTUUwg U1FMIEFCMQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1c0Bt
RmlubGFuZCBBQjEUMBIGA1UEAxMLVG9udSBTYW11ZWwxHTAbBgkqhkiG9w0BCQEW eXNxbC5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAFZZDEIngpoKkkQ9+LtiAVLpj
DnRvbnVAbXlzcWwuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBABzghywvs6Q5RH+W 4o+wquq+NSyPDQOphi4yUTOKzLJesxLLt0IGQInOkodA8Wp5DD4AHQa/PMHa9jvh
ey/JH5GEC5/QCvhAcNDdvZEKxtWsj1F3nDUo6LZfV55ctZuuXT18BUUuiToD4fIA QuZVTDHhuXnzmRT2aJ5nK+NxiGsr4gi9Z3nqDn00DUEiOvSPTVEHb1pENAXRs8rP
y8HtPkg7X05Q0rSlNg8a3HlJHgMvJ8HkYtbvP6suq93lvMsgo92rgWkmnANCG0y3 CStDJaF/rPRU8eOTR0Q=
qldtKt7AXm500IOQ7K27uvDMz0E9
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDo1FLNTruWFjrwiWuQTNvgMHVaAnJiv+3avgnogNuAVDDWde3j MIICXQIBAAKBgQCrJ+Qe8DSLqVDfCrBVILMfD8/xUR5mSKb4Tg3USfTq00FrfgZ4
EKUVRFspkRL+DLd2TelfVlxFPK2ycS1qesu8BIAIdNZ99nxcdts1xPb12NSJn53M PCmdjtMzTQv8NE0YiEhhrxHa24TAkpGBarYh1Y6b8m/YBq3Wd/aLvQfVt/vG8GTm
P04/c8E+QX5OCb/qGtmiEw3RDNrY9Ju4VCEXrtezAmGHqQH/9P6cevxnQwIDAQAB P1jwah6Bc5dtncbssF4exleCsJicriaEQw2YbLTYUhNwFXlhQIQZ6vZjPwIDAQAB
AoGBANxd4cUaaOfkQILbvigE5vMpSlkYCcW3XNv1lJEwLREoHlVNpwuL/IPFf/c2 AoGAChyxPaKzeAzo2kSnZmAoNQ2aG4fPY/um4cS6zHASKE2S7+biOvhS/RwTHlTP
rWAxDw/1LBYlOg36IXjMMC0g7mRHHoJhdJaFLGdlfclYQvqQ+8JAsAv6UNC63+pn AHeWlnx2yk6tn2CY10fRkPPdDsnyj7FpuZmjhmFtprOn+1Mwft7gNTMdKN2EV46/
B5sZOxOuoj7lYN+D9mFVD4qTo3eTUYEOvvmS1j3hCsD2nNNBAkEA+lJUs7Y3KjCF hMQxm8/Wu9ejm6IhOeg3Q7lBFwE9tY0kgMzU4zDI3A0HDQECQQDUcxFgxIrOi4Gw
COZ7XQCkC47rVzkdZ5ey1Z+vVw5SrnUvj6n9i0NEax1jX6JPIhPU7+x90KFkt0ki EGxmJgopL+NjG7/4PdT2FM5z1bbwOtfsD1fHKWSiODbfpK8eMwBReI4wfDQ7ViND
pKHd7UQ04wJBAO4caWNnYvmIorCRDy9Q/iAAow5WC6fQlkSlBIe3lRme6Ne8Yxaq xmuDykFDAkEAzj3QH9s8Ej3Vgt88326OhY1W5jTH6M0XkuZ0YatELz3MvLwFhIF4
BzlSGYu1ndPkTGEa9PFNNCJm7RtvCBFx8iECQQCkdUzi2Rc7J69vnoV0H8SnN1mU puouLJQVo3pQBLV+Tmnh2LQqkii7xA7oVQJBALZxzvW0M6QmyAvEPuMGPema94KQ
75hLBBZhVU1MY8OcjK8XsvY59ZLQ0PkFzswwtljS3Ev4suBJrsoM4a+9f29DAkEA PS7ZIr7lpVpyqTTqw600i+Q8VvC8p9stmTmtANP2XN2kfFKMqaI1jvVRxvMCQDJE
5NTrN3vZc6SrbXLLHBcDUrAqBBIPe4SLlYbdVqzInunILeS/eb2H2b+cC1dMSaHj 8sOxBjVUCQS7MPUs12RKDRJTbx6ZTtOphFiCDD6Pi6W9FoMzo5rbnaGT/qo4F+Tt
AYONmQUwMEuoXTAUmede4QJARK6jEslg/ev8BtMvITP2b6pRCb1w8lOtT5u5Bwnc 7/lg6YGOeInjj9C76XkCQQC2m6j8NeX9E4Pimp1GDE93N2JJ+biJxLI8yFqruv7N
NpI3suqSQSQPtRSWQYcdyxrKr2TQEZU7h8R9bVB4b0qAmQ== B2M/28JKLGLjam6YVJy4eSA9clXVqwWNxii3fb8qQ7u6
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
Certificate: Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 2 (0x2) Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption Signature Algorithm: md5WithRSAEncryption
Issuer: C=FI, ST=Some-State, L=Helsinki, O=MySQL Finland AB, CN=Tonu Samuel/Email=tonu@mysql.com Issuer: C=RU, ST=Some-State, L=Orenburg, O=MySQL AB, CN=Walrus/Email=walrus@mysql.com
Validity Validity
Not Before: Jun 24 16:02:28 2001 GMT Not Before: Aug 2 21:59:26 2002 GMT
Not After : Jun 24 16:02:28 2002 GMT Not After : Aug 2 21:59:26 2003 GMT
Subject: C=EE, ST=Some-State, L=Tallinn, O=MySQL server demo certificate, CN=Tonu Samuel/Email=tonu@mysql.com Subject: C=RU, L=Orenburg, O=MySQL AB, CN=server/Email=walrus@mysql.com
Subject Public Key Info: Subject Public Key Info:
Public Key Algorithm: rsaEncryption Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit) RSA Public Key: (1024 bit)
Modulus (1024 bit): Modulus (1024 bit):
00:9e:ac:8d:d8:1d:9c:b2:fd:88:96:2c:ba:42:53: 00:bd:7d:f1:91:51:38:fe:4b:79:b5:ff:e0:41:ae:
fa:5d:bd:85:8a:e5:ca:d3:0f:c0:01:3c:f2:92:46: 0e:a8:bb:7b:60:42:95:01:75:e7:22:74:55:7d:74:
4f:d9:80:ae:2a:89:cf:ef:e8:d4:65:fc:f6:f5:3a: 4d:50:51:0c:5e:09:4b:2b:0c:8e:3f:9f:14:3f:5e:
26:4c:29:db:06:fa:34:a1:87:f3:97:b5:3c:94:f1: d9:25:36:9b:cc:77:35:30:e9:8c:bf:3b:bd:da:62:
84:05:ac:ad:57:25:d9:02:db:00:71:e0:a9:aa:b4: 85:4c:90:c8:de:71:2c:0a:7b:dc:e6:85:fd:b4:24:
1d:29:36:5e:a9:a4:0d:f2:45:b9:83:74:2b:45:f3: 88:a7:8f:03:3d:15:7c:59:3d:f8:73:f0:36:2a:b8:
e2:23:bc:e7:5c:e6:11:b6:f6:dd:c4:ac:ed:65:42: 80:7c:d8:c7:d6:1f:6d:b2:b7:b7:48:9f:24:56:81:
2c:39:47:2a:c9:eb:5f:45:03:10:ab:23:bc:ca:5c: 2c:2e:9c:b9:95:48:50:56:9f:1a:60:96:c4:c0:eb:
82:9a:b7:b3:6d:67:18:d2:c7 8d:2d:55:38:3f:6b:82:bc:b3
Exponent: 65537 (0x10001) Exponent: 65537 (0x10001)
X509v3 extensions: X509v3 extensions:
X509v3 Basic Constraints: X509v3 Basic Constraints:
...@@ -28,40 +28,38 @@ Certificate: ...@@ -28,40 +28,38 @@ Certificate:
Netscape Comment: Netscape Comment:
OpenSSL Generated Certificate OpenSSL Generated Certificate
X509v3 Subject Key Identifier: X509v3 Subject Key Identifier:
94:68:BF:DA:F6:E2:09:EF:3A:C8:27:AE:D7:B7:02:F0:DC:4B:C1:3B C9:D0:D2:F7:17:79:27:1C:4B:C9:E7:92:D5:5E:8C:7E:F2:FE:A7:B7
X509v3 Authority Key Identifier: X509v3 Authority Key Identifier:
keyid:A5:0A:D6:72:B5:DF:E4:C2:2B:7B:07:5E:D3:4D:52:07:E1:83:6B:7F keyid:D9:D8:6A:7D:AB:CE:10:62:1A:16:FC:E9:6A:F4:DC:F1:66:AC:D0:B9
DirName:/C=FI/ST=Some-State/L=Helsinki/O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@mysql.com DirName:/C=RU/ST=Some-State/L=Orenburg/O=MySQL AB/CN=Walrus/Email=walrus@mysql.com
serial:00 serial:00
Signature Algorithm: md5WithRSAEncryption Signature Algorithm: md5WithRSAEncryption
8c:1a:90:70:f6:1a:70:0e:c9:28:93:74:e2:2b:b8:2a:d0:ce: 62:77:bc:16:dc:4c:70:63:4d:03:ce:19:5e:c4:6c:31:0e:57:
40:15:e8:af:44:f8:89:16:20:f5:c2:b9:ed:aa:4e:3c:40:e2: 26:d8:6e:25:08:f2:01:ae:98:59:0a:ba:b7:32:c0:39:69:b8:
9c:62:aa:48:98:ac:17:84:ef:35:72:59:43:09:35:17:c5:9a: 4b:aa:59:7c:97:72:4e:50:02:ee:ef:d6:d6:62:b8:25:36:91:
3e:3d:ef:97:bf:57:f2:2a:f6:56:5d:a4:7c:68:58:b9:d6:9b: b6:3b:8f:6f:2f:3c:d8:9d:b7:cf:8f:f6:29:50:e9:31:54:77:
0f:57:0e:55:22:17:b0:b7:77:27:4f:da:b3:88:c1:6d:d6:8f: 2b:7b:21:72:0f:60:4c:d4:1c:bb:c4:46:e5:fd:a7:5f:ea:46:
31:ec:0d:a2:25:60:66:2f:0f:86:8a:d6:08:b8:71:b1:b5:70: e4:df:e9:95:77:2d:91:f8:3b:33:78:83:5d:10:de:98:7c:38:
60:04:56:96:ff:bd:5e:ed:94:bc:44:bd:24:e0:2f:90:e5:23: 91:27:f6:52:8a:b6:54:f1:0f:7a:f0:1d:da:a5:22:d2:75:cc:
51:4e 4c:c3
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCRkkx MIIDWTCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJSVTET
EzARBgNVBAgTClNvbWUtU3RhdGUxETAPBgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQK MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoT
ExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqG CE15U1FMIEFCMQ8wDQYDVQQDEwZXYWxydXMxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1
SIb3DQEJARYOdG9udUBteXNxbC5jb20wHhcNMDEwNjI0MTYwMjI4WhcNMDIwNjI0 c0BteXNxbC5jb20wHhcNMDIwODAyMjE1OTI2WhcNMDMwODAyMjE1OTI2WjBlMQsw
MTYwMjI4WjCBkTELMAkGA1UEBhMCRUUxEzARBgNVBAgTClNvbWUtU3RhdGUxEDAO CQYDVQQGEwJSVTERMA8GA1UEBxMIT3JlbmJ1cmcxETAPBgNVBAoTCE15U1FMIEFC
BgNVBAcTB1RhbGxpbm4xJjAkBgNVBAoTHU15U1FMIHNlcnZlciBkZW1vIGNlcnRp MQ8wDQYDVQQDEwZzZXJ2ZXIxHzAdBgkqhkiG9w0BCQEWEHdhbHJ1c0BteXNxbC5j
ZmljYXRlMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqGSIb3DQEJARYOdG9u b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL198ZFROP5LebX/4EGuDqi7
dUBteXNxbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ6sjdgdnLL9 e2BClQF15yJ0VX10TVBRDF4JSysMjj+fFD9e2SU2m8x3NTDpjL87vdpihUyQyN5x
iJYsukJT+l29hYrlytMPwAE88pJGT9mAriqJz+/o1GX89vU6Jkwp2wb6NKGH85e1 LAp73OaF/bQkiKePAz0VfFk9+HPwNiq4gHzYx9YfbbK3t0ifJFaBLC6cuZVIUFaf
PJTxhAWsrVcl2QLbAHHgqaq0HSk2XqmkDfJFuYN0K0Xz4iO851zmEbb23cSs7WVC GmCWxMDrjS1VOD9rgryzAgMBAAGjggECMIH/MAkGA1UdEwQCMAAwLAYJYIZIAYb4
LDlHKsnrX0UDEKsjvMpcgpq3s21nGNLHAgMBAAGjggERMIIBDTAJBgNVHRMEAjAA QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBTJ
MCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd 0NL3F3knHEvJ55LVXox+8v6ntzCBpAYDVR0jBIGcMIGZgBTZ2Gp9q84QYhoW/Olq
BgNVHQ4EFgQUlGi/2vbiCe86yCeu17cC8NxLwTswgbIGA1UdIwSBqjCBp4AUpQrW 9NzxZqzQuaF+pHwwejELMAkGA1UEBhMCUlUxEzARBgNVBAgTClNvbWUtU3RhdGUx
crXf5MIrewde001SB+GDa3+hgYukgYgwgYUxCzAJBgNVBAYTAkZJMRMwEQYDVQQI ETAPBgNVBAcTCE9yZW5idXJnMREwDwYDVQQKEwhNeVNRTCBBQjEPMA0GA1UEAxMG
EwpTb21lLVN0YXRlMREwDwYDVQQHEwhIZWxzaW5raTEZMBcGA1UEChMQTXlTUUwg V2FscnVzMR8wHQYJKoZIhvcNAQkBFhB3YWxydXNAbXlzcWwuY29tggEAMA0GCSqG
RmlubGFuZCBBQjEUMBIGA1UEAxMLVG9udSBTYW11ZWwxHTAbBgkqhkiG9w0BCQEW SIb3DQEBBAUAA4GBAGJ3vBbcTHBjTQPOGV7EbDEOVybYbiUI8gGumFkKurcywDlp
DnRvbnVAbXlzcWwuY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBAIwakHD2GnAOySiT uEuqWXyXck5QAu7v1tZiuCU2kbY7j28vPNidt8+P9ilQ6TFUdyt7IXIPYEzUHLvE
dOIruCrQzkAV6K9E+IkWIPXCue2qTjxA4pxiqkiYrBeE7zVyWUMJNRfFmj4975e/ RuX9p1/qRuTf6ZV3LZH4OzN4g10Q3ph8OJEn9lKKtlTxD3rwHdqlItJ1zEzD
V/Iq9lZdpHxoWLnWmw9XDlUiF7C3dydP2rOIwW3WjzHsDaIlYGYvD4aK1gi4cbG1
cGAEVpb/vV7tlLxEvSTgL5DlI1FO
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCerI3YHZyy/YiWLLpCU/pdvYWK5crTD8ABPPKSRk/ZgK4qic/v MIICXAIBAAKBgQC9ffGRUTj+S3m1/+BBrg6ou3tgQpUBdecidFV9dE1QUQxeCUsr
6NRl/Pb1OiZMKdsG+jShh/OXtTyU8YQFrK1XJdkC2wBx4KmqtB0pNl6ppA3yRbmD DI4/nxQ/XtklNpvMdzUw6Yy/O73aYoVMkMjecSwKe9zmhf20JIinjwM9FXxZPfhz
dCtF8+IjvOdc5hG29t3ErO1lQiw5RyrJ619FAxCrI7zKXIKat7NtZxjSxwIDAQAB 8DYquIB82MfWH22yt7dInyRWgSwunLmVSFBWnxpglsTA640tVTg/a4K8swIDAQAB
AoGAA51gudyq1jUKaIlqUNqC6KHJqglkHnzMXfrad9ScOxNAZH2xPADs3cnuglWp AoGARciG2NRHn+aduPe1V5rJDTyWD/oVM8d+ykJ7ZUsaWdSvMEZN51mlXSqxYzED
y7BkaftHOarUNM+PKsF5xXtSk5F9UUV+7h2FtPZYUshUgn5hkGZP12otxJMP0cpg 2N+GesL/1LZ9vcM7hJw5qNu9DQOc7CtMT4k/bmhPJsT226roKKVbw/ocOEY5dK8+
Yt6brQxuOIe/r/Kt5r3nKpp4pyFLX2fGWQq7pSjdkgSZSOECQQDJ9MgbCXd81yde T9/x8qgo7zC3Qk/bKgjj61m8cQ7Mz/J7ZCEMmDNNrORCzRECQQDrcvJlsBTALilr
eo3+YmUPBEQ9d7mivQsyPHMOHLPJKR42N4npdR1zLDBYK5lFzJeQH1y0Uce3O8eL MaAqNyaa0tykEabzg2mUFx5uvmzlwNx9ApSidoU5Xop9c6u00zgCDpsDlcwjhOs1
hM8hkA1XAkEAySKvNTaosbLhShkRazQyQQJYJg0F/93lkQ33ou4crru7Mvi2OZK9 jcqRkBTrAkEAzggY7BeN3FnW8tsV0Wq4LL6vK30pe0JIylxrKsFjY4LTo9t/8TKK
B3BGAmNpSv6ZOZYjM0aE8lGlTaoYJ9GQEQJAGJDyFnfcVQ9G9rMpupv1dxIpyuBZ 6ZOEETVtM7sepIkxECw5RCBi9sxi3NClWQJAbrA5WKjw+HA7NJO98lq/IWYkKFXM
cHZWelHoHPtY00txJV80I3Xfkzb42oDTMC5m8V0fRb/870kSSOJq38ZKGQJBAIgq IQsUpXRA8FtBormKbpK6Aa6qbxANF3E7teTencj0Azl3IPOqCCFCrDAKRQJAc6bv
wxLzfiFPSNYxQmmhXKRGQgcAqh8eylv5aL0VFrX0wjcvya4QeYifqcXUJ2RuGK2z 9ncyVqLHmgOJN8ikIdnYEp1rj5khqxY9wf5UgCOMEcrBAu/QMlVwKQjIh+VdyhaI
xwDfrQGf5Jk/njrW1QECQAUofd1l9DLDifRP1j9sjUdwz0fvqQ0o6sbt39PBl1ot x/9LFgboBomsZS9p4QJBAIXaX/WoqL/wgBGS2UroianFFXL6/Bt//CUoGpYgKQYQ
IHdc3nf9z0ft+KOG1CT/M9jYo9SzE9Z6IfwmHxxpY0s= +x+8heMRppmM0to2J7j9nGE83ikMWfPUwMi4TbyWH3Q=
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
...@@ -217,13 +217,16 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const byte *key) ...@@ -217,13 +217,16 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const byte *key)
if (seg->charset->hash_sort) if (seg->charset->hash_sort)
seg->charset->hash_sort(seg->charset,pos,((uchar*)key)-pos,&nr,&nr2); seg->charset->hash_sort(seg->charset,pos,((uchar*)key)-pos,&nr,&nr2);
else else
{
register uchar *sort_order=seg->charset->sort_order;
for (; pos < (uchar*) key ; pos++) for (; pos < (uchar*) key ; pos++)
{ {
nr^=(ulong) ((((uint) nr & 63)+nr2) * nr^=(ulong) ((((uint) nr & 63)+nr2) *
((uint) seg->charset->sort_order[(uint) *pos])) + (nr << 8); ((uint) sort_order[(uint) *pos])) + (nr << 8);
nr2+=3; nr2+=3;
} }
} }
}
else else
{ {
for (; pos < (uchar*) key ; pos++) for (; pos < (uchar*) key ; pos++)
...@@ -260,13 +263,17 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const byte *rec) ...@@ -260,13 +263,17 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const byte *rec)
if (seg->charset->hash_sort) if (seg->charset->hash_sort)
seg->charset->hash_sort(seg->charset,pos,end-pos,&nr,&nr2); seg->charset->hash_sort(seg->charset,pos,end-pos,&nr,&nr2);
else else
{
register uchar *sort_order=seg->charset->sort_order;
for (; pos < end ; pos++) for (; pos < end ; pos++)
{ {
nr^=(ulong) ((((uint) nr & 63)+nr2)* nr^=(ulong) ((((uint) nr & 63)+nr2)*
((uint) seg->charset->sort_order[(uint) *pos]))+ (nr << 8); ((uint) sort_order[(uint) *pos]))+ (nr << 8);
nr2+=3; nr2+=3;
} }
} }
}
else else
{ {
for (; pos < end ; pos++) for (; pos < end ; pos++)
......
...@@ -29,7 +29,7 @@ noinst_HEADERS = config-win.h \ ...@@ -29,7 +29,7 @@ noinst_HEADERS = config-win.h \
my_nosys.h my_alarm.h queues.h \ my_nosys.h my_alarm.h queues.h \
my_tree.h hash.h thr_alarm.h thr_lock.h \ my_tree.h hash.h thr_alarm.h thr_lock.h \
t_ctype.h violite.h md5.h mysql_version.h.in \ t_ctype.h violite.h md5.h mysql_version.h.in \
my_handler.h my_handler.h my_getopt.h
# mysql_version.h are generated # mysql_version.h are generated
SUPERCLEANFILES = mysql_version.h my_config.h SUPERCLEANFILES = mysql_version.h my_config.h
......
/* Copyright (C) 2000 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* Declarations for getopt.
Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifndef _GETOPT_H
#define _GETOPT_H 1
#ifdef __cplusplus
extern "C" {
#endif
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns EOF, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message `getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an `int' to
a compiled-in constant, such as set a value from `optarg', set the
option's `flag' field to zero and its `val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct option
{
#if defined (__STDC__) && __STDC__ || defined(__cplusplus)
const char *name;
#else
char *name;
#endif
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
#if ( defined (__STDC__) && __STDC__ ) || defined(__cplusplus) || defined(MSDOS)
#ifdef __EMX__
int getopt (int, char **, __const__ char *);
#elif defined( __GNU_LIBRARY__)
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
extern int getopt (int argc, char *const *argv, const char *optstring);
#endif /* __GNU_LIBRARY__ */
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind,
int long_only);
#else /* not __STDC__ */
extern int getopt ();
extern int getopt_long ();
extern int getopt_long_only ();
extern int _getopt_internal ();
#endif /* __STDC__ */
#ifdef __cplusplus
}
#endif
#endif /* _GETOPT_H */
...@@ -22,25 +22,27 @@ ...@@ -22,25 +22,27 @@
opt_use_ssl = 1; /* true */ opt_use_ssl = 1; /* true */
//QQ to be removed??? my_free(opt_ssl_key, MYF(MY_ALLOW_ZERO_PTR)); //QQ to be removed??? my_free(opt_ssl_key, MYF(MY_ALLOW_ZERO_PTR));
//QQ to be removed??? opt_ssl_key = my_strdup(optarg, MYF(0)); //QQ to be removed??? opt_ssl_key = my_strdup(optarg, MYF(0));
my_free(opt_ssl_key, MYF(MY_ALLOW_ZERO_PTR));
opt_ssl_key = my_strdup(argument, MYF(0));
break; break;
case OPT_SSL_CERT: case OPT_SSL_CERT:
opt_use_ssl = 1; /* true */ opt_use_ssl = 1; /* true */
my_free(opt_ssl_cert, MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_ssl_cert, MYF(MY_ALLOW_ZERO_PTR));
opt_ssl_cert = my_strdup(optarg, MYF(0)); opt_ssl_cert = my_strdup(argument, MYF(0));
break; break;
case OPT_SSL_CA: case OPT_SSL_CA:
opt_use_ssl = 1; /* true */ opt_use_ssl = 1; /* true */
my_free(opt_ssl_ca, MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_ssl_ca, MYF(MY_ALLOW_ZERO_PTR));
opt_ssl_ca = my_strdup(optarg, MYF(0)); opt_ssl_ca = my_strdup(argument, MYF(0));
break; break;
case OPT_SSL_CAPATH: case OPT_SSL_CAPATH:
opt_use_ssl = 1; /* true */ opt_use_ssl = 1; /* true */
my_free(opt_ssl_capath, MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
opt_ssl_capath = my_strdup(optarg, MYF(0)); opt_ssl_capath = my_strdup(argument, MYF(0));
break; break;
case OPT_SSL_CIPHER: case OPT_SSL_CIPHER:
opt_use_ssl = 1; /* true */ opt_use_ssl = 1; /* true */
my_free(opt_ssl_cipher, MYF(MY_ALLOW_ZERO_PTR)); my_free(opt_ssl_cipher, MYF(MY_ALLOW_ZERO_PTR));
opt_ssl_cipher = my_strdup(optarg, MYF(0)); opt_ssl_cipher = my_strdup(argument, MYF(0));
break; break;
#endif #endif
...@@ -157,6 +157,65 @@ INSERT INTO t1 (koi8_ru_f,comment) VALUES (' ...@@ -157,6 +157,65 @@ INSERT INTO t1 (koi8_ru_f,comment) VALUES ('
INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT E'); INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT E');
INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YU'); INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YU');
INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YA'); INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YA');
SELECT CONVERT(koi8_ru_f USING utf8),MIN(comment),COUNT(*) FROM t1 GROUP BY 1;
CONVERT(koi8_ru_f USING utf8) MIN(comment) COUNT(*)
a LAT CAPIT A 2
b LAT CAPIT B 2
c LAT CAPIT C 2
d LAT CAPIT D 2
e LAT CAPIT E 2
f LAT CAPIT F 2
g LAT CAPIT G 2
h LAT CAPIT H 2
i LAT CAPIT I 2
j LAT CAPIT J 2
k LAT CAPIT K 2
l LAT CAPIT L 2
m LAT CAPIT M 2
n LAT CAPIT N 2
o LAT CAPIT O 2
p LAT CAPIT P 2
q LAT CAPIT Q 2
r LAT CAPIT R 2
s LAT CAPIT S 2
t LAT CAPIT T 2
u LAT CAPIT U 2
v LAT CAPIT V 2
w LAT CAPIT W 2
x LAT CAPIT X 2
y LAT CAPIT Y 2
z LAT CAPIT Z 2
а CYR CAPIT A 2
б CYR CAPIT BE 2
в CYR CAPIT VE 2
г CYR CAPIT GE 2
д CYR CAPIT DE 2
е CYR CAPIT IE 4
ж CYR CAPIT ZHE 2
з CYR CAPIT ZE 2
и CYR CAPIT I 2
к CYR CAPIT KA 2
л CYR CAPIT EL 2
м CYR CAPIT EM 2
н CYR CAPIT EN 2
о CYR CAPIT O 2
п CYR CAPIT PE 2
р CYR CAPIT ER 2
с CYR CAPIT ES 2
т CYR CAPIT TE 2
у CYR CAPIT U 2
ф CYR CAPIT EF 2
х CYR CAPIT HA 2
ц CYR CAPIT TSE 2
ч CYR CAPIT CHE 2
ш CYR CAPIT SHA 2
щ CYR CAPIT SCHA 2
ъ CYR CAPIT HARD SIGN 2
ы CYR CAPIT YERU 2
ь CYR CAPIT SOFT SIGN 2
э CYR CAPIT E 2
ю CYR CAPIT YU 2
я CYR CAPIT YA 2
ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL; ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL;
UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8); UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8);
SELECT * FROM t1; SELECT * FROM t1;
......
...@@ -133,6 +133,8 @@ INSERT INTO t1 (koi8_ru_f,comment) VALUES (' ...@@ -133,6 +133,8 @@ INSERT INTO t1 (koi8_ru_f,comment) VALUES ('
INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YU'); INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YU');
INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YA'); INSERT INTO t1 (koi8_ru_f,comment) VALUES ('','CYR CAPIT YA');
SELECT CONVERT(koi8_ru_f USING utf8),MIN(comment),COUNT(*) FROM t1 GROUP BY 1;
ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL; ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL;
UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8); UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8);
......
...@@ -53,10 +53,11 @@ EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \ ...@@ -53,10 +53,11 @@ EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
thr_mutex.c thr_rwlock.c thr_mutex.c thr_rwlock.c
libmysys_a_LIBADD = @THREAD_LOBJECTS@ libmysys_a_LIBADD = @THREAD_LOBJECTS@
# test_fn removed 980815 since it not upp to date test_dir # test_fn removed 980815 since it not upp to date test_dir
noinst_PROGRAMS = test_charset @THREAD_LPROGRAMS@ noinst_PROGRAMS = test_charset charset2html @THREAD_LPROGRAMS@
# test_dir_DEPENDENCIES= $(LIBRARIES) # test_dir_DEPENDENCIES= $(LIBRARIES)
# testhash_DEPENDENCIES= $(LIBRARIES) # testhash_DEPENDENCIES= $(LIBRARIES)
test_charset_DEPENDENCIES= $(LIBRARIES) test_charset_DEPENDENCIES= $(LIBRARIES)
charset2html_DEPENDENCIES= $(LIBRARIES)
EXTRA_PROGRAMS = EXTRA_PROGRAMS =
DEFS = -DDEFAULT_BASEDIR=\"$(prefix)\" \ DEFS = -DDEFAULT_BASEDIR=\"$(prefix)\" \
-DDATADIR="\"$(MYSQLDATAdir)\"" \ -DDATADIR="\"$(MYSQLDATAdir)\"" \
...@@ -109,6 +110,9 @@ test_dir: test_dir.c $(LIBRARIES) ...@@ -109,6 +110,9 @@ test_dir: test_dir.c $(LIBRARIES)
test_charset: test_charset.c $(LIBRARIES) test_charset: test_charset.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/test_charset.c $(LDADD) $(LIBS) $(LINK) $(FLAGS) -DMAIN $(srcdir)/test_charset.c $(LDADD) $(LIBS)
charset2html: charset2html.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/charset2html.c $(LDADD) $(LIBS)
testhash: testhash.c $(LIBRARIES) testhash: testhash.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/testhash.c $(LDADD) $(LIBS) $(LINK) $(FLAGS) -DMAIN $(srcdir)/testhash.c $(LDADD) $(LIBS)
......
/* Copyright (C) 2000 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
Written by Alexander Barkov to check what
a charset is in your favorite web browser
*/
#include <my_global.h>
#include <m_ctype.h>
#include <my_sys.h>
#include <mysql_version.h>
#include <stdio.h>
typedef struct char_info_st
{
int cod;
int srt;
int uni;
int low;
int upp;
int ctp;
} MY_CH;
static int chcmp(const void *vf, const void *vs)
{
const MY_CH *f=vf;
const MY_CH *s=vs;
return f->srt-s->srt ? f->srt-s->srt : f->uni-s->uni;
}
static void print_cs(CHARSET_INFO *cs)
{
uint i;
int srt;
int clr=0;
MY_CH ch[256];
printf("<HTML>\n");
printf("<HEAD>\n");
printf("</HEAD>\n");
printf("<BODY><PRE>\n");
printf("Charset %s\n",cs->name);
printf("<TABLE>\n");
printf("<TR><TH>Code<TH>Uni<TH>Sort<TH>Ctype<TH>Ch<TH>Lo<TH>Up</TR>");
for (i=0; i<256; i++)
{
ch[i].cod=i;
ch[i].srt=cs->sort_order[i];
ch[i].uni=cs->tab_to_uni[i];
ch[i].low=cs->tab_to_uni[cs->to_lower[i]];
ch[i].upp=cs->tab_to_uni[cs->to_upper[i]];
ch[i].ctp=cs->ctype[i+1];
}
qsort(ch,256,sizeof(MY_CH),&chcmp);
srt=ch[0].srt;
for (i=0; i<256; i++)
{
clr = (srt!=ch[i].srt) ? !clr : clr;
printf("<TR bgcolor=#%s>",clr ? "DDDDDD" : "EEEE99");
printf("<TD>%02X",ch[i].cod);
printf("<TD>%04X",ch[i].uni);
printf("<TD>%d",ch[i].srt);
printf("<TD>%s%s%s%s%s%s%s%s",
ch[i].ctp & _U ? "U" : "",
ch[i].ctp & _L ? "L" : "",
ch[i].ctp & _NMR ? "N" : "",
ch[i].ctp & _SPC ? "S" : "",
ch[i].ctp & _PNT ? "P" : "",
ch[i].ctp & _CTR ? "C" : "",
ch[i].ctp & _B ? "B" : "",
ch[i].ctp & _X ? "X" : "");
printf("<TD>&#%d;",ch[i].uni);
printf("<TD>&#%d;",ch[i].low);
printf("<TD>&#%d;",ch[i].upp);
printf("</TR>\n");
srt=ch[i].srt;
}
printf("</TABLE>\n");
printf("</PRE></BODY>\n");
printf("</HTML>\n");
}
int main(int argc, char **argv) {
const char *the_set = MYSQL_CHARSET;
int argcnt = 1;
my_init();
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
DBUG_PUSH(argv[argcnt++]+2);
if (argc > argcnt)
the_set = argv[argcnt++];
if (argc > argcnt)
charsets_dir = argv[argcnt++];
if (set_default_charset_by_name(the_set, MYF(MY_WME)))
return 1;
print_cs(default_charset_info);
return 0;
}
...@@ -136,10 +136,12 @@ static uint calc_hashnr(CHARSET_INFO *cs __attribute__((unused)), ...@@ -136,10 +136,12 @@ static uint calc_hashnr(CHARSET_INFO *cs __attribute__((unused)),
static uint calc_hashnr_caseup(CHARSET_INFO *cs, const byte *key,uint length) static uint calc_hashnr_caseup(CHARSET_INFO *cs, const byte *key,uint length)
{ {
register uint nr=1, nr2=4; register uint nr=1, nr2=4;
register uchar *map=cs->to_upper;
while (length--) while (length--)
{ {
nr^= (((nr & 63)+nr2)* nr^= (((nr & 63)+nr2)*
((uint) (uchar) my_toupper(cs, *key++)))+ (nr << 8); ((uint) (uchar) map[(uchar)*key++])) + (nr << 8);
nr2+=3; nr2+=3;
} }
return((uint) nr); return((uint) nr);
......
...@@ -33,8 +33,10 @@ ...@@ -33,8 +33,10 @@
void case_sort(CHARSET_INFO *cs, my_string str, uint length) void case_sort(CHARSET_INFO *cs, my_string str, uint length)
{ {
register uchar *map=cs->sort_order;
for ( ; length>0 ; length--, str++) for ( ; length>0 ; length--, str++)
*str= (char) cs->sort_order[(uchar) *str]; *str= (char) map[(uchar) *str];
} /* case_sort */ } /* case_sort */
...@@ -46,11 +48,11 @@ int my_sortcmp(CHARSET_INFO *cs, const char *s, const char *t, uint len) ...@@ -46,11 +48,11 @@ int my_sortcmp(CHARSET_INFO *cs, const char *s, const char *t, uint len)
else else
#endif #endif
{ {
register uchar *map=cs->sort_order;
while (len--) while (len--)
{ {
if (cs->sort_order[(uchar) *s++] != cs->sort_order[(uchar) *t++]) if (map[(uchar) *s++] != map[(uchar) *t++])
return ((int) cs->sort_order[(uchar) s[-1]] - return ((int) map[(uchar) s[-1]] - (int) map[(uchar) t[-1]]);
(int) cs->sort_order[(uchar) t[-1]]);
} }
return 0; return 0;
} }
...@@ -67,11 +69,12 @@ int my_sortncmp(CHARSET_INFO *cs, ...@@ -67,11 +69,12 @@ int my_sortncmp(CHARSET_INFO *cs,
#endif #endif
{ {
uint len= min(s_len,t_len); uint len= min(s_len,t_len);
register uchar *map=cs->sort_order;
while (len--) while (len--)
{ {
if (cs->sort_order[(uchar) *s++] != cs->sort_order[(uchar) *t++]) if (map[(uchar) *s++] != map[(uchar) *t++])
return ((int) cs->sort_order[(uchar) s[-1]] - return ((int) map[(uchar) s[-1]] - (int) map[(uchar) t[-1]]);
(int) cs->sort_order[(uchar) t[-1]]);
} }
return (int) (s_len - t_len); return (int) (s_len - t_len);
} }
......
...@@ -44,13 +44,14 @@ void soundex(CHARSET_INFO * cs,register my_string out_pntr, my_string in_pntr, ...@@ -44,13 +44,14 @@ void soundex(CHARSET_INFO * cs,register my_string out_pntr, my_string in_pntr,
{ {
char ch,last_ch; char ch,last_ch;
reg3 my_string end; reg3 my_string end;
register uchar *map=cs->to_upper;
if (remove_garbage) if (remove_garbage)
{ {
while (*in_pntr && my_isspace(cs,*in_pntr)) /* Skipp pre-space */ while (*in_pntr && my_isspace(cs,*in_pntr)) /* Skipp pre-space */
in_pntr++; in_pntr++;
} }
*out_pntr++ = my_toupper(cs,*in_pntr);/* Copy first letter */ *out_pntr++ = map[(uchar)*in_pntr]; /* Copy first letter */
last_ch = get_scode(cs,&in_pntr,0); /* code of the first letter */ last_ch = get_scode(cs,&in_pntr,0); /* code of the first letter */
/* for the first 'double-letter */ /* for the first 'double-letter */
/* check. */ /* check. */
......
...@@ -25,7 +25,8 @@ int mi_compare_text(CHARSET_INFO *charset_info, uchar *a, uint a_length, ...@@ -25,7 +25,8 @@ int mi_compare_text(CHARSET_INFO *charset_info, uchar *a, uint a_length,
#ifdef USE_STRCOLL #ifdef USE_STRCOLL
if (use_strcoll(charset_info)) if (use_strcoll(charset_info))
{ {
/* QQ: This needs to work with part keys at some point */ if (part_key && b_length < a_length)
a_length=b_length;
return my_strnncoll(charset_info, a, a_length, b, b_length); return my_strnncoll(charset_info, a, a_length, b, b_length);
} }
else else
......
...@@ -112,7 +112,7 @@ while test $# -gt 0; do ...@@ -112,7 +112,7 @@ while test $# -gt 0; do
--socket) echo "$socket" ;; --socket) echo "$socket" ;;
--port) echo "$port" ;; --port) echo "$port" ;;
--version) echo "$version" ;; --version) echo "$version" ;;
--embedded-libs | --embedded | libmysqld-libs) echo "$embedded_libs" ;; --embedded-libs | --embedded | --libmysqld-libs) echo "$embedded_libs" ;;
*) usage ;; *) usage ;;
esac esac
......
...@@ -56,7 +56,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \ ...@@ -56,7 +56,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
sql_select.h structs.h table.h sql_udf.h hash_filo.h\ sql_select.h structs.h table.h sql_udf.h hash_filo.h\
lex.h lex_symbol.h sql_acl.h sql_crypt.h \ lex.h lex_symbol.h sql_acl.h sql_crypt.h \
log_event.h mini_client.h sql_repl.h slave.h \ log_event.h mini_client.h sql_repl.h slave.h \
stacktrace.h sql_sort.h sql_cache.h stacktrace.h sql_sort.h sql_cache.h spatial.h gstream.h
mysqld_SOURCES = sql_lex.cc sql_handler.cc \ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
item.cc item_sum.cc item_buff.cc item_func.cc \ item.cc item_sum.cc item_buff.cc item_func.cc \
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \ item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \
......
This diff is collapsed.
This diff is collapsed.
...@@ -340,7 +340,7 @@ void Item_param::set_long_end() ...@@ -340,7 +340,7 @@ void Item_param::set_long_end()
item_result_type = STRING_RESULT; item_result_type = STRING_RESULT;
}; };
bool Item_param::save_in_field(Field *field) int Item_param::save_in_field(Field *field)
{ {
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
...@@ -349,20 +349,17 @@ bool Item_param::save_in_field(Field *field) ...@@ -349,20 +349,17 @@ bool Item_param::save_in_field(Field *field)
if (item_result_type == INT_RESULT) if (item_result_type == INT_RESULT)
{ {
longlong nr=val_int(); longlong nr=val_int();
field->store(nr); return (field->store(nr)) ? -1 : 0;
return 0;
} }
if (item_result_type == REAL_RESULT) if (item_result_type == REAL_RESULT)
{ {
double nr=val(); double nr=val();
field->store(nr); return (field->store(nr)) ? -1 : 0;
return 0;
} }
String *result; String *result;
CHARSET_INFO *cs=default_charset_info;//fix this CHARSET_INFO *cs=default_charset_info;//fix this
result=val_str(&str_value); result=val_str(&str_value);
field->store(result->ptr(),result->length(),cs); return (field->store(result->ptr(),result->length(),cs)) ? -1 : 0;
return 0;
} }
void Item_param::make_field(Send_field *tmp_field) void Item_param::make_field(Send_field *tmp_field)
...@@ -618,7 +615,7 @@ void Item_field::save_org_in_field(Field *to) ...@@ -618,7 +615,7 @@ void Item_field::save_org_in_field(Field *to)
} }
} }
bool Item_field::save_in_field(Field *to) int Item_field::save_in_field(Field *to)
{ {
if (result_field->is_null()) if (result_field->is_null())
{ {
...@@ -635,14 +632,15 @@ bool Item_field::save_in_field(Field *to) ...@@ -635,14 +632,15 @@ bool Item_field::save_in_field(Field *to)
} }
bool Item_null::save_in_field(Field *field) int Item_null::save_in_field(Field *field)
{ {
return set_field_to_null(field); return set_field_to_null(field);
} }
bool Item::save_in_field(Field *field) int Item::save_in_field(Field *field)
{ {
int error;
if (result_type() == STRING_RESULT || if (result_type() == STRING_RESULT ||
result_type() == REAL_RESULT && result_type() == REAL_RESULT &&
field->result_type() == STRING_RESULT) field->result_type() == STRING_RESULT)
...@@ -655,7 +653,7 @@ bool Item::save_in_field(Field *field) ...@@ -655,7 +653,7 @@ bool Item::save_in_field(Field *field)
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(result->ptr(),result->length(),cs); error=field->store(result->ptr(),result->length(),cs);
str_value.set_quick(0, 0, cs); str_value.set_quick(0, 0, cs);
} }
else if (result_type() == REAL_RESULT) else if (result_type() == REAL_RESULT)
...@@ -664,7 +662,7 @@ bool Item::save_in_field(Field *field) ...@@ -664,7 +662,7 @@ bool Item::save_in_field(Field *field)
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(nr); error=field->store(nr);
} }
else else
{ {
...@@ -672,12 +670,12 @@ bool Item::save_in_field(Field *field) ...@@ -672,12 +670,12 @@ bool Item::save_in_field(Field *field)
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(nr); error=field->store(nr);
} }
return 0; return (error) ? -1 : 0;
} }
bool Item_string::save_in_field(Field *field) int Item_string::save_in_field(Field *field)
{ {
String *result; String *result;
CHARSET_INFO *cs=field->binary()?default_charset_info:((Field_str*)field)->charset(); CHARSET_INFO *cs=field->binary()?default_charset_info:((Field_str*)field)->charset();
...@@ -685,28 +683,25 @@ bool Item_string::save_in_field(Field *field) ...@@ -685,28 +683,25 @@ bool Item_string::save_in_field(Field *field)
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(result->ptr(),result->length(),cs); return (field->store(result->ptr(),result->length(),cs)) ? -1 : 0;
return 0;
} }
bool Item_int::save_in_field(Field *field) int Item_int::save_in_field(Field *field)
{ {
longlong nr=val_int(); longlong nr=val_int();
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(nr); return (field->store(nr)) ? -1 : 0;
return 0;
} }
bool Item_real::save_in_field(Field *field) int Item_real::save_in_field(Field *field)
{ {
double nr=val(); double nr=val();
if (null_value) if (null_value)
return set_field_to_null(field); return set_field_to_null(field);
field->set_notnull(); field->set_notnull();
field->store(nr); return (field->store(nr)) ? -1 : 0;
return 0;
} }
/**************************************************************************** /****************************************************************************
...@@ -754,20 +749,21 @@ longlong Item_varbinary::val_int() ...@@ -754,20 +749,21 @@ longlong Item_varbinary::val_int()
} }
bool Item_varbinary::save_in_field(Field *field) int Item_varbinary::save_in_field(Field *field)
{ {
int error;
CHARSET_INFO *cs=field->binary()?default_charset_info:((Field_str*)field)->charset(); CHARSET_INFO *cs=field->binary()?default_charset_info:((Field_str*)field)->charset();
field->set_notnull(); field->set_notnull();
if (field->result_type() == STRING_RESULT) if (field->result_type() == STRING_RESULT)
{ {
field->store(str_value.ptr(),str_value.length(),cs); error=field->store(str_value.ptr(),str_value.length(),cs);
} }
else else
{ {
longlong nr=val_int(); longlong nr=val_int();
field->store(nr); error=field->store(nr);
} }
return 0; return (error) ? -1 : 0;
} }
......
...@@ -53,7 +53,7 @@ class Item { ...@@ -53,7 +53,7 @@ class Item {
void set_name(char* str,uint length=0); void set_name(char* str,uint length=0);
void init_make_field(Send_field *tmp_field,enum enum_field_types type); void init_make_field(Send_field *tmp_field,enum enum_field_types type);
virtual bool fix_fields(THD *, struct st_table_list *, Item **); virtual bool fix_fields(THD *, struct st_table_list *, Item **);
virtual bool save_in_field(Field *field); virtual int save_in_field(Field *field);
virtual void save_org_in_field(Field *field) virtual void save_org_in_field(Field *field)
{ (void) save_in_field(field); } { (void) save_in_field(field); }
virtual bool send(THD *thd, String *str); virtual bool send(THD *thd, String *str);
...@@ -124,7 +124,7 @@ class Item_field :public Item_ident ...@@ -124,7 +124,7 @@ class Item_field :public Item_ident
bool send(THD *thd, String *str_arg) { return result_field->send(thd,str_arg); } bool send(THD *thd, String *str_arg) { return result_field->send(thd,str_arg); }
void make_field(Send_field *field); void make_field(Send_field *field);
bool fix_fields(THD *, struct st_table_list *, Item **); bool fix_fields(THD *, struct st_table_list *, Item **);
bool save_in_field(Field *field); int save_in_field(Field *field);
void save_org_in_field(Field *field); void save_org_in_field(Field *field);
table_map used_tables() const; table_map used_tables() const;
enum Item_result result_type () const enum Item_result result_type () const
...@@ -149,7 +149,7 @@ class Item_null :public Item ...@@ -149,7 +149,7 @@ class Item_null :public Item
longlong val_int(); longlong val_int();
String *val_str(String *str); String *val_str(String *str);
void make_field(Send_field *field); void make_field(Send_field *field);
bool save_in_field(Field *field); int save_in_field(Field *field);
enum Item_result result_type () const enum Item_result result_type () const
{ return STRING_RESULT; } { return STRING_RESULT; }
bool send(THD *thd, String *str); bool send(THD *thd, String *str);
...@@ -178,7 +178,7 @@ class Item_param :public Item ...@@ -178,7 +178,7 @@ class Item_param :public Item
longlong val_int(); longlong val_int();
String *val_str(String*); String *val_str(String*);
void make_field(Send_field *field); void make_field(Send_field *field);
bool save_in_field(Field *field); int save_in_field(Field *field);
void set_null(); void set_null();
void set_int(longlong i); void set_int(longlong i);
void set_double(float i); void set_double(float i);
...@@ -215,7 +215,7 @@ class Item_int :public Item ...@@ -215,7 +215,7 @@ class Item_int :public Item
double val() { return (double) value; } double val() { return (double) value; }
String *val_str(String*); String *val_str(String*);
void make_field(Send_field *field); void make_field(Send_field *field);
bool save_in_field(Field *field); int save_in_field(Field *field);
bool basic_const_item() const { return 1; } bool basic_const_item() const { return 1; }
Item *new_item() { return new Item_int(name,value,max_length); } Item *new_item() { return new Item_int(name,value,max_length); }
void print(String *str); void print(String *str);
...@@ -254,7 +254,7 @@ class Item_real :public Item ...@@ -254,7 +254,7 @@ class Item_real :public Item
max_length=length; max_length=length;
} }
Item_real(double value_par) :value(value_par) {} Item_real(double value_par) :value(value_par) {}
bool save_in_field(Field *field); int save_in_field(Field *field);
enum Type type() const { return REAL_ITEM; } enum Type type() const { return REAL_ITEM; }
double val() { return value; } double val() { return value; }
longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5));} longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5));}
...@@ -297,7 +297,7 @@ class Item_string :public Item ...@@ -297,7 +297,7 @@ class Item_string :public Item
double val() { return atof(str_value.ptr()); } double val() { return atof(str_value.ptr()); }
longlong val_int() { return strtoll(str_value.ptr(),(char**) 0,10); } longlong val_int() { return strtoll(str_value.ptr(),(char**) 0,10); }
String *val_str(String*) { return (String*) &str_value; } String *val_str(String*) { return (String*) &str_value; }
bool save_in_field(Field *field); int save_in_field(Field *field);
void make_field(Send_field *field); void make_field(Send_field *field);
enum Item_result result_type () const { return STRING_RESULT; } enum Item_result result_type () const { return STRING_RESULT; }
bool basic_const_item() const { return 1; } bool basic_const_item() const { return 1; }
...@@ -334,7 +334,7 @@ class Item_varbinary :public Item ...@@ -334,7 +334,7 @@ class Item_varbinary :public Item
double val() { return (double) Item_varbinary::val_int(); } double val() { return (double) Item_varbinary::val_int(); }
longlong val_int(); longlong val_int();
String *val_str(String*) { return &str_value; } String *val_str(String*) { return &str_value; }
bool save_in_field(Field *field); int save_in_field(Field *field);
void make_field(Send_field *field); void make_field(Send_field *field);
enum Item_result result_type () const { return INT_RESULT; } enum Item_result result_type () const { return INT_RESULT; }
}; };
...@@ -394,7 +394,7 @@ class Item_ref :public Item_ident ...@@ -394,7 +394,7 @@ class Item_ref :public Item_ident
bool send(THD *thd, String *tmp) { return (*ref)->send(thd, tmp); } bool send(THD *thd, String *tmp) { return (*ref)->send(thd, tmp); }
void make_field(Send_field *field) { (*ref)->make_field(field); } void make_field(Send_field *field) { (*ref)->make_field(field); }
bool fix_fields(THD *, struct st_table_list *, Item **); bool fix_fields(THD *, struct st_table_list *, Item **);
bool save_in_field(Field *field) { return (*ref)->save_in_field(field); } int save_in_field(Field *field) { return (*ref)->save_in_field(field); }
void save_org_in_field(Field *field) { (*ref)->save_org_in_field(field); } void save_org_in_field(Field *field) { (*ref)->save_org_in_field(field); }
enum Item_result result_type () const { return (*ref)->result_type(); } enum Item_result result_type () const { return (*ref)->result_type(); }
table_map used_tables() const { return (*ref)->used_tables(); } table_map used_tables() const { return (*ref)->used_tables(); }
...@@ -413,7 +413,7 @@ class Item_int_with_ref :public Item_int ...@@ -413,7 +413,7 @@ class Item_int_with_ref :public Item_int
public: public:
Item_int_with_ref(longlong i, Item *ref_arg) :Item_int(i), ref(ref_arg) Item_int_with_ref(longlong i, Item *ref_arg) :Item_int(i), ref(ref_arg)
{} {}
bool save_in_field(Field *field) int save_in_field(Field *field)
{ {
return ref->save_in_field(field); return ref->save_in_field(field);
} }
......
...@@ -43,7 +43,8 @@ static bool convert_constant_item(Field *field, Item **item) ...@@ -43,7 +43,8 @@ static bool convert_constant_item(Field *field, Item **item)
{ {
if ((*item)->const_item()) if ((*item)->const_item())
{ {
(*item)->save_in_field(field); if ((*item)->save_in_field(field))
return 0;
if (!((*item)->null_value)) if (!((*item)->null_value))
{ {
Item *tmp=new Item_int_with_ref(field->val_int(), *item); Item *tmp=new Item_int_with_ref(field->val_int(), *item);
......
...@@ -86,6 +86,11 @@ Item *create_func_cot(Item* a) ...@@ -86,6 +86,11 @@ Item *create_func_cot(Item* a)
new Item_func_tan(a)); new Item_func_tan(a));
} }
Item *create_func_crc32(Item* a)
{
return new Item_func_crc32(a);
}
Item *create_func_date_format(Item* a,Item *b) Item *create_func_date_format(Item* a,Item *b)
{ {
return new Item_func_date_format(a,b,0); return new Item_func_date_format(a,b,0);
......
...@@ -29,6 +29,7 @@ Item *create_func_connection_id(void); ...@@ -29,6 +29,7 @@ Item *create_func_connection_id(void);
Item *create_func_conv(Item* a, Item *b, Item *c); Item *create_func_conv(Item* a, Item *b, Item *c);
Item *create_func_cos(Item* a); Item *create_func_cos(Item* a);
Item *create_func_cot(Item* a); Item *create_func_cot(Item* a);
Item *create_func_crc32(Item* a);
Item *create_func_date_format(Item* a,Item *b); Item *create_func_date_format(Item* a,Item *b);
Item *create_func_dayname(Item* a); Item *create_func_dayname(Item* a);
Item *create_func_dayofmonth(Item* a); Item *create_func_dayofmonth(Item* a);
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <hash.h> #include <hash.h>
#include <time.h> #include <time.h>
#include <ft_global.h> #include <ft_global.h>
#include <zlib.h>
#include "slave.h" // for wait_for_master_pos #include "slave.h" // for wait_for_master_pos
#include "gstream.h" #include "gstream.h"
...@@ -801,6 +802,18 @@ longlong Item_func_min_max::val_int() ...@@ -801,6 +802,18 @@ longlong Item_func_min_max::val_int()
return value; return value;
} }
longlong Item_func_crc32::val_int()
{
String *res=args[0]->val_str(&value);
if (!res)
{
null_value=1;
return 0; /* purecov: inspected */
}
null_value=0;
return (longlong) crc32(0L, (Bytef*)res->ptr(), res->length());
}
longlong Item_func_length::val_int() longlong Item_func_length::val_int()
{ {
......
...@@ -518,6 +518,16 @@ class Item_func_max :public Item_func_min_max ...@@ -518,6 +518,16 @@ class Item_func_max :public Item_func_min_max
const char *func_name() const { return "greatest"; } const char *func_name() const { return "greatest"; }
}; };
class Item_func_crc32 :public Item_int_func
{
String value;
public:
Item_func_crc32(Item *a) :Item_int_func(a) {}
longlong val_int();
const char *func_name() const { return "crc32"; }
void fix_length_and_dec() { max_length=10; }
};
class Item_func_length :public Item_int_func class Item_func_length :public Item_int_func
{ {
......
...@@ -1848,9 +1848,11 @@ String *Item_func_conv_charset::val_str(String *str) ...@@ -1848,9 +1848,11 @@ String *Item_func_conv_charset::val_str(String *str)
void Item_func_conv_charset::fix_length_and_dec() void Item_func_conv_charset::fix_length_and_dec()
{ {
max_length = args[0]->max_length*(conv_charset->mbmaxlen?conv_charset->mbmaxlen:1); max_length = args[0]->max_length*(conv_charset->mbmaxlen?conv_charset->mbmaxlen:1);
str_value.set_charset(conv_charset);
} }
String *Item_func_conv_charset3::val_str(String *str) String *Item_func_conv_charset3::val_str(String *str)
{ {
my_wc_t wc; my_wc_t wc;
...@@ -1918,7 +1920,7 @@ String *Item_func_conv_charset3::val_str(String *str) ...@@ -1918,7 +1920,7 @@ String *Item_func_conv_charset3::val_str(String *str)
} }
bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables) bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables, Item **ref)
{ {
char buff[STACK_BUFF_ALLOC]; // Max argument in function char buff[STACK_BUFF_ALLOC]; // Max argument in function
binary=0; binary=0;
...@@ -1943,6 +1945,53 @@ void Item_func_conv_charset3::fix_length_and_dec() ...@@ -1943,6 +1945,53 @@ void Item_func_conv_charset3::fix_length_and_dec()
max_length = args[0]->max_length; max_length = args[0]->max_length;
} }
String *Item_func_set_collation::val_str(String *str)
{
str=args[0]->val_str(str);
null_value=args[0]->null_value;
str->set_charset(set_collation);
return str;
}
bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, Item **ref)
{
char buff[STACK_BUFF_ALLOC]; // Max argument in function
binary=0;
used_tables_cache=0;
const_item_cache=1;
if (thd && check_stack_overrun(thd,buff))
return 0; // Fatal error if flag is set!
if (args[0]->fix_fields(thd, tables, args))
return 1;
maybe_null=args[0]->maybe_null;
binary=args[0]->binary;
const_item_cache=args[0]->const_item();
str_value.set_charset(set_collation);
fix_length_and_dec();
return 0;
}
bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
{
/* Assume we don't have rtti */
if (this == item)
return 1;
if (item->type() != FUNC_ITEM)
return 0;
Item_func *item_func=(Item_func*) item;
if (arg_count != item_func->arg_count ||
func_name() != item_func->func_name())
return 0;
Item_func_set_collation *item_func_sc=(Item_func_set_collation*) item;
if (set_collation != item_func_sc->set_collation)
return 0;
for (uint i=0; i < arg_count ; i++)
if (!args[i]->eq(item_func_sc->args[i], binary_cmp))
return 0;
return 1;
}
String *Item_func_charset::val_str(String *str) String *Item_func_charset::val_str(String *str)
{ {
......
...@@ -472,7 +472,7 @@ class Item_func_export_set: public Item_str_func ...@@ -472,7 +472,7 @@ class Item_func_export_set: public Item_str_func
const char *func_name() const { return "export_set"; } const char *func_name() const { return "export_set"; }
}; };
class Item_func_inet_ntoa : public Item_str_func class Item_func_inet_ntoa : public Item_str_func
{ {
public: public:
Item_func_inet_ntoa(Item *a) :Item_str_func(a) Item_func_inet_ntoa(Item *a) :Item_str_func(a)
...@@ -488,15 +488,30 @@ class Item_func_conv_charset :public Item_str_func ...@@ -488,15 +488,30 @@ class Item_func_conv_charset :public Item_str_func
CHARSET_INFO *conv_charset; CHARSET_INFO *conv_charset;
public: public:
Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a) Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a)
{ { conv_charset=cs; }
conv_charset=cs; bool fix_fields(THD *thd,struct st_table_list *tables,Item **ref);
}
bool fix_fields(THD *thd,struct st_table_list *tables);
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(); void fix_length_and_dec();
const char *func_name() const { return "conv_charset"; } const char *func_name() const { return "conv_charset"; }
}; };
class Item_func_set_collation :public Item_str_func
{
CHARSET_INFO *set_collation;
public:
Item_func_set_collation(Item *a, CHARSET_INFO *cs) :Item_str_func(a)
{ set_collation=cs; }
bool fix_fields(THD *thd,struct st_table_list *tables, Item **ref);
String *val_str(String *);
void fix_length_and_dec()
{
max_length = args[0]->max_length;
str_value.set_charset(set_collation);
}
bool eq(const Item *item, bool binary_cmp) const;
const char *func_name() const { return "set_collation"; }
};
class Item_func_conv_charset3 :public Item_str_func class Item_func_conv_charset3 :public Item_str_func
{ {
public: public:
......
...@@ -410,7 +410,7 @@ String *Item_date::val_str(String *str) ...@@ -410,7 +410,7 @@ String *Item_date::val_str(String *str)
} }
bool Item_date::save_in_field(Field *field) int Item_date::save_in_field(Field *field)
{ {
TIME ltime; TIME ltime;
timestamp_type t_type=TIMESTAMP_FULL; timestamp_type t_type=TIMESTAMP_FULL;
...@@ -525,7 +525,7 @@ bool Item_func_now::get_date(TIME *res, ...@@ -525,7 +525,7 @@ bool Item_func_now::get_date(TIME *res,
} }
bool Item_func_now::save_in_field(Field *to) int Item_func_now::save_in_field(Field *to)
{ {
to->set_notnull(); to->set_notnull();
to->store_time(&ltime,TIMESTAMP_FULL); to->store_time(&ltime,TIMESTAMP_FULL);
......
...@@ -228,7 +228,7 @@ class Item_date :public Item_func ...@@ -228,7 +228,7 @@ class Item_date :public Item_func
double val() { return (double) val_int(); } double val() { return (double) val_int(); }
const char *func_name() const { return "date"; } const char *func_name() const { return "date"; }
void fix_length_and_dec() { decimals=0; max_length=10; } void fix_length_and_dec() { decimals=0; max_length=10; }
bool save_in_field(Field *to); int save_in_field(Field *to);
void make_field(Send_field *tmp_field) void make_field(Send_field *tmp_field)
{ {
init_make_field(tmp_field,FIELD_TYPE_DATE); init_make_field(tmp_field,FIELD_TYPE_DATE);
...@@ -311,7 +311,7 @@ class Item_func_now :public Item_date_func ...@@ -311,7 +311,7 @@ class Item_func_now :public Item_date_func
enum Item_result result_type () const { return STRING_RESULT; } enum Item_result result_type () const { return STRING_RESULT; }
double val() { return (double) value; } double val() { return (double) value; }
longlong val_int() { return value; } longlong val_int() { return value; }
bool save_in_field(Field *to); int save_in_field(Field *to);
String *val_str(String *str) String *val_str(String *str)
{ str_value.set(buff,buff_length,default_charset_info); return &str_value; } { str_value.set(buff,buff_length,default_charset_info); return &str_value; }
const char *func_name() const { return "now"; } const char *func_name() const { return "now"; }
......
...@@ -89,6 +89,7 @@ static SYMBOL symbols[] = { ...@@ -89,6 +89,7 @@ static SYMBOL symbols[] = {
{ "CHECKSUM", SYM(CHECKSUM_SYM),0,0}, { "CHECKSUM", SYM(CHECKSUM_SYM),0,0},
{ "CIPHER", SYM(CIPHER_SYM),0,0}, { "CIPHER", SYM(CIPHER_SYM),0,0},
{ "CLOSE", SYM(CLOSE_SYM),0,0}, { "CLOSE", SYM(CLOSE_SYM),0,0},
{ "COLLATE", SYM(COLLATE_SYM),0,0},
{ "COLUMN", SYM(COLUMN_SYM),0,0}, { "COLUMN", SYM(COLUMN_SYM),0,0},
{ "COLUMNS", SYM(COLUMNS),0,0}, { "COLUMNS", SYM(COLUMNS),0,0},
{ "COMMENT", SYM(COMMENT_SYM),0,0}, { "COMMENT", SYM(COMMENT_SYM),0,0},
...@@ -430,6 +431,7 @@ static SYMBOL sql_functions[] = { ...@@ -430,6 +431,7 @@ static SYMBOL sql_functions[] = {
{ "COUNT", SYM(COUNT_SYM),0,0}, { "COUNT", SYM(COUNT_SYM),0,0},
{ "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)}, { "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
{ "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)}, { "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
{ "CRC32", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)},
{ "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)}, { "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)},
{ "CURDATE", SYM(CURDATE),0,0}, { "CURDATE", SYM(CURDATE),0,0},
{ "CURTIME", SYM(CURTIME),0,0}, { "CURTIME", SYM(CURTIME),0,0},
......
...@@ -1028,7 +1028,7 @@ get_mm_leaf(PARAM *param, Field *field, KEY_PART *key_part, ...@@ -1028,7 +1028,7 @@ get_mm_leaf(PARAM *param, Field *field, KEY_PART *key_part,
field->cmp_type() != value->result_type()) field->cmp_type() != value->result_type())
DBUG_RETURN(0); DBUG_RETURN(0);
if (value->save_in_field(field)) if (value->save_in_field(field) > 0)
{ {
if (type == Item_func::EQUAL_FUNC) if (type == Item_func::EQUAL_FUNC)
{ {
......
...@@ -40,3 +40,10 @@ armscii8 32 ...@@ -40,3 +40,10 @@ armscii8 32
utf8 33 utf8 33
win1250ch 34 win1250ch 34
ucs2 35 ucs2 35
cp866 36
keybcs2 37
macce 38
macroman 39
pclatin2 40
latvian 41
latvian1 42
# ctype array (must be 257 elements)
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 00
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
01 02 01 02 01 02 01 02 00 00 00 00 00 00 00 48
# to_lower array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
A0 A1 A2 A3 A4 A5 86 87 88 89 AA AB AC AD AE AF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
A0 A1 A2 A3 A4 A5 86 87 88 89 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F1 F1 F3 F3 F5 F5 F7 F7 F8 F9 FA FB FC FD FE FF
# to_upper array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
F0 F0 F2 F2 F4 F4 F6 F6 F8 F9 FA FB FC FD FE FF
# sort_order array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 56 57 58 59 5A 5B 5C 5E 5F 62
67 68 69 6C 71 74 75 76 77 78 7B B0 B1 B2 B3 B4
B5 41 42 43 44 45 56 57 58 59 5A 5B 5C 5E 5F 62
67 68 69 6C 71 74 75 76 77 78 7B B6 B7 B8 B9 BA
80 81 82 83 84 85 88 89 8A 8C 8D 8E 8F 90 91 92
93 94 95 96 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3
80 81 82 83 84 85 88 89 8A 8C 8D 8E 8F 90 91 92
BB BD BE C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC
CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD
DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 F3 F4 F5 F6 F7
93 94 95 96 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3
86 86 87 87 8B 8B 97 97 F8 F9 FA FB FC FD FE FF
# Unicode mappping (must be 256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041A 041B 041C 041D 041E 041F
0420 0421 0422 0423 0424 0425 0426 0427 0428 0429 042A 042B 042C 042D 042E 042F
0430 0431 0432 0433 0434 0435 0436 0437 0438 0439 043A 043B 043C 043D 043E 043F
2591 2592 2593 2502 2524 2561 2562 2556 2555 2563 2551 2557 255D 255C 255B 2510
2514 2534 252C 251C 2500 253C 255E 255F 255A 2554 2569 2566 2560 2550 256C 2567
2568 2564 2565 2559 2558 2552 2553 256B 256A 2518 250C 2588 2584 258C 2590 2580
0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044A 044B 044C 044D 044E 044F
0401 0451 0404 0454 0407 0457 040E 045E 00B0 2219 00B7 221A 207F 00B2 25A0 00A0
# Configuration file for the dos character set # Configuration file for the dos (aka cp437 DOSLatinUS) character set
# ctype array (must have 257 elements) # ctype array (must have 257 elements)
00 00
......
# ctype array (must be 257 elements)
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 00
01 02 82 02 02 01 01 02 82 81 01 01 02 02 01 01
81 02 01 02 02 01 02 01 02 01 01 01 01 01 01 02
02 02 02 02 02 01 01 01 02 02 02 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
02 02 01 02 01 02 00 02 01 01 01 02 00 02 02 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48
# to_lower array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
87 81 82 83 84 83 86 87 88 88 8D A1 8C 8D 84 A0
82 91 91 93 94 A2 96 A3 98 94 81 9B 8C 98 A9 9F
A0 A1 A2 A3 A4 A4 96 93 9B A9 AA AA AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 ED E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# to_upper array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 68 59 5A 7B 7C 7D 7E 7F
87 9A 90 85 8E 85 86 80 89 89 8A 8B 9C 8A 8E 8F
90 92 92 A7 99 95 A6 97 9D 99 9A A8 9C 9D 9E 9F
8F 8B 95 97 A5 A5 A6 A7 A8 9E AB AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC E8 EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# sort_order array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 44 45 47 49 50 51 52 53 54 55 56 57 58 5A
5E 5F 60 63 66 68 6C 6D 6E 6F 72 90 91 92 93 94
95 41 44 45 47 49 50 51 52 53 54 55 56 57 58 5A
5E 5F 60 63 66 68 6C 6D 6E 6F 72 96 97 98 99 9A
45 68 49 47 41 47 66 45 49 49 56 53 56 56 41 41
49 72 72 5A 5A 5A 68 68 6F 5A 68 63 56 6F 60 66
41 53 5A 68 58 58 68 5A 63 60 60 60 A0 A1 A2 A3
A4 A5 A6 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC
BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC
CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC
80 65 83 87 88 89 DD 8A 85 8B 84 81 DE 85 82 DF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# Unicode mappping (must be 256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
010C 00FC 00E9 010F 00E4 010E 0164 010D 011B 011A 0139 00CD 013E 013A 00C4 00C1
00C9 017E 017D 00F4 00F6 00D3 016F 00DA 00FD 00D6 00DC 0160 013D 00DD 0158 0165
00E1 00ED 00F3 00FA 0148 0147 016E 00D4 0161 0159 0155 0154 00BC 00A1 00AB 00BB
2591 2592 2593 2502 2524 2561 2562 2556 2555 2563 2551 2557 255D 255C 255B 2510
2514 2534 252C 251C 2500 253C 255E 255F 255A 2554 2569 2566 2560 2550 256C 2567
2568 2564 2565 2559 2558 2552 2553 256B 256A 2518 250C 2588 2584 258C 2590 2580
03B1 00DF 0393 03C0 03A3 03C3 00B5 03C4 03A6 0398 03A9 03B4 221E 03C6 03B5 2229
2261 00B1 2265 2264 2320 2321 00F7 2248 00B0 2219 00B7 221A 207F 00B2 25A0 00A0
# Configuration file for the latvian character set.
# Created for case-sensitive record search
# Created accord with windows-1257 (iso-8859-4) codepage
# Created by Andis Grasis & Rihards Grasis e-mail:andis@cata.lv
# The ctype array must have 257 elements.
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20
01 20 10 20 10 10 00 00 20 10 20 10 20 10 10 10
20 10 10 10 10 10 10 10 20 00 20 10 20 10 10 20
48 20 10 10 10 20 10 10 10 10 01 10 10 10 10 01
10 10 10 10 10 10 10 10 10 10 02 10 10 10 10 02
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 10
# The to_lower array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 B8 A9 BA AB AC AD AE BF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 D7 F8 F9 FA FB FC FD FE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# The to_upper array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 A8 B9 AA BB BC BD BE AF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 F7 D8 D9 DA DB DC DD DE FF
# The sort_order array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
30 32 33 34 35 36 37 2B 38 39 3A 5C 3B 2C 3C 3D
76 7A 7C 7E 80 81 82 83 84 85 3E 3F 5D 5E 5F 40
41 86 92 94 9A 9C A6 A8 AC AE B4 B6 BA C0 C2 C8
D4 D6 D8 DC E3 E6 EE F0 F2 F4 F6 42 43 44 45 46
47 87 93 95 9B 9D A7 A9 AD AF B5 B7 BB C1 C3 C9
D5 D7 D9 DD E4 E7 EF F1 F3 F5 F7 48 49 4A 4B 20
75 21 56 22 59 73 70 71 23 74 24 5A 25 4D 51 50
26 54 55 57 58 72 2E 2F 27 E5 28 5B 29 4E 53 2A
31 FE 65 66 67 FF 4C 68 D3 69 DA 61 6A 2D 6B 90
6C 60 7D 7F 4F 6D 6E 6F D2 7B DB 62 77 78 79 91
8E B2 8A 96 88 8C A4 A2 98 9E F8 A0 AA B8 B0 BE
E1 C4 C6 CA CE D0 CC 63 EC BC DE EA E8 FA FC E0
8F B3 8B 97 89 8D A5 A3 99 9F F9 A1 AB B9 B1 BF
E2 C5 C7 CB CF D1 CD 64 ED BD DF EB E9 FB FD 52
# Unicode mapping (256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 008A 008B 008C 008D 008E 008F
0090 0091 0092 0093 0094 0095 0096 0097 0098 0099 009A 009B 009C 009D 009E 009F
00A0 201D 00A2 00A3 00A4 201E 00A6 00A7 00D8 00A9 0156 00AB 00AC 00AD 00AE 00C6
00B0 00B1 00B2 00B3 201C 00B5 00B6 00B7 00F8 00B9 0157 00BB 00BC 00BD 00BE 00E6
0104 012E 0100 0106 00C4 00C5 0118 0112 010C 00C9 0179 0116 0122 0136 012A 013B
0160 0143 0145 00D3 014C 00D5 00D6 00D7 0172 0141 015A 016A 00DC 017B 017D 00DF
0105 012F 0101 0107 00E4 00E5 0119 0113 010D 00E9 017A 0117 0123 0137 012B 013C
0161 0144 0146 00F3 014D 00F5 00F6 00F7 0173 0142 015B 016B 00FC 017C 017E 2019
# Configuration file for the latvian character set.
# Created for case-insensitive record search
# Created by Andis & Rihards
# The ctype array must have 257 elements.
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20
00 00 10 00 10 10 00 00 00 00 00 10 00 10 10 10
00 10 10 10 10 10 10 10 00 00 00 10 00 10 10 00
48 00 10 10 10 00 10 10 10 10 01 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 10
# The to_lower array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 B8 A9 BA AB AC AD AE BF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 D7 F8 F9 FA FB FC FD FE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# The to_upper array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 A8 B9 AA BB BC BD BE AF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 F7 D8 D9 DA DB DC DD DE FF
# The sort_order array must have 256 elements.
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
30 32 33 34 35 36 37 2B 38 39 3A 5C 3B 2C 3C 3D
76 7A 7C 7E 80 81 82 83 84 85 3E 3F 5D 5E 5F 40
41 86 92 94 9A 9C A6 A8 AC AE B4 B6 BA C0 C2 C8
D4 D6 D8 DC E3 E6 EE F0 F2 F4 F6 42 43 44 45 46
47 86 92 94 9A 9C A6 A8 AC AE B4 B6 BA C0 C2 C8
D4 D6 D8 DC E2 E6 EE F0 F2 F4 F6 48 49 4A 4B 20
75 21 56 22 59 73 70 71 23 74 24 5A 25 4D 51 50
26 54 55 57 58 72 2E 2F 27 E5 28 5B 29 4E 53 2A
31 FE 65 66 67 FF 4C 68 2D 69 DA 61 6A 2D 6B 90
6C 60 7D 7F 4F 6D 6E 6F D3 7B DB 62 77 78 79 90
8E B2 8A 96 88 8C A4 A2 98 9E F8 A0 AA B8 B0 BE
E1 C4 C6 CA CE D0 CC 63 EC BC DE EA E8 FA FC E0
8E B2 8A 96 88 8C A4 A2 98 9E F8 A0 AA B8 B0 BE
E1 C4 C6 CA CE D0 CC 64 EC BC DE EA E8 FA FC 52
# Unicode mapping (256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 008A 008B 008C 008D 008E 008F
0090 0091 0092 0093 0094 0095 0096 0097 0098 0099 009A 009B 009C 009D 009E 009F
00A0 201D 00A2 00A3 00A4 201E 00A6 00A7 00D8 00A9 0156 00AB 00AC 00AD 00AE 00C6
00B0 00B1 00B2 00B3 201C 00B5 00B6 00B7 00F8 00B9 0157 00BB 00BC 00BD 00BE 00E6
0104 012E 0100 0106 00C4 00C5 0118 0112 010C 00C9 0179 0116 0122 0136 012A 013B
0160 0143 0145 00D3 014C 00D5 00D6 00D7 0172 0141 015A 016A 00DC 017B 017D 00DF
0105 012F 0101 0107 00E4 00E5 0119 0113 010D 00E9 017A 0117 0123 0137 012B 013C
0161 0144 0146 00F3 014D 00F5 00F6 00F7 0173 0142 015B 016B 00FC 017C 017E 2019
# ctype array (must be 257 elements)
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 00
01 01 02 01 01 01 01 02 02 01 02 02 01 02 02 01
02 01 02 02 01 02 01 02 02 02 02 02 02 01 02 02
00 00 01 00 00 00 00 02 00 00 00 02 00 00 02 01
02 01 00 00 02 01 00 00 02 01 02 01 02 01 02 01
02 01 00 00 02 01 00 00 00 00 00 02 01 01 02 01
00 00 00 00 00 00 00 00 02 01 02 01 00 00 02 01
02 01 00 00 02 01 02 01 01 02 01 01 02 01 01 01
02 01 01 02 01 02 01 02 01 02 02 01 01 02 01 00
# to_lower array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 54 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 54 75 76 77 78 79 7A 7B 7C 7D 7E 7F
8A 82 82 8E 88 9A 9F 87 88 8B 8A 8B 8D 8D 8E 90
90 93 92 93 95 95 98 97 98 99 9A 9B 9C 9E 9E 9F
A0 A1 AB A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE B0
B0 B4 B2 B3 B4 FA B6 B7 B8 BA BA BC BC BE BE C0
C0 C4 C2 C3 C4 CB C6 C7 C8 C9 CA CB CE 9B CE D8
D0 D1 D2 D3 D4 D5 D6 D7 D8 DA DA DE DC DD DE E0
E0 E4 E2 E3 E4 E6 E6 87 E9 E9 92 EC EC F0 97 99
F0 F3 9C F3 F5 F5 F7 F7 F9 F9 FA FD B8 FD AE FF
# to_upper array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 74 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 74 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 81 83 84 85 86 E7 84 89 80 89 8C 8C 83 8F
8F 91 EA 91 94 94 96 EE 96 EF 85 CD F2 9D 9D 86
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA A2 AC AD FE AF
AF B1 B2 B3 B1 B5 B6 B7 FC B9 B9 BB BB BD BD BF
BF C1 C2 C3 C1 C5 C6 C7 C8 C9 CA C5 CC CD CC CF
D0 D1 D2 D3 D4 D5 D6 D7 CF D9 D9 DB DC DD DB DF
DF E1 E2 E3 E1 E5 E5 E7 E8 E8 EA EB EB ED EE EF
ED F1 F2 F1 F4 F4 F6 F6 F8 F8 B5 FB FC FB FE FF
# sort_order array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 46 47 4A 4C 52 53 55 56 5A 5B 5D 62 62 67
6F 70 71 75 79 81 88 89 8A 8B 8D 90 91 92 93 94
95 41 46 47 4A 4C 52 53 55 56 5A 5B 5D 62 62 67
6F 70 71 75 79 81 88 89 8A 8B 8D 96 97 98 99 9A
41 41 41 4C 41 67 81 41 41 47 41 47 47 47 4C 8D
8D 4A 56 4A 4C 4C 4C 67 4C 67 67 67 81 4C 4C 81
A0 A1 4C A3 A4 A5 A6 75 A8 A9 AA 4C AC AD 53 56
56 56 B2 B3 56 5B B6 B7 5D 5D 5D 5D 5D 5D 5D 62
62 62 C2 C3 62 62 C6 C7 C8 C9 CA 62 67 67 67 67
D0 D1 D2 D3 D4 D5 D6 D7 67 71 71 71 DC DD 71 71
71 75 E2 E3 75 75 75 41 79 79 56 8D 8D 81 67 67
81 81 81 81 81 81 81 81 8B 8B 5B 8D 5D 8D 53 FF
# Unicode mappping (must be 256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
00C4 0100 0101 00C9 0104 00D6 00DC 00E1 0105 010C 00E4 010D 0106 0107 00E9 0179
017A 010E 00ED 010F 0112 0113 0116 00F3 0117 00F4 00F6 00F5 00FA 011A 011B 00FC
2020 00B0 0118 00A3 00A7 2022 00B6 00DF 00AE 00A9 2122 0119 00A8 2260 0123 012E
012F 012A 2264 2265 012B 0136 2202 2211 0142 013B 013C 013D 013E 0139 013A 0145
0146 0143 00AC 221A 0144 0147 2206 00AB 00BB 2026 00A0 0148 0150 00D5 0151 014C
2013 2014 201C 201D 2018 2019 00F7 25CA 014D 0154 0155 0158 2039 203A 0159 0156
0157 0160 201A 201E 0161 015A 015B 00C1 0164 0165 00CD 017D 017E 016A 00D3 00D4
016B 016E 00DA 016F 0170 0171 0172 0173 00DD 00FD 0137 017B 0141 017C 0122 02C7
# ctype array (must be 257 elements)
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 10
20 01 01 01 01 01 01 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
00 00 00 00 00 00 00 02 00 00 00 00 00 00 01 01
00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02
00 00 00 00 02 00 00 00 00 00 00 20 01 01 00 00
00 00 00 00 00 00 00 00 02 01 00 00 00 00 00 00
00 00 00 00 00 20 01 01 01 01 01 01 01 01 01 01
00 01 01 01 01 02 00 00 00 00 00 00 00 00 00 00
# to_lower array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
8A 8C 8D 8E 96 9A 9F 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD BE BF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA 88 8B 9B CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D8 DA DB DC DD DE DF
E0 E1 E2 E3 E4 89 90 87 91 8F 92 94 95 93 97 99
F0 98 9C 9E 9D F5 F6 F7 F8 F9 FA FB FC FD FE FF
# to_upper array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 E7 CB E5 80 CC 81 82 83 E9
E6 E8 EA ED EB EC 84 EE F1 EF 85 CD F2 F4 F3 86
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD AE AF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D9 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# sort_order array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 49 50 52 53 57 59 60 61 67 68 69 70 71 72
79 80 81 82 84 85 90 91 92 93 95 A0 A1 A2 A3 A4
A5 41 49 50 52 53 57 59 60 61 67 68 69 70 71 72
79 80 81 82 84 85 90 91 92 93 95 A6 A7 A8 A9 AA
41 41 50 53 71 72 85 41 41 41 41 41 41 50 53 53
53 53 61 61 61 61 71 72 72 72 72 72 85 85 85 85
AB AC AD AE AF B0 B1 82 B2 B3 B4 B5 B6 B7 48 72
B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 48 72
C6 C7 C8 C9 57 CA CB CC CD CE CF 41 41 72 D0 D1
D2 D3 D4 D5 D6 D7 D8 D9 93 93 DA DB DC DD DE DF
E0 E1 E2 E3 E4 41 53 41 53 53 61 61 61 61 72 72
F0 72 85 85 85 61 F6 F7 F8 F9 FA FB FC FD FE FF
# Unicode mappping (must be 256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
00C4 00C5 00C7 00C9 00D1 00D6 00DC 00E1 00E0 00E2 00E4 00E3 00E5 00E7 00E9 00E8
00EA 00EB 00ED 00EC 00EE 00EF 00F1 00F3 00F2 00F4 00F6 00F5 00FA 00F9 00FB 00FC
2020 00B0 00A2 00A3 00A7 2022 00B6 00DF 00AE 00A9 2122 00B4 00A8 2260 00C6 00D8
221E 00B1 2264 2265 00A5 00B5 2202 2211 220F 03C0 222B 00AA 00BA 03A9 00E6 00F8
00BF 00A1 00AC 221A 0192 2248 2206 00AB 00BB 2026 00A0 00C0 00C3 00D5 0152 0153
2013 2014 201C 201D 2018 2019 00F7 25CA 00FF 0178 2044 20AC 2039 203A FB01 FB02
2021 00B7 201A 201E 2030 00C2 00CA 00C1 00CB 00C8 00CD 00CE 00CF 00CC 00D3 00D4
F8FF 00D2 00DA 00DB 00D9 0131 02C6 02DC 00AF 02D8 02D9 02DA 00B8 02DD 02DB 02C7
# ctype array (must be 257 elements)
00
20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 00
01 02 02 02 02 02 02 02 02 02 01 02 02 01 01 01
01 01 02 02 02 01 02 01 02 01 01 01 02 01 00 02
02 02 02 02 01 02 01 02 01 02 00 02 01 01 00 00
00 00 00 00 00 01 01 01 02 00 00 00 00 01 02 00
00 00 00 00 00 00 01 02 00 00 00 00 00 00 00 00
02 01 01 01 02 01 01 01 02 00 00 00 00 01 01 00
01 02 01 01 02 02 01 02 01 01 02 01 02 01 02 00
00 00 00 00 00 00 00 00 00 00 00 02 01 02 00 48
# to_lower array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
87 81 82 83 84 85 86 87 88 89 8B 8B 8C AB 84 86
82 92 92 93 94 96 96 98 98 94 81 9C 9C 88 9E 9F
A0 A1 A2 A3 A5 A5 A7 A7 A9 A9 AA AB 9F B8 AE AF
B0 B1 B2 B3 B4 A0 83 D8 B8 B9 BA BB BC BE BE BF
C0 C1 C2 C3 C4 C5 C7 C7 C8 C9 CA CB CC CD CE CF
D0 D0 D4 89 D4 E5 A1 8C D8 D9 DA DB DC EE 85 DF
A2 E1 93 E4 E4 E5 E7 E7 EA A3 E8 FB EC EC EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
# to_upper array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 9A 90 B6 8E DE 8F 80 9D D3 8A 8A D7 8D 8E 8F
90 91 91 E2 99 95 95 97 97 99 9A 9B 9B 9D 9E AC
B5 D6 E0 E9 A4 A4 A6 A6 A8 A8 AA 8D AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 AD B9 BA BB BC BE BD BF
C0 C1 C2 C3 C4 C5 C6 C6 C8 C9 CA CB CC CD CE CF
D1 D1 D2 D3 D2 D5 D6 D7 B7 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E3 D5 E6 E6 E8 E9 E8 EB ED ED DD EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA EB FC FC FE FF
# sort_order array (must be 256 elements)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 47 48 4C 4F 54 55 56 57 5A 5B 5C 5E 5F 62
67 68 69 6C 71 74 75 76 77 78 7B 90 91 92 93 94
95 41 47 48 4C 4F 54 55 56 57 5A 5B 5C 5E 5F 62
67 68 69 6C 71 74 75 76 77 78 7B 96 97 98 99 9A
48 74 4F 41 41 74 48 48 5C 4F 62 62 57 7B 41 48
4F 5C 5C 62 62 5C 5C 6C 6C 62 74 71 71 5C 9E 48
41 57 62 74 41 41 7B 7B 4F 4F AA 7B 48 6C AE AF
B0 B1 B2 B3 B4 41 41 4F 6C B5 BA BB BC 7B 7B BF
C0 C1 C2 C3 C4 C5 41 41 C8 C9 CA CB CC CD CE CF
4C 4C 4C 4F 4C 60 57 57 4F D9 DA DB DC 71 74 DF
62 70 62 60 60 60 6C 6C 69 74 69 74 78 78 71 EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA 74 69 69 FE FF
# Unicode mappping (must be 256 elements)
0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F
0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F
0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F
0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 004F
0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F
0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F
0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E 007F
00C7 00FC 00E9 00E2 00E4 016F 0107 00E7 0142 00EB 0150 0151 00EE 0179 00C4 0106
00C9 0139 013A 00F4 00F6 013D 013E 015A 015B 00D6 00DC 0164 0165 0141 00D7 010D
00E1 00ED 00F3 00FA 0104 0105 017D 017E 0118 0119 00AC 017A 010C 015F 00AB 00BB
2591 2592 2593 2502 2524 00C1 00C2 011A 015E 2563 2551 2557 255D 017B 017C 2510
2514 2534 252C 251C 2500 253C 0102 0103 255A 2554 2569 2566 2560 2550 256C 00A4
0111 0110 010E 00CB 010F 0147 00CD 00CE 011B 2518 250C 2588 2584 0162 016E 2580
00D3 00DF 00D4 0143 0144 0148 0160 0161 0154 00DA 0155 0170 00FD 00DD 0163 00B4
00AD 02DD 02DB 02C7 02D8 00A7 00F7 00B8 00B0 00A8 02D9 0171 0158 0159 25A0 00A0
...@@ -285,7 +285,7 @@ int GLineString::get_mbr(MBR *mbr) const ...@@ -285,7 +285,7 @@ int GLineString::get_mbr(MBR *mbr) const
return 1; return 1;
for (; n_points>0; --n_points) for (; n_points>0; --n_points)
{ {
mbr->add_xy((double *)data, (double *)(data + 8)); mbr->add_xy(data, data + 8);
data += 8+8; data += 8+8;
} }
...@@ -551,7 +551,7 @@ int GPolygon::get_mbr(MBR *mbr) const ...@@ -551,7 +551,7 @@ int GPolygon::get_mbr(MBR *mbr) const
return 1; return 1;
for (; n_points>0; --n_points) for (; n_points>0; --n_points)
{ {
mbr->add_xy((double *)data, (double *)(data + 8)); mbr->add_xy(data, data + 8);
data += 8+8; data += 8+8;
} }
} }
...@@ -838,8 +838,7 @@ int GMultiPoint::get_mbr(MBR *mbr) const ...@@ -838,8 +838,7 @@ int GMultiPoint::get_mbr(MBR *mbr) const
return 1; return 1;
for (; n_points>0; --n_points) for (; n_points>0; --n_points)
{ {
mbr->add_xy((double *)(data + WKB_HEADER_SIZE), mbr->add_xy(data + WKB_HEADER_SIZE, data + 8 + WKB_HEADER_SIZE);
(double *)(data + 8 + WKB_HEADER_SIZE));
data += (8+8+WKB_HEADER_SIZE); data += (8+8+WKB_HEADER_SIZE);
} }
return 0; return 0;
...@@ -963,7 +962,7 @@ int GMultiLineString::get_mbr(MBR *mbr) const ...@@ -963,7 +962,7 @@ int GMultiLineString::get_mbr(MBR *mbr) const
for (; n_points>0; --n_points) for (; n_points>0; --n_points)
{ {
mbr->add_xy((double *)data, (double *)(data + 8)); mbr->add_xy(data, data + 8);
data += 8+8; data += 8+8;
} }
} }
...@@ -1156,7 +1155,7 @@ int GMultiPolygon::get_mbr(MBR *mbr) const ...@@ -1156,7 +1155,7 @@ int GMultiPolygon::get_mbr(MBR *mbr) const
for (; n_points>0; --n_points) for (; n_points>0; --n_points)
{ {
mbr->add_xy((double *)data, (double *)(data + 8)); mbr->add_xy(data, data + 8);
data += 8+8; data += 8+8;
} }
} }
......
...@@ -71,7 +71,7 @@ struct MBR ...@@ -71,7 +71,7 @@ struct MBR
} }
} }
void add_xy(double *px, double *py) void add_xy(const char *px, const char *py)
{ /* Not using "else" for proper one point MBR calculation */ { /* Not using "else" for proper one point MBR calculation */
double x, y; double x, y;
float8get(x, px); float8get(x, px);
......
...@@ -2115,7 +2115,7 @@ fill_record(List<Item> &fields,List<Item> &values) ...@@ -2115,7 +2115,7 @@ fill_record(List<Item> &fields,List<Item> &values)
while ((field=(Item_field*) f++)) while ((field=(Item_field*) f++))
{ {
value=v++; value=v++;
if (value->save_in_field(field->field)) if (value->save_in_field(field->field) > 0)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -2133,7 +2133,7 @@ fill_record(Field **ptr,List<Item> &values) ...@@ -2133,7 +2133,7 @@ fill_record(Field **ptr,List<Item> &values)
while ((field = *ptr++)) while ((field = *ptr++))
{ {
value=v++; value=v++;
if (value->save_in_field(field)) if (value->save_in_field(field) == 1)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
DBUG_RETURN(0); DBUG_RETURN(0);
......
...@@ -179,7 +179,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, ...@@ -179,7 +179,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
Item *item; Item *item;
for (key_len=0 ; (item=it_ke++) ; key_part++) for (key_len=0 ; (item=it_ke++) ; key_part++)
{ {
item->save_in_field(key_part->field); (void) item->save_in_field(key_part->field);
key_len+=key_part->store_length; key_len+=key_part->store_length;
} }
if (!(key= (byte*) sql_calloc(ALIGN_SIZE(key_len)))) if (!(key= (byte*) sql_calloc(ALIGN_SIZE(key_len))))
......
...@@ -2478,7 +2478,7 @@ store_val_in_field(Field *field,Item *item) ...@@ -2478,7 +2478,7 @@ store_val_in_field(Field *field,Item *item)
THD *thd=current_thd; THD *thd=current_thd;
ulong cuted_fields=thd->cuted_fields; ulong cuted_fields=thd->cuted_fields;
thd->count_cuted_fields=1; thd->count_cuted_fields=1;
item->save_in_field(field); (void) item->save_in_field(field);
thd->count_cuted_fields=0; thd->count_cuted_fields=0;
return cuted_fields != thd->cuted_fields; return cuted_fields != thd->cuted_fields;
} }
......
...@@ -338,7 +338,7 @@ class store_key_item :public store_key ...@@ -338,7 +338,7 @@ class store_key_item :public store_key
{} {}
bool copy() bool copy()
{ {
item->save_in_field(to_field); (void) item->save_in_field(to_field);
return err != 0; return err != 0;
} }
const char *name() const { return "func"; } const char *name() const { return "func"; }
...@@ -362,7 +362,7 @@ class store_key_const_item :public store_key_item ...@@ -362,7 +362,7 @@ class store_key_const_item :public store_key_item
if (!inited) if (!inited)
{ {
inited=1; inited=1;
item->save_in_field(to_field); (void)item->save_in_field(to_field);
} }
return err != 0; return err != 0;
} }
......
***************
*** 173,178 ****
select_result *result;
TMP_TABLE_PARAM tmp_table_param;
MYSQL_LOCK *lock;
};
--- 172,240 ----
select_result *result;
TMP_TABLE_PARAM tmp_table_param;
MYSQL_LOCK *lock;
+
+ bool select_distinct, //Is select distinct?
+ no_order, simple_order, simple_group,
+ skip_sort_order, need_tmp,
+ hidden_group_fields,
+ buffer_result;
+ DYNAMIC_ARRAY keyuse;
+ Item::cond_result cond_value;
+ List<Item> all_fields;
+ List<Item> & fields_list; // hold field list passed to mysql_select
+ int error;
+
+ ORDER *order, *group_list, *proc_param; //hold parameters of mysql_select
+ COND *conds; // ---"---
+ TABLE_LIST *tables_list; //hold 'tables' parameter of mysql_select
+ SQL_SELECT *select; //created in optimisation phase
+ TABLE *exec_tmp_table; //used in 'exec' to hold temporary table
+ SELECT_LEX *select_lex; //corresponding select_lex
+
+ my_bool test_function_query; // need to return select items 1 row
+ const char *zero_result_cause; // not 0 if exec must return zero result
+
+ JOIN(THD *thd, List<Item> &fields,
+ ulong select_options, select_result *result):
+ join_tab(0),
+ table(0),
+ tables(0), const_tables(0),
+ sort_and_group(0), first_record(0),
+ do_send_rows(1),
+ send_records(0), found_records(0), examined_rows(0),
+ thd(thd),
+ sum_funcs(0),
+ having(0),
+ select_options(select_options),
+ result(result),
+ lock(thd->lock),
+ select_distinct(test(select_options & SELECT_DISTINCT)),
+ no_order(0), simple_order(0), simple_group(0), skip_sort_order(0),
+ need_tmp(0),
+ hidden_group_fields (0), /*safety*/
+ buffer_result(test(select_options & OPTION_BUFFER_RESULT) &&
+ !test(select_options & OPTION_FOUND_ROWS)),
+ all_fields(fields),
+ fields_list(fields),
+ select(0),
+ exec_tmp_table(0),
+ select_lex(0), //for safety
+ test_function_query(0),
+ zero_result_cause(0)
+ {
+ fields_list = fields;
+ bzero((char*) &keyuse,sizeof(keyuse));
+ tmp_table_param.copy_field=0;
+ tmp_table_param.end_write_records= HA_POS_ERROR;
+ }
+
+ int prepare(TABLE_LIST *tables,
+ COND *conds, ORDER *order, ORDER *group, Item *having,
+ ORDER *proc_param, SELECT_LEX *select);
+ int optimize();
+ int global_optimize();
+ void exec();
+ int cleanup(THD *thd);
};
***************
*** 187,193 ****
bool store_val_in_field(Field *field,Item *val);
TABLE *create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
ORDER *group, bool distinct, bool save_sum_fields,
- bool allow_distinct_limit, ulong select_options);
void free_tmp_table(THD *thd, TABLE *entry);
void count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
bool reset_with_sum_func);
--- 249,256 ----
bool store_val_in_field(Field *field,Item *val);
TABLE *create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
ORDER *group, bool distinct, bool save_sum_fields,
+ bool allow_distinct_limit, ulong select_options,
+ SELECT_LEX *first_select);
void free_tmp_table(THD *thd, TABLE *entry);
void count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
bool reset_with_sum_func);
...@@ -167,6 +167,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -167,6 +167,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token CHECK_SYM %token CHECK_SYM
%token CIPHER %token CIPHER
%token COMMITTED_SYM %token COMMITTED_SYM
%token COLLATE_SYM
%token COLUMNS %token COLUMNS
%token COLUMN_SYM %token COLUMN_SYM
%token CONCURRENT %token CONCURRENT
...@@ -522,7 +523,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -522,7 +523,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%left '*' '/' '%' %left '*' '/' '%'
%left NEG '~' %left NEG '~'
%right NOT %right NOT
%right BINARY %right BINARY COLLATE_SYM
%type <lex_str> %type <lex_str>
IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME
...@@ -1129,7 +1130,7 @@ charset: ...@@ -1129,7 +1130,7 @@ charset:
{ {
if (!(Lex->charset=get_charset_by_name($1.str,MYF(0)))) if (!(Lex->charset=get_charset_by_name($1.str,MYF(0))))
{ {
net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$1); net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$1.str);
YYABORT; YYABORT;
} }
}; };
...@@ -1658,7 +1659,16 @@ expr_expr: ...@@ -1658,7 +1659,16 @@ expr_expr:
| expr '+' INTERVAL_SYM expr interval | expr '+' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,0); } { $$= new Item_date_add_interval($1,$4,$5,0); }
| expr '-' INTERVAL_SYM expr interval | expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }; { $$= new Item_date_add_interval($1,$4,$5,1); }
| expr COLLATE_SYM ident
{
if (!(Lex->charset=get_charset_by_name($3.str,MYF(0))))
{
net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$3.str);
YYABORT;
}
$$= new Item_func_set_collation($1,Lex->charset);
};
/* expressions that begin with 'expr' that do NOT follow IN_SYM */ /* expressions that begin with 'expr' that do NOT follow IN_SYM */
no_in_expr: no_in_expr:
...@@ -3446,7 +3456,7 @@ option_value: ...@@ -3446,7 +3456,7 @@ option_value:
CONVERT *tmp; CONVERT *tmp;
if (!(tmp=get_convert_set($3.str))) if (!(tmp=get_convert_set($3.str)))
{ {
net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$3); net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$3.str);
YYABORT; YYABORT;
} }
current_thd->convert_set=tmp; current_thd->convert_set=tmp;
......
...@@ -590,7 +590,7 @@ static bool make_empty_rec(File file,enum db_type table_type, ...@@ -590,7 +590,7 @@ static bool make_empty_rec(File file,enum db_type table_type,
if (field->def && if (field->def &&
(regfield->real_type() != FIELD_TYPE_YEAR || (regfield->real_type() != FIELD_TYPE_YEAR ||
field->def->val_int() != 0)) field->def->val_int() != 0))
field->def->save_in_field(regfield); (void) field->def->save_in_field(regfield);
else if (regfield->real_type() == FIELD_TYPE_ENUM && else if (regfield->real_type() == FIELD_TYPE_ENUM &&
(field->flags & NOT_NULL_FLAG)) (field->flags & NOT_NULL_FLAG))
{ {
......
...@@ -24,13 +24,15 @@ void my_caseup_str_mb(CHARSET_INFO * cs, char *str) ...@@ -24,13 +24,15 @@ void my_caseup_str_mb(CHARSET_INFO * cs, char *str)
{ {
register uint32 l; register uint32 l;
register char *end=str+strlen(str); /* BAR TODO: remove strlen() call */ register char *end=str+strlen(str); /* BAR TODO: remove strlen() call */
register uchar *map=cs->to_upper;
while (*str) while (*str)
{ {
if ((l=my_ismbchar(cs, str,end))) if ((l=my_ismbchar(cs, str,end)))
str+=l; str+=l;
else else
{ {
*str=(char)my_toupper(cs,(uchar)*str); *str=(char) map[(uchar)*str];
str++; str++;
} }
} }
...@@ -40,13 +42,15 @@ void my_casedn_str_mb(CHARSET_INFO * cs, char *str) ...@@ -40,13 +42,15 @@ void my_casedn_str_mb(CHARSET_INFO * cs, char *str)
{ {
register uint32 l; register uint32 l;
register char *end=str+strlen(str); register char *end=str+strlen(str);
register uchar *map=cs->to_lower;
while (*str) while (*str)
{ {
if ((l=my_ismbchar(cs, str,end))) if ((l=my_ismbchar(cs, str,end)))
str+=l; str+=l;
else else
{ {
*str=(char)my_tolower(cs,(uchar)*str); *str=(char) map[(uchar)*str];
str++; str++;
} }
} }
...@@ -56,13 +60,15 @@ void my_caseup_mb(CHARSET_INFO * cs, char *str, uint length) ...@@ -56,13 +60,15 @@ void my_caseup_mb(CHARSET_INFO * cs, char *str, uint length)
{ {
register uint32 l; register uint32 l;
register char *end=str+length; register char *end=str+length;
register uchar *map=cs->to_upper;
while (str<end) while (str<end)
{ {
if ((l=my_ismbchar(cs, str,end))) if ((l=my_ismbchar(cs, str,end)))
str+=l; str+=l;
else else
{ {
*str=(char)my_toupper(cs,(uchar)*str); *str=(char) map[(uchar)*str];
str++; str++;
} }
} }
...@@ -72,13 +78,15 @@ void my_casedn_mb(CHARSET_INFO * cs, char *str, uint length) ...@@ -72,13 +78,15 @@ void my_casedn_mb(CHARSET_INFO * cs, char *str, uint length)
{ {
register uint32 l; register uint32 l;
register char *end=str+length; register char *end=str+length;
register uchar *map=cs->to_lower;
while (str<end) while (str<end)
{ {
if ((l=my_ismbchar(cs, str,end))) if ((l=my_ismbchar(cs, str,end)))
str+=l; str+=l;
else else
{ {
*str=(char)my_tolower(cs,(uchar)*str); *str=(char) map[(uchar)*str];
str++; str++;
} }
} }
...@@ -88,6 +96,8 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t) ...@@ -88,6 +96,8 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t)
{ {
register uint32 l; register uint32 l;
register const char *end=s+strlen(s); register const char *end=s+strlen(s);
register uchar *map=cs->to_upper;
while (s<end) while (s<end)
{ {
if ((l=my_ismbchar(cs, s,end))) if ((l=my_ismbchar(cs, s,end)))
...@@ -98,7 +108,7 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t) ...@@ -98,7 +108,7 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t)
} }
else if (my_ismbhead(cs, *t)) else if (my_ismbhead(cs, *t))
return 1; return 1;
else if (my_toupper(cs,(uchar) *s++) != my_toupper(cs,(uchar) *t++)) else if (map[(uchar) *s++] != map[(uchar) *t++])
return 1; return 1;
} }
return *t; return *t;
...@@ -110,6 +120,8 @@ int my_strncasecmp_mb(CHARSET_INFO * cs, ...@@ -110,6 +120,8 @@ int my_strncasecmp_mb(CHARSET_INFO * cs,
{ {
register uint32 l; register uint32 l;
register const char *end=s+len; register const char *end=s+len;
register uchar *map=cs->to_upper;
while (s<end) while (s<end)
{ {
if ((l=my_ismbchar(cs, s,end))) if ((l=my_ismbchar(cs, s,end)))
...@@ -120,7 +132,7 @@ int my_strncasecmp_mb(CHARSET_INFO * cs, ...@@ -120,7 +132,7 @@ int my_strncasecmp_mb(CHARSET_INFO * cs,
} }
else if (my_ismbhead(cs, *t)) else if (my_ismbhead(cs, *t))
return 1; return 1;
else if (my_toupper(cs,(uchar) *s++) != my_toupper(cs,(uchar) *t++)) else if (map[(uchar) *s++] != map[(uchar) *t++])
return 1; return 1;
} }
return 0; return 0;
......
...@@ -46,43 +46,49 @@ int my_strnncoll_simple(CHARSET_INFO * cs,const char *s, uint slen, ...@@ -46,43 +46,49 @@ int my_strnncoll_simple(CHARSET_INFO * cs,const char *s, uint slen,
void my_caseup_str_8bit(CHARSET_INFO * cs,char *str) void my_caseup_str_8bit(CHARSET_INFO * cs,char *str)
{ {
while ((*str = (char) my_toupper(cs,(uchar) *str)) != 0) register uchar *map=cs->to_upper;
while ((*str = (char) map[(uchar) *str]) != 0)
str++; str++;
} }
void my_casedn_str_8bit(CHARSET_INFO * cs,char *str) void my_casedn_str_8bit(CHARSET_INFO * cs,char *str)
{ {
while ((*str = (char) my_tolower(cs,(uchar)*str)) != 0) register uchar *map=cs->to_lower;
while ((*str = (char) map[(uchar)*str]) != 0)
str++; str++;
} }
void my_caseup_8bit(CHARSET_INFO * cs, char *str, uint length) void my_caseup_8bit(CHARSET_INFO * cs, char *str, uint length)
{ {
register uchar *map=cs->to_upper;
for ( ; length>0 ; length--, str++) for ( ; length>0 ; length--, str++)
*str= (char) my_toupper(cs,(uchar)*str); *str= (char) map[(uchar)*str];
} }
void my_casedn_8bit(CHARSET_INFO * cs, char *str, uint length) void my_casedn_8bit(CHARSET_INFO * cs, char *str, uint length)
{ {
register uchar *map=cs->to_lower;
for ( ; length>0 ; length--, str++) for ( ; length>0 ; length--, str++)
*str= (char)my_tolower(cs,(uchar) *str); *str= (char) map[(uchar) *str];
} }
int my_strcasecmp_8bit(CHARSET_INFO * cs,const char *s, const char *t) int my_strcasecmp_8bit(CHARSET_INFO * cs,const char *s, const char *t)
{ {
while (my_toupper(cs,(uchar) *s) == my_toupper(cs,(uchar) *t++)) register uchar *map=cs->to_upper;
while (map[(uchar) *s] == map[(uchar) *t++])
if (!*s++) return 0; if (!*s++) return 0;
return ((int) my_toupper(cs,(uchar) s[0]) - (int) my_toupper(cs,(uchar) t[-1])); return ((int) map[(uchar) s[0]] - (int) map[(uchar) t[-1]]);
} }
int my_strncasecmp_8bit(CHARSET_INFO * cs, int my_strncasecmp_8bit(CHARSET_INFO * cs,
const char *s, const char *t, uint len) const char *s, const char *t, uint len)
{ {
while (len-- != 0 && my_toupper(cs,(uchar)*s++) == my_toupper(cs,(uchar)*t++)) ; register uchar *map=cs->to_upper;
while (len-- != 0 && map[(uchar)*s++] == map[(uchar)*t++]) ;
return (int) len+1; return (int) len+1;
} }
......
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