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

- Licenza GPL
- Licenza GPL in italiano
- Introduzione
- Installazione
- Accesso al DB
- Linguaggio SQL
- Database di test
- Tools
  - Driver ODBC - Driver ODBC per Win32
  - Driver JDBC - Driver JDBC per Java
  - iSQLViewer - tool scritto in linguaggio Java, non realizzato da Picosoft per l'amministrazione/interrogazione del DB che ha una propria licenza (vedi isql.sourceforge.net)
  - picosql - Tool per l'interrogazione del DB da linea comando
  - pIcheck - Tool per il ripristino di file danneggiati
  - pIrecover - Tool per il ripristino del database sulla base dell'ultima copia e del file di log.
- Stored procedure

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:

- bin dove risiedono tutti i programmi eseguibili;
- lib dove risiedono le librerie (solo Unix/Linux);
- inc dove risiedono le gli header files per le compilazioni;
- java dove risiede il driver JDBC e le applicazioni scritte con linguaggio Java.
- doc dove risiede la documentazione.

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.

- Unix/LunixViene ricercato il file

      $HOME/.picosql.ini

  oppure, in mancanza di questo,

      /etc/picosql.ini

  In questo file possono essere presenti pių sezioni, caratterizzate da un nome racchiuso tra parentesi quadre su una singola linea. Ciascuna sezione può contenere più attributi, caratterizzati da un nome (il nome attributo), un segno di uguale (=) e un valore che termina all'interruzione della linea di testo. Le linee che iniziano con il carattere punto e virgola (;) oppure diesis (#) vengono considerati commenti.
  Ciascuna sezione corrisponde a un database e comprende informazioni come utente, password e locazione del DB. Nell'esempio seguente sono dichiarati due database, il primo, chiamato picoSqlTest, accessibile a chiunque mentre il secondo, chiamato rubrica può essere acceduto solo fornendo l'appropriato nome utente e password.

       [picoSqlTest]
       DataDirectory=/home/test.db

       [rubrica]
       DataDirectory=/home/rubrica.db
       User=pico
       Password=soft
       PicoOdbcTrace=NO
       SuspensiveLock=YES
       ; for picosql client only
       server=localhost
       port=6789

- Windows NT/2000/XP Su Windows la configurazione viene letta dal registry file a partire dalla chiave:

      HKEY_CURRENT_USER\Software\PicoSoft\PicoSQL

  oppure, in mancanza di questa,

      HKEY_LOCAL_MACHINE\Software\PicoSoft\PicoSQL

  Ogni chiave in questa sezione può corrispondere a un database. Sotto la chiave corrispondente al database possono essere definite delle stringhe, ciascuna delle quali corrisponde a un attributo del database, come utente, password e locazione del DB. Nell'esempio seguente sono dichiarati due database, il primo, chiamato picoSqlTest, accessibile a chiunque mentre il secondo, chiamato rubrica può essere acceduto solo fornendo l'appropriato nome utente e password.

       [HKEY_CURRENT_USER\Software\PicoSoft\PicoSQL\picoSqlTest]
       DataDirectory=C:\home\test.db

       [HKEY_CURRENT_USER\Software\PicoSoft\PicoSQL\rubrica]
       DataDirectory=C:\home\rubrica.db
       User=pico
       Password=soft
       PicoOdbcTrace=NO
       SuspensiveLock=YES
       server=localhost
       port=6789

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.