From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 2D2486DE035A for ; Sun, 29 Jan 2017 02:15:02 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.084 X-Spam-Level: X-Spam-Status: No, score=0.084 tagged_above=-999 required=5 tests=[AWL=0.104, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wYLA6-QBs8ye for ; Sun, 29 Jan 2017 02:15:00 -0800 (PST) Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by arlo.cworth.org (Postfix) with ESMTPS id 581AF6DE0319 for ; Sun, 29 Jan 2017 02:15:00 -0800 (PST) Received: by mail-lf0-f67.google.com with SMTP id q89so29183437lfi.1 for ; Sun, 29 Jan 2017 02:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nikula-org.20150623.gappssmtp.com; s=20150623; h=from:to:subject:in-reply-to:references:date:message-id:mime-version; bh=69GjGteqy8ADq0GeB9Bh6sCPuBLowNCDAcYPFhtlUWU=; b=Kb8dkhdfX5Dc8r+DJ0geJNaRTmlLThcQBjrkfUpHhH8JqI1J7iKS7KA82/TmUVOrff i+aeadHXwhu/E6GgTZdE60/K7k7ad4D+EMEbTWNUT3CEYlVOTSWc7Qm6kP/2KMezo3tI mya5MQ+eYYx/mqzIJ9FntGCf2Nz0gCzh6eSRAU05r1tS0B7wYeCW5lia99yR/KvAMrA+ m8pbQSPWbfAQ9g/g4k+aZI6GtyxO5/nnFOLCKxjwq4bFDrhu5TJqof4Fa1aoP7IA2N0d IvMch+gGoER0sr2Jbsn0sc8ulpOaeYQOoUO6LgMFvYudW6CRzMUHtCNHmcHdWnKhk+HC wNIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:in-reply-to:references:date :message-id:mime-version; bh=69GjGteqy8ADq0GeB9Bh6sCPuBLowNCDAcYPFhtlUWU=; b=PfdxSWZm2SocluicB6wXTuI+5YLh4JMal3TE9qaK0faH83JTBcHvVVdffPzQfs5/6e PfZvYkdD9UARMvA70R/FjZUwKUod21vJL1gkkyu03Ge+bUKkv6ElPC1afpiaX0I8rlfT oFP+debnuMAhXRbD51JzOcFrmR/mFTUcK6x1/Vyl7Kx+ou9iFD8+XcoHRrHoi5qsApkP vPwmSPlkNKS60yVMHoOgNYr7u/+vexgC/EHhfuzo6BhZNhl3b3h/ZG10oMF0t5GG6c+v KlGGVT/RQqSgG5lKgeBcKN+f8dXzZAVVYa5mZC3NtYt8XP/dmWVMd0t/1xul0h8HiJV3 pWXw== X-Gm-Message-State: AIkVDXJpTDfLNqumylYtssR1g8ShwkE8N9oooJSJWQhOT8gGyF8PbdKCdMTWtBkAkSNZ9A== X-Received: by 10.25.219.82 with SMTP id s79mr4831475lfg.116.1485684898350; Sun, 29 Jan 2017 02:14:58 -0800 (PST) Received: from localhost (mobile-access-5d6a3e-39.dhcp.inet.fi. [93.106.62.39]) by smtp.gmail.com with ESMTPSA id e23sm2803991lji.29.2017.01.29.02.14.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 29 Jan 2017 02:14:57 -0800 (PST) From: Jani Nikula To: David Bremner , notmuch@notmuchmail.org Subject: Re: [RFC Patch 1/2] lib: merge internal prefix tables In-Reply-To: <20170128131521.26414-2-david@tethera.net> References: <20170128131521.26414-1-david@tethera.net> <20170128131521.26414-2-david@tethera.net> Date: Sun, 29 Jan 2017 12:14:56 +0200 Message-ID: <87a8aa41gf.fsf@nikula.org> MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 29 Jan 2017 10:15:02 -0000 On Sat, 28 Jan 2017, David Bremner wrote: > Replace multiple tables with some flags in a single table. This makes > the code a bit shorter, and it should also make it easier to add > other options to fields, e.g. regexp searching. > --- > lib/database-private.h | 7 ++++ > lib/database.cc | 86 +++++++++++++++++++++++--------------------------- > 2 files changed, 46 insertions(+), 47 deletions(-) > > diff --git a/lib/database-private.h b/lib/database-private.h > index ccc1e9a1..32357ce0 100644 > --- a/lib/database-private.h > +++ b/lib/database-private.h > @@ -148,6 +148,13 @@ operator&=(_notmuch_features &a, _notmuch_features b) > return a; > } > > +/* > + * Configuration options for xapian database fields */ > +typedef enum notmuch_field_flags { > + NOTMUCH_FIELD_EXTERNAL = 1, > + NOTMUCH_FIELD_PROBABILISTIC = 2 Since these are used as bit flags, I think it would more clear if they were defined as (1 << 0) and (1 << 1). I'm not sure if the enum buys us anything over defining them as macros, but I could go either way. > +} notmuch_field_flag_t; > + > #define NOTMUCH_QUERY_PARSER_FLAGS (Xapian::QueryParser::FLAG_BOOLEAN | \ > Xapian::QueryParser::FLAG_PHRASE | \ > Xapian::QueryParser::FLAG_LOVEHATE | \ > diff --git a/lib/database.cc b/lib/database.cc > index 2d19f20c..b98468a6 100644 > --- a/lib/database.cc > +++ b/lib/database.cc > @@ -42,6 +42,7 @@ using namespace std; > typedef struct { > const char *name; > const char *prefix; > + int flags; > } prefix_t; > > #define NOTMUCH_DATABASE_VERSION 3 > @@ -247,37 +248,37 @@ typedef struct { > * nearly universal to all mail messages). > */ > > -static prefix_t BOOLEAN_PREFIX_INTERNAL[] = { > - { "type", "T" }, > - { "reference", "XREFERENCE" }, > - { "replyto", "XREPLYTO" }, > - { "directory", "XDIRECTORY" }, > - { "file-direntry", "XFDIRENTRY" }, > - { "directory-direntry", "XDDIRENTRY" }, > -}; > - > -static prefix_t BOOLEAN_PREFIX_EXTERNAL[] = { > - { "thread", "G" }, > - { "tag", "K" }, > - { "is", "K" }, > - { "id", "Q" }, > - { "path", "P" }, > - { "property", "XPROPERTY" }, > +static prefix_t PREFIX[] = { Not really specific to this patch, but while at it this could be made const, and perhaps renamed lower case. The upper case names always seemed a bit odd. Can be left for follow-up too. Otherwise, LGTM, a nice cleanup. BR, Jani. > + /* name term prefix flags */ > + { "type", "T", 0 }, > + { "reference", "XREFERENCE", 0 }, > + { "replyto", "XREPLYTO", 0 }, > + { "directory", "XDIRECTORY", 0 }, > + { "file-direntry", "XFDIRENTRY", 0 }, > + { "directory-direntry", "XDDIRENTRY", 0 }, > + { "thread", "G", NOTMUCH_FIELD_EXTERNAL }, > + { "tag", "K", NOTMUCH_FIELD_EXTERNAL }, > + { "is", "K", NOTMUCH_FIELD_EXTERNAL }, > + { "id", "Q", NOTMUCH_FIELD_EXTERNAL }, > + { "path", "P", NOTMUCH_FIELD_EXTERNAL }, > + { "property", "XPROPERTY", NOTMUCH_FIELD_EXTERNAL }, > /* > * Unconditionally add ':' to reduce potential ambiguity with > * overlapping prefixes and/or terms that start with capital > * letters. See Xapian document termprefixes.html for related > * discussion. > */ > - { "folder", "XFOLDER:" }, > -}; > - > -static prefix_t PROBABILISTIC_PREFIX[]= { > - { "from", "XFROM" }, > - { "to", "XTO" }, > - { "attachment", "XATTACHMENT" }, > - { "mimetype", "XMIMETYPE"}, > - { "subject", "XSUBJECT"}, > + { "folder", "XFOLDER:", NOTMUCH_FIELD_EXTERNAL }, > + { "from", "XFROM", NOTMUCH_FIELD_EXTERNAL | > + NOTMUCH_FIELD_PROBABILISTIC }, > + { "to", "XTO", NOTMUCH_FIELD_EXTERNAL | > + NOTMUCH_FIELD_PROBABILISTIC }, > + { "attachment", "XATTACHMENT", NOTMUCH_FIELD_EXTERNAL | > + NOTMUCH_FIELD_PROBABILISTIC }, > + { "mimetype", "XMIMETYPE", NOTMUCH_FIELD_EXTERNAL | > + NOTMUCH_FIELD_PROBABILISTIC }, > + { "subject", "XSUBJECT", NOTMUCH_FIELD_EXTERNAL | > + NOTMUCH_FIELD_PROBABILISTIC }, > }; > > const char * > @@ -285,19 +286,9 @@ _find_prefix (const char *name) > { > unsigned int i; > > - for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_INTERNAL); i++) { > - if (strcmp (name, BOOLEAN_PREFIX_INTERNAL[i].name) == 0) > - return BOOLEAN_PREFIX_INTERNAL[i].prefix; > - } > - > - for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_EXTERNAL); i++) { > - if (strcmp (name, BOOLEAN_PREFIX_EXTERNAL[i].name) == 0) > - return BOOLEAN_PREFIX_EXTERNAL[i].prefix; > - } > - > - for (i = 0; i < ARRAY_SIZE (PROBABILISTIC_PREFIX); i++) { > - if (strcmp (name, PROBABILISTIC_PREFIX[i].name) == 0) > - return PROBABILISTIC_PREFIX[i].prefix; > + for (i = 0; i < ARRAY_SIZE (PREFIX); i++) { > + if (strcmp (name, PREFIX[i].name) == 0) > + return PREFIX[i].prefix; > } > > INTERNAL_ERROR ("No prefix exists for '%s'\n", name); > @@ -1053,15 +1044,16 @@ notmuch_database_open_verbose (const char *path, > notmuch->query_parser->add_valuerangeprocessor (notmuch->date_range_processor); > notmuch->query_parser->add_valuerangeprocessor (notmuch->last_mod_range_processor); > > - for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_EXTERNAL); i++) { > - prefix_t *prefix = &BOOLEAN_PREFIX_EXTERNAL[i]; > - notmuch->query_parser->add_boolean_prefix (prefix->name, > - prefix->prefix); > - } > - > - for (i = 0; i < ARRAY_SIZE (PROBABILISTIC_PREFIX); i++) { > - prefix_t *prefix = &PROBABILISTIC_PREFIX[i]; > - notmuch->query_parser->add_prefix (prefix->name, prefix->prefix); > + for (i = 0; i < ARRAY_SIZE (PREFIX); i++) { > + prefix_t *prefix = &PREFIX[i]; > + if (prefix->flags & NOTMUCH_FIELD_EXTERNAL) { > + if (prefix->flags & NOTMUCH_FIELD_PROBABILISTIC) { > + notmuch->query_parser->add_prefix (prefix->name, prefix->prefix); > + } else { > + notmuch->query_parser->add_boolean_prefix (prefix->name, > + prefix->prefix); > + } > + } > } > } catch (const Xapian::Error &error) { > IGNORE_RESULT (asprintf (&message, "A Xapian exception occurred opening database: %s\n", > -- > 2.11.0 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > https://notmuchmail.org/mailman/listinfo/notmuch