The mSQL FAQ

$Revision: 1.31 $

$Date: 1997/04/30 00:36:13 $

Preamble

A text copy of this FAQ can be obtained via anonymous ftp from:


    ftp://bond.edu.au/pub/Minerva/msql/faq.txt

or an HTML copy can be obtained via anonymous ftp from:


    ftp://bond.edu.au/pub/Minerva/msql/faq.html

This FAQ is maintained by Peter Samuel <Peter.Samuel@uniq.com.au> and is produced independently of Hughes Technologies (the developers of mSQL).

While every attempt is made to ensure that the information contained in this FAQ is accurate, no guarantees of accuracy can or will be made.

This FAQ attempts to deal with mSQL. Because of time and space constraints, other applications, including value added applications provided with the mSQL distribution such as W3-mSQL and Lite, will not be covered in any great detail.

Third party applications mentioned in this FAQ may not be compatible with the current release of mSQL - by necessity their development will lag that of mSQL. If you have any questions concerning their status please contact the mSQL mailing list or the author of the application in question.

New questions in the FAQ are marked with (=). Questions that have been modified since the last release of the FAQ are marked with (-).

Note: BEFORE POSTING A QUESTION TO THE mSQL MAILING LIST, PLEASE READ THE SECTION "How do I post a question to the mSQL mailing list".



Contents



General Information

What is SQL?

The following section is based on chapter 1 of "Oracle7 Server - SQL Language Reference Manual" - Oracle Corporation, December 1992, part number 778-70-1292.

SQL is an acronym that stands for Structured Query Language. It is often pronounced "sequel". It was developed in the mid 1970s by IBM.

The American National Standards Institute (ANSI) and the International Standards Organisation (ISO) have adopted SQL as the standard language for relational database management systems.

SQL provides commands for a variety of tasks including:

SQL provides easy to learn commands that are both consistent and applicable for all users.

While most relational database management systems - including mSQL - provide support for SQL, each vendor usually has their own unique extensions to the language that may hinder the portability of SQL procedures from one database platform to another.


Books on SQL and mSQL

There are countless books available on database design and SQL. Some good starting points (in no particular order) are:




    C. J. Date

    "An Introduction to Database Systems"

    Vol I, Sixth Edition, 1995

    Addison Wesley

    ISBN 0-201-54329-X

 

    C. J. Date and Hugh Darwen

    "A Guide to Sql Standard"

    Third Edition, 1993

    Addison Wesley

    ISBN 0-201-55822-X

 

    Judith S. Bowman, Sandra L. Emerson and Marcy Darnovsky

    "The Practical SQL Handbook: Using Structured Query Language"

    Second Edition

    Addison Wesley

    ISBN 0-201-62623-3

 

    G. M. Nijssen and T. A. Halpin

    "Conceptual Schema and Relational Database Design"

    1989

    Prentice Hall

    ISBN 0-7248-0151-0

 

    Joe Celko

    "Instant SQL Programming"

 

    Martin Gruber

    "Understanding SQL"

    1990

    Sybex Publishing

    ISBN  0-89588-644-8

 

    Jeff Rowe

    "Building Internet Database Servers with CGI"

    1996

    New Riders Publishing

    ISBN 1-56205-573-9

    (see also http://cscsun1.larc.nasa.gov/~beowulf/db/mybook.html)

 

    Perkins & Morgan

    "Teach yourself SQL in 14 days"

    SAMS Publishing

 

    Connolly, Begg & Strachan

    "Database Systems: A Practical Approach to Design,

	Implementation and Management"

    Addison-Wesley, 1996

 

    Melton & Simon

    "Understanding the New SQL: A Complete Guide"

    Morgan Kaufmann 1993

 

    Mike Morgan & Jeff Wandling

    "Webmaster - Expert Solutions"

    QUE books

    ISBN 0-7897-0801-9




What is mSQL?

mSQL is mini SQL, a light weight database engine developed by David J. Hughes <bambi@hughes.com.au> at Bond University, Australia. It has been designed to provide fast access to stored data with low memory requirements. As its name implies mSQL offers a subset of SQL as its query interface. Although it only supports a subset of SQL, everything it supports is in accordance with the ANSI SQL specification.


What platforms will it run on?

mSQL has been developed under Sun OS 4.1.1 but has been tested under Solaris 2.x (release 2.3, 2.4 and 2.5), Ultrix 4.3, Linux, and OSF/1 (cc not gcc). That said, it should "autoconf" and build on most BSD derived systems, SVR4 based systems or POSIX O/S's (that should cover most of them). It has been reported that it works out-of-the-box on HP-UX, NeXT, SCO, Sequent, Cray, Tandem, *BSD and a few others.


Is it free?

David Hughes writes:


    "mSQL has been released in the past under terms known as

    'conscience-ware', the basic concept of which was that companies

    that used the software could contribute a small amount to the

    continued development of the software without any strict rules

    being placed upon such 'donations'. Although the concept sounds

    fair, it failed badly with only 3 contributions being made from

    over 3,600 copies of mSQL-1.0.5 that were ftp'ed from my machine

    alone. Over 1,000 of those copies went to commercial organisations

    and I receive many questions a day from companies using mSQL behind

    their WWW servers etc who are looking for free support. 

In an attempt to balance this out and allow me to devote some time to mSQL (rather than other pursuits that I do to generate an income), mSQL is now shareware. I still believe in free software over the Internet and cooperation in research so the new license is designed not to hurt Universities, research groups and other people that _should_ have free access to software. Commercial organisations that are using this so that they don't have to buy an Oracle or an Ingres will now have to buy mSQL (at a minute fraction of the cost of one of the commercial offerings).

Please read the doc/License file to see if you are required to register your copy. An invoice is included in both Postscript and ASCII format to ease the generation of payments."

You may freely use mSQL if and only if you fall into the categories outlined in the mSQL License file:


    You can use this software free of charge if you are an educational

    institution (excluding commercial training organisations),

    non-commercial research organisation, registered charity,

    registered not-for-profit organisation, or full-time student.

If you do not fall into any of these categories, you will have to pay a license fee to use mSQL. As of release 1.0.16, the cost of mSQL is:


    Commercial Installation - AUD $225

 

    Private Installation - AUD $65

Exchange rates may vary wildly, but at the time of preparing this FAQ, the Australian dollar was trading at about 0.75 US dollars. This information is provided as an indication only. You MUST check your local exchange rates before preparing to purchase mSQL.

An online currency conversion system developed by Olsen & Associates is available at http://www.olsen.ch/cgi-bin/exmenu.

Another online currency conversion system is available from http://www.DynaMind-LLC.com/services/utilities/currency.cgi.


Where can I get it?

mSQL 1.x can be obtained via anonymous ftp from Bond University, Australia. The latest version of release 1.x can be found in the directory:


    ftp://bond.edu.au/pub/Minerva/msql/

The latest beta version of 2.x can be found at:


    http://hughes.com.au/software/msql2/current.htm


Are there any mirror sites for mSQL?

The following sites mirror the mSQL FAQ:

The following sites mirror the mSQL 1.x software distribution:

The following sites mirror the mSQL 2.x software distribution:

The following sites have a complete mirror of http://hughes.com.au:


What is the latest version?

At the time of compiling this FAQ, the latest released version was 1.0.16.

It is available via anonymous ftp from:


    ftp://bond.edu.au/pub/Minerva/msql/msql-1.0.16.tar.gz

    (195705 bytes)


When will the next version be released?

David has suspended all development work on mSQL version 1.x and is concentrating his efforts on version 2.x. However, he will continue to provide any necessary bug fixes for the current release of mSQL.

mSQL development is NOT David's primary role. He does this work in whatever spare time he has available so PLEASE don't pester him with requests about when we can expect future releases. Take the zen approach and just let it happen :)

