User’s Guide c-treeSQL Server Operations and Utilities Guide User’s Guide c-treeSQL Server Operations and Utilities Guide Copyright Notice Copyright © 1992-2016 FairCom Corporation. All rights reserved. No part of this publication may be stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise without the prior written permission of FairCom Corporation. Printed in the United States of America. Information in this document is subject to change without notice. Trademarks c-treeACE, c-treeRTG, c-treeAMS, c-tree Plus, c-tree, r-tree, FairCom and FairCom’s circular disc logo are trademarks of FairCom, registered in the United States and other countries. The following are third-party trademarks: AMD and AMD Opteron are trademarks of Advanced Micro Devices, Inc. Macintosh, Mac, Mac OS, and Xcode are trademarks of Apple Inc., registered in the U.S. and other countries. Embarcadero, the Embarcadero Technologies logos and all other Embarcadero Technologies product or service names are trademarks, service marks, and/or registered trademarks of Embarcadero Technologies, Inc. and are protected by the laws of the United States and other countries. Business Objects and the Business Objects logo, BusinessObjects, Crystal Reports, Crystal Decisions, Web Intelligence, Xcelsius, and other Business Objects products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of Business Objects Software Ltd. Business Objects is an SAP company. HP and HP-UX are registered trademarks of the Hewlett-Packard Company. AIX, IBM, POWER6, POWER7, and pSeries are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. Intel, Intel Core, Itanium, Pentium and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. Microsoft, the .NET logo, the Windows logo, Access, Excel, SQL Server, Visual Basic, Visual C++, Visual C#, Visual Studio, Windows, Windows Server, and Windows Vista are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Novell and SUSE are registered trademarks of Novell, Inc. in the United States and other countries. Oracle and Java are registered trademarks of Oracle and/or its affiliates. QNX and Neutrino are registered trademarks of QNX Software Systems Ltd. in certain jurisdictions. CentOS, Red Hat, and the Shadow Man logo are registered trademarks of Red Hat, Inc. in the United States and other countries, used with permission. UNIX and UnixWare are registered trademarks of The Open Group in the United States and other countries. Linux is a trademark of Linus Torvalds in the United States, other countries, or both. Python and PyCon are trademarks or registered trademarks of the Python Software Foundation. OpenServer is a trademark or registered trademark of Xinuos, Inc. in the U.S.A. and other countries. Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the United States and other countries. Btrieve is a registered trademark of Actian Corporation. ACUCOBOL-GT, MICRO FOCUS, RM/COBOL, and Visual COBOL are trademarks or registered trademarks of Micro Focus (IP) Limited or its subsidiaries in the United Kingdom, United States and other countries. isCOBOL and Veryant are trademarks or registered trademarks of Veryant in the United States and other countries. All other trademarks, trade names, company names, product names, and registered trademarks are the property of their respective holders. Portions Copyright © 1991-2016 Unicode, Inc. All rights reserved. Portions Copyright © 1998-2016 The OpenSSL Project. All rights reserved. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/). Portions Copyright © 1995-1998 Eric Young (eay@cryptsoft.com). All rights reserved. This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com). Portions © 1987-2016 Dharma Systems, Inc. All rights reserved. This software or web site utilizes or contains material that is © 1994-2007 DUNDAS DATA VISUALIZATION, INC. and its licensors, all rights reserved. Portions Copyright © 1995-2013 Jean-loup Gailly and Mark Adler. 7/20/2016 Contents 1. c-treeACE SQL Operations and Utilities Guide ................................................ 1 2. Installation ........................................................................................................... 3 2.1 2.2 Up and Running with the c-treeACE Database Engine ......................................... 4 Location ................................................................................................................. 4 License Object .................................................................................................................... 4 2.3 2.4 2.5 2.6 Starting c-treeACE ................................................................................................ 5 Stopping c-treeACE ............................................................................................... 6 Links to c-treeACE Manuals .................................................................................. 7 c-treeACE SQL Operational Files ......................................................................... 7 3. c-treeACE SQL Features ..................................................................................... 8 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 Advanced Encryption for c-treeACE SQL Tables .................................................. 8 Default HUGE File Tables with c-treeACE SQL .................................................... 9 PREIMAGE Tables in c-treeACE SQL .................................................................. 9 Shared Memory Connections for c-treeACE SQL Clients on Windows .............. 10 Server-Side Connection Pooling ......................................................................... 10 Supported Transaction Isolation Levels .............................................................. 10 Case Insensitive Search Options for c-treeACE SQL LONG Field Types........... 12 Query Timeout Option ......................................................................................... 12 Logging c-treeACE SQL Query Times ................................................................ 13 Built-in Stored Procedure to Switch Transaction Mode ....................................... 14 4. c-treeACE SQL Options .................................................................................... 15 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 Environment Variables ........................................................................................ 15 Default Date Handling ......................................................................................... 15 Case-Sensitivity Options ..................................................................................... 16 Optimizer Configuration Options ......................................................................... 17 c-treeDB ROWID Options ................................................................................... 17 Automatic Database Conversion Options............................................................ 18 Template Database __Master.dbs Handling ....................................................... 18 SQL_DEBUG Options ......................................................................................... 18 Advanced c-treeACE SQL Logging ..................................................................... 19 Memory Manager (MM) System for Temporary Storage ..................................... 20 5. c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions ............................................................................. 22 Run-Time Settings for Java Stored Procedure Support ...................................... 22 5.1 www.faircom.com All Rights Reserved iv c-treeACE SQL Operations and Utilities Guide 5.2 5.3 Debugging Java Stored Procedures.................................................................... 23 Advanced JVM Configuration .............................................................................. 26 6. c-treeACE SQL Utilities ..................................................................................... 29 6.1 6.2 6.3 6.4 ctpath - Change Internal Database Paths ........................................................... 29 ctsqlbigint - c-treeACE SQL Big Integer Fix Utility............................................... 29 ctsqlcdb - c-treeACE SQL Database Maintenance Utility.................................... 30 ctsqlimp - c-treeACE SQL Import Utility .............................................................. 30 ctsqlimp Usage.................................................................................................................. 30 Specifying primary keys from imported indexes ............................................................... 32 Check for Max Number of Indices/Segments ................................................................... 32 Allow linking SQL indices with rightmost segment(s) on hidden field(s)........................... 32 Mapping unsigned integers with c-treeACE SQL ............................................................. 32 Check for Invalid Characters in Field Names ................................................................... 33 Support for Importing Table with an Alternative Name ..................................................... 33 Null Fields and Field Default Values Considerations ........................................................ 33 ctsqlimp Import Indices with Segment on String Field Missing Last Byte......................... 34 Import Duplicate Filenames into c-treeACE SQL ............................................................. 34 6.5 6.6 6.7 6.8 6.9 ctsqlutl - c-treeACE SQL Table Maintenance Utility ............................................ 35 ctsqlmdd - c-treeACE SQL Merge Database Utility ............................................. 35 cttrnmod - Change Transaction Mode Utility ....................................................... 37 fkverify ................................................................................................................. 40 sqlverify ............................................................................................................... 40 7. Combining c-treeACE SQL with ISAM ............................................................. 42 7.1 Accessing c-treeACE SQL Files from ISAM Applications ................................... 42 Defining a Table Using c-treeACE SQL ............................................................................ 42 Examining Resulting File Specifications ........................................................................... 42 7.2 Using Existing ISAM Data with c-treeACE SQL .................................................. 45 Table Definition Requirements.......................................................................................... 45 Index Definition Requirements .......................................................................................... 46 Adding DODAs to Existing Files ....................................................................................... 46 7.3 Mapping of c-tree to c-treeACE SQL Types ........................................................ 47 8. c-treeACE SQL Types SDK ............................................................................... 50 8.1 Overview of the c-treeACE SQL Types SDK....................................................... 50 An example field conversion ............................................................................................. 50 8.2 c-treeACE SQL with Callbacks ............................................................................ 52 The Server Architecture .................................................................................................... 53 c-treeACE SQL Callback Dynamic Library ....................................................................... 53 c-treeACE SQL Callback Configuration File ..................................................................... 55 How to specify MYTIME field translation .......................................................................... 57 Specifying the configuration file location ........................................................................... 58 www.faircom.com All Rights Reserved v c-treeACE SQL Operations and Utilities Guide The File Definition Generating Utility ................................................................................ 58 8.3 Importing Tables Into c-treeACE SQL ................................................................. 59 Import Utility Callback Architecture ................................................................................... 60 Import Utility Callback Configuration File .......................................................................... 60 Building the callback libraries............................................................................................ 60 8.4 Which c-treeACE and c-treeDB Functions are Safe?.......................................... 63 9. Migrating to c-treeACE SQL ............................................................................. 65 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Migration from c-tree ODBC to c-treeACE SQL ODBC ....................................... 65 Overview of the c-treeACE SQL Migration SDK.................................................. 65 Migration .............................................................................................................. 66 Key Steps ............................................................................................................ 66 Important Observations ....................................................................................... 67 Customization ...................................................................................................... 67 Migration Callbacks ............................................................................................. 68 10. c-treeACE SQL Configuration .......................................................................... 71 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 10.12 10.13 10.14 10.15 10.16 10.17 10.18 10.19 10.20 10.21 10.22 10.23 10.24 c-treeACE SQL Configuration Keywords............................................................. 71 MAX_SQL_ISOLATION_LEVEL ......................................................................... 72 SQL_CONNECT_TIMEOUT_SEC ...................................................................... 73 SQL_DATABASE ................................................................................................ 74 SQL_IDLE_WAKE ............................................................................................... 75 SQL_KEEP_OPEN_TABLES .............................................................................. 76 SQL_LOGFILE .................................................................................................... 77 SQL_MIN_CARD ................................................................................................ 78 SQL_PARTOPEN_COST ................................................................................... 79 SQL_PORT ......................................................................................................... 80 SQL_TRACE_CTREE_ERROR .......................................................................... 81 SETENV CLASSPATH ........................................................................................ 82 SETENV DEBUG_JVM ....................................................................................... 83 SETENV DEBUG_JVM_PORT ........................................................................... 84 SETENV DH_CACHED_STATEMENTS............................................................. 85 SETENV DH_DO_AHEAD .................................................................................. 86 SETENV DH_DYN_CACHED_STATEMENTS ................................................... 87 SETENV DH_ENABLE_POOL ............................................................................ 88 SETENV DH_JVM_OPTION_STRINGS ............................................................. 89 SETENV DH_ENABLE_POOL ............................................................................ 90 SETENV DH_OPT_OR_CARD ........................................................................... 91 SETENV DH_POOL_SIZE .................................................................................. 92 SETENV DH_REBUILD_SEL_CUTOFF ............................................................. 93 SETENV DH_THREAD_STACK_SZ_KB ............................................................ 94 www.faircom.com All Rights Reserved vi c-treeACE SQL Operations and Utilities Guide 10.25 10.26 10.27 10.28 10.29 10.30 10.31 10.32 10.33 10.34 10.35 10.36 10.37 10.38 10.39 10.40 10.41 10.42 10.43 10.44 10.45 10.46 10.47 10.48 10.49 10.50 10.51 10.52 10.53 10.54 10.55 10.56 10.57 10.58 10.59 10.60 10.61 10.62 10.63 10.64 10.65 SETENV DH_SVR_DA_BUFFER ....................................................................... 95 SETENV JAVA_COMPILER ............................................................................... 96 SETENV JVM_LIB .............................................................................................. 97 SETENV TPESQLDBG ....................................................................................... 98 SETENV TPE_DFLT_DATE ............................................................................... 99 SETENV TPE_MM_CACHESIZE...................................................................... 100 SETENV TPE_MM_COMPARE_OVHD............................................................ 101 SETENV TPE_MM_INSERT_OVHD................................................................. 102 SETENV TPE_MM_SWAPSIZE........................................................................ 103 SQL_OPTION CHECK_HEAP .......................................................................... 104 SQL_OPTION CTSTRING_VARCHAR............................................................. 105 SQL_OPTION CREATE_WITH_ROWID .......................................................... 106 SQL_OPTION CREATE_WITH_RECBYT ........................................................ 107 SQL_OPTION CTDB_ROWID .......................................................................... 108 SQL_OPTION DB_CASE_INSENSITIVE ......................................................... 109 SQL_OPTION FORCE_TEMPLATE_DB .......................................................... 110 SQL_OPTION HM_ACTIVE .............................................................................. 111 SQL_OPTION LOAD_CALLBACK_LIB............................................................. 112 SQL_OPTION NO_AUTO_ABORT ................................................................... 113 SQL_OPTION NO_BINARY_PAD .................................................................... 114 SQL_OPTION NO_CARDINALITY ................................................................... 115 SQL_OPTION NO_COSTS ............................................................................... 116 SQL_OPTION NO_CRYPT_SYSTBL ............................................................... 117 SQL_OPTION NO_DB_CONVERSION ............................................................ 118 SQL_OPTION NO_DUP_IDXNAME ................................................................. 119 SQL_OPTION NO_HUGEFILE ......................................................................... 120 SQL_OPTION NO_PUSHDOWN ...................................................................... 121 SQL_OPTION NO_REVERSE_INDEX ............................................................. 122 SQL_OPTION NO_SELECTIVITY .................................................................... 123 SQL_OPTION NO_SHARED_MEMORY .......................................................... 124 SQL_OPTION NO_SYSSUPERFILE ................................................................ 125 SQL_OPTION OWNER_FILE_NAMES ............................................................ 126 SQL_OPTION PAD_WITH_NULL ..................................................................... 127 SQL_OPTION PARTIAL_SEG .......................................................................... 128 SQL_OPTION PRESERVE_CURSOR_FREE_LOCK ...................................... 129 SQL_OPTION SUPPRESS_JVM_LOAD_ERR ................................................ 130 SQL_OPTION USE_MM ................................................................................... 131 SQL_DEBUG ABORT_ON_PANIC ................................................................... 132 SQL_DEBUG ERROR_INFO ............................................................................ 133 SQL_DEBUG INDEX ........................................................................................ 134 SQL_DEBUG INDEX_SEL ................................................................................ 135 www.faircom.com All Rights Reserved vii c-treeACE SQL Operations and Utilities Guide 10.66 10.67 10.68 10.69 10.70 10.71 10.72 SQL_DEBUG INDEX_DEF_SEL....................................................................... 136 SQL_DEBUG INDEX_INFO .............................................................................. 137 SQL_DEBUG LOG_STUBS_HIGH ................................................................... 138 SQL_DEBUG LOG_STUBS_MED .................................................................... 139 SQL_DEBUG LOG_STUBS_LOW .................................................................... 140 SQL_DEBUG LOG_STMT_TIMES ................................................................... 141 SQL_DEBUG LOG_STMT_TIMES_FETCH ..................................................... 142 11. c-treeACE SQL Built-in Stored Procedures .................................................. 143 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 11.12 11.13 11.14 11.15 11.16 11.17 11.18 11.19 11.20 11.21 11.22 11.23 11.24 11.25 11.26 11.27 11.28 11.29 11.30 11.31 11.32 fc_add_db( ) ...................................................................................................... 144 fc_check_file_tran_state( ) ................................................................................ 145 fc_create_db( ) .................................................................................................. 146 fc_create_user( ) ............................................................................................... 147 fc_get_cachestats() ........................................................................................... 148 fc_get_connstats() ............................................................................................. 149 fc_get_dblist( ) ................................................................................................... 150 fc_get_fcproclist( ) ............................................................................................. 151 fc_get_filestats() ................................................................................................ 152 fc_get_iostats() .................................................................................................. 153 fc_get_isamstats() ............................................................................................. 154 fc_get_lockstats() .............................................................................................. 155 fc_get_memstats() ............................................................................................. 156 fc_get_min_card( ) ............................................................................................ 157 fc_get_priority( ) ................................................................................................ 158 fc_get_partbounds() .......................................................................................... 159 fc_get_replstats() ............................................................................................... 160 fc_get_selectivity( ) ............................................................................................ 161 fc_get_server_version( ) .................................................................................... 162 fc_get_sqlstats() ................................................................................................ 164 fc_get_sysconfig() ............................................................................................. 165 fc_get_taskid( ) .................................................................................................. 166 fc_get_transtats() .............................................................................................. 167 fc_get_userlist( ) ................................................................................................ 168 fc_ptadmin_num() ............................................................................................. 169 fc_set_blockinglock( ) ........................................................................................ 170 fc_set_debug( ) ................................................................................................. 171 fc_set_file_tran_state( ) ..................................................................................... 172 fc_set_impersonation( ) ..................................................................................... 173 fc_set_min_card( ) ............................................................................................. 174 fc_set_nodename( ) .......................................................................................... 175 fc_set_priority( ) ................................................................................................. 176 www.faircom.com All Rights Reserved viii c-treeACE SQL Operations and Utilities Guide 11.33 fc_set_selectivity( ) ............................................................................................ 177 11.34 fc_set_sysconfig() ............................................................................................. 178 12. c-treeACE SQL Reserved Words ................................................................... 179 12.1 c-treeACE SQL Reserved Words ...................................................................... 179 13. Index ................................................................................................................. 181 www.faircom.com All Rights Reserved ix 1. c-treeACE SQL Operations and Utilities Guide Introduction c-treeACE SQL Server is a superset of the powerful c-treeACE ISAM server providing an industry-standard SQL interface into your c-tree data. With this advanced interface comes many additional options for SQL-specific performance tuning and data handling. Keep in mind that c-treeACE ISAM is the core data-handling engine and nearly all of the options for tuning c-treeACE ISAM performance and operation apply to c-treeACE SQL. This manual presents a comprehensive description of configuration options, utilities, and practices unique to the FairCom c-treeACE SQL Server. Consult your nearest FairCom office should you have questions or need additional information about any of the options available. FairCom is committed to providing high performance technology in an engineering level product. Let us work with you to tailor a solution for your exact and demanding needs! www.faircom.com All Rights Reserved 1 FairCom Typographical Conventions Before you begin using this guide, be sure to review the relevant terms and typographical conventions used in the documentation. The following formatted items identify special information. Formatting convention Bold CAPITALS Type of Information Used to emphasize a point or for variable expressions such as parameters Names of keys on the keyboard. For example, SHIFT, CTRL, or ALT+F4 FairCom Terminology FairCom technology term FunctionName() c-treeACE Function name Parameter Code Example utility filename CONFIGURATION KEYWORD CTREE_ERR c-treeACE Function Parameter Code example or Command line usage c-treeACE executable or utility c-treeACE file or path name c-treeACE Configuration Keyword c-treeACE Error Code 2. Installation Welcome to the c-treeACE Advanced Core Engine database server. You have just installed the same great database technology that powers many of the world’s largest transaction systems. Unlike other complicated database servers that require ongoing administration and extensive hardware resources, c-treeACE is designed to be simple to install with minimal disk and memory requirements and no ongoing maintenance. The c-treeACE Advanced Core Engine represents the next step in the evolution of c-tree technology. Advanced Core Engine (ACE): The “Core Database Engine” is a single Executable File (EXE) supporting Dynamically Loadable Libraries (DLLs or SOs) that are easily installed and managed as an operating system service. Once installed, this engine is readily accessible to all applications, either running locally or remotely on other devices or computers (desktop, notebook, phones, handhelds, PDAs, etc). The c-treeACE Server is designed for ease of operation and maintenance. Simply set your options and forget about it. The c-treeACE Server will run reliably for long periods of time with little if any administrator attention. This short guide introduces the most basic features the c-treeACE Server and is intended to have you up and running in minutes. You are encouraged to review the complete manuals for the most up-to-date information available. www.faircom.com All Rights Reserved 3 2.1 Up and Running with the c-treeACE Database Engine 2.2 Location You will find your c-treeACE Server in the bin\ace\sql or bin\ace\isam directory of your c-treeACE installation. You will find your tools and utilities located in the tools\ directory of your c-treeACE Server installation. License Object Beginning with c-treeACE V10.0 an activation process is no longer required to use the c-treeACE Server. A much simpler approach requiring only the presence of a new License Authorization File is now used. There are substantial advantages to this new approach. Primarily, it avoids an extra process to use the server and handling lengthy key values. More importantly, it avoids modifying any binary files, which can break package checksums, for example. The License Authorization File is a binary file containing unique licensing information assigned by FairCom. This licensing information permits the c-treeACE Server technology to operate on a specified operating system, to support specific features, to support a fixed number of concurrent users and/or connections to the c-treeACE Server technology, and to utilize a fixed number of CPUs on the host machine. The license file is named ctsrvr-<SN>.lic where <SN> is the unique Serial Number assigned to your server instance and provided by FairCom. This file will need to be properly placed in the same directory where the c-treeACE Server binary is located, for example, \FairCom\V11.x.x\<platform>\bin\ace\sql\ctreesql.exe. An example developer license is shown below: <?xml version="1.0" encoding="us-ascii"?> <ctlicense version="2"> <version>11</version> <serial>39000010</serial> <OEM>1</OEM> <lictype>Development</lictype> <cpus>2</cpus> <servtype>ALL (Standard - SQL)</servtype> <users>32</users> <private>EDE . . . QGP</private> <checksum>LE47LG9DNM06IA30CGAFFO00NMCEJL59</checksum> </ctlicense> Note that you can read the most relevant sections of this XML file in plain text regarding serial numbers, connection and CPU counts. If this licensing file isn’t present, you'll receive a 960 error in your CTSTATUS.FCS status log upon startup: "LICENSE ERROR: License initialization failed: Missing license file." www.faircom.com All Rights Reserved 4 Installation The Developer edition of the c-treeACE Server included with the c-treeACE Professional package includes a ctsrvr-<SN>.lic file configured to support up to 32 concurrent connections and can operate on up to 2 concurrent CPU cores (as reported by the operating system which may include physical CPUs, CPU cores, or virtual CPUs assigned to a partition). Development servers are licensed exclusively for development and testing purposes and only by the developer who is the c-treeACE Professional license holder. They are expressly not authorized for production use. Should you need additional licenses for testing or if you wish to test with a license file supporting a greater number of connections or CPUs, please contact your nearest FairCom office. When purchasing a production c-treeACE Server license, you will receive a ctsrvr-<SN>.lic file via e-mail, along with a “Proof of Entitlement” document that summarizes the configuration of your c-treeACE Server license file. 2.3 Starting c-treeACE There are many options to start the c-treeACE Server depending on your platform. Windows As a Windows Service • The Windows Service Manager - If you installed c-treeACE on a Microsoft Windows system, c-treeACE is installed and started by default through the installer. You can verify and manage server operation via the standard Windows service application via your administrative control panel application. • The net start command line function. For example: >net start "c-treeACE Database Engine" As a Console or ToolTray Application - Simply double-click the executable in the ace/bin/sql directory. Note: When connecting via a network, be aware that the TCP/IP port should be allowed by any local firewalls. Many modern operating systems include these security features by default. If you cannot connect with remote clients, you may need to specifically allow the c-treeACE Server port. www.faircom.com All Rights Reserved 5 Installation Unix Unix, Linux, and Mac OS X users can use the included start scripts. ./startace This script is provided as a "C" shell script and will work in most Unix shell environments. You are free to modify and tailor it to suit your local requirements. 2.4 Stopping c-treeACE By default, the c-treeACE Server requires an administrator password to initiate a server shutdown. The default (and permanent) administrator account is ADMIN with an initial default password of ADMIN. The Windows Service does not require the administrator password as it is assumed the c-treeACE Server is running under administrative privileges. Windows c-treeACE Monitor - Use the c-treeACE Monitor tool for Windows and stop the server. Windows Service - Select and stop the c-treeACE service via the windows service administrator. ToolTray - Right-click on the tool tray icon and select the appropriate shutdown option. Console - Exit the console application via the menu or the standard Windows "X" in the corner. ctadmn - The c-treeACE Administrator utility provides an option to shut down the server. ctstop - The c-treeACE stop utility can be used to shut down the server. • The net stop command line function. For example: >net stop "c-treeACE Database Engine" Unix, Linux, and Mac ctadmn - The c-treeACE Administrator utility provides and option to shut down the server. ctstop - The c-treeACE stop utility can be used to shut down the server. ./ctstop - A Unix shell script preconfigured to stop the server. Kill the server from a Unix command line. The c-treeACE Server traps the SIGSTOP signal. www.faircom.com All Rights Reserved 6 Installation #kill <c-treeACE PID> 2.5 Links to c-treeACE Manuals For complete information, view the online manuals: c-treeACE Administrator’s Guide (http://docs.faircom.com/doc/ctserver) c-treeACE SQL Operations Guide (http://docs.faircom.com/doc/sqlops/) 2.6 c-treeACE SQL Operational Files There are several key file components unique to the c-treeACE SQL Server when compared to the traditional NoSQL (ISAM) version. c-treeACE SQL requires additional dictionary files to enable the required relational features of SQL. In particular, sessions and databases are maintained in dictionary files. These files are located in the following hierarchy of the server's operating environment, typically located by default in /bin/ace/sql/data. ctdbdict.fsd - The main session dictionary file. If you remove any SQL databases from the server, you need to either remove this file, or ensure that it is properly updated. The appropriate way to drop a database and ensure the session dictionary is updated is to use the SQL Explorer utility, or the command line ctsqlcdb utility. ctreeSQL.dbs/ - The directory containing the SQL database files and dictionaries. All new tables and indexes associated with this database will be created in this directory. Use the SQL Explorer utility, or the command line ctsqlcdb utility to add new databases. SQL_SYS/ctreeSQL.fdd - This file location is the SQL database dictionary, or also known as the SQL system tables. It is NEVER appropriate to directly modify this file. The system tables are stored as a single c-tree superfile along with the database dictionary. sql_server.log - This file will log specific SQL messages when the appropriate debug flags are enabled. In particular, this file is useful for tracing Java Stored Procedure compile time errors. Java Stored Procedure can also log messages to this file at run time with the err() method. www.faircom.com All Rights Reserved 7 3. c-treeACE SQL Features 3.1 Advanced Encryption for c-treeACE SQL Tables c-treeACE SQL supports the ability to encrypt tables from the CREATE TABLE command. Two forms of encryption are available. Standard proprietary FairCom encryption, CAMO, is a lightweight, high performance option that results in little overhead of server processing. This encryption option gives a reasonable level of protection from casual inspection of the c-tree data and index files. Advanced encryption, including standard AES (Rijndael), Twofish, Blowfish, and DES are also available for industry standard hardening of data. The AES encryption standard may be required with some forms of data, such as that used in the health care industry (such as to conform to U.S. HIPAA regulations) and the financial industry. The following encryption options can be used with the STORAGE_ATTRIBUTES keyword. STORAGE_ATTRIBUTES 'CAMO' STORAGE_ATTRIBUTES 'ENCR=crypt' crypt can be one of the following: AES16 (Rijndael) AES24 AES32 DES8 DES16 DES24 BLF8 through BLF56 (Blowfish) TWF16 (Twofish) TWF24 TWF32 Example CREATE TABLE encrypted_table (name CHAR(10), age SMALLINT) STORAGE_ATTRIBUTES 'ENCR=AES32' ; To combine STORAGE_ATTRIBUTE options, separate them with a semicolon (;). For example, to create a non-HUGE, CAMO encrypted table, you would issue a statement such as the following. non-HUGE CAMO Example CREATE TABLE small_camo_table (name CHAR(10), age SMALLINT) STORAGE_ATTRIBUTES 'CAMO;NONHUGE' ; c-treeACE SQL must have the ADVANCED_ENCRYPTION configuration keyword specified in the ctsrvr.cfg configuration file. The table creation will fail with c-treeACE SQL error -17454 (feature www.faircom.com All Rights Reserved 8 c-treeACE SQL Features not supported) if you request an encryption option without this server configuration option enabled. Using an encryption mode not listed above will also result in the c-treeACE SQL error -17454 (not supported). 3.2 Default HUGE File Tables with c-treeACE SQL HUGE files (c-tree files larger than four gigabytes) are frequently encountered with today’s massive storage needs. To accommodate these increased table sizes, c-treeACE SQL creates files as HUGE by default. (Prior to c-treeACE SQL V9, new tables were created as standard non-HUGE c-tree files.) An optional STORAGE_ATTRIBUTES clause containing ‘HUGE’ was available to create c-treeACE SQL HUGE tables. Reversing the previous behavior, the STORAGE_ATTRIBUTES clause supports a NOT HUGE option to create standard size c-tree tables. For backward compatibility, it is possible to revert to the original c-treeACE SQL behavior and set thec-treeACE SQL default to ‘NOT HUGE’ by adding the following configuration keyword to ctsrvr.cfg: SQL_OPTION NO_HUGEFILE The STORAGE_ATTRIBUTES clause will override any default configuration settings. Whether a table is created HUGE or NOT HUGE with respect to the ctsrvr.cfg configuration and the STORAGE_ATTRIBUTES statement clause is summarized in the following table: c-treeACE SQL Configuration No specific STORAGE_ATTRIBUTES STORAGE_ATTRIBU TES “HUGE” STORAGE_ATTRIBU TES “NOTHUGE” default ctsrvr.cfg HUGE HUGE NOT HUGE SQL_OPTION NO_HUGEFILE NOT HUGE HUGE NOT HUGE Example CREATE TABLE table1 (column1 INT, column2 CHAR(10)) STORAGE_ATTRIBUTES 'NOTHUGE' CREATE TABLE table2 (column1 MONEY, column2 VARCHAR(20)) STORAGE_ATTRIBUTES 'HUGE' To combine STORAGE_ATTRIBUTE options, separate them with a semicolon (;). Note: HUGE file support is not available for the Windows CE version of c-treeACE SQL. 3.3 PREIMAGE Tables in c-treeACE SQL A significant performance gain can be obtained in some situations by avoiding transaction logging of files, thereby foregoing the protection of recovery. With c-treeACE it is possible to maintain atomicity of transactions in this state with a transaction mode of ctPREIMG. This support is also extended to c-treeACE SQL Tables when they are created. An additional option has been added to thec-treeACE SQL keyword STORAGE_ATTRIBUTES. www.faircom.com All Rights Reserved 9 c-treeACE SQL Features STORAGE_ATTRIUBUTES 'PREIMG' This option disables transaction logging for the table. This can be useful for temporary tables that are not required to be recovered in the event of catastrophic failure, yet retain atomicity of transactions. To combine STORAGE_ATTRIBUTE options, separate them with a semicolon (;). For example, to create a non-HUGE, PREIMAGE table, you would issue a statement such as the following. non-HUGE PREIMAGE Example CREATE TABLE small_preimage_table (name CHAR(10), age SMALLINT) STORAGE_ATTRIBUTES 'NONHUGE;PREIMG' 3.4 Shared Memory Connections for c-treeACE SQL Clients on Windows c-treeACE SQL for the Microsoft Windows OS supports a shared memory communication protocol for c-treeACE SQL clients. This communications option is the default for clients connecting locally, gaining a huge performance boost over the standard TCP/IP connections. A configuration option is available to disable this support if desired. See SQL_OPTION NO_SHARED_MEMORY (page 124). 3.5 Server-Side Connection Pooling Connection pooling is a mechanism for pooling existing connections so they can be reused by subsequent clients. The connection and disconnection process adds a substantial amount of overhead to a SQL client performing a transaction. c-treeACE SQL offers options to enable connection pooling. This reuse of existing connections can provide significant increases in performance with your existing c-treeACE SQL ODBC and JDBC client applications. SETENV DH_ENABLE_POOL=y enable the connection pooling SETENV DH_POOL_SIZE=#n #n of pooled connections. ;1<#n<=100 These performance gains can be demonstrated in the simple test case of a client connecting and disconnecting repeatedly with a small amount of work performed during each connection. In one example, the client gained a 100% reduction in total application time. This feature offers potentially enormous gains in performance for applications with clients that perform repeated connects and disconnects. 3.6 Supported Transaction Isolation Levels c-treeACE SQL supports both SQL transaction isolation levels 1 and 2. Transaction isolation levels provide defined levels as to which transaction isolation succeeds. Four transaction isolation levels are defined (SQL-92) by several phenomena. These phenomena are defined as follows: Dirty Reads. A dirty read occurs when a transaction reads data that is not yet committed by another transaction. Non-repeatable Reads. A non-repeatable read is when a transaction reads data from the same row twice, and gets different results, usually as the result of updates from another, simultaneous transaction. www.faircom.com All Rights Reserved 10 c-treeACE SQL Features Phantoms. A phantom is a row that matches some search criteria, and is not initially seen, as adds or deletes from another transaction have changed the result set available. Upon a second attempt, the transaction is returned a different set of rows. The SQL-92 defined isolation levels are shown in the following table. An ‘X’ identifies an included phenomena; ‘--’ indicates absence. Isolation Characteristic Le vel Dirt y Rea ds Non-repeatabl e reads Phantom s Read Uncommitted 0 X X X Read Committed 1 -- X X Repeatable Read 2 -- -- X Serializable 3 -- -- -- Keep in mind that a transaction isolation level only affects data changes between transactions. Changes within one’s own transaction are always available and will be seen. The c-treeACE SQL configuration keyword MAX_SQL_ISOLATION_LEVEL sets the maximum transaction isolation level at which c-treeACE SQL clients can operate. The supported values are: MAX_SQL_ISOLATION_LEVEL 1; READ_COMMITTED only MAX_SQL_ISOLATION_LEVEL 2; READ_COMMITTED and REPEATABLE_READ The c-treeACE SQL default without this configuration keyword is a maximum isolation level of 1. Transaction isolation levels 0 (READ_UNCOMMITTED) and 3 (SERIALIZABLE) are not available with c-treeACE SQL at this time. If a c-treeACE SQL client requests an isolation level that exceeds the default maximum isolation level, or a maximum level specified in the server configuration file, the c-treeACE SQL client only operates at the maximum isolation level ofc-treeACE SQL rather than the requested isolation level. A c-treeACE SQL ODBC client can request a specific transaction isolation level to work in, provided the server supports this level. The SQL_ATTR_TXN_ISOLATION connection attribute is used to request the level with the SQLSetConnectAttr() ODBC function call. ODBC Example /* After a connection handle is established... */ if (SQL_ERROR == (SQLSetConnectAttr(connection_hdl, SQL_ATTR_TXN_ISOLATION, SQL_TXN_REPEATABLE_READ, 0)) ) printf(“Failed to set the Transaction Isolation Level\n”); The client application can also determine the transaction isolation level in effect with the SQL_TXN_ISOLATION_OPTION and SQL_DEFAULT_TXN_ISOLATION options with the SQLGetInfo() function call. ODBC Example /* After a connection handle is established... */ www.faircom.com All Rights Reserved 11 c-treeACE SQL Features if (SQL_ERROR == (SQLGetInfo(connection_hdl, SQL_TXN_ISOLATION_OPTION, buf, MAX_BUF, &buf_length))) do_error(“Failed to Retrieve Current Transaction Isolation Level\n”); if (SQL_ERROR == (SQLGetInfo(connection_hdl, SQL_DEFAULT_TXN_ISOLATION, buf, MAX_BUF, &buf_length))) printf(“Failed to Retrieve Default Transaction Isolation Level\n”); Requesting transaction isolation level 2, REPEATABLE_READ can introduce delays as additional overhead is involved in acquiring blocking read locks to ensure repeatable reads. 3.7 Case Insensitive Search Options for c-treeACE SQL LONG Field Types A limitation ofc-treeACE SQL LVARCHAR and LVARBINARY fields is the inability to use SQL functions such as UPPER() or LOWER() to perform case insensitive searches. To address this disadvantage of these field types, a proprietary c-treeACE SQL options clause is available to allow a case insensitive search. The ctoption(icontains) clause will allow a case insensitive search on a specific CONTAINS query. Include this clause on a query similar to the following: SELECT * FROM mytable WHERE bigfield CONTAINS 'Search Phrase' ctoption(icontains) The option is only valid for the current query. ctoption(icontains) can be used with both c-treeACE SQL LONG fields allowing both character and binary searching. 3.8 Query Timeout Option c-treeACE SQL supports a timeout option for an executing query. This feature can ensure that an unintended query statement does not consume excessive processing time for c-treeACE SQL . Examples With c-treeACE SQL ODBC you can set the query timeout value for the statement with the SQLSetStmtAttr() c-treeACE SQL ODBC API function and the SQL_ATTR_QUERY_TIMEOUT parameter set to the number of seconds to wait for the query to execute before returning to the application. A value of 0 indicates no timeout value, which is also the default. The following example code will set a query timeout value of five seconds for the referenced statement handle. ODBC Example /* Set the Query timeout to 5 seconds */ SQLSetStmtAttr(hstmt, (void*)SQL_ATTR_QUERY_TIMEOUT, 5, 0); In Java with the c-treeACE SQL JDBC Driver, you can use the setQueryTimeout() method of the java.sql.Statement interface as shown here. JDBC Example Class.forName (“ctree.jdbc.ctreeDriver”); Connection myConnection = DriverManager.getConnection(“jdbc:ctree:6597@localhost:ctreeSQL”, ADMIN, ADMIN”); Statement myStatement = myConnection.createStatement(); String query = “SELECT TOP 50000 FROM my_big_table WHERE this < that AND this_string = 'that_string' ORDER BY foo” www.faircom.com All Rights Reserved 12 c-treeACE SQL Features myStatement:setQueryTimeout(5); myStatement.executeUpdate(query); Using ADO .NET with the c-treeACE SQL Data Provider, you specify the query timeout with the CommandTimeout property of the CtreeSQLCommand component. ADO .NET Example myCommand = new CtreeSqlCommand(““, this.myConnection); myCommand.CommandText = “SELECT TOP 50000 FROM my_big_table = 'that_string' ORDER BY foo”; WHERE this < that AND this_string myCommand.CommandTimeout = 5; try { myCommand.ExecuteReader(); } catch (CtreeSQLException ex) { //Log some error. } Using ODBC through ADO.NET, you can specify the OdbcConnection.CommandTimeout property to set a query timeout value on an ODBC statement as demonstrated with the following syntax. c-treeACE SQL ODBC via ADO .NET Example OdbcConnection myConnection = new OdbcConnection(); myConnection.ConnectionString = "DSN=c-treeSQL ODBC Database"; myConnection.Open(); OdbcCommand oc = new OdbcCommand("SELECT TOP 50000 FROM my_big_table this_string = 'that_string' ORDER BY foo”, myConnection); WHERE this < that AND // Set a query timeout of 5 seconds. oc.CommandTimeout = 5; try { oc.ExecuteReader(); } catch (Exception ex) { // Log some error } 3.9 Logging c-treeACE SQL Query Times A c-treeACE SQL feature is available to log query start and end times as an additional aid for tuning and performance monitoring. The query times are output to the file sql_server.log. The output is controlled by two server configuration keywords and specified in the file ctsrvr.cfg. SQL_DEBUG LOG_STMT_TIMES This option logs start and end times for the statement PREPARE, EXECUTE and OPEN operations. SQL_DEBUG LOG_STMT_TIMES_FETCH This option logs start and end times of a fetch sequence (open cursor, all fetches, and close cursor). www.faircom.com All Rights Reserved 13 c-treeACE SQL Features Both options can be specified at the same time. The actual log entry occurs when the query operation is finished. Example Output Start: Thu Mar 09 13:50:12 2006 - User# 00014 Elapsed: 0 sec. for PREPARE Start: Thu Mar 09 13:50:12 2006 - User# 00014 Elapsed: 0 sec. for OPEN Start: Thu Mar 09 13:50:12 2006 - User# 00014 Elapsed: 2 sec. for FETCH 3.10 select top 5000 * from facility select top 5000 * from facility select top 5000 * from facility Built-in Stored Procedure to Switch Transaction Mode It can be useful for performance reasons to avoid transaction memory usage in some common maintenance operations. Consider the case of upgrading a large database where some tables are added with a SQL query from another table that returns a large number of rows. As this occurs inside a single SQL statement the transaction consumes memory until committed. For large files, this can potentially exhaust memory on some systems and result in complete failure. c-treeACE can allow the transaction processing mode of a file to be disabled which avoids consuming memory for a very large operation. To make this available to c-treeACE SQL, a built-in stored procedure allowing the transaction mode of a file to be changed has been added. This operation requires exclusive file access. fc_set_file_tran_state(VARCHAR owner, VARCHAR tablename, TINYINT mode) Valid values for mode are 0 : No transaction control. 1 : Transaction control without recoverability. (ctPREIMG) 2 : Transaction control and recoverability. (ctTRNLOG) When a c-treeACE SQL file is set to mode of 0 (no transaction control), all changes to the file will have immediate and permanent effect, such that a ROLLBACK operation will have no effect on this file. If another user is able to open the file, isolation levels are undefined. Furthermore, c-treeACE SQL operations that modify multiple rows of this table will not be atomic in the event of an error. For update statements, it is important to ensure no errors are encountered during execution. For example, a statement such as UPDATE tbl SET col=99 that encounters an error midway through the update, will leave the state of the table undefined and the operation should be re-examined. It is possible it will be necessary to restore from a backup to return to a previous state. Because of these effects, the intended use of this mode is limited in scope. No file definition/schema changes to this file should occur while in this mode. All previous schema changes should be committed before calling this procedure. If an error occurs while operating on a file with a mode 0, the table should be deleted and the transaction rolled back. Note: The stored procedure fc_check_file_tran_state() can be used to ensure that no files remain in modes other than the database default. www.faircom.com All Rights Reserved 14 4. c-treeACE SQL Options 4.1 Environment Variables c-treeACE SQL can set environment variables for the server process on startup. This functionality is implemented via the keyword SETENV. For example, the c-treeACE SQL looks at the CLASSPATH to find required classes for proper operation of the server. When the c-treeACE SQL is running as a Windows 32-bit versions Service, c-treeACE SQL is launched automatically by the SCM (Service Control Manager) when the computer starts up. Setting the CLASSPATH via a keyword eliminates the manual operation of setting environment variables. The syntax is as follows: SETENV <var>=<value> Where var is the environment variable and value is the setting. For example: SETENV CLASSPATH=%CLASSPATH%;C:\FairCom\ctreeJQL\classes The input line length for the server configuration file is 1024 to allow for very long configuration values. The c-treeACE SQL considers existing environment variables during startup processing for the Java environment used with stored procedures. The following variables are used in the c-treeACE SQL configuration file, ctsrvr.cfg, to set the parameters for the Java JVM and compiler. These configurations are required for c-treeACE SQL Stored Procedures, Triggers, and User Defined Functions: SETENV SETENV SETENV SETENV CLASSPATH= JVM_LIB= JAVA_COMPILER= DEBUG_JVM When these values are not explicitly set within the server configuration file, the server considers existing system environment variables.This feature simplifies setup and configuration changes for c-treeACE SQL Stored Procedures. Refer to the Appendix Server Configuration Keywords for a complete list of c-treeACE SQL-specific keywords. 4.2 Default Date Handling c-treeACE SQL allows for internationalization of date formats. The following configuration option changes the default date handling: SETENV TPE_DFLT_DATE=XX or SETENV_TPE_DFLT_DATE=XX_DFLT_DATE where XX can be one of the following options: www.faircom.com All Rights Reserved 15 c-treeACE SQL Options US US_DFLT_DATE UK UK_DFLT_DATE ISO ISO_DFLT_DATE Changing the default date format affects: The default output format of date values. How SQL interprets date literals in queries and INSERT statements. The format value determines how c-treeACE SQL interprets character strings inserted as DATE values or compared to DATE columns. For example, a formate value of UK_DFLT_DATE allows users to supply date literals in British format (dd/mm/yyyy). The format value also determines the default output format of date data. The following table details the different formats each supported value. The boldface entries indicate the default output format for each setting. US_DFLT_DATE UK_DFLT_DATE ISO_DFLT_DATE dd-mm-yyyy dd/mm/yyyy dd-mm-yy dd/mm/yy mm-dd-yyyy mm-dd-yyyy mm/dd/yyy mm/dd/yyy mm-dd-yy mm/dd/yy 4.3 yyyy-mm-dd yyyy-mm-dd yyyy-mm-dd yyyy/mm/dd yyyy/mm/dd yyyy/mm/dd dd-mon-yyyy dd-mon-yyyy dd-mon-yyyy dd/mon/yyyy dd/mon/yyyy dd/mon/yyyy dd-mon-yy dd-mon-yy dd/mon/yy dd/mon/yy Case-Sensitivity Options Sorting of fetched rows is performed as a case sensitive operation. Some applications may require sorting that should, instead, be case insensitive with NULL values appearing first in the sort. For instance the values “a, Z, B, g, NULL” should be sorted as “NULL, a, B, g, Z”. A feature is available such that a database can be implied to be case sensitive (current default) or case insensitive. When a database is enabled as case insensitive, the sorting, comparisons and identifier will be considered case insensitive. This feature is activated with the c-treeACE SQL configuration keyword SQL_OPTION DB_CASE_INSENSITIVE www.faircom.com All Rights Reserved 16 c-treeACE SQL Options This should be done before creating the template database. Once the template database is created, ALL the databases will have the same settings of the template. When using case insensitive searches, all search conditions, sorting and grouping is done in a case insensitive manner. Metadata and character indexes are also considered to be case insensitive. Case insensitivity is enabled on a database by database basis. 4.4 Optimizer Configuration Options The c-treeACE SQL query optimizer plays an important role in reducing the execution time of c-treeACE SQL queries. The role of the optimizer is to minimize the number of read requests that are made for the data and index files. This minimization process is computed by the optimizer based on the cardinality (the number of records selected), selectivity (the fraction of the records selected based on an operator), and a set of index key values. For many operations on records or indices, a cost, in terms of time units, is used to decide between the use of a record or index-oriented scan. Users may wish to disable the cardinality, selectivity and/or costing features to force particular optimizations of c-treeACE SQL. Having these features enabled or disabled will induce the optimizer to perform queries using different strategies to select the resulting dataset. Three c-treeACE SQL configuration file keywords were added to control the optimizer's usage of cardinality, selectivity and costing of record and index operations: NO_CARDINALITY, NO_SELECTIVITY and NO_COSTS. These keywords must be used with the SQL_OPTION configuration command. NO_CARDINALITY - disables the cardinality logic that informs the optimizer about the number of rows in a data or index file. NO_SELECTIVITY - disables the selectivity logic that informs the optimizer about the percentage of rows returned when applying a given search criteria. NO_COSTS - disables the logic that returns to the optimizer the cost in units of time for given record and index operations. The optimizer will use this information to decide whether to use a record or an index scan. Note: Costs are not implemented in the current version of c-treeACE SQL. Behavior may change in future releases. To disable cardinality, selectivity, and costing logic, add the following keywords to the c-treeACE SQL configuration file: Example SQL_OPTION NO_CARDINALITY SQL_OPTION NO_SELECTIVITY SQL_OPTION NO_COSTS 4.5 c-treeDB ROWID Options When using c-treeDB and c-treeACE SQL, it is possible to encounter situations where c-treeDB ROWIDs do not match c-treeACE SQL ROWIDs. With c-treeDB the first ROWID starts with 1 and so on, as this is how the SRLSEG mode works. Conversely, c-treeACE SQL’s ROWIDs start with 0 and so on. www.faircom.com All Rights Reserved 17 c-treeACE SQL Options Now the ROWID at the c-treeACE SQL level is “zero” based by default, as it previously was. For backward compatibility with those applications requiring so, it is possible to force the “one” based option, identical to c-treeDB, with the following c-treeACE Server configuration keyword: SQL_OPTION CTDB_ROWID Refer to the Appendix Configuration Keywords for a complete list of c-treeACE SQL-specific keywords. 4.6 Automatic Database Conversion Options Enhancements and features to c-treeACE SQL sometimes require changes to the base system tables and internal workings of the c-treeACE SQL engine. To make this transition as seamless as possible, an automatic verification and conversion to the new format takes place when the server detects system tables from a previous version of the c-treeACE SQL. To prevent this activity from occurring, a new c-treeACE SQL configuration keyword was introduced. SQL_OPTION NO_DB_CONVERSION This server configuration keyword is used to instruct the c-treeACE SQL to not perform the verification and the conversion process. To prevent a failed conversion attempt, these steps are controlled within a transaction such that upon failure a transaction abort or automatic recovery will restore the original data. Refer to the Appendix Configuration Keywords for a complete list of c-treeACE SQL specific keywords. 4.7 Template Database __Master.dbs Handling c-treeACE SQL previously created new databases by copying a supplied template database, __Master.dbs. (This template was automatically created if it did not exist when needed.) c-treeACE SQL databases are now created directly without copying from a template database. This change typically results in faster database creation in the usual case of a single database. It is possible to revert the behavior of the template database with the following configuration keyword: SQL_OPTION FORCE_TEMPLATE_DB This keyword forces template database creation upon server startup even if the template already exists (to ensure a consistent starting database). When this keyword is specified, c-treeACE SQL creates all new databases by copying the template database. Refer to the Appendix Server Configuration Keywords for a complete list of c-treeACE SQL-specific keywords. 4.8 SQL_DEBUG Options Additional c-treeACE SQL debugging control can be used with these configuration keywords: ;SQL Debugging information ;SQL_DEBUG LOG_STUBS_HIGH ;SQL_DEBUG LOG_STUBS_LOW ;SQL_DEBUG LOG_STUBS_MED www.faircom.com All Rights Reserved 18 c-treeACE SQL Options ;SQL_DEBUG INDEX ;SQL_DEBUG INDEX_INFO ;SQL_LOGFILE C:\sql_debug.txt This will log additional information to a specific SQL_LOGFILE if desired. LOG_STUBS_HIGH logs very sparse information detailing table create activities. LOG_STUBS_MED logs basic SQL Statement information. LOG_STUBS_LOG logs very low level stubs information, which can be quite voluminous. INDEX and INDEX_INFO may not be active at the current time (Oct 2005). 4.9 Advanced c-treeACE SQL Logging c-treeACE SQL has extensive internal debugging logic that can be accessed through various means. SQL errors can be logged to the file sql_server.log in the c-treeACE SQL directory. TPESQLDBG is an array of 12 ‘Y’/‘N’ characters that determine which debug options are enabled. The order of the debug operations in the string is shown below: Offset Debug Option 0 sql_debug 1 cache_debug 2 ddm_debug 3 xec_debug 4 opt_debug 5 remt_debug 6 display_cost 7 hm_hdl_debug 8 hm_itm_debug 9 phm_debug 10 java_debug (#if defined(DH_JAVA_SP) || defined (DH_SUN_JDK)) 11 log_error java_debug is ignored for c-treeACE SQL operating without a defined Java environment. Options are enabled by specifying ‘Y’. The string value to disable all debug options would look as follows: NNNNNNNNNNNN This value can be set through various means: a server configuration keyword; the built in set_debug() stored procedure; and the ctsqlcdb.exe utility. To set the debugging logic at server startup, place the following configuration keyword with the desired debug string in ctsrvr.cfg. For example, to enable Java stored procedure debug output, use the following configuration string: www.faircom.com All Rights Reserved 19 c-treeACE SQL Options SETENV TPESQLDBG=NNNNNNNNNNYN A stored procedure set_debug(varchar (20)) is available to dynamically change the internal server debug features. This stored procedure sets the debug features according to the TPESQLDBG string passed as an argument and returns a row containing the actual debug setting (after applying the new debug settings). If an empty string (“”) is passed, set_debug() returns the current debug setting. For example, to set the Java stored procedure debug output call set_debug() as follows: CALL fc_set_debug(‘NNNNNNNNNNYN’); Additionally the ctsqlcdb utility can be used as follows: ctsqldb -setdbg NNNNNNNNNNYN <databasename> <servername> You can retrieve the current settings in use with the following ctsqlcdb parameter: ctsqldb -getdbg <databasename> <servername> 4.10 Memory Manager (MM) System for Temporary Storage For queries involving sorting and/or joins, c-treeACE SQL may create temporary tables which exist in memory and/or on disk, depending on the amount of data in the temporary table. c-treeACE SQL provides options to optimize these queries with regard to physical memory space available on the server. Tuning these options can greatly enhance performance when dealing with large result sets generating extremely large temporary tables. An internal memory storage system provides a mechanism for c-treeACE SQL to store data in memory instead of on disk. By using this internal storage system for volatile data such as temporary tables and dynamic indexes, the c-treeACE SQL improves the performance of many queries, such as joins. Depending on the amount of memory available on a system, certain queries may create temporary tables too large to be stored in memory. In these cases, the internal storage system swaps blocks of data to a disk file as necessary. The following variables allow implementations to control the characteristics of how this internal storage system uses memory to create temporary tables. SETENV TPE_MM_CACHESIZE: Specifies the size, in kilobytes, of the memory cache used for temporary tables. The default value is 1,000 KB (1MB) of memory. The internal storage system uses this cache for storing temporary tables when sorting and creating dynamic indexes during processing. Increasing TPE_MM_CACHESIZE improves performance by reducing the need to write to the on-disk swap file. The TPE_MM_CACHESIZE setting determines how much memory the SQL engine uses for its temporary tables for each SQL client. Increasing this setting increases the amount of temporary table data the c-treeACE SQL stores in memory instead of writing this data to the disk-based swap file. However, note that this memory is allocated for each SQL client, so you should consider how many clients will connect to c-treeACE SQL at any given time and make sure total cache memory doesn't exceed available physical memory on the system. Up to 4 TB total memory is available in this subsystem. SETENV TPE_MM_SWAPSIZE: Specifies the maximum size, in kilobytes, of the swap file the internal storage system uses when it writes to disk from the main memory cache. The default is 500,000 KB (500 MB). The sorting of data larger than this size results in the following c-treeACE SQL error (-16001):MM No data block www.faircom.com All Rights Reserved 20 c-treeACE SQL Options To resolve this error, the TPE_MM_SWAPSIZE limit needs to be increased. Note: These swap files can be found during an active connection with a filename beginning with ‘M’ followed by a string of random alphanumerics. These files can sometimes be left around after an abnormal server shutdown. They can be safely deleted in such a case. This keyword can be used to resolve error (-16025):MM sorting error. Increasing the c-treeACE cache configurations DAT_MEMORY (data cache size) and IDX_MEMORY (index cache size) settings can significantly reduce the number of bytes read from disk while executing a query. Note: The MM subsystem was replaced with a new architecture beginning with V10.3. See SQL_OPTION USE_MM (page 131) www.faircom.com All Rights Reserved 21 5. 5.1 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions Run-Time Settings for Java Stored Procedure Support c-treeACE SQL uses the portable Java language for stored procedures, triggers, and user-defined functions. To take advantage of these advanced features, a functioning Java environment will need to be available on your operating platform. When the Java JVM is present, and the server is properly configured, these features become available. c-treeACE SQL requires the Java Runtime Engine (JRE) version 1.6 or later. To create stored procedures requires the Java Development Kit (JDK) version 1.6 or later. The Java JDK and JRE for many platforms are available at no cost. Click here to download (http://www.oracle.com/technetwork/java/javase/downloads/index.html). Note: 64-bit versions of c-treeACE SQL require a 64-bit version of the JVM to implement stored procedures. c-treeACE SQL Configuration Use the following c-treeACE Server configuration keywords to set your Java environment to take advantage of full stored procedures, triggers, and user-defined functions support. ; JDK environment settings - Be sure to set the JDK to your version. SETENV CLASSPATH=C:\Program Files\Java\jdk1.7.0_07\jre\lib\rt.jar;C:\FairCom\VX.X.X\win32\bin\ace\sql\classes\ctreeSQLSP. jar (where VX.X.X refers to your c-treeACE version number) SETENV JVM_LIB=C:\Program Files\Java\jdk1.7.0_07\jre\bin\server\jvm.dll SETENV JAVA_COMPILER=C:\Program Files\Java\jdk1.7.0_07\bin\javac.exe The following table lists the Java-related runtime settings needed for the c-treeACE SQL to support Stored Procedures, Triggers and User-Defined Functions. These are required for initializing the JVM within c-treeACE SQL. Java Related Runtime Settings c-treeACE SQL with JSP Environment Variable Name Environment Variable Value JDKHOME DRIVE:\PATH_TO_JAVA\ CTREEHOME DRIVE:\PATH_TO_CTREE\ www.faircom.com All Rights Reserved 22 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions 5.2 Environment Variable Name Environment Variable Value CLASSPATH %JDKHOME%\jre\lib\rt.jar; %CTREEHOME%\ctreeSDK\ctreeAPI\bin.jql\classes JVM_LIB %JDKHOME%\jre\bin\server\jvm.dll JAVA_COMPILER %JDKHome%\bin\javac.exe Debugging Java Stored Procedures c-treeACE SQL allows Java debugging tools to connect and directly debug stored procedure routines. To enable this feature, follow the following steps. 1. Add the following keywords to ctsrvr.cfg: SETENV DEBUG_JVM=S SETENV DEBUG_JVM_PORT=45987 The first keyword the enables the c-treeACE SQL JVM debug feature by creating a TCP/IP socket at the port specified with the DEBUG_JVM_PORT keyword for a Java debugger to attach. In addition, the DEBUG_JVM keyword instruct the server to compile stored procedures with debugging information and to not remove the stored procedure source file from disk. 2. Start the c-treeACE SQL server. 3. Create a stored procedure (for example, “test”). 4. Examine the database directory (i.e. ctreeSQL.dbs) for a .java file. This is the Java file source. Pay particular attention to the class name (i.e. public final class admin_test_SP extends JavaBaseSP). 5. Start a Java debugger and attach it to localhost on the port specified by DEBUG_JVM_PORT. For example, using the Java debugger included with the JDK, run: jdb -attach 45987 (run on the same machine running the server to access the Java source files). 6. Set a breakpoint on the method dhSPwrap of the stored procedure calls (i.e. admin_test_SP.dhSPwrap). 7. Call the stored procedure from any client side SQL tool such as ISQL. 8. The debugger should break at the start of the stored procedure. JSWAT Example JSwat is an open-source GUI Java debugger. It can be downloaded from https://github.com/nlfiedler/jswat (https://github.com/nlfiedler/jswat). 1. Add the following keywords to ctsrvr.cfg: SETENV DEBUG_JVM=S SETENV DEBUG_JVM_PORT=45987 2. Start the c-treeACE SQL Server. 3. Start ISQL and create a stored procedure as follows: # isql -a ADMIN -u admin ctreeSQL www.faircom.com All Rights Reserved 23 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions CREATE PROCEDURE admin.test( IN name CHAR (20) ) BEGIN Integer testing = new Integer(24); END 4. Start jswat. 5. Select “New Session” from the “Session” menu and edit the following information: a. Assign a name (for instance “c-treeACE Session”). b. Switch to the “classes” panel and add the path to the ctreeSQLSP.jar file and the path to the ctreeSQL.dbs directory. c. Switch to the “Sources” panel and add the path to the ctreeSQL.dbs directory. 6. Select the session just created from the Sessions Drop Down menu on the toolbar. 7. From the “Session” menu, click on “Attach” 8. Configure the Transport as "Attach by socket". Fill in Host and Port with information from your c-treeACE SQL Server configuration. 9. Click OK (The “debugger console” should now read” “VM attached to session c-treeACE Session”. 10. In the “Breakpoint” menu select “New Breakpoint” to create a new breakpoint. a. Set Breakpoint type to “Method.” b. Set Class to the stored procedure name (for example, admin_test_SP). c. Set Method to “dhSPwrap.” www.faircom.com All Rights Reserved 24 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions 11. Return to ISQL and run the stored procedure: call test ('John Smith'); 12. The debugger displays the current line in the stored procedure. www.faircom.com All Rights Reserved 25 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions 5.3 Advanced JVM Configuration The JVM is loaded into c-treeACE SQL and becomes part of the process when the appropriate configuration options point to a valid Java Runtime Engine (JRE). Stored procedures, triggers, and user-defined functions are executed within this JVM. The JVM environment can be configured and tuned with numerous options. The deployment architect should be familiar with these options from the available Oracle Java documentation. http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html The SETENV DH_JVM_OPTION_STRINGS configuration keyword can be used to specify exact parameters for the JVM to use at runtime. Note: Java stored procedures and triggers developers may take advantage of many different Java features and have wide latitude in creating stored procedure logic. Due to this, it is difficult to make general recommendations, however, information and links are provided below to demonstrate the vast variety of options available. Different options may be available on different platforms as Java is a highly cross-platform environment. Heap Memory One of the most important considerations is memory usage of the JVM. This can result in unexpected memory usage of the c-treeACE SQL process. As the JVM gradually allocates additional heap memory, the process space can grow quite unexpectedly. While Java takes advantage of advanced automatic garbage collection of unused memory references, the triggers for this are many, and in some cases, require careful tuning for the best balance of performance www.faircom.com All Rights Reserved 26 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions and memory use. Two options of immediate use are the minimum and maximum size of the memory heap. The JVM defaults to certain proportions of available memory, depending on the OS and if the process is 32-bit or 64-bit. The initial heap size of the JVM is the following: Larger of 1/64th of the machine's physical memory or some reasonable minimum. Before J2SE 5.0, the default initial heap size was a reasonable minimum, which varies by platform. If the nursery size (the part of the heap memory reserved for allocation of new objects) is set with -Xns, the default initial heap size will be scaled up to at least twice the nursery size. You can specify the initial (and minimum) JVM heap size with the -Xms option. SETENV DH_JVM_OPTION_STRINGS=-Xms:4m Note: The initial Java heap cannot be set to a value smaller than 8 MB, which is the minimum Java heap size. If you attempt to set it to a smaller value, JVM defaults to 8 MB. The -Xms value cannot exceed the value set for -Xmx (the maximum Java heap size). The maximum heap size of the JVM is the following: Smaller of 1/4th of the physical memory or 1GB. Before J2SE 5.0, the default maximum heap size was 64MB. You can specify the maximum JVM heap size with the -Xmx command-line option. SETENV DH_JVM_OPTION_STRINGS=-Xmx:16m http://docs.oracle.com/javase/7/docs/technotes/guides/vm/gc-ergonomics.html http://docs.oracle.com/javase/7/docs/technotes/guides/vm/gc-ergonomics.html Alternative Garbage Collectors Alternative garbage collectors (GC) are available within the JVM. For particular environments, it may be advantageous to choose an alternate GC for throughput or latency reasons. -XX:+UseParallelOldGC (default) www.faircom.com All Rights Reserved 27 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions -XX:+UseConcMarkSweepGC -XX:+UseG1GC (New in Java 6 and 7) Many numerous options are available to tune each of the Java garbage collectors for performance, throughput and low-latency. Check the current Java documentation for your chosen JVM for complete details. GC Monitoring It is frequently necessary to examine actual garbage collection statistics. Java garbage collection has many debugging options available for this task. Here is a minimum set to consider: -Xloggc:<filename> -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime Monitoring Tools The JVisualVM utility included with your Java installation is recommended for advanced monitoring of the Java GC process. Load the Visual GC plugin from the "Tools->Plugins" menu. See Debugging Java Stored Procedures (page 23) www.faircom.com All Rights Reserved 28 6. c-treeACE SQL Utilities c-treeACE SQL provides a powerful interface over you c-tree data. Various utilities are available to facilitate the migration, use and maintenance of c-treeACE SQL. 6.1 ctpath - Change Internal Database Paths Changes the internal SQL dictionary paths of database locations. Syntax ctpath -s server -u user -p password -d database from-path-prefix to-path-prefix Description When ctpath is executed without command line arguments, you get the full GUI version. ctpath GUI (without command line arguments) always return 0. When ctpath is executed with command line arguments, it runs silently and all error messages are written in a log file CTPATH.LOG stored in the same directory as the ctpath file.Error messages are appended to CTPATH.LOG file with a date and time stamp to each error message. ctpath with command line arguments returns 0 when the execution detected no errors, or a value different than 0 when errors were detected and the error messages are written to CTPATH.LOG. If you omit the -d database switch, all databases in the session will be scanned. Command line switches should start with a '-' or '/' character. Command line switches accept both lowercase and uppercase characters, e.g. -s or -S are the same. Command line switches may have optional spaces between the switch and the argument. Example: -s FAIRCOMS or -sFAIRCOMS are the same. Command line switches maybe entered in any order, but the from-path-prefix must appear before the to-path-prefix. 6.2 ctsqlbigint - c-treeACE SQL Big Integer Fix Utility A BIGINT issue on HIGH LOW machines could result in improper values on heterogeneous systems. This utility is designed to detect and correct such issues should they occur. Contact FairCom should you require this utility. Syntax ctsqlbigint [-<sect>] [dbname [tblname]] This utility to be compiled as single user with tranproc and run in the c-treeACE SQL operating directory. www.faircom.com All Rights Reserved 29 c-treeACE SQL Utilities <sect> the sector size dbname is specified the engine converts the tables in that database. If dbname is not specified all databases will be converted. tblname only the specified table in the given database is converted. Running the conversion twice restores records to their original values. 6.3 ctsqlcdb - c-treeACE SQL Database Maintenance Utility Usage ctsqlcdb <command> <dbname> [<servername>] Valid Commands: -add: Adds a reference to an existing database -create: Creates a new database -drop: Removes a reference to an existing database -exist: Returns 1 if database exists, 0 if not, 2 on error -list <servername>: Lists databases available from the server -create_preimage: Creates a preimage only database (supporting only atomicity; no transaction logs for durability.) Or the following command syntax copies an existing database and adds a reference to the new copy: -copy <dbname> <newname> [<servername>] -copy also includes non c-tree files when present in the database directory area. where: • <dbname> is the database name, and • <servername> is the optional c-treeACE SQL name. The -copy command supports virtual tables (called "Multi Record Tables" or "MRT tables"). 6.4 ctsqlimp - c-treeACE SQL Import Utility The c-treeACE SQL import utility, ctsqlimp, utility “registers” or links existing c-tree Plus files with a c-treeACE SQL database without modifying the table structure such that the files remain accessible from the original application and also accessible from c-treeACE SQL. ctsqlimp Usage ctsqlimp is used as follows (after creating the database file): ctsqlimp <filename> [-d database] [-s server] [-u userid] [-a password] [-n symbolic] [-o userid] [-i] [-r] [-k] [-c] [-x] [-p|-P] [-z] [-g] [-b|-B] [-j] [-w script] [-m idxname] [-e xmlfile] [-f s|z|sz] [-l size] [-q prefix] [-h] <filename>: data file name/path (relative paths to c-treeACE SQL directory) www.faircom.com All Rights Reserved 30 c-treeACE SQL Utilities -d database : database name (default: ctreeSQL) -s server: c-treeACE SQL Server name (default: FAIRCOMS) -u userid: userid for logging into c-treeACE SQL -a password: password for authorization -n symbolic: set SQL table name to symbolic symbolic -o userid: set owner of table to userid -i: non interactive mode: ignore errors and continue -r: remove existing linked table (file is not deleted) -k: skip fields that don't comply with conventional identifiers rules -c: allow table names not complying with conventional identifiers rules -x: skip indices -p: promote unsigned integer to greater signed type -P: promote unsigned types to greater signed type and set check for fitting value -z: allow indices with missing string terminator in key segments -g: ignore existing index name in IFIL resource -b: (lowercase) switch grants all permissions on the table to the public -B: (uppercase) switch grants read-only permissions on the table to the public Note: If both -B and -b are specified, the read-only setting takes precedence. Notice that the owner of the table and the DBA have all the permissions. This introduces a change in behavior for existing applications because this switch is now-case sensitive. -j: non-interactive relink of existing table -w script: write CREATE statements into script file script instead of importing the table -m idxname: set index idxname as primary key -e xmlfile: get DODA definitions from external XML file xmlfile -f s | z | sz: force string padding to (s)paces (z)eroes or (sz)spaces zero terminated -l size: specify LONGVAR* field size threshold -q prefix: prefix SQL table name with prefix (when the -q option is combined with the symbolic table name option, -n, the prefix is prepended to the symbolic name instead to the table name) -h: display usage help Note: The parameters are case-sensitive. By default they are lower case unless otherwise stated. Example To make existing c-tree files mydata.dat (containing proper IFIL and DODA resources) and mydata.idx accessible via c-treeACE SQL, follow these steps: 1. Create a database named ctreeSQL. 2. Copy your ISAM custmast.dat and custmast.idx files into the ctreeSQL.dbs subdirectory of the server's working directory. 3. Ensure c-treeACE SQL is running, as ctsqlimp is a client application. 4. Run the ctsqlimp utility found in the /tools/cmdline/admin/client/ directory of your c-treeACE installation: www.faircom.com All Rights Reserved 31 c-treeACE SQL Utilities ctsqlimp custmast.dat -u ADMIN -a ADMIN -s FAIRCOMS 5. Run the Interactive SQL, isql, utility and issue the command: SELECT * FROM custmast; Specifying primary keys from imported indexes A command line option is available with the c-treeACE SQL Table Import Utility, ctsqlimp to specify a primary key from imported indexes. Use the -m option to specify an imported index of the table to be the primary key. The -m option takes an index name as a parameter. The index name is defined in the ridxnam member of the IFIL resource IIDX structure. Please notice that if ridxnam is not defined, an index name is automatically assigned when the table is added to the c-treeACE SQL system tables. The format of the automatically assigned index name is: tablename_indexnbr where indexnbr is zero for the first index. Example ctsqlimp my_table -u ADMIN -p ADMIN -m my_index Check for Max Number of Indices/Segments As of V10.3, logic in ctsqlimp checks for the maximum number of indices or segments. When importing tables, this logic checks if the number of indices defined is less than MAX_DAT_KEY value and the number of segments per key is less than MAX_KEY_SEG value. This logic prevents the import unless you are using interactive ctsqlimp, which asks if you want to continue with the import because it may be useful to import the table and adjust the server setting afterwards. Allow linking SQL indices with rightmost segment(s) on hidden field(s) Prior to V11, the ctsqlimp logic did not allow importing indices if at least one of the segments points to a field not exposed in SQL. This is encountered frequently in the c-treeRTG products. In V11 and later, the ctsqlimp logic optionally (OFF by default) allows importing indexes having segments pointing to hidden fields if at least one segment is valid and all segments pointing to hidden fields are the rightmost with no intermixing of exposed and hidden fields. This logic is controlled by a new sqlimport callback CTSQLCB_CONFIRM_INDEXTRUNC. Mapping unsigned integers with c-treeACE SQL A command line option is available to ctsqlimp, -p, to map an unsigned integer (CT_CHARU, CT_INT2U and CT_INT4U) not to a corresponding c-treeACE SQL type but to the next larger integer type, thus “promoting” it. While the c-treeACE SQL engine will use the larger integer type, nothing at the c-tree ISAM storage level changes. This allows proper unsigned (positive) values for those values that when mapped into a signed field would become negative. Without the -p option the mapping from c-tree to c-treeACE SQL is the following: CT_CHARU - TINYINT CT_INT2U - SMALLINT www.faircom.com All Rights Reserved 32 c-treeACE SQL Utilities CT_INT4U - INTEGER With the -p option the mapping becomes: CT_CHARU - SMALLINT CT_INT2U - INTEGER CT_INT4U - BIGINT When using the -p switch, a SELECT * from table shows the proper values for unsigned integer fields instead of a negative value. When doing an insert, as long as the inserted value fits in the original type range, the value seen at the ISAM level is the proper one. If the value inserted is outside the original type range, only the lower significant part is stored. Check for Invalid Characters in Field Names The -k switch allows one to skip importing fields that do not comply with the conventional identifier rules without being prompted every time an incompatible field is encountered. ctsqlimp also has a “non-interactive” option (-i) which avoids prompting the user by having a list of pre-defined default answers. The actions taken by default are the most conservative and safe. In case an unconventional field is encountered, the default action is to import the field and inform the user that in c-treeACE SQL statements, the resulting column name must be enclosed in double quotation marks. The option -k can be used in conjunction with the -i option to change the default behavior in case an unconventional field is encountered and automatically skip it. Support for Importing Table with an Alternative Name The c-treeACE SQL import utility derives the table name to be stored in the c-treeACE SQL system tables from the physical file name, for instance the table custmast.dat is imported as custmast. It is possible to specify a c-treeACE SQL table name on the command line by using the -n option. Null Fields and Field Default Values Considerations The import utility checks if a table being imported was created with NULL FIELD support (this is true for tables created with c-treeDB APIs). If the table being imported was created with NULL FIELD support, the import utility updates the SQL dictionaries accordingly, by setting the NULL FIELD flag to “Y”. If a table being imported has no NULL FIELD support, the NULL FIELD flag of the c-treeACE SQL dictionary will be set to “N” and the c-treeACE SQL dictionary default value for that field will be set to 0 for numeric fields, or “ ” for string fields. Default values are not available for SQL_LONGVARCHAR and SQL_LONGVARBINARY field types and the NULL FIELD flag for those fields are always set to “Y”, even though null values are not supported for these types of fields. A side effect would be, for example, inserting a NULL value in a LONG VAR CHAR field and reading back an empty string when the field is retrieved from a record. Please note that this only affects tables created without NULL FIELD support. www.faircom.com All Rights Reserved 33 c-treeACE SQL Utilities ctsqlimp Import Indices with Segment on String Field Missing Last Byte A fairly common situation C programmers may encounter is that the last byte from an index segment is usually assumed to be ‘\0’ (nul), when in fact it is not. The index segment then does not match the entire field (many times based on a CT_FSTRING). There have been inquiries about importing into c-treeACE SQL indices where a segment is on a string field, however, it is missing the last byte. While this is atypical usage, with c-tree technology there is no actual problem in allowing these indices. The c-treeACE SQL can map an index segment into a field even if the segment does not match the entire field and to properly perform the segment low-level handling. No check is made on the “nature” of the partial segment. It is up to the import utility to verify the index is proper for c-treeACE SQL handling. The feature itself is off by default and is activated with the SQL_OPTION PARTIAL_SEG server configuration keyword. Note: The only way c-treeACE SQL may be aware of an index using a partial segment is because this index has been imported by ctsqlimp. Using an index with partial segment imported with ctsqlimp without the SQL_OPTION PARTIAL_SEG turned on results in a CTDBRET_NOTFIELD error. Details Logic was added to the ctsqlimp utility to import indices with segment on string field missing the last byte. Note: This feature is turned on with the -z command line switch and requires a server with SQL_OPTION PARTIAL_SEG turned on. Import Duplicate Filenames into c-treeACE SQL The c-treeACE SQL import utility, ctsqlimp, has been updated to take advantage of the ability to import multiple files with the same physical name into an SQL database. Simply use the -n (symbolic) name option on import to uniquely identify each table in c-treeACE SQL: >ctsqlimp ./data/A/myfile.dat -u ADMIN -a ADMIN -n myfileA >ctsqlimp ./data/B/myfile.dat -u ADMIN -a ADMIN -n myfileB SQL Tip To create a consolidated view over these two files, create individual views to present the tables as one. A "mapping" table can be created to provide table source identifying information to the view. Consider that myfile.dat contained the fields name, id, and moddate: CREATE TABLE map (consolidated_name CHAR(32), symbolic_name CHAR(32); INSERT INTO map VALUES ('myfile', 'myfileA'); INSERT INTO map VALUES ('myfile', 'myfileB'); CREATE VIEW myfileA_vmap AS ( www.faircom.com All Rights Reserved 34 c-treeACE SQL Utilities SELECT myfileA.name, myfileA.id, myfileA.moddate, map.consolidated_name, map.symbolic_name FROM myfileA CROSS JOIN map WHERE map.symbolic_name = 'myfileA' ); CREATE VIEW myfileB_vmap AS ( SELECT myfileB.name, myfileB.id, myfileB.moddate, map.consolidated_name, map.symbolic_name FROM myfileB CROSS JOIN map WHERE map.symbolic_name = 'myfileB' ); CREATE VIEW myfile AS ( SELECT * from myfileA_vmap UNION SELECT * from myfileB_vmap ); SELECT * from myfile; 6.5 ctsqlutl - c-treeACE SQL Table Maintenance Utility The c-treeACE SQL table maintenance utility, ctsqlutl, is available as a general purpose utility to perform maintenance on c-treeACE SQL databases. This includes renaming tables and columns. The ctsqlutl utility syntax is as follows: ctsqlutl [command] arg1 arg2 ... argn [options] Valid Commands: -rencol: rename column: arg1= Table name arg2= Current column name arg3= New column name Renames a column within a specified table. -rentbl: rename table: arg1= Current table name arg2= New table name Renames a table. Valid Options: -o: Owner of table -d: Database name (default: ctreeSQL) -s: c-treeACE SQL Server name (default: FAIRCOMS) -u: UserID for logging into c-treeACE SQL -a: Password for authentication -h: Display usage help 6.6 ctsqlmdd - c-treeACE SQL Merge Database Utility It is necessary at times to move a c-treeACE SQL database from one system to another. This can involve path changes which need to be reflected in the session and database dictionaries. The c-treeACE SQL Move Database Utility can be used to simplify this process. This utility allows you www.faircom.com All Rights Reserved 35 c-treeACE SQL Utilities to specify target and destination c-treeACE SQL from which the database dictionary will be moved and/or updated. Usage ctsqlmdd svn [-u uid] [-p upw] [-S svn] [-U uid] [-P upw] [-n sect] Where: svn: source c-treeACE SQL name (may be "local" for direct access) -u uid: user name on source server -p upw: user password on source server -S svn: destination c-treeACE SQL Server name -U uid: user name on destination server -P upw: user password on destination c-treeACE SQL uses the c-treeDB database API to generate and maintain the session and database dictionaries necessary to maintain c-treeACE SQL relational databases. (The c-treeDB functions, ctdbMergeSessionDictionary() and ctdbMergeDatabaseDictionary(), provide the core functionality for this utility.) The source code for this utility, ctsqlmdd.c, demonstrates a generic implementation of the activities needed to achieve a session and/or database merge between systems. For precise applications, or to embed these activities into an application, the user is invited to view and inspect this source code example. www.faircom.com All Rights Reserved 36 c-treeACE SQL Utilities 6.7 cttrnmod - Change Transaction Mode Utility cttrnmod allows an advanced user to change the transaction status of a c-treeACE data file and its associated index files. The utility can also be used to display the transaction status of a c-tree data file and its associated indices. It is expected only advanced database administrators will run this utility. Usage cttrnmod (set <tranmode>|get) (-d <database>|-f <filelist>) [-u <userid>] [-p <password>] [-s <servername>] [-n <sect>] Where set <tranmode> - Set the transaction mode to one of the following: • T - Full Transaction Control • P - Partial Transaction Control (No Recoverability) • N - No Transaction Control (No Recoverability) repl=on - Enable replication (requires full transaction control). repl=off - Disable replication. The following extended header attributes may also be set: • {+,-}R - {Enable,Disable} Restorable deletes • {+,-}C - {Enable,Disable} Transaction controlled deletes • {+,-}A - {Enable,Disable} Auto transaction switching. get - Display the current transaction mode. -d or -f - Operate on all files in the database or all listed files: • -d <database> - Operate on all files in the c-tree database <database>. • -f <filename> - Operate on all files listed in the file <filelist>. -u <userid> - Specify c-tree user ID. -p <password> - Specify c-tree user password. -s <servername> - Specify c-treeACE Server name to connect to. Default: FAIRCOMS -n <sect> - Specify node sector size. Default: 64 (PAGE_SIZE=8192) The files to change are specified by either the -d <database> option or the -f <filelist> option. The -d <database> option specifies the name of a c-tree database -- when this option is specified, the utility operates on all files referenced in that database (excluding SQL system data and index files). The -f <filelist> option specifies the name of a text file containing names of c-tree data files, one per line -- when this option is specified, the utility operates on all files specified in that text file. Note: Indices created with ctPREIMG or ctTRNLOG are physically structured differently than indices that do not support transactions. Thus a non-tran index cannot be converted to transaction control, and must be rebuilt after the conversion. If an index file is created ctPREIMG or ctTRNLOG, it can be accessed in all transaction and non-transaction access modes. www.faircom.com All Rights Reserved 37 c-treeACE SQL Utilities Important Performance Considerations When turning transaction processing off for a file, it is possible to take an even larger performance hit under specific c-treeACE Server configurations. Be sure to remove or comment out the line COMPATIBILITY FORCE_WRITETHRU from your c-treeACE Server configuration file ctsrvr.cfg. While this option provides only the safest of data integrity for your non-transaction processing controlled files, it forces an enormous performance penalty for doing so. This keyword has historically been included by default with most c-treeACE Server installations. Example The following example demonstrates turning off transaction control for all c-tree data files and their associated index files in the rdsdb database: # cttrnmod set N -d rdsdb Setting transaction mode to NON_TRAN for files in database rdsdb... Tranmode -------NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN NON-TRAN Filemode -------0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 Filename -------.\rdsdb.dbs\admin_deptbl.dat .\rdsdb.dbs\admin_deptbl.idx .\rdsdb.dbs\admin_dept_multi_ndx.idx .\rdsdb.dbs\admin_dept_ndx.idx .\rdsdb.dbs\admin_emptbl.dat .\rdsdb.dbs\admin_emptbl.idx .\rdsdb.dbs\admin_emp_no_ndx.idx .\rdsdb.dbs\admin_emptbl1.dat .\rdsdb.dbs\admin_emptbl1.idx .\rdsdb.dbs\admin_emp_no_ndx1.idx VERIFYING No Transaction Control... VERIFY succeeded 3 Data Files Updated 0 Errors The following example demonstrates reading the transaction status of the data and index files in the rdsdb database: # cttrnmod get -d rdsdb Reading transaction mode for files in database rdsdb... Tranmode -------ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG ctTRNLOG Filemode -------0x0031 0x0031 0x0031 0x0031 0x0031 0x0031 0x0031 0x0031 0x0031 0x0031 Filename -------.\rdsdb.dbs\admin_deptbl.dat .\rdsdb.dbs\admin_deptbl.idx .\rdsdb.dbs\admin_dept_multi_ndx.idx .\rdsdb.dbs\admin_dept_ndx.idx .\rdsdb.dbs\admin_emptbl.dat .\rdsdb.dbs\admin_emptbl.idx .\rdsdb.dbs\admin_emp_no_ndx.idx .\rdsdb.dbs\admin_emptbl1.dat .\rdsdb.dbs\admin_emptbl1.idx .\rdsdb.dbs\admin_emp_no_ndx1.idx www.faircom.com All Rights Reserved 38 c-treeACE SQL Utilities ctTRANMODE Control (c-treeACE V11 and c-treeRTG V2 and later) When using the Transaction Control utility, cttrnmod, to disable transaction support on a file with extended file mode ctTRANMODE, the utility could report that after successfully disabling ctTRNLOG, the file still has ctTRNLOG set. This is expected for a file with the ctTRANMODE bit set when using a TRANPROC c-tree application. cttrnmod has been updated to disable ctTRANMODE and ctPIMGMODE bits when it sets a file to no-transaction support. It was also modified to support explicitly enabling or disabling one of these bits (depending on the file mode that is in effect at the time). Replication New replication actions have been added to the cttrnmod utility for flexible control of replication attributes. cttrnmod now displays replication state for a data file cttrnmod can change a file's replication state with the repl option Note: Replication requires that the data file has a unique index and that the data and index files are using full (ctTRNLOG) transaction control. Examples 1. Enable full transaction logging on files: # cttrnmod set T -f files.txt -u ADMIN -p ADMIN -s FAIRCOMS Setting transaction mode to ctTRNLOG for files listed in file files.txt... Replicate --------- Tranmode -------- Filemode -------- Filename -------- NO ctTRNLOG ctTRNLOG 0x0032 0x0032 ctreesql.dbs\admin_t.dat ctreesql.dbs\admin_t.idx ctTRNLOG 0x0032 ctreesql.dbs\admin_t_ti.idx Note the "Replicate" column for current replication state information. 2. Enable replication on files: # cttrnmod set repl=on -f files.txt -u ADMIN -p ADMIN -s FAIRCOMS Enabling replication for files listed in file files.txt... Replicate --------- Tranmode -------- Filemode -------- Filename -------- YES ctTRNLOG ctTRNLOG 0x0032 0x8032 ctreesql.dbs\admin_t.dat ctreesql.dbs\admin_t.idx ctTRNLOG 0x8032 ctreesql.dbs\admin_t_ti.idx www.faircom.com All Rights Reserved 39 c-treeACE SQL Utilities Note: If cttrnmod is used to disable full transaction logging for a file, it also disables replication for that file. 6.8 fkverify It was possible that foreign key constraints could be violated in some versions of c-treeACE (V8.27 prior to revision 8662). A The Foreign Key Constraint Verification utility, fkverify, is available to check all Foreign Key constraints in a database to insure that referential integrity is maintained, and log any exceptions to a file. This utility connects directly to c-treeACE SQL through the direct link ODBC interface thus is cross platform, and requires no additional components. Syntax fkverify [-s server][-p port][-d database]-a password Where -s Machine name (default: localhost) -p Port (default: 6597) -d Database (default: ctreeSQL) -a Admin Password 6.9 sqlverify The sqlverify utility can be used to diagnose low lying c-treeACE SQL issues and relational integrity. This utility connects to c-treeACE SQL databases and runs multiple tests and internal consistency checks. If problems or unusual results are detected they are logged to verify.log. The syntax for using this utility is as follows: sqlverify [-s address][-p port][-d database][-n name][-f][-v] -a password Valid Options: -s: Machine name(default: localhost) -n: Server name (default: FAIRCOMS) -p: SQL Port (default: 6597) -d: Database (default: ctreeSQL) -f: Fix certain problems -v: verbose -a: Admin Password An example verify.log file might look like the following: Info: Table admin_custmast index 6 Info: Full Key Distinct Count was 81917, now 46218 Info: Table admin_custmast index 7 Info: Full Key Distinct Count was 81917, now 48939 Error: table admin_ordritem, index 0 holds 0 keys. Expected 1(1). Rebuild List of inconsistencies: www.faircom.com All Rights Reserved 40 c-treeACE SQL Utilities table | index | field | errorcd | errormsg 1 - syscolumns | | logicalid | 4019 | Mismatch column nullflag This example demonstrates an error as shown on line 5 of the output. In this case a rebuild of the index is indicated. Consult with FairCom's support team should you have any questions about the output of this utility against your database. The last section of inconsistencies should always be reported to FairCom's support team for investigation. www.faircom.com All Rights Reserved 41 7. Combining c-treeACE SQL with ISAM This chapter details the considerations associated with accessing c-treeACE SQL created data from a c-tree Plus ISAM application and using existing c-tree Plus ISAM created data from c-treeACE SQL. 7.1 Accessing c-treeACE SQL Files from ISAM Applications To highlight the factors to consider when accessing c-treeACE SQL data from ISAM applications, consider the following example. Here we create a table using c-treeACE SQL and then examine the c-tree file specifications. This section also discusses the reverse case: accessing a c-tree ISAM application file from c-treeACE SQL. Defining a Table Using c-treeACE SQL The following c-treeACE SQL commands define a table consisting of three fields and an index defined on one of the fields: CREATE TABLE example ( dbl float, int4 INTEGER, ch CHAR(8)); CREATE INDEX example_chidx ON example (ch); COMMIT WORK; Examining Resulting File Specifications Now that the table and index have been created, let’s look at the resulting field, table, and index definitions. Field Definitions First, let’s examine the field definitions, stored as a DODA resource in the data file. The SQL command specified three columns, but c-treeACE SQL created three additional fields for internal use: Field name Offset Type Length $DELFLD$ (a) 0 CT_ARRAY 4 $NULFLD$ (b) 4 CT_ARRAY 1 $ROWID$ (c) 8 CT_INT8 8 dbl 16 CT_DFLOAT 8 www.faircom.com All Rights Reserved 42 Combining c-treeACE SQL with ISAM Field name Offset Type Length int4 24 CT_INT4 4 ch 28 CT_FSTRING 8 (a) $DELFLD$ is a placeholder field at the beginning of the record for c-tree deleted record flag. If the first field in a record is not a binary field or the file is VARIABLE LENGTH, $DELFLD$ is not necessary. It can be modified, however, the first byte cannot be set to 0xFF or 0xFE for fixed-length data files, as these are reserved values. In V9.5, the size of $DELFLD$ changed from 4 bytes (or 5 in case of non-HUGE files) to 9 bytes. A configuration keyword, CTSQL_OPTION OLD_DELFLD_LEN, forces the use of the old size. (b) $NULFLD$ is a bit mask indicating which fields contain NULL values to support IFNULL functionality. If this field is not present, then all fields of a record will always be considered NOT NULL, and any operation to set the null flag of a particular field will be ignored. Select queries based on NULL field expressions may not be resolved as expected. (c) $ROWID$ is an automatic serial number to support ROWID functionality. If this field is not present, then the SQL engine will use the record’s RECBYT. Please note that RECBYT may not be a unique row identifier. As records are deleted and reused, the RECBYT of a deleted record will be used for an inserted record. Select queries based on ROWID may not be resolved as expected when the RECBYT is used. Considerations for ISAM applications The record starts with 16 bytes of internal field data. The fields accessible to applications via c-treeACE SQL begin at offset 16. c-treeACE SQL automatically maintains the contents of the internal fields using c-treeDB functions. At the ISAM level, the internal fields can be viewed and modified. If updating records at the ISAM level, care should be taken to preserve the semantics of these fields, as described above. The field values in a c-treeACE SQL table are set using c-treeDB functions and can be easily retrieved in the format of the underlying data type using c-treeDB functions. Some data types (e.g., Date, Time, etc.) will be encoded by c-treeDB and will be difficult to interpret at the ISAM level. Table and Index Definitions This section examines the table and index definitions defined using c-treeACE ISAM resources: IFIL, IIDX, ISEG, and XCREblk. For the sample file created using the c-treeACE SQL commands shown in this chapter, the resulting ISAM resources are as follows: IFIL examplefil = { // Data file definition. ".\ctreeSQL.dbs\example", // data file name (a) -1, // data file number 36, // data record length 0, // data extension size ctFIXED | ctTRNLOG, // data file mode (b) 3, // number of indices (c) 0, // index extension size ctFIXED | ctTRNLOG, // index file mode (b) exampleidx // index pointer }; IIDX exampleidx[] = { // Index definitions. { // Index #1: Internal (RECBYT) index. e www.faircom.com All Rights Reserved 43 Combining c-treeACE SQL with ISAM 5, 0, 1, 0, 0, 1, &recbytseg, "$RECBYT$", NULL // // // // // // // // // key length (d) key type duplicate flag null key flag empty character number of segments segment pointer r-tree symbolic index alternate index name (a) }, { // Index #2: Internal (ROWID) index. e 4, // key length 0, // key type 0, // duplicate flag 0, // null key flag 0, // empty character 1, // number of segments &rowidseg, // segment pointer "$ROWID$", // r-tree symbolic index NULL // alternate index name (a) }, { // Index #3: User-created index on ch 12, 0, 1, 0, 0, 1, &chidxseg, "example_chidx", ".\ctreeSQL.dbs\example_chidx.idx" field. f // key length // key type // duplicate flag // null key flag // empty character // number of segments // segment pointer // r-tree symbolic index // alternate index name (a) } }; ISEG recbytseg = {0, 1, RECBYT}; // One-byte record position segment. ISEG rowidseg = {8, 4, SRLSEG}; // Four-byte auto serial number segment. ISEG chidxseg = {5, 8, SCHSEG}; // User-created segment on ch field. (f) XCREblk xcre = { // Extended creation information. ctTRANDEP | ctRSTRDEL // x8mode (g) }; Notes: (a) The SQL CREATE TABLE and CREATE INDEX commands cause c-treeACE SQL to create three files in the current database directory, which in this example is ctreeSQL.dbs. The files are: example.dat - contains file definition resources and data records. example.idx - contains key values for the two internal indexes. example_chidx.idx - contains key values for the user-created index on the ch field. If additional indexes are created, they are created as additional physical files. (b) The files are created as transaction-processed files. (c) Three indexes are created (two internal indexes plus the user-created index on the ch field). (d) The first index is an internal index known as a RECBYT index used to support enhanced space management capabilities. www.faircom.com All Rights Reserved 44 Combining c-treeACE SQL with ISAM (e) The second index is an internal index known as a ROWID index used to support SQL ROWID functionality. (f) The third index is the user-created index on the ch field. The key is defined over the full length of the field, uses the SCHSEG segment mode, and allows duplicates. To create an index that does not allow duplicates use the SQL command CREATE UNIQUE INDEX. (g) The files are created using special extended file modes. ctTRANDEP specifies a transaction-dependent file and ctRSTRDEL specifies restorable delete capabilities. These properties enable rollback of file create and delete operations (at both the SQL and ISAM level). Note: c-treeACE ISAM functions can be used to create data and index files, and if the file definitions adhere to the special properties required of c-treeACE SQL files as detailed here, the files can be easily imported to c-treeACE SQL using the ctsqlimp utility. One reason that a developer might choose this option is to create files with special properties (such as ctADD2END, to create chronological files) that c-treeACE SQL currently does not provide a way to specify at file create time. If PRIMARY KEY is specified, c-treeACE SQL creates an additional index file with an automatically-generated name, such as sys_001_000001078.idx, and adjusts the IFIL resource in the data file to include an additional index definition. The same is true if FOREIGN KEY is specified: c-treeACE SQL creates an additional index file with an automatically-generated name and adjusts the IFIL resource in the data file to include an additional index definition. Note: c-treeACE ISAM has no knowledge of c-treeACE SQL referential integrity constraints. It’s possible to violate referential integrity constraints so use caution when updating records directly using ISAM functions. 7.2 Using Existing ISAM Data with c-treeACE SQL In addition to creating new files under the c-treeACE SQL, it is possible to use existing c-tree Plus files under the c-treeACE SQL. Table Definition Requirements Tables must contain IFIL and DODA structures. These can be added after the fact for existing files and are inserted automatically for files created by c-treeDB and c-treeACE SQL. The ISAM application must use the c-tree Plus data types (as defined in the DODA) as in the c-tree - SQL data type mapping. For example a CT_CHAR is used in the SQL to store a 1-byte integer. Note: There is an incompatibility between the use of CT_ARRAY in the current c-tree Plus ODBC Driver and the use of CT_ARRAY in c-treeDB and c-c-treeACE SQL, including the c-treeACE SQL ODBC Driver. The table must have either TRNLOG or PREIMG in its file mode to use the ROLLBACK WORK and integrity constraint capabilities. Superfiles are not supported by c-treeACE SQL. To properly handle NULL, the table must contain the $NULFLD$ field, a hidden field generated by c-treeDB at creation time. Tables created with the c-treeDB Interface (used www.faircom.com All Rights Reserved 45 Combining c-treeACE SQL with ISAM under c-treeACE SQL) have a hidden field, $NULFLD$, which is used to determine if each user-created field in the record buffer has a NULL value. c-treeACE SQL requires this capability to implement constraints. c-treeDB and c-treeACE SQL will access tables without the $NULFLD$ field, but the table’s fields will always return a non-NULL status. To properly handle JOINS referencing ROWID, the table should contain the $ROWID$ field (a hidden field generated by the c-treeDB at creation time). c-treeDB and c-treeACE SQL should work with tables without the $ROWID$ field, and will use the record offset as the ROWID tuple identifier. SQL statements like “select * from table where ROWID > ‘4’” will fail because using record offset as ROWID will give us record offsets instead of sequential numbers. Note: When c-tree updates a variable length record, the record offset for the record may change if the updated record size is larger than the original record. In this particular case, the ROWID for this ROW will not be unique, as required by the SQL standard. Index Definition Requirements If an index contains a segment made by a “partial field” (i.e., does not use Schema segment modes or the segment starting offset and the segment length are different from the field starting offset and the field length) c-treeACE SQL cannot access this index, even though the index is still properly updated by c-tree. If there is more than one logical index in one physical index file, the DROP INDEX and the DROP TABLE commands do not work properly. Alter table may not work correctly if tables contain index segments that do not start at field boundaries and/or span over several fields. Example: If a field is deleted from the table, and this field is part of an index segment that spans over several fields, c-treeDB may not know how to adjust the index segment length after the field is deleted from the table. The resulting index definition may not be correct. Tables with unusual characteristics may also not work correctly and the altered table may inherit c-treeDB characteristics that will prevent them from working in the original application. Adding DODAs to Existing Files To use c-treeACE SQL with existing ISAM files that do not already have DODAs, add a DODA to each file. This is most easily done with a developer-created utility that opens each file and calls PutDODA() to insert the required resource into that file. The utility should: 1. Include a data object definition array (DODA), simply an array of DATOBJ structures, defined below. 2. Open each data file in ctEXCLUSIVE mode. 3. Call PutDODA() for each file to insert the DODA resource. 4. Close the files. A DODA is a data object definition array. Each element of the array is comprised of a structure of type DATOBJ. Only three of the first four fields of the DATOBJ are required for c-tree Plus. DATOBJ is defined as follows: typedef struct { pTEXT fsymb; pTEXT fadr; UCOUNT ftype; /* ptr to symbol name */ /* adr of field in record buffer */ /* type indicator */ www.faircom.com All Rights Reserved 46 Combining c-treeACE SQL with ISAM UCOUNT ... } DATOBJ; flen; /* field length */ fsymb points to a unique symbolic name for the field and should not be NULL. fadr is not used by c-tree Plus (its value is ignored). ftype is one of the field types specified in the “Field Types” table. flen is set to the field’s length for fixed length fields, or the known maximum for varying length fields with a known maximum length, or zero for varying length fields without a known maximum length. If the field type has an intrinsic length, which is true for types CT_CHAR through CT_DFLOAT, a zero length is automatically replaced by the intrinsic length. Given a data record with the structure: struct { TEXT zipcode[10]; /* Zip code LONG ssn; /* social security # TEXT name[50]; /* name } DATA_FORMAT; */ */ */ The corresponding DODA would be defined as: DATOBJ doda[] = { {"ZipCode",NULL,CT_FSTRING,10}, {"SocialSecurity",NULL,CT_INT4}, {"Name",NULL,CT_STRING,50} }; Note: The two string fields show the difference between fixed-length and variable-length strings. zipcode, CT_FSTRING, takes up a fixed space in the record (10 bytes) and does not require a NULL to terminate the string. name, CT_STRING, takes up a variable amount of space up to a maximum of 50 bytes and is NULL terminated. Available field types are described in “Record Schema - Field Types” in the c-tree Plus Programmer’s Reference Guide. PutDODA() assigns the contents of a data object definition array (DODA) to data file datno, which must be opened in ctEXCLUSIVE mode. DODA points to the beginning of the DODA as described above. The numfld parameter indicates how many data fields are in the DODA, three in the example above. PutDoda() has the following syntax: COUNT PUTDODA(COUNT datno,pDATOBJ doda,UCOUNT numfld) See the PutDODA() function description in the c-tree Plus Function Reference Guide and “Record Schemas” in the c-tree Plus Programmer’s Reference Guide for additional details. Contact your nearest FairCom office for assistance if needed. 7.3 Mapping of c-tree to c-treeACE SQL Types c-tree DODA Type Default SQL Type Mapping CT_BOOL BIT CT_CHAR CT_CHARU TINYINT CT_INT2 CT_INT2U SMALLINT www.faircom.com All Rights Reserved 47 Combining c-treeACE SQL with ISAM CT_INT4 CT_INT4U INTEGER CT_MONEY CT_CURRENCY MONEY CT_DATE DATE CT_TIME TIME TIMES TIMESTAMP CT_SFLOAT REAL CT_DFLOAT CT_EFLOAT DOUBLE CT_SQLBCD NUMERIC CT_FSTRING CT_FPSTRING CT_F4STRING if ( length <= 8192 && length != 0 ) CHAR else LVARCHAR CT_STRING CT_PSTRING if ( length <= maxlen && length != 0 ) if ( isvlen ) VARCHAR else CHAR else LVARCHAR CT_F2STRING CT_ARRAY if ( length <= 8192 ) BINARY else LVARBINARY CT_2STRING if (length <= maxlen && length != 0 ) (binflag == CTDB_BINARY_VARCHAR) ? VARCHAR : VARBINARY else LVARBINARY CT_4STRING switch( binflag ) case CTDB_BINARY_VARCHAR LVARCHAR case CTDB_BINARY_CLOB CLOB case CTDB_BINARY_BLOB BLOB default: LVARBINARY CT_INT8 CT_INT8U BIGINT CT_FUNICODE CT_F2UNICODE NCHAR www.faircom.com All Rights Reserved 48 Combining c-treeACE SQL with ISAM CT_UNICODE CT_2UNICODE NVARCHAR www.faircom.com All Rights Reserved 49 8. c-treeACE SQL Types SDK 8.1 Overview of the c-treeACE SQL Types SDK c-treeDB is a high-level, easy to use API in addition to the traditional c-tree APIs: ISAM and low-level. c-treeDB is intended as the standard for c-treeACE programming. When compared to ISAM and low-level APIs, c-treeDB introduced a formal definition on the structure of data and index files, introduced concepts such as ROWID and NULL field support, and more specifically, a formal definition for each field type supported. Existing application data and index files, i.e. data created prior to the publication of the c-treeDB API, may have implemented certain field types in a way that may be incompatible with c-treeDB. Hence, they will be incompatible with c-treeACE SQL as c-treeACE SQL relies upon c-treeDB functionality. Field types such as CT_DATE, CT_TIME and CT_TIMES are probably the most common examples of existing data that may be incompatible with c-treeDB. The c-treeDB Callback feature was implemented to provide our customers a means to intercept certain c-treeDB operations and add custom code to manipulate record buffer layouts or change field data on the fly and make the record and field data compatible with c-treeDB. Please refer to the “c-treeDB Callback” document for detailed information concerning this new feature. The c-treeDB Callback feature was introduced into c-treeACE SQL to allow for easy and transparent translation of customers’ existing ISAM or low-level native data to a data format that is compatible with c-treeACE SQL requirements. This new feature is called c-treeACE SQL Callbacks. This section describes the utilization of the c-treeACE SQL Callback feature to introduce code to allow existing ISAM data to be used transparently with c-treeACE SQL. When c-treeACE SQL reads data from native ISAM tables, the callback code translates the data record to make every data field compatible with SQL. When c-treeACE SQL writes new data, or updates existing data, the callback code will translate the data in SQL format to comply with the native format used by the ISAM application. The ISAM table will be available for use with c-treeACE SQL, yet remains compatible with existing ISAM applications. An example field conversion Consider a field called “MYTIME”. It is declared in the DODA as a CT_INT4 field. Just by inspecting the table definition data, there is not enough information to decide if a CT_INT4 field is in fact an integer field or a MYTIME field. The MYTIME information stored in a CT_INT4 field is based on the C Runtime Library time (RTL) routines. The C RTL time value is a number that represent the number of seconds since a given date in the past. The value implementation is system dependent and the C RTL time handling functions should be used to guarantee portability. www.faircom.com All Rights Reserved 50 c-treeACE SQL Types SDK The MYTIME’s CT_INT4 fields are transparently converted to CT_TIMESTAMP fields by the callback code. This transparent conversion allows c-treeACE SQL to properly display the time stamp data and the c-treeACE SQL parser will allow the use of SQL date, time and time stamp functions to be applied to the field data. Without the transparent conversion performed by the callback code, the MYTIME fields would be handled by c-treeACE SQL as integer fields. The MYTIME data is converted to CT_TIMESTAMP format using the following pseudo code. Example Conversion time_t tmpval; struct tm* ptr; /* copy the MYTIME value to a temporary variable */ memcpy(&tmpval, &src_recbuf[srcofs], srclen); /* adjust local timezone to UTC timezone */ tmpval -= 21600; /* convert a time_t value into a broken-down time, expressed in UTC */ if ((ptr = gmtime(&tmpval)) != NULL) { CTDATETIME stamp; /* convert the broken-down time_t values to c-treeDB time stamp */ if ((Retval = ctdbDateTimePack(&stamp, (ptr->tm_year + 1900), (ptr->tm_mon + 1), ptr->tm_mday, ptr->tm_hour, ptr->tm_min, ptr->tm_sec)) != CTDBRET_OK) goto Exit; /* write the converted time stamp data to the destination record */ os_memcpy(&dst_recbuf[dstofs], &stamp, sizeof(stamp)); } else { Retval = CTDBRET_INVDATETIME; goto Exit; } In the example above, the src_recbuf is a source record buffer read from an ISAM data file with a MYTIME field. srcofs is the offset in the record buffer of the MYTIME field. dst_recbuf is a translated record buffer that will be presented to c-treeACE SQL with the MYTIME’s CT_INT4 fields translated to CT_TIMESTAMP field type. The CT_TIMESTAMP data is converted back to MYTIME format using the following pseudo code. Example Reverse Conversion CTDATETIME stamp; NINT year, month, day, hour, min, sec; time_t tmpval = 0; struct tm ptr; /* copy the time stamp field to temporary variable */ os_memcpy(&stamp, &src_recbuf[srcofs], sizeof(stamp)); /* clear the C RTL time structure */ os_memset(&ptr, 0, sizeof(ptr)); www.faircom.com All Rights Reserved 51 c-treeACE SQL Types SDK if (stamp != 0.0) { /* break down c-treeDB time stamp data */ if ((Retval = ctdbDateTimeUnpack(stamp, &year, &month, &day, &hour, &min, &sec)) != CTDBRET_OK) goto Exit; /* set the C RTL time struct */ ptr.tm_year = year - 1900; ptr.tm_mon = month - 1; ptr.tm_mday = day; ptr.tm_hour = hour; ptr.tm_min = min; ptr.tm_sec = sec; /* build a new time_t value */ tmpval = mktime(&ptr); /* convert from UTC time to local timezone */ #ifdef ctPortWIN32 tmpval = tmpval - _timezone + 21600; #else tmpval = tmpval - timezone + 21600; #endif } /* copy XTIME data to record buffer */ os_memcpy(&dst_recbuf[dstofs], &tmpval, sizeof(tmpval)); In the example above, the src_recbuf is a source record buffer passed by c-treeACE SQL with CT_TIMESTAMP fields. srcofs is the offset in the source record buffer of the CT_TIMESTAMP field. dst_recbuf is a translated record buffer that will be written to an ISAM table with the appropriate CT_TIMESTAMP fields translated to CT_INT4 fields. dstofs is the offset into the destination record buffer of the MYTIME field. 8.2 c-treeACE SQL with Callbacks The introduction of the c-treeDB Callback feature into c-treeACE SQL makes possible an easy and transparent translation of customers’ existing ISAM or low-level native data to a data format that is compatible with c-treeACE SQL requirements. The key advantage of this implementation is the callback feature can be used with standard production c-treeACE SQL. If the callback dynamic library is not present, c-treeACE SQL performs normally as before. When the callback dynamic library is present c-treeACE SQL will automatically load the dynamic callback library every time a new c-treeACE SQL user logon is performed. The current implementation of the c-treeACE SQL Callback library makes use of a configuration file as there is no practical way to detect which CT_INT4 fields are actually a MYTIME field or a CT_INT4 field. The configuration file is loaded automatically by the dynamic library. www.faircom.com All Rights Reserved 52 c-treeACE SQL Types SDK The Server Architecture On startup, c-treeACE SQL will attempt to load the c-treeACE SQL dynamic callback library when the SQL_OPTION LOAD_CALLBACK_LIB configuration option is specified in the server configuration file, ctsrvr.cfg. Note: For Windows systems, the dynamic callback library is named ctsqlcbk.dll. For Unix-based systems, the dynamic callback library is named libctsqlcbk with a filename extention appropriate to that operating system's default shared library conventions (.so, .sl., .dynlib, etc.). The diagram below depicts the relationship of c-treeACE SQL with the callback library and its configuration file: Figure 1: Import Utility with Callback Library and Configuration File If the callback library is not found, no messages are reported because the dynamic library is not required for normal c-treeACE SQL operation, however, types conversion will not take place. If the callback library is located and loaded, the following steps are taken: The ctsqlcbk.ini configuration file is loaded and parsed; The appropriate c-treeDB callbacks are established; Windows and Unix-based systems use different methods for locating dynamic libraries. In Windows systems dynamic libraries are called DLLs - Dynamic Link Libraries (.dll), while Unix-based systems use the term Shared Libraries (.so, .sl). Please refer to the c-treeACE SQL Callback Dynamic Library (page 53) section below for detailed information on the use of the libraries on Windows and Unix based systems. The configuration file is described in detail in the section. c-treeACE SQL Callback Dynamic Library A shared library provides a mechanism that allows a single copy of code to be shared by several instances of programs in a system. Programs can be written to load dynamic libraries without any prior arrangement at link time. Shared libraries are loaded dynamically while the program is running. One of the major advantages of using dynamic libraries is the possibility to provide new, specialized, or enhanced functionality by developing components that can be loaded at runtime, under program control. Note: To instruct the server to load the callback library, the SQL_OPTION LOAD_CALLBACK_LIB c-treeACE Server configuration keyword must be specified. www.faircom.com All Rights Reserved 53 c-treeACE SQL Types SDK Windows environment Under Windows, the c-treeACE SQL callback dynamic library is called ctsqlcbk.dll, and is created as a Windows DLL. When loading a DLL under Windows, the system looks through a series of directories, as follows: The directory from which the application loaded The current directory The Windows System32 directory The Windows System directory The Windows directory Directories listed in the PATH variable We recommend the c-treeACE SQL callback DLL be located in the c-treeACE SQL operating directory. Unix environment Under Unix based systems, the c-treeACE SQL callback dynamic library is called libctsqlcbk, with a file extension appropriate for that operating system's shared library conventions (.so, .sl, .dynlib, etc.) and it is created as a Unix shared library. Unix shared libraries must be located and loaded by the system on demand. In order for shared libraries to be loaded at runtime, the Unix dynamic loader must know where to locate it at run time. Unix systems use environment variables to select custom library directories. Among the different Unix platforms, there are three search path variables in use. The table below lists these variables and the platforms that use them. Environment Variable Unix Platforms LD_LIBRARY_PATH Solaris, UnixWare, Linux LIBPATH AIX SHLIB_PATH HP-UX We recommend that the c-treeACE SQL callback shared library be located in the c-treeACE SQL operating directory. For example, if the c-treeACE SQL directory is /home/ctreeSQL, the LD_LIBRARY_PATH environment variable could be: $ LD_LIBRARY_PATH = /home/ctreeSQL $ export LD_LIBRARY_PATH If the LD_LIBRARY_PATH environment variable is already set, it may be necessary to append the c-treeACE SQL operating directory at the end of the path as shown here: $ LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/home/ctreeSQL $ export LD_LIBRARY_PATH www.faircom.com All Rights Reserved 54 c-treeACE SQL Types SDK c-treeACE SQL Callback Configuration File Since there is no practical way to inspect a table and detect which CT_INT4 fields are actually MYTIME fields, a configuration is necessary for describing every table that has at least one MYTIME field. By default, the c-treeACE SQL callback configuration file is called ctsqlcbk.ini. Both Windows and Unix based systems use the same configuration syntax and file name convention. The syntax of the configuration file is similar to Windows .INI files. Comments are started with a semicolon character. Every character after a semicolon is treated as comments and will be ignored, as shown here. Configuration .ini ; this is a table declaration [nmalert] field = number, CT_FSTRING, 10 ; first field Each table is described in the configuration file with the table name inside square brackets. Each table represents a section entry, followed by the table’s field, index and index segment definitions as shown above: [nmalert] The fields are defined using the following syntax: field = field-name, field-type, field-length field-name is a string containing the field name. The field name should not be placed inside single or double quotes, and a comma must not be part of the field name. field-type is one of the following: Available Field Types CT_BOOL CT_MONEY CT_FSTRIN G CT_CHAR CT_CURRENCY CT_FPSTRIN G CT_CHAR U CT_NUMBER CT_F2STRIN G CT_INT2 CT_DATE CT_F4STRIN G CT_INT2U CT_TIME CT_STRING CT_INT4 CT_TIMES CT_PSTRIN G CT_INT4U CT_SFLOAT CT_2STRIN G CT_INT8 CT_DFLOAT CT_4STRIN G CT_INT8U CT_ARRAY field-length is an integer value representing the field length. www.faircom.com All Rights Reserved 55 c-treeACE SQL Types SDK Conversion Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 After the field definitions, each index, with its segments, must be declared. The syntax for an index definition is: index = keylen, nsegs Conversion Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 The index segment must follow the index declaration. Each index segment must be declared using the following syntax: 1. If an index segment consists of a whole field: segment = field-name, segmode field-name is a string containing the field name. The field name should not be placed inside single or double quotes, and a comma must be part of the field name. segmode is an integer value representing an index segment mode. 2. If an index segment consists of an arbitrary offset in the record buffer that cannot be mapped back to the offset of a field in the DODA, or an index segment length does not match a field length, the index segment syntax is: seg = segoffset, seglength, segmode segoffset is an integer value indicating the offset of the segment in the record buffer. seglength is an integer value indicating the segment length in bytes. segmode is an integer value representing an index segment mode. Conversion Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 www.faircom.com All Rights Reserved 56 c-treeACE SQL Types SDK Every table that has one or more MYTIME fields must be added to the configuration file. There is no special ordering of the tables. Below is an example of a configuration file with two tables: nmalert and nmmdesc. Conversion Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 [nmmdesc] field = number, CT_FSTRING, 10 field = modby, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = text, CT_STRING, 0 index = 10, 1 segment = number, 2 How to specify MYTIME field translation A MYTIME field, i.e. a CT_INT4 field used to store the MYTIME data, should be declared in the configuration file as a CT_TIMES field type. For example in the nmalert table the modwhen field is an MYTIME field type. The definition of the modwhen field in the configuration file should have a field type of CT_TIMES. Conversion Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 When the callback sees a table declared in the configuration file with a DODA field of type CT_INT4 and a field definition of CT_TIMES in the configuration file, it automatically performs the data translation between the C RTL time functions and the c-treeACE SQL time stamp data type. www.faircom.com All Rights Reserved 57 c-treeACE SQL Types SDK Specifying the configuration file location We recommend that the c-treeACE SQL callback configuration file be located in the operating directory. By default the c-treeACE SQL callback dynamic library will try to locate the configuration file in the current directory. There are certain circumstances that can cause the current directory to change, or to be undefined, after the server begins execution. If the server is started as a service under Windows, the current directory may be undefined, or if the server is started as a daemon under Unix systems, the current directory may change. For these circumstances, the location of the configuration file may be specified using the c-treeACE SQL configuration file. The following entry can be added to the server’s configuration file to specify the location of the c-treeACE SQL callback configuration file: APP_NAME_LIST full-path-of-configuration-file Example SERVER_NAME FAIRCOMS SQL_DATABASE ctreeSQL COMPATIBILITY LOG_WRITETHRU CONSOLE NO_SHUTDOWN_PROMPT DAT_MEMORY 5000000 IDX_MEMORY 9000000 APP_NAME_LIST C:\FairCom\V8.27\ctreeServers\ctreeSQLServer\ctsqlcbk.ini When using the APP_NAME_LIST server configuration keyword to specify the location of the configuration file, make sure the APP_NAME_LIST is the first one in the configuration file, that is, no other APP_NAME_LIST entries may appear before the entry that specify the location of the configuration. The File Definition Generating Utility A utility has been created to aid in the process of creating a configuration file with table, field and index definitions. The utility is called the File Definition Generating Utility, ctgendef, and its syntax is as follows: $ ctgendef table-name -u username -p password -s servername Where: table-name -- file name with or without a .dat extension. username -- username username password -- password of user servername -- server where the file resides The output of the ctgendef utility is sent to the console. It may be captured to a file using default shell arguments. For example: $ ctgendef table-name -u username -p password -s servername > ctsqlcbk.ini If multiple tables are to be added to the configuration file, the following commands may be used: $ ctgendef table1 -u username -p password -s servername > ctsqlcbk.ini $ ctgendef table2 -u username -p password -s servername >> ctsqlcbk.ini $ ctgendef table3 -u username -p password -s servername >> ctsqlcbk.ini www.faircom.com All Rights Reserved 58 c-treeACE SQL Types SDK $ ctgendef table4 -u username -p password -s servername >> ctsqlcbk.ini Example $ ctgendef nmalert [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_INT4, 4 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 Notice that the ctgendef utility outputs the definition of the modwhen field as CT_INT4 as declared in the nmalert’s DODA. You need to edit the configuration file and, in the particular case of the nmalert table, change the definition of the modwhen field to CT_TIMES. After this modification, the configuration looks as the following, noting the change to the field=modwhen entry. Example [nmalert] field = number, CT_FSTRING, 10 field = seq, CT_INT2, 2 field = modwhen, CT_TIMES, 8 field = modby, CT_INT2, 2 field = code, CT_FSTRING, 5 index = 12, 2 segment = number, 2 segment = seq, 8 index = 13, 2 segment = code, 2 8.3 Importing Tables Into c-treeACE SQL Before you can access data and index files created by an ISAM application with c-treeACE SQL, you need to import the data into c-treeACE SQL. For this purpose, FairCom has created the c-treeACE SQL Import Utility, ctsqlimp. ctsqlimp - c-treeACE SQL Import Utility The c-treeACE SQL import utility, ctsqlimp, utility “registers” or links existing c-tree Plus files with a c-treeACE SQL database without modifying the table structure such that the files remain accessible from the original application and also accessible from c-treeACE SQL. Details As we import a table into c-treeACE SQL, the utility reads the field definitions from the table’s DODA and populates c-treeACE SQL system catalog tables. We cannot allow the import utility to import the MYTIME fields as CT_INT4 field types. We have to make sure the import utility will import the MYTIME fields as CT_TIMES fields (equivalent to c-treeACE SQL TIMESTAMP field type). www.faircom.com All Rights Reserved 59 c-treeACE SQL Types SDK Import Utility Callback Architecture Each time a table is imported into c-treeACE SQL, the import utility will try to load an import utility dynamic callback library. Note: For Windows systems, the dynamic callback library is called ctsqlimp.dll. For Unix based systems, the dynamic callback library is named libctsqlimp with a filename extention appropriate to that operating system's default shared library conventions (.so, .sl., .dynlib, etc.). The diagram below depicts the relationship of the import utility with the callback library and its configuration file: Figure 2: c-treeSQL Server with Callback Library and Configuration File If the callback library is not located, the import utility proceeds normally with the table import process. No errors are reported since the presence of the dynamic library is not required for normal import utility operations. If the callback library is located and loaded, the following steps are taken: 1. 2. 3. 4. The ctsqlcbk.ini configuration file is loaded and parsed. The appropriate c-treeDB callbacks are established. The import utility continues if no errors are reported. The configuration file is the same used by c-treeACE SQL and it is described in detail in the c-treeACE SQL callback configuration file (page 55) section. Import Utility Callback Configuration File The configuration file used by the import utility dynamic library is the same configuration file used by c-treeACE SQL. The import utility expects the configuration file to be located in the same directory as the import utility executable file, and that the current directory is set to the directory where the import utility executable file is located. Building the callback libraries The only source modules used to build the callback libraries are ctsqlcbk.c and ctcbklib.c. Under Windows systems we also need ctsqlcbk.def to build the c-treeACE SQL callback library, and ctsqlimp.def to build the import utility callback library. The callback libraries have no dependencies on c-treeACE or c-treeDB libraries. Only the header files are referenced. www.faircom.com All Rights Reserved 60 c-treeACE SQL Types SDK Below are example make files you could use to build the ctsqlcbk.dll for Windows. Unix shared library files are quite similar, and you should consult your local compiler documentation for details. Note: The compiler and c-treeACE paths will need to be adjusted for your particular development environment. You may wish to investigate your own compiler options and flags based upon your unique needs. Example Server Callback Makefile ############################################################# # Your c-treeSQL callback dll makefile # # Operating Sys: MS-Windows NT/XP (Intel) # Compiler: Visual C/C++ (v6.x , v12.xx.xxxx) -VC98: 32bit # Memory Model: Flat Memory Model # Protocol: TCP/IP Sockets ############################################################# # PATH Definition Section mtBAS =mtmake coBAS =C:\PROGRA~1\MICROS~3\VC98 coBIN =C:\PROGRA~1\MICROS~3\VC98\bin coBINB=C:\PROGRA~1\MICROS~3\Common\msdev98\bin coLIB =C:\PROGRA~1\MICROS~3\VC98\lib coINC =C:\PROGRA~1\MICROS~3\VC98\include fcBAS =D:\fc8\ctreeSDK\ctreeAPI fcSRC =D:\fc8\ctreeSDK\ctreeAPI\ctree\source fcINC =D:\fc8\ctreeSDK\ctreeAPI\ctree\include fcTOM =D:\fc8\ctreeSDK\ctreeAPI\custom.sql # # # # # # # # # # m-tree's Base Compiler's Base Compiler's BIN Compiler's BINB Compiler's LIB Compiler's INCLUDE FairCom Base FairCom Source FairCom Include Custom client Settings # Compiler/Linker Macro Definition Section # Object File Switch CCOF =/Fo .SUFFIXES: .SUFFIXES: .c .obj CP = copy CPP= $(coBIN)\cl CC = $(coBIN)\cl LIBRARIAN = $(coBIN)\lib RC = $(coBINB)\rc IMPLIB = $(coBIN)\implib LINKPP = $(coBIN)\link -subsystem:windows -debug:full -debugtype:cv -pdb:none LINK = $(coBIN)\link -subsystem:windows -debug:full -debugtype:cv -pdb:none LINK3 = $(coBIN)\link -subsystem:console -debug:full -debugtype:cv -pdb:none CFLAGS = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od CFLAG2 = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od CFLAG3 = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od # Make the following components ALL :: ctsqlcbk.dll ctsqlcbk.dll: ctsqlcbk.obj ctcbklib.obj $(LINK) /DLL /MACHINE:IX86 /DEF:ctsqlcbk.def /OUT:ctsqlcbk.dll ctsqlcbk.obj ctcbklib.obj ctsqlcbk.obj: ctsqlcbk.c $(CC) -I$(fcINC) -I$(fcSRC) -I$(fcTOM) $(CFLAG2) ctsqlcbk.c www.faircom.com All Rights Reserved 61 c-treeACE SQL Types SDK ctcbklib.obj: ctcbklib.c $(CC) -I$(fcINC) -I$(fcSRC) -I$(fcTOM) $(CFLAG2) ctcbklib.c Example Import Utility Callback Makefile ############################################################# # import utility callback dll # # Operating Sys: MS-Windows NT (Intel) # Compiler: Visual C/C++ (v6.x , v12.xx.xxxx) -VC98: 32bit # Memory Model: Flat Memory Model # Protocol: TCP/IP Sockets ############################################################# # PATH Definition Section mtBAS =mtmake coBAS =C:\PROGRA~1\MICROS~3\VC98 coBIN =C:\PROGRA~1\MICROS~3\VC98\bin coBINB=C:\PROGRA~1\MICROS~3\Common\msdev98\bin coLIB =C:\PROGRA~1\MICROS~3\VC98\lib coINC =C:\PROGRA~1\MICROS~3\VC98\include fcBAS =D:\fc8\ctreeSDK\ctreeAPI fcSRC =D:\fc8\ctreeSDK\ctreeAPI\ctree\source fcINC =D:\fc8\ctreeSDK\ctreeAPI\ctree\include fcTOM =D:\fc8\ctreeSDK\ctreeAPI\custom.cli # # # # # # # # # # m-tree's Base Compiler's Base Compiler's BIN Compiler's BINB Compiler's LIB Compiler's INCLUDE FairCom Base FairCom Source FairCom Include Custom client Settings # Compiler/Linker Macro Definition Section # Object File Switch CCOF =/Fo .SUFFIXES: .SUFFIXES: .c .obj CP = copy CPP= $(coBIN)\cl CC = $(coBIN)\cl LIBRARIAN = $(coBIN)\lib RC = $(coBINB)\rc IMPLIB = $(coBIN)\implib LINKPP = $(coBIN)\link -subsystem:windows -debug:full -debugtype:cv -pdb:none LINK = $(coBIN)\link -subsystem:windows -debug:full -debugtype:cv -pdb:none LINK3 = $(coBIN)\link -subsystem:console -debug:full -debugtype:cv -pdb:none CFLAGS = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od CFLAG2 = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od CFLAG3 = -c -DWIN32 -D_X86_=1 -GX $(fcDDD) -Zi -Od # Make the following components ALL :: ctsqlimp.dll ctsqlimp.dll: ctsqlcbk.obj ctcbklib.obj $(LINK) /DLL /MACHINE:IX86 /DEF:ctsqlimp.def /OUT:ctsqlimp.dll ctsqlcbk.obj ctcbklib.obj ctsqlcbk.obj: ctsqlcbk.c $(CC) -I$(fcINC) -I$(fcSRC) -I$(fcTOM) $(CFLAG2) ctsqlcbk.c ctcbklib.obj: ctcbklib.c $(CC) -I$(fcINC) -I$(fcSRC) -I$(fcTOM) $(CFLAG2) ctcbklib.c www.faircom.com All Rights Reserved 62 c-treeACE SQL Types SDK 8.4 Which c-treeACE and c-treeDB Functions are Safe? When implementing a callback function, avoid calls to c-treeACE functions or to c-treeDB functions that in turn make calls to other c-treeACE functions, as these calls may interfere with any current internal states maintained by c-tree or by c-treeDB. There are some c-treeDB functions that are safe to be called from inside callback functions since they do not make c-treeACE calls and do not affect the internal state maintained by c-treeDB. The following c-treeDB functions are safe to be called from inside callback functions: ctdbSetCallback ctdbGetCallback ctdbClearCallback ctdbClearAllCallback ctdbGetHandleType ctdbSetLocalTag ctdbGetLocalTag ctdbGetRebuildProgr ess ctdbDateCheck ctdbDatePack ctdbDateUnpack ctdbDateToString ctdbStringToDate ctdbGetDay ctdbGetMonth ctdbGetYear ctdbIsLeapYear ctdbDayOfWeek ctdbGetDefDateType ctdbSetDefDateType ctdbCurrentDate ctdbTimeCheck ctdbTimePack ctdbTimeUnpack ctdbTimeToString ctdbStringToTime ctdbGetHour ctdbGetMinute ctdbGetSecond ctdbGetDefTimeType ctdbSetDefTimeType ctdbCurrentTime ctdbDateTimePack ctdbDateTimeSetDate ctdbDateTimeSetTime ctdbDateTimeUnpack ctdbDateTimeGetDate ctdbDateTimeGetTim e ctdbMoneyToLong ctdbLongToMoney ctdbMoneyToFloat ctdbFloatToMoney ctdbMoneyToString ctdbStringToMoney ctdbMoneyAdd ctdbMoneySub ctdbMoneyMul ctdbMoneyDiv ctdbMoneyCmp ctdbMoneyAbs ctdbBlobAlloc ctdbBlobFree ctdbBlobGetData ctdbBlobGetSize ctdbBlobSet ctdbBlobCmp ctdbBlobClear ctdbBigIntToLong ctdbLongToBigInt ctdbBigIntToFloat ctdbFloatToBigInt ctdbBigIntToString ctdbStringToBigInt ctdbMoneyToCurrenc y ctdbCurrencyToMone y ctdbCurrencyToLong ctdbLongToCurrency ctdbCurrencyToBigIn ctdbStringToDateTim e ctdbCurrentDateTime ctdbCurrencyToStrin g ctdbStringToCurrenc y ctdbCurrencyAdd ctdbCurrencySub ctdbCurrencyMul ctdbCurrencyDiv ctdbCurrencyCmp ctdbCurrencyAbs ctdbCurrencyRound ctdbMoneyToNumber ctdbNumberToMoney ctdbNumberToLong ctdbLongToNumber ctdbNumberToBigInt ctdbBigIntToNumber ctdbNumberToCurren cy ctdbCurrencyToNum ber ctdbNumberToFloat ctdbFloatToNumber ctdbNumberToString ctdbStringToNumber ctdbNumberAdd ctdbNumberSub ctdbNumberMul ctdbNumberDiv ctdbNumberZero ctdbIsNumberZero ctdbNumberCmp ctdbNumberAbs www.faircom.com All Rights Reserved 63 c-treeACE SQL Types SDK ctdbDateTimeToStrin g t ctdbBigIntToCurrenc y ctdbCurrencyToFloat ctdbFloatToCurrency ctdbNumberNegate ctdbNumberCopy ctdbNumberRound ctdbNumberGetDeci mal www.faircom.com All Rights Reserved 64 9. Migrating to c-treeACE SQL 9.1 Migration from c-tree ODBC to c-treeACE SQL ODBC With more and more traditional c-tree users leveraging the power of c-treeACE SQL, FairCom has labored to keep this transition as easy as possible. While we have strived for the utmost in compatibility, we occasionally find areas where it is possible to encounter unexpected situations. The c-tree ODBC and c-treeACE ODBC drivers are both fully standards compliant, however, subtle differences do exist. We have summarized these differences here. All table names returned by the c-treeACE ODBC Driver are as "owner.tablename" without regard to the server configuration option SQL_OPTION OWNER_FILE_NAMES. The SQL_OPTION OWNER_FILE_NAMES only affects the name of the table created on disk. It determines whether the owner name is prepended to the physical table name or not. Table names returned by the ODBC driver are not affected by this c-treeACE SQL option. Using the c-tree ODBC driver it was common practice to represent the symbolic table name in uppercase. You can use uppercase table names in c-treeACE SQL as long as you do not wrap them in double quotes. Another option is to use the SQL_OPTION DB_CASE_INSENSITIVE keyword before creating the template database and the c-treeACE SQL databases. 9.2 Overview of the c-treeACE SQL Migration SDK Many customers have a long history using FairCom’s ISAM and low-level APIs. With the introduction of the additional capabilities of the c-treeACE SQL, there are many users who would like to migrate their existing c-tree applications and data to take advantage of this powerful new SQL technology. The rich flexibility given to database architects through the years with c-tree now presents a challenge when moving to the standards-driven SQL interface. This SDK is provided to assist in the migration of existing ISAM tables for use with c-treeACE SQL. Unlike the c-treeACE SQL Import Utility (ctsqlimp), which makes only existing tables accessible through SQL, the migration SDK physically relocates data files for use with c-treeACE SQL. It is important to note the migrated new tables could very well not be accessible with your existing ISAM application. If you have requirements to share data between existing ISAM applications and c-treeACE SQL you should consider using the c-treeACE SQL Import Utility in place of the c-treeACE SQL Migration SDK. With modifications, the c-treeACE SQL Migration Utility can do data transformations, filtering and other changes to the data files which may be required with a migration from ISAM to SQL. Source code is provided and callback “hooks” are available to the advanced user to implement these capabilities. This requires a certain level of programming ability. The migrate utility does not www.faircom.com All Rights Reserved 65 Migrating to c-treeACE SQL update indices during the data transfer but does attempt to rebuild the indices after moving the records. 9.3 Migration The following sequence of steps assume you have a standard (non-SQL) c-treeACE Server in operation, and are switching to c-treeACE SQL. You may create your new tables immediately if you are already using c-treeACE SQL, and proceed with step 4. Actual procedures will vary depending upon your applications, data, and needs. See below for detailed information on customizing this utility for your specific data transformation needs. Please contact your nearest FairCom office if you need assistance in determining or addressing your specific needs. 9.4 Key Steps These steps assume you will keep you existing standard c-treeACE Server directory untouched and intact. You should always back up all of your existing data and configuration files before upgrading to any new c-treeACE Server to ensure complete data integrity. 1. Log off all clients and shut down an existing standard c-treeACE Server if it is running. 2. Restart the server with no clients attached, and then shut down again. This ensures automatic recovery has taken place, and the c-tree data files are in a clean state. 3. Copy your ctsqlimp utility into your c-treeACE SQL directory. 4. Copy you data file(s) into your c-treeACE SQL directory. 5. Use the ctsqlimp utility with the -w switch to generate an ISQL script. This script allows you to automatically build the tables you require based on your existing data files. Your server must be up and running to run this utility. ctsqlimp yourdatafile.dat <other options> -w newscript.sql You should add the line COMMIT WORK; to the end of this script to ensure the transaction is committed. 6. Start c-treeACE SQL. 7. Create the tables you will use with your schema, using the script generated from ctsqlimp in step #5. With ISQL this looks like this: isql -u ADMIN -a ADMIN -s newscript.sql 6597@hostname:database 8. Shut down c-treeACE SQL. 9. Copy the c-tree Migration Utility, ctsqlmgr, into the c-treeACE SQL operating directory. The ctsqlmgr utility requires access to certain c-treeACE SQL system files. 10. Run the Migration Utility with the following command line arguments, where Mem_KB is the amount of memory to use during the rebuild process (50Mb default): ctsqlmgr <sourcefile> <destfile> [-s <sectors>] [-m <Mem_KB>] 11. Restart c-treeACE SQL and you should find your data has been copied into the c-treeACE SQL data directory. www.faircom.com All Rights Reserved 66 Migrating to c-treeACE SQL 9.5 Important Observations The index rebuilding phase occurs even if you have not defined any indices or keys on your tables as the utility updates internal indices (ROWID and RECBYT) necessary for c-treeACE SQL. By default, records are moved across two tables, field by field, for fields with matching names. Fields in the destination table that do not have a matching field in the source table are set to NULL. Type conversion support is only between variable and fixed strings (both directions). However, this behavior can be changed by implementing the fmap member in the Migration Info structure as described later. If the original table is a table created with c-treeDB and contains a ROWID field, that value is maintained in the destination table. If the utility fails with error CTDB_INTERNAL (4025), the destination table may be corrupt and should be recovered from a backup or recreated. The c-tree standalone, single user model with transaction processing is used by this utility. A default 50MB buffer is used for rebuilding operations. Using as much memory as you have available will increase the speed of the data migration. 9.6 Customization The c-treeACE SQL Migration Utility requires two ‘C’ source files, ctsqlmgr.c and migrfncs.c, which can be modified extensively, as described below, to meet the exact needs of your application. These two files can be found in ctreeSDK\ctreeAPI\ctree\samples\special\sqlmigr. To compile the program, you will need to generate and link against a c-tree Plus single user standalone library with c-treeDB support and transaction processing. The mainline of the migration utility is in ctsqlmgr.c, and this is the module to which you will add any customized code. The migrfncs.c file can be modified as well, although this should not be necessary under normal circumstances. The core of the migrate.c module is the following function: MigrateTable(pCTDBSESSION hSession, pTEXT orig, pTEXT dest, MigrationInfo *fconv). This function takes a pointer, hSession, to a c-treeDB session which is currently logged in, the source file name, orig, the destination file name, dest, and a pointer to a structure containing information about the migration process, fconv. The majority of your customizations will be located in this MigrationInfo structure. It may be necessary to add custom logon information for your particular installation. That information is located outside of this structure. If the migration structure is not provided to the MigrateTable() function (i.e., fconv is set to NULL), the code internally populates a MigrationInfo structure based on the default implementation described above. The MigrationInfo structure is defined in migrfncs.c and described as follows. typedef struct _MigrationInfo { /* callbacks */ MigrFunc AfterRecRead; www.faircom.com All Rights Reserved 67 Migrating to c-treeACE SQL MigrFunc MigrFunc MigrFunc MigrFunc AfterRecWrite; AfterRecConv; BeforeOpens; BeforeFirst; /* ErrMsgFunc */ ErrMsgFunc ErrorMessage; /* memory usage */ ULONG memoryKB; /* source/dest objects */ pCTDBTABLE hSourceTbl; pCTDBTABLE hDestTbl; pCTDBRECORD hSourceRec; pCTDBRECORD hDestRec; /* field mapping */ FieldMap *fmap; /* internals */ pTEXT strBuffer; VRLEN strSize; pCTBLOB pBlob; } MigrationInfo; 9.7 Migration Callbacks AfterRecRead(), AfterRecWrite(), AfterRecConv(), BeforeOpens(),and BeforeFirst() are callback functions that can be used to perform verifications on the record being migrated, implementing custom error handling, setting table and record properties, etc. The callbacks have the following prototype: NINT (* MigrFunc) (CTHANDLE Source, CTHANDLE Dest, CTDBRET err); Source and Dest are the source and the destination record or table (depending on the callback) handle. err is the error code generated by the last operation (only for the Afterxxx() functions). The callbacks should handle the error code passed in and return one of: ERR_STOP to stop the migration execution ERR_CONT to continue the execution ERR_SKIP to continue the execution by fetching a new record; the current record is not migrated to the new table. AfterRecRead(): The migration logic calls this function callback after having read a record from the source table. It is important to note this callback is not called immediately by c-treeDB after reading the record from the table at the ISAM level, but by the migration logic after c-treeDB reads the record and performs any c-treeDB internal operations needed for c-treeDB functionalities. When this function is implemented, it should perform error handling. The Source parameter is the record handle. Dest is always NULL. AfterRecWrite(): This function callback is called after having written a record to the destination table. Source and Dest parameters of the function call are record handles. www.faircom.com All Rights Reserved 68 Migrating to c-treeACE SQL AfterRecConv(): This function callback is called after converting the source record into the destination record. This is most useful for error checking. Source and Dest parameters of the function call are record handles. BeforeOpens(): This function callback is called before opening the tables. Source and Dest parameters of the function call are table handles. BeforeFirst(): This function callback is called before reading the first record, hence before starting the actual record migration. Source and Dest parameters of the function call are table handles. Error Handling Callback ErrorMessage(): When specified, this function callback is called in order to display error messages. If set to NULL, the error message display is skipped. The function prototype is as follows: VOID (* ErrMsgFunc) (pTEXT msg); msg is the error message. You can take advantage of this callback if you need to output error messages inside the callbacks implementation by using the macro PRINT_ERROR(msg). Memory Usage memoryKB: This is the amount of memory to use for the rebuild (default is 50Mb). Source and Destination Objects: hSourceTbl, hDestTbl: These are pointers to the source and destination table handles. These can be set to NULL and, in this case, the handles are allocated and freed internally. Providing these handles is useful in cases when it is necessary to set a table property, such as a callback at c-treeDB level. The handle must not be active; there should be no open table linked to the handle. hSourceRec, hDestRec: These are pointers to the source and destination record handles. These can be set to NULL and, in this case, the handles are allocated and freed internally. The handle must relate to the proper table (i.e., hSourceRec = ctdbAllocRecord(hSourceTbl);) Field Mappings fmap: This is the structure where the bulk of your customizations will take place. This is a pointer to a field conversion array, which is NULL for default behavior. When this field is not NULL, it is expected to contain an array of FieldMap elements. The number of elements in the array MUST equal the number of fields in the destination table (do not count internal c-treeDB fields). Each element is related to a field in the destination table in order, i.e., the first field corresponds to the first element in the array, the second field to the second array element and so forth. This structure provides a mechanism allowing code to read a field (sfldno) from a source table and store this field in a string used to insert the field into the destination record using ctdbSetFieldAsString(). FieldMap has the following definition: typedef struct _fieldmap { NINT sfldno; GetBufferLenFunc GetBufferLen; GetFieldFunc GetFieldAsString; IsNullFunc IsNullField; pTEXT dfl_value; } FieldMap; www.faircom.com All Rights Reserved 69 Migrating to c-treeACE SQL sfldno: This is the field number on the source table. Set to CT_MIGRATE_NEW_FIELD in the case when there is no corresponding field in the source table. GetBufferLen: This optional pointer points to a function returning the size of the string used when retrieving the source field into a string using the GetFieldAsString function pointer. When this field is not specified, the field is copied without any kind of conversion, i.e., a binary copy. The function prototype is as follows: VRLEN (* GetBufferLenFunc) (CTHANDLE Handle, NINT FieldNbr); Where Handle is the record handle the logic will pass to the function and FieldNbr is the field number on the source table. The function should return the buffer size. GetFieldAsString: This optional pointer refers to a function to convert the field in the source record into a proper string that can be stored into the destination field using the ctdbSetFieldAsString() function. Please notice that the destination field does not necessarily need to be a string field as c-treeDB is able to convert the string into the appropriate field type. When GetBufferLen is not specified, this is copied without any conversion. The function prototype is as follows: CTDBRET (* GetFieldFunc) (CTHANDLE Handle, NINT FieldNbr, CTSTRING pValue, VRLEN size); Where Handle is the record handle, FieldNbr is the field number in the source table, pValue is a buffer of size bytes that the function must fill with the proper information as fetched from the source record. The function should return CTDBRET_OK on success, otherwise an error code. Where Handle is the record handle, FieldNbr is the field number in the source table. The function should return YES if the field is NULL (or should be considered as NULL), NO otherwise. dfl_value: A string containing the default value to store in the field when sfldno is CT_MIGRATE_NEW_FIELD or the source field is set to NULL. www.faircom.com All Rights Reserved 70 10. c-treeACE SQL Configuration 10.1 c-treeACE SQL Configuration Keywords c-treeACE SQL is generally configured with standard c-treeACE configuration options, (cache sizes, transaction logging, etc.). Specific configurations are available in c-treeACE SQL for additional SQL operational parameters and performance tuning. Only a few of these are considered for routine use. For example, SQL_PORT (page 80) SETENV TPE_DFLT_DATE (page 99) SETENV TPE_MM_SWAPSIZE (page 103) SETENV TPE_MM_CACHESIZE (page 100) Your application my require other options based on how the product was developed. Consult your application vendor should you have questions about the use of other options. The FairCom support team is always available to help guide the most applicable configurations and usage. In V11 and later, the number of bytes to hold the content of ctsrvr.cfg and expand the environment variables referenced in it has been raised from 1024 to 8192. This is important when ctsrvr.cfg contains a SETENV configuration referencing an environment variable resulting in more than 1024 bytes. www.faircom.com All Rights Reserved 71 c-treeACE SQL Configuration 10.2 MAX_SQL_ISOLATION_LEVEL MAX_SQL_ISOLATION_LEVEL <level> Sets the maximum transaction isolation level at which SQL clients can operate. The supported values are: MAX_SQL_ISOLATION_LEVEL 1 Support READ_COMMITTED only MAX_SQL_ISOLATION_LEVEL 2 Support READ_COMMITTED and REPEATABLE_READ. MAX_SQL_ISOLATION_LEVEL SERIALIZABLE. 3 Support READ_COMMITTED, REPEATABLE_READ, and If a SQL client requests an isolation level that exceeds the maximum SQL isolation level specified in the server configuration file, the SQL client operates at the maximum SQL isolation level rather than its requested isolation level. www.faircom.com All Rights Reserved 72 c-treeACE SQL Configuration 10.3 SQL_CONNECT_TIMEOUT_SEC SQL_CONNECT_TIMEOUT_SEC <seconds> Sets the c-treeACE SQL connection timeout in seconds. The default is 1 second. A setting of 0 will revert to the behavior prior to V10.3. www.faircom.com All Rights Reserved 73 c-treeACE SQL Configuration 10.4 SQL_DATABASE SQL_DATABASE <dbname> Specifies the default c-treeACE SQL database name to create if one doesn't exist at server startup. www.faircom.com All Rights Reserved 74 c-treeACE SQL Configuration 10.5 SQL_IDLE_WAKE SQL_IDLE_WAKE #of_seconds Sets a time to close tables that are not in use however, remain open in the open table cache. A 0 or negative values disables this feature. Default: 2 www.faircom.com All Rights Reserved 75 c-treeACE SQL Configuration 10.6 SQL_KEEP_OPEN_TABLES SQL_KEEP_OPEN_TABLES <# of tables> Sets how many tables to remain open per connection although not in use in SQL in order to improve performance. A negative value enables the default. Default: 60 www.faircom.com All Rights Reserved 76 c-treeACE SQL Configuration 10.7 SQL_LOGFILE Enable Logging of c-treeACE SQL debugging information. In V10.3 and later, this configuration option can include an environment variable name that will be substituted with its value when the configuration file is read. www.faircom.com All Rights Reserved 77 c-treeACE SQL Configuration 10.8 SQL_MIN_CARD SQL_MIN_CARD <# of rows> Forces the SQL optimizer to consider that the tables contain, at minimum, <# of rows>. Setting this value to any number greater than 0 (let say X) forces the optimizer to think that any table with less than X records contain X records. This may potentially help the optimizer, in certain cases, to chose the proper execution plan for tables even if the tables are actually empty. Default: 0 www.faircom.com All Rights Reserved 78 c-treeACE SQL Configuration 10.9 SQL_PARTOPEN_COST SQL_PARTOPEN_COST <multiplier> Adjusts the partition file open cost optimization. A partitioned file open cost is available for the SQL cost analyzer such that SQL takes into account the cost of opening partitions. Costs are calculated as follows: For an index on a partitioned file that is the partition key, the original table open cost is reported. For an index on a partitioned file that is not related to the partition key, the original table cost plus a multiplier times the number of active partitions is reported. For an index on a partitioned file that covers the partition key but does not order like the partition key, the original table cost plus a multiplier times the number of active partitions divided by 2 is reported. Default: 10000 www.faircom.com All Rights Reserved 79 c-treeACE SQL Configuration 10.10 SQL_PORT TCP/IP Port Number for c-treeACE SQL Default: 6597 www.faircom.com All Rights Reserved 80 c-treeACE SQL Configuration 10.11 SQL_TRACE_CTREE_ERROR SQL_TRACE_CTREE_ERROR <error code> Forces a stack trace to be generated in <error code> is encountered. This helps determine the exact location of difficult to diagnose errors. Note that unhandled errors returned in c-treeDB layer result in 2 stack traces generated for these errors. www.faircom.com All Rights Reserved 81 c-treeACE SQL Configuration 10.12 SETENV CLASSPATH Sets the path to the JAR file containing the Java classes. The exact path will depend on the version of Java you have installed. Example See Run-Time Settings for Java Stored Procedure Support (page 22). See Also SETENV JAVA_COMPILER (page 96) SETENV JVM_LIB (page 97) www.faircom.com All Rights Reserved 82 c-treeACE SQL Configuration 10.13 SETENV DEBUG_JVM Y (client) | S (server) When specified, the stored procedure is compiled with debug information and the server modified Java source file and the class file are not removed from disk. Example SETENV DEBUG_JVM=Y www.faircom.com All Rights Reserved 83 c-treeACE SQL Configuration 10.14 SETENV DEBUG_JVM_PORT The Debug port to connect the Java debugger to (jdb). Example SETENV DEBUG_JVM_PORT=50001 Default: 5678 www.faircom.com All Rights Reserved 84 c-treeACE SQL Configuration 10.15 SETENV DH_CACHED_STATEMENTS Number of static statements to cache. c-treeACE SQL statement caches provide a performance benefit by allowing the SQL engine to reuse previously parsed and optimized statements. Proper sizing of this cache can offer significant performance improvements to applications. Two independent caches are used, a static statement cache and a dynamic statement cache. c-treeACE SQL supports setting the size of these statement caches (the number of entries that can be stored) up to 16000. Default: On Windows the default size is 150; on Unix systems the default size is 250. See Also SETENV DH_DYN_CACHED_STATEMENTS (page 87) www.faircom.com All Rights Reserved 85 c-treeACE SQL Configuration 10.16 SETENV DH_DO_AHEAD Disables 'FETCH AHEAD' logic. Fetch ahead logic normally provides database stability with only a small performance hit on fetches. Example SETENV DH_DO_AHEAD=N www.faircom.com All Rights Reserved 86 c-treeACE SQL Configuration 10.17 SETENV DH_DYN_CACHED_STATEMENTS Number of prepared statements to cache. c-treeACE SQL statement caches provide a performance benefit by allowing the SQL engine to reuse previously parsed and optimized statements. Proper sizing of this cache can offer significant performance improvements to applications. Two independent caches are used, a static statement cache and a dynamic statement cache. c-treeACE SQL supports setting the size of these statement caches (the number of entries that can be stored) up to 16000. Default: On Windows the default size is 150; on Unix systems the default size is 250. See Also SETENV DH_CACHED_STATEMENTS (page 85) www.faircom.com All Rights Reserved 87 c-treeACE SQL Configuration 10.18 SETENV DH_ENABLE_POOL Enables connection pooling. Example SETENV DH_ENABLE_POOL=Y www.faircom.com All Rights Reserved 88 c-treeACE SQL Configuration 10.19 SETENV DH_JVM_OPTION_STRINGS Allows specifying specific options to the JVM. Example SETENV DH_JVM_OPTIONS_STRINGS=-XX:+UseG1GC;-Xms40m;-Xmx40m JVM environments might require specific tuning parameters, for example, changing the default Garbage Collector (GC) or setting memory limits on JVM heap usage. Use this parameter to pass in those values to fine tune your specific JVM environment. The example below limits JVM memory (this is the default specified in ctsrvr.cfg in V11 and later): SETENV DH_JVM_OPTION_STRINGS=-Xms100m -Xmx300m www.faircom.com All Rights Reserved 89 c-treeACE SQL Configuration 10.20 SETENV DH_ENABLE_POOL Configures the limit of open cursors available in a SQL session. Example SETENV DH_OPEN_CURSORS=xxx Default: 50 www.faircom.com All Rights Reserved 90 c-treeACE SQL Configuration 10.21 SETENV DH_OPT_OR_CARD An OR clause optimization was improved, ensuring that the execution node restriction was broken down even when there is only one table. Functionality was added to convert OR into UNION, which is beneficial if the cardinality of each ORed predicate is small. This keyword specifes the threshold for this conversion Example SETENV DH_OPT_OR_CARD=xxx Default: 1000 www.faircom.com All Rights Reserved 91 c-treeACE SQL Configuration 10.22 SETENV DH_POOL_SIZE Set number of pooled connections. 1< n <=100 Example SETENV DH_POOL_SIZE=20 www.faircom.com All Rights Reserved 92 c-treeACE SQL Configuration 10.23 SETENV DH_REBUILD_SEL_CUTOFF This controls the regeneration of the plan for queries with parameter references, during execution, based on the value set: -1 < n <= 100. If the value is set to -1, query plans are never regenerated during execution. If the value is set to 0, query plans are always regenerated during execution. If the value is set between 1 and 100, query plans will be regenerated whenever the percentage difference in selectivity (i.e., the selectivity that was used during the generation of the original plan and the selectivity for the actual parameter values passed during execution) exceeds this value. For example, if the value is set to 25, the plan will be regenerated only if the selectivity of the actual parameter is different from the original selectivity than 25%. Example SETENV DH_REBUILD_SEL_CUTOFF=25 Default: (-1) Query plans are never regenerated during execution. www.faircom.com All Rights Reserved 93 c-treeACE SQL Configuration 10.24 SETENV DH_THREAD_STACK_SZ_KB The stack space utilized by c-treeACE SQL threads (in kilobytes). Example SETENV DH_THREAD_STACK_SZ_KB=512 www.faircom.com All Rights Reserved 94 c-treeACE SQL Configuration 10.25 SETENV DH_SVR_DA_BUFFER Controls the size of the SQLDA structure within the server and the size of the fetch ahead buffer. www.faircom.com All Rights Reserved 95 c-treeACE SQL Configuration 10.26 SETENV JAVA_COMPILER Indicates the full path to the Java compiler. The exact path will depend on the version of the compiler you have installed. Example See Run-Time Settings for Java Stored Procedure Support (page 22). See Also SETENV CLASSPATH (page 82) SETENV JVM_LIB (page 97) www.faircom.com All Rights Reserved 96 c-treeACE SQL Configuration 10.27 SETENV JVM_LIB Indicates the full path to the Java Virtual Machine (JVM) installed on your system. The exact path will depend on the version of the JVM you have installed. Example See Run-Time Settings for Java Stored Procedure Support (page 22). See Also SETENV CLASSPATH (page 82) SETENV JAVA_COMPILER (page 96) www.faircom.com All Rights Reserved 97 c-treeACE SQL Configuration 10.28 SETENV TPESQLDBG c-treeACE SQL has extensive internal debugging logic that can be accessed through various means. SQL errors can be logged to the file sql_server.log in the c-treeACE SQL directory. TPESQLDBG is an array of 12 ‘Y’/‘N’ characters that determine which debug options are enabled. Example SETENV TPESQLDBG=NNNNNNNNNNYN See Advanced c-treeACE SQL Logging (page 19) www.faircom.com All Rights Reserved 98 c-treeACE SQL Configuration 10.29 SETENV TPE_DFLT_DATE Changes the default date format used by c-treeACE SQL. Changing the default date format affects: The default output format of date values; How SQL interprets date literals in queries and INSERT statements. The following date types are supported: US - US_DFLT_DATE UK - UK_DFLT_DATE ISO - ISO_DFLT_DATE Examples SETENV TPE_DFLT_DATE=UK SETENV TPE_DFLT_DATE=ISO_DFLT_DATE Default: US_DFLT_DATE www.faircom.com All Rights Reserved 99 c-treeACE SQL Configuration 10.30 SETENV TPE_MM_CACHESIZE LEGACY Option Specifies the size, in kilobytes, of the memory cache used for temporary tables. The default value is 1,000 Kb of memory. The internal storage system uses this cache for storing temporary tables when sorting and creating dynamic indexes during processing. Increasing TPE_MM_CACHESIZE improves performance by reducing the need to write to the on-disk swap file. The TPE_MM_CACHESIZE setting determines how much memory the SQL engine uses for its temporary tables for each SQL client. Increasing this setting increases the amount of temporary table data the c-treeACE SQL stores in memory instead of writing this data to the disk-based swap file. But note that this memory is allocated for each SQL client, so you should consider how many clients will connect to the server at any given time and make sure total cache memory doesn't exceed available physical memory on the system. These swap files can be found during an active connection with a filename beginning with ‘M’ followed by a string of random alphanumerics. These files can sometimes be left around after an abnormal server shutdown. They can be safely deleted once the server has been properly shut down. Example SETENV TPE_MM_CACHESIZE=1024 Note: The MM subsystem was replaced with a new architecture beginning with V10.3. Only enable the legacy MM subsystem on the advice of FairCom's engineering team. www.faircom.com All Rights Reserved 100 c-treeACE SQL Configuration 10.31 SETENV TPE_MM_COMPARE_OVHD LEGACY Option The type of query shown below was found to run slower than expected in certain situations: SELECT (TOP k) * FROM tbl WHERE x BETWEEN a AND b ORDER BY y The default cost estimates used in choosing an execution plan have been updated to improve general performance of this type of query. Additional options are also available to further adjust costing used in this optimization. TPE_MM_COMPARE_OVHD (default value is 1) TPE_MM_INSERT_OVHD (default value is 250) Note: The MM subsystem was replaced with a new architecture beginning with V10.3. Only enable the legacy MM subsystem on the advice of FairCom's engineering team. www.faircom.com All Rights Reserved 101 c-treeACE SQL Configuration 10.32 SETENV TPE_MM_INSERT_OVHD LEGACY Option The type of query shown below was found to run slower than expected in certain situations: SELECT (TOP k) * FROM tbl WHERE x BETWEEN a AND b ORDER BY y The default cost estimates used in choosing an execution plan have been updated to improve general performance of this type of query. Additional options are also available to further adjust costing used in this optimization. TPE_MM_COMPARE_OVHD (default value is 1) TPE_MM_INSERT_OVHD (default value is 250) Note: The MM subsystem was replaced with a new architecture beginning with V10.3. Only enable the legacy MM subsystem on the advice of FairCom's engineering team. www.faircom.com All Rights Reserved 102 c-treeACE SQL Configuration 10.33 SETENV TPE_MM_SWAPSIZE LEGACY Option Specifies the maximum size, in kilobytes, of the swap file the internal storage system uses when it writes to disk from the main memory cache. Setting this value too small will result in error -16001:MM No data block for queries that require more swap space than is available. A maximum memory limit of 4TB is available. Example SETENV TPE_MM_SWAPSIZE=500000 Note: Prior to c-treeACE V9.3.41446 Build 110507, a limit of 2Gb existed. Values larger than this improperly "wrapped" around. Note: The MM subsystem was replaced with a new architecture beginning with V10.3. Only enable the legacy MM subsystem on the advice of FairCom's engineering team. www.faircom.com All Rights Reserved 103 c-treeACE SQL Configuration 10.34 SQL_OPTION CHECK_HEAP SQL_OPTION CHECK_HEAP Enables the c-treeACE SQL memory free function to check for memory overwrites and double frees. If it detects one of these situations, it logs a message to CTSTATUS.FCS and raises an unhandled exception that terminates the process. The messages are: SQL_HEAP_CHECK: operator delete detected double free of memory SQL_HEAP_CHECK: operator delete detected memory overwrite www.faircom.com All Rights Reserved 104 c-treeACE SQL Configuration 10.35 SQL_OPTION CTSTRING_VARCHAR SQL_OPTION CTSTRING_VARCHAR Allows VARCHAR and LVARCHAR fields to be created as CT_STRING fields for backwards compatibility. These are normally created as CT_[ 2 | 4 ]_STRING. www.faircom.com All Rights Reserved 105 c-treeACE SQL Configuration 10.36 SQL_OPTION CREATE_WITH_ROWID SQL_OPTION CREATE_WITH_ROWID Enables default ROWID for new tables. By default, tables are created with a ROWID and without a RECBYT index. www.faircom.com All Rights Reserved 106 c-treeACE SQL Configuration 10.37 SQL_OPTION CREATE_WITH_RECBYT SQL_OPTION CREATE_WITH_RECBYT Enables default RECBYT fields for new tables. By default, tables are created with a ROWID and without a RECBYT index. www.faircom.com All Rights Reserved 107 c-treeACE SQL Configuration 10.38 SQL_OPTION CTDB_ROWID Revert to a different ROWID value starting points (0 vs. 1) for c-treeDB and c-treeACE SQL. www.faircom.com All Rights Reserved 108 c-treeACE SQL Configuration 10.39 SQL_OPTION DB_CASE_INSENSITIVE Enables case insensitive comparisons, sorting, and identifiers within a database and is enabled on a database by database basis. www.faircom.com All Rights Reserved 109 c-treeACE SQL Configuration 10.40 SQL_OPTION FORCE_TEMPLATE_DB Use the legacy __Master.dbs database template for new databases. LEGACY OPTION: NOT RECOMMENDED www.faircom.com All Rights Reserved 110 c-treeACE SQL Configuration 10.41 SQL_OPTION HM_ACTIVE Note: FairCom Internal option only . www.faircom.com All Rights Reserved 111 c-treeACE SQL Configuration 10.42 SQL_OPTION LOAD_CALLBACK_LIB Load the data type SDK callback library. (In V10.3 and later) As the callback library is critical for proper data interpretation, when its loading is required by specifying the above configuration keyword, a failed load generates a panic condition and terminates the c-treeACE SQL Server operation with the following message logged in CTSTATUS.FCS: - User# 00001 : PANIC - TPEUTIL LoadSQLSDK callback library load failed PID 5996 - User# 00001 SQL PANIC, attempting shutdown www.faircom.com All Rights Reserved 112 c-treeACE SQL Configuration 10.43 SQL_OPTION NO_AUTO_ABORT SQL_OPTION NO_AUTO_ABORT Disables the automatic ABORT (ROLLBACK) feature should an error occur while processing. Note: This option is disabled by default. www.faircom.com All Rights Reserved 113 c-treeACE SQL Configuration 10.44 SQL_OPTION NO_BINARY_PAD This is a behavior change that affects how the values of BINARY fields are stored in V11 and later. Prior to V11, the server was not padding BINARY fields with 0x00 when the values were less than the defined length. Because of this, both the values stored on disk and the values returned may have been shorter than the defined length (basically BINARY and VARBINARY behaved in the same manner). This behavior has been corrected in V11 and later so that BINARY fields are properly padded with 0x00 both on disk and when retrieved. Existing data is not touched on disk, however the values returned in SQL are now padded. The previous behavior can be restored by using the keyword SQL_OPTION NO_BINARY_PAD in ctsrvr.cfg. www.faircom.com All Rights Reserved 114 c-treeACE SQL Configuration 10.45 SQL_OPTION NO_CARDINALITY Disables cardinality logic that informs the optimizer about the number of rows in a data or index file. www.faircom.com All Rights Reserved 115 c-treeACE SQL Configuration 10.46 SQL_OPTION NO_COSTS Disables logic that returns to the optimizer the cost in units of time for given record and index operations. The optimizer will use this information to decide whether to use a record or an index scan. Note: This option is not implemented and is reserved for future use. www.faircom.com All Rights Reserved 116 c-treeACE SQL Configuration 10.47 SQL_OPTION NO_CRYPT_SYSTBL SQL_OPTION NO_CRYPT_SYSTBL In V10.3 and later, c-treeACE SQL system tables are encrypted by default to protect sensitive database meta data. The encryption algorithm is AES with a 128-bit key when advanced encryption is in use. It is protected with CAMO when not using the advanced encryption. To have system tables in clear text, SQL_OPTION NO_CRYPT_SYSTBL must be placed in ctsrvr.cfg before the database is created. www.faircom.com All Rights Reserved 117 c-treeACE SQL Configuration 10.48 SQL_OPTION NO_DB_CONVERSION When upgrading between c-treeACE SQL versions, the database engine will attempt to upgrade system tables, etc. to the latest formats. In some cases this is not desired. This option disables the database conversion on startup. www.faircom.com All Rights Reserved 118 c-treeACE SQL Configuration 10.49 SQL_OPTION NO_DUP_IDXNAME SQL_OPTION NO_DUP_IDXNAME Support was added that changed the way index file names are generated to guarantee name uniqueness. This naming convention can cause compatibility problems with existing ISAM application containing hard-coded index names for tables created using SQL. This option reverts this new support. www.faircom.com All Rights Reserved 119 c-treeACE SQL Configuration 10.50 SQL_OPTION NO_HUGEFILE Do not create tables as HUGE (> 4GB). Default: HUGE files are enabled for all c-treeACE SQL created tables. www.faircom.com All Rights Reserved 120 c-treeACE SQL Configuration 10.51 SQL_OPTION NO_PUSHDOWN Internal logic change for filtering of records. WARNING: Only use on the advice of FairCom. This will negatively impact performance in most cases. www.faircom.com All Rights Reserved 121 c-treeACE SQL Configuration 10.52 SQL_OPTION NO_REVERSE_INDEX Note: FairCom Internal option only . www.faircom.com All Rights Reserved 122 c-treeACE SQL Configuration 10.53 SQL_OPTION NO_SELECTIVITY Disables selectivity logic that informs the optimizer about the percentage of rows returned when applying a given search criteria. www.faircom.com All Rights Reserved 123 c-treeACE SQL Configuration 10.54 SQL_OPTION NO_SHARED_MEMORY Do not use the shared memory protocol as the default on localhost connections. When this option is specified, TCP/IP is used by default. Note: Unless this option is specified, shared memory is the default for local SQL connections regardless of the protocol used for ISAM connections. See the c-tree Server Administrator's Guide (/doc/ctserver/#27910.htm) for information about the communication protocol for ISAM connections. www.faircom.com All Rights Reserved 124 c-treeACE SQL Configuration 10.55 SQL_OPTION NO_SYSSUPERFILE Creates c-treeACE SQL system tables as individual files rather than a single c-tree Superfile. www.faircom.com All Rights Reserved 125 c-treeACE SQL Configuration 10.56 SQL_OPTION OWNER_FILE_NAMES c-treeACE SQL is a file based database engine. To avoid naming collisions between files it is usually necessary to maintain additional information in the file name. This option prepends the owner ('admin' by default) to the file front of the file name, much as a schema might be considered. www.faircom.com All Rights Reserved 126 c-treeACE SQL Configuration 10.57 SQL_OPTION PAD_WITH_NULL Create system tables to set padding to NULL. www.faircom.com All Rights Reserved 127 c-treeACE SQL Configuration 10.58 SQL_OPTION PARTIAL_SEG Allow use of imported c-tree indexes containing partial segments in keys. Note: This option only applies to legacy imported tables. www.faircom.com All Rights Reserved 128 c-treeACE SQL Configuration 10.59 SQL_OPTION PRESERVE_CURSOR_FREE_LOCK Free all locks when isolation level is READ_COMMITTED and keep only read locks when isolation level is higher. www.faircom.com All Rights Reserved 129 c-treeACE SQL Configuration 10.60 SQL_OPTION SUPPRESS_JVM_LOAD_ERR SQL_OPTION SUPPRESS_JVM_LOAD_ERR Disables JVM error messages at server startup. A "No Java capabilities" message is output instead. www.faircom.com All Rights Reserved 130 c-treeACE SQL Configuration 10.61 SQL_OPTION USE_MM SQL_OPTION USE_MM (LEGACY) Switch back to the legacy MM temp sorting subsystem. See Also SETENV TPE_MM_CACHESIZE (page 100) SETENV TPE_MM_COMPARE_OVHD (page 101) SETENV TPE_MM_INSERT_OVHD (page 102) SETENV TPE_MM_SWAPSIZE (page 103) Note: The MM subsystem was replaced with a new architecture beginning with V10.3. Only enable the legacy MM subsystem on the advice of FairCom's engineering team. www.faircom.com All Rights Reserved 131 c-treeACE SQL Configuration 10.62 SQL_DEBUG ABORT_ON_PANIC SQL_DEBUG ABORT_ON_PANIC Enables c-treeACE SQL shutdown on a panic condition for debugging purposes. By default, a panic is only logged to CTSTATUS.FCS. www.faircom.com All Rights Reserved 132 c-treeACE SQL Configuration 10.63 SQL_DEBUG ERROR_INFO SQL_DEBUG ERROR_INFO Enables c-treeACE SQL logging to sql_server.log when a query fails. www.faircom.com All Rights Reserved 133 c-treeACE SQL Configuration 10.64 SQL_DEBUG INDEX Advanced debugging of index key retrievals. WARNING: Extreme performance impact. See Also SQL_DEBUG INDEX_INFO (page 137) www.faircom.com All Rights Reserved 134 c-treeACE SQL Configuration 10.65 SQL_DEBUG INDEX_SEL SQL_DEBUG INDEX_SEL Enables output selectivity information also for index selectivity. www.faircom.com All Rights Reserved 135 c-treeACE SQL Configuration 10.66 SQL_DEBUG INDEX_DEF_SEL SQL_DEBUG INDEX_DEF_SEL Enables checks for cases where calculating the default selectivity is suspect and logs "COMPLEX SELECTIVITY" messages in the function monitor window with information on why the calculation is suspect. There are no corrective actions. www.faircom.com All Rights Reserved 136 c-treeACE SQL Configuration 10.67 SQL_DEBUG INDEX_INFO Advanced debugging of index key retrievals. WARNING: Extreme performance impact. See Also SQL_DEBUG INDEX (page 134) www.faircom.com All Rights Reserved 137 c-treeACE SQL Configuration 10.68 SQL_DEBUG LOG_STUBS_HIGH Logs sparse information detailing table create activities. www.faircom.com All Rights Reserved 138 c-treeACE SQL Configuration 10.69 SQL_DEBUG LOG_STUBS_MED Logs basic c-treeACE SQL Statement information. www.faircom.com All Rights Reserved 139 c-treeACE SQL Configuration 10.70 SQL_DEBUG LOG_STUBS_LOW Logs low level information, which can be quite voluminous. Note: Due to the volume of information logged, this option can negatively impact performance. Please consult FairCom support before enabling this option. www.faircom.com All Rights Reserved 140 c-treeACE SQL Configuration 10.71 SQL_DEBUG LOG_STMT_TIMES SQL_DEBUG LOG_STMT_TIMES Enables logging of start and end times for statements PREPARE, EXECUTE and OPEN. See Also SQL_DEBUG LOG_STMT_TIMES_FETCH (page 142) www.faircom.com All Rights Reserved 141 c-treeACE SQL Configuration 10.72 SQL_DEBUG LOG_STMT_TIMES_FETCH SQL_DEBUG LOG_STMT_TIMES_FETCH Log start and end times of a fetch sequence (open cursor, all fetches and close cursor). Logging is to the CTSTATUS.FCS file. See Also SQL_DEBUG LOG_STMT_TIMES (page 141) www.faircom.com All Rights Reserved 142 11. c-treeACE SQL Built-in Stored Procedures A variety of built in procedures are available for administrative database tasks. These can be called in the same manner as user defined procedures: call fc_get_fcproclist(); A result set, if returned, is handled in the standard caller manner. www.faircom.com All Rights Reserved 143 c-treeACE SQL Built-in Stored Procedures 11.1 fc_add_db( ) Adds an existing c-treeACE SQL database to the list of registered databases. Parameters (1) dbname VARCHAR(1024) Example call fc_add_db('ctreeSQL'); www.faircom.com All Rights Reserved 144 c-treeACE SQL Built-in Stored Procedures 11.2 fc_check_file_tran_state( ) Returns the current c-treeACE transaction mode for the specified table. Result Set Fields (2) owner table VARCHAR(64) VARCHAR(64) Returned modes: 0 No transaction control. 1 Transaction control without recoverability. (ctPREIMG) 2 Transaction control and recoverability. (ctTRNLOG) Example call fc_check_file_tran_state(); owner ----admin admin admin admin table_name ---------custmast custorder ordritem itemmast www.faircom.com All Rights Reserved 145 c-treeACE SQL Built-in Stored Procedures 11.3 fc_create_db( ) Creates a new c-treeACE SQL database named dbname. Parameters (1) dbname VARCHAR(1024) Example call fc_create_db('ctreeSQL'); www.faircom.com All Rights Reserved 146 c-treeACE SQL Built-in Stored Procedures 11.4 fc_create_user( ) Creates a new c-treeACE SQL user username with initial password pass. Parameters (2) username VARCHAR(32) pass VARCHAR(32) Example call fc_create_user('accounting', 'unbreakable'); www.faircom.com All Rights Reserved 147 c-treeACE SQL Built-in Stored Procedures 11.5 fc_get_cachestats() Returns c-treeACE SQL current cache subsystem statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_cachestats(); DESCRIPTION ----------data buffer requests data buffer hits index buffer requests index buffer hits index buffer pages in use max index buffers in use available data cache pages data cache pages in use max data cache pages in use # of index buffers on upd list (tran) # of index buffers on upd list # of data caches on upd list (tran) # of data caches on upd list avail data file special cache pages actual data file special cache pages maximum data file special cache pages VALUE ----9860 9772 883 817 15 26 1253 57 57 0 1 0 0 626 0 0 16 records returned www.faircom.com All Rights Reserved 148 c-treeACE SQL Built-in Stored Procedures 11.6 fc_get_connstats() Returns c-treeACE SQL current connection statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_connstats(); DESCRIPTION ----------Number of connected users Maximum connected users Threads in use total (ctaddwork) Max threads in use (ctaddwork) Num threads active in foreground VALUE ----1 1 1 2 1 5 records returned www.faircom.com All Rights Reserved 149 c-treeACE SQL Built-in Stored Procedures 11.7 fc_get_dblist( ) Returns a resultset listing registered database names. Result Set Fields (1) dbname VARCHAR(1024) Example call fc_get_dblist(); dbname -----demoSQL ctreeSQL testing www.faircom.com All Rights Reserved 150 c-treeACE SQL Built-in Stored Procedures 11.8 fc_get_fcproclist( ) Returns a listing of available built-in stored procedures. Result Set Fields (1) proclist VARCHAR(1024) Example call fc_get_fcproclist(); proclist -------fc_create_user fc_get_userlist fc_get_fcproclist fc_set_debug fc_set_priority fc_get_priority fc_set_blockinglock fc_get_dblist fc_create_db fc_add_db fc_set_min_card fc_get_min_card fc_set_selectivity fc_get_selectivity fc_get_taskid fc_check_file_tran_state fc_get_server_version fc_set_impersonation fc_set_file_tran_state www.faircom.com All Rights Reserved 151 c-treeACE SQL Built-in Stored Procedures 11.9 fc_get_filestats() Returns c-treeACE SQL current physical file control statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_filestats(); DESCRIPTION ----------Number of open physical files Number of open logical files Number of c-tree FCBs in use Max physical files opened Max logical files opened Max c-tree FCBs in use Number of virtual files open Number available file control blocks VALUE ----8 25 34 8 35 53 0 1001 8 records returned www.faircom.com All Rights Reserved 152 c-treeACE SQL Built-in Stored Procedures 11.10 fc_get_iostats() Returns c-treeACE SQL current I/O statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_iostats(); Description Value --------------number of read operations 1,182 bytes read 1,626,850 number of write operations 33 bytes written 158,080 number of comm read operations 0 comm bytes read 0 number of comm write operations 0 comm bytes written 0 number of log write operations 2 bytes written to log file 16,384 number of log read operations 5 bytes read from log file 17,416 number of log extension operations 0 log file extension bytes 0 14 records returned www.faircom.com All Rights Reserved 153 c-treeACE SQL Built-in Stored Procedures 11.11 fc_get_isamstats() Returns c-treeACE SQL current ISAM statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_isamstats(); DESCRIPTION ----------ISAM record ISAM record ISAM record ISAM record VALUE ----add count delete count update count read count 0 0 0 124 4 records returned www.faircom.com All Rights Reserved 154 c-treeACE SQL Built-in Stored Procedures 11.12 fc_get_lockstats() Returns c-treeACE SQL current lock statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_lockstats(); DESCRIPTION ----------count of lock attempts subcount of hdr lock attempts count of locks denied count of locks blocked subcount of header blocks count of dead locks count of locks freed count of blocks released current count of locks held current count of blocked requests cumulative lock wait time^ cumulative lock wait count maximum elapsed lock wait time^ net locks over unlocks max net locks over unlocks VALUE ----249 2 0 0 0 0 249 0 0 0 0 0 0 0 1 15 records returned www.faircom.com All Rights Reserved 155 c-treeACE SQL Built-in Stored Procedures 11.13 fc_get_memstats() Returns c-treeACE SQL current memory statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_memstats(); DESCRIPTION ----------SQL current aggregate summary SQL memory highwater Net SQL memory allocations System memory highwater mark System aggregate sum VALUE ----2508841 2908540 1880 51370239 50968434 5 records returned www.faircom.com All Rights Reserved 156 c-treeACE SQL Built-in Stored Procedures 11.14 fc_get_min_card( ) Returns the minimum cardinality value currently in use by the c-treeACE SQL database engine. Result Set Fields (1) value INTEGER Example call fc_get_min_card() value ----0 www.faircom.com All Rights Reserved 157 c-treeACE SQL Built-in Stored Procedures 11.15 fc_get_priority( ) Returns the c-treeACE SQL client thread priority. Note: This feature is supported only on the Windows operating system. Result Set Fields (1) priority TINYINT Example call fc_get_priority() priority -------0 www.faircom.com All Rights Reserved 158 c-treeACE SQL Built-in Stored Procedures 11.16 fc_get_partbounds() fc_get_partbounds(owner, table_name) Returns the first and last active partition numbers for a partitioned table. This is useful to determine the oldest (Firstactprt) partition to purge, for example. You must be connected to the database that contains the table. Parameters (2) -----------------owner VARCHAR(64) table_name VARCHAR(64) Result Set Fields (2) -----------------Firstactprt -- "First Active Partition number" Lastactprt -- "Last Active Partition number" www.faircom.com All Rights Reserved 159 c-treeACE SQL Built-in Stored Procedures 11.17 fc_get_replstats() Returns c-treeACE SQL current replication statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_replstats(); DESCRIPTION VALUE --------------Total successful operations 0 Successful apply operations 1339713297 Successful transaction begins 7233801 Successful transaction aborts 6832485 Successful transaction commits 27 Successful transaction success 19 Successful user-defined entries 30 Successful record adds 20 Successful record updates 25769806224 Successful record deletes 644245094407 Successful physical file opens 42949672970 Successful physical file closes 1134704589799574 Total failed operations 4294967297 Failed apply operations 1 Failed transaction begins 644245094400 Failed transaction aborts 0 Failed transaction commits 0 Failed transaction success 0 Failed record adds 70 Failed record updates 0 Failed record deletes 0 Failed physical file opens 0 Failed physical file closes 0 Log number of current scan pos 0 Offset of current scan pos 0 current status of replication agent 0 current c-tree API function 0 server connection status 0 28 records returned www.faircom.com All Rights Reserved 160 c-treeACE SQL Built-in Stored Procedures 11.18 fc_get_selectivity( ) Returns the selectivity. false if the selectivity is off; true when on. Result Set Fields (1) active BIT Example call fc_get_selectivity() active -----true www.faircom.com All Rights Reserved 161 c-treeACE SQL Built-in Stored Procedures 11.19 fc_get_server_version( ) Returns the version information for the c-treeACE SQL database engine. Result Set Fields (6) VERSION VARCHAR(40) VER_MAJOR INTEGER VER_MINOR INTEGER VER_REVISION INTEGER BUILD_DATE VARCHAR(14) VER_MINI INTEGER Example 1: Using ISQL call fc_get_server_version(); VERSION VER_MAJOR --------------10.0.1.60592(Build-121011) 10 VER_MINOR VER_REVISION BUILD_DATE --------- ------------ ---------0 60592 121011 VER_MINI -------1 Example 2: Using DSQL The following code can be added to DSQL Tutorial 1 to call this function: printf("\tGet server version info...\n"); pCTSQLCURSOR CTSQLCHAR CTSQLCHAR hCursor = NULL; CTVersion[64]; CTMajor[64]; rc = ctsqlPrepare(hCmd, "CALL fc_get_server_version()"); if (rc != CTSQLRET_OK) Handle_Error("fc_get_server_version() Prepare"); rc = ctsqlExecute(hCmd, &hCursor); if (rc != CTSQLRET_OK) Handle_Error("fc_get_server_version() Execute"); /* fetch and display each individual record */ while ((rc = ctsqlNext(hCursor)) == CTSQLRET_OK) { ctsqlGetChar(hCursor, 0, CTVersion); ctsqlGetChar(hCursor, 1, CTMajor); printf("\n\t\t%s - %s\n", CTMajor, CTVersion); } ctsqlFreeCursor(hCursor); www.faircom.com All Rights Reserved 162 c-treeACE SQL Built-in Stored Procedures The resulting output will appear as follows (notice the version number displayed at the end of INIT): www.faircom.com All Rights Reserved 163 c-treeACE SQL Built-in Stored Procedures 11.20 fc_get_sqlstats() Returns c-treeACE SQL current SQL subsystem statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_sqlstats(); DESCRIPTION VALUE --------------SQL memory highwater current aggregate sum current net SQL memory allocations dynamic statement cache requests 59 dynamic statement cache hits static statement cache requests 36 static statement cache hits current dynamic stmt cache entries highest dynamic stmt cache entries maximum dynamic stmt cache entries current static stmt cache entries 10 highest static stmt cache entries 10 maximum static stmt cache entries 150 current number of dynamic caches 1 current number of static caches 1 current number of local caches 1 current local stmt cache entries 0 highest local stmt cache entries 0 maximum local stmt cache entries 150 local statement cache requests 0 local statement cache hits 0 Tuple fetches by index only scan 0 Tuple fetches by index scan with record retrieval 2908764 2507391 1884 44 26 13 14 150 76 23 records returned www.faircom.com All Rights Reserved 164 c-treeACE SQL Built-in Stored Procedures 11.21 fc_get_sysconfig() Returns c-treeACE SQL current server configuration information: Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_sysconfig(); Description ----------REPL_MAPPINGS Enabled Max num segments per index Max num indices per data file Server path separator Client path separator Server Serial Number Value ----0 12 32 92 92 89,123,456 6 records returned www.faircom.com All Rights Reserved 165 c-treeACE SQL Built-in Stored Procedures 11.22 fc_get_taskid( ) Returns the current c-treeACE task ID associated with the c-treeACE SQL connection. Result Set Fields (1) id INTEGER Example call fc_get_taskid() id -19 www.faircom.com All Rights Reserved 166 c-treeACE SQL Built-in Stored Procedures 11.23 fc_get_transtats() Returns c-treeACE SQL current transaction control statistics. Result Set Fields (2) Description VARCHAR(64) Value BIGINT Example >call fc_get_transtats(); DESCRIPTION ----------# transaction begins # transaction ends # transaction aborts # transaction savepoints # transaction restores # transaction log flush writes DOSFLUSH sync calls transaction log sync calls cumulative transaction time^ cumulative transaction count maximum elapsed tran time^ check point count cumulative checkpoint time^ cumulative checkpoint size checkpoint index buffer writes checkpoint data cache writes log flush count log flush time VALUE ----0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 0 0 0 18 records returned www.faircom.com All Rights Reserved 167 c-treeACE SQL Built-in Stored Procedures 11.24 fc_get_userlist( ) Returns the current list of c-treeACE SQL defined users. Result Set Fields (3) USER DBA RESOURCE VARCHAR(32) VARCHAR(3) VARCHAR(3) Example call fc_get_userlist(); USER DBA RESOURCE ------------admin Yes Yes accounting (null) (null) guest (null) (null) sales (null) (null) www.faircom.com All Rights Reserved 168 c-treeACE SQL Built-in Stored Procedures 11.25 fc_ptadmin_num() Performs partition administration actions to a partitioned table based on the partition number. You must be connected to the database that contains the table. This uses the ptADMINnewthd mode which requires the table to be closed. Parameters (4) owner VARCHAR(64) table_name VARCHAR(64) action VARCHAR(16) part_num INTEGER action is one of the following strings: ( 'purge' | 'reuse' | 'archive' | 'activate' | 'add' | 'rebuild') Example >call fc_ptadmin_num('admin', 'custmast', 'purge', 12345); Requires DBA privilege. www.faircom.com All Rights Reserved 169 c-treeACE SQL Built-in Stored Procedures 11.26 fc_set_blockinglock( ) Sets the blocking lock strategy for c-treeACE SQL queries. mode = 1 to block; 0 to unblock. Parameters (1) mode SMALLINT Example call fc_set_blockinglock( 0 ); www.faircom.com All Rights Reserved 170 c-treeACE SQL Built-in Stored Procedures 11.27 fc_set_debug( ) Sets the debug level of the c-treeACE SQL database engine for advanced diagnostics. Parameters (1) dbg_info VARCHAR(20) Result Set Fields (1) DBG_INFO VARCHAR(20) Example To enable Java debugging: call fc_set_debug('NNNNNNNNNNYN'); DBG_INFO -------NNNNNNNNNNYN See Also Advanced c-treeACE SQL Logging (page 19) www.faircom.com All Rights Reserved 171 c-treeACE SQL Built-in Stored Procedures 11.28 fc_set_file_tran_state( ) Sets the c-treeACE transaction mode for a table. WARNING: Do not set this value without a complete understanding of c-tree transaction control. There is great potential for data loss if not properly set. Parameters (3) owner VARCHAR(64) table_name VARCHAR(64) mode TINYINT Valid modes: 0 No transaction control. 1 Transaction control without recoverability. (ctPREIMG) 2 Transaction control and recoverability. (ctTRNLOG) Example call fc_set_file_tran_state( 'admin', 'custmast', 0 ); www.faircom.com All Rights Reserved 172 c-treeACE SQL Built-in Stored Procedures 11.29 fc_set_impersonation( ) Enables impersonation of a c-treeACE SQL connection. Specify a taskid of zero to disable impersonation of the connection (default). Specify a taskid of 1 to enable impersonation of the connection by any other connection. Specify a taskid greater than 1 to enable impersonation of the connection only by a connection having that specific task ID. Parameters (1) taskid INTEGER Example call fc_set_impersonation( 19 ) www.faircom.com All Rights Reserved 173 c-treeACE SQL Built-in Stored Procedures 11.30 fc_set_min_card( ) Sets the minimum cardinality value used by the c-treeACE SQL database engine. Parameters (1) value INTEGER Example call fc_set_min_card( 1000 ); www.faircom.com All Rights Reserved 174 c-treeACE SQL Built-in Stored Procedures 11.31 fc_set_nodename( ) Sets the NODE name of the connection. The c-tree NODE name identifies a connection with a string value, that can then be conveniently viewed with monitoring tools. fc_set_nodename() can be called multiple times within a c-treeACE SQL session to change the node name. It can also be called with an empty string to clear the NODE name. Parameters (1) nodename VARCHAR(31) Example call fc_set_nodename('accounting'); www.faircom.com All Rights Reserved 175 c-treeACE SQL Built-in Stored Procedures 11.32 fc_set_priority( ) Sets the c-treeACE SQL client thread priority. Note: This feature is supported only on the Windows operating system. Parameters (1) priority INTEGER priority = -3 to +3. Example call fc_set_priority( 0 ); WARNING: Use extreme caution when changing this value. If the priority is set too high relative to other tasks, c-treeACE SQL may exhibit unpredictable behavior as other threads may not get enough CPU time by the process scheduler. www.faircom.com All Rights Reserved 176 c-treeACE SQL Built-in Stored Procedures 11.33 fc_set_selectivity( ) Set the selectivity off (0) or on (1) Parameters (1) value BIT Example call fc_set_selectivity( 1 ); www.faircom.com All Rights Reserved 177 c-treeACE SQL Built-in Stored Procedures 11.34 fc_set_sysconfig() Dynamically enables a limited set of system configuration options as defined by the SetSystemConfigurationOption() API call. Parameters (2) option value VARCHAR(64) VARCHAR(64) option is one of the following: 'checkpoint_monitor' 'ctstatus_mask' 'diagnostics' 'dynamic_dump_defer' 'function_monitor' 'memory_monitor' 'request_time_monitor' 'vss_writer' Examples fc_set_sysconfig('vss_writer', 'YES'); fc_set_sysconfig('diagnostics', 'LOWL_FILE_IO'); fc_set_sysconfig('diagnostics', 'REPLICATE'); fc_set_sysconfig('ctstatus_mast', '~DYNAMIC_DUMP_FILES'); Requires DBA privilege. www.faircom.com All Rights Reserved 178 12. c-treeACE SQL Reserved Words Frequently, an application developer chooses a logically apt column name, however, this name happens to collide with a c-treeACE SQL reserved word. Surrounding identifiers in double quotes ensures they are properly interpreted as a table name, column name, or other identifier. Example CREATE TABLE "version" ("character" VARCHAR(10), "hour" VARCHAR(10)); INSERT INTO "version" VALUES ("Cinderella", "midnight"); SELECT "character", "hour" FROM "version"; To ensure your application is always prepared for future versions of c-treeACE SQL it could be considered prudent to always quote identifiers, thus avoiding issues with future reserved words. A complete list of Reserved Words follows. 12.1 c-treeACE SQL Reserved Words A a, abs, acos, add, add_months, after, all, alter, an, and, any, array, as, ascii, asin, atan, atan2, avg B before, begin, between, bigint, binary, bind, binding, bit, blob, both, by C call, cascade, case, cast, ceiling, char, char_length, character, character_length, chartorowid, check, chr, cleanup, , close, clustered, coalesce, colgroup, collate, column, commit, complex, compress, concat, connect, constraint, contains, continue, convert, cos, cot, count, create, cross, curdate, current, current_date, current_user, cursor, curtime, current_time, current_timestamp, cvar D database, datapages, date, dateadd, datediff, dayname, dayofmonth, dayofweek, dayofyear, db_name, dba, dec, decimal, declaration, declare, decode, default, definition, degrees, delete, desc, describe, descriptor, dhtype, difference, distinct, double, drop E each, else, end, escape, exclusive, exec, execute, exists, exit, exp, explain, explicit, extract F fetch, field, file, float, floor, for, foreign, found, from, full, function G go, goto, grant, greatest, group H hash, having, hour I identified, identity, ifnull, immediate, in, index, indexpages, indicator, initcap, inner, inout, input, insert, instr, int, integer, interface, intersect, into, is, isnull J join K key L large, last_day, lcase, least, leading, left, length, like, link, list, localtime, localtimestamp, locate, lock, log, log10, long, lower, lpad, ltrim, lvarbinary, lvarchar M main, max, metadata_only, min, minus, minute, mod, mode, modify, money, month, monthname, months_between N national, natural, nchar, nclob, newrow, next_day, nocompress, not, now, nowait, null, nullif, nullvalue, number, numeric, nlvarchar, nvl nvarchar www.faircom.com All Rights Reserved 179 c-treeACE SQL Reserved Words O object, object_id, odbc_convert, odbcinfo, of, oldrow, on, open, option, or, order, out, outer, output P pctfree, percent, pi, placing, plan, position, power, precision, prefix, prepare, primary, privileges, procedure, public Q quarter R radians, rand, range, raw, real, record, recursive, references, referencing, rename, repeat, replace, resource, restrict, result, return, returns, revoke, right, rollback, row, rowid, rowidtochar, rownum, rpad, rtrim S schema, searched_case, second, section, select, service, set, session_user, share, short, sign, simple_case, sin, size, smallint, some, soundex, space, sql, sql_bigint, sql_binary, sql_bit, sql_char, sql_date, sql_decimal, sql_double, sql_float, sql_integer, sql_longvarbinary, sql_longvarchar, sql_numeric, sql_real, sql_smallint, sql_time, sql_timestamp, sql_tinyint, sql_tsi_day, sql_tsi_frac_second, sql_tsi_hour, sql_tsi_minute, sql_tsi_month, sql_tsi_quarter, sql_tsi_second, sql_tst_week, sql_tsi_year, sql_varbinary, sql_varchar, sqlerror, sqlwarning, sort, start, statement, statement_id, statistics, storage_attributes, storage_manager, substr, substring, suffix, sum, synonym, sysdate, systime, systimestamp T table, tan, then, ties, time, timeout, timestamp, timestampadd, timestampdiff, tinyint, to, top, to_char, to_date, to_number, to_time, to_timestamp, tpe, trailing, transaction, translate, trigger, trim, truncate, type U ucase, uid, union, unique, unsigned, update, upper, user, user_id, user_name, using, uuid V values, varbinary, varchar, variables, varying, version, view W week, when, whenever, where, with, work Y year www.faircom.com All Rights Reserved 180 13. Index 4 4025 CTDB_INTERNAL ......................................... 67 A Accessing c-treeACE SQL Files from ISAM Applications ........................................................ 42 Adding DODAs to Existing Files ............................. 46 Advanced c-treeACE SQL Logging ........................ 19 Advanced Encryption for c-treeACE SQL Tables..... 8 Advanced JVM Configuration ................................. 26 Allow linking SQL indices with rightmost segment(s) on hidden field(s) ............................. 32 An example field conversion ................................... 50 Automatic Database Conversion Options............... 18 B Building the callback libraries ................................. 60 Built-in Stored Procedure to Switch Transaction Mode ................................................................... 14 C callbacks ctcbklib.c ............................................................. 60 c-treeDB .............................................................. 52 ctsqlcbk.dll .......................................................... 53 ctsqlcbk.ini .......................................................... 53 ctsqlimp.dll .......................................................... 60 data type conversion........................................... 52 libctsqlcbk.so ...................................................... 53 migration utility .................................................... 68 unsafe c-treeDB functions .................................. 63 Case Insensitive Search Options for c-treeACE SQL LONG Field Types ...................................... 12 Case-Sensitivity Options ........................................ 16 Check for Invalid Characters in Field Names ......... 33 Check for Max Number of Indices/Segments ......... 32 Combining c-treeACE SQL with ISAM ................... 42 Considerations for ISAM applications..................... 43 conversion ctsqlcbk.def ......................................................... 60 Copyright Notice ...................................................... iii ctcbklib.c callbacks ............................................................. 60 CTDB_INTERNAL .................................................. 67 CTDB_INTERNAL (4025) ....................................... 67 ctpath - Change Internal Database Paths .............. 29 c-treeACE SQL Built-in Stored Procedures .......... 143 c-treeACE SQL Callback Configuration File ........... 55 c-treeACE SQL Callback Dynamic Library ............. 53 c-treeACE SQL Configuration ................................ 71 c-treeACE SQL Configuration Keywords................ 71 c-treeACE SQL Features .......................................... 8 c-treeACE SQL Java Configuration for Stored Procedures, Triggers and User Defined Functions ........................................................... 22 c-treeACE SQL Operational Files ............................ 7 c-treeACE SQL Operations and Utilities Guide ....... 1 c-treeACE SQL Options ......................................... 15 c-treeACE SQL Reserved Words ........................ 179 c-treeACE SQL Types SDK ................................... 50 c-treeACE SQL Utilities ......................................... 29 c-treeACE SQL with Callbacks .............................. 52 c-treeDB data types SDK .................................................. 50 unsafe callback functions ................................... 63 c-treeDB ROWID Options ...................................... 17 c-treeSQL migration CTDB_INTERNAL error................................. 67 types................................................................... 50 ctsqlbigint - c-treeACE SQL Big Integer Fix Utility .................................................................. 29 ctsqlcbk.def data type conversion .......................................... 60 ctsqlcbk.dll data type conversion .......................................... 53 ctsqlcbk.ini callbacks ............................................................ 53 c-treeDB callbacks ............................................. 53 ctsqlcdb - c-treeACE SQL Database Maintenance Utility............................................. 30 ctsqlimp data type conversion .......................................... 59 migrating data .................................................... 66 ctsqlimp - c-treeACE SQL Import Utility................. 30 ctsqlimp Import Indices with Segment on String Field Missing Last Byte ...................................... 34 ctsqlimp Usage ...................................................... 30 ctsqlimp.dll building ............................................................... 60 callbacks ............................................................ 60 makefile .............................................................. 60 ctsqlmdd - c-treeACE SQL Merge Database Utility .................................................................. 35 ctsqlutl - c-treeACE SQL Table Maintenance Utility .................................................................. 35 cttrnmod - Change Transaction Mode Utility ......... 37 Customization ........................................................ 67 D data types conversion with c-treeDB ................................... 50 c-treeSQL types SDK......................................... 50 Debugging Java Stored Procedures ...................... 23 Default Date Handling ............................................ 15 Default HUGE File Tables with c-treeACE SQL ...... 9 Defining a Table Using c-treeACE SQL ................ 42 www.faircom.com All Rights Reserved 181 Index E Environment Variables ........................................... 15 errors CTDB_INTERNAL (4025) ................................... 67 Examining Resulting File Specifications ................. 42 Example Import Utility Callback Makefile ............... 62 Example Server Callback Makefile ......................... 61 F FairCom Typographical Conventions ....................... ii fc_add_db( ).......................................................... 144 fc_check_file_tran_state( ) ................................... 145 fc_create_db( )...................................................... 146 fc_create_user( )................................................... 147 fc_get_cachestats() .............................................. 148 fc_get_connstats() ................................................ 149 fc_get_dblist( ) ...................................................... 150 fc_get_fcproclist( ) ................................................ 151 fc_get_filestats() ................................................... 152 fc_get_iostats() ..................................................... 153 fc_get_isamstats() ................................................ 154 fc_get_lockstats().................................................. 155 fc_get_memstats() ................................................ 156 fc_get_min_card( ) ................................................ 157 fc_get_partbounds().............................................. 159 fc_get_priority( ) .................................................... 158 fc_get_replstats() .................................................. 160 fc_get_selectivity( ) ............................................... 161 fc_get_server_version( ) ....................................... 162 fc_get_sqlstats() ................................................... 164 fc_get_sysconfig()................................................. 165 fc_get_taskid( ) ..................................................... 166 fc_get_transtats() .................................................. 167 fc_get_userlist( ) ................................................... 168 fc_ptadmin_num() ................................................. 169 fc_set_blockinglock( ) ........................................... 170 fc_set_debug( ) ..................................................... 171 fc_set_file_tran_state( ) ........................................ 172 fc_set_impersonation( ) ........................................ 173 fc_set_min_card( ) ................................................ 174 fc_set_nodename( ) .............................................. 175 fc_set_priority( ) .................................................... 176 fc_set_selectivity( ) ............................................... 177 fc_set_sysconfig() ................................................. 178 Field Definitions ...................................................... 42 fkverify .................................................................... 40 H How to specify MYTIME field translation ................ 57 I Import Duplicate Filenames into c-treeACE SQL ... 34 Import Utility Callback Architecture......................... 60 Import Utility Callback Configuration File................ 60 Important Observations .......................................... 67 Importing Tables Into c-treeACE SQL .................... 59 Index Definition Requirements ............................... 46 indexes rebuilding during c-treeSQL migration............................ 67 when migrating data ...................................... 67 Installation ................................................................ 3 K Key Steps............................................................... 66 L libctsqlcbk.so data type conversion .......................................... 53 Logging c-treeACE SQL Query Times................... 13 M Mapping of c-tree to c-treeACE SQL Types .......... 47 Mapping unsigned integers with c-treeACE SQL .. 32 MAX_SQL_ISOLATION_LEVEL ........................... 72 Memory Manager (MM) System for Temporary Storage............................................................... 20 migrate.c and migration utility ................................ 67 Migrating to c-treeACE SQL .................................. 65 Migration ................................................................ 66 Migration Callbacks................................................ 68 Migration from c-tree ODBC to c-treeACE SQL ODBC ................................................................. 65 migration utility callbacks ............................................................ 68 ctsqlmgr.c ........................................................... 67 migrate.c ............................................................ 67 MigrationInfo structure ....................................... 67 migrfncs.c ........................................................... 67 N Null Fields and Field Default Values Considerations ................................................... 33 O Optimizer Configuration Options............................ 17 Overview of the c-treeACE SQL Migration SDK.... 65 Overview of the c-treeACE SQL Types SDK ......... 50 P PREIMAGE Tables in c-treeACE SQL .................... 9 Q Query Timeout Option ........................................... 12 R rebuilding indexes migrating data .................................................... 67 Run-Time Settings for Java Stored Procedure Support............................................................... 22 S Server-Side Connection Pooling............................ 10 SETENV CLASSPATH .......................................... 82 SETENV DEBUG_JVM ......................................... 83 SETENV DEBUG_JVM_PORT ............................. 84 SETENV DH_CACHED_STATEMENTS ............... 85 www.faircom.com All Rights Reserved 182 Index SETENV DH_DO_AHEAD ..................................... 86 SETENV DH_DYN_CACHED_STATEMENTS ...... 87 SETENV DH_ENABLE_POOL .........................88, 90 SETENV DH_JVM_OPTION_STRINGS ................ 89 SETENV DH_OPT_OR_CARD .............................. 91 SETENV DH_POOL_SIZE ..................................... 92 SETENV DH_REBUILD_SEL_CUTOFF ................ 93 SETENV DH_SVR_DA_BUFFER .......................... 95 SETENV DH_THREAD_STACK_SZ_KB ............... 94 SETENV JAVA_COMPILER .................................. 96 SETENV JVM_LIB .................................................. 97 SETENV TPE_DFLT_DATE ................................... 99 SETENV TPE_MM_CACHESIZE......................... 100 SETENV TPE_MM_COMPARE_OVHD............... 101 SETENV TPE_MM_INSERT_OVHD.................... 102 SETENV TPE_MM_SWAPSIZE........................... 103 SETENV TPESQLDBG .......................................... 98 Shared Memory Connections for c-treeACE SQL Clients on Windows ............................................ 10 Specifying primary keys from imported indexes ..... 32 Specifying the configuration file location ................ 58 SQL_CONNECT_TIMEOUT_SEC ......................... 73 SQL_DATABASE ................................................... 74 SQL_DEBUG ABORT_ON_PANIC ...................... 132 SQL_DEBUG ERROR_INFO ............................... 133 SQL_DEBUG INDEX ............................................ 134 SQL_DEBUG INDEX_DEF_SEL.......................... 136 SQL_DEBUG INDEX_INFO ................................. 137 SQL_DEBUG INDEX_SEL ................................... 135 SQL_DEBUG LOG_STMT_TIMES ...................... 141 SQL_DEBUG LOG_STMT_TIMES_FETCH ........ 142 SQL_DEBUG LOG_STUBS_HIGH ...................... 138 SQL_DEBUG LOG_STUBS_LOW ....................... 140 SQL_DEBUG LOG_STUBS_MED ....................... 139 SQL_DEBUG Options ............................................ 18 SQL_IDLE_WAKE .................................................. 75 SQL_KEEP_OPEN_TABLES ................................. 76 SQL_LOGFILE ....................................................... 77 SQL_MIN_CARD .................................................... 78 SQL_OPTION CHECK_HEAP ............................. 104 SQL_OPTION CREATE_WITH_RECBYT ........... 107 SQL_OPTION CREATE_WITH_ROWID ............. 106 SQL_OPTION CTDB_ROWID ............................. 108 SQL_OPTION CTSTRING_VARCHAR................ 105 SQL_OPTION DB_CASE_INSENSITIVE ............ 109 SQL_OPTION FORCE_TEMPLATE_DB ............. 110 SQL_OPTION HM_ACTIVE ................................. 111 SQL_OPTION LOAD_CALLBACK_LIB................ 112 SQL_OPTION NO_AUTO_ABORT ...................... 113 SQL_OPTION NO_BINARY_PAD ....................... 114 SQL_OPTION NO_CARDINALITY ...................... 115 SQL_OPTION NO_COSTS .................................. 116 SQL_OPTION NO_CRYPT_SYSTBL .................. 117 SQL_OPTION NO_DB_CONVERSION ............... 118 SQL_OPTION NO_DUP_IDXNAME .................... 119 SQL_OPTION NO_HUGEFILE ............................ 120 SQL_OPTION NO_PUSHDOWN ........................ 121 SQL_OPTION NO_REVERSE_INDEX ............... 122 SQL_OPTION NO_SELECTIVITY ...................... 123 SQL_OPTION NO_SHARED_MEMORY ............ 124 SQL_OPTION NO_SYSSUPERFILE .................. 125 SQL_OPTION OWNER_FILE_NAMES .............. 126 SQL_OPTION PAD_WITH_NULL ....................... 127 SQL_OPTION PARTIAL_SEG ............................ 128 SQL_OPTION PRESERVE_CURSOR_FREE_LOCK ............ 129 SQL_OPTION SUPPRESS_JVM_LOAD_ERR .. 130 SQL_OPTION USE_MM ..................................... 131 SQL_PARTOPEN_COST ...................................... 79 SQL_PORT ............................................................ 80 SQL_TRACE_CTREE_ERROR ............................ 81 sqlverify .................................................................. 40 Support for Importing Table with an Alternative Name.................................................................. 33 Supported Transaction Isolation Levels ................ 10 T Table and Index Definitions ................................... 43 Table Definition Requirements .............................. 45 Template Database __Master.dbs Handling ......... 18 The File Definition Generating Utility ..................... 58 The Server Architecture ......................................... 53 U Unix environment ................................................... 54 Up and Running with the c-treeACE Database Engine .................................................................. 4 Using Existing ISAM Data with c-treeACE SQL .... 45 W Which c-treeACE and c-treeDB Functions are Safe? .................................................................. 63 Windows environment ........................................... 54 www.faircom.com All Rights Reserved 183