picoSQL-2.0beta


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


Introduzione

Il progetto di picoSQL nasce col nome di picoGateway nel 1995 come driver ODBC per file COBOL. Consiste di una DLL scritta in C++ su sistema operativo Windows 3.1. All'inizio lo sforzo principale viene fatto per ottenere una buona compatiblità con i front-end esistenti (principalmente MS-Access, MS-Query e VisualBasic) e per vedere come normalizzata una base dati formata da files COBOL che normalizzata non lo è mai.

Il successo ottenuto consente di sviluppare ulteriormente il prodotto, raffinando l'ottimizzatore delle query e implementando un SQL abbastanza esteso, a esclusione del DDL (Data Description Language).

Viene in seguito realizzata una versione client/server, chiamata PicoDb, capace di girare su UNIX e di gestire file in formato proprio (picoIsam) oppure interfacciando direttamente il file manager del COBOL Microfocus.

PicoSQL Open Sources viene distribuito sotto licenza GPL; esso deriva da PicoDb (che rimane un prodotto proprietario di Picosoft) con in più alcuni statement SQL-DDL (CREATE/DROP TABLE/INDEX) ed escludendo tutta la parte che riguarda la gestione dei file COBOL (tipi variabili COBOL, normalizzazione etc.). La libreria C/C++ che permette di accedere al database da programmi scritti in questo linguaggio usando le API ODBC 2.5 (modulo picoSqlNet) viene rilasciata sotto licenza LGPL; questo permette di linkarla anche con programmi che non hanno licenza GPL.

PicoSQL può essere utilizzato da applicazioni Windows (come MS-ACCESS, MS-Query, VB etc.) in modalità client/server utilizzando il driver ODBC picoSQLNet
Può inoltre essere utilizzato da programmi Java tramite l'apposito driver JDBC compreso nella distribuzione.
Può infine essere usato da programmi scritti in C e C++ tramite il suo set di API conforme a ODBC 2.5.

PicoSQL manca al momento di alcune caratteristiche comuni ai RDBMS commerciali più diffusi (come i concetti di schema e catalogo e la gestione dei permessi agli utenti che però può essere ottenuta usando i permessi del sistema operativo ospite) ma sono proprio queste mancanze a renderlo particolarmente semplice da installare e usare e veloce nelle connessioni e nelle query. Per questi motivi, a nostro avviso, è particolarmente adatto per applicazioni Internet nelle quali viene richiesta una connessione per ogni pagina HTML.

Installazione

L'installazione è particolarmente semplice: se avete la distribuzione binaria, è sufficiente estrarre i file archiviati in una directory qualsiasi (\ per Windows NT/2000/XP) ed eseguire

startTestDb.sh (Unix/Linux)
startTestDb.bat (Windows)

per attivare il DB con un database di test già configurato.

N.B. su Windows NT/2000/XP viene attivato lo script setReg.js che inserisce alcune informazioni nel registry file. Fra tali informazioni è compresa la directory col DB di test che risulta corretta solo se si installa sotto \

A questo punto se si dispone di Java sul proprio computer, si può lanciare

iSQLViewerTest.sh (Unix/Linux)
iSQLViewerTest.bat (Windows)

per interrogare e amministrare il DB.
Se non dispone di Java si può usare il programma

picosql.sh (Unix/Linux)
picosql.bat (Windows)

che consente di inviare al DB delle query SQL da riga di comando.

La directory d'installazione contiene le seguenti sottodirectory:

PicoSQL consiste fondamentalmente in un programma, picosqld, da attivare tramite inetd (o xinetd) oppure picoserv. In tal modo diventa un servizio di rete legato a una porta, cioè a un numero intero compreso tra 1 e 65535; questo numero (per esempio 6789) deve essere sempre specificato sulla linea di comando di picosqld. Per esempio:

picosqld 6789

Per l'attivazione con inetd (o xinetd), si rimanda alla documentazione relativa. picoserv è un semplice programma che sostituisce inetd, principalmente per scopi di test o debugging: il suo uso è il seguente

picoserv [-f] <lineDiComando> <porta>
Nel nostro caso l'attivazione di picosqld può essere ottenuta con il comando seguente:
picoserv "picosqld 6789" 6789
Notare come il numero di porta è specificato due volte, una come argomento di picosqld e una come argomento di picoserv.

Quando viene fatta una richiesta di connessione picoSQL legge un file di configurazione dove trova le informazioni necessarie. Questo file è un file in formato testo su Unix/Linux mentre su Windows è il registry file di sistema e deve essere modificato con il programma regedit.

