OsloとM言語
別の調べ物の関係でOsloに出会ったのですが、イメージが良く分からなかったので、Oslo SDK October 2008 CTPをインストールしました。
以下はその覚え書きです。数時間しか触っていないので間違いがあるかもしれません。
インストールは、インストーラを起動するだけです。SQL Server2008がデフォルトインスタンスである必要があります。
デフォルトインスタンスにRepositoryデータベースが作られ、Osloのレポジトリ用のテーブル等が作成されます。
続けて自動的にM言語のインストーラが立ち上がります。
Visual Studioで新規プロジェクトを作成すると、テンプレートに「Oslo」の「M Project」が表示されます。
M言語のプロジェクトが作成できます。
M言語で最初に表示されるコードは次の通りです。
module Models1 { type Model { Id : Integer64 = AutoNumber(); Name : Text; } where identity Id; Models : Model*; }
C#に似てますが、どちらかといえば宣言型の言語に近いと思います。「名前:型」という構文で、「*」の場合は複数コレクションを表します。IdとNameという属性を持つ型「Model」とそのレコード群を格納する「Models」が定義されています。
このコードを実行することはできませんが、ビルドできます。
------ ビルド開始: プロジェクト: Models1, 構成: Debug Any CPU ------ "C:\Program Files\Microsoft Oslo SDK 1.0\bin\m.exe" /t:Repository /p:Script,Image /out:"bin\Debug\\Models1.sql,bin\Debug\\Models1.mx" /warnaserror+ /printreport @"C:\Oslo\Models1\Models1\obj\Debug\dcargs.rsp" Microsoft (R) "Codename M" Compiler version 1.0.0925.0 Copyright (C) Microsoft Corporation. All rights reserved. Compiled module named 'Language' with 63 member(s). Compiled module named 'Models1' with 2 member(s). Compiled 2 module(s). Compilation complete -- 0 compilation error(s). ========== ビルド: 1 正常終了または最新の状態、0 失敗、0 スキップ ==========
「m.exe」によるビルドの結果、「bin\Debug」に、「Models1.sql」と「Models1.mx」が生成されます。
以下が、Models1.sqlの一部です。本当はもっとたくさんのトリガやらビューのコードも生成されてます。
create schema [Models1] authorization [RepositoryOwner]; go create table [Models1].[ModelsTable] ( [Id] bigint not null identity, [Name] nvarchar(max) not null, constraint [PK_Models] primary key clustered ([Id]) ); go
このSQLはビルド時には実行されません(参考用だと思います)。実際のリポジトリの更新はメタ情報を格納するMXファイルを利用します。Models1.mxはZIP形式のファイルで、モデルのメタ情報(sqldom、xaml、xml、マニフェスト)が格納されています。
「“M” In a Nutshell」によれば、次のように解説されています。
つまり、M言語で書いたソースコード(モデル)は、m.exeでMxイメージに変換できます。それをmx.exeで実行してRepository(SQL Server2008)に反映できます。そうすると、M言語で書いたモデルがテーブルとして反映されるので、ADO.NETなりLINQなりでアクセスできるようになります。
ざっくりと言えば、M言語のコードは、SQL Serverのオブジェクトに変換されます。