{********************************************************}
{*   EMS QueryBuilder Component Suite                   *}
{*                                                      *}
{*   Copyright (C) 1999 - 2005 EMS Corporation          *}
{*                                                      *}
{********************************************************}

Version 2.94

1.  We have added Delphi 2005 support!

2.  We have implemented the TCustomQueryBuilder.CheckLinkFieldsType property to
    control linked fields type, checking when user creates a link by 
    drag-and-drop operations (almost all servers allow joins with
    fields of different types, but errors can occur on execution)

3.  Added WorkAreaPopupMenu and TabsPopupMenu properties.

4.  TMSSQLQueryBuilder now supports constants in JOIN conditions.

5.  The new ActiveCaptionText and InactiveCaptionText properties 
    to set table caption text colors are added.

6.  We have added GenerateUniqueFieldAliases property: if =true then
    when you add an already selected field to Selection tab, QB generates unique
    alias for this field.

7.  For selected field without prefix (table name/alias) QB 
    searches for this field in all tables used in query. But if this 
    field is not found (or this is really not a field, but complex expression)
    QueryBuilder fires new event OnCheckExpressions.

8.  TPgSQLQueryBuilder now supports ILIKE operator.

9.  We have fixed the bug with comlex visual JOIN'ing.

10. Fixed bug with scrolling fields in small tables in designer area.

11. Parsing queries when operator Display Name is changed works correctly now.

12. Reserved words for MS SQL are fixed.

13. Solved the problem with parsing queries with functions Left(), Right() and
    others (with the same names as one of the reserved words).

14. Fixed bug with disappearance of GROUP BY items in some cases when parsing.

15. A lot of minor improvements and bug fixes.


01-19-2005

Version 2.93

1.  We have added the CaseSensitiveIdentifiers property to the
    TSQLQueryBuilder and the TMSSQLQueryBuilder classes. Set this
    property to True to make the component sensitive to identifiers' case.

2.  We have implemented the TCustomQueryBuilder.SaveToGraphic method.
    Use this method to save the query diagram to TGraphic object.
    This feature can be used to print the query diagram or use it as an image
    in other documents.

3.  Added the TCustomQueryBuilder.OnCheckProcedureName event.
    Use it to indicate that the object is a procedure. This event is available
    only for servers that support procedures without brackets in
    SELECT statements.

4.  The new TQBSelectParser.IsProcEmptyInputParamsBracket function added.
    You need to redefine this function if you develop the query builder for
    a database server that is not supported by our suite. This function
    returns True if the SQL dialect uses brackets in procedures with empty
    parameters.

5.  We have added the TCustomQueryBuilder.Palette.WorkSpace property.
    Use it to define color of the work area.

6.  Now the components save table size and expanded property in the builder area.

7.  The suite supports Delphi 4 in full version now.

8.  We have fixed the bug that caused an exception when Operator.Name <> Operator.Caption.

9.  Solved problem with parsing the Field1 || Field2 statements.

10. Fixed bug with parsing JOIN statements like

    SELECT ....
    FROM
      Table1
      INNER JOIN Table1 Alias1 ON (Table1.id = Alias1.id)
      INNER JOIN Table1 Alias2 ON (Alias1.id = Alias2.id)

11. Now the parser supports queries with parameters like

    SELECT * FROM Table1 WHERE Field1 = :param_name

12. Some minor improvements and bug fixes.


02-18-2004

Version 2.81

1. We have implemented support for Oracle dialect in our component suite.
   Now you can use the TOracleQueryBuilder component for building queries
   for Oracle databases. The suite supports eight SQL dialects now:
   standard SQL, Oracle, InterBase/FireBird, MySQL, PostgreSQL, DB2,
   MS SQL, and DBISAM.

2. Now the components save table positions in the builder area.

3. Now the components correctly work with tables, fields, and schemas
   that contain the "." symbols in their names.

