<p></p>
<p dir="auto">When attempting to parse Oracle SQL where a column definition has a default value of CURRENT_TIMESTAMP the parser will fail with the following error:</p>
<pre class="notranslate"><code class="notranslate">ERROR (line 1): Invalid statement: Was expecting remark, or run, or
prompt, or create, or table comment, or comment on
table, or comment on column, or alter, or drop
translate: Error with parser 'SQL::Translator::Parser::Oracle': Parse failed.
</code></pre>
<p dir="auto">You can recreate the error with the following script:</p>
<div class="highlight highlight-source-perl"><pre><span class="pl-c"><span class="pl-c">#</span>!/usr/bin/env perl</span>
<span class="pl-k">use</span> strict;
<span class="pl-k">use</span> warnings;
<span class="pl-k">use</span> FindBin;
<span class="pl-k">use</span> SQL::Translator;
<span class="pl-k">my</span> <span class="pl-smi">$translator</span> = SQL::Translator<span class="pl-k">-></span>new(
<span class="pl-c"><span class="pl-c">#</span> Print debug info</span>
<span class="pl-c1">debug</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> Print Parse::RecDescent trace</span>
<span class="pl-c1">trace</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> Don't include comments in output</span>
<span class="pl-c1">no_comments</span> <span class="pl-k">=></span> 0,
<span class="pl-c"><span class="pl-c">#</span> Print name mutations, conflicts</span>
<span class="pl-c1">show_warnings</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> Add "drop table" statements</span>
<span class="pl-c1">add_drop_table</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> to quote or not to quote, thats the question</span>
<span class="pl-c1">quote_identifiers</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> Validate schema object</span>
<span class="pl-c1">validate</span> <span class="pl-k">=></span> 1,
<span class="pl-c"><span class="pl-c">#</span> Make all table names CAPS in producers which support this option</span>
<span class="pl-c1">format_table_name</span> <span class="pl-k">=></span> <span class="pl-k">sub</span> {<span class="pl-k">my</span> <span class="pl-smi">$tablename</span> = <span class="pl-c1">shift</span>; <span class="pl-k">return</span> <span class="pl-c1">uc</span>(<span class="pl-smi">$tablename</span>)},
<span class="pl-c"><span class="pl-c">#</span> Null-op formatting, only here for documentation's sake</span>
<span class="pl-c1">format_package_name</span> <span class="pl-k">=></span> <span class="pl-k">sub</span> {<span class="pl-k">return</span> <span class="pl-c1">shift</span>},
<span class="pl-c1">format_fk_name</span> <span class="pl-k">=></span> <span class="pl-k">sub</span> {<span class="pl-k">return</span> <span class="pl-c1">shift</span>},
<span class="pl-c1">format_pk_name</span> <span class="pl-k">=></span> <span class="pl-k">sub</span> {<span class="pl-k">return</span> <span class="pl-c1">shift</span>},
);
<span class="pl-k">my</span> <span class="pl-smi">$output</span> = <span class="pl-smi">$translator</span><span class="pl-k">-></span>translate(
<span class="pl-c1">from</span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>Oracle<span class="pl-pds">'</span></span>,
<span class="pl-c1">to</span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">'</span>MySQL<span class="pl-pds">'</span></span>,
<span class="pl-c"><span class="pl-c">#</span> Or an arrayref of filenames, i.e. [ $file1, $file2, $file3 ]</span>
<span class="pl-c1">filename</span> <span class="pl-k">=></span> <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$FindBin::Bin</span>/../db_versions/just_person_test.sql<span class="pl-pds">"</span></span>,
) <span class="pl-k">or</span> <span class="pl-k">die</span> <span class="pl-smi">$translator</span><span class="pl-k">-></span>error;
<span class="pl-c1">print</span> <span class="pl-smi">$output</span>;</pre></div>
<p dir="auto">just_person_test.sql contains the following</p>
<div class="highlight highlight-source-sql"><pre> <span class="pl-k">CREATE</span> <span class="pl-k">TABLE</span> <span class="pl-en">person</span> (
id <span class="pl-k">varchar2</span>(<span class="pl-c1">32</span>) <span class="pl-k">NOT NULL</span>,
added <span class="pl-k">date</span> DEFAULT <span class="pl-c1">CURRENT_TIMESTAMP</span>,
<span class="pl-k">PRIMARY KEY</span> (id)
);</pre></div>
<p dir="auto">If you remove <code class="notranslate">DEFAULT CURRENT_TIMESTAMP</code> it will parse just fine.</p>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />Reply to this email directly, <a href="https://github.com/dbsrgits/sql-translator/issues/141">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AACJ4ARAETABSKILSNHDVZLVYPJJ3ANCNFSM56FER4BQ">unsubscribe</a>.<br />You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/AACJ4AW5WFMOGAU5KJQZWQ3VYPJJ3A5CNFSM56FER4B2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4T4QSIMQ.gif" height="1" width="1" alt="" /><span style="color: transparent; font-size: 0; display: none; visibility: hidden; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0; mso-hide: all">Message ID: <span><dbsrgits/sql-translator/issues/141</span><span>@</span><span>github</span><span>.</span><span>com></span></span></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/dbsrgits/sql-translator/issues/141",
"url": "https://github.com/dbsrgits/sql-translator/issues/141",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>