another user.
When the DEFINER clause isn't specified in the ALTER statement then it's loaded
from the view definition. If the definer differs from the current user then
the error is thrown because only a super-user can set other users as a definers.
Now if the DEFINER clause is omitted in the ALTER VIEW statement then the
definer from the original view is used without check.
mysql-test/t/view_grant.test:
Added a test case for the bug#27006: The SUPER privilege is wrongly required
to alter a view created by another user.
mysql-test/r/view_grant.result:
Added a test case for the bug#27006: The SUPER privilege is wrongly required
to alter a view created by another user.
sql/sql_view.cc:
Bug#26813: The SUPER privilege is wrongly required to alter a view created by
another user.
Now if the DEFINER clause is omitted in the ALTER VIEW statement then the
definer from the original view is used without check.
into siva.hindu.god:/home/tsmith/m/bk/maint/51
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
Auto merged
storage/ndb/test/ndbapi/testNodeRestart.cpp:
Manual merge (res.waitNodesStartPhase -> NdbSleep_SecSleep)
in index search MySQL was not explicitly
suppressing warnings. And if the context
happens to enable warnings (e.g. INSERT ..
SELECT) the warnings resulting from converting
the data the key is compared to are
reported to the client.
Fixed by suppressing warnings when converting
the data to the same type as the key parts.
mysql-test/r/insert_select.result:
Bug #26207: test case
mysql-test/t/insert_select.test:
Bug #26207: test case
sql/sql_select.h:
Bug #26207: supress warnings when converting
data of the same type to key buffer format.
Patch appled after doing a pull from the team tree. Additional tests had to be
fixed
mysql-test/r/union.result:
Bug 24791
The tests for temporary tables have been fixed. Since the call to
display_length(Item) was removed from the constructor for Item_type_holder, items
in temporary tables keep the original values of the items, rather than the magic
numbers supplied by display_length.
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb
sql/ha_ndbcluster.cc:
Auto merged
sql/ha_ndbcluster.h:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
Auto merged
storage/ndb/test/ndbapi/testNodeRestart.cpp:
Auto merged
Turns out I broke it.
Index: ndb-work/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
===================================================================
storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
WL#3704 mgmapi timeouts: Fix error insert to NOT_STARTED nodes
Turns out they can be useful in working out what's going wrong.
Index: ndb-work/storage/ndb/test/src/NdbRestarter.cpp
===================================================================
storage/ndb/test/src/NdbRestarter.cpp:
WL#3704 mgmapi timeouts: Print full error from mgmd in NdbRestarter errors
for TransporterRegistry, keep connection to management server alive.
Index: ndb-work/storage/ndb/include/util/InputStream.hpp
===================================================================
storage/ndb/include/util/InputStream.hpp:
WL#3704 mgmapi timeouts: For mgm server, have timeout per operation, not for entire connection (i.e. fix the bug)
storage/ndb/include/util/OutputStream.hpp:
WL#3704 mgmapi timeouts: For mgm server, have timeout per operation, not for entire connection (i.e. fix the bug)
storage/ndb/src/common/transporter/TransporterRegistry.cpp:
WL#3704 mgmapi timeouts: For mgm server, have timeout per operation, not for entire connection (i.e. fix the bug)
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: For mgm server, have timeout per operation, not for entire connection (i.e. fix the bug)
Default timout of 30secs for ConfigRetriever
Default timout of 5sec for use by Transporter (ports etc).
And Ndb_cluster_connection::set_timeout() api for setting timeout from
NDBAPI applications. Should be called before connect. e.g.
c.set_timeout(4200);
c.connect();
Index: ndb-work/storage/ndb/include/mgmcommon/ConfigRetriever.hpp
===================================================================
storage/ndb/include/mgmcommon/ConfigRetriever.hpp:
WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts
storage/ndb/include/ndbapi/ndb_cluster_connection.hpp:
WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts
storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp:
WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts
storage/ndb/src/common/transporter/TransporterRegistry.cpp:
WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts
storage/ndb/src/ndbapi/ndb_cluster_connection.cpp:
WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts
as side effect - turbo accellerator patch for ndb_mgm - sholud make it quicker... so that 4mhz cpu will seem even faster.
Index: ndb-work/storage/ndb/src/mgmclient/CommandInterpreter.cpp
===================================================================
storage/ndb/src/mgmclient/CommandInterpreter.cpp:
WL#3704 mgmapi timeouts: use timeouts in mgm client
use portable method, getting milliseconds between calls - Linux would
let us do funky stuff by getting the timeout from select(2). Everywhere
else sucks and doesn't let us do that :(
Index: ndb-work/storage/ndb/include/util/InputStream.hpp
===================================================================
storage/ndb/include/util/InputStream.hpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/include/util/OutputStream.hpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/include/util/socket_io.h:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/InputStream.cpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/OutputStream.cpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/socket_io.cpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
Only one timeout value is needed. Also saves 8bytes per NdbMgmHandle :)
Index: ndb-work/storage/ndb/include/mgmapi/mgmapi.h
===================================================================
storage/ndb/include/mgmapi/mgmapi.h:
WL#3704 mgmapi timeouts: consolidate NdbMgmHandle timeouts into one
storage/ndb/src/mgmapi/mgmapi.cpp:
WL#3704 mgmapi timeouts: consolidate NdbMgmHandle timeouts into one
Index: ndb-work/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
===================================================================
storage/ndb/src/mgmsrv/ERROR_codes.txt:
WL#3704 mgmapi timeouts: manipulate some things to get infrastructure for event timeouts
storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
WL#3704 mgmapi timeouts: manipulate some things to get infrastructure for event timeouts
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: manipulate some things to get infrastructure for event timeouts
storage/ndb/test/ndbapi/testMgm.cpp:
WL#3704 mgmapi timeouts: manipulate some things to get infrastructure for event timeouts
Also add an ERROR_codes.txt file for mgmd
Index: ndb-work/storage/ndb/src/mgmsrv/ERROR_codes.txt
===================================================================
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: renumber mgmd err insert to not have duplicates.
storage/ndb/test/ndbapi/testMgm.cpp:
WL#3704 mgmapi timeouts: renumber mgmd err insert to not have duplicates.
storage/ndb/src/mgmsrv/ERROR_codes.txt:
WL#3704 mgmapi timeouts: renumber mgmd err insert to not have duplicates.
In ndb_mgm_call, add checks for expired timeout in (Input|Output)Stream.
In case of timeout, we set NdbMgmHandle->last_error and return NULL.
In api calls not using ndb_mgm_call (or using it in conjunction with
own IO), they'll need to check for timeouts manually. Macros are provided
to do this.
Add ndb_mgm_disconnect_quiet(h) to disconnect without checking errors
(so we don't clobber NdbMgmHandle->last_error). This helps us provide
the *consistent* semantic that on timeout we leave the NdbMgmHandle
*disconnected*. We check for this in testMgm.
Change CHECK_REPLY in mgmapi to also check for set error in handle->last_error
This will pick up the ETIMEDOUT errors and return them to client (through
returning correct failure code for API call and setting NdbMgmHandle error).
Applications written to MGMAPI before this patch will behave as before,
and even hopefully check get_last_error and report the error back to the
end user!
Adding the last CHECK_TIMEDOUT_RET and delete in ndb_mgm_call() we
slightly change behaviour of mgmapi. Previously, if disconnect
midway through a reply, where there were only optional parameters left,
we'd get a Properties object from ndb_mgm_call() containing NULLs for
the optional parameters, leading to interesting error messages. This
enables the returning of the *real* message and actually improves the API
without breaking compatibility.
ndb_mgm_start_signallog
ndb_mgm_stop_signallog
ndb_mgm_log_signals
ndb_mgm_set_trace
ndb_mgm_insert_error
ndb_mgm_set_int64_parameter [1]
ndb_mgm_set_string_parameter [1]
ndb_mgm_purge_stale_sessions [2]
- return error code on error during ndb_mgm_call
TODO:
ndb_mgm_report_event [2]
[1] marked for removal, unused.
[2] return codes incorrect in CHECK_HANDLE/CONNECTED. undocumented.
Server side:
in Services (per session) add macro for injecting timeout error
(just waiting 10 seconds before continuing... it does work!)
We inject these errors in a number of critical places - including
the tricky api functions that don't just use ndb_mgm_call but do
their own thing (get_config, get_status and friends)
ATRT:
Expand testMgm to add timout tests for API. Fully automated.
*THEORETICALLY* timing dependent - an ultra-slow network will
cause problems and "fake" failures... I welcome other solutions.
Tests aren't exhaustive, but cover the generics and the tricky bits.
Also test some calling semantics (incl disconnected on error).
It is encouraged to add *more* mgmapi tests, not less :)
InputStream:
Fix where timedout error is set
Index: ndb-work/storage/ndb/src/mgmapi/mgmapi.cpp
===================================================================
storage/ndb/src/common/util/InputStream.cpp:
WL#3704 mgmapi timeouts: Return sane errors for timeout in mgmapi
storage/ndb/src/mgmapi/mgmapi.cpp:
WL#3704 mgmapi timeouts: Return sane errors for timeout in mgmapi
storage/ndb/src/mgmapi/mgmapi_internal.h:
WL#3704 mgmapi timeouts: Return sane errors for timeout in mgmapi
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: Return sane errors for timeout in mgmapi
storage/ndb/test/ndbapi/testMgm.cpp:
WL#3704 mgmapi timeouts: Return sane errors for timeout in mgmapi
Add error injection either for this connection or for whole server.
Currently nothing for injecting errors into *another* connection... but that's
perhaps getting tricky-dicky for this point in time. Perhaps needed for events
if we don't do anything fancy.
Index: ndb-work/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
===================================================================
storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
WL#3704 mgmapi timeouts: Add ndb_mgmd error injection
storage/ndb/src/mgmsrv/MgmtSrvr.hpp:
WL#3704 mgmapi timeouts: Add ndb_mgmd error injection
storage/ndb/src/mgmsrv/Services.cpp:
WL#3704 mgmapi timeouts: Add ndb_mgmd error injection
storage/ndb/src/mgmsrv/Services.hpp:
WL#3704 mgmapi timeouts: Add ndb_mgmd error injection
storage/ndb/test/ndbapi/testMgm.cpp:
WL#3704 mgmapi timeouts: Add ndb_mgmd error injection
Start using the write_timeout we already have in NdbMgmHandle
Index: ndb-work/storage/ndb/src/mgmapi/mgmapi.cpp
===================================================================
storage/ndb/src/mgmapi/mgmapi.cpp:
WL#3704 mgmapi timeouts: use NdbMgmHandle write_timeout
The problem in this bug is when we create temporary tables. When
temporary tables are created for unions, there is some
inferrence being carried out regarding the type of the column.
Whenever this column type is inferred to be REAL (i.e. FLOAT or
DOUBLE), MySQL will always try to maintain exact precision, and
if that is not possible (there are hardware limits, since FLOAT
and DOUBLE are stored as approximate values) will switch to
using approximate values. The problem here is that at this point
the information about number of significant digits is not
available. Furthermore, the number of significant digits should
be increased for the AVG function, however, this was not properly
handled. There are 4 parts to the problem:
#1: DOUBLE and FLOAT fields don't display their proper display
lengths in max_display_length(). This is hard-coded as 53 for
DOUBLE and 24 for FLOAT. Now changed to instead return the
field_length.
#2: Type holders for temporary tables do not preserve the
max_length of the Item's from which they are created, and is
instead reverted to the 53 and 24 from above. This causes
*all* fields to get non-fixed significant digits.
#3: AVG function does not update max_length (display length)
when updating number of decimals.
#4: The function that switches to non-fixed number of
significant digits should use DBL_DIG + 2 or FLT_DIG + 2 as
cut-off values (Since fixed precision does not use the 'e'
notation)
Of these points, #1 is the controversial one, but this
change is preferred and has been cleared with Monty. The
function causes quite a few unit tests to blow up and they had
to b changed, but each one is annotated and motivated. We
frequently see the magical 53 and 24 give way to more relevant
numbers.
mysql-test/r/create.result:
bug#24791
changed test result
With the changes made for FLOAT and DOUBLE, the original display
lengths are now preserved.
mysql-test/r/temp_table.result:
bug#24791
changed test resullt
Test case added
mysql-test/r/type_float.result:
bug#24791
changed test result
delta 1: field was originally declared as DOUBLE with no display
length, so the hardware maximum is chosen rather than 53.
delta 2: fields exceed the maximum precision and thus switch to
non-fixed significant digits
delta 3: Same as above, number of decmals and significant digits
was not specified when t3 was created.
mysql-test/t/temp_table.test:
bug#24791
Test case
sql/field.h:
bug#24791
The method max_display_length is reimplemented as
uint32 max_display_length() { return field_length; }
in Field_double and Field_float. Since all subclasses of
Field_real now have the same implementation of this method, the
implementation has been moved up the hierarchy to Field_real.
sql/item.cc:
bug#24791
We switch to a non-fixed number of significant digits
(by setting decimals=NOT_FIXED_DECIMAL) if the calculated
display length is greater than the display length of a value
with the maximum precision. These values differ for double and
float, obviously.
sql/item_sum.cc:
bug#24791
We must increase the display length accordinly whenever we
change number of decimal places.