第4回 関西DB勉強会 懇親会で LT してきましたー #dbkan

本編も良かったですが、懇親会も楽しかったー

スライドはこちら

今年リリースされた SQL Server 関係の物を拾ってきただけです。

03/31 Developer Edition が無償に
Microsoft SQL Server Developer Edition is now free | SQL Server Blog
05/11 Azure SQL DB Elastic pool リリース
Azure SQL Database elastic pools now generally available | Blog | Microsoft Azure
06/01 SQL Server 2016 リリース※ページ消えてる
https://blogs.technet.microsoft.com/dataplatforminsider/2016/06/01/sql-server-2016-is-generally-available-today/
07/12 Azure SQL Data Warehouse リリース
The elastic future of data warehousing | SQL Server Blog
11/16 SQL Server on Linux (vNext) 公開
Announcing SQL Server on Linux public preview, first preview of next release of SQL Server | SQL Server Blog
11/16 SQL Server 2016 SP1 リリース
SQL Server 2016 Service Pack 1 generally available | SQL Server Blog
11/17 JDBC Driver for SQL ServerOSS
Open sourcing the Microsoft JDBC Driver and Maven support – Microsoft JDBC Driver for SQL Server Team Blog
12/16 vNext CTP 1.1 公開
SQL Server next version Community Technology Preview 1.1 now available | SQL Server Blog

後半の勢いやばいですねー、触れる時間作らないと。。

Oracle にも OFFSET FETCH が入ってたので Doma の対応コード書いてみた。

仕事で Oracle12c を触る機会があって気付いたのですが、Oracle12c から OFFSET FETCH が入ってたようです。
第37回 新しいSQLについて
構文が SQL Server と似た感じですね。
※正確な構文はこちらから SELECT

SQL Server との違いで ORACLE の方が便利そうな箇所は、

  1. ORDER BY が無くてもOK (普通 ORDER BY 書くけどね)
  2. OFFSET は省略可 (先頭からN件とる場合)
  3. FETCH で指定する方法が行数と割合(%)で指定可 (全体の5%とか)
  4. fetch で with ties を指定すると、最後のデータと同じものは指定行数を超えても含まれる。

SQL Server の方が便利そうな箇所は、

  1. FETCH を省略可 (先頭N件をスキップして残り全部とる場合)

使うかどうかは置いといて機能的には負けてますね。。

で、Welcome to Doma — Doma 2.0 ドキュメント も使ってたので、12C用の PagingTransformer 書いてみました。
雰囲気動きそうな感じです。percent や with ties には対応していませんが、ちょっと使う分にはこれで良いかなー。

/*
 * Copyright 2004-2010 the Seasar Foundation and the Others.
 *
 * 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.
 */
package org.seasar.doma.internal.jdbc.dialect;

import static org.seasar.doma.internal.Constants.ROWNUMBER_COLUMN_NAME;

import org.seasar.doma.internal.jdbc.sql.node.FragmentNode;
import org.seasar.doma.internal.jdbc.sql.node.FromClauseNode;
import org.seasar.doma.internal.jdbc.sql.node.SelectClauseNode;
import org.seasar.doma.internal.jdbc.sql.node.SelectStatementNode;
import org.seasar.doma.internal.jdbc.sql.node.WhereClauseNode;
import org.seasar.doma.jdbc.SqlNode;

/**
 * @author taedium
 * 
 */
public class Oracle12PagingTransformer extends OraclePagingTransformer {

    public Oracle12PagingTransformer(long offset, long limit) {
        super(offset, limit);
    }

