[#8465] Add a new <logSlowResultsAfterSeconds/> code generation flag

This commit is contained in:
lukaseder 2019-03-29 15:00:41 +01:00
parent f39e15be04
commit 8f7e2f0dbf
5 changed files with 74 additions and 2 deletions

View File

@ -517,6 +517,7 @@ public class GenerationTool {
database.setConfiguredForcedTypes(d.getForcedTypes());
database.setConfiguredEmbeddables(d.getEmbeddables());
database.setLogSlowQueriesAfterSeconds(defaultIfNull(g.getDatabase().getLogSlowQueriesAfterSeconds(), 5));
database.setLogSlowResultsAfterSeconds(defaultIfNull(g.getDatabase().getLogSlowResultsAfterSeconds(), 5));
if (d.getRegexFlags() != null) {
database.setRegexFlags(d.getRegexFlags());

View File

@ -151,6 +151,7 @@ public abstract class AbstractDatabase implements Database {
private boolean includeRelations = true;
private boolean tableValuedFunctions = true;
private int logSlowQueriesAfterSeconds;
private int logSlowResultsAfterSeconds;
// -------------------------------------------------------------------------
// Loaded definitions
@ -318,7 +319,7 @@ public abstract class AbstractDatabase implements Database {
@Override
public void fetchEnd(ExecuteContext ctx) {
int s = getLogSlowQueriesAfterSeconds();
int s = getLogSlowResultsAfterSeconds();
if (s <= 0)
return;
@ -329,7 +330,7 @@ public abstract class AbstractDatabase implements Database {
log.warn(
"Slow Result Fetching",
"jOOQ Meta fetched a slow result (slower than " + s + " seconds)" // [#8465], configured by configuration/generator/database/logSlowResultsAfterSeconds
"jOOQ Meta fetched a slow result (slower than " + s + " seconds, configured by configuration/generator/database/logSlowResultsAfterSeconds)"
+ "\n\n"
+ "If you think this is a bug in jOOQ, please report it here: https://github.com/jOOQ/jOOQ/issues/new\n\n```sql\n"
+ formatted(ctx.query())
@ -1149,6 +1150,16 @@ public abstract class AbstractDatabase implements Database {
this.logSlowQueriesAfterSeconds = logSlowQueriesAfterSeconds;
}
@Override
public final int getLogSlowResultsAfterSeconds() {
return logSlowResultsAfterSeconds;
}
@Override
public final void setLogSlowResultsAfterSeconds(int logSlowResultsAfterSeconds) {
this.logSlowResultsAfterSeconds = logSlowResultsAfterSeconds;
}
@Override
public final SchemaVersionProvider getSchemaVersionProvider() {
return schemaVersionProvider;

View File

@ -747,6 +747,16 @@ public interface Database extends AutoCloseable {
*/
void setLogSlowQueriesAfterSeconds(int logSlowQueriesAfterSeconds);
/**
* Log slow results after this amount of seconds.
*/
int getLogSlowResultsAfterSeconds();
/**
* Log slow results after this amount of seconds.
*/
void setLogSlowResultsAfterSeconds(int logSlowResultsAfterSeconds);
/**
* The database's schema version provider.
*/

View File

@ -137,6 +137,8 @@ public class Database implements Serializable
protected Boolean tableValuedFunctions;
@XmlElement(defaultValue = "5")
protected Integer logSlowQueriesAfterSeconds = 5;
@XmlElement(defaultValue = "5")
protected Integer logSlowResultsAfterSeconds = 5;
@XmlElementWrapper(name = "properties")
@XmlElement(name = "property")
protected List<Property> properties;
@ -1347,6 +1349,30 @@ public class Database implements Serializable
this.logSlowQueriesAfterSeconds = value;
}
/**
* The number of seconds that are considered "slow" before a result set is logged to indicate a bug, 0 for not logging.
*
* @return
* possible object is
* {@link Integer }
*
*/
public Integer getLogSlowResultsAfterSeconds() {
return logSlowResultsAfterSeconds;
}
/**
* Sets the value of the logSlowResultsAfterSeconds property.
*
* @param value
* allowed object is
* {@link Integer }
*
*/
public void setLogSlowResultsAfterSeconds(Integer value) {
this.logSlowResultsAfterSeconds = value;
}
public List<Property> getProperties() {
if (properties == null) {
properties = new ArrayList<Property>();
@ -1650,6 +1676,11 @@ public class Database implements Serializable
return this;
}
public Database withLogSlowResultsAfterSeconds(Integer value) {
setLogSlowResultsAfterSeconds(value);
return this;
}
public Database withProperties(Property... values) {
if (values!= null) {
for (Property value: values) {
@ -2019,6 +2050,11 @@ public class Database implements Serializable
sb.append(logSlowQueriesAfterSeconds);
sb.append("</logSlowQueriesAfterSeconds>");
}
if (logSlowResultsAfterSeconds!= null) {
sb.append("<logSlowResultsAfterSeconds>");
sb.append(logSlowResultsAfterSeconds);
sb.append("</logSlowResultsAfterSeconds>");
}
if (properties!= null) {
sb.append("<properties>");
for (int i = 0; (i<properties.size()); i ++) {
@ -2484,6 +2520,15 @@ public class Database implements Serializable
return false;
}
}
if (logSlowResultsAfterSeconds == null) {
if (other.logSlowResultsAfterSeconds!= null) {
return false;
}
} else {
if (!logSlowResultsAfterSeconds.equals(other.logSlowResultsAfterSeconds)) {
return false;
}
}
if (properties == null) {
if (other.properties!= null) {
return false;
@ -2597,6 +2642,7 @@ public class Database implements Serializable
result = ((prime*result)+((forceIntegerTypesOnZeroScaleDecimals == null)? 0 :forceIntegerTypesOnZeroScaleDecimals.hashCode()));
result = ((prime*result)+((tableValuedFunctions == null)? 0 :tableValuedFunctions.hashCode()));
result = ((prime*result)+((logSlowQueriesAfterSeconds == null)? 0 :logSlowQueriesAfterSeconds.hashCode()));
result = ((prime*result)+((logSlowResultsAfterSeconds == null)? 0 :logSlowResultsAfterSeconds.hashCode()));
result = ((prime*result)+((properties == null)? 0 :properties.hashCode()));
result = ((prime*result)+((catalogs == null)? 0 :catalogs.hashCode()));
result = ((prime*result)+((schemata == null)? 0 :schemata.hashCode()));

View File

@ -748,6 +748,10 @@ for Oracle.]]></jxb:javadoc></jxb:property></appinfo></annotation>
<element name="logSlowQueriesAfterSeconds" type="int" minOccurs="0" maxOccurs="1" default="5">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The number of seconds that are considered "slow" before a query is logged to indicate a bug, 0 for not logging.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="logSlowResultsAfterSeconds" type="int" minOccurs="0" maxOccurs="1" default="5">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The number of seconds that are considered "slow" before a result set is logged to indicate a bug, 0 for not logging.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
</all>
</complexType>