Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

under construction

tree: 11c7f4dd3b

Fetching latest commit…

Cannot retrieve the latest commit at this time

README.rdoc

Query Test

Prerequisites

  • Ruby 1.9.2

  • Install gems listed in Gemfile (See below for how to install mysql gem.)

  • MySql installed and running. The supplied database.yml file specifies the 'test' database. You may wish to change that. This file uses the Rails format.

  • Create SQL log file from some other app that uses MySql with ActiveRecord using instructions below. Note that there is a sample log file in test/index_tester/fixture if you want to try it quickly.

How to Install MySql Gem on OSX Snow Leopard

If not using Bundler:

env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

If using Bundler:

  1. edit Gemfile to add line for mysql

  2. export ARCHFLAGS=“-arch x86_64”

  3. bundle config build.mysql –with-mysql-config=/usr/local/mysql/bin/mysql_config

  4. bundle install

Creating SQL Log File

If you don't have an appropriate app, you can use mine github.com/ghendry/demo-sinatra It already has the log notification code in main.rb and is otherwise the world's most boring web app, but it does have an index error to be found by IndexTester. Load it with several people with the same last name and different first names and then search by name to see the index error that will slow down queries.

For classy Sinatra apps, add the code in setup/index_tester/sinatra_notifications.rb to your Sinatra code, after the line

class App > Sinatra::Base

Specify the file name for the log file

For Rails 3 apps, copy notifications.rb from setup/index_tester to your application’s /config/initalizers directory. Specify the file name for the log file

How to Run

From root directory, run

ruby script/index_tester/write_index_tests.rb  mysql-query-file  database-yml-file > test-output.rb

You may also specify a third parameter to choose an environment other than development from the yml file, and a fourth parameter to change the default minimum query rating from 70 to some other number between 0 and 100

This script generates code in the test-output.rb file which should be moved to the test directory of your app that generated the MySql logs so it can run in your test suite. These tests run the queries so they are not suitable for unit testing. The only change you may need to make to the output file so your tests run is the path to you database.yml file.

RMU Versions

  • 1.0 first submission

  • 1.1 added generation of query tests

  • 1.2 added real MySql data access

Future Enhancements

  1. More databases. Start with PostgreSql then SQLite (but gem needs to be fixed to do explain correctl)

  2. Non-ActiveRecord databases.

  3. Package as gem.

License

Copyright © 2011 Ginny Hendry

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Something went wrong with that request. Please try again.