A beta snapshot of mSQL version 2.0.x was released on April 11 1997. It is available from:


    http://hughes.com.au/software/msql2/msql-2.0-B6.tar.gz

    (371797 bytes)

It is also mirrored at a number of other sites. See the section above titled "Are there any mirror sites for mSQL?" for details on these mirror sites.

More details on mSQL 2.0.x can be found by visiting the Hughes Technologies web pages at http://hughes.com.au.


Why is David called Bambi?

Bambi is a nickname that David acquired quite a long time ago. He claims there are no derogatory implications associated with the name. If you'd like to find out more send him some mail at <bambi@hughes.com.au>.


How is this FAQ prepared?

The FAQ is written in HTML and proofread using version 3.01Gold of the Netscape Navigator running under Solaris 2.5.1. The HTML syntax is checked using version 1.017 of Neil Bowers' <neilb@khoral.com> weblint package. Text versions of the FAQ are created by saving the document as a text file from within the Netscape Navigator.

(See http://www.cre.canon.co.uk/~neilb/weblint.html for more details on weblint).


How can I contribute to the FAQ?

If you find any errors or omissions in the FAQ, please contact me, Peter Samuel <Peter.Samuel@uniq.com.au>. I will be happy to correct any errors or add elements to the FAQ.

If you want something added to the FAQ, it would be a great help if you could write a section and forward it to me - then I can simply insert it in the appropriate location.

Remember, I don't own the FAQ - I'm just its caretaker on your behalf.



Help and Support

Are there any recommended patches to the latest version?

There are no official patches to any release of mSQL. If modifications need to be made, a new version of mSQL will be released.

The above not withstanding there is one unofficial patch that should be applied to mSQL version 1.0.16.

This patch comes from David Hughes <bambi@hughes.com.au> and fixes the very old and very obscure problem of the occasionally disappearing table.

David writes:


    After sitting here banging my head against the old "missing table"

    bug with my partner in crime Jason  <jason@fan.net.au> , we've fixed

    it !!!!!  This is yet another very obscure bug.  So, can it be

    reproduced?  Yup, once you know the problem.

 

	o Fill the table cache

	o Cause a reference to a table that doesn't exist

	o The oldest cache entry will have the table definition list

	  set to NULL but with the name, DB, and age fields still set

 

    We all owe a debt of thanks to Jason as it was his inability to type

    table names correctly that found the problem :)


*** ./src/msql/msqldb.c.orig    Sun Jul  7 16:47:09 1996

--- ./src/msql/msqldb.c Tue Jul 30 17:07:42 1996

***************

*** 1398,1403 ****

--- 1398,1406 ----

                safeFree(entry->rowBuf);

                safeFree(entry->keyBuf);

                entry->def = NULL;

+               *(entry->DB) = 0;

+               *(entry->table) = 0;

