Simple Statements

PHP Driver supports simple statements.

Background

Given
a running Cassandra cluster
And
the following schema:
CREATE KEYSPACE simplex WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 1
};
USE simplex;
CREATE TABLE playlists (
  id uuid,
  title text,
  album text,
  artist text,
  song_id uuid,
  PRIMARY KEY (id, title, album, artist)
);

Simple statements are initialized with a CQL string

Given
the following example:
$cluster   = Dse::cluster()->build();
$session   = $cluster->connect("simplex");
$statement = new Dse\SimpleStatement("SELECT * FROM playlists");
$result    = $session->execute($statement);
echo "Result contains {$result->count()} rows" . PHP_EOL;
When
it is executed
Then
its output should contain:
Result contains 0 rows
since cassadra v2.0

Simple statements support positional arguments

Given
the following example:
$cluster   = Dse::cluster()->build();
$session   = $cluster->connect("simplex");
$statement = new Dse\SimpleStatement(
               "INSERT INTO playlists (id, song_id, artist, title, album) " .
               "VALUES (62c36092-82a1-3a00-93d1-46196ee77204, ?, ?, ?, ?)"
             );

$songs = array(
    array(
        new Dse\Uuid('756716f7-2e54-4715-9f00-91dcbea6cf50'),
        'Joséphine Baker',
        'La Petite Tonkinoise',
        'Bye Bye Blackbird'
    ),
    array(
        new Dse\Uuid('f6071e72-48ec-4fcb-bf3e-379c8a696488'),
        'Willi Ostermann',
        'Die Mösch',
        'In Gold'
    ),
    array(
        new Dse\Uuid('fbdf82ed-0063-4796-9c7c-a3d4f47b4b25'),
        'Mick Jager',
        'Memo From Turner',
        'Performance'
    ),
);

foreach ($songs as $song) {
    $options = array('arguments' => $song);
    $session->execute($statement, $options);
}

$statement = new Dse\SimpleStatement("SELECT * FROM simplex.playlists");
$result    = $session->execute($statement);

foreach ($result as $row) {
    echo "{$row['artist']}: {$row['title']} / {$row['album']}" . PHP_EOL;
}
When
it is executed
Then
its output should contain:
Joséphine Baker: La Petite Tonkinoise / Bye Bye Blackbird
And
its output should contain:
Willi Ostermann: Die Mösch / In Gold
And
its output should contain:
Mick Jager: Memo From Turner / Performance
since cassadra v2.1

Simple statements also support named arguments

Given
the following example:
$cluster   = Dse::cluster()->build();
$session   = $cluster->connect("simplex");
$statement = new Dse\SimpleStatement(
               "INSERT INTO playlists (id, song_id, artist, title, album) " .
               "VALUES (62c36092-82a1-3a00-93d1-46196ee77204, ?, ?, ?, ?)"
             );

$songs = array(
    array(
        'song_id' => new Dse\Uuid('756716f7-2e54-4715-9f00-91dcbea6cf50'),
        'artist'  => 'Joséphine Baker',
        'title'   => 'La Petite Tonkinoise',
        'album'   => 'Bye Bye Blackbird'
    ),
    array(
        'song_id' => new Dse\Uuid('f6071e72-48ec-4fcb-bf3e-379c8a696488'),
        'artist'  => 'Willi Ostermann',
        'title'   => 'Die Mösch',
        'album'   => 'In Gold'
    ),
    array(
        'song_id' => new Dse\Uuid('fbdf82ed-0063-4796-9c7c-a3d4f47b4b25'),
        'artist'  => 'Mick Jager',
        'title'   => 'Memo From Turner',
        'album'   => 'Performance'
    ),
);

foreach ($songs as $song) {
    $options = array('arguments' => $song);
    $session->execute($statement, $options);
}

$statement = new Dse\SimpleStatement("SELECT * FROM simplex.playlists");
$result    = $session->execute($statement);

foreach ($result as $row) {
    echo "{$row['artist']}: {$row['title']} / {$row['album']}" . PHP_EOL;
}
When
it is executed
Then
its output should contain:
Joséphine Baker: La Petite Tonkinoise / Bye Bye Blackbird
And
its output should contain:
Willi Ostermann: Die Mösch / In Gold
And
its output should contain:
Mick Jager: Memo From Turner / Performance
since cassadra v2.1

Simple statements also supports “:name” arguments

Given
the following example:
$cluster   = Dse::cluster()->build();
$session   = $cluster->connect("simplex");
$statement = new Dse\SimpleStatement(
    "INSERT INTO playlists (id, song_id, artist, title, album) " .
    "VALUES (62c36092-82a1-3a00-93d1-46196ee77204, ?, ?, ?, ?)"
);

$songs = array(
    array(
        'song_id' => new Dse\Uuid('756716f7-2e54-4715-9f00-91dcbea6cf50'),
        'artist'  => 'Joséphine Baker',
        'title'   => 'La Petite Tonkinoise',
        'album'   => 'Bye Bye Blackbird'
    ),
);

foreach ($songs as $song) {
    $options = array('arguments' => $song);
    $session->execute($statement, $options);
}

$statement = new Dse\SimpleStatement(
    "SELECT * FROM simplex.playlists " .
    "WHERE id = :id AND artist = :artist AND title = :title AND album = :album"
);

$options = array('arguments' =>
        array(
            'id'     => new Dse\Uuid('62c36092-82a1-3a00-93d1-46196ee77204'),
            'artist' => 'Joséphine Baker',
            'title'  => 'La Petite Tonkinoise',
            'album'  => 'Bye Bye Blackbird'
        )
);

$result = $session->execute($statement, $options);

$row = $result->first();
echo "{$row['artist']}: {$row['title']} / {$row['album']}" . PHP_EOL;
When
it is executed
Then
its output should contain:
Joséphine Baker: La Petite Tonkinoise / Bye Bye Blackbird