Форматирование SQL-запроса на c

#c #sql

Вопрос:

Мне было интересно, могу ли я использовать что-то в C , похожее на модуль «sqlparse» в Python, для форматирования моего запроса. Вы знаете, что я могу использовать?

Я сожалею, что не привел пример раньше. Я хочу, чтобы было что-то вроде этого:

 SELECT MEMB.NAME, MEMB.AGE, AGE.GROUP FROM MEMB, AGE WHERE MEMB.AGE = AGE.AGE
 

Стань этим:

 SELECT MEMB.NAME,
       MEMB.AGE,
       AGE.GROUP
FROM   MEMB,
       AGE
WHERE  MEMB.AGE = AGE.AGE
 

Большое спасибо.

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

1. Для тех из нас, кто не знает, что такое «sqlparse», — отформатируйте его каким образом? Пожалуйста, приведите пример.

2. Хм, тогда почему бы просто не написать это так? Зачем вам нужен инструмент? Я бы подумал, что клавиша ввода и пробел-это все, что вам нужно. Наверное, я упускаю суть вопроса.

3. Ну, я не хочу писать какую-либо функцию, которая делает это. Во-первых, потому что код не мой, а во-вторых, потому что я не пишу код на c . Мне просто нужна функция, которая делает это, например, метод форматирования в модуле, о котором я упоминал ранее.

Ответ №1:

Вы можете написать свой собственный симпатичный принтер. В таком случае, это не составит никакого труда. Просто замените такие вещи, как следующее:

 "FROM" -> "nFROM"
"WHERE" -> "nWHERE"
"," -> ",nt"
"AND" -> "ANDnt"
"OR" -> "ORnt"
 

и т.д.

Правка: поскольку вы не кодируете, вот небольшая версия этой функции.

 #include <string>
using std::string; /* put these lines in the top of your file */

string replace(string a, string b, string c) {
    unsigned x;
    for(x = a.find(b); x != string::npos;) {
        a.erase(x, b.length());
    a.insert(x, c);
    }
    return a;
}




string formatSQL(string sql) {

    replace(sql, "FROM", "nFROM");
    replace(sql, "WHERE", "nWHERE");
    replace(sql, "," , ",nt");
    replace(sql, "AND", "ANDnt");
    replace(sql, "OR", "ORnt");
}
 

Так что звонок formatSql("SELECT MEMB.NAME, MEMB.AGE, AGE.GROUP FROM MEMB, AGE WHERE MEMB.AGE = AGE.AGE") дает вам желаемый результат.