1 {-# LANGUAGE OverloadedStrings, RecordWildCards, TemplateHaskell, QuasiQuotes, DataKinds #-} 2 module Databrary.Model.Transcode 3 ( module Databrary.Model.Transcode.Types 4 , defaultTranscodeOptions 5 , transcodeAuth 6 , lookupTranscode 7 , lookupActiveTranscodes 8 , addTranscode 9 , updateTranscode 10 , findTranscode 11 , findMatchingTranscode 12 , checkAlreadyTranscoded 13 ) where 14 15 -- import Database.PostgreSQL.Typed (pgSQL) 16 --import Database.PostgreSQL.Typed.Query 17 import Database.PostgreSQL.Typed.Types 18 -- import qualified Data.ByteString 19 -- import Data.ByteString (ByteString) 20 import qualified Data.ByteString as BS 21 import qualified Data.ByteString.Builder as BSB 22 import qualified Data.ByteString.Lazy as BSL 23 import Data.Maybe (fromMaybe) 24 import Data.Monoid ((<>)) 25 import qualified Data.String 26 -- import Database.PostgreSQL.Typed.Query (pgSQL) 27 28 import Databrary.Has 29 import Databrary.Service.DB 30 import Databrary.Service.Types 31 import Databrary.Service.Crypto 32 import Databrary.Store.Types 33 import Databrary.Store.AV 34 import Databrary.Store.Probe 35 -- import Databrary.Model.SQL 36 import Databrary.Model.Audit 37 import Databrary.Model.Id 38 import Databrary.Model.Party 39 import Databrary.Model.Party.SQL 40 import Databrary.Model.Permission.Types 41 import Databrary.Model.Segment 42 import Databrary.Model.Volume.Types 43 import Databrary.Model.Format 44 import Databrary.Model.Asset 45 import Databrary.Model.Asset.SQL 46 import Databrary.Model.AssetRevision.Types 47 import Databrary.Model.Transcode.Types 48 import Databrary.Model.Volume.SQL 49 50 defaultTranscodeOptions :: TranscodeArgs 51 defaultTranscodeOptions = ["-vf", "pad=iw+mod(iw\\,2):ih+mod(ih\\,2)"] 52 53 transcodeAuth :: Transcode -> Secret -> BS.ByteString 54 transcodeAuth t = signature $ BSL.toStrict $ BSB.toLazyByteString 55 $ maybe id ((<>) . BSB.byteString) (assetSHA1 $ assetRow $ transcodeOrig t) 56 $ BSB.int32LE (unId $ transcodeId t) 57 58 lookupTranscode :: MonadDB c m => Id Transcode -> m (Maybe Transcode) 59 lookupTranscode a = do 60 -- dbQuery1 $(selectQuery selectTranscode "WHERE transcode.asset = ${a}") 61 let _tenv_a9v0o = unknownPGTypeEnv 62 mRow <- 63 (dbQuery1 64 (mapQuery2 65 ((\ _p_a9v0p -> 66 (BS.concat 67 [Data.String.fromString 68 "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE transcode.asset = ", 69 Database.PostgreSQL.Typed.Types.pgEscapeParameter 70 _tenv_a9v0o 71 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 72 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 73 _p_a9v0p])) 74 a) 75 (\ 76 [_csegment_a9v0q, 77 _coptions_a9v0r, 78 _cstart_a9v0s, 79 _cprocess_a9v0t, 80 _clog_a9v0u, 81 _cid_a9v0v, 82 _cname_a9v0w, 83 _cprename_a9v0x, 84 _corcid_a9v0y, 85 _caffiliation_a9v0z, 86 _curl_a9v0A, 87 _cemail_a9v0B, 88 _cpassword_a9v0C, 89 _csite_a9v0D, 90 _cmember_a9v0E, 91 _cid_a9v0F, 92 _cformat_a9v0G, 93 _crelease_a9v0H, 94 _cduration_a9v0I, 95 _cname_a9v0J, 96 _csha1_a9v0K, 97 _csize_a9v0L, 98 _cid_a9v0M, 99 _cformat_a9v0N, 100 _crelease_a9v0O, 101 _cduration_a9v0P, 102 _cname_a9v0Q, 103 _csha1_a9v0R, 104 _csize_a9v0S, 105 _cid_a9v0T, 106 _cname_a9v0U, 107 _cbody_a9v0V, 108 _calias_a9v0W, 109 _cdoi_a9v0X, 110 _cvolume_creation_a9v0Y] 111 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 112 _tenv_a9v0o 113 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 114 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 115 _csegment_a9v0q, 116 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 117 _tenv_a9v0o 118 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 119 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 120 _coptions_a9v0r, 121 Database.PostgreSQL.Typed.Types.pgDecodeColumn 122 _tenv_a9v0o 123 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 124 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 125 _cstart_a9v0s, 126 Database.PostgreSQL.Typed.Types.pgDecodeColumn 127 _tenv_a9v0o 128 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 129 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 130 _cprocess_a9v0t, 131 Database.PostgreSQL.Typed.Types.pgDecodeColumn 132 _tenv_a9v0o 133 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 134 Database.PostgreSQL.Typed.Types.PGTypeName "text") 135 _clog_a9v0u, 136 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 137 _tenv_a9v0o 138 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 139 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 140 _cid_a9v0v, 141 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 142 _tenv_a9v0o 143 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 144 Database.PostgreSQL.Typed.Types.PGTypeName "text") 145 _cname_a9v0w, 146 Database.PostgreSQL.Typed.Types.pgDecodeColumn 147 _tenv_a9v0o 148 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 149 Database.PostgreSQL.Typed.Types.PGTypeName "text") 150 _cprename_a9v0x, 151 Database.PostgreSQL.Typed.Types.pgDecodeColumn 152 _tenv_a9v0o 153 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 154 Database.PostgreSQL.Typed.Types.PGTypeName "bpchar") 155 _corcid_a9v0y, 156 Database.PostgreSQL.Typed.Types.pgDecodeColumn 157 _tenv_a9v0o 158 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 159 Database.PostgreSQL.Typed.Types.PGTypeName "text") 160 _caffiliation_a9v0z, 161 Database.PostgreSQL.Typed.Types.pgDecodeColumn 162 _tenv_a9v0o 163 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 164 Database.PostgreSQL.Typed.Types.PGTypeName "text") 165 _curl_a9v0A, 166 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 167 _tenv_a9v0o 168 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 169 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 170 _cemail_a9v0B, 171 Database.PostgreSQL.Typed.Types.pgDecodeColumn 172 _tenv_a9v0o 173 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 174 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 175 _cpassword_a9v0C, 176 Database.PostgreSQL.Typed.Types.pgDecodeColumn 177 _tenv_a9v0o 178 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 179 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 180 _csite_a9v0D, 181 Database.PostgreSQL.Typed.Types.pgDecodeColumn 182 _tenv_a9v0o 183 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 184 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 185 _cmember_a9v0E, 186 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 187 _tenv_a9v0o 188 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 189 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 190 _cid_a9v0F, 191 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 192 _tenv_a9v0o 193 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 194 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 195 _cformat_a9v0G, 196 Database.PostgreSQL.Typed.Types.pgDecodeColumn 197 _tenv_a9v0o 198 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 199 Database.PostgreSQL.Typed.Types.PGTypeName "release") 200 _crelease_a9v0H, 201 Database.PostgreSQL.Typed.Types.pgDecodeColumn 202 _tenv_a9v0o 203 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 204 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 205 _cduration_a9v0I, 206 Database.PostgreSQL.Typed.Types.pgDecodeColumn 207 _tenv_a9v0o 208 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 209 Database.PostgreSQL.Typed.Types.PGTypeName "text") 210 _cname_a9v0J, 211 Database.PostgreSQL.Typed.Types.pgDecodeColumn 212 _tenv_a9v0o 213 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 214 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 215 _csha1_a9v0K, 216 Database.PostgreSQL.Typed.Types.pgDecodeColumn 217 _tenv_a9v0o 218 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 219 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 220 _csize_a9v0L, 221 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 222 _tenv_a9v0o 223 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 224 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 225 _cid_a9v0M, 226 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 227 _tenv_a9v0o 228 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 229 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 230 _cformat_a9v0N, 231 Database.PostgreSQL.Typed.Types.pgDecodeColumn 232 _tenv_a9v0o 233 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 234 Database.PostgreSQL.Typed.Types.PGTypeName "release") 235 _crelease_a9v0O, 236 Database.PostgreSQL.Typed.Types.pgDecodeColumn 237 _tenv_a9v0o 238 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 239 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 240 _cduration_a9v0P, 241 Database.PostgreSQL.Typed.Types.pgDecodeColumn 242 _tenv_a9v0o 243 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 244 Database.PostgreSQL.Typed.Types.PGTypeName "text") 245 _cname_a9v0Q, 246 Database.PostgreSQL.Typed.Types.pgDecodeColumn 247 _tenv_a9v0o 248 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 249 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 250 _csha1_a9v0R, 251 Database.PostgreSQL.Typed.Types.pgDecodeColumn 252 _tenv_a9v0o 253 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 254 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 255 _csize_a9v0S, 256 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 257 _tenv_a9v0o 258 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 259 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 260 _cid_a9v0T, 261 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 262 _tenv_a9v0o 263 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 264 Database.PostgreSQL.Typed.Types.PGTypeName "text") 265 _cname_a9v0U, 266 Database.PostgreSQL.Typed.Types.pgDecodeColumn 267 _tenv_a9v0o 268 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 269 Database.PostgreSQL.Typed.Types.PGTypeName "text") 270 _cbody_a9v0V, 271 Database.PostgreSQL.Typed.Types.pgDecodeColumn 272 _tenv_a9v0o 273 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 274 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 275 _calias_a9v0W, 276 Database.PostgreSQL.Typed.Types.pgDecodeColumn 277 _tenv_a9v0o 278 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 279 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 280 _cdoi_a9v0X, 281 Database.PostgreSQL.Typed.Types.pgDecodeColumn 282 _tenv_a9v0o 283 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 284 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 285 _cvolume_creation_a9v0Y)))) 286 pure 287 (fmap 288 (\ (vsegment_a9uZh, voptions_a9uZi, vstart_a9uZj, vprocess_a9uZk, 289 vlog_a9uZl, vid_a9uZm, vname_a9uZn, vprename_a9uZo, vorcid_a9uZp, 290 vaffiliation_a9uZq, vurl_a9uZr, vemail_a9uZs, vpassword_a9uZt, 291 vsite_a9uZu, vmember_a9uZv, vid_a9uZw, vformat_a9uZx, 292 vrelease_a9uZy, vduration_a9uZz, vname_a9uZA, vc_a9uZB, 293 vsize_a9uZC, vid_a9uZD, vformat_a9uZE, vrelease_a9uZF, 294 vduration_a9uZG, vname_a9uZH, vc_a9uZI, vsize_a9uZJ, vid_a9uZK, 295 vname_a9uZL, vbody_a9uZM, valias_a9uZN, vdoi_a9uZO, vc_a9uZP) 296 -> makeTranscode 297 (makeOrigTranscode 298 (($) 299 (makeTranscodeRow 300 vsegment_a9uZh 301 voptions_a9uZi 302 vstart_a9uZj 303 vprocess_a9uZk 304 vlog_a9uZl) 305 (Databrary.Model.Party.SQL.makeSiteAuth 306 (Databrary.Model.Party.SQL.makeUserAccount 307 (Databrary.Model.Party.SQL.makeAccount 308 (PartyRow 309 vid_a9uZm 310 vname_a9uZn 311 vprename_a9uZo 312 vorcid_a9uZp 313 vaffiliation_a9uZq 314 vurl_a9uZr) 315 (Account vemail_a9uZs))) 316 vpassword_a9uZt 317 (do { cm_a9uZQ <- vsite_a9uZu; 318 cm_a9uZR <- vmember_a9uZv; 319 Just 320 (Databrary.Model.Permission.Types.Access cm_a9uZQ cm_a9uZR) }))) 321 (Databrary.Model.Asset.SQL.makeAssetRow 322 vid_a9uZw 323 vformat_a9uZx 324 vrelease_a9uZy 325 vduration_a9uZz 326 vname_a9uZA 327 vc_a9uZB 328 vsize_a9uZC)) 329 (Databrary.Model.Asset.SQL.makeAssetRow 330 vid_a9uZD 331 vformat_a9uZE 332 vrelease_a9uZF 333 vduration_a9uZG 334 vname_a9uZH 335 vc_a9uZI 336 vsize_a9uZJ) 337 (Databrary.Model.Volume.SQL.setCreation 338 (VolumeRow 339 vid_a9uZK vname_a9uZL vbody_a9uZM valias_a9uZN vdoi_a9uZO) 340 vc_a9uZP 341 [])) 342 mRow) 343 344 lookupActiveTranscodes :: MonadDB c m => m [Transcode] 345 lookupActiveTranscodes = do 346 -- dbQuery $(selectQuery selectTranscode "WHERE asset.size IS NULL ORDER BY transcode.asset") 347 let _tenv_a9v38 = unknownPGTypeEnv 348 rows <- 349 dbQuery 350 (mapQuery2 351 (BS.concat 352 [Data.String.fromString 353 "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE asset.size IS NULL ORDER BY transcode.asset"]) 354 (\ 355 [_csegment_a9v39, 356 _coptions_a9v3a, 357 _cstart_a9v3b, 358 _cprocess_a9v3c, 359 _clog_a9v3d, 360 _cid_a9v3e, 361 _cname_a9v3f, 362 _cprename_a9v3g, 363 _corcid_a9v3h, 364 _caffiliation_a9v3i, 365 _curl_a9v3j, 366 _cemail_a9v3k, 367 _cpassword_a9v3l, 368 _csite_a9v3m, 369 _cmember_a9v3n, 370 _cid_a9v3o, 371 _cformat_a9v3p, 372 _crelease_a9v3q, 373 _cduration_a9v3r, 374 _cname_a9v3s, 375 _csha1_a9v3t, 376 _csize_a9v3u, 377 _cid_a9v3v, 378 _cformat_a9v3w, 379 _crelease_a9v3x, 380 _cduration_a9v3y, 381 _cname_a9v3z, 382 _csha1_a9v3A, 383 _csize_a9v3B, 384 _cid_a9v3C, 385 _cname_a9v3D, 386 _cbody_a9v3E, 387 _calias_a9v3F, 388 _cdoi_a9v3G, 389 _cvolume_creation_a9v3H] 390 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 391 _tenv_a9v38 392 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 393 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 394 _csegment_a9v39, 395 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 396 _tenv_a9v38 397 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 398 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 399 _coptions_a9v3a, 400 Database.PostgreSQL.Typed.Types.pgDecodeColumn 401 _tenv_a9v38 402 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 403 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 404 _cstart_a9v3b, 405 Database.PostgreSQL.Typed.Types.pgDecodeColumn 406 _tenv_a9v38 407 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 408 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 409 _cprocess_a9v3c, 410 Database.PostgreSQL.Typed.Types.pgDecodeColumn 411 _tenv_a9v38 412 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 413 Database.PostgreSQL.Typed.Types.PGTypeName "text") 414 _clog_a9v3d, 415 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 416 _tenv_a9v38 417 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 418 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 419 _cid_a9v3e, 420 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 421 _tenv_a9v38 422 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 423 Database.PostgreSQL.Typed.Types.PGTypeName "text") 424 _cname_a9v3f, 425 Database.PostgreSQL.Typed.Types.pgDecodeColumn 426 _tenv_a9v38 427 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 428 Database.PostgreSQL.Typed.Types.PGTypeName "text") 429 _cprename_a9v3g, 430 Database.PostgreSQL.Typed.Types.pgDecodeColumn 431 _tenv_a9v38 432 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 433 Database.PostgreSQL.Typed.Types.PGTypeName "bpchar") 434 _corcid_a9v3h, 435 Database.PostgreSQL.Typed.Types.pgDecodeColumn 436 _tenv_a9v38 437 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 438 Database.PostgreSQL.Typed.Types.PGTypeName "text") 439 _caffiliation_a9v3i, 440 Database.PostgreSQL.Typed.Types.pgDecodeColumn 441 _tenv_a9v38 442 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 443 Database.PostgreSQL.Typed.Types.PGTypeName "text") 444 _curl_a9v3j, 445 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 446 _tenv_a9v38 447 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 448 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 449 _cemail_a9v3k, 450 Database.PostgreSQL.Typed.Types.pgDecodeColumn 451 _tenv_a9v38 452 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 453 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 454 _cpassword_a9v3l, 455 Database.PostgreSQL.Typed.Types.pgDecodeColumn 456 _tenv_a9v38 457 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 458 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 459 _csite_a9v3m, 460 Database.PostgreSQL.Typed.Types.pgDecodeColumn 461 _tenv_a9v38 462 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 463 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 464 _cmember_a9v3n, 465 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 466 _tenv_a9v38 467 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 468 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 469 _cid_a9v3o, 470 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 471 _tenv_a9v38 472 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 473 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 474 _cformat_a9v3p, 475 Database.PostgreSQL.Typed.Types.pgDecodeColumn 476 _tenv_a9v38 477 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 478 Database.PostgreSQL.Typed.Types.PGTypeName "release") 479 _crelease_a9v3q, 480 Database.PostgreSQL.Typed.Types.pgDecodeColumn 481 _tenv_a9v38 482 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 483 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 484 _cduration_a9v3r, 485 Database.PostgreSQL.Typed.Types.pgDecodeColumn 486 _tenv_a9v38 487 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 488 Database.PostgreSQL.Typed.Types.PGTypeName "text") 489 _cname_a9v3s, 490 Database.PostgreSQL.Typed.Types.pgDecodeColumn 491 _tenv_a9v38 492 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 493 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 494 _csha1_a9v3t, 495 Database.PostgreSQL.Typed.Types.pgDecodeColumn 496 _tenv_a9v38 497 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 498 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 499 _csize_a9v3u, 500 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 501 _tenv_a9v38 502 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 503 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 504 _cid_a9v3v, 505 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 506 _tenv_a9v38 507 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 508 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 509 _cformat_a9v3w, 510 Database.PostgreSQL.Typed.Types.pgDecodeColumn 511 _tenv_a9v38 512 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 513 Database.PostgreSQL.Typed.Types.PGTypeName "release") 514 _crelease_a9v3x, 515 Database.PostgreSQL.Typed.Types.pgDecodeColumn 516 _tenv_a9v38 517 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 518 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 519 _cduration_a9v3y, 520 Database.PostgreSQL.Typed.Types.pgDecodeColumn 521 _tenv_a9v38 522 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 523 Database.PostgreSQL.Typed.Types.PGTypeName "text") 524 _cname_a9v3z, 525 Database.PostgreSQL.Typed.Types.pgDecodeColumn 526 _tenv_a9v38 527 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 528 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 529 _csha1_a9v3A, 530 Database.PostgreSQL.Typed.Types.pgDecodeColumn 531 _tenv_a9v38 532 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 533 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 534 _csize_a9v3B, 535 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 536 _tenv_a9v38 537 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 538 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 539 _cid_a9v3C, 540 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 541 _tenv_a9v38 542 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 543 Database.PostgreSQL.Typed.Types.PGTypeName "text") 544 _cname_a9v3D, 545 Database.PostgreSQL.Typed.Types.pgDecodeColumn 546 _tenv_a9v38 547 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 548 Database.PostgreSQL.Typed.Types.PGTypeName "text") 549 _cbody_a9v3E, 550 Database.PostgreSQL.Typed.Types.pgDecodeColumn 551 _tenv_a9v38 552 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 553 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 554 _calias_a9v3F, 555 Database.PostgreSQL.Typed.Types.pgDecodeColumn 556 _tenv_a9v38 557 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 558 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 559 _cdoi_a9v3G, 560 Database.PostgreSQL.Typed.Types.pgDecodeColumn 561 _tenv_a9v38 562 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 563 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 564 _cvolume_creation_a9v3H))) 565 pure 566 (fmap 567 (\ (vsegment_a9v1L, voptions_a9v1M, vstart_a9v1N, vprocess_a9v1O, 568 vlog_a9v1P, vid_a9v1Q, vname_a9v1R, vprename_a9v1S, vorcid_a9v1T, 569 vaffiliation_a9v1U, vurl_a9v1V, vemail_a9v1W, vpassword_a9v1X, 570 vsite_a9v1Y, vmember_a9v1Z, vid_a9v20, vformat_a9v21, 571 vrelease_a9v22, vduration_a9v23, vname_a9v24, vc_a9v25, 572 vsize_a9v26, vid_a9v27, vformat_a9v28, vrelease_a9v29, 573 vduration_a9v2a, vname_a9v2b, vc_a9v2c, vsize_a9v2d, vid_a9v2e, 574 vname_a9v2f, vbody_a9v2g, valias_a9v2h, vdoi_a9v2i, vc_a9v2j) 575 -> makeTranscode 576 (makeOrigTranscode 577 (($) 578 (makeTranscodeRow 579 vsegment_a9v1L 580 voptions_a9v1M 581 vstart_a9v1N 582 vprocess_a9v1O 583 vlog_a9v1P) 584 (Databrary.Model.Party.SQL.makeSiteAuth 585 (Databrary.Model.Party.SQL.makeUserAccount 586 (Databrary.Model.Party.SQL.makeAccount 587 (PartyRow 588 vid_a9v1Q 589 vname_a9v1R 590 vprename_a9v1S 591 vorcid_a9v1T 592 vaffiliation_a9v1U 593 vurl_a9v1V) 594 (Account vemail_a9v1W))) 595 vpassword_a9v1X 596 (do { cm_a9v2k <- vsite_a9v1Y; 597 cm_a9v2l <- vmember_a9v1Z; 598 Just 599 (Databrary.Model.Permission.Types.Access cm_a9v2k cm_a9v2l) }))) 600 (Databrary.Model.Asset.SQL.makeAssetRow 601 vid_a9v20 602 vformat_a9v21 603 vrelease_a9v22 604 vduration_a9v23 605 vname_a9v24 606 vc_a9v25 607 vsize_a9v26)) 608 (Databrary.Model.Asset.SQL.makeAssetRow 609 vid_a9v27 610 vformat_a9v28 611 vrelease_a9v29 612 vduration_a9v2a 613 vname_a9v2b 614 vc_a9v2c 615 vsize_a9v2d) 616 (Databrary.Model.Volume.SQL.setCreation 617 (VolumeRow 618 vid_a9v2e vname_a9v2f vbody_a9v2g valias_a9v2h vdoi_a9v2i) 619 vc_a9v2j 620 [])) 621 rows) 622 623 minAppend :: Ord a => Maybe a -> Maybe a -> Maybe a 624 minAppend (Just x) (Just y) = Just $ min x y 625 minAppend Nothing x = x 626 minAppend x Nothing = x 627 628 addTranscode :: (MonadHas SiteAuth c m, MonadAudit c m, MonadStorage c m) => Asset -> Segment -> TranscodeArgs -> Probe -> m Transcode 629 addTranscode orig seg@(Segment rng) opts (ProbeAV _ fmt av) = do 630 own <- peek 631 a <- addAsset orig 632 { assetRow = (assetRow orig) 633 {assetFormat = fmt 634 , assetDuration = dur 635 , assetSHA1 = Nothing 636 , assetSize = Nothing 637 } 638 } Nothing 639 let _tenv_a9v5h = unknownPGTypeEnv 640 dbExecute1' -- [pgSQL|INSERT INTO transcode (asset, owner, orig, segment, options) VALUES (${assetId $ assetRow a}, ${partyId $ partyRow $ accountParty $ siteAccount own}, ${assetId $ assetRow orig}, ${seg}, ${map Just opts})|] 641 (mapQuery2 642 ((\ _p_a9v5i _p_a9v5j _p_a9v5k _p_a9v5l _p_a9v5m -> 643 (BS.concat 644 [Data.String.fromString 645 "INSERT INTO transcode (asset, owner, orig, segment, options) VALUES (", 646 Database.PostgreSQL.Typed.Types.pgEscapeParameter 647 _tenv_a9v5h 648 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 649 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 650 _p_a9v5i, 651 Data.String.fromString ", ", 652 Database.PostgreSQL.Typed.Types.pgEscapeParameter 653 _tenv_a9v5h 654 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 655 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 656 _p_a9v5j, 657 Data.String.fromString ", ", 658 Database.PostgreSQL.Typed.Types.pgEscapeParameter 659 _tenv_a9v5h 660 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 661 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 662 _p_a9v5k, 663 Data.String.fromString ", ", 664 Database.PostgreSQL.Typed.Types.pgEscapeParameter 665 _tenv_a9v5h 666 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 667 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 668 _p_a9v5l, 669 Data.String.fromString ", ", 670 Database.PostgreSQL.Typed.Types.pgEscapeParameter 671 _tenv_a9v5h 672 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 673 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 674 _p_a9v5m, 675 Data.String.fromString ")"])) 676 (assetId $ assetRow a) 677 (partyId $ partyRow $ accountParty $ siteAccount own) 678 (assetId $ assetRow orig) 679 seg 680 (map Just opts)) 681 (\[] -> ())) 682 let _tenv_a9v7a = unknownPGTypeEnv 683 _ <- dbExecute1 -- [pgSQL|UPDATE slot_asset SET asset = ${assetId $ assetRow a}, segment = segment(lower(segment) + ${fromMaybe 0 $ lowerBound rng}, COALESCE(lower(segment) + ${upperBound rng}, upper(segment))) WHERE asset = ${assetId $ assetRow orig}|] 684 (mapQuery2 685 ((\ _p_a9v7b _p_a9v7c _p_a9v7d _p_a9v7e -> 686 (BS.concat 687 [Data.String.fromString "UPDATE slot_asset SET asset = ", 688 Database.PostgreSQL.Typed.Types.pgEscapeParameter 689 _tenv_a9v7a 690 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 691 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 692 _p_a9v7b, 693 Data.String.fromString ", segment = segment(lower(segment) + ", 694 Database.PostgreSQL.Typed.Types.pgEscapeParameter 695 _tenv_a9v7a 696 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 697 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 698 _p_a9v7c, 699 Data.String.fromString ", COALESCE(lower(segment) + ", 700 Database.PostgreSQL.Typed.Types.pgEscapeParameter 701 _tenv_a9v7a 702 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 703 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 704 _p_a9v7d, 705 Data.String.fromString ", upper(segment))) WHERE asset = ", 706 Database.PostgreSQL.Typed.Types.pgEscapeParameter 707 _tenv_a9v7a 708 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 709 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 710 _p_a9v7e])) 711 (assetId $ assetRow a) 712 ((fromMaybe 0) $ lowerBound rng) 713 (upperBound rng) 714 (assetId $ assetRow orig)) 715 (\[] -> ())) 716 return Transcode 717 { transcodeRevision = AssetRevision 718 { revisionAsset = a 719 , revisionOrig = orig 720 } 721 , transcodeOwner = own 722 , transcodeSegment = seg 723 , transcodeOptions = opts 724 , transcodeStart = Nothing 725 , transcodeProcess = Nothing 726 , transcodeLog = Nothing 727 } 728 where 729 dur = maybe id (flip (-) . max 0) (lowerBound rng) <$> 730 minAppend (avProbeLength av) (upperBound rng) 731 addTranscode _ _ _ _ = fail "addTranscode: invalid probe type" 732 733 updateTranscode :: MonadDB c m => Transcode -> Maybe TranscodePID -> Maybe String -> m Transcode 734 updateTranscode tc pid logs = do 735 let _tenv_a9v7W = unknownPGTypeEnv 736 r <- dbQuery1 -- [pgSQL|UPDATE transcode SET process = ${pid}, log = COALESCE(COALESCE(log || E'\n', '') || ${logs}, log) WHERE asset = ${assetId $ assetRow $ transcodeAsset tc} AND COALESCE(process, 0) = ${fromMaybe 0 $ transcodeProcess tc} RETURNING log|] 737 (mapQuery2 738 ((\ _p_a9v7X _p_a9v7Y _p_a9v7Z _p_a9v80 -> 739 (BS.concat 740 [Data.String.fromString "UPDATE transcode SET process = ", 741 Database.PostgreSQL.Typed.Types.pgEscapeParameter 742 _tenv_a9v7W 743 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 744 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 745 _p_a9v7X, 746 Data.String.fromString 747 ", log = COALESCE(COALESCE(log || E'\\n', '') || ", 748 Database.PostgreSQL.Typed.Types.pgEscapeParameter 749 _tenv_a9v7W 750 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 751 Database.PostgreSQL.Typed.Types.PGTypeName "text") 752 _p_a9v7Y, 753 Data.String.fromString ", log) WHERE asset = ", 754 Database.PostgreSQL.Typed.Types.pgEscapeParameter 755 _tenv_a9v7W 756 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 757 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 758 _p_a9v7Z, 759 Data.String.fromString " AND COALESCE(process, 0) = ", 760 Database.PostgreSQL.Typed.Types.pgEscapeParameter 761 _tenv_a9v7W 762 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 763 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 764 _p_a9v80, 765 Data.String.fromString " RETURNING log"])) 766 pid 767 logs 768 (assetId $ assetRow $ transcodeAsset tc) 769 ((fromMaybe 0) $ transcodeProcess tc)) 770 (\[_clog_a9v81] 771 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumn 772 _tenv_a9v7W 773 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 774 Database.PostgreSQL.Typed.Types.PGTypeName "text") 775 _clog_a9v81))) 776 return $ maybe tc (\l -> tc 777 { transcodeProcess = pid 778 , transcodeLog = l 779 }) r 780 781 findTranscode :: MonadDB c m => Asset -> Segment -> TranscodeArgs -> m (Maybe Transcode) 782 findTranscode orig seg opts = do 783 -- dbQuery1 $ ($ orig) <$> $(selectQuery selectOrigTranscode "WHERE transcode.orig = ${assetId $ assetRow orig} AND transcode.segment = ${seg} AND transcode.options = ${map Just opts} AND asset.volume = ${volumeId $ volumeRow $ assetVolume orig} LIMIT 1") 784 let _tenv_a9v93 = unknownPGTypeEnv 785 mRow <- dbQuery1 786 (mapQuery2 787 ((\ _p_a9v94 _p_a9v97 _p_a9v99 _p_a9v9a -> 788 (BS.concat 789 [Data.String.fromString 790 "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id WHERE transcode.orig = ", 791 Database.PostgreSQL.Typed.Types.pgEscapeParameter 792 _tenv_a9v93 793 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 794 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 795 _p_a9v94, 796 Data.String.fromString " AND transcode.segment = ", 797 Database.PostgreSQL.Typed.Types.pgEscapeParameter 798 _tenv_a9v93 799 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 800 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 801 _p_a9v97, 802 Data.String.fromString " AND transcode.options = ", 803 Database.PostgreSQL.Typed.Types.pgEscapeParameter 804 _tenv_a9v93 805 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 806 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 807 _p_a9v99, 808 Data.String.fromString " AND asset.volume = ", 809 Database.PostgreSQL.Typed.Types.pgEscapeParameter 810 _tenv_a9v93 811 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 812 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 813 _p_a9v9a, 814 Data.String.fromString " LIMIT 1"])) 815 (assetId $ assetRow orig) 816 seg 817 (map Just opts) 818 (volumeId $ volumeRow $ assetVolume orig)) 819 (\ 820 [_csegment_a9v9b, 821 _coptions_a9v9c, 822 _cstart_a9v9d, 823 _cprocess_a9v9e, 824 _clog_a9v9f, 825 _cid_a9v9g, 826 _cname_a9v9h, 827 _cprename_a9v9i, 828 _corcid_a9v9j, 829 _caffiliation_a9v9k, 830 _curl_a9v9l, 831 _cemail_a9v9m, 832 _cpassword_a9v9n, 833 _csite_a9v9o, 834 _cmember_a9v9p, 835 _cid_a9v9q, 836 _cformat_a9v9r, 837 _crelease_a9v9s, 838 _cduration_a9v9t, 839 _cname_a9v9u, 840 _csha1_a9v9v, 841 _csize_a9v9w] 842 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 843 _tenv_a9v93 844 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 845 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 846 _csegment_a9v9b, 847 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 848 _tenv_a9v93 849 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 850 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 851 _coptions_a9v9c, 852 Database.PostgreSQL.Typed.Types.pgDecodeColumn 853 _tenv_a9v93 854 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 855 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 856 _cstart_a9v9d, 857 Database.PostgreSQL.Typed.Types.pgDecodeColumn 858 _tenv_a9v93 859 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 860 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 861 _cprocess_a9v9e, 862 Database.PostgreSQL.Typed.Types.pgDecodeColumn 863 _tenv_a9v93 864 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 865 Database.PostgreSQL.Typed.Types.PGTypeName "text") 866 _clog_a9v9f, 867 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 868 _tenv_a9v93 869 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 870 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 871 _cid_a9v9g, 872 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 873 _tenv_a9v93 874 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 875 Database.PostgreSQL.Typed.Types.PGTypeName "text") 876 _cname_a9v9h, 877 Database.PostgreSQL.Typed.Types.pgDecodeColumn 878 _tenv_a9v93 879 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 880 Database.PostgreSQL.Typed.Types.PGTypeName "text") 881 _cprename_a9v9i, 882 Database.PostgreSQL.Typed.Types.pgDecodeColumn 883 _tenv_a9v93 884 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 885 Database.PostgreSQL.Typed.Types.PGTypeName "bpchar") 886 _corcid_a9v9j, 887 Database.PostgreSQL.Typed.Types.pgDecodeColumn 888 _tenv_a9v93 889 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 890 Database.PostgreSQL.Typed.Types.PGTypeName "text") 891 _caffiliation_a9v9k, 892 Database.PostgreSQL.Typed.Types.pgDecodeColumn 893 _tenv_a9v93 894 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 895 Database.PostgreSQL.Typed.Types.PGTypeName "text") 896 _curl_a9v9l, 897 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 898 _tenv_a9v93 899 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 900 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 901 _cemail_a9v9m, 902 Database.PostgreSQL.Typed.Types.pgDecodeColumn 903 _tenv_a9v93 904 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 905 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 906 _cpassword_a9v9n, 907 Database.PostgreSQL.Typed.Types.pgDecodeColumn 908 _tenv_a9v93 909 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 910 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 911 _csite_a9v9o, 912 Database.PostgreSQL.Typed.Types.pgDecodeColumn 913 _tenv_a9v93 914 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 915 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 916 _cmember_a9v9p, 917 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 918 _tenv_a9v93 919 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 920 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 921 _cid_a9v9q, 922 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 923 _tenv_a9v93 924 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 925 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 926 _cformat_a9v9r, 927 Database.PostgreSQL.Typed.Types.pgDecodeColumn 928 _tenv_a9v93 929 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 930 Database.PostgreSQL.Typed.Types.PGTypeName "release") 931 _crelease_a9v9s, 932 Database.PostgreSQL.Typed.Types.pgDecodeColumn 933 _tenv_a9v93 934 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 935 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 936 _cduration_a9v9t, 937 Database.PostgreSQL.Typed.Types.pgDecodeColumn 938 _tenv_a9v93 939 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 940 Database.PostgreSQL.Typed.Types.PGTypeName "text") 941 _cname_a9v9u, 942 Database.PostgreSQL.Typed.Types.pgDecodeColumn 943 _tenv_a9v93 944 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 945 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 946 _csha1_a9v9v, 947 Database.PostgreSQL.Typed.Types.pgDecodeColumn 948 _tenv_a9v93 949 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 950 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 951 _csize_a9v9w))) 952 pure 953 (fmap (\mk -> mk orig) 954 (fmap 955 (\ (vsegment_a9v8b, voptions_a9v8c, vstart_a9v8d, vprocess_a9v8e, 956 vlog_a9v8f, vid_a9v8g, vname_a9v8h, vprename_a9v8i, vorcid_a9v8j, 957 vaffiliation_a9v8k, vurl_a9v8l, vemail_a9v8m, vpassword_a9v8n, 958 vsite_a9v8o, vmember_a9v8p, vid_a9v8q, vformat_a9v8r, 959 vrelease_a9v8s, vduration_a9v8t, vname_a9v8u, vc_a9v8v, 960 vsize_a9v8w) 961 -> makeOrigTranscode 962 (($) 963 (makeTranscodeRow 964 vsegment_a9v8b 965 voptions_a9v8c 966 vstart_a9v8d 967 vprocess_a9v8e 968 vlog_a9v8f) 969 (Databrary.Model.Party.SQL.makeSiteAuth 970 (Databrary.Model.Party.SQL.makeUserAccount 971 (Databrary.Model.Party.SQL.makeAccount 972 (PartyRow 973 vid_a9v8g 974 vname_a9v8h 975 vprename_a9v8i 976 vorcid_a9v8j 977 vaffiliation_a9v8k 978 vurl_a9v8l) 979 (Account vemail_a9v8m))) 980 vpassword_a9v8n 981 (do { cm_a9v8A <- vsite_a9v8o; 982 cm_a9v8B <- vmember_a9v8p; 983 Just 984 (Databrary.Model.Permission.Types.Access cm_a9v8A cm_a9v8B) }))) 985 (Databrary.Model.Asset.SQL.makeAssetRow 986 vid_a9v8q 987 vformat_a9v8r 988 vrelease_a9v8s 989 vduration_a9v8t 990 vname_a9v8u 991 vc_a9v8v 992 vsize_a9v8w)) 993 mRow)) 994 995 findMatchingTranscode :: MonadDB c m => Transcode -> m (Maybe Transcode) 996 findMatchingTranscode t@Transcode{..} = do 997 let _tenv_a9vgl = unknownPGTypeEnv 998 mRow <- dbQuery1 -- .(selectQuery selectTranscode "WHERE orig.sha1 = ${assetSHA1 $ assetRow $ transcodeOrig t} AND transcode.segment = ${transcodeSegment} AND transcode.options = ${map Just transcodeOptions} AND asset.id < ${assetId $ assetRow $ transcodeAsset t} ORDER BY asset.id LIMIT 1") 999 (mapQuery2 1000 ((\ _p_a9vgm _p_a9vgn _p_a9vgo _p_a9vgp -> 1001 (BS.concat 1002 [Data.String.fromString 1003 "SELECT transcode.segment,transcode.options,transcode.start,transcode.process,transcode.log,party.id,party.name,party.prename,party.orcid,party.affiliation,party.url,account.email,account.password,authorize_view.site,authorize_view.member,asset.id,asset.format,asset.release,asset.duration,asset.name,asset.sha1,asset.size,orig.id,orig.format,orig.release,orig.duration,orig.name,orig.sha1,orig.size,volume.id,volume.name,volume.body,volume.alias,volume.doi,volume_creation(volume.id) FROM transcode JOIN party JOIN account USING (id) LEFT JOIN authorize_view ON account.id = authorize_view.child AND authorize_view.parent = 0 ON transcode.owner = party.id JOIN asset ON transcode.asset = asset.id JOIN asset AS orig ON transcode.orig = orig.id JOIN volume ON asset.volume = volume.id AND orig.volume = volume.id WHERE orig.sha1 = ", 1004 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1005 _tenv_a9vgl 1006 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1007 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 1008 _p_a9vgm, 1009 Data.String.fromString " AND transcode.segment = ", 1010 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1011 _tenv_a9vgl 1012 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1013 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 1014 _p_a9vgn, 1015 Data.String.fromString " AND transcode.options = ", 1016 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1017 _tenv_a9vgl 1018 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1019 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 1020 _p_a9vgo, 1021 Data.String.fromString " AND asset.id < ", 1022 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1023 _tenv_a9vgl 1024 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1025 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1026 _p_a9vgp, 1027 Data.String.fromString " ORDER BY asset.id LIMIT 1"])) 1028 (assetSHA1 $ assetRow $ transcodeOrig t) 1029 transcodeSegment 1030 (map Just transcodeOptions) 1031 (assetId $ assetRow $ transcodeAsset t)) 1032 (\ 1033 [_csegment_a9vgq, 1034 _coptions_a9vgr, 1035 _cstart_a9vgs, 1036 _cprocess_a9vgt, 1037 _clog_a9vgu, 1038 _cid_a9vgv, 1039 _cname_a9vgw, 1040 _cprename_a9vgx, 1041 _corcid_a9vgy, 1042 _caffiliation_a9vgz, 1043 _curl_a9vgA, 1044 _cemail_a9vgB, 1045 _cpassword_a9vgC, 1046 _csite_a9vgD, 1047 _cmember_a9vgE, 1048 _cid_a9vgF, 1049 _cformat_a9vgG, 1050 _crelease_a9vgH, 1051 _cduration_a9vgI, 1052 _cname_a9vgJ, 1053 _csha1_a9vgK, 1054 _csize_a9vgL, 1055 _cid_a9vgM, 1056 _cformat_a9vgN, 1057 _crelease_a9vgO, 1058 _cduration_a9vgP, 1059 _cname_a9vgQ, 1060 _csha1_a9vgR, 1061 _csize_a9vgS, 1062 _cid_a9vgT, 1063 _cname_a9vgU, 1064 _cbody_a9vgV, 1065 _calias_a9vgW, 1066 _cdoi_a9vgX, 1067 _cvolume_creation_a9vgY] 1068 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1069 _tenv_a9vgl 1070 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1071 Database.PostgreSQL.Typed.Types.PGTypeName "segment") 1072 _csegment_a9vgq, 1073 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1074 _tenv_a9vgl 1075 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1076 Database.PostgreSQL.Typed.Types.PGTypeName "text[]") 1077 _coptions_a9vgr, 1078 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1079 _tenv_a9vgl 1080 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1081 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 1082 _cstart_a9vgs, 1083 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1084 _tenv_a9vgl 1085 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1086 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1087 _cprocess_a9vgt, 1088 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1089 _tenv_a9vgl 1090 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1091 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1092 _clog_a9vgu, 1093 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1094 _tenv_a9vgl 1095 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1096 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1097 _cid_a9vgv, 1098 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1099 _tenv_a9vgl 1100 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1101 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1102 _cname_a9vgw, 1103 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1104 _tenv_a9vgl 1105 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1106 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1107 _cprename_a9vgx, 1108 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1109 _tenv_a9vgl 1110 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1111 Database.PostgreSQL.Typed.Types.PGTypeName "bpchar") 1112 _corcid_a9vgy, 1113 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1114 _tenv_a9vgl 1115 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1116 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1117 _caffiliation_a9vgz, 1118 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1119 _tenv_a9vgl 1120 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1121 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1122 _curl_a9vgA, 1123 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1124 _tenv_a9vgl 1125 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1126 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 1127 _cemail_a9vgB, 1128 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1129 _tenv_a9vgl 1130 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1131 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 1132 _cpassword_a9vgC, 1133 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1134 _tenv_a9vgl 1135 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1136 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 1137 _csite_a9vgD, 1138 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1139 _tenv_a9vgl 1140 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1141 Database.PostgreSQL.Typed.Types.PGTypeName "permission") 1142 _cmember_a9vgE, 1143 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1144 _tenv_a9vgl 1145 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1146 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1147 _cid_a9vgF, 1148 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1149 _tenv_a9vgl 1150 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1151 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 1152 _cformat_a9vgG, 1153 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1154 _tenv_a9vgl 1155 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1156 Database.PostgreSQL.Typed.Types.PGTypeName "release") 1157 _crelease_a9vgH, 1158 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1159 _tenv_a9vgl 1160 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1161 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 1162 _cduration_a9vgI, 1163 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1164 _tenv_a9vgl 1165 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1166 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1167 _cname_a9vgJ, 1168 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1169 _tenv_a9vgl 1170 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1171 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 1172 _csha1_a9vgK, 1173 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1174 _tenv_a9vgl 1175 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1176 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 1177 _csize_a9vgL, 1178 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1179 _tenv_a9vgl 1180 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1181 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1182 _cid_a9vgM, 1183 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1184 _tenv_a9vgl 1185 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1186 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 1187 _cformat_a9vgN, 1188 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1189 _tenv_a9vgl 1190 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1191 Database.PostgreSQL.Typed.Types.PGTypeName "release") 1192 _crelease_a9vgO, 1193 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1194 _tenv_a9vgl 1195 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1196 Database.PostgreSQL.Typed.Types.PGTypeName "interval") 1197 _cduration_a9vgP, 1198 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1199 _tenv_a9vgl 1200 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1201 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1202 _cname_a9vgQ, 1203 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1204 _tenv_a9vgl 1205 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1206 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 1207 _csha1_a9vgR, 1208 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1209 _tenv_a9vgl 1210 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1211 Database.PostgreSQL.Typed.Types.PGTypeName "bigint") 1212 _csize_a9vgS, 1213 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1214 _tenv_a9vgl 1215 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1216 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1217 _cid_a9vgT, 1218 Database.PostgreSQL.Typed.Types.pgDecodeColumnNotNull 1219 _tenv_a9vgl 1220 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1221 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1222 _cname_a9vgU, 1223 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1224 _tenv_a9vgl 1225 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1226 Database.PostgreSQL.Typed.Types.PGTypeName "text") 1227 _cbody_a9vgV, 1228 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1229 _tenv_a9vgl 1230 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1231 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 1232 _calias_a9vgW, 1233 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1234 _tenv_a9vgl 1235 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1236 Database.PostgreSQL.Typed.Types.PGTypeName "character varying") 1237 _cdoi_a9vgX, 1238 Database.PostgreSQL.Typed.Types.pgDecodeColumn 1239 _tenv_a9vgl 1240 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1241 Database.PostgreSQL.Typed.Types.PGTypeName "timestamp with time zone") 1242 _cvolume_creation_a9vgY))) 1243 pure 1244 (fmap 1245 (\ (vsegment_a9vaq, voptions_a9var, vstart_a9vas, vprocess_a9vat, 1246 vlog_a9vau, vid_a9vav, vname_a9vaw, vprename_a9vax, vorcid_a9vay, 1247 vaffiliation_a9vaz, vurl_a9vaA, vemail_a9vaB, vpassword_a9vaC, 1248 vsite_a9vaD, vmember_a9vaE, vid_a9vaF, vformat_a9vaG, 1249 vrelease_a9vaH, vduration_a9vaI, vname_a9vaJ, vc_a9vaK, 1250 vsize_a9vaL, vid_a9vaM, vformat_a9vaN, vrelease_a9vaO, 1251 vduration_a9vaP, vname_a9vaQ, vc_a9vaR, vsize_a9vaS, vid_a9vaT, 1252 vname_a9vaU, vbody_a9vaV, valias_a9vaW, vdoi_a9vaX, vc_a9vaY) 1253 -> makeTranscode 1254 (makeOrigTranscode 1255 (($) 1256 (makeTranscodeRow 1257 vsegment_a9vaq 1258 voptions_a9var 1259 vstart_a9vas 1260 vprocess_a9vat 1261 vlog_a9vau) 1262 (Databrary.Model.Party.SQL.makeSiteAuth 1263 (Databrary.Model.Party.SQL.makeUserAccount 1264 (Databrary.Model.Party.SQL.makeAccount 1265 (PartyRow 1266 vid_a9vav 1267 vname_a9vaw 1268 vprename_a9vax 1269 vorcid_a9vay 1270 vaffiliation_a9vaz 1271 vurl_a9vaA) 1272 (Account vemail_a9vaB))) 1273 vpassword_a9vaC 1274 (do { cm_a9vaZ <- vsite_a9vaD; 1275 cm_a9vb0 <- vmember_a9vaE; 1276 Just 1277 (Databrary.Model.Permission.Types.Access cm_a9vaZ cm_a9vb0) }))) 1278 (Databrary.Model.Asset.SQL.makeAssetRow 1279 vid_a9vaF 1280 vformat_a9vaG 1281 vrelease_a9vaH 1282 vduration_a9vaI 1283 vname_a9vaJ 1284 vc_a9vaK 1285 vsize_a9vaL)) 1286 (Databrary.Model.Asset.SQL.makeAssetRow 1287 vid_a9vaM 1288 vformat_a9vaN 1289 vrelease_a9vaO 1290 vduration_a9vaP 1291 vname_a9vaQ 1292 vc_a9vaR 1293 vsize_a9vaS) 1294 (Databrary.Model.Volume.SQL.setCreation 1295 (VolumeRow 1296 vid_a9vaT vname_a9vaU vbody_a9vaV valias_a9vaW vdoi_a9vaX) 1297 vc_a9vaY 1298 [])) 1299 mRow) 1300 1301 checkAlreadyTranscoded :: MonadDB c m => Asset -> Probe -> m Bool 1302 checkAlreadyTranscoded Asset{ assetRow = AssetRow { assetFormat = fmt, assetSHA1 = Just sha1 } } ProbeAV{ probeTranscode = tfmt, probeAV = av } 1303 | fmt == tfmt && avProbeCheckFormat fmt av = do 1304 let _tenv_a9vmk = unknownPGTypeEnv 1305 (Just (Just (1 :: Int32)) ==) <$> dbQuery1 -- [pgSQL|SELECT 1 FROM asset WHERE asset.sha1 = ${sha1} AND asset.format = ${formatId fmt} AND asset.duration IS NOT NULL LIMIT 1|] 1306 (mapQuery2 1307 ((\ _p_a9vml _p_a9vmm -> 1308 (BS.concat 1309 [Data.String.fromString "SELECT 1 FROM asset WHERE asset.sha1 = ", 1310 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1311 _tenv_a9vmk 1312 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1313 Database.PostgreSQL.Typed.Types.PGTypeName "bytea") 1314 _p_a9vml, 1315 Data.String.fromString " AND asset.format = ", 1316 Database.PostgreSQL.Typed.Types.pgEscapeParameter 1317 _tenv_a9vmk 1318 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1319 Database.PostgreSQL.Typed.Types.PGTypeName "smallint") 1320 _p_a9vmm, 1321 Data.String.fromString " AND asset.duration IS NOT NULL LIMIT 1"])) 1322 sha1 (formatId fmt)) 1323 (\[_ccolumn_a9vmn] 1324 -> (Database.PostgreSQL.Typed.Types.pgDecodeColumn 1325 _tenv_a9vmk 1326 (Database.PostgreSQL.Typed.Types.PGTypeProxy :: 1327 Database.PostgreSQL.Typed.Types.PGTypeName "integer") 1328 _ccolumn_a9vmn))) 1329 checkAlreadyTranscoded _ _ = return False