# 4th Dimension

4th Dimension è un database relazionale e un RAD, scritto da Laurent Ribardiere a metà degli anni 80 e ancora oggi prodotto e manutenuto dalla società francese 4D SAS.
Nato su Macintosh è disponibile dal 1993 anche su Windows; oltre al motore del database include anche la gestione dell'interfaccia e un linguaggio con molti comandi e la possibilità di plugin esterni per aggiungere funzionalità di videoscrittura, fogli di calcolo, connessione dati nativa a Oracle, MySQL, eccetera.
È inoltre incluso un webserver (negli anni scorsi la società aveva comprato la Starnine, produttrice del famoso web server Webstar per Macintosh, poi ceduta a Kerio).
Conta come programmatori molti consulenti in diverse società dove viene spesso utilizzato come middleware (software per le necessità operative dell'utente che non può richiedere funzioni particolari ai grossi sistemi informativi aziendali), ma è difficilmente inquadrabile nel mercato perché si pone a metà strada fra i database puri (Oracle, MS Sql, etc) e i database integrati in interfacce semplici (come Access o FileMaker).
Spesso è quindi usato in monoutenza per usi particolari, ma conta anche installazioni strategiche con centinaia di client e siti web.

## Standard supportati

* possibilità di generare applicazione pubblicabili su Mac App Store
* engine SQL aderisce allo standard SQL-92, con alcune limitazioni e alcune funzioni aggiuntive
* supporto all'SQL Pass-through, comunicazione diretta con data source esterni
* esecuzione diretta script PHP 5.3 con interprete compilato FastCGI
* supporto XML versione 1.0 con la libreria Xerces di Apache Foundation, sia lo standard DOM (Document Object Model) che il SAX (Simple API XML), la notazione XPath (per il DOM) e le trasformazioni tramite XSL style sheets (eXtended Stylesheet Language)
* gestione di quattro tipi di Metadati per le immagini: EXIF, GPS, IPTC e TIFF
* gestione del forma SVG (Scalable Vector Graphics), sia come visualizzazione che creazione e modifica
* supporto dell'architettura standard XLIFF (XML Localization Interchange File Format) per la localizzazione dell'interfaccia
* supporto dei WebService, sia come server che come client: generazione automatica del WSDL (Web Service Description Language) come server e interpretazione degli stessi per la generazione del codice client, supporto dei protocolli SOAP (versione 1.1 e versione 1.2), RPC (Remote Procedure Call) e DOC (Document-oriented)
* il Web Server è compatibile HTML 1.1, supporta documenti XML, la tecnologia WML (Wireless Markup Language), il protocollo SSL (Secured Socket Layer)
* supporta le CGI e può essere chiamato tramite CGI da altri web server
* utilizzando il web server sui client è possibile realizzare facilmente il Load Balancing
* disponibilità di un 4D AJAX Framework, per creare pagine web collegate e distribuite dal server 4D
* disponibilità di un 4D for Flex, che permette alle applicazioni Flex di collegarsi direttamente al server 4D
* supporta le chiamate via ODBC con driver nativo anche per Macintosh
* supporta le chiamate via PDO_4D da PHP
* supporta chiamate dirette server to server con altri server 4D
* può interrogare altri database via protocollo ODBC e OCI (Oracle Call Interface)
* comandi per interrogazione server posta POP3 e IMAP, Internet Message Access Protocol, Version 4 revision 1 (IMAP4rev1)
* comandi per l'invio di posta tramite server SMTP, con allegati, destinatari, destinatari in copia CC (Carbon Copy) e in copia nascosti BCC (Blind Carbon Copy), autenticazione (CRAM-MD5, LOGIN, PLAIN), commenti
* comandi per la gestione diretta dei server FTP (File Transfer Protocol)
* comandi di basso livello TCP/IP, UDP, utility come Ping e Name resolver
* OpenSSL 1.1.1l, aggiornata dalla v19.1
* Chromium v88, per le aree web, include supporto per Apple Silicon
* ICU 68.1 ( https://icu.unicode.org/home ) aggiornata dalla v18 R6
* SpreadJS 14.1.1, aggiornata dalla v19
* PHP 7.3.27, aggiornata dalla v18R6
* libldap 2.4.48, aggiornata dalla v18R2

## Compatibilità e requisiti minimi

Il fatto di essere multipiattaforma lo slega spesso da tutte le problematiche di installazione e di requisiti hardware e software, è cioè molto indipendente da librerie, driver o versioni del sistema operativo.
I requisiti minimi della versione corrente sono:
| Windows | Macintosh |
| Intel© CoreDuo o superiore | Intel© CoreDuo o superiore |
| 4 GB RAM (8 GB raccomandato) | 4 GB RAM (8 GB raccomandato) |
| Risoluzione schermo 1280 × 1024 | Risoluzione schermo 1280 × 1024 |
Versione dei Sistemi Operativi Certificati:
| 4D | Windows | Macintosh |
| v13.6 | Windows XP (Windows Server 2003 per 4D Server) o superiore NO Windows 10 | Mac OS X 10.6.8 ("Snow leopard") o superiore NO 10.11 ("El Capitan") |
| v14.5 | Windows 7SP1 (Windows Server 2008R2 per 4D Server) o superiore Compatibile Windows 10 | Mac OS X 10.9.5 ("Mavericks") - 10.10.5 ("Yosemite") Compatibile 10.11 ("El Capitan") |
| v15.2 | Windows 7SP1, 8.1 e 10 (Windows Server 2008R2 per 4D Server o superiore) | Mac OS X 10.9.5 ("Mavericks") - 10.10.5 ("Yosemite") - 10.11.3 ("El Capitan") |
| v16.6 | Windows 7SP1, 8.1 e 10 (Windows Server 2008R2 per 4D Server o superiore) | Mac OS X 10.12 ("Sierra") |
| v17.3 | Windows 7SP1, 8.1 e 10 (Windows Server 2012-2019 per 4D Server o superiore) | Mac OS X 10.12 ("Sierra") - 10.14 ("Mojave") |

## Caratteristiche del database

Dimensione del file dei dati: illimitato (limite del sistema operativo) Numero di Tabelle: 32767 Numero di Campi per Tabella: 32767 Numero di Record per Tabella: 1.000.000.000 Numero di chiavi Indice per Tabella: 128.000.000.000 Dimensione campo Alpha: 255 Dimensione campo Text: 2GB
Accesso al data file a 64-bit Composite Index: indicizzazione simultanea di valori da campi diversi (per esempio, Nome e Cognome). Keyword Index: indicizzazione a parola, per ricerche full-text. Cluster Index: indicizzazione specifica per campi con valori ripetuti (per esempio, i Booleani)

## Tipi di dati 4D

| Tipo | Descrizione | Capacità | Note |
| Alpha | Alfanumerico | 255 | |
| Text | Testo | 2GB | |
| Date | Data | Da anno 100 a 32 767 | |
| Time | Ora | Ore:minuti:secondi | |
| Boolean | Booleano | Vero/Falso | |
| Integer | Intero | da -32 767 a 32 767 | |
| Long Integer | Intero Lungo | -2 147 483 647 fino a 2 147 483 647 | |
| Integer 64 bits | Intero a 64bit | da -2E64 a 2E64 | Solo da SQL |
| Real | Decimale | ±1.7E±308 (con 13 cifre significative) | |
| Float | Decimale | | Solo da SQL |
| BLOB | Grande oggetto binario | 2GB | |
| Picture | Immagine | | |
| Object | Campo Oggetto, contenuto in formato chiave-valore, tipo JSON | 2GB | |

## Tipi di dati SQL

| 4D SQL | Descrizione | 4D |
| Varchar | Testo alfanumerico | Text o Alpha |
| Real | Numero a virgola mobile nel range di +/-1.7E308 | Real |
| Numeric | Numero fra +/- 2E64 | Integer 64 bits |
| Float | Numero a virgola mobile (virtualmente infinito) | Float |
| Smallint | Numero fra -32 768 and 32 767 | Integer |
| Int | Numero fra -2 147 483 648 e 2 147 483 647 | Longint, Integer |
| Int64 | Numero fra +/- 2E64 | Integer 64 bits |
| UUID | Numero di 16-byte (128 bits) contenente 32 caratteri esadecimali | UUID Alpha format |
| Bit | Un campo che contiene solo TRUE/FALSE o 1/0 | Boolean |
| Boolean | Un campo che contiene solo TRUE/FALSE o 1/0 | Boolean |
| Blob | Fino a 2 GB; qualsiasi oggetto binario tipo grafici, altre applicazioni o documento qualsiasi | Blob |
| Bit varying | Fino a 2 GB; qualsiasi oggetto binario tipo grafici, altre applicazioni o documento qualsiasi | Blob |
| Clob | Testo fino a 2 GB di caratteri. Questa colonna (campo) non può essere indicizzato e non è salvato dentro il record. | Text |
| Text | Testo fino a 2 GB di caratteri. Questa colonna (campo) non può essere indicizzato e non è salvato dentro il record. | Text |
| Timestamp | Data e Ora, Data nel formato 'YYYY/MM/DD' e Orario nel formato 'HH:MM:SS:ZZ' | Date e Time gestiti separatamente, con gestione automatica |
| Duration | Orario nel formato 'HH:MM:SS:ZZ' | Time |
| Interval | Orario nel formato 'HH:MM:SS:ZZ' | Time |
| Picture | Immagine fino a 2 GB | Picture |
NCHAR e NCHAR VARYING non sono supportate. I diversi tipi di campi numerici sono convertiti in automatico.

## Storia

La versione corrente è la '4D v17', certificata Windows Vista, Windows Server 2008 e Mac OS Intel Mac OS X Leopard, OS X Snow Leopard e OS X Lion.
| Anno | Versione | Note |
| 1984 | ABCBase | |
| 1985 | 4D v1 | |
| 1986 | 4D v2 | |
| 1987 | 4D v3 | |
| 1989 | 4D v4 | Utilizzo della stessa base dati da più utenti - Compilatore |
| 1992 | 4D v5 | Ambiente client-server integrato |
| 1995 | 4D v5.5 | Versione multipiattaforma Mac OS e Windows |
| 1997 | 4D v6 | Server Web integrato |
| 1999 | 4D 6.5 | 4D 6.5.9r2 l'ultima versione disponibile della 6.5.x |
| 2000 | 4D 6.7 | 4D 6.7.4 l'ultima versione disponibile della 6.7.x |
| 2001 | 4D 6.8 | Certificata Mac OS X (6.8.5) ; la 6.8.6 l'ultima versione disponibile della 6.8.x |
| 2003 | 4D 2003 | XML, Web service e Compilatore Integrato; la 2003.8r2 l'ultima versione disponibile della 2003 |
| 2004 | 4D 2004 | Interfaccia rivisitata; integrazione dei comandi ODBC, 4D Customizer, 4D Backup e 4D Engine; la 2004.7 build 3 l'ultima disponibile (certificata MacIntel e Vista). |
| 2007 | 4D v11 SQL | Nuovo database engine, SQL integrato, supporto di Unicode, gestione SVG, tool di manutenzione integrato, area web,... |
| 2010 | 4D v12 | Integrazione motore PHP, accesso a multipli database esterni, Server a 64Bit, SVG Area, campi RichText, nuove possibilità di stampa, nuove funzioni delle Listbox, ... |
| 2012 | 4D v13 | Nuovo Web Server engine, nuovo visualizzatore web integrato e multipiattaforma, strumenti avanzati per gli sviluppatori... |
| 2013 | 4D v14 | Nuovo tipo C_Object, Nuova funzionalità Mirror, Log Selettivo, 4D Mobile |
| 2015 | 4D v15 | 4D Server a 64bit nativo anche su Mac OS X, nuova gestione del Network |
| 2017 | 4D v16 | Nuova gestione della cache a 64 bit, nuovi campi e variabili Oggetti, con struttura a chiave/valore |
| 2018 | 4D v17 | Uso del db con la modalità a oggetti ORDA, gestione Collections e processi Pre-emptive |
| 2020 | 4D v18 | Crittografia, creazione di progetti IOS nativi, progetto in forma compatibile con version control |
| 2021 | 4D v19 | Support Nativo di Apple Silicon, Classi |