ruby-mysql 2.9.14 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
 - data/README.rdoc +5 -2
 - data/lib/mysql/charset.rb +1 -1
 - data/lib/mysql/constants.rb +84 -44
 - data/lib/mysql/error.rb +10 -1
 - data/lib/mysql/protocol.rb +19 -6
 - data/lib/mysql.rb +6 -4
 - data/test/test_mysql.rb +35 -1
 - metadata +7 -8
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: '03296aa0e624e599242e8efc5d3011b4337e161c3b7bf1c9cc81e98fa99f5052'
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: c7391d48dab125e86b97b8130556e69ceadf503e11884744b7fdf19af3b58cf1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ba1a7bad362dc1523de97aa487ee8c571649854a2bb8a9342ecd525dbda0441c9562639556dcd933f7e7c643373907144329e97c2600af30a5ae6b1cc5fb5606
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: bdea4b3d97980fea097d59525b327c275374d006ddb699efda0c359608d8588a8beba742f713f0b2721433ea5efbf9eac5db8d7f4e6d7ddbe9eeb050220e6a3d
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -20,6 +20,8 @@ MySQL connector for Ruby. 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            * MySQL/Ruby 2.8.x とほぼ互換があります。
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
            * MySQL 8.0 には対応していません。
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       23 
25 
     | 
    
         
             
            == Synopsis
         
     | 
| 
       24 
26 
     | 
    
         | 
| 
       25 
27 
     | 
    
         
             
            使用例:
         
     | 
| 
         @@ -42,7 +44,8 @@ MySQL connector for Ruby. 
     | 
|
| 
       42 
44 
     | 
    
         
             
            * Mysql#options でサポートしているオプションは次のものだけです:
         
     | 
| 
       43 
45 
     | 
    
         
             
              Mysql::INIT_COMMAND, Mysql::OPT_CONNECT_TIMEOUT,
         
     | 
| 
       44 
46 
     | 
    
         
             
              Mysql::OPT_LOCAL_INFILE, Mysql::OPT_READ_TIMEOUT,
         
     | 
| 
       45 
     | 
    
         
            -
              Mysql::OPT_WRITE_TIMEOUT, Mysql::SET_CHARSET_NAME 
     | 
| 
      
 47 
     | 
    
         
            +
              Mysql::OPT_WRITE_TIMEOUT, Mysql::SET_CHARSET_NAME,
         
     | 
| 
      
 48 
     | 
    
         
            +
              Mysql::OPT_LOAD_DATA_LOCAL_DIR.
         
     | 
| 
       46 
49 
     | 
    
         
             
              これら以外を指定すると "option not implementted" という warning が標準エラー出力に出力されます。
         
     | 
| 
       47 
50 
     | 
    
         | 
| 
       48 
51 
     | 
    
         
             
            * Mysql#use_result は Mysql#store_result と同じです。つまりサーバーから一気に結果セットを読み込みます。
         
     | 
| 
         @@ -64,5 +67,5 @@ MySQL connector for Ruby. 
     | 
|
| 
       64 
67 
     | 
    
         
             
            == Copyright
         
     | 
| 
       65 
68 
     | 
    
         | 
| 
       66 
69 
     | 
    
         
             
            Author    :: TOMITA Masahiro <tommy@tmtm.org>
         
     | 
| 
       67 
     | 
    
         
            -
            Copyright :: Copyright (c)  
     | 
| 
      
 70 
     | 
    
         
            +
            Copyright :: Copyright (c) 2008 TOMITA Masahiro
         
     | 
| 
       68 
71 
     | 
    
         
             
            License   :: Ruby's
         
     | 
    
        data/lib/mysql/charset.rb
    CHANGED
    
    
    
        data/lib/mysql/constants.rb
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: ascii-8bit
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2003 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2003 TOMITA Masahiro
         
     | 
| 
       3 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            class Mysql
         
     | 
| 
         @@ -36,6 +36,7 @@ class Mysql 
     | 
|
| 
       36 
36 
     | 
    
         
             
              COM_DAEMON              = 29
         
     | 
| 
       37 
37 
     | 
    
         
             
              COM_BINLOG_DUMP_GTID    = 30
         
     | 
| 
       38 
38 
     | 
    
         
             
              COM_RESET_CONNECTION    = 31
         
     | 
| 
      
 39 
     | 
    
         
            +
              COM_CLONE               = 32
         
     | 
| 
       39 
40 
     | 
    
         | 
| 
       40 
41 
     | 
    
         
             
              # Client flag
         
     | 
| 
       41 
42 
     | 
    
         
             
              CLIENT_LONG_PASSWORD                  = 1         # new more secure passwords
         
     | 
| 
         @@ -63,32 +64,57 @@ class Mysql 
     | 
|
| 
       63 
64 
     | 
    
         
             
              CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS   = 1 << 22   # Don't close the connection for a connection with expired password.
         
     | 
| 
       64 
65 
     | 
    
         
             
              CLIENT_SESSION_TRACK                  = 1 << 23   # Capable of handling server state change information. Its a hint to the server to include the state change information in Ok packet.
         
     | 
