xref: /freebsd/contrib/file/magic/Magdir/sql (revision a8089ea5aee578e08acab2438e82fc9a9ae50ed8)
1
2#------------------------------------------------------------------------------
3# $File: sql,v 1.26 2023/04/29 17:26:58 christos Exp $
4# sql:  file(1) magic for SQL files
5#
6# From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
7# Recognize some MySQL files.
8# Elan Ruusamae <glen@delfi.ee>, added MariaDB signatures
9# from https://bazaar.launchpad.net/~maria-captains/maria/5.5/view/head:/support-files/magic
10#
110	beshort			0xfe01		MySQL table definition file
12>2	byte			x		Version %d
13>3	byte			0		\b, type UNKNOWN
14>3	byte			1		\b, type DIAM_ISAM
15>3	byte			2		\b, type HASH
16>3	byte			3		\b, type MISAM
17>3	byte			4		\b, type PISAM
18>3	byte			5		\b, type RMS_ISAM
19>3	byte			6		\b, type HEAP
20>3	byte			7		\b, type ISAM
21>3	byte			8		\b, type MRG_ISAM
22>3	byte			9		\b, type MYISAM
23>3	byte			10		\b, type MRG_MYISAM
24>3	byte			11		\b, type BERKELEY_DB
25>3	byte			12		\b, type INNODB
26>3	byte			13		\b, type GEMINI
27>3	byte			14		\b, type NDBCLUSTER
28>3	byte			15		\b, type EXAMPLE_DB
29>3	byte			16		\b, type CSV_DB
30>3	byte			17		\b, type FEDERATED_DB
31>3	byte			18		\b, type BLACKHOLE_DB
32>3	byte			19		\b, type PARTITION_DB
33>3	byte			20		\b, type BINLOG
34>3	byte			21		\b, type SOLID
35>3	byte			22		\b, type PBXT
36>3	byte			23		\b, type TABLE_FUNCTION
37>3	byte			24		\b, type MEMCACHE
38>3	byte			25		\b, type FALCON
39>3	byte			26		\b, type MARIA
40>3	byte			27		\b, type PERFORMANCE_SCHEMA
41>3	byte			127		\b, type DEFAULT
42>0x0033	ulong			x		\b, MySQL version %d
430	belong&0xffffff00	0xfefe0500	MySQL ISAM index file
44>3	byte			x		Version %d
450	belong&0xffffff00	0xfefe0600	MySQL ISAM compressed data file
46>3	byte			x		Version %d
470	belong&0xffffff00	0xfefe0700	MySQL MyISAM index file
48>3	byte			x		Version %d
49>14	beshort			x		\b, %d key parts
50>16	beshort			x		\b, %d unique key parts
51>18	byte			x		\b, %d keys
52>28	bequad			x		\b, %lld records
53>36	bequad			x		\b, %lld deleted records
540	belong&0xffffff00	0xfefe0800	MySQL MyISAM compressed data file
55>3	byte			x		Version %d
560	belong&0xffffff00	0xfefe0900	MySQL Maria index file
57>3	byte			x		Version %d
580	belong&0xffffff00	0xfefe0a00	MySQL Maria compressed data file
59>3	byte			x		Version %d
600	belong&0xffffff00	0xfefe0c00
61>4	string			MACF		MySQL Maria control file
62>>3	byte			x		Version %d
630	string			\376bin	MySQL replication log,
64>9	long			x		server id %d
65>8	byte			1
66>>13	long			69		\b, MySQL V3.2.3
67>>>19	string			x		\b, server version %s
68>>13	long			75		\b, MySQL V4.0.2-V4.1
69>>>25	string			x		\b, server version %s
70>8	byte			15		MySQL V5+,
71>>25	string			x		server version %s
72>4	string			MARIALOG	MySQL Maria transaction log file
73>>3	byte			x		Version %d
74
75#------------------------------------------------------------------------------
76# iRiver H Series database file
77# From Ken Guest <ken@linux.ie>
78# As observed from iRivNavi.iDB and unencoded firmware
79#
800   string		iRivDB	iRiver Database file
81>11  string	>\0	Version %s
82>39  string		iHP-100	[H Series]
83
84#------------------------------------------------------------------------------
85# SQLite database files
86# Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg
87#
88# Version 1 used GDBM internally; its files cannot be distinguished
89# from other GDBM files.
90#
91# Update:	Joerg Jenderek
92# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/s/sqlite-2x.trid.xml
93# Note:		called "SQLite 2.x database" by TrID and "SQLite Database File Format" version 2 by DROID via PUID fmt/1135
94# Version 2 used this format:
950	string	**\ This\ file\ contains\ an\ SQLite  SQLite 2.x database
96!:mime	application/x-sqlite2
97# FileAttributesStore.db test.sqlite2
98!:ext	sqlite/sqlite2/db
99
100# URL:		https://en.wikipedia.org/wiki/SQLite
101# Reference:	https://www.sqlite.org/fileformat.html
102# Update:	Joerg Jenderek
103# Version 3 of SQLite allows applications to embed their own "user version"
104# number in the database at offset 60.  Later, SQLite added an "application id"
105# at offset 68 that is preferred over "user version" for indicating the
106# associated application.
107#
1080   string  SQLite\ format\ 3
109# skip DROID fmt-729-signature-id-1053.sqlite by checking for valid page size
110>16 ubeshort >0                 SQLite 3.x
111# deprecated
112#!:mime	application/x-sqlite3
113!:mime	application/vnd.sqlite3
114# seldom found extension sqlite3 like in SyncData.sqlite3
115# db
116# db3 like: AddrBook.db3 cgipcrvp.db3
117# https://www.maplesoft.com/support/help/Maple/view.aspx?path=worksheet%2freference%2fhelpdatabase
118# help is used for newer Maple help database
119# SQLite database weewx.sdb used by weather software weewx
120# https://www.weewx.com/docs/usersguide.htm
121# Avira Antivir use extension "dbe" like in avevtdb.dbe, avguard_tchk.dbe
122# Unfortunately extension sqlite also used for other databases starting with string
123# "TTCONTAINER" like in tracks.sqlite contentconsumer.sqlite contentproducerrepository.sqlite
124# and with string "ZV-zlib" in like extra.sqlite
125>>68 belong !0x5CDE09EF	database
126!:ext sqlite/sqlite3/db/db3/dbe/sdb/help
127>>68 belong =0x5CDE09EF  database
128# maple is used for Maple Workbook
129!:ext maple
130>>60 belong =0x5f4d544e  (Monotone source repository)
131# if no known user version then check for Application IDs with default clause
132>>60 belong !0x5f4d544e
133# The "Application ID" set by PRAGMA application_id
134>>>68 belong =0x0f055112 (Fossil checkout)
135>>>68 belong =0x0f055113 (Fossil global configuration)
136>>>68 belong =0x0f055111 (Fossil repository)
137>>>68 belong =0x42654462 (Bentley Systems BeSQLite Database)
138>>>68 belong =0x42654c6e (Bentley Systems Localization File)
139>>>68 belong =0x47504b47 (OGC GeoPackage file)
140#	https://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt
141>>>68 belong =0x47503130 (OGC GeoPackage version 1.0 file)
142>>>68 belong =0x45737269 (Esri Spatially-Enabled Database)
143>>>68 belong =0x4d504258 (MBTiles tileset)
144#	https://www.maplesoft.com/support/help/errors/view.aspx?path=Formats/Maple
145>>>68 belong =0x5CDE09EF (Maple Workbook)
146# unknown application ID
147>>>68 default x
148>>>>68 belong !0         \b, application id %u
149# The "user version" as read and set by the user_version pragma like:
150# 1 2 4 5 7 9 10 25 36 43 53 400 416 131073 131074 131075
151>>60 belong !0          \b, user version %d
152# SQLITE_VERSION_NUMBER like: 0 3008011 3016002 3007014 3017000 3022000 3028000 3031001
153>>96 belong  x           \b, last written using SQLite version %d
154# database page size in bytes; a power of two between 512 and 32768, or 1 for 65536
155# like: 512 1024 often 4096 32768
156>>16 ubeshort !4096      \b, page size %u
157# File format write version. 1 for legacy; 2 for WAL; 0 for corruptDB.sqlite
158>>18 ubyte   !1          \b, writer version %u
159# File format read version. 1 for legacy; 2 for WAL; 4 for corruptDB.sqlite
160>>19 ubyte   !1          \b, read version %u
161# Bytes of unused "reserved" space at the end of each page. Usually 0
162>>20 ubyte   !0          \b, unused bytes %u
163# maximum embedded payload fraction. Must be 64; 1 for corruptDB.sqlite
164>>21 ubyte   !64         \b, maximum payload %u
165# Minimum embedded payload fraction. Must be 32; 1 for corruptDB.sqlite
166>>22 ubyte   !32         \b, minimum payload %u
167# Leaf payload fraction. Must be 32; 0 for corruptDB.sqlite
168>>23 ubyte   !32         \b, leaf payload %u
169# file change counter
170>>24 ubelong x           \b, file counter %u
171# Size of the database file in pages
172>>28 ubelong x           \b, database pages %u
173# page number of the first freelist trunk page like: 0 2 3 4 5 9
174# 10 13 14 15 16 17 18 19 23 36 39 46 50 136 190 217 307 505 516 561 883 1659
175>>32 ubelong !0          \b, 1st free page %u
176# total number of freelist pages
177>>36 ubelong !0          \b, free pages %u
178# The schema cookie like: 2 3 4 6 7 9 A D E F 13 14 1C 25 2A 2F 33 44 4B 53 5A 5F 62 86 87 8F 91 A8
179>>40 ubelong x           \b, cookie %#x
180# the schema format number. Supported formats are 1 2 3 and often 4
181# 3328 for corruptDB.sqlite and 0 for 512 byte storage.sqlite (TorBrowser Firefox Thunderbird)
182>>44 ubelong x           \b, schema %u
183# Suggested cache size  like: 0 2000
184>>48 ubelong !0          \b, cache page size %u
185# The page number of the largest root b-tree page when in auto-vacuum or incremental-vacuum modes, or zero otherwise.
186>>52 ubelong !0          \b, largest root page %u
187# The database text encoding; a value of 1 means UTF-8; 2 means UTF-16le; 3 means UTF-16be
188#>>56 ubelong x           \b, encoding %u
189>>56 ubelong x
190>>>56 ubelong =1         \b, UTF-8
191>>>56 ubelong =2         \b, UTF-16 little endian
192>>>56 ubelong =3         \b, UTF-16 big endian
193# 0 for corruptDB.sqlite and for storage.sqlite with database pages 1 (TorBrowser Firefox Thunderbird)
194# https://mozilla.github.io/firefox-browser-architecture/text/0010-firefox-data-stores.html
195>>>56 default x
196>>>>56 ubelong x         \b, unknown %#x encoding
197# True (non-zero) for incremental-vacuum mode; false (zero) otherwiseqy
198>>64 ubelong !0           \b, vacuum mode %u
199# Reserved for expansion. Must be zero
200>>72 uquad !0             \b, reserved %#llx
201# The version-valid-for number like:
202# 1 2 3 4 C F 68h 95h 266h A99h 3DCDh B7CEh
203>>92 ubelong x            \b, version-valid-for %u
204
205# SQLite Write-Ahead Log from SQLite version >= 3.7.0
206# https://www.sqlite.org/fileformat.html#walformat
2070	belong&0xfffffffe	0x377f0682	SQLite Write-Ahead Log,
208!:ext sqlite-wal/db-wal
209>4	belong	x	version %d
210# Summary:	SQLite Write-Ahead-Log index (shared memory)
211# From: 	Joerg Jenderek
212# URL:		http://fileformats.archiveteam.org/wiki/SQLite
213# Reference:	http://www.sqlite.org/draft/walformat.html#walidxfmt
214# iVersion; WAL-index format version number; always 3007000=2DE218h
2150	ulelong		0x002DE218
216>0	use	shm-le
217# big endian variant not tested
2180	ubelong		0x002DE218
219>0	use	\^shm-le
220# show information about SQLite Write-Ahead-Log shared memory
2210	name	shm-le
222>0	ulelong		x		SQLite Write-Ahead Log shared memory
223#!:mime	application/octet-stream
224!:mime	application/vnd.sqlite3
225# db3-shm	Acronis	BackupAndRecovery			F4CEEE47-042C-4828-95A0-DE44EC267A28.db3-shm
226# dbx-shm	probably Dropbox				filecache.dbx-shm
227# aup3-shm	Audacity project				tada.aup3-shm
228# srd-shm	Microsoft Windows StateRepository service	StateRepository-Deployment.srd-shm StateRepository-Machine.srd-shm:
229!:ext	sqlite-shm/db-shm/db3-shm/dbx-shm/aup3-shm/srd-shm
230# unused padding space; must be zero
231>4	ulelong		!0		\b, unused %x
232# iChange; unsigned integer counter, incremented with each transaction
233>8	ulelong		x		\b, counter %u
234# isInit; the "isInit" flag; 1 when the shm file has been initialized
235>12	ubyte		!1		\b, not initialized %u
236# bigEndCksum; true if the WAL file uses big-ending checksums; 0 if the WAL uses little-endian checksums
237>13	ubyte		!0		\b, checksum type %u
238# szPage; database page size in bytes, or 1 if the page size is 65536
239>14	uleshort	!1		\b, page size %u
240>14	uleshort	=1		\b, page size 65536
241# mxFrame; number of valid and committed frames in the WAL file
242>16	ulelong		x		\b, %u frames
243# nPage; size of the database file in pages
244>20	ulelong		x		\b, %u pages
245# aFrameCksum; checksum of the last frame in the WAL file
246>24	ulelong		x		\b, frame checksum %#x
247# aSalt; two salt value copied from the WAL file header in the byte-order of the WAL file; might be different from machine byte-order
248>32	ulequad		x		\b, salt %#llx
249# aCksum; checksum over bytes 0 through 39 of this header
250>40	ulelong		x		\b, header checksum %#x
251# a copy of bytes 0 through 47 of header
252>48	ulelong		!3007000	\b, iversion %u
253# nBackfill; number of WAL frames that have already been backfilled into the database by prior checkpoints
254>96	ulelong		!0		\b, %u backfilled
255# nBackfillAttempted; number of WAL frames that have attempted to be backfilled
256>>128	ulelong		x		(%u attempts)
257# read-mark[0..4]; five "read marks"; each read mark is a 32-bit unsigned integer
258>100	ulelong		!0		\b, read-mark[0] %#x
259>104	ulelong		x		\b, read-mark[1] %#x
260>108	ulelong		!0xffffffff	\b, read-mark[2] %#x
261>112	ulelong		!0xffffffff	\b, read-mark[3] %#x
262>116	ulelong		!0xffffffff	\b, read-mark[4] %#x
263# unused space set aside for 8 file locks
264>120	ulequad		!0		\b, space %#llx
265# unused space reserved for further expansion
266>132	ulelong		!0		\b, reserved %#x
267
268# SQLite Rollback Journal
269# https://www.sqlite.org/fileformat.html#rollbackjournal
2700	string	\xd9\xd5\x05\xf9\x20\xa1\x63\xd7	SQLite Rollback Journal
271
272# Panasonic channel list database svl.bin or svl.db added by Joerg Jenderek
273# https://github.com/PredatH0r/ChanSort
2740	string		PSDB\0			Panasonic channel list DataBase
275!:ext db/bin
276#!:mime	application/x-db-svl-panasonic
277>126	string		SQLite\ format\ 3
278#!:mime	application/x-panasonic-sqlite3
279>>&-15	indirect	x			\b; contains
280
281# H2 Database from https://www.h2database.com/
2820	string		--\ H2\ 0.5/B\ --\ \n	H2 Database file
283
284# DuckDB database file from https://duckdb.org
2858	string	DUCK    DuckDB database file
286>12	lequad	x	\b, version %lld
287#>20	lequad	x	\b, flags %#llx
288#>28	lequad	x	\b, flags %#llx
289