Skip to content

Latest commit

 

History

History
263 lines (176 loc) · 8.62 KB

README.md

File metadata and controls

263 lines (176 loc) · 8.62 KB

Build Docker Image ScyllaDB Unnoficial Discord Server

ScyllaDB/CassandraDB Driver for PHP

Build Status

A modern, feature-rich and highly tunable PHP client library for ScyllaDB and Apache Cassandra 3.0+ using exclusively Cassandra's binary protocol.

This is a wrapper around the [ScyllaDB C/C++ Driver].

Getting the Driver

Binary versions of the driver, available for Linux systems and officialy supported versions of PHP (8.1 and 8.2), can be obtained from GitHub Releases (soon).

You're also can compile the driver by yourself or use Dockerfile with a pre-set environment to run your tests.

What's new in v1.2.0/v1.3.8

Last Development Status

v1.3.8

  • Migration from C to C++
  • Removing PHP Build system in favor of CMake
  • Upgraded Cassandra\Cluster\Builder class to new PHP argument parsing API
  • Reduce memory usage from Cassandra\Cluster\Builder
  • Migrate from Behat to PestPHP
  • Migrated from TravisCI to Github Actions.

Compatibility

This driver works exclusively with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol. The current version works with:

  • ScyllaDB 4.4.x and 5.x +
  • Apache Cassandra versions 3.0+
  • PHP 8.1 and 8.2
  • 64-bit (x64)
  • Thread safe (TS) and non-thread safe (NTS)
  • Compilers: GCC 13.0+, Clang 16+ and c++23

Getting Help

  • If you're able to fix a bug yourself, you can fork the repository and submit a pull request with the fix.
  • If you're not able to fix a bug yourself, please open an issue , describe it with the most details possible and wait until one of our maintainers join the conversation.

Quick Start

<?php
$cluster   = Cassandra::cluster()                 // connects to localhost by default
                 ->build();
$keyspace  = 'system';
$session   = $cluster->connect($keyspace);        // create session, optionally scoped to a keyspace
$statement = new Cassandra\SimpleStatement(       // also supports prepared and batch statements
    'SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies'
);
$querySent = $session->execute($statement);
$result    = $querySent->get();                      // wait for the result, with an optional timeout

foreach ($result as $row) {                       // results and rows implement Iterator, Countable and ArrayAccess
    printf("The keyspace %s has a table called %s\n", $row['keyspace_name'], $row['columnfamily_name']);
}

Installation

Before you compile your driver, first check if your php and php-config matches the supported versions. If not, please checkout to the available versions.

sudo update-alternatives --config php
sudo update-alternatives --config php-config

Supported Versions: 8.1 and 8.2.

Next you will learn how to build the driver to:

  • Release/Production
  • Debug/Development
  • Optimized for Production (CAREFUL!!)

BEFORE YOU START

!Make sure first you cloned the repository with --recursive flag!

!Make sure you first install LibUV and LibCassandra/LibScyllaDB!

Installing LibUV

Install LibUV from your package manager. -> Preferred Way

Installing From Source

git clone --depth 1 -b v1.46.0 https://github.com/libuv/libuv.git \
    && cd libuv \
    && mkdir build \
    && cd build \
    && cmake -DBUILD_TESTING=OFF -DBUILD_BENCHMARKS=OFF -DLIBUV_BUILD_SHARED=ON CMAKE_C_FLAGS="-fPIC" -DCMAKE_BUILD_TYPE="RelWithInfo" -G Ninja .. \
    && ninja install

Installing LibCassandra/LibScyllaDB

Installing From Source (Only Way to get the latest version)

# The only difference between libscylladb and libcassandra is the name of the git repository.

git clone --depth 1 https://github.com/scylladb/cpp-driver.git scyladb-driver \
  && cd scyladb-driver \
  && mkdir build \
  && cd build \
  && cmake -DCASS_CPP_STANDARD=17 -DCASS_BUILD_STATIC=ON -DCASS_BUILD_SHARED=ON -DCASS_USE_STD_ATOMIC=ON -DCASS_USE_TIMERFD=ON -DCASS_USE_LIBSSH2=ON -DCASS_USE_ZLIB=ON CMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC -Wno-error=redundant-move" -DCMAKE_BUILD_TYPE="RelWithInfo" -G Ninja .. \
  && ninja install

CMAKE Options and Presets

We provide common setups using CMake Presets. You can use them by passing the preset name to CMake:

  • Release
  • RelWithInfo
  • CI (Used by GitHub Actions)
  • Debug
  • ReleaseLibCassandra (Release with LibCassandra)
option(ENABLE_SANITIZERS "Enable sanitizers" OFF)
option(ENABLE_AVX "Enable AVX" OFF)
option(ENABLE_AVX2 "Enable AVX2" OFF)
option(ENABLE_LTO "Enable LTO" OFF)
set(CPU_TYPE "x86-64-v3" CACHE STRING "For x86_64 = x86-64|x86-64-v2|x86-64-v3|x86-64-v4|native")

# PHP Options
set(CUSTOM_PHP_CONFIG "" CACHE STRING "Custom PHP config path")
set(PHP_VERSION_FOR_PHP_CONFIG "8.3" CACHE STRING "PHP version")
option(PHP_DEBUG "Debug or Release" ON)
option(PHP_THREAD_SAFE "ZTS(zts) or NTS(nts)" OFF)

option(LINK_LIBUV_STATIC "Statically link libuv" OFF)
option(BUILD_LIBUV_FROM_SRC "Build LibUV from Source" OFF)

option(PHP_DRIVER_STATIC "Statically link PHP Driver" OFF)
option(USE_LIBCASSANDRA "Use DataStax LibCassandra instead of LibScyllaDB" OFF)

Compiling Release Build

This build you can use it for Production purposes.

To build your Driver, you should first download a few dependencies:

Debian/Ubuntu

apt install -y pipx build-essential ninja-build libssl-dev libgmp-dev zlib1g-dev openssl libpcre3-dev php-dev && pipx install cmake

After that, you can run the build command inside the repository root folder:

phpize
./configure
make -j$(nproc)
sudo make install

Contributing

Read our contribution policy for a detailed description of the process.

Running tests

Soon.

Copyright

© DataStax, Inc.

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.