Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iCgOn-0000ED-JP for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Sep 2019 08:42:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iCgOm-0003nH-FG for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Sep 2019 08:42:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iCgOm-0003ms-1y for pgsql-hackers@lists.postgresql.org; Tue, 24 Sep 2019 08:42:16 +0000 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1iCgOj-0003dd-RS for pgsql-hackers@postgresql.org; Tue, 24 Sep 2019 08:42:15 +0000 Received: by mail-pf1-x442.google.com with SMTP id x127so892519pfb.7 for ; Tue, 24 Sep 2019 01:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:message-id:to:cc:subject:from:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=k/1BKVIcv12YOMd11a7ig47gaF1XAYn6NCpjgMgtEUM=; b=G62FIUEuVznJ/BKjnuA9gPh2fFqnHBmg/+7trkSEz0WS7GZLTwzVXz0o21TKNoCVKb Qun1SqFeYhaFlnsGvcN0lw/+HFTeXkB50sTVfGdpwFA7s9e61gDEc5c7Vv1NYcVgIhcV l89gk8PFpqwjIs83QCCfA+IozAi5Fv7nbof6Mw+nD18idthKXMv3KJCqOG0jqgE5r5fQ lqKzza3lCGLcu5nilReEGMrKWxZe2pzCf1jiuKRwDSZRJNLScFiYP2oT/OVsr3y9UN8Y Do0q9HqB5OkEGgkxyiUIwCqTDwZ5nsNkmZ7NHNvSqUsuqJVBGwvE+yLXr98aY5e0PkuD zhKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:to:cc:subject:from:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=k/1BKVIcv12YOMd11a7ig47gaF1XAYn6NCpjgMgtEUM=; b=Af1oQ4cqPQ+PpMaPtRS+EkzkzxDhXrizwurkpC46p6iVZx1QWD6fFJUw8qHf93GBvk oyiwzXfMybHVc8lIuQhtbRAwAeshR4vgncwRySg/QyMaxeq0HdM8SbT6fKwyt1MM1kr9 r4N/Oekwfy4ceI2sVmpeRqD+Ay4oIuOD2eKCqOqR7RW0/dFfh7QPdvM8SPTepY95+KNp 6xGvRyJTpagDaXafLqPD1Q7Ea+UO++bq1bAO0f2aPsyri6koNrfgPEHf68k8PSQf2i7B tXHo75qgRq8//kVwJSXvieaiWaMjMIfKkamuXmU6DOMkW+P7F+UlJ6Vq6SPgH4AJA6fI OmPA== X-Gm-Message-State: APjAAAVH+UnDojm/11Xek117xsKoH76ct8VE8+g0QSngcfdwIb5INjjP eNNzPG7LUcVJ01kanUcLEqs= X-Google-Smtp-Source: APXvYqxXHWEQNvv3FBqAoa5TpE4lEk6ZJv1ZdEkapliSdaIxOwwlTVsZh5aO7XEtys4kEmy8TK1bDA== X-Received: by 2002:a17:90a:fa02:: with SMTP id cm2mr1706326pjb.133.1569314532877; Tue, 24 Sep 2019 01:42:12 -0700 (PDT) Received: from localhost (w204177.dynamic.ppp.asahi-net.or.jp. [121.1.204.177]) by smtp.gmail.com with ESMTPSA id y10sm1103779pfe.148.2019.09.24.01.42.07 (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Sep 2019 01:42:12 -0700 (PDT) Date: Tue, 24 Sep 2019 17:41:46 +0900 (Tokyo Standard Time) Message-Id: <20190924.174146.159197618.horikyota.ntt@gmail.com> To: alvherre@2ndquadrant.com Cc: 9erthalion6@gmail.com, florisvannee@optiver.com, jesper.pedersen@redhat.com, david.rowley@2ndquadrant.com, thomas.munro@gmail.com, jtc331@gmail.com, rafia.pghackers@gmail.com, jeff.janes@gmail.com, pg@bowt.ie, tomas.vondra@2ndquadrant.com, thomas.munro@enterprisedb.com, bhushan.uparkar@gmail.com, pgsql-hackers@postgresql.org, a.korotkov@postgrespro.ru Subject: Re: Index Skip Scan From: Kyotaro Horiguchi In-Reply-To: <20190924.173547.226622711.horikyota.ntt@gmail.com> References: <20190923020204.GA2781@alvherre.pgsql> <20190924.173547.226622711.horikyota.ntt@gmail.com> User-Agent: Mew version 6.5 on Emacs 22.2 / Mule 5.0 =?iso-2022-jp?B?KBskQjpnGyhCKQ==?= / Meadow-3.01-dev (TSUBO-SUMIRE) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk At Tue, 24 Sep 2019 17:35:47 +0900 (Tokyo Standard Time), Kyotaro Horiguchi wrote in <20190924.173547.226622711.horikyota.ntt@gmail.com> > At Sun, 22 Sep 2019 23:02:04 -0300, Alvaro Herrera wrote in <20190923020204.GA2781@alvherre.pgsql> > > On 2019-Sep-22, Dmitry Dolgov wrote: > > > > > > I think multiplying two ScanDirections to watch for a negative result is > > > > pretty ugly: > > > > > > Probably, but the only alternative I see to check if directions are opposite is > > > to check that directions come in pairs (back, forth), (forth, back). Is there > > > an easier way? > > > > Maybe use the ^ operator? > > It's not a logical operator but a bitwise arithmetic operator, > which cannot be used if the operands is guaranteed to be 0 or 1 > (in integer). In a-kind-of-standard, but hacky way, "(!a != !b)" > works as desired since ! is a logical operator. > > Wouldn't we use (a && !b) || (!a && b)? Compiler will optimize it > some good way. Sorry, it's not a boolean. A tristate value. From the definition (Back, NoMove, Forward) = (-1, 0, 1), (dir1 == -dir2) if NoMovement did not exist. If it is not guranteed, (dir1 != 0 && dir1 == -dir2) ? regards. -- Kyotaro Horiguchi NTT Open Source Software Center