# Rails 1.2.6 errors on Oracle 8i DB

**URL:** <https://www.ruby-forum.com/t/rails-1-2-6-errors-on-oracle-8i-db/144734>\
**Category:** Rails\
**Created:** [August 1, 2008, 4:28pm UTC](https://www.ruby-forum.com/t/rails-1-2-6-errors-on-oracle-8i-db/144734 "2008-08-01T16:28:14Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![miclab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a3d4f5/32.png) [@miclab](https://www.ruby-forum.com/u/miclab)\
**Post date:** [August 1, 2008, 4:28pm UTC](https://www.ruby-forum.com/t/rails-1-2-6-errors-on-oracle-8i-db/144734/1 "2008-08-01T16:28:14Z")

</div>

Hi all,

I’m getting some OCI8 driver errorsd when migrating my Rails app from  
PostgreSQL and MySQL to Oracle 8i DB.

My application’s environment:  
Rails 1.2.6  
Oracle 8i  
Windows XP PRO

The errors occurs in two areas:

1. 

The “has\_and\_belongs\_to\_many” method generates SQL statement that  
Oracle 8i doesn’t like at all:

My model:  
class ProductLink \< ActiveRecord::Base  
has\_and\_belongs\_to\_many :products,  
:join\_table =\> ‘products\_product\_links’  
end

The Oracle error and SQL:  
OCIError: ORA-00933: SQL command not properly ended: SELECT \* FROM  
product\_links INNER JOIN products\_product\_links ON product\_links.id =  
products\_product\_links.product\_link\_id WHERE  
(products\_product\_links.product\_id = 2 ) )

Stacktrace:  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/connection\_adapters/abstract\_adapter.rb:128:in  
`log' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:222:in`execute’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/connection\_adapters/oracle\_adapter.rb:490:in  
`select' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in`select\_all’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/base.rb:427:in  
`find_by_sql' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:997:in`find\_every’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/base.rb:418:in  
`find' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb:67:in`find’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/associations/association\_collection.rb:163:in  
`find_target' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:131:in`load\_target’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/associations/association\_proxy.rb:122:in  
`method_missing' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb:91:in`method\_missing’  
C:/cvsroot/PORTAL0101/portal/app/views/your\_devices/\_third\_levels.rhtml:10:in  
`_run_rhtml_47app47views47your_devices47_third_levels46rhtml' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in`send’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/base.rb:325:in  
`compile_and_render_template' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:301:in`render\_template’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/base.rb:260:in  
`globalize_old_render_file' C:/cvsroot/PORTAL0101/portal/vendor/plugins/globalize/lib/globalize/rails/action_view.rb:18:in`render\_file’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/base.rb:275:in  
`render' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/partials.rb:59:in`render\_partial’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/benchmarking.rb:26:in  
`benchmark' C:/ruby/lib/ruby/1.8/benchmark.rb:293:in`measure’  
C:/ruby/lib/ruby/1.8/benchmark.rb:307:in `realtime' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:26:in`benchmark’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/partials.rb:58:in  
`render_partial' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:287:in`render’  
C:/cvsroot/PORTAL0101/portal/app/views/your\_devices/info.rhtml:42:in  
`_run_rhtml_47app47views47your_devices47info46rhtml' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:325:in`send’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/base.rb:325:in  
`compile_and_render_template' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_view/base.rb:301:in`render\_template’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_view/base.rb:260:in  
`globalize_old_render_file' C:/cvsroot/PORTAL0101/portal/vendor/plugins/globalize/lib/globalize/rails/action_view.rb:18:in`render\_file’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:812:in  
`render_file' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:717:in`render\_with\_no\_layout’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/layout.rb:247:in  
`render_without_benchmark' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:50:in`render’  
C:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:50:in`render’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:1102:in  
`perform_action_without_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:696:in`call\_filters’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/filters.rb:688:in  
`perform_action_without_benchmark' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in`perform\_action\_without\_rescue’  
C:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in`perform\_action\_without\_rescue’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/rescue.rb:83:in  
`perform_action' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in`send’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:435:in  
`process_without_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:684:in`process\_without\_session\_management\_support’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/session\_management.rb:114:in  
`process_without_test' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/test_process.rb:15:in`process’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:334:in  
`process' C:/cvsroot/PORTAL0101/portal/vendor/rails/railties/lib/dispatcher.rb:41:in`dispatch’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/integration.rb:267:in  
`process' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:152:in`get’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/integration.rb:508:in  
`send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:508:in`get’  
test/integration/pmp\_test.rb:59:in `test_your_devices' C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in` **send** ’  
C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in `run' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:463:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in `run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in`each’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in `run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in `each' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in  
`run_suite' C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:67:in`start\_mediator’  
C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:41:in  
`start' C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:216:in `run' C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:12:in`run’  
C:/ruby/lib/ruby/1.8/test/unit.rb:278  
C:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake\_test\_loader.rb:5

1. 

I’m getting the same error when invoking the find method with the  
“:include” option:

My model’s find method:  
Ticket.find\_all\_by\_status(‘open’, :include =\> [:user, :ticket\_category])

The Oracle error and SQL:  
OCIError: ORA-00933: SQL command not properly ended: SELECT tickets.id  
AS t0\_r0, tickets.user\_id AS t0\_r1, tickets.priority AS t0\_r2,  
tickets.status AS t0\_r3, tickets.ticket\_category\_id AS t0\_r4,  
tickets.subject AS t0\_r5, tickets.body AS t0\_r6, tickets.created\_at AS  
t0\_r7, tickets.updated\_at AS t0\_r8, tickets.closed\_at AS t0\_r9, users.id  
AS t1\_r0, users.role\_id AS t1\_r1, users.subscriber\_id AS t1\_r2,  
users.setting\_method AS t1\_r3, users.name AS t1\_r4, users.email AS  
t1\_r5, users.hashed\_password AS t1\_r6, users.salt AS t1\_r7,  
users.reset\_code AS t1\_r8, users.created\_at AS t1\_r9, users.logged\_at AS  
t1\_r10, ticket\_categories.id AS t2\_r0, ticket\_categories.name AS t2\_r1  
FROM tickets LEFT OUTER JOIN users ON users.id = tickets.user\_id LEFT  
OUTER JOIN ticket\_categories ON ticket\_categories.id =  
tickets.ticket\_category\_id WHERE (tickets.status = ‘open’ AND  
tickets.user\_id = 1) )