| 
       65 
66 
     | 
    
         
             
              CLIENT_DEPRECATE_EOF                  = 1 << 24   # Client no longer needs EOF packet
         
     | 
| 
       66 
     | 
    
         
            -
               
     | 
| 
       67 
     | 
    
         
            -
               
     | 
| 
      
 67 
     | 
    
         
            +
              CLIENT_OPTIONAL_RESULTSET_METADATA    = 1 << 25   # The client can handle optional metadata information in the resultset.
         
     | 
| 
      
 68 
     | 
    
         
            +
              CLIENT_ZSTD_COMPRESSION_ALGORITHM     = 1 << 26   # Compression protocol extended to support zstd compression method
         
     | 
| 
      
 69 
     | 
    
         
            +
              CLIENT_CAPABILITY_EXTENSION           = 1 << 29   # This flag will be reserved to extend the 32bit capabilities structure to 64bits.
         
     | 
| 
      
 70 
     | 
    
         
            +
              CLIENT_SSL_VERIFY_SERVER_CERT         = 1 << 30   # Verify server certificate.
         
     | 
| 
      
 71 
     | 
    
         
            +
              CLIENT_REMEMBER_OPTIONS               = 1 << 31   # Don't reset the options after an unsuccessful connect
         
     | 
| 
       68 
72 
     | 
    
         | 
| 
       69 
73 
     | 
    
         
             
              # Connection Option
         
     | 
| 
       70 
     | 
    
         
            -
              OPT_CONNECT_TIMEOUT 
     | 
| 
       71 
     | 
    
         
            -
              OPT_COMPRESS 
     | 
| 
       72 
     | 
    
         
            -
              OPT_NAMED_PIPE 
     | 
| 
       73 
     | 
    
         
            -
              INIT_COMMAND 
     | 
| 
       74 
     | 
    
         
            -
              READ_DEFAULT_FILE 
     | 
| 
       75 
     | 
    
         
            -
              READ_DEFAULT_GROUP 
     | 
| 
       76 
     | 
    
         
            -
              SET_CHARSET_DIR 
     | 
| 
       77 
     | 
    
         
            -
              SET_CHARSET_NAME 
     | 
| 
       78 
     | 
    
         
            -
              OPT_LOCAL_INFILE 
     | 
| 
       79 
     | 
    
         
            -
              OPT_PROTOCOL 
     | 
| 
       80 
     | 
    
         
            -
              SHARED_MEMORY_BASE_NAME 
     | 
| 
       81 
     | 
    
         
            -
              OPT_READ_TIMEOUT 
     | 
| 
       82 
     | 
    
         
            -
              OPT_WRITE_TIMEOUT 
     | 
| 
       83 
     | 
    
         
            -
              OPT_USE_RESULT 
     | 
| 
       84 
     | 
    
         
            -
               
     | 
| 
       85 
     | 
    
         
            -
               
     | 
| 
       86 
     | 
    
         
            -
               
     | 
| 
       87 
     | 
    
         
            -
               
     | 
| 
       88 
     | 
    
         
            -
               
     | 
| 
       89 
     | 
    
         
            -
               
     | 
| 
       90 
     | 
    
         
            -
               
     | 
| 
       91 
     | 
    
         
            -
               
     | 
| 
      
 74 
     | 
    
         
            +
              OPT_CONNECT_TIMEOUT              = 0
         
     | 
| 
      
 75 
     | 
    
         
            +
              OPT_COMPRESS                     = 1
         
     | 
| 
      
 76 
     | 
    
         
            +
              OPT_NAMED_PIPE                   = 2
         
     | 
| 
      
 77 
     | 
    
         
            +
              INIT_COMMAND                     = 3
         
     | 
| 
      
 78 
     | 
    
         
            +
              READ_DEFAULT_FILE                = 4
         
     | 
| 
      
 79 
     | 
    
         
            +
              READ_DEFAULT_GROUP               = 5
         
     | 
| 
      
 80 
     | 
    
         
            +
              SET_CHARSET_DIR                  = 6
         
     | 
| 
      
 81 
     | 
    
         
            +
              SET_CHARSET_NAME                 = 7
         
     | 
| 
      
 82 
     | 
    
         
            +
              OPT_LOCAL_INFILE                 = 8
         
     | 
| 
      
 83 
     | 
    
         
            +
              OPT_PROTOCOL                     = 9
         
     | 
| 
      
 84 
     | 
    
         
            +
              SHARED_MEMORY_BASE_NAME          = 10
         
     | 
| 
      
 85 
     | 
    
         
            +
              OPT_READ_TIMEOUT                 = 11
         
     | 
| 
      
 86 
     | 
    
         
            +
              OPT_WRITE_TIMEOUT                = 12
         
     | 
| 
      
 87 
     | 
    
         
            +
              OPT_USE_RESULT                   = 13
         
     | 
| 
      
 88 
     | 
    
         
            +
              REPORT_DATA_TRUNCATION           = 14
         
     | 
