ASP Classic blog framework - BrainOrdure
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

269 lines
10KB

  1. <%
  2. ' Auto-generated Repository for table [Posts]
  3. ' Generated on 5/2/2026 9:48:11 PM
  4. ' Generator: GenerateRepo.vbs v1.0
  5. '
  6. ' Dependencies:
  7. ' - core/lib.DAL.asp (DAL singleton for database access)
  8. ' - core/lib.AutoMapper.asp (Automapper for object mapping)
  9. ' - core/lib.Collections.asp (LinkedList_Class)
  10. ' - core/lib.helpers.asp (KVUnzip, BuildOrderBy, QI, Destroy)
  11. Class PostsRepository_Class
  12. Public Function FindByID(id)
  13. Dim sql : sql = "Select [Body], [CategoryID], [CreatedDate], [IsPublished], [PostID], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate] FROM [Posts] WHERE [PostID] = ?"
  14. Dim rs : Set rs = DAL.Query(sql, Array(id))
  15. If rs.EOF Then
  16. Err.Raise 1, "PostsRepository_Class", RecordNotFoundException("PostID", id)
  17. Else
  18. Set FindByID = Automapper.AutoMap(rs, "POBO_Posts")
  19. End If
  20. Destroy rs
  21. End Function
  22. Public Function GetAll(orderBy)
  23. Set GetAll = Find(Empty, orderBy)
  24. End Function
  25. Public Function FindAllWhere(ByVal where_clause, ByVal order_by, ByVal offset, ByVal limit)
  26. Dim sql : sql = "Select [Body], [CategoryID], [CreatedDate], [IsPublished], [PostID], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate] FROM [Posts]"
  27. Dim whereText : whereText = ""
  28. If Not IsEmpty(where_clause) Then
  29. If Not IsNull(where_clause) Then whereText = Trim(CStr(where_clause))
  30. End If
  31. If Len(whereText) > 0 Then
  32. sql = sql & " WHERE " & whereText
  33. End If
  34. sql = sql & BuildOrderBy(order_by, "[PostID]")
  35. Dim offsetCount, limitCount
  36. If IsNumeric(offset) Then
  37. offsetCount = CLng(offset)
  38. Else
  39. offsetCount = 0
  40. End If
  41. If offsetCount < 0 Then offsetCount = 0
  42. If IsNumeric(limit) Then
  43. limitCount = CLng(limit)
  44. Else
  45. limitCount = 0
  46. End If
  47. Dim rs : Set rs = DAL.Query(sql, Empty)
  48. Dim list : Set list = new LinkedList_Class
  49. Dim skipped, added
  50. skipped = 0
  51. added = 0
  52. Do Until rs.EOF
  53. If skipped < offsetCount Then
  54. skipped = skipped + 1
  55. ElseIf limitCount <= 0 Or added < limitCount Then
  56. list.Push Automapper.AutoMap(rs, "POBO_Posts")
  57. added = added + 1
  58. End If
  59. If limitCount > 0 And added >= limitCount Then Exit Do
  60. rs.MoveNext
  61. Loop
  62. Set FindAllWhere = list
  63. Destroy rs
  64. End Function
  65. Public Function Find(where_kvarray, order_string_or_array)
  66. Dim sql : sql = "Select [Body], [CategoryID], [CreatedDate], [IsPublished], [PostID], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate] FROM [Posts]"
  67. Dim where_keys, where_values, i
  68. If Not IsEmpty(where_kvarray) Then
  69. KVUnzip where_kvarray, where_keys, where_values
  70. If Not IsEmpty(where_keys) Then
  71. sql = sql & " WHERE "
  72. For i = 0 To UBound(where_keys)
  73. If i > 0 Then sql = sql & " AND "
  74. sql = sql & " " & QI(where_keys(i)) & " = ?"
  75. Next
  76. End If
  77. End If
  78. sql = sql & BuildOrderBy(order_string_or_array, "[PostID]")
  79. Dim rs : Set rs = DAL.Query(sql, where_values)
  80. Dim list : Set list = new LinkedList_Class
  81. Do Until rs.EOF
  82. list.Push Automapper.AutoMap(rs, "POBO_Posts")
  83. rs.MoveNext
  84. Loop
  85. Set Find = list
  86. Destroy rs
  87. End Function
  88. Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
  89. Dim sql : sql = "Select [Body], [CategoryID], [CreatedDate], [IsPublished], [PostID], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate] FROM [Posts]"
  90. Dim where_keys, where_values, i
  91. If Not IsEmpty(where_kvarray) Then
  92. KVUnzip where_kvarray, where_keys, where_values
  93. If Not IsEmpty(where_keys) Then
  94. sql = sql & " WHERE "
  95. For i = 0 To UBound(where_keys)
  96. If i > 0 Then sql = sql & " AND "
  97. sql = sql & " " & QI(where_keys(i)) & " = ?"
  98. Next
  99. End If
  100. End If
  101. sql = sql & BuildOrderBy(order_string_or_array, "[PostID]")
  102. Dim rs : Set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)
  103. If Not rs.EOF Then
  104. rs.PageSize = per_page
  105. rs.AbsolutePage = page_num
  106. page_count = rs.PageCount
  107. record_count = rs.RecordCount
  108. End If
  109. Set FindPaged = PagedList(rs, per_page)
  110. Destroy rs
  111. End Function
  112. Public Function SearchTablePaged(columns_array, search_value, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)
  113. Dim sql : sql = "Select [Body], [CategoryID], [CreatedDate], [IsPublished], [PostID], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate] FROM [Posts]"
  114. Dim i, params()
  115. If IsArray(columns_array) And UBound(columns_array) >= 0 Then
  116. sql = sql & " WHERE "
  117. ReDim params(UBound(columns_array))
  118. For i = 0 To UBound(columns_array)
  119. If i > 0 Then sql = sql & " OR "
  120. sql = sql & " " & QI(columns_array(i)) & " LIKE ?"
  121. params(i) = "%" & search_value & "%"
  122. Next
  123. End If
  124. sql = sql & BuildOrderBy(order_string_or_array, "[PostID]")
  125. Dim rs : Set rs = DAL.PagedQuery(sql, params, per_page, page_num)
  126. If Not rs.EOF Then
  127. rs.PageSize = per_page
  128. rs.AbsolutePage = page_num
  129. page_count = rs.PageCount
  130. record_count = rs.RecordCount
  131. End If
  132. Set SearchTablePaged = PagedList(rs, per_page)
  133. Destroy rs
  134. End Function
  135. Private Function PagedList(rs, per_page)
  136. Dim list : Set list = new LinkedList_Class
  137. Dim x : x = 0
  138. Do While (per_page <= 0 Or x < per_page) And Not rs.EOF
  139. list.Push Automapper.AutoMap(rs, "POBO_Posts")
  140. x = x + 1
  141. rs.MoveNext
  142. Loop
  143. Set PagedList = list
  144. End Function
  145. Public Sub AddNew(ByRef model)
  146. Dim sql : sql = "INSERT INTO [Posts] ([Body], [CategoryID], [CreatedDate], [IsPublished], [PublishedDate], [Slug], [Summary], [Title], [UpdatedDate]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"
  147. DAL.Execute sql, Array(model.Body, model.CategoryID, model.CreatedDate, model.IsPublished, model.PublishedDate, model.Slug, model.Summary, model.Title, model.UpdatedDate)
  148. ' Retrieve the newly inserted ID
  149. On Error Resume Next
  150. Dim rsId : Set rsId = DAL.Query("SELECT @@IDENTITY AS NewID", Empty)
  151. If Err.Number <> 0 Then
  152. ' Fallback for Access databases
  153. Err.Clear
  154. Set rsId = DAL.Query("SELECT TOP 1 [PostID] FROM [Posts] ORDER BY [PostID] DESC", Empty)
  155. End If
  156. On Error GoTo 0
  157. If Not rsId.EOF Then
  158. If Not IsNull(rsId(0)) Then model.PostID = rsId(0)
  159. End If
  160. Destroy rsId
  161. End Sub
  162. Public Sub Update(model)
  163. Dim sql : sql = "UPDATE [Posts] SET [Body] = ?, [CategoryID] = ?, [CreatedDate] = ?, [IsPublished] = ?, [PublishedDate] = ?, [Slug] = ?, [Summary] = ?, [Title] = ?, [UpdatedDate] = ? WHERE [PostID] = ?"
  164. DAL.Execute sql, Array(model.Body, model.CategoryID, model.CreatedDate, model.IsPublished, model.PublishedDate, model.Slug, model.Summary, model.Title, model.UpdatedDate, model.PostID)
  165. End Sub
  166. Public Sub Delete(id)
  167. Dim sql : sql = "DELETE FROM [Posts] WHERE [PostID] = ?"
  168. DAL.Execute sql, Array(id)
  169. End Sub
  170. Private Function RecordNotFoundException(ByVal field_name, ByVal field_val)
  171. RecordNotFoundException = "Posts record was not found with " & field_name & " = '" & field_val & "'."
  172. End Function
  173. Private Function QI(name)
  174. QI = "[" & Replace(CStr(name), "]", "]]") & "]"
  175. End Function
  176. Private Function BuildOrderBy(ByVal orderArg, ByVal defaultCol)
  177. Dim s : s = ""
  178. If IsArray(orderArg) Then
  179. Dim i : s = " ORDER BY "
  180. For i = 0 To UBound(orderArg)
  181. If i > 0 Then s = s & ", "
  182. s = s & QI(orderArg(i))
  183. Next
  184. ElseIf IsEmpty(orderArg) Then
  185. s = " ORDER BY " & defaultCol & " ASC"
  186. ElseIf IsNull(orderArg) Then
  187. s = " ORDER BY " & defaultCol & " ASC"
  188. ElseIf CStr(orderArg) = "" Then
  189. s = " ORDER BY " & defaultCol & " ASC"
  190. ElseIf IsSafeOrderExpression(orderArg) Then
  191. Dim parts : parts = Split(Trim(CStr(orderArg)), " ")
  192. s = " ORDER BY " & QI(parts(0))
  193. If UBound(parts) = 1 Then s = s & " " & UCase(parts(1))
  194. Else
  195. s = " ORDER BY " & QI(orderArg)
  196. End If
  197. BuildOrderBy = s
  198. End Function
  199. Private Function IsSafeOrderExpression(ByVal orderArg)
  200. Dim raw : raw = Trim(CStr(orderArg))
  201. Dim parts : parts = Split(raw, " ")
  202. IsSafeOrderExpression = False
  203. If UBound(parts) < 0 Or UBound(parts) > 1 Then Exit Function
  204. If Not IsSafeIdentifier(parts(0)) Then Exit Function
  205. If UBound(parts) = 1 Then
  206. If UCase(parts(1)) <> "ASC" And UCase(parts(1)) <> "DESC" Then Exit Function
  207. End If
  208. IsSafeOrderExpression = True
  209. End Function
  210. Private Function IsSafeIdentifier(ByVal value)
  211. Dim i, ch
  212. value = CStr(value)
  213. If Len(value) = 0 Then
  214. IsSafeIdentifier = False
  215. Exit Function
  216. End If
  217. For i = 1 To Len(value)
  218. ch = Mid(value, i, 1)
  219. If Not ((ch >= "a" And ch <= "z") Or _
  220. (ch >= "A" And ch <= "Z") Or _
  221. (ch >= "0" And ch <= "9") Or _
  222. ch = "_") Then
  223. IsSafeIdentifier = False
  224. Exit Function
  225. End If
  226. Next
  227. IsSafeIdentifier = True
  228. End Function
  229. End Class
  230. Dim PostsRepository__Singleton
  231. Function PostsRepository()
  232. If IsEmpty(PostsRepository__Singleton) Then
  233. Set PostsRepository__Singleton = new PostsRepository_Class
  234. End If
  235. Set PostsRepository = PostsRepository__Singleton
  236. End Function
  237. %>

Powered by TurnKey Linux.