Alien-SVN
view release on metacpan or search on metacpan
src/subversion/build/transform_sql.py view on Meta::CPAN
#!/usr/bin/env python
#
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#
#
# transform_sql.py -- create a header file with the appropriate SQL variables
# from an SQL file
#
import operator
import os
import re
import sys
# operator.methodcaller doesn't exist in Python 2.5.
if not hasattr(operator, 'methodcaller'):
def methodcaller(method, *args, **kwargs):
return lambda x: getattr(x, method)(*args, **kwargs)
operator.methodcaller = methodcaller
del methodcaller
DEFINE_END = ' ""\n\n'
def usage_and_exit(msg):
if msg:
sys.stderr.write('%s\n\n' % msg)
sys.stderr.write(
'USAGE: %s SQLITE_FILE [OUTPUT_FILE]\n'
' stdout will be used if OUTPUT_FILE is not provided.\n'
% os.path.basename(sys.argv[0]))
sys.stderr.flush()
sys.exit(1)
class Processor(object):
re_comments = re.compile(r'/\*.*?\*/', re.MULTILINE|re.DOTALL)
# a few SQL comments that act as directives for this transform system
re_format = re.compile('-- *format: *([0-9]+)')
re_statement = re.compile('-- *STMT_([A-Z_0-9]+)( +\(([^\)]*)\))?')
re_include = re.compile('-- *include: *([-a-z]+)')
re_define = re.compile('-- *define: *([A-Z_0-9]+)')
def _sub_format(self, match):
vsn = match.group(1)
self.close_define()
self.output.write('#define %s_%s \\\n' % (self.var_name, match.group(1)))
self.var_printed = True
def _sub_statement(self, match):
name = match.group(1)
self.close_define()
self.output.write('#define STMT_%s %d\n' % (match.group(1),
self.stmt_count))
if match.group(3) == None:
info = 'NULL'
else:
info = '"' + match.group(3) + '"'
self.output.write('#define STMT_%d_INFO {"STMT_%s", %s}\n' %
(self.stmt_count, match.group(1), info))
self.output.write('#define STMT_%d \\\n' % (self.stmt_count,))
self.var_printed = True
self.stmt_count += 1
def _sub_include(self, match):
filepath = os.path.join(self.dirpath, match.group(1) + '.sql')
self.close_define()
self.process_file(open(filepath).read())
def _sub_define(self, match):
define = match.group(1)
self.output.write(' APR_STRINGIFY(%s) \\\n' % define)
def __init__(self, dirpath, output, var_name, token_map):
self.dirpath = dirpath
self.output = output
self.var_name = var_name
self.token_map = token_map
self.stmt_count = 0
self.var_printed = False
self._directives = {
( run in 1.378 second using v1.01-cache-2.11-cpan-ceb78f64989 )