| 
      
 89 
     | 
    
         
            +
              OPT_RECONNECT                    = 15
         
     | 
| 
      
 90 
     | 
    
         
            +
              PLUGIN_DIR                       = 16
         
     | 
| 
      
 91 
     | 
    
         
            +
              DEFAULT_AUTH                     = 17
         
     | 
| 
      
 92 
     | 
    
         
            +
              OPT_BIND                         = 18
         
     | 
| 
      
 93 
     | 
    
         
            +
              OPT_SSL_KEY                      = 19
         
     | 
| 
      
 94 
     | 
    
         
            +
              OPT_SSL_CERT                     = 20
         
     | 
| 
      
 95 
     | 
    
         
            +
              OPT_SSL_CA                       = 21
         
     | 
| 
      
 96 
     | 
    
         
            +
              OPT_SSL_CAPATH                   = 22
         
     | 
| 
      
 97 
     | 
    
         
            +
              OPT_SSL_CIPHER                   = 23
         
     | 
| 
      
 98 
     | 
    
         
            +
              OPT_SSL_CRL                      = 24
         
     | 
| 
      
 99 
     | 
    
         
            +
              OPT_SSL_CRLPATH                  = 25
         
     | 
| 
      
 100 
     | 
    
         
            +
              OPT_CONNECT_ATTR_RESET           = 26
         
     | 
| 
      
 101 
     | 
    
         
            +
              OPT_CONNECT_ATTR_ADD             = 27
         
     | 
| 
      
 102 
     | 
    
         
            +
              OPT_CONNECT_ATTR_DELETE          = 28
         
     | 
| 
      
 103 
     | 
    
         
            +
              SERVER_PUBLIC_KEY                = 29
         
     | 
| 
      
 104 
     | 
    
         
            +
              ENABLE_CLEARTEXT_PLUGIN          = 30
         
     | 
| 
      
 105 
     | 
    
         
            +
              OPT_CAN_HANDLE_EXPIRED_PASSWORDS = 31
         
     | 
| 
      
 106 
     | 
    
         
            +
              OPT_MAX_ALLOWED_PACKET           = 32
         
     | 
| 
      
 107 
     | 
    
         
            +
              OPT_NET_BUFFER_LENGTH            = 33
         
     | 
| 
      
 108 
     | 
    
         
            +
              OPT_TLS_VERSION                  = 34
         
     | 
| 
      
 109 
     | 
    
         
            +
              OPT_SSL_MODE                     = 35
         
     | 
| 
      
 110 
     | 
    
         
            +
              OPT_GET_SERVER_PUBLIC_KEY        = 36
         
     | 
| 
      
 111 
     | 
    
         
            +
              OPT_RETRY_COUNT                  = 37
         
     | 
| 
      
 112 
     | 
    
         
            +
              OPT_OPTIONAL_RESULTSET_METADATA  = 38
         
     | 
| 
      
 113 
     | 
    
         
            +
              OPT_SSL_FIPS_MODE                = 39
         
     | 
| 
      
 114 
     | 
    
         
            +
              OPT_TLS_CIPHERSUITES             = 40
         
     | 
| 
      
 115 
     | 
    
         
            +
              OPT_COMPRESSION_ALGORITHMS       = 41
         
     | 
| 
      
 116 
     | 
    
         
            +
              OPT_ZSTD_COMPRESSION_LEVEL       = 42
         
     | 
| 
      
 117 
     | 
    
         
            +
              OPT_LOAD_DATA_LOCAL_DIR          = 43
         
     | 
| 
       92 
118 
     | 
    
         | 
| 
       93 
119 
     | 
    
         
             
              # Server Option
         
     | 
| 
       94 
120 
     | 
    
         
             
              OPTION_MULTI_STATEMENTS_ON  = 0
         
     | 
| 
         @@ -133,6 +159,7 @@ class Mysql 
     | 
|
| 
       133 
159 
     | 
    
         
             
              REFRESH_USER_RESOURCES   = 1 << 19
         
     | 
| 
       134 
160 
     | 
    
         
             
              REFRESH_FOR_EXPORT       = 1 << 20
         
     | 
| 
       135 
161 
     | 
    
         
             
              REFRESH_OPTIMIZER_COSTS  = 1 << 21
         
     | 
| 
      
 162 
     | 
    
         
            +
              REFRESH_PERSIST          = 1 << 22
         
     | 
| 
       136 
163 
     | 
    
         | 
| 
       137 
164 
     | 
    
         
             
              class Field
         
     | 
| 
       138 
165 
     | 
    
         
             
                # Field type
         
     | 
| 
         @@ -156,6 +183,9 @@ class Mysql 
     | 
|
| 
       156 
183 
     | 
    
         
             
                TYPE_TIMESTAMP2  = 17
         
     | 
| 
       157 
184 
     | 
    
         
             
                TYPE_DATETIME2   = 18
         
     | 
| 
       158 
185 
     | 
    
         
             
                TYPE_TIME2       = 19
         
     | 
| 
      
 186 
     | 
    
         
            +
                TYPE_TYPED_ARRAY = 20
         
     | 