Un DB è semplicemente una directory del disco che contiene tutte le tabelle create dall'utente più altre tre, __TABLES __COLUMNS e __VIEWS, create automaticamente alla prima connessione al DB e contenenti il data dictionary. Gli attributi che modificano il comportamento di picoSQL sono i seguenti:
Nome Attributo Descrizione Valori ammessi
DataDirectory
Indica dove debbono essere memorizzati i files che contengono i dati. Questo attributo è l'unico obbligatorio. Nome completo di una directory
User
Indica che per l'accesso a questo DB è necessario presentarsi con lo specificato nome utente, altrimenti si ha un rifiuto della connessione. Nome utente
Password
Indica che per l'accesso a questo DB è necessario fornire la password specificata, altrimenti si ha un rifiuto della connessione. Stringa di caratteri
PLogFile
Indica un file nel quale viene memorizzata la traccia di tutte le operazioni eseguite. Tale file può essere utilizzato dal programma pIrecover per ricostruire il DB sulla base dell'ultimo back-up. Per attivare questo comportamento, è necessario anche mettere il database in modalità AUTOCOMMIT=OFF tramite le opportune chiamate ODBC o JDBC.
N.B. Nella presente release le operazioni sui BLOB non vengono completamente annullate da una rollback
Nome completo di un file
PTransaction
Attiva la modalità commit/rollback senza file di traccia. Per attivare questo comportamento, è necessario anche mettere il database in modalità AUTOCOMMIT=OFF tramite le opportune chiamate ODBC o JDBC.
N.B. Nella presente release le operazioni sui BLOB non vengono completaente annullate da una rollback
Y o N (default)
SuspensiveLock
Quando un programma cerca di bloccare una riga di tabella già bloccata da un altro programma, per esempio usando una "SELECT ... FOR UPDATE", esso riceve per default una segnalazione di errore opportuna. Mettendo questo attributo a Y, picoSQL rimane in attesa fin tanto che la riga non diventa disponibile. Y o N (default)
SysUser
Impostando questo parametro a Y, ogni volta che viene stabilita una connessione l'utente del DB diventa anche l'utente di sistema e agisce con i permessi di quest'utlimo. Affinchè questa opzione funzioni, il demone deve essere eseguito da un utente con sufficienti autorizzazioni (utente root per Linux/Unix, privilegi SeTcbPrivilege, SeAssignPrimary e SeIncreaseQuota su Windows; in Windows l'utente e la password devono corrispondere con quelle dell'utente di sistema). Y o N (default)
MaxOpenCache
Con questa opzione si può specificare il numero massimo di file da tenere aperti per velocizzarne il riuso. Il valore di default è 10 Un numero maggiore o uguale a 0
PicoOdbcTrace
Attiva un file di traccia delle operazioni eseguite sul DB a scopo di debugging o ottimizzazione. Il file di traccia ha nome /tmp/PICOSQL<pid>.log. Y o N

Accesso al DB

Per accedere ai dati contenuti in picoSQL si possono usare programmi scritti in Java da qualsiasi sistema operativo utilizzando il driver JDBC, oppure usare il driver ODBC per accedere da Windows. Applicazioni scritte in C/C++ in Unix/Linux debbono usare la librerie libpicosqlnet.a (libpicosqlnet.lib su Windows) che mette a disposizione un insieme di chiamate (API) uguali a quelle di ODBC. Tali librerie usano di nuovo il file picosql.ini (registry file per Windows) menzionato sopra per ricavare informazioni necessarie alla connessione. È possibile avere un unico file di configurazione sia per il server che per gli utenti, ma questo è possibile solo se si accede a DB sulla macchiana locale e se non ci sono problemi di sicurezza sugli accessi.

Una configurazione tipica più generale prevede un file /etc/picosql.ini (su Windows la sezione HKEY_LOCAL_MACHINE\Software\PicoSoft\PicoSQL) nel quale risiedono le informazioni riguardanti il server picoSQL e che è leggibile solo dall'utente che esegue picosqld; ciascun utente che vuole accedere ai dati del DB ha poi un file .picosql.ini sotto la propria home directory (su Windows la sezione HKEY_CURRENT_USER\Software\PicoSoft\PicoSQL) nel quale sono riportate le informazioni di connessione per i DB cui intende accedere.

Per un'applicazione client, ciascuna sezione corrisponde a un nome logico di DB (Data Dource Name in ODBC) che non deve necessariamente essere lo stesso del DB cui si intende accedere. Gli attributi riconosciuti all'interno della sezione sono i seguenti:

Nome Attributo Descrizione
Server
Indirizzo o nome di rete dell'host dove risiede il DB
Port
Il numero di porta su cui č in ascolto picoSQL
Name
Il nome sul server del DB cui si vuole accedere.