Commit graph

78 commits

Author SHA1 Message Date
Chad MILLER
2941024852 Bug#37301 Length and Max_length differ with no obvious reason(2nd version)
Length value is the length of the field,
Max_length is the length of the field value.
So Max_length can not be more than Length.
The fix: fixed calculation of the Item_empty_string item length

(Patch applied and queued on demand of Trudy/Davi.)
2008-08-15 16:13:27 -04:00
tnurnberg@white.intern.koehntopp.de
987ec3f306 Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/misc/mysql/31177/50-31177
2007-12-06 08:46:01 +01:00
tnurnberg@mysql.com/white.intern.koehntopp.de
b1e77cfc31 Bug#31177: Server variables can't be set to their current values
additional fixes for BDB and correct assignment of both signed
and unsigned 64-bit data to unsigned system variables
2007-12-06 01:28:01 +01:00
gkodinov/kgeorge@magare.gmz
846cbf3cd0 Bug #32400: Complex SELECT query returns correct result
only on some occasions

Referencing an element from the SELECT list in a WHERE 
clause is not permitted. The namespace of the WHERE
clause is the table columns only. This was not enforced
correctly when resolving outer references in sub-queries.

Fixed by not allowing references to aliases in a 
sub-query in WHERE.
2007-11-20 19:18:21 +02:00
gkodinov/kgeorge@magare.gmz
d67cd9e8af Bug #31221: Optimizer incorrectly identifies impossible WHERE clause
No warning was generated when a TIMESTAMP with a non-zero time part
 was converted to a DATE value. This caused index lookup to assume
 that this is a valid conversion and was returning rows that match 
 a comparison between a TIMESTAMP value and a DATE keypart.
 Fixed by generating a warning on such a truncation.
2007-10-18 15:19:04 +03:00
anozdrin/alik@ibm.
6eb17c289a Follow up to the patch for the BUG#10491. 2007-06-29 17:37:17 +04:00
gluh@mysql.com/eagle.(none)
cdbdc4e745 backport of Bug#11491 Misleading error message if not NULL column set to NULL, SQL mode TRADITIONAL 2007-05-30 17:04:04 +05:00
ibabaev@bk-internal.mysql.com
040e46fc1c Merge bk-internal.mysql.com:/data0/bk/mysql-5.0
into  bk-internal.mysql.com:/data0/bk/mysql-5.0-opt
2007-05-28 00:05:38 +02:00
holyfoot/hf@mysql.com/hfmain.(none)
b96e1df90c Bug #28361 Buffer overflow in DECIMAL code on Windows
result max length changed for the 'decimal' fields
so test results have to be fixed
2007-05-21 13:02:03 +05:00
msvensson@pilot.blaudden
a65d12a830 Backport of TIME->MYSQL_TIME / Y2K fixset
Made year 2000 handling more uniform
Removed year 2000 handling out from calc_days()
The above removes some bugs in date/datetimes with year between 0 and 200
Now we get a note when we insert a datetime value into a date column
For default values to CREATE, don't give errors for warning level NOTE
Fixed some compiler failures
Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support)
Removed duplicate typedef TIME and replaced it with MYSQL_TIME

Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE"
Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value"
Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
2007-05-16 10:44:59 +02:00
evgen@moonbone.local
4747fa0c03 Bug#27590: Wrong DATE/DATETIME comparison.
DATE and DATETIME can be compared either as strings or as int. Both
methods have their disadvantages. Strings can contain valid DATETIME value
but have insignificant zeros omitted thus became non-comparable with
other DATETIME strings. The comparison as int usually will require conversion
from the string representation and the automatic conversion in most cases is
carried out in a wrong way thus producing wrong comparison result. Another
problem occurs when one tries to compare DATE field with a DATETIME constant.
The constant is converted to DATE losing its precision i.e. losing time part.

This fix addresses the problems described above by adding a special
DATE/DATETIME comparator. The comparator correctly converts DATE/DATETIME
string values to int when it's necessary, adds zero time part (00:00:00)
to DATE values to compare them correctly to DATETIME values. Due to correct
conversion malformed DATETIME string values are correctly compared to other
DATE/DATETIME values.

As of this patch a DATE value equals to DATETIME value with zero time part.
For example '2001-01-01' equals to '2001-01-01 00:00:00'.

