gimmich

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

db.go (2750B)


      1 package main
      2 
      3 import (
      4 	"database/sql"
      5 	"log/slog"
      6 	"strings"
      7 	"uuid"
      8 
      9 	"github.com/mattn/go-sqlite3"
     10 )
     11 
     12 // enums for various tables
     13 
     14 type AlbumUserRoleEnum string
     15 const (
     16 	AlbumUserRoleEnumOwner AlbumUserRoleEnum = "owner"
     17 	AlbumUserRoleEnumEditor AlbumUserRoleEnum = "editor"
     18 	AlbumUserRoleEnumViewer AlbumUserRoleEnum = "viewer"
     19 )
     20 
     21 type AssetChecksumAlgorithmEnum string 
     22 const (
     23 	AssetChecksumAlgorithmEnumSha1 AssetChecksumAlgorithmEnum = "sha1"
     24 	AssetChecksumAlgorithmEnumSha1Path AssetChecksumAlgorithmEnum = "sha1-path"
     25 )
     26 
     27 
     28 type AssetVisibilityEnum string
     29 const (
     30 	AssetVisibilityEnumArchive AssetVisibilityEnum = "archive"
     31 	AssetVisibilityEnumTimeline AssetVisibilityEnum = "timeline"
     32 	AssetVisibilityEnumHidden AssetVisibilityEnum = "hidden"
     33 	AssetVisibilityEnumLocked AssetVisibilityEnum = "locked"
     34 )
     35 
     36 type AssetsStatusEnum string 
     37 const (
     38 	AssetsStatusEnumActive AssetsStatusEnum = "active"
     39 	AssetsStatusEnumTrashed AssetsStatusEnum = "trashed"
     40 	AssetsStatusEnumDeleted AssetsStatusEnum = "deleted"
     41 )
     42 
     43 
     44 type SourceTypeEnum string
     45 const (
     46 	SourceTypeEnumMachineLearning SourceTypeEnum = "machine-learning"
     47 	SourceTypeEnumExif SourceTypeEnum = "exif"
     48 	SourceTypeEnumManual SourceTypeEnum = "manual"
     49 )
     50 
     51 type VideoStreamVariantCodecEnum string
     52 const (
     53 	VideoStreamVariantCodecEnumAv1 VideoStreamVariantCodecEnum = "av1"
     54 	VideoStreamVariantCodecEnumHevc VideoStreamVariantCodecEnum = "hevc"
     55 	VideoStreamVariantCodecEnumH264 VideoStreamVariantCodecEnum = "h264"
     56 )
     57 
     58 
     59 // custom functions we need to implement
     60 func RegisterCustomFunctions() {
     61 	sql.Register("sqlite3_custom", &sqlite3.SQLiteDriver{
     62 		ConnectHook: func(sc *sqlite3.SQLiteConn) error {
     63 			err := sc.RegisterFunc("f_concat_ws", fConcatWs, true)
     64 			if err != nil {
     65 				return err
     66 			}
     67 			err = sc.RegisterFunc("f_unaccent", fUnaccent, true)
     68 			if err != nil {
     69 				return err
     70 			}
     71 			err = sc.RegisterFunc("immich_uuid_v7", immichUuidV7, true)
     72 			if err != nil {
     73 				return err
     74 			}
     75 			err = sc.RegisterFunc("uuid_generate_v4", uuidGenerateV4, true)
     76 			if err != nil {
     77 				return err
     78 			}
     79 			slog.Info("custom functions registered")	
     80 			
     81 			return nil
     82 		},
     83 	})
     84 }
     85 
     86 func fConcatWs(a string, b any) string {
     87 	// CREATE FUNCTION public.f_concat_ws(text, text[]) RETURNS text
     88 	//     LANGUAGE sql IMMUTABLE PARALLEL SAFE
     89 	//     AS $_$SELECT array_to_string($2, $1)$_$;
     90 	return strings.Join(b.([]string), a)
     91 }
     92 
     93 func fUnaccent(a string) string {
     94 	// CREATE FUNCTION public.f_unaccent(text) RETURNS text
     95 	//     LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE
     96 	//     RETURN public.unaccent('public.unaccent'::regdictionary, $1);
     97 	panic("unimplemented")
     98 }
     99 
    100 func immichUuidV7() string {
    101 	u := uuid.NewV7()
    102 	return u.String()
    103 }
    104 
    105 func uuidGenerateV4() string {
    106 	u := uuid.NewV4()
    107 	return u.String()
    108 }