MIME functions
chm.GetMimeType
This function returns MIME type of a given filename.
CREATE FUNCTION [chm].[GetMimeType]
(
@filename NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
@filename can be both a filename or a filename together with its path.
Example:
select chm.GetMimeType('flower.jpg') -- image/jpeg
select chm.GetMimeType('/docs/readme.txt') -- text/plain
select chm.GetMimeType('c:\projects\my-app\index.js') -- application/javascript
chm.GetExtension
This function returns extension of a given filename (without a dot character).
CREATE FUNCTION [chm].[GetExtension]
(
@filenameOrExtension NVARCHAR(MAX)
)
RETURNS NVARCHAR (MAX)
@filename can be both a filename or a filename together with its path.
Example:
select chm.GetExtension('flower.jpg') -- jpg
select chm.GetExtension('/docs/readme.txt') -- txt
select chm.GetExtension('c:\projects\my-app\index.js') -- js
chm.GetExtension
This function returns extension of a given filename (without a dot character).
CREATE FUNCTION [chm].[GetExtension]
(
@filenameOrExtension NVARCHAR(MAX)
)
RETURNS NVARCHAR (MAX)
@filename can be both a filename or a filename together with its path.
Example:
select chm.GetExtension('flower.jpg') -- jpg
select chm.GetExtension('/docs/readme.txt') -- txt
select chm.GetExtension('c:\projects\my-app\index.js') -- js
Mime Tables
In addition to chm.GetMimeType() that refers to an array of MIME types located in the Chameleon assemblies which are not editable (unless by editing Chameleon source code, recompiling and reinstalling the SQLCLR assemblies, which is cumbersome), list of MIME values are also provided as tables in the database, so that user can add/edit them if he desires so.
chameleon.Mimes
This table holds MIME groups. Each group can span multiple file extensions.
| Column | Type | Description |
|---|---|---|
id
|
smallint
|
PK |
value
|
varchar(85)
|
MIME value |
source
|
varchar(15)
|
Source |
compressible
|
bit
|
Whether or not related content is compressible |
charset
|
varchar(10)
|
Character-set |
extensions
|
varchar(150)
|
Related file extensions |
chameleon.MimeTypes
This table holds file extensions of MIME values.
| Column | Type | Description |
|---|---|---|
id
|
smallint
|
PK |
mimeId
|
smallint
|
FK to chameleon.Mimes(id) |
extension
|
varchar(20)
|
Fle extension |
isDefault
|
bit
|
Is default file extension of MIME or not |
chameleon.GetMimeType
This is the non-CLR version of chm.GetMimeType that introduced earlier and performs the same thing.
CREATE FUNCTION [chameleon].[GetMimeType]
(
@filename NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
It refers to chameleon.Mimes and chameleon.MimeTypes tables in order to find MIME of given file extension, whereas chm.GetMimeType() refers to the in-memory array of Mime objects in the Chameleons compiled assemblies.
Example:
select [chameleon].[GetMimeType]('.jpg')
Output:
image/jpeg
The benefit of using chameleon.GetMimeType() over chm.GetMimeType() is that, MIME tables could be easily manipulated (more MIMEs added to them), but MIME array inside Chameleon assemblies could not be easily manipulated.