33import java .io .File ;
44import java .io .FileWriter ;
55import java .io .IOException ;
6- import java .io .PrintWriter ;
7- import java .io .StringWriter ;
86import java .io .Writer ;
97import java .nio .file .Files ;
108import java .sql .Connection ;
2927import sqlancer .citus .CitusProvider ;
3028import sqlancer .clickhouse .ClickHouseProvider ;
3129import sqlancer .cockroachdb .CockroachDBProvider ;
30+ import sqlancer .common .log .Loggable ;
3231import sqlancer .common .query .Query ;
3332import sqlancer .common .query .SQLancerResultSet ;
3433import sqlancer .duckdb .DuckDBProvider ;
@@ -67,6 +66,7 @@ public static final class StateLogger {
6766 public FileWriter currentFileWriter ;
6867 private static final List <String > INITIALIZED_PROVIDER_NAMES = new ArrayList <>();
6968 private final boolean logEachSelect ;
69+ private final DatabaseProvider <?, ?> databaseProvider ;
7070
7171 private static final class AlsoWriteToConsoleFileWriter extends FileWriter {
7272
@@ -98,6 +98,7 @@ public StateLogger(String databaseName, DatabaseProvider<?, ?> provider, MainOpt
9898 if (logEachSelect ) {
9999 curFile = new File (dir , databaseName + "-cur.log" );
100100 }
101+ this .databaseProvider = provider ;
101102 }
102103
103104 private void ensureExistsAndIsEmpty (File dir , DatabaseProvider <?, ?> provider ) {
@@ -161,37 +162,32 @@ public void writeCurrent(StateToReproduce state) {
161162 }
162163 }
163164
164- public void writeCurrent (String queryString ) {
165- write (queryString , " \n " );
165+ public void writeCurrent (String input ) {
166+ write (databaseProvider . getLoggableFactory (). createLoggable ( input ) );
166167 }
167168
168- private void write (String queryString , String suffix ) {
169+ public void writeCurrentNoLineBreak (String input ) {
170+ write (databaseProvider .getLoggableFactory ().createLoggableWithNoLinebreak (input ));
171+ }
172+
173+ private void write (Loggable loggable ) {
169174 if (!logEachSelect ) {
170175 throw new UnsupportedOperationException ();
171176 }
172177 try {
173- getCurrentFileWriter ().write (queryString );
174- if (!queryString .endsWith (";" )) {
175- getCurrentFileWriter ().write (';' );
176- }
177- if (suffix != null && suffix .length () != 0 ) {
178- getCurrentFileWriter ().write (suffix );
179- }
178+ getCurrentFileWriter ().write (loggable .getLogString ());
179+
180180 currentFileWriter .flush ();
181181 } catch (IOException e ) {
182182 throw new AssertionError ();
183183 }
184184 }
185185
186- public void writeCurrentNoLineBreak (String queryString ) {
187- write (queryString , "" );
188- }
189-
190186 public void logException (Throwable reduce , StateToReproduce state ) {
191- String stackTrace = getStackTrace (reduce );
187+ Loggable stackTrace = getStackTrace (reduce );
192188 FileWriter logFileWriter2 = getLogFileWriter ();
193189 try {
194- logFileWriter2 .write (stackTrace );
190+ logFileWriter2 .write (stackTrace . getLogString () );
195191 printState (logFileWriter2 , state );
196192 } catch (IOException e ) {
197193 throw new AssertionError (e );
@@ -205,21 +201,16 @@ public void logException(Throwable reduce, StateToReproduce state) {
205201 }
206202 }
207203
208- private String getStackTrace (Throwable e1 ) {
209- StringWriter sw = new StringWriter ();
210- PrintWriter pw = new PrintWriter (sw );
211- e1 .printStackTrace (pw );
212- return "--" + sw .toString ().replace ("\n " , "\n --" );
204+ private Loggable getStackTrace (Throwable e1 ) {
205+ return databaseProvider .getLoggableFactory ().convertStacktraceToLoggable (e1 );
213206 }
214207
215208 private void printState (FileWriter writer , StateToReproduce state ) {
216209 StringBuilder sb = new StringBuilder ();
217- DateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd HH:mm:ss" );
218- Date date = new Date ();
219- sb .append ("-- Time: " + dateFormat .format (date ) + "\n " );
220- sb .append ("-- Database: " + state .getDatabaseName () + "\n " );
221- sb .append ("-- Database version: " + state .getDatabaseVersion () + "\n " );
222- sb .append ("-- seed value: " + state .getSeedValue () + "\n " );
210+
211+ sb .append (databaseProvider .getLoggableFactory ()
212+ .getInfo (state .getDatabaseName (), state .getDatabaseVersion (), state .getSeedValue ()).getLogString ());
213+
223214 for (Query s : state .getStatements ()) {
224215 sb .append (s .getQueryString ());
225216 sb .append ('\n' );
0 commit comments