Changeset View
Changeset View
Standalone View
Standalone View
src/server/storage/entities-source.xsl
Show First 20 Lines • Show All 343 Lines • ▼ Show 20 Line(s) | 342 | { | |||
---|---|---|---|---|---|
344 | <xsl:with-param name="key">name</xsl:with-param> | 344 | <xsl:with-param name="key">name</xsl:with-param> | ||
345 | <xsl:with-param name="cache">nameCache</xsl:with-param> | 345 | <xsl:with-param name="cache">nameCache</xsl:with-param> | ||
346 | </xsl:call-template> | 346 | </xsl:call-template> | ||
347 | } | 347 | } | ||
348 | 348 | | |||
349 | <xsl:value-of select="$className"/><xsl:text> </xsl:text><xsl:value-of select="$className"/>::retrieveByNameOrCreate( const <xsl:value-of select="column[@name = 'name']/@type"/> &name) | 349 | <xsl:value-of select="$className"/><xsl:text> </xsl:text><xsl:value-of select="$className"/>::retrieveByNameOrCreate( const <xsl:value-of select="column[@name = 'name']/@type"/> &name) | ||
350 | { | 350 | { | ||
351 | static QMutex lock; | 351 | static QMutex lock; | ||
352 | QMutexLocker locker(&lock); | ||||
352 | auto rv = retrieveByName(name); | 353 | auto rv = retrieveByName(name); | ||
353 | if (rv.isValid()) { | 354 | if (rv.isValid()) { | ||
354 | return rv; | 355 | return rv; | ||
355 | } | 356 | } | ||
356 | 357 | | |||
357 | if (lock.tryLock()) { | | |||
358 | rv.setName(name); | 358 | rv.setName(name); | ||
359 | if (!rv.insert()) { | 359 | if (!rv.insert()) { | ||
360 | lock.unlock(); | | |||
361 | return <xsl:value-of select="$className"/>(); | 360 | return <xsl:value-of select="$className"/>(); | ||
362 | } | 361 | } | ||
363 | 362 | | |||
364 | if (Private::cacheEnabled) { | 363 | if (Private::cacheEnabled) { | ||
365 | Private::addToCache(rv); | 364 | Private::addToCache(rv); | ||
366 | } | 365 | } | ||
367 | lock.unlock(); | | |||
368 | return rv; | 366 | return rv; | ||
369 | } | 367 | } | ||
370 | | ||||
371 | lock.lock(); | | |||
372 | lock.unlock(); | | |||
373 | return retrieveByName(name); | | |||
374 | } | | |||
375 | </xsl:if> | 368 | </xsl:if> | ||
376 | 369 | | |||
377 | <xsl:if test="column[@name = 'name'] and $className = 'PartType'"> | 370 | <xsl:if test="column[@name = 'name'] and $className = 'PartType'"> | ||
378 | <xsl:text>PartType PartType::retrieveByFQName( const QString & ns, const QString & name )</xsl:text> | 371 | <xsl:text>PartType PartType::retrieveByFQName( const QString & ns, const QString & name )</xsl:text> | ||
379 | { | 372 | { | ||
380 | const QString fqname = ns + QLatin1Char(':') + name; | 373 | const QString fqname = ns + QLatin1Char(':') + name; | ||
381 | <xsl:call-template name="data-retrieval"> | 374 | <xsl:call-template name="data-retrieval"> | ||
382 | <xsl:with-param name="key">ns</xsl:with-param> | 375 | <xsl:with-param name="key">ns</xsl:with-param> | ||
383 | <xsl:with-param name="key2">name</xsl:with-param> | 376 | <xsl:with-param name="key2">name</xsl:with-param> | ||
384 | <xsl:with-param name="lookupKey">fqname</xsl:with-param> | 377 | <xsl:with-param name="lookupKey">fqname</xsl:with-param> | ||
385 | <xsl:with-param name="cache">nameCache</xsl:with-param> | 378 | <xsl:with-param name="cache">nameCache</xsl:with-param> | ||
386 | </xsl:call-template> | 379 | </xsl:call-template> | ||
387 | } | 380 | } | ||
388 | 381 | | |||
389 | <xsl:text>PartType PartType::retrieveByFQNameOrCreate( const QString & ns, const QString & name )</xsl:text> | 382 | <xsl:text>PartType PartType::retrieveByFQNameOrCreate( const QString & ns, const QString & name )</xsl:text> | ||
390 | { | 383 | { | ||
391 | static QMutex lock; | 384 | static QMutex lock; | ||
385 | QMutexLocker locker(&lock); | ||||
392 | PartType rv = retrieveByFQName(ns, name); | 386 | PartType rv = retrieveByFQName(ns, name); | ||
393 | if (rv.isValid()) { | 387 | if (rv.isValid()) { | ||
394 | return rv; | 388 | return rv; | ||
395 | } | 389 | } | ||
396 | 390 | | |||
397 | if (lock.tryLock()) { | | |||
398 | rv.setNs(ns); | 391 | rv.setNs(ns); | ||
399 | rv.setName(name); | 392 | rv.setName(name); | ||
400 | if (!rv.insert()) { | 393 | if (!rv.insert()) { | ||
401 | lock.unlock(); | | |||
402 | return PartType(); | 394 | return PartType(); | ||
403 | } | 395 | } | ||
404 | 396 | | |||
405 | if (Private::cacheEnabled) { | 397 | if (Private::cacheEnabled) { | ||
406 | Private::addToCache(rv); | 398 | Private::addToCache(rv); | ||
407 | } | 399 | } | ||
408 | lock.unlock(); | | |||
409 | return rv; | 400 | return rv; | ||
410 | } | 401 | } | ||
411 | | ||||
412 | lock.lock(); | | |||
413 | lock.unlock(); | | |||
414 | return retrieveByFQName(ns, name); | | |||
415 | } | | |||
416 | </xsl:if> | 402 | </xsl:if> | ||
417 | 403 | | |||
418 | QVector<<xsl:value-of select="$className"/>> <xsl:value-of select="$className"/>::retrieveAll() | 404 | QVector<<xsl:value-of select="$className"/>> <xsl:value-of select="$className"/>::retrieveAll() | ||
419 | { | 405 | { | ||
420 | QSqlDatabase db = DataStore::self()->database(); | 406 | QSqlDatabase db = DataStore::self()->database(); | ||
421 | if ( !db.isOpen() ) | 407 | if ( !db.isOpen() ) | ||
422 | return QVector<<xsl:value-of select="$className"/>>(); | 408 | return QVector<<xsl:value-of select="$className"/>>(); | ||
423 | 409 | | |||
▲ Show 20 Lines • Show All 346 Lines • Show Last 20 Lines |