The compare_datetime() function is added to the Arg_comparator class.
It implements the correct comparator for DATE/DATETIME values.
Two supplementary functions called get_date_from_str() and get_datetime_value()
are added. The first one extracts DATE/DATETIME value from a string and the
second one retrieves the correct DATE/DATETIME value from an item.
The new Arg_comparator::can_compare_as_dates() function is added and used
to check whether two given items can be compared by the compare_datetime()
comparator.
Two caching variables were added to the Arg_comparator class to speedup the
DATE/DATETIME comparison.
One more store() method was added to the Item_cache_int class to cache int
values.
The new is_datetime() function was added to the Item class. It indicates
whether the item returns a DATE/DATETIME value.
2007-04-27 00:12:09 +04:00
tnurnberg@mysql.com/sin.intern.azundris.com
f37267bb3c Bug #21103: DATE column not compared as DATE
If we compare two items A and B, with B being (a constant) of a
larger type, then A gets promoted to B's type for comparison if
it's a constant, function, or CAST() column, but B gets demoted
to A's type if A is a (not explicitly CAST()) column. This is
counter-intuitive and not mandated by the standard.
 
Disabling optimisation where it would be lossy so field value
will properly get promoted and compared as binary string (rather
than as integers).
2007-03-02 15:23:13 +01:00
bar@mysql.com/bar.intranet.mysql.r18.ru
07f9efd1e1 Merge mysql.com:/usr/home/bar/mysql-5.0.b6147v2
into  mysql.com:/usr/home/bar/mysql-5.0.b6147rpl
2006-09-29 16:40:18 +05:00
acurtis/antony@xiphis.org/ltantony.xiphis.org
e2d4aa2ca4 Merge xiphis.org:/home/antony/work2/mysql-5.0-engines
into  xiphis.org:/home/antony/work2/mysql-5.0-merge
2006-08-14 21:27:36 -07:00
svoj@may.pils.ru
6c6f435b03 BUG#14770 - LOAD DATA INFILE doesn't respect default values for
columns
Fixed confusing warning.

Quoting INSERT section of the manual:
----
Inserting NULL into a column that has been declared NOT NULL. For
multiple-row INSERT statements or INSERT INTO ... SELECT statements, the
column is set to the implicit default value for the column data type. This
is 0 for numeric types, the empty string ('') for string types, and the
"zero" value for date and time types. INSERT INTO ... SELECT statements are
handled the same way as multiple-row inserts because the server does not
examine the result set from the SELECT to see whether it returns a single
row. (For a single-row INSERT, no warning occurs when NULL is inserted into
a NOT NULL column. Instead, the statement fails with an error.)
----
This is also true for LOAD DATA INFILE. For INSERT user can specify
DEFAULT keyword as a value to set column default. There is no similiar
feature available for LOAD DATA INFILE.
2006-08-02 17:15:50 +05:00
bar@mysql.com/bar.intranet.mysql.r18.ru
29bc5cc179 Bug#6147: Traditional: Assigning a string to a numeric column has unexpected results
The problem was that when converting a string to an exact number,
rounding didn't work, because conversion didn't understand
approximate numbers notation.
Fix: a new function for string-to-number conversion was implemented,
which is aware of approxinate number notation (with decimal point
and exponent, e.g. -19.55e-1)
2006-07-20 13:41:12 +05:00
igor@olga.mysql.com
f608064083 Fixed bug #19714.
DESCRIBE returned the type BIGINT for a column of a view if the column
was specified by an expression over values of the type INT.
    
E.g. for the view defined as follows:
  CREATE VIEW v1 SELECT COALESCE(f1,f2) FROM t1
DESCRIBE returned type BIGINT for the only column of the view if f1,f2 are
columns of the INT type.
At the same time DESCRIBE returned type INT for the only column of the table
defined by the statement:
  CREATE TABLE t2 SELECT COALESCE(f1,f2) FROM t1.
    
This inconsistency was removed by the patch.

Now the code chooses between INT/BIGINT depending on the
precision of the aggregated column type.
 
Thus both DESCRIBE commands above returns type INT for v1 and t2.
2006-07-13 20:48:26 -07:00
gluh@eagle.intranet.mysql.r18.ru
98b81c4f25 Bug#17048 CREATE TABLE ... SELECT truncate values
remove initialization of unsigned_flag for Item_decimal
2006-05-13 13:13:05 +05:00
msvensson@neptunus.(none)
e5eb7cbf29 WL#2930 Adding view and cursor 'protocols' to mysqltest
- Cleanup of mysqltest.c before extending it
2005-10-31 12:25:08 +01:00
pem@mysql.com
2f3682db7e Fixed BUG#12589: Assert when creating temp. table from decimal stored
procedure variable
  Second version, after review.
  Keep the unsigned_flag in Item_decimal updated. Note that this also changed
  the result of several old test results - creating tables from decimal
  templates now gives unsigned columns and different sizes. (Several tests
  had Length > Max_length before.)
2005-09-27 17:07:28 +02:00
timour@mysql.com
e040300393 WL#2486 - natural and using join according to SQL:2003
* Provide backwards compatibility extension to name resolution of
  coalesced columns. The patch allows such columns to be qualified
  with a table (and db) name, as it is in 4.1.
  Based on a patch from Monty.

* Adjusted tests accordingly to test both backwards compatible name
  resolution of qualified columns, and ANSI-style resolution of
  non-qualified columns.
  For this, each affected test has two versions - one with qualified
  columns, and one without.
2005-08-23 18:08:04 +03:00
timour@mysql.com
a247282aa6 Implementation of WL#2486 -
"Process NATURAL and USING joins according to SQL:2003".

* Some of the main problems fixed by the patch:
  - in "select *" queries the * expanded correctly according to
    ANSI for arbitrary natural/using joins
  - natural/using joins are correctly transformed into JOIN ... ON
    for any number/nesting of the joins.
  - column references are correctly resolved against natural joins
    of any nesting and combined with arbitrary other joins.

* This patch also contains a fix for name resolution of items
  inside the ON condition of JOIN ... ON - in this case items must
  be resolved only against the JOIN operands. To support such
  'local' name resolution, the patch introduces a stack of
  name resolution contexts used at parse time.

NOTICE:
- This patch is not complete in the sense that
  - there are 2 test cases that still do not pass -
    one in join.test, one in select.test. Both are marked
    with a comment "TODO: WL#2486".
  - it does not include a new test specific for the task
