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 1lUvBe-0005hw-Vh for pgsql-committers@arkaria.postgresql.org; Fri, 09 Apr 2021 17:44:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lUvBd-0000IN-HG for pgsql-committers@arkaria.postgresql.org; Fri, 09 Apr 2021 17:44:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lUvBd-0000IG-6s for pgsql-committers@lists.postgresql.org; Fri, 09 Apr 2021 17:44:53 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lUvBa-00026d-A8 for pgsql-committers@lists.postgresql.org; Fri, 09 Apr 2021 17:44:51 +0000 Received: by mail-ej1-x629.google.com with SMTP id u17so9966254ejk.2 for ; Fri, 09 Apr 2021 10:44:49 -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=/UpqLQK6thipezX5tZpYA6zNd4K0odwNEkMalyepKLI=; b=qxOyVmybvIaWVsJ4ffkSXxDUVDR3/g57zRl88bUE3chjXGMGmQ7V+Pvoe4zsnSQbss 1wuJetMxbhfF1GkFjKQudPjpY2ZeIVZJ/xumdZ+9mhi+KznP1Je2a++zKEggzL6E21ct BPjUW+tXjQOsTb3w0PnUWcS8+gU27dzKHQ1itk0mJhEVjzKCtwr9S+eAKV3qsmrAukH4 op8bZfL7Mgzx85pGmimKoypQ/PCSQYad9DkQEU4YihIprHNz1+0eZhyv++EqizJ2dcvc lhckQWa5lPlj/ydPMZgN8ogQwzE/GKx8D0u17ezW3hdinq7pNh6eka5lCQ1G2U8bwkuX s8UA== 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=/UpqLQK6thipezX5tZpYA6zNd4K0odwNEkMalyepKLI=; b=mE1EcWXDkiWMWFEXbLG2mR3IbB54Ms0ezSdAnaeILI8kH3itUo8Kz4YiQqdmDFabps mFoYEobYVfuT9OlfToTpn2Qhi8b6jYJ43IKocBsbozDNkKaKYObjHceCrgJUPFXjBuwU AFNmGkbpnQvpZYxCPvnONcMEe4nubxtckY5/ZOIVWb9+PVl3lZW3yatuaDHdaxWhgQTn L31m312EINUe+gTmxdW3cPLWmn+jN5TYdwwGdw6iwld2qEnGwU4T0uyOrXa/wsrmtw0L RrDLbzY/VTWJHzGZPpAOV9+iUta63t01jgVUgwo27xtH/gwECyznAMZqgtgwqDtMdmFf bBkw== X-Gm-Message-State: AOAM533STAtMb/nXktV3ejSKgT+7+ndjGPJRXKT1iEzxI+2Q5dIyKTO+ BrewvDBumOAr6mUMyh9pThIZ8ma9wqNhtg== X-Google-Smtp-Source: ABdhPJxAEhTo0SibD45yhMwRGCo07mAUbdILdWDydfWhMR7iGbQlwP0WjT+3nvQHN/UPAUoZWaycoQ== X-Received: by 2002:a17:907:20c3:: with SMTP id qq3mr17006397ejb.113.1617990288622; Fri, 09 Apr 2021 10:44:48 -0700 (PDT) Received: from localhost.localdomain (217-149-171-143.nat.highway.telekom.at. [217.149.171.143]) by smtp.gmail.com with ESMTPSA id p2sm1513821ejo.108.2021.04.09.10.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Apr 2021 10:44:48 -0700 (PDT) Message-ID: Subject: Re: pgsql: SQL-standard function body From: Laurenz Albe To: Peter Eisentraut , pgsql-committers@lists.postgresql.org Date: Fri, 09 Apr 2021 19:44:47 +0200 In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-VGwyBMKv5HwKGvtdqMwL" 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 --=-VGwyBMKv5HwKGvtdqMwL Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Wed, 2021-04-07 at 19:53 +0000, Peter Eisentraut wrote: > SQL-standard function body > > This adds support for writing CREATE FUNCTION and CREATE PROCEDURE > statements for language SQL with a function body that conforms to the > SQL standard and is portable to other implementations. > > [...] > > 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. Now you could argue that "case" is a reserved word, and I should double quote it if I insist on using it as a FDW option, but it is a regression. 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? Yours, Laurenz Albe --=-VGwyBMKv5HwKGvtdqMwL Content-Disposition: attachment; filename*0=0001-Improve-psql-s-parsing-of-SQL-standard-function-bodi.pat; filename*1=ch Content-Type: text/x-patch; name="0001-Improve-psql-s-parsing-of-SQL-standard-function-bodi.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4Yzk1NDQwOTA1YzAxYjhjOWVkOGI0NmVmMDFhMjRiMDFmMjQ1ODBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXVyZW56IEFsYmUgPGxhdXJlbnouYWxiZUBjeWJlcnRlYy5h dD4KRGF0ZTogRnJpLCA5IEFwciAyMDIxIDE5OjQwOjM2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g SW1wcm92ZSBwc3FsJ3MgcGFyc2luZyBvZiBTUUwgc3RhbmRhcmQgZnVuY3Rpb24gYm9kaWVzCgpU cmVhdCBCRUdJTiBhbmQgQ0FTRSBhcyB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBib2R5IG9ubHkK aWYgd2UgYXJlIG5vdCBpbnNpZGUgcGFyZW50aGVzZXMuCgpUaGF0IGFsbG93cyBzdGF0ZW1lbnRz IGxpa2UgdGhlIGZvbGxvd2luZyB0byBiZSBwYXJzZWQgY29ycmVjdGx5OgoKQUxURVIgRk9SRUlH TiBUQUJMRSB4IE9QVElPTlMgKEFERCBjYXNlICd1cHBlcicpOwotLS0KIHNyYy9mZV91dGlscy9w c3Fsc2Nhbi5sIHwgNSArKystLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvcHNxbHNjYW4ubCBiL3NyYy9m ZV91dGlscy9wc3Fsc2Nhbi5sCmluZGV4IDRlYzU3ZTk2YTkuLmRiZmNmYzg0ZTUgMTAwNjQ0Ci0t LSBhL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCisrKyBiL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5s CkBAIC04NzEsOCArODcxLDkgQEAgb3RoZXIJCQkuCiAKIHtpZGVudGlmaWVyfQl7CiAJCQkJCWN1 cl9zdGF0ZS0+aWRlbnRpZmllcl9jb3VudCsrOwotCQkJCQlpZiAocGdfc3RyY2FzZWNtcCh5eXRl eHQsICJiZWdpbiIpID09IDAKLQkJCQkJCXx8IHBnX3N0cmNhc2VjbXAoeXl0ZXh0LCAiY2FzZSIp ID09IDApCisJCQkJCWlmIChjdXJfc3RhdGUtPnBhcmVuX2RlcHRoID09IDAKKwkJCQkJCSYmIChw Z19zdHJjYXNlY21wKHl5dGV4dCwgImJlZ2luIikgPT0gMAorCQkJCQkJCXx8IHBnX3N0cmNhc2Vj bXAoeXl0ZXh0LCAiY2FzZSIpID09IDApKQogCQkJCQl7CiAJCQkJCQlpZiAoY3VyX3N0YXRlLT5p ZGVudGlmaWVyX2NvdW50ID4gMSkKIAkJCQkJCQljdXJfc3RhdGUtPmJlZ2luX2RlcHRoKys7Ci0t IAoyLjI2LjMKCg== --=-VGwyBMKv5HwKGvtdqMwL--