4D v164D SQL engine implementation |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16
4D SQL engine implementation
4D SQL engine implementation
Basically, the 4D SQL engine is SQL-92 compliant. This means that for a detailed description of commands, functions, operators or the syntax to be used, you may refer to any SQL-92 reference. These can be found, for instance, on the Internet. However, the 4D SQL engine does not support 100% of the SQL-92 features and also provides some specific additional features. This section covers the main implementations and limitations of the 4D SQL engine. Since the SQL engine of 4D has been integrated into the heart of the 4D database, all the limitations concerning the maximum number of tables, columns (fields) and records per database, as well as the rules for naming tables and columns, are the same as for the standard internal 4D engine (DB4D). They are listed below.
Tables with the same name created by different users are not allowed. The standard 4D control mechanism will be applied. The following table indicates the data types supported in 4D SQL and their corresponding type in 4D:
Automatic data type conversion is implemented between numeric types.
The NULL values are implemented in the 4D SQL language as well as in the 4D database engine. However, they are not supported in the 4D language. It is nevertheless possible to read and write NULL values in a 4D field using the Is field value Null and SET FIELD VALUE NULL commands. For compatibility reasons in 4D, NULL values stored in 4D database tables are automatically converted into default values when being manipulated via the 4D language. For example, in the case of the following statement: myAlphavar:=[mytable]MyAlphafield ... if the MyAlphafield field contains a NULL value, the myAlphavar variable will contain “” (empty string). The default values depend on the data type:
On the other hand, this mechanism in principle does not apply to processing carried out at the level of the 4D database engine, such as queries. In fact, searching for an “blank” value (for example myvalue=0) will not find records storing the NULL value, and vice versa. When both types of values (default values and NULL) are present in the records for the same field, some processing may be altered or require additional code. The Map NULL values to blank values property is taken into account at a very low level of the database engine. It acts more particularly on the Is field value Null command. The Reject NULL value input field property is used to prevent the storage of NULL values: When this attribute is checked for a field, it will not be possible to store a NULL value in this field. This low-level property corresponds exactly to the NOT NULL attribute of SQL. Note: In 4D, fields can also have the “Mandatory” attribute. The two concepts are similar but their scope is different: the “Mandatory” attribute is a data entry control, whereas the “Reject NULL value input” attribute works at the level of the database engine. The integrated SQL server of 4D supports date and time constants in accordance with the ODBC API. Here is the syntax for sequences of ODBC date and time constants: {constant_type 'value'}
Note: fff indicates milliseconds. For example, you can use the following constants: { d '2013-10-02' } The SQL date parser rejects any date expression specifying "0" as the day or month. Expressions such as {d'0000-00-00'} or CAST('0000-00-00' AS TIMESTAMP) generate an error. To perform SQL queries on blank dates (not to be confused with null dates), you must use an intermediate 4D expression. For example: C_LONGINT($count) The "Available via SQL" property, available for project methods, allows you to control the execution of 4D project methods via SQL. When checked, this option allows the execution of the project method by the 4D SQL engine. It is not selected by default, which means that 4D project methods are protected and cannot be called by the 4D SQL engine unless they have been explicitly authorized by checking this option. This property applies to all SQL queries, both internal and external — whether executed via the ODBC driver, or via SQL code inserted between the Begin SQL/End SQL tags, or via the QUERY BY SQL command. Notes:
4D implements the concept of schemas. A schema is a virtual object containing the tables of the database. In SQL, the purpose of schemas is to assign specific access rights to different sets of database objects. Schemas divide the database into independent entities which together make up the entire database. In other words, a table always belongs to one and only one schema.
Note: The control of access via schemas only applies to connections from the outside. The SQL code executed within 4D via Begin SQL/End SQL tags, SQL EXECUTE, QUERY BY SQL, and so on, always has full access. Multi-database architecture is implemented at the level of the 4D SQL server. From within 4D it is possible:
In the SQL language, a primary key is used to identify the table column(s) (field(s)) responsible for uniquely specifying the table records (rows). In particular, setting a primary key is required for the record replication function in a 4D table (see Replication via SQL) and for logging 4D tables as of v14. 4D allows you to manage primary keys in two ways:
Note:
You can set a primary key when a table is created (via the CREATE TABLE command) or when adding or modifying a column (via the ALTER TABLE command). The primary key is specified using the PRIMARY KEY clause followed by the column name or a list of columns. For more information, refer to the section. 4D lets you create and remove primary keys directly via the context menu of the structure editor. For more information about this point, refer to Primary keys in the 4D Design Reference manual. The integrated SQL engine of 4D supports standard SQL views. A view is a virtual table with data that may come from several different database tables. Once a view is defined, you can use it in a SELECT statement just like a real table. Data found in a view are defined using a definition query based on the SELECT command. Real tables used in the definition query are called "source tables". An SQL view contains columns and rows just like a standard table, but it does not actually exist; it is only a representation resulting from processing and stored in memory during the session. Only the definition of the view is actually saved temporarily. Two SQL commands are used to manage views in 4D v14: CREATE VIEW and DROP VIEW.
See also
|
PROPERTIES
Product: 4D
HISTORY
ARTICLE USAGE
4D SQL Reference ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||