.ig >>
<STYLE TYPE="text/css">
<!--
        A:link{text-decoration:none}
        A:visited{text-decoration:none}
        A:active{text-decoration:none}
        OL,UL,P,BODY,TD,TR,TH,FORM { font-family: arial,helvetica,sans-serif;; font-size:small; color: #333333; }

        H1 { font-size: x-large; font-family: arial,helvetica,sans-serif; }
        H2 { font-size: large; font-family: arial,helvetica,sans-serif; }
        H3 { font-size: medium; font-family: arial,helvetica,sans-serif; }
        H4 { font-size: small; font-family: arial,helvetica,sans-serif; }
-->
</STYLE>
<title>shsql: specs & limitations</title>
<body bgcolor=99cc99 vlink=0000FF>
<br>
<br>
<center>
<table cellpadding=2 bgcolor=FFFFFF width=550 ><tr>
<td align=right><a href="shsql_home.html">
<img src="img/shsql.gif" border=0><br><small>SQL database system</a> &nbsp; </td></tr>
<td>
.>>

.TH specs & limitations TDH "28-APR-2004   TDH scg@jax.org" 

.SH SHSQL specs and limitations at-a-glance


.ig >>
<table width=550 cellpadding=5 cellspacing=2 border=1 bgcolor=FFFFEC>

<tr><td>Home page</td><td><a href="http://shsql.sourceforge.net">http://shsql.sourceforge.net</a>
	&nbsp; &nbsp; &nbsp; <a href="shsql_overview.html">Overview</a>
	&nbsp; &nbsp; &nbsp; <a href="http://quisp.sourceforge.net/download/">Download</a></td></tr>

<tr><td>License terms</td><td>GPL</td></tr>

<tr><td>Year of initial release</td> <td>2003</td></tr>

<tr><td>OS</td><td>Solaris, Linux, other unix.</td></tr>

<tr><td>External dependencies</td><td>None.
Distributed as C source code; a C compiler such as <b>gcc</b> is required.  
</td></tr>

<tr><td>Required environment variable</td>
	<td><a href="environment.html">SHSQL_DB</a></td></tr>

<tr><td>Test suite</td>
	<td>A compact test suite is included with the source code; see <tt>./sqlexampledb/testruns</tt>.
	A test suite involving larger tables may be downloaded separately.
	</td></tr>
	
<tr><td>SQL</td><td>Basic core is supported, with some syntax exceptions and extensions,
	most of which are noted in this table or <a href="syntax.html">here</a>.</td></tr>

<tr><td>Data types</td><td>SHSQL is basically "typeless".
	All fields are stored in character form.
	ORDER BY and CREATE INDEX have numeric options.
	</td></tr>

<tr><td>SELECT</td>
	<td><a href="select.html">Standard basic syntax supported</a>.  
	DISTINCT, INTO, GROUP BY, ORDER BY, LIMIT are all supported.
	Limitations: no arithmetic or functions (except aggregation functions
	mentioned below) in the select item list; 
	certain <a href="whereclause.html">where clause limitations</a>;
	compound constructs such as sub-selects not supported.
	Aggregation functions: count(), sum(), avg(), min(), max().
	</td></tr>

<tr><td>JOIN</td>
	<td><a href="join.html">Described here</a>.  
	Two- or three-table joins are supported, with
	these join types available: INNER, LEFT, RIGHT, OUTER.
	Must use ..JOIN..ON.. syntax.
	Extensions for explicitly handling multiple rows having the same key.
	</td></tr>


<tr><td>INSERT & DELETE</td><td><a href="iud.html">Standard basic syntax supported</a>.</td></tr>

<tr><td>UPDATE</td><td><a href="iud.html#update">Standard basic syntax supported</a>, plus a convenience 
extension ORINSERT, which causes UPDATE to add a new record if one doesn't 
already exist.</td></tr>

<tr><td>WHERE clause</td><td><a href="whereclause.html">Described here</a>.
	Supports list operators such as IN and INLIKE
	numeric range operators INRANGE and OUTRANGE,
	and multiword text operator CONTAINS.
	Non-standard syntax for some comparisons.
	Arithmetic expressions, functions, full regexp not supported.
	Fixed presidence (OR over AND) for compound conditionals, and
	parentheses cannot be used to alter this.
	Default wild card character is * (<a href="config.html#dbwildcard">configurable</a>).  
	</td></tr>

<tr><td>CREATE, DROP, ALTER</td>
	<td><a href="create.html">CREATE</a>, 
	<a href="drop.html">DROP</a>, and
	<a href="alter.html">ALTER</a> are supported ; some non-standard syntax.</td></tr>

<tr><td>NULL handling</td><td>
	<a href="null.html">Described here</a>.  
	The symbol used to represent NULL in data files is <a href="config.html#dbnull">configurable</a>.  
	</td></tr>

<tr><td>Temporary tables</td><td><a href="temptables.html">Temp tables</a> may be created using SELECT
	INTO and are generally private to one unix process.  Temporary table names always 
	begin with a dollar sign (<b>$</b>) in <b>shsql</b> queries.</td></tr>

<tr><td>Queries involving large row sets</td>
	<td>Default maximum on the number of rows retrieved/updated is 2000 rows, but
	this figure can be changed via the
	<a href="config.html#dbmaxrows">config file</a>
	or within a query using the MAXROWS keyword.
	</td></tr>


<tr><td>Sequences</td><td><b>shsql</b> includes a facility for automatic allocation of 
	<a href="sequences.html">sequences or serial numbers</a> for use as keys.</td></tr>

<tr><td>Indexing</td><td><a href="indexes.html">ISAM</a>, alphanumeric or numeric ordering.
	Not updated on-the-fly; indexes are rebuilt from time to time.
	Index tags are truncated at 15 chars (<a href="config.html#dbindextrunc">configurable</a>).
	<a href="indexes.html#indextype">Several index types available</a>, including DIRECT and
	WORD indexes with "very common words" omitted.
	</td></tr>

<tr><td>Locking / concurrency control</td><td><a href="tablelocking.html">Table locking</a>
	and <a href="recordlocking.html">record locking</a>.
	</td></tr>

<tr><td>Offline maintenance</td><td>Database writes are blocked to a table during
	<a href="maint.html">routine maintenance</a> (essentially a procedure for cleaning 
	up dead entries and rebuilding indexes).
	Maintenance is typically done at off-peak times via a cron job.
	</td></tr>

<tr><a name=rep></a>
<td>Data representation</td>
	<td>Data are stored as <a href="tables.html#structure">tabular ASCII files</a>.  
	Fields are delimited by a certain ASCII
	character (space by default but this is <a href="config.html#delim">configurable</a>).
	</td></tr>

<tr><td>Logs</td><td>Automatic <a href="logging.html">transaction and error logging</a></td></tr>

<tr><td>Maximum field length</td><td>255 characters</td></tr></tr>

<tr><td>Maximum number of fields in a table</td><td>80 fields</td></tr>

<tr><td>Maximum number of fields in a retrieval result, including join results</td><td>80 fields</td></tr>

<tr><td>Maximum length of any single data row (record)</td><td>3000 characters.</td></tr>

<tr><td>Maximum length of a field name</td>
	<td>48 characters.  This limit includes any table prefix for join result fields, eg <tt>people.lastname</tt></td></tr>

<tr><td>Code size</td><td>Executable size of shsql(1) is ~180 kB on solaris</td></tr>

<tr><td>Memory footprint<br>of an executing shsql(1) process</td><td>Approximately 1 MB</td></tr>


</table>
.>>

.ig >>
<br>
<br>
</td></tr>
<td align=right>
<a href="shsql_home.html">
<img src="img/shsql.gif" border=0></a><br>
<a href="Copyright.html">Copyright Steve Grubb</a> &nbsp;
</td></tr>
</table>
.>>
