組み込み関数の名前を解析するためにパーサーが使用するデフォルトのルールとは?
パーサー(構文解析器)は、組み込み関数の名前に一致する単語に遭遇したとき、その名前が関数呼び出しを表しているのか、それともテーブル名やカラム名のような識別子への参照なのかを判断しなければなりません。
例えば、以下の2つのSQL文を見てみましょう。
1. SELECT SUM(salary) FROM employee; 2. CREATE TABLE sum (i INT);
最初のクエリでは SUM は関数呼び出しへの参照として解釈されますが、2番目のクエリでは同じ sum という名前がテーブル名として参照されています。このように、同じ単語でも文脈によって意味が異なるため、パーサーには明確な判別基準が必要です。
パーサーが従う2つのデフォルトルール
パーサーは、関数名が関数呼び出しとして使われているのか、あるいは非参照コンテキストにおける識別子として使われているのかを区別するために、次のルールに従います。
- ルール1: 式の中でその名前を関数呼び出しとして使用する場合、名前と直後に続く括弧「
(」との間に空白があってはなりません。 - ルール2: 逆に、関数名を識別子として使用する場合は、名前の直後に括弧が続いていてはなりません。
具体例で理解する
このルールにより、以下のように動作が決まります。
COUNT(*)のように、関数名と括弧の間に空白がない場合は、関数呼び出しとして認識されます。COUNT (*)のように、間に空白がある場合は、識別子(テーブル名など)として扱われる可能性があります。CREATE TABLE sum (i INT)のように、テーブル名の直後に括弧が続く場合でも、DDL文ではテーブル定義として正しく処理されます。
つまり、「関数名と括弧の間隔」がパーサーの判別における重要なポイントとなっています。SQLを記述する際は、意図した通りに関数呼び出しとして解釈されるよう、関数名と括弧の間に余計な空白を挿入しないよう注意しましょう。
-
Java 9のインターフェースで使えるプライベートメソッドのルールと使い方を解説
Java 9では、インターフェースにプライベートメソッドという新機能が追加されました。private修飾子を使用して定義でき、Java 9以降では、インターフェース内にprivateメソッドとprivate staticメソッドの両方を記述することが可能です。 インターフェースにおけるプライベートメソッドのルール メソッド本体が必須: プライベートメソッドにはインターフェース内で本体(処理内容)が必要です。通常の抽象メソッドのように宣言することはできません。本体なしで宣言しようとすると、「This method requires a body instead of a semicolon(セ
-
Pythonの関数名・識別子に使用できる文字とは?命名ルールを徹底解説
Pythonにおける識別子(Identifier)とは? Pythonにおいて、クラス名、関数名、変数名など、プログラム内のさまざまな要素に付ける名前のことを識別子(identifier)と呼びます。識別子は、それぞれの要素を他と区別するために欠かせないものです。 この記事では、関数名や変数名としてどのような文字が許可されているのか、そのルールと注意点を具体例とともに解説します。 識別子に使用できる文字のルール Pythonの識別子には、以下の文字を組み合わせて使用できます。 英字の小文字(a〜z) 英字の大文字(A〜Z) 数字(0〜9) アンダースコア(_) たとえば myClass、