FeResPost Web Site                     FeResPost Online User Manual

IV.2.6.1 Saving objects in an SQLite database

To use SQLite, one first requires the corresponding ruby gem:

    require "rubygems"  
    require "sqlite3"

Then, the database can be created:

    fName="brol.fdb"  
    if (File::exists?(fName))  
        sqldb = SQLite3::Database.open( fName )  
    else  
        sqldb = SQLite3::Database.new( fName )  
sqldb.execute <<SQL  
    PRAGMA auto_vacuum = FULL  
SQL  
    end

In this case only one SQL table is created in the database. The columns correspond to several data associated with each individual Results, and the BLOB corresponding to the Result itself:

sqldb.execute <<SQL  
    CREATE TABLE IF NOT EXISTS dynam_results_1 (  
        lcName TEXT,  
        scName TEXT,  
        resName TEXT,  
        tensorOrder INTEGER,  
        intId1 INTEGER,  
        intId2 INTEGER,  
        realId1 REAL,  
        realId2 REAL,  
        size INTEGER,  
        result BLOB,  
        PRIMARY KEY(lcName,scName,resName)  
    );  
SQL

Finally, one loops on xdb attachment Results. For each load case and Result name, one extracts the Results corresponding to each subcase, and inserts it into the database:

    db.attachXdb(xdbFileName)  
 
    lcNames=db.getAttachmentLcNames(xdbFileName)  
    scNames=db.getAttachmentScNames(xdbFileName)  
    resNames=db.getAttachmentResNames(xdbFileName)  
 
    lcNames.each do |lcName|  
        resNames.each do |resName|  
            results=db.getAttachmentResults(xdbFileName,lcName,scNames,resName)  
            if (results) then  
                results.each do |key,res|  
                    puts key  
                    sqldb.execute( "insert or replace into  
                        dynam_results_1 values (?,?,?,?,?,?,?,?,?,?)",  
                        lcName,key[1],resName,res.TensorOrder,  
                        res.getIntId(0),res.getIntId(1),  
                        res.getRealId(0),res.getRealId(1),res.Size,  
                        SQLite3::Blob.new(res.toBlob()))  
                end  
            else  
                puts "NO FOR" + lcName + resName  
            end  
        end

The example is provided in file "RUBY/EX20/rehashDynamicResults.rb"