CUBRID 2008 R3.0 Release Note
Below you will see the detailed overview of the new CUBRID 2008 R3.0 Beta release.
- For the brief overview read our blog news.
- You can also download this Release Note in PDF format.
Table of Contents
- OVERVIEW
- INFORMATION ABOUT CUBRID 2008 R3.0
- FEATURES OF CUBRID 2008 R3.0 RELEASE
- SUPPORTING PLATFORMS AND SYSTEM REQUIREMENTS
- LICENSE
- VERSION COMPATIBILITY AND OPERABILITY
- HOW TO INSTALL CUBRID 2008 R3.0
- HOW TO UPGRADE TO CUBRID 2008 R3.0
- WHAT’S NEW IN CUBRID 2008 R3.0
- NEW FEATURES - SQL SYNTAX EXTENSION RELATED
- CUBRIDSUS-3590 Supporting CREATE TABLE statement extension and table replication
- CUBRIDSUS-3590 Creating an index for the prefix part of a string corresponding to prefix_length and changing system catalog table
- CUBRIDSUS-3590 Extending INSERT syntax and supporting REPLACE statement
- CUBRIDSUS-3590 Supporting LIMIT clause, which limits the number of target records in the SELECT, DELETE, and UPDATE statements
- CUBRIDSUS-3590 Omitting FROM clause in the SELECT statement
- CUBRIDSUS-3590 Extending syntax of GROUP BY … HAVING clause in the SELECT statement
- CUBRIDSUS-3590 Extending ALTER TABLE syntax and specifying column location to add
- CUBRIDSUS-3590 Deleting all records by using the TRUNCATE statement
- CUBRIDSUS-3590 Adding trigger operation for ON UPDATE and ON DELETE operation when defining a foreign key
- CUBRIDSUS-3590 Supporting PREPARED STATEMENT execution at SQL level
- CUBRIDSUS-3590 Supporting additional parameters to apply extended SQL syntax
- NEW FEATURES – OPERATOR AND FUNCTION RELATED
- CUBRIDSUS-3591 Extending logical operators
- CUBRIDSUS-3591 Extending comparison operators
- CUBRIDSUS-3591 Supporting new bitwise operators and bit functions
- CUBRIDSUS-3591 Extended numerical operation function
- CUBRIDSUS-3591 Extending date/time functions and various output formats
- CUBRIDSUS-3591 Extending string functions
- CUBRIDSUS-3591 Extending information functions
- CUBRIDSUS-3591 Extending conditional operation functions
- NEW FEATURES – OTHERS
- CUBRIDSUS-3005, 3085 Supporting compactdb utility option which can perform compact database operation during database operation
- CUBRIDSUS-2923, 2961, 2972 Supporting about 20 functions for PHP API
- CUBRIDSUS-2829 insert_execution_mode Adding INSERT mode, which can be set up in the insert_execution_mode parameter
- CHANGED AND ENHANCED FEATURES
- CUBRIDSUS-2855 The operation of cci_connect( ) function is changed
- CUBRIDSUS-3391 The range of format specifier 'HH' or 'Hh32' is changed in the TO_CHAR( ) function
- CUBRIDSUS-3213 The interpretation of 2-digit year value is changed
- CUBRIDSUS-2703 The result type of POWER( ) function is changed to DOUBLE
- CUBRIDSUS-2421 Preventing a sequential scan from occurring at a specific query whose conditional clause is always FALSE
- CUBRIDSUS-961, 2890, 3030 Supporting the getPrimaryKeys( ) and getColumnDisplaySize( ) methods of the JDBC driver
- CUBRIDSUS-2661 Supporting DataAccessException of Spring framework in the JDBC driver
- CUBRIDSUS-1737 Supporting CUBRID execution script in the Linux environment
- CUBRIDSUS-1562, 1628 Fixed to unload some tables specified in the input file even though there is no newline character
- CUBRIDSUS-1216 Supporting a feature to reset a RW mode broker automatically after failback of the master server in HA environment
- CUBRIDSUS-1970 Fixed to execute an index scan in hierarchy query
- FIXED ERRORS
- CUBRIDSUS-3194,3399,3434,3435 Fixed an error in which CPU use was increased by the applylogdb process in the HA environment
- CUBRIDSUS-3196, 3489 Fixed an error in which the applylogdb process was restarted repeatedly and replication was not performed in the HA environment
- CUBRIDSUS-3106 Fixed an error that caused replication to be stopped because a specific commit log was lost
- CUBRIDSUS-2831 Fixed an error that caused a task to be stopped when executing the backupdb utility in the client mode after configuring the HA environment
- CUBRIDSUS-2872 Fixed an error in which there was a CUBRID heartbeat node status information mismatch in the HA environment
- CUBRIDSUS-2120 Fixed an error that caused data mismatch when executing INSERT to a table where a foreign key is defined in the replication/HA environment
- CUBRIDSUS-3295, 3191 Fixed an error that caused a data mismatch in the replication environment
- CUBRIDSUS-3135 Fixed an error that caused the size of a replication log to be increased abnormally in the replication environment
- CUBRIDSUS-2638 Fixed an error that caused a query to not be executed normally after restoring database in a specific situation
- CUBRIDSUS-3083 Fixed an error in which duplicate values were inserted into the UNIQUE KEY column
- CUBRIDSUS-2127 Fixed a problem in which OR operation is not applicable to a specific index key value in the join predicate
- CUBRIDSUS-2062 Fixed query result error of outer join
- CUBRIDSUS-423 Fixed an error of the column name not being output in the inline-view type query results
- CUBRIDSUS-3337 Fixed a query result error that occurs when a correlated sub-query that has ORDER BY clause is specified in the SELECT list
- CUBRIDSUS-2742 Fixed a query result error that occurs when a subquery with FOR ORDERBY_NUM() is included
- CUBRIDSUS-2530 Fixed level value error in a specific hierarchy query statement
- CUBRIDSUS-2149 Fixed an error in which a reference value is not updated when defining a foreign key of a ON CACHE OBJECT option on an index column
- CUBRIDSUS-2603 Fixed the START WITH option error of CREATE SERIAL and ALTER SERIAL statements
- CUBRIDSUS-3003 Fixed an error in which the sub-query result is not sorted when one with an ORDER BY clause is in SEQUENCE type
- CUBRIDSUS-3299 Fixed an error that created the column type incorrectly if the column name was not specified in the CREATE VIEW statement
- CUBRIDSUS-3203, 3224, 3246 Fixed an error that occurs during explicit type casting using the CAST function
- CUBRIDSUS-440 Fixed an error that the trigger information could not be retrieved in the system catalog view if a table with a trigger was dropped
- CUBRIDSUS-1559 Fixed an error in which a COMMIT or ROLLBACK event type trigger was not unloaded
- CUBRIDSUS-2774 Fixed malfunction of the broker_log_top utility and changed the broker log format
- CUBRIDSUS-2886 Fixed an error in which connection is failed where excessive server connections are requested through JDBC
- CUBRIDSUS-3367, 3427 Fixed ResultSet return error and cci_cursor_update( ) operation error in the Java Stored Procedure
- CUBRIDSUS-3137 Fixed getString( ) output value error of the JDBC driver for DATETIME type values
- CUBRIDSUS-3457 Fixed malfunction of the cci_col_get() for collection type columns
- CUBRIDSUS-2225 Fixed the cubrid backupdb –sp option to work normally even when tab is used as a separator in the databases.txt
- CUBRIDSUS-2221 Fixed to validate connection requests only allowed by the cub_master process
- CUBRIDSUS-1199 Fixed an output error of specific values during broker status monitoring
- CUBRIDSUS-2019 Fixed an error that the process woud not be restarted if the memory size of the CAS process exceeded 2G
- CUBRIDSUS-2047 Fixed an error in which the size of the temporary archive log increases infinitely if the setting is media_failure_support = no
- CUBRIDSUS-343 Fixed an error in reloading previous queries with more than 50 lines in the CSQL
- CUBRIDSUS-600 Fixed an error that occurs when executing the CSQL session command ;edit in a Windows Vista environment
- CUBRIDSUS-1732, 3359 Fixed CUBRID installation error in a Windows 7 environment
- CUBRIDSUS-471 Fixed an error in which the results of the execution of cubrid service stop/start commands are not reflected in the CUBRID tray in a Windows environment
- WHAT'S NEW IN CUBRID MANAGER 2008 R3.0 VERSION
- NEW FEATURES
- Extended HA features
- New keywords and UI menu support for added statements
- Supporting user configuration in [Add Status Monitor]
- CHANGED AND ENHANCED FEATURES
- Supporting configuration of remote broker host information when executing [New Query Editor]
- Supporting user login function to [Query Automation]
- Supporting equal sign to configure the parameter value of cm.conf
- Supporting an option to restore databases into a specific path
- FIXED ERRORS
- Fixed an error in which all the tables are unloaded when executing [Unload database]
- Fixed an error in which warning window for some query errors would be displayed repeatedly for subsequent queries
- Fixed an error in which you cannot stop retrieving when the retrieving result exceeds 5,000 in the Query Editor
- Fixed an error in which the CUBRID Manager would not terminate in a specific situation
- Fixed an error in which query result would be returned abnormally in the Query Editor in a JDK 1.5 environment
- CAUTION
- CUBRIDSUS-3217 Specifying a question mark when entering connection information as a URL string in JDBC
- CUBRIDSUS-3564 Changed a protocol between the master and server processes and different port number must be configured if two versions are running at the same time
- CUBRIDSUS-2828 @ cannot be included in the database name
- CUBRIDSUS-3267 An empty space cannot be included in a directory path in a Windows environment
- CUBRIDSUS-3553 An error related manager server process occurs when building CUBRID source only
- Caution when selecting the [Using automatic volume addition] option and creating a database in CUBRID Manager
1. Overview
Information
This document contains information about the CUBRID 2008 R3.0 version. To see the most current version of the release notes, go to CUBRID Open Source Project site (http://www.cubrid.org).
Revision History
Changes in these release notes of CUBRID 2008 R3.0 are as follows:
Date | Description |
July, 2010 |
CUBRID 2008 R3.0 Release |
References
The documents distributed with the CUBRID 2008 R3.0 product are as follows:
Document | Description |
Release Note |
Contains new and changed features of this release of CUBRID. |
Contains Quick Start Guide, CUBRID Architecture, SQL Guide, Tuning Guide, Administrator's Guide, CUBRID Manager Guide and API reference. |
Bug Report and User Feedback
CUBRID welcomes your active participation in bug reporting and looks forward to your candid feedback. You can register bug reports and feedback at the following sites.
Document | Description |
Bug Report |
CUBRID Open Source Project: http://sourceforge.net/projects/cubrid |
User Feedback |
CUBRID Open Source Project: http://sourceforge.net/projects/cubrid CUBRID website: http://www.cubrid.org/forum |
Additional Information
You can find useful information about CUBRID in the following sites.
Information | Site |
CUBRID Product |
|
CUBRID License |
|
CUBRID User Documents |
2. Information about CUBRID 2008 R3.0
Features of CUBRID 2008 R3.0 Release
In the CUBRID 2008 R3.0 Release, various operators, functions, and statements are extended to enable the easier and more convenient creation of CUBRID-based applications. In addition, cubrid compactdb utility has been enhanced, and the CUBRID HA feature has been stabilized to improve the operating convenience of the service.
- Extending SQL Syntax
- - CREATE statement extension: Supports table creation through the schema replication of an existing table or total data replication
- - INSERT statement extension: Supports multi-record input and REPLACE statement
- - SELECT statement extension: Supports LIMIT clause and the extension of GROUP BY clause syntax
- - ALTER statement extension: Extends the designation of the position of a column to add, and the addition or deletion of an index or a
For more information, see Changes in CUBRID 2008 R3.0.
Supporting Platforms and System Requirements
The platforms compatible with the CUBRID 2008 R3.0 and hardware/software requirements for installation are as follows:
Supporting Platforms | Required Memory |
Required Disk Space |
Required Software |
Windows 32/64 Bit (XP, 2003, Vista) |
1G or higher |
500MB or higher |
- JRE 1.5 or higher (required when CUBRID Manager or Java stored procedure is used) - .NET Framework 2.0 or higher (required when CUBRID Service Tray is used) - Microsoft Visual C++ 2008 Redistributable Package |
Linux 32/64 Bit (Linux kernel 2.4 and glibc 2.3.4 or higher) |
1G or higher |
500MB or higher |
- JRE 1.5 or higher (required when CUBRID Manager or Java stored procedure is used) |
You can download the Microsoft Visual C++ 2008 Redistributable Package from the following link. Check the installation language.
For x86:
http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf
For x86_64:
http://www.microsoft.com/downloads/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6
License
The GPL v2 license or later is applied to the CUBRID server engine, and the BSD license is applied to the CUBRID Manager and interface (API). For more information, see License Guide in the CUBRID website.
Version Compatibility and Operability
Compatibility between applications and CUBRID Manager
- Applications that use the earlier versions of JDBC, PHP, CCI or C API can access the CUBRID 2008 R3.0 database. However, you should link to the library of CUBRID 2008 R3.0 to use the added/improved features of JDBC, CCI or PHP interfaces.
- CUBRID Manager ensures backward compatibility with CUBRID 2008 R2.1 version servers or higher. You should link to the CUBRID JDBC library that matches each server version.
- Please note that query results may be different compared to the earlier version because new reserved words have been added and the specifications for some queries have been changed. For more information, see Cautions on Upgrade^ Top of page
Database Compatibility
When upgrading the version of a server, it is necessary to migrate the database of an earlier version. For more information, see Database Migration Procedures.
Interoperability
If the CUBRID DB server and its broker server are separately operated, their interoperability is guaranteed, even when their operating systems are different. However, the CUBRID version and the OS version must be the same. For example, the 64-bit DB server for Linux is interoperable with the 64-bit broker server for Windows, but it is not interoperable with the 32-bit broker server.
How to install CUBRID 2008 R3.0
On Linux
An installation package for Linux is provided as a script that includes Linux RPM, tar.gz and binary. For more information about installation, see [Getting Started with CUBRID > Installing and Running CUBRID > Installing and Running on Linux].
On Windows
An installation guide for Windows is provided and you can simply install CUBRID using the installation wizard. For more information about installation, see [Getting Started with CUBRID > Installing and Running CUBRID > Installing and Running on Windows].
Configuring CUBRID and OS environment variables
Before you start CUBRID, you must configure the CUBRID and OS environment variables. In particular, before you start CUBRID Manager and Java stored procedures, it is necessary to configure JAVA
environment variables. To learn how to configure the environment variables, see Getting Started with CUBRID> Before You Start CUBRID > Configuring the Environment Variable and SQL Guide> Java Stored Functions/Procedures> Environment Settings.
How to upgrade to CUBRID 2008 R3.0
Cautions for upgrade
- Checking added reserved words and identifiers which are not allowed
The following reserved words are added because SQL statements are extended and more functions/operators are supported, and the special characters which cannot be included in an identifier are changed. Even though those identifiers are used in the earlier version, an error may occur after upgrade. For more information, see Database Migration Procedures, SQL Guide> Reserved Words and SQL Guide> Identifier.
Item | Identifiers which are not allowed in CUBRID 2008 R3.0 |
Added reserved words |
DATABASE, DAY_MILLISECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, DISTINCTROW, DIV, DO, DUPLICATE, HOUR_MILLISECOND, HOUR_SECOND, HOUR_MINUTE, LOCALTIME, LOCALTIMESTAMP, MINUTE_MILLISECOND, MINUTE_SECOND, MOD, ROLLUP, SECOND_MILLISECOND, TRUNCATE, XOR, YEAR_MONTH |
An operator to use a reserved word as an identifier |
double quotes ("), square brackets ([ ]), grave operator (`) |
Special characters which cannot be included in an identifier |
%, !, |, ^, ~ |
- Checking if any modification is required for an application
Because the execution method of some functions and SQL queries has been changed, their query results may be different compared to the earlier version. The following queries return different results compared to the earlier version.
Query type which returns a different result compared to the earlier version | Earlier version |
CUBRID 2008 R3.0 |
Detailed information |
NULL is entered in the AUTO_INCREMENT column. |
NULL is saved. |
Automatically increasing value is saved. |
|
NO ACTION is defined for ON UPDATE/ON DELETE ACTION on a foreign key. |
No action |
Same action as RESTRICT |
|
Return value type of the POWER function |
Depending on parameter type |
DOUBLE type |
|
12-hour format is used as the „HH? or „Hh32? specifier in the TO_CHAR function. |
Expression range: 0~11 |
Expression range: 1~12 |
|
Conversion result of 2-digit year value |
01~99 ? 0001 ~ 0099 |
00~69 ? 2000~2069 70~99 ? 1970~1999 |
|
Comparison/arithmetic operation of date/time data type |
Comparison is possible only for the same types. Subtraction is possible only for the same types. |
Comparison is possible between DATE, TIMESTAMP, and DATETIME types. Subtraction is possible between DATE, TIMESTAMP, and DATETIME types. |
|
URL String information in JDBC |
A question mark before the property can be omitted. |
A question mark must be specified before the property. |
- Checking parameter changes
The following parameters are changed, so be careful when applying a configuration file.
Parameter Name | Changes |
Detailed information |
INSERT_EXECUTION_MODE |
Ranges of parameter value extended. |
|
ANSI_QUOTES PIPES_AS_CONCAT ONLY_FULL_GROUP_BY |
Added (default value: yes) Added (default value: yes) Added (default value: no) |
- Saving the existing configuration file
Archive the existing configuration files that are in the $CUBRID/conf directory (cubrid.conf, cubrid_broker.conf, cm.conf) and the database location file (databases.txt).
- Migrating a Database
A CUBRID 2008 R3.0 version database is not compatible with a database in a lower version of CUBRID. Therefore, you need to migrate the existing database to one of CUBRID 2008 R3.0 (see Database Migration Procedures).
- Reconfiguring environments for replication or HA
For more stable operation, it is recommended to migrate DBs and to reconfigure HA environment in a system where the earlier version replication is used. In addition, for the system where the Linux Heartbeat-based HA feature is used, which is provided in versions earlier than CUBRID 2008 R2.2, it is recommended to reconfigure the system to DB migration and CUBRID Heartbeat-based HA environment. (See the Migration Procedures in HA Environment)
Database Migration Procedures
You can execute migration by using the <CUBRID>/bin/migrate_r30 utility. See the following execution guide. During the execution, you can detect if reserved words added to CUBRID 2008 R3.0 are among the identifiers used in the existing version of database by using the check_reserved.sql reserved word detection script which is distributed separately through the download page.
You can also execute migration by using cubrid unloaddb/loaddb utility. See Administrator's Guide> database migration for more information.
Step | Linux Environment |
Windows Environment |
C1 step: Stop CUBRID Service |
% cubrid service stop |
Select CUBRID Service Tray > [Exit]. |
C2 step: Execute reserved words detection script |
Execute the following command in the directory where the reserved word detection script is located. Execute migration or identifier modification by checking the detection result. See SQL Guide> identifier. % csql -S -u dba -i check_reserved.sql | |
C3 step: Back up the existing DB |
Back up the database in case you wish to restore to the existing version while using CUBRID 2008 R3.0, and store the backup file in a separate directory (R22_backup). (C2a) % mkdir R22_backup % cubrid backupdb -S –D R22_backup Store the existing databases.txt file and the configuration files located in the conf directory in a separate directory. (C2b) | |
|
|
Uninstall the earlier version of CUBRID. Note that when you are prompted with the question “Do you want to delete all the existing version of databases and the configuration files?," make sure to select "No" to protect the existing databases. | C4 step: Install 2008 R3.0 |
See How to install CUBRID 2008 R3.0 in this document. |
C5 step: Run the migration tool |
|
Stop the server by selecting CUBRID Service Tray> [CUBRID Server]>[Stop]. |
Copy the databases.txt stored in step (C2b) to the directory in which 2008 R3.0 is installed. (C5a) Execute the migrate_r30 utility as shown below. (C5b) % migrate_r30 | ||
C6 step: Back up 2008 R3.0 version DB |
Back up only when the database version is R1.x. If the existing version is R2.x, you may skip this step. % cubrid backupdb -S | |
C7 step: Configure CUBRID environment and start CUBRID Service |
Modify the configuration file. At this time, you can use the configuration file that you stored in C2b step. % cubrid service start % cubrid server start | CUBRID Service Tray > [CUBRID Server] > [Start] |
Database migration procedures in HA environment
If CUBRID 2008 R2.0 or R2.1 version HA feature was used, the Linux Heartbeat package used in that version is not used anymore. Therefore, it is recommended to set up a new HA environment after executing server version upgrade and DB migration by referring to the following guide. Meanwhile, if the HA feature in CUBRID 2008 R2.2 or a later was used, you can simply execute server upgrade and DB migration.
A scenario will be described below, in which the current service is stopped to perform an upgrade in the environment where a broker, a master DB and a slave DB are operating respectively at different servers. For a scenario in which upgrade is performed without stopping the service, see a separate guide document.
Step | Description |
h3 step: Stop HA-related services and remove the existing Linux Heartbeat |
% cubrid broker stop % service heartbeat stop % chkconfig --del heartbeat % pkill -u user1 -f "cub_master" |
h4~H6 steps: Run C2-C6 steps in the master server |
Run CUBRID upgrade and database migration in the master server and back up the 2008 R3.0 database. |
H7 step: Install CUBRID 2008 R3.0 in the slave server |
See How to install CUBRID 2008 R3.0 in this document. |
H8 step: Restore the backup copy of the master server in the slave server. |
Restore the 2008 R3.0 database backup copy (testdb_bk*) of the master server, which is created in H6 step, in the slave server. % scp user1@m_server:~/DB/testdb/testdb_bk0v000 . % scp user1@m_server:~/DB/testdb/log/testdb_bkvinf ./log/. % cubrid restoredb testdb |
H9 step: Reconfigure HA environment and start HA mode |
Configure the HA start script (cubrid-ha) and the configuration file (cubrid.conf). See Administrator's Guide> CUBRID HA Environment Configuration. Start DB in the HA mode in the master and slave servers. See Administrator's Guide> CUBRID HA Environment Configuration. [root@m_server~]# service cubrid-ha start [root@s_server~]# service cubrid-ha start |
h30 step: Install CUBRID 2008 R3.0 in the broker server and start a broker |
See How to install CUBRID 2008 R3.0in this document. Configure the broker and start the broker. See Administrator's Guide> CUBRID HA Environment Configuration. % cat cubrid_broker.conf … ACCESS_MODE=RW
|
% cubrid broker start |
How to reconfigure replication
- In an environment where replication is used, it is recommended to set up a redundancy environment by using the HA feature for more stable operation. After server version upgrade and database migration, you can set up a new HA environment.
- Development of replication functionality will be discontinued in the future (Outdated and Deprecated Feature).
3. What’s New in CUBRID 2008 R3.0
New features - SQL syntax extension related
CUBRIDSUS-3590 Supporting CREATE TABLE statement extension and table replication
- Supporting the creation of a table which has the same schema as an existing table
To help create a new table simply by replicating the schema of an existing table, CREATE TABLE syntax is extended. You can define the schema of a new table more conveniently by using a CREATE TABLE … LIKE statement.
// Creating a new table simply by replicating the schema of a_tbl table
CREATE TABLE new_tbl LIKE a_tbl;
- Related document: Table Definition> CREATE TABLE LIKE
- Supporting the creation of a table which includes SELECT subquery result records for an existing table
To help create a table which has the result records of SELECT statement when there is a table where multiple records are inserted, CREATE TABLE syntax is extended. You can define the schema of a new table and also insert records more conveniently by using the CREATE TABLE … AS SELECT statement.
// Creating a new table by replicating the result of SELECT for a_tbl table
CREATE TABLE new_tbl1 AS SELECT * FROM a_tbl;
- Related document: Table Definition> CREATE TABLE SELECT
- Supporting the index creation feature during table creation
THE CREATE TABLE syntax has been extended so that you can create indexes by defining INDEX, KEY or UNIQUE INDEX in a column definition during table creation. In addition, you can define an ASC or DESC option after the target column name when defining an index. You can conveniently sort columns in GROUP BY clauses by specifying the column option.
// Defining an index upon table creation
CREATE TABLE new_tbl(
id INT,
name VARCHAR,
INDEX(id DESC, name ASC)
);
- Related document: Table Definition> CREATE TABLE, column option
CUBRIDSUS-3590 Creating an index for the prefix part of a string corresponding to prefix_length and changing system catalog table
When defining an index to a string type column, you can create an index for only the prefix of the string by specifying prefix_length. Related to this function, the key_prefix_length column, where prefix_length value is stored, is added to the system catalog virtual table DB_INDEX_KEY.
CREATE TABLE new_tbl ( name VARCHAR(20));
INSERT INTO new_tbl VALUES ('abc1234'), ('abcd123');
// Creating an index on 3-byte prefix for a string type column
CREATE INDEX ON new_tbl(name(3));
// Selecting the value of prefix_length defined in a system catalog
SELECT class_name, key_attr_name, key_prefix_length FROM db_index_key
WHERE class_name = 'new_tbl';
CUBRIDSUS-3590 Extending INSERT syntax and supporting REPLACE statement
- Extending INSERT syntax to allow the instant insertion of multiple records
YOU CAN OMIT INTO IN THE INSERT statement, AND USE VALUE instead of VALUES. In addition, the statement is extended to allow instant insertion of multiple rows by separating values to insert with a comma.
CREATE TABLE insert_tbl (A INT DEFAULT 1, B INT UNIQUE);
INSERT INTO insert_tbl VALUES (1,1), (2,2), (NULL, 3);
- Extending a statement to allow the easy insertion of a default value
A statement is extended to allow specifying DEFAULT keyword in front or back of VALUES, and also specifying it directly to a column value.
// Inserting a default value
INSERT INTO insert_tbl VALUES DEFAULT;
INSERT INTO insert_tbl DEFAULT VALUES;
// Specify the DEFAULT keyword into a column
INSERT INTO insert_tbl VALUES (DEFAULT, 4),(DEFAULT,5) ;
- Supporting SET clause to allow the easy insertion of a specific column value
In the INSERT statement, you can specify a specific column name and column value by using SET instead of VALUES clause.
// Inserting some of column values
INSERT INTO insert_tbl SET A=10;
- Supporting the ON DUPLICATE KEY UPDATE clause to allow the insertion of duplicate values into the UNIQUE column
Even when a column value that violates the UNIQUE or PRIMARY KEY condition is inserted by using ON DUPLICATE KEY UPDATE in the INSERT statement, the other column value of the record can be updated to a new value.
// Updating a specified value upon duplicate insertion without any error
INSERT INTO insert_tbl VALUES (DEFAULT, 5) ON DUPLICATE KEY UPDATE A=2;
- Supporting the REPLACE statement, which deletes and inserts a record
Similar to the INSERT statement, REPLACE statement is supported, which can update a column value to a new value even when the column value is inserted, which violates UNIQUE or PRIMARY KEY condition without specifying ON DUPLICATE KEY UPDATE clause.
// Replacing an existing record with a new one upon duplication insertion; the existing record is deleted before it is replaced.
REPLACE INTO insert_tbl VALUES (3, 5);
- Related document: Data Retrieving and Manipulation> INSERT, ON DUPLICATE KEY UPDATE, REPLACE
CUBRIDSUS-3590 Supporting LIMIT clause, which limits the number of target records in the SELECT, DELETE, and UPDATE statements
You can limit the number of records of execution result set in the SELECT statement by using the LIMIT clause. Likewise, you can limit the number of records for operation in the DELETE statement and the UPDATE statement.
// Outputting three records from the 2nd one in the result set
SELECT * FROM a_tbl ORDER BY a LIMIT 2,3;
// Updating the first three records which meet conditions
UPDATE a_tbl SET a=10, b=10 WHERE a IS NULL LIMIT 3;
// Deleting the first one record which meets conditions
DELETE FROM a_tbl WHERE a IS NULL LIMIT 1;
- Related document: Data Retrieval and Manipulation> SELECT> LIMIT clause
CUBRIDSUS-3590 Omitting FROM clause in the SELECT statement
If there is no table to refer to in the SELECT statement, the table can be omitted because syntax is extended.
SELECT 1+1;
SELECT FALSE;
- Related document: Data Retrieval and Manipulation> SELECT> FROM clause
CUBRIDSUS-3590 Extending syntax of GROUP BY … HAVING clause in the SELECT statement
You can specify a column alias instead of column name in the GROUP BY clause, and WITH ROLLUP modifier is supported to help output intermediate aggregation per group and total aggregation. In addition, you can suppress sorting by the GROUP BY clause by specifying ORDER BY NULL statement.
Meanwhile, if the value of ONLY_FULL_GROUP_BY parameter setting is NO, extended syntax is provided to allow the use of a hidden column, which is not specified in the GROUP BY clause, in the SELECT list.
// Specifying ORDER BY NULL not to perform sorting
SELECT dept_no, avg(sales_amount) FROM sales_tbl
GROUP BY dept_no ORDER BY NULL;
// Specify WITH ROLLUP to specify a column alias and output the group aggregation and total aggregation
SELECT dept_no AS a1, name AS a2, avg(sales_amount) AS a3 FROM sales_tbl
GROUP BY a1,a2 WITH ROLLUP;
- Related document: Data Retrieval and Manipulation> SELECT> GROUP BY HAVING clause
CUBRIDSUS-3590 Extending ALTER TABLE syntax and specifying column location to add
- Adding and deleting index and
To help change the index and definition more conveniently by using the ALTER TABLE statement, ADD INDEX clause, DROP INDEX clause, DROP PRIMARY KEY clause, and DROP FOREIGN KEY clause are also supported.
// Adding an index to the ALTER TABLE statement
ALTER TABLE a_tbl ADD INDEX (a ASC), ADD INDEX (b DESC);
// Deleting an index from the ALTER TABLE statement
ALTER TABLE a_tbl DROP INDEX i_a_tbl_a;
// Deleting a primary key from the ALTER TABLE statement
ALTER TABLE a_tbl DROP PRIMARY KEY;
// Deleting a foreign key from the ALTER TABLE statement
ALTER TABLE a_tbl DROP FOREIGN KEY fk_a_tbl_a;
- Specifying a column location to add
When adding a new column by using the ALTER TABLE … ADD COLUMN clause, FIRST or AFTER keyword can be used to specify the column location.
CREATE TABLE a_tbl(a INT, b INT);
INSERT INTO a_tbl VALUES(1, 1),(2, 2);
// Indicating a position of column that is added in the ALTER TABLE statement
ALTER TABLE a_tbl ADD COLUMN c INT DEFAULT 0 AFTER a;
- Related document: Table Definition> ALTER TABLE
CUBRIDSUS-3590 Deleting all records by using the TRUNCATE statement
You can delete all records in a table by using the TRUNCATE statement. Because the records are deleted after all the indexes and s defined in the table are deleted, this is more advantageous than using the DELETE statement.
CREATE TABLE b_tbl(A INT PRIMARY KEY);
INSERT INTO b_tbl VALUES (1),(2),(3);
TRUNCATE b_tbl;
- Related document: Data Retrieval and Manipulation> TRUNCATE
CUBRIDSUS-3590 Adding trigger operation for ON UPDATE and ON DELETE operation when defining a foreign key
SET NULL option is added, which updates a foreign key value to NULL when a primary key value is updated or deleted. Meanwhile, NO ACTION option allowed changing a primary key value but did not provide any operation for a foreign key in the earlier version, but it is modified to provide the same operation as the RESTRICT option. In other words, if NO ACTION or RESTRICT option isdefined, a primary key value which is referred by a foreign key cannot be changed.
ON UPDATE { RESTRICT | NO ACTION | SET NULL }
ON DELETE { CASCADE | RESTRICT | NO ACTION | SET NULL }
- Related document: Table Definition> CREATE TABLE> FOREIGN KEY
CUBRIDSUS-3590 Supporting PREPARED STATEMENT execution at SQL level
PREPARE statement which declares an SQL statement in advance, EXECUTE statement which executes the prepared statement, and DROP PREPARE statement which deletes the prepared statement are supported, so prepared statement feature supported in SQL level. However, prepared statement is not supported in the Query Editor of CUBRID Manager, and you must enter an execution command (;xr or ;run) after writing both PREPARE statement and EXECUTE statement in the CSQL Interpreter.
PREPARE stmt1 FROM 'SELECT POWER(?,2)*PI()';
EXECUTE stmt1 USING 2;
;run
- Related document: Data Retrieval and Manipulation> PREPARED STATEMENT
CUBRIDSUS-3590 Supporting additional parameters to apply extended SQL syntax
Additional parameters are supported to apply extended SQL syntax or standard syntax. You can set up necessary parameters according to the SQL type or coding style to write in an application.
- Related document: Database setup> statement/type parameter
Added parameters | parameter value (default) |
Parameter Value |
ONLY_FULL_GROUP_BY |
NO Applying extended syntax. You can specify a hidden column that is not specified in the GROUP BY clause, in the SELECT column list. |
YES Applying standard SQL syntax. You can only specify a column that is specified in the GROUP BY clause, in the SELECT column list. |
ANSI_QUOTES | YES Using single quotes ( „ ) as a string processing sign |
NO ALSO USING DOUBLE QUOTES ( “ ) AS A STRING PROCESSING SIGN |
PIPES_AS_CONCAT | YES Using double pipe sign ( || ) as string concatenation operator |
NO Using double pipe sign ( || ) as boolean operator OR |
- Related document: operator and function> logical operator
New features – operator and function related
CUBRIDSUS-3591 Extending logical operators
The logical operator for a Boolean operation expression is extended.
Comparison Operator | Remark |
<=> |
NULL Safe equal sign (new) |
!= | CAN BE USED IN THE SAME WAY AS <> |
IS, IS NOT | COMPARISON OPERATION FOR EXPRESSION AND BOOLEAN VALUE (TRUE, FALSE, UNKNOWN, NULL) IN A PREDICATE |
- Related document: operator and function> comparison operator
CUBRIDSUS-3591 Extending comparison operators
Comparison operator is extended.
Logical operator | Remark |
&& |
CAN BE USED IN THE SAME WAY AS AND |
|| | CAN BE USED IN THE SAME WAY AS OR (HOWEVER, PIPES_AS_CONCAT=NO PARAMETER SETTING IS REQUIRED) |
XOR | XOR SUPPORT (NEW) |
! | CAN BE USED IN THE SAME WAY AS NOT |
CUBRIDSUS-3591 Supporting new bitwise operators and bit functions
bitwise operators and bit operation functions are supported by extending bit array literal.
Supporting Items | Remark |
BIT ARRAY LITERAL |
Binary (B?1010?, 0b1010) and hexadecimal (X?a?, 0xa) can be used. |
BITWISE OPERATOR |
&, |, ^, ~, <<, >> support (new) |
BIT FUNCTION | BIT_AND(expr), BIT_OR(expr), BIT_XOR(expr), BIT_COUNT(expr) support (new) |
- Related document: operator and function> bit function and operator
CUBRIDSUS-3591 Extended numerical operation function
- Supporting additional trigonometric functions
You can calculate a radian value by using various trigonometric functions, and also convert the unit of a value into radian by using a conversion function. The following functions are added:
// Returning a radian value with a trigonometric function
COS( x )
COT( x )
SIN( x )
TAN( x )
// Returning a radian value with an inverse trigonometric function
ACOS( x )
ASIN( x )
ATAN(x[, y]), ATAN2(x[, y])
// Converting the x value with radian measure into one with degree measure
DEGRESS( x )
// Converting the x value with degree measure into one with radian measure
RADIANS( x )
// Returning the pi value as a double type
PI()
- Supporting additional mathematical functions
The following functions are added for absolute value, involution value, square root and log operation.
// Returning the power value
POW( x )
// Returning the square root
SQRT( x )
// Returning the values of binary, natural, and common algorithms
LOG2( x ), LN( x ), LOG10( x )
- Extending random functions to enable specifying SEED value
You can specify a seed value in every random function that is supported in CUBRID. In addition, the range of random numbers that can be created has been extended from 0~216 to 0~232.
// Generating a random integer
RAND( [seed] )
RANDOM( [seed] )
// Generating a random real number
DRANDOM( [seed] ) DRAND( [seed] )
- Supporting FORMAT( ) function, which converts a numerical value into a user-specified string format
A function that converts a given value into „#,###,###.######format string is supported and you can specify a digit of a decimal fraction as a parameter.
// Separating a given value with a comma every three digit, and outputting the value to specified place
SELECT FORMAT(12000.123456,4);
======================
'12,000.1235'
- Related document: Numerical operation function> RANDOM/RAND function , FORMAT function , etc.
CUBRIDSUS-3591 Extending date/time functions and various output formats
- Adding a function which provides calculation by specifying the time interval unit for date/time value
The difference between a given date value and a specific time can be calculated by specifying various time interval units, from millisecond to year. The following functions are added:
// Returning a value of a time interval added to a given date with ADDDATE( ) and DATE_ADD( ) function
SELECT ADDDATE('2010-06-20', INTERVAL 60 SECOND), ADDDATE('2010-06-20', 1);
============================================
'12:01:00.000 AM 06/20/2010' '06/21/2010'
// Returning a value of a time interval subtracted from a given date with SUBDATE( ) and DATE_SUB( ) function
SELECT SUBDATE('2010-06-20', INTERVAL 60 SECOND), SUBDATE('2010-06-20', 1);
============================================
'11:59:00.000 PM 06/19/2010' '06/19/2010'
// Returning difference between given values on a daily basis
SELECT DATEDIFF(SYSDATETIME, '2010-06-20');
=========================================
12
- Supporting a function that converts a date/time value into a user-specified string format
A function that converts a date/time value into a user-specified string format is added. In addition, you can specify various output formats by combining new format specifiers which start with '%'.
// Outputting a given value in 'MM/DD/YYYY' string type after conversion
SELECT DATE(NOW());
======================
'07/02/2010'
// Outputting a given value in defined string type after conversion
SELECT DATE_FORMAT('2010-06-20 22:23:00', '%Y %M %W %H:%i');
======================
'2010 June Sunday 22:23'
// Outputting a given value in defined time type after conversion
SELECT TIME_FORMAT('23:59:01', '%H %h %i %s %f');
======================
'23 11 59 01 000'
- Supporting a function that converts a string into a date/time value
A function that converts a string into a date/time value in a specified format is supported. You can convert a string into a date/time value by applying a suitable format specifier to the STR_TO_DATE( ) function. In addition, the TIMESTAMP( ) function is added, which converts a string into a timestamp value which is in millisecond units.
// Outputting strings in defied date/time type after conversion
SELECT STR_TO_DATE('June 20, 2010','%M %d,%Y');
===========================================
06/20/2010
// Converting string into a value with DATETIME type or outputting the result after adding time value
SELECT TIMESTAMP('2010-06-20'), TIMESTAMP('2010-06-20','13:59:59');
=====================================================================
12:00:00.000 AM 06/20/2010 01:59:59.000 PM 06/20/2010
- Supporting a function which gets the current system date/time
The synonym of existing functions which get the current date/time of system is added, and a function which outputs a UNIX timestamp value is added.
// Returning current date
CURDATE(), CURRENT_DATE(), CURRENT_DATE, SYSDATE, SYS_DATE
// Returning current time
CURTIME(), CURRENT_TIME(), CURRENT_TIME, SYSTIME, SYS_TIME
// Returning current timestamp value in seconds
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP, LOCALTIME(), LOCALTIME, LOCALTIMESTAMP(),LOCALTIMESTAMP, SYSTIMESTAMP, SYS_TIMESTAMP
// Returning current timestamp value in milliseconds
CURRENT_DATETIME(), CURRENT_DATETIME, NOW(), SYSDATETIME, SYS_DATETIME
// Returning time interval in seconds since '1970-01-01 00:00:00' UTC with the UNIX_TIMESTAMP() function
SELECT UNIX_TIMESTAMP('2010-06-20')
===============================
1276959600
- Related document: date/time function and operator> ADDDATE function , STR_TO_DATE function , DATE_FORMAT function , etc.
CUBRIDSUS-3591 Extending string functions
- Supporting CONCAT( ) function which horizontally outputs a string that concatenates column values
The CONCAT( ) function that outputs a single string by concatenating column values, and the CONCAT_WS( ) function that outputs values by inserting identifiers between concatenated values are provided.
SELECT CONCAT('CUBRID', '2008' , 'R3.0'), CONCAT_WS('//', 'CUBRID', '2008', 'R3.0');
============================================
'CUBRID2008R3.0' 'CUBRID//2008//R3.0'
- Supporting string comparison and search functions
The MID( ) function that returns a specific length of string from a given location is supported, and the LEFT( ) function or RIGHT( ) function that returns a specific length of string either from left or from right is provided.
SELECT MID('12345abcde', 6, 4), LEFT('12345abcde', 4), RIGHT('12345abcde', 4);
==========================================
'abcd' '1234' 'bcde'
The LOCATE( ) function, which returns a string that is at a given location, is provided.
SELECT LOCATE ('abc', '12345abcde');
===========
6
The FIELD( ) function, where a parameter returns a location by comparing a given string to the string, which is specified by the rest parameter, is also provided.
SELECT FIELD('abc', 'a', 'ab', 'abc', 'abcd');
=========================================
3
The STRCMP( ) function which returns 0, 1, or -1 by comparing given two strings.
SELECT STRCMP('abc', 'abc'), STRCMP('abc', 'ab'), STRCMP('abc', 'abcd');
=====================================================================
0 1 -1
- Supporting additional functions that convert a string
The UCASE( ) function and LCASE( ) function which convert a string into uppercase letters or lowercase letters, respectively, are provided. In addition, the REVERSE( ) function that provides reverse conversion for a string is provided.
SELECT UCASE('CUBrid'), LCASE('CUBrid'), REVERSE('CUBrid');
==================================================================
'CUBRID' 'cubrid' 'dirBUC'
- Related document: string function and operator> CONCAT function, MID function , LOCATE function , REVERSE function, etc.
CUBRIDSUS-3591 Extending information functions
- Supporting a function which returns database related information
An information function that returns connected database name or all database names and database user names is supported.
// Returning the connected database name
SELECT DATABASE(), SCHEMA();
// Returning all database names that are existing on servers
SELECT LIST_DBS();
// Returning database user and host names
SELECT USER(), SYSTEM_USER();
- Supporting a function which returns a default value defined in a column
The DEFAULT( ) function that returns a default value defined in a given column is supported.
CREATE TABLE info_tbl(id INT DEFAULT 0)
INSERT INTO info_tbl VALUES (1);
// Returning a default value defined in a column
SELECT id, DEFAULT(id) FROM info_tbl;
===========================
1 0
- Supporting a function which returns the number of affected rows by a prior query
A function which returns the number of rows that were changed (UPDATE, INSERT, DELETE) by a prior query is supported.
INSERT INTO info_tbl VALUES (4), (5), (6);
// Returning the number of changed rows
SELECT ROW_COUNT();
;xr
===============
3
- Related document: information function> USER function , DEFAULT function , ROW_COUNT function , etc.
CUBRIDSUS-3591 Extending conditional operation functions
- Supporting ISNULL( ) and IFNULL( ) functions for NULL value comparison
A function which compares a specific column value to check if it is NULL and returns a different value according to the comparison result is supported.
CREATE TABLE case_tbl(a INT);
INSERT INTO case_tbl VALUES (1), (2), (NULL);
// 1 is returned inf expr is NULL; 0, otherwise
SELECT ISNULL(a) FROM case_tbl;
// 2 is returned if expr1 is NULL; expr1, otherwise
SELECT IFNULL(a, 'UNKNOWN') FROM case_tbl;
- Supporting IF( ) and NULLIF( ) functions for parameter value comparison
A function that operates true/false or equal comparison and returns a different value according to the comparison result is supported.
// expr2 is returned if expr1 is true; expr3, otherwise
SELECT IF(a=1, 'one', 'other') FROM case_tbl;
//NULL is returned if expr1 is identical to expr2; expr1, otherwise
SELECT NULLIF(a, 1) FROM case_tbl;
- Related document: conditional expression and function> IFNULL function , NULLIF function , IF function , etc.
New features – Others
CUBRIDSUS-3005, 3085 Supporting compactdb utility option which can perform compact database operation during database operation
In the earlier version, the cubrid compactdb utility provides only offline compactdb operation. The client/server mode execution option (-C) is supported to enable the use of the utility when the database process is running. In addition, the detail option (-I, -i, -c, -d, -p), which is available only in client/server mode, is also supported.
- Related document: Database Management> Compact Database
CUBRIDSUS-2923, 2961, 2972 Supporting about 20 functions for PHP API
Fetch related, field information related, and DB information related functions are supported for PHP API.
- Related document: PHP API
Fetch related functions | Field related functions |
DB information related functions |
Other functions |
cubrid_fetch_assoc( ) cubrid_fetch_field( ) cubrid_fetch_lengths( ) cubrid_fetch_object( ) cubrid_fetch_row( ) |
cubrid_field_flags( ) cubrid_field_len( ) cubrid_field_name( ) cubrid_field_seek( ) cubrid_field_table( ) cubrid_field_type( ) cubrid_num_fields( ) |
cubrid_get_client_info( ) cubrid_get_server_info( ) cubrid_get_charset( ) cubrid_get_db_parameter( ) cubrid_list_dbs( ) |
cubrid_data_seek( ) cubrid_free_result( ) cubrid_insert_id( ) cubrid_result( ) cubrid_unbuffered_query( ) cubrid_real_escape_string( ) |
CUBRIDSUS-2829 insert_execution_mode Adding INSERT mode, which can be set up in the insert_execution_mode parameter
The INSERT execution mode is added because of INSERT syntax extension and REPLACE statement support. Therefore, you can set up insert_execution_mode parameter value in the combination of total 5 execution modes. In the earlier version, the INSERT execution mode provided only INSERT_SELECT, INSERT_VALUES, and INSERT_DEFAULT. But, INSERT_REPLACE and INSERT_ON_DUP_KEY_UPDATE are added in this version.
- Related document: Database Server Configuration> insert_execution_mode
Changed and Enhanced Features
CUBRIDSUS-2855 The operation of cci_connect( ) function is changed
The operation of cci_connect( ) and cci_connect_with_url( ) which are database link related functions in the CCI library is changed. In the earlier version, when the function is called, only the connection information is saved. Therefore, you may misunderstand that connection is successful even when invalid connection information is provided. To fix this problem, validity check is performed for connection information when the function is called, and the connection handle is returned only when an actual connection is successful.
- Related document: CCI API> cci_connect , cci_connect_with_url
CUBRIDSUS-3391 The range of format specifier 'HH' or 'Hh32' is changed in the TO_CHAR( ) function
When you do 12-hour format by using 'HH' or 'Hh32' specifier in the TO_CHAR function, time value is displayed from 0~11 in the earlier version. However, it is displayed from 1~12 in this version. Because of this, the result of the corresponding query in an application may be different after upgrade.
- Related document: Data type conversion function and operator> TO_CHAR function
CUBRIDSUS-3213 The interpretation of 2-digit year value is changed
In the earlier version, 2-digit year value 01~99 is interpreted as year 0001~0099. However, 00~69 is interpreted as year 2000~2069 and 70~99 as year 1970~1999 in this version. Because of this, the result of the corresponding query in an application may be different after upgrade.
- Related document: Data type conversion function> date/time Data type
CUBRIDSUS-2703 The result type of POWER( ) function is changed to DOUBLE
In the earlier version, the return type of POWER( ) function was determined by a given parameter. However, the return type is always DOUBLE type, regardless of a parameter type in this version. Because of this, the result of the corresponding query in an application may be different after upgrade. In addition, POW( ) can be used as synonym.
- Related document: Numerical operation function> POWER function
CUBRIDSUS-2421 Preventing a sequential scan from occurring at a specific query whose conditional clause is always FALSE
In a query which executes collection operation in the SELECT statement where GROUP BY clause is included, a sequential scan is executed in a server when a conditional clause is always FALSE in the earlier version. However, in this version the algorithm is fixed so that there must be an immediate return when the conditional clause is always FALSE.
CUBRIDSUS-961, 2890, 3030 Supporting the getPrimaryKeys( ) and getColumnDisplaySize( ) methods of the JDBC driver
The getPrimaryKeys( ) method which sorts and returns the column names that configures a primary key in the CUBRIDDatabaseMetaData interface of CUBRID JDBC driver. And, in the earlier version, getColumnDisplaySize( ) in the ResultSetMetaDate interface returned '0' for an integer-type column with no precision value as well as for the VARCHAR type column. However, it is fixed to return the actual column size.
CUBRIDSUS-2661 Supporting DataAccessException of Spring framework in the JDBC driver
JDBC driver is improved to allow more detail Exception processing by supporting DataAccessException of Spring framework.
CUBRIDSUS-1737 Supporting CUBRID execution script in the Linux environment
The cubrid.init script which enables automatic execution of CUBRID in the Linux environment is provided in the CUBRID/contrib directory. You can copy it into /etc/init.d/ and register it to the service.
CUBRIDSUS-1562, 1628 Fixed to unload some tables specified in the input file even though there is no newline character
In the previous version, the unload operation would be executed normally only if a newline character (\n) was included at the end of the input file where the table list is stored when the –i option of the cubrid unloaddb utility is used to unload only some of the tables in the database. This has been fixed. The
operation is also executed normally when there is a newline character at the end, or when the newline character is used as an identifier in the middle of the line.
In addition, in the previous version, the parameter would not be applied if the enter key was not entered after one was entered at the last line of the configuration file (*.conf) in a Windows environment. This has been fixed.
CUBRIDSUS-1216 Supporting a feature to reset a RW mode broker automatically after failback of the master server in HA environment
In the previous version, some CAS processes would be running to maintain the connection with the slave server until a write operation was requested or a command that initializes the broker connection was entered after the failback of the master server in HA environment. Revision has been made so that when the master server process restarts, a broker in RW mode automatically initializes the connection state and then connection is made with the master server immediately after the transaction being processed by the CAS process is terminated.
CUBRIDSUS-1970 Fixed to execute an index scan in hierarchy query
In the previous version, only sequential scan was executed even when the index was defined in the target table of the hierarchy query statement. This has been fixed so that the index scan is executed.
Fixed errors
CUBRIDSUS-3194,3399,3434,3435 Fixed an error in which CPU use was increased by the applylogdb process in the HA environment
The CPU usage during the applylogdb process was continuously increased because of an error in an algorithm used to process a NULL page when reflecting a replication log to a slave DB in the HA environment. This error has been fixed.
In addition, replication is stopped when CPU use is increased because of the error in which the applylogdb process repeatedly reflected the log of a specific period. This error has been fixed.
CUBRIDSUS-3196, 3489 Fixed an error in which the applylogdb process was restarted repeatedly and replication was not performed in the HA environment
There was an error that caused replication to be stopped when the applylogdb process was restarted repeatedly, because there was a mismatch between the replication log information of the master DB and the page information which the applylogdb process of slave DB tried to reflect in the HA environment. This error has been fixed. Such an error may occur in an environment where the database is backed up frequently even though the write operation is rarely executed.
CUBRIDSUS-3106 Fixed an error that caused replication to be stopped because a specific commit log was lost
Replication is stopped because a transaction commit log is lost because of an error in which unexpected EOL (End-Of-Log) was recorded into a specific archive log in the HA environment. This error has been fixed.
CUBRIDSUS-2831 Fixed an error that caused a task to be stopped when executing the backupdb utility in the client mode after configuring the HA environment
When executing the cubrid backupdb utility in the client mode (-C option) to back up a new DB created after the HA environment is configured, the backup task is stopped. The error is fixed.
CUBRIDSUS-2872 Fixed an error in which there was a CUBRID heartbeat node status information mismatch in the HA environment
When configuring HA by using the CUBRID heartbeat, all the nodes configured as HA are recognized as master because of a heartbeat message receiving an algorithm error. The error is fixed.
- Error version: CUBRID 2008 R2.2
CUBRIDSUS-2120 Fixed an error that caused data mismatch when executing INSERT to a table where a foreign key is defined in the replication/HA environment
In the previous version, data mismatch might occur depending on the commit order of transaction A and B if a table where primary and foreign key referential constraints exist in a replication or HA environment and if transaction A and B both execute INSERT into primary and foreign key tables. This has been fixed.
CUBRIDSUS-3295, 3191 Fixed an error that caused a data mismatch in the replication environment
If a master DB executes query_cancel in the CAS process during transaction and rolls back the corresponding operation, a replication log is created for the rolled-back operation, and causing a data mismatch between the master DB and the slave DB. The error is fixed.
CUBRIDSUS-3135 Fixed an error that caused the size of a replication log to be increased abnormally in the replication environment
In a specific situation when there was a replication delay in a master DB, the size of a master DB replication log was increased abnormally even after the replication log is copied into a slave DB. The error is fixed.
CUBRIDSUS-2638 Fixed an error that caused a query to not be executed normally after restoring database in a specific situation
If a server process is terminated before commit and also a log about the added volume that was sent to a disk after backup is executed and a new volume is added by transaction A, there is mismatch between volume information (volume info) and the actual volume file. If restoring the target database was executed in this situation, the added volume would not be restored in the earlier version. Therefore, if you executed a query to the target database, the Internal Error would be displayed. The error is fixed.
CUBRIDSUS-3083 Fixed an error in which duplicate values were inserted into the UNIQUE KEY column
If you change the column values of multiple rows by using a single UPDATE statement, duplicate values would be saved into columns where the UNIQUE constraint is defined. This error has been fixed.
- Error version: CUBRID 2008 R2.2
CUBRIDSUS-2127 Fixed a problem in which OR operation is not applicable to a specific index key value in the join predicate
If there was empty result for the left predicate which is connected by OR in a query statement where more than two tables (where indexes are defined) are joined, an incorrect query result was returned because the right predicate was not considered. This error has been fixed.
CUBRIDSUS-2062 Fixed query result error of outer join
In the previous version, executing left and right outer join queries produced different result due to malfunction of outer join query operation. This has been fixed.
CUBRIDSUS-423 Fixed an error of the column name not being output in the inline-view type query results
In the previous version, there was an error in which oid value stored in the column was displayed normally but the column name was displayed as a blank when selecting the oid value from a table with an inline-view type query. This has been fixed.
SELECT * FROM (SELECT tbl_1 FROM tbl_1) A;
CUBRIDSUS-3337 Fixed a query result error that occurs when a correlated sub-query that has ORDER BY clause is specified in the SELECT list
If more than two correlated sub-queries with the ORDER BY clause were specified in the SELECT list, there was an incorrect query result because of an error with the algorithm which rewrites the sub-query internally. This error has been fixed.
// Query type with which an error is reproduced
SELECT
(SELECT nvl(id2,id1) FROM t1 WHERE id = t_o.id ORDER BY id2, id1 FOR ORDERBY_NUM() = 1) AS col1,
(SELECT count(val) FROM t2 WHERE id = t_o.id and val> 0) AS col2
FROM tbl_out t_o WHERE rownum < 3;
CUBRIDSUS-2742 Fixed a query result error that occurs when a subquery with FOR ORDERBY_NUM() is included
If a sub-query with a FOR ORDERBY_NUM() clause was specified in the SELECT list, there was an incorrect query result because of an error due to an algorithm that rewrites the sub-query internally. This error has been fixed.
// Query type with which an error is reproduced
SELECT
(SELECT a FROM xoo ORDER BY b ASC, a ASC for orderby_num() = 1 ) c1,
b
FROM xoo x ORDER BY order_no ASC;
CUBRIDSUS-2530 Fixed level value error in a specific hierarchy query statement
When a new record was inserted in a space where another record has been deleted, an incorrect level value was displayed as the execution result of a hierarchy query statement. This error has been fixed. However, because this error is caused by heap space reuse, it will not occur if you set the dont_resue_heap parameter value to "yes."
CUBRIDSUS-2149 Fixed an error in which a reference value is not updated when defining a foreign key of a ON CACHE OBJECT option on an index column
An error in which a referencing value of a column is not updated when creating a foreign key of an ON CACHE OBJECT option on the column that already has an index has been fixed.
CUBRIDSUS-2603 Fixed the START WITH option error of CREATE SERIAL and ALTER SERIAL statements
In the CREATE SERIALstatement or ALTER SERIALstatement, there was no error only when the START WITH option was specified first. If it was specified in the middle, there would be an error. Now, normal operation is guaranteed regardless of the option location.
CUBRIDSUS-3003 Fixed an error in which the sub-query result is not sorted when one with an ORDER BY clause is in SEQUENCE type
In the previous version, there was an error in which that the sub-query result would not be sorted by the ORDER BY clause when expressing a sub-query with the ORDER BY clause as a SEQUENCE or LIST type.
CUBRIDSUS-3299 Fixed an error that created the column type incorrectly if the column name was not specified in the CREATE VIEW statement
An error of a column type that was created automatically if the column name was not specified in the SELECT statement when creating a VIEW has been fixed.
// It is created with VARCHAR(1073741823) type in earlier versions, and it is created with VARCHAR(3) type in new version
CREATE VIEW vx AS SELECT 'aaa' a FROM db_root;
// A column type is none in earlier version, and a column type is INTEGER in new version
CREATE VIEW AS SELECT 1 + 1 a FROM db_root;
CUBRIDSUS-3203, 3224, 3246 Fixed an error that occurs during explicit type casting using the CAST function
The error in which .5 was not rounded up when explicitly type coercing from a NUMERIC value to BIGINT has been fixed. The error in which a blank was inserted at the end of the string when a DATETIME type is cast to a string type has been fixed.
An error in which casting would produce an incorrect value if there was a blank before or after the string when casting one to a numeric type has been also fixed.
CUBRIDSUS-440 Fixed an error that the trigger information could not be retrieved in the system catalog view if a table with a trigger was dropped
In the previous version, if you deleted the table in which the trigger was defined but did not drop the trigger manually, you could retrieve the trigger from the system catalog table db_trigger, but not from the system catalog view db_trig. This error has been fixed, so now you can retrieve information on a trigger that has not been dropped in a system catalog view as well.
CUBRIDSUS-1559 Fixed an error in which a COMMIT or ROLLBACK event type trigger was not unloaded
In the previous version, if a COMMIT or ROLLBACK event type trigger for which an event target table does not exist was defined, the DB unload operation was executed omitting the trigger. This error has been fixed.
CUBRIDSUS-2774 Fixed malfunction of the broker_log_top utility and changed the broker log format
An error in which broker_log_top, broker_log_converter and broker_log_runner utilities did not run if a BIT type value was bound in an application has been fixed and the broker log format has been changed. For this reason, the broker log created in the CUBRID 2008 R3.0 version is not compatible with that in the lower version. Therefore, you cannot run the above broker log-related utilities for R1.x and R2.x version broker logs. Likewise, you cannot run R1.x and R2.x version broker log-related utilities for a R3.0 version broker log.
CUBRIDSUS-2886 Fixed an error in which connection is failed where excessive server connections are requested through JDBC
In an environment where tens of threads connect to a server through the JDBC driver and execute INSERT, the following error message would be displayed and connection would fail. This error has been fixed.
- JDBC error message
cubrid.jdbc.driver.CUBRIDException: Failed to connect to database server, 'address', on the following host(s): localhost
at cubrid.jdbc.driver.CUBRIDConnection.prepare(CUBRIDConnection.java:676)
at cubrid.jdbc.driver.CUBRIDConnection.prepare(CUBRIDConnection.java:917)
at cubrid.jdbc.driver.CUBRIDConnection.prepareStatement(CUBRIDConnection.java:137)
at worker.addr_insert(foo_address.java:170)
at worker.run(foo_address.java:44)
- Broker error log
Time: 04/29/10 19:36:10.258 - ERROR *** ERROR CODE = -353, Tran = -1, EID = 1
Cannot make connection to master server.... Resource temporarily unavailable
Time: 04/29/10 19:36:10.258 - ERROR *** ERROR CODE = -677, Tran = -1, EID = 2
Failed to connect to database server, 'address', on the following host(s): localhost
- Error version: CUBRID 2008 R2.0 Patch4, R2.2
CUBRIDSUS-3367, 3427 Fixed ResultSet return error and cci_cursor_update( ) operation error in the Java Stored Procedure
In the previous version, there was a problem in that the operation would not work normally with the missing or invalid position of the bind variable provided. A message when accessing a result set is returned through JSP in a JDBC application that uses Java Stored Procedures. Because of this error, the cci_cursor_update( ) function also did not operate normally. This error has been fixed.
CUBRIDSUS-3137 Fixed getString( ) output value error of the JDBC driver for DATETIME type values
In the previous version, a millisecond value was not output when outputting a DATETIME type value by calling the getString( ) method in a JDBC driver. This error has been fixed.
CUBRIDSUS-3457 Fixed malfunction of the cci_col_get() for collection type columns
In the previous version, if the cci_col_get( ) function is used for a collection type column, the application terminates abnormally or an incorrect result is returned. This error has been fixed.
CUBRIDSUS-2225 Fixed the cubrid backupdb –sp option to work normally even when tab is used as a separator in the databases.txt
When executing the cubrid backupdb utility in the replication environment, specify –r option and –sp option together for safe deletion of an archive log after backup. In the earlier version, if the DB names and DB paths were separated by a tab instead of a space in the databases.txt file, the restoring script (repl_safe_page) specified as the parameter of -sp option could not get DB path information from the file. Therefore, the option is not used for backup. In this version, the option is used normally, even when tab is used as a separator.
CUBRIDSUS-2221 Fixed to validate connection requests only allowed by the cub_master process
In the previous version, there was an error in which an invalid connection request would not be detected when an external process requests a connection to a port being used by the cub_master process. To cope with the stability problem that would result due to this, the protocol of the cub_master process has been improved so that invalid connection requests are terminated immediately.
CUBRIDSUS-1199 Fixed an output error of specific values during broker status monitoring
In the previous version, when an arrow key was entered while monitoring the broker status information regularly by executing the cubrid broker status –s 5 <broker_name> command, QPS(Query per Second) and LQS(Long Query per Second) values would be output as a negative number.
CUBRIDSUS-2019 Fixed an error that the process woud not be restarted if the memory size of the CAS process exceeded 2G
In the previous version, if the memory size of the CAS process exceeded 2G, the PSIZE value, one of the monitoring items would be output as a negative number, which cause the process to not restart. This error has been fixed.
CUBRIDSUS-2047 Fixed an error in which the size of the temporary archive log increases infinitely if the setting is media_failure_support = no
The background_archiving parameter is one that creates a temporary archive log only when media_failure_support = yes. However, in the previous version, the background_archiving parameter would be applied even when media_failure_support = no, which would cause a problem in that the size of the temporary archive log file (lgar_t) increased infinitely. This error has been fixed.
CUBRIDSUS-343 Fixed an error in reloading previous queries with more than 50 lines in the CSQL
In the previous version, when you executed a query with more than 50 lines in the CSQL Interpreter, and entered the Up arrow button to reload the previous query, the server process would terminate. This error has been fixed.
CUBRIDSUS-600 Fixed an error that occurs when executing the CSQL session command ;edit in a Windows Vista environment
In the previous version, the ERROR: No such file or directory message would be displayed when you run the CSQL session command ;edit in a Windows Vista environment. This error has been fixed.
CUBRIDSUS-1732, 3359 Fixed CUBRID installation error in a Windows 7 environment
Revision has been made so that a message window requesting the installation of the Microsoft Visual C++ 2008 Redistributable Package is not displayed while installing CUBRID in a Windows 7 environment. An error, which is installation is stopped as displaying an alert message of "ctrlService.exe is not running", has been fixed.
CUBRIDSUS-471 Fixed an error in which the results of the execution of cubrid service stop/start commands are not reflected in the CUBRID tray in a Windows environment
In the previous version, if you executed a CUBRID service command such as cubrid service start/stop/restart in a Windows command lines, such command would not be reflected in the Windows service so that the status of the CUBRID tray does not change. This error has been fixed so that now the CUBRID service command entered is reflected normally in the Windows service.
4. What's new in CUBRID Manager 2008 R3.0 version
New Features
Extended HA features
By using the CUBRID Manager, you can execute DML operations against a slave DB in HA environment and back it up as well. In the previous version, if a failover occurred due to the master server's fault, the CUBRID Manager would perform switchover to a slave server and the database operations would be reflected to the slave server regardless of the user's intention. This error has been fixed.
New keywords and UI menu support for added statements
To enable the execution of new operators, functions and extended statements in the Query Editor of CUBRID Manager, new keywords and UI menus are supported. However, the UI menus are supported only for some specific functions related to schema change (TRUNCATE TABLE, CREATE TABLE LIKE), and the menus are enabled only when you connect to CUBRID 2008 R3.0 or higher version.
- Adding [TRUNCATE TABLE] and [Create Table Like] menu
- Adding SET NULL foreign key option in the Create/Edit Table window
When setting up a foreign key in the Create/Edit Table window, you can set up the SET NULL option as a trigger operation for the update or deletion of a primary key.
- Related document: CUBRID Manager> database> table
Supporting user configuration in [Add Status Monitor]
In the [Status Monitor> Add Status Monitor] menu, you can set up chart title, figure shape, monitoring item, etc. and you can create the chart template you want.
- Related document: CUBRID Manager> Status Monitor
Changed and Enhanced Features
Supporting configuration of remote broker host information when executing [New Query Editor]
When you select [Tool> New Query Editor] or [Toolbar> New Query Editor Icon], the database login window is displayed. You can now set up both database and broker information in this window, so entering Query Editor execution information becomes more convenient. However, the broker port can be changed only when the manager user account is admin. The default character set of a target database to execute a query is displayed. If you do not set up any character set, the character set of a system where CUBRID Manager is running is applied.
Supporting user login function to [Query Automation]
When executing a specific query automatically by using [Job Automation> Query automation], the database user account and password are checked for execution authorization just before the query is executed. If user information is incorrect, the query is not executed automatically.
Supporting equal sign to configure the parameter value of cm.conf
In the earlier version, only a space could be used as an identifier between parameter name and its value when configuring parameters in cm.conf. However, equal sign (“=”) can also be used in this version.
Supporting an option to restore databases into a specific path
When restoring database in the [Restore Database] window, you can use [Restore Path] option to specify a directory where the restored database can be saved.
Fixed errors
Fixed an error in which all the tables are unloaded when executing [Unload database]
Even when you wanted to unload only some tables you selected by using the [Unload database] function, all of the tables would be unloaded. This error has been fixed.
Fixed an error in which warning window for some query errors would be displayed repeatedly for subsequent queries
In the Query Editor, if multiple query statements are executed at the same time and there are errors with some queries, the warning window appears to ask if you want to continue the execution of the rest query statements. In the earlier version, the warning window would appear repeatedly for subsequent query errors even when the user selected [Do not ask next time]. This error has been fixed. Therefore, a query result is displayed only for a normal query statement excluding query statements which have an error.
Fixed an error in which you cannot stop retrieving when the retrieving result exceeds 5,000 in the Query Editor
The Query Editor retrieves records in the unit of 5,000. If the retrieved records exceed 5,000, a warning window appears that allows you to select "continue" or "stop." In the earlier version, all the result records would be displayed even when you selected [No]. This error has been fixed.
Fixed an error in which the CUBRID Manager would not terminate in a specific situation
If you use the CUBRID Manager for a long time, the manager stop button () would stop working in the earlier version. This error has been fixed.
Fixed an error in which query result would be returned abnormally in the Query Editor in a JDK 1.5 environment
An error in which the java/sql/NClob not found message is displayed when executing a query by using the Query Manager's Query Editor in a JDK 1.5 environment has been fixed.
5. Caution
CUBRIDSUS-3217 Specifying a question mark when entering connection information as a URL string in JDBC
When entering connection information as a URL string in JDBC, property information was applied even if you did not enter a question mark (?) in the earlier version. However, you must specify a question mark depending on syntax in this version. In addition, you must specify colon (:) even if there is no username or password in the connection information.
URL=jdbc:CUBRID:127.0.0.1:31000:db1:::althosts=127.0.0.2:31000,127.0.0.3:31000 –incorrect
URL=jdbc:CUBRID:127.0.0.1:31000:db1:::?althosts=127.0.0.2:31000,127.0.0.3:31000 –correct
CUBRIDSUS-3564 Changed a protocol between the master and server processes and different port number must be configured if two versions are running at the same time
Due to the change of the communication protocol between the master and server processes, a master process of the CUBRID 2008 R3.0 version cannot communicate with one of a lower version and vice versa. Therefore, if you run two versions of CUBRID at the same time by adding a new version in an environment where a lower version has already been installed, you should modify the cubrid_port_id parameter in cubrid.conf so that different ports are used for each version.
CUBRIDSUS-2828 @ cannot be included in the database name
If @ is included in a database name, it can be interpreted that a host name has been specified. To prevent this, revision has been made so that @ cannot be included in a database name when running cubrid createdb, cubrid renamedb and cubrid copydb utilities.
CUBRIDSUS-3267 An empty space cannot be included in a directory path in a Windows environment
In the Windows environment, if the directory path where the CUBRID is to be installed has an empty space, installation may not be successful. An empty space cannot be included in the target directory paths of DB unload/load/backup operations.
CUBRIDSUS-3553 An error related manager server process occurs when building CUBRID source only
When installing CUBRID by building the source, the user must build and install CUBRID and CUBRID Manager, respectively. If you check-out the CUBRID source only and run CUBRID service or CUBRID Manager, the cubrid manager server is not installed error occurs.
Caution when selecting the [Using automatic volume addition] option and creating a database in CUBRID Manager
The [Using automatic volume addition] option automatically adds a volume when DB volume goes below the user-defined “Out of Space warning rate". If this option is used, the cubrid spacedb utility is periodically (default: 5 sec.) executed to monitor free space, and the size of an error log (



