Sqlite: substitua uma string modelID1 / modelID2 / modelID3 por name1 / name2 / name3 /

1

Meu objetivo é ler o banco de dados macOS Photos.app para descobrir os caminhos das fotos incluídas. O álbum e a pasta pai cujo nome está na tabela RKFolder podem ser determinados para cada foto. Essa pasta pai pode estar localizada em outras pastas. O caminho da pasta resultante também pode ser lido ... mas da seguinte forma:

modelId 1/modelID 2/modelId 3/modelID 4

E aqui não posso ir mais longe, porque não tenho conhecimento suficiente para substituir a string pelos nomes verdadeiros das pastas. Para possíveis soluções, deve-se notar que eu trabalho com uma cópia do banco de dados e, portanto, o caminho da pasta também pode ser gravado diretamente na tabela RKFolder.

SELECT  
modelId, name,folderPath, uuid 
FROM RKFolder 
WHERE implicitAlbumUuid not NULL

resulta em (excerto)

modelId name            folderPath      uuid

1                       1/              LibraryFolder
2       TopLevelAlbums  1/2/            TopLevelAlbums
7       Test            1/2/7/          kbY7RDHjRLS
8       xxx             1/2/8/          bT5WAkPWQ1
9       Test            1/2/8/9/        9PYeLZDRTne
10      ab              1/2/10/         7Cse21+1SIag
11      abc             1/2/7/11/       pNMvzDdyS%
16      efg             1/2/7/11/16/    a6R97tAxSBW

substitua assim:

modelId name            folderPath                     uuid

1                       /                              LibraryFolder
2       TopLevelAlbums  /TopLevelAlbums/               TopLevelAlbums
7       Test            /TopLevelAlbums/Test/          kbY7RDHjRLS
8       xxx             /TopLevelAlbums/xxx/           bT5WAkPWQ1
9       Test            /TopLevelAlbums/xxx/Test/      9PYeLZDRTne
10      ab              /TopLevelAlbums/ab/            7Cse21+1SIag
11      abc             /TopLevelAlbums/Test/abc/      pNMvzDdyS%
16      efg             /TopLevelAlbums/Test/abc/efg/  a6R97tAxSBW

ou ainda melhor sem a pasta principal TopLevelAlbums:

modelId name            folderPath      uuid

16      efg             /Test/abc/efg/  a6R97tAxSBW

Aqui o script que eu uso até agora (encurtado):

SELECT 
RKAlbumVersion.versionId, 
RKVersion.filename, 

(SELECT RKFolder.folderpath from RKFolder, RKAlbum 
WHERE RKFolder.uuid = RKAlbum.folderUuid 
and RKAlbum.modelID = RKAlbumVersion.albumId)

FROM RKMaster, RKAlbumVersion, RKVersion 
WHERE RKVersion.modelId = RKAlbumVersion.versionId 
and RKVersion.masterUuid = RKMaster.uuid
-->
Output:
77  001.JPG  1/2/7/11/16/

replace with:
77  001.JPG  /Test/abc/efg/
    
por spazek 06.05.2018 / 14:27

0 respostas