Changeset 4600
- Timestamp:
- Oct 24, 2008, 1:43:13 PM (14 years ago)
- Location:
- trunk/src/core/net/sf/basedb/core
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/net/sf/basedb/core/AbstractEntityQuery.java
r4517 r4600 26 26 import net.sf.basedb.core.query.EntityQuery; 27 27 import net.sf.basedb.core.query.JoinType; 28 import net.sf.basedb.core.query.QueryParameter; 28 29 import net.sf.basedb.core.query.Select; 29 30 import net.sf.basedb.core.query.Expression; … … 414 415 lastMainDc = dc; 415 416 lastMainQuery.setCacheable(isCachingResult()); 416 setParameters(lastMainQuery, getPermanentParameters());417 417 setParameters(lastMainQuery, getParameters()); 418 418 if (getFirstResult() >= 0) lastMainQuery.setFirstResult(getFirstResult()); … … 447 447 lastCountDc = dc; 448 448 lastCountQuery.setCacheable(true); 449 setParameters(lastCountQuery, getPermanentParameters());450 449 setParameters(lastCountQuery, getParameters()); 451 450 return lastCountQuery; … … 497 496 @param parameters A map containing parameter names and values 498 497 */ 499 private void setParameters(org.hibernate.Query query, Map<String, Object> parameters)498 private void setParameters(org.hibernate.Query query, Map<String, QueryParameter> parameters) 500 499 { 501 500 if (parameters == null) return; … … 504 503 logParam.debug("Binding parameters to query: " + query.getQueryString()); 505 504 } 506 for (Map.Entry<String, Object> entry : parameters.entrySet())505 for (Map.Entry<String, QueryParameter> entry : parameters.entrySet()) 507 506 { 508 507 String name = entry.getKey(); 509 Object value = entry.getValue(); 510 Type valueType = getParameterType(name); 508 QueryParameter qp = entry.getValue(); 509 Type valueType = qp.getType(); 510 Object value = qp.getValue(); 511 511 if (value instanceof Collection) 512 512 { -
trunk/src/core/net/sf/basedb/core/AbstractQuery.java
r4517 r4600 27 27 import net.sf.basedb.core.query.Query; 28 28 import net.sf.basedb.core.query.QueryElement; 29 import net.sf.basedb.core.query.QueryParameter; 29 30 import net.sf.basedb.core.query.QuerySection; 30 31 import net.sf.basedb.core.query.Select; … … 35 36 import net.sf.basedb.util.NestedIterator; 36 37 38 import java.util.Collections; 37 39 import java.util.HashSet; 38 40 import java.util.Iterator; … … 152 154 Parameters values added to the query. 153 155 */ 154 private Map<String, Object> parameters; 155 156 /** 157 Permanent parameter values added to the query. 158 */ 159 private Map<String, Object> permanentParameters; 160 161 /** 162 Maps parameters to types. 163 */ 164 private Map<String, Type> parameterTypes; 165 156 private Map<String, QueryParameter> parameters; 157 166 158 /** 167 159 The index of the first result that should be returned by the query. … … 354 346 } 355 347 356 public void setParameter(String name, Object value, Type valueType) 357 throws InvalidDataException, BaseException 348 private void setParameter(String name, boolean permanent, Object value, Type valueType) 358 349 { 359 350 if (name == null) throw new InvalidUseOfNullException("name"); 360 351 if (value == null) throw new InvalidUseOfNullException("value"); 361 if (permanentParameters != null && permanentParameters.containsKey(name)) 362 { 363 throw new InvalidDataException("The parameter "+name+" has already been permanently set and cannot be changed"); 364 } 365 if (valueType != null) 366 { 367 if (value != null) validateParameterType(name, value, valueType); 368 if (parameterTypes == null) parameterTypes = new HashMap<String, Type>(); 369 parameterTypes.put(name, valueType); 370 } 371 if (parameters == null) parameters = new HashMap<String, Object>(); 372 parameters.put(name, value); 373 } 352 if (parameters == null) parameters = new HashMap<String, QueryParameter>(); 353 QueryParameter qp = parameters.get(name); 354 if (qp != null && qp.isPermanent()) 355 { 356 throw new InvalidDataException("The parameter '"+name+ 357 "' has already been permanently set and cannot be changed"); 358 } 359 if (valueType != null && value != null) validateParameterType(name, value, valueType); 360 parameters.put(name, new QueryParameter(name, permanent, valueType, value)); 361 } 362 363 public void setParameter(String name, Object value, Type valueType) 364 throws InvalidDataException, BaseException 365 { 366 setParameter(name, false, value, valueType); 367 } 368 374 369 public void setPermanentParameter(String name, Object value, Type valueType) 375 370 throws InvalidDataException, BaseException 376 371 { 377 if (name == null) throw new InvalidUseOfNullException("name"); 378 if (value == null) throw new InvalidUseOfNullException("value"); 379 if (permanentParameters == null) permanentParameters = new HashMap<String, Object>(); 380 if (valueType != null) 381 { 382 if (value != null) validateParameterType(name, value, valueType); 383 if (parameterTypes == null) parameterTypes = new HashMap<String, Type>(); 384 parameterTypes.put(name, valueType); 385 } 386 if (permanentParameters.containsKey(name)) 387 { 388 throw new InvalidDataException("The parameter "+name+" has already been permanently set and cannot be changed"); 389 } 390 permanentParameters.put(name, value); 372 setParameter(name, true, value, valueType); 391 373 } 392 374 393 375 public boolean hasParameterValue(String name) 394 376 { 395 return (parameters != null && parameters.containsKey(name)) || 396 (permanentParameters != null && permanentParameters.containsKey(name)); 377 return (parameters != null && parameters.containsKey(name)); 378 } 379 380 /** 381 @since 2.9 382 */ 383 @Override 384 public Set<String> getParameterNames() 385 { 386 if (parameters == null) 387 { 388 return Collections.emptySet(); 389 } 390 else 391 { 392 return parameters.keySet(); 393 } 394 } 395 396 /** 397 @since 2.9 398 */ 399 @Override 400 public QueryParameter getQueryParameter(String name) 401 { 402 return parameters == null ? null : parameters.get(name); 397 403 } 398 404 … … 468 474 return querySection; 469 475 } 476 477 @Override 478 public String toQl(DbControl dc) 479 { 480 return getMainQuery(dc, true); 481 } 470 482 // ------------------------------------------- 471 483 … … 530 542 531 543 /** 532 Get all permanent parameter values. 533 */ 534 Map<String, Object> getPermanentParameters() 535 { 536 return permanentParameters; 537 } 538 539 /** 540 Get all non-permanent parameter values. 541 */ 542 Map<String, Object> getParameters() 544 Get all query parameters. 545 */ 546 Map<String, QueryParameter> getParameters() 543 547 { 544 548 return parameters; 545 }546 547 /**548 Get the types of all parameters.549 */550 Map<String, Type> getParameterTypes()551 {552 return parameterTypes;553 549 } 554 550 … … 561 557 Object getParameterValue(String name) 562 558 { 563 if (permanentParameters != null && permanentParameters.containsKey(name)) 564 { 565 return permanentParameters.get(name); 566 } 567 else if (parameters != null) 568 { 569 return parameters.get(name); 570 } 571 return null; 559 QueryParameter qp = getQueryParameter(name); 560 return qp == null ? null : qp.getValue(); 572 561 } 573 562 … … 577 566 Type getParameterType(String name) 578 567 { 579 return parameterTypes == null ? null : parameterTypes.get(name); 568 QueryParameter qp = getQueryParameter(name); 569 return qp == null ? null : qp.getType(); 580 570 } 581 571 … … 595 585 // Append SELECT elements 596 586 appended = appendSelects(ql, dc, temporarySelects, 0); 597 appended += appendSelects(ql, dc, permanentSelects, appended);598 appended += appendSelects(ql, dc, selects, appended);587 appended += appendSelects(ql, dc, permanentSelects, appended); 588 appended += appendSelects(ql, dc, selects, appended); 599 589 600 590 querySection = QuerySection.FROM; … … 657 647 // Append SELECT elements 658 648 appended = appendSelects(ql, dc, temporarySelects, 0); 659 appended += appendSelects(ql, dc, permanentSelects, appended);660 appended += appendSelects(ql, dc, selects, appended);649 appended += appendSelects(ql, dc, permanentSelects, appended); 650 appended += appendSelects(ql, dc, selects, appended); 661 651 ql.append(") "); 662 652 } … … 725 715 } 726 716 727 private int appendJoins(StringBuilder ql, DbControl dc, List<Join> joins, boolean useThetaJoin, int alreadyAppended) 717 private int appendJoins(StringBuilder ql, DbControl dc, 718 List<Join> joins, boolean useThetaJoin, int alreadyAppended) 728 719 throws BaseException 729 720 { -
trunk/src/core/net/sf/basedb/core/AbstractSqlQuery.java
r4517 r4600 25 25 26 26 import net.sf.basedb.core.hibernate.ResultSetWork; 27 import net.sf.basedb.core.query.QueryParameter; 27 28 import net.sf.basedb.core.query.SqlQuery; 28 29 import net.sf.basedb.core.query.QueryType; … … 311 312 for (String name : parameterOrder) 312 313 { 313 Object parameterValue = getParameterValue(name); 314 Type valueType = getParameterType(name); 314 QueryParameter qp = getQueryParameter(name); 315 Object parameterValue = qp == null ? null : qp.getValue(); 316 Type valueType = qp == null ? null : qp.getType(); 315 317 if (parameterValue instanceof Collection) 316 318 { -
trunk/src/core/net/sf/basedb/core/query/Expressions.java
r4516 r4600 360 360 361 361 /** 362 Create a subquery expression: <code>ANY (subquery)</code>. 363 The expression is useful in the WHERE part of a query only. 364 For example, to find all users that are members of a group 365 having a name starting with A. 366 <pre class="code"> 367 Query groupFilter = User.getQuery(); 368 groupFilter.join(Hql.innerJoin("groups", "grp")); 369 groupFilter.restrict(Restrictions.like(Hql.property("grp", "name"), Expressions.string("A%"))); 370 Query userQuery = User.getQuery(); 371 userQuery.restrict(Restrictions.eq(Hql.property("id"), Expressions.any(groupFilter))); 372 </pre> 373 374 @param subquery The subquery 375 @return The new expression 376 @throws InvalidDataException If the subquery is null 377 @since 2.9 378 */ 379 public static Expression any(Query subquery) 380 { 381 if (subquery == null) throw new InvalidUseOfNullException("subquery"); 382 return new SubqueryExpression("ANY", subquery); 383 } 384 385 /** 386 Create a subquery expression: <code>ANY (subquery)</code>. 387 @param subquery The subquery 388 @return The new expression 389 @throws InvalidDataException If the subquery is null 390 @see #any(Query) 391 @since 2.9 392 */ 393 public static Expression all(Query subquery) 394 { 395 if (subquery == null) throw new InvalidUseOfNullException("subquery"); 396 return new SubqueryExpression("ALL", subquery); 397 } 398 399 /** 362 400 Test if there is null in the array. 363 401 @return The index of the first null element, -
trunk/src/core/net/sf/basedb/core/query/HqlPropertyExpression.java
r4516 r4600 82 82 public String toString() 83 83 { 84 return (alias == null ? "" : alias + ".") + property; 84 if (alias != null && property != null) 85 { 86 return alias + "." + property; 87 } 88 return property == null ? alias : property; 85 89 } 86 90 // ------------------------------------------- -
trunk/src/core/net/sf/basedb/core/query/Query.java
r4516 r4600 22 22 */ 23 23 package net.sf.basedb.core.query; 24 25 import java.util.Set; 24 26 25 27 import net.sf.basedb.core.DbControl; … … 226 228 227 229 /** 230 Get a set with the names for all parameters in this 231 query. 232 @return A set (empty if no parameters exists) 233 @since 2.9 234 */ 235 public Set<String> getParameterNames(); 236 237 /** 238 Get parameter information for the parameter with given name. 239 @param name The name of the parameter 240 @return A QueryParameter object or null if no parameter with 241 that name exists 242 @since 2.9 243 */ 244 public QueryParameter getQueryParameter(String name); 245 246 /** 228 247 Specify that the query should start returning rows from the 229 248 specified row number. 0 = start returning from the first row. If the … … 345 364 public QuerySection getQuerySection(); 346 365 366 /** 367 Generate the query string that is going to be sent to the 368 underlying query system (eg. HQL/Hibernate or SQL/JDBC). 369 370 @param dc The DbControl that is going to be used for 371 executing the query 372 @return The query string 373 @since 2.9 374 */ 375 public String toQl(DbControl dc); 347 376 }
Note: See TracChangeset
for help on using the changeset viewer.