• unknown's avatar
    Bug#32757: hang with sql_mode set when setting some global variables · 9bd3b854
    unknown authored
    If setting a system-variable provided by a plug-in failed, no OK or
    error was sent in some cases, hanging the client. We now send an error
    in the case from the ticket (integer-argument out of range in STRICT
    mode). We also provide a semi-generic fallback message for possible
    future cases like this where an error is signalled, but no message is
    sent to the client. The error/warning handling is unified so it's the
    same again for variables provided by plugins and those in the server
    proper.
    
    
    mysql-test/r/plugin.result:
      show that on out-of-range values, plugin interface throws errors
      in STRICT mode and warnings otherwise.
    mysql-test/t/plugin.test:
      show that on out-of-range values, plugin interface throws errors
      in STRICT mode and warnings otherwise.
    sql/set_var.cc:
      - handle signedness of values used in warnings
      - in STRICT mode, throw errors rather than warnings
    sql/sql_parse.cc:
      If sql_set_variables() returns with an error but no message
      was sent to the client, send a semi-generic one so the session
      won't hang and we won't fail silently.
    sql/sql_plugin.cc:
      throw a warning if more than just block-size was corrected
      (or an error in STRICT mode). use functions from set_var
      for uniform behaviour of server- and plug-in variables.
    storage/example/ha_example.cc:
      Add a ULONG system variable to example plugin so
      we can test integers in the plugin-interface without
      having to depend on the presence of innobase.
    9bd3b854
sql_plugin.cc 93.7 KB