Re[4]: String templates (JEP 430)
От: · Великобритания  
Дата: 02.08.23 15:27
Оценка: +1 -1
Здравствуйте, samius, Вы писали:

S>
S>var provider = new MyCustomSqlFormatProvider();
S>FormattableString sql = $"SELECT * FROM SomeTable WHERE Age = {age} and Name = {name}";
S>var safeSqlString = sql.ToString(provider);
S>

Ещё раз. Это даст строку. Неясно как из этого получить объект произвольного типа. Представь себе, что name это бинарный поток, например. В base64 перекладывать будешь или как?
Вот как реализация DB выглядит в примере:
public PreparedStatement process(StringTemplate st) throws SQLException {
        // 1. Replace StringTemplate placeholders with PreparedStatement placeholders
        String query = String.join("?", st.fragments());

        // 2. Create the PreparedStatement on the connection
        PreparedStatement ps = conn.prepareStatement(query);

        // 3. Set parameters of the PreparedStatement
        int index = 1;
        for (Object value : st.values()) {
            switch (value) {
                case Integer i -> ps.setInt(index++, i);
                case Float f   -> ps.setFloat(index++, f);
                case Double d  -> ps.setDouble(index++, d);
                case Boolean b -> ps.setBoolean(index++, b);
                default        -> ps.setString(index++, String.valueOf(value));
            }
        }

        return ps;
    }


Принципиальная разница в том, что шарпы-скрипты могут создавать только текстовую строку, а сабж — произвольный объект.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.