source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: When finding a .so link after the page was already processed, do
@ 2014-12-04 21:48 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2014-12-04 21:48 UTC (permalink / raw)
  To: source

Log Message:
-----------
When finding a .so link after the page was already processed,
do not clobber the existing names flags; 
instead, OR the additional flags into them.

Modified Files:
--------------
    mdocml:
        mandocdb.c

Revision Data
-------------
Index: mandocdb.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandocdb.c,v
retrieving revision 1.174
retrieving revision 1.175
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.174 -r1.175
--- mandocdb.c
+++ mandocdb.c
@@ -125,6 +125,7 @@ enum	stmt {
 	STMT_INSERT_PAGE,	/* insert mpage */
 	STMT_INSERT_LINK,	/* insert mlink */
 	STMT_INSERT_NAME,	/* insert name */
+	STMT_SELECT_NAME,	/* retrieve existing name flags */
 	STMT_INSERT_KEY,	/* insert parsed key */
 	STMT__MAX
 };
@@ -1789,7 +1790,7 @@ putkeys(const struct mpage *mpage,
 			name_mask &= ~NAME_FIRST;
 		if (debug > 1)
 			say(mpage->mlinks->file,
-			    "Adding name %*s", sz, cp);
+			    "Adding name %*s, bits=%d", sz, cp, v);
 	} else {
 		htab = &strings;
 		if (debug > 1)
@@ -2006,12 +2007,21 @@ dbadd_mlink(const struct mlink *mlink)
 static void
 dbadd_mlink_name(const struct mlink *mlink)
 {
+	uint64_t	 bits;
 	size_t		 i;
 
 	dbadd_mlink(mlink);
 
 	i = 1;
-	SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, NAME_FILE & NAME_MASK);
+	SQL_BIND_INT64(stmts[STMT_SELECT_NAME], i, mlink->mpage->pageid);
+	bits = NAME_FILE & NAME_MASK;
+	if (sqlite3_step(stmts[STMT_SELECT_NAME]) == SQLITE_ROW) {
+		bits |= sqlite3_column_int64(stmts[STMT_SELECT_NAME], 0);
+		sqlite3_reset(stmts[STMT_SELECT_NAME]);
+	}
+
+	i = 1;
+	SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, bits);
 	SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, mlink->name);
 	SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mlink->mpage->pageid);
 	SQL_STEP(stmts[STMT_INSERT_NAME]);
@@ -2324,7 +2334,8 @@ create_tables:
 	      " \"bits\" INTEGER NOT NULL,\n"
 	      " \"name\" TEXT NOT NULL,\n"
 	      " \"pageid\" INTEGER NOT NULL REFERENCES mpages(pageid) "
-		"ON DELETE CASCADE\n"
+		"ON DELETE CASCADE,\n"
+	      " UNIQUE (\"name\", \"pageid\") ON CONFLICT REPLACE\n"
 	      ");\n"
 	      "\n"
 	      "CREATE TABLE \"keys\" (\n"
@@ -2362,6 +2373,8 @@ prepare_statements:
 	sql = "INSERT INTO mlinks "
 		"(sec,arch,name,pageid) VALUES (?,?,?,?)";
 	sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_LINK], NULL);
+	sql = "SELECT bits FROM names where pageid = ?";
+	sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_SELECT_NAME], NULL);
 	sql = "INSERT INTO names "
 		"(bits,name,pageid) VALUES (?,?,?)";
 	sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_NAME], NULL);
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2014-12-04 21:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-04 21:48 mdocml: When finding a .so link after the page was already processed, do schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).