+               entry->age = 0;

        }

 

        /*

To avoid conflicts with mismatched whitespace, apply this patch using the "-l" option of patch. (That's an "el", NOT a "one" or an "eye").

David assures us that this patch will be rolled into version 1.0.17.


Are there any known bugs or problems with the current release of mSQL?

Since the release of mSQL 1.0.12, several problems have been reported to the mSQL mailing list. These are outlined below.


What are the current problems with mSQL 2.0Bx?

Note: This section is temporary. It will be merged into the rest of the FAQ as mSQL 2.x matures.

Note: Some parts of this section have been compiled by Lloyd Parkes <Lloyd.Parkes@vuw.ac.nz>.

There are a few known problems with the current release of mSQL 2.0Bx. This list is undoubtedly incomplete and will probably remain so because of the "moving target" nature of new software.


Are there any other patches available?

This FAQ only details those recommended patches that are necessary for the general operation of mSQL. There are a number of other user contributed patches that enhance the operation of mSQL. Some of these patches are available via anonymous ftp while others are available from the mSQL mailing list archives.

Some of these patches are for older releases of mSQL. They may have been rolled into subsequent releases of mSQL or they may not work with later releases of mSQL or they may break the successful operation of later releases of mSQL. Use them at your own risk.

A brief and no doubt incomplete list of these patches follows:


How do I apply patches to the mSQL source?

Patches are distributed as context based difference listings. That is the line by line differences between the original file and the new file are listed with surrounding lines of code to provide some context information. They are usually generated by using a program such as diff.

The easiest way to apply these patches is to use Larry Wall's patch program:


    Patch will take a patch file containing any of the four forms of

    difference listing produced by the diff program and apply those

    differences to an original file, producing a patched version. By

    default, the patched version is put in place of the original, with

    the original file backed up to the same name with the extension

    ".orig".

Patch is available from a number of anonymous ftp sites worldwide. Latest versions of patch are being distributed by the Free Software Foundation as part of the GNU suite of products.

If you're having difficulty finding the latest version of patch, you can download version 2.1 via anonymous ftp from:


    ftp://bond.edu.au/pub/Minerva/msql/Misc/patch-2.1.tar.gz

    (74856 bytes)

While some patches are fairly simple - often involving minor changes to a single line of code - others are quite complex and attempting to apply these patches by hand is definitely NOT recommended. Use the patch program whenever you need to apply a patch.

To apply the patches listed in this FAQ, use this procedure:

  1. Save the patch to a file - say /tmp/msql-patch1. Only save the patch information - the patch program can usually determine which parts of the file are patches and which parts are not but its easier for you to strip out any unnecessary information before running patch.

    You should be left with a file containing a number of sections similar to:

    
    *** ./src/msql/net.c.orig	Tue Oct 17 11:24:03 1995
    
    --- ./src/msql/net.c	Tue Dec 12 15:24:11 1995
    
    ***************
    
    *** 66,72 ****
    
     
    
     
    
     
    
    ! void writePkt(fd)
    
    	int	fd;
    
      {
    
    	u_char	*cp;
    
    --- 66,72 ----
    
     
    
     
    
     
    
    ! int writePkt(fd)
    
    	int	fd;
    
      {
    
    	u_char	*cp;
    
    
  2. Change directories to your mSQL source repository. For example:

    
        cd /usr/local/src/db/Minerva/msql/msql-1.0.16
    
    
  3. Apply the patch as follows:

    
        patch -l < /tmp/msql-patch1
    
    
    The "-l" option is used to tell patch to ignore any whitespace mismatches between lines in the patch file and lines in the mSQL source file. (That's an "el", NOT a "one" or an "eye").

    Patch will respond with output similar to:

    
        Hmm...  Looks like a new-style context diff to me...
    
        The text leading up to this was:
    
        --------------------------
    
        |*** ./src/msql/net.c.orig        Tue Oct 17 11:24:03 1995
    
        |--- ./src/msql/net.c     Tue Dec 12 15:24:11 1995
    
        --------------------------
    
        Patching file ./src/msql/net.c using Plan A...
    
        Hunk #1 succeeded at 66.
    
        Hunk #2 succeeded at 84.
    
        done
    
    
    If you have problems applying the patch, you may wish to consider using some or all of the following arguments to patch:

  4. Recompile mSQL. If you have third party applications that use the mSQL library, you'll probably have to recompile them as well.

Is online documentation available?

A set of WWW pages for mSQL, W3-mSQL, ESL and Minerva are now available from


    http://Hughes.com.au

Jeff Rowe <beowulf@cscsun4.larc.nasa.gov> has converted the mSQL documentation to HTML format. It is available from:


    http://cscsun1.larc.nasa.gov/~beowulf/msql/msql.html

Tim Finin <finin@umbc.edu> has created an online mSQL tutorial. It is available from:


    http://www.cs.umbc.edu/~finin/461/msql

Mike Carpenter <mikec@emi.net> has begun to collate the available mSQL documentation into a single site. He hopes to have a wide range of resources available for value added mSQL products such as the Perl and Java interfaces. His work can be found at:


    http://www.emi.net/~mikec/tech/msql.html


Is there a mailing list for mSQL?

Yes.

To subscribe to the list, send the word "subscribe" in the body of your message to msql-list-request@bunyip.com.

To unsubscribe from the list send the word "unsubscribe" in the body of your message to msql-list-request@bunyip.com.

Postings should be addressed to msql-list@bunyip.com.

Archives of the mailing list are available via anonymous ftp from:


    ftp://ftp.bunyip.com/pub/mailing-lists/msql-list.archive/

Each month's archive is stored in a file:


    msql-list.archive.YYMM

where YYMM represents the year and month. So the archive for October 1995 would be in the file:


    msql-list.archive.9510

These files are also available from the majordomo mailing list server at bunyip.com. To receive a list of the archive files available as well as the majordomo help file send a message to majordomo@bunyip.com with the text:


    index msql-list

    help

    END

in the body of the message.

To reach a human for help regarding the mailing list send a note to:


    owner-msql-list@bunyip.com

or

    listmaster@bunyip.com

The mailing list discusses issues that arise from the use of mSQL and W3-mSQL (both products developed by David Hughes). Often discussions on contributed software arise but it is probably best to take these discussions off line and summarise solutions back to the list.

Traffic on the list is fairly high. There were approximately 1100 postings between April 1 1996 and May 31 1996 which gives an average of around 550 messages per month. (If you think this is high, try subscribing to the firewalls list - this has an average of around 1000 postings per month!)

Turn around times for postings can sometimes be a little slow. It is not unusual for messages sent from Australia to take a few hours to appear on the list. List subscribers from other countries have also reported similar turn around times. Please be patient.


Is there a mailing list digest for mSQL?

Yes. To subscribe to the list digest, send the words "subscribe msql-list-digest" in the body of your message to majordomo@bunyip.com.

To unsubscribe from the list digest send the words "unsubscribe msql-list-digest" in the body of your message to majordomo@bunyip.com.


Are there any HTML archives of the mSQL mailing list?

A number of sites have set up a web based archive of the mSQL mailing list (among others). Their locations and features are summarised below:

Archive Location Features
http://www.tryc.on.ca/msql.html
(Thanks to Wojciech Tryc <wojtek@tryc.on.ca>).
Threaded archives, monthly breakdown, recent archives, search facilities.
http://tacyon.spectrum.com.au/mail/msql
(Thanks to Matt Perkins <matt@spectrum.com.au>).
Threaded archive, list archive, old list archives.
http://cure.medinfo.org/lists/programming/index.html
(Thanks to the folks at Medinfo http://cure.medinfo.org).
Threaded archive, browse current month, search list archive.
http://www.nexial.nl/cgi-bin/msql
(Thanks to Kim Hendrikse <kim@nexial.nl>).
Fuzzy searchable archive.


Is there a news group for mSQL?

No.

This question comes up about every three months or so - usually from new subscribers to the mSQL mailing list who haven't seen the previous threads.

There seem to be two distinct groups of people involved in this discussion:

  1. Those who prefer the mailing list.

  2. Those who would prefer a news group.

While opinion is divided among these camps, the dominant force at present is for the mailing list to continue without the establishment of a global newsgroup. However, this does not preclude you from setting up a local news/mail gateway such that incoming mail items are sent to a local newsgroup at your site and outgoing news postings are sent to the mailing list. Consult your nntp documentation for more details.

Nor does it preclude you from establishing a global news group. There are well defined channels established within the Usenet community for the creation of new news groups.

One publicly available mail/news gateway is available via anonymous ftp from:


    ftp://ftp.vix.com/pub/inn/contrib/newsgate.tar.Z

    (443025 bytes)

It includes the programs mail2news and news2mail.


How do I post a question to the mSQL mailing list?

Before you post a question to the mSQL mailing list, read the manual that came with the mSQL distribution as well as the rest of this FAQ. Also, ask yourself the following question:


    Is there any way I can find the answer to this question myself?

If you can figure out a way to simply find the answer, then it will probably be quicker than asking the list. If you think your answer would be helpful to others then post a summary to the mailing list.

Postings should be addressed to msql-list@bunyip.com.

IF YOU POST A QUESTION TO THE LIST ASKING FOR HELP, YOU MUST INCLUDE THE FOLLOWING INFORMATION!

  1. The operating system you are using - for example Solaris 2.4 or Linux 1.3.1. On Unix like systems, this can usually be obtained by running the command:

    
        uname -a
    
    
  2. The processor type - for example sparc, Intel 386, HP PA-RISC, mc68020. Often the same operating system may run on different processors.

  3. The output of the command:

    
        msqladmin version
    
    
  4. Which, if any, unofficial patches you have applied to the version of mSQL you're using.

  5. The name and version details of any third party application you are using with mSQL.
Failure to include these details makes it almost impossible to pinpoint the cause of your problem.


I've found a bug. How can I tell if it's been fixed yet?

The status of the development is reflected in the HISTORY file. An on-line copy of the HISTORY file is kept on the Hughes Technology web pages. This file is updated as each modification is made to the sources. Any bugs that have been fixed in the code since it was last release will be mentioned in the on-line release history information. You can access this file on the web as:


    http://Hughes.com.au/product/msql/history.htm

    

How do I report a bug in mSQL?

The first thing to remember is that you should NOT mail David Hughes (aka Bambi) directly with your questions - this just makes the process slower. Any questions you have should be sent to the mSQL mailing list.

If you want to report a bug, send a report to the mSQL bug reporting address at msql-bugs@hughes.com.au. You may also wish to copy your report to the mSQL mailing list at msql-list@bunyip.com.

When making your bug report, please include the following information:

You should also ensure that you are running the latest (stable) version of mSQL before posting a bug report as David fixes bugs in every version.


How do I contribute a patch to mSQL?

Following this procedure will standardise the manner in which unofficial mSQL patches are distributed to the mSQL user community.

  1. Ensure that you are patching the latest version of mSQL.

  2. Ensure that you have applied any necessary unofficial recommended patches to the latest version.

  3. Make your changes to the "src" hierarchy of mSQL. For example, if you need to patch the file:

    
        msqld.c
    
    
    Save the original file as follows:

    
        cp ./src/msql/msqld.c ./src/msql/msqld.c.orig
    
    
    Make your changes to the file:

    
        ./src/msql/msqld.c
    
    
  4. Test, double test and triple test your patch to make sure it REALLY fixes a problem.

  5. Generate a difference listing suitable for use by Larry Wall's patch program:
    
        diff -c ./src/msql/msqld.c.orig ./src/msql/msqld.c
    
    
  6. Post this difference listing and an explanation of the patch to the mSQL mailing list.
If at all possible, try to avoid posting 'monster' patches. If your patch modifies a number of separate aspects of mSQL, split each of these into different patches. This makes it easier for people to apply feature specific patches to mSQL while avoiding unwanted feature patches.


How do I contribute code to the mSQL community?

Contributed code can be uploaded to the ftp server at Bond University Australia. Place your code in the directory:


    ftp://bond.edu.au/pub/Minerva/msql/Incoming

then notify David at <bambi@hughes.com.au>. He will move your contribution to the mSQL contributions directory:


    ftp://bond.edu.au/pub/Minerva/msql/Contrib

Note: The directory permissions for ftp://bond.edu.au/pub/Minerva/msql/Incoming prohibit the viewing of any files contained therein. This is a security feature implemented by the system administration staff at Bond University to eliminate recent attempts to use the ftp server as a relay for the unauthorised transfer of commercial software. If you upload any software to this directory, you must notify <bambi@hughes.com.au> to have it moved to ftp://bond.edu.au/pub/Minerva/msql/Contrib.

You may like to discuss your proposed code with others on the mSQL mailing list. The subscribers to this list may be able to help you with improvements or modifications to your code or advise you of work already available in your area.


Where can I find examples of code that interface with mSQL?

If you're writing code in the C programming language, examine the mSQL distribution itself. All the auxiliary programs use the mSQL API in a variety of ways. Pay particular attention to:

If you're writing code in other languages, have a look through the distribution of the mSQL language extension itself for examples. Another good place to look is the mSQL mailing list archives.


Are there any non Unix ports of mSQL?

Both mSQL version 1.x and 2.x have been ported to a few other operating systems - namely MS Windows, MS Windows 95, MS Windows NT and OS/2. For more details on these ports and any other ports, please see the "Contributed Code and Third Party Applications" section of this FAQ.



Features and Limitations

What support programs are bundled with mSQL?

mSQL is bundled with the following programs:

Support Programs bundled with mSQL version 1.x
msqld the mSQL database server.
msqladmin handles administrative details such as creation and deletion of databases, server shutdown etc.
msql the mSQL monitor. It provides a user interface for making SQL queries on databases.
msqldump Dumps a database in ASCII format. The dump takes the form of SQL commands so that the entire database can be re-created from the dump file.
relshow The mSQL schema viewer. Shows table details for a given database.

Support Programs bundled with mSQL version 2.x
msql2d the mSQL database server.
msqladmin handles administrative details such as creation and deletion of databases, server shutdown etc.
msql the mSQL monitor. It provides a user interface for making SQL queries on databases.
msqldump Dumps a database in ASCII format. The dump takes the form of SQL commands so that the entire database can be re-created from the dump file.
msqlexport Dumps a database in ASCII format. The dump takes the form of user defined character delimited fields suitable for importing into other vendor's databases.
msqlimport Loads a flat file in ASCII format into an mSQL database.
relshow The mSQL schema viewer. Shows table details for a given database.
w3-msql CGI program that allows users to embed mSQL statements in their HTML documents.
w3-auth Access control and authentication module for use with w3-msql
lite A stand alone mSQL scripting language.

For more details on these programs see the documentation that comes with mSQL.


What SQL commands are supported?

mSQL version 1.x supports the following SQL commands:

mSQL version 1.x

CREATE TABLE table_name (

    col_name col_type [ not null | primary key ]

    [, col_name col_type [ not null | primary key ] ]**

)


DROP TABLE table_name


INSERT INTO table_name [ ( column [ , column ]** ) ]

    VALUES (value [, value]** )


DELETE FROM table_name

    WHERE column OPERATOR value

    [ AND | OR column OPERATOR value ]**

 

	OPERATOR can be <, >, =, <=, >=, <>, or LIKE


SELECT [ DISTINCT ] [table.]column [ , [table.]column ]**

    FROM table [ = alias] [ , table [ = alias] ]**

    [ WHERE [table.]column OPERATOR VALUE

	[ AND | OR [table.]column OPERATOR VALUE]** ]

    [ ORDER BY [table.]column [DESC] [, [table.]column [DESC] ] [LIMIT n]

 

	OPERATOR can be <, >, =, <=, >=, <>, or LIKE

	VALUE can be a literal value or a column name


UPDATE table_name SET column=value [ , column=value ]**

    WHERE column OPERATOR value

    [ AND | OR column OPERATOR value ]**

 

	OPERATOR can be <, >, =, <=, >=, <>, or LIKE

For more details see the documentation that comes with mSQL version 1.x.

mSQL version 2.x supports the following SQL commands:

mSQL version 2.x

CREATE TABLE table_name (

    col_name col_type [ not null ]

    [, col_name col_type [ not null ] ]**

)


CREATE [ UNIQUE ] INDEX index_name ON table_name  (

    col_name [, col_name ]**

)


CREATE SEQUENCE ON table_name

    [ STEP step_val ] [ VALUE initial_val ]


DROP TABLE table_name


DROP INDEX index_name FROM table_name


DROP SEQUENCE FROM table_name


INSERT INTO table_name [ ( column [ , column ]** ) ]

    VALUES (value [, value]** )


DELETE FROM table_name

    WHERE column OPERATOR value

    [ AND | OR column OPERATOR value ]**

 

	OPERATOR can be <, >, =, <=, >=, <>, LIKE, RLIKE or CLIKE


SELECT [ DISTINCT ] [table.]column [ , [table.]column ]**

    FROM table [ = alias] [ , table [ = alias] ]**

    [ WHERE [table.]column OPERATOR VALUE

	[ AND | OR [table.]column OPERATOR VALUE]** ]

    [ ORDER BY [table.]column [DESC] [, [table.]column [DESC] ] [LIMIT n]

 

	OPERATOR can be <, >, =, <=, >=, <>, LIKE, RLIKE or CLIKE

	VALUE can be a literal value or a column name

	WHERE clauses may contain parentheses () to nest conditions


UPDATE table_name SET column=value [ , column=value ]**

    WHERE column OPERATOR value

    [ AND | OR column OPERATOR value ]**

 

	OPERATOR can be <, >, =, <=, >=, <>, LIKE, RLIKE or CLIKE

For more details see the documentation that comes with mSQL version 2.x.


Does mSQL support keys?

Yes.

Under mSQL version 1.x any single field of a table can be designated as the PRIMARY KEY. These keys are, by definition, unique. mSQL version 1.x does not support multiple keys within a table.

The creation of a PRIMARY KEY is made during the table declaration, for example:


    CREATE TABLE employee (

	employee_number		INT PRIMARY KEY,

	department		CHAR(20),

	first_name		CHAR(20) NON NULL,

	last_name		CHAR(20) NON NULL

    )

 

    CREATE TABLE department (

	department_name		CHAR(20) PRIMARY KEY

    )

For more details see the documentation that comes with mSQL version 1.x.

mSQL version 2.x has disposed of the PRIMARY KEY in favour of an indexing mechanism.

An INDEX may be created for any field of a table at any time, for example:


    CREATE UNIQUE INDEX idx1 ON employee(employee_number)

    CREATE INDEX idx2 ON employee(first_name, last_name)

This examples shows that the first INDEX, idx1, is unique. This is identical to the PRIMARY KEY concept used by mSQL version 1.x. The second INDEX, idx2, need not be unique. idx2 also spans two fields within a table which will improve performance whenever a search is made based on these two fields.

These indices will be used automatically whenever a query is sent to the database engine that uses those fields in its WHERE clause. The user is not required to specify any special values in the query to ensure the indices are used to increase performance.


What datatypes are supported?

mSQL version 1.x supports the following datatypes:


    int		(4 bytes)	-2147483646 <= i <= 2147483647

    real	(8 bytes)	4.94E-324 <= x <= 1.79E+308, -1.79E+308 <= x <= -4.94E-324

    char

The internal storage for types int and real is held at 4 bytes and 8 bytes respectively, regardless of the system architecture you're using. So even on 64 bit Crays a real will be 8 bytes.

There is NO fixed limit on the size of a character field. Provided you declare it correctly when the table is defined, mSQL will handle fields of at least several thousand characters without problems. You may run into difficulty actually using fields of this size in whatever language you choose to interface to the mSQL database engine.

Note: If you declare a char field with a large size, each and every row in the table will allocate sufficient storage space for the char field - whether the full size of the field is used or not. This may lead to very large database tables indeed.

An example of each mSQL version 1.x datatype within a table declaration follows:


    CREATE TABLE table_name (

	    field_name_1	INT PRIMARY KEY,

	    field_name_2	REAL,

	    field_name_3	CHAR(10) NOT NULL,

	    field_name_4	CHAR(80),

	    field_name_5	INT	NOT NULL,

	    field_name_6	REAL

	)

For more details see the documentation that comes with mSQL version 1.x.

mSQL version 2.x supports the following datatypes:


    int		(4 bytes)	-2147483646 <= i <= 2147483647

    uint	(4 bytes)	0 <= i <= 4294967295

    real	(8 bytes)	4.94E-324 <= x <= 1.79E+308, -1.79E+308 <= x <= -4.94E-324

    char

    text

    date

    time

    money

The internal storage for types int/uint and real is held at 4 bytes and 8 bytes respectively, regardless of the system architecture you're using. So even on 64 bit Crays a real will be 8 bytes.

There is NO fixed limit on the size of a character field. Provided you declare it correctly when the table is defined, mSQL will handle fields of at least several thousand characters without problems. You may run into difficulty actually using fields of this size in whatever language you choose to interface to the mSQL database engine.

Note: If you declare a char field with a large size, each and every row in the table will allocate sufficient storage space for the char field - whether the full size of the field is used or not. This may lead to very large database tables indeed.

text (or other 8 bit data) fields are defined with an expected average length. Values longer than the specified length will be split between the data table and external overflow buffers. text fields are slower to access than char fields and cannot be used in an index or in LIKE tests.

An example of each mSQL version 2.x datatype within a table declaration follows:


    CREATE TABLE table_name (

	    field_name_1		INT,

	    field_name_2		REAL,

	    field_name_3		CHAR(10)	NOT NULL,

	    field_name_4		CHAR(80),

	    field_name_5		INT		NOT NULL,

	    field_name_6		REAL,

	    field_name_7		TEXT(25),

	    field_name_8		DATE,

	    field_name_9		UINT,

	    field_name_10		TIME,

	    field_name_11		MONEY

	)

Note: The storage of real numbers is highly machine dependent. If you store the number 10.03 don't be surprised if it is actually stored as either 10.03 or 10.03000000001 or 10.02999999999.

Note: The upper and lower limits for real numbers are also highly machine dependent. Both mSQL version 1.x and 2.x obtain these values from the system include file:


    /usr/include/limits.h

If you plan on storing very big numbers (positive or negative numbers with exponents approaching 308) or very small numbers (positive or negative numbers with exponents approaching -324) you MUST check whether your operating system will support them.

Note: When dealing with real numbers it might be advisable to either convert the real number to an integer if possible. For example if you are dealing with decimal currency, it may be preferable to work in units of cents rather than dollars - note that mSQL 2.x now has a MONEY type which handles this concept - or to perform some sort of delta check when retrieving values. The following logic demonstrates one possible application of this concept:


    delta = 0.00001

    select a real number from a table

 

    if abs(number - expected value) < delta

    then

	proceed

    else

	fail


What functions does the mSQL API provide?

The mSQL API provides the following functions and macros:

mSQL version 1.x
Return Type Prototype Type
int msqlConnect(char *host); FUNCTION
int msqlSelectDB(int sock, char *dbname); FUNCTION
int msqlQuery(int sock, char *query); FUNCTION
m_result * msqlStoreResult(); FUNCTION
void msqlFreeResult(m_result *result); FUNCTION
m_row msqlFetchRow(m_result *result); FUNCTION
void msqlDataSeek(m_result *result, int pos); FUNCTION
int msqlNumRows(m_result *result); MACRO
m_field * msqlFetchField(m_result *result); FUNCTION
void msqlFieldSeek(m_result *result, int pos); FUNCTION
int msqlNumFields(m_result *result); MACRO
m_result * msqlListDBs(int sock); FUNCTION
m_result * msqlListTables(int sock); FUNCTION
m_result * msqlListFields(int sock, char *tableName); FUNCTION
void msqlClose(int sock); FUNCTION

For more details see the documentation that comes with mSQL version 1.x.

Note: The PostScript documentation that comes with mSQL version 1.x lists the function msqlClose() as type int. This is incorrect. It is actually type void.

mSQL version 2.x
Return Type Prototype Type
int msqlConnect(char *host); FUNCTION
int msqlSelectDB(int sock, char *dbname); FUNCTION
int msqlQuery(int sock, char *query); FUNCTION
m_result * msqlStoreResult(); FUNCTION
void msqlFreeResult(m_result *result); FUNCTION
m_row msqlFetchRow(m_result *result); FUNCTION
void msqlDataSeek(m_result *result, int pos); FUNCTION
int msqlNumRows(m_result *result); MACRO
m_field * msqlFetchField(m_result *result); FUNCTION
void msqlFieldSeek(m_result *result, int pos); FUNCTION
int msqlNumFields(m_result *result); MACRO
m_seq * msqlGetSequenceInfo(int sock, char *table); FUNCTION
m_result * msqlListDBs(int sock); FUNCTION
m_result * msqlListTables(int sock); FUNCTION
m_result * msqlListFields(int sock, char *tableName); FUNCTION
m_result * msqlListIndex(int sock, char *tableName, char *index); FUNCTION
void msqlClose(int sock); FUNCTION
char msqlUnixTimeToDate(char *date); FUNCTION
char msqlUnixTimeToTime(char *date); FUNCTION
time_t msqlDateToUnixTime(char *date); FUNCTION
time_t msqlTimeToUnixTime(char *date); FUNCTION

For more details see the documentation that comes with mSQL version 2.x.

Note: The HTML documentation that comes with mSQL version 2.x lists the function msqlClose() as type int. This is incorrect. It is actually type void.


Are views or virtual tables supported?

No.

This feature may be included in mSQL version 2.


Does mSQL support table aliasing?

Yes.

As an example, consider this method to find the list of grandparents from a child/parent tuple:


    SELECT t1.parent, t2.child from parent_data=t1,parent_data=t2

	WHERE t1.child=t2.parent

mSQL also supports the SQL standard method of table aliasing which uses either a space character or the keyword AS instead of an = character. So the above example can also be written as either:


    SELECT t1.parent, t2.child from parent_data t1,parent_data t2

	WHERE t1.child=t2.parent

or

    SELECT t1.parent, t2.child from parent_data AS t1,parent_data AS t2

	WHERE t1.child=t2.parent


Are column constraints supported?

No.


Are stored procedures supported?

No - that's getting beyond the scope of Mini SQL (see Oracle :)


Are access privileges supported?

Yes.

mSQL has an access control file which allows the database administrator to control access on a user and host level.

For more details see the documentation that comes with mSQL.

mSQL does not support access control from within SQL commands.


Does mSQL support BLOBs?

BLOBs are Binary Large OBjects. Typical examples would be large blocks of text, graphics or audio data.

The current release of mSQL has NO direct support for BLOBs. However, you can always store the path name of a file that points to the BLOB in one of the fields of your table. Then your application can deal with the file name appropriately.

If you're dealing with large blocks of text, you may also wish to consider this approach from Pascal Forget <pascal@wsc.com>:


    Another possible hack would be to have the "block_text"

    record contain a pointer to a "text_lines" table. This

    table would contain a linked list of text lines like this:

 

	CREATE TABLE text_lines (

	    line_id	int primary key,

	    string	char(80),

	    next_line	int

	)

Mike Eggleston <mikee@sys8.wfc.com> offers this solution:


    What I prefer to do in databases where I have text fields containing

    near infinite amounts of text is to define several tables like:

 

	create table prog (

	  id int,

	  name char(40),

	  programmer char(40),

	  ....

	)\p\g

 

	create table descript (

	  id int,

	  line int,

	  descript char(100)

	)\p\g

 

    Then in a program I break up the text as necessary and put one line

    of text in each record of <descript>. When I want it back, by

    program, I [use]

 

	select line, descript from prog, descript

	    where prog.id = descript.id

	    and name = 'foobar' order by line\p\g

Later versions of mSQL may have support for BLOBs.


Are the transaction commands, BEGIN, COMMIT, and ROLLBACK supported?

No, and they will probably never be supported (once again that's beyond the scope of mSQL).

The mSQL server handles requests serially - that is only one user's request is handled at a time. Therefore there is no danger of a user reading from a table that is currently being updated by another user.

However, there is the possibility that the same read operations may straddle another user's write operation so that different data will be returned from each read.

mSQL version 2 will provide client initiated locking.


What are the limits on table and field names?

A table or field name MUST begin with an alphabetic character. The remainder of the name may be any of the following 63 characters:

The maximum name length is set to 20 characters. That's for a table or a field in a table. This allows for 813621925049196536663393538834956800 possible naming combinations using the characters listed above. For the mathematically inclined that's:


	   19

	 -----

	 \

	  \        i

   52 *   /      63   =   813621925049196536663393538834956800

	 /

	 -----

	 i = 0

Though in practise, many of these combinations will probably remain unused.

While not recommended, the default maximum name length value of 20 can be changed by editing the mSQL source code. However, if you change it AFTER you have already created ANY databases, the old databases will be unreadable. To avoid this problem, follow this procedure:

  1. Dump your old databases to ASCII files using msqldump.

  2. Drop your old databases using msqladmin.

  3. Shutdown the mSQL database server msqld using msqladmin.

  4. Edit the mSQL source and modify
    
        ./src/msql/msql_priv.h
    
    
    Change the line reading

    
        #define NAME_LEN	19		/* Field/table name length */
    
    
    to suit your needs. Ensure that you use a number that is one less than the maximum value you desire. For example, if you wish to have a name length of 36 you would change the line to read:

    
        #define NAME_LEN	35		/* Field/table name length */
    
    
  5. Recompile and install the modified mSQL.

  6. Start the new mSQL database server msqld.

  7. Create new databases using msqladmin.

  8. Repopulate your databases using msql and the ASCII dumps from step 1.

