SQL Formatter هي مكتبة JavaScript لاستعلامات SQL ذات الطباعة الجميلة.
لقد بدأ كمنفذ لمكتبة PHP، لكنه اختلف منذ ذلك الحين إلى حد كبير.
وهو يدعم العديد من لهجات SQL: GCP BigQuery، وIBM DB2، وApache Hive، وMariaDB، وMySQL، وTiDB، وCouchbase N1QL، وOracle PL/SQL، وPostgreSQL، وAmazon Redshift، وSingleStoreDB، وSnowflake، وSpark، وSQL Server Transact-SQL، وTrino (وPresto). ). راجع مستندات خيار اللغة لمزيد من التفاصيل.
لا يدعم:
;
.→ جرب العرض التوضيحي.
احصل على أحدث إصدار من NPM:
npm install sql-formatter
متوفر أيضًا مع الغزل:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
سيؤدي هذا إلى إخراج:
SELECT
*
FROM
tbl
يمكنك أيضًا تمرير خيارات التكوين:
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
يمكنك تعطيل المنسق لقسم من SQL عن طريق إحاطته بتعليقات التعطيل/التمكين:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
الذي ينتج:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
لا يقوم المنسق حتى بتحليل الكود بين هذه التعليقات. لذلك في حالة حدوث بعض SQL التي تعطلت SQL Formatter، يمكنك التعليق على الجاني (على الأقل حتى يتم إصلاح المشكلة في SQL Formatter).
بالإضافة إلى التنسيق، يمكن لهذه المكتبة أيضًا إجراء استبدال العنصر النائب في عبارات SQL المعدة:
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
النتائج في:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
لمزيد من التفاصيل، راجع خيار docs of params.
سيتم تثبيت أداة CLI ضمن sql-formatter
ويمكن استدعاؤها عبر npx sql-formatter
:
sql-formatter -h
usage: sql-formatter [-h] [-o OUTPUT]
[-l {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,transactsql,trino,tsql}] [-c CONFIG] [--version] [FILE]
SQL Formatter
positional arguments:
FILE Input SQL file (defaults to stdin)
optional arguments:
-h, --help show this help message and exit
-o, --output OUTPUT
File to write SQL output (defaults to stdout)
--fix Update the file in-place
-l, --language {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,trino,tsql}
SQL dialect (defaults to basic sql)
-c, --config CONFIG
Path to config JSON file or json string (will find a file named '.sql-formatter.json' or use default configs if unspecified)
--version show program's version number and exit
بشكل افتراضي، تأخذ الأداة الاستعلامات من stdin وتعالجها إلى stdout ولكن يمكن أيضًا تسمية اسم ملف الإدخال أو استخدام خيار --output
.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
تقبل الأداة أيضًا ملف تكوين JSON المسمى .sql-formatter.json في الدليل الأصلي الحالي أو أي دليل أصل، أو مع خيار --config
الذي يأخذ هذا النموذج:
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
جميع الحقول اختيارية وسيتم ملء كافة الحقول غير المحددة بقيمها الافتراضية.
language
لهجة SQL المراد استخدامها (عند استخدام format()
).dialect
لهجة SQL المراد استخدامها (عند استخدام formatDialect()
منذ الإصدار 12).tabWidth
مقدار المسافة البادئة للاستخدام.useTabs
لاستخدام علامات التبويب للمسافة البادئة.keywordCase
الأحرف الكبيرة أو الكلمات الرئيسية الصغيرة.dataTypeCase
أنواع البيانات الكبيرة أو الصغيرة.functionCase
الأحرف الكبيرة أو أسماء الوظائف الصغيرة.identifierCase
الأحرف الكبيرة أو معرفات الأحرف الصغيرة. ( تجريبي! )indentStyle
نمط المسافة البادئة الشاملة. ( مهملة! )logicalOperatorNewline
السطر الجديد قبل أو بعد عامل التشغيل المنطقي (AND، OR، XOR).expressionWidth
الحد الأقصى لعدد الأحرف في التعبيرات الموجودة بين قوسين ليتم الاحتفاظ بها في سطر واحد.linesBetweenQueries
عدد الأسطر الجديدة المراد إدراجها بين الاستعلامات.denseOperators
تحزم المشغلين بكثافة بدون مسافات.newlineBeforeSemicolon
يضع الفاصلة المنقوطة على سطر منفصل.params
من القيم لاستبدال العنصر النائب.paramTypes
أنواع العناصر النائبة للمعلمات المطلوب دعمها. إذا كنت لا تستخدم أداة تجميع الوحدات النمطية، فقم باستنساخ المستودع وتشغيل npm install
واحصل على ملف من دليل /dist
لاستخدامه داخل علامة <script>
. وهذا يجعل SQL Formatter متاحًا كمتغير عام window.sqlFormatter
.
السبب الأكثر شيوعًا هو أنك لم تحدد لهجة SQL. بدلاً من الاتصال بالمكتبة ببساطة:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
اختر اللهجة المناسبة، مثل:
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
أو عند استخدام ملحق VSCode: الإعدادات -> SQL-Formatter-VSCode: SQLFlavourOverride.
يحدث هذا عادةً عند تجميع أحد التطبيقات مع Webpack. السبب هو أن Babel (من خلال babel-loader
) لم يتم تكوينه لدعم بناء جملة خصائص الفئة:
| export default class ExpressionFormatter {
> inline = false;
يتم دعم بناء الجملة هذا على نطاق واسع في جميع المتصفحات الرئيسية (باستثناء IE القديم) ويتم تضمين دعمه في @babel/preset-env
الافتراضي.
الإصلاحات الممكنة:
@babel/preset-env
@babel/plugin-proposal-class-properties
لم يعد مؤلفه يحتفظ بامتداد Prettier SQL VSCode.
الرجاء استخدام ملحق SQL Formatter VSCode الرسمي للحصول على أحدث الإصلاحات من مكتبة SQL Formatter.
على سبيل المثال، قد يكون لديك SQL مثل:
SELECT {col1}, {col2} FROM {tablename}
على الرغم من أن القوالب غير مدعومة بشكل مباشر بواسطة SQL Formatter، فإن الحل البديل هو استخدام خيار التكوين paramTypes لمعالجة تكرارات بنيات القوالب كعناصر نائبة لمعلمات البيان المُعد:
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
لن يعمل هذا مع جميع بنيات القوالب الممكنة، ولكن يجب أن يحل حالات الاستخدام الأكثر شيوعًا.
تطوير هذا المنسق حاليا في وضع الصيانة. سيتم إصلاح الأخطاء إذا كان ذلك ممكنًا، ولكن من المحتمل ألا تتم إضافة ميزات جديدة.
لقد بدأت أداة تنسيق SQL جديدة: prettier-plugin-sql-cst.
جربه إذا كنت ترغب في الارتقاء بالتنسيق التلقائي لـ SQL إلى المستوى التالي.
يرجى الاطلاع على CONTRIBUTING.md
معهد ماساتشوستس للتكنولوجيا