जेनकिंस में उपयोग करने के लिए माइस्क्ल में सिंटैक्स लिनटिंग के लिए एक सीएलआई उपकरण खोजने के बाद और कुछ भी जल्दी नहीं मिला (यह स्टैक ओवरफ्लो प्रश्न पहले परिणामों में से एक है - एलओएल) मैं निम्नलिखित समाधान के साथ आया (ओएस: लिनक्स , लेकिन भी विंडोज के साथ संभव होना चाहिए):
तरह follwoing:
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
(एसक्यूएल फ़ाइलों को आप उपयोग कर सकते हैं "< filename.sql" के बजाय बी -e 'बयान' जांच करने के लिए)
यदि क्वेरी सी का सिंटैक्स mysql द्वारा पार्स नहीं किया गया है, यह दावा करता है: ERROR 1064 (42000) पंक्ति 1 पर: आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है; मैन्युअल रूप से लाइन 1
पर उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाता है, केवल सिंटैक्स सही है, तो यह क्वेरी निष्पादित करने का प्रयास करता है और महसूस करता है कि तालिका मौजूद नहीं है लेकिन यह नहीं है अब दिलचस्प नहीं है:
ERROR 1146 (42S02) at line 1: Table 'mysql_test.s' doesn't exist
त्रुटि 1064 अमान्य वाक्यविन्यास है। आपको केवल एक खाली परीक्षण डेटाबेस बनाने की आवश्यकता है क्योंकि अन्यथा केवल गलत से भिन्न त्रुटियों वाली त्रुटियां दिखाई देंगी (उदाहरण के लिए, वैध वाक्यविन्यास जांच परिणाम प्राप्त करने के लिए डेटाबेस की आवश्यकता है: 'x से if और if; से asdf चुनें)।
जहां तक मैंने परीक्षण किया है यह ठीक काम करता है (संस्करण MySQL 5.5)।
यहां एक संपूर्ण बैश स्क्रिप्ट वर्शन: php-sqllint:
#!/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
स्रोत
2013-04-25 19:14:55
बिल्कुल वही समस्या - और सिस्टम को डीडीएल (वास्तव में एसक्यूएल फाइलें सभी डीडीएल) से निपटने चाहिए, और MySQL एन्हांसमेंट के साथ। –