#pragma ident "%Z%%M% %I% %E% SMI"
/*
** 2001 September 15
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
**
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
**
*************************************************************************
** Code for testing the pager.c module in SQLite. This code
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
** $Id: test2.c,v 1.16 2004/02/10 01:54:28 drh Exp $
*/
#include "os.h"
#include "sqliteInt.h"
#include "pager.h"
#include "tcl.h"
#include <stdlib.h>
#include <string.h>
/*
** Interpret an SQLite error number
*/
char *zName;
switch( rc ){
default: zName = "SQLITE_Unknown"; break;
}
return zName;
}
/*
** Usage: pager_open FILENAME N-PAGE
**
** Open a new pager
*/
static int pager_open(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int nPage;
int rc;
if( argc!=3 ){
" FILENAME N-PAGE\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_close ID
**
** Close the given pager.
*/
static int pager_close(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_rollback ID
**
** Rollback changes
*/
static int pager_rollback(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_commit ID
**
** Commit all changes
*/
static int pager_commit(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_ckpt_begin ID
**
** Start a new checkpoint.
*/
static int pager_ckpt_begin(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_ckpt_rollback ID
**
** Rollback changes to a checkpoint
*/
static int pager_ckpt_rollback(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_ckpt_commit ID
**
** Commit changes to a checkpoint
*/
static int pager_ckpt_commit(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: pager_stats ID
**
** Return pager statistics.
*/
static int pager_stats(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int i, *a;
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
a = sqlitepager_stats(pPager);
for(i=0; i<9; i++){
static char *zName[] = {
"ref", "page", "max", "size", "state", "err",
"hit", "miss", "ovfl",
};
}
return TCL_OK;
}
/*
** Usage: pager_pagecount ID
**
** Return the size of the database file.
*/
static int pager_pagecount(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
if( argc!=2 ){
" ID\"", 0);
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: page_get ID PGNO
**
** Return a pointer to a page from the database.
*/
static int page_get(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
int pgno;
int rc;
if( argc!=3 ){
" ID PGNO\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: page_lookup ID PGNO
**
** Return a pointer to a page if the page is already in cache.
** If not in cache, return an empty string.
*/
static int page_lookup(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
int pgno;
if( argc!=3 ){
" ID PGNO\"", 0);
return TCL_ERROR;
}
if( pPage ){
}
return TCL_OK;
}
/*
** Usage: page_unref PAGE
**
** Drop a pointer to a page.
*/
static int page_unref(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
int rc;
if( argc!=2 ){
" PAGE\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: page_read PAGE
**
** Return the content of a page
*/
static int page_read(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
if( argc!=2 ){
" PAGE\"", 0);
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: page_number PAGE
**
** Return the page number for a page.
*/
static int page_number(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
if( argc!=2 ){
" PAGE\"", 0);
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: page_write PAGE DATA
**
** Write something into a page.
*/
static int page_write(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
void *pPage;
int rc;
if( argc!=3 ){
" PAGE DATA\"", 0);
return TCL_ERROR;
}
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Usage: fake_big_file N FILENAME
**
** Write a few bytes at the N megabyte point of FILENAME. This will
** create a large file. If the file was a valid SQLite database, then
** the next time the database is opened, SQLite will begin allocating
** new pages after N. If N is 2096 or bigger, this will test the
** ability of SQLite to write to large files.
*/
static int fake_big_file(
void *NotUsed,
int argc, /* Number of arguments */
const char **argv /* Text of each argument */
){
int rc;
int n;
int readOnly = 0;
if( argc!=3 ){
" N-MEGABYTES FILE\"", 0);
return TCL_ERROR;
}
if( rc ){
return TCL_ERROR;
}
offset = n;
if( rc ){
return TCL_ERROR;
}
sqliteOsClose(&fd);
if( rc ){
return TCL_ERROR;
}
return TCL_OK;
}
/*
** Register commands with the TCL interpreter.
*/
extern int sqlite_io_error_pending;
static struct {
char *zName;
} aCmd[] = {
};
int i;
}
(char*)&sqlite_io_error_pending, TCL_LINK_INT);
#ifdef SQLITE_TEST
(char*)&journal_format, TCL_LINK_INT);
#endif
return TCL_OK;
}