4. We have added the Oracle Demo Application to the package. You can use
   this demo if you have the Direct Oracle Access components installed in your
   Delphi environment.

5. The MS SQL Demo Application now allows you to build queries with UDFs.

6. Now you can use the following functions in your own applications:

   TCustomQueryBuilder.Parser.Scaner.NeedQuotes(const Ident: string): boolean;
   This functions returns true if it is necessary to quote the SQL identifier.

   TCustomQueryBuilder.Parser.Scaner.ProcessName(const S: string): string;
   This function quotes the identifier defined in input value.
   The identifier can be composite, e.g. Schema.Table.Field.

   TCustomQueryBuilder.Parser.Scaner.QuoteName(const S: string): string;
   This function quotes simple SQL identifier.

   TCustomQueryBuilder.Parser.Scaner.QuoteStr(const S: string): string;
   This function simply quotes the string.

7. Fixed bug with Links properties for some servers.

8. Fixed bug with creating join links.

9. Fixed bug with parsing the stored procedure parameters.

10. Some small improvements and bug fixes.

01-23-2004

Version 2.73

01-15-2004

Version 2.7.

1. We have implemented the DB2 and the DBISAM dialects support in our component
   suite. Now you can use the TDB2QueryBuilder and the TDBIQueryBuilder components
   for building queries for DB2 and DBISAM databases. Seven SQL dialects are
   supported by the suite now: standard SQL, InterBase/FireBird, MySQL, PostgreSQL,
   DB2, MS SQL, and DBISAM.

2. Now the components quote identifiers only if it is necessary, e.g. if
   the identifiers contain special symbols.

3. We have added the new property to the TQBScriptFormat - AlwaysBracketConditions.
   Set this option to True to bracket all the conditions. If this option is set
   to False, the component will place only the brackets necessary to save the
   condition meaning.

4. Now the components support subqueries. Now you can use queries
   like "SELECT Field1 FROM Table1 WHERE Field1 IN
   (SELECT Field2 FROM Table2 WHERE Field2='Value')"

5. Now the components support conditions like
   "Field1 = (SELECT Field2 FROM Table1 WHERE Field2='Value')"

6. Now the TMSSQLQueryBuilder component correctly parses the "TOP xx" statements.

7. Fixed bug with parsing logical conditions.

8. Fixed bug with parsing complex conditions.

9. Some small improvements and bug fixes.


Version 2.6.

1. Portuguese and French.


07-23-2003

Version 2.5

1. We have implemented the MS SQL dialect support in our component suite. Now
   you can use the TMSSQLQueryBuilder component for building queries for MS SQL
   server. Five SQL dialects are supported by the suite now: standard SQL,
   InterBase/FireBird, MySQL, PostgeSQL and MS SQL.

2. We have added a Delphi demo project for TMSSQLQueryBuilder component to the
   distribution package. This demo project uses ADO components to access
   MS SQL databases. You can find this project in the Demos\Delphi\ADODemo
   directory of the distribution package.

3. QueryBuilder supports using parameters within the query text now, so parser
   will not raise the 'Invalid token' error in cases when parameters are used
   in the query.

4. Now the Sorting tab displays all query fields as available if none of the
   fields are included into the Selection tab.

5. Field/table names containing a dot character are quoted correctly after
   dragging and dropping then into the Criteria panel.

6. Fixed bug with the incorrect ORDER BY clause generating after deleting a table
   with alias from a diagram in some cases.

7. Fixed bug with parsing aggregates in the TInterBaseQueryBuilder component.

8. Some small improvements and minor corrections.


04-28-2003

Version 2.4

1. PostgreSQL namespaces are supported by TPgSQLQueryBuilder component now.
You can use the UseNamespaces property to define if PostgreSQL server supports
namespaces or not. It is necessary for proper generating and parsing SELECT
statements on PostgreSQL 7.3 and higher.

2. Two operators, CONTAINING and STARTING WITH, were added to the
TInterBaseQueryBuilder component. Now you can use both of these operators
within WHERE clause of SELECT statement.

