Summary of changes made to the library
v0.78.1
9/26/06
* Bug fixes for parsing and executing aggregate functions
* Fixed short circuit error in is_eu_boolean and is_eu_autonumber
* Added get_sql_keyword()
* Added error checking for correct number of insert fields
v0.78.0
4/18/06
* Added BOOLEAN, DATE_TIME data type
* Added functions to deal with DATE_TIMEs: see Dates
* Fixed bugs relating to self joins and unjoined tables
* Uses matheval v1.65 (datetimeval.e, upper, lower)
v0.77.3
12/05/05
* Fixed create_field() so that it updates existing records
* Implemented drop_field()
* Fixed bug that could cause a crash when malformed, multiple joins
in sql statement
* Better determination of calculated fields' datatypes
* Added checks for valid field and index names in create_index()
* Uses matheval v1.64 (added <> operator for 'not equal to')
* Fixed bug that could cause joins with where clauses to fail
* Fixed docs for get_next_autonumber()
* Text inside of single quotes wasn't processed correctly
* Improved error message when incorrect field is specified
* Optimized simple case of "SELECT COUNT(*) FROM TABLE_NAME"
* Fixed an indexing bug that wouldn't properly update an index
when all records for a certain value were deleted
v0.77.2
8/15/05
* Fixed indexing bug in insert_record2()
* Fixed bug for queries on tables with no fields
v0.77.1
1/4/05
* Fixed bugs with SELECT COUNT(*)
* Fixed some INSERT and UPDATE bugs
* Uses matheval v1.63
v0.77.0
9/10/04
* Can alias a table and perform self joins
* CREATE DATABASE, INDEX sql added
* Uses matheval v1.62 (bug fixes)
v0.76.8
8/03/04
* Fixed bug with update queries where only one field would be updated
* Fixed bug where duplicate literals were not parsed correctly
* Fixed bug in insert_record2() (did the earlier bug creep back in?)
* Fixed bug in update_record2() for updating an index
* Fixed parsing bug for SELECT COUNT(*) queries
v0.76.7
6/1/04
* Properly handles semicolons at the end of a SQL statement
* Bug fixes
v0.76.6
3/16/04
* Fixed bug in insert_record2()
v0.76.5
1/30/04
* Fixed bug with UPDATE queries
v0.76.4
1/27/04
* insert_record2() optimized to update indices at the end, rather than
for each individual record
* Bug fixes:
+ Updated parse_delete() to add the correct number of elements
to query[QN_VALUES] (4)
+ Incorrect definition of EUSQL_CONCAT
+ EUSQL_MULTIPLY was conflicting with EUSQL_ASTERISK, and broke
'SELECT * FROM TABLE'-type functionality
+ Fixed indexing errors when deleting records
+ Fixed some parsing errors introduced into other query types by
modifications to SELECT parsing
v0.76.3
12/04/03
* Bug fixes:
+ Parameter and matheval variable handling
+ Parser was missing <=, >= and incorrectly parsing quoted literals
+ ORDER BY didn't properly take into account non-displayed fields
+ UPDATE query wouldn't update with an atom value
+ select_current() didn't always change the current table
* Uses matheval v1.61
+ Added scripteval.e to use matheval's IF() operator
+ Added texteval.e for string manipulation
* Calculated fields for queries (arithmetic, IF, text operations)
v0.76.2
11/17/03
* Optimized and fixed bugs in select queries, parameter handling
v0.76.1
10/27/03
* insert_record() and insert_record2() will call blank_record()
if an atom is passed for the blank record.
* Better parsing of INSERT queries. No longer have to prepend the
table name to each field to be inserted.
* Added validate_field2() for easier field validation.
* Can change the way EuSQL opens databases using eusql_exclusive().
v0.76
10/08/03
* insert_record2() returns sequence with error codes for records
* Fixed insert bug when a parameter's value had not been set.
v0.75
8/4/03
* Fixed delete_record() bugs
* Added AUTONUMBER datatype
v0.74
4/21/03
* Major optimization for SELECT queries
* Changed order of precedence for boolean logic so that it makes more sense
(fewer parenthesis are needed)
* IN() keyword now works in where clauses
* create_db() didn't update db_list
* Bug fixes to DELETE, UPDATE parsing and execution
* rename_table() added
v0.73
4/10/03
* Improved error checking and reporting in several places
* Fixed bug where eusql missed fields with the same name as a table
* update and delete functions now update indices
* Fixes to boolean evaluation
* Can now use IS [NOT] NULL in WHERE clauses
* More parameter bug fixes--/UPDATE queries
* Other UPDATE query bug fixes
* Fixed bugs regarding parameters--values not being set and read properly
v0.72
1/16/03
* Fixed several bugs regarding outer joins
v0.71
11/22/02
* Select now uses indices, dramatic speed increase
* Outer joins working
* Can alias an aggregate function: SUM(TABLE1.FIELD1) AS FIELD1
v0.7
4/19/02
* Literals now case sensitive.
* Condition and single, multiple join work now.
* Need to test multiple conditionals with joins.
* Indices are being created, but not sure if correct,
since they're not used anywhere else.
v0.62
6/14/01
* added matheval:booleval for comparison and calculations
v0.61
5/2/01
* create_index(): need to allow queries to do this, too
* get_record2(): Retrieve a record based on non-key values.
Also had to add index_wild() to hlist.e to search on
wildcard values.
v0.6
3/6/01
* Added CREATE, DROP TABLE queries.
* Modularized parsing routines.
v0.5
3/2/01
* Added API commands to update, insert, retrieve records, get the
structure of a table's records, create tables and fields,
select current database, table
* When create_table and create_field are used, TABLEDEF is
automatically updated.
* "SELECT *" now returns 'flat' records
* Fixed bug regarding condition handling. Can now use conditions
with "SELECT *"
* Initial support for datatypes -- they're stored, but not
actually used for verification yet
* Fixed bug with UPDATE queries
v0.4
2/8/01:
* Better error handling. Added get_sql_err() for
more verbose error reporting.
* Many bug fixes.
* DELETE queries supported. Returns keys of deleted records.
* UNION queries supported.
* "SELECT *" supported.
* INSERT queries supported.
* UPDATE queries supported.
v0.3a
11/2/00:
* Column functions COUNT, SUM, AVG, GROUP BY
* Added support for SELECT DISTINCT to get unique values
* field struct converted to uppercase in table_list()
* Changed from absolute referencing of compiled query to using
constants to allow flexibility in sequence structure.