| 
      
 187 
     | 
    
         
            +
                TYPE_INVALID     = 243
         
     | 
| 
      
 188 
     | 
    
         
            +
                TYPE_BOOL        = 244
         
     | 
| 
       159 
189 
     | 
    
         
             
                TYPE_JSON        = 245
         
     | 
| 
       160 
190 
     | 
    
         
             
                TYPE_NEWDECIMAL  = 246
         
     | 
| 
       161 
191 
     | 
    
         
             
                TYPE_ENUM        = 247
         
     | 
| 
         @@ -171,25 +201,35 @@ class Mysql 
     | 
|
| 
       171 
201 
     | 
    
         
             
                TYPE_INTERVAL    = TYPE_ENUM
         
     | 
| 
       172 
202 
     | 
    
         | 
| 
       173 
203 
     | 
    
         
             
                # Flag
         
     | 
| 
       174 
     | 
    
         
            -
                NOT_NULL_FLAG 
     | 
| 
       175 
     | 
    
         
            -
                PRI_KEY_FLAG 
     | 
| 
       176 
     | 
    
         
            -
                UNIQUE_KEY_FLAG 
     | 
| 
       177 
     | 
    
         
            -
                MULTIPLE_KEY_FLAG 
     | 
| 
       178 
     | 
    
         
            -
                BLOB_FLAG 
     | 
| 
       179 
     | 
    
         
            -
                UNSIGNED_FLAG 
     | 
| 
       180 
     | 
    
         
            -
                ZEROFILL_FLAG 
     | 
| 
       181 
     | 
    
         
            -
                BINARY_FLAG 
     | 
| 
       182 
     | 
    
         
            -
                ENUM_FLAG 
     | 
| 
       183 
     | 
    
         
            -
                AUTO_INCREMENT_FLAG 
     | 
| 
       184 
     | 
    
         
            -
                TIMESTAMP_FLAG 
     | 
| 
       185 
     | 
    
         
            -
                SET_FLAG 
     | 
| 
       186 
     | 
    
         
            -
                NO_DEFAULT_VALUE_FLAG 
     | 
| 
       187 
     | 
    
         
            -
                ON_UPDATE_NOW_FLAG 
     | 
| 
       188 
     | 
    
         
            -
                NUM_FLAG 
     | 
| 
       189 
     | 
    
         
            -
                PART_KEY_FLAG 
     | 
| 
       190 
     | 
    
         
            -
                GROUP_FLAG 
     | 
| 
       191 
     | 
    
         
            -
                UNIQUE_FLAG 
     | 
| 
       192 
     | 
    
         
            -
                BINCMP_FLAG 
     | 
| 
      
 204 
     | 
    
         
            +
                NOT_NULL_FLAG                  = 1
         
     | 
| 
      
 205 
     | 
    
         
            +
                PRI_KEY_FLAG                   = 2
         
     | 
| 
      
 206 
     | 
    
         
            +
                UNIQUE_KEY_FLAG                = 4
         
     | 
| 
      
 207 
     | 
    
         
            +
                MULTIPLE_KEY_FLAG              = 8
         
     | 
| 
      
 208 
     | 
    
         
            +
                BLOB_FLAG                      = 16
         
     | 
| 
      
 209 
     | 
    
         
            +
                UNSIGNED_FLAG                  = 32
         
     | 
| 
      
 210 
     | 
    
         
            +
                ZEROFILL_FLAG                  = 64
         
     | 
| 
      
 211 
     | 
    
         
            +
                BINARY_FLAG                    = 128
         
     | 
| 
      
 212 
     | 
    
         
            +
                ENUM_FLAG                      = 256
         
     | 
| 
      
 213 
     | 
    
         
            +
                AUTO_INCREMENT_FLAG            = 512
         
     | 
| 
      
 214 
     | 
    
         
            +
                TIMESTAMP_FLAG                 = 1024
         
     | 
| 
      
 215 
     | 
    
         
            +
                SET_FLAG                       = 2048
         
     | 
| 
      
 216 
     | 
    
         
            +
                NO_DEFAULT_VALUE_FLAG          = 4096
         
     | 
| 
      
 217 
     | 
    
         
            +
                ON_UPDATE_NOW_FLAG             = 8192
         
     | 
| 
      
 218 
     | 
    
         
            +
                NUM_FLAG                       = 32768
         
     | 
| 
      
 219 
     | 
    
         
            +
                PART_KEY_FLAG                  = 16384
         
     | 
| 
      
 220 
     | 
    
         
            +
                GROUP_FLAG                     = 32768
         
     | 
| 
      
 221 
     | 
    
         
            +
                UNIQUE_FLAG                    = 65536
         
     | 
| 
      
 222 
     | 
    
         
            +
                BINCMP_FLAG                    = 131072
         
     | 
| 
      
 223 
     | 
    
         
            +
                GET_FIXED_FIELDS_FLAG          = 1 << 18
         
     | 
| 
      
 224 
     | 
    
         
            +
                FIELD_IN_PART_FUNC_FLAG        = 1 << 19
         
     | 
