Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Report an error if the repository schema version does not match what the fossil executable expects. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
c0c3d92340da4aa70b0853707e88490d |
| User & Date: | drh 2010-11-26 18:37:07.000 |
References
|
2011-03-25
| ||
| 01:06 | • Fixed ticket [46f90ea2c1]: Field not found error : don't forget to rebuild repos after upgrade! plus 2 other changes ... (artifact: ee1775072a user: joerg) | |
Context
|
2010-11-26
| ||
| 18:43 | Fix and out-of-order variable definition in the "sqlite3" command. ... (check-in: f105bc17a0 user: drh tags: trunk) | |
| 18:37 | Report an error if the repository schema version does not match what the fossil executable expects. ... (check-in: c0c3d92340 user: drh tags: trunk) | |
| 17:41 | Update the built-in SQLite to the latest 3.7.4 beta. ... (check-in: 6c73321418 user: drh tags: trunk) | |
Changes
Changes to src/branch.c.
| ︙ | ︙ | |||
46 47 48 49 50 51 52 |
zColor = find_option("bgcolor","c",1);
zDateOvrd = find_option("date-override",0,1);
zUserOvrd = find_option("user-override",0,1);
verify_all_options();
if( g.argc<5 ){
usage("new BRANCH-NAME CHECK-IN ?-bgcolor COLOR?");
}
| | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
zColor = find_option("bgcolor","c",1);
zDateOvrd = find_option("date-override",0,1);
zUserOvrd = find_option("user-override",0,1);
verify_all_options();
if( g.argc<5 ){
usage("new BRANCH-NAME CHECK-IN ?-bgcolor COLOR?");
}
db_find_and_open_repository(0, 0);
noSign = db_get_int("omitsign", 0)|noSign;
/* fossil branch new name */
zBranch = g.argv[3];
if( zBranch==0 || zBranch[0]==0 ){
fossil_panic("branch name cannot be empty");
}
|
| ︙ | ︙ | |||
186 187 188 189 190 191 192 |
**
** List all branches
**
*/
void branch_cmd(void){
int n;
const char *zCmd = "list";
| | | 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
**
** List all branches
**
*/
void branch_cmd(void){
int n;
const char *zCmd = "list";
db_find_and_open_repository(0, 0);
if( g.argc<2 ){
usage("new|list ...");
}
if( g.argc>=3 ) zCmd = g.argv[2];
n = strlen(zCmd);
if( strncmp(zCmd,"new",n)==0 ){
branch_new();
|
| ︙ | ︙ |
Changes to src/configure.c.
| ︙ | ︙ | |||
413 414 415 416 417 418 419 |
*/
void configuration_cmd(void){
int n;
const char *zMethod;
if( g.argc<3 ){
usage("export|import|merge|pull|reset ...");
}
| | | 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 |
*/
void configuration_cmd(void){
int n;
const char *zMethod;
if( g.argc<3 ){
usage("export|import|merge|pull|reset ...");
}
db_find_and_open_repository(0, 0);
zMethod = g.argv[2];
n = strlen(zMethod);
if( strncmp(zMethod, "export", n)==0 ){
int mask;
if( g.argc!=5 ){
usage("export AREA FILENAME");
}
|
| ︙ | ︙ |
Changes to src/content.c.
| ︙ | ︙ | |||
295 296 297 298 299 300 301 |
**
** -R|--repository FILE Extract artifacts from repository FILE
*/
void artifact_cmd(void){
int rid;
Blob content;
const char *zFile;
| | | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 |
**
** -R|--repository FILE Extract artifacts from repository FILE
*/
void artifact_cmd(void){
int rid;
Blob content;
const char *zFile;
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
if( g.argc!=4 && g.argc!=3 ) usage("ARTIFACT-ID ?FILENAME? ?OPTIONS?");
zFile = g.argc==4 ? g.argv[3] : "-";
rid = name_to_rid(g.argv[2]);
content_get(rid, &content);
blob_write_to_file(&content, zFile);
}
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
610 611 612 613 614 615 616 | /* ** zDbName is the name of a database file. If no other database ** file is open, then open this one. If another database file is ** already open, then attach zDbName using the name zLabel. */ | | | 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 |
/*
** zDbName is the name of a database file. If no other database
** file is open, then open this one. If another database file is
** already open, then attach zDbName using the name zLabel.
*/
static void db_open_or_attach(const char *zDbName, const char *zLabel){
if( !g.db ){
g.db = openDatabase(zDbName);
g.zRepoDb = "main";
db_connection_init();
}else{
#if defined(_WIN32)
zDbName = sqlite3_win32_mbcs_to_utf8(zDbName);
|
| ︙ | ︙ | |||
824 825 826 827 828 829 830 831 832 833 834 835 836 837 |
}
}
db_open_or_attach(zDbName, "repository");
g.repositoryOpen = 1;
g.zRepositoryName = mprintf("%s", zDbName);
}
/*
** Try to find the repository and open it. Use the -R or --repository
** option to locate the repository. If no such option is available, then
** use the repository of the open checkout if there is one.
**
** Error out if the repository cannot be opened.
*/
| > > > > > > > > | > > > > | > > > > > > > > > > > > > > > | 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 |
}
}
db_open_or_attach(zDbName, "repository");
g.repositoryOpen = 1;
g.zRepositoryName = mprintf("%s", zDbName);
}
/*
** Flags for the db_find_and_open_repository() function.
*/
#if INTERFACE
#define OPEN_OK_NOT_FOUND 0x001 /* Do not error out if not found */
#define OPEN_ANY_SCHEMA 0x002 /* Do not error if schema is wrong */
#endif
/*
** Try to find the repository and open it. Use the -R or --repository
** option to locate the repository. If no such option is available, then
** use the repository of the open checkout if there is one.
**
** Error out if the repository cannot be opened.
*/
void db_find_and_open_repository(int bFlags, const char *zRepoFilename){
const char *zRep = find_option("repository", "R", 1);
if( zRep==0 ){
zRep = zRepoFilename;
}
if( zRep==0 ){
if( db_open_local()==0 ){
goto rep_not_found;
}
zRep = db_lget("repository", 0);
if( zRep==0 ){
goto rep_not_found;
}
}
db_open_repository(zRep);
if( g.repositoryOpen ){
if( (bFlags & OPEN_ANY_SCHEMA)==0 ) db_verify_schema();
return;
}
rep_not_found:
if( (bFlags & OPEN_OK_NOT_FOUND)==0 ){
fossil_fatal("use --repository or -R to specify the repository database");
}
}
/*
** Verify that the repository schema is correct. If it is not correct,
** issue a fatal error and die.
*/
void db_verify_schema(void){
if( db_exists("SELECT 1 FROM config"
" WHERE name='aux-schema'"
" AND value<>'%s'", AUX_SCHEMA) ){
fossil_warning("incorrect repository schema version");
fossil_warning("you have version \"%s\" but you need version \"%s\"",
db_get("aux-schema",0), AUX_SCHEMA);
fossil_fatal("run \"fossil rebuild\" to fix this problem");
}
}
/*
** COMMAND: test-move-repository
**
** Usage: %fossil test-move-repository PATHNAME
**
** Change the location of the repository database on a local check-out.
|
| ︙ | ︙ | |||
890 891 892 893 894 895 896 897 898 899 900 901 902 903 |
** Open the local database. If unable, exit with an error.
*/
void db_must_be_within_tree(void){
if( db_open_local()==0 ){
fossil_fatal("not within an open checkout");
}
db_open_repository(0);
}
/*
** Close the database connection.
*/
void db_close(void){
sqlite3_stmt *pStmt;
| > | 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 |
** Open the local database. If unable, exit with an error.
*/
void db_must_be_within_tree(void){
if( db_open_local()==0 ){
fossil_fatal("not within an open checkout");
}
db_open_repository(0);
db_verify_schema();
}
/*
** Close the database connection.
*/
void db_close(void){
sqlite3_stmt *pStmt;
|
| ︙ | ︙ | |||
1623 1624 1625 1626 1627 1628 1629 |
** and "firefox" on Unix.
*/
void setting_cmd(void){
int i;
int globalFlag = find_option("global","g",0)!=0;
int unsetFlag = g.argv[1][0]=='u';
db_open_config(1);
| | | 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 |
** and "firefox" on Unix.
*/
void setting_cmd(void){
int i;
int globalFlag = find_option("global","g",0)!=0;
int unsetFlag = g.argv[1][0]=='u';
db_open_config(1);
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
if( !g.repositoryOpen ){
globalFlag = 1;
}
if( unsetFlag && g.argc!=3 ){
usage("PROPERTY ?-global?");
}
if( g.argc==2 ){
|
| ︙ | ︙ |
Changes to src/diffcmd.c.
| ︙ | ︙ | |||
440 441 442 443 444 445 446 |
diff_one_against_disk(zFrom, zDiffCmd, 0);
}else{
diff_all_against_disk(zFrom, zDiffCmd, diffFlags);
}
}else if( zFrom==0 ){
fossil_fatal("must use --from if --to is present");
}else{
| | | 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
diff_one_against_disk(zFrom, zDiffCmd, 0);
}else{
diff_all_against_disk(zFrom, zDiffCmd, diffFlags);
}
}else if( zFrom==0 ){
fossil_fatal("must use --from if --to is present");
}else{
db_find_and_open_repository(0, 0);
verify_all_options();
if( !isInternDiff ){
zDiffCmd = db_get(isGDiff ? "gdiff-command" : "diff-command", 0);
}
if( g.argc==3 ){
diff_one_two_versions(zFrom, zTo, zDiffCmd, 0);
}else{
|
| ︙ | ︙ |
Changes to src/export.c.
| ︙ | ︙ | |||
98 99 100 101 102 103 104 |
void export_cmd(void){
Stmt q;
int i;
Bag blobs, vers;
bag_init(&blobs);
bag_init(&vers);
| | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
void export_cmd(void){
Stmt q;
int i;
Bag blobs, vers;
bag_init(&blobs);
bag_init(&vers);
db_find_and_open_repository(0, 0);
/* Step 1: Generate "blob" records for every artifact that is part
** of a check-in
*/
fossil_binary_mode(stdout);
db_prepare(&q, "SELECT DISTINCT fid FROM mlink WHERE fid>0");
while( db_step(&q)==SQLITE_ROW ){
|
| ︙ | ︙ |
Changes to src/rebuild.c.
| ︙ | ︙ | |||
358 359 360 361 362 363 364 |
omitVerify = find_option("noverify",0,0)!=0;
forceFlag = find_option("force","f",0)!=0;
randomizeFlag = find_option("randomize", 0, 0)!=0;
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
| | > > > > > | | | 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
omitVerify = find_option("noverify",0,0)!=0;
forceFlag = find_option("force","f",0)!=0;
randomizeFlag = find_option("randomize", 0, 0)!=0;
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
db_close();
db_open_repository(g.zRepositoryName);
}
db_begin_transaction();
ttyOutput = 1;
errCnt = rebuild_db(randomizeFlag, 1);
db_multi_exec(
"REPLACE INTO config(name,value) VALUES('content-schema','%s');"
"REPLACE INTO config(name,value) VALUES('aux-schema','%s');",
CONTENT_SCHEMA, AUX_SCHEMA
);
if( errCnt && !forceFlag ){
printf("%d errors. Rolling back changes. Use --force to force a commit.\n",
errCnt);
db_end_transaction(1);
}else{
if( omitVerify ) verify_cancel();
db_end_transaction(0);
}
}
/*
** COMMAND: test-detach ?REPOSITORY?
**
** Change the project-code and make other changes in order to prevent
** the repository from ever again pushing or pulling to other
** repositories. Used to create a "test" repository for development
** testing by cloning a working project repository.
*/
void test_detach_cmd(void){
db_find_and_open_repository(0, g.argv[2]);
db_begin_transaction();
db_multi_exec(
"DELETE FROM config WHERE name='last-sync-url';"
"UPDATE config SET value=lower(hex(randomblob(20)))"
" WHERE name='project-code';"
"UPDATE config SET value='detached-' || value"
" WHERE name='project-name' AND value NOT GLOB 'detached-*';"
|
| ︙ | ︙ | |||
409 410 411 412 413 414 415 |
** Create clusters for all unclustered artifacts if the number of unclustered
** artifacts exceeds the current clustering threshold.
*/
void test_createcluster_cmd(void){
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
| | | 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
** Create clusters for all unclustered artifacts if the number of unclustered
** artifacts exceeds the current clustering threshold.
*/
void test_createcluster_cmd(void){
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(0, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
db_close();
db_open_repository(g.zRepositoryName);
}
db_begin_transaction();
|
| ︙ | ︙ | |||
636 637 638 639 640 641 642 |
#endif
if( prefixLength ){
zFNameFormat = mprintf("%s/%%.%ds/%%s",zDestDir,prefixLength);
}else{
zFNameFormat = mprintf("%s/%%s",zDestDir);
}
/* open repository and open query for all artifacts */
| | | 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 |
#endif
if( prefixLength ){
zFNameFormat = mprintf("%s/%%.%ds/%%s",zDestDir,prefixLength);
}else{
zFNameFormat = mprintf("%s/%%s",zDestDir);
}
/* open repository and open query for all artifacts */
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
bag_init(&bagDone);
ttyOutput = 1;
processCnt = 0;
if (!g.fQuiet) {
printf("0 (0%%)...\r");
fflush(stdout);
}
|
| ︙ | ︙ |
Changes to src/schema.c.
| ︙ | ︙ | |||
38 39 40 41 42 43 44 | ** The content tables have a content version number which rarely ** changes. The aux tables have an arbitrary version number (typically ** a date) which can change frequently. When the content schema changes, ** we have to execute special procedures to update the schema. When ** the aux schema changes, all we need to do is rebuild the database. */ #define CONTENT_SCHEMA "1" | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | ** The content tables have a content version number which rarely ** changes. The aux tables have an arbitrary version number (typically ** a date) which can change frequently. When the content schema changes, ** we have to execute special procedures to update the schema. When ** the aux schema changes, all we need to do is rebuild the database. */ #define CONTENT_SCHEMA "1" #define AUX_SCHEMA "2010-11-24" #endif /* INTERFACE */ /* ** The schema for a repository database. ** |
| ︙ | ︙ |
Changes to src/sqlcmd.c.
| ︙ | ︙ | |||
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
**
** WARNING: Careless use of this command can corrupt a Fossil repository
** in ways that are unrecoverable. Be sure you know what you are doing before
** running any SQL commands that modifies the repository database.
*/
void sqlite3_cmd(void){
extern int sqlite3_shell(int, char**);
sqlite3_shell(g.argc-1, g.argv+1);
}
/*
** This routine is called by the patched sqlite3 command-line shell in order
** to load the name and database connection for the open Fossil database.
*/
void fossil_open(const char **pzRepoName){
| > > > < | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
**
** WARNING: Careless use of this command can corrupt a Fossil repository
** in ways that are unrecoverable. Be sure you know what you are doing before
** running any SQL commands that modifies the repository database.
*/
void sqlite3_cmd(void){
extern int sqlite3_shell(int, char**);
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
db_close();
sqlite3_shutdown();
sqlite3_shell(g.argc-1, g.argv+1);
}
/*
** This routine is called by the patched sqlite3 command-line shell in order
** to load the name and database connection for the open Fossil database.
*/
void fossil_open(const char **pzRepoName){
sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit);
*pzRepoName = g.zRepositoryName;
}
|
Changes to src/sync.c.
| ︙ | ︙ | |||
94 95 96 97 98 99 100 |
static int process_sync_args(void){
const char *zUrl = 0;
const char *zPw = 0;
int configSync = 0;
int urlOptional = find_option("autourl",0,0)!=0;
g.dontKeepUrl = find_option("once",0,0)!=0;
url_proxy_options();
| | | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
static int process_sync_args(void){
const char *zUrl = 0;
const char *zPw = 0;
int configSync = 0;
int urlOptional = find_option("autourl",0,0)!=0;
g.dontKeepUrl = find_option("once",0,0)!=0;
url_proxy_options();
db_find_and_open_repository(0, 0);
db_open_config(0);
if( g.argc==2 ){
zUrl = db_get("last-sync-url", 0);
zPw = unobscure(db_get("last-sync-pw", 0));
if( db_get_boolean("auto-sync",1) ) configSync = CONFIGSET_SHUN;
}else if( g.argc==3 ){
zUrl = g.argv[2];
|
| ︙ | ︙ | |||
222 223 224 225 226 227 228 |
** The default remote-url is used by auto-syncing and by "sync", "push",
** "pull" that omit the server URL.
**
** See also: clone, push, pull, sync
*/
void remote_url_cmd(void){
char *zUrl;
| | | 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
** The default remote-url is used by auto-syncing and by "sync", "push",
** "pull" that omit the server URL.
**
** See also: clone, push, pull, sync
*/
void remote_url_cmd(void){
char *zUrl;
db_find_and_open_repository(0, 0);
if( g.argc!=2 && g.argc!=3 ){
usage("remote-url ?URL|off?");
}
if( g.argc==3 ){
if( strcmp(g.argv[2],"off")==0 ){
db_unset("last-sync-url", 0);
db_unset("last-sync-pw", 0);
|
| ︙ | ︙ |
Changes to src/tag.c.
| ︙ | ︙ | |||
366 367 368 369 370 371 372 |
*/
void tag_cmd(void){
int n;
int fRaw = find_option("raw","",0)!=0;
int fPropagate = find_option("propagate","",0)!=0;
const char *zPrefix = fRaw ? "" : "sym-";
| | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 |
*/
void tag_cmd(void){
int n;
int fRaw = find_option("raw","",0)!=0;
int fPropagate = find_option("propagate","",0)!=0;
const char *zPrefix = fRaw ? "" : "sym-";
db_find_and_open_repository(0, 0);
if( g.argc<3 ){
goto tag_cmd_usage;
}
n = strlen(g.argv[2]);
if( n==0 ){
goto tag_cmd_usage;
}
|
| ︙ | ︙ |
Changes to src/timeline.c.
| ︙ | ︙ | |||
1129 1130 1131 1132 1133 1134 1135 | const char *zType; char *zOrigin; char *zDate; Blob sql; int objid = 0; Blob uuid; int mode = 0 ; /* 0:none 1: before 2:after 3:children 4:parents */ | | | 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 |
const char *zType;
char *zOrigin;
char *zDate;
Blob sql;
int objid = 0;
Blob uuid;
int mode = 0 ; /* 0:none 1: before 2:after 3:children 4:parents */
db_find_and_open_repository(0, 0);
zCount = find_option("count","n",1);
zType = find_option("type","t",1);
if( zCount ){
n = atoi(zCount);
}else{
n = 20;
}
|
| ︙ | ︙ |
Changes to src/tkt.c.
| ︙ | ︙ | |||
901 902 903 904 905 906 907 |
** The values in set|add are not validated against the definitions
** given in "Ticket Common Script".
*/
void ticket_cmd(void){
int n;
/* do some ints, we want to be inside a checkout */
| | | 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 |
** The values in set|add are not validated against the definitions
** given in "Ticket Common Script".
*/
void ticket_cmd(void){
int n;
/* do some ints, we want to be inside a checkout */
db_find_and_open_repository(0, 0);
user_select();
/*
** Check that the user exists.
*/
if( !db_exists("SELECT 1 FROM user WHERE login=%Q", g.zLogin) ){
fossil_fatal("no such user: %s", g.zLogin);
}
|
| ︙ | ︙ |
Changes to src/user.c.
| ︙ | ︙ | |||
172 173 174 175 176 177 178 |
**
** %fossil user password USERNAME ?PASSWORD?
**
** Change the web access password for a user.
*/
void user_cmd(void){
int n;
| | | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
**
** %fossil user password USERNAME ?PASSWORD?
**
** Change the web access password for a user.
*/
void user_cmd(void){
int n;
db_find_and_open_repository(0, 0);
if( g.argc<3 ){
usage("capabilities|default|list|new|password ...");
}
n = strlen(g.argv[2]);
if( n>=2 && strncmp(g.argv[2],"new",n)==0 ){
Blob passwd, login, contact;
char *zPw;
|
| ︙ | ︙ |
Changes to src/wiki.c.
| ︙ | ︙ | |||
878 879 880 881 882 883 884 |
** %fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName
**
** Diffs the local copy of a page with a given version (defaulting
** to the head version).
*/
void wiki_cmd(void){
int n;
| | | 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 |
** %fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName
**
** Diffs the local copy of a page with a given version (defaulting
** to the head version).
*/
void wiki_cmd(void){
int n;
db_find_and_open_repository(0, 0);
if( g.argc<3 ){
goto wiki_cmd_usage;
}
n = strlen(g.argv[2]);
if( n==0 ){
goto wiki_cmd_usage;
}
|
| ︙ | ︙ |
Changes to src/zip.c.
| ︙ | ︙ | |||
386 387 388 389 390 391 392 |
** the artifact ID of the check-in.
*/
void baseline_zip_cmd(void){
int rid;
Blob zip;
const char *zName;
zName = find_option("name", 0, 1);
| | | 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 |
** the artifact ID of the check-in.
*/
void baseline_zip_cmd(void){
int rid;
Blob zip;
const char *zName;
zName = find_option("name", 0, 1);
db_find_and_open_repository(0, 0);
if( g.argc!=4 ){
usage("VERSION OUTPUTFILE");
}
rid = name_to_rid(g.argv[2]);
if( zName==0 ){
zName = db_text("default-name",
"SELECT replace(%Q,' ','_') "
|
| ︙ | ︙ |