Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lV2aF-0005mU-Jd for pgsql-committers@arkaria.postgresql.org; Sat, 10 Apr 2021 01:38:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lV2aC-0007li-HT for pgsql-committers@arkaria.postgresql.org; Sat, 10 Apr 2021 01:38:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lV2aC-0007lb-7l for pgsql-committers@lists.postgresql.org; Sat, 10 Apr 2021 01:38:44 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lV2a3-0006t9-9n for pgsql-committers@lists.postgresql.org; Sat, 10 Apr 2021 01:38:43 +0000 Received: by mail-ej1-x633.google.com with SMTP id r12so11418310ejr.5 for ; Fri, 09 Apr 2021 18:38:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:date:in-reply-to:references:user-agent :mime-version; bh=u3w3hjDjfivTC/Mv0iFfmEmdXyaz4yoO1P9V2MEwxy8=; b=SjtuqRsRV8U5CLynw8ypMptuZPD6zBUPKZfbONS9FAy8WZ0GKvHaixijQwEghbDS1K rdk1OwMSG3uJL4Wq//WnSxRxs6QHMo47QU0DJJK306QAGwhqCa01dEDco9+kEMNsVDMz /ydK71ejqS4bcKRUmFSP5ZLctYEUgb2xFiNMlldvl5l5XzdaxtjeQ3EBoXaspB8Mkfrx tZmck192YieoKLp6URe4CJknlufzBVE0mAzqmyCoOOJQyQz6G9DW34noH2J+CmFjrHJF XsOFHFZKfjYQaQZOrQg1YnpjEAnQirCTEfUL6hlEufXck8TGf+JkMHaigDR4rTj4QxRd Dq1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:date:in-reply-to :references:user-agent:mime-version; bh=u3w3hjDjfivTC/Mv0iFfmEmdXyaz4yoO1P9V2MEwxy8=; b=VO7h3S73+qXBurQPPTSxdkQPSIEy6DQue+52v4gPSDnNUInp1p62V6ZGk/Gmyfr8Ji L+xZK1vES33gwHGj9TE+/HO6NmavrwmJkmNoSQ4MJiff2/EvkzjowH9+m7kiEZZd8/DH 4S6Q3dhYOQu5YVCDt+nny2sepup46Hrh7pFofCClmQPvgxpK8oilmTg8JHLM2aF/yd/U 78w0hnYMTZtnBwb7xifmVXOzn41A7750hyiHKdgAj9sy0XDcoRT1erGP9zPAToerTDER FULI4dPrQOr42zCgLDrsDCv+oRWyuZbbgcP1Apfk4YSQ/LLpI6n7+JmHc76qSlM9L1mW s37g== X-Gm-Message-State: AOAM532EYf3CwC84oEJERwqI1g3VZQWPWOSUVVP+FgiT7x7BUCb/tWPt X1Tpr98+uxwsoF/RA/hv762Sas3hCF0TjA== X-Google-Smtp-Source: ABdhPJyr7vuZZ7l11edlCeFjBnm3/dSvwbJZ5mUWaAIkZMXJNg6c0ycwhUFszmroVgqDguwkRB4ysA== X-Received: by 2002:a17:907:a06b:: with SMTP id ia11mr18089249ejc.294.1618018713584; Fri, 09 Apr 2021 18:38:33 -0700 (PDT) Received: from localhost.localdomain (178-190-168-93.adsl.highway.telekom.at. [178.190.168.93]) by smtp.gmail.com with ESMTPSA id i2sm1130863ejv.99.2021.04.09.18.38.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Apr 2021 18:38:32 -0700 (PDT) Message-ID: <7466db64eb6abae93e583faf8ca4004d60c163c4.camel@cybertec.at> Subject: Re: pgsql: SQL-standard function body From: Laurenz Albe To: Peter Eisentraut , pgsql-committers@lists.postgresql.org Date: Sat, 10 Apr 2021 03:38:31 +0200 In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-7OiknZT12MkpWmL1WQnJ" User-Agent: Evolution 3.36.5 (3.36.5-2.fc32) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-7OiknZT12MkpWmL1WQnJ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Fri, 2021-04-09 at 19:44 +0200, I wrote: > > SQL-standard function body > > > > psql needs some new intelligence to keep track of function body > > boundaries so that it doesn't send off statements when it sees > > semicolons that are inside a function body. > > This causes psql to fail to recognize the semicolon in the following > statement as the end of a statement: > > IMPORT FOREIGN SCHEMA x FROM SERVER y INTO z OPTIONS (case 'lower'); > > The cause is the "case", which is recognized as the start of a function > body. > > Would it be an option to recognize BEGIN and CASE as starting a > function body only if they are *not* inside parentheses, like in > the attached? Here is an improved patch, which treats END in the same fashion (not properly indented for readability). Yours, Laurenz Albe --=-7OiknZT12MkpWmL1WQnJ Content-Disposition: attachment; filename="0001-Improve-parsing-of-SQL-standard-functions-in-psql.patch" Content-Type: text/x-patch; name="0001-Improve-parsing-of-SQL-standard-functions-in-psql.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiMGFhZjA0MGE0MmUzYTAzNmJhNDNjOTg5MWUwN2JhZDczYzM1YTVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXVyZW56IEFsYmUgPGxhdXJlbnouYWxiZUBjeWJlcnRlYy5h dD4KRGF0ZTogU2F0LCAxMCBBcHIgMjAyMSAwMzozNTozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IEltcHJvdmUgcGFyc2luZyBvZiBTUUwgc3RhbmRhcmQgZnVuY3Rpb25zIGluIHBzcWwKCkhhbmRs ZSBCRUdJTiwgQ0FTRSBhbmQgRU5EIGFzIHNwZWNpYWwgb25seSBpZiB3ZSBhcmUgbm90IGluc2lk ZSBwYXJlbnRoZXNlcy4KVGhhdCBhbGxvd3Mgc3RhdGVtZW50cyBsaWtlIHRoZSBmb2xsb3dpbmcg dG8gYmUgcGFyc2VkIGNvcnJlY3RseToKCiAgQUxURVIgRk9SRUlHTiBUQUJMRSB4IE9QVElPTlMg KEFERCBjYXNlICd1cHBlcicpOwotLS0KIHNyYy9mZV91dGlscy9wc3Fsc2Nhbi5sIHwgMyArKysK IDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRp bHMvcHNxbHNjYW4ubCBiL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCmluZGV4IDRlYzU3ZTk2YTku LmNhZjY0MTIxNjQgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCisrKyBiL3Ny Yy9mZV91dGlscy9wc3Fsc2Nhbi5sCkBAIC04NzEsNiArODcxLDggQEAgb3RoZXIJCQkuCiAKIHtp ZGVudGlmaWVyfQl7CiAJCQkJCWN1cl9zdGF0ZS0+aWRlbnRpZmllcl9jb3VudCsrOworCQkJCQlp ZiAoY3VyX3N0YXRlLT5wYXJlbl9kZXB0aCA9PSAwKQorCQkJCQl7CiAJCQkJCWlmIChwZ19zdHJj YXNlY21wKHl5dGV4dCwgImJlZ2luIikgPT0gMAogCQkJCQkJfHwgcGdfc3RyY2FzZWNtcCh5eXRl eHQsICJjYXNlIikgPT0gMCkKIAkJCQkJewpAQCAtODgyLDYgKzg4NCw3IEBAIG90aGVyCQkJLgog CQkJCQkJaWYgKGN1cl9zdGF0ZS0+YmVnaW5fZGVwdGggPiAwKQogCQkJCQkJCWN1cl9zdGF0ZS0+ YmVnaW5fZGVwdGgtLTsKIAkJCQkJfQorCQkJCQl9CiAJCQkJCUVDSE87CiAJCQkJfQogCi0tIAoy LjI2LjMKCg== --=-7OiknZT12MkpWmL1WQnJ--