Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

199 строки
6.8KB

  1. #|
  2. src/models/category-2.lisp
  3. Category v2
  4. Based on DB_NestedSet <https://pear.php.net/manual/en/package.DB_NestedSet.php>
  5. It looks like keepAsArray controls whether or not it outputs a list or
  6. something passed through MAKE-INSTANCE.
  7. |#
  8. (defpackage #:cl-deck-builder2.models.category-2
  9. (:use #:cl))
  10. (:in-package #:cl-deck-builder2.models.category-2)
  11. ;; CLASSES
  12. #|
  13. # The table which holds the structure
  14. CREATE TABLE tb_nodes (
  15. STRID int(11) NOT NULL auto_increment,
  16. ROOTID int(11) NOT NULL default '0',
  17. l int(11) NOT NULL default '0',
  18. r int(11) NOT NULL default '0',
  19. PARENT int(11) NOT NULL default '0',
  20. STREH int(11) NOT NULL default '0',
  21. LEVEL int(11) NOT NULL default '0',
  22. STRNA char(128) NOT NULL default '',
  23. PRIMARY KEY (STRID),
  24. KEY ROOTID (ROOTID),
  25. KEY STREH (STREH),
  26. KEY l (l),
  27. KEY r (r),
  28. KEY LEVEL (LEVEL),
  29. KEY SRLR (ROOTID,l,r),
  30. KEY parent (PARENT)
  31. ) TYPE=MyISAM COMMENT='NestedSet table';
  32. |#
  33. (defclass db-nested-set-node (registered-table-class)
  34. ((root-id :col-type :integer :default 1)
  35. (left :col-type :integer :default 1)
  36. (right :col-type :integer :default 1)
  37. (parent :col-type :integer :default 1))
  38. ;; (streh :col-type :integer :default 0)
  39. ;; (level :col-type :integer :default 0)
  40. ;; (strna :col-type (:varchar 128) :default "")
  41. (:documentation "Class for DB_NestedSet Nodes."))
  42. (defmethod closer-mop:validate-superclass ((class db-nested-set-node)
  43. (superclass registered-table-class))
  44. t)
  45. #|
  46. # A table which is used for a little table locking to avoid conflicts
  47. CREATE TABLE tb_locks (
  48. lockID char(32) NOT NULL default '',
  49. lockTable char(32) NOT NULL default '',
  50. lockStamp int(11) NOT NULL default '0',
  51. PRIMARY KEY (lockID,lockTable)
  52. ) TYPE=MyISAM COMMENT='Table locks for NestedSet';
  53. |#
  54. (defclass db-nested-set-lock ()
  55. (;; TODO Being able to switch the table name would be cool. With
  56. ;; MITO It would be a class. I'm not sure how to code that.
  57. (lock-table :col-type (:varchar 32))
  58. (lock-stamp :col-type :timestamp
  59. :initform (local-time:now)
  60. :inflate #'local-time:universal-to-timestamp
  61. :deflate #'local-time:timestamp-to-universal))
  62. (:metaclass registered-table-class)
  63. (:documentation "Class for DB_NestedSet Locks Table."))
  64. ;; Helper Class
  65. (defclass db-nested-set ()
  66. ((db-nested-set-nodes :accessor nested-set-nodes
  67. :initform '())
  68. (db-nested-set-locks :accessor nested-set-nodes
  69. :initform '())))
  70. ;; GENERICS
  71. (defgeneric create-root-node (obj))
  72. (defgeneric create-left-node (obj))
  73. (defgeneric create-right-node (obj))
  74. (defgeneric create-sub-node (obj))
  75. (defgeneric delete-node (obj))
  76. (defgeneric get-all-nodes (obj))
  77. (defgeneric get-root-nodes (obj))
  78. (defgeneric pick-node (obj))
  79. (defgeneric update-node (obj))
  80. (defgeneric get-branch (obj))
  81. (defgeneric get-children (obj))
  82. (defgeneric get-parent (obj))
  83. (defgeneric get-parents (obj))
  84. (defgeneric get-siblings (obj))
  85. (defgeneric get-sub-branch (obj))
  86. (defgeneric is-parent (obj))
  87. (defgeneric move-across (obj))
  88. (defgeneric move-cleanup (obj))
  89. (defgeneric move-root-to-root (obj))
  90. (defgeneric move-tree (obj))
  91. ;; METHODS
  92. (defmethod create-root-node ((obj db-nested-set)))
  93. (defmethod create-left-node ((obj db-nested-set)))
  94. (defmethod create-right-node ((obj db-nested-set)))
  95. (defmethod create-sub-node ((obj db-nested-set)))
  96. (defmethod delete-node ((obj db-nested-set)))
  97. (defmethod get-all-nodes ((obj db-nested-set)))
  98. (defmethod get-root-nodes ((obj db-nested-set)))
  99. (defmethod pick-node ((obj db-nested-set)))
  100. (defmethod update-node ((obj db-nested-set)))
  101. (defmethod get-branch ((obj db-nested-set)))
  102. (defmethod get-children ((obj db-nested-set)))
  103. (defmethod get-parent ((obj db-nested-set)))
  104. (defmethod get-parents ((obj db-nested-set)))
  105. (defmethod get-siblings ((obj db-nested-set)))
  106. (defmethod get-sub-branch ((obj db-nested-set)))
  107. (defmethod is-parent ((obj db-nested-set)))
  108. (defmethod move-across ((obj db-nested-set)))
  109. (defmethod move-cleanup ((obj db-nested-set)))
  110. (defmethod move-root-to-root ((obj db-nested-set)))
  111. (defmethod move-tree ((obj db-nested-set)))
  112. #|
  113. @$this->cache->flush('function_cache');
  114. function & factory($driver, $dsn, $params = array()) {
  115. function DB_NestedSet($params) {
  116. function _DB_NestedSet() {
  117. function _addSQL($addSQL, $type, $prefix = false) {
  118. function _debugMessage($msg) {
  119. function _getMessage($code) {
  120. function _getSelectFields($aliasFields) {
  121. function _lockGC() {
  122. function _moveAcross($source, $target, $pos, $first = false) {
  123. function _moveCleanup($copy = false) {
  124. function _moveRoot2Root($source, $target, $pos) {
  125. function _processResultSet($sql, $keepAsArray, $fieldsAreAliased) {
  126. function _raiseError($code, $mode, $option, $epr = array()) {
  127. function _releaseLock($exclusive = false) {
  128. function _secSort($nodeSet) {
  129. function _secSortCollect($segment, $deepArray, $reset = false) {
  130. function _setLock($exclusive = false) {
  131. function _testFatalAbort($errobj, $file, $line) {
  132. function _values2InsertQuery($values, $addval = false) {
  133. function _values2UpdateQuery($values, $addval = false) {
  134. function _verifyUserValues($caller, & $values) {
  135. function addListener($event, & $listener) {
  136. function apiVersion() {
  137. function convertTreeModel(& $orig, & $copy, $_parent = false) {
  138. function createLeftNode($id, $values) {
  139. function createRightNode($id, $values) {
  140. function createRootNode($values, $id = false, $first = false, $pos = NESE_MOVE_AFTER) {
  141. function createSubNode($id, $values) {
  142. function deleteNode($id) {
  143. function getAllNodes($keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  144. function getBranch($id, $keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  145. function getChildren($id, $keepAsArray = false, $aliasFields = true, $forceNorder = false, $addSQL = array()) {
  146. function getParent($id, $keepAsArray = false, $aliasFields = true, $addSQL = array(), $useDB = true) {
  147. function getParents($id, $keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  148. function getRootNodes($keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  149. function getSiblings($id, $keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  150. function getSubBranch($id, $keepAsArray = false, $aliasFields = true, $addSQL = array()) {
  151. function isParent($parent, $child) {
  152. function moveTree($id, $targetid, $pos, $copy = false) {
  153. function pickNode($id, $keepAsArray = false, $aliasFields = true, $idfield = 'id', $addSQL = array()) {
  154. function removeListener($event, $listenerID) {
  155. function setAttr($attr) {
  156. function setDbOption($option, $val) {
  157. function setsortMode($sortMode = false) {
  158. function testLock() {
  159. function triggerEvent($event, & $node, $eparams = false) {
  160. function updateNode($id, $values, $_internal = false) {
  161. register_shutdown_function(array(& $this, '_DB_NestedSet'));
  162. |#