GNU Info

Info Node: (mysql.info)TODO future

(mysql.info)TODO future


Next: TODO sometime Prev: TODO MySQL 4.0 Up: TODO
Enter node , (file) or (file)node

Things that must be done in the real near future
------------------------------------------------

   * Fail safe replication.

   * Subqueries.  `select id from t where grp in (select grp from g
     where u > 100)'

   * Derived tables.
          select a.col1, b.col2 from (select max(col1) as col1 from root_table ) a,
          other_table b where a.col1=b.col1

     This could be done by automatically creating temporary tables for
     the derived tables for the duration of the query.

   * Add `PREPARE' of statements and sending of parameters to `mysqld'.

   * Extend the server/client protocol to support warnings.

   * Add options to the server/protocol protocol to get progress notes
     for long running commands.

   * Add database and real table name (in case of alias) to the
     MYSQL_FIELD structure.

   * Don't allow more than a defined number of threads to run MyISAM
     recover at the same time.

   * Change `INSERT ... SELECT' to optionally use concurrent inserts.

   * Implement `RENAME DATABASE'. To make this safe for all table
     handlers, it should work as follows:
        * Create the new database.

        * For every table do a rename of the table to another database,
          as we do with the `RENAME' command.

        * Drop the old database.

   * Return the original field types() when doing `SELECT MIN(column)
     ... GROUP BY'.

   * Multiple result sets.

   * Change the protocol to allow binary transfer of values. To do this
     efficiently, we need to add an API to allow binding of variables.

   * Make it possible to specify `long_query_time' with a granularity
     in microseconds.

   * Add a configurable prompt to the `mysql' command line client, with
     options like database in use, time and date...

   * Add range checking to `MERGE' tables.

   * Link the `myisampack' code into the server.

   * Port of MySQL to BeOS.

   * Port of the MySQL clients to LynxOS.

   * Add a temporary key buffer cache during `INSERT/DELETE/UPDATE' so
     that we can gracefully recover if the index file gets full.

   * If you perform an `ALTER TABLE' on a table that is symlinked to
     another disk, create temporary tables on this disk.

   * Implement a `DATE/DATETIME' type that handles time zone information
     properly, so that dealing with dates in different time zones is
     easier.

   * FreeBSD and MIT-pthreads;  Do sleeping threads take CPU?

   * Check if locked threads take any CPU.

   * Fix configure so that one can compile all libraries (like `MyISAM')
     without threads.

   * Add an option to periodically flush key pages for tables with
     delayed keys if they haven't been used in a while.

   * Allow join on key parts (optimization issue).

   * `INSERT SQL_CONCURRENT' and `mysqld --concurrent-insert' to do a
     concurrent insert at the end of the file if the file is
     read-locked.

   * Remember `FOREIGN' key definitions in the `.frm' file.

   * Cascading `DELETE'

   * Server side cursors.

   * Check if `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.

   * Allow SQL variables in `LIMIT', like in `LIMIT @a,@b'.

   * Allow update of variables in `UPDATE' statements. For example:
     `UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c'

   * Change when user variables are updated so that one can use them
     with `GROUP BY', as in the following example: `SELECT id,
     @a:=count(*), sum(sum_col)/@a FROM table_name GROUP BY id'.

   * Don't add automatic `DEFAULT' values to columns.  Give an error
     when using an `INSERT' that doesn't contain a column that doesn't
     have a `DEFAULT'.

   * Caching of queries and results. This should be done as a separated
     module that examines each query and if this is query is in the
     cache the cached result should be returned.  When one updates a
     table one should remove as few queries as possible from the cache.
     This should give a big speed bost on machines with much RAM where
     queries are often repeated (like WWW applications).  One idea
     would be to only cache queries of type: `SELECT CACHED ...'

   * Fix `libmysql.c' to allow two `mysql_query()' commands in a row
     without reading results or give a nice error message when one does
     this.

   * Optimize `BIT' type to take 1 bit (now `BIT' takes 1 char).

   * Check why MIT-pthreads `ctime()' doesn't work on some FreeBSD
     systems.

   * Add an `IMAGE' option to `LOAD DATA INFILE' to not update
     `TIMESTAMP' and `AUTO_INCREMENT' fields.

   * Added `LOAD DATE INFILE.. UPDATE' syntax.
        * For tables with primary keys, if the data contains the
          primary key, entries matching that primary key are updated
          from the remainder of the columns. However, columns MISSING
          from the incoming data feed are not touched.

        * For tables tables with primary keys that are missing some
          part of the key in the incoming data stream, or that have no
          primary key, the feed is treated as a `LOAD DATA INFILE ...
          REPLACE INTO' is now.

   * Make `LOAD DATA INFILE' understand 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

   * Add true `VARCHAR' support (There is already support for this in
     MyISAM).

   * Automatic output from `mysql' to netscape.

   * `LOCK DATABASES'. (with various options)

   * Change sort to allocate memory in "hunks" to get better memory
     utilization.

   * `DECIMAL' and `NUMERIC' types can't read exponential numbers;
     `Field_decimal::store(const char *from,uint len)' must be recoded
     to fix this.

   * Functions: ADD_TO_SET(value,set) and REMOVE_FROM_SET(value,set)

   * Add use of `t1 JOIN t2 ON ...' and `t1 JOIN t2 USING ...'
     Currently, you can only use this syntax with `LEFT JOIN'.

   * Add full support for `unsigned long long' type.

   * Many more variables for `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. Number of `ORDER BY' and `GROUP BY' queries.

   * If you abort `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.

   * Add a handler interface for table information so you can use it as
     a system table. This would be a bit slow if you requested
     information about all tables, but very flexible.  `SHOW INFO FROM
     tbl_name' for basic table information should be implemented.

   * Add support for UNICODE.

   * `NATURAL JOIN' and `UNION JOIN'

   * Allow `select a from crash_me left join crash_me2 using (a)'; In
     this case a is assumed to come from the crash_me table.

   * Fix that `ON' and `USING' works with the `JOIN' join type.

   * Oracle like `CONNECT BY PRIOR ...' to search hierarchy structures.

   * `mysqladmin copy database new-database'. - Requires COPY command
     to be added to `mysqld'

   * Processlist should show number of queries/thread.

   * `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 duplicate key error while
     updating).

   * Change the format of `DATETIME' to store fractions of seconds.

   * Add all missing ANSI92 and ODBC 3.0 types.

   * Change table names from empty strings to `NULL' for calculated
     columns.

   * Don't use 'Item_copy_string' on numerical values to avoid
     number->string->number conversion in case of: `SELECT
     COUNT(*)*(id+0) FROM table_name GROUP BY id'

   * Make it possible to use the new GNU regexp library instead of the
     current one (The GNU library should be much faster than the old
     one).

   * Change that `ALTER TABLE' doesn't abort clients that executes
     `INSERT DELAYED'.

   * Fix that when columns referenced in an `UPDATE' clause contains
     the old values before the update started.

   * `myisamchk', `REPAIR' and `OPTIMIZE TABLE' should be able to
     handle cases where the data and/or index files are symbolic links.

   * Add simulation of `pread()'/`pwrite()' on Windows to enable
     concurrent inserts.

   * A logfile analyzer that could parsed out information about which
     tables are hit most often, how often multi-table joins are
     executed, etc.  It should help users identify areas or table
     design that could be optimized to execute much more efficient
     queries.

   * Add `SUM(DISTINCT)'

   * Add `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.

   * Fix that the type for `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;

   * Come up with a nice syntax for a statement that will `UPDATE' the
     row if it exists and `INSERT' a new row if the row didn't exist.
     (Like `REPLACE' works with `INSERT' / `DELETE')


automatically generated by info2www version 1.2.2.9