I am executing a query and trying to store it in a constant which was working fine until I made a change to the source file today, but it's confusing to me because I didn't change the query or alter any code that interacts with this query.
Here is the code:
require 'rexml/document' include REXML def parallel_sort(data, labels) #implement a basic ruby styled selection sort in to sort the data in descending order raise "unequal arrays" if data.length != labels.length 0.upto(data.length - 2) do |i| max = i # largest value (i+1).upto(data.length - 1) { |j| max = j if data[j] > data[max] } #try to find new max data[i], data[max], labels[i], labels[max] = data[max], data[i], labels[max], labels[i] if i != max #swap values in both arrays end return (data, labels) end def process_xml_files(filenames) builds = ["Total Builds", "Failed Builds", "Successful Builds"] outFile = File.new("gchart-data.txt", "w") #outFile = File.new("parallel_sort_test.txt", "w") yearly_data = [] yearly_labels = [] monthly_data = [] monthly_labels = [] failure_data = [] failure_labels = [] failure_percents = [] hash = [] #retrieve needed data from the XML file filenames.each do |filename| #create a document doc = Document.new(File.new(filename)) doc.elements.each("//row/field") do |e| name = e.attributes['name'] text = e.text #search for tags and append correct data to lists if builds.include?(name) hash.push(name) hash.push(text) else if name == "Month-Year" yearly_labels.push(text) elsif name == "Past-Year-Builds" yearly_data.push(text) elsif name == "Month-Day" monthly_labels.push(text) elsif name == "Past-Month-Builds" monthly_data.push(text) elsif name == "Failure Type" failure_labels.push(text) else temp = 100*(text.to_f() / FAILED_BUILDS.to_f()) failure_data.push(temp) failure_percents.push(((100*temp).round/100.0).to_s() + "%") end end end end #sort the failure_percents and failure_labels arrays together failure_percents, failure_labels = parallel_sort(failure_percents, failure_labels) outFile.puts hash outFile.puts "\nYearly Data\n#{yearly_data.join(",")}" outFile.puts yearly_labels outFile.puts "\nMonthly Data\n#{monthly_data.join(",")}" outFile.puts monthly_labels outFile.puts "\nFailure Data\n#{failure_data.join(",")}" outFile.puts failure_labels.zip(failure_percents).join("|") end def execute_queries() FAILED_BUILDS = `mysql -h hostname -u root -D database -e "SELECT COUNT(id) FROM builds WHERE buildstatus = 3 AND DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);"`.gsub!(/[A-Za-z()\s]+/,"") #get the total number of builds totalBuilds = `mysql -h hostname -u root -D database -X -e "SELECT COUNT(buildid) 'Total Builds' FROM builds WHERE DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);" > total-builds.xml` #get the number of successful builds successBuilds = `mysql -h hostname -u root -D database -X -e "SELECT COUNT(buildid) 'Successful Builds' FROM builds WHERE buildstatus = 2 AND DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);" > success-builds.xml` #get the number of failed builds failedBuilds = `mysql -h hostname -u root -D database -X -e "SELECT COUNT(buildid)'Failed Builds' FROM builds WHERE buildstatus = 3 AND DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);" > failed-builds.xml` #get the number of builds per month months = `mysql -h hostname -u root -D database -X -e "select count(id) as 'Past-Year-Builds', CONCAT(SUBSTR(MONTHNAME(submittime), 1,3), '-', YEAR(submittime)) as 'Month-Year' from builds where DATE(submittime) >= DATE_SUB(CURDATE(), interval 1 year) group by YEAR(submittime), MONTH(submittime);" > year-builds.xml` days = `mysql -h hostname -u root -D database -X -e "SELECT COUNT(id) AS 'Past-Month-Builds', CONCAT(SUBSTR(MONTHNAME(submittime), 1, 3), '-', DAY(submittime)) as 'Month-Day' FROM builds WHERE DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 30 day) GROUP BY MONTH(submittime), DAY(submittime);" > month-builds.xml` failures = `mysql -h hostname -u root -D database -X -e "select F.name 'Failure Type', count(B.id) 'Failure Count' from builds B JOIN failureareas F ON B.failurearea = F.id where Date(B.submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) AND B.buildstatus != 2 GROUP BY F.name;" > failures.xml` end def start() #grab data from the database execute_queries() #collect the xml files from the current directory filenames = Dir.glob("*.xml") #merge the xml files together finalXML = process_xml_files( filenames ) #clean up directory filenames.each do |filename| del = `rm #{filename}` end end #test for execution if __FILE__ == $0 start() end So can anyone tell me why this doesn't work? I am only assigning to the constant once.
Here is the error:
gchart-url.rb:14: syntax error gchart-url.rb:75: dynamic constant assignment FAILED_BUILDS = `mysql -h hostname -u root -D database -e "SELECT COUNT(id) FROM builds WHERE buildstatus = 3 AND DATE(submittime) >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);"`.gsub!(/[A-Za-z()\s]+/,"") ^ gchart-url.rb:114: syntax error Any help would be great. Thanks.
EDIT: Sorry for the long post
working fine until I made a changewhat exactly was the change?