    @Override
    public SqlNode visitSelectStatementNode(SelectStatementNode node, Void p) {
        if (processed) {
            return node;
        }
        processed = true;

        OrderByClauseNode originalOrderBy = node.getOrderByClauseNode();
        OrderByClauseNode orderBy = node.getOrderByClauseNode();
        if (originalOrderBy != null) {
            orderBy = new OrderByClauseNode(originalOrderBy.getWordNode());
            for (SqlNode child : originalOrderBy.getChildren()) {
                orderBy.appendNode(child);
            }
        } else {
            orderBy = new OrderByClauseNode("");
        }

        if (this.offset > 0) {
            orderBy.appendNode(new FragmentNode(" offset "));
            orderBy.appendNode(new FragmentNode(String.valueOf(this.offset)));
            orderBy.appendNode(new FragmentNode(" rows"));
        }

        if (this.limit > 0) {
            orderBy.appendNode(new FragmentNode(" fetch first "));
            orderBy.appendNode(new FragmentNode(String.valueOf(this.limit)));
            orderBy.appendNode(new FragmentNode(" rows only"));
        }

        SelectStatementNode result = new SelectStatementNode();
        result.setSelectClauseNode(node.getSelectClauseNode());
        result.setFromClauseNode(node.getFromClauseNode());
        result.setWhereClauseNode(node.getWhereClauseNode());
        result.setGroupByClauseNode(node.getGroupByClauseNode());
        result.setHavingClauseNode(node.getHavingClauseNode());
        result.setOrderByClauseNode(orderBy);
        result.setForUpdateClauseNode(node.getForUpdateClauseNode());
        result.setOptionClauseNode(node.getOptionClauseNode());
        return result;
    }
}

JDBC Driver for SQL Server がオープンソースに & Maven リポジトリにも登録されました!

Open sourcing the Microsoft JDBC Driver and Maven support – Microsoft JDBC Driver for SQL Server Team Blog

GitHub はこちら
GitHub - Microsoft/mssql-jdbc: The Microsoft JDBC Driver for SQL Server is a Type 4 JDBC driver that provides database connectivity with SQL Server through the standard JDBC application program interfaces (APIs).

issues も上げてねーだって。 セキュリティに関するやつはここに書かないでメールでよろだそうです。

2016 SP1 で Edition 間の機能差異が減って、同じバイナリで Linux でも動くようにして、 JDBC Driver も OSS 化してと。

なんなんですかねー?これ。
触る時間足りないわー。

JDBC Driver のコードリーディングとかやりたいなー。
チラ見したら java.util.Vector とかいたり、インデントや括弧の位置がバラバラだったりやけど。。
興味ある人いるかな?

SQL Server for Linux ちょっとだけ触りました!

Announcing SQL Server on Linux public preview, first preview of next release of SQL Server | SQL Server Blog
SQL Server v.Next—SQL Server on Linux | Microsoft

日本語は 11/17 の SQL Server の発表について at SE の雑記
で。

Azure の VMSQL Server vNext on Red Hat Enterprise」 で VM 作成。
SQL Server for Linux で検索したら出てきます。

Network Security Group で サービス MS SQL を追加しておきます。
TCP で 1433 空ける設定してくれます。デフォは ssh しか空いてない。

展開した VM
Install SQL Server on Red Hat Enterprise Linux - SQL Server vNext CTP1 | Microsoft Docs
の 4 までと 7 が終わってる状態でした。
※sudo firewall-cmd --zone=public --list-ports で 1433 があった。

5 叩いたて sa のアカウントとか設定したら SQL Server を起動出来るようになります。

SSMS で繋がるし、

CLR に依存している関数も動いた!
FORMAT (Transact-SQL)

このへんはどうなってるんですかねー?

ここまで20分掛からずで出来ました、便利になりましたねー。

12/17(土) 第4回 関西DB勉強会 開催します!

第3回 からちょっと期間があきましたが第4回やります!

今回は MySQLMariaDBPostgreSQL のお話しが中心です。
kansaidbstudy.connpass.com

お時間あるかたは是非ご参加を~。

Azure SQL Database の Free の日本語ポータルの記載が間違ってる。。追記:直りました

2016/11/19 追記:表記直りましたー

この前知ったのですが、SQL Database の FREE 版ってまだ残ってたんですね~。
で、日本語ポータルの表記が間違ってました。

日本語

英語

日本語だと容量が 32GB までとなってますが、32MB の誤りです。
ポータルからフィードバック投げたけど未だ直らないのでブログに書いてみました。。

ちなみに FREE 版は、普通に SQL DB だけ作っても選択出来ません。
Web App と一緒に作成すると、FREE 版を作れます。
azure.microsoft.com
※昔にあった 20MB 無料相当の互換だと思います。ちなみに V12 でした。