ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:24.02 GB of 70.42 GB (34.11%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ usr/ share/ doc/ libinnodb-dev/ examples/ - drwxr-xr-x

Directory:
Viewing file:     ib_index.c (7.16 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/***********************************************************************
Copyright (c) 2009 Innobase Oy. All rights reserved.
Copyright (c) 2009 Oracle. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

************************************************************************/

/* Simple single threaded test that does the equivalent of:
 Create a database
 CREATE TABLE T(
     c1 VARCHAR(n),
           c2 INT,
           C3 FLOAT,
           C4 DOUBLE,
    C5 DECIMAL,
           PRIMARY KEY(c1, 4));
 INSERT INTO T VALUES('xxxxaaaa', 1);
 INSERT INTO T VALUES('xxxxbbbb', 2); -- should result in duplicate key
 
 Test whether we catch attempts to create prefix length indexes on
 INT, FLOAT, DOUBLE and DECIMAL column types.

 The test will create all the relevant sub-directories in the current
 working directory. */

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "test0aux.h"

#ifdef UNIV_DEBUG_VALGRIND
#include <valgrind/memcheck.h>
#endif

#define DATABASE    "test"
#define TABLE        "t"

/*********************************************************************
Create an InnoDB database (sub-directory). */
static
ib_err_t
create_database(
/*============*/
    const char*    name)
{
    ib_bool_t    err;

    err = ib_database_create(name);
    assert(err == IB_TRUE);

    return(DB_SUCCESS);
}

/*********************************************************************
CREATE TABLE T(
    C1    VARCHAR(10),
           c2     INT,
           C3     FLOAT,
           C4     DOUBLE,
    C5     DECIMAL,
    PRIMARY KEY(C1, 4); */
static
ib_err_t
create_table(
/*=========*/
    const char*    dbname,            /*!< in: database name */
    const char*    name,            /*!< in: table name */
    int        page_size)        /*!< in: page size */
{
    ib_trx_t    ib_trx;
    ib_id_t        table_id = 0;
    ib_err_t    err = DB_SUCCESS;
    ib_tbl_sch_t    ib_tbl_sch = NULL;
    ib_idx_sch_t    ib_idx_sch = NULL;
    ib_tbl_fmt_t    tbl_fmt = IB_TBL_COMPACT;
    char        table_name[IB_MAX_TABLE_NAME_LEN];

#ifdef __WIN__
    sprintf(table_name, "%s/%s", dbname, name);
#else
    snprintf(table_name, sizeof(table_name), "%s/%s", dbname, name);
#endif

    if (page_size > 0) {
        tbl_fmt = IB_TBL_COMPRESSED;

        printf("Creating compressed table with page size %d\n",
            page_size);
    }

    /* Pass a table page size of 0, ie., use default page size. */
    err = ib_table_schema_create(
        table_name, &ib_tbl_sch, tbl_fmt, page_size);

    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_col(
        ib_tbl_sch, "c1", IB_VARCHAR, IB_COL_NONE, 0, 10);

    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_col(
        ib_tbl_sch, "c2", IB_INT, 0, 0, sizeof(ib_i32_t));

    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_col(
        ib_tbl_sch, "c3", IB_FLOAT, 0, 0, sizeof(float));

    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_col(
        ib_tbl_sch, "c4", IB_DOUBLE, 0, 0, sizeof(double));

    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_col(ib_tbl_sch, "c5", IB_DECIMAL, 0, 0, 0);
    assert(err == DB_SUCCESS);

    err = ib_table_schema_add_index(ib_tbl_sch, "c1", &ib_idx_sch);
    assert(err == DB_SUCCESS);

    /* Set prefix length to 4 for C1. */
    err = ib_index_schema_add_col( ib_idx_sch, "c1", 4);
    assert(err == DB_SUCCESS);

    /* This should fail. */
    err = ib_index_schema_add_col( ib_idx_sch, "c2", 2);
    assert(err == DB_SCHEMA_ERROR);

    /* This should fail. */
    err = ib_index_schema_add_col( ib_idx_sch, "c3", 2);
    assert(err == DB_SCHEMA_ERROR);

    /* This should fail. */
    err = ib_index_schema_add_col( ib_idx_sch, "c4", 2);
    assert(err == DB_SCHEMA_ERROR);

    /* This should fail. */
    err = ib_index_schema_add_col( ib_idx_sch, "c5", 2);
    assert(err == DB_SCHEMA_ERROR);

    err = ib_index_schema_set_clustered(ib_idx_sch);
    assert(err == DB_SUCCESS);

    /* create table */
    ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ);
    err = ib_schema_lock_exclusive(ib_trx);
    assert(err == DB_SUCCESS);

    err = ib_table_create(ib_trx, ib_tbl_sch, &table_id);
    assert(err == DB_SUCCESS);

    err = ib_trx_commit(ib_trx);
    assert(err == DB_SUCCESS);

    if (ib_tbl_sch != NULL) {
        ib_table_schema_delete(ib_tbl_sch);
    }

    return(err);
}

/*********************************************************************
Open a table and return a cursor for the table. */
static
ib_err_t
open_table(
/*=======*/
    const char*    dbname,        /*!< in: database name */
    const char*    name,        /*!< in: table name */
    ib_trx_t    ib_trx,        /*!< in: transaction */
    ib_crsr_t*    crsr)        /*!< out: innodb cursor */
{
    ib_err_t    err = DB_SUCCESS;
    char        table_name[IB_MAX_TABLE_NAME_LEN];

#ifdef __WIN__
    sprintf(table_name, "%s/%s", dbname, name);
#else
    snprintf(table_name, sizeof(table_name), "%s/%s", dbname, name);
#endif
    err = ib_cursor_open_table(table_name, ib_trx, crsr);
    assert(err == DB_SUCCESS);

    return(err);
}

/*********************************************************************
INSERT INTO T VALUE('xxxxaaaa', 1);
INSERT INTO T VALUE('xxxxbbbb', 2); */
static
void
insert_rows(
/*========*/
    ib_crsr_t    crsr)        /*!< in, out: cursor to use for write */
{
    ib_tpl_t    tpl = NULL;
    ib_err_t    err = DB_ERROR;

    tpl = ib_clust_read_tuple_create(crsr);
    assert(tpl != NULL);

    err = ib_col_set_value(tpl, 0, "xxxxaaaa", 8);
    assert(err == DB_SUCCESS);

    err = ib_tuple_write_i32(tpl, 1, 2);
    assert(err == DB_SUCCESS);

    err = ib_cursor_insert_row(crsr, tpl);
    assert(err == DB_SUCCESS);

    /* Insert a record with the same prefix as the one inserted above. */
    err = ib_col_set_value(tpl, 0, "xxxxbbbb", 8);
    assert(err == DB_SUCCESS);

    err = ib_tuple_write_i32(tpl, 1, 2);
    assert(err == DB_SUCCESS);

    err = ib_cursor_insert_row(crsr, tpl);
    assert(err == DB_DUPLICATE_KEY);

    ib_tuple_delete(tpl);
}

int main(int argc, char* argv[])
{
    ib_err_t    err;
    ib_crsr_t    crsr;
    ib_trx_t    ib_trx;
    ib_u64_t    version;

    version = ib_api_version();
    printf("API: %d.%d.%d\n",
        (int) (version >> 32),            /* Current version */
        (int) ((version >> 16)) & 0xffff,    /* Revisiion */
               (int) (version & 0xffff));        /* Age */

    err = ib_init();
    assert(err == DB_SUCCESS);

    test_configure();

    err = ib_startup("barracuda");
    assert(err == DB_SUCCESS);

    err = create_database(DATABASE);
    assert(err == DB_SUCCESS);

    err = create_table(DATABASE, TABLE, 0);
    assert(err == DB_SUCCESS);

    ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ);
    assert(ib_trx != NULL);

    err = open_table(DATABASE, TABLE, ib_trx, &crsr);
    assert(err == DB_SUCCESS);

    err = ib_cursor_lock(crsr, IB_LOCK_IX);
    assert(err == DB_SUCCESS);

    insert_rows(crsr);

    err = ib_cursor_close(crsr);
    assert(err == DB_SUCCESS);
    crsr = NULL;

    err = ib_trx_commit(ib_trx);
    assert(err == DB_SUCCESS);

    err = drop_table(DATABASE, TABLE);
    assert(err == DB_SUCCESS);

    err = ib_shutdown(IB_SHUTDOWN_NORMAL);
    assert(err == DB_SUCCESS);

#ifdef UNIV_DEBUG_VALGRIND
    VALGRIND_DO_LEAK_CHECK;
#endif

    return(EXIT_SUCCESS);
}
Command:
Quick Commands:
Upload:
[Read-Only] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [Read-Only]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.8393 seconds