`
deepfuture
  • 浏览: 4397774 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80022
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69996
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103284
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285619
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67492
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32099
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45965
社区版块
存档分类
最新评论

sqlite源码剖析(2)

阅读更多

声明:本SQLite源码剖析系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

/*

** The maximum number of opcodes in a VDBE program.

** Not currently enforced.

*/

//VDBE程序的最大操作码数目

#ifndef SQLITE_MAX_VDBE_OP

# define SQLITE_MAX_VDBE_OP 25000

#endif

 

/*

** The maximum number of arguments to an SQL function.

*/

//SQL函数的最大参数数目

#ifndef SQLITE_MAX_FUNCTION_ARG

# define SQLITE_MAX_FUNCTION_ARG 127

#endif

 

/*

** The maximum number of in-memory pages to use for the main database

** table and for temporary tables.  The SQLITE_DEFAULT_CACHE_SIZE

*/

//主数据库表和临时表的最大内存大小

#ifndef SQLITE_DEFAULT_CACHE_SIZE

# define SQLITE_DEFAULT_CACHE_SIZE  2000

#endif

#ifndef SQLITE_DEFAULT_TEMP_CACHE_SIZE

# define SQLITE_DEFAULT_TEMP_CACHE_SIZE  500

#endif

 

/*

** The maximum number of attached databases.  This must be between 0

** and 30.  The upper bound on 30 is because a 32-bit integer bitmap

** is used internally to track attached databases.

*/

//附加数据库的数目

#ifndef SQLITE_MAX_ATTACHED

# define SQLITE_MAX_ATTACHED 10

#endif

 

 

/*

** The maximum value of a ?nnn wildcard that the parser will accept.

*/

//解析器接受的匹配符参数最大值

#ifndef SQLITE_MAX_VARIABLE_NUMBER

# define SQLITE_MAX_VARIABLE_NUMBER 999

#endif

 

/* Maximum page size.  The upper bound on this value is 32768.  This a limit

** imposed by the necessity of storing the value in a 2-byte unsigned integer

** and the fact that the page size must be a power of 2.

**

** If this limit is changed, then the compiled library is technically

** incompatible with an SQLite library compiled with a different limit. If

** a process operating on a database with a page-size of 65536 bytes

** crashes, then an instance of SQLite compiled with the default page-size

** limit will not be able to rollback the aborted transaction. This could

** lead to database corruption.

*/

//最大页面大小

#ifndef SQLITE_MAX_PAGE_SIZE

# define SQLITE_MAX_PAGE_SIZE 32768

#endif

 

 

/*

** The default size of a database page.

*/

//数据库页面的默认大小

#ifndef SQLITE_DEFAULT_PAGE_SIZE

# define SQLITE_DEFAULT_PAGE_SIZE 1024

#endif

#if SQLITE_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE

# undef SQLITE_DEFAULT_PAGE_SIZE

# define SQLITE_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE

#endif

 

/*

** Ordinarily, if no value is explicitly provided, SQLite creates databases

** with page size SQLITE_DEFAULT_PAGE_SIZE. However, based on certain

** device characteristics (sector-size and atomic write() support),

** SQLite may choose a larger value. This constant is the maximum value

** SQLite will choose on its own.

*/

//数据库页面的最大默认大小

#ifndef SQLITE_MAX_DEFAULT_PAGE_SIZE

# define SQLITE_MAX_DEFAULT_PAGE_SIZE 8192

#endif

#if SQLITE_MAX_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE

# undef SQLITE_MAX_DEFAULT_PAGE_SIZE

# define SQLITE_MAX_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE

#endif

 

 

/*

** Maximum number of pages in one database file.

**

** This is really just the default value for the max_page_count pragma.

** This value can be lowered (or raised) at run-time using that the

** max_page_count macro.

*/

//单个数据库文件的最大页数数

#ifndef SQLITE_MAX_PAGE_COUNT

# define SQLITE_MAX_PAGE_COUNT 1073741823

#endif

 

/*

** Maximum length (in bytes) of the pattern in a LIKE or GLOB

** operator.

*/

// LIKE or GLOB模式的最大长度(字节)

#ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH

# define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000

#endif

 

/*

** Maximum depth of recursion for triggers.

**

** A value of 1 means that a trigger program will not be able to itself

** fire any triggers. A value of 0 means that no trigger programs at all

** may be executed.

*/

//触发器程序的递归深度

#ifndef SQLITE_MAX_TRIGGER_DEPTH

# define SQLITE_MAX_TRIGGER_DEPTH 1000

#endif

//SQLITE限制参数定义完毕

/************** End of sqliteLimit.h *****************************************/

/************** Continuing where we left off in sqliteInt.h ******************/

//禁止Borland编译器的讨厌的警告

/* Disable nuisance warnings on Borland compilers */

#if defined(__BORLANDC__)

#pragma warn -rch /* unreachable code */

#pragma warn -ccc /* Condition is always true or false */

#pragma warn -aus /* Assigned value is never used */

#pragma warn -csu /* Comparing signed and unsigned */

#pragma warn -spa /* Suspicious pointer arithmetic */

#endif

//定义为GNU源码

/* Needed for various definitions... */

#ifndef _GNU_SOURCE

# define _GNU_SOURCE

#endif

 

/*

** Include standard header files as necessary

*/

//包含必要的头文件

#ifdef HAVE_STDINT_H

#include <stdint.h>

#endif

#ifdef HAVE_INTTYPES_H

#include <inttypes.h>

#endif

 

/*

** The number of samples of an index that SQLite takes in order to

** construct a histogram of the table content when running ANALYZE

** and with SQLITE_ENABLE_STAT2

*/

//索引样本数

#define SQLITE_INDEX_SAMPLES 10

 

/*

** The following macros are used to cast pointers to integers and

** integers to pointers.  The way you do this varies from one compiler

** to the next, so we have developed the following set of #if statements

** to generate appropriate macros for a wide range of compilers.

**

** The correct "ANSI" way to do this is to use the intptr_t type.

** Unfortunately, that typedef is not available on all compilers, or

** if it is available, it requires an #include of specific headers

** that very from one machine to the next.

**

** Ticket #3860:  The llvm-gcc-4.2 compiler from Apple chokes on

** the ((void*)&((char*)0)[X]) construct.  But MSVC chokes on ((void*)(X)).

** So we have to define the macros in different ways depending on the

** compiler.

*/

//下列宏完成指针转整数和整数转指针

#if defined(__PTRDIFF_TYPE__)  /* This case should work for GCC */

# define SQLITE_INT_TO_PTR(X)  ((void*)(__PTRDIFF_TYPE__)(X))

# define SQLITE_PTR_TO_INT(X)  ((int)(__PTRDIFF_TYPE__)(X))

#elif !defined(__GNUC__)       /* Works for compilers other than LLVM */

# define SQLITE_INT_TO_PTR(X)  ((void*)&((char*)0)[X])

# define SQLITE_PTR_TO_INT(X)  ((int)(((char*)X)-(char*)0))

#elif defined(HAVE_STDINT_H)   /* Use this case if we have ANSI headers */

# define SQLITE_INT_TO_PTR(X)  ((void*)(intptr_t)(X))

# define SQLITE_PTR_TO_INT(X)  ((int)(intptr_t)(X))

#else                          /* Generates a warning - but it always works */

# define SQLITE_INT_TO_PTR(X)  ((void*)(X))

# define SQLITE_PTR_TO_INT(X)  ((int)(X))

#endif

 

/*

** The SQLITE_THREADSAFE macro must be defined as either 0 or 1.

** Older versions of SQLite used an optional THREADSAFE macro.

** We support that for legacy

*/

// SQLITE_THREADSAFE线程安全宏被定义为01,

#if !defined(SQLITE_THREADSAFE)

#if defined(THREADSAFE)

# define SQLITE_THREADSAFE THREADSAFE

#else

# define SQLITE_THREADSAFE 1

#endif

#endif

 

/*

** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.

** It determines whether or not the features related to

** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can

** be overridden at runtime using the sqlite3_config() API.

*/

// SQLITE_DEFAULT_MEMSTATUS宏被定义为01,在运行时可使

//sqlite3_config() API修改该值

#if !defined(SQLITE_DEFAULT_MEMSTATUS)

# define SQLITE_DEFAULT_MEMSTATUS 1

#endif

分享到:
评论

相关推荐

    安卓Android源码——SqliteManager源码.zip

    本文将对Android SqliteManager的源码进行深入剖析,以揭示其核心机制。 首先,SQLiteManager主要负责创建、打开、关闭数据库,以及执行SQL语句等操作。源码中,我们可以看到SQLiteOpenHelper子类的实现,这是...

    SQLite3源程序分析

    本文将深入剖析SQLite3的源代码,并重点关注其核心组件及实现机制,旨在帮助读者更好地理解SQLite3的工作原理及其在实际开发中的应用。 #### 2. SQLite3程序结构概览 SQLite3的核心功能通过一系列紧密耦合的源代码...

    SQLite权威指南第二版

    9. **附录与源码分析**:随书源码提供了对SQLite源代码的深度剖析,有助于开发者深入了解其内部实现,并进行二次开发或定制。 通过阅读《SQLite权威指南》第二版,读者不仅可以掌握SQLite的日常使用,还能了解到更...

    Android SqliteManager 源码.zip

    本文将对Android SqliteManager的源码进行深度剖析,帮助开发者理解其内部机制,提升数据库管理能力。 首先,SqliteManager的核心功能是与SQLite数据库进行交互。在源码中,我们能看到它使用了`SQLiteDatabase`类...

    android联系人APP源码剖析

    首先,Android联系人APP源码剖析这一标题表明本文将重点讲解Android平台上联系人管理应用的源码,尤其是基于Android 2.3版本进行的分析。通过这种剖析,开发者可以更好地理解如何定制及使用源码,以构建或优化联系人...

    java源码剖析-FrackingData:面向FracFocus数据分析的存储库。SQL(例如SQLite,PostgreSQL,SQLSe

    【标题】"java源码剖析-FrackingData:面向FracFocus数据分析的存储库。SQL(例如SQLite,PostgreSQL,SQLSe" 这个标题表明我们正在探讨一个Java开发的开源项目,名为FrackingData,它是专门为处理FracFocus数据设计...

    teamtalk android客户端源码

    2. **WebSocket实现实时通信**:为了实现即时通讯,TeamTalk可能会利用WebSocket协议,提供双向通信通道,确保消息的实时推送。 3. **JSON解析**:数据在服务器与客户端间传递通常以JSON格式进行,因此源码中会包含...

    android launcher2源码

    《深入剖析Android Launcher2源码》 Android的Launcher2是系统桌面的核心组件,它负责管理应用程序的快捷方式、小部件以及主屏幕布局。对于想要深入理解Android系统运行机制的开发者而言,研究Launcher2的源码至关...

    notepad源码

    本文将深入剖析Notepad源码,揭示其背后的编程原理和技术细节。 一、数据库管理 Notepad的核心功能之一是存储和管理笔记,这涉及到Android中的SQLite数据库。源码中可以看到,Notepad使用SQLiteOpenHelper子类来...

    Android应用源码之Launcher2.zip

    《深入剖析Android应用源码:聚焦Launcher2》 在Android操作系统中,Launcher是用户与系统交互的首要界面,它负责展示应用图标、快捷方式以及主屏幕小部件等。本篇文章将深入探讨Android应用源码中的"Launcher2",...

    android4.4w.2-api20 官网源码

    《深入剖析Android 4.4W.2 (API 20) 源码》 Android 4.4W.2,代号KitKat-Watch,是针对Android Wear设备的一个重要版本,API级别为20。这个版本的发布,不仅在功能上进行了优化,也为开发者提供了更丰富的开发环境...

    Android源码——MyContacts通讯录源码.7z

    本篇将深入剖析Android源码中的MyContacts通讯录源码,通过分析其设计思路、实现机制以及关键组件,来探讨Android通讯录应用的核心技术。 首先,通讯录是Android系统中的基础服务之一,MyContacts则是Android提供的...

    简单的通讯录源码.zip

    本篇文章将对标题为“简单的通讯录源码.zip”的压缩包进行深入剖析,主要关注其在安卓平台上的实现,并讨论其中可能涉及的核心技术与功能实现。 首先,该源码的标签明确指出这是一个针对安卓平台的生活应用源码。这...

    android-4.0.3源码

    《深入剖析Android 4.0.3源码》 Android 4.0.3,代号Ice Cream Sandwich(冰淇淋三明治),是Android系统发展的一个重要里程碑,它为开发者提供了更多的功能和优化,提升了用户体验。这份源码是理解Android系统工作...

    Android源码在线词典源码.zip

    通过深入剖析这份源码,开发者可以学习到如何构建一个功能完备、用户体验良好的词典应用。 1. **项目结构**: - 项目通常由多个模块组成,包括主应用模块、词典数据模块、网络请求模块等。源码会展示如何划分模块...

    应用源码之Launcher2.zip

    《深入剖析Android源码:以Launcher2为例》 在Android操作系统中,Launcher是用户与系统交互的首要界面,它承载了应用图标、快捷方式、桌面小部件等元素,是整个系统的门面。本篇文章将围绕"应用源码之Launcher2....

    android桌面源码

    《深入剖析Android 4.0桌面(Launcher2)源码》 在Android系统中,桌面应用,也称为Launcher,是用户与系统交互的首要界面。本文将深入探讨Android 4.0(Ice Cream Sandwich,简称ICS)中的Launcher2源码,帮助...

    xUtils源码

    2. **DbUtils**:提供对SQLite数据库的便捷操作,包括CRUD(创建、读取、更新、删除)等操作。DbUtils的源码中,我们可以看到它使用了SqlBuilder来构建SQL语句,通过反射机制自动处理实体类与数据库表的映射,大大...

    android应用源码(精)新浪微博客户端源码.zip源码资源下载

    《深入剖析Android应用:基于新浪微博客户端源码》 在Android开发领域,研究知名应用的源码是提升技术能力的重要途径之一。本篇文章将基于“android应用源码(精)新浪微博客户端源码.zip”这一资源,深入探讨其中...

Global site tag (gtag.js) - Google Analytics