首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eiffel:多行字符串格式

Eiffel:多行字符串格式
EN

Stack Overflow用户
提问于 2019-01-26 23:21:42
回答 1查看 67关注 0票数 0

没有找到比这种方式更好的格式化多行字符串的方法...看起来很复杂。格式化这类代码的最佳方式是什么?

代码语言:javascript
复制
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;"
EN

回答 1

Stack Overflow用户

发布于 2019-01-26 23:31:05

您可以使用Verbatin Strings来实现此目的。

代码语言:javascript
复制
sql_select_country : STRING = "[ 
         SELECT * 
         from COUNTRY
]"
        -- Select all country

为了动态构建SQL查询,您可以定义一个带有占位符的模板,然后用预期值替换它们。

代码语言:javascript
复制
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` ....

使用模板

代码语言:javascript
复制
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)
...

实际上,我们可以将这个想法推广到构建如下内容

代码语言:javascript
复制
sql_query_builder (query_template: READABLE_STRING_GENERAL; arguments: ITERABLE [READABLE_STRING_GENERAL]) :STRING
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54379732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档