| 
      
 225 
     | 
    
         
            +
                FIELD_IN_ADD_INDEX             = 1 << 20
         
     | 
| 
      
 226 
     | 
    
         
            +
                FIELD_IS_RENAMED               = 1 << 21
         
     | 
| 
      
 227 
     | 
    
         
            +
                FIELD_FLAGS_STORAGE_MEDIA_MASK = 3 << 22
         
     | 
| 
      
 228 
     | 
    
         
            +
                FIELD_FLAGS_COLUMN_FORMAT_MASK = 3 << 24
         
     | 
| 
      
 229 
     | 
    
         
            +
                FIELD_IS_DROPPED               = 1 << 26
         
     | 
| 
      
 230 
     | 
    
         
            +
                EXPLICIT_NULL_FLAG             = 1 << 27
         
     | 
| 
      
 231 
     | 
    
         
            +
                FIELD_IS_MARKED                = 1 << 28
         
     | 
| 
      
 232 
     | 
    
         
            +
                NOT_SECONDARY_FLAG             = 1 << 29
         
     | 
| 
       193 
233 
     | 
    
         
             
              end
         
     | 
| 
       194 
234 
     | 
    
         | 
| 
       195 
235 
     | 
    
         
             
              class Stmt
         
     | 
    
        data/lib/mysql/error.rb
    CHANGED
    
    | 
         @@ -977,7 +977,16 @@ class Mysql 
     | 
|
| 
       977 
977 
     | 
    
         
             
                CR_AUTH_PLUGIN_CANNOT_LOAD               = 2059
         
     | 
| 
       978 
978 
     | 
    
         
             
                CR_DUPLICATE_CONNECTION_ATTR             = 2060
         
     | 
| 
       979 
979 
     | 
    
         
             
                CR_AUTH_PLUGIN_ERR                       = 2061
         
     | 
| 
       980 
     | 
    
         
            -
                 
     | 
| 
      
 980 
     | 
    
         
            +
                CR_INSECURE_API_ERR                      = 2062
         
     | 
| 
      
 981 
     | 
    
         
            +
                CR_FILE_NAME_TOO_LONG                    = 2063
         
     | 
| 
      
 982 
     | 
    
         
            +
                CR_SSL_FIPS_MODE_ERR                     = 2064
         
     | 
| 
      
 983 
     | 
    
         
            +
                CR_DEPRECATED_COMPRESSION_NOT_SUPPORTED  = 2065
         
     | 
| 
      
 984 
     | 
    
         
            +
                CR_COMPRESSION_WRONGLY_CONFIGURED        = 2066
         
     | 
| 
      
 985 
     | 
    
         
            +
                CR_KERBEROS_USER_NOT_FOUND               = 2067
         
     | 
| 
      
 986 
     | 
    
         
            +
                CR_LOAD_DATA_LOCAL_INFILE_REJECTED       = 2068
         
     | 
| 
      
 987 
     | 
    
         
            +
                CR_LOAD_DATA_LOCAL_INFILE_REALPATH_FAIL  = 2069
         
     | 
| 
      
 988 
     | 
    
         
            +
                CR_DNS_SRV_LOOKUP_FAILED                 = 2070
         
     | 
| 
      
 989 
     | 
    
         
            +
                CR_ERROR_LAST                            = 2070
         
     | 
| 
       981 
990 
     | 
    
         
             
              end
         
     | 
| 
       982 
991 
     | 
    
         | 
| 
       983 
992 
     | 
    
         
             
              ClientError.define_error_class(/\ACR_/)
         
     | 
    
        data/lib/mysql/protocol.rb
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: ascii-8bit
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2008 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2008 TOMITA Masahiro
         
     | 
| 
       3 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            require "socket"
         
     | 
| 
         @@ -134,15 +134,17 @@ class Mysql 
     | 
|
| 
       134 
134 
     | 
    
         
             
                # conn_timeout :: [Integer] connect timeout (sec).
         
     | 
| 
       135 
135 
     | 
    
         
             
                # read_timeout :: [Integer] read timeout (sec).
         
     | 
| 
       136 
136 
     | 
    
         
             
                # write_timeout :: [Integer] write timeout (sec).
         
     | 
| 
      
 137 
     | 
    
         
            +
                # local_infile :: [String] local infile path
         
     | 
| 
       137 
138 
     | 
    
         
             
                # === Exception
         
     | 
| 
       138 
139 
     | 
    
         
             
                # [ClientError] :: connection timeout
         
     | 
| 
       139 
     | 
    
         
            -
                def initialize(host, port, socket, conn_timeout, read_timeout, write_timeout)
         
     | 
| 
      
 140 
     | 
    
         
            +
                def initialize(host, port, socket, conn_timeout, read_timeout, write_timeout, local_infile)
         
     | 
| 
       140 
141 
     | 
    
         
             
                  @insert_id = 0
         
     | 
| 
       141 
142 
     | 
    
         
             
                  @warning_count = 0
         
     | 
| 
       142 
143 
     | 
    
         
             
                  @gc_stmt_queue = []   # stmt id list which GC destroy.
         
     | 
