Loading .bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -420,3 +420,4 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl Docs/#manual.texi# BitKeeper/etc/logging_ok +2 −0 Original line number Diff line number Diff line Loading @@ -31,3 +31,5 @@ tonu@hundin.mysql.fi tonu@volk.internalnet tonu@x153.internalnet tonu@x3.internalnet Administrator@co3064164-a. Administrator@co3064164-a.rochd1.qld.optushome.com.au Docs/manual.texi +75 −142 Original line number Diff line number Diff line Loading @@ -121,7 +121,6 @@ distribution for that version. * Porting:: Comments on porting to other systems * Environment variables:: MySQL environment variables * Regexp:: Description of MySQL regular expression syntax * Unireg:: What is Unireg? * GPL license:: GNU General Public License * LGPL license:: GNU Library General Public License * Placeholder:: Pieces of the manual in transit Loading Loading @@ -363,16 +362,16 @@ MySQL. @xref{What-is}. * Contact information:: Contact information @end menu MySQL AB has been profitable providing MySQL from the start. We don't get any outside funding, but have earned all our money ourselves. MySQL AB has been profitable from the start with providing MySQL. Though initially working without any outside funding, in October MySQL AB has received seed round financing from ABN Amro / Alfred Berg Industrifinans, Holtron, Scope Capital, Servisen Holding and a number of business angels. We are searching for partners that would like to support our development of MySQL so that we can accelerate the pace of development. If you are interested in doing this, please e-mail @email{partner@@mysql.com}! MySQL AB currently has 30+ employees worldwide (situation in October 2001). MySQL AB currently has over twenty people (@uref{http://www.mysql.com/development/team.html}) on its payroll and is growing rapidly. We are always on the look-out for new partners who would like to support us, so that we can further accelerate the pace of MySQL development. If you are interested in doing this, please e-mail @email{partner@@mysql.com}! Our main sources of income are: Loading Loading @@ -850,12 +849,14 @@ some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs). At TcX, MySQL has worked without any problems in our projects since mid-1996. When MySQL was released to a wider public, we noticed that there were some pieces of ``untested code'' that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). At TcX, the predecessor of MySQL AB, MySQL has worked without any problems in projects since mid-1996. Original code stems back from the early 80s, providing a table code base, and the ISAM table format remains backwards compatible. When MySQL was released to a wider public, we noticed that there were some pieces of ``untested code'' that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). Each release of MySQL has been usable, and there have been problems only when users start to use code from the ``gray zones.'' Naturally, outside Loading Loading @@ -4889,7 +4890,7 @@ Table locking, as used by the non-transactional @code{MyISAM} tables, is in many cases faster than page locks, row locks or versioning. The drawback however is that if one doesn't take into account how table locks work, a single long-running query can block a table for updates for a long time. This can usable be avoided when designing the for a long time. This can usually be avoided when designing the application. If not, one can always switch the trouble table to use one of the transactional table types. @xref{Table locking}. Loading Loading @@ -4923,7 +4924,7 @@ don't know the PostgreSQL roadmap. @item Unions @tab 4.0 @item Full join @tab 4.0 or 4.1 @item Triggers @tab 4.1 @item Constrainst @tab 4.1 @item Constraints @tab 4.1 @item Cursors @tab 4.1 or 4.2 @item Extensible index types like R-trees @tab R-trees are planned for 4.2 @item Inherited tables @tab Not planned Loading Loading @@ -24218,7 +24219,7 @@ The most common bottlenecks are: @item Disk seeks. It takes time for the disk to find a piece of data. With modern disks in 1999, the mean time for this is usually lower than 10ms, so we can in theory do about 1000 seeks a second. This time improves slowly with new theory do about 100 seeks a second. This time improves slowly with new disks and is very hard to optimize for a single table. The way to optimize this is to spread the data on more than one disk. Loading Loading @@ -27223,7 +27224,6 @@ Things that are not yet supported: * Data Definition:: Data Definition: @code{CREATE}, @code{DROP}, @code{ALTER} * Basic User Commands:: Basic MySQL User Utility Commands * Transactional Commands:: MySQL Transactional and Locking Commands * HANDLER:: * Fulltext Search:: MySQL Full-text Search @end menu Loading Loading @@ -32042,7 +32042,7 @@ facilitate replication testing. @menu * SELECT:: @code{SELECT} Syntax * UNION:: * HANDLER:: * INSERT:: @code{INSERT} Syntax * INSERT DELAYED:: @code{INSERT DELAYED} syntax * UPDATE:: @code{UPDATE} Syntax Loading @@ -32052,7 +32052,7 @@ facilitate replication testing. * LOAD DATA:: @code{LOAD DATA INFILE} Syntax @end menu @node SELECT, UNION, Data Manipulation, Data Manipulation @node SELECT, HANDLER, Data Manipulation, Data Manipulation @subsection @code{SELECT} Syntax @findex SELECT Loading Loading @@ -32345,9 +32345,10 @@ the examined rows will be write locked. @menu * JOIN:: @code{JOIN} Syntax * UNION:: @end menu @node JOIN, , SELECT, SELECT @node JOIN, UNION, SELECT, SELECT @subsubsection @code{JOIN} Syntax @findex JOIN Loading Loading @@ -32497,8 +32498,8 @@ mysql> select * from table1 IGNORE INDEX (key3) WHERE key1=1 and key2=2 AND @xref{LEFT JOIN optimization, , @code{LEFT JOIN} optimization}. @node UNION, INSERT, SELECT, Data Manipulation @subsection @code{UNION} Syntax @node UNION, , JOIN, SELECT @subsubsection @code{UNION} Syntax @findex UNION Loading Loading @@ -32530,7 +32531,52 @@ returned rows will be unique, like if you had done a @code{DISTINCT} for the total result set. If you specify @code{ALL}, then you will get all matching rows from all the used @code{SELECT} statements. @node INSERT, INSERT DELAYED, UNION, Data Manipulation @findex HANDLER @node HANDLER, INSERT, SELECT, Data Manipulation @subsection @code{HANDLER} Syntax @example HANDLER table OPEN [ AS alias ] HANDLER table READ index @{ = | >= | <= | < @} (value1, value2, ... ) [ WHERE ... ] [LIMIT ... ] HANDLER table READ index @{ FIRST | NEXT | PREV | LAST @} [ WHERE ... ] [LIMIT ... ] HANDLER table READ @{ FIRST | NEXT @} [ WHERE ... ] [LIMIT ... ] HANDLER table CLOSE @end example The @code{HANDLER} statement provides direct access to MySQL table interface, bypassing SQL optimizer. Thus, it is faster then SELECT. The first form of @code{HANDLER} statement opens a table, making in accessible via the following @code{HANDLER ... READ} routines. This table object is not shared by other threads an will not be closed until the thread calls @code{HANDLER table_name CLOSE} or the thread dies. The second form fetches one (or, specified by @code{LIMIT} clause) row where the index specified complies to the condition and @code{WHERE} condition is met. If the index consists of several parts (spans over several columns) the values are specified in comma-separated list, providing values only for few first columns is possible. The third form fetches one (or, specified by @code{LIMIT} clause) row from the table in index order, matching @code{WHERE} condition. The fourth form (without index specification) fetches one (or, specified by @code{LIMIT} clause) row from the table in natural row order (as stored in data file) matching @code{WHERE} condition. It is faster than @code{HANDLER table READ index} when full table scan is desired. The last form closes the table, opened with @code{HANDLER ... OPEN}. @code{HANDLER} is somewhat low-level statement, for example it does not provide consistency. That is @code{HANDLER ... OPEN} does @strong{NOT} takes a snapshot of the table, and does @strong{NOT} locks the table. The above means, that after @code{HANDLER ... OPEN} table data can be modified (by this or other thread) and these modifications may appear only partially in @code{HANDLER ... NEXT} or @code{HANDLER ... PREV} scans. @node INSERT, INSERT DELAYED, HANDLER, Data Manipulation @subsection @code{INSERT} Syntax @findex INSERT Loading Loading @@ -34672,7 +34718,7 @@ The @code{SHOW} statement provides similar information. @xref{SHOW, , @code{SHOW}}. @node Transactional Commands, HANDLER, Basic User Commands, Reference @node Transactional Commands, Fulltext Search, Basic User Commands, Reference @section MySQL Transactional and Locking Commands @menu Loading Loading @@ -34905,50 +34951,7 @@ future transactions. You can set the default isolation level for @code{mysqld} with @code{--transaction-isolation=...}. @xref{Command-line options}. @findex HANDLER @node HANDLER, Fulltext Search, Transactional Commands, Reference @section @code{HANDLER} Syntax @example HANDLER table OPEN [ AS alias ] HANDLER table READ index @{ = | >= | <= | < @} (value1, value2, ... ) [ WHERE ... ] [LIMIT ... ] HANDLER table READ index @{ FIRST | NEXT | PREV | LAST @} [ WHERE ... ] [LIMIT ... ] HANDLER table READ @{ FIRST | NEXT @} [ WHERE ... ] [LIMIT ... ] HANDLER table CLOSE @end example The @code{HANDLER} statement provides direct access to MySQL table interface, bypassing SQL optimizer. Thus, it is faster then SELECT. The first form of @code{HANDLER} statement opens a table, making in accessible via the following @code{HANDLER ... READ} routines. This table object is not shared by other threads an will not be closed until the thread calls @code{HANDLER table_name CLOSE} or the thread dies. The second form fetches one (or, specified by @code{LIMIT} clause) row where the index specified complies to the condition and @code{WHERE} condition is met. If the index consists of several parts (spans over several columns) the values are specified in comma-separated list, providing values only for few first columns is possible. The third form fetches one (or, specified by @code{LIMIT} clause) row from the table in index order, matching @code{WHERE} condition. The fourth form (without index specification) fetches one (or, specified by @code{LIMIT} clause) row from the table in natural row order (as stored in data file) matching @code{WHERE} condition. It is faster than @code{HANDLER table READ index} when full table scan is desired. The last form closes the table, opened with @code{HANDLER ... OPEN}. @code{HANDLER} is somewhat low-level statement, for example it does not provide consistency. That is @code{HANDLER ... OPEN} does @strong{NOT} takes a snapshot of the table, and does @strong{NOT} locks the table. The above means, that after @code{HANDLER ... OPEN} table data can be modified (by this or other thread) and these modifications may appear only partially in @code{HANDLER ... NEXT} or @code{HANDLER ... PREV} scans. @node Fulltext Search, , HANDLER, Reference @node Fulltext Search, , Transactional Commands, Reference @section MySQL Full-text Search @cindex searching, full-text Loading Loading @@ -53949,7 +53952,7 @@ variables to modify the behavior of MySQL. @xref{Option files}. @node Regexp, Unireg, Environment variables, Top @node Regexp, GPL license, Environment variables, Top @appendix Description of MySQL regular expression syntax @cindex regex Loading Loading @@ -54136,77 +54139,7 @@ mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1 @node Unireg, GPL license, Regexp, Top @appendix What is Unireg? @cindex Unireg, described @cindex interface builder Unireg is our tty interface builder, but it uses a low-level connection to our ISAM (which is used by MySQL) and because of this it is very quick. It has existed since 1979 (on Unix in C since ~1986). Unireg has the following components: @itemize @bullet @item One table viewer with updates/browsing. @item Multi table viewer (with one scrolling region). @item Table creator. (With lots of column tags you can't create with MySQL) This is WYSIWYG (for a tty). You design a screen and Unireg prompts for the column specification. @item Report generator. @item A lot of utilities (quick import/export of tables to/from text files, analysis of table contents...). @item Powerful multi-table updates (which we use a lot) with a BASIC-like language with LOTS of functions. @item Dynamic languages (at present in Swedish and Finnish). If somebody wants an English version there are a few files that would have to be translated. @item The ability to run updates interactively or in a batch. @item Emacs-like key definitions with keyboard macros. @item All this in a binary of 800K. @item The @code{convform} utility. Converts @file{.frm} and text files between different character sets. @item The @code{myisampack} utility. Packs an ISAM table (makes it 50-80% smaller). The table can be read by MySQL like an ordinary table. Only one record has to be decompressed per access. Cannot handle @code{BLOB} or @code{TEXT} columns or updates (yet). @end itemize We update most of our production databases with the Unireg interface and serve web pages through MySQL (and in some extreme cases the Unireg report generator). Unireg takes about 3M of disk space and works on at least the following platforms: SunOS 4.x, Solaris, Linux, HP-UX, ICL Unix, DNIX, SCO and MS-DOS. Unireg is currently only available in Swedish and Finnish. The price tag for Unireg is 10,000 Swedish kr (about $1500 US), but this includes support. Unireg is distributed as a binary. (But all the ISAM sources can be found in MySQL.) Usually we compile the binary for the customer at their site. All new development is concentrated to MySQL. @page @c This node name is special @node GPL license, LGPL license, Unireg, Top @node GPL license, LGPL license, Regexp, Top @appendix GNU GENERAL PUBLIC LICENSE @cindex GPL, General Public License Loading
.bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -420,3 +420,4 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl Docs/#manual.texi#
BitKeeper/etc/logging_ok +2 −0 Original line number Diff line number Diff line Loading @@ -31,3 +31,5 @@ tonu@hundin.mysql.fi tonu@volk.internalnet tonu@x153.internalnet tonu@x3.internalnet Administrator@co3064164-a. Administrator@co3064164-a.rochd1.qld.optushome.com.au
Docs/manual.texi +75 −142 Original line number Diff line number Diff line Loading @@ -121,7 +121,6 @@ distribution for that version. * Porting:: Comments on porting to other systems * Environment variables:: MySQL environment variables * Regexp:: Description of MySQL regular expression syntax * Unireg:: What is Unireg? * GPL license:: GNU General Public License * LGPL license:: GNU Library General Public License * Placeholder:: Pieces of the manual in transit Loading Loading @@ -363,16 +362,16 @@ MySQL. @xref{What-is}. * Contact information:: Contact information @end menu MySQL AB has been profitable providing MySQL from the start. We don't get any outside funding, but have earned all our money ourselves. MySQL AB has been profitable from the start with providing MySQL. Though initially working without any outside funding, in October MySQL AB has received seed round financing from ABN Amro / Alfred Berg Industrifinans, Holtron, Scope Capital, Servisen Holding and a number of business angels. We are searching for partners that would like to support our development of MySQL so that we can accelerate the pace of development. If you are interested in doing this, please e-mail @email{partner@@mysql.com}! MySQL AB currently has 30+ employees worldwide (situation in October 2001). MySQL AB currently has over twenty people (@uref{http://www.mysql.com/development/team.html}) on its payroll and is growing rapidly. We are always on the look-out for new partners who would like to support us, so that we can further accelerate the pace of MySQL development. If you are interested in doing this, please e-mail @email{partner@@mysql.com}! Our main sources of income are: Loading Loading @@ -850,12 +849,14 @@ some issues and to answer some of the more important questions that seem to concern many people. This section has been put together from information gathered from the mailing list (which is very active in reporting bugs). At TcX, MySQL has worked without any problems in our projects since mid-1996. When MySQL was released to a wider public, we noticed that there were some pieces of ``untested code'' that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). At TcX, the predecessor of MySQL AB, MySQL has worked without any problems in projects since mid-1996. Original code stems back from the early 80s, providing a table code base, and the ISAM table format remains backwards compatible. When MySQL was released to a wider public, we noticed that there were some pieces of ``untested code'' that were quickly found by the new users who made queries in a manner different than our own. Each new release has had fewer portability problems than the previous one (even though each has had many new features). Each release of MySQL has been usable, and there have been problems only when users start to use code from the ``gray zones.'' Naturally, outside Loading Loading @@ -4889,7 +4890,7 @@ Table locking, as used by the non-transactional @code{MyISAM} tables, is in many cases faster than page locks, row locks or versioning. The drawback however is that if one doesn't take into account how table locks work, a single long-running query can block a table for updates for a long time. This can usable be avoided when designing the for a long time. This can usually be avoided when designing the application. If not, one can always switch the trouble table to use one of the transactional table types. @xref{Table locking}. Loading Loading @@ -4923,7 +4924,7 @@ don't know the PostgreSQL roadmap. @item Unions @tab 4.0 @item Full join @tab 4.0 or 4.1 @item Triggers @tab 4.1 @item Constrainst @tab 4.1 @item Constraints @tab 4.1 @item Cursors @tab 4.1 or 4.2 @item Extensible index types like R-trees @tab R-trees are planned for 4.2 @item Inherited tables @tab Not planned Loading Loading @@ -24218,7 +24219,7 @@ The most common bottlenecks are: @item Disk seeks. It takes time for the disk to find a piece of data. With modern disks in 1999, the mean time for this is usually lower than 10ms, so we can in theory do about 1000 seeks a second. This time improves slowly with new theory do about 100 seeks a second. This time improves slowly with new disks and is very hard to optimize for a single table. The way to optimize this is to spread the data on more than one disk. Loading Loading @@ -27223,7 +27224,6 @@ Things that are not yet supported: * Data Definition:: Data Definition: @code{CREATE}, @code{DROP}, @code{ALTER} * Basic User Commands:: Basic MySQL User Utility Commands * Transactional Commands:: MySQL Transactional and Locking Commands * HANDLER:: * Fulltext Search:: MySQL Full-text Search @end menu Loading Loading @@ -32042,7 +32042,7 @@ facilitate replication testing. @menu * SELECT:: @code{SELECT} Syntax * UNION:: * HANDLER:: * INSERT:: @code{INSERT} Syntax * INSERT DELAYED:: @code{INSERT DELAYED} syntax * UPDATE:: @code{UPDATE} Syntax Loading @@ -32052,7 +32052,7 @@ facilitate replication testing. * LOAD DATA:: @code{LOAD DATA INFILE} Syntax @end menu @node SELECT, UNION, Data Manipulation, Data Manipulation @node SELECT, HANDLER, Data Manipulation, Data Manipulation @subsection @code{SELECT} Syntax @findex SELECT Loading Loading @@ -32345,9 +32345,10 @@ the examined rows will be write locked. @menu * JOIN:: @code{JOIN} Syntax * UNION:: @end menu @node JOIN, , SELECT, SELECT @node JOIN, UNION, SELECT, SELECT @subsubsection @code{JOIN} Syntax @findex JOIN Loading Loading @@ -32497,8 +32498,8 @@ mysql> select * from table1 IGNORE INDEX (key3) WHERE key1=1 and key2=2 AND @xref{LEFT JOIN optimization, , @code{LEFT JOIN} optimization}. @node UNION, INSERT, SELECT, Data Manipulation @subsection @code{UNION} Syntax @node UNION, , JOIN, SELECT @subsubsection @code{UNION} Syntax @findex UNION Loading Loading @@ -32530,7 +32531,52 @@ returned rows will be unique, like if you had done a @code{DISTINCT} for the total result set. If you specify @code{ALL}, then you will get all matching rows from all the used @code{SELECT} statements. @node INSERT, INSERT DELAYED, UNION, Data Manipulation @findex HANDLER @node HANDLER, INSERT, SELECT, Data Manipulation @subsection @code{HANDLER} Syntax @example HANDLER table OPEN [ AS alias ] HANDLER table READ index @{ = | >= | <= | < @} (value1, value2, ... ) [ WHERE ... ] [LIMIT ... ] HANDLER table READ index @{ FIRST | NEXT | PREV | LAST @} [ WHERE ... ] [LIMIT ... ] HANDLER table READ @{ FIRST | NEXT @} [ WHERE ... ] [LIMIT ... ] HANDLER table CLOSE @end example The @code{HANDLER} statement provides direct access to MySQL table interface, bypassing SQL optimizer. Thus, it is faster then SELECT. The first form of @code{HANDLER} statement opens a table, making in accessible via the following @code{HANDLER ... READ} routines. This table object is not shared by other threads an will not be closed until the thread calls @code{HANDLER table_name CLOSE} or the thread dies. The second form fetches one (or, specified by @code{LIMIT} clause) row where the index specified complies to the condition and @code{WHERE} condition is met. If the index consists of several parts (spans over several columns) the values are specified in comma-separated list, providing values only for few first columns is possible. The third form fetches one (or, specified by @code{LIMIT} clause) row from the table in index order, matching @code{WHERE} condition. The fourth form (without index specification) fetches one (or, specified by @code{LIMIT} clause) row from the table in natural row order (as stored in data file) matching @code{WHERE} condition. It is faster than @code{HANDLER table READ index} when full table scan is desired. The last form closes the table, opened with @code{HANDLER ... OPEN}. @code{HANDLER} is somewhat low-level statement, for example it does not provide consistency. That is @code{HANDLER ... OPEN} does @strong{NOT} takes a snapshot of the table, and does @strong{NOT} locks the table. The above means, that after @code{HANDLER ... OPEN} table data can be modified (by this or other thread) and these modifications may appear only partially in @code{HANDLER ... NEXT} or @code{HANDLER ... PREV} scans. @node INSERT, INSERT DELAYED, HANDLER, Data Manipulation @subsection @code{INSERT} Syntax @findex INSERT Loading Loading @@ -34672,7 +34718,7 @@ The @code{SHOW} statement provides similar information. @xref{SHOW, , @code{SHOW}}. @node Transactional Commands, HANDLER, Basic User Commands, Reference @node Transactional Commands, Fulltext Search, Basic User Commands, Reference @section MySQL Transactional and Locking Commands @menu Loading Loading @@ -34905,50 +34951,7 @@ future transactions. You can set the default isolation level for @code{mysqld} with @code{--transaction-isolation=...}. @xref{Command-line options}. @findex HANDLER @node HANDLER, Fulltext Search, Transactional Commands, Reference @section @code{HANDLER} Syntax @example HANDLER table OPEN [ AS alias ] HANDLER table READ index @{ = | >= | <= | < @} (value1, value2, ... ) [ WHERE ... ] [LIMIT ... ] HANDLER table READ index @{ FIRST | NEXT | PREV | LAST @} [ WHERE ... ] [LIMIT ... ] HANDLER table READ @{ FIRST | NEXT @} [ WHERE ... ] [LIMIT ... ] HANDLER table CLOSE @end example The @code{HANDLER} statement provides direct access to MySQL table interface, bypassing SQL optimizer. Thus, it is faster then SELECT. The first form of @code{HANDLER} statement opens a table, making in accessible via the following @code{HANDLER ... READ} routines. This table object is not shared by other threads an will not be closed until the thread calls @code{HANDLER table_name CLOSE} or the thread dies. The second form fetches one (or, specified by @code{LIMIT} clause) row where the index specified complies to the condition and @code{WHERE} condition is met. If the index consists of several parts (spans over several columns) the values are specified in comma-separated list, providing values only for few first columns is possible. The third form fetches one (or, specified by @code{LIMIT} clause) row from the table in index order, matching @code{WHERE} condition. The fourth form (without index specification) fetches one (or, specified by @code{LIMIT} clause) row from the table in natural row order (as stored in data file) matching @code{WHERE} condition. It is faster than @code{HANDLER table READ index} when full table scan is desired. The last form closes the table, opened with @code{HANDLER ... OPEN}. @code{HANDLER} is somewhat low-level statement, for example it does not provide consistency. That is @code{HANDLER ... OPEN} does @strong{NOT} takes a snapshot of the table, and does @strong{NOT} locks the table. The above means, that after @code{HANDLER ... OPEN} table data can be modified (by this or other thread) and these modifications may appear only partially in @code{HANDLER ... NEXT} or @code{HANDLER ... PREV} scans. @node Fulltext Search, , HANDLER, Reference @node Fulltext Search, , Transactional Commands, Reference @section MySQL Full-text Search @cindex searching, full-text Loading Loading @@ -53949,7 +53952,7 @@ variables to modify the behavior of MySQL. @xref{Option files}. @node Regexp, Unireg, Environment variables, Top @node Regexp, GPL license, Environment variables, Top @appendix Description of MySQL regular expression syntax @cindex regex Loading Loading @@ -54136,77 +54139,7 @@ mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1 @node Unireg, GPL license, Regexp, Top @appendix What is Unireg? @cindex Unireg, described @cindex interface builder Unireg is our tty interface builder, but it uses a low-level connection to our ISAM (which is used by MySQL) and because of this it is very quick. It has existed since 1979 (on Unix in C since ~1986). Unireg has the following components: @itemize @bullet @item One table viewer with updates/browsing. @item Multi table viewer (with one scrolling region). @item Table creator. (With lots of column tags you can't create with MySQL) This is WYSIWYG (for a tty). You design a screen and Unireg prompts for the column specification. @item Report generator. @item A lot of utilities (quick import/export of tables to/from text files, analysis of table contents...). @item Powerful multi-table updates (which we use a lot) with a BASIC-like language with LOTS of functions. @item Dynamic languages (at present in Swedish and Finnish). If somebody wants an English version there are a few files that would have to be translated. @item The ability to run updates interactively or in a batch. @item Emacs-like key definitions with keyboard macros. @item All this in a binary of 800K. @item The @code{convform} utility. Converts @file{.frm} and text files between different character sets. @item The @code{myisampack} utility. Packs an ISAM table (makes it 50-80% smaller). The table can be read by MySQL like an ordinary table. Only one record has to be decompressed per access. Cannot handle @code{BLOB} or @code{TEXT} columns or updates (yet). @end itemize We update most of our production databases with the Unireg interface and serve web pages through MySQL (and in some extreme cases the Unireg report generator). Unireg takes about 3M of disk space and works on at least the following platforms: SunOS 4.x, Solaris, Linux, HP-UX, ICL Unix, DNIX, SCO and MS-DOS. Unireg is currently only available in Swedish and Finnish. The price tag for Unireg is 10,000 Swedish kr (about $1500 US), but this includes support. Unireg is distributed as a binary. (But all the ISAM sources can be found in MySQL.) Usually we compile the binary for the customer at their site. All new development is concentrated to MySQL. @page @c This node name is special @node GPL license, LGPL license, Unireg, Top @node GPL license, LGPL license, Regexp, Top @appendix GNU GENERAL PUBLIC LICENSE @cindex GPL, General Public License