# C API Core Samples

> The build procedures for the C API SDK samples on all supported platforms are described in the "Getting Started" section. Note that the `native\core` directory contains some C++ sample sub-directories which can be viewed here. By default, all sample executables are built in the `target/bin` directory, so after building the sample(s) it is convenient to `cd` to `target/bin` to run the sample or run it in the development system debugger.

> Please use the links below to view the description and specific instructions for individual samples in the following sub-directories:

> 00-ddl | Demonstrates use of the eXtremeDB schema compiler
> 01-rtconfig_inmem | Displays runtime information for a simple All-In-Memory database
> 01-rtconfig_mixed | Demonstrates a database schema with both persistent and transient classes
> 02-open_conv | Opens a database in conventional memory
> 02-open_convhv | Opens a database in conventional memory and allows HTTP access
> 02-open_dbextend | Demonstrates extending a database in conventional memory
> 02-open_disk_file | Opens a persistent database using FILE memory devices
> 02-open_disk_multifile | Opens a persistent database using MULTIFILE memory devices
> 02-open_disk_raid | Opens a persistent database using a RAID memory device
> 02-open_hybrid | Opens a hybrid database (having both transient and persistent classes)
> 02-open_nvram | Demonstrates recovery of a database in non-volatile memory
> 02-open_security_disk_cipher | Opens a database protected by a cipher key
> 02-open_security_disk_crc | Opens a database and protects its pages by CRC
> 02-open_shared | Opens a database in shared memory
> 03-connect_multi-process | Opens and connects to a database from multiple processes
> 03-connect_multi-task | Opens and connects to a database from multiple tasks (threads)
> 03-connect_single-task | Opens and connects to a database from a single task
> 04-operations | Performs basic database insert, read, and update operations
> 05-indexes_btree_fulltext | Demonstrates full text search operations with tree indexes
> 05-indexes_btree_locate | Demonstrates the `_locate()` and `_compare()` cursor operations
> 05-indexes_btree_pattern | Demonstrates basic pattern search methods
> 05-indexes_btree_search | Demonstrates search operations with `tree` indexes
> 05-indexes_collate | Demonstrates custom collations for a `tree` index
> 05-indexes_cursor_basic | Demonstrates basic cursor operations
> 05-indexes_cursor_store | Demonstrates storing a cursor shared between transactions
> 05-indexes_hash | Demonstrates operations on unique and non-unique `hash` indexes
> 05-indexes_kdtree | Demonstrates `kdtree` index operations
> 05-indexes_patricia_binary | Demonstrates `patricia` tree match functions using a binary key (a vector of bits)
> 05-indexes_patricia_character | Demonstrates `patricia` match functions using a character string key
> 05-indexes_rtree | Demonstrates `rtree` index operations
> 05-indexes_userdef | Demonstrates user-defined compare functions for a `tree` index
> 06-errorhandling_errorhandler | Demonstrates registering a fatal error handler
> 06-errorhandling_fatalerr | Demonstrates triggering a user-defined error handler
> 06-errorhandling_fatalerrex | Demonstrates calling an extended error handler
> 06-errorhandling_nonfatalerr | Demonstrates handling of non-fatal error codes
> 06-errorhandling_statuscode | Demonstrates handling of status codes
> 07-transactions_exclusive | Demonstrates use of the exclusive transaction manager
> 07-transactions_isolation_levels | Demonstrates the difference in behavior using different isolation levels with the `MVCC` transaction manager
> 07-transactions_iterate | Demonstrates how to iterate through committed objects within a two-phase transaction
> 07-transactions_mursiw | Demonstrates the MUlti-Read SIngle-Write transaction manager
> 07-transactions_MVCC | Demonstrates the `MVCC` transaction manager
> 07-transactions_nested | Demonstrates a (pseudo) nested transaction
> 07-transactions_ph2commit | Demonstrates a two-phase commit transaction to two in-memory databases
> 07-transactions_ph2disk | Demonstrates a two-phase commit to a disk based database
> 07-transactions_policy | Demonstrates the difference in behavior using different transaction policies
> 07-transactions_transaction | Demonstrates the different eXtremeDB transaction types
> 08-benchmarks_general | Demonstrates eXtremeDB performance for basic database operations using randomized data
> 08-benchmarks_perf | Demonstrates eXtremeDB performance for basic database operations using sequential data
> 08-benchmarks_perf_pmon | Demonstrates eXtremeDB performance using the Performance Monitor API
> 08-benchmarks_perf_struct | Demonstrates performance for basic database operations using simple and `direct` structs
> 08-benchmarks_perf_UDA | Demonstrates performance for basic database operations using the Uniform Data Access API
> 09-blobs | Demonstrates basic BLOB operations
> 10-events_asynch | Demonstrates asynchronous database event handling
> 10-events_synch | Demonstrates synchronous database event handling
> 12-vectors | Demonstrates the use of vectors and vector-based indexes
> 13-xml_export_import | Demonstrates the use of the eXtremeDB XML export and import APIs
> 13-xml_xml_ops | Demonstrates basic XML operations
> 13-xml_xml_policy | Demonstrates the use of the XML Policy API
> 13-xml_xml_schema | Demonstrates use of the`<classname>_xml_schema()` API
> 14-ttl | Demonstrates "Time To Live" policies
> 16-uda_uda_mco | Demonstrates converting between UDA and native object handles
> 16-uda_udacoll | Demonstrates custom collations with tree & hash indexes using the UDA API
> 16-uda_udaevent | Demonstrates asynchronous and synchronous database event handling using the UDA API
> 16-uda_udameta | Demonstrates use of the UDA Metadata API
> 16-uda_udaopen | Demonstrates use of the basic UDA APIs `mco_uda_db_open()` and `mco_uda_db_close()`
> 16-uda_udaops | Demonstrates the UDA API in a variety of database operations
> 16-uda_udapsearch | Demonstrates basic pattern search methods using the UDA API
> 16-uda_udaudf | Demonstrates user-defined tree and hash indexes with the UDA API
> 17-statistics_dbcalc | Demonstrates use of the eXtremeDB database memory calculation tool (with various command line options)
> 17-statistics_dbcalcapi | Demonstrates simple usage of the eXtremeDB database memory calculation tool API
> 17-statistics_dbstat | Demonstrates how to obtain runtime database statistics
> 18-backup_BSE | Demonstrates the Binary Schema Evolution of a database
> 18-backup_db | Demonstrates saving an image (snapshot) of a database to disk
> 18-backup_disk | Demonstrates recovery of a persistent database from a backup file using the `mco_disk_save()`and `mco_disk_load()` APIs
> 18-backup_disk_file | Demonstrates recovery of a persistent database using the `mco_disk_save()`and `mco_disk_load_file()` APIs
> 18-backup_inmem | Demonstrates recovery of the in-memory portion of a database to disk using the `mco_inmem_save()` and `mco_inmem_load()` APIs
> 18-backup_migrate | Demonstrates migration of an existing disk database to a more recent eXtremeDB build or to a different schema
> 18-backup_online | Demonstrates incremental backup and restore
> 19-recovery_diskrecovery | Demonstrates automatic recovery of a persistent database
> 19-recovery_sniffer | Demonstrates database recovery using sniffer to detect dead connections
> 21-overflow_persistent | Demonstrates the use of a memory allocation callback for a persistent storage database
> 21-overflow_transient | Demonstrates the use of a memory allocation callback for a transient (in-memory-only) database
> 22-httpview | Demonstrates the database browser
> 23-httpviewpmon | Demonstrates the database browser using the eXtremeDB performance monitor
> 24-rest_st | Demonstrates the use of the Web Services REST AP in a single-threaded application
> 24-rest_mt | Demonstrates the use of the Web Services REST API with the HTTP server
> 25-perfmon | Demonstrates the use of the Performance Monitor C API to retrieve counters from the perfmon database using UDA