//backup 备份 namespace sqlite; if( ! ..___sqlite_dll__ ) error("必须先导入sqlite才能导入sqlite.backup",2); var dll = ..___sqlite_dll__; class backup{ ctor(src,dst,srcName,dstName){ if( type(dst) == type.string ) { var err; dst,err = ..sqlite(dst) if(!dst) return null,err; this.freeDstDb = dst; }; if( type(src) == type.string ) { var err; src,err = ..sqlite(src) if(!src) return null,err; this.freeSrcDb = src; }; if(!src[["db"]]) error("源数据库错误",2); if(!dst[["db"]]) error("目的数据库错误",2); this.handle = dll.sqlite3_backup_init(dst.db,dstName:"main",src.db,srcName:"main"); if(!this.handle ){ var msg,err = ..sqlite.lasterr(dst.db); if(this.freeDstDb)this.freeDstDb.close(); if(this.freeSrcDb)this.freeSrcDb.close(); return null,msg,err; } ..table.gc(this,"finish"); }; step = function(pages){ if(pages===null) pages = -1; var err = dll.sqlite3_backup_step(this.handle,pages); if( err ) { if( err == ..sqlite.DONE ) this.finish(); else ..sqlite.checkResult(err); } return err; }; remaining = function(){ return dll.sqlite3_backup_remaining(this.handle); }; count = function(){ return dll.sqlite3_backup_pagecount(this.handle); }; eachStep = function(n){ if(n===null) n = 1; var count = this.count(); return function(){ if( 0 == this.step(n) ){ return this.remaining(),count; }; } } finish = function(){ if(this.handle){ var err = dll.sqlite3_backup_finish(this.handle,pages); if( err ) ..sqlite.checkResult(err); if(this.freeDstDb)this.freeDstDb.close(); if(this.freeSrcDb)this.freeSrcDb.close(); this.handle = null; return err; } } } /**intellisense() sqlite.backup( = 创建数据库备份对象\n因为sqlite可以有不同版本的替换实现,\n所以请在导入sqlite.backup以前必须先导入sqlite支持库, sqlite.backup(.(src,dst,srcName,dstName) = 创建数据库备份对象\nsrc指定源数据库,可以是一个sqlite数据库对象,也可以指定要打开的数据库路径\ndst指定输出数据库,可以是一个sqlite数据库对象,也可以指定要打开的数据库路径\nsrcName为源数据库名,dstName为目的数据库名\n数据库名字一般不用指定,默认为"main",也就是主数据库 sqlite.backup() = !sqlit_backup. end intellisense**/ /**intellisense(!sqlit_backup) step() = 执行备份操作\n可选在参数中指定页数,\n指定为负数或者不指定则默认备份所有数据\n返回成功返回0,备份完成返回101,也就是sqlite.DONE\n其他数据库错误会抛出异常\n在备份完成后自动调用finish函数释放资源 eachStep(1) = @for remaining,count in ??.eachStep(1) { __/*用于for in语句中执行备份操作的迭代器\n参数指定每次迭代备份的页数,不指定时默认为1\n迭代变量remaining为剩余的页数,count为总页数\n备份完成退出循环并调用finish函数释放资源\n其他数据库错误会抛出异常*/ } remaining() = 当前剩余的页数 count() = 需要备份的总页数 finish() = 释放备份对象 end intellisense**/