Skip to content
This repository has been archived by the owner on Feb 19, 2018. It is now read-only.

voormedia/sedna-ruby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sedna XML database client library

This library provides a Ruby client for Sedna, an open-source, native XML database system. The client is a Ruby extension that uses the official C driver that is shipped as part of the Sedna distribution.

Browse the Ruby API documentation online at http://sedna.rubyforge.org/doc

Sedna provides a full range of core database services – persistent storage, ACID transactions, security, indices, hot backup. Flexible XML processing facilities include W3C XQuery implementation, tight integration of XQuery with full-text search facilities and a node-level update language.

For more information about the Sedna XML database system, see the project page at modis.ispras.ru/sedna

About the client library

Author: Rolf Timmermans (r.timmermans at voormedia.com)

Copyright 2008-2010 Voormedia B.V.

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Current version

The current version of this library is 0.6.0. This is a stable release. For a complete overview all recent and previous changes, see CHANGES.rdoc.

Requirements

The Sedna client library ships with a copy of the official C driver, which will be built for your platform automatically when you install it.

The library has been tested with Ruby 1.8.6 and above, including Ruby 1.9.1 and Ruby 1.9.2.

Installation

Install the Ruby client library as a gem.

% gem install sedna

If you do not wish to use the bundled driver, you have the option to use a version installed on your system. You can specify in which location the library and header files located by adding the --with-sedna-dir option when installing.

% gem install sedna -- --with-sedna-dir=/path/to/sedna

Usage

After installation, require the sedna library in order to start using it.

require "rubygems"
require "sedna"

To start querying a database, create a new connection with the Sedna.connect method. When a block is given, the Sedna connection object will be returned which can be used to execute database statements. See the documentation of the Sedna class for more details.

connection_details = {
  :database => "my_db",
  :host => "localhost",
  :username => "SYSTEM",
  :password => "MANAGER",
}

Sedna.connect connection_details do |sedna|
  # Start querying the database.
  sedna.execute "create document 'my_doc'"                                  #=> nil
  sedna.execute "update insert <msg>Hello world!</msg> into doc('my_doc')"  #=> nil
  sedna.execute "doc('my_doc')/msg/text()"                                  #=> ["Hello world!"]
  # The connection is closed automatically for us.
end

Use Sedna#load_document to load a document into the database from a string or file.

sedna.load_document "<msg>Hello world!</msg>", "my_doc", "my_collection"
sedna.execute "doc('my_doc', 'my_collection')/msg/text()"                   #=> ["Hello world!"]

File.open "document.xml" do |file|
  sedna.load_document file, "my_doc2", "my_collection"
end

Use Sedna#transaction to wrap multiple database statements in a transaction. This ensures that either all or none of these statements are executed. If something goes wrong halfway, the previously executed statements that are part of the transaction will be rolled back.

sedna.transaction do
  amount = 100
  sedna.execute "update replace $balance in doc('my_account')/balance
                 with <balance>{$balance - #{amount}}</balance>"
  sedna.execute "update replace $balance in doc('your_account')/balance
                 with <balance>{$balance + #{amount}}</balance>"
  # If the second statement fails, the first will be rolled back. Only if
  # both statements succeed will the changes become permanent.
end

For detailed usage information, see http://sedna.rubyforge.org/doc