Package org.openrdf.sail.rdbms.mysql

Source Code of org.openrdf.sail.rdbms.mysql.MySqlConnectionFactory

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.mysql;

import static org.openrdf.sail.rdbms.algebra.base.SqlExprSupport.unsupported;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

import org.openrdf.query.algebra.Regex;
import org.openrdf.query.algebra.ValueConstant;
import org.openrdf.query.algebra.ValueExpr;
import org.openrdf.sail.rdbms.RdbmsConnectionFactory;
import org.openrdf.sail.rdbms.algebra.factories.BooleanExprFactory;
import org.openrdf.sail.rdbms.evaluation.QueryBuilderFactory;
import org.openrdf.sail.rdbms.evaluation.SqlCastBuilder;
import org.openrdf.sail.rdbms.evaluation.SqlExprBuilder;
import org.openrdf.sail.rdbms.evaluation.SqlRegexBuilder;
import org.openrdf.sail.rdbms.exceptions.UnsupportedRdbmsOperatorException;
import org.openrdf.sail.rdbms.optimizers.SelectQueryOptimizerFactory;
import org.openrdf.sail.rdbms.schema.NamespacesTable;
import org.openrdf.sail.rdbms.schema.RdbmsTable;
import org.openrdf.sail.rdbms.schema.TableFactory;
import org.openrdf.sail.rdbms.schema.ValueTable;
import org.openrdf.sail.rdbms.schema.ValueTableFactory;

public class MySqlConnectionFactory extends RdbmsConnectionFactory {

  private static final String FEILD_COLLATE = " CHARACTER SET utf8 COLLATE utf8_bin";

  @Override
  protected String getFromDummyTable() {
    return "FROM DUAL";
  }

  @Override
  protected TableFactory createTableFactory() {
    return new TableFactory() {

      @Override
      protected RdbmsTable newTable(String name) {
        return new MySqlTable(name);
      }
    };
  }

  @Override
  protected ValueTableFactory createValueTableFactory() {
    return new ValueTableFactory(createTableFactory()) {

      @Override
      protected ValueTable newValueTable() {
        return new MySqlValueTable();
      }

      @Override
      public NamespacesTable createNamespacesTable(Connection conn) {
        return new NamespacesTable(createTable(conn, NAMESPACES)) {

          @Override
          protected void createTable()
            throws SQLException
          {
            StringBuilder sb = new StringBuilder();
            sb.append("  prefix VARCHAR(127)");
            sb.append(FEILD_COLLATE);
            sb.append(",\n  namespace TEXT ");
            sb.append(FEILD_COLLATE);
            sb.append(" NOT NULL\n");
            createTable(sb);
          }
        };
      }
    };
  }

  @Override
  protected SelectQueryOptimizerFactory createSelectQueryOptimizerFactory() {
    return new SelectQueryOptimizerFactory() {

      @Override
      protected BooleanExprFactory createBooleanExprFactory() {
        return new BooleanExprFactory() {

          @Override
          public void meet(Regex node)
            throws UnsupportedRdbmsOperatorException
          {
            ValueExpr flagsArg = node.getFlagsArg();
            if (flagsArg == null) {
              super.meet(node);
            }
            else if (flagsArg instanceof ValueConstant) {
              ValueConstant flags = (ValueConstant)flagsArg;
              if (flags.getValue().stringValue().equals("i")) {
                super.meet(node);
              }
              else {
                throw unsupported(node);
              }
            }
            else {
              throw unsupported(node);
            }
          }
        };
      }
    };
  }

  @Override
  protected QueryBuilderFactory createQueryBuilderFactory() {
    return new QueryBuilderFactory() {

      @Override
      public SqlRegexBuilder createSqlRegexBuilder(SqlExprBuilder where) {
        return new SqlRegexBuilder(where, this) {

          @Override
          protected void appendRegExp(SqlExprBuilder where) {
            appendValue(where);
            if (!this.flags().getParameters().isEmpty()) {
              where.append(" COLLATE utf8_general_ci");
            }
            where.append(" REGEXP ");
            appendPattern(where);
          }
        };
      }

      @Override
      public SqlCastBuilder createSqlCastBuilder(SqlExprBuilder where, int type) {
        return new SqlCastBuilder(where, this, type) {

          @Override
          protected CharSequence getSqlType(int type) {
            switch (type) {
              case Types.VARCHAR:
                return "CHAR";
              default:
                return super.getSqlType(type);
            }
          }
        };
      }
    };
  }
}
TOP

Related Classes of org.openrdf.sail.rdbms.mysql.MySqlConnectionFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.