Revision 1136
Added by Aaron Marcuse-Kubitza almost 13 years ago
map | ||
---|---|---|
156 | 156 |
elif in_is_db: |
157 | 157 |
assert in_is_xpaths |
158 | 158 |
|
159 |
import db_xml |
|
159 |
in_db = connect_db(in_db_config) |
|
160 |
in_pkeys = {} |
|
160 | 161 |
|
161 |
in_root_xml = xpath.path2xml(in_root) |
|
162 |
cur = sql.select(in_db, table=in_root, fields=None, conds=None, |
|
163 |
limit=end, start=0) |
|
164 |
col_idxs = dict((v, i) for i, v in enumerate(sql.col_names(cur))) |
|
165 |
|
|
166 |
mappings_new = [] |
|
162 | 167 |
for i, mapping in enumerate(mappings): |
163 | 168 |
in_, out = mapping |
164 | 169 |
if metadata_value(in_) == None: |
165 |
mappings[i] = (xpath.path2xml(in_root+'/'+in_), out) |
|
170 |
try: mapping = (col_idxs[in_], out) |
|
171 |
except KeyError: continue |
|
172 |
mappings_new.append(mapping) |
|
173 |
mappings = mappings_new |
|
166 | 174 |
|
167 |
in_db = connect_db(in_db_config) |
|
168 |
in_pkeys = {} |
|
169 |
def get_value(in_, row): |
|
170 |
pkey, = row |
|
171 |
in_ = in_.cloneNode(True) # don't modify orig value! |
|
172 |
xml_dom.set_id(xpath.get(in_, in_root)[0], pkey) |
|
173 |
value = sql.value_or_none(db_xml.get(in_db, in_, in_pkeys)) |
|
174 |
if value != None: return str(value) |
|
175 |
else: return None |
|
176 |
row_ct = map_rows(get_value, sql.rows(db_xml.get(in_db, in_root_xml, |
|
177 |
in_pkeys, end, 0))) |
|
175 |
row_ct = map_rows(lambda in_, row: util.cast(str, row[in_]), |
|
176 |
sql.rows(cur)) |
|
177 |
|
|
178 | 178 |
in_db.close() |
179 | 179 |
elif in_is_xml: |
180 | 180 |
def get_value(in_, row): |
Also available in: Unified diff
bin/map: DB inputs: Get all rows in one query (hopefully a significant optimization). Allow maps to contain entries for columns that are not in the DB table.