CApache

Apache 2 Swift3 Swift4 Swift5 macOS tuxOS

一个 Swift 系统库包 (Apache, ApachePortableRuntime 和 APRUtil 的 C 语言封装)。 这个包是 mod_swift 项目的一部分。

使用 Apache Portable Runtime

重要: 这个版本的包需要你安装 mod_swift。 它会安装必要的垫片层 (shims)。

设置你的 Package.swift 文件,使其包含 CApache

import PackageDescription

let package = Package(
  name: "MyTool",
	
  dependencies: [
    .Package(url: "git@github.com:modswift/CApache.git", from: "2.0.0"),
  ]
)

导入 CAPR 模块。

import CAPR
import CAPRUtil

注意: 如果你还在使用 Swift 3 或者 4.0, 请使用 1.0.0 版本。

APR 数据库示例

使用 APR-Util DBD 模块访问 SQLite3 数据库 (零错误处理)

let connectString = "OpenGroupware.sqlite3"
let sql = "SELECT company_id, login FROM person"

var pool         : OpaquePointer? = nil
var driverHandle : OpaquePointer? = nil
var con          : OpaquePointer? = nil
var res          : OpaquePointer? = nil

apr_pool_initialize()
apr_pool_create_ex(&pool, nil, nil, nil)
apr_dbd_init(pool)
apr_dbd_get_driver(pool, "sqlite3", &driverHandle)
apr_dbd_open(driverHandle, pool, connectString, &con)

apr_dbd_select(driverHandle, pool, con, &res, sql, 0)

var row : OpaquePointer? = nil
while true {
  let rc = apr_dbd_get_row(driverHandle, pool, res, &row, Int32(-1))
  guard rc == 0 else { break }
  
  print("record:")
  let colCount = apr_dbd_num_cols(driverHandle, res)
  for colIdx in 0..<colCount {
    let name : String
    if let cstr = apr_dbd_get_name(driverHandle, res, colIdx) {
      name = String(cString: cstr)
    }
    else {
      name = "[\(colIdx)]"
    }
		
    if let cstr = apr_dbd_get_entry(driverHandle, row, colIdx) {
      print("  \(name) = \(String(cString: cstr))")
    }
    else {
      print("  \(name) IS NULL")
    }
  }
}

关于

mod_swiftZeeZide 提供。 我们喜欢反馈,GitHub star,酷的合同工作,以及任何形式的赞扬。

Noze.io Slack 上有一个 #mod_swift 频道。