| 
       143 
144 
     | 
    
         
             
                  set_state :INIT
         
     | 
| 
       144 
145 
     | 
    
         
             
                  @read_timeout = read_timeout
         
     | 
| 
       145 
146 
     | 
    
         
             
                  @write_timeout = write_timeout
         
     | 
| 
      
 147 
     | 
    
         
            +
                  @local_infile = local_infile
         
     | 
| 
       146 
148 
     | 
    
         
             
                  begin
         
     | 
| 
       147 
149 
     | 
    
         
             
                    Timeout.timeout conn_timeout do
         
     | 
| 
       148 
150 
     | 
    
         
             
                      if host.nil? or host.empty? or host == "localhost"
         
     | 
| 
         @@ -180,6 +182,7 @@ class Mysql 
     | 
|
| 
       180 
182 
     | 
    
         
             
                  @server_version = init_packet.server_version.split(/\D/)[0,3].inject{|a,b|a.to_i*100+b.to_i}
         
     | 
| 
       181 
183 
     | 
    
         
             
                  @thread_id = init_packet.thread_id
         
     | 
| 
       182 
184 
     | 
    
         
             
                  client_flags = CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION
         
     | 
| 
      
 185 
     | 
    
         
            +
                  client_flags |= CLIENT_LOCAL_FILES if @local_infile
         
     | 
| 
       183 
186 
     | 
    
         
             
                  client_flags |= CLIENT_CONNECT_WITH_DB if db
         
     | 
| 
       184 
187 
     | 
    
         
             
                  client_flags |= flag
         
     | 
| 
       185 
188 
     | 
    
         
             
                  @charset = charset
         
     | 
| 
         @@ -230,10 +233,7 @@ class Mysql 
     | 
|
| 
       230 
233 
     | 
    
         
             
                      return res_packet.field_count
         
     | 
| 
       231 
234 
     | 
    
         
             
                    end
         
     | 
| 
       232 
235 
     | 
    
         
             
                    if res_packet.field_count.nil?      # LOAD DATA LOCAL INFILE
         
     | 
| 
       233 
     | 
    
         
            -
                       
     | 
| 
       234 
     | 
    
         
            -
                      File.open(filename){|f| write f}
         
     | 
| 
       235 
     | 
    
         
            -
                      write nil  # EOF mark
         
     | 
| 
       236 
     | 
    
         
            -
                      read
         
     | 
| 
      
 236 
     | 
    
         
            +
                      send_local_file(res_packet.message)
         
     | 
| 
       237 
237 
     | 
    
         
             
                    end
         
     | 
| 
       238 
238 
     | 
    
         
             
                    @affected_rows, @insert_id, @server_status, @warning_count, @message =
         
     | 
| 
       239 
239 
     | 
    
         
             
                      res_packet.affected_rows, res_packet.insert_id, res_packet.server_status, res_packet.warning_count, res_packet.message
         
     | 
| 
         @@ -245,6 +245,19 @@ class Mysql 
     | 
|
| 
       245 
245 
     | 
    
         
             
                  end
         
     | 
| 
       246 
246 
     | 
    
         
             
                end
         
     | 
| 
       247 
247 
     | 
    
         | 
| 
      
 248 
     | 
    
         
            +
                # send local file to server
         
     | 
| 
      
 249 
     | 
    
         
            +
                def send_local_file(filename)
         
     | 
| 
      
 250 
     | 
    
         
            +
                  filename = File.absolute_path(filename)
         
     | 
| 
      
 251 
     | 
    
         
            +
                  if filename.start_with? @local_infile
         
     | 
| 
      
 252 
     | 
    
         
            +
                    File.open(filename){|f| write f}
         
     | 
| 
      
 253 
     | 
    
         
            +
                  else
         
     | 
| 
      
 254 
     | 
    
         
            +
                    raise ClientError::LoadDataLocalInfileRejected, 'LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.'
         
     | 
| 
      
 255 
     | 
    
         
            +
                  end
         
     | 
| 
      
 256 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 257 
     | 
    
         
            +
                  write nil # EOF mark
         
     | 
| 
      
 258 
     | 
    
         
            +
                  read
         
     | 
| 
      
 259 
     | 
    
         
            +
                end
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
       248 
261 
     | 
    
         
             
                # Retrieve n fields
         
     | 
| 
       249 
262 
     | 
    
         
             
                # === Argument
         
     | 
| 
       250 
263 
     | 
    
         
             
                # n :: [Integer] number of fields
         
     | 
    
        data/lib/mysql.rb
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: ascii-8bit
         
     | 
| 
       2 
     | 
    
         
            -
            # Copyright (C) 2008 
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2008 TOMITA Masahiro
         
     | 
| 
       3 
3 
     | 
    
         
             
            # mailto:tommy@tmtm.org
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            # MySQL connection class.
         
     | 
| 
         @@ -21,7 +21,7 @@ class Mysql 
     | 
|
| 
       21 
21 
     | 
    
         
             
              rescue LoadError
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
              VERSION            =  
     | 
