<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -21,7 +21,7 @@ spec = Gem::Specification.new do |s|
   s.require_path     = 'lib'
   s.files            = FileList[ '{lib,spec}/**/*.rb', 'spec/spec.opts', 'Rakefile', *s.extra_rdoc_files ]
   s.add_dependency('dm-core', '= 0.9.0')
-  s.add_dependency('json_pure')
+  s.add_dependency('yajl-ruby')
 end
 
 task :default =&gt; [ :spec ]</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,5 @@
 require 'rubygems'
+require 'yajl/http_stream'
 require 'data_objects'
 require 'do_dbslayer/connection.rb'
 require 'do_dbslayer/command.rb'</diff>
      <filename>lib/do_dbslayer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,4 @@
-require 'net/http'
-require 'json/pure'
+require 'uri'
 
 module DataObjects
   module Dbslayer
@@ -29,38 +28,35 @@ module DataObjects
       end
 
       def execute(args)
-        query = query_url(args)        
-        response = Net::HTTP.get_response(query.host, &quot;#{query.path}?#{query.query}&quot;, query.port)
-
-        if response.is_a?(Net::HTTPSuccess)
-          dbresponse = JSON.parse(response.body)
-          
-          if dbresponse['MYSQL_ERROR']
-            raise DbslayerException, &quot;MySQL Error #{dbresponse['MYSQL_ERRNO']}: #{dbresponse['MYSQL_ERROR']}&quot;
-          elsif dbresponse['RESULT']
-            result = dbresponse['RESULT']
-            case result
-            when Hash
-              return result
-            when Array
-              result.map { |r| return r }
-            else  
-              raise DbslayerException, &quot;Unknown format for SQL results from DBSlayer&quot;
-            end
-          elsif dbresponse['SUCCESS']
-            return dbresponse['SUCCESS']
-          else
-            raise DbslayerException, &quot;Unknown response type from DBSlayer&quot;
+        uri = ::URI.parse(query_url(args).to_s)
+        dbresponse = Yajl::HttpStream.get(uri)
+        
+        if dbresponse['MYSQL_ERROR']
+          raise DbslayerException, &quot;MySQL Error #{dbresponse['MYSQL_ERRNO']}: #{dbresponse['MYSQL_ERROR']}&quot;
+        elsif dbresponse['RESULT']
+          result = dbresponse['RESULT']
+          case result
+          when Hash
+            return result
+          when Array
+            result.map { |r| return r }
+          else  
+            raise DbslayerException, &quot;Unknown format for SQL results from DBSlayer&quot;
           end
-
+        elsif dbresponse['SUCCESS']
+          return dbresponse['SUCCESS']
         else
-          raise DbslayerWebException, &quot;Web error #{response.class}: #{response.body}&quot;
+          raise DbslayerException, &quot;Unknown response type from DBSlayer&quot;
         end
+      rescue Yajl::ParseError =&gt; e
+        raise Yajl::ParseError, &quot;JSON parsing error #{e.class}: #{e.message}&quot;
+      rescue Exception =&gt; e
+        raise DbslayerWebException, &quot;Web error #{e.class}: #{e.message}&quot;
       end
 
       def query_url(args)
         sql = args.size &gt; 0 ? escape_sql(args) : @text
-        query = URI.encode({ 'SQL' =&gt; sql }.to_json)
+        query = ::URI.encode(Yajl::Encoder.encode({ 'SQL' =&gt; sql }))
         Addressable::URI.parse(&quot;#{@connection.db_url}?#{query}&quot;)
       end
 </diff>
      <filename>lib/do_dbslayer/command.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,58 +7,50 @@ describe DataObjects::Dbslayer::Command do
     @connection   = DataObjects::Dbslayer::Connection.new('dbslayer://localhost')
   end
   
+  before(:each) do
+    @http_response = &quot;HTTP/1.0 200 OK\r\n&quot;
+    @http_response &lt;&lt; &quot;Vary: Accept-Encoding\r\n&quot;
+    @http_response &lt;&lt; &quot;Content-Type: application/json\r\n&quot;
+    @http_response &lt;&lt; &quot;Accept-Ranges: bytes\r\n&quot;
+    @http_response &lt;&lt; &quot;Last-Modified: Thu, 30 Apr 2009 04:36:11 GMT\r\n&quot;
+    @http_response &lt;&lt; &quot;Connection: close\r\n&quot;
+    @http_response &lt;&lt; &quot;Date: Fri, 08 May 2009 06:21:36 GMT\r\n&quot;
+    @http_response &lt;&lt; &quot;Server: lighttpd/1.4.22\r\n&quot;
+  end
+  
   it 'should return a proper command type' do
     command = @connection.create_command 'FAKE QUERY'
     command.class.should == DataObjects::Dbslayer::Command
   end
 
   it 'should return proper result on a non-reader query' do
-    response = Net::HTTPOK.new('get', 200, 'found')
-    response.expects(:body).returns(@non_query)
-    Net::HTTP.expects(:get_response).returns(response)
-
+    @http_response &lt;&lt; &quot;Content-Length: #{@non_query.size}\r\n&quot;
+    @http_response &lt;&lt; &quot;\r\n&quot; # end of the headers
+    @http_response &lt;&lt; @non_query
+    @http_response &lt;&lt; &quot;\r\n&quot; # end of the response body
+    non_query = StringIO.new(@http_response)
+    TCPSocket.should_receive(:new).and_return(non_query)
+    non_query.should_receive(:write)
+    non_query.should_receive(:close)
     command = @connection.create_command('FAKE QUERY')
     result = command.execute_non_query
     result.affected_rows.should == 5
   end
 
   it 'should return a reader when executing a query' do
-    response = Net::HTTPOK.new('get', 200, 'found')
-    response.expects(:body).returns(@reader_query)
-    Net::HTTP.expects(:get_response).returns(response)
-
+    @http_response &lt;&lt; &quot;Content-Length: #{@non_query.size}\r\n&quot;
+    @http_response &lt;&lt; &quot;\r\n&quot; # end of the headers
+    @http_response &lt;&lt; @reader_query
+    @http_response &lt;&lt; &quot;\r\n&quot; # end of the response body
+    reader_query = StringIO.new(@http_response)
+    TCPSocket.should_receive(:new).and_return(reader_query)
+    reader_query.should_receive(:write)
+    reader_query.should_receive(:close)
     command = @connection.create_command('FAKE QUERY')
     result = command.execute_reader
     result.class.should == DataObjects::Dbslayer::Reader
   end
   
-  it 'should escape strings properly' do
-    command = @connection.create_command('FAKE QUERY ?')
-    query = command.escape_sql(['blah'])
-    query.should == &quot;FAKE QUERY 'blah'&quot;
-  end
-
-  it 'should escape dates properly' do
-    date = Date.parse('Sun May 18 16:22:47 -0700 2008')
-    command = @connection.create_command('FAKE QUERY ?')
-    query = command.escape_sql([date])
-    query.should == &quot;FAKE QUERY '2008-05-18'&quot;
-  end
-
-  it 'should escape times properly' do
-    time = Time.parse('Sun May 18 16:22:47 -0700 2008')
-    command = @connection.create_command('FAKE QUERY ?')
-    query = command.escape_sql([time])
-    query.should == &quot;FAKE QUERY '2008-05-18 16:22:47'&quot;
-  end
-
-  it 'should escape DateTimes properly' do
-    datetime = DateTime.parse('Sun May 18 16:22:47 -0700 2008')
-    command = @connection.create_command('FAKE QUERY ?')
-    query = command.escape_sql([datetime])
-    query.should == &quot;FAKE QUERY '2008-05-18 16:22:47'&quot;
-  end
-
   it 'should return an escaped query URL' do
     command = @connection.create_command('FAKE QUERY ?')
     query = command.query_url(['blah'])</diff>
      <filename>spec/command_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,11 +2,10 @@ require File.join(File.dirname(__FILE__), '/spec_helper')
 
 describe DataObjects::Dbslayer::Reader do
   before :all do
-    @reader_query = File.new(File.join(File.dirname(__FILE__), 'fixtures', 'reader_result.txt')).read
-    @types_query  = File.new(File.join(File.dirname(__FILE__), 'fixtures', 'types_test.txt')).read
-    @reader       = DataObjects::Dbslayer::Reader.new( JSON.parse(@reader_query)['RESULT'] )
-
-    @types_reader = DataObjects::Dbslayer::Reader.new( JSON.parse(@types_query)['RESULT'] )
+    @reader_query = File.new(File.join(File.dirname(__FILE__), 'fixtures', 'reader_result.txt'))
+    @types_query  = File.new(File.join(File.dirname(__FILE__), 'fixtures', 'types_test.txt'))
+    @reader       = DataObjects::Dbslayer::Reader.new( Yajl::Parser.parse(@reader_query)['RESULT'] )
+    @types_reader = DataObjects::Dbslayer::Reader.new( Yajl::Parser.parse(@types_query)['RESULT'] )
     @types_reader.next!
   end
 </diff>
      <filename>spec/reader_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,12 @@
 require 'rubygems'
+require 'stringio'
 gem 'rspec', '&gt;=1.1.3'
 require 'spec'
 require 'pathname'
 require 'data_mapper'
+require 'yajl'
 
 $LOAD_PATH &lt;&lt; File.join(File.dirname(__FILE__), '..', 'lib')
 
 DataMapper.setup(:default, 'mysql://localhost/test')
-require 'dbslayer_adapter'
-
-Spec::Runner.configure do |config|
-  config.mock_with :mocha
-end
\ No newline at end of file
+require 'dbslayer_adapter'
\ No newline at end of file</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6547d67f1e7c3b25de418914cfab6fc868fef1a0</id>
    </parent>
  </parents>
  <author>
    <name>Brian Lopez</name>
    <email>seniorlopez@gmail.com</email>
  </author>
  <url>http://github.com/krobertson/dm-dbslayer/commit/c3fc68b89047756548ffd086c640ca8f8ce17088</url>
  <id>c3fc68b89047756548ffd086c640ca8f8ce17088</id>
  <committed-date>2009-06-23T12:25:26-07:00</committed-date>
  <authored-date>2009-06-23T00:37:14-07:00</authored-date>
  <message>initial conversion to yajl-ruby. HTTP request JSON responses are now parsed directly off the socket *as it's being received*

Signed-off-by: Ken Robertson &lt;ken@qgyen.net&gt;</message>
  <tree>5092b77ccaca3c03a86c20f2c85321a177958308</tree>
  <committer>
    <name>Ken Robertson</name>
    <email>ken@qgyen.net</email>
  </committer>
</commit>
