Corso Italia, 178 - 56125 Pisa
phone/fax +39 050 46380
e-mail picosoft@picosoft.it

What picoSQL is?
PicoSQL is a client/server relational database management system based on SQL language. Its main feature is the compactness, the small memory footprint, the simplicity of installation and configuration. However picoSQL supports a full-featured SQL, high cuncurrency and transactions.
Who developed it and why?
PicoSQL was fully developed by Picosoft in Pisa and it derives from am ODBC(tm) driver, developed by the same company, that allow to query COBOL files as a relational database, tipically using common graphical tools like MS-Access (tm), Excel(tm), Crystal report(tm) etc.
Transforming this driver in a RDBMS has been relatively simple, so the company decided to make it available as Open Source. The idea is that, if the product meets the favor of the community, opportunities of job, in terms of support of the product and customization, can arise for those who are going to use picoSQL in production environments. Because of its 'lightness' and modularity, picoSQL can easy be adapted for any computer, from the pocket-PC to the mainframe.
Why I should prefer picoSQL instead of MySQL or PostGreSql?
PicoSQL is easier to install and to configure than PostGreSQL and supports updatable views (rel. 1.2) that MySQL do not support yet. PicoSQL is a young product and allows everyone to partecipate to its development, suggesting priorities and requirements.
Can I use PicoSQL in a production environment?
PicoSQL is already used in production environments: for example it is used by the Viareggio municipality to manage press news. It is used to store the message of the picoSQL forum.
Will Picosoft supply som form of support and/or assistance on picoSQL?
Yes, Picosoft will supply support and assistance on picoSQL. At the moment this seems the only way to get some revenue to justify new investments in the product.
May I distribute picoSQL with programs distributed with different kind of license?
The GPL, the license under which picoSQL is distributed, allows to use it without limitations with applications of whichever type, provided that it is not linked to them. The LGPL, the license under which the picosqlnet library is distributed, allows to use it in linked applications of whichever type.
The name "pico" means that funcionality will be minimal forever to allows a small memory footprint and a better efficiency?
The name "picoSQL" derives from the company name "Picosoft". Functionalities will be extended, someone are already in progress, also based on the users demands gotten through the forum. However, we think that many non standard functionalities in other products are mainly useful to bind applications to a specific RDBMS.
Have you done some benchmark, comparing picoSQL with MySQL and PostGreSQL?
We made only one benchmark and we compared picoSQL only with Oracle because the benchmark program do not work correctly with MySQL and MS-SQLServer. This program is written in Java and you can find it at http://www.picosoft.it/picosql/benchmark_en.html: if there is someone able to get it working on MySQL or MS-SQLServer and she/he tell us how to do, we 'll publish the results. DB speed estimating is a very hard task because there are to many conditions to evaluate. Some of this conditions are: transaction on/off, isolation level, concurrency level, memory requirements, type of operations, indexes usage, table size, hardware configuration, S.O. etc. Anyway, computers are getting faster and faster, so we think that speed is not the most important feature. In our tests we paid particular attention on reliability and performance constancy. We saw that picoSQL performances do not degrade increasing the table size (using indices) and increasing concurrency, and that the memory footprint remains small, (about 1 Mb while MySQL uses about 8 Mb and Oracle 50 Mb; however the architectures are very different). Putting our Linux box under stress never stops the computer. At the moment these are the only information, we'll do other test in the future.
Has Picosql any limitation on transactions? Does it support more than one transaction for each connection?
There aren't any limitation on transaction, but each connection has only one active transaction.
Is Picosql SQL-99 complaint?
The reference standard is SQL-92 but some extension are implemented. You can find the supported syntax at http://www.picosoft.it/picosql/doc/en/sql.html
Does picoSQL allow sub-query?
Yes, but only in the INSERT statement using the EXISTS clause.
What about picoSQL and OpenOffice.org 1.1 ?
You can access picoSQL using the ODBC driver or the JDBC driver. There is a problem if you want to update the tables (affecting the ORACLE JDBC driver too), but you can find the solution of this problem on the OpenOffice site at the address: http://dba.openoffice.org/howto/IgnoreDriverPrivileges.html
First of all, any updatable table MUST have a PRIMARY KEY, then you can execute the following macro for each picoSQL data source:

REM  *****  BASIC  *****

Option Explicit

Sub Main
    Dim sDataSourceName as String
    sDataSourceName = InputBox( "Please enter the name of the data source:" )
(sDataSourceName )
End Sub

IgnoreDriverPrivileges(sDataSourceName as String )
    ' the data source context (ehm - the service name is historical :)
    Dim aContext as Object
    aContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )

    If ( Not aContext.hasByName( sDataSourceName ) ) Then
        MsgBox "There is no data source named " + sDataSourceName + "!"
        Exit Sub
    End If

    ' the data source
    Dim aDataSource as Object
    aDataSource = aContext.getByName( sDataSourceName )

    ' append the new
    Dim bFlag as Boolean
    bFlag = TRUE
    Dim aInfo as Variant
    aInfo = aDataSource.Info
    aInfo = AddInfo( aInfo, "IgnoreDriverPrivileges", bFlag )

    ' and write back
    aDataSource.Info = aInfo
    ' flush (not really necessary, but to be on the safe side :)
End Sub

Function AddInfo( aOldInfo() as new com.sun.star.beans.PropertyValue,sSettingsName as String, aSettingsValue as Variant ) as Variant
    Dim nLower as Integer
    Dim nUpper as Integer
    nLower = LBound( aOldInfo() )
    nUpper = UBound( aOldInfo() )

    ' look if the setting is already present
    Dim bNeedAdd as Boolean
    bNeedAdd = TRUE

    Dim i As Integer
    For i = nLower To nUpper
        If ( aOldInfo( i ).Name = sSettingsName ) Then
            aOldInfo( i ).Value = aSettingsValue
            bNeedAdd = FALSE
        End If
    Next i

    ' allocate the new array
    Dim nNewSize as Integer
    nNewSize = ( nUpper - nLower )
    If bNeedAdd Then nNewSize = nNewSize + 1
    Dim aNewInfo( nNewSize ) as new com.sun.star.beans.PropertyValue

    ' copy the elements (a simply copy does not work in Basic)
    For i = nLower To nUpper
        aNewInfo( i ) = aOldInfo( i )
    Next i

    ' append the new setting, if necessary
    If ( bNeedAdd ) Then
        aNewInfo( nUpper + 1 ).Name = sSettingsName
        aNewInfo( nUpper + 1 ).Value = aSettingsValue
    End If

    AddInfo = aNewInfo()
End Function

We tried with both ODBC and JDBC drivers and it seems work fine.

SourceForge.net Logo

Last update: 2003-03-28