Index: src/db.c ================================================================== --- src/db.c +++ src/db.c @@ -332,10 +332,15 @@ */ int db_bind_str(Stmt *pStmt, const char *zParamName, Blob *pBlob){ return sqlite3_bind_text(pStmt->pStmt, paramIdx(pStmt, zParamName), blob_buffer(pBlob), blob_size(pBlob), SQLITE_STATIC); } + +/* Clear all bindings */ +int db_clear_bindings(Stmt *pStmt){ + return sqlite3_clear_bindings(pStmt->pStmt); +} /* ** Step the SQL statement. Return either SQLITE_ROW or an error code ** or SQLITE_OK if the statement finishes successfully. */ Index: src/manifest.c ================================================================== --- src/manifest.c +++ src/manifest.c @@ -1184,15 +1184,16 @@ } db_static_prepare(&s1, "INSERT INTO mlink(mid,pid,fid,fnid,pfnid,mperm)" "VALUES(:m,:p,:f,:n,:pfn,:mp)" ); + db_clear_bindings(&s1); db_bind_int(&s1, ":m", mid); - db_bind_int(&s1, ":p", pid); - db_bind_int(&s1, ":f", fid); + if( pid ) db_bind_int(&s1, ":p", pid); + if( fid ) db_bind_int(&s1, ":f", fid); db_bind_int(&s1, ":n", fnid); - db_bind_int(&s1, ":pfn", pfnid); + if( pfnid) db_bind_int(&s1, ":pfn", pfnid); db_bind_int(&s1, ":mp", mperm); db_exec(&s1); if( pid && fid ){ content_deltify(pid, fid, 0); }