eiffel - Eiffel:多行字符串格式化
问题描述
没有找到比这种方式更好的格式化多行字符串的方法......似乎很复杂。格式化此类代码的最佳方法是什么?
l_qry := "SELECT%
% * %
%FROM %
% enumerate %
%WHERE %
% " + {like item_prototype}.Primary_key_db_column_name + " = " + l_category_id + " %
%UNION %
% SELECT %
% e.* %
% FROM %
% enumerate e %
%INNER JOIN %
% enumerates_leaves s ON s." + {like item_prototype}.Primary_key_db_column_name + " = e." + {like item_prototype}.Category_db_column_name + " %
%) SELECT * FROM enumerates_leaves WHERE enumerates_leaves." + {like item_prototype}.Category_db_column_name + " IS NOT NULL;"
解决方案
您可以为此目的使用Verbatin 字符串。
sql_select_country : STRING = "[
SELECT *
from COUNTRY
]"
-- Select all country
为了动态构建 SQL 查询,您可以定义一个带有占位符的模板,然后将它们替换为预期值。
template_query : STRING = "[
SELECT
*
FROM
enumerate
WHERE
$Primary_key_db_column_name = :id
UNION
SELECT
e.*
FROM
enumerate e
INNER JOIN
enumerates_leaves s ON s.$Primary_key_db_column_name = e.$Category_db_column_name
) SELECT * FROM enumerates_leaves WHERE enumerates_leaves.$Category_db_column_name IS NOT NULL;"
]"
-- Template query `query_name` ....
使用模板
l_query: STRING
create l_query.make_from_string (template_query)
l_query.replace_substring_all ("$Primary_key_db_column_name", {like item_prototype}.Primary_key_db_column_name)
...
事实上,人们可以将这个想法概括为构建类似
sql_query_builder (query_template: READABLE_STRING_GENERAL; arguments: ITERABLE [READABLE_STRING_GENERAL]) :STRING
推荐阅读
- linux - 在 Internet 存档上重定向后获取 URL
- postgresql - 将用户添加到他们不属于的项目?Postgres / Vue JS
- css - 在 Wordpress/Primer/Mins/Elementor 网站中使用 CSS 制作标题全宽
- python - 在 django 中,Middleware 两次触发错误
- android - 在一个构建配置上生成签名的 APK 失败
- typescript - 在 monorepo 中使用 typescript 项目引用构建 cjs 和 esm
- css - How to add checkboxes to Multi Select in IE 11
- jquery - 单击 div 时删除添加类
- apache-spark - 将列表中元素后的 n 个元素与列表本身连接起来
- javascript - Azure Maps Resize + Javascript 无法正常工作