Everything in this list is in the order it will be done. If you want to affect the priority order, please register a license or support us and tell us what you want to have done more quickly. See section 3 MySQL Licensing and Support.
We plan to make MySQL 4.0 a 'quick' release where we only add some new stuff to enable others to help us with developing new features into 4.1. The MySQL 4.0 version should only take us about a month to make after which we want to stabilize it and start working on 4.1. 4.0 should have the following new features:
.frm
files) This will enable us
to not run out of bits when adding more table options. One will still
be able to use the old .frm file format with 4.0; All new created tables
will however use the new format.
The new file format will enable us to add new column types, more options
for keys and FOREIGN KEYS
.
mysqld
as a library. This will have the same interface as the
standard MySQL client (with an extra function to just set up startup
parameters) but will be faster (no TCP/IP or socket overhead), smaller
and much easer to use from embedded products.
One will be able to define at link time if one wants to use the
client/server model or a stand-alone application just by defining which
library to link with.
The mysqld
will support all standard MySQL features and
one can use it in a threaded client to run different queries in each
thread.
DELETE FROM table_name
will return the number of deleted rows. For
fast execution one should use TRUNCATE table_name
.
select id from t where grp in (select grp from g where u > 100)
INSERT SQL_CONCURRENT ...
; This will force the insert to happen at the
end of the data file if the table is in use by an select to allow
concurrent inserts.
INSERT ... SELECT
to use concurrent inserts.
MERGE
tables.
SHOW OPEN TABLES
myisampack
code into the server.
insert/delete/update
so that we
can gracefully recover if the index file gets full.
ALTER TABLE
on a table that is symlinked to another
disk, create temporary tables on this disk.
MyISAM
)
without threads.
DECRYPT()
.
INSERT SQL_CONCURRENT
and mysqld --concurrent-insert
to do
a concurrent insert at the end of the file if the file is read-locked.
FOREIGN
key definitions in the `.frm' file.
lockd
works with modern Linux kernels; If not, we have
to fix lockd
! To test this, start mysqld
with
--enable-locking
and run the different fork* test suits. They shouldn't
give any errors if lockd
works.
LIMIT
, like in LIMIT @a,@b
.
DEFAULT
values to columns. Give an error when using
an INSERT
that doesn't contain a column that doesn't have a
DEFAULT
.
SELECT CACHED ....
mysql_query()
commands in a row
without reading results or give a nice error message when one does this.
BIT
type to take 1 bit (now BIT
takes 1 char).
ctime()
doesn't work on some FreeBSD systems.
ORDER BY
to update. This would be handy with functions like:
generate_id(start,step)
.
IMAGE
option to LOAD DATA INFILE
to not update
TIMESTAMP
and AUTO_INCREMENT
fields.
LOAD DATA INFILE
understand a syntax like:
LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_name TEXT_FIELDS (text_field1, text_field2, text_field3) SET table_field1=concatenate(text_field1, text_field2), table_field3=23 IGNORE text_field3 This can be used to skip over extra columns in the text file, or update columns based on expressions of the read data...
LOAD DATA INFILE 'file_name' INTO TABLE 'table_name' ERRORS TO err_table_name
This would cause any errors and warnings to be logged into the err_table_name
table. That table would have a structure like:
line_number - line number in data file error_message - the error/warning message and maybe data_line - the line from the data file
VARCHAR
support (There is already support for this in MyISAM).
mysql
to netscape.
LOCK DATABASES
. (with various options)
DECIMAL
and NUMERIC
types can't read exponential numbers;
Field_decimal::store(const char *from,uint len)
must be recoded
to fix this.
mysql.cc
to do fewer malloc()
calls when hashing field
names.
t1 JOIN t2 ON ...
and t1 JOIN t2 USING ...
Currently, you can only use this syntax with LEFT JOIN
.
unsigned long long
type.
CASE
.
show status
. Counts for:
INSERT
/DELETE
/UPDATE
statements. Records reads and
updated. Selects on 1 table and selects with joins. Mean number of
tables in select. Key buffer read/write hits (logical and real).
ORDER BY
, GROUP BY
, temporary tables created.
mysql
in the middle of a query, you should open
another connection and kill the old running query.
Alternatively, an attempt should be made to detect this in the server.
SHOW INFO FROM tbl_name
for basic table information
should be implemented.
NATURAL JOIN
and UNION JOIN
select a from crash_me left join crash_me2 using (a)
; In this
case a is assumed to come from the crash_me table.
ON
and USING
works with the JOIN
and
INNER JOIN
join types.
CONNECT BY PRIOR ...
to search hierarchy structures.
RENAME DATABASE
mysqladmin copy database new-database
. -- Requires COPY command to be
added to mysqld
SHOW HOSTS
for printing information about the hostname cache.
DELETE
and REPLACE
options to the UPDATE
statement
(this will delete rows when one gets a dupplicate key error while updating).
DATETIME
to store fractions of seconds.
NULL
for calculated columns.
SELECT COUNT(*)*(id+0) FROM table_name GROUP BY id
ALTER TABLE
doesn't abort clients that executes
INSERT DELAYED
.
UPDATE
clause contains the old
values before the update started.
UPDATE
statements. For example:
UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c
myisamchk
, REPAIR
and OPTIMIZE TABLE
should be able
to handle cases where the data and/or index files are symbolic links.
pread()
/pwrite()
on windows to enable
concurrent inserts.
SUM(DISTINCT)
ANY()
,EVERY()
and SOME()
group functions. In
ANSI SQL these only works on boolean columns, but we can extend these to
work on any columns/expressions by applying: value == 0 -> FALSE and
value <> 0 -> TRUE.
MAX(column)
is the same as the column type.
create table t1 (a DATE); insert into t1 values (now()); create table t2 select max(a) from t1; show columns from t2;
UPDATE
the row
if it exists and INSERT
a new row if the row didn't exist.
(Like REPLACE
works with INSERT
/ DELETE
)
get_changed_tables(timeout,table1,table2,...)
update items,month set
items.price=month.price where items.id=month.id;
;
SHOW
commands.
SET TIMESTAMP=#;
UNION
, MINUS
, INTERSECT
and FULL OUTER JOIN
.
(Currently only LEFT OUTER JOIN
is supported)
UNIQUE
on fields that can be NULL
.
SQL_OPTION MAX_SELECT_TIME=#
to put a time limit on a query.
LIMIT
to retrieve data from the end.
safe_mysqld
: according to FSSTND (which
Debian tries to follow) PID files should go into `/var/run/<progname>.pid'
and log files into `/var/log'. It would be nice if you could put the
"DATADIR" in the first declaration of "pidfile" and "log", so the
placement of these files can be changed with a single statement.
zlib()
for gzip
-ed files to LOAD DATA INFILE
.
BLOB
columns (partly solved now).
AUTO_INCREMENT
value when one sets a column to 0.
Use NULL
instead.
JOIN
with parentheses.
GET_LOCK
. When doing this,
one must also handle the possible deadlocks this change will introduce.
Time is given according to amount of work, not real time.
Go to the first, previous, next, last section, table of contents.