Stacktrace:  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/connection\_adapters/abstract\_adapter.rb:128:in  
`log' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb:222:in`execute’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/connection\_adapters/oracle\_adapter.rb:490:in  
`select' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in`select\_all’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/associations.rb:1187:in  
`select_all_rows' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1044:in`find\_with\_associations’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/associations.rb:1042:in  
`catch' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/associations.rb:1042:in`find\_with\_associations’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/base.rb:996:in  
`find_every' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active_record/base.rb:1219:in`send’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/base.rb:1219:in  
`method_missing' C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/deprecation.rb:44:in`silence’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/activerecord/lib/active\_record/base.rb:1219:in  
`method_missing' C:/cvsroot/PORTAL0101/portal/app/models/ticket.rb:41:in`find\_ticket\_by\_user\_and\_status’  
C:/cvsroot/PORTAL0101/portal/app/models/ticket.rb:27:in  
`find_pending' C:/cvsroot/PORTAL0101/portal/app/controllers/tickets_controller.rb:49:in`pending’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:1101:in  
`send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:1101:in`perform\_action\_without\_filters’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/filters.rb:696:in  
`call_filters' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/filters.rb:688:in`perform\_action\_without\_benchmark’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/benchmarking.rb:66:in  
`perform_action_without_rescue' C:/ruby/lib/ruby/1.8/benchmark.rb:293:in`measure’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/benchmarking.rb:66:in  
`perform_action_without_rescue' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/rescue.rb:83:in`perform\_action’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/base.rb:435:in  
`send' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:435:in`process\_without\_filters’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/filters.rb:684:in  
`process_without_session_management_support' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/session_management.rb:114:in`process\_without\_test’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/test\_process.rb:15:in  
`process' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/base.rb:334:in`process’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/railties/lib/dispatcher.rb:41:in  
`dispatch' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:267:in`process’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/integration.rb:152:in  
`get' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:116:in`follow\_redirect!’  
C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action\_controller/integration.rb:134:in  
`post_via_redirect' ./test/integration/tickets_test.rb:70:in`create\_ticket’  
./test/integration/tickets\_test.rb:29:in `test_ticket_life_cycle' C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in` **send** ’  
C:/ruby/lib/ruby/1.8/test/unit/testcase.rb:78:in `run' C:/cvsroot/PORTAL0101/portal/vendor/rails/actionpack/lib/action_controller/integration.rb:463:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in `run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in`each’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in `run' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:34:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in `each' C:/ruby/lib/ruby/1.8/test/unit/testsuite.rb:33:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:46:in  
`run_suite' C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:67:in`start\_mediator’  
C:/ruby/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:41:in  
`start' C:/ruby/lib/ruby/1.8/test/unit/ui/testrunnerutilities.rb:29:in`run’  
C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:216:in `run' C:/ruby/lib/ruby/1.8/test/unit/autorunner.rb:12:in`run’  
C:/ruby/lib/ruby/1.8/test/unit.rb:278  
C:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake\_test\_loader.rb:5

Everything works great with the others databases, so i think there’s a  
problem with the oracle\_adapter.

Anyone encounters my same problems and have found a solution for it?  
I ggogle them, but was unable to find anything.

Greetings  
Michele

---

<div class="post-metadata">

