Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Enable sqlite queries profiling.
Vsevolod Stakhov committed 11 years ago
commit 10d0005da245081778abf9d5fcc324ba36ba0b70
parent 9e0696f
2 files changed +24 -1
modified libpkg/pkg_config.c
@@ -299,7 +299,13 @@ static struct config_entry c[] = {
		"LOCK_RETRIES",
		"5",
		"Retries performed to obtain a lock"
-
	}
+
	},
+
	{
+
		PKG_BOOL,
+
		"SQLITE_PROFILE",
+
		"NO",
+
		"Profile sqlite queries"
+
	},
};

static bool parsed = false;
modified libpkg/pkgdb.c
@@ -1071,6 +1071,16 @@ pkgdb_access(unsigned mode, unsigned database)
	return (retval);
}

+
static void
+
pkgdb_profile_callback(void *ud, const char *req, sqlite3_uint64 nsec)
+
{
+
	/* According to sqlite3 documentation, nsec has milliseconds accuracy */
+
	nsec /= 1000000LLU;
+
	if (nsec > 0)
+
		pkg_debug(1, "Sqlite request %s was executed in %lu milliseconds",
+
			req, (unsigned long)nsec);
+
}
+

int
pkgdb_open(struct pkgdb **db_p, pkgdb_t type)
{
@@ -1083,6 +1093,7 @@ pkgdb_open_all(struct pkgdb **db_p, pkgdb_t type, const char *reponame)
	struct pkgdb	*db = NULL;
	struct statfs	 stfs;
	bool		 reopen = false;
+
	bool		 profile = false;
	char		 localpath[MAXPATHLEN];
	const char	*dbdir;
	bool		 create = false;
@@ -1197,6 +1208,12 @@ pkgdb_open_all(struct pkgdb **db_p, pkgdb_t type, const char *reponame)
		}
	}

+
	profile = pkg_object_bool(pkg_config_get("SQLITE_PROFILE"));
+
	if (profile) {
+
		pkg_debug(1, "pkgdb profiling is enabled");
+
		sqlite3_profile(db->sqlite, pkgdb_profile_callback, NULL);
+
	}
+

	*db_p = db;
	return (EPKG_OK);
}