src/jdk.incubator.adba/share/classes/jdk/incubator/sql2/Examples.java
author lancea
Wed, 11 Jul 2018 19:36:23 -0400
branchJDK-8188051-branch
changeset 56828 64304e37e9b1
parent 56824 62e92191354d
child 56832 4f7713e6a308
permissions -rw-r--r--
JDK-8188051-branch javadoc updates and added TransactionCompletion.java
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     1
/*
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     2
 * Copyright (c)  2016, Oracle and/or its affiliates. All rights reserved.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     4
 *
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    10
 *
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    15
 * accompanied this code).
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    16
 *
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    20
 *
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    23
 * questions.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    24
 */
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    25
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    26
package jdk.incubator.sql2;
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    27
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    28
import java.io.DataInputStream;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    29
import java.io.IOException;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    30
import java.util.ArrayList;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    31
import java.util.List;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    32
import java.util.concurrent.CompletableFuture;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    33
import java.util.concurrent.CompletionStage;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    34
import java.util.concurrent.Flow;
56828
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
    35
import java.util.concurrent.ForkJoinPool;
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    36
import java.util.concurrent.Semaphore;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    37
import java.util.stream.Collector;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    38
import java.util.stream.Collectors;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    39
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    40
/**
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    41
 * Simple example code using various aspects of ADBA. These do not necessarily
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    42
 * demonstrate the best way to use each feature, just one way.
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    43
 */
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    44
public class Examples {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    45
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    46
  // DataSourceFactory
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    47
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    48
  public DataSource getDataSource() {
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    49
    return DataSourceFactory.newFactory("oracle.database.adba")
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    50
            .builder()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    51
            .url("//host.oracle.com:5521/example")
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    52
            .username("scott")
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    53
            .password("tiger")
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    54
            .build();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    55
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    56
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    57
  // RowCountOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    58
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    59
  public void insertItem(DataSource ds, Item item) {
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    60
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    61
      session.rowCountOperation("insert into tab values (:id, :name, :answer)")
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    62
              .set("id", item.id(), AdbaType.NUMERIC)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    63
              .set("name", item.name(), AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    64
              .set("answer", item.answer(), AdbaType.NUMERIC)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    65
              .submit();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    66
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    67
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    68
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    69
  // RowOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    70
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    71
  public void idsForAnswer(DataSource ds, List<Integer> result, int correctAnswer) {
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    72
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    73
      session.<List<Integer>>rowOperation("select id, name, answer from tab where answer = :target")
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    74
              .set("target", correctAnswer, AdbaType.NUMERIC)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    75
              .collect(() -> result, 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    76
                       (list, row) -> list.add(row.at("id").get(Integer.class)) )
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    77
              .submit();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    78
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    79
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    80
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    81
  // RowOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    82
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    83
  public CompletionStage<List<Item>> itemsForAnswer(DataSource ds, int answer) {
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    84
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
    85
      return session.<List<Item>>rowOperation("select id, name, answer from tab where answer = :target")
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    86
              .set("target", 42, AdbaType.NUMERIC)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    87
              .collect(Collectors.mapping( 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    88
                       row -> new Item(row.at("id").get(Integer.class),
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    89
                                       row.at("name").get(String.class),
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    90
                                       row.at("answer").get(Integer.class) ),
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    91
                       Collectors.toList() ))
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    92
              .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    93
              .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    94
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    95
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    96
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    97
  // Independent OperationGroup
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    98
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
    99
  public void insertItemsIndependent(DataSource ds, List<Item> list) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   100
    String sql = "insert into tab values (:id, :name, :answer)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   101
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   102
      OperationGroup group = session.operationGroup()
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   103
              .independent();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   104
      for (Item elem : list) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   105
        group.rowCountOperation(sql)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   106
                .set("id", elem.id)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   107
                .set("name", elem.name)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   108
                .set("answer", elem.answer)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   109
                .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   110
                .getCompletionStage()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   111
                .exceptionally( t -> {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   112
                  System.out.println(elem.id);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   113
                  return null;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   114
                });
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   115
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   116
      group.submit();
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   117
      
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   118
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   119
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   120
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   121
  // Held OperationGroup
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   122
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   123
  public void insertItemsHold(DataSource ds, List<Item> list) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   124
    String sql = "insert into tabone values (:id, :name, :answer)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   125
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   126
      OperationGroup group = session.operationGroup()
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   127
              .independent();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   128
      group.submitHoldingForMoreMembers();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   129
      for (Item elem : list) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   130
        group.rowCountOperation(sql)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   131
                .set("elem_", elem)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   132
                .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   133
                .getCompletionStage()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   134
                .exceptionally( t -> {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   135
                  System.out.println(elem.id);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   136
                  return null;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   137
                });
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   138
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   139
      group.releaseProhibitingMoreMembers();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   140
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   141
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   142
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   143
  // Parallel, Independent OperationGroup
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   144
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   145
  public void updateListParallel(List<Item> list, DataSource ds) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   146
    String query = "select id from tab where answer = :answer";
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   147
    String update = "update tab set name = :name where id = :id";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   148
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   149
      OperationGroup<Object, Object> group = session.operationGroup()
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   150
              .independent()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   151
              .parallel();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   152
      group.submitHoldingForMoreMembers();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   153
      for (Item elem : list) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   154
        CompletionStage<Integer> idPromise = group.<List<Integer>>rowOperation(query)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   155
                .set("answer", elem.answer, AdbaType.NUMERIC)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   156
                .collect( Collector.of(
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   157
                        () -> new ArrayList<>(),
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   158
                        (l, row) -> l.add( row.at("id").get(Integer.class) ),
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   159
                        (l, r) -> l ))
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   160
                .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   161
                .getCompletionStage()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   162
                .thenApply( l -> l.get(0) );
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   163
        group.rowCountOperation(update)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   164
                .set("id", idPromise)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   165
                .set("name", "the ultimate question")
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   166
                .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   167
                .getCompletionStage()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   168
                .exceptionally( t -> {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   169
                  System.out.println(elem.id);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   170
                  return null;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   171
                });
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   172
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   173
      group.releaseProhibitingMoreMembers();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   174
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   175
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   176
  
56828
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   177
  // TransactionCompletion
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   178
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   179
  public void transaction(DataSource ds) {
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   180
    try (Session session = ds.getSession(t -> System.out.println("ERROR: " + t.toString()))) {
56828
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   181
      TransactionCompletion trans = session.transactionCompletion();
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   182
      CompletionStage<Integer> idPromise = session.<Integer>rowOperation("select empno, ename from emp where ename = :1 for update")
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   183
              .set("1", "CLARK", AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   184
              .collect(Collectors.collectingAndThen(
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   185
                                        Collectors.mapping(r -> r.at("empno").get(Integer.class), 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   186
                                                           Collectors.toList()), 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   187
                                        l -> l.get(0)))
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   188
              .onError( t -> trans.setRollbackOnly() )
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   189
              .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   190
              .getCompletionStage();
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   191
      session.<Long>rowCountOperation("update emp set deptno = :1 where empno = :2")
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   192
              .set("1", 50, AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   193
              .set("2", idPromise, AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   194
              .apply(c -> { 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   195
                if (c.getCount() != 1L) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   196
                  trans.setRollbackOnly();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   197
                  throw new RuntimeException("updated wrong number of rows");
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   198
                }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   199
                return c.getCount();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   200
              })
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   201
              .onError(t -> trans.setRollbackOnly() )
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   202
              .submit();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   203
          //    .getCompletionStage()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   204
          //    .exceptionally( t -> { trans.setRollbackOnly(); return null; } ) // incorrect
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   205
      session.catchErrors();
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   206
      session.commitMaybeRollback(trans);
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   207
    }    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   208
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   209
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   210
  // RowPublisherOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   211
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   212
  public CompletionStage<List<String>> rowSubscriber(DataSource ds) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   213
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   214
    String sql = "select empno, ename from emp";
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   215
    CompletableFuture<List<String>> result = new CompletableFuture<>();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   216
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   217
    Flow.Subscriber<Result.RowColumn> subscriber = new Flow.Subscriber<>() {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   218
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   219
      Flow.Subscription subscription;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   220
      List<String> names = new ArrayList<>();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   221
      int demand = 0;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   222
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   223
      @Override
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   224
      public void onSubscribe(Flow.Subscription subscription) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   225
        this.subscription = subscription;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   226
        this.subscription.request(10);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   227
        demand += 10;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   228
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   229
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   230
      @Override
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   231
      public void onNext(Result.RowColumn column) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   232
        names.add(column.at("ename").get(String.class));
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   233
        if (--demand < 1) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   234
          subscription.request(10);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   235
          demand += 10;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   236
        }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   237
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   238
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   239
      @Override
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   240
      public void onError(Throwable throwable) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   241
        result.completeExceptionally(throwable);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   242
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   243
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   244
      @Override
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   245
      public void onComplete() {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   246
        result.complete(names);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   247
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   248
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   249
    };
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   250
    
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   251
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   252
      return session.<List<String>>rowPublisherOperation(sql)
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   253
              .subscribe(subscriber, result)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   254
              .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   255
              .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   256
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   257
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   258
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   259
  // Control Operation Submission Rate
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   260
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   261
  public CompletionStage<Long> insertRecords(DataSource ds, DataInputStream in) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   262
    String insert = "insert into tab values (@record)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   263
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   264
      OperationGroup<Long, Long> group = session.<Long, Long>operationGroup()
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   265
              .independent()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   266
              .collect(Collectors.summingLong(c -> c));
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   267
      group.submitHoldingForMoreMembers();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   268
      Semaphore demand = new Semaphore(0);
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   269
      session.requestHook( n -> demand.release((int)n) );
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   270
      while (in.available() > 0) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   271
        demand.acquire(1); // user thread blocked by Semaphore, not by ADBA
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   272
        group.<Long>rowCountOperation(insert)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   273
                    .set("record", in.readUTF(), AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   274
                    .apply(c -> c.getCount())
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   275
                    .submit();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   276
      }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   277
      return group.releaseProhibitingMoreMembers()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   278
                  .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   279
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   280
    catch (IOException | InterruptedException ex) { 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   281
      throw new SqlException(ex);
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   282
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   283
  }  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   284
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   285
  // ArrayRowCountOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   286
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   287
  public CompletionStage<Long> arrayInsert(DataSource ds, 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   288
                                           List<Integer> ids, 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   289
                                           List<String> names, 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   290
                                           List<Integer> answers) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   291
    String sql = "insert into tab values (?, ?, ?)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   292
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   293
      return session.<Long>arrayRowCountOperation(sql)
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   294
          .collect(Collectors.summingLong( c -> c.getCount() ))
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   295
          .set("1",ids, AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   296
          .set("2", names, AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   297
          .set("3", answers, AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   298
          .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   299
          .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   300
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   301
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   302
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   303
  // ArrayRowCountOperation -- transposed
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   304
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   305
  public CompletionStage<Long> transposedArrayInsert(DataSource ds, List<Item> items) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   306
    String sql = "insert into tab values (?, ?, ?)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   307
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   308
      return session.<Long>arrayRowCountOperation(sql)
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   309
          .collect(Collectors.summingLong( c -> c.getCount() ))
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   310
          .set("1", items.stream().map(Item::id).collect(Collectors.toList()), AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   311
          .set("2", items.stream().map(Item::name).collect(Collectors.toList()), AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   312
          .set("3", items.stream().map(Item::answer).collect(Collectors.toList()), AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   313
          .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   314
          .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   315
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   316
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   317
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   318
  // OutOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   319
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   320
  public CompletionStage<Item> getItem(DataSource ds, int id) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   321
    String sql = "call item_for_id(:id, :name, :answer)";
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   322
    try (Session session = ds.getSession()) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   323
      return session.<Item>outOperation(sql)
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   324
              .set("id", id, AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   325
              .outParameter("name", AdbaType.VARCHAR)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   326
              .outParameter("answer", AdbaType.INTEGER)
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   327
              .apply( out -> new Item(id, 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   328
                                      out.at("name").get(String.class), 
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   329
                                      out.at("answer").get(Integer.class)) )
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   330
              .submit()
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   331
              .getCompletionStage();
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   332
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   333
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   334
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   335
  // MultiOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   336
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   337
  // LocalOperation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   338
  
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   339
  // SessionProperty
56828
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   340
  public enum ExampleSessionProperty implements SessionProperty {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   341
    LANGUAGE;
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   342
    
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   343
    private static final String DEFAULT_VALUE = "AMERICAN_AMERICA";
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   344
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   345
    @Override
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   346
    public Class<?> range() {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   347
      return String.class;
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   348
    }
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   349
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   350
    @Override
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   351
    public Object defaultValue() {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   352
      return DEFAULT_VALUE;
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   353
    }
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   354
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   355
    @Override
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   356
    public boolean isSensitive() {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   357
      return false;
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   358
    }
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   359
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   360
    @Override
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   361
    public boolean configureOperation(OperationGroup<?, ?> group, Object value) {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   362
      group.operation("ALTER SESSION SET NLS_LANG = " 
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   363
                      + group.enquoteIdentifier((String)value, false))
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   364
              .submit();
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   365
      return true;
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   366
    }
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   367
    
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   368
  }
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   369
  
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   370
  public Session getSession(DataSource ds) {
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   371
    return ds.builder()
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   372
            .property(ExampleSessionProperty.LANGUAGE, "FRENCH_FRANCE")
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   373
            .build()
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   374
            .attach();
64304e37e9b1 JDK-8188051-branch javadoc updates and added TransactionCompletion.java
lancea
parents: 56824
diff changeset
   375
  }
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   376
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   377
  // Sharding
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   378
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   379
  // TransactionOutcome
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   380
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   381
  // Column navigation
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   382
  
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   383
  private class Name { Name(String ... args) {} }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   384
  private class Address { Address(String ... args) {} }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   385
  
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   386
  private Name getName(Result.Column col) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   387
    return new Name(
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   388
      col.get(String.class), // title
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   389
      col.next().get(String.class), // given name
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   390
      col.next().get(String.class), // middle initial
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   391
      col.next().get(String.class), // family name
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   392
      col.next().get(String.class)); // suffix
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   393
  }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   394
  
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   395
  private Address getAddress(Result.Column col) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   396
    List<String> a = new ArrayList<>();
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   397
    for (Result.Column c : col.slice(6)) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   398
      a.add(c.get(String.class));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   399
    }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   400
    return new Address(a.toArray(new String[0]));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   401
  }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   402
  public void columNavigation(Result.RowColumn column) {
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   403
    Name fullName = getName(column.at("name_title"));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   404
    Address streetAddress = getAddress(column.at("street_address_line1"));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   405
    Address mailingAddress = getAddress(column.at("mailing_address_line1"));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   406
    for (Result.Column c : column.at(-14)) { // dump the last 14 columns
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   407
      System.out.println("trailing column " + c.get(String.class));
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   408
    }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   409
  }
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   410
  
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   411
  // Error handling
56824
62e92191354d JDK-8188051-branch latest updates
lancea
parents: 56797
diff changeset
   412
56797
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   413
  
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   414
  static public class Item {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   415
    public int id;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   416
    public String name;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   417
    public int answer;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   418
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   419
    public Item(int i, String n, int a) {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   420
      id =i;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   421
      name = n;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   422
      answer = a;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   423
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   424
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   425
    public int id() {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   426
      return id;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   427
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   428
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   429
    public String name() {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   430
      return name;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   431
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   432
    
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   433
    public int answer() {
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   434
      return answer;
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   435
    }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   436
  }
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   437
fb523d4d9185 JDK-8188051-branch updates
lancea
parents:
diff changeset
   438
}