What other limits can be modified?

The file


    ./src/msql/msql_priv.h

contains the definitions of the internal mSQL limits:


    #define MAX_FIELDS	75		/* Max fields per query */

    #define MAX_CON	24		/* Max connections */

    #define BUF_SIZE	(256*1024)	/* Read buf size if no mmap() */

    #define NAME_LEN	19		/* Field/table name length */

    #define PKT_LEN	(32*1024)	/* Max size of client/server packet */

    #define CACHE_SIZE	8		/* Size of table cache */

If you want to increase them you can just edit this file and recompile. Don't change MAX_CON or CACHE_SIZE without understanding why these limits are set (maximum file descriptors per process etc).

Changing any of these parameters will almost certainly make any existing databases unreadable. To avoid this problem, follow this procedure:

  1. Dump your old databases to ASCII files using msqldump.

  2. Drop your old databases using msqladmin.

  3. Shutdown the mSQL database server msqld using msqladmin.

  4. Edit the mSQL source and modify
    
        ./src/msql/msql_priv.h
    
    
    changing the definitions to suit your needs.

  5. Recompile and install the modified mSQL.

  6. Start the new mSQL database server msqld.

  7. Create new databases using msqladmin.

  8. Repopulate your databases using msql and the ASCII dumps from step 1.