2005-08-12 17:57:19 +03:00
jimw@mysql.com
d7fbff3ec5 Merge mysql.com:/home/jimw/my/mysql-5.0-5906
into  mysql.com:/home/jimw/my/mysql-5.0-clean
2005-07-19 19:59:34 -07:00
jimw@mysql.com
dd2f631ec4 Fix number to date conversion so it always honors the NO_ZERO_DATE,
NO_ZERO_IN_DATE, and INVALID_DATES bits of SQL_MODE. (Bug #5906)
2005-07-18 16:12:44 -07:00
konstantin@mysql.com
3f28ad8eb7 Merge mysql.com:/opt/local/work/mysql-4.1-root
into  mysql.com:/opt/local/work/mysql-5.0-root
2005-07-14 20:02:32 +04:00
konstantin@mysql.com
62b8e6fdd1 A fix and a test case for Bug#9735.
No separate typecode for MEDIUMTEXT/LONGTEXT is added, as we
have no sound decision yet what typecodes and for what types are
sent by the server (aka what constitutes a distinct type in MySQL).
2005-07-14 15:13:23 +04:00
msvensson@neptunus.(none)
88c96026af Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/bug10466
2005-06-27 13:12:10 +02:00
msvensson@neptunus.(none)
6282d89b0a bug#10466: Datatype "timestamp" displays "YYYYMMDDHHMMSS" irrespective of display sizes.
- Print warning that says display width is not supported for datatype TIMESTAMP, if user tries to create a TIMESTAMP column with display width.
 - Use display width for TIMESTAMP only in type_timestamp test to make sure warning is displayed correctly.
2005-06-20 12:09:00 +02:00
mskold@mysql.com
333c34d50c Added order by for failing ps_7ndb test 2005-06-14 16:40:50 +02:00
igor@rurik.mysql.com
c963b12fd3 Merge rurik.mysql.com:/home/igor/dev/mysql-4.1-0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
2005-06-07 06:38:05 -07:00
igor@rurik.mysql.com
d3f3cc617d Many files:
Fixed bug #9899: erronious NOT_NULL flag for some attributes
  in the EXPLAIN table.
2005-06-07 06:34:13 -07:00
konstantin@mysql.com
9f379d7f05 Patch two (the final one) for Bug#7306 "the server side preparedStatement
error for LIMIT placeholder".
The patch adds grammar support for LIMIT ?, ? and changes the
type of ST_SELECT_LEX::select_limit,offset_limit from ha_rows to Item*,
so that it can point to Item_param.
2005-06-07 14:11:36 +04:00
holyfoot@hf-ibm.(none)
8f3647005c Tests and results fixed with last precision/decimal related modifications 2005-05-06 01:01:39 +05:00
msvensson@neptunus.(none)
c93ae4f8a1 Merge 2005-03-30 14:32:53 +02:00
msvensson@neptunus.(none)
9471e922f1 Merge neptunus.(none):/home/msvensson/mysql/bug8807
into neptunus.(none):/home/msvensson/mysql/mysql-4.1-synced
2005-03-30 14:30:32 +02:00
msvensson@neptunus.(none)
382a8c0048 BUG#8807 Select crash server
- Add function Item_param::fix_fields which will update any subselect they are part of and indicate that the subsleect is not const during prepare phase, and thus should not be executed during prepare.
2005-03-30 12:14:37 +02:00
pekka@mysql.com
727015dbb3 Merge 2005-03-28 23:06:19 +02:00
serg@serg.mylan
f21f8f983f client/mysqltest.c
corrected number of fields for --enable_metadata
sql/sql_union.cc
    fixed a apparent typo in assert
2005-03-23 20:38:42 +01:00
monty@mysql.com
ccb2f3381b Things missing in last changset
After merge fixes
Don't give duplicate warnings for some ::store() functions
2005-02-10 15:41:51 +02:00
hf@deer.(none)
b94a482ee9 Precision Math implementation 2005-02-09 02:50:45 +04:00
bar@mysql.com
05204a9b3c After-merge clean-up 2005-01-18 22:12:33 +04:00
bar@mysql.com
8cfe729678 1. Item now uses my_charset_bin by default,
not default_charset_into. It fixes the
problem that in some cases numbers where
treated as CHAR(N), not as BINARY(N), e.g.
wrong 'charsetnr' when sent to the client side.
2. IFNULL didn't aggregate argument charsets
and collations, so IFNULL(1,'a') produced
a CHAR(N). Now produces a BINARY(N).
3. SELECT PROCEDURE ANALIZE now returns
BINARY columns, which is much better than it worked
previously: CHAR with the default character set.
But in the future it's worth to fix the fields
'Field_name' and 'Optimal_fieldtype' to use UTF8,
and 'Min_value' and 'Max_value' to inherit their charsets
from the original items. But it is not important,
and BINARY(N) is OK for now.
4. Tests were fixed accordingly. No new tests were
made, as the old onces cover everything.
2005-01-18 17:41:06 +04:00
monty@mysql.com
309b1a2b6c Merge with 4.1 tree to get fix for INSERT IGNORE ... ON DUPLICATE KEY 2005-01-03 23:04:52 +02:00
monty@mysql.com
d71c030587 After merge fixes 2004-12-31 00:44:00 +02:00
dlenev@brandersnatch.localdomain
cd98fcf4e9 Merged fixes for bug #7297 "Two digit year should be interpreted
correctly even with zero month and day" and bug #7515 "from_unixtime(0)
now returns NULL instead of the Epoch" into 4.1 tree.
2004-12-30 23:44:42 +03:00
monty@mishka.local
4f4bbfc279 Merge with 4.1 2004-12-22 13:54:39 +02:00
mleich@mysql.com
4f024d2388 The BIT patch by ramil causes that the old data type BIT is no
longer available for most storage engines.
Therefore column c18 BIT is switched TINYINT .
2004-12-17 14:27:39 +01:00
mleich@mysql.com
3b5a741aff Small bug fix
ps-modify1 used the user variables @1, @2, @100 set within ps_query and 
           ps_modify. That architecture was wrong, because the dependence
           of ps_modify1 on ps_query and ps_modify makes the test script
           maintenance and the use of these test cases during bug fixing/
           debugging of single sub test cases very uncomfortable.
Therefore these user variables (@1, @2, @100) are also set within ps-modify1.

The result files of the test cases ps_2myisam, ps_3innodb, ps_4heap, ps_6bdb,
ps_7ndb will be affected by that change and show 3 additional lines, but
nothing else will change.
2004-12-13 21:00:43 +01:00
bar@mysql.com
f90caa5826 - VARCHAR(n) with binary character set is now displayed as VARBINARY(N).
- CREATE TABLE t1 SELECT BINARY 'literal'
  now creates a VARBINARY() column, not a BINARY().
2004-12-08 14:03:29 +04:00
monty@mysql.com
563500994a Update results for new varchar handling
Fixed compiler warnings
String results in CREATE ... SELECT are now created as CHAR(0), VARCHAR(X) or TEXT() depending on item->max_length
2004-12-07 15:47:00 +02:00