Cara terbaik untuk melakukan ini menurut saya adalah dengan menggunakan Ekspresi Reguler atau SED/AWK untuk memformat semuanya, ini memberi kita bonus peta pengganti dengan cepat. Kemungkinan Anda memiliki kesalahan kode tinggi, jadi agak sulit.
biarkan saya mengerjakannya sedikit dan saya dapat melihat apakah saya dapat menemukan solusi yang baik. Apakah dijamin bahwa Anda merangkum semua tanda kutip ganda SQL?
EDIT
Coba ini
cd {{directory}} && find . -type f -print0 |
xargs -0 perl -i.bak -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'
Ini contohnya
$ printf '"select * from whatever where this = that and active = 1 order by something asc";\n' |
> perl -pe 's/select/SELECT/g ; s/from/\n\tFROM/g ; s/where/\n\t\tWHERE/g ; s/and/\n\t\tAND/g ; s/order by/\n\t\tORDER BY/g ; s/asc/ASC/g ; s/desc/DESC/g ;'
"SELECT *
FROM whatever
WHERE this = that
AND active = 1
ORDER BY something ASC";
Apakah itu cantik? tidak, tidak sama sekali, apakah itu berhasil.... Ya.
Saya akan mencoba membuat file filter dan mungkin sedikit program bash atau semacamnya saat saya punya waktu untuk menjalankan kekacauan panas ini.
EDIT
Berikut beberapa kode yang direvisi, terlihat lebih cantik (agak)
printf '$request1 = "select * from whatever where this = that and active = 1 order by something asc";\n' |
perl -pe 's/select/SELECT/gi ; s/from/\n FROM/gi ; s/where/\n WHERE/gi ; s/and/\n AND/gi ; s/order by/\n ORDER BY/gi ; s/asc/ASC/gi ; s/desc/DESC/gi ;' |
awk 'NR == 1 {pad = length($0)/2; print} NR > 1 {gsub(/\r/,""); printf "%*s%s\n", pad, " ", $0}'
__OUTPUTS__
$request1 = "SELECT *
FROM whatever
WHERE this = that
AND active = 1
ORDER BY something ASC";