जेनकिंस में उपयोग करने के लिए मैसकल में सिंटैक्स लाइनिंग के लिए एक सीएलआई उपकरण की खोज करने के बाद और जल्दी से कुछ भी नहीं मिला (यह स्टैक ओवरफ्लो प्रश्न पहले परिणामों में से एक है - एलओएल) मैं निम्नलिखित समाधान के साथ आया (ओएस:लिनक्स, लेकिन होना चाहिए विंडोज़ के साथ भी व्यवहार्य):
फॉलोइंग जैसा कुछ:
lint_result=`mysql mysql_test -B -f -e 'select asdf s where x;' 2>&1`; if [ `echo $lint_result | sed -r "s/ERROR ([0-9]*).*/\1/g"` -eq 1064 ]; then echo -e "Syntax error:\n${lint_result}"; fi
Syntax error:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where x' at line 1
(एसक्यूएल फाइलों की जांच के लिए आप -बी-ई 'स्टेटमेंट' के बजाय "
यदि क्वेरी के सिंटैक्स को MySQL द्वारा पार्स नहीं किया जा सकता है, तो यह दावा करता है:ERROR 1064 (42000) लाइन 1 पर:आपको अपने SQL सिंटैक्स में त्रुटि है; लाइन 1 पर '' के पास'' का उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें
केवल अगर सिंटैक्स सही है तो यह क्वेरी को निष्पादित करने का प्रयास करता है और महसूस करता है कि तालिका मौजूद नहीं है लेकिन यह अब दिलचस्प नहीं है:
इसलिए त्रुटि 1064 अमान्य सिंटैक्स है। आपको केवल एक खाली परीक्षण डेटाबेस बनाने की आवश्यकता है क्योंकि अन्यथा केवल गलत FROM भाग के साथ त्रुटियाँ दिखाई देंगी (उदाहरण के लिए डेटाबेस को एक मान्य सिंटैक्स जाँच परिणाम प्राप्त करने के लिए आवश्यक है:'s जहाँ x और if से asdf का चयन करें;)।
जहाँ तक मैंने परीक्षण किया यह ठीक काम करता है (संस्करण मैसकल 5.5)।
यहाँ एक पूर्ण बैश स्क्रिप्ट संस्करण है:ERROR 1146 (42S02) at line 1: Table 'mysql_test.s' doesn't exist
#!/bin/bash
source_dir=${1};
database="mysql_test";
mysql_args="-h127.0.0.1";
mysql $mysql_args -B -e "DROP DATABASE IF EXISTS $database; CREATE DATABASE $database;";
for file in `find $source_dir -name "*.sql"`; do
lint_result=`mysql $mysql_args $database -f -b < $file 2>&1`;
if [ "`echo $lint_result | sed -r \"s/ERROR ([0-9]*).*/\1/g\"`" = "1064" ]; then
echo -e "Syntax error in file ${file}:\n${lint_result}" && exit 1;
fi;
done