3. Three new localizations were added. Now five languages are included into the
distribution package: English, German, Italian, Russian and Slovenian.

4. Fixed bug with improper parent assignment when dropping the component on a
form in design time under C++Builder 6.

5. Fixed bug in TInterBaseQueryBuilder with formating identifiers containing
the '-' (minus) character.

6. Some minor corrections and small improvements.


02-20-2003

Version 2.3

1. An ability to support both of InterBase and FireBird syntaxes at a time by
setting TInterBaseQueryBuilder.SQLServer := qssDontCare.

2. Boolean constants are now supported in TSQLQueryBuilder component by the
BooleanFalse and the BooleanTrue properties.

3. New QuoteAliases property was added to TSQLQueryBuilder. This property is
used to indicate whether fields and tables aliases are quoted in a
script or not.

4. Fixed bug with impossibility of using expressions as a source field in the
selection grid.

5. Fixed bugs with impossibility of field manipulations on the Selection tab
if table names/aliases contain dot ('.') symbol.

6. Some small improvement and corrections.


12-15-2002

Version 2.2

1. New TPgSQLQueryBuilder component was added. Now four SQL dialect are
supported by the suite: standard SQL, InterBase/FireBird, MySQL and
PostgeSQL.

2. Enhanced diagram storing feature was added. Now you can save and restore
diagram to/from ini-file or system registry as it is represented on the screen.
Four methods are available in TCustomQueryBuilder class and its descendants
for this purpose:

  - function SaveToIni(const FileName: string; IncludeSQL: boolean): boolean;
  - function LoadFromIni(const FileName: string; IncludeSQL: boolean): boolean;
  - function SaveToRegistry(RootKey: HKEY; const KeyPath: string;
      IncludeSQL: boolean): boolean;
  - function LoadFromRegistry(RootKey: HKEY; const KeyPath: string;
      IncludeSQL: boolean): boolean;

where IncludeSQL parameter indicates if SQL statement should be included
into the diagram properties or it will be stored in another place. Also all
diagram options can be specified in design-time using
TCustomQueryBuilder.Storage property.

3. Two methods for SQL script loading/saving were added to all components.
Now you can quickly load/save script by calling the following methods:

  - function LoadSQL(const FileName: string): boolean;
  - function SaveSQL(const FileName: string): boolean;

4. Stored procedures are now fully suppored in TInterBaseQueryBuilder. Demo
project for InterBase Express (IBX) components is updated to demontrate how
this feature can be used.

5. Fixed bugs with impossibility to define aggregate/function/keyword lists
within QueryBuilder component.

6. Some minor bugfixes and small improvements.


09-18-2002
Version 2.0

1. EMS QueryBuider now is represented as a set of components designed for
individual SQL dialect. At present moment there are three SQL dialects
supported within EMS QueryBuider: standard SQL, InterBase/FireBird
(both Dialect 1 and Dialect 3) and MySQL.

2. New powerful parser contains all the base methods to parse the SELECT
statement and allows you to override the parser methods to adapt it
to any SQL dialect.

3. A possibility to customize lists of SQL keywords, functions and
aggregate functions was added. This feature allows you to change the
syntax-specific words within QueryBuider depending on the SQL dialect or
SQL server version.

4. New OnParserError event was added to QueryBuider. This event allows you
to handle errors, which occur during the source SQL statement parsing.

5. Support of some special structures within SQL statement was added to the
parser. Among the supported structures are FIRST # SKIP # statement for
FireBird, ROWS # PERCENT WITH TIES statement for InterBase 6.5 and
LIMIT # statement for MySQL.

6. Some visual options, such as VisibleTabs and customization of
all fonts and colors used in the QueryBuilder, were added.

7. New demo projects for Delphi and C++Builder are included to the distribution
package. They demonstrate how you can manipulate component's methods and
properties, and  how QueryBuider can communicate with  BDE, IBX and
dbExpress components.