public class org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager extends java.lang.Object
{
private final com.google.cloud.bigquery.BigQuery bigQuery;
private java.lang.String sessionId;
private static final java.lang.String CONNECTION_SESSION_PROPERTY;
public void <init>(com.google.cloud.bigquery.BigQuery)
{
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.BigQuery v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: com.google.cloud.bigquery.BigQuery;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.BigQuery bigQuery> = v;
return;
}
public void close() throws java.lang.InterruptedException
{
java.lang.Throwable v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
java.lang.String v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId>;
if v == null goto label;
label:
specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>("CALL BQ.ABORT_SESSION();");
label:
v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId> = null;
goto label;
label:
v := @caughtexception;
v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId> = null;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public void beginTransaction() throws java.lang.InterruptedException
{
com.google.cloud.bigquery.BigQuery$JobOption[] v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.QueryJobConfiguration$Builder v, v;
com.google.cloud.bigquery.JobInfo v;
com.google.cloud.RetryOption[] v;
com.google.cloud.bigquery.QueryJobConfiguration v;
com.google.cloud.bigquery.JobStatistics v;
com.google.cloud.bigquery.BigQuery v;
com.google.cloud.bigquery.JobStatistics$SessionInfo v;
java.lang.Boolean v;
com.google.cloud.bigquery.Job v;
java.lang.String v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.BigQuery bigQuery>;
v = staticinvoke <com.google.cloud.bigquery.QueryJobConfiguration: com.google.cloud.bigquery.QueryJobConfiguration$Builder newBuilder(java.lang.String)>("BEGIN TRANSACTION");
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(1);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration$Builder setCreateSession(java.lang.Boolean)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration build()>();
v = staticinvoke <com.google.cloud.bigquery.JobInfo: com.google.cloud.bigquery.JobInfo of(com.google.cloud.bigquery.JobConfiguration)>(v);
v = newarray (com.google.cloud.bigquery.BigQuery$JobOption)[0];
v = interfaceinvoke v.<com.google.cloud.bigquery.BigQuery: com.google.cloud.bigquery.Job create(com.google.cloud.bigquery.JobInfo,com.google.cloud.bigquery.BigQuery$JobOption[])>(v, v);
v = newarray (com.google.cloud.RetryOption)[0];
virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.Job waitFor(com.google.cloud.RetryOption[])>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.JobStatistics getStatistics()>();
v = virtualinvoke v.<com.google.cloud.bigquery.JobStatistics: com.google.cloud.bigquery.JobStatistics$SessionInfo getSessionInfo()>();
v = virtualinvoke v.<com.google.cloud.bigquery.JobStatistics$SessionInfo: java.lang.String getSessionId()>();
v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId> = v;
return;
}
public void commitTransaction() throws java.lang.InterruptedException
{
java.lang.IllegalStateException v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
java.lang.String v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId>;
if v == null goto label;
specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>("COMMIT TRANSACTION");
goto label;
label:
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("No Transaction started, nothing to commit");
throw v;
label:
return;
}
public void revertTransaction() throws java.lang.InterruptedException
{
java.lang.IllegalStateException v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
java.lang.String v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId>;
if v == null goto label;
specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>("ROLLBACK TRANSACTION");
goto label;
label:
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("No Transaction started, nothing to revert");
throw v;
label:
return;
}
public boolean executeInCurrentTransaction(java.lang.String) throws java.lang.InterruptedException
{
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.BigQueryError v;
com.google.cloud.bigquery.Job v;
java.lang.String v;
com.google.cloud.bigquery.JobStatus v;
boolean v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: java.lang.String;
v = specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.JobStatus getStatus()>();
v = virtualinvoke v.<com.google.cloud.bigquery.JobStatus: com.google.cloud.bigquery.BigQueryError getError()>();
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public java.util.Map executeLoadStatement(java.lang.String) throws java.lang.InterruptedException
{
org.finos.legend.engine.persistence.components.common.StatisticName v, v;
java.util.HashMap v;
long v, v, v;
java.lang.Long v, v;
com.google.cloud.bigquery.Job v;
java.lang.String v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.JobStatistics v;
java.util.List v, v;
java.lang.Object v, v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: java.lang.String;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v = specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.JobStatistics getStatistics()>();
v = virtualinvoke v.<com.google.cloud.bigquery.JobStatistics$QueryStatistics: java.util.List getQueryPlan()>();
v = interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(0);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryStage: long getRecordsWritten()>();
v = virtualinvoke v.<com.google.cloud.bigquery.JobStatistics$QueryStatistics: java.util.List getQueryPlan()>();
v = interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(0);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryStage: long getRecordsRead()>();
v = <org.finos.legend.engine.persistence.components.common.StatisticName: org.finos.legend.engine.persistence.components.common.StatisticName ROWS_INSERTED>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
v = <org.finos.legend.engine.persistence.components.common.StatisticName: org.finos.legend.engine.persistence.components.common.StatisticName ROWS_WITH_ERRORS>;
v = v - v;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
return v;
}
public java.util.List convertResultSetToList(java.lang.String)
{
com.google.cloud.bigquery.FieldValue v;
byte v;
com.google.cloud.bigquery.Schema v;
com.google.cloud.bigquery.TableResult v, v;
boolean v, v, v, v, v, v, v, v, v, v, v, v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
java.util.HashMap v;
long v;
java.lang.Iterable v;
java.util.ArrayList v;
int v;
com.google.cloud.bigquery.BigQuery$QueryResultsOption[] v, v;
com.google.cloud.bigquery.Job v;
java.lang.String v, v, v, v;
com.google.cloud.bigquery.LegacySQLTypeName v;
double v;
java.util.Iterator v, v;
java.lang.RuntimeException v;
com.google.cloud.bigquery.FieldList v;
java.lang.InterruptedException v;
java.lang.Object v, v, v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: java.lang.String;
label:
v = new java.util.ArrayList;
specialinvoke v.<java.util.ArrayList: void <init>()>();
v = specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.Job executeSql(java.lang.String)>(v);
v = newarray (com.google.cloud.bigquery.BigQuery$QueryResultsOption)[0];
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.TableResult getQueryResults(com.google.cloud.bigquery.BigQuery$QueryResultsOption[])>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.TableResult: java.lang.Iterable getValues()>();
v = interfaceinvoke v.<java.lang.Iterable: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v = newarray (com.google.cloud.bigquery.BigQuery$QueryResultsOption)[0];
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.TableResult getQueryResults(com.google.cloud.bigquery.BigQuery$QueryResultsOption[])>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.TableResult: com.google.cloud.bigquery.Schema getSchema()>();
v = virtualinvoke v.<com.google.cloud.bigquery.Schema: com.google.cloud.bigquery.FieldList getFields()>();
v = virtualinvoke v.<com.google.cloud.bigquery.FieldList: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = virtualinvoke v.<com.google.cloud.bigquery.Field: java.lang.String getName()>();
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValueList: com.google.cloud.bigquery.FieldValue get(java.lang.String)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.Field: com.google.cloud.bigquery.LegacySQLTypeName getType()>();
v = virtualinvoke v.<com.google.cloud.bigquery.LegacySQLTypeName: java.lang.String name()>();
v = -1;
v = virtualinvoke v.<java.lang.String: int hashCode()>();
lookupswitch(v)
{
case -1881579439: goto label;
case -1838656495: goto label;
case -1618932450: goto label;
case -1453246218: goto label;
case -1282431251: goto label;
case -982128115: goto label;
case 63686731: goto label;
case 66988604: goto label;
case 782694408: goto label;
default: goto label;
};
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("BYTES");
if v == 0 goto label;
v = 0;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("STRING");
if v == 0 goto label;
v = 1;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("INTEGER");
if v == 0 goto label;
v = 2;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("FLOAT");
if v == 0 goto label;
v = 3;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("NUMERIC");
if v == 0 goto label;
v = 4;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("BIGNUMERIC");
if v == 0 goto label;
v = 5;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("BOOLEAN");
if v == 0 goto label;
v = 6;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("TIMESTAMP");
if v == 0 goto label;
v = 7;
goto label;
label:
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("RECORD");
if v == 0 goto label;
v = 8;
label:
tableswitch(v)
{
case 0: goto label;
case 1: goto label;
case 2: goto label;
case 3: goto label;
case 4: goto label;
case 5: goto label;
case 6: goto label;
case 7: goto label;
case 8: goto label;
default: goto label;
};
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: byte[] getBytesValue()>();
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: java.lang.String getStringValue()>();
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: long getLongValue()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: double getDoubleValue()>();
v = staticinvoke <java.lang.Double: java.lang.Double valueOf(double)>(v);
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: java.math.BigDecimal getNumericValue()>();
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: boolean getBooleanValue()>();
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(v);
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: java.time.Instant getTimestampInstant()>();
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: com.google.cloud.bigquery.FieldValueList getRecordValue()>();
goto label;
label:
v = virtualinvoke v.<com.google.cloud.bigquery.FieldValue: java.lang.Object getValue()>();
label:
v = virtualinvoke v.<com.google.cloud.bigquery.Field: java.lang.String getName()>();
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
interfaceinvoke v.<java.util.List: boolean add(java.lang.Object)>(v);
goto label;
label:
return v;
label:
v := @caughtexception;
v = new java.lang.RuntimeException;
specialinvoke v.<java.lang.RuntimeException: void <init>(java.lang.Throwable)>(v);
throw v;
catch java.lang.InterruptedException from label to label with label;
}
private com.google.cloud.bigquery.Job executeSql(java.lang.String) throws java.lang.InterruptedException
{
com.google.cloud.bigquery.BigQuery$JobOption[] v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.JobInfo v;
com.google.cloud.RetryOption[] v;
com.google.cloud.bigquery.QueryJobConfiguration v;
java.util.UUID v;
com.google.cloud.bigquery.BigQuery v;
com.google.cloud.bigquery.JobInfo$Builder v, v;
com.google.cloud.bigquery.Job v, v;
java.lang.String v, v;
com.google.cloud.bigquery.JobId v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: java.lang.String;
v = staticinvoke <java.util.UUID: java.util.UUID randomUUID()>();
v = virtualinvoke v.<java.util.UUID: java.lang.String toString()>();
v = staticinvoke <com.google.cloud.bigquery.JobId: com.google.cloud.bigquery.JobId of(java.lang.String)>(v);
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.BigQuery bigQuery>;
v = specialinvoke v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: com.google.cloud.bigquery.QueryJobConfiguration getQueryJobConfiguration(java.lang.String)>(v);
v = staticinvoke <com.google.cloud.bigquery.JobInfo: com.google.cloud.bigquery.JobInfo$Builder newBuilder(com.google.cloud.bigquery.JobConfiguration)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.JobInfo$Builder: com.google.cloud.bigquery.JobInfo$Builder setJobId(com.google.cloud.bigquery.JobId)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.JobInfo$Builder: com.google.cloud.bigquery.JobInfo build()>();
v = newarray (com.google.cloud.bigquery.BigQuery$JobOption)[0];
v = interfaceinvoke v.<com.google.cloud.bigquery.BigQuery: com.google.cloud.bigquery.Job create(com.google.cloud.bigquery.JobInfo,com.google.cloud.bigquery.BigQuery$JobOption[])>(v, v);
v = newarray (com.google.cloud.RetryOption)[0];
v = virtualinvoke v.<com.google.cloud.bigquery.Job: com.google.cloud.bigquery.Job waitFor(com.google.cloud.RetryOption[])>(v);
return v;
}
private com.google.cloud.bigquery.QueryJobConfiguration getQueryJobConfiguration(java.lang.String)
{
com.google.cloud.bigquery.ConnectionProperty v;
java.lang.Boolean v, v, v;
java.lang.String v, v, v;
org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager v;
com.google.cloud.bigquery.QueryJobConfiguration$Builder v, v, v, v, v, v;
com.google.cloud.bigquery.ConnectionProperty$Builder v, v, v;
com.google.cloud.bigquery.QueryJobConfiguration v, v;
java.util.List v;
com.google.cloud.bigquery.ConnectionProperty[] v;
v := @this: org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager;
v := @parameter: java.lang.String;
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId>;
if v != null goto label;
v = staticinvoke <com.google.cloud.bigquery.QueryJobConfiguration: com.google.cloud.bigquery.QueryJobConfiguration$Builder newBuilder(java.lang.String)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration$Builder setUseLegacySql(java.lang.Boolean)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration build()>();
return v;
label:
v = staticinvoke <com.google.cloud.bigquery.QueryJobConfiguration: com.google.cloud.bigquery.QueryJobConfiguration$Builder newBuilder(java.lang.String)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration$Builder setUseLegacySql(java.lang.Boolean)>(v);
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(0);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration$Builder setCreateSession(java.lang.Boolean)>(v);
v = newarray (com.google.cloud.bigquery.ConnectionProperty)[1];
v = staticinvoke <com.google.cloud.bigquery.ConnectionProperty: com.google.cloud.bigquery.ConnectionProperty$Builder newBuilder()>();
v = virtualinvoke v.<com.google.cloud.bigquery.ConnectionProperty$Builder: com.google.cloud.bigquery.ConnectionProperty$Builder setKey(java.lang.String)>("session_id");
v = v.<org.finos.legend.engine.persistence.components.relational.bigquery.executor.BigQueryTransactionManager: java.lang.String sessionId>;
v = virtualinvoke v.<com.google.cloud.bigquery.ConnectionProperty$Builder: com.google.cloud.bigquery.ConnectionProperty$Builder setValue(java.lang.String)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.ConnectionProperty$Builder: com.google.cloud.bigquery.ConnectionProperty build()>();
v[0] = v;
v = staticinvoke <java.util.Arrays: java.util.List asList(java.lang.Object[])>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration$Builder setConnectionProperties(java.util.List)>(v);
v = virtualinvoke v.<com.google.cloud.bigquery.QueryJobConfiguration$Builder: com.google.cloud.bigquery.QueryJobConfiguration build()>();
return v;
}
}