@@ -740,17 +740,25 @@
740 740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
741 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zDbName is the name of a database file. If no other database
742 742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file is open, then open this one. If another database file is
743 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** already open, then attach zDbName using the name zLabel.
744 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void db_open_or_attach(const char *zDbName, const char *zLabel){
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void db_open_or_attach(
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDbName,
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zLabel,
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pWasAttached
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
746 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.db ){
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( g.zMainDbType==0 );
747 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.db = openDatabase(zDbName);
748 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zMainDbType = zLabel;
749 754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_connection_init();
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if ( pWasAttached ) *pWasAttached = 0;
750 756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( g.zMainDbType!=0 );
751 758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_attach(zDbName, zLabel);
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if ( pWasAttached ) *pWasAttached = 1;
752 760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
753 761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
754 762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
755 763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
756 764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Open the user database in "~/.fossil". Create the database anew if
@@ -806,16 +814,18 @@
806 814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDbName = mprintf("%s/.fossil", zHome);
807 815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
808 816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( file_size(zDbName)<1024*3 ){
809 817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_init_database(zDbName, zConfigSchema, (char*)0);
810 818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.useAttach = useAttach;
812 819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( useAttach ){
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_open_or_attach(zDbName, "configdb");
820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_or_attach(zDbName, "configdb", &g.useAttach);
814 821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.dbConfig = 0;
822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zConfigDbType = 0;
815 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.useAttach = 0;
816 825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.dbConfig = openDatabase(zDbName);
826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zConfigDbType = "configdb";
817 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
818 828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.configOpen = 1;
819 829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zDbName);
820 830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
821 831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -850,11 +860,11 @@
850 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zVFileDef;
851 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
852 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( file_access(zDbName, F_OK) ) return 0;
853 863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lsize = file_size(zDbName);
854 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( lsize%1024!=0 || lsize<4096 ) return 0;
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_open_or_attach(zDbName, "localdb");
865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_or_attach(zDbName, "localdb", 0);
856 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zVFileDef = db_text(0, "SELECT sql FROM %s.sqlite_master"
857 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE name=='vfile'", db_name("localdb"));
858 868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
859 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the "isexe" column is missing from the vfile table, then
860 870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** add it now. This code added on 2010-03-06. After all users have
@@ -986,11 +996,11 @@
986 996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.json.resultCode = FSL_JSON_E_DB_NOT_VALID;
987 997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
988 998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("not a valid repository: %s", zDbName);
989 999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
990 1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_open_or_attach(zDbName, "repository");
1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_or_attach(zDbName, "repository", 0);
992 1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.repositoryOpen = 1;
993 1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zRepositoryName = mprintf("%s", zDbName);
994 1004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Cache "allow-symlinks" option, because we'll need it on every stat call */
995 1005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.allowSymlinks = db_get_boolean("allow-symlinks", 0);
996 1006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1109,11 +1119,11 @@
1109 1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_canonical_name(g.argv[2], &repo, 0);
1110 1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zRepo = blob_str(&repo);
1111 1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( file_access(zRepo, 0) ){
1112 1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("no such file: %s", zRepo);
1113 1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_open_or_attach(zRepo, "test_repo");
1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_or_attach(zRepo, "test_repo", 0);
1115 1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_lset("repository", blob_str(&repo));
1116 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_close(1);
1117 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1118 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1119 1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1177,13 +1187,15 @@
1177 1187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.localOpen = 0;
1178 1188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.configOpen = 0;
1179 1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_wal_checkpoint(g.db, 0);
1180 1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_close(g.db);
1181 1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.db = 0;
1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zMainDbType = 0;
1182 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.dbConfig ){
1183 1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_close(g.dbConfig);
1184 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.dbConfig = 0;
1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zConfigDbType = 0;
1185 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1186 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1187 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1188 1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1189 1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -1630,19 +1642,32 @@
1630 1642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1631 1643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Swap the g.db and g.dbConfig connections so that the various db_* routines
1632 1644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** work on the ~/.fossil database instead of on the repository database.
1633 1645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Be sure to swap them back after doing the operation.
1634 1646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If g.useAttach that means the ~/.fossil database was opened with
1636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the useAttach flag set to 1. In that case no connection swap is required
1637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** so this routine is a no-op.
1647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the ~/.fossil database has already been opened as the main database or
1648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is attached to the main database, no connection swaps are required so this
1649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine is a no-op.
1638 1650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1639 1651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void db_swap_connections(void){
1640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !g.useAttach ){
1652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When swapping the main database connection with the config database
1654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** connection, the config database connection must be open (not simply
1655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** attached); otherwise, the swap would end up leaving the main database
1656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** connection invalid, defeating the very purpose of this routine. This
1657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same constraint also holds true when restoring the previously swapped
1658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database connection; otherwise, it means that no swap was performed
1659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** because the main database connection was already pointing to the config
1660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database.
1661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.dbConfig ){
1641 1663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *dbTemp = g.db;
1664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTempDbType = g.zMainDbType;
1642 1665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.db = g.dbConfig;
1666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zMainDbType = g.zConfigDbType;
1643 1667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.dbConfig = dbTemp;
1668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zConfigDbType = zTempDbType;
1644 1669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1645 1670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1646 1671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1647 1672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1648 1673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Logic for reading potentially versioned settings from
1649 1674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!