How much data can mSQL address?

mSQL can theoretically address tables with a maximum size of 4 gigabytes. In practise you'll probably run up against operating system limitations well before this theoretical limit.


Are there any limitations in the way mSQL handles logical expressions?

mSQL version 1.x has a very simplistic approach to logical expressions.

Consider the SQL query:


    SELECT something from somewhere WHERE

	name='jan' or country='italy' and sex='female' or title='ms'

Under mSQL version 1.x, the parser will scan the condition from left to right. So in this example the condition reads:


    ((name='jan' or country='italy') and sex='female') or title='ms'

mSQL version 1.x does NOT support parentheses in logical expressions, so there is NO way to change this parsing.

Ted Harding <Ted.Harding@nessie.mcc.ac.uk> provides some solutions for three component queries.

Ted writes:


    Let's get something clear: ALL 3-component (or equivalent) queries

    can be implemented in mSQL (without parentheses and using the mSQL

    left-to-right evaluation). There are only the following:

 

	    (A and B) and C  =  A and (B and C)  =  A and B and C

	    (A or B) or C    =  A or (B or C)    =  A or B or C

	    (A and B) or C   =  A and B or C

	    A and (B or C)   =  (B or C) and A   =  B or C and A

	    (A or B) and C   =  A or B and C

	    A or (B and C)   =  (B and C) or A   =  B and C or A

 

    Queries like A and B and C and (E or F) are the same as (A and B

    and C) and (E or F) which is the same form as G and (E or F).

 

    The trouble starts with 4-component queries such as (A or B) and (C

    or D) for which there is no one-pass generally correct mSQL

    representation.

