суббота, 24 марта 2007 г.

Вычисление параметризованных выражений

В процессе программирования иногда возникает необходимость вычислять выражения заданные строкой, например:

f(a,b,c) = a + b + c + 1, где a, b и с произвольные параметры.

Если под рукой не оказалось готового инструмента для вычисления параметризованных выражений, в качестве калькулятора воспользуйтесь какой-нибудь СУБД и ее могучим языком запросов SQL.

Рассмотрим этапы построения SQL запроса для вычисления параметризованного выражения:

1. Предположим, что f(a,b,c) необходимо вычислить для a=2, b=4 и с=6. Составим запрос:

> SELECT 2 AS a, 4 AS b, 6 AS c;

Получим таблицу значений входящих параметров:

+-----------+

| a | b | c |

+-----------+

| 2 | 4 | 6 |

+-----------+

2. Доработаем запрос:

> SELECT b FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;

Получим значение отдельного параметра:

+---+

| b |

+---+

| 4 |

+---+

3. Наконец, составим запрос, вычисляющий наше выражение:

> SELECT a + b + c + 1 AS result FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;

Получим результат:

+--------+

| result |

+--------+

| 13 |

+--------+



Остается только добавить, что использовать СУБД в качестве калькулятора можно для различных типов данных (числовых, логических, строковых, даты и тд.). Особенно интересны комбинированные выражения. Например на запрос:

> SELECT a OR (b = c) AS result

FROM (SELECT false AS a, 4 AS b, 6 AS c) AS params;

СУБД вернет нам:

+--------+

| result |

+--------+

| false |

+--------+

Приведенный пример работает в СУБД PostgreSQL, MySQL, SQLite и др.



Комментариев нет: