Hi Jason,

sorry for yesterday, but I was busy and did not want to dig deeper into it.

I still can only guess what you need, and can't test it, but here are some fixes
which should show how I understand what you want to do:


(class +APK +Entity)
# APK POC Package Database Class
(rel apk (+Ref +String))               # APK Path
(rel app (+IdxFold +String))           # APK Package
(rel aid (+Key +String))               # APK Application ID
(rel ino (+Key +Number))               # FS  Inode of APK on SharePoint 
filesystem (UUID)
(rel flv (+Ref +String))               # APK Build Flavor
(rel bty (+String))                    # APK Build Type
(rel vrn (+Ref +Number))               # APK VersionCode
(rel vrs (+Ref +String))               # APK VersionName
(rel gin (+String))                    # APK GIT Info String
(rel dbg (+Ref +Bool))                 # APK has Debug Logging enabled
(rel blt (+Ref +Bag) NIL               # APK BuildTime
   ((+Date))                              # Date
   ((+Time)) )                            # Time
(rel bls (+String))                    # APK BuildTimeString
(rel ctm (+Ref +Bag) NIL               # APK Creation Time
   ((+Date))                              # Date
   ((+Time)) )                            # Time
(rel mtm (+Ref +Bag) NIL               # APK Modification Time
   ((+Date))                              # Date
   ((+Time)) )                            # Time
(rel AB> (*Ref +Number))               # APK MinSdkVersion (Android ABI #)
(rel AB< (*Ref +Number))               # APK MaxSdkVersion (Android ABI #)
(rel AB@ (*Ref +Number))               # APK TargetSdkVersion (Android ABI #)
(rel AB$ (*Ref +Number))               # APK CompileSdkVersion (Android ABI #)

(de apks (Flv Ver Blt Abi Mtm)
   (unless
      (and
         (str? Flv)
         (num? Ver)
         (num? Blt)
         (num? Abi) )
      (quit  # You may 'throw' here, but it needs a tag
         (pack
            "apks: Invalid Parameters: flv:" Flv
            " vrn:" Ver
            " Mtm:" Mtm
            " Abi:" Abi ) ) )
   (symbols '(APK pico)
      (solve
         (quote
            @FLV Flv  # have a given 'flv' (flavor) attribute == Flv
            @VER (cons Ver T)  # have a version >= Ver
            @BLT (cons Blt T)  # have a build time >= Blt
            @AB> (cons NIL Abi)  # have a min api # <= Abi
            @AB< (cons Abi T)  # have a max api # >= Abi
            @MTM (and Mtm (cons @ T))  # have a modification time >= Mtm
            (select (@APK)
               ((flv +APK @FLV)
                  (vrn +APK @VER)
                  (blt +APK @BLT)
                  (AB> +APK @AB>)
                  (AB< +APK @AB<) )
               (same @FLV @APK flv)
               (range @VER @APK vrn)
               (range @BLT @APK blt)
               (range @AB> @APK AB>)
               (range @AB< @APK AB<)
               (range @MTM @APK mtm) ) )
         @APK ) ) )


> (de apk_str (a)
>    (mapcar
>       '((c)
>          (pack (cdr c) " : " (car c))
>          )
>       (getl a)
>       )
>    )

Just to make sure: Please don't forget to change (namings!) to something like

(de apk_str (A)
   (mapcar
      '((C) (pack (cdr C) " : " (car C)))
      (getl A) ) )


> (de show_apks (apks)
>    (prog
>       (let
>          (s "")
>          (prog
>             (for a apks
>                (setq s
>                   (join "^I" (apk_str a))
>                   )
>                )
>             )
>          )
>       s
>       )
>    )

The 'prog's are not needed for the 'let' or 'for'

(de show_apks (Apks)
   (let S ""
      (for A Apks
         (setq S (join "^I" (apk_str A))) )
      S ) )


> I guess picoLisp's DB is kind of a work-in-progress / unfinished idea ?

Nope. It is used in many projects since more than 20 years. Very stable.

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to