mSQL version 2.x allows parentheses within logical expressions so this limitation is eliminated.


How does mSQL return values?

mSQL returns all values as ASCII strings. If, for example, you are expecting an integer result you may have to do some internal conversions depending on the language you're using.

In C, for example, see the manual pages on atoi().


How does SELECT return rows?

On Tue, 4 Jul 1995, Karri-Pekka Laakso wrote:


    Does SELECT return the rows always in order 'first inserted first',

    if there is no ORDER statement given, and the rows are selected

    from one table only, and there has been no DELETEs on that table?

    It seems be so, but is it guaranteed?

David Hughes replied:


    This is guaranteed. The only time the rows will be returned in

    another order is if you have deleted a row and it's then filled by

    a later insert.


Can mSQL nest tables?

On Tue, 25 Jul 1995, Jerome Stoller wrote:


    I am new at mSQL, and have a beginner question: Is it possible to

    create a table "normally", and to have the fields of one

    of the column being[sic] another table?

David Hughes replied:


    You can't nest tables in mSQL (don't think you can in ANSI SQL

    either). What you can do is to use a common value as a key to join

    the contents of two tables (eg. a part number or a user ID).


What storage overheads does mSQL have?

mSQL stores each database in its own directory under the 'msqldb' directory of wherever you specified mSQL should be installed. For example if you specified that mSQL should be installed in:


    /usr/local/Minerva/

