スキップしてメイン コンテンツに移動

HaxeのSPODをためしてみました

HaxeのSPODをためしてみました。

SPODについてのページは以下
http://haxe.org/doc/neko/spod
http://haxe.org/manual/spod

SPOD?

SPODというのはSimple Persistent Objects Databaseの略らしいです。
classをデータ構造とみなしてデータベースのレコードとして扱うことが出来る機能です。

データベースを開く

普通に使うようにデータベースを開き、Managerのcnxに入れておきます。

import sys.db.Connection;
import sys.db.Manager;
import sys.db.Mysql;
import sys.db.Sqlite;

// SQLiteの場合
Manager.cnx = Splite.open( "dbname.db" );

// MySQLの場合
Manager.cnx = Mysql,connect(
 {
  host: "localhost",
  port: null,
  user: "arle",
  pass: "hogepiyo",
  database: "comet",
  socket: "null"
 }
);

データ構造を定義する

普通のクラスを作る感じで作ります:

import sys.db.Object;
import sys.db.Types.SDateTime;
import sys.db.Types.SId;
import sys.db.Types.SString;
import sys.db.Types.SText;

class Post extends Object
{
 /// ID
 public var id:SId;
 /// 日付け
 public var date:SDateTime;
 /// 名前
 public var name:SString<64>;
 /// メッセージ
 public var message:SText;
}

この例では頭にSが付いた型を用いていますが、一部の型は通常通りの宣言が出来るみたいです。

SQLでの型との簡易対応表(Haxe -> SQL)

Haxe SQL
Int, SInt INT
Float, SFloat DOUBLE
Bool, SBool TINYINT(1) もしくは BOOL
Date, SDateTime DATETIME
SDate DATE
SString<K> VARCHAR(K)
String, SText MEDIUMTEXT
SBytes<K> BINARY(K)
SBinary, haxe.io.Bytes MEDIUMBLOB
SId INT AUTO INCREMENT
SEnum<E> TINYINT UNSIGNED
※全部はのせてません。詳しくはこちらのページをご覧ください。

テーブルの存在確認 / テーブルを作成する

テーブルが存在するか確認します。なければ作ります。(もちろんあらかじめ作っていても問題はありません)
// 存在するか?
if( TableCreate.exists( Post.manager ) ){
 // テーブルはある
}else {
 // ないので作る
 TableCreate.create( Post.manager );
}
テーブルの名前はクラスの名前と同じになります。

テーブルに対しての操作

全部取得

var posts = Post.manager.all( ); Listで返ってきます。select * from Post;を実行したときと同じです。

条件をつけて取得

// selectメソッドでもsearchメソッドでもOK
var posts = Post.manager.select( { name: "ゆいちゃん" } );
var posts = Post.manager.search( { name: "ゆいちゃん" } );
var posts = Post.manager.select( $name == "ゆいちゃん" );
これもListで返ってきます。select * from Post where name='ゆいちゃん';を実行したときと同じです。
// likeを使う
var posts = Post.manager.select( $message.like( "コメット%" ) );
likeを使うことも出来ます。

数える

var count = Post.manager.count( { name: "ゆいちゃん" } );
カウントした結果が返ってきます。select COUNT(*) from Post where name='ゆいちゃん';を実行したときと同じです。

削除

Post.manager.delete( $message.like( "%ア○ティ%" ) );
この場合delete from Post where message like '%ア○ティ%';を実行します

作成する/取得したデータに対しての操作

挿入

var post = new Post( );
post.name = "ゆいちゃん";
post.message = "アルルたんかわいい。";
post.date = Date.now( );
post.insert( );
insertメソッドを呼んであげるだけです。

更新

// 取得してきたpostに対して・・・
post.date = Date.now( ); // データを書きかえる
post.update( );
updateメソッドを呼んであげるだけです。

削除

post.delete( );
deleteメソッドを呼んであげるだけです。

最後に

// データベースを閉じる
Manager.cnx.close( );

とりあえず書いてみただけなので、ソースコードハイライトとかやってないです。
次回までに考えておきます^^;

コメント

このブログの人気の投稿

UTF8からSJISに文字コード変換ライブラリを作りました

HaxeでWindowsのコンソールに出力するさい、SJISでないと文字化けを起こしてしまいます。
というわけで、文字コード変換ライブラリを作ってみました

2016-05-25追記:今はnorikoというライブラリにSJIS、UTF8、JIS、EUCの文字コード変換ライブラリを実装しています。

ぐるんぐるん

今、ぐるんぐるん(仮)という名前のゲームを作っています。
いわゆる、6DoFでの空間上で撃ちあいをするゲームになっています。Godot Engineの練習3作目として作っています。

Godot Engineの練習として以下の機能を実装する予定ではありますが、調べながらなので何時実装になるかはわかりません。

・ネットワーク対戦
・洞窟ステージ
・軽量化(GridMap + Lightをなんとか良い感じで使いたい)

LightはBakeできるハズなんですが、やるとエディタごと落ちるのでちょっと要調査です。

HaxeのSMFライブラリ format-midiを公開しました

HaxeでStandard MIDI File(以下SMF)の読み書きができるライブラリ「format-midi」を公開しました。

https://bitbucket.org/arlez80/format-midi

これでHaxeを用いてSMFの生成/解析ができます。
使い方はHaxelibのformatというライブラリにあわせて作ってありますので、簡単に使うことができると思います。

https://bitbucket.org/arlez80/m2sauna
これはformat-midiを使って作っている、SMFからAudiosaunaというブラウザ上で動くシーケンサー用のファイルに変換するツールです。