| 
      
 24 
     | 
    
         
            +
              VERSION            = 21000               # Version number of this library
         
     | 
| 
       25 
25 
     | 
    
         
             
              MYSQL_UNIX_PORT    = "/tmp/mysql.sock"   # UNIX domain socket filename
         
     | 
| 
       26 
26 
     | 
    
         
             
              MYSQL_TCP_PORT     = 3306                # TCP socket port number
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
         @@ -112,8 +112,8 @@ class Mysql 
     | 
|
| 
       112 
112 
     | 
    
         
             
                  warn 'unsupported flag: CLIENT_COMPRESS' if $VERBOSE
         
     | 
| 
       113 
113 
     | 
    
         
             
                  flag &= ~CLIENT_COMPRESS
         
     | 
| 
       114 
114 
     | 
    
         
             
                end
         
     | 
| 
       115 
     | 
    
         
            -
                @protocol = Protocol.new host, port, socket, @connect_timeout, @read_timeout, @write_timeout
         
     | 
| 
       116 
     | 
    
         
            -
                @protocol.authenticate user, passwd, db,  
     | 
| 
      
 115 
     | 
    
         
            +
                @protocol = Protocol.new host, port, socket, @connect_timeout, @read_timeout, @write_timeout, @local_infile
         
     | 
| 
      
 116 
     | 
    
         
            +
                @protocol.authenticate user, passwd, db, flag, @charset
         
     | 
| 
       117 
117 
     | 
    
         
             
                @charset ||= @protocol.charset
         
     | 
| 
       118 
118 
     | 
    
         
             
                @host_info = (host.nil? || host == "localhost") ? 'Localhost via UNIX socket' : "#{host} via TCP/IP"
         
     | 
| 
       119 
119 
     | 
    
         
             
                query @init_command if @init_command
         
     | 
| 
         @@ -158,6 +158,8 @@ class Mysql 
     | 
|
| 
       158 
158 
     | 
    
         
             
                  @connect_timeout = value
         
     | 
| 
       159 
159 
     | 
    
         
             
            #    when Mysql::GUESS_CONNECTION
         
     | 
| 
       160 
160 
     | 
    
         
             
                when Mysql::OPT_LOCAL_INFILE
         
     | 
| 
      
 161 
     | 
    
         
            +
                  @local_infile = value ? '' : nil
         
     | 
| 
      
 162 
     | 
    
         
            +
                when Mysql::OPT_LOAD_DATA_LOCAL_DIR
         
     | 
| 
       161 
163 
     | 
    
         
             
                  @local_infile = value
         
     | 
| 
       162 
164 
     | 
    
         
             
            #    when Mysql::OPT_NAMED_PIPE
         
     | 
| 
       163 
165 
     | 
    
         
             
            #    when Mysql::OPT_PROTOCOL
         
     | 
    
        data/test/test_mysql.rb
    CHANGED
    
    | 
         @@ -20,7 +20,7 @@ MYSQL_SOCKET   = ENV['MYSQL_SOCKET'] 
     | 
|
| 
       20 
20 
     | 
    
         
             
            class TestMysql < Test::Unit::TestCase
         
     | 
| 
       21 
21 
     | 
    
         
             
              sub_test_case 'Mysql::VERSION' do
         
     | 
| 
       22 
22 
     | 
    
         
             
                test 'returns client version' do
         
     | 