then the databases will be created in the directory:


    /usr/local/Minerva/msqldb/

Note that this can be overridden by specifying the MSQL_HOME environment variable when starting msqld.

Each table in the database is stored as a number of files:

Therefore to calculate the storage requirements for a table, use one of the following formulae:

Tables with a primary key:

    table_storage_requirements

	=  expected_max_rows *

	    (

		number_of_fields + 1 + total_chars +

		(4 * total_ints) + (8 * total_reals) +

		(size_of_key + 1) +

		(4 * expected_deletion_ratio)

	    ) +

	(total_fields * 64)

Tables without a primary key:

    table_storage_requirements

	=  expected_max_rows *

	    (

		number_of_fields + 1 + total_chars +

		(4 * total_ints) + (8 * total_reals) +

		(4 * expected_deletion_ratio)

	    ) +

	(total_fields * 64)

Using the keyed table above, if we expect it to contain a maximum of 10000 rows and we expect to have a 10 percent deletion ratio (that is at any one time we expect that 10 percent of our rows have been deleted but not replaced by new rows), we should allow for:


    10000 *

	(

	    7 + 1 + 13 +

	    (4 * 2) + (8 * 4) +

	    (13 + 1) +

	    (4 * 0.10)

	) +

    (7 * 64)

 

	=  10000 * ( 21 + 8 + 32 + 14 + 0.4) + 448

	=  754448 bytes