**Author:** ![miclab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a3d4f5/32.png) [@miclab](https://www.ruby-forum.com/u/miclab)\
**Post date:** [August 1, 2008, 4:33pm UTC](https://www.ruby-forum.com/t/rails-1-2-6-errors-on-oracle-8i-db/144734/2 "2008-08-01T16:33:56Z")

</div>

Some additional info:

Installed Gems:  
activerecord-oracle\_enhanced-adapter (1.1.5)  
cgi\_multipart\_eof\_fix (2.5.0)  
fastthread (1.0.1)  
fxri (0.3.6)  
fxruby (1.6.12)  
gem\_plugin (0.2.3)  
hoe (1.7.0)  
hpricot (0.6)  
image\_science (1.1.3)  
log4r (1.0.5)  
mongrel (1.1.3)  
mongrel\_service (0.3.4)  
mysql (2.7.3)  
rake (0.8.1, 0.7.3)  
ruby-postgres (0.7.1.2006.04.06)  
rubyforge (1.0.0)  
rubygems-update (1.2.0)  
RubyInline (3.7.0)  
sources (0.0.1)  
sqlite3-ruby (1.2.2)  
win32-api (1.2.0, 1.0.4)  
win32-clipboard (0.4.3)  
win32-dir (0.3.2)  
win32-eventlog (0.4.6)  
win32-file (0.5.4)  
win32-file-stat (1.2.7)  
win32-process (0.5.3)  
win32-sapi (0.1.4)  
win32-service (0.5.2)  
win32-sound (0.4.1)  
windows-api (0.2.0)  
windows-pr (0.8.0, 0.7.2)

Thank u

---

<div class="post-metadata">

**Author:** ![miclab](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a3d4f5/32.png) [@miclab](https://www.ruby-forum.com/u/miclab)\
**Post date:** [September 11, 2008, 2:39pm UTC](https://www.ruby-forum.com/t/rails-1-2-6-errors-on-oracle-8i-db/144734/3 "2008-09-11T14:39:13Z")

</div>

I’ve solved my problem.

It seems that our old friend Oracle 8 does not support ANSI SQL for the  
join statements.

Also if u open the oracle\_adapter.rb file of ActiveRecord library, it  
says:

# Support for Oracle8 is limited by Rails’ use of ANSI join syntax,

which

# is supported in Oracle9i and later. You will need to use #finder\_sql

for

# has\_and\_belongs\_to\_many associations to run against Oracle8.

In short u have to substitute all the JOINs statement with the following  
syntax and call it with the :finder\_sql option (or with the  
select\_by\_sql method):

INNER JOINs:  
SELECT table1.value, table2.value FROM table1 INNER JOIN table2 ON  
table1.value\_id = table2.id

is trasformed in:

SELECT table1.value, table2.value FROM table1, table2 WHERE  
table1.join\_value = table2.join\_value

LEFT OUTER JOINS:  
SELECT table1.value, table2.value FROM table1 LEFT OUTER JOIN table2 ON  
table1.join\_value = table2.join\_value

is trasformed in:

SELECT table1.value, table2.value FROM table1, table2 WHERE  
table1.join\_value = table2.join\_value(+)

All this trasformation are mandatory in absence of a valid Oracle 8  
adapter…  
Hope this will help, for further info:

> **[results of left outer join and =(+) in oracle are different - Oracle Database](https://bytes.com/topic/oracle/answers/639225-results-left-outer-join-oracle-different)**
>
> results of left outer join and =(+) in oracle are different. Oracle Database Forums on Bytes.

Greetings  
Michele Costa

Michele Costa wrote:

> Some additional info:
> 
> Installed Gems:  
> activerecord-oracle\_enhanced-adapter (1.1.5)  
> cgi\_multipart\_eof\_fix (2.5.0)  
> fastthread (1.0.1)  
> fxri (0.3.6)  
> fxruby (1.6.12)  
> gem\_plugin (0.2.3)  
> hoe (1.7.0)  
> hpricot (0.6)  
> image\_science (1.1.3)  
> log4r (1.0.5)  
> mongrel (1.1.3)  
> mongrel\_service (0.3.4)  
> mysql (2.7.3)  
> rake (0.8.1, 0.7.3)  
> ruby-postgres (0.7.1.2006.04.06)  
> rubyforge (1.0.0)  
> rubygems-update (1.2.0)  
> RubyInline (3.7.0)  
> sources (0.0.1)  
> sqlite3-ruby (1.2.2)  
> win32-api (1.2.0, 1.0.4)  
> win32-clipboard (0.4.3)  
> win32-dir (0.3.2)  
> win32-eventlog (0.4.6)  
> win32-file (0.5.4)  
> win32-file-stat (1.2.7)  
> win32-process (0.5.3)  
> win32-sapi (0.1.4)  
> win32-service (0.5.2)  
> win32-sound (0.4.1)  
> windows-api (0.2.0)  
> windows-pr (0.8.0, 0.7.2)
> 
> Thank u