| 
       23 
     | 
    
         
            -
                  assert{ Mysql::VERSION ==  
     | 
| 
      
 23 
     | 
    
         
            +
                  assert{ Mysql::VERSION == 21000 }
         
     | 
| 
       24 
24 
     | 
    
         
             
                end
         
     | 
| 
       25 
25 
     | 
    
         
             
              end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
         @@ -160,6 +160,40 @@ class TestMysql < Test::Unit::TestCase 
     | 
|
| 
       160 
160 
     | 
    
         
             
                  @m.query("load data local infile '#{tmpf.path}' into table t")
         
     | 
| 
       161 
161 
     | 
    
         
             
                  assert{ @m.query('select * from t').fetch_row == ['123','abc'] }
         
     | 
| 
       162 
162 
     | 
    
         
             
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
                test 'OPT_LOAD_DATA_LOCAL_DIR: client can execute LOAD DATA LOCAL INFILE query with specified directory' do
         
     | 
| 
      
 164 
     | 
    
         
            +
                  require 'tempfile'
         
     | 
| 
      
 165 
     | 
    
         
            +
                  tmpf = Tempfile.new 'mysql_spec'
         
     | 
| 
      
 166 
     | 
    
         
            +
                  tmpf.puts "123\tabc\n"
         
     | 
| 
      
 167 
     | 
    
         
            +
                  tmpf.close
         
     | 
| 
      
 168 
     | 
    
         
            +
                  assert{ @m.options(Mysql::OPT_LOAD_DATA_LOCAL_DIR, File.dirname(tmpf.path)) == @m }
         
     | 
| 
      
 169 
     | 
    
         
            +
                  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
         
     | 
| 
      
 170 
     | 
    
         
            +
                  @m.query('create temporary table t (i int, c char(10))')
         
     | 
| 
      
 171 
     | 
    
         
            +
                  @m.query("load data local infile '#{tmpf.path}' into table t")
         
     | 
| 
      
 172 
     | 
    
         
            +
                  assert{ @m.query('select * from t').fetch_row == ['123','abc'] }
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
                test 'OPT_LOAD_DATA_LOCAL_DIR: client cannot execute LOAD DATA LOCAL INFILE query without specified directory' do
         
     | 
| 
      
 175 
     | 
    
         
            +
                  require 'tempfile'
         
     | 
| 
      
 176 
     | 
    
         
            +
                  tmpf = Tempfile.new 'mysql_spec'
         
     | 
| 
      
 177 
     | 
    
         
            +
                  tmpf.puts "123\tabc\n"
         
     | 
| 
      
 178 
     | 
    
         
            +
                  tmpf.close
         
     | 
| 
      
 179 
     | 
    
         
            +
                  assert{ @m.options(Mysql::OPT_LOAD_DATA_LOCAL_DIR, '/hoge') == @m }
         
     | 
| 
      
 180 
     | 
    
         
            +
                  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
         
     | 
| 
      
 181 
     | 
    
         
            +
                  @m.query('create temporary table t (i int, c char(10))')
         
     | 
| 
      
 182 
     | 
    
         
            +
                  assert_raise Mysql::ClientError::LoadDataLocalInfileRejected, 'LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.' do
         
     | 
| 
      
 183 
     | 
    
         
            +
                    @m.query("load data local infile '#{tmpf.path}' into table t")
         
     | 
| 
      
 184 
     | 
    
         
            +
                  end
         
     | 
| 
      
 185 
     | 
    
         
            +
                end
         
     | 
| 
      
 186 
     | 
    
         
            +
                test 'without OPT_LOCAL_INFILE and OPT_LOAD_DATA_LOCAL_DIR: client cannot execute LOAD DATA LOCAL INFILE query' do
         
     | 
| 
      
 187 
     | 
    
         
            +
                  require 'tempfile'
         
     | 
| 
      
 188 
     | 
    
         
            +
                  tmpf = Tempfile.new 'mysql_spec'
         
     | 
| 
      
 189 
     | 
    
         
            +
                  tmpf.puts "123\tabc\n"
         
     | 
| 
      
 190 
     | 
    
         
            +
                  tmpf.close
         
     | 
| 
      
 191 
     | 
    
         
            +
                  @m.connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
         
     | 
| 
      
 192 
     | 
    
         
            +
                  @m.query('create temporary table t (i int, c char(10))')
         
     | 
| 
      
 193 
     | 
    
         
            +
                  assert_raise Mysql::ServerError::NotAllowedCommand, 'The used command is not allowed with this MySQL version' do
         
     | 
| 
      
 194 
     | 
    
         
            +
                    @m.query("load data local infile '#{tmpf.path}' into table t")
         
     | 
| 
      
 195 
     | 
    
         
            +
                  end
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
       163 
197 
     | 
    
         
             
                test 'OPT_READ_TIMEOUT: set timeout for reading packet' do
         
     | 
| 
       164 
198 
     | 
    
         
             
                  assert{ @m.options(Mysql::OPT_READ_TIMEOUT, 10) == @m }
         
     | 
| 
       165 
199 
     | 
    
         
             
                end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ruby-mysql
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.10.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Tomita Masahiro
         
     | 
| 
       8 
     | 
    
         
            -
            autorequire: 
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-10-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description: This is MySQL connector. pure Ruby version
         
     | 
| 
       14 
14 
     | 
    
         
             
            email: tommy@tmtm.org
         
     | 
| 
         @@ -30,7 +30,7 @@ homepage: http://github.com/tmtm/ruby-mysql 
     | 
|
| 
       30 
30 
     | 
    
         
             
            licenses:
         
     | 
| 
       31 
31 
     | 
    
         
             
            - Ruby
         
     | 
| 
       32 
32 
     | 
    
         
             
            metadata: {}
         
     | 
| 
       33 
     | 
    
         
            -
            post_install_message: 
     | 
| 
      
 33 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
       34 
34 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       35 
35 
     | 
    
         
             
            require_paths:
         
     | 
| 
       36 
36 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -45,11 +45,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       45 
45 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       46 
46 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       47 
47 
     | 
    
         
             
            requirements: []
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
            signing_key: 
         
     | 
| 
      
 48 
     | 
    
         
            +
            rubygems_version: 3.2.22
         
     | 
| 
      
 49 
     | 
    
         
            +
            signing_key:
         
     | 
| 
       51 
50 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       52 
51 
     | 
    
         
             
            summary: MySQL connector
         
     | 
| 
       53 
52 
     | 
    
         
             
            test_files:
         
     | 
| 
       54 
     | 
    
         
            -
            - test/test_mysql_packet.rb
         
     | 
| 
       55 
53 
     | 
    
         
             
            - test/test_mysql.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - test/test_mysql_packet.rb
         
     |