plus a handful of bytes to store file names in directories.

Note that this is the maximum storage allocation. Unlike some other database systems, mSQL only uses disk space when it has data to add to a table - it does NOT allocate a large block of empty disk space and then proceed to fill it. If our example only had 1000 rows the storage requirements would only be 75848 bytes.


Does msqld allocate more RAM to itself as new databases are added?

On Fri, 11 Aug 1995, Andrew Waegel wrote:


    does msqld allocate more ram to itself as new db's are added? i.e.

    is any part of the database held in ram or does it just access the

    database files directly from disc? I need to do some planning, and

    want to know if I need to plan to get more simms...

David Hughes replies:


    If your OS supports mmap() (e.g. Solaris, SunOS, *BSD, BSDI, Linux

    1.3.x, HP-UX >9.x) then the more memory you throw at it the

    better things will get if you are using big databases. The data is

    left on disk but is accessed via the virtual memory subsystem so it

    will be in memory some of the time.

 

    If you are not using mmap() then data is just read from disk as it

    is needed. There's a small buffer in the read code to make things

    faster but that's about it. It doesn't matter how many databases

    you have defined it only uses 1 buffer.


Does performance degrade as the number of databases increase?

On Fri, 11 Aug 1995, Andrew Waegel wrote:

    Does performance degrade at all as the number of databases

    increases? That is, say a query from database A took n seconds when

    database A was the only one served by msqld. After adding databases

    B, C, D and E, should the database A query take any longer? It

    seems like 'no' from my experience, but...

David Hughes replies:


    No. It will degrade if people are hitting the new databases at the

    same time as they are hitting database A though. msqld only handles

    1 query at a time so if 2 queries come in they are queued and

    processed in order.


Does mSQL support cursors?

Pascal Forget replies to a posting by Brian Bartholomew:

    > To browse the database, I want mSQL to return me the first row

    > in the database, and keep a pointer to it. Then sometime later

    > I can ask it for the second row, and so on.

 

    mSQL does not provide support for cursors.

 

    You'll have to issue a SELECT query each time you want the next

    row. mSQL has no provisions for modifying a result set once it has

    been created. I suggest you add a field containing a unique

    identifier for each row, then fetch the next row using:

 

	SELECT ... FROM mytable where unique_field > last_id LIMIT 1

 

    > How do I express this in sql?

 

    If you find a way to express it, it most certainly won't be in

    standard SQL, as the language has no support for cursors.

 

    > I see that I could add an explicit field that was an arbitrary

    > row number, and query for the current row number +/- 1, but over

    > time with insertions and deletions there would be gaps and the

    > query would break. How is this problem usually solved?

 

    The select statement I gave you won't break even if there are gaps

    in the unique identifiers. You can periodically "compact" the

    numbers if you want.


Does mSQL support different character sets?

Patrik Faltstrom writes:


    Yes, as long as the client that fetches the characters knows what

    character set you are using. I.e. there is no support in mSQL for

    keeping track of the character set name, but mSQL is 8bit clean so

    you can store 8bit characters (in whatever character set).

 

    In Digger, the Whois++ server, we store UNICODE characters by

    encoding them first into UTF-8 which is an 8bit encoding scheme

    described in UNICODE 1.1.

Neil Bowers <neilb@cre.canon.co.uk> has written a paper on "Processing Japanese Text with mSQL and Perl". It is available from:


    http://www.cre.canon.co.uk/~neilb/jmSQL.html


Why doesn't mSQL work when installed in disk space served by the Andrew File System (AFS)?

Jon Leech <leech@cs.unc.edu> writes:


    AFS does not support some Unix file system behaviour that's needed

    by mSQL. You cannot create Unix domain sockets in AFS space, and

    mmap() does not work on at least some client-server combinations,

    if not all.

 

    You should install mSQL and its databases in NFS or local Unix

    filesystems.

Other users have also reported problems when running mSQL from NFS mounted partitions. To be absolutely safe you should only run msqld from the same machine on which the physical disks containing the mSQL databases are attached.



Installation Problems

Under IRIX (SGI) I get problems relating to my username

Colin Surprenant reports:


    The solution to the problem with using the socket and then nsl

    libraries with NIS in IRIX 5.2 is:

 

    1. Do not link them if they are not needed :) This is the case for

       mSQL.

 

    or

 

    2. link libc BEFORE the socket and the nsl libraries.

 

    For those who didn't know, the problem is that if you use NIS and

    link socket or nsl, the getpwuid() function doesn't work.

To ensure that the unnecessary libraries are avoided, edit targets/your-architecture/site.mm and change the line

    EXTRA_LIB=  -lsocket -lnsl -lgen -ldl

so that it reads:


    EXTRA_LIB=


On OSF/1 or HP-UX I have trouble starting msqld at boot time

David-Michael Lincke reports:


    Looks like the same thing that happens under HP-UX with background

    processes in rc scripts. They are killed off on exit of the ksh

    functions.

 

    Create yourself a wrapper for msqld. In there you do a fork and

    exit the parent process in the child process you do a call to

    setsid() to get rid of the controlling terminal followed by a call

    to execl() to launch msqld. You might also want to close all open

    file descriptors before calling exec.

An alternative to this approach is to place the following in /etc/inittab

    msql:3:respawn:/usr/local/Minerva/bin/msqld </dev/console >/dev/console 2>&1

This assumes that your mSQL super user is "root".

The next version of the FAQ will attempt to address this issue in detail.


Should I use cc or gcc when building mSQL on my Dec Alpha running OSF/1?

Rick Beebe writes:


    DEC Alphas running OSF/1 (Digital Unix): The original mSQL docs

    recommended using cc rather than gcc on this platform. In my

    experience this is still good advice. If you have gcc on the

    machine, however, autoconf will find it and default to it. After

    running 'setup' edit site.mm and change 'gcc' to 'cc' and

    'bison -y' to yacc.


Does mSQL work with Linux mmap()?

Version 1.3 or greater of the Linux operating system has full mmap() support. If you're using such a version of Linux, mSQL will work perfectly well using mmap().

If you have an earlier version of Linux you can either upgrade or ensure that mmap() support in mSQL is disabled by running the 'setup' program and then editing


    ./targets/your-architecture/site.mm

and ensuring the mmap() directive reads:


    MMAP=

and then recompile the mSQL package.


Does mSQL work with HP-UX?

Arley Carter (via David Hughes) writes:


    I just built msql-1.0.10 on hpux 9.05. It appears that you have